UNPKG

skylark-utils

Version:

An Elegant HTML5 JavaScript Library.

231 lines (204 loc) 4.97 kB
define([ "./skylark", "./langx", "./datax", "./dnd", "./eventer", "./filer", "./finder", "./fx", "./geom", "./mover", "./noder", "./styler" ], function(skylark, langx, datax, dnd, eventer, filer, finder, fx, geom, mover, noder, styler) { var map = Array.prototype.map, slice = Array.prototype.slice; var VisualElement = langx.klass({ klassName: "VisualElement", "init": function(node) { if (langx.isString(node)) { node = document.getElementById(node); } this.domNode = node; } }); var root = new VisualElement(document.body), velm = function(node) { if (node) { return new VisualElement(node); } else { return root; } }; function _delegator(fn, context) { return function() { var self = this, elem = self.domNode, ret = fn.apply(context, [elem].concat(slice.call(arguments))); if (ret) { if (ret === context) { return self; } else { if (ret instanceof HTMLElement) { ret = new VisualElement(ret); } else if (langx.isArrayLike(ret)) { ret = map.call(ret, function(el) { if (el instanceof HTMLElement) { return new VisualElement(ret); } else { return el; } }) } } } return ret; }; } langx.mixin(velm, { batch: function(nodes, action, args) { nodes.forEach(function(node) { var elm = (node instanceof VisualElement) ? node : velm(node); elm[action].apply(elm, args); }); return this; }, root: new VisualElement(document.body), VisualElement: VisualElement, delegate: function(names, context) { var props = {}; names.forEach(function(name) { props[name] = _delegator(context[name], context); }); VisualElement.partial(props); } }); // from ./datax velm.delegate([ "attr", "data", "prop", "removeAttr", "removeData", "text", "val" ], datax); // from ./dnd velm.delegate([ "draggable", "droppable" ], dnd); // from ./eventer velm.delegate([ "off", "on", "one", "shortcuts", "trigger" ], eventer); // from ./filer velm.delegate([ "picker", "dropzone" ], filer); // from ./finder velm.delegate([ "ancestor", "ancestors", "children", "descendant", "find", "findAll", "firstChild", "lastChild", "matches", "nextSibling", "nextSiblings", "parent", "previousSibling", "previousSiblings", "siblings" ], finder); velm.find = function(selector) { if (selector === "body") { return this.root; } else { return this.root.descendant(selector); } }; // from ./fx velm.delegate([ "animate", "fadeIn", "fadeOut", "fadeTo", "fadeToggle", "hide", "scrollToTop", "show", "toggle" ], fx); // from ./geom velm.delegate([ "borderExtents", "boundingPosition", "boundingRect", "clientHeight", "clientSize", "clientWidth", "contentRect", "height", "marginExtents", "offsetParent", "paddingExtents", "pagePosition", "pageRect", "relativePosition", "relativeRect", "scrollIntoView", "scrollLeft", "scrollTop", "size", "width" ], geom); // from ./mover velm.delegate([ "movable" ], dnd); // from ./noder velm.delegate([ "after", "append", "before", "clone", "contains", "contents", "empty", "html", "isChildOf", "ownerDoc", "prepend", "remove", "replace", "reverse", "throb", "traverse", "wrapper", "wrapperInner", "unwrap" ], noder); // from ./styler velm.delegate([ "addClass", "className", "css", "hasClass", "hide", "isInvisible", "removeClass", "show", "toggleClass" ], styler); return skylark.velm = velm; });