@doodad-js/widgets
Version:
Widgets base (alpha)
219 lines (181 loc) • 6.15 kB
JavaScript
// Copyright 2015-2018 Claude Petit, licensed under Apache License version 2.0
;
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;
};