From 3efbd388ec8f65ccda33fababa8ff85be6e85789 Mon Sep 17 00:00:00 2001 From: Sergey Siryk Date: Thu, 30 Oct 2014 16:50:58 +0200 Subject: [PATCH 1/3] Ability to override only attributes of data-block. --- src/angular-blocks.js | 40 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/src/angular-blocks.js b/src/angular-blocks.js index e3238b5..581ec13 100644 --- a/src/angular-blocks.js +++ b/src/angular-blocks.js @@ -18,7 +18,7 @@ var $clone = tElement.clone(); tElement.html(''); - var loadTemplate = $http.get(src, {cache: $templateCache}) + var loadTemplate = $http.get(src, { cache: $templateCache }) .then(function (response) { var template = response.data; var $template = $(document.createElement('div')).html(template); @@ -31,9 +31,41 @@ } } - // Replace overridden blocks + function replaceAttrs(sourceElem, destElem, attrs) { + if (angular.isArray(attrs)) { + //replace only specified attributes + for (var i = 0; i < attrs.length; i++) { + destElem.attr(attrs[i], sourceElem.attr(attrs[i])); + } + } else { + //replace all + var allAttributes = sourceElem[0].attributes; + for (var j = 0; j < allAttributes.length; j++) { + destElem.attr(allAttributes[j].name, allAttributes[j].value); + } + } + } + + function overrideAttrs($block, attrsToReplace) { + var name = $block.attr('data-block'); + var templateBlocks = $template.find('[data-block="' + name + '"]'); + if (!templateBlocks) { + warnMissingBlock(name, src); + } else { + templateBlocks.each(function (index, templateBlock) { + replaceAttrs($block, $(templateBlock), attrsToReplace !== '' ? attrsToReplace.split(',') : null); + }); + } + } + + // Replace overridden blocks or attributes $clone.children('[data-block]').each(function () { - override('replaceWith', $(this), 'data-block'); + var attrsToReplace = $(this).attr('replace-attrs'); + if (attrsToReplace !== undefined) { + overrideAttrs($(this), attrsToReplace); + } else { + override('replaceWith', $(this), 'data-block'); + } }); // Insert prepend blocks @@ -76,4 +108,4 @@ angular.module('angular-blocks', []) .directive('extendTemplate', ['$templateCache', '$compile', '$http', '$q', '$log', extendTemplate]); -}()); +}()); \ No newline at end of file From 27eda11b6028cc9bda36b3d90f64501480f53ec2 Mon Sep 17 00:00:00 2001 From: Sergey S Date: Thu, 30 Oct 2014 17:45:09 +0200 Subject: [PATCH 2/3] Update readme.md --- readme.md | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 533e1ea..573b6be 100644 --- a/readme.md +++ b/readme.md @@ -31,7 +31,7 @@ Given the template below:

:header

-
+

:content