You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by je...@apache.org on 2018/11/01 18:38:32 UTC
[sling-org-apache-sling-app-cms] 01/02: updates to nomnom to
support YUI compression
This is an automated email from the ASF dual-hosted git repository.
jeb pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-app-cms.git
commit 6e240f3bdaadd47dcdaa846768bfcaff8980f968
Author: JE Bailey <ja...@sas.com>
AuthorDate: Thu Nov 1 14:32:15 2018 -0400
updates to nomnom to support YUI compression
---
ui/src/main/frontend/src/js/nomnom.js | 320 ++++++++++++++++------------------
1 file changed, 148 insertions(+), 172 deletions(-)
diff --git a/ui/src/main/frontend/src/js/nomnom.js b/ui/src/main/frontend/src/js/nomnom.js
index 07c587b..135d728 100644
--- a/ui/src/main/frontend/src/js/nomnom.js
+++ b/ui/src/main/frontend/src/js/nomnom.js
@@ -19,189 +19,165 @@
/* eslint-env es6, browser */
(function(nomnom) {
- if (!Element.prototype.matches) {
- Element.prototype.matches = Element.prototype.msMatchesSelector;
- }
-
- if (typeof NodeList.prototype.forEach !== "function" && typeof Array.prototype.forEach === "function") {
- NodeList.prototype.forEach = Array.prototype.forEach;
- }
-
- var tagSelectors = {};
- var debug = false;
- var elementMap = new WeakMap();
- var topics = {};
-
-// public
-nomnom.decorate = function(selector, config) {
- if (debug) {
- console.log("storing selector" + selector);
+ if (!Element.prototype.matches) {
+ Element.prototype.matches = Element.prototype.msMatchesSelector;
}
- tagSelectors[selector] = config;
- let foundItems = document.querySelectorAll(selector);
- if (foundItems) {
- foundItems.forEach(function(node) {
- wrap(node, config);
- });
+
+ if (typeof NodeList.prototype.forEach !== "function" && typeof Array.prototype.forEach === "function") {
+ NodeList.prototype.forEach = Array.prototype.forEach;
}
-};
-nomnom.subscribe = function(topic, listener) {
- if (!topics[topic]){
- topics[topic] = new Map();
- }
- var caller = this;
- topics[topic].set(caller,listener);
- return {
- remove: function() {
- topics[topic].delete(caller);
+ var tagSelectors = {};
+ var debug = false;
+ var elementMap = new WeakMap();
+
+ // public
+ nomnom.decorate = function(selector, config) {
+ if (debug) {
+ console.log("storing selector" + selector);
}
- }
-};
+ tagSelectors[selector] = config;
+ var foundItems = document.querySelectorAll(selector);
+ if (foundItems) {
+ foundItems.forEach(function(node) {
+ wrap(node, config);
+ });
+ }
+ };
-nomnom.publish = function(topic) {
- if (!topics[topic]) {
- return;
- }
- var index = topics[topic].push(listener) - 1;
- topics[topic].forEach(function(caller, func) {
- func.apply(caller,arguments);
+ new MutationObserver(function(mutations) {
+ mutations.forEach(function(mutation) {
+ mutation.addedNodes.forEach(function(node) {
+ checkAll(node);
+ });
+ });
+ }).observe(document.body, {
+ attributes : false,
+ childList : true,
+ subtree : true,
+ characterData : false
});
-};
-new MutationObserver(function(mutations) {
- mutations.forEach(function(mutation) {
- mutation.addedNodes.forEach(function(node) {
- checkAll(node);
- });
- });
-}).observe(document.body, {
- attributes : false,
- childList : true,
- subtree : true,
- characterData : false
-});
-
-var wrap = function(node, config) {
- if (debug) {
- console.log("decorating element " + node + node.name);
- }
- var configSet = elementMap.get(node);
- if (!configSet) {
- configSet = new Set();
- elementMap.set(node, configSet);
- }
- if (configSet.has(config)) {
- return;
- }
- configSet.add(config);
- var names = Object.getOwnPropertyNames(config);
- var keys = Object.keys(config);
- var data = config.data;
- names.forEach(function(name) {
- if (name === "constructor") {
- return;
- }
- if (debug) {
- console.log(" decorating " + name);
- }
- if (name === "events") {
- registerEventHandlers(node, data, config[name]);
- }
- if (name === "methods") {
- handleMethods(node, config[name]);
- }
- });
- keys.forEach(function(key) {
- if (debug) {
- console.log(" decorating " + key);
- }
- node[key] = config[key];
- });
- if (config.callbacks) {
- if (config.callbacks.created){
- config.callbacks.created.call(node);
- }
- }
-};
-
-// generic function to wrap the event handler in the case that
-// we only want it to fire for a specific child event
-var targetedEventHandler = function(fn, correctTarget, data) {
- return function(event) {
- if (!event.target.matches(correctTarget)) {
- return;
- }
- fn.call(this, event, data);
- };
-};
+ var wrap = function(node, config) {
+ if (debug) {
+ console.log("decorating element " + node + node.name);
+ }
+ var configSet = elementMap.get(node);
+ if (!configSet) {
+ configSet = new Set();
+ elementMap.set(node, configSet);
+ }
+ if (configSet.has(config)) {
+ return;
+ }
+ configSet.add(config);
+ var names = Object.getOwnPropertyNames(config);
+ var keys = Object.keys(config);
+ var data = config.data;
+ names.forEach(function(name) {
+ if (name === "constructor") {
+ return;
+ }
+ if (debug) {
+ console.log(" decorating " + name);
+ }
+ if (name === "events") {
+ registerEventHandlers(node, data, config[name]);
+ }
+ if (name === "methods") {
+ handleMethods(node, config[name]);
+ }
+ });
+ keys.forEach(function(key) {
+ if (debug) {
+ console.log(" decorating " + key);
+ }
+ node[key] = config[key];
+ });
+ if (config.callbacks) {
+ if (config.callbacks.created){
+ config.callbacks.created.call(node);
+ }
+ }
+ };
-var handleMethods = function(node, funcs) {
- for ( var funcName in funcs) {
- node[funcName] = funcs[funcName];
- }
-};
+ // generic function to wrap the event handler in the case that
+ // we only want it to fire for a specific child event
+ var targetedEventHandler = function(fn, correctTarget, data) {
+ return function(event) {
+ if (!event.target.matches(correctTarget)) {
+ return;
+ }
+ fn.call(this, event, data);
+ };
+ };
+
+ var handleMethods = function(node, funcs) {
+ for ( var funcName in funcs) {
+ node[funcName] = funcs[funcName];
+ }
+ };
-var registerEventHandlers = function(node, data, events) {
- for ( var eventName in events) {
- let possibleFunc = events[eventName];
- let targetNode = node;
- if (typeof possibleFunc !== "object") {
- targetNode.addEventListener(eventName, function(event) {
- possibleFunc.call(node, event, data);
- });
- } else {
- let selector = eventName;
- if (selector === "document") {
- targetNode = document;
- }
- for ( var childEventName in possibleFunc) {
- let func = possibleFunc[childEventName];
- if (selector !== "document"){
- func = targetedEventHandler(func, selector, data);
- }
- targetNode.addEventListener(childEventName,
- function(event) {
- func.call(node, event, data);
- });
- }
- }
- }
-};
+ var registerEventHandlers = function(node, data, events) {
+ for ( var eventName in events) {
+ var possibleFunc = events[eventName];
+ var targetNode = node;
+ if (typeof possibleFunc !== "object") {
+ targetNode.addEventListener(eventName, function(event) {
+ possibleFunc.call(node, event, data);
+ });
+ } else {
+ var selector = eventName;
+ if (selector === "document") {
+ targetNode = document;
+ }
+ for ( var childEventName in possibleFunc) {
+ var func = possibleFunc[childEventName];
+ if (selector !== "document"){
+ func = targetedEventHandler(func, selector, data);
+ }
+ targetNode.addEventListener(childEventName,
+ function(event) {
+ func.call(node, event, data);
+ });
+ }
+ }
+ }
+ };
-var checkAll = function(node) {
- var checkSet = new Set();
- checkSet.add(node);
- checkSet.forEach(function(element){
- if (element.querySelectorAll) {
- check(element);
- }
- let elements = element.children;
- if (elements){
- for (let i = 0; i < elements.length; i++) {
- checkSet.add(elements[i]);
- }
- }
- checkSet.delete(element);
- });
-}
+ var checkAll = function(node) {
+ var checkSet = new Set();
+ checkSet.add(node);
+ checkSet.forEach(function(foundElement){
+ if (foundElement.querySelectorAll) {
+ check(foundElement);
+ }
+ var foundElements = foundElement.children;
+ if (foundElements){
+ for (var i = 0; i < foundElements.length; i++) {
+ checkSet.add(foundElements[i]);
+ }
+ }
+ checkSet["delete"](foundElement);
+ });
+ }
-var check = function(node) {
- for ( var selector in tagSelectors) {
- let found = false;
- if (debug) {
- console.log("checking nodes for " + selector);
- }
- if (node.matches(selector)) {
- found = true;
- wrap(node, tagSelectors[selector]);
- }
- if (found && debug) {
- console.log("node found for " + selector);
- }
- }
-};
+ var check = function(node) {
+ for ( var selector in tagSelectors) {
+ var found = false;
+ if (debug) {
+ console.log("checking nodes for " + selector);
+ }
+ if (node.matches(selector)) {
+ found = true;
+ wrap(node, tagSelectors[selector]);
+ }
+ if (found && debug) {
+ console.log("node found for " + selector);
+ }
+ }
+ };
-return nomnom;
+ return nomnom;
})(window.nomnom = window.nomnom || {});
\ No newline at end of file