...

Which Dojo Topics are published in the Episerver CMS UI?

If you, like me are venturing into the mythical and magical world of dojo-in-episerver-ui, where elfs and wizards rule, you might also find this list useful.

A key element in the Episerver UI are the dojo topic publish/subscribe system that is used to let all the components communicate. When it comes to dojo and Episerver, my skills usually only take me so far that I can get myself into trouble, but rarely out of it, so I'm not going to give a full explanation here, but leave that to someone who truly has studied the dark arts: Grzegorz Wiechec: 
https://gregwiechec.com/2015/08/using-dojo-topic-publish-and-topic-subscribe/.

But, I have learned that you can learn a lot by studying the Episerver UI Sources. They can either be downloaded as a nuget package, or you can (like me) unzip the file /modules/_protected/CMS/CMS.zip and take a look through the ClientResources (hidden below the folder with the current version number). Look for the .uncompressed.js files!

The topics for example are quite powerful as they can both be used to control the UI by sending them out through topic.publish, or you can react to any events going on in the system by setting up eventhandlers with topic.subscribe.

I did a search in files and cleaned up the results a bit to give a nice overview of which topics are published from where that I thought might come in handy to others than myself, so here goes:

asset\command\ChangeContextToSelection
"/epi/shell/context/request", { uri: target.uri }

asset\command\NewFolder
"/epi/cms/action/createlocalasset"

asset\command\TranslateSelectedContent
"/epi/shell/action/changeview", "epi-cms/contentediting/CreateLanguageBranch", null, data

asset\view-model\HierarchicalListViewModel
"/epi/cms/contentdata/childrenchanged", target.parentLink

BackContextHistory
"/epi/shell/context/request", uri, { sender: sender }

command\BackCommand
"/epi/shell/context/request", { uri: this._previousContent.uri }, { trigger: "back", sender: this }

command\DeleteContent
"/epi/cms/action/delete/error"

command\EditImage
"/epi/shell/context/request", { url: returnValue.src }, { forceReload: true }

command\NewContent
"/epi/shell/action/changeview", "epi-cms/contentediting/CreateContent", null, {

command\TogglePreviewMode
"/epi/shell/action/changeview", "view"
"/epi/shell/action/changeview", null

command\ToggleViewSettings
"/epi/cms/action/eyetoggle", this.model.getthis.property)

command\TranslateContent
"/epi/shell/action/changeview", "epi-cms/contentediting/CreateLanguageBranch", null, data

compare\command\CompareSettingsModel
"/epi/shell/action/changeview/updatestate", { viewName: null }
"/epi/shell/action/changeview", this.get"enabled") ? this.get"mode") : null, null, { forceReload: true }

compare\views\CompareView
"/epi/shell/context/request", { uri: uri }, { sender: this }
"/epi/shell/action/changeview", "formedit", null, null, true

