-
-
Save bruno-barros/9042606 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
angular.module('myMdl', []).config(['$httpProvider', function($httpProvider) { | |
$httpProvider.responseInterceptors.push([ | |
'$q', '$templateCache', 'activeProfile', | |
function($q, $templateCache, activeProfile) { | |
// Keep track which HTML templates have already been modified. | |
var modifiedTemplates = {}; | |
// Tests if there are any keep/omit attributes. | |
var HAS_FLAGS_EXP = /data-(keep|omit)/; | |
// Tests if the requested url is a html page. | |
var IS_HTML_PAGE = /\.html$|\.html\?/i; | |
return function(promise) { | |
return promise.then(function(response) { | |
var url = response.config.url, | |
responseData = response.data; | |
if (!modifiedTemplates[url] && IS_HTML_PAGE.test(url) && | |
HAS_FLAGS_EXP.test(responseData)) { | |
// Create a DOM fragment from the response HTML. | |
var template = $('<div>').append(responseData); | |
// Find and parse the keep/omit attributes in the view. | |
template.find('[data-keep],[data-omit]').each(function() { | |
var element = $(this), | |
data = element.data(), | |
keep = data.keep, | |
features = keep || data.omit || ''; | |
// Check if the user has all of the specified features. | |
var hasFeature = _.all(features.split(','), function(feature) { | |
return activeProfile.features[feature]; | |
}); | |
if (flags.features.length && | |
((keep && !hasFeature) || (!keep && hasFeature))) { | |
element.remove(); | |
} | |
}); | |
// Set the modified template. | |
response.data = template.html(); | |
// Replace the template in the template cache, and mark the | |
// template as modified. | |
$templateCache.put(url, response.data); | |
modifiedTemplates[url] = true; | |
} | |
return response; | |
}, | |
// Reject the response in case of an error. | |
function(response) { | |
return $q.reject(response); | |
}); | |
}; | |
}]); | |
}]); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment