You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@guacamole.apache.org by mj...@apache.org on 2016/03/20 03:22:15 UTC

[35/50] incubator-guacamole-client git commit: GUAC-1378: Pull and apply patches from REST endpoint.

GUAC-1378: Pull and apply patches from REST endpoint.

Project: http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/commit/a66513b7
Tree: http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/tree/a66513b7
Diff: http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/diff/a66513b7

Branch: refs/heads/master
Commit: a66513b724a36603685ed395676c959e87c0cc38
Parents: bda64a2
Author: Michael Jumper <mi...@guac-dev.org>
Authored: Fri Feb 19 00:23:39 2016 -0800
Committer: Michael Jumper <mi...@guac-dev.org>
Committed: Fri Feb 19 00:23:39 2016 -0800

----------------------------------------------------------------------
 .../index/config/templateRequestDecorator.js    | 116 ++++++++++---------
 1 file changed, 64 insertions(+), 52 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/blob/a66513b7/guacamole/src/main/webapp/app/index/config/templateRequestDecorator.js
----------------------------------------------------------------------
diff --git a/guacamole/src/main/webapp/app/index/config/templateRequestDecorator.js b/guacamole/src/main/webapp/app/index/config/templateRequestDecorator.js
index 07b669b..d3eae07 100644
--- a/guacamole/src/main/webapp/app/index/config/templateRequestDecorator.js
+++ b/guacamole/src/main/webapp/app/index/config/templateRequestDecorator.js
@@ -81,19 +81,8 @@ angular.module('index').config(['$provide', function($provide) {
             function decorateTemplateRequest($delegate, $injector) {
 
         // Required services
-        var $q = $injector.get('$q');
-
-        /**
-         * Array of the raw HTML of all patches which should be applied to the
-         * HTML of retrieved templates.
-         *
-         * @type String[]
-         */
-        var patches = [
-            '<meta name="before" content="a"><p>HELLO BEFORE</p>',
-            '<meta name="after" content="a"><p>HELLO AFTER</p>',
-            '<meta name="replace" content="div.protocol"><div class="protocol">:-)</div>'
-        ];
+        var $q           = $injector.get('$q');
+        var patchService = $injector.get('patchService');
 
         /**
          * Represents a single HTML patching operation which will be applied
@@ -272,6 +261,59 @@ angular.module('index').config(['$provide', function($provide) {
         };
 
         /**
+         * Applies each of the given HTML patches to the given template.
+         *
+         * @param {Element[]} root
+         *     The JQuery-wrapped root element of the template being
+         *     patched.
+         *
+         * @param {String[]} patches
+         *     An array of all HTML patches to be applied to the given
+         *     template.
+         */
+        var applyPatches = function applyPatches(root, patches) {
+
+            // Apply all defined patches
+            angular.forEach(patches, function applyPatch(patch) {
+
+                var elements = $(patch);
+
+                // Filter out and parse all applicable meta tags
+                var operations = [];
+                elements = elements.filter(function filterMetaTags(index, element) {
+
+                    // Leave non-meta tags untouched
+                    if (element.tagName !== 'META')
+                        return true;
+
+                    // Only meta tags having a valid "name" attribute need
+                    // to be filtered
+                    var name = element.getAttribute('name');
+                    if (!name || !(name in PatchOperation.Operations))
+                        return true;
+
+                    // The "content" attribute must be present for any
+                    // valid "name" meta tag
+                    var content = element.getAttribute('content');
+                    if (!content)
+                        return true;
+
+                    // Filter out and parse meta tag
+                    operations.push(new PatchOperation(name, content));
+                    return false;
+
+                });
+
+                // Apply each operation implied by the meta tags
+                angular.forEach(operations, function applyOperation(operation) {
+                    operation.apply(root, elements);
+                });
+
+            });
+
+        };
+
+        /**
          * Invokes $templateRequest() with all arguments exactly as provided,
          * applying all HTML patches from any installed Guacamole extensions
          * to the HTML of the requested template.
@@ -297,49 +339,19 @@ angular.module('index').config(['$provide', function($provide) {
             // Resolve promise with patched template HTML
             $delegate.apply(this, arguments).then(function patchTemplate(data) {
 
-                // Parse HTML into DOM tree
-                var root = $('<div></div>').html(data);
-
-                // Apply all defined patches
-                angular.forEach(patches, function applyPatch(patch) {
+                // Retrieve and apply all patches
+                patchService.getPatches().success(function applyRetrievedPatches(patches) {
 
-                    var elements = $(patch);
+                    // Parse HTML into DOM tree
+                    var root = $('<div></div>').html(data);
 
-                    // Filter out and parse all applicable meta tags
-                    var operations = [];
-                    elements = elements.filter(function filterMetaTags(index, element) {
+                    // Apply all HTML patches to the parsed DOM
+                    applyPatches(root, patches);
 
-                        // Leave non-meta tags untouched
-                        if (element.tagName !== 'META')
-                            return true;
-
-                        // Only meta tags having a valid "name" attribute need
-                        // to be filtered
-                        var name = element.getAttribute('name');
-                        if (!name || !(name in PatchOperation.Operations))
-                            return true;
-
-                        // The "content" attribute must be present for any
-                        // valid "name" meta tag
-                        var content = element.getAttribute('content');
-                        if (!content)
-                            return true;
-
-                        // Filter out and parse meta tag
-                        operations.push(new PatchOperation(name, content));
-                        return false;
-
-                    });
-
-                    // Apply each operation implied by the meta tags
-                    angular.forEach(operations, function applyOperation(operation) {
-                        operation.apply(root, elements);
-                    });
-
-                });
+                    // Transform back into HTML
+                    deferred.resolve.call(this, root.html());
 
-                // Transform back into HTML
-                deferred.resolve.call(this, root.html());
+                }, deferred.reject);
 
             }, deferred.reject);