diff --git a/.gitignore b/.gitignore index b462f3d..98a0b0c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ *.swp *.swo *~ +*.zip node_modules diff --git a/Android/js/diff.js b/Android/js/diff.js deleted file mode 100644 index da656fe..0000000 --- a/Android/js/diff.js +++ /dev/null @@ -1,136 +0,0 @@ -$(document).ready(function() { - - $(document).on('resume', function() { - sizeAndPos(); - }) - document.addEventListener('deviceready', function() { - sizeAndPos(); - - $('*').off('click mousemove mousedown mouseup mouseleave').on('click mousemove mousedown mouseup mouseleave', function(e) { - e.preventDefault; - }) - - /*$('a[href^="http"]').tap(function(e) { - e.preventDefault(); - var href = $(this).attr('href'); - var view = new MozActivity({ - name: 'view', - data: { - type: 'url', - url: href - } - }) - - return false; - }).click(function(e) { - e.preventDefault(); - return false; - })*/ - - /*$('a[href^="mailto"]').tap(function(e) { - e.preventDefault(); - var mail = new MozActivity({ - name: 'new', - data: { - type: 'mail', - url: $(this).attr('href') - } - }) - return false; - }).click(function(e) { - e.preventDefault(); - return false; - })*/ - - - - window.save = function() { - var f = c.getImageData(0, 0, width(), height()); - switch(save.background) { - case 'white': { - c.fillStyle = 'white'; - c.globalCompositeOperation = 'destination-over'; - c.fillRect(0, 0, width(), height()); - c.fillStyle = settings.color; - c.globalCompositeOperation = settings.composite; - break; - } - case 'current color': { - c.fillStyle = settings.bg; - c.globalCompositeOperation = 'destination-over'; - c.fillRect(0, 0, width(), height()); - c.globalCompositeOperation = settings.composite; - break; - } - } - var data = $c[0].toDataURL(); - if( save.type == 'sketchy project' ) { - var list = JSON.parse(localStorage.getItem('projects')); - var index; - if( list && list.some(function(a, i) { if( a.name == save['file name'] ) {index = i; return true} return false }) ) { - if( confirm('A sketch with this name already exists. Do you want to overwrite ' + save['file name'] + '?') ) { - console.log(index); - list[index] = { - name: save['file name'], - data: data, - points: window.points, - settings: settings - } - localStorage.setItem('projects', JSON.stringify(list)); - } - } - else { - list ? list.push({ - name: save['file name'], - data: data, - points: window.points, - settings: settings - }) : list = [{ - name: save['file name'], - data: data, - points: window.points, - settings: settings - }]; - localStorage.setItem('projects', JSON.stringify(list)); - } - } else { - var img = dataToBlob(data); - var sd = window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fs) { - window.alert('SD'); - /*var req = fs.root.getFile(save['file name'] + '.png', {create: true}, function(entry) { - alert('Entry'); - entry.createWriter(function(writer) { - writer.write(img); - alert('Your Sketch was saved successfuly'); - }, function() { - alert('Something bad happened trying to save your sketch ' + save['file name'] + '\n Possible reasons:\n Duplicate Name \n Not enough permission') - }) - })*/ - }, function(e) { - alert('SD Error') - //alert('Couldn\'t access filesystem\nERR: ' + e.code); - }); - } - c.putImageData(f, 0, 0); - } - window.load = function() { - var file = JSON.parse(localStorage.getItem('projects')).filter(function(a) { return a.name == load.file })[0]; - var img = document.createElement('img'); - img.src = file.data; - img.onload = function() { - c.clearRect(0, 0, width(), height()); - c.drawImage(img, 0, 0); - window.points = file.points; - window.points.history = [{ data: c.createImageData($c.width(), $c.height()), points: []}, { data: c.getImageData(0, 0, width(), height()), points: file.points}]; - $c.first().css('background', file.settings.bg); - window.settings.bg = file.settings.bg; - } - } - - if( !localStorage.getItem('sawVote') ) { - $('.vote').removeClass('hidden'); - localStorage.setItem('sawVote', true); - } - }, false) - -}) diff --git a/Android/res/icons/android/icon.png b/Android/res/icons/android/icon.png deleted file mode 100644 index bac55b3..0000000 Binary files a/Android/res/icons/android/icon.png and /dev/null differ diff --git a/Gruntfile.js b/Gruntfile.js index f5735ec..dc0e553 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -21,13 +21,6 @@ module.exports = function(grunt) { dest: 'build/web/js', filter: 'isFile' }, - { - expand: true, - cwd: 'Shared/js', - src: '**', - dest: 'build/android/js', - filter: 'isFile' - }, { expand: true, cwd: 'Mobile/js/', @@ -35,13 +28,6 @@ module.exports = function(grunt) { dest: 'build/mobile/js', filter: 'isFile' }, - { - expand: true, - cwd: 'Android/js/', - src: '*', - dest: 'build/android/js', - filter: 'isFile' - }, { expand: true, cwd: 'Web/js/', @@ -56,7 +42,6 @@ module.exports = function(grunt) { production: { files: { 'build/mobile/css/main.css': 'Shared/css/main.less', - 'build/android/css/main.css': 'Shared/css/main.less', 'build/web/css/main.css': 'Shared/css/main.less' }, compress: true @@ -83,12 +68,6 @@ module.exports = function(grunt) { src: ['index.html', 'manifest.webapp'], dest: 'build/mobile' }, - { - expand: true, - cwd: 'Android', - src: ['index.html', 'config.xml', 'AndroidManifest.xml', 'res/**', 'icon.png'], - dest: 'build/android' - }, { expand: true, cwd: 'Web', @@ -105,12 +84,6 @@ module.exports = function(grunt) { src: '*/**', dest: 'build/mobile/css' }, - { - expand: true, - cwd: 'Shared/css', - src: '*/**', - dest: 'build/android/css' - }, { expand: true, cwd: 'Shared/css', diff --git a/Mobile/index.html b/Mobile/index.html index abc9887..64be561 100644 --- a/Mobile/index.html +++ b/Mobile/index.html @@ -4,6 +4,7 @@
diff --git a/Mobile/js/diff.js b/Mobile/js/diff.js
index 53ebf46..c5a2922 100644
--- a/Mobile/js/diff.js
+++ b/Mobile/js/diff.js
@@ -111,9 +111,4 @@ $(document).ready(function() {
}
}
- if( !localStorage.getItem('sawVote') ) {
- $('.vote').removeClass('hidden');
- localStorage.setItem('sawVote', true);
- }
-
})
diff --git a/Mobile/manifest.webapp b/Mobile/manifest.webapp
index 326110f..663975f 100644
--- a/Mobile/manifest.webapp
+++ b/Mobile/manifest.webapp
@@ -1,7 +1,7 @@
{
"name": "Sketchy",
"description": "Free full-featured Sketch app",
- "version": "1.2.1",
+ "version": "1.2.2",
"fullscreen": "true",
"type": "privileged",
"launch_path": "/index.html",
@@ -37,6 +37,9 @@
"device-storage:pictures": {
"description": "Required to save sketches",
"access": "readwrite"
+ },
+ "video-capture": {
+ "description": "Test"
}
}
}
diff --git a/Web/js/main.js b/Web/js/main.js
index 0ebdb29..8385e38 100644
--- a/Web/js/main.js
+++ b/Web/js/main.js
@@ -84,47 +84,20 @@ $(document).ready(function() {
window.load = load;
window.save = save;
- // TODO: Check for Update
+ // Unity WebApp
+ alert(typeof external.getUnityObject);
+ if(external.getUnityObject) {
+ window.Unity = external.getUnityObject(1.0);
- /*var request = navigator.mozApps.getInstalled();
- request.onsuccess = function() {
- var app = this.result[0];
- var latest = $.ajax({url:'manifest-web.webapp'});
- var selfApp = navigator.mozApps.getSelf();
- selfApp.onsuccess = function() {
- if(this.result) {
- latest.onload = function() {
- if( this.response ) {
- var lapp = JSON.parse(this.response);
- alert(lapp.version);
- alert(app.manifest.version);
- if( lapp.version != app.manifest.version &&
- confirm('A new version of this app is available, do you want to update?')) {
- var ins = navigator.mozApps.install();
- ins.onsuccess = function() {
- alert('The app was installed successfuly');
- }
- ins.onerror = function() {
- alert('There was an error installing app - ' + this.error.name)
- }
- }
- }
- }
- }
- }
- if( !app && confirm('Do you want to Install this app?') ) {
- var ins = navigator.mozApps.install('http://mdibaiee.github.io/Sketchy/Web/manifest-web.webapp');
- ins.onsuccess = function() {
- alert('The app was installed successfuly');
- }
- ins.onerror = function() {
- alert('There was an error installing app')
- console.log(this.error);
- }
+ function unityReady() {
+ console.log('Ready');
+ Unity.Notification.showNotification('Salam', 'Chetori!');
}
+ Unity.init({
+ name: 'Sketchy',
+ iconUrl: 'file:///home/mahdi/Documents/Workshop/Sketchy/build/web/img/icons/icon60.png',
+ onInit: unityReady
+ })
+
}
- request.onerror = function() {
- alert('An error occured while trying to check for updates');
- }*/
-
})
diff --git a/build/mobile/index.html b/build/mobile/index.html
index abc9887..64be561 100644
--- a/build/mobile/index.html
+++ b/build/mobile/index.html
@@ -4,6 +4,7 @@
diff --git a/build/mobile/js/diff.js b/build/mobile/js/diff.js
index 3db3455..739ae59 100644
--- a/build/mobile/js/diff.js
+++ b/build/mobile/js/diff.js
@@ -1 +1 @@
-$(document).ready(function(){$("*").off("click mousemove mousedown mouseup mouseleave").on("click mousemove mousedown mouseup mouseleave",function(a){a.preventDefault}),$('a[href^="http"]').tap(function(a){a.preventDefault();{var b=$(this).attr("href");new MozActivity({name:"view",data:{type:"url",url:b}})}return!1}).click(function(a){return a.preventDefault(),!1}),$('a[href^="mailto"]').tap(function(a){a.preventDefault();new MozActivity({name:"new",data:{type:"mail",url:$(this).attr("href")}});return!1}).click(function(a){return a.preventDefault(),!1}),window.save=function(){var a=c.getImageData(0,0,width(),height());switch(save.background){case"white":c.fillStyle="white",c.globalCompositeOperation="destination-over",c.fillRect(0,0,width(),height()),c.fillStyle=settings.color,c.globalCompositeOperation=settings.composite;break;case"current color":c.fillStyle=settings.bg,c.globalCompositeOperation="destination-over",c.fillRect(0,0,width(),height()),c.globalCompositeOperation=settings.composite}var b=$c[0].toDataURL();if("sketchy project"==save.type){var d,e=JSON.parse(localStorage.getItem("projects"));e&&e.some(function(a,b){return a.name==save["file name"]?(d=b,!0):!1})?confirm("A sketch with this name already exists. Do you want to overwrite "+save["file name"]+"?")&&(console.log(d),e[d]={name:save["file name"],data:b,points:window.points,settings:settings},localStorage.setItem("projects",JSON.stringify(e))):(e?e.push({name:save["file name"],data:b,points:window.points,settings:settings}):e=[{name:save["file name"],data:b,points:window.points,settings:settings}],localStorage.setItem("projects",JSON.stringify(e)))}else{var f=navigator.getDeviceStorage("pictures"),g=dataToBlob(b),h=f.addNamed(g,save["file name"]+".png");h.onsuccess=function(){alert("Your Sketch was saved successfuly: "+this.result)},h.onerror=function(){alert("Something bad happened trying to save your sketch "+save["file name"]+"\n Possible reasons:\n Duplicate Name \n Not enough permission")}}c.putImageData(a,0,0)},window.load=function(){var a=JSON.parse(localStorage.getItem("projects")).filter(function(a){return a.name==load.file})[0],b=document.createElement("img");b.src=a.data,b.onload=function(){c.clearRect(0,0,width(),height()),c.drawImage(b,0,0),window.points=a.points,window.points.history=[{data:c.createImageData($c.width(),$c.height()),points:[]},{data:c.getImageData(0,0,width(),height()),points:a.points}],$c.first().css("background",a.settings.bg),window.settings.bg=a.settings.bg}},localStorage.getItem("sawVote")||($(".vote").removeClass("hidden"),localStorage.setItem("sawVote",!0))});
\ No newline at end of file
+$(document).ready(function(){$("*").off("click mousemove mousedown mouseup mouseleave").on("click mousemove mousedown mouseup mouseleave",function(a){a.preventDefault}),$('a[href^="http"]').tap(function(a){a.preventDefault();{var b=$(this).attr("href");new MozActivity({name:"view",data:{type:"url",url:b}})}return!1}).click(function(a){return a.preventDefault(),!1}),$('a[href^="mailto"]').tap(function(a){a.preventDefault();new MozActivity({name:"new",data:{type:"mail",url:$(this).attr("href")}});return!1}).click(function(a){return a.preventDefault(),!1}),window.save=function(){var a=c.getImageData(0,0,width(),height());switch(save.background){case"white":c.fillStyle="white",c.globalCompositeOperation="destination-over",c.fillRect(0,0,width(),height()),c.fillStyle=settings.color,c.globalCompositeOperation=settings.composite;break;case"current color":c.fillStyle=settings.bg,c.globalCompositeOperation="destination-over",c.fillRect(0,0,width(),height()),c.globalCompositeOperation=settings.composite}var b=$c[0].toDataURL();if("sketchy project"==save.type){var d,e=JSON.parse(localStorage.getItem("projects"));e&&e.some(function(a,b){return a.name==save["file name"]?(d=b,!0):!1})?confirm("A sketch with this name already exists. Do you want to overwrite "+save["file name"]+"?")&&(console.log(d),e[d]={name:save["file name"],data:b,points:window.points,settings:settings},localStorage.setItem("projects",JSON.stringify(e))):(e?e.push({name:save["file name"],data:b,points:window.points,settings:settings}):e=[{name:save["file name"],data:b,points:window.points,settings:settings}],localStorage.setItem("projects",JSON.stringify(e)))}else{var f=navigator.getDeviceStorage("pictures"),g=dataToBlob(b),h=f.addNamed(g,save["file name"]+".png");h.onsuccess=function(){alert("Your Sketch was saved successfuly: "+this.result)},h.onerror=function(){alert("Something bad happened trying to save your sketch "+save["file name"]+"\n Possible reasons:\n Duplicate Name \n Not enough permission")}}c.putImageData(a,0,0)},window.load=function(){var a=JSON.parse(localStorage.getItem("projects")).filter(function(a){return a.name==load.file})[0],b=document.createElement("img");b.src=a.data,b.onload=function(){c.clearRect(0,0,width(),height()),c.drawImage(b,0,0),window.points=a.points,window.points.history=[{data:c.createImageData($c.width(),$c.height()),points:[]},{data:c.getImageData(0,0,width(),height()),points:a.points}],$c.first().css("background",a.settings.bg),window.settings.bg=a.settings.bg}}});
\ No newline at end of file
diff --git a/build/mobile/manifest.webapp b/build/mobile/manifest.webapp
index 326110f..663975f 100644
--- a/build/mobile/manifest.webapp
+++ b/build/mobile/manifest.webapp
@@ -1,7 +1,7 @@
{
"name": "Sketchy",
"description": "Free full-featured Sketch app",
- "version": "1.2.1",
+ "version": "1.2.2",
"fullscreen": "true",
"type": "privileged",
"launch_path": "/index.html",
@@ -37,6 +37,9 @@
"device-storage:pictures": {
"description": "Required to save sketches",
"access": "readwrite"
+ },
+ "video-capture": {
+ "description": "Test"
}
}
}
diff --git a/build/web/js/main.js b/build/web/js/main.js
index 4f82d55..b17a3c9 100644
--- a/build/web/js/main.js
+++ b/build/web/js/main.js
@@ -1 +1 @@
-"use strict";$(document).ready(function(){function a(){var b=c.getImageData(0,0,width(),height());switch(a.background){case"white":c.fillStyle="white",c.globalCompositeOperation="destination-over",c.fillRect(0,0,width(),height()),c.fillStyle=settings.color,c.globalCompositeOperation=settings.composite;break;case"current color":c.fillStyle=settings.bg,c.globalCompositeOperation="destination-over",c.fillRect(0,0,width(),height()),c.globalCompositeOperation=settings.composite}var d=$c[0].toDataURL();if("sketchy project"==a.type){var e,f=JSON.parse(localStorage.getItem("projects"));f&&f.some(function(b,c){return b.name==a["file name"]?(e=c,!0):!1})?confirm("A sketch with this name already exists. Do you want to overwrite "+a["file name"]+"?")&&(console.log(e),f[e]={name:a["file name"],data:d,points:window.points,settings:settings},localStorage.setItem("projects",JSON.stringify(f))):f?f.push({name:a["file name"],data:d,points:window.points,settings:settings}):f=[{name:a["file name"],data:d,points:window.points,settings:settings}],localStorage.setItem("projects",JSON.stringify(f))}else $('').click();c.putImageData(b,0,0)}function b(){var a=JSON.parse(localStorage.getItem("projects")).filter(function(a){return a.name==b.file})[0],d=document.createElement("img");d.src=a.data,d.onload=function(){c.clearRect(0,0,width(),height()),c.drawImage(d,0,0),window.points=a.points,window.points.history=[{data:c.createImageData($c.width(),$c.height()),points:[]},{data:c.getImageData(0,0,width(),height()),points:a.points}],$c.first().css("background",a.settings.bg),window.settings.bg=a.settings.bg}}yepnope({test:window.mobile,yep:["js/mobile.js","js/libs/color-picker-touch.js"],nope:["js/libs/color-picker.js"]}),$(window).resize(sizeAndPos),window.load=b,window.save=a});
\ No newline at end of file
+"use strict";$(document).ready(function(){function a(){var b=c.getImageData(0,0,width(),height());switch(a.background){case"white":c.fillStyle="white",c.globalCompositeOperation="destination-over",c.fillRect(0,0,width(),height()),c.fillStyle=settings.color,c.globalCompositeOperation=settings.composite;break;case"current color":c.fillStyle=settings.bg,c.globalCompositeOperation="destination-over",c.fillRect(0,0,width(),height()),c.globalCompositeOperation=settings.composite}var d=$c[0].toDataURL();if("sketchy project"==a.type){var e,f=JSON.parse(localStorage.getItem("projects"));f&&f.some(function(b,c){return b.name==a["file name"]?(e=c,!0):!1})?confirm("A sketch with this name already exists. Do you want to overwrite "+a["file name"]+"?")&&(console.log(e),f[e]={name:a["file name"],data:d,points:window.points,settings:settings},localStorage.setItem("projects",JSON.stringify(f))):f?f.push({name:a["file name"],data:d,points:window.points,settings:settings}):f=[{name:a["file name"],data:d,points:window.points,settings:settings}],localStorage.setItem("projects",JSON.stringify(f))}else $('').click();c.putImageData(b,0,0)}function b(){var a=JSON.parse(localStorage.getItem("projects")).filter(function(a){return a.name==b.file})[0],d=document.createElement("img");d.src=a.data,d.onload=function(){c.clearRect(0,0,width(),height()),c.drawImage(d,0,0),window.points=a.points,window.points.history=[{data:c.createImageData($c.width(),$c.height()),points:[]},{data:c.getImageData(0,0,width(),height()),points:a.points}],$c.first().css("background",a.settings.bg),window.settings.bg=a.settings.bg}}function d(){console.log("Ready"),Unity.Notification.showNotification("Salam","Chetori!")}yepnope({test:window.mobile,yep:["js/mobile.js","js/libs/color-picker-touch.js"],nope:["js/libs/color-picker.js"]}),$(window).resize(sizeAndPos),window.load=b,window.save=a,alert(typeof external.getUnityObject),external.getUnityObject&&(window.Unity=external.getUnityObject(1),Unity.init({name:"Sketchy",iconUrl:"file:///home/mahdi/Documents/Workshop/Sketchy/build/web/img/icons/icon60.png",onInit:d}))});
\ No newline at end of file
diff --git a/deploy-android b/deploy-android
deleted file mode 100755
index 267ca83..0000000
--- a/deploy-android
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/bash
-
-grunt;
-cp -R build/android/* ~/Documents/Workshop/Sketchy-Android/sketchy/www/
-cd ~/Documents/Workshop/Sketchy-Android/sketchy
-phonegap run android
diff --git a/out/css/fonts/MozTT-Bold.ttf b/out/css/fonts/MozTT-Bold.ttf
new file mode 100644
index 0000000..8ad5fab
Binary files /dev/null and b/out/css/fonts/MozTT-Bold.ttf differ
diff --git a/out/css/fonts/MozTT-Light.ttf b/out/css/fonts/MozTT-Light.ttf
new file mode 100644
index 0000000..0553c17
Binary files /dev/null and b/out/css/fonts/MozTT-Light.ttf differ
diff --git a/out/css/fonts/MozTT-Medium.ttf b/out/css/fonts/MozTT-Medium.ttf
new file mode 100644
index 0000000..91466be
Binary files /dev/null and b/out/css/fonts/MozTT-Medium.ttf differ
diff --git a/out/css/fonts/MozTT-Regular.ttf b/out/css/fonts/MozTT-Regular.ttf
new file mode 100644
index 0000000..e74e0b2
Binary files /dev/null and b/out/css/fonts/MozTT-Regular.ttf differ
diff --git a/out/css/imgs/bg_overlay_pressed_1.png b/out/css/imgs/bg_overlay_pressed_1.png
new file mode 100644
index 0000000..753e953
Binary files /dev/null and b/out/css/imgs/bg_overlay_pressed_1.png differ
diff --git a/out/css/imgs/bg_overlay_pressed_2.png b/out/css/imgs/bg_overlay_pressed_2.png
new file mode 100644
index 0000000..8db4bbf
Binary files /dev/null and b/out/css/imgs/bg_overlay_pressed_2.png differ
diff --git a/out/css/imgs/clear.png b/out/css/imgs/clear.png
new file mode 100644
index 0000000..cfcff2e
Binary files /dev/null and b/out/css/imgs/clear.png differ
diff --git a/out/css/imgs/div_line_lg_black.png b/out/css/imgs/div_line_lg_black.png
new file mode 100644
index 0000000..2fd663e
Binary files /dev/null and b/out/css/imgs/div_line_lg_black.png differ
diff --git a/out/css/imgs/div_line_sm_black.png b/out/css/imgs/div_line_sm_black.png
new file mode 100644
index 0000000..c1b4c09
Binary files /dev/null and b/out/css/imgs/div_line_sm_black.png differ
diff --git a/out/css/imgs/download.png b/out/css/imgs/download.png
new file mode 100644
index 0000000..897c9f2
Binary files /dev/null and b/out/css/imgs/download.png differ
diff --git a/out/css/imgs/header_bg_black.png b/out/css/imgs/header_bg_black.png
new file mode 100644
index 0000000..5670021
Binary files /dev/null and b/out/css/imgs/header_bg_black.png differ
diff --git a/out/css/imgs/load.png b/out/css/imgs/load.png
new file mode 100644
index 0000000..193d42f
Binary files /dev/null and b/out/css/imgs/load.png differ
diff --git a/out/css/imgs/menu.png b/out/css/imgs/menu.png
new file mode 100644
index 0000000..c0d38c0
Binary files /dev/null and b/out/css/imgs/menu.png differ
diff --git a/out/css/imgs/redo.png b/out/css/imgs/redo.png
new file mode 100644
index 0000000..d2864fb
Binary files /dev/null and b/out/css/imgs/redo.png differ
diff --git a/out/css/imgs/settings.png b/out/css/imgs/settings.png
new file mode 100644
index 0000000..6792c46
Binary files /dev/null and b/out/css/imgs/settings.png differ
diff --git a/out/css/imgs/undo.png b/out/css/imgs/undo.png
new file mode 100644
index 0000000..6117001
Binary files /dev/null and b/out/css/imgs/undo.png differ
diff --git a/out/css/main.css b/out/css/main.css
new file mode 100644
index 0000000..acbda4a
--- /dev/null
+++ b/out/css/main.css
@@ -0,0 +1,650 @@
+@font-face {
+ font-family: 'MozTT-Regular';
+ src: url('fonts/MozTT-Regular.ttf');
+}
+@font-face {
+ font-family: 'MozTT-Light';
+ src: url('fonts/MozTT-Light.ttf');
+}
+@font-face {
+ font-family: 'MozTT-Medium';
+ src: url('fonts/MozTT-Medium.ttf');
+}
+@font-face {
+ font-family: 'MozTT-Bold';
+ src: url('fonts/MozTT-Bold.ttf');
+}
+/* Purty Picker Copyright 2013 Jayden Seric (MIT license): https://github.com/jaydenseric/Purty-Picker */
+/* Core: No touchy! */
+.color-picker .spectrum {
+ position: relative;
+ /* To position pin, luminosity filter */
+ background: linear-gradient(#808080, transparent), linear-gradient(90deg, #ff0000, #ff2b00, #ff5500, #ff8000, #ffaa00, #ffd500, #ffff00, #d4ff00, #aaff00, #80ff00, #55ff00, #2bff00, #00ff00, #00ff2b, #00ff55, #00ff80, #00ffaa, #00ffd5, #00ffff, #00d4ff, #00aaff, #007fff, #0055ff, #002bff, #0000ff, #2a00ff, #5500ff, #7f00ff, #aa00ff, #d400ff, #ff00ff, #ff00d4, #ff00aa, #ff0080, #ff0055, #ff002b, #ff0000);
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ /* Prevent pin interaction causing content selection */
+ cursor: crosshair;
+}
+.color-picker .spectrum.active {
+ cursor: none;
+}
+.color-picker .spectrum.active .pin {
+ cursor: none;
+}
+.color-picker .spectrum > div {
+ /* Luminosity filter */
+ position: absolute;
+ left: 0;
+ right: 0;
+ top: 0;
+ bottom: 0;
+}
+.color-picker .spectrum .pin {
+ position: absolute;
+ cursor: move;
+}
+/* Customization: Default skin */
+.color-picker {
+ margin: 20px;
+ padding: 11px;
+ border: 1px solid #e3e3e3;
+ border-radius: 4px;
+ background-color: #f5f5f5;
+}
+.color-picker .color,
+.color-picker .luminosity {
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ display: block;
+ width: 100%;
+}
+.color-picker .format {
+ display: block;
+ margin: 0 auto 10px auto;
+}
+.color-picker .color {
+ -webkit-appearance: none;
+ border: 0;
+ border-radius: 2px;
+ padding: 10px;
+ text-align: center;
+ font-size: 11px;
+ letter-spacing: 1px;
+ font-family: Consolas, Monaco, 'Andale Mono', monospace;
+ color: rgba(0, 0, 0, 0.6);
+ box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.2);
+ transition: color 0.2s;
+}
+.color-picker .color.dark {
+ color: rgba(255, 255, 255, 0.7);
+}
+.color-picker .spectrum {
+ height: 150px;
+ /* Arbitary but required */
+ overflow: hidden;
+ /* Prevent pin overflowing container */
+ border-radius: 2px;
+ margin: 10px 0;
+}
+.color-picker .spectrum > div {
+ box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.2);
+}
+.color-picker .spectrum .pin {
+ margin-left: -4px;
+ margin-top: -4px;
+ width: 4px;
+ height: 4px;
+ border: 2px solid white;
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.4);
+ border-radius: 100%;
+}
+.color-picker .luminosity {
+ margin: 0;
+}
+/* ----------------------------------
+* Seekbars
+* ---------------------------------- */
+div[role="slider"] {
+ position: relative;
+ height: 3.5rem;
+}
+div[role="slider"] > div {
+ display: block;
+ padding: 0;
+ overflow-y: hidden;
+ position: relative;
+ height: 100%;
+}
+div[role="slider"] progress {
+ width: 100%;
+ background: #000;
+ border: none;
+ height: 0.1rem;
+ display: block;
+ border-radius: 0;
+ margin-top: 1.9rem;
+}
+div[role="slider"] progress::-moz-progress-bar {
+ background: #01c5ed;
+ height: 0.6rem;
+ margin-top: -0.3rem;
+ border-radius: 0;
+}
+div[role="slider"] > label {
+ font-size: 1.5rem;
+ line-height: 3.8rem;
+ font-family: sans-serif;
+ color: #00aacb;
+ float: right;
+ padding: 0 0 0 1rem;
+ height: 3.5rem;
+ width: auto;
+}
+div[role="slider"] label:first-of-type {
+ float: left;
+ padding: 0 1rem 0 0;
+}
+div[role="slider"] > label.icon {
+ width: 3rem;
+ height: 3rem;
+ margin-top: 0.5rem;
+ font-size: 0;
+ background: no-repeat right top / 3rem auto;
+}
+div[role="slider"] > label.icon:first-of-type {
+ background-position: top left;
+}
+div[role="slider"] button {
+ width: 3.2rem;
+ height: 3.2rem;
+ background: url(seekbars/images/ui/handler.png) no-repeat center center / 3rem auto;
+ font: 0/0 a;
+ position: absolute;
+ top: 50%;
+ left: 0;
+ margin: -1.5rem 0 0 -1.6rem;
+ border-radius: 3.2rem;
+ border: solid 0.1rem transparent;
+ transition: border 0.15s ease;
+ padding: 0;
+ z-index: 10;
+}
+div[role="slider"] button:active {
+ border: solid 0.5rem #01c5ed;
+}
+/* ----------------------------------
+ * Value selector (Single & Multiple)
+ * ---------------------------------- */
+/* Main dialog setup */
+form[role="dialog"][data-type="value-selector"] {
+ background: url(value_selector/images/ui/pattern.png) repeat left top, url(value_selector/images/ui/gradient.png) no-repeat left top / 100% 100%;
+ overflow: hidden;
+ position: absolute;
+ z-index: 100;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ padding: 0 0 7rem;
+ color: #fff;
+ font-family: sans-serif;
+}
+form[role="dialog"][data-type="value-selector"] > section {
+ padding: 0 1.5rem 0;
+ -moz-box-sizing: padding-box;
+ width: 100%;
+ height: 100%;
+ overflow: auto;
+}
+form[role="dialog"][data-type="value-selector"] h1 {
+ font-weight: 400;
+ font-size: 1.9rem;
+ line-height: 4.8rem;
+ color: #fff;
+ border-bottom: 0.1rem solid #616262;
+ background: rgba(0, 0, 0, 0.2);
+ margin: 0 -1.5rem;
+ padding: 0 3rem 1rem;
+ height: 4.8rem;
+ -moz-box-sizing: border-box;
+}
+/* Specific component code */
+form[role="dialog"][data-type="value-selector"] [role="listbox"] {
+ position: relative;
+ padding: 0;
+ margin: 0 -1.5rem;
+ max-height: calc(95%);
+ overflow: auto;
+ border-top: solid 0.1rem #222323;
+}
+form[role="dialog"][data-type="value-selector"] .scrollable:before {
+ content: "";
+ display: block;
+ position: absolute;
+ pointer-events: none;
+ top: 4.8rem;
+ left: 0;
+ right: 0;
+ bottom: 6.9rem;
+ background: url(value_selector/images/ui/shadow.png) repeat-x left top, url(value_selector/images/ui/shadow-invert.png) repeat-x left bottom;
+}
+form[role="dialog"][data-type="value-selector"] [role="listbox"] li {
+ margin: 0;
+ padding: 0 1.5rem;
+ height: auto;
+ list-style: none;
+ position: relative;
+ font-weight: lighter;
+ font-size: 2.2rem;
+ line-height: 3.9rem;
+ color: #fff;
+ transition: background-color 0.2s ease;
+}
+form[role="dialog"][data-type="value-selector"] [role="listbox"] li:first-child label {
+ border-top-color: transparent;
+}
+form[role="dialog"][data-type="value-selector"] [role="listbox"] li label {
+ outline: none;
+ display: block;
+ color: #fff;
+ border-top: 0.1rem solid #666;
+ border-bottom: 0.1rem solid #000;
+}
+form[role="dialog"][data-type="value-selector"] [role="listbox"] li:last-child label {
+ border-bottom-color: transparent;
+}
+form[role="dialog"][data-type="value-selector"] [role="listbox"] li label span {
+ display: block;
+ padding: 1rem 1.5rem;
+ line-height: 4rem;
+ word-wrap: break-word;
+}
+/* Pressed status */
+form[role="dialog"][data-type="value-selector"] [role="listbox"] li:active {
+ background-color: #00ABCC;
+}
+form[role="dialog"][data-type="value-selector"] [role="listbox"] li:active label {
+ border-color: transparent;
+}
+form[role="dialog"][data-type="value-selector"] [role="listbox"] li:active + li label {
+ border-top-color: #000;
+}
+form[role="dialog"][data-type="value-selector"] [role="listbox"] li:active label span {
+ color: #fff !important;
+ background-image: none;
+}
+/* Checked status */
+form[role="dialog"][data-type="value-selector"] [role="listbox"] li[aria-selected="true"]:not([data-input]) span {
+ padding-right: 2.6rem;
+ margin-right: 1.2rem;
+ color: #00abcd;
+ background: transparent url(value_selector/images/icons/checked.png) no-repeat 100% 50%;
+ background-size: 2rem;
+}
+/* Menu & buttons setup */
+form[role="dialog"][data-type="value-selector"] menu {
+ white-space: nowrap;
+ margin: 0;
+ padding: 1.5rem;
+ border-top: solid 0.1rem rgba(255, 255, 255, 0.1);
+ background: #2d2d2d url(value_selector/images/ui/pattern.png) repeat left top;
+ display: block;
+ overflow: hidden;
+ position: absolute;
+ left: 0;
+ right: 0;
+ bottom: 0;
+}
+form[role="dialog"][data-type="value-selector"] menu button::-moz-focus-inner {
+ border: none;
+ outline: none;
+}
+form[role="dialog"][data-type="value-selector"] menu button,
+.button {
+ width: calc(49.5%);
+ height: 3.8rem;
+ margin: 0 0 1rem;
+ padding: 0 1.5rem;
+ -moz-box-sizing: border-box;
+ display: inline-block;
+ vertical-align: middle;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ overflow: hidden;
+ background: #fafafa url(value_selector/images/ui/default.png) repeat-x left bottom / auto 100%;
+ border: 0.1rem solid #a6a6a6;
+ border-radius: 0.3rem;
+ font-weight: 500;
+ font-size: 1.6rem;
+ line-height: 3.8rem;
+ color: #333;
+ text-align: center;
+ text-shadow: 0.1rem 0.1rem 0 rgba(255, 255, 255, 0.3);
+ text-decoration: none;
+ outline: none;
+}
+/* Press (default & affirmative) */
+form[role="dialog"][data-type="value-selector"] menu button:active,
+form[role="dialog"][data-type="value-selector"] menu button.affirmative:active,
+.button:active {
+ border-color: #008aaa;
+ background: #008aaa;
+ color: #333;
+}
+/* affirmative */
+form[role="dialog"][data-type="value-selector"] menu button.affirmative,
+.button.affirmative {
+ background-image: url(value_selector/images/ui/affirmative.png);
+ background-color: #00caf2;
+ border-color: #008eab;
+}
+form[role="dialog"][data-type="value-selector"] menu button:last-child {
+ margin-left: 1rem;
+}
+form[role="dialog"][data-type="value-selector"] menu button,
+form[role="dialog"][data-type="value-selector"] menu button:first-child {
+ margin: 0;
+}
+form[role="dialog"][data-type="value-selector"] menu button.full,
+.button.full {
+ width: 100%;
+}
+/* Right to left tweaks */
+html[dir="rtl"] #value-selector li input:checked + span,
+html[dir="rtl"] #value-selector li[aria-selected="true"] span {
+ padding-left: 2.6rem;
+ margin-left: 1.2rem;
+}
+html,
+body {
+ margin: 0;
+ font-size: 10px;
+ overflow: hidden;
+ width: 100%;
+ height: 100%;
+ position: absolute;
+}
+*::-moz-focus-inner {
+ border: none;
+}
+*:focus {
+ outline: none;
+}
+.hidden {
+ display: none !important;
+ visibility: none !important;
+}
+div#container {
+ position: absolute;
+}
+canvas {
+ position: absolute;
+ top: 0;
+ left: 0;
+}
+canvas:first-of-type {
+ background: white;
+}
+.separator {
+ display: block;
+ height: 4.8rem;
+ width: 0.1rem;
+}
+.separator.long {
+ background: url('imgs/div_line_lg_black.png');
+}
+.separator.small {
+ background: url('imgs/div_line_sm_black.png');
+}
+.separator.left {
+ float: left;
+}
+.separator.right {
+ float: right;
+}
+.separator.menu {
+ position: relative;
+ left: -3rem;
+}
+.overlay {
+ z-index: 9999;
+ position: absolute;
+ left: 0;
+ top: 5.3rem;
+}
+button {
+ -moz-appearance: none;
+ z-index: 1;
+ position: relative;
+ border: none;
+}
+.close {
+ display: block;
+ width: 2rem;
+ height: 2rem;
+ padding: 0 0 0.2rem 0.2rem;
+ font-size: 10pt;
+ border: 1px solid #e3e3e3;
+ border-radius: 50%;
+ position: absolute;
+ text-align: center;
+ top: -2%;
+ left: 97%;
+}
+.picker,
+.about,
+.tour,
+.vote {
+ font-family: 'MozTT-Light';
+ width: 30rem;
+ height: 24.6rem;
+ position: absolute;
+ left: 50%;
+ top: 50%;
+ margin-top: -12.3rem;
+ margin-left: -15rem;
+}
+.picker .color-picker,
+.about .color-picker,
+.tour .color-picker,
+.vote .color-picker {
+ margin: 0;
+}
+.about,
+.tour,
+.vote {
+ background: #262626;
+ padding: 1rem 2rem;
+ height: 23rem;
+ margin-top: -11.5rem;
+ margin-left: -17rem;
+ border-radius: 0.2rem;
+ color: white;
+ box-shadow: 0 0 0.3rem black;
+}
+.about a,
+.tour a,
+.vote a,
+.about a:link,
+.tour a:link,
+.vote a:link,
+.about a:visited,
+.tour a:visited,
+.vote a:visited,
+.about a:active,
+.tour a:active,
+.vote a:active {
+ color: white;
+}
+.about .close,
+.tour .close,
+.vote .close {
+ background: #262626;
+ color: white;
+ border: 1px solid gray;
+}
+.about p,
+.tour p,
+.vote p {
+ font-size: 11pt;
+}
+.about span,
+.tour span,
+.vote span {
+ font-size: 8pt;
+}
+.tour .button,
+.vote .button {
+ width: 30rem;
+ position: absolute;
+ bottom: 1rem;
+ left: 1.8rem;
+}
+.vote {
+ height: 30rem;
+}
+header {
+ width: 100%;
+ height: 5.3rem;
+ background: url('imgs/header_bg_black.png');
+}
+header button {
+ width: 5rem;
+ height: 5rem;
+}
+header .menu {
+ background: url('imgs/menu.png') -12px center no-repeat;
+ float: left;
+}
+header .menu:active {
+ background: url('imgs/menu.png') -12px center no-repeat, url('imgs/bg_overlay_pressed_1.png') left no-repeat;
+}
+header .save {
+ background: url('imgs/download.png') center center no-repeat;
+ float: right;
+}
+header .save:active {
+ background: url('imgs/download.png') center center no-repeat, url('imgs/bg_overlay_pressed_2.png') center center;
+}
+header .load {
+ background: url('imgs/load.png') center center no-repeat;
+ float: right;
+}
+header .load:active {
+ background: url('imgs/load.png') center center no-repeat, url('imgs/bg_overlay_pressed_2.png') center center;
+}
+header #title {
+ color: white;
+ font-size: 11pt;
+ font-family: 'MozTT-Regular';
+ float: left;
+ margin: 1.5rem 0;
+ position: relative;
+ left: -2rem;
+}
+#menu {
+ width: 15.4rem;
+ height: 100%;
+ display: block;
+ background: #262626;
+ position: absolute;
+ left: -15.4rem;
+ top: 5rem;
+ color: white;
+ transition: left 0.3s ease-out;
+ border-collapse: collapse;
+ overflow: hidden;
+}
+#menu.pulled {
+ left: 0;
+ transition: left 0.3s ease-out;
+}
+#menu button[id^='set'],
+#menu p,
+#menu .bottom button {
+ background: none;
+ display: block;
+ width: 75%;
+ color: white;
+ text-align: left;
+ margin: 1rem 2.5rem;
+ font-family: 'MozTT-Light' !important;
+ font-size: 9pt;
+ padding: 0 0.6rem;
+ cursor: pointer;
+}
+#menu p {
+ width: 65%;
+}
+#menu span {
+ float: right;
+ font-size: 7pt;
+ padding-top: 0.3rem;
+}
+#menu div[role='slider'] {
+ width: 60%;
+ float: right;
+ margin: 0 2rem 0 0;
+}
+#menu div[role='slider'] div {
+ overflow: visible;
+}
+#menu div[role='slider'] div button {
+ margin-top: -3.4rem;
+ left: 0%;
+}
+#menu hr {
+ clear: both;
+ padding: 0.7rem 0;
+ margin-bottom: 0.7rem;
+ border: none;
+ border-bottom: 1px solid rgba(255, 255, 255, 0.3);
+}
+#menu *[class^='icon'] {
+ display: block;
+ margin: 1rem 0.5rem;
+ font-family: 'MozTT-Regular' !important;
+}
+#menu *[class^='icon']:nth-of-type(2) {
+ padding-top: 0.5rem;
+}
+#menu *[class^='icon']:before {
+ content: '';
+ background-size: 2rem;
+ width: 2rem;
+ height: 2rem;
+ display: block;
+ float: left;
+ margin: -0.3rem 0.5rem 0 0;
+}
+#menu .icon-settings:before {
+ background-image: url('imgs/settings.png');
+}
+#menu .icon-clear:before {
+ background-image: url('imgs/clear.png');
+}
+#menu .icon-undo:before {
+ background-image: url('imgs/undo.png');
+}
+#menu .icon-redo:before {
+ background-image: url('imgs/redo.png');
+}
+#menu .options {
+ display: table-row;
+ vertical-align: top;
+ margin-top: 1rem;
+ width: 100%;
+}
+#menu .bottom {
+ width: 100%;
+ position: absolute;
+ bottom: 5rem;
+}
+#menu .bottom button[class^='icon'] {
+ margin-left: 3.5rem;
+}
+#menu .bottom button {
+ margin-left: 5rem;
+}
diff --git a/out/css/seekbars/images/ui/handler.png b/out/css/seekbars/images/ui/handler.png
new file mode 100644
index 0000000..246b7b4
Binary files /dev/null and b/out/css/seekbars/images/ui/handler.png differ
diff --git a/out/css/seekbars/images/ui/handler@1.5x.png b/out/css/seekbars/images/ui/handler@1.5x.png
new file mode 100644
index 0000000..26a5092
Binary files /dev/null and b/out/css/seekbars/images/ui/handler@1.5x.png differ
diff --git a/out/css/seekbars/images/ui/handler@2x.png b/out/css/seekbars/images/ui/handler@2x.png
new file mode 100644
index 0000000..9a69e77
Binary files /dev/null and b/out/css/seekbars/images/ui/handler@2x.png differ
diff --git a/out/css/seekbars/seekbars.css b/out/css/seekbars/seekbars.css
new file mode 100644
index 0000000..a92a477
--- /dev/null
+++ b/out/css/seekbars/seekbars.css
@@ -0,0 +1,79 @@
+/* ----------------------------------
+* Seekbars
+* ---------------------------------- */
+div[role="slider"] {
+ position: relative;
+ height: 3.5rem;
+}
+
+div[role="slider"] > div {
+ display: block;
+ overflow: hidden;
+ padding: 0;
+ position: relative;
+ height: 100%;
+}
+
+div[role="slider"] progress {
+ width: 100%;
+ background: #000;
+ border: none;
+ height: 0.1rem;
+ display: block;
+ border-radius: 0;
+ margin-top: 1.9rem;
+}
+
+div[role="slider"] progress::-moz-progress-bar {
+ background: #01c5ed;
+ height: 0.6rem;
+ margin-top: -0.3rem;
+ border-radius: 0;
+}
+
+div[role="slider"] > label {
+ font-size: 1.5rem;
+ line-height: 3.8rem;
+ font-family: sans-serif;
+ color: #00aacb;
+ float: right;
+ padding: 0 0 0 1rem;
+ height: 3.5rem;
+ width: auto;
+}
+
+div[role="slider"] label:first-of-type {
+ float: left;
+ padding: 0 1rem 0 0;
+}
+
+div[role="slider"] > label.icon {
+ width: 3rem;
+ height: 3rem;
+ margin-top: 0.5rem;
+ font-size: 0;
+ background: no-repeat right top / 3rem auto;
+}
+
+div[role="slider"] > label.icon:first-of-type {
+ background-position: top left;
+}
+
+div[role="slider"] button {
+ width: 3.2rem;
+ height: 3.2rem;
+ background: url(seekbars/images/ui/handler.png) no-repeat center center / 3rem auto;
+ font: 0/0 a;
+ position: absolute;
+ top: 50%;
+ left: 0;
+ margin: -1.5rem 0 0 -1.6rem;
+ border-radius: 3.2rem;
+ border: solid 0.1rem transparent;
+ transition: border 0.15s ease;
+ padding: 0;
+}
+
+div[role="slider"] button:active {
+ border: solid 0.5rem #01c5ed;
+}
diff --git a/out/css/switches/images/check/danger.png b/out/css/switches/images/check/danger.png
new file mode 100644
index 0000000..ed1f267
Binary files /dev/null and b/out/css/switches/images/check/danger.png differ
diff --git a/out/css/switches/images/check/danger@1.5x.png b/out/css/switches/images/check/danger@1.5x.png
new file mode 100644
index 0000000..8d4b61d
Binary files /dev/null and b/out/css/switches/images/check/danger@1.5x.png differ
diff --git a/out/css/switches/images/check/danger@2x.png b/out/css/switches/images/check/danger@2x.png
new file mode 100644
index 0000000..7befd67
Binary files /dev/null and b/out/css/switches/images/check/danger@2x.png differ
diff --git a/out/css/switches/images/check/default.png b/out/css/switches/images/check/default.png
new file mode 100644
index 0000000..9f188bb
Binary files /dev/null and b/out/css/switches/images/check/default.png differ
diff --git a/out/css/switches/images/check/default@1.5x.png b/out/css/switches/images/check/default@1.5x.png
new file mode 100644
index 0000000..8c25cae
Binary files /dev/null and b/out/css/switches/images/check/default@1.5x.png differ
diff --git a/out/css/switches/images/check/default@2x.png b/out/css/switches/images/check/default@2x.png
new file mode 100644
index 0000000..3e19692
Binary files /dev/null and b/out/css/switches/images/check/default@2x.png differ
diff --git a/out/css/switches/images/radio/danger.png b/out/css/switches/images/radio/danger.png
new file mode 100644
index 0000000..d285887
Binary files /dev/null and b/out/css/switches/images/radio/danger.png differ
diff --git a/out/css/switches/images/radio/danger@1.5x.png b/out/css/switches/images/radio/danger@1.5x.png
new file mode 100644
index 0000000..3b6a7d2
Binary files /dev/null and b/out/css/switches/images/radio/danger@1.5x.png differ
diff --git a/out/css/switches/images/radio/danger@2x.png b/out/css/switches/images/radio/danger@2x.png
new file mode 100644
index 0000000..812f9a3
Binary files /dev/null and b/out/css/switches/images/radio/danger@2x.png differ
diff --git a/out/css/switches/images/radio/default.png b/out/css/switches/images/radio/default.png
new file mode 100644
index 0000000..086d61a
Binary files /dev/null and b/out/css/switches/images/radio/default.png differ
diff --git a/out/css/switches/images/radio/default@1.5x.png b/out/css/switches/images/radio/default@1.5x.png
new file mode 100644
index 0000000..27ead41
Binary files /dev/null and b/out/css/switches/images/radio/default@1.5x.png differ
diff --git a/out/css/switches/images/radio/default@2x.png b/out/css/switches/images/radio/default@2x.png
new file mode 100644
index 0000000..a93f80b
Binary files /dev/null and b/out/css/switches/images/radio/default@2x.png differ
diff --git a/out/css/switches/images/switch/background.png b/out/css/switches/images/switch/background.png
new file mode 100644
index 0000000..99bfe33
Binary files /dev/null and b/out/css/switches/images/switch/background.png differ
diff --git a/out/css/switches/images/switch/background@1.5x.png b/out/css/switches/images/switch/background@1.5x.png
new file mode 100644
index 0000000..d1c2bd5
Binary files /dev/null and b/out/css/switches/images/switch/background@1.5x.png differ
diff --git a/out/css/switches/images/switch/background_off.png b/out/css/switches/images/switch/background_off.png
new file mode 100644
index 0000000..963a0d1
Binary files /dev/null and b/out/css/switches/images/switch/background_off.png differ
diff --git a/out/css/switches/images/switch/background_off@1.5x.png b/out/css/switches/images/switch/background_off@1.5x.png
new file mode 100644
index 0000000..c7bb7f5
Binary files /dev/null and b/out/css/switches/images/switch/background_off@1.5x.png differ
diff --git a/out/css/value_selector/images/icons/checked.png b/out/css/value_selector/images/icons/checked.png
new file mode 100644
index 0000000..69d5c3d
Binary files /dev/null and b/out/css/value_selector/images/icons/checked.png differ
diff --git a/out/css/value_selector/images/icons/checked@1.5x.png b/out/css/value_selector/images/icons/checked@1.5x.png
new file mode 100644
index 0000000..490dded
Binary files /dev/null and b/out/css/value_selector/images/icons/checked@1.5x.png differ
diff --git a/out/css/value_selector/images/icons/checked@2x.png b/out/css/value_selector/images/icons/checked@2x.png
new file mode 100644
index 0000000..c1a6fbd
Binary files /dev/null and b/out/css/value_selector/images/icons/checked@2x.png differ
diff --git a/out/css/value_selector/images/ui/affirmative.png b/out/css/value_selector/images/ui/affirmative.png
new file mode 100644
index 0000000..c1823eb
Binary files /dev/null and b/out/css/value_selector/images/ui/affirmative.png differ
diff --git a/out/css/value_selector/images/ui/default.png b/out/css/value_selector/images/ui/default.png
new file mode 100644
index 0000000..a174b67
Binary files /dev/null and b/out/css/value_selector/images/ui/default.png differ
diff --git a/out/css/value_selector/images/ui/gradient.png b/out/css/value_selector/images/ui/gradient.png
new file mode 100644
index 0000000..d2e6f5b
Binary files /dev/null and b/out/css/value_selector/images/ui/gradient.png differ
diff --git a/out/css/value_selector/images/ui/gradient@1.5x.png b/out/css/value_selector/images/ui/gradient@1.5x.png
new file mode 100644
index 0000000..0e420cd
Binary files /dev/null and b/out/css/value_selector/images/ui/gradient@1.5x.png differ
diff --git a/out/css/value_selector/images/ui/pattern.png b/out/css/value_selector/images/ui/pattern.png
new file mode 100644
index 0000000..af03f56
Binary files /dev/null and b/out/css/value_selector/images/ui/pattern.png differ
diff --git a/out/css/value_selector/images/ui/shadow-invert.png b/out/css/value_selector/images/ui/shadow-invert.png
new file mode 100644
index 0000000..b1b905f
Binary files /dev/null and b/out/css/value_selector/images/ui/shadow-invert.png differ
diff --git a/out/css/value_selector/images/ui/shadow-invert@1.5x.png b/out/css/value_selector/images/ui/shadow-invert@1.5x.png
new file mode 100644
index 0000000..ee2dc1c
Binary files /dev/null and b/out/css/value_selector/images/ui/shadow-invert@1.5x.png differ
diff --git a/out/css/value_selector/images/ui/shadow-invert@2x.png b/out/css/value_selector/images/ui/shadow-invert@2x.png
new file mode 100644
index 0000000..15c95ed
Binary files /dev/null and b/out/css/value_selector/images/ui/shadow-invert@2x.png differ
diff --git a/out/css/value_selector/images/ui/shadow.png b/out/css/value_selector/images/ui/shadow.png
new file mode 100644
index 0000000..728fe77
Binary files /dev/null and b/out/css/value_selector/images/ui/shadow.png differ
diff --git a/out/css/value_selector/images/ui/shadow@1.5x.png b/out/css/value_selector/images/ui/shadow@1.5x.png
new file mode 100644
index 0000000..44b35b4
Binary files /dev/null and b/out/css/value_selector/images/ui/shadow@1.5x.png differ
diff --git a/out/css/value_selector/images/ui/shadow@2x.png b/out/css/value_selector/images/ui/shadow@2x.png
new file mode 100644
index 0000000..f515eff
Binary files /dev/null and b/out/css/value_selector/images/ui/shadow@2x.png differ
diff --git a/out/img/icons/MozillaFXOSIconTemplate1_overlay.png b/out/img/icons/MozillaFXOSIconTemplate1_overlay.png
new file mode 100644
index 0000000..2389796
Binary files /dev/null and b/out/img/icons/MozillaFXOSIconTemplate1_overlay.png differ
diff --git a/out/img/icons/icon120.png b/out/img/icons/icon120.png
new file mode 100644
index 0000000..9519dd3
Binary files /dev/null and b/out/img/icons/icon120.png differ
diff --git a/out/img/icons/icon128.png b/out/img/icons/icon128.png
new file mode 100644
index 0000000..96e7f9f
Binary files /dev/null and b/out/img/icons/icon128.png differ
diff --git a/out/img/icons/icon16.png b/out/img/icons/icon16.png
new file mode 100644
index 0000000..186045d
Binary files /dev/null and b/out/img/icons/icon16.png differ
diff --git a/out/img/icons/icon2.png b/out/img/icons/icon2.png
new file mode 100644
index 0000000..559431b
Binary files /dev/null and b/out/img/icons/icon2.png differ
diff --git a/out/img/icons/icon2.svg b/out/img/icons/icon2.svg
new file mode 100644
index 0000000..6256192
--- /dev/null
+++ b/out/img/icons/icon2.svg
@@ -0,0 +1,102 @@
+
+
+
+
diff --git a/out/img/icons/icon32.png b/out/img/icons/icon32.png
new file mode 100644
index 0000000..78e4cf0
Binary files /dev/null and b/out/img/icons/icon32.png differ
diff --git a/Android/res/icons/android/icon-48-mdpi.png b/out/img/icons/icon48.png
similarity index 100%
rename from Android/res/icons/android/icon-48-mdpi.png
rename to out/img/icons/icon48.png
diff --git a/Android/res/icons/android/icon-60-hdpi.png b/out/img/icons/icon60.png
similarity index 100%
rename from Android/res/icons/android/icon-60-hdpi.png
rename to out/img/icons/icon60.png
diff --git a/out/img/icons/icon64.png b/out/img/icons/icon64.png
new file mode 100644
index 0000000..fd0041a
Binary files /dev/null and b/out/img/icons/icon64.png differ
diff --git a/out/img/icons/icon90.png b/out/img/icons/icon90.png
new file mode 100644
index 0000000..4e56717
Binary files /dev/null and b/out/img/icons/icon90.png differ
diff --git a/Android/index.html b/out/index.html
similarity index 91%
rename from Android/index.html
rename to out/index.html
index 31a15dd..64be561 100644
--- a/Android/index.html
+++ b/out/index.html
@@ -4,10 +4,10 @@
diff --git a/out/js/diff.js b/out/js/diff.js
new file mode 100644
index 0000000..739ae59
--- /dev/null
+++ b/out/js/diff.js
@@ -0,0 +1 @@
+$(document).ready(function(){$("*").off("click mousemove mousedown mouseup mouseleave").on("click mousemove mousedown mouseup mouseleave",function(a){a.preventDefault}),$('a[href^="http"]').tap(function(a){a.preventDefault();{var b=$(this).attr("href");new MozActivity({name:"view",data:{type:"url",url:b}})}return!1}).click(function(a){return a.preventDefault(),!1}),$('a[href^="mailto"]').tap(function(a){a.preventDefault();new MozActivity({name:"new",data:{type:"mail",url:$(this).attr("href")}});return!1}).click(function(a){return a.preventDefault(),!1}),window.save=function(){var a=c.getImageData(0,0,width(),height());switch(save.background){case"white":c.fillStyle="white",c.globalCompositeOperation="destination-over",c.fillRect(0,0,width(),height()),c.fillStyle=settings.color,c.globalCompositeOperation=settings.composite;break;case"current color":c.fillStyle=settings.bg,c.globalCompositeOperation="destination-over",c.fillRect(0,0,width(),height()),c.globalCompositeOperation=settings.composite}var b=$c[0].toDataURL();if("sketchy project"==save.type){var d,e=JSON.parse(localStorage.getItem("projects"));e&&e.some(function(a,b){return a.name==save["file name"]?(d=b,!0):!1})?confirm("A sketch with this name already exists. Do you want to overwrite "+save["file name"]+"?")&&(console.log(d),e[d]={name:save["file name"],data:b,points:window.points,settings:settings},localStorage.setItem("projects",JSON.stringify(e))):(e?e.push({name:save["file name"],data:b,points:window.points,settings:settings}):e=[{name:save["file name"],data:b,points:window.points,settings:settings}],localStorage.setItem("projects",JSON.stringify(e)))}else{var f=navigator.getDeviceStorage("pictures"),g=dataToBlob(b),h=f.addNamed(g,save["file name"]+".png");h.onsuccess=function(){alert("Your Sketch was saved successfuly: "+this.result)},h.onerror=function(){alert("Something bad happened trying to save your sketch "+save["file name"]+"\n Possible reasons:\n Duplicate Name \n Not enough permission")}}c.putImageData(a,0,0)},window.load=function(){var a=JSON.parse(localStorage.getItem("projects")).filter(function(a){return a.name==load.file})[0],b=document.createElement("img");b.src=a.data,b.onload=function(){c.clearRect(0,0,width(),height()),c.drawImage(b,0,0),window.points=a.points,window.points.history=[{data:c.createImageData($c.width(),$c.height()),points:[]},{data:c.getImageData(0,0,width(),height()),points:a.points}],$c.first().css("background",a.settings.bg),window.settings.bg=a.settings.bg}}});
\ No newline at end of file
diff --git a/out/js/events.js b/out/js/events.js
new file mode 100644
index 0000000..8d6dc86
--- /dev/null
+++ b/out/js/events.js
@@ -0,0 +1 @@
+"use strict";$(document).ready(function(){$(".menu").on("click tap",function(){$("#menu").toggleClass("pulled")}),$(".save").on("click tap",function(){$("#save").removeClass("hidden")}),$(".load").on("click tap",function(){$("#load").removeClass("hidden"),$("#load li, #load p").remove();var a=JSON.parse(localStorage.getItem("projects"));if(!a||a.length<1)return void $("#load ol").append($("No sketch found.
"));for(var c=0,d=a.length;d>c;c++)$("#load ol").append($(""));b.find("li").off("click").on("click tap",function(){$(this).parent().find("li[aria-selected]").removeAttr("aria-selected"),$(this).attr("aria-selected","true")}),$("#pro").on("click tap",function(){$("#save ol:nth-of-type(2) li").each(function(){"Current Color"!==$(this).find("span").html()?($(this).addClass("hidden"),$(this).removeAttr("aria-selected")):$(this).attr("aria-selected","true")})}),$("#exp").on("click tap",function(){$("#save ol:nth-of-type(2)").removeClass("hidden")})}),$("#pro").on("click tap",function(){$("#save ol:nth-of-type(2) li").each(function(){"Current Color"!==$(this).find("span").html()?($(this).addClass("hidden"),$(this).removeAttr("aria-selected")):$(this).attr("aria-selected","true")})}),$("#exp").on("click tap",function(){$("#save ol:nth-of-type(2) li").removeClass("hidden")}),$c.last().on("mousedown touchstart",function(a){a.preventDefault(),a.changedTouches&&(a=a.changedTouches[0]);var b=relative(a.pageX,a.pageY);startPoint(b.x,b.y),window.active=!0}).on("mousemove touchmove",function(a){if(a.preventDefault(),a.changedTouches&&(a=a.changedTouches[0]),window.active&&"line"!=settings.type){var b=relative(a.pageX,a.pageY);drawPoint(b.x,b.y)}}).on("mouseup touchend",function(a){if(a.preventDefault(),window.active=!1,"eraser"!=settings.type){if(window.points.history.last