GUAC-1378: Define HTML patches using a special <guac-patch> root element.

This commit is contained in:
Michael Jumper
2016-02-18 13:34:07 -08:00
parent 5e6c9c2c9d
commit 9c11363224

View File

@@ -31,6 +31,18 @@ angular.module('index').config(['$provide', function($provide) {
// Required services // Required services
var $q = $injector.get('$q'); var $q = $injector.get('$q');
/**
* Array of the root elements of all patches which should be applied to
* the HTML of retrieved templates.
*
* @type Element[]
*/
var patches = [
$('<guac-patch before="a"><p>HELLO BEFORE</p></guac-patch>')[0],
$('<guac-patch after="a"><p>HELLO AFTER</p></guac-patch>')[0],
$('<guac-patch replace="div.protocol"><div class="protocol">:-)</div></guac-patch>')[0]
];
/** /**
* Invokes $templateRequest() with all arguments exactly as provided, * Invokes $templateRequest() with all arguments exactly as provided,
* applying all HTML patches from any installed Guacamole extensions * applying all HTML patches from any installed Guacamole extensions
@@ -50,8 +62,34 @@ angular.module('index').config(['$provide', function($provide) {
// Parse HTML into DOM tree // Parse HTML into DOM tree
var root = $('<div></div>').html(data); var root = $('<div></div>').html(data);
// STUB: Apply HTML patches // Apply all defined patches
root.find('a').after('<p>HELLO</p>'); angular.forEach(patches, function applyPatch(patch) {
// Ignore any patches which are malformed
if (patch.tagName !== 'GUAC-PATCH')
return;
// Insert after any elements which match the "after"
// selector (if defined)
var after = patch.getAttribute('after');
if (after)
root.find(after).after(patch.innerHTML);
// Insert before any elements which match the "before"
// selector (if defined)
var before = patch.getAttribute('before');
if (before)
root.find(before).before(patch.innerHTML);
// Replace any elements which match the "replace" selector
// (if defined)
var replace = patch.getAttribute('replace');
if (replace)
root.find(replace).html(patch.innerHTML);
// Ignore all other attributes
});
// Transform back into HTML // Transform back into HTML
deferred.resolve.call(this, root.html()); deferred.resolve.call(this, root.html());