/*______________ | ______ | U I Z E J A V A S C R I P T F R A M E W O R K | / / | --------------------------------------------------- | / O / | MODULE : Uize.Widgets.WidgetViewer.VisualSamplersViewer.Widget Class | / / / | | / / / /| | ONLINE : http://uize.com | /____/ /__/_| | COPYRIGHT : (c)2013-2016 UIZE | /___ | LICENSE : Available under MIT License or GNU General Public License |_______________| http://uize.com/license.html */ /* Module Meta Data type: Class importance: 1 codeCompleteness: 100 docCompleteness: 100 */ /*? Introduction The =Uize.Widgets.WidgetViewer.VisualSamplersViewer.Widget= class implements a widget for selecting and viewing visual samplers from a list of namespaces that contain visual samplers. *DEVELOPERS:* `Chris van Rensburg` */ Uize.module ({ name:'Uize.Widgets.WidgetViewer.VisualSamplersViewer.Widget', superclass:'Uize.Widgets.WidgetViewer.Widget', required:[ 'Uize.Data.Matches', 'Uize.Str.Has', 'Uize.Widgets.Container.Widget', 'Uize.Flo' ], builder:function (_superclass) { 'use strict'; return _superclass.subclass ({ hasLoc:true, instanceMethods:{ insertViewer:function (_value) { var m = this, _viewer = m.addChild ('viewer',Uize.Widgets.Container.Widget,{built:false}) ; _viewer.insertUi (); var _visualSamplerProperties = { built:false, container:_viewer.getNode (), insertionMode:'inner bottom' }; Uize.Flo.forEach ( function (_next) {_next (m._visualSamplerModulesByNamespace [_value == '*' ? '' : _value])}, function (_next) { Uize.require ( _next.flo.value, function (_visualSamplerModule) { _viewer.addChild ( 'visualSampler' + _next.flo.key, _visualSamplerModule, _visualSamplerProperties ).insertUi (); _next (); } ); } ) ({breatheAfter:500}); } }, stateProperties:{ _visualSamplerNamespaces:{ name:'visualSamplerNamespaces', derived:{ properties:'modules', derivation:function (_modules) { var m = this; /*** build visual sampler namespaces ***/ var _modulesLookup = Uize.lookup (_modules), _visualSamplerDirectNamespaces = Uize.Data.Matches.values ( _modules, function (_moduleName) { return ( _modulesLookup [_moduleName + '.Widget'] && _modulesLookup [_moduleName + '.VisualSampler'] ); } ), _visualSamplerNamespaces = _visualSamplerDirectNamespaces.concat () ; /*** add namespaces that aggregate more than one visual sampler namespace ***/ /* EXAMPLE MyNamespace.Widgets.Button MyNamespace.Widgets.ProgressBar MyNamespace.Widgets.CoolWidgets.Foo MyNamespace.Widgets.CoolWidgets.More.Bar With the above example of widget namespaces for widgets that have visual samplers, the following namespaces would also be added, because they clump / aggregate more than one namespace underneath them that contain visual samplers... MyNamespace.Widgets MyNamespace.Widgets.CoolWidgets Note that the MyNamespace namespace would not be added, because it is redundant. In other words, selecting the MyNamespace namespace would show no more visual samplers than selecting the MyNamespace.Widgets namespace. The same applies to the MyNamespace.Widgets.CoolWidgets.More namespace. */ function _processNode (_path,_node) { var _totalKeys = Uize.totalKeys (_node); if (_totalKeys) { _totalKeys > 1 && _visualSamplerNamespaces.push (_path); for (var _subNode in _node) _processNode (_path + (_path && '.') + _subNode,_node [_subNode]) ; } } _processNode ('',Uize.Data.PathsTree.fromList (_visualSamplerNamespaces)); _visualSamplerNamespaces.sort (); /*** build lookup for visual sampler modules per namespace ***/ var _visualSamplerModulesByNamespace = m._visualSamplerModulesByNamespace = {}; Uize.forEach ( _visualSamplerNamespaces, function (_namespace) { _visualSamplerModulesByNamespace [_namespace] = Uize.map ( Uize.Data.Matches.values ( _visualSamplerDirectNamespaces, function (_visualSamplerNamespace) { return ( !_namespace || _visualSamplerNamespace == _namespace || Uize.Str.Has.hasPrefix (_visualSamplerNamespace,_namespace + '.') ); } ), 'value + ".VisualSampler"' ); } ); return _visualSamplerNamespaces; } } }, values:{ derived:{ properties:'visualSamplerNamespaces,loc_allNamespaces,loc_noSelectionText', derivation:function (_visualSamplerNamespaces,_loc_allNamespaces,_loc_noSelectionText) { var _visualSamplerModulesByNamespace = this._visualSamplerModulesByNamespace; return [{displayName:_loc_noSelectionText || '',name:'-'}].concat ( Uize.map ( _visualSamplerNamespaces, function (_namespace) { return { displayName:(_namespace || _loc_allNamespaces || '') + ' (' + _visualSamplerModulesByNamespace [_namespace].length + ')', name:_namespace || '*' }; } ) ); } } } } }); } });