DIR : /home/kozerus/public_html/pn/uize/site-source/js/Uize/Widget/FilterGroups.js

/home/kozerus/public_html/pn/uize/site-source/js/Uize/Widget

/*______________
|       ______  |   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.Widget.FilterGroups Class
|   /    / /    |
|  /    / /  /| |    ONLINE : http://www.uize.com
| /____/ /__/_| | COPYRIGHT : (c)2010-2016 UIZE
|          /___ |   LICENSE : Available under MIT License or GNU General Public License
|_______________|             http://www.uize.com/license.html
*/

/* Module Meta Data
	type: Class
	importance: 6
	codeCompleteness: 0
	docCompleteness: 0
*/

/*?
	Introduction
		The =Uize.Widget.FilteredInput= widget provides functionality for...

		*DEVELOPERS:* `Ben Ilegbodu`, original code contributed by `Zazzle Inc.`
*/

Uize.module ({
	name:'Uize.Widget.FilterGroups',
	required:[
		'Uize.Widget.Options.FilterGroup',
		'Uize.Data.Compare'
	],
	builder:function (_superclass) {
		'use strict';

		var
			/*** Variables for Scruncher Optimization ***/
				_Uize = Uize
		;

		/*** Private Methods ***/
			function _forAll (m,_function) {
				for (
					var _valueNo = -1, _valuesLength = m._values.length, _children = m.children;
					++_valueNo < _valuesLength;
				)
					if (_function (_children ['filterGroup' + _valueNo],_valueNo) === false) break;
			}

			function _updateSelectedFilters (m,_changedValue) {
				if (m.isWired) {
					var _selectedFilters = [];

					_forAll(
						m,
						function (_filterGroupWidget) {
							var _value = _filterGroupWidget.valueOf();
							_value
								&& _selectedFilters.push(_value);
						}
					);

					if (!_Uize.Data.Compare.clones(_selectedFilters, m._previousSelectedFilters)) {
						_selectedFilters = m._allowMultiple || !_changedValue
							? _selectedFilters
							: (_Uize.indexIn(_selectedFilters, _changedValue) > -1
								? [_changedValue]
								: _selectedFilters
							)
						;
						m._previousSelectedFilters = _selectedFilters;
						m.set({_value:_selectedFilters});
					}
				}
			}

			function _setFilterGroupsSelectedFilter (m) {
				if (m.isWired) {
					var
						_selectedFilters = m._value,
						_selectedFilterLookup = {}
					;
					_forAll(
						m,
						function (_filterGroupWidget) {
							var _filterToSet = null;

							for (var _selectedFilterNo = -1; ++_selectedFilterNo < _selectedFilters.length;) {
								var _selectedFilter = _selectedFilters[_selectedFilterNo];
								if (
									!_selectedFilterLookup[_selectedFilter] &&
									_filterGroupWidget.getValueNoFromValue(_selectedFilter) > -1
								) {
									_filterToSet = _selectedFilter;
									_selectedFilterLookup[_selectedFilter] = true;
									break;
								}
							}

							_filterGroupWidget.set({value:_filterToSet});
						}
					);
				}
			}

		return _superclass.subclass ({
			omegastructor:function () {
				this._previousSelectedFilters = this._value;
			},

			instanceMethods:{
				updateCounts:function (_counts) {
					var
						m = this,
						_countsLength = _counts.length
					;

					if (m.isWired) {
						_counts
							&& _countsLength
							&& _forAll(
								m,
								function (_filterGroupWidget, _filterGroupNo) {
									_filterGroupNo < _countsLength
										&& _filterGroupWidget.updateCounts(_counts[_filterGroupNo])
									;
								}
							)
						;
					}
				},

				wireUi:function () {
					var m = this;

					if (!m.isWired) {
						var
							_filterGroupsData = m._values
						;

						for (var _filterGroupNo = -1; ++_filterGroupNo < _filterGroupsData.length;)
							m.addChild (
								'filterGroup' + _filterGroupNo,
								_Uize.Widget.Options.FilterGroup,
								_Uize.copyInto(
									{ensureValueInValues:m._allowMultiple},
									_Uize.clone(_filterGroupsData[_filterGroupNo])
								)
							).wire(
								'Changed.value',
								function (_event) { _updateSelectedFilters(m,_event.source.valueOf()) }
							)
						;

						_superclass.doMy (m,'wireUi');

						_setFilterGroupsSelectedFilter(m);
						_updateSelectedFilters(m);
					}
				}
			},

			stateProperties:{
				_allowMultiple:{
					name:'allowMultiple',
					onChange:function () {
						var
							m = this,
							_valueLength = m._value.length
						;

						!m._allowMultiple
							&& _valueLength > 1
							&& m.set({_value:m._value.splice(_valueLength-1,1)})
						;
					},
					value:true
				},
				_value:{
					name:'value',
					conformer:function (_value) {
						_value = _Uize.isArray(_value) ? _value : [];
						var _valueLength = _value.length;
						return this._allowMultiple || _valueLength == 1 ? _value : _value.splice(_valueLength-1,1);
					},
					onChange:function () {_setFilterGroupsSelectedFilter (this)},
					value:[]
				},
				_values:{
					name:'values',
					value:[]
				}
			}
		});
	}
});

//


koh5_pano



Your browser does not support the HTML5 canvas element.


Drag mouse to navigate.

Navigation





17.Aug.2010, Martin Wengenmayer