You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lo...@apache.org on 2018/12/12 14:45:30 UTC

[myfaces-tobago] branch master updated: TOBAGO-1633: Use TypeScript instead of JavaScript.

This is an automated email from the ASF dual-hosted git repository.

lofwyr pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/myfaces-tobago.git


The following commit(s) were added to refs/heads/master by this push:
     new 9664bff  TOBAGO-1633: Use TypeScript instead of JavaScript.
9664bff is described below

commit 9664bff5f01cf38e11f9f07568bc4f6a8de05bc7
Author: Udo Schnurpfeil <lo...@apache.org>
AuthorDate: Wed Dec 12 15:45:11 2018 +0100

    TOBAGO-1633: Use TypeScript instead of JavaScript.
    
    refactor:
     * clean up
     * event-listeners
---
 .../tobago-bootstrap/_version/js/tobago-sheet.js   |  37 ++----
 .../tobago-bootstrap/_version/js/tobago-suggest.js |  46 +++----
 .../tobago-bootstrap/_version/js/tobago.js         | 146 +--------------------
 3 files changed, 42 insertions(+), 187 deletions(-)

diff --git a/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/tobago/standard/tobago-bootstrap/_version/js/tobago-sheet.js b/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/tobago/standard/tobago-bootstrap/_version/js/tobago-sheet.js
index df5f018..7305a19 100644
--- a/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/tobago/standard/tobago-bootstrap/_version/js/tobago-sheet.js
+++ b/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/tobago/standard/tobago-bootstrap/_version/js/tobago-sheet.js
@@ -92,7 +92,7 @@ Tobago.Sheet.prototype.reloadWithAction = function(source, action) {
   var renderIds = this.id;
   if (this.behaviorCommands && this.behaviorCommands.reload) {
     if (this.behaviorCommands.reload.execute) {
-      executeIds +=  " " + behaviorCommands.reload.execute;
+      executeIds +=  " " + this.behaviorCommands.reload.execute;
     }
     if (this.behaviorCommands.reload.render) {
       renderIds +=  " " + this.behaviorCommands.reload.render;
@@ -300,7 +300,7 @@ Tobago.Sheet.setup2 = function (sheets) {
   });
 
   // scrolling
-  jQuery(sheets).find(".tobago-sheet-body").bind("scroll", function () {
+  jQuery(sheets).find(".tobago-sheet-body").on("scroll", function () {
     var sheetBody = jQuery(this);
     var scrollLeft = sheetBody.prop("scrollLeft");
     var scrollTop = sheetBody.prop("scrollTop");
@@ -334,12 +334,12 @@ Tobago.Sheet.setup2 = function (sheets) {
     var selectionMode = sheet.data("tobago-selection-mode");
     if (selectionMode === "single" || selectionMode === "singleOrNone" || selectionMode === "multi") {
       Tobago.Sheet.getRows(sheet).each(function () {
-        var row = jQuery(this);
-        row.bind("mousedown", function (event) {
+        var $row = jQuery(this);
+        $row.on("mousedown", function (event) {
           sheet.data("tobago-mouse-down-x", event.clientX);
           sheet.data("tobago-mouse-down-y", event.clientY);
         });
-        row.click(function (event) {
+        $row.click(function (event) {
           var $target = jQuery(event.target);
           var $row = jQuery(this);
           if ($target.hasClass("tobago-sheet-columnSelector") || !Tobago.Sheet.isInputElement($target)) {
@@ -410,7 +410,7 @@ Tobago.Sheet.setup2 = function (sheets) {
         });
         // todo:
         if (Tobago.Sheets.get(sheet.attr("id")).dblClickActionId) {
-          row.bind("dblclick", function (event) {
+          $row.on("dblclick", function (event) {
             // todo: re-implement
             Tobago.Sheets.get(sheet.attr("id")).doDblClick(event);
           });
@@ -501,29 +501,17 @@ Tobago.Sheet.prototype.setup = function() {
 };
 
 Tobago.Sheet.prototype.initReload = function() {
-  var sheet = jQuery(Tobago.Utils.escapeClientId(this.id));
-  var reload = sheet.data("tobago-reload");
+  var $sheet = jQuery(Tobago.Utils.escapeClientId(this.id));
+  var reload = $sheet.data("tobago-reload");
   if (typeof reload === "number") {
     Tobago.addReloadTimeout(this.id, Tobago.bind2(this, "reloadWithAction", null, this.id), reload);
   }
 };
 
 Tobago.Sheet.prototype.doDblClick = function(event) {
-    if (! event) {
-      event = window.event;
-    }
-
-    var srcElement;
-    if (event.target) {
-      // W3C DOM level 2
-      srcElement = event.target;
-    } else {
-      // IE
-      srcElement = event.srcElement;
-    }
-
-    if (!Tobago.Sheet.isInputElement(jQuery(srcElement))) {
-      var row = jQuery(srcElement).closest("tr");
+    var target = event.target;
+    if (!Tobago.Sheet.isInputElement(jQuery(target))) {
+      var row = jQuery(target).closest("tr");
       var sheet = row.closest(".tobago-sheet");
       var rowIndex = row.index() + sheet.data("tobago-first");
       if (this.dblClickActionId) {
@@ -535,7 +523,6 @@ Tobago.Sheet.prototype.doDblClick = function(event) {
           action = this.id + ":" + rowIndex + ":" + this.dblClickActionId;
         }
         if (this.dblClickReloadComponentId && this.dblClickReloadComponentId.length > 0) {
-          //Tobago.reloadComponent(srcElement, this.dblClickReloadComponentId, action);
           jsf.ajax.request(
               action,
               event,
@@ -545,7 +532,7 @@ Tobago.Sheet.prototype.doDblClick = function(event) {
                 render: this.dblClickReloadComponentId
               });
         } else {
-          Tobago.submitAction(srcElement, action);
+          Tobago.submitAction(target, action);
         }
       }
     }
diff --git a/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/tobago/standard/tobago-bootstrap/_version/js/tobago-suggest.js b/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/tobago/standard/tobago-bootstrap/_version/js/tobago-suggest.js
index dbb6b0a..31b04c3 100644
--- a/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/tobago/standard/tobago-bootstrap/_version/js/tobago-suggest.js
+++ b/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/tobago/standard/tobago-bootstrap/_version/js/tobago-suggest.js
@@ -25,7 +25,7 @@ Tobago.Suggest.loadFromServer = function (input) {
 
     var suggest = jQuery(Tobago.Utils.escapeClientId(input.data("tobago-suggest-for")));
 
-    if (suggest.val() != query) {
+    if (suggest.val() !== query) {
 
       if (timeout) {
         clearTimeout(timeout);
@@ -71,19 +71,19 @@ Tobago.Suggest.init = function (elements) {
   var suggests = Tobago.Utils.selectWithJQuery(elements, ".tobago-suggest");
 
   suggests.each(function () {
-    var suggest = jQuery(this);
-    var input = jQuery(Tobago.Utils.escapeClientId(suggest.data("tobago-suggest-for")));
+    var $suggest = jQuery(this);
+    var $input = jQuery(Tobago.Utils.escapeClientId($suggest.data("tobago-suggest-for")));
 
-    var minChars = suggest.data("tobago-suggest-min-chars");
-    var maxItems = suggest.data("tobago-suggest-max-items");
+    var minChars = $suggest.data("tobago-suggest-min-chars");
+    var maxItems = $suggest.data("tobago-suggest-max-items");
 
-    var update = typeof suggest.data("tobago-suggest-update") != "undefined";
-    var totalCount = suggest.data("tobago-suggest-total-count"); // todo
+    var update = typeof $suggest.data("tobago-suggest-update") != "undefined";
+    var totalCount = $suggest.data("tobago-suggest-total-count"); // todo
 
     var localMenu = false;
-    var dataTobagoMarkup = jQuery(Tobago.Utils.escapeClientId(input.attr("name"))).attr("data-tobago-markup");
+    var dataTobagoMarkup = jQuery(Tobago.Utils.escapeClientId($input.attr("name"))).attr("data-tobago-markup");
     if (dataTobagoMarkup !== undefined) {
-      var markups = jQuery.parseJSON(jQuery(Tobago.Utils.escapeClientId(input.attr("name"))).attr("data-tobago-markup"));
+      var markups = jQuery.parseJSON(jQuery(Tobago.Utils.escapeClientId($input.attr("name"))).attr("data-tobago-markup"));
       markups.forEach(function (markup) {
         if (markup === "localMenu") {
           localMenu = true;
@@ -91,21 +91,21 @@ Tobago.Suggest.init = function (elements) {
       });
     }
 
-    if (update && input.hasClass("tt-input")) { // already initialized: so only update data
-      var asyncResults = suggest.data("tobago-suggest-callback"); // comes from "findMatches()"
+    if (update && $input.hasClass("tt-input")) { // already initialized: so only update data
+      var asyncResults = $suggest.data("tobago-suggest-callback"); // comes from "findMatches()"
       if (asyncResults) {
-        var data1 = suggest.data("tobago-suggest-data");
+        var data1 = $suggest.data("tobago-suggest-data");
         asyncResults(data1);
       }
     } else { // new
-      input.data("tobago-suggest-for", suggest.attr("id"));
-      input.attr("autocomplete", "off");
+      $input.data("tobago-suggest-for", $suggest.attr("id"));
+      $input.attr("autocomplete", "off");
 
       var source;
       if (update) {
-        source = Tobago.Suggest.loadFromServer(input);
+        source = Tobago.Suggest.loadFromServer($input);
       } else {
-        var data2 = suggest.data("tobago-suggest-data");
+        var data2 = $suggest.data("tobago-suggest-data");
         source = Tobago.Suggest.fromClient(data2);
       }
 
@@ -113,16 +113,16 @@ Tobago.Suggest.init = function (elements) {
         return jQuery(Tobago.Utils.escapeClientId(suggest.attr('id') + "::popup"));
       }
 
-      var $suggestPopup = getSuggestPopup(suggest);
+      var $suggestPopup = getSuggestPopup($suggest);
       if ($suggestPopup.length > 0) {
         $suggestPopup.remove();
       }
 
       jQuery(".tobago-page-menuStore")
-          .append("<div id='" + suggest.attr('id') + "::popup" + "' class='tt-menu tt-empty'/>");
-      $suggestPopup = getSuggestPopup(suggest);
+          .append("<div id='" + $suggest.attr('id') + "::popup" + "' class='tt-menu tt-empty'/>");
+      $suggestPopup = getSuggestPopup($suggest);
 
-      input.typeahead({
+      $input.typeahead({
         menu: localMenu ? null : $suggestPopup,
         minLength: minChars,
         hint: true,// todo
@@ -132,13 +132,13 @@ Tobago.Suggest.init = function (elements) {
         limit: maxItems,
         source: source
       }).on('typeahead:change', function (event) {
-        input.trigger('change');
+        $input.trigger('change');
       });
 
-      input.bind('typeahead:open', function () {
+      $input.on('typeahead:open', function () {
         var $input = jQuery(this);
         var $suggest = $input.parent().siblings(".tobago-suggest");
-        if ($suggest.length == 0) {
+        if ($suggest.length === 0) {
           $suggest = $input.parent().parent().parent().siblings(".tobago-suggest");
         }
         var $suggestPopup = jQuery(Tobago.Utils.escapeClientId($suggest.attr('id') + "::popup"));
diff --git a/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/tobago/standard/tobago-bootstrap/_version/js/tobago.js b/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/tobago/standard/tobago-bootstrap/_version/js/tobago.js
index 4ad5716..5d50596 100644
--- a/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/tobago/standard/tobago-bootstrap/_version/js/tobago.js
+++ b/tobago-theme/tobago-theme-standard/src/main/resources/META-INF/resources/tobago/standard/tobago-bootstrap/_version/js/tobago.js
@@ -53,8 +53,6 @@ var Tobago = {
 
   jsObjects: [],
 
-  eventListeners: [],
-
   /**
     * Check browser types and versions.
     * Please try to use jQuery.support instead of this object!
@@ -146,9 +144,10 @@ var Tobago = {
     this.initMarker = true;
 
     console.time("[tobago] init"); // @DEV_ONLY
-    this.addBindEventListener(Tobago.findForm().get(0), 'submit', this, Tobago.onSubmit);
 
-    this.addBindEventListener(window, 'unload', this, 'onUnload');
+    document.querySelector("form").addEventListener('submit', Tobago.onSubmit);
+
+    window.addEventListener('unload', Tobago.onUnload);
 
     for (var order = 0; order < Tobago.listeners.documentReady.length; order++) {
       var list = Tobago.listeners.documentReady[order];
@@ -212,6 +211,8 @@ var Tobago = {
    */
   onUnload: function() {
 
+    console.info('on onload'); // @DEV_ONLY
+
     var phase = this.isSubmit ? Tobago.listeners.beforeUnload : Tobago.listeners.beforeExit;
 
     for (var order = 0; order < phase.length; order++) {
@@ -229,8 +230,6 @@ var Tobago = {
   },
 
   destroyObjects: function() {
-    this.removeEventListeners();
-
     for (var i = 0; i < this.jsObjects.length; i++) {
       try {
         this.destroyObject(this.jsObjects[i]);
@@ -242,21 +241,6 @@ var Tobago = {
     delete this.jsObjects;
   },
 
-  removeEventListeners: function() {
-    var count = 0;
-    for (var i = 0; i < this.eventListeners.length; i++) {
-      var el = this.eventListeners[i];
-      this.removeEventListener(el);
-      delete el.element;
-      delete el.event;
-      delete el.func;
-      this.eventListeners[i] = undefined;
-      count++;
-    }
-    delete this.eventListeners;
-//    alert(count + " EverntListener geloescht");
-  },
-
   destroyObject: function(obj) {
     if (obj.htmlElement) {
       // test
@@ -403,7 +387,7 @@ var Tobago = {
     } else {
       scrollPanels = elements.find("[data-tobago-scroll-panel]");
     }
-    scrollPanels.bind("scroll", function () {
+    scrollPanels.on("scroll", function () {
       var panel = jQuery(this);
       var scrollLeft = panel.prop("scrollLeft");
       var scrollTop = panel.prop("scrollTop");
@@ -423,46 +407,6 @@ var Tobago = {
     });
   },
 
-  /* supports only two background images in the moment */
-  fixMultiBackgroundIE8: function (element) {
-    var style = element.data("tobago-style");
-    var index;
-    var backgroundImage = style.backgroundImage;
-    var backgroundImage2;
-    if (backgroundImage) {
-      index = backgroundImage.indexOf(",");
-      if (index > -1) {
-        style.backgroundImage = backgroundImage.substring(0, index);
-        backgroundImage2 = backgroundImage.substring(index + 1);
-      }
-    }
-    var backgroundPosition = style.backgroundPosition;
-    var backgroundPosition2;
-    if (backgroundPosition) {
-      index = backgroundPosition.indexOf(",");
-      if (index > -1) {
-        style.backgroundPosition = backgroundPosition.substring(0, index);
-        backgroundPosition2 = backgroundPosition.substring(index + 1);
-      }
-    }
-    if (backgroundImage2) {
-      var extra = jQuery("<span>").appendTo(element);
-      extra.css({
-        backgroundImage: backgroundImage2,
-        backgroundPosition: backgroundPosition2,
-        backgroundRepeat: "no-repeat",
-        position: "absolute",
-        left: "0",
-        right: "0",
-        top: "0",
-        bottom: "0"
-      });
-      element.css({
-        position: "relative"
-      });
-    }
-  },
-
 // -------- Util functions ----------------------------------------------------
 
   /**
@@ -563,38 +507,6 @@ var Tobago = {
   },
 
   /**
-   * Add an event listener to an HTML element
-   */
-  addEventListener: function(element, event, myFunction) {
-    var el = new Tobago.EventListener(element, event, myFunction);
-    if (el.element.addEventListener) { // this is DOM2
-      el.element.addEventListener(el.event, el.func, false);
-    } else { // IE
-      el.element.attachEvent('on' + el.event, el.func);
-    }
-  },
-
-  /**
-   * Remove an event listener from an HTML element
-   */
-  removeEventListener: function(element, event, myFunction) {
-    if (!event && !myFunction && element.element && element.event && element.func) {
-      myFunction = element.func;
-      event = element.event;
-      element = element.element;
-    }
-    if (element.removeEventListener) { // this is DOM2
-      element.removeEventListener(event, myFunction, true);
-    }
-    else if (element.detachEvent) {  // IE
-      element.detachEvent('on' + event, myFunction);
-    } else {
-      console.debug('Unknown Element: ' + typeof element); // @DEV_ONLY
-    }
-
-  },
-
-  /**
    * Returns a function which binds the named function 'func' of the object 'object'.
    * additional arguments to bind function are added to the arguments at
    * function call.
@@ -609,20 +521,7 @@ var Tobago = {
    * will bind Tobago.setElementWidth(id, width) to f(id)
    *
    */
-  bind: function(object, func) {
-    var rest = [];
-    for (var i = 2; i < arguments.length; i++) {
-      rest.push(arguments[i]);
-    }
-    return function() {
-      var args = [];
-      for (var i = 0; i < arguments.length; i++) {
-        args.push(arguments[i]);
-      }
-      object[func].apply(object, args.concat(rest));
-    };
-  },
-
+  /* XXX please remove */
   bind2: function(object, func) {
     var rest = [];
     for (var i = 2; i < arguments.length; i++) {
@@ -637,33 +536,9 @@ var Tobago = {
   },
 
   /**
-   * Returns a function which binds the named function 'func' of the object 'object'
-   * as eventListener.
-   * E.g.:
-   * var f = Tobago.bindAsEventListener(Tobago, "doSomthing");
-   * will bind Tobago.doSomthing(event) to f(event)
-   */
-  bindAsEventListener: function(object, func) {
-    return function(event) {
-      object[func].call(object, event || window.event);
-    };
-  },
-
-  /**
-   * Adds a function which binds the named function 'func' of the object 'object'
-   * as eventListener to an element.
-   */
-  addBindEventListener: function(element, event, object, func) {
-    this.addEventListener(element, event, this.bindAsEventListener(object, func));
-  },
-
-  /**
    * Stop event bubbling
    */
   stopEventPropagation: function(event) {
-    if (! event) {
-      event = window.event;
-    }
     event.cancelBubble = true;  // this is IE, no matter if not supported by actual browser
     if (event.stopPropagation) {
       event.stopPropagation(); // this is DOM2
@@ -836,13 +711,6 @@ Tobago.Config = {
 Tobago.registerListener(Tobago.initDom, Tobago.Phase.DOCUMENT_READY, Tobago.Phase.Order.LATER);
 Tobago.registerListener(Tobago.initDom, Tobago.Phase.AFTER_UPDATE, Tobago.Phase.Order.LATER);
 
-Tobago.EventListener = function(element, event, func) {
-  this.element = element;
-  this.event = event;
-  this.func = func;
-  Tobago.eventListeners[Tobago.eventListeners.length] = this;
-};
-
 Tobago.Transport = {
   requests: [],
   currentActionId: null,