diff --git a/lib/difflib.js b/assets/js/difflib.js similarity index 100% rename from lib/difflib.js rename to assets/js/difflib.js diff --git a/assets/js/farbtastic.js b/assets/js/farbtastic.js new file mode 100644 index 0000000..9e1bb0d --- /dev/null +++ b/assets/js/farbtastic.js @@ -0,0 +1,253 @@ +/*! + * Farbtastic: NON jQuery color picker plug-in v1.4, based on v1.3u + * + * Licensed under the GPL license: + * http://www.gnu.org/licenses/gpl.html + */ + +farbtasticFunc = function (options) { + farbtastic(this, options); + return this; +}; + +farbtastic = function (container, callback) { + var container = document.getElementById(container); + var callback = document.getElementById(callback); + return container.farbtastic || (container.farbtastic = new _farbtastic(container, callback)); +}; + +_farbtastic = function (container, callback) { + // Store farbtastic object + var fb = this; + + // Insert markup + container.innerHTML = '
'; + fb.wheel = document.getElementsByClassName('wheel')[0]; + // Dimensions + fb.radius = 84; + fb.square = 100; + fb.width = 194; + + /** + * Link to the given element(s) or callback. + */ + fb.linkTo = function (callback) { + // Unbind previous nodes + if (typeof fb.callback == 'object') { + console.log("Doesn't do anything?"); + fb.callback.removeEventListener('keyup', fb.updateValue); + } + + // Reset color + fb.color = null; + + // Bind callback or elements + if (typeof callback == 'function') { + fb.callback = callback; + } + else if (typeof callback == 'object' || typeof callback == 'string') { + fb.callback = callback; + fb.callback.addEventListener('keyup',fb.updateValue); + if (fb.callback.value) { + fb.setColor(fb.callback.value); + } + } + return this; + }; + fb.updateValue = function (event) { + if (this.value && this.value != fb.color) { + fb.setColor(this.value); + } + }; + + /** + * Change color with HTML syntax #123456 + */ + fb.setColor = function (color) { + var unpack = fb.unpack(color); + if (fb.color != color && unpack) { + fb.color = color; + fb.rgb = unpack; + fb.hsl = fb.RGBToHSL(fb.rgb); + fb.updateDisplay(); + } + return this; + }; + + /** + * Change color with HSL triplet [0..1, 0..1, 0..1] + */ + fb.setHSL = function (hsl) { + fb.hsl = hsl; + fb.rgb = fb.HSLToRGB(hsl); + fb.color = fb.pack(fb.rgb); + fb.updateDisplay(); + return this; + }; + + ///////////////////////////////////////////////////// + + /** + * Retrieve the coordinates of the given event relative to the center + * of the widget. + */ + fb.widgetCoords = function (event) { + return { x: (event.pageX - fb.wheel.offsetParent.offsetLeft) - fb.width / 2, y: (event.pageY - fb.wheel.offsetParent.offsetTop) - fb.width / 2 }; + }; + + /** + * Mousedown handler + */ + fb.mousedown = function (event) { + // Capture mouse + if (!document.dragging) { + document.addEventListener('mousemove', fb.mousemove); + document.addEventListener('mouseup', fb.mouseup); + document.dragging = true; + } + + // Check which area is being dragged + var pos = fb.widgetCoords(event); + fb.circleDrag = Math.max(Math.abs(pos.x), Math.abs(pos.y)) * 2 > fb.square; + + // Process + fb.mousemove(event); + return false; + }; + + /** + * Mousemove handler + */ + fb.mousemove = function (event) { + // Get coordinates relative to color picker center + var pos = fb.widgetCoords(event); + + // Set new HSL parameters + if (fb.circleDrag) { + var hue = Math.atan2(pos.x, -pos.y) / 6.28; + if (hue < 0) hue += 1; + fb.setHSL([hue, fb.hsl[1], fb.hsl[2]]); + } + else { + var sat = Math.max(0, Math.min(1, -(pos.x / fb.square) + .5)); + var lum = Math.max(0, Math.min(1, -(pos.y / fb.square) + .5)); + fb.setHSL([fb.hsl[0], sat, lum]); + } + return false; + }; + + /** + * Mouseup handler + */ + fb.mouseup = function () { + // Uncapture mouse + document.removeEventListener('mousemove', fb.mousemove); + document.removeEventListener('mouseup', fb.mouseup); + document.dragging = false; + }; + + /** + * Update the markers and styles + */ + fb.updateDisplay = function () { + // Markers + var angle = fb.hsl[0] * 6.28; + document.getElementsByClassName('h-marker')[0].style.left = Math.round(Math.sin(angle) * fb.radius + fb.width / 2) + 'px'; + document.getElementsByClassName('h-marker')[0].style.top = Math.round(-Math.cos(angle) * fb.radius + fb.width / 2) + 'px'; + + document.getElementsByClassName('sl-marker')[0].style.left = Math.round(fb.square * (.5 - fb.hsl[1]) + fb.width / 2) + 'px'; + document.getElementsByClassName('sl-marker')[0].style.top = Math.round(fb.square * (.5 - fb.hsl[2]) + fb.width / 2) + 'px'; + + // Saturation/Luminance gradient + document.getElementsByClassName('color')[0].style.backgroundColor = fb.pack(fb.HSLToRGB([fb.hsl[0], 1, 0.5])); + + // Linked elements or callback + if (typeof fb.callback == 'object') { + // Set background/foreground color + document.getElementById(fb.callback.id).style.backgroundColor = document.getElementById(fb.callback.id + 'RGB').style.backgroundColor = fb.color; + document.getElementById(fb.callback.id).style.color = document.getElementById(fb.callback.id + 'RGB').style.color = fb.hsl[2] > 0.5 ? '#000' : '#fff'; + document.getElementById('colorRGB').value = document.getElementById(fb.callback.id).style.backgroundColor.replace(/\s/g,''); + + // Change linked value + if (callback.value && callback.value != fb.color) { + callback.value = fb.color; + } + } + else if (typeof fb.callback == 'function') { + fb.callback.call(fb, fb.color); + } + }; + + /* Various color utility functions */ + fb.pack = function (rgb) { + var r = Math.round(rgb[0] * 255); + var g = Math.round(rgb[1] * 255); + var b = Math.round(rgb[2] * 255); + return '#' + (r < 16 ? '0' : '') + r.toString(16) + + (g < 16 ? '0' : '') + g.toString(16) + + (b < 16 ? '0' : '') + b.toString(16); + }; + + fb.unpack = function (color) { + if (color.length == 7) { + return [parseInt('0x' + color.substring(1, 3)) / 255, + parseInt('0x' + color.substring(3, 5)) / 255, + parseInt('0x' + color.substring(5, 7)) / 255]; + } + else if (color.length == 4) { + return [parseInt('0x' + color.substring(1, 2)) / 15, + parseInt('0x' + color.substring(2, 3)) / 15, + parseInt('0x' + color.substring(3, 4)) / 15]; + } + }; + + fb.HSLToRGB = function (hsl) { + var m1, m2, r, g, b; + var h = hsl[0], s = hsl[1], l = hsl[2]; + m2 = (l <= 0.5) ? l * (s + 1) : l + s - l*s; + m1 = l * 2 - m2; + return [this.hueToRGB(m1, m2, h+0.33333), + this.hueToRGB(m1, m2, h), + this.hueToRGB(m1, m2, h-0.33333)]; + }; + + fb.hueToRGB = function (m1, m2, h) { + h = (h < 0) ? h + 1 : ((h > 1) ? h - 1 : h); + if (h * 6 < 1) return m1 + (m2 - m1) * h * 6; + if (h * 2 < 1) return m2; + if (h * 3 < 2) return m1 + (m2 - m1) * (0.66666 - h) * 6; + return m1; + }; + + fb.RGBToHSL = function (rgb) { + var min, max, delta, h, s, l; + var r = rgb[0], g = rgb[1], b = rgb[2]; + min = Math.min(r, Math.min(g, b)); + max = Math.max(r, Math.max(g, b)); + delta = max - min; + l = (min + max) / 2; + s = 0; + if (l > 0 && l < 1) { + s = delta / (l < 0.5 ? (2 * l) : (2 - 2 * l)); + } + h = 0; + if (delta > 0) { + if (max == r && max != g) h += (g - b) / delta; + if (max == g && max != b) h += (2 + (b - r) / delta); + if (max == b && max != r) h += (4 + (r - g) / delta); + h /= 6; + } + return [h, s, l]; + }; + + // Install mousedown handler (the others are set on the document on-demand) + document.getElementsByClassName('farbtastic')[0].onmousedown = fb.mousedown; + + // Init color + fb.setColor('#000000'); + + // Set linked elements/callback + if (callback) { + fb.linkTo(callback); + } +}; \ No newline at end of file diff --git a/lib/icecoder.js b/assets/js/icecoder.js similarity index 99% rename from lib/icecoder.js rename to assets/js/icecoder.js index dc83946..7f17e03 100644 --- a/lib/icecoder.js +++ b/assets/js/icecoder.js @@ -1903,7 +1903,7 @@ var ICEcoder = { if(i>-1) { // rename array item and the tab this.openFiles[i] = newName; - closeTabLink = ''; + closeTabLink = ''; fileName = this.openFiles[i]; get('tab'+(i+1)).innerHTML = closeTabLink + " " + fileName.slice(fileName.lastIndexOf("/")).replace(/\//,""); get('tab'+(i+1)).title = newName; @@ -1924,7 +1924,7 @@ var ICEcoder = { if(i>-1) { // rename array item and the tab this.openFiles[i] = newName; - closeTabLink = ''; + closeTabLink = ''; fileName = this.openFiles[i]; get('tab'+(i+1)).innerHTML = closeTabLink + " " + fileName.slice(fileName.lastIndexOf("/")).replace(/\//,""); get('tab'+(i+1)).title = newName; @@ -3752,7 +3752,7 @@ var ICEcoder = { this.openFiles.push(this.shortURL); // Setup a new tab - closeTabLink = ''; + closeTabLink = ''; get('tab'+(this.openFiles.length)).style.display = "inline-block"; fileName = this.openFiles[this.openFiles.length-1]; get('tab'+(this.openFiles.length)).innerHTML = closeTabLink + " " + fileName.slice(fileName.lastIndexOf("/")).replace(/\//,""); @@ -3798,7 +3798,7 @@ var ICEcoder = { this.openFiles[tabNum-1] = newName; // Setup a new tab - closeTabLink = ''; + closeTabLink = ''; fileName = this.openFiles[tabNum-1]; get('tab'+tabNum).innerHTML = closeTabLink + " " + fileName.slice(fileName.lastIndexOf("/")).replace(/\//,""); get('tab'+tabNum).title = "/" + this.openFiles[tabNum-1].replace(/\//,""); @@ -4536,7 +4536,7 @@ var ICEcoder = { "height": 55, "top": -55, "left": 0, - "title": "

Code editor awesomeness ...in your browser", + "title": "

Code editor awesomeness ...in your browser", "message": "View the quick start tutorial? (Well worthwhile!) or skip it", "button": "view tutorial" }, @@ -4698,7 +4698,7 @@ var ICEcoder = { startSnake: function() { this.snakePlaying = true; this.showHide('show',get('blackMask')); - get('mediaContainer').innerHTML = 'Let\'s play
snake


Use arrow keys to eat your code

(it returns afterwards of course) :-)
'; + get('mediaContainer').innerHTML = 'Let\'s play
snake


Use arrow keys to eat your code

(it returns afterwards of course) :-)
'; setTimeout(function(ic) { ic.showHide('hide',get('blackMask')); get('mediaContainer').innerHTML = ''; diff --git a/lib/language-modes-partial.js b/assets/js/language-modes-partial.js similarity index 100% rename from lib/language-modes-partial.js rename to assets/js/language-modes-partial.js diff --git a/lib/mmd.js b/assets/js/mmd.js similarity index 100% rename from lib/mmd.js rename to assets/js/mmd.js