79 lines
2.7 KiB
JavaScript
79 lines
2.7 KiB
JavaScript
// <!-- from https://github.com/Gazler/Underscore-Template-Loader/blob/master/index.html -->
|
|
// TODO Figure out how to initialize w/ static views from server (don't call .load but instead inject in django as strings)
|
|
// so this only loads the lazily loaded ones.
|
|
(function() {
|
|
if (typeof window.templateLoader == 'function') return;
|
|
|
|
var templateLoader = {
|
|
templateVersion: "0.0.12",
|
|
templates: {},
|
|
loadRemoteTemplate: function(templateName, filename, callback) {
|
|
if (!this.templates[templateName]) {
|
|
var self = this;
|
|
jQuery.ajax({url : filename,
|
|
success : function(data) {
|
|
self.addTemplate(templateName, data);
|
|
self.saveLocalTemplates();
|
|
callback(data);
|
|
},
|
|
error : function(xhdr, textStatus, errorThrown) {
|
|
console.log(textStatus); },
|
|
dataType : "html"
|
|
})
|
|
}
|
|
else {
|
|
callback(this.templates[templateName]);
|
|
}
|
|
},
|
|
|
|
addTemplate: function(templateName, data) {
|
|
// is there a reason this doesn't go ahead and compile the template? _.template(data)
|
|
// I suppose localstorage use would still req raw string rather than compiled version, but that sd work
|
|
// if it maintains a separate cache of uncompiled ones
|
|
this.templates[templateName] = data;
|
|
},
|
|
|
|
localStorageAvailable: function() {
|
|
try {
|
|
// window.cachetemplates is global set in base.js to turn caching on/off
|
|
return window.cachetemplates && 'localStorage' in window && window['localStorage'] !== null;
|
|
} catch (e) {
|
|
return false;
|
|
}
|
|
},
|
|
|
|
saveLocalTemplates: function() {
|
|
if (this.localStorageAvailable) {
|
|
localStorage.setItem("templates", JSON.stringify(this.templates));
|
|
localStorage.setItem("templateVersion", this.templateVersion);
|
|
}
|
|
},
|
|
|
|
loadLocalTemplates: function() {
|
|
if (this.localStorageAvailable) {
|
|
var templateVersion = localStorage.getItem("templateVersion");
|
|
if (templateVersion && templateVersion == this.templateVersion) {
|
|
var templates = localStorage.getItem("templates");
|
|
if (templates) {
|
|
templates = JSON.parse(templates);
|
|
for (var x in templates) {
|
|
if (!this.templates[x]) {
|
|
this.addTemplate(x, templates[x]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
localStorage.removeItem("templates");
|
|
localStorage.removeItem("templateVersion");
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
};
|
|
templateLoader.loadLocalTemplates();
|
|
window.templateLoader = templateLoader;
|
|
})();
|