Przeglądaj źródła

librarize the file storage stuff

Lucas Stadler 10 lat temu
rodzic
commit
8ceeb691a5
1 zmienionych plików z 72 dodań i 62 usunięć
  1. 72 62
      glsl/files.js

+ 72 - 62
glsl/files.js

@ -95,79 +95,89 @@ files.save = function(name, content) {
95 95
  localStorage[files.prefix + name] = content;
96 96
}
97 97
98
function setFile(file, nameEl, contentEl) {
99
  nameEl.value = file.name;
100
  contentEl.value = file.content;
101
  contentEl.readOnly = file.readonly;
102
}
98
files.setupUI = function(editorEl) {
99
  function setFile(file, nameEl, contentEl) {
100
    nameEl.value = file.name;
101
    contentEl.value = file.content;
102
    contentEl.readOnly = file.readonly;
103
  }
103 104
104
var nameEl = document.createElement("input");
105
nameEl.value = files.current;
106
nameEl.maxlength = 20;
107
nameEl.placeholder = "Name of the shader";
108
nameEl.setAttribute('list', 'files');
105
  var nameEl = document.createElement("input");
106
  nameEl.value = files.current;
107
  nameEl.maxlength = 20;
108
  nameEl.placeholder = "Name of the shader";
109
  nameEl.setAttribute('list', 'files');
109 110
110
nameEl.onselect = function(ev) {
111
  setFile(files.open(nameEl.value), nameEl, editorEl);
112
  editorEl.focus();
113
}
111
  nameEl.onselect = function(ev) {
112
    setFile(files.open(nameEl.value), nameEl, editorEl);
113
    editorEl.focus();
114
  }
114 115
115
nameEl.onkeyup = function(ev) {
116
  if (ev.keyCode == 13 && nameEl.value != files.current) { // Enter
117
    var file = nameEl.value;
118
    if (files.exists(file)) {
119
      setFile(files.open(file), nameEl, editorEl);
120
    } else {
121
      setFile(files.create(file, ""), nameEl, editorEl);
122
      var fileEl = document.createElement("option");
123
      fileEl.textContent = file;
124
      filesEl.appendChild(fileEl);
116
  nameEl.onkeyup = function(ev) {
117
    if (ev.keyCode == 13 && nameEl.value != files.current) { // Enter
118
      var file = nameEl.value;
119
      if (files.exists(file)) {
120
        setFile(files.open(file), nameEl, editorEl);
121
      } else {
122
        setFile(files.create(file, ""), nameEl, editorEl);
123
        var fileEl = document.createElement("option");
124
        fileEl.textContent = file;
125
        filesEl.appendChild(fileEl);
126
      }
127
      editorEl.focus();
125 128
    }
126
    editorEl.focus();
127 129
  }
128
}
129 130
130
function addFileOption(name) {
131
  var fileEl = document.createElement("option");
132
  fileEl.textContent = name;
133
  filesEl.appendChild(fileEl);
134
}
131
  function addFileOption(name) {
132
    var fileEl = document.createElement("option");
133
    fileEl.textContent = name;
134
    filesEl.appendChild(fileEl);
135
  }
135 136
136
var filesEl = document.createElement("datalist");
137
filesEl.id = "files";
138
Object.keys(files.builtin).forEach(addFileOption);
137
  var filesEl = document.createElement("datalist");
138
  filesEl.id = "files";
139
  Object.keys(files.builtin).forEach(addFileOption);
139 140
140
Object.keys(localStorage).forEach(function(file) {
141
  if (file.startsWith(files.prefix)) {
142
    addFileOption(file.substr(files.prefix.length));
143
  }
144
});
145
146
var changeEl = document.createElement("span");
147
var editorEl = document.createElement("textarea");
148
editorEl.style  = "width: 70ex; height: 40em";
149
editorEl.onkeydown = function(ev) {
150
  if (ev.ctrlKey && ev.keyCode == 83) { // Ctrl-s
151
    ev.preventDefault();
152
    
153
    changeEl.textContent = "";
154
    files.save(files.current, editorEl.value);
155
  }
156
}
141
  Object.keys(localStorage).forEach(function(file) {
142
    if (file.startsWith(files.prefix)) {
143
      addFileOption(file.substr(files.prefix.length));
144
    }
145
  });
146
147
  var changeEl = document.createElement("span");
148
  
149
  editorEl.addEventListener("keydown", function(ev) {
150
    if (ev.ctrlKey && ev.keyCode == 83) { // Ctrl-s
151
      ev.preventDefault();
157 152
158
editorEl.onkeyup = function(ev) {
159
  if (!ev.altKey && !ev.ctrlKey) {
160
    if (editorEl.value != files.currentFile.content) {
161
      changeEl.textContent = "(changed)";
162
    } else {
163 153
      changeEl.textContent = "";
154
      files.save(files.current, editorEl.value);
164 155
    }
165
  }
156
  });
157
158
  editorEl.addEventListener("keyup", function(ev) {
159
    if (!ev.altKey && !ev.ctrlKey) {
160
      if (editorEl.value != files.currentFile.content) {
161
        changeEl.textContent = "(changed)";
162
      } else {
163
        changeEl.textContent = "";
164
      }
165
    }
166
  });
167
168
  setFile(files.open(files.current), nameEl, editorEl);
169
170
  var containerEl = document.createElement("div");
171
  containerEl.appendChild(nameEl);
172
  containerEl.appendChild(filesEl);
173
  containerEl.appendChild(changeEl);
174
  return containerEl;
166 175
}
167 176
168
setFile(files.open(files.current), nameEl, editorEl);
177
var editor = {};
178
editor.el = document.createElement("textarea");
179
editor.el.style = "width: 70ex; height: 40em";
180
editor.nameUIEl = files.setupUI(editor.el);
169 181
170
document.body.appendChild(filesEl);
171
document.body.appendChild(nameEl);
172
document.body.appendChild(changeEl);
173
document.body.appendChild(editorEl);
182
document.body.appendChild(editor.nameUIEl);
183
document.body.appendChild(editor.el);