<?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 Linh Nguyen</title> <link>https://world.optimizely.com/blogs/linh-nguyen/</link><description></description><ttl>60</ttl><generator>Optimizely World</generator><item> <title>Improve user experience with restriction information</title>            <link>https://world.optimizely.com/blogs/linh-nguyen/dates/2024/3/improve-user-experience-with-restriction-information/</link>            <description>&lt;p&gt;&lt;span&gt;In &lt;/span&gt;&lt;a href=&quot;https://nuget.optimizely.com/package/?id=EPiServer.CMS.UI&amp;amp;amp;amp;amp;amp;amp;v=12.28.0&quot;&gt;EPiServer.CMS.UI 12.28.0&lt;/a&gt;&lt;span&gt;, an improvement for restriction information is added.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Previously the restriction information takes quite a lot of space, especially for big sites with a long list of restricted types. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;This new improvement reduces the space significantly while still gives editors information about restricted types they need to know.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;strong&gt;Before&lt;/strong&gt;:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img src=&quot;/link/8721334056e4478b86ce88bbdfcc4eb1.aspx&quot; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;strong&gt;Now&lt;/strong&gt;:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img src=&quot;/link/58919e9cea13494eb9dc585e8dedf8c0.aspx&quot; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Users can expand the list to view all restricted types, and collapse it if they want.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img src=&quot;/link/edd27fe749474dcea6a1494c30780069.aspx&quot; /&gt;&lt;/span&gt;&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/linh-nguyen/dates/2024/3/improve-user-experience-with-restriction-information/</guid>            <pubDate>Tue, 19 Mar 2024 12:50:16 GMT</pubDate>           <category>Blog post</category></item><item> <title>Create media content types from UI</title>            <link>https://world.optimizely.com/blogs/linh-nguyen/dates/2023/12/create-media-content-types-from-ui/</link>            <description>&lt;p&gt;In &lt;a href=&quot;https://nuget.optimizely.com/package/?id=EPiServer.CMS.UI&amp;amp;v=12.26.0&quot;&gt;CMS UI 12.26.0&lt;/a&gt;, a new feature is made to support creating media content types, similar to how users can create page types and block types.&lt;/p&gt;
&lt;p&gt;Users will need to specify which media type they want to create and which media extensions the content type is going to support.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/bf38be020b37475e9abaf1846d02478a.aspx&quot; width=&quot;1050&quot; height=&quot;478&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The supported media extension list is displayed in Content type page &amp;gt; Settings. For content types created from code, the supported media extension list is readonly.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/b749bb85ec1b406b81c3b38b651fd396.aspx&quot; /&gt;&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/linh-nguyen/dates/2023/12/create-media-content-types-from-ui/</guid>            <pubDate>Tue, 12 Dec 2023 19:50:52 GMT</pubDate>           <category>Blog post</category></item><item> <title>Improve error handling for visitor groups</title>            <link>https://world.optimizely.com/blogs/linh-nguyen/dates/2022/11/improve-error-handling-for-visitor-groups/</link>            <description>&lt;p&gt;In &lt;a href=&quot;https://nuget.optimizely.com/package/?id=EPiServer.CMS.UI&amp;amp;amp;amp;amp;amp;amp;v=12.15.0&quot;&gt;CMS UI 12.15.0&lt;/a&gt; we added several improvements in handling errors for visitor groups.&lt;/p&gt;
&lt;p&gt;The visitor group list and detailed visitor group page will always be loaded. When the list of all visitor group criteria are failed to load (for example, when one of custom visitor group criterion has exceptions in its constructor), the detailed page can still be viewed, even though users will not be able to add criteria to it&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/7f53e08016224f46ac46e7a8b542339d.aspx&quot; width=&quot;626&quot; height=&quot;458&quot; /&gt;&lt;br /&gt;&lt;br /&gt;It informs users in a more friendly way with some technical details when there are errors in visitor group criteria.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/fc3ac21bba0e475fb594d011942df7c5.aspx&quot; width=&quot;745&quot; height=&quot;496&quot; /&gt;&lt;img src=&quot;/link/3afec448515145eba364345d6c73847e.aspx&quot; width=&quot;743&quot; height=&quot;477&quot; /&gt;&lt;img src=&quot;/link/1486e780d6114bd99c7d4dce3de15a1e.aspx&quot; width=&quot;741&quot; height=&quot;407&quot; /&gt;&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/linh-nguyen/dates/2022/11/improve-error-handling-for-visitor-groups/</guid>            <pubDate>Thu, 08 Dec 2022 09:44:49 GMT</pubDate>           <category>Blog post</category></item><item> <title>Improve user experience with ContentArea and ContentReference</title>            <link>https://world.optimizely.com/blogs/linh-nguyen/dates/2021/10/improve-user-experience-with-contentarea-and-contentreference/</link>            <description>&lt;p&gt;In &lt;a href=&quot;https://nuget.optimizely.com/package/?id=EPiServer.CMS.UI&amp;amp;amp;amp;amp;amp;amp;v=12.1.0&quot;&gt;EPiServer.CMS.UI 12.1.0&lt;/a&gt;, several user experience improvements were made.&lt;/p&gt;
&lt;h2&gt;Easily navigate to the selected item in ContentReference properties&lt;/h2&gt;
&lt;p&gt;The &lt;strong&gt;Edit/View&lt;/strong&gt; command is added to the selected item, so now users can easily go to that item. If the selected item is a block, it also has the &lt;strong&gt;Quick Edit&lt;/strong&gt; command.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/b6b23a409fad4fdaaf978f02bdd306d2.aspx&quot; class=&quot;imageborder&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;Edit/View&lt;/strong&gt; command is available even if the ContentReference property is readonly&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/0e05073712d54e2e80604bf0b99687d1.aspx&quot; width=&quot;730&quot; height=&quot;172&quot; class=&quot;imageborder&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Display restriction information for ContentReference and ContentArea&lt;/h2&gt;
&lt;p&gt;You can see which content types you are allowed or disallowed to add to the current ContentArea or ContentReference, the same way ContentReferenceList has.&lt;/p&gt;
&lt;p&gt;The old message is removed when there is no restriction.&lt;br /&gt;&quot;&lt;strong&gt;You can add these content types&lt;/strong&gt;&lt;br /&gt;All&quot;&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;/link/0df7a4d4194b49a392c8ce36b1ed5660.aspx&quot; class=&quot;imageborder&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Change button text from ... to Select [Type]&lt;/h2&gt;
&lt;p&gt;The button text now explicitly indicates which content type you can select.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/f14a1db66b974863b84384ba67e296bf.aspx&quot; class=&quot;imageborder&quot; /&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Widen the input field for ContentReference properties&lt;/h2&gt;
&lt;p&gt;ContentReference input field becomes wider. Currently it only applies for main content area. In dialogs, it still keeps the old length.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/linh-nguyen/dates/2021/10/improve-user-experience-with-contentarea-and-contentreference/</guid>            <pubDate>Wed, 17 Nov 2021 19:29:29 GMT</pubDate>           <category>Blog post</category></item><item> <title>Move inline block edit from Labs.BlockEnhancements to CMS UI</title>            <link>https://world.optimizely.com/blogs/linh-nguyen/dates/2020/12/move-inline-block-edit-from-labs-blockenhancements-to-cms-ui/</link>            <description>&lt;p&gt;Features in EPiServer.Labs.BlockEnhancements have been used and appreciated by many users. The most common feature - inline editing, now becomes a part of the product and will be available from &lt;a href=&quot;https://nuget.episerver.com/package/?id=EPiServer.CMS.UI&amp;amp;amp;amp;v=11.32.0&quot;&gt;CMS UI 11.32.0&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Inline Edit&lt;/h2&gt;
&lt;p&gt;Using the &lt;strong&gt;Quick Edit&lt;/strong&gt; command from the context menu, editors can edit blocks without changing the current content context. The command is available in Forms View, On-Page Edit and the assets pane.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/d98628f585cc4da1af0d00f4c9642a43.aspx&quot; alt=&quot;inline&amp;#32;edit.gif&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The command opens a dialog box with an editable block form. Editors can edit blocks the same way as when switching to blocks editing context.&lt;/p&gt;
&lt;p&gt;By default, the &lt;span class=&quot;classLib&quot;&gt;Name&lt;/span&gt;, &lt;span class=&quot;classLib&quot;&gt;Categories&lt;/span&gt; properties and the &lt;span class=&quot;classLib&quot;&gt;Setting&lt;/span&gt; tab are hidden. This&amp;nbsp;&lt;a href=&quot;/link/be391fd4c2f840dcae1deb646ff2a413.aspx&quot;&gt;developer guide topic&lt;/a&gt;&amp;nbsp;shows how to enable them with InlineBlockEditSettings attribute.&lt;/p&gt;
&lt;p&gt;The bottom-left button mirrors the main button in the Publish menu, so it can be &lt;strong&gt;Ready for Review, Ready to Publish, Publish &lt;/strong&gt;or&lt;strong&gt; Publish Changes&lt;/strong&gt;. It helps editors to change the block&#39;s status directly from the inline edit dialog box.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/bcbd768d44fb49cab38d1330eca8f9e9.aspx&quot; width=&quot;907&quot; alt=&quot;image34my.png&quot; height=&quot;628&quot; /&gt;&lt;/p&gt;
&lt;p&gt;For block content types that have properties in more than one tab, those tabs are replaced with sections in the inline edit dialog box. Below is an example of a block type which is configured to show &lt;span class=&quot;classLib&quot;&gt;Name&lt;/span&gt;&amp;nbsp;property and &lt;span class=&quot;classLib&quot;&gt;Setting&lt;/span&gt; tab, and has property in three tabs - &lt;span class=&quot;classLib&quot;&gt;Contact&lt;/span&gt;, &lt;span class=&quot;classLib&quot;&gt;Products&lt;/span&gt; and &lt;span class=&quot;classLib&quot;&gt;Content&lt;/span&gt;.&lt;/p&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code&gt;    [SiteContentType(GUID = &quot;9E7F6DF5-A963-40C4-8683-211C4FA48AE1&quot;)]
    [SiteImageUrl]
    [InlineBlockEditSettings(ShowNameProperty = true, HiddenGroups = &quot;&quot;)]
    public class AdvancedBlock : SiteBlockData
    {
        [Display(Order = 1, GroupName = SystemTabNames.Content)]
        public virtual string Text1 { get; set; }

        [Display(Order = 2, GroupName = SystemTabNames.Content)]
        public virtual string Text2 { get; set; }

        [Display(Order = 1, GroupName = Global.GroupNames.Products)]
        public virtual string Text3 { get; set; }

        [Display(Order = 2, GroupName = Global.GroupNames.Contact)]
        public virtual string Text4 { get; set; }
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;/link/c19ed773f84e492b8de6aec30de7e861.aspx&quot; width=&quot;586&quot; alt=&quot;images5vtv.png&quot; height=&quot;1006&quot; /&gt;&lt;/p&gt;
&lt;div class=&quot;redBox&quot;&gt;&lt;strong&gt;Note&lt;/strong&gt;: For people who use &lt;strong&gt;Labs.BlockEnhancements&lt;/strong&gt; and &lt;strong&gt;Labs.ContentManager&lt;/strong&gt;:&lt;br /&gt;If you have a previous version of EPiServer.Labs.BlockEnhancements installed, you should upgrade to the version &lt;a href=&quot;https://nuget.episerver.com/package/?id=EPiServer.Labs.BlockEnhancements&amp;amp;amp;v=0.10.0&quot;&gt;0.10.0&lt;/a&gt; as it is compatible with CMS UI 11.32.0&lt;br /&gt;Compatible version of Labs.ContentManager to work with CMS UI version 11.32.0 is coming soon.&lt;/div&gt;</description>            <guid>https://world.optimizely.com/blogs/linh-nguyen/dates/2020/12/move-inline-block-edit-from-labs-blockenhancements-to-cms-ui/</guid>            <pubDate>Tue, 19 Jan 2021 07:53:41 GMT</pubDate>           <category>Blog post</category></item><item> <title>Send feedback from UI</title>            <link>https://world.optimizely.com/blogs/linh-nguyen/dates/2020/12/send-feedback-from-ui/</link>            <description>&lt;p&gt;In &lt;a href=&quot;https://nuget.episerver.com/package/?id=EPiServer.CMS.UI&amp;amp;amp;v=11.31.0&quot;&gt;EPiServer.CMS.UI 11.31.0&lt;/a&gt;, a new option &quot;Give Us Feedback&quot; is added to the help menu in the top platform navigation.&lt;/p&gt;
&lt;p&gt;It&#39;s available in CMS, Commerce and Addons that use the platform navigation loaded from the CMS instance.&lt;/p&gt;
&lt;p&gt;Clicking on the option will open the EPiServer Customer Feedback in a new tab where you can add feedback about EPiServer.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/c70f34d935c2408ca42368e38e88ad42.aspx&quot; /&gt;&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/linh-nguyen/dates/2020/12/send-feedback-from-ui/</guid>            <pubDate>Tue, 08 Dec 2020 15:02:04 GMT</pubDate>           <category>Blog post</category></item><item> <title>Improve OPE with client-side rendering (features out of beta in 11.24.0)</title>            <link>https://world.optimizely.com/blogs/linh-nguyen/dates/2020/3/improve-ope-with-client-side-rendering/</link>            <description>&lt;p&gt;Several features to improve the client-side rendering in OPE have been tested with beta customers for a while. With EPiServer.CMS.UI 11.24.0, they have finally dropped the beta tag.&lt;/p&gt;
&lt;p&gt;The features are:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;contentSaved&lt;/strong&gt;: introduced in CMS UI 10.12.0 (&lt;a href=&quot;/link/4552b6ecd7504771b9f3aae5832cb3a6.aspx&quot;&gt;Taking control of client-side rendering in OPE)&lt;/a&gt;&lt;br /&gt;
&lt;p&gt;When a property value has been saved, a message is published on the topic &lt;span class=&quot;classLib&quot;&gt;contentSaved&lt;/span&gt;, together with an object containing the content link to the content that was just updated.&lt;/p&gt;
&lt;p&gt;Now you can listen to this event with:&lt;br /&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;
&lt;pre class=&quot;language-java&quot;&gt;&lt;code&gt;// Wait for the scripts to run so we can use the &#39;epi&#39; global object.
window.addEventListener(&quot;load&quot;, function() {
    epi.subscribe(&quot;contentSaved&quot;, function(event) {
        console.log(&quot;On Page Edited!&quot;);
        console.log(event.contentLink);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The event will look like this:&lt;/p&gt;
&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code&gt;{  
    &quot;contentLink&quot;: &quot;6_164&quot;,
}​&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;epiReady&lt;/strong&gt;: introduced in CMS UI 11.11.0 (&lt;a href=&quot;/link/fab5b0bbe59547c98c873b041c2696fb.aspx&quot;&gt;Routing in a SPA with a working On-Page Editing experience)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The &lt;span class=&quot;classLib&quot;&gt;epiReady&lt;/span&gt; event will be raised as soon as the iframe inside the UI is loaded. It contains information regarding if the current content is editable. In addition to that event, a few properties are set on the global &lt;span class=&quot;classLib&quot;&gt;epi&lt;/span&gt; object that are available in edit view. Those properties are:&lt;br /&gt;
&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code&gt;epi: {
    isEditable: false, // true in edit mode, and false in preview mode
    inEditMode: true,  // true in both edit mode and preview mode
    ready: true  // true if the property isEditable has been initialized        
}​&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span class=&quot;classLib&quot;&gt;isEditable&lt;/span&gt; value will not be correct until the event has been raised. By looking at the &lt;span class=&quot;classLib&quot;&gt;ready&lt;/span&gt; property you will know if the property &lt;span class=&quot;classLib&quot;&gt;isEditable&lt;/span&gt; has been initialized or not.&lt;br /&gt;&lt;br /&gt;Here is a sample of how this event and properties could be used:&lt;/p&gt;
&lt;pre class=&quot;language-javascript&quot;&gt;&lt;code&gt;const context = {
    inEditMode: false,
    isEditable: false
};

// Listen to the `epiReady` event to update the `context` property.
window.addEventListener(&#39;load&#39;, () =&amp;gt; {
    // Expect `epi` to be there after the `load` event. If it&#39;s not then we&#39;re
    // not in any editing context.
    if (!window.epi) {
        return;
    }

    function setContext() {
        // The event only has `isEditable`, but the epi object has both.
        context.inEditMode = window.epi.inEditMode;
        context.isEditable = window.epi.isEditable;
    }

    // Check that ready is an actual true value (not just truthy).
    if (window.epi.ready === true) {
        // `epiReady` already fired.
        setContext();

    // The subscribe method won&#39;t be available in View mode.
    } else if (window.epi.subscribe) {
        // Subscribe if the `epiReady` event hasn&#39;t happened yet.
        window.epi.subscribe(&#39;epiReady&#39;, () =&amp;gt; setContext());
    }
});&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;domUpdated&lt;/strong&gt;: first introduced in CMS.UI 11.2.0 (&lt;a href=&quot;/link/bea7c9750d854be69972f1b705b29d07.aspx&quot;&gt;Taking more control of client-side rendering in OPE 2&lt;/a&gt;). At that time, you needed to tell the OPE view to remap all the overlays on the page by publishing to the &lt;span class=&quot;classLib&quot;&gt;domUpdated&lt;/span&gt; topic like &lt;span class=&quot;classLib&quot;&gt;epi.publish(&quot;beta/domUpdated&quot;)&lt;/span&gt;.&lt;br /&gt;From CMS.UI 11.4.0, you didn&#39;t need to publish to that topic anymore because the overlays automatically get updated. BUT, this feature applied only for beta users.&lt;br /&gt;&lt;br /&gt;From CMS.UI 11.24.0, it will work with all users - when a new element with the attribute &lt;span class=&quot;classLib&quot;&gt;data-epi-edit&lt;/span&gt;, or an existing element change their value to another property name (which makes the DOM changes), the overlays will update themselves automatically.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Related topics&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/link/f80257067ca542288c0b74d4db6ae0c5.aspx&quot;&gt;On-page editing with client-side rendering&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>            <guid>https://world.optimizely.com/blogs/linh-nguyen/dates/2020/3/improve-ope-with-client-side-rendering/</guid>            <pubDate>Tue, 31 Mar 2020 06:46:01 GMT</pubDate>           <category>Blog post</category></item><item> <title>Waste basket enhancements</title>            <link>https://world.optimizely.com/blogs/linh-nguyen/dates/2019/1/waste-basket-improvements/</link>            <description>&lt;p&gt;In the next release of &lt;a href=&quot;https://nuget.episerver.com/package/?id=EPiServer.CMS.UI&amp;amp;v=11.17.0&quot;&gt;CMS UI (11.17.0)&lt;/a&gt;, we will be releasing some enhancements for waste baskets. The enhancements are small, but hopefully they will help editors while working with the waste baskets.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Adding more information about each item&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Before, when you hovered over an item in the trash list, only item name was shown in the tooltip. Now, the tooltip will include item name, id and type.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Support deleting a single item&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You can select a single item from the trash list and choose to delete it permanently. If the selected item has children, those children will also be deleted permanently.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/link/18dfa40c74514d2cbf79501a84390ce3.aspx&quot; alt=&quot;trashbin-singledelete.gif&quot; /&gt;&lt;/p&gt;</description>            <guid>https://world.optimizely.com/blogs/linh-nguyen/dates/2019/1/waste-basket-improvements/</guid>            <pubDate>Fri, 01 Feb 2019 07:35:23 GMT</pubDate>           <category>Blog post</category></item></channel>
</rss>