diff options
| author | jules <jules@okfoc.us> | 2014-02-02 18:58:46 -0500 |
|---|---|---|
| committer | jules <jules@okfoc.us> | 2014-02-02 18:58:46 -0500 |
| commit | b125e3106727e0acb627f17f4de0a1c3a1cf6f49 (patch) | |
| tree | 36a2be85ac7ee402cd78fe9d53e4dc7da8d9c023 /js/api | |
| parent | c1e6c0c182102e5d61a8ac26b403b42c5fd40591 (diff) | |
| parent | 2c0ddba2dab715a7c81a106edcfdd9f5be0592a2 (diff) | |
Merge branch 'master' into pepper
Diffstat (limited to 'js/api')
| -rw-r--r-- | js/api/gallery.js | 95 | ||||
| -rw-r--r-- | js/api/get.js | 2 | ||||
| -rw-r--r-- | js/api/localstorage.js | 106 | ||||
| -rw-r--r-- | js/api/set.js | 98 |
4 files changed, 265 insertions, 36 deletions
diff --git a/js/api/gallery.js b/js/api/gallery.js new file mode 100644 index 0000000..0e6614b --- /dev/null +++ b/js/api/gallery.js @@ -0,0 +1,95 @@ +var shader_gallery = {} + +shader_gallery.init = function(){ + shader_gallery.bind() +} + +shader_gallery.bind = function(){ + $("#new-shader").click(new_shader) + +// $("#shader-id") +// $("#fetch-info") + $("#fetch-all").click(function(){ + ShaderAPI.all(load_shaders) + }) + $("#fetch-latest").click(function(){ + ShaderAPI.latest(load_shaders) + }).trigger("click") +// $("#fetch-next-page") +// $("#fetch-history") + + $("#save-shader").click(save_shader) + + ShaderAPI.list_users(function(err, users){ + var $el = $("#pick-user").empty() + for (var i in users) { + var $option = $("<option>") + var username = users[i].username + $option.val(username).html(username) + $el.append( $option ) + } + }) + + $(document).on("change", "#pick-user", function(){ + var name = $(this).val() + ShaderAPI.username(name, load_shaders) + }) + $(document).on("click", ".shader", function(){ + run_shader( $(this).data("shader") ) + }) +} + +function new_shader(opt){ + opt = opt || {} + shader_id_root = null + run_shader({ + id: "", + shader_id: "", + image_url: $("#url").val(), + script: opt.shader || "", + name: opt.name || "" + }) +} +function run_shader(shader_object){ + console.log(shader_object) + shader_id_root = shader_object.shader_id + if ($("#persist-image:checked").length) { + var new_w = parseInt(shader_object.width, 10) + var new_h = parseInt(shader_object.height, 10) + $("#url").val( shader_object.image_url ) + if (new_w && new_h) { + preserve_dimensions = true + actual_w = w = new_w + actual_h = h = new_h + } + load() + } + $("#shader").val(shader_object.script) + $("#shader-id").val(shader_object.id) + $("#shader-name").val( shader_object.name || "") + shader_build() +} +function load_shaders(err, shaders){ + var $el = $("#shader-gallery").empty() + + for (var i in shaders) { + var $shader = display_shader(shaders[i]) + $el.append( $shader ) + } + if (firsttime) { + firsttime = false + run_shader(shaders[0]) + } +} +function display_shader(shader_object){ + var $shader = $("<div>").addClass("shader") + $shader.data("shader", shader_object) + $shader.data("id", shader_object.id) + var html = shader_gallery_template + for (var field in shader_object) { + html = html.replace("{" + field + "}", shader_object[field]) + } + $shader.html(html) + shader_object.id && $shader.data("id", shader_object.id) + return $shader; +} diff --git a/js/api/get.js b/js/api/get.js index ae06dbd..742d41f 100644 --- a/js/api/get.js +++ b/js/api/get.js @@ -1,5 +1,5 @@ ;var ShaderAPI = {} -ShaderAPI.limit = 24 +ShaderAPI.limit = 50 // info - fetch a single shader // id: shader id diff --git a/js/api/localstorage.js b/js/api/localstorage.js new file mode 100644 index 0000000..309d49d --- /dev/null +++ b/js/api/localstorage.js @@ -0,0 +1,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.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 = "" + } +} diff --git a/js/api/set.js b/js/api/set.js index 1e7e31f..3446134 100644 --- a/js/api/set.js +++ b/js/api/set.js @@ -1,39 +1,67 @@ +var shader_id_root = null; function save_shader(){ - typeof shader_id_root == 'undefined' ? shader_id_root = "" : shader_id_root - var params = { - script : $("#shader").val(), - image_url : $("#url").val(), - username : user.username, - shader_id : shader_id_root - } - console.log(params) - $.post("/cgi-bin/im/shader/save", params, function(resp){ - console.log(resp); - data = JSON.parse(resp) - if (data.ERROR ){ - alert(data.ERROR) - return false - } - if (! shader_id_root) { - shader_id_root = data.id; - } + shader_id_root = shader_id_root || "" + var params = { + script: $("#shader").val(), + image_url: $("#url").val(), + username: user.username, + name: $("#shader-name").val() || "", + shader_id: shader_id_root, + width: $("#width").int() || "", + height: $("#height").int() || "" + } + var thumb = make_thumbnail() - var blob = dataUriToBlob(cc.clone().resize(200,200).canvas.toDataURL("image/png")) - var form = new FormData(); - - form.append("id", data.id); - form.append("qqfile", blob); - $.ajax({ - url: "/cgi-bin/im/shader/thumbnail_upload", - type: "POST", - data: form, - processData: false, - contentType: false, - }).done(function(resp){ - console.log(resp); - }); + status('saving..') + console.log(params) + $.post("http://asdf.us/cgi-bin/im/shader/save", params, function(resp){ + console.log(resp); + data = JSON.parse(resp) + if (data.ERROR){ + status('error saving shader') + alert(data.ERROR) + return false + } + status('uploading thumbnail') + if (! shader_id_root) { + shader_id_root = data.id; + } + + params.id = data.id; + params.thumbnail_url = "http://i.asdf.us/im/9a/chtiny3_1334529294_1334529329.gif"; + + $shader = display_shader(params) + $("#shader-gallery").prepend($shader) + + save_thumbnail(data.id, thumb, $shader) + }) +} + +function make_thumbnail(){ + return dataUriToBlob(cc.clone().resize(200,200).canvas.toDataURL("image/png")) +} + +function save_thumbnail(id, thumb, $shader){ + if (! id || id == "") return + + thumb = thumb || make_thumbnail() + + var form = new FormData(); - }) - //maintain the shader_id_root... - return shader_id_root; + form.append("id", id); + form.append("qqfile", thumb); + $.ajax({ + url: "http://asdf.us/cgi-bin/im/shader/thumbnail_upload", + type: "POST", + data: form, + processData: false, + contentType: false, + }).done(function(resp){ + console.log(resp); + status('') + var data = JSON.parse(resp) + if (data.success) { + $shader.find("img").attr("src", data.url) + } + }); } |
