Blog posts by Khanh Nguyen Duy2021-01-18T05:31:06.0000000Z/blogs/khanh-nguyen-duy/Optimizely WorldEpiserver World now supports GIF image, and more/blogs/khanh-nguyen-duy/dates/2021/1/episerver-world-now-supports-gif-image-and-more/2021-01-18T05:31:06.0000000Z<h2><strong>1. GIF support for TinyMCE Editor</strong></h2>
<p>Thanks to feedback from you, blogging feature and comment sections now support GIF images. We also upgrade TinyMCE to latest version, that means you can drag and drop multiple images to editor.</p>
<p><img src="/link/604cb35ecdd7490eb2d8868a76339d79.aspx" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<h2><strong>2. Recommendation block is hidden by default</strong></h2>
<p>We also notice that recommendation block on the right corner takes some space so it is incovenient for reader for scan the content. In the past, to hide it you must log in and press [hide] button, which seems intrusive. Hence, we hide it by default and you can click the switch to show it up. It will show up until you switch it off or after the session ends.</p>
<p><img src="/link/3b49f4726ded402396be0da670c1c0d8.aspx" /></p>
<h2><strong>3. Weekly Release Subscription</strong></h2>
<p>You can now follow changes on <a href="/link/bac2c19b2b2b4a6fb3eba23049cdc3d1.aspx">Episerver Releases</a> so you will receive notifications when new Releases is published:</p>
<p><img src="/link/46ba0d447b37468dab7f282ad384142f.aspx" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p><img src="/link/66448c4108fd40bca89cced1ff4da682.aspx" style="display: block; margin-left: auto; margin-right: auto;" /></p>
<p>This is not too much for the site now, but thanks to your comment we improve it day by day. All the comments sent to <a href="mailto:epw@episerver.com">epw@episerver.com</a> are examined and taken under consideration for better user experience. We sincerely appreciate your help and hope to see you in the next blog post :)</p>Allow World blogger to optimize SEO for blog post on World/blogs/khanh-nguyen-duy/dates/2020/12/allow-world-blogger-to-optimize-seo-for-blog-post-on-world/2020-12-15T12:03:21.0000000Z<p>Recently as several improvement on blogging has been carried out on World, we would like to make it further with SEO (Search Engine Optimization). By allow user to enter SEO Description and Thumbnail Image, you will be confident to share a blog post on social media platforms like Facebook, Twitter or it shows up on a Search result of Google.</p>
<figure class="image align-center"><img src="/link/6d659b80700346dd9c195d0de590ed21.aspx" style="display: block; margin-left: auto; margin-right: auto;" />
<figcaption>Fig.1. New settings when creating / editing a blog post</figcaption>
</figure>
<p>After submitting, just inspect element and you can see the whole info:</p>
<figure class="image align-center"><img src="/link/f35825ee8e5d4ceaa06f0e7ac32b926e.aspx" alt="Image 06d32b69-1cc9-49b9-b94e-6d38f3a6f4e6" style="display: block; margin-left: auto; margin-right: auto;" />
<figcaption>Fig.2. New metadata on header</figcaption>
</figure>
<p>Result on Facebook:</p>
<figure class="image align-center"><img src="/link/c535e0a2851f42cea6ef7ea6fa79a073.aspx" alt="Image 06f558b6-cadb-4579-b034-5d84cc493c07" style="display: block; margin-left: auto; margin-right: auto;" />
<figcaption>Fig.3. Preview on Facebook</figcaption>
</figure>
<p>Cheer!</p>Some improvement for blogging on World/blogs/khanh-nguyen-duy/dates/2020/12/some-improvement-for-blogging-on-world/2020-12-09T08:45:30.0000000Z<p>Blogging on World has a long history of development, recently <a href="/link/e4b180b571e5404785153b8d71e9db99.aspx">Image Manager</a> is implemented, we also added some more improvement on this section.</p>
<p>1. Image caption: An image can be wrapped in a style of gray background and deep gray border, and a caption under.</p>
<p><img src="/link/09f352bb3b3c476a93c3afcd5474921a.aspx" width="1098" height="556" style="display: block; margin-left: auto; margin-right: auto; border-width: 1px; border-style: solid;" /></p>
<p>You can add image to the editor by copy + paste / drag and drop / click (+) from Image Manager. Then, select the image and click the Image icon below the Menu bar, then select Caption from openning dialogue:</p>
<figure class="image align-center"><img src="/link/fc71d6315367469988d46686b33eece9.aspx" width="816" height="465" style="display: block; margin-left: auto; margin-right: auto;" />
<figcaption>Fig 2. Example caption</figcaption>
</figure>
<p>A default caption text will display, you can edit it if necessary. Click the Align center icon to make it center.</p>
<p>2. You can delete blog post in the <a href="/link/5e37b120db614d1b8287a3b664f1a9ac.aspx">Blog Manager</a>:</p>
<p><img src="/link/31ecac6440ad46dcade6b3c1c34ded57.aspx" width="1127" alt="" height="315" style="display: block; margin-left: auto; margin-right: auto; border-width: 1px; border-style: solid;" /></p>
<p>You can also do Edit / Delete when viewing a specific post:</p>
<p><img src="/link/2a2324f8d743458aab1845b85a0763c6.aspx" width="724" height="523" style="display: block; margin-left: auto; margin-right: auto; border-width: 1px; border-style: solid;" /></p>
<p>3. We removed Google Recaptcha from Blog feature, only some remains in Forum section like Report or Edit post.</p>
<p>Cheer!</p>Integrating Swagger UI on Episerver World with customized components/blogs/khanh-nguyen-duy/dates/2020/11/integrating-swagger-ui-on-episerver-world-with-customized-components/2020-11-17T10:28:53.0000000Z<p><a href="/link/10fe06c8c54c412aaf5564aeb1159de9.aspx">Documentation section</a> stays for a long time on World, and a new <a href="https://swagger.io/tools/swagger-ui/">Swagger UI</a> panel has been implemented (available soon), for better usage a long with old <a href="/link/2d8d447be1b444eb8945a8a7257947ed.aspx">Swagger UI pages</a>:</p>
<p><img src="/link/59955bb157c64448a82b5779265e9aa7.aspx" /></p>
<p><a href="https://swagger.io/">Swagger.IO</a> provided developer with source code and detailed documentation on setting up developing environment, creating custom plugins and Layout. Therefore, investigating and modifying components is fun.</p>
<p>to set up developing environment, simply open powershell/command prompts at parent directory and run command <span style="color: #000080;"><strong>npm run dev,</strong></span> npm will auto rebuilt after each change on source. I personally use Visual studio code for development.</p>
<p>Swagger UI provided with documentation <a href="https://github.com/swagger-api/swagger-ui/blob/master/docs/customization/custom-layout.md">here</a> to support user uses custom layout but material on deeper interaction with the components seems missing. As a newbie to React and Swagger, I tried several methods including duplicate components from core and import it directly to the <strong>layout.jsx</strong> file within the Standalone layout folder. It seemed to work with several components when some doesn't, as the component has it own initial setup behind the scene. To setup component with initialization we must import those components in layout.jsx and pass it as parameter in return section, which is obstructive.</p>
<p>For secondary approach, I came up with an idea of creating a custom preset called <span style="color: #99cc00;"><strong>WorldPreset </strong></span>and imported to <a href="https://github.com/khanhthietbi/episerver-world-swagger-ui-customized/blob/main/src/core/presets/apis.js"><span style="color: #99cc00;"><strong>apis.js</strong></span></a></p>
<pre class="language-javascript"><code>import BasePreset from "./base"
import WorldPreset from "./world"
import OAS3Plugin from "../plugins/oas3"
// Just the base, for now.
export default function PresetApis() {
return [
BasePreset,
WorldPreset,
OAS3Plugin
]
}</code></pre>
<p>Overriding components are declared in <a href="https://github.com/khanhthietbi/episerver-world-swagger-ui-customized/blob/main/src/core/presets/world.js"><span style="color: #99cc00;"><strong>world.js</strong></span></a> file:</p>
<pre class="language-javascript"><code>import Parameters from "../epiworld/parameters"
import ParameterRow from "../epiworld/parameter-row"
import Responses from "../epiworld/responses"
import Response from "../epiworld/response"
import ModelExample from "../epiworld/model-example"
import Operations from "../epiworld/operations"
import OperationTag from "../epiworld/operation-tag"
export default function() {
let coreComponents = {
components: {
parameters: Parameters,
parameterRow: ParameterRow,
responses: Responses,
response: Response,
modelExample: ModelExample,
operations: Operations,
OperationTag
}
}
return [
coreComponents
]
}
</code></pre>
<p>With this method only particular components will be overriden, whereas the rest remains the same. Custom components are placed under the folder <strong>"<a href="https://github.com/khanhthietbi/episerver-world-swagger-ui-customized/tree/main/src/core/epiworld">epiworld</a>" </strong>at the same level of other <strong>"core" </strong>one. This is to ensure the import command of original source code run well without any modification of directory. For example, customized component <span style="color: #99cc00;"><strong>parameter-row.jsx</strong></span> import <span style="color: #0000ff;"><strong>getParameterSchema from "../../helpers/get-parameter-schema.js"</strong></span> runs out-of-the-box.</p>
<pre class="language-javascript"><code>import React, { Component } from "react"
import { Map, List } from "immutable"
import PropTypes from "prop-types"
import ImPropTypes from "react-immutable-proptypes"
import win from "core/window"
import { getSampleSchema, getExtensions, getCommonExtensions, numberToString, stringify, isEmptyValue } from "core/utils"
import getParameterSchema from "../../helpers/get-parameter-schema.js"
export default class ParameterRow extends Component {
...</code></pre>
<p>However, this method also affected the core bundle. You can see Swagger UI separates code in to 2 files:</p>
<pre class="language-javascript"><code><script src="http://localhost:3200/swagger-ui-bundle.js" charset="UTF-8"> </script>
<script src="http://localhost:3200/swagger-ui-standalone-preset.js" charset="UTF-8"> </script></code></pre>
<p>In case you use swagger-ui in different locations and purposes, I recommend pack all you custom code in a swagger plugin instead, it will be built to <span style="color: #99cc00;"><strong>swagger-ui-standalone-preset.js</strong></span></p>
<p>So that, I mimicked the TopBar plugin by create a new one. It works nicely, and you can override the default comparison method the same as above:</p>
<pre class="language-javascript"><code>import StandaloneLayout from "./layout"
// Our custom plugin declaration
import CustomPlugin from "plugins/custom"
import ConfigsPlugin from "corePlugins/configs"
// the Standalone preset
export default [
CustomPlugin,
ConfigsPlugin,
() => {
return {
components: { StandaloneLayout }
}
}
]
</code></pre>
<p><em>File: /src/standalone/index.js</em></p>
<p>The components' directories need to be modified as we are on the different location now:</p>
<pre class="language-javascript"><code>import Parameters from "../../core/epiworld/parameters"
import ParameterRow from "../../core/epiworld/parameter-row"
import Responses from "../../core/epiworld/responses"
import Response from "../../core/epiworld/response"
import ModelExample from "../../core/epiworld/model-example"
import Operations from "../../core/epiworld/operations"
import OperationTag from "../../core/epiworld/operation-tag"
export default function() {
// Only overriding components declared here
let coreComponents = {
components: {
parameters: Parameters,
parameterRow: ParameterRow,
responses: Responses,
response: Response,
modelExample: ModelExample,
operations: Operations,
OperationTag
},
// override default filter function
fn: {
opsFilter: (taggedOps, phrase) => {
const phrases = phrase.split(", ")
return taggedOps.filter((val, key) => {
return phrases.some(item => key == item)
})
}
}
}
return [
coreComponents
]
}
</code></pre>
<p>About the custom opsFilter: We would like to override the default filter as it's the <strong>LIKE</strong> comparision instead of <strong>EQUAL</strong> one.</p>
<p>By default, we use Standalone Layout without BaseLayout Component, so we would like to use Operations component. This can be done by getComponent function:</p>
<pre class="language-css"><code>import React from "react"
import PropTypes from "prop-types"
export default class StandaloneLayout extends React.Component {
static propTypes = {
errSelectors: PropTypes.object.isRequired,
errActions: PropTypes.object.isRequired,
specActions: PropTypes.object.isRequired,
specSelectors: PropTypes.object.isRequired,
layoutSelectors: PropTypes.object.isRequired,
layoutActions: PropTypes.object.isRequired,
getComponent: PropTypes.func.isRequired
}
render() {
let { getComponent } = this.props
let Operations = getComponent("operations", true)
return (
<Operations />
)
}
}
</code></pre>
<p>The second parameter (a boolean with value equal <strong>true</strong>) of the function stated that we don't have to penetrade it with parameters (this is mentioned in the instruction file).</p>
<p>With the help of custom components, we can duplicate components from original and put it under "<strong>src/core/components</strong>" folder. Modification works are done here. Sometimes it's complicated when alternating current layout - by changing position of something as they belong to another one. It means that we must modify current behavior and javascript handler. Rendered DOMs are also an obstacle for styling with responsive issues, peculiarly when you reuse default stylesheet of swagger UI for table display.</p>
<p>During the development process, the address runs at address localhost:3200, I tried to link direct script but it seems not to work, I added CORS header but no error shows on Console.</p>
<p>To resolve this problem, I create a batch command to build and copy built files to my project's location:</p>
<pre class="language-csharp"><code>call npm run build
call copy C:\code\swagger-ui\dist\swagger-ui-standalone-preset.js C:\code\DevOps\src\Scripts\Custom\SwaggerPanel\
call copy C:\code\swagger-ui\dist\swagger-ui-standalone-preset.js.map C:\code\DevOps\src\Scripts\Custom\SwaggerPanel\
call copy C:\code\swagger-ui\dist\swagger-ui-bundle.js C:\code\DevOps\src\Scripts\Custom\SwaggerPanel\
call copy C:\code\swagger-ui\dist\swagger-ui-bundle.js.map C:\code\DevOps\src\Scripts\Custom\SwaggerPanel\</code></pre>
<p>Call this script by typing in powershell:</p>
<pre class="language-csharp"><code>./doit.bat</code></pre>
<p>That's it for the modification works, I hope it helps when you have to deal with Swagger UI. The source code was pushed to <strong><a href="https://github.com/khanhthietbi/episerver-world-swagger-ui-customized/">my personal repository</a></strong> so in case you would like to find a reference. </p>
<p>Peace out.</p>New Image Manager For World Blogger/blogs/khanh-nguyen-duy/dates/2020/11/image-manager-for-world-blogger/2020-11-12T02:38:38.0000000Z<p><span>Following feedback from bloggers on World, we think it is about time to implement a feature to support user manage their uploaded images. Every time you paste or drag & drop an image to TinyMCE Editor, the image will appear on <strong>Image List</strong> under the editor. The image will be visible there even when you start a new blog post or edit the old one.</span></p>
<p><span><img src="/link/c0cea3fe5aac4f309171aa23a03e503e.aspx" /></span></p>
<p><strong>How to use:</strong></p>
<ul>
<li><span>Click the image to view the image in full-screen mode</span></li>
<li><span>Click + to insert an image to the current cursor's position in the editor</span></li>
<li><span>Click - to delete an image, <span style="text-decoration: line-through;">it will delete the image regardless of where you used them (</span></span><span style="text-decoration: line-through;"><span style="color: #ff6600; text-decoration: line-through;"><strong>use with caution</strong></span>)</span><span><br /> <br /><img src="/link/c8d1a5fd7ad64e3fb56ff7f173519d02.aspx" /></span></li>
</ul>
<p><span>Update: an alert will display to nofity user of current image's status:</span></p>
<p><span><img src="/link/3eea5571a12749a2934a2adbabc08865.aspx" /></span></p>
<p><strong>Note:</strong></p>
<ul>
<li><span style="text-decoration: line-through;">Old pictures <strong>will not</strong> display here as we changed the location to store new images.</span> Update: old images are fully migarted.</li>
<li><span>For some browser, when user right-click on an image and select copy image, it might copy the URL as well. The editor treats the image as an external image, hence it will not appear on the </span><strong><span>Image list</span></strong><span>. If you intend to reuse the image, just download it to your computer and drag-and-drop it to the editor. It will work as well.</span></li>
<li><span>Other image formats will be automatically converted to jpg as well.</span></li>
</ul>
<p>Cheers!</p>Episerver World's DXP deployment flow (tagging based)/blogs/khanh-nguyen-duy/dates/2020/5/some-practice-research-on-episerver-world-deployment-process/2020-05-29T10:34:24.0000000Z<p class="text-red"><strong>TL,DR:</strong> Deployment process for specific environment using git tagging syntax for automation and easy tracking.</p>
<p>Currently we saw some blog posts related to DXP, as Episerver World team also use it as a service as well, we would like to quick mention some customization and practice that we have done a long the way.</p>
<p>Like many others take advantage of Azure Devops, we use it for smooth flow from development to deployment.</p>
<p>Due to specific requirement and work-flow, everyone has his own way to make it work properly. As our team is small and sometimes we would like to test things on different environments, we rely on tags to deploy and track issues.</p>
<p class="text-center"><img src="/link/b57ff5736e8046b8ac1748d479a220f1.aspx" /></p>
<p>Based on tag feature, via Pinelines here:</p>
<p class="text-center"><img src="/link/9eb9c6774429471581600c3eae5a857a.aspx" /></p>
<p>we create an YAML to track each time when a tag is pushed to a commit (via Git client tool or Visual Studio), the automatic tasks like build, publish and related one will be triggered and executed:</p>
<pre class="language-csharp"><code>trigger:
tags:
include:
- inte.a.*</code></pre>
<p>After a build, we would like to track current version of deployment on our web app, so we write it somewhere so we can visit it later in case of investigation for issues.</p>
<p class="informationBox"><strong>* Note:</strong> In this example the file "currentVersion.html" must be created and included in the project first. If we create new file here, it won't be included in the package afterward for tasks of build and publish.</p>
<pre class="language-csharp"><code>- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
$tags = git tag --sort=-creatordate
$tag = $tags[0]
Write-Host "##vso[build.addbuildtag]$tag"
Set-Content $(Build.SourcesDirectory)/currentVersion.html $tag</code></pre>
<p>The $tag is the latest one pushed to git source. Besides, we use <strong>Write-Host</strong> command to write down current tag that trigger next phase's Releases (config below). When some things went wrong and we would like to investigate problem, Paas portal Trouble Shooting tab might come in handy:</p>
<p class="text-center"><img src="/link/bb46442b64a04ae7be4e8bd82651cff9.aspx" /></p>
<p>Then we check the current tag by visiting <strong>Web-app-url/currentVersion.html</strong> to detect which version is currently online, and double check with Repos \ Tags for source code:</p>
<p class="text-center"><img src="/link/6ac7be96b231419d8a5dcba558298688.aspx" /></p>
<p class="text-center">From the pipeline you can see information of build include commit's comment and tag:</p>
<p class="text-center"><img src="/link/6f1b8fba38b147c0b6cfbb8abd3d46c5.aspx" alt="imagetbwji.png" /></p>
<p class="informationBox"><strong>* Note:</strong> YAML changes must be checked to master branch, by checking in or via azure devops portal. Creating YAML file in other branches won't trigger auto tasks that we defined within. Moreover, git's history of creation of YAML files are unable to overwritten by a git client tool so it will create new check-in each time you modify the content. We must take trials and errors, even it makes our git tree not so nice looking.</p>
<p>That's it for YAML! After we're done with the Pipelines, coming up next is the Releases section for tasks of deployment:</p>
<p class="text-center"><img src="/link/54d74b87b8b6485ab26855d20738db82.aspx" /></p>
<p>As mentioned above, by command <strong>Write-Host</strong> to trigger Releases, we also need to declare it in the artifact section:</p>
<p class="text-center"><img src="/link/08de102b0979449aa923be4f38777d02.aspx" /></p>
<p>At first I tried build tags input on the right but it seems not to work (still not figure it out why). Declare using build branch works without any issue. You can see from screen-shot the release name and tag of current release. Same trackdown as Pipeline tag above.</p>
<p class="text-center"><img src="/link/091f3d9c350a44c8aa55b54b4f0271ae.aspx" alt="imagei2s8p.png" /></p>
<p>And finally, depends on requirement we got stages, tasks should be done for the deployment, with the support of <a href="/link/eb85a23d0c1843aaa36f121668e1059e.aspx">EpiCloud PowerShell Module</a>:</p>
<p class="text-center"><img src="/link/badf541659fd4dd8be253a3a4b80503b.aspx" /></p>
<p>Illustrated above is our old work flow as in the past, some processes need to be done manually or rely on third party apps. At the moment when <a href="/link/cecd04dddeea47f89a14d7f163913728.aspx">Deploy API</a> is available, we don't have to use them any more.</p>
<p>And voila, that's all for our process! It might work or might not applicable for your work-flow. However, we hope it can provide with some information and ideas when you are on duty for this one.</p>Coming up next for Episerver World update/blogs/khanh-nguyen-duy/dates/2020/5/coming-up-next-for-episerver-world-update/2020-05-26T04:45:27.0000000Z<p>As you can see there're some improvement within Episerver World today. We integrated zoom in function so each time you see a well detailed image just click it and you will see the full width image:</p>
<p class="text-center"><img src="/link/58a4aac6a24643f98dc13a9086407055.aspx" /></p>
<p>Just click "X" button or click/tap on image again to back to normal view. This behavior aims for convenience of user on both mobile and desktop.</p>
<p>A long with it is Subscribe function for blog post:</p>
<p class="text-center"><img src="/link/38831a7202484b49834d9782aa1925f9.aspx" /></p>
<p>Last but not least is tagging feature is updated with other products of Episerver not limited to CMS, Commerce and Find as before:</p>
<p class="text-center"><img src="/link/d12d2afb76a547c0b2978ad7605cba7e.aspx" /></p>
<p>We also upgrade Release Notes page but I will hold back until it's available :).</p>Episerver Vietnam is on the go!/blogs/khanh-nguyen-duy/dates/2019/10/episerver-vietnam-contest-is-on-the-go/2019-10-24T18:14:42.0000000Z<p>Currently Episerver Vietnam shares a picture album of "Episerver is on every road you take". </p>
<p>Wweee X-Team are not far from the right track as little snippet below: </p>
<div class="px-32 py-32 mx-32 my-32 bg-dark text-white">
<div>var xTeam = new string[]{ "E", "P", "I", "S", "E", "R", "V", "E", "R" };</div>
<div>FB.URL = "<a href="https://www.facebook.com/episervervietnam/photos/a.2224871554285504/2224872190952107/?type=1&amp;amp;amp;theater">https://www.facebook.com/episervervietnam/photos/a.2224871554285504/2224872190952107/?type=1&theater</a>";</div>
<div>FB.Action = youLikeIt ? Like(xTeam) : Share(xTeam);</div>
<div>FB.Msg = "Thanks, you're awesome!";</div>
</div>
<p>Behind the scenes:</p>
<p><img src="/link/ea9052f959aa4918ad96218e1a862d10.aspx" /></p>
<p><em>SS01. The whole crew</em></p>
<p><em></em></p>
<p><img src="/link/1b6f24b419ea4aff91d103b534628868.aspx" /></p>
<p><em>SS02.The X-Team's panorama </em></p>
<p><img src="/link/fd2b6246a0e64f88a600e2dc7247ed61.aspx" /></p>
<p><em>SS03. The wanderlust.</em></p>
<p>Cheer!</p>Migration Process is done on World CRP System/blogs/khanh-nguyen-duy/dates/2019/10/migration-process-is-happening-on-world-crp-system/2019-10-14T08:36:01.0000000Z<p>Update: We are happy to announce the migration process is done on World. Cheer!</p>
<p>====</p>
<p>Recently we found a critical bug within our CRP system, as we're fixing this we must migrate all the old data including Rating and Votes to the new one. During the process, your contribution point might vary in large amount. So if you find yours is not quite right at the moment, it's normal as it's still processing. All will be back to normal after the whole thing's done.</p>Tagging feature for World's forum/blogs/khanh-nguyen-duy/dates/2019/9/tagging-feature-for-worlds-forum/2019-09-10T12:33:18.0000000Z<p>Recently we have developed new tag system to make it more convenient for you when looking around for related topics. As you create new topic, don't forget to add tags by input several keywords in the input field. Currently we add tags with newer versions for Episerver CMS, Episerver Commerce and Episerver Find.</p>
<p><img src="/link/5adb0052dc1447df9f062c6507c18db4.aspx" /></p>
<p>The tag will be displayed at several places like children forums, latest forum posts, forum filtering page, etc.</p>
<p><img src="/link/7f8badd93e844da29fae98b321779866.aspx" /></p>
<p>Each time you click on a tag it will display the topics with that tag:</p>
<p><img src="/link/1a91f07b2e114460ac2178b0287e6229.aspx" /></p>
<p>At the moment we're supporting tags for limited products and content. Possibly we can apply it to related content like Release notes, documentations, you named it.</p>
<p>All comments are highly appreciated as we would like to improve the forum gradually for you.</p>
<p>All the best.</p>New updates for Episerver World's Forum/blogs/khanh-nguyen-duy/dates/2019/5/new-updates-for-episerver-worlds-forum/2019-05-23T06:11:01.0000000Z<p>Back to the time when GDPR came into active, we already removed the Quotes feature within our forum.</p>
<p>As an alternative, we implemented a new comment feature for you to improve user experience.</p>
<p>The new <strong>comment feature </strong>enables you to comment on thread, posts; make related content gathers together in the same place.</p>
<p align="center"><img style="border: 1px solid lightgray;" src="/link/4090e344bfe849c1b661dbe59424d533.aspx" width="956" height="511" /></p>
<p>We hope this helps you better when you need to clarify or discuss further within specific points without making it off-topic. Along with it, the new design was also applied so you might feel it stranger a little at first.</p>
<p>Best!</p>Episerver World's Authentication System is now moving to Azure/blogs/khanh-nguyen-duy/dates/2018/12/episerver-world-authentication-system-is-moving-to-azure-ad-b2c/2018-12-20T04:30:08.0000000Z<p>As Episerver World applies new technologies gradually, we've moved the authentication system to Azure portal. So you may say today Episerver World is "partly cloudy".</p>
<p>As a part of migration process, a strong password policy must be used for every account. Hence, we require you small steps to reset your credentials at first.</p>
<p>Please follow specific steps below:</p>
<p>1. Click Login as usual</p>
<p><img src="/link/3f28d72fd5394f8eb5722a718ed89d0f.aspx" /></p>
<p>2. You will be redirected to Microsoft login portal, we put an message there to alert you to reset your credentials.</p>
<p><img src="/link/9d151e7e76634f1db3352d6a6dee8837.aspx" /></p>
<p>Click <strong>Reset password? </strong>link to continue.</p>
<p>3. Fill in with your registered email and press Send verification code:</p>
<p><img src="/link/db8ff01397d14c32aa7a51f790bb2dbe.aspx" /></p>
<p>An email will be sent to your mailbox, paste it to Verification code input field and click Verify code:</p>
<p><img src="/link/d1d50e1a1c344d2cbc85d97615b024dc.aspx" /></p>
<p>5. Press continue</p>
<p><img src="/link/1c419880df3d4a64ab20ed72f23377b9.aspx" /></p>
<p>6. Select your password, there are several policies for security reason:</p>
<p><img src="/link/dd59df00df0e490c997bacb06584732d.aspx" /></p>
<p>Press continue and you are ready to go!</p>
<p>Sometimes it might require you to re-login afterward. So please go ahead and stay happy. If you have any issue logging-in just let us know by emailing <a href="mailto:epw@episerver.com">epw@episerver.com</a>. Cheer!</p>Subscription feature for Episerver NuGet site/blogs/khanh-nguyen-duy/dates/2018/7/subscription-feature-for-episerver-nuget-site/2018-07-11T09:14:01.0000000Z<p>Recently as we have received many requests on Subscription feature and a survey was carried out, today we got the subscription feature available for you. Each package page has 2 options for you to:</p>
<ul>
<li>Receive update immediately when new version is available.</li>
<li>Receive weekly newsletter for all packages' change within last week (includes brand-new packages).</li>
</ul>
<p>To unsubscribe, simple click the button again.</p>
<p class="text-center"><img alt="Image UnsubscribeGuidance.png" src="/link/d2935aa583cb457b8f8401d322c8eb15.aspx" /></p>
<p>You will receive update via email:</p>
<p>- Single package update:</p>
<p class="text-center"><img alt="Image Clipboard02.png" src="/link/5928a7fc2d68447a90080729cf8fb72f.aspx" /></p>
<p>- Weekly newsletter update:</p>
<p class="text-center"><img alt="Image Screenshot_3.png" src="/link/9f6e8755df154efe8341053d45a13e08.aspx" /></p>
<p>That's it. I hope this feature helps you more on the long way. If you have comments or idea don't hesitate to leave it in the comment section or send email to <a href="mailto:epw@episerver.com">epw@episerver.com</a> / <a href="mailto:khanh.nguyen@episerver.com">khanh.nguyen@episerver.com</a>.</p>
<p>Cheer!</p>Episerver Nuget site up-to-date changes/blogs/khanh-nguyen-duy/dates/2018/5/episerver-nuget-site-up-to-date-changes/2018-05-22T07:22:41.0000000Z<p>Hi guys, I hope you are all doing well today :) </p>
<p>Recently, <a href="https://nuget.episerver.com">Episerver Nuget site</a> made several major changes for new CMS 11, Bootstrap 4.1 and Nuget Server 2.14, as long as security update for the whole site. The old design seems legacy and not so user-friendly so that an UI improvement was carried out with responsive support.</p>
<p class="text-center"><img alt="Image ss4.jpg" src="/link/06bc2b3a070f4aa794e42c39c953d57a.aspx" /></p>
<p> Package Details page allow you to view more information and also provide with manual download:</p>
<p class="text-center"><img alt="Image ss2.jpg" src="/link/5955d75a05b94f02be7d7fd15e8bcc79.aspx" /></p>
<p>There is additional information for Version download count and total download. Before <strong>Mar 18th 2018</strong>, we didn't separate version download count for each version, so the count in the past reserved as <strong>Previous</strong> and we also have single version count after that point of time.</p>
<p>We hope that the improvement above build up better user experience for you when you get along with Episerver framework and related packages.</p>
<p>As always, any suggestion or feedback please send to <a href="mailto:epw@episerver.com">epw@episerver.com</a> or mine as <a href="mailto:khanh.nguyen@episerver.com">khanh.nguyen@episerver.com</a> </p>
<p>P/S: There are several Easter eggs within the site. Hope you find it interesting and have fun :)</p>What's new for Episerver World today? It's the brand new Hall of Fame!/blogs/khanh-nguyen-duy/dates/2018/3/hall-of-fame-publish/2018-03-22T08:35:10.2630000Z<p>Hi everyone, I hope you are all doing well :)</p>
<p>We developers highly appreciate the value of your contribution to our Community. Following the voting feature and contribution system reconstruction, we would like to announce new Hall of Fame section to celebrate valued contributors for their non-stop dedication. I guess you already noticed it from the <a href="/link/6c9478a8761c41d88dfc32e9ef56e714.aspx">Home page</a>.</p>
<p class="text-center"><img alt="Image halloffame.jpg" src="/link/76b562b09b5d4bd0836a1e8fa2735617.aspx" /></p>
<p>For more information and details please visit <a href="/link/362695626d1a4601a3b960534e207715.aspx">Community Recognition Program</a> page. If you have any suggestion or feedback feel free to leave the comment below, or send us an email at <a href="mailto:epw@episerver.com">epw@episerver.com</a>. We'll try our best to make your comments and feedback count.</p>Episerver World's New Voting Feature is Available Today/blogs/khanh-nguyen-duy/dates/2018/2/episerver-world-new-voting-feature/2018-02-27T04:38:13.0000000Z<p>Hi everyone,</p>
<p>Today we've deployed new voting feature for forum post on Episerver World. The number of upvotes might come in handy in circumstance the post marked as answer doesn't resolve the problem of others who seeking for appropriate answer of the same question. You can upvote / downvote / revote / unvote depends on your choice. I'll let you try it on our <a title="Forum" href="/link/641b1512405b405ca9ffd515aebb08ae.aspx">Forum</a> so you will have clearer vision on this.</p>
<p class="text-center"><img alt="Image Screenshot_1.png" src="/link/639d8d8c92ee433590c851c019de8ef3.aspx" /><br /><em>The image is for illustration purpose only, I'll remove the vote after taking screen-shot :P</em></p>
<p>We also modify the contribution system for those who contribute to the community, each Vote up will receive 1 contribution point. For the direct Blog post and article on World, the contribution point will be counted depends on the rating ( 3 stars = 1 point, 4 = 2 and 5 = 3). The user who giving rate (rater, not voter) will receive 1 point for their rating also.</p>
<p class="text-center"><img alt="Image Screenshot_3.png" src="/link/20788ee80faa4a4bad5cb371221d4acf.aspx" /></p>
<p>I think that's it for Voting feature. We hope it's helpful when you are here - World Community. I would like to say thank you for all the feedback we received the whole time, somes are valuable for all of us. Do you have any questions? Feel free to leave comment below, or give us feedback by button on the right or email us at <a href="mailto:epw@episerver.com">epw@episerver.com</a>.</p>