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


The following commit(s) were added to refs/heads/master by this push:
     new 9c1fae7  SLING-7986 converted nomnom to object based configuration
9c1fae7 is described below

commit 9c1fae7c34b94c9d647128bd7883b71004570e31
Author: JE Bailey <[email protected]>
AuthorDate: Thu Oct 11 11:03:14 2018 -0400

    SLING-7986 converted nomnom to object based configuration
---
 ui/src/main/frontend/src/js/cms.draggable.js |  69 ++++++------
 ui/src/main/frontend/src/js/cms.form.js      | 154 ++++++++++++++-------------
 ui/src/main/frontend/src/js/cms.js           |  60 ++++++-----
 ui/src/main/frontend/src/js/cms.modal.js     |  18 ++--
 ui/src/main/frontend/src/js/cms.nav.js       |  14 +--
 ui/src/main/frontend/src/js/cms.suggest.js   |   4 +-
 ui/src/main/frontend/src/js/cms.toggle.js    |  15 +--
 ui/src/main/frontend/src/js/cms.upload.js    |  16 +--
 ui/src/main/frontend/src/js/nomnom.js        |  53 ++++-----
 9 files changed, 217 insertions(+), 186 deletions(-)

diff --git a/ui/src/main/frontend/src/js/cms.draggable.js 
b/ui/src/main/frontend/src/js/cms.draggable.js
index 415ef96..86c02cd 100644
--- a/ui/src/main/frontend/src/js/cms.draggable.js
+++ b/ui/src/main/frontend/src/js/cms.draggable.js
@@ -17,9 +17,9 @@
  * under the License.
  */
 