compare\views\SideBySideCompareView
"/epi/shell/context/request", { url: url }, {

component\command\ChangeContext
"/epi/shell/context/request", { uri: this.model.uri }, {

component\command\GlobalToolbarCommandProvider
"/epi/layout/pinnable/navigation/toggle"
"/epi/layout/pinnable/tools/toggle"

component\command\SetCommonDraft
"/epi/cms/content/statuschange/", "common-draft", { id: item.contentLink }

component\command\ViewTrash
"/epi/shell/context/request",

component\ContentNavigationTree
"/epi/shell/context/request", { uri: page.uri }, {

component\Versions
"/epi/shell/context/request", { uri: uri }, callerData

content-approval\ApprovalService
"/epi/shell/context/request",

contentediting\AutoSaveButton
"/epi/cms/action/showerror"

contentediting\command\BlockEdit
"/epi/shell/context/request", {

contentediting\command\IgnoreInUseNotification
"/epi/shell/context/request", contextParameters, callerData

contentediting\command\Publish
"/epi/cms/contentdata/childrenchanged", versionAgnosticId

contentediting\command\SendForReview
"/epi/cms/action/disableundoredoactions"

contentediting\command\_ChangeContentStatus
"/epi/shell/context/request", contextParameters, callerData

contentediting\command\_LegacyDialogCommandBase
"/epi/cms/contentdata/updated", {

contentediting\ContentEditingValidator
"/epi/cms/action/showerror"
"/epi/cms/action/showerror"

contentediting\ContentModelServerSync
"beta/contentSaved", result

contentediting\ContentViewModel
"/epi/shell/context/request", contextParameters, { sender: this, contextIdSyncChange: true, trigger: "internal" }
"/epi/shell/context/request", contextParameters, { sender: this, forceReload: true }
"/epi/shell/context/request", contextParameters, { sender: this }
"/epi/cms/content/statuschange/", "common-draft", { id: newVersion.contentLink }
"/epi/shell/context/request", contextParameters, { sender: this }
"/epi/cms/content/statuschange/", status, resolveArgs
"/epi/cms/action/showerror" 

contentediting\CreateContent
"/epi/cms/action/createlocalasset"
"/epi/cms/action/showerror"
"/epi/shell/context/request", {
"/epi/shell/action/changeview/back"
"/epi/cms/action/togglecreatemode", true
"/epi/cms/action/togglecreatemode", false

contentediting\EditingBase
"/epi/layout/pinnable/propertyEditor/show", null

contentediting\editors\model\ContentReferenceListEditorModel
"/epi/shell/context/request", { uri: uri }, { sender: this }

contentediting\EditToolbar
"/epi/cms/action/undo", []
"/epi/cms/action/redo", []

contentediting\OnPageEditing
"/epi/cms/action/switcheditmode", null, { activePropertyOnStartup: property}

contentediting\PageDataController
"/epi/cms/action/disablepreview"
"/epi/cms/action/showerror"
"/epi/shell/action/changeview/updatestate", { viewName: viewName }
"/epi/shell/context/request", contextParameters, callerData

contentediting\viewmodel\DeviceSelectionSettingsModel
"/epi/cms/action/viewsettingvaluechanged", messageData

contentediting\viewmodel\LanguageSettingsModel
"/epi/cms/action/eyetoggle", enabled
"/epi/cms/action/viewsettingvaluechanged", "viewlanguage", value

ContextSynchronizer
"/epi/shell/context/updateRequest", data

notification\viewmodels\NotificationListViewModel
"/epi/shell/context/request", { uri: contextUri }, { sender: this, forceReload: true }

project\ProjectPreviewButton
"/epi/cms/action/viewsettingvaluechanged", "project", projectId

project\ProjectSchedulingDialogViewModel
"/epi/shell/context/request", { uri: item.contentUri }

project\viewmodels\OverviewViewModel
"/epi/shell/context/request", { uri: newProjectUri }, { sender: this }

project\viewmodels\ProjectModeToolbarViewModel
"/epi/shell/context/request", { uri: context.versionAgnosticUri }, { sender: this }
"/epi/shell/context/request", { uri: newProjectUri }, { sender: this }

project\viewmodels\_ProjectViewModel
"/epi/shell/context/request", context, { sender: this }

visitorgroups\command\VisitorGroupViewSettingsModel
"/epi/cms/action/viewsettingvaluechanged", "visitorgroup", this.selectedGroup

widget\Breadcrumb
"/epi/shell/context/request", { uri: content.uri }, { sender: this }

widget\command\CreateContentFromSelector
"/epi/shell/action/changeview", "epi-cms/contentediting/CreateContent", null, {

widget\ContentTreeStoreModel
"/epi/cms/contentdata/childrenchanged", targetItem.contentLink
"/epi/cms/contentdata/childrenchanged", sourceItem.parentLink
"/epi/cms/action/createlocalasset"
"/epi/shell/context/request", { uri: ViewSettings.settings.defaultContext }

widget\ContextualContentForestStoreModel
"/epi/cms/action/createlocalasset", self

widget\SearchBox
"/epi/shell/context/request", [contextParameters, { sender: null }]

widget\viewmodel\TrashViewModel
"/epi/cms/trash/empty", response.extraInformation

widget\ViewSelector
"/epi/cms/action/disablepreview"
"/epi/shell/action/changeview", view.key, null, null, true

widget\ViewSwitchButton
"/epi/cms/action/switcheditmode", null, null, true

widget\_GridWidgetBase
"/epi/shell/context/request", contextParameters, callerData

_SidePanelsToggleMixin
"/epi/layout/pinnable/navigation/toggle", this._isNavigationVisible
"/epi/layout/pinnable/tools/toggle", this._isToolsVisible
"/epi/layout/pinnable/navigation/toggle", false
"/epi/layout/pinnable/tools/toggle", false

Blog Posts

...

Digizuite: Keeping developers in mind when building the addon

I have worked on many different addon's for Episerver over the years - and used many more. One thing that often strikes me is that either an Addon is for editors or it is for developers, but rarely both. With the new Digizuite integration we are trying to give both groups the tools they need.

...

Digizuite DAM for Episerver

Digizuite is a pretty serious DAM player in the enterprise market - and I have been lucky enough to be part of their DAM adventure in Episerver land. In this blog (and most likely several future posts) I will share some of the thoughts and approaches we have taken to make a good integration.

...

Hack-Your-Future Copenhagen - Awesome Concept!

In the center of Copenhagen a team of volunteer IT professionals are teaching groups of passionate, dedicated and talented refugees, asylum seekers and immigrants coding skills, to help them land jobs in an IT industry starving for skilled workers. It's working - and it's an awesome concept!

...

Heading to Helsinki Dev Meetup

Thursday, November 8th I'm really excited to once again have been invited to join the Episerver Developer Meetup in Helsinki!

...

Design Pattern: Tag Pages instead of Categories

Episerver categories is one way to deal with taxonomy on a web site. But often I find that I prefer a simpler, more transparent approach of having Tag Pages replace them. Here's how.

...

FB2PDF - How Abandonware Gets Distributed

A long time ago I did a small weekend project to fix a problem my wife was having with her e-reader. I shared it on my blog and then forgot all about it. Until now, that is.

...

CMS Audit Update - Visitor Groups included

Earlier this year Nicola Ayan released a nice little plugin that I instantly liked, the CMS Audit tool. It's a great way to get an easy overview over what is being used where in your CMS. In a talk about my favorite addons I showed it at Episerver Ascend Copenhagen and straight away got a question from the audience: Can we use this tool to see where visitor groups are being used? Well, now you can.

...

Webcast: Addons In Real Life @ CodeArt

Last week I did a couple of talks at Episerver User Group meetings in Denmark about how I've tweaked my Episerver installation at codeart.dk in order to work as a great blogging platform. I also showcase a few of the addons I'm currently working on. Now I recorded the talk, so if you have a 23 minutes to spare, then grab a coffee and make some popcorn and have a look.

...

Custom Views for an Interface

Ever played around with adding custom views in Episerver CMS? It's a really powerful way to extend the UI. But why does it work when you register your view for a model class, but not for an interface implemented by that model? I had a look and found out.

...

Admin Mode Plugin to Manage Content Type Suggestions

If you have a site with a lot of different content types, it can be a good idea to help Episervers Automatic Content Type suggestion feature along. Here is a basic Admin mode tool - in good old webforms (yes, I washed my hands after I made it) that will let administrators / and super-editors configure exactly which content types to suggest when.

...

Auto Tagging Using Search

You don't always have to go the full AI route to get AI like results. In this blog post I'll describe an approach I've used several times (and for multiple purposes) with pretty decent results. Instead of classification algorithms, deep learning or neural networks I'll just simply query my favorite search engine.

...

Which Dojo Topics are published in the Episerver CMS UI?

If you, like me are venturing into the mythical and magical world of dojo-in-episerver-ui, where elfs and wizards rule, you might also find this list useful.

Post Comments()