<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Widgets</title><link>https://community.telligent.com/community/11/w/developer-training/65066/widgets</link><description /><dc:language>en-US</dc:language><generator>14.0.0.586 14</generator><item><title>Widgets</title><link>https://community.telligent.com/community/11/w/developer-training/65066/widgets</link><pubDate>Wed, 05 Aug 2020 15:03:02 GMT</pubDate><guid isPermaLink="false">6541e229-d233-43ad-a017-15239ce5b189</guid><dc:creator>Former Member</dc:creator><comments>https://community.telligent.com/community/11/w/developer-training/65066/widgets#comments</comments><description>Current Revision posted to Developer Training by Former Member on 08/05/2020 15:03:02&lt;br /&gt;
&lt;p&gt;Widgets are used by Verint Community to implement individual units of the user interface.&lt;/p&gt;
&lt;p&gt;Widgets are scripted, upgrade-safe, localizable, configurable, distributable, fully editable in the browser, and have access to the platform API both via REST and widget extensions.&lt;/p&gt;
&lt;p&gt;Widgets implement nearly the entire default user interface of Verint Community, including elements found in headers, footers, content, administrative interfaces, and more. And widgets can be edited and created to fully customize these experiences.&lt;/p&gt;
&lt;p&gt;[toc]&lt;/p&gt;
&lt;h2&gt;&lt;a id="Why_Use_Widgets" name="Why_Use_Widgets"&gt;&lt;/a&gt;Why Use Widgets?&lt;/h2&gt;
&lt;p&gt;Widgets are used whenever a customized user interface is needed beyond what can be performed through theme configuration such as adjusting page layouts or the configuration of widgets on those pages. Existing widgets can be adjusted in a safe manner, and new widgets can be written or installed. A less common, but important, use for widgets is to enable [[Plugins|plugins]] that implement [[api-documentation:IScriptablePlugin Plugin Type|IScriptablePlugin]] to provide scriptable rendered markup.&lt;/p&gt;
&lt;h2&gt;&lt;a id="Where_are_Widgets" name="Where_are_Widgets"&gt;&lt;/a&gt;Where are Widgets?&lt;/h2&gt;
&lt;p&gt;Widgets are everywhere. If you&amp;#39;re looking at a user interface, you are likely looking at a widget. The following screenshots show a forum thread page, highlighting the individual widgets.&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/widgets.png"&gt;&lt;img style="border:1px solid #DDD;width:640px;" alt=" " src="/resized-image/__size/640x480/__key/communityserver-wikis-components-files/00-00-00-12-83/widgets.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Diagram: Forum Thread page&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/4760.png"&gt;&lt;img style="border:1px solid #DDD;width:640px;" alt=" " src="/resized-image/__size/640x480/__key/communityserver-wikis-components-files/00-00-00-12-83/4760.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Diagram: Forum Thread page in edit view, identifying widgets&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a id="Widget_Components" name="Widget_Components"&gt;&lt;/a&gt;Widget Components&lt;/h2&gt;
&lt;h3&gt;&lt;a id="In_a_Theme" name="In_a_Theme"&gt;&lt;/a&gt;In a Theme&lt;/h3&gt;
&lt;p&gt;Widget are generally used by [[Themes|themes]]. Themes define headers, footers, and pages. And each of these define a layout. A layout contains one or many regions, each of which can house instances of widgets. Widgets can be used multiple times as separate, independently-configured, instances throughout a theme.&lt;/p&gt;
&lt;h3&gt;&lt;a id="In_a_Widget" name="In_a_Widget"&gt;&lt;/a&gt;In a Widget&lt;/h3&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/5432.png"&gt;&lt;img style="border:1px solid #DDD;width:544px;" alt=" " src="/resized-image/__size/640x480/__key/communityserver-wikis-components-files/00-00-00-12-83/5432.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Widgets contain several main components:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Overview Metadata&lt;/strong&gt;: General information about a widget including its name, description, caching, available contexts, and other details.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Main Content Script&lt;/strong&gt;: The primary script, written in [[Using Velocity in Widgets|Velocity]], defines the widget&amp;#39;s interface.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Configuration Script&lt;/strong&gt;: XML which defines the [[Supporting Configuration|dynamic configuration]] fields available to administrators that configure the widget.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Header Script&lt;/strong&gt;: [[Using Velocity in Widgets|Script]] which can dynamically define content for the widget&amp;#39;s header&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CSS Script&lt;/strong&gt;: [[Using Velocity in Widgets|Script]] which can dynamically define CSS classes to be applied to a widget&amp;#39;s wrapper&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Language Resources&lt;/strong&gt;: Both the definition of language resources used by the widget as well as the default translations of those resources&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Attachments&lt;/strong&gt;: Set of any additional files required by the widget, such as JavaScript files, images, stylesheets, or separate velocity scripts.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;/h2&gt;
&lt;h2&gt;&lt;a id="Widget_Versions" name="Widget_Versions"&gt;&lt;/a&gt;Widget Versions&lt;/h2&gt;
&lt;p&gt;Widgets can exist in multiple versions.&lt;/p&gt;
&lt;h3&gt;&lt;a id="Themed_vs_Non-Themed" name="Themed_vs_Non-Themed"&gt;&lt;/a&gt;Themed vs Non-Themed&lt;/h3&gt;
&lt;p&gt;A widget can have [[Themes|themed]] versions. A themed version of a widget is a completely separate implementation of the widget that can completely re-define its own script. It only shares the widget&amp;#39;s identifier in common with the non-themed version.&lt;/p&gt;
&lt;p&gt;When a page, header, or footer in a theme is configured to use a widget, the theme first looks for a theme-specific variant of that widget matching the theme before falling back to a non-themed version. A widget can have any number of themed versions. Similarly, a widget can also exist such that there is not a non-themed variant.&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/3443.png"&gt;&lt;img style="border:1px solid #DDD;width:482px;" alt=" " src="/resized-image/__size/640x480/__key/communityserver-wikis-components-files/00-00-00-12-83/3443.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Diagram: The matching themed version of Forum Thread is used by the theme instead of the non-themed. Forum Links has no themed version, so its non-themed version is used.&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a id="Custom_and_Factory_Defaults" name="Custom_and_Factory_Defaults"&gt;&lt;/a&gt;Custom and Factory Defaults&lt;/h3&gt;
&lt;p&gt;Widgets can exist in custom or factory default states.&lt;/p&gt;
&lt;p&gt;A &lt;strong&gt;factory default&lt;/strong&gt; widget is defined by source files in [[Centralized File Storage|CFS]]. Factory default widgets are associated with [[Factory Default Widget Providers|factory default widget provider plugins]], including those bundled directly with the platform or third party plugins. Factory default widgets can still be customized in [[Working with Widget Studio|Widget Studio]], though those customizations are saved on top of the defaults as overrides. So, when a theme is configured to use a given widget, it will first attempt to use a customized version of the widget if one exists before falling through to the factory default implementation. Customized widget versions can always be reverted back to their factory defaults.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Custom widgets&lt;/strong&gt; don&amp;#39;t have to only override factory default versions. Completely original widgets can be created directly in [[Working with Widget Studio|Widget Studio]], purely as custom widgets. While custom widgets are also able to have their own themed variants, custom widgets cannot be reverted back to defaults - only deleted.&lt;/p&gt;
&lt;p&gt;All of the above assumes the standard usage of [[Working with Widget Studio|Widget Studio]]. Verint Community can also be configured for local development in a [[Editing Widgets in Developer Mode|developer mode]] which allows even factory default widgets to be edited in [[Working with Widget Studio|Widget Studio]].&lt;/p&gt;
&lt;h3&gt;&lt;a id="Staged_Previewable" name="Staged_Previewable"&gt;&lt;/a&gt;Staged/Previewable&lt;/h3&gt;
&lt;p&gt;New to 9.0, widget changes are staged along with other [[Themes|theme]] changes. Staging means that edits made to widgets are not immediately public. They are available only to the developer making the changes. Staged widget edits can also be live-previewed on the site during editing. Staged widgets changes can then be published or reverted back to their non-staged state.&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/0312.png"&gt;&lt;img style="border:1px solid #DDD;width:266px;" alt=" " src="/resized-image/__size/640x480/__key/communityserver-wikis-components-files/00-00-00-12-83/0312.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a id="Scriptable_plugins" name="Scriptable_plugins"&gt;&lt;/a&gt;Scriptable plugins&lt;/h3&gt;
&lt;p&gt;In addition to themes, widgets also provide scriptable user interfaces to plugins that implement [[api-documentation:IScriptablePlugin Plugin Type|IScriptablePlugin]].&lt;/p&gt;
&lt;p&gt;An example use case is an [[api-documentation:IActivityStoryType Plugin Type|IActivityStoryType]] plugin which defines a new type of story to show in the activity stream as well as the logic surrounding when and how it is created. As &lt;code&gt;IActivityStoryType&lt;/code&gt; plugins are also responsible for defining the rendering of stories, an &lt;code&gt;IActivityStoryType&lt;/code&gt; plugin that also implements &lt;code&gt;IScriptablePlugin&lt;/code&gt; can enable a widget to perform the actual rendering via script. And that widget can even be registered such that it is also editable in [[Working with Widget Studio|Widget Studio]].&lt;/p&gt;
&lt;h2&gt;&lt;/h2&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;
</description></item><item><title>Widgets</title><link>https://community.telligent.com/community/11/w/developer-training/65066/widgets/revision/2</link><pubDate>Fri, 21 Jun 2019 21:01:32 GMT</pubDate><guid isPermaLink="false">6541e229-d233-43ad-a017-15239ce5b189</guid><dc:creator>Ben Tiedt</dc:creator><comments>https://community.telligent.com/community/11/w/developer-training/65066/widgets#comments</comments><description>Revision 2 posted to Developer Training by Ben Tiedt on 06/21/2019 21:01:32&lt;br /&gt;
&lt;p&gt;Widgets are used by Telligent Community to implement individual units of the user interface.&lt;/p&gt;
&lt;p&gt;Widgets are scripted, upgrade-safe, localizable, configurable, distributable, fully editable in the browser, and have access to the platform API both via REST and widget extensions.&lt;/p&gt;
&lt;p&gt;Widgets implement nearly the entire default user interface of Telligent Community, including elements found in headers, footers, content, administrative interfaces, and more. And widgets can be edited and created to fully customize these experiences.&lt;/p&gt;
&lt;p&gt;[toc]&lt;/p&gt;
&lt;h2&gt;&lt;a id="Why_Use_Widgets" name="Why_Use_Widgets"&gt;&lt;/a&gt;Why Use Widgets?&lt;/h2&gt;
&lt;p&gt;Widgets are used whenever a customized user interface is needed beyond what can be performed through theme configuration such as adjusting page layouts or the configuration of widgets on those pages. Existing widgets can be adjusted in a safe manner, and new widgets can be written or installed. A less common, but important, use for widgets is to enable [[Plugins|plugins]] that implement [[api-documentation:IScriptablePlugin Plugin Type|IScriptablePlugin]] to provide scriptable rendered markup.&lt;/p&gt;
&lt;h2&gt;&lt;a id="Where_are_Widgets" name="Where_are_Widgets"&gt;&lt;/a&gt;Where are Widgets?&lt;/h2&gt;
&lt;p&gt;Widgets are everywhere. If you&amp;#39;re looking at a user interface, you are likely looking at a widget. The following screenshots show a forum thread page, highlighting the individual widgets.&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/widgets.png"&gt;&lt;img style="border:1px solid #DDD;width:640px;" alt=" " src="/resized-image/__size/640x480/__key/communityserver-wikis-components-files/00-00-00-12-83/widgets.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Diagram: Forum Thread page&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/4760.png"&gt;&lt;img style="border:1px solid #DDD;width:640px;" alt=" " src="/resized-image/__size/640x480/__key/communityserver-wikis-components-files/00-00-00-12-83/4760.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Diagram: Forum Thread page in edit view, identifying widgets&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a id="Widget_Components" name="Widget_Components"&gt;&lt;/a&gt;Widget Components&lt;/h2&gt;
&lt;h3&gt;&lt;a id="In_a_Theme" name="In_a_Theme"&gt;&lt;/a&gt;In a Theme&lt;/h3&gt;
&lt;p&gt;Widget are generally used by [[Themes|themes]]. Themes define headers, footers, and pages. And each of these define a layout. A layout contains one or many regions, each of which can house instances of widgets. Widgets can be used multiple times as separate, independently-configured, instances throughout a theme.&lt;/p&gt;
&lt;h3&gt;&lt;a id="In_a_Widget" name="In_a_Widget"&gt;&lt;/a&gt;In a Widget&lt;/h3&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/5432.png"&gt;&lt;img style="border:1px solid #DDD;width:544px;" alt=" " src="/resized-image/__size/640x480/__key/communityserver-wikis-components-files/00-00-00-12-83/5432.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Widgets contain several main components:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Overview Metadata&lt;/strong&gt;: General information about a widget including its name, description, caching, available contexts, and other details.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Main Content Script&lt;/strong&gt;: The primary script, written in [[Using Velocity in Widgets|Velocity]], defines the widget&amp;#39;s interface.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Configuration Script&lt;/strong&gt;: XML which defines the [[Supporting Configuration|dynamic configuration]] fields available to administrators that configure the widget.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Header Script&lt;/strong&gt;: [[Using Velocity in Widgets|Script]] which can dynamically define content for the widget&amp;#39;s header&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CSS Script&lt;/strong&gt;: [[Using Velocity in Widgets|Script]] which can dynamically define CSS classes to be applied to a widget&amp;#39;s wrapper&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Language Resources&lt;/strong&gt;: Both the definition of language resources used by the widget as well as the default translations of those resources&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Attachments&lt;/strong&gt;: Set of any additional files required by the widget, such as JavaScript files, images, stylesheets, or separate velocity scripts.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;/h2&gt;
&lt;h2&gt;&lt;a id="Widget_Versions" name="Widget_Versions"&gt;&lt;/a&gt;Widget Versions&lt;/h2&gt;
&lt;p&gt;Widgets can exist in multiple versions.&lt;/p&gt;
&lt;h3&gt;&lt;a id="Themed_vs_Non-Themed" name="Themed_vs_Non-Themed"&gt;&lt;/a&gt;Themed vs Non-Themed&lt;/h3&gt;
&lt;p&gt;A widget can have [[Themes|themed]] versions. A themed version of a widget is a completely separate implementation of the widget that can completely re-define its own script. It only shares the widget&amp;#39;s identifier in common with the non-themed version.&lt;/p&gt;
&lt;p&gt;When a page, header, or footer in a theme is configured to use a widget, the theme first looks for a theme-specific variant of that widget matching the theme before falling back to a non-themed version. A widget can have any number of themed versions. Similarly, a widget can also exist such that there is not a non-themed variant.&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/3443.png"&gt;&lt;img style="border:1px solid #DDD;width:482px;" alt=" " src="/resized-image/__size/640x480/__key/communityserver-wikis-components-files/00-00-00-12-83/3443.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Diagram: The matching themed version of Forum Thread is used by the theme instead of the non-themed. Forum Links has no themed version, so its non-themed version is used.&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a id="Custom_and_Factory_Defaults" name="Custom_and_Factory_Defaults"&gt;&lt;/a&gt;Custom and Factory Defaults&lt;/h3&gt;
&lt;p&gt;Widgets can exist in custom or factory default states.&lt;/p&gt;
&lt;p&gt;A &lt;strong&gt;factory default&lt;/strong&gt; widget is defined by source files in [[Centralized File Storage|CFS]]. Factory default widgets are associated with [[Factory Default Widget Providers|factory default widget provider plugins]], including those bundled directly with the platform or third party plugins. Factory default widgets can still be customized in [[Working with Widget Studio|Widget Studio]], though those customizations are saved on top of the defaults as overrides. So, when a theme is configured to use a given widget, it will first attempt to use a customized version of the widget if one exists before falling through to the factory default implementation. Customized widget versions can always be reverted back to their factory defaults.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Custom widgets&lt;/strong&gt; don&amp;#39;t have to only override factory default versions. Completely original widgets can be created directly in [[Working with Widget Studio|Widget Studio]], purely as custom widgets. While custom widgets are also able to have their own themed variants, custom widgets cannot be reverted back to defaults - only deleted.&lt;/p&gt;
&lt;p&gt;All of the above assumes the standard usage of [[Working with Widget Studio|Widget Studio]]. Telligent Community can also be configured for local development in a [[Editing Widgets in Developer Mode|developer mode]] which allows even factory default widgets to be edited in [[Working with Widget Studio|Widget Studio]].&lt;/p&gt;
&lt;h3&gt;&lt;a id="Staged_Previewable" name="Staged_Previewable"&gt;&lt;/a&gt;Staged/Previewable&lt;/h3&gt;
&lt;p&gt;New to 9.0, widget changes are staged along with other [[Themes|theme]] changes. Staging means that edits made to widgets are not immediately public. They are available only to the developer making the changes. Staged widget edits can also be live-previewed on the site during editing. Staged widgets changes can then be published or reverted back to their non-staged state.&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/0312.png"&gt;&lt;img style="border:1px solid #DDD;width:266px;" alt=" " src="/resized-image/__size/640x480/__key/communityserver-wikis-components-files/00-00-00-12-83/0312.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a id="Scriptable_plugins" name="Scriptable_plugins"&gt;&lt;/a&gt;Scriptable plugins&lt;/h3&gt;
&lt;p&gt;In addition to themes, widgets also provide scriptable user interfaces to plugins that implement [[api-documentation:IScriptablePlugin Plugin Type|IScriptablePlugin]].&lt;/p&gt;
&lt;p&gt;An example use case is an [[api-documentation:IActivityStoryType Plugin Type|IActivityStoryType]] plugin which defines a new type of story to show in the activity stream as well as the logic surrounding when and how it is created. As &lt;code&gt;IActivityStoryType&lt;/code&gt; plugins are also responsible for defining the rendering of stories, an &lt;code&gt;IActivityStoryType&lt;/code&gt; plugin that also implements &lt;code&gt;IScriptablePlugin&lt;/code&gt; can enable a widget to perform the actual rendering via script. And that widget can even be registered such that it is also editable in [[Working with Widget Studio|Widget Studio]].&lt;/p&gt;
&lt;h2&gt;&lt;/h2&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;
</description></item><item><title>Widgets</title><link>https://community.telligent.com/community/11/w/developer-training/65066/widgets/revision/1</link><pubDate>Thu, 20 Jun 2019 20:13:47 GMT</pubDate><guid isPermaLink="false">6541e229-d233-43ad-a017-15239ce5b189</guid><dc:creator>Ben Tiedt</dc:creator><comments>https://community.telligent.com/community/11/w/developer-training/65066/widgets#comments</comments><description>Revision 1 posted to Developer Training by Ben Tiedt on 06/20/2019 20:13:47&lt;br /&gt;
&lt;p&gt;Widgets are used by Telligent Community to implement individual units of the user interface.&lt;/p&gt;
&lt;p&gt;Widgets are scripted, upgrade-safe, localizable, configurable, distributable, fully editable in the browser, and have access to the platform API both via REST and widget extensions.&lt;/p&gt;
&lt;p&gt;Widgets implement nearly the entire default user interface of Telligent Community, including elements found in headers, footers, content, administrative interfaces, and more. And widgets can be edited and created to fully customize these experiences.&lt;/p&gt;
&lt;p&gt;[toc]&lt;/p&gt;
&lt;h2&gt;&lt;a id="Why_Use_Widgets" name="Why_Use_Widgets"&gt;&lt;/a&gt;Why Use Widgets?&lt;/h2&gt;
&lt;p&gt;Widgets are used whenever a customized user interface is needed beyond what can be performed through theme configuration such as adjusting page layouts or the configuration of widgets on those pages. Existing widgets can be adjusted in a safe manner, and new widgets can be written or installed. A less common, but important, use for widgets is to enable [[Plugins|plugins]] that implement [[api-documentation:IScriptablePlugin Plugin Type|IScriptablePlugin]] to provide scriptable rendered markup.&lt;/p&gt;
&lt;h2&gt;&lt;a id="Where_are_Widgets" name="Where_are_Widgets"&gt;&lt;/a&gt;Where are Widgets?&lt;/h2&gt;
&lt;p&gt;Widgets are everywhere. If you&amp;#39;re looking at a user interface, you are likely looking at a widget. The following screenshots show a forum thread page, highlighting the individual widgets.&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/widgets.png"&gt;&lt;img style="width:640px;border:1px solid #DDD;" src="/resized-image/__size/640x480/__key/communityserver-wikis-components-files/00-00-00-12-83/widgets.png" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Diagram: Forum Thread page&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/4760.png"&gt;&lt;img style="width:640px;border:1px solid #DDD;" src="/resized-image/__size/640x480/__key/communityserver-wikis-components-files/00-00-00-12-83/4760.png" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Diagram: Forum Thread page in edit view, identifying widgets&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a id="Widget_Components" name="Widget_Components"&gt;&lt;/a&gt;Widget Components&lt;/h2&gt;
&lt;h3&gt;&lt;a id="In_a_Theme" name="In_a_Theme"&gt;&lt;/a&gt;In a Theme&lt;/h3&gt;
&lt;p&gt;Widget are generally used by [[Themes|themes]]. Themes define headers, footers, and pages. And each of these define a layout. A layout contains one or many regions, each of which can house instances of widgets. Widgets can be used multiple times as separate, independently-configured, instances throughout a theme.&lt;/p&gt;
&lt;h3&gt;&lt;a id="In_a_Widget" name="In_a_Widget"&gt;&lt;/a&gt;In a Widget&lt;/h3&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/5432.png"&gt;&lt;img style="width:544px;border:1px solid #DDD;" src="/resized-image/__size/640x480/__key/communityserver-wikis-components-files/00-00-00-12-83/5432.png" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Widgets contain several main components:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Overview Metadata&lt;/strong&gt;: General information about a widget including its name, description, caching, available contexts, and other details.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Main Content Script&lt;/strong&gt;: The primary script, written in [[Using Velocity in Widgets|Velocity]], defines the widget&amp;#39;s interface.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Configuration Script&lt;/strong&gt;: XML which defines the [[Supporting Configuration|dynamic configuration]] fields available to administrators that configure the widget.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Header Script&lt;/strong&gt;: [[Using Velocity in Widgets|Script]] which can dynamically define content for the widget&amp;#39;s header&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CSS Script&lt;/strong&gt;: [[Using Velocity in Widgets|Script]] which can dynamically define CSS classes to be applied to a widget&amp;#39;s wrapper&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Language Resources&lt;/strong&gt;: Both the definition of language resources used by the widget as well as the default translations of those resources&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Attachments&lt;/strong&gt;: Set of any additional files required by the widget, such as JavaScript files, images, stylesheets, or separate velocity scripts.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;a id="Widgets_are" name="Widgets_are"&gt;&lt;/a&gt;Widgets are:&lt;/h2&gt;
&lt;h3&gt;&lt;a id="Scripted" name="Scripted"&gt;&lt;/a&gt;Scripted&lt;/h3&gt;
&lt;p&gt;Widgets are written with common Web technologies like HTML, CSS, JavaScript and a simple server-side scripting language called [[Using Velocity in Widgets|Velocity]].&lt;/p&gt;
&lt;pre class="brush: velocity"&gt;&lt;code&gt;&amp;lt;ul&amp;gt;
## Say hello 10 times
#foreach($i in [1..10])
   &amp;lt;li&amp;gt;Hello from a Widget!&amp;lt;/li&amp;gt;
