diff --git a/dist/angular-blocks.js b/dist/angular-blocks.js index a021140..39c10c8 100644 --- a/dist/angular-blocks.js +++ b/dist/angular-blocks.js @@ -23,7 +23,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); @@ -36,9 +36,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 += 1) { + destElem.attr(attrs[i], sourceElem.attr(attrs[i])); + } + } else { + //replace all + var allAttributes = sourceElem[0].attributes; + for (var j = 0; j < allAttributes.length; j += 1) { + 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 @@ -81,4 +113,4 @@ angular.module('angular-blocks', []) .directive('extendTemplate', ['$templateCache', '$compile', '$http', '$q', '$log', extendTemplate]); -}()); +}()); \ No newline at end of file diff --git a/dist/angular-blocks.min.js b/dist/angular-blocks.min.js index cf9cdc5..d3c3827 100644 --- a/dist/angular-blocks.min.js +++ b/dist/angular-blocks.min.js @@ -3,4 +3,4 @@ * Copyright (c) 2013 William L. Bunselmeyer. https://github.com/wmluke/angular-blocks * License: MIT */ -!function(){"use strict";function a(a,b,c,d,e){function f(a,b){e.warn("Failed to find data-block="+a+" in "+b)}return{compile:function(g,h){var i=h.extendTemplate;if(!i)throw"Template not specified in extend-template directive";var j=g.clone();g.html("");var k=c.get(i,{cache:a}).then(function(a){function b(a,b,c){var e=b.attr(c);0===d.find('[data-block="'+e+'"]')[a](b).length&&0===d.find("[data-extend-template]").append(b).length&&f(e,i)}var c=a.data,d=$(document.createElement("div")).html(c);return j.children("[data-block]").each(function(){b("replaceWith",$(this),"data-block")}),j.children("[data-block-prepend]").each(function(){b("prepend",$(this),"data-block-prepend")}),j.children("[data-block-append]").each(function(){b("append",$(this),"data-block-append")}),j.children("[data-block-before]").each(function(){b("before",$(this),"data-block-before")}),j.children("[data-block-after]").each(function(){b("after",$(this),"data-block-after")}),d},function(){var a="Failed to load template: "+i;return e.error(a),d.reject(a)});return function(a,c){k.then(function(d){c.html(d.html()),b(c.contents())(a)})}}}}angular.module("angular-blocks",[]).directive("extendTemplate",["$templateCache","$compile","$http","$q","$log",a])}(); \ No newline at end of file +!function(){"use strict";function a(a,b,c,d,e){function f(a,b){e.warn("Failed to find data-block="+a+" in "+b)}return{compile:function(g,h){var i=h.extendTemplate;if(!i)throw"Template not specified in extend-template directive";var j=g.clone();g.html("");var k=c.get(i,{cache:a}).then(function(a){function b(a,b,c){var d=b.attr(c);0===g.find('[data-block="'+d+'"]')[a](b).length&&0===g.find("[data-extend-template]").append(b).length&&f(d,i)}function c(a,b,c){if(angular.isArray(c))for(var d=0;d

:header

-
+

:content