-nomnom.decorate(".is-draggable", class {
-  
-    initCallback() {
+nomnom.decorate(".is-draggable", {
+
+    initCallback: function() {
         this.dragData = {
             mouseX : 0,
             mouseY : 0,
@@ -27,41 +27,40 @@ nomnom.decorate(".is-draggable", class {
             elementX : 0,
             elementY : 0
           };
-    }
-    
-    
-    moveComplete(){
+    },
+
+    moveComplete: function(){
       this.dragData.mouseDown = false;
       this.dragData.elementX = parseInt(this.style.left) || 0;
       this.dragData.elementY = parseInt(this.style.top) || 0;
       return false;
-    }
-    
-  
-  "mousedown::"(event) {
-    if(event.target.matches('.modal-card-body *')){
-      return;
-    }
-    this.dragData.mouseX = event.clientX;
-    this.dragData.mouseY = event.clientY;
-    this.dragData.mouseDown = true;
-  }
-  
-  "mouseup::document"() {
-    if (this.dragData.mouseDown === true){
-      this.moveComplete();
-    }
-  }
+    },
 
-  "mousemove::document"(event){
-      if (this.dragData.mouseDown === false) {
-         return false;
-      }
-      var deltaX = event.clientX - this.dragData.mouseX;
-      var deltaY = event.clientY - this.dragData.mouseY;
-      this.style.left = this.dragData.elementX + deltaX + 'px';
-      this.style.top = this.dragData.elementY + deltaY + 'px';
-      return false;
-  }
-  
+    events : {
+        mousedown:function(event) {
+            if(event.target.matches('.modal-card-body *')){
+                return;
+              }
+              this.dragData.mouseX = event.clientX;
+              this.dragData.mouseY = event.clientY;
+              this.dragData.mouseDown = true;
+        },
+        document : {
+            mouseup : function(){
+                if (this.dragData.mouseDown === true){
+                    this.moveComplete();
+                  }
+            },
+            mousemove: function(event) {
+                if (this.dragData.mouseDown === false) {
+                    return false;
+                 }
+                 var deltaX = event.clientX - this.dragData.mouseX;
+                 var deltaY = event.clientY - this.dragData.mouseY;
+                 this.style.left = this.dragData.elementX + deltaX + 'px';
+                 this.style.top = this.dragData.elementY + deltaY + 'px';
+                 return false;
+              }
+        }
+    }
 });
\ No newline at end of file
diff --git a/ui/src/main/frontend/src/js/cms.form.js 
b/ui/src/main/frontend/src/js/cms.form.js
index 925d939..ba54088 100644
--- a/ui/src/main/frontend/src/js/cms.form.js
+++ b/ui/src/main/frontend/src/js/cms.form.js
@@ -18,89 +18,97 @@
  */
 
 
-nomnom.decorate(".Form-Ajax", class {
-    "submit::"(event){
-        event.preventDefault();
-        var $form = $(this);
-        var jcrcontent = false;
-        $form.find('input,select,textarea').each(function(idx,inp){
-            if(inp.name.indexOf('jcr:content') != -1){
-                jcrcontent = true;
-            }
-        });
-        if($form.data('addDate') && 
$form.find('input[name="jcr:content/jcr:lastModified"]').length == 0){
-            if(jcrcontent){
-                $form.append('<input type="hidden" 
name="jcr:content/jcr:lastModified" />');
-                $form.append('<input type="hidden" 
name="jcr:content/jcr:lastModifiedBy" />');
-                $form.append('<input type="hidden" 
name="jcr:content/jcr:created" />');
-                $form.append('<input type="hidden" 
name="jcr:content/jcr:createdBy" />');
-            } else {
-                $form.append('<input type="hidden" name="jcr:lastModified" 
/>');
-                $form.append('<input type="hidden" name="jcr:lastModifiedBy" 
/>');
-                $form.append('<input type="hidden" name="jcr:created" />');
-                $form.append('<input type="hidden" name="jcr:createdBy" />');
-            }
-        }
-        var callback = $form.data('callback');
-        var data = new FormData(this);
-        $form.find('.form-wrapper').attr('disabled', 'disabled');
-        $.ajax({
-            url: $form.attr('action'),
-            type: 'POST',
-            data: data,
-            processData: false,
-            contentType: false,
-            dataType: 'json',
-            success: function(res,msg){
-                if (callback && Sling.CMS.handlers[callback]){
-                    Sling.CMS.handlers[callback](res, msg);
-                } else {
-                    Sling.CMS.ui.confirmReload(res, msg);
+nomnom.decorate(".Form-Ajax", {
+    events :{
+        submit : function(event){
+            event.preventDefault();
+            var $form = $(this);
+            var jcrcontent = false;
+            $form.find('input,select,textarea').each(function(idx,inp){
+                if(inp.name.indexOf('jcr:content') != -1){
+                    jcrcontent = true;
                 }
-            },
-            error: function(xhr, msg, err){
-                if(window.self !== window.top){
-                    window.top.Sling.CMS.ui.confirmMessage(msg, err,function(){
-                        $form.find('.form-wrapper').removeAttr('disabled');
-                    });
+            });
+            if($form.data('addDate') && 
$form.find('input[name="jcr:content/jcr:lastModified"]').length == 0){
+                if(jcrcontent){
+                    $form.append('<input type="hidden" 
name="jcr:content/jcr:lastModified" />');
+                    $form.append('<input type="hidden" 
name="jcr:content/jcr:lastModifiedBy" />');
+                    $form.append('<input type="hidden" 
name="jcr:content/jcr:created" />');
+                    $form.append('<input type="hidden" 
name="jcr:content/jcr:createdBy" />');
                 } else {
-                    Sling.CMS.ui.confirmMessage(msg, err,function(){
-                        $form.find('.form-wrapper').removeAttr('disabled');
-                    });
+                    $form.append('<input type="hidden" name="jcr:lastModified" 
/>');
+                    $form.append('<input type="hidden" 
name="jcr:lastModifiedBy" />');
+                    $form.append('<input type="hidden" name="jcr:created" />');
+                    $form.append('<input type="hidden" name="jcr:createdBy" 
/>');
                 }
             }
-        });
-        return false;
+            var callback = $form.data('callback');
+            var data = new FormData(this);
+            $form.find('.form-wrapper').attr('disabled', 'disabled');
+            $.ajax({
+                url: $form.attr('action'),
+                type: 'POST',
+                data: data,
+                processData: false,
+                contentType: false,
+                dataType: 'json',
+                success: function(res,msg){
+                    if (callback && Sling.CMS.handlers[callback]){
+                        Sling.CMS.handlers[callback](res, msg);
+                    } else {
+                        Sling.CMS.ui.confirmReload(res, msg);
+                    }
+                },
+                error: function(xhr, msg, err){
+                    if(window.self !== window.top){
+                        window.top.Sling.CMS.ui.confirmMessage(msg, 
err,function(){
+                            $form.find('.form-wrapper').removeAttr('disabled');
+                        });
+                    } else {
+                        Sling.CMS.ui.confirmMessage(msg, err,function(){
+                            $form.find('.form-wrapper').removeAttr('disabled');
+                        });
+                    }
+                }
+            });
+            return false;
+        }
     }
 });
 
 
-nomnom.decorate('.Get-Form', class {
-    "submit::"(event){
-        event.preventDefault();
-        event.stopPropagation();
-        var $form = $(this);
-        var params = $form.serialize();
-        $form.find('.form-wrapper').attr('disabled', 'disabled');
-        $($form.data('target')).load($form.attr('action') + '?' + params +'  ' 
+ $form.data('load'), function(){
-            $form.find('.form-wrapper').removeAttr('disabled');
-        });
-        return false;
+nomnom.decorate('.Get-Form', {
+    events : {
+        submit : function () {
+            event.preventDefault();
+            event.stopPropagation();
+            var $form = $(this);
+            var params = $form.serialize();
+            $form.find('.form-wrapper').attr('disabled', 'disabled');
+            $($form.data('target')).load($form.attr('action') + '?' + params 
+'  ' + $form.data('load'), function(){
+                $form.find('.form-wrapper').removeAttr('disabled');
+            });
+            return false;
+        }
     }
-    
 });
 
-nomnom.decorate(".repeating", class {
-    "click::.repeating__add"(event) {
-        event.preventDefault();
-        var $rep = $(this);
-        var $div = $("<div/>").html($rep.find(".repeating__template").html());
-        $rep.find(".repeating__container").append($div);
-    }
-
-    "click::.repeating__remove"(event) {
-        event.preventDefault();
-        var $rem = $(event.target);
-        $rem.parents(".repeating__item").remove();
+nomnom.decorate(".repeating", {
+    events : {
+        ".repeating__add" : {
+            click : function(){
+                event.preventDefault();
+                var $rep = $(this);
+                var $div = 
$("<div/>").html($rep.find(".repeating__template").html());
+                $rep.find(".repeating__container").append($div);
+            }
+        },
+        ".repeating__remove" : {
+            click : function() {
+                event.preventDefault();
+                var $rem = $(event.target);
+                $rem.parents(".repeating__item").remove();
+            }
+        }
     }
 });
diff --git a/ui/src/main/frontend/src/js/cms.js 
b/ui/src/main/frontend/src/js/cms.js
index b9066d4..e22c344 100644
--- a/ui/src/main/frontend/src/js/cms.js
+++ b/ui/src/main/frontend/src/js/cms.js
@@ -167,9 +167,9 @@ nomnom.decorate(".namehint",class {
      }
 });
 
-nomnom.decorate(".table .load-versions", class {
+nomnom.decorate(".table .load-versions", {
    
-    initCallback(){
+    initCallback: function() {
         var $ctr = $(this);
         var $table = $ctr.closest('.table');
         $.getJSON($ctr.data('url'),function(res){
@@ -182,28 +182,34 @@ nomnom.decorate(".table .load-versions", class {
     
 });
 
-nomnom.decorate('.search-button', class {
-    "click::"(event) {
-        Sling.CMS.searchfield = 
$($(event.target).closest('.field').find('.pathfield'));
+
+nomnom.decorate('.search-button', {
+    events :{
+        click : function(){
+            Sling.CMS.ext['searchbutton'] =  Sling.CMS.ext['searchbutton'] || 
{};
+            var searchbutton = Sling.CMS.ext['searchbutton'];
+            searchbutton.active = 
$(event.target).closest('.field').find('.pathfield');
+        }
     }
 });
 
-nomnom.decorate('.search-select-button', class {
-    "click::"(event) {
-        event.stopPropagation();
-        event.preventDefault();
-        var $btn = $(event.target);
-        var $active = Sling.CMS.searchfield;
-        $active.val($btn.data('path'));
-        $btn.closest('.modal').remove();
+
+nomnom.decorate('.search-select-button', {
+    events :{
+        click : function(event){
+            var $btn = $(evt.target);
+            var $active = Sling.CMS.ext['searchbutton'].active;
+            $active.val($btn.data('path'));
+            $btn.closest('.modal').remove();
+        }
     }
 });
 
 
 
-nomnom.decorate(".table", class {
+nomnom.decorate(".table", {
    
-    initCallback(){
+    initCallback: function(){
         var $table = $(this);
         var sort = $table.data('sort') !== 'false';
         var paginate = $table.data('paginate') !== 'false';
@@ -211,20 +217,24 @@ nomnom.decorate(".table", class {
             sort: sort,
             paginate: paginate
         });
-    }
+    },
     
-    "click::tbody tr > *"(event) {
-        $('.actions-target > *').appendTo('tr.is-selected .cell-actions');
-        $(this).find('tr').removeClass('is-selected');
-        var $target = $(event.target).closest("tr");
-        $target.addClass('is-selected');
-        $target.find('.cell-actions > *').appendTo('.actions-target')
+    events :{
+        "tbody tr > *" : {
+            click: function(event){
+                $('.actions-target > *').appendTo('tr.is-selected 
.cell-actions');
+                $(this).find('tr').removeClass('is-selected');
+                var $target = $(event.target).closest("tr");
+                $target.addClass('is-selected');
+                $target.find('.cell-actions > *').appendTo('.actions-target')
+            }
+        }
     }
-    
+
 });
 
-nomnom.decorate('.sling-cms-include-config', class {
-    initCallback() {
+nomnom.decorate('.sling-cms-include-config', {
+    initCallback: function() {
         var $ctr = $(this);
         var load = function(){
             var config = 
$($ctr.data('source')).find('option:selected').data('config');
diff --git a/ui/src/main/frontend/src/js/cms.modal.js 
b/ui/src/main/frontend/src/js/cms.modal.js
index cc75e80..d276d0c 100644
--- a/ui/src/main/frontend/src/js/cms.modal.js
+++ b/ui/src/main/frontend/src/js/cms.modal.js
@@ -16,15 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-nomnom.decorate("a.Fetch-Modal", class {
+nomnom.decorate("a.Fetch-Modal", {
     
-    "click::"(event) {
-        event.preventDefault();
-        this.setAttribute("disabled",'disabled');
-        this.getModal(this.getAttribute('data-title'), 
encodeURI(this.getAttribute('href')), this.getAttribute('data-path'));
-    }
-  
-    getModal(title, link, path, complete) {
+    events :{
+        click: function(event){
+            event.preventDefault();
+            this.setAttribute("disabled",'disabled');
+            this.getModal(this.getAttribute('data-title'), 
encodeURI(this.getAttribute('href')), this.getAttribute('data-path'));
+        }
+    },
+    
+    getModal: function(title, link, path, complete) {
         var button = this;
         var $modal = $('<div class="modal"><div 
class="modal-background"></div><div class="modal-card is-draggable"><header 
class="modal-card-head"><p class="modal-card-title">'+title+'</p><button 
class="delete" aria-label="close"></button></header><section 
class="modal-card-body"></section><footer 
class="modal-card-foot"></footer></div>');
         $('body').append($modal);
diff --git a/ui/src/main/frontend/src/js/cms.nav.js 
b/ui/src/main/frontend/src/js/cms.nav.js
index 88aa2b7..6ff1604 100644
--- a/ui/src/main/frontend/src/js/cms.nav.js
+++ b/ui/src/main/frontend/src/js/cms.nav.js
@@ -17,11 +17,13 @@
  * under the License.
  */
 
-nomnom.decorate(".navbar-burger", class {
-  "click::"() {
-    var target = document.querySelector(this.dataset.target);
-    target.classList.toggle('is-active');
-    this.classList.toggle('is-active');
-  }
+nomnom.decorate(".navbar-burger", {
+    events :{
+        click: function(){
+            var target = document.querySelector(this.dataset.target);
+            target.classList.toggle('is-active');
+            this.classList.toggle('is-active');
+        }
+    }
 });
 
diff --git a/ui/src/main/frontend/src/js/cms.suggest.js 
b/ui/src/main/frontend/src/js/cms.suggest.js
index 8191326..9f58a95 100644
--- a/ui/src/main/frontend/src/js/cms.suggest.js
+++ b/ui/src/main/frontend/src/js/cms.suggest.js
@@ -17,8 +17,8 @@
  * under the License.
  */
 
-nomnom.decorate("input.pathfield", class {
-    initCallback(){
+nomnom.decorate("input.pathfield", {
+    initCallback: function(){
         var type = $(this).data('type');
         var base = $(this).data('base');
         Sling.CMS.ui.suggest(this, type, base);
diff --git a/ui/src/main/frontend/src/js/cms.toggle.js 
b/ui/src/main/frontend/src/js/cms.toggle.js
index 5a8a91b..97cd4eb 100644
--- a/ui/src/main/frontend/src/js/cms.toggle.js
+++ b/ui/src/main/frontend/src/js/cms.toggle.js
@@ -17,13 +17,16 @@
  * under the License.
  */
 
-nomnom.decorate('.toggle-hidden' , class {
-    "click::"(){
-        $($(this).data('target')).toggleClass('is-hidden');
+nomnom.decorate('.toggle-hidden' , {
+    events : {
+        click: function() {
+            $($(this).data('target')).toggleClass('is-hidden');
+        }
     }
-});
-nomnom.decorate('.toggle-value', class {
-    initCallback(){
+});
+    
+nomnom.decorate('.toggle-value', {
+    initCallback: function(){
         var source = this.getAttribute('data-toggle-source');
         var selector = 'input[name="'+ source +'"], select[name="'+ selector 
+'"]';
         var $tog = $(this);
diff --git a/ui/src/main/frontend/src/js/cms.upload.js 
b/ui/src/main/frontend/src/js/cms.upload.js
index 3647cf2..0815f4e 100644
--- a/ui/src/main/frontend/src/js/cms.upload.js
+++ b/ui/src/main/frontend/src/js/cms.upload.js
@@ -17,11 +17,15 @@
  * under the License.
  */
 
-nomnom.decorate(".file",class {
-    "change::input"(event){
-        var nameField = this.querySelector(':scope .file-name');
-        if (nameField){
-            nameField.textContent = event.target.files[0].name;
+nomnom.decorate(".file", {
+    events:{
+        input:{
+            change : function(event) {
+                var nameField = this.querySelector(':scope .file-name');
+                if (nameField){
+                    nameField.textContent = event.target.files[0].name;
+                }
+            }
         }
-     }
+    }
 });
\ No newline at end of file
diff --git a/ui/src/main/frontend/src/js/nomnom.js 
b/ui/src/main/frontend/src/js/nomnom.js
index a4ec518..4b0de0d 100644
--- a/ui/src/main/frontend/src/js/nomnom.js
+++ b/ui/src/main/frontend/src/js/nomnom.js
@@ -61,9 +61,8 @@
             return;
         }
         configSet.add(config);
-        var configInstance = new config();
-        var names = Object.getOwnPropertyNames(config.prototype);
-        var keys = Object.keys(configInstance);
+        var names = Object.getOwnPropertyNames(config);
+        var keys = Object.keys(config);
         names.forEach(function(name) {
             if (name === "constructor") {
                 return;
@@ -71,17 +70,17 @@
             if (debug) {
                 console.log("   decorating " + name);
             }
-            if (name.indexOf("::") !== -1) {
-                registerEventHandler(node, name, configInstance[name]);
+            if (name === "events") {
+                registerEventHandlers(node, name, config[name]);
             } else {
-                node[name] = configInstance[name];
+                node[name] = config[name];
             }
         });
         keys.forEach(function(key) {
             if (debug) {
                 console.log("   decorating " + key);
             }
-            node[key] = configInstance[key];
+            node[key] = config[key];
         });
         if (node.initCallback) {
             node.initCallback.call(node);
@@ -93,32 +92,36 @@
     var targetedEventHandler = function(fn, correctTarget) {
         return function(event) {
             if (!event.target.matches(correctTarget)) {
-                console.log("ignoring "+ event.target.nodeName);
+                console.log("ignoring " + event.target.nodeName);
                 return;
             }
             fn.apply(this, arguments);
         };
     };
 
-    var registerEventHandler = function(node, propertyName, func) {
-        var values = propertyName.split("::");
-        var eventName = values[0];
-        var childSelector = values[1];
-
-        if (childSelector) {
-            if (childSelector !== "document") {
-                func = targetedEventHandler(func, childSelector);
+    var registerEventHandlers = function(node, propertyName, events) {
+        for ( var eventName in events) {
+            let possibleFunc = events[eventName];
+            if (typeof possibleFunc === "function") {
+                node.addEventListener(eventName, function(event) {
+                    possibleFunc.call(node, event);
+                });
+            } else {
+                let selector = eventName;
+                let targetNode = node;
+                for ( var childEventName in possibleFunc) {
+                    let func = targetedEventHandler(
+                            possibleFunc[childEventName], selector);
+                    if (selector == "document") {
+                        targetNode = document;
+                    }
+                    targetNode.addEventListener(childEventName,
+                            function(event) {
+                                func.call(node, event);
+                            });
+                }
             }
         }
-        if (childSelector === "document") {
-            document.addEventListener(eventName, function(event) {
-                func.call(node, event);
-            });
-            return;
-        }
-        node.addEventListener(eventName, function(event) {
-            func.call(node, event);
-        });
     };
 
     var check = function(node) {

Reply via email to