#end
&amp;lt;/ul&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;&lt;a id="API_consumers" name="API_consumers"&gt;&lt;/a&gt;API consumers&lt;/h3&gt;
&lt;p&gt;Widgets have full access to the Platform API in two ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[[api-documentation:Widget API Documentation|Widget API]] on the server-side via, called directly by the widget&amp;#39;s [[Using Velocity in Widgets|Velocity]] script.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;[[api-documentation:REST API Documentation|REST API]] on the client side with [[Using Ajax in Widgets|JavaScript]].&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="brush: velocity"&gt;&lt;code&gt;#set ($unreadCount = $core_v2_notification.List(&amp;quot;%{ IsRead = &amp;#39;false&amp;#39;, PageSize = 1, PageIndex = 0 }&amp;quot;).TotalCount)

Hello from a Widget!

You have ${unreadCount} unread notifications.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In addition to the platform APIs, widgets can also access any custom APIs like [[Widget Extensions|Widget Extensions]] or [[Exposing Data to External Sources|custom REST endpoints]] provided by [[Plugins|plugins]].&lt;/p&gt;
&lt;h3&gt;&lt;a id="Upgrade-safe" name="Upgrade-safe"&gt;&lt;/a&gt;Upgrade-safe&lt;/h3&gt;
&lt;p&gt;Widgets have a strict separation from the non-UI components of the platform. As widgets only have access to public, supported, platform APIs which are already guaranteed to be upgrade-safe, widgets themselves are also upgrade-safe. A widget written against a current version of the platform will continue to work in future versions of the platform, even as other platform APIs are introduced.&lt;/p&gt;
&lt;p&gt;The only item to be aware of regarding widget upgradeability is theme upgrading, as widgets usually rely on themes for styling.&lt;/p&gt;
&lt;h3&gt;&lt;a id="Localizable" name="Localizable"&gt;&lt;/a&gt;Localizable&lt;/h3&gt;
&lt;p&gt;Widgets are fully localizable. All language strings that a widget needs to display to a user are defined by the widget, along with one or more sets of default translations of those resources. Widget resources can be exported, translated, and re-imported to introduce greater localization to existing widgets.&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/8117.png"&gt;&lt;img style="width:640px;border:1px solid #DDD;" src="/resized-image/__size/640x480/__key/communityserver-wikis-components-files/00-00-00-12-83/8117.png" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a id="Configurable" name="Configurable"&gt;&lt;/a&gt;Configurable&lt;/h3&gt;
&lt;p&gt;Widgets are fully configurable by administrators and non-developers. A widget can define as much or as little configuration options as necessary, and use that configuration as it needs.&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/7127.png"&gt;&lt;img style="width:574px;border:1px solid #DDD;" src="/resized-image/__size/640x480/__key/communityserver-wikis-components-files/00-00-00-12-83/7127.png" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a id="Distributable" name="Distributable"&gt;&lt;/a&gt;Distributable&lt;/h3&gt;
&lt;p&gt;Widgets can be packaged as exportable XML files individually or in groups. A widget export contains all components of a widget, including its metadata, content script, configuration script, header script, css script, language resources, &lt;strong&gt;and even all widget attachments&lt;/strong&gt;. Widget exports can be imported into other Telligent Community environments.&lt;/p&gt;
&lt;h3&gt;&lt;a id="In-browser_Editable" name="In-browser_Editable"&gt;&lt;/a&gt;In-browser Editable&lt;/h3&gt;
&lt;p&gt;Widgets can be fully managed, edited, and authored in the browser using [[Working with Widget Studio|Widget Studio]], including installation, exporting, translation, and editing, and creation of new widgets.&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/4377.png"&gt;&lt;img style="width:640px;border:1px solid #DDD;" src="/resized-image/__size/640x480/__key/communityserver-wikis-components-files/00-00-00-12-83/4377.png" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/0486.png"&gt;&lt;img style="width:640px;border:1px solid #DDD;" src="/resized-image/__size/640x480/__key/communityserver-wikis-components-files/00-00-00-12-83/0486.png" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a id="Widget_Versions" name="Widget_Versions"&gt;&lt;/a&gt;Widget Versions&lt;/h2&gt;
&lt;p&gt;Widgets can exist in multiple versions.&lt;/p&gt;
&lt;h3&gt;&lt;a id="Themed_vs_Non-Themed" name="Themed_vs_Non-Themed"&gt;&lt;/a&gt;Themed vs Non-Themed&lt;/h3&gt;
&lt;p&gt;A widget can have [[Themes|themed]] versions. A themed version of a widget is a completely separate implementation of the widget that can completely re-define its own script. It only shares the widget&amp;#39;s identifier in common with the non-themed version.&lt;/p&gt;
&lt;p&gt;When a page, header, or footer in a theme is configured to use a widget, the theme first looks for a theme-specific variant of that widget matching the theme before falling back to a non-themed version. A widget can have any number of themed versions. Similarly, a widget can also exist such that there is not a non-themed variant.&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/3443.png"&gt;&lt;img style="width:482px;border:1px solid #DDD;" src="/resized-image/__size/640x480/__key/communityserver-wikis-components-files/00-00-00-12-83/3443.png" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Diagram: The matching themed version of Forum Thread is used by the theme instead of the non-themed. Forum Links has no themed version, so its non-themed version is used.&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a id="Custom_and_Factory_Defaults" name="Custom_and_Factory_Defaults"&gt;&lt;/a&gt;Custom and Factory Defaults&lt;/h3&gt;
&lt;p&gt;Widgets can exist in custom or factory default states.&lt;/p&gt;
&lt;p&gt;A &lt;strong&gt;factory default&lt;/strong&gt; widget is defined by source files in [[Centralized File Storage|CFS]]. Factory default widgets are associated with [[Factory Default Widget Providers|factory default widget provider plugins]], including those bundled directly with the platform or third party plugins. Factory default widgets can still be customized in [[Working with Widget Studio|Widget Studio]], though those customizations are saved on top of the defaults as overrides. So, when a theme is configured to use a given widget, it will first attempt to use a customized version of the widget if one exists before falling through to the factory default implementation. Customized widget versions can always be reverted back to their factory defaults.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Custom widgets&lt;/strong&gt; don&amp;#39;t have to only override factory default versions. Completely original widgets can be created directly in [[Working with Widget Studio|Widget Studio]], purely as custom widgets. While custom widgets are also able to have their own themed variants, custom widgets cannot be reverted back to defaults - only deleted.&lt;/p&gt;
&lt;p&gt;All of the above assumes the standard usage of [[Working with Widget Studio|Widget Studio]]. Telligent Community can also be configured for local development in a [[Editing Widgets in Developer Mode|developer mode]] which allows even factory default widgets to be edited in [[Working with Widget Studio|Widget Studio]].&lt;/p&gt;
&lt;h3&gt;&lt;a id="Staged_Previewable" name="Staged_Previewable"&gt;&lt;/a&gt;Staged/Previewable&lt;/h3&gt;
&lt;p&gt;New to 9.0, widget changes are staged along with other [[Themes|theme]] changes. Staging means that edits made to widgets are not immediately public. They are available only to the developer making the changes. Staged widget edits can also be live-previewed on the site during editing. Staged widgets changes can then be published or reverted back to their non-staged state.&lt;/p&gt;
&lt;p&gt;&lt;a href="/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/0312.png"&gt;&lt;img style="width:266px;border:1px solid #DDD;" src="/resized-image/__size/640x480/__key/communityserver-wikis-components-files/00-00-00-12-83/0312.png" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;&lt;a id="Scriptable_plugins" name="Scriptable_plugins"&gt;&lt;/a&gt;Scriptable plugins&lt;/h3&gt;
&lt;p&gt;In addition to themes, widgets also provide scriptable user interfaces to plugins that implement [[api-documentation:IScriptablePlugin Plugin Type|IScriptablePlugin]].&lt;/p&gt;
&lt;p&gt;An example use case is an [[api-documentation:IActivityStoryType Plugin Type|IActivityStoryType]] plugin which defines a new type of story to show in the activity stream as well as the logic surrounding when and how it is created. As &lt;code&gt;IActivityStoryType&lt;/code&gt; plugins are also responsible for defining the rendering of stories, an &lt;code&gt;IActivityStoryType&lt;/code&gt; plugin that also implements &lt;code&gt;IScriptablePlugin&lt;/code&gt; can enable a widget to perform the actual rendering via script. And that widget can even be registered such that it is also editable in [[Working with Widget Studio|Widget Studio]].&lt;/p&gt;
&lt;h2&gt;&lt;a id="More_Topics" name="More_Topics"&gt;&lt;/a&gt;More Topics&lt;/h2&gt;
&lt;h3&gt;&lt;a id="Working_with_Widget_Studio" name="Working_with_Widget_Studio"&gt;&lt;/a&gt;[[Working with Widget Studio]]&lt;/h3&gt;
&lt;p&gt;Learn how to use the in-browser widget management and authoring tool.&lt;/p&gt;
&lt;h3&gt;&lt;a id="Using_Velocity_in_Widgets" name="Using_Velocity_in_Widgets"&gt;&lt;/a&gt;[[Using Velocity in Widgets]]&lt;/h3&gt;
&lt;p&gt;Learn how to use widgets&amp;#39; server-side scripting language&lt;/p&gt;
&lt;h3&gt;&lt;a id="Using_Ajax_in_Widgets" name="Using_Ajax_in_Widgets"&gt;&lt;/a&gt;[[Using Ajax in Widgets]]&lt;/h3&gt;
&lt;p&gt;Learn how to use register and use JavaScript in widgets to perform dynamic behavior like performing REST requests as well as calling custom widget-defined AJAX endpoints.&lt;/p&gt;
&lt;h3&gt;&lt;a id="Supporting_Configuration" name="Supporting_Configuration"&gt;&lt;/a&gt;[[Supporting Configuration]]&lt;/h3&gt;
&lt;p&gt;Learn how to make your widget configurable by site administrators and other non-technical users.&lt;/p&gt;
&lt;h3&gt;&lt;a id="Managing_Widget_Source_and_Distribution" name="Managing_Widget_Source_and_Distribution"&gt;&lt;/a&gt;[[Managing Widget Source and Distribution]]&lt;/h3&gt;
&lt;p&gt;Learn how to work with managing widget sources.&lt;/p&gt;
&lt;h3&gt;&lt;a id="Widget_Development_Patterns" name="Widget_Development_Patterns"&gt;&lt;/a&gt;[[Widget Development Patterns]]&lt;/h3&gt;
&lt;p&gt;Learn common patterns that are useful when developing widgets.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;
</description></item></channel></rss>