Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save bruno-barros/9042606 to your computer and use it in GitHub Desktop.
Save bruno-barros/9042606 to your computer and use it in GitHub Desktop.
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