UNPKG

@doodad-js/widgets

Version:
219 lines (181 loc) 6.15 kB
// Copyright 2015-2018 Claude Petit, licensed under Apache License version 2.0 "use strict"; exports.add = function add(modules) { modules = (modules || {}); modules['Doodad.Widgets.Client'] = { version: '1.1.1a', dependencies: [ 'Doodad.Widgets', ], create: function create(root, /*optional*/_options, _shared) { const doodad = root.Doodad, widgets = doodad.Widgets, types = doodad.Types, tools = doodad.Tools, client = doodad.Client, io = doodad.IO, clientIO = client.IO, ioMixIns = io.MixIns, //extenders = doodad.Extenders, //interfaces = doodad.Interfaces, //exceptions = doodad.Exceptions, mixIns = doodad.MixIns, widgetsMixIns = widgets.MixIns; //================================== // Mix-ins //================================== widgetsMixIns.REGISTER(doodad.MIX_IN(widgetsMixIns.AttributesBase.$extend( { $TYPE_NAME: 'Attributes', $TYPE_UUID: '' +'dc8f0693-eb5e-4e0f-b9d9-2a6fea69b3bc', applyAttributes: doodad.PROTECTED(function applyAttributes(/*optional*/cssClassNames, elements) { if (client.isElement(elements)) { elements = [elements]; }; if (root.DD_ASSERT) { root.DD_ASSERT(types.isArrayLike(elements), "Invalid elements array."); root.DD_ASSERT(tools.every(elements, client.isElement), "Invalid elements array."); }; const attributes = this.getAttributes(cssClassNames), keys = types.keys(attributes), keysLen = keys.length, elementsLen = elements.length; for (let i = 0; i < keysLen; i++) { const name = keys[i]; const val = attributes[name]; for (let j = 0; j < elementsLen; j++) { if (types.has(elements, j)) { if (types.isNothing(val)) { elements[j].removeAttribute(name); } else { elements[j].setAttribute(name, val); }; }; }; }; }), }))); widgetsMixIns.REGISTER(doodad.MIX_IN(widgetsMixIns.Attributes.$extend( widgetsMixIns.IdentitiesBase, { $TYPE_NAME: 'Identities', $TYPE_UUID: '' +'3a1b1584-4a11-4861-ba05-781ccc90d3c6', applyIdentity: doodad.PROTECTED(function applyIdentity(/*optional*/cssClassNames, elements) { if (client.isElement(elements)) { elements = [elements]; }; if (root.DD_ASSERT) { root.DD_ASSERT(types.isArrayLike(elements), "Invalid elements array."); root.DD_ASSERT(tools.every(elements, client.isElement), "Invalid elements array."); }; const attributes = this.getAttributes(cssClassNames), elementsLen = elements.length; for (let i = 0; i < elementsLen; i++) { if (types.has(elements, i)) { const element = elements[i]; if (types.isNothing(attributes.id)) { element.removeAttribute('id'); } else { element.setAttribute('id', attributes.id); }; if (types.isNothing(attributes.name)) { element.removeAttribute('name'); } else { element.setAttribute('name', attributes.name); }; if (types.isNothing(attributes['class'])) { element.removeAttribute('class'); } else { element.setAttribute('class', attributes['class']); }; }; }; }), }))); widgetsMixIns.REGISTER(doodad.MIX_IN(widgetsMixIns.Attributes.$extend( widgetsMixIns.StylesBase, { $TYPE_NAME: 'Styles', $TYPE_UUID: '' +'aefec003-2d37-49c8-9109-e75ccb40ca8b', applyStyles: doodad.PROTECTED(function applyStyles(/*optional*/cssClassNames, elements) { if (client.isElement(elements)) { elements = [elements]; }; if (root.DD_ASSERT) { root.DD_ASSERT(types.isArrayLike(elements), "Invalid elements array."); root.DD_ASSERT(tools.every(elements, client.isElement), "Invalid elements array."); }; const styles = this.getStyles(cssClassNames), keys = types.keys(styles), keysLen = keys.length, elementsLen = elements.length; for (let i = 0; i < keysLen; i++) { const name = keys[i]; let val = styles[name]; if (types.isNothing(val)) { val = null; } else if (types.isFunction(val.toString)) { val = val.toString(); }; for (let j = 0; j < elementsLen; j++) { if (types.has(elements, j)) { elements[j].style[name] = val; }; }; }; }), }))); widgetsMixIns.REGISTER(doodad.MIX_IN(widgetsMixIns.RenderBase.$extend( { $TYPE_NAME: 'Render', $TYPE_UUID: '' +'1d8beadf-87f1-47ec-87b0-a35d9447f960', acquire: doodad.OVERRIDE(doodad.CALL_FIRST(function acquire() { if (types._instanceof(this, clientIO.DomOutputStream)) { this._super(); } else { this.overrideSuper(); }; })), release: doodad.OVERRIDE(doodad.CALL_FIRST(function release() { if (types._instanceof(this, clientIO.DomOutputStream)) { this._super(); } else { this.overrideSuper(); }; })), }))); widgetsMixIns.REGISTER(doodad.MIX_IN(doodad.Class.$extend( widgetsMixIns.Render, { $TYPE_NAME: 'Widget', $TYPE_UUID: '' +'8bc7e34d-60d2-4e89-b280-8c7168d01ff2', }))); widgetsMixIns.REGISTER(doodad.MIX_IN(widgetsMixIns.Widget.$extend( widgetsMixIns.Attributes, widgetsMixIns.Identities, widgetsMixIns.Styles, mixIns.JsEvents, { $TYPE_NAME: 'HtmlWidget', $TYPE_UUID: '' +'a1889ed1-4375-4f89-be5e-9218b6a3fdc5', }))); //================================== // Widget base //================================== widgets.REGISTER(doodad.BASE(io.TextOutputStream.$extend( ioMixIns.TextTransformableOut, widgetsMixIns.Widget, { $TYPE_NAME: 'Widget', $TYPE_UUID: '' +'c7f9d45c-36b2-43f7-9c22-a3b80d146073', }))); widgets.REGISTER(doodad.BASE(clientIO.DomOutputStream.$extend( widgetsMixIns.HtmlWidget, { $TYPE_NAME: 'HtmlWidget', $TYPE_UUID: '' +'d4eed2f0-f444-43e8-816d-2afa7cae8b58', }))); }, }; return modules; };