summaryrefslogtreecommitdiff
path: root/js/api/localstorage.js
blob: 835d1394660422362cb98c83d4d661c8af3b767a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
local_shaders = new function(){}
local_shaders.init = function(){
  local_shaders.bind()
}
local_shaders.bind = function(){
  local_shaders.buttons = {}
  if ('EXAMPLE_SHADERS' in window) {
    local_shaders.bindButtons( window.EXAMPLE_SHADERS )
  }
  local_shaders.bindButtons( local_shaders.getShaders() )
  document.getElementById("add-shader").addEventListener("click", local_shaders.save, false)
  document.getElementById("remove-shader").addEventListener("click", local_shaders.remove, false)
}
local_shaders.bindButtons = function(shaders){
  for (var i = 0; i < shaders.length; i++){
    local_shaders.bindButton(shaders[i])
  }
}
local_shaders.bindButton = function(data){
//   console.log("button >> " + data.name)
  var button = document.createElement("button")
  button.innerHTML = data.name
  button.addEventListener("click", local_shaders.load.bind(this, data), false)
  document.getElementById("shaders").appendChild(button)
  local_shaders.buttons[data.name] = button
}
local_shaders.load = function(data){
  var shader = data.shader
  if (shader && shader.length > 0) {
    local_shaders.name = data.name
    $("#shader").val(shader)
    // pause here?
    shader_build()
    $(".active").removeClass("active")
    $(local_shaders.buttons[data.name]).addClass("active")
    local_shaders.setLastAccessed(data.name)
  }
}
local_shaders.loadLastAccessed = function(){
  var name = localStorage.getItem("im.lastShader") || "colorcycle"
  if (name in local_shaders.buttons) {
    $(local_shaders.buttons[name]).trigger("click")
  }
}
local_shaders.setLastAccessed = function(name){
  localStorage.setItem("im.lastShader", name)
}

local_shaders.getShaderByName = function(name){
  return { name: name, shader: local_shaders.getShaderBody(name) }
}
local_shaders.getShaderIndex = function(){
  return JSON.parse( localStorage.getItem("im.shaders") ) || []
}
local_shaders.getShaderBody = function(name){
  return localStorage.getItem("im.shaders."+name) || null
}
local_shaders.getShaders = function(){
  var shaders = local_shaders.getShaderIndex()
  return shaders.map(function(name){ return { name: name, shader: local_shaders.getShaderBody(name) } })
}
local_shaders.setShaderIndex = function(shaders){
  localStorage.setItem("im.shaders", JSON.stringify(shaders))
}
local_shaders.setShader = function(name, shader){
  if (! name.length || ! shader.length || !name.length || !shader.length) return
  localStorage.setItem("im.shaders." + name, shader)
}
local_shaders.removeShader = function(name){
  localStorage.removeItem("im.shaders." + name)
}

local_shaders.save = function(){
  var name = prompt("enter shader name")
  var shader = $("#shader").val()

  if (! name) return;
  if (shade !== shade_no_error_handling) return;

  local_shaders.setShader(name, shader)

  var shaders = local_shaders.getShaderIndex()
  shaders.push(name)
  local_shaders.setShaderIndex(shaders)

  local_shaders.name = name
  local_shaders.bindButton({ name: name, shader: shader })

  $(".active").removeClass("active")
  $(local_shaders.buttons[name]).addClass("active")
  local_shaders.setLastAccessed(name)
}

local_shaders.remove = function(){
  var name = local_shaders.name
  if (! name || ! name.length) return

  var shaders = local_shaders.getShaderIndex()
  if (shaders.splice( shaders.indexOf(name), 1 )) {
    local_shaders.setShaderIndex(shaders)
    local_shaders.removeShader(name)
    $(local_shaders.buttons[name]).remove()
    local_shaders.name = ""
  }
}