<?xml version="1.0" encoding="utf-8"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><language>en</language><title>Blog posts by Ha Bui</title> <link>https://world.optimizely.com/blogs/ha-bui/</link><description></description><ttl>60</ttl><generator>Optimizely World</generator><item> <title>Global Notification</title>            <link>https://world.optimizely.com/blogs/ha-bui/dates/20222/12/global-notification/</link>            <description>&lt;p&gt;Great day everyone!&lt;/p&gt;
&lt;p&gt;If you familiar with &lt;a href=&quot;https://docs.developers.optimizely.com/content-cloud/v12.0.0-content-cloud/docs/using-notifications&quot;&gt;Using user notifications&lt;/a&gt;, I&#39;m glad to introduce the new &lt;em&gt;global notification&lt;/em&gt; UI. Notifications are moved to the navigation bar, so it is no longer only for the CMS UI.&lt;/p&gt;
&lt;p&gt;You can get the new release version here: &lt;a href=&quot;https://nuget.optimizely.com/package/?id=EPiServer.CMS&amp;amp;amp;amp;v=12.17.0&quot;&gt;EPiServer.CMS 12.17.0 (optimizely.com)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The new UI has the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A bell icon, moved to the top navigation bar&lt;br /&gt;&lt;img src=&quot;/link/b5a45818ed5045a38853ae62d327b132.aspx&quot; /&gt;&lt;/li&gt;
&lt;li&gt;An indicator for new or unread messages&lt;/li&gt;
&lt;li&gt;A notification panel&lt;br /&gt;&lt;img src=&quot;/link/763563404fbd4c95999cb876bf6b0c20.aspx&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When you click an unread notification, it is marked as read. Click &lt;strong&gt;Mark as Read&lt;/strong&gt; to change all unread messages statuses to read.&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;note&quot;&gt;
&lt;p&gt;&lt;strong&gt;Notes&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If the notication contains &lt;strong&gt;content uri&lt;/strong&gt; then you can click on the notification to go to the link.&lt;/li&gt;
&lt;li&gt;The list is &lt;em&gt;lazy load on demand&lt;/em&gt;; just scoll to see more.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;p&gt;Global notification also exposes broadcastchannel API (&lt;em&gt;/global/notification/message&lt;/em&gt;), Just join it and you can use the pub/sub pattern.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.developers.optimizely.com/content-cloud/v11.0.0-content-cloud/docs/message-service-pool&quot;&gt;MessageHub.js&lt;/a&gt; already has it inside:&lt;/p&gt;
&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code&gt;this._globalNotificationBroadcaster = new BroadcastChannel(this.statusTopic.globalnotificationmessage);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;See also &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API&quot;&gt;Broadcast Channel API - Web APIs | MDN (mozilla.org)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Last but not least: all changes for UI are on the client side to pub/sub message. Nothing changes for the server side. Isn&#39;t that good news?&lt;/p&gt;
&lt;p&gt;Thank for reading!&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/ha-bui/dates/20222/12/global-notification/</guid>            <pubDate>Thu, 16 Feb 2023 09:12:27 GMT</pubDate>           <category>Blog post</category></item><item> <title>How to integrate TinyMCE cloud plugin with EPiServer</title>            <link>https://world.optimizely.com/blogs/ha-bui/dates/20222/8/how-to-integrate-tinymce-cloud-plugin-with-episerver/</link>            <description>&lt;p&gt;Hi everyone,&lt;/p&gt;
&lt;p&gt;Recently, we got many questions regarding How to integrate the TinyMCE external cloud plugin (SpellCheckerPro for instance) with EPiServer CMS and EPiServer.CMS.TinyMCE add-on.&lt;/p&gt;
&lt;p&gt;Did you try that before? And got a headache with kind of below errors?&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/61ebaf06b52c4230bfde03b675ff5a46.aspx&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Don&#39;t worry! No more headaches&lt;span class=&quot;f1bfdkwi&amp;#32;regular_ft444xb&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;with the recent release of EPiServer TinyMCE!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;EPiServer.CMS.TinyMce 2.13.8 (NET FRAMEWORK) (&lt;a href=&quot;https://nuget.optimizely.com/package/?id=EPiServer.CMS.TinyMce&amp;amp;amp;v=2.13.8&quot;&gt;EPiServer.CMS.TinyMce 2.13.8&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For the SpellCheckerPro plugin then few lines of the configuration below will help you easy to integrate with EPiServer CMS:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Prerequisites&lt;br /&gt;TinyMCE cloud API Key&lt;/li&gt;
&lt;li&gt;EPiServer TinyMCE Initialization&lt;br /&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code&gt;context.Services.Configure&amp;lt;TinyMceConfiguration&amp;gt;(config =&amp;gt;
            {
                config.Default()
                    .AddExternalPlugin(&quot;tinymcespellchecker&quot;, &quot;https://cdn.tiny.cloud/1/&amp;lt;YOUR_API_KEY&amp;gt;/tinymce/4.9.11-104/plugins/tinymcespellchecker/plugin.min.js&quot;)
                    .AddEpiserverSupport()
                    .Toolbar(&quot;spellchecker language spellcheckdialog&quot;)
                    .AddSetting(&quot;spellchecker_rpc_url&quot;, &quot;https://spelling.tiny.cloud&quot;)
                    .AddSetting(&quot;spellchecker_api_key&quot;, &quot;&amp;lt;YOUR_API_KEY&amp;gt;&quot;);
            }&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: Because EPiServer CMS TinyMCE is using TinyMCE v4 so please choose the correct version of the SpellCheckerPro plugin. Otherwise, it won&#39;t work as expected!&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;Screenshots&lt;br /&gt;&lt;img src=&quot;/link/3c3b773ce0424d599ee5b6e235a8692f.aspx&quot; /&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Easy right? I hope that helped you!&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/ha-bui/dates/20222/8/how-to-integrate-tinymce-cloud-plugin-with-episerver/</guid>            <pubDate>Wed, 24 Aug 2022 06:45:00 GMT</pubDate>           <category>Blog post</category></item><item> <title>CMS 12 Optimizely CMP Integration UI addon</title>            <link>https://world.optimizely.com/blogs/ha-bui/dates/20222/7/welcome-integration-ui/</link>            <description>&lt;p&gt;Hi everyone, do you know about the great blogpost from &lt;strong&gt;Kate&lt;/strong&gt;: &lt;a href=&quot;/link/8c7807ea45b444048bfeb74b735fadde.aspx&quot;&gt;CMS 12 integration with Welcome&amp;rsquo;s Digital Asset Management Librar (optimizely.com)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If not then I would suggest you please go throught that first to get overview of main purpose and user case of CMS 12 and Welcome DAM integration!&lt;/p&gt;
&lt;p&gt;After reading but you still got struggling about: &lt;strong&gt;How to enable it in your template&lt;/strong&gt;? then you are in right place. Here is detailed instruction for you:&lt;/p&gt;
&lt;h1&gt;Optimizely CMP UI integration&lt;/h1&gt;
&lt;p&gt;This will describes standard setup that you need for a template site in order to able to use Optimizely DAM UI integration packages.&lt;/p&gt;
&lt;h2&gt;Prerequisites&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;EPiServer.CMS.Core 12.8 or later&lt;/li&gt;
&lt;li&gt;EPiServer.CMS.UI 12.9 or later&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Installation&lt;/h2&gt;
&lt;p&gt;Install from command line&lt;/p&gt;
&lt;pre class=&quot;language-powershell&quot;&gt;&lt;code&gt;$ dotnet add package EPiServer.CMS.WelcomeIntegration.UI&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In `Startup.cs` add following line:&lt;/p&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code&gt;services.AddDAMUi();&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Start your site and use!&lt;/p&gt;
&lt;h2&gt;Configuration Options&lt;/h2&gt;
&lt;p&gt;Customize option can be done via `application.json` under `EPiServer\Cms` section, now we are supporting:&lt;/p&gt;
&lt;pre class=&quot;language-markup&quot;&gt;&lt;code&gt;{
  &quot;DAMUi&quot;:{
    &quot;Enabled&quot;:true,
    &quot;Settings&quot;:{
      &quot;Welcome&quot;:{
        &quot;IconClass&quot;:&quot;dijitNoIcon&quot;,
        &quot;AvailableTypes&quot;:&quot;episerver.core.imagedata&quot;,
        &quot;StoreName&quot;:&quot;episervercmsdamcontentcreation&quot;,
        &quot;Endpoint&quot;:&quot;https://cmp.optimizely.com&quot;,
        &quot;PathAndQuery&quot;:&quot;/cloud/library-picker?assetTypes=image&quot;
      }
    }
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;br /&gt;Under &quot;DAMUi&quot;, with Settings options then you can:&lt;br /&gt;1. Change icon class so can use whatever icon you wants (default is &quot;dijitNoIcon&quot;)&lt;br /&gt;2. Change &quot;AvailableTypes&quot; so the new editor command only be added if it is (or inherited from) one of available type. (default is &quot;episerver.core.imagedata&quot; so all properties that allow an image to be added will have the new command)&lt;br /&gt;3. Change store via &quot;StoreName&quot; so that you can customize server side code (with your new store) to add more your business logic into. (default is &quot;episervercmsdamcontentcreation&quot;)&lt;br /&gt;4. Change end point via &quot;Endpoint&quot; so that you can transform the root DAM domain for each environment you have (inte, preprod or prod) (default is &quot;cmp.optimizely.com&quot;)&lt;br /&gt;5. Change path and query so that you can add default filter for the DAM library picker by image, video or all (default is &quot;image&quot;)&lt;/p&gt;
&lt;h2&gt;Screenshots&lt;/h2&gt;
&lt;p&gt;From Optimizely CMP DAM... for ContentArea&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://user-images.githubusercontent.com/32920385/174870027-68cb52a7-bc6f-449d-a06a-3a37675b4711.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;From Optimizely CMP DAM... for ContentReference property with thumbnail editor&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://user-images.githubusercontent.com/32920385/174870358-8122e9ea-effe-4ab9-ac31-addddc54273d.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Popup open when click (Optimizely CMP &lt;em&gt;DAM login is required for the 1st time&lt;/em&gt;)&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://user-images.githubusercontent.com/32920385/174870598-dc28c0a0-8b57-4194-af3c-8a871f6a4a3f.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;After login then next time, library picker will be shown&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://user-images.githubusercontent.com/32920385/174870808-f8138d6b-7749-4e16-b3f5-9f3135554082.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Select your asset then click `Choose`, popup will be closed then content will be saved (thumbnail will display after a while)&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://user-images.githubusercontent.com/32920385/174871228-109af525-689b-4971-b6c5-0d8baba356ea.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Related topics&lt;/h2&gt;
&lt;p&gt;1. &lt;a href=&quot;https://docs.developers.optimizely.com/content-cloud/v12.0.0-content-cloud/docs/configuration&quot;&gt;Configuration&lt;/a&gt;&lt;br /&gt;2.&lt;a href=&quot;https://docs.developers.optimizely.com/content-cloud/v12.0.0-content-cloud/docs/configuring-cms&quot;&gt;EPiServer CMS configuration section&lt;/a&gt;&lt;br /&gt;3.&lt;a href=&quot;https://docs.developers.optimizely.com/content-cloud/v12.0.0-content-cloud/docs/add-ons&quot;&gt;Addon Overview&lt;/a&gt;&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/ha-bui/dates/20222/7/welcome-integration-ui/</guid>            <pubDate>Wed, 06 Jul 2022 09:15:24 GMT</pubDate>           <category>Blog post</category></item><item> <title>Loading indicator whenever view or context is changed</title>            <link>https://world.optimizely.com/blogs/ha-bui/dates/2021/11/loading-indicator-whenever-view-or-context-is-changed/</link>            <description>&lt;p&gt;Hi everyone! As you may know, sometimes the CMS Edit UI can take time to complete loading (depending on network, infrastructure or site data), especially page for edit mode in a complexed page view (such as a Start page).&lt;/p&gt;
&lt;p&gt;Slow loading can occur a&lt;span style=&quot;font-size: 1rem;&quot;&gt;fter an editor clicks Edit on a content page, or changes view or content context, or i&lt;/span&gt;&lt;span style=&quot;font-size: 1rem;&quot;&gt;f new content is requested while still in edit view.&amp;nbsp;&lt;/span&gt;&lt;span&gt;This can confuse and annoy editors when they edit content.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;In CMS UI 12.2.0, we introduced a new &lt;span class=&quot;classLib&quot;&gt;StandableBorderContainer&lt;/span&gt;&amp;nbsp;that should resolve the issues!&lt;/p&gt;
&lt;p&gt;To see the loading indicator in action see &lt;a href=&quot;https://webm.red/view/0I2w.webm&quot;&gt;Video: Loading indicator&lt;/a&gt;.&lt;img src=&quot;/epiui/CMS/~/link/3c6cb0badde44cbab71fc6a6f6eda68a.aspx&quot; alt=&quot;&quot; /&gt;&lt;img src=&quot;/link/72bd09f21e0b426f83c3f85fb3b8cf8f.aspx&quot; width=&quot;960&quot; alt=&quot;&quot; height=&quot;392&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;How to use this?&lt;/h2&gt;
&lt;p&gt;Change &lt;span class=&quot;classLib&quot;&gt;BorderContainer&lt;/span&gt; from your custom view component to &lt;span class=&quot;classLib&quot;&gt;StandableBorderContainer&lt;/span&gt;&lt;b&gt;.&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code&gt;...

var mainContentContainer = new StandableBorderContainer()
  .Add(new ContentPane { PlugInArea = &quot;/episerver/cms/action&quot; }, new BorderSettingsDictionary(BorderContainerRegion.Top))
  .Add(new ContentPane { PlugInArea = &quot;/episerver/cms/maincontent&quot; }, new BorderSettingsDictionary(BorderContainerRegion.Center));
...&lt;/code&gt;&lt;/pre&gt;</description>            <guid>https://world.optimizely.com/blogs/ha-bui/dates/2021/11/loading-indicator-whenever-view-or-context-is-changed/</guid>            <pubDate>Tue, 02 Nov 2021 12:19:48 GMT</pubDate>           <category>Blog post</category></item></channel>
</rss>