summaryrefslogtreecommitdiff
path: root/js/api/localstorage.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/api/localstorage.js')
-rw-r--r--js/api/localstorage.js106
1 files changed, 106 insertions, 0 deletions
diff --git a/js/api/localstorage.js b/js/api/localstorage.js
new file mode 100644
index 0000000..0ec7cad
--- /dev/null
+++ b/js/api/localstorage.js
@@ -0,0 +1,106 @@
+
+user.shaders = new function(){}
+user.shaders.init = function(){
+ user.shaders.bind()
+}
+user.shaders.bind = function(){
+ user.shaders.buttons = {}
+ if ('SHADERS' in window) {
+ user.shaders.bindButtons( window.SHADERS )
+ }
+ user.shaders.bindButtons( user.shaders.getShaders() )
+ document.getElementById("add-shader").addEventListener("click", user.shaders.save, false)
+ document.getElementById("remove-shader").addEventListener("click", user.shaders.remove, false)
+}
+user.shaders.bindButtons = function(shaders){
+ for (var i = 0; i < shaders.length; i++){
+ user.shaders.bindButton(shaders[i])
+ }
+}
+user.shaders.bindButton = function(data){
+// console.log("button >> " + data.name)
+ var button = document.createElement("button")
+ button.innerHTML = data.name
+ button.addEventListener("click", user.shaders.load.bind(this, data), false)
+ document.getElementById("shaders").appendChild(button)
+ user.shaders.buttons[data.name] = button
+}
+user.shaders.load = function(data){
+ var shader = data.shader
+ if (shader && shader.length > 0) {
+ user.shaders.name = data.name
+ $("#shader").val(shader)
+ // pause here?
+ shader_build()
+ $(".active").removeClass("active")
+ $(user.shaders.buttons[data.name]).addClass("active")
+ user.shaders.setLastAccessed(data.name)
+ }
+}
+user.shaders.loadLastAccessed = function(){
+ var name = localStorage.getItem("im.lastShader") || "colorcycle"
+ if (name in user.shaders.buttons) {
+ $(user.shaders.buttons[name]).trigger("click")
+ }
+}
+user.shaders.setLastAccessed = function(name){
+ localStorage.setItem("im.lastShader", name)
+}
+
+user.shaders.getShaderByName = function(name){
+ return { name: name, shader: user.shaders.getShaderBody(name) }
+}
+user.shaders.getShaderIndex = function(){
+ return JSON.parse( localStorage.getItem("im.shaders") ) || []
+}
+user.shaders.getShaderBody = function(name){
+ return localStorage.getItem("im.shaders."+name) || null
+}
+user.shaders.getShaders = function(){
+ var shaders = user.shaders.getShaderIndex()
+ return shaders.map(function(name){ return { name: name, shader: user.shaders.getShaderBody(name) } })
+}
+user.shaders.setShaderIndex = function(shaders){
+ localStorage.setItem("im.shaders", JSON.stringify(shaders))
+}
+user.shaders.setShader = function(name, shader){
+ if (! name.length || ! shader.length || !name.length || !shader.length) return
+ localStorage.setItem("im.shaders." + name, shader)
+}
+user.shaders.removeShader = function(name){
+ localStorage.removeItem("im.shaders." + name)
+}
+
+user.shaders.save = function(){
+ var name = prompt("enter shader name")
+ var shader = $("#shader").val()
+
+ if (! name) return;
+ if (shade !== shade_no_error_handling) return;
+
+ user.shaders.setShader(name, shader)
+
+ var shaders = user.shaders.getShaderIndex()
+ shaders.push(name)
+ user.shaders.setShaderIndex(shaders)
+
+ user.shaders.name = name
+ user.shaders.bindButton({ name: name, shader: shader })
+
+ $(".active").removeClass("active")
+ $(user.shaders.buttons[name]).addClass("active")
+ user.shaders.setLastAccessed(name)
+}
+
+user.shaders.remove = function(){
+ var name = user.shaders.name
+ if (! name || ! name.length) return
+
+ var shaders = user.shaders.getShaderIndex()
+ if (shaders.splice( shaders.indexOf(name), 1 )) {
+ user.shaders.setShaderIndex(shaders)
+ user.shaders.removeShader(name)
+ $(user.shaders.buttons[name]).remove()
+ user.shaders.name = ""
+ }
+}