Android port using PhoneGap
20
Android/config.xml
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<widget id='com.mdibaiee.sketchy' version='1.2.1'>
|
||||||
|
|
||||||
|
<name>Sketchy</name>
|
||||||
|
<description>
|
||||||
|
Free full-featured Sketch app
|
||||||
|
</description>
|
||||||
|
<author email='mdibaiee@aol.com' href='http://dibaiee.ir'>
|
||||||
|
Mahdi Dibaiee
|
||||||
|
</author>
|
||||||
|
<content src='index.html'/>
|
||||||
|
<access origin='*'/>
|
||||||
|
|
||||||
|
<preference name='KeepRunning' value='false'/>
|
||||||
|
<preference name='SplashScreen' value='sketchy'/>
|
||||||
|
<preference name='SetFullScreen' value='true'/>
|
||||||
|
<preference name='FullScreen' value='true'/>
|
||||||
|
<preference name='DisallowOverscroll' value='true'/>
|
||||||
|
</widget>
|
||||||
|
|
||||||
|
|
275
Android/index.html
Normal file
@ -0,0 +1,275 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>Sketchy</title>
|
||||||
|
<meta charset='UTF-8'>
|
||||||
|
<link rel='stylesheet' href='css/main.css'>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<header>
|
||||||
|
<button class='menu'></button>
|
||||||
|
<span class='separator long left menu'></span>
|
||||||
|
<p id='title'>Sketchy</p>
|
||||||
|
<button class='save'></button>
|
||||||
|
<span class='separator small right'></span>
|
||||||
|
<button class='load'></button>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<div id='container'>
|
||||||
|
<canvas></canvas>
|
||||||
|
<canvas></canvas>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id='menu'>
|
||||||
|
<div class='options'>
|
||||||
|
<p class='icon-settings'>Settings</p>
|
||||||
|
<div class='general'>
|
||||||
|
<button id='settype'>Brush Type<span>Sketch</span></button>
|
||||||
|
<button id='setcolor'>Color<span>#000000</span></button>
|
||||||
|
<button id='setbg'>Background<span>#ffffff</span></button>
|
||||||
|
<p id='lineWidth'>Line Width <span>2</span></p>
|
||||||
|
<div role="slider" class='lineWidth'>
|
||||||
|
<div>
|
||||||
|
<progress value="2" min="1" max="100"></progress>
|
||||||
|
<button style='left: 2%'>handler</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<br />
|
||||||
|
<hr>
|
||||||
|
<div class='sketch'>
|
||||||
|
<p class='icon-settings'>Sketch</p>
|
||||||
|
<p id='connectTelorance'>Telorance<span>40</span></p>
|
||||||
|
<div role="slider" class='connectTelorance'>
|
||||||
|
<div>
|
||||||
|
<progress value="40" min="1" max="100"></progress>
|
||||||
|
<button style='left: 40%'>handler</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class='fur hidden'>
|
||||||
|
<p class='icon-settings'>Fur</p>
|
||||||
|
<p id='connectTelorance'>Telorance<span>40</span></p>
|
||||||
|
<div role="slider" class='connectTelorance'>
|
||||||
|
<div>
|
||||||
|
<progress value="40" min="10" max="100"></progress>
|
||||||
|
<button style='left: 40%'>handler</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p id='furLength'>Fur Length<span>50</span></p>
|
||||||
|
<div role="slider" class='furLength'>
|
||||||
|
<div>
|
||||||
|
<progress value="50" min="1" max="100"></progress>
|
||||||
|
<button style='left: 50%'>handler</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class='line hidden'>
|
||||||
|
<button id='setlineJoin'>Line Join<span>Round</span></button>
|
||||||
|
<button id='setlineCap'>Line Cap<span>Round</span></button>
|
||||||
|
|
||||||
|
<p class='fill'>Fill<span>No</span></p>
|
||||||
|
<p class='stroke'>Stroke<span>Yes</span></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class='shape hidden'>
|
||||||
|
<p class='icon-settings'>Shape</p>
|
||||||
|
<button id='setshape'>Type<span>Circle</span></button>
|
||||||
|
<p class='fill'>Fill<span>No</span></p>
|
||||||
|
<p class='stroke'>Stroke<span>Yes</span></p>
|
||||||
|
<div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class='bottom'>
|
||||||
|
<button id='clear' class='icon-clear'>Clear</button>
|
||||||
|
<button id='undo' class='icon-undo'>Undo</button>
|
||||||
|
<button id='redo' class='icon-redo'>Redo</button>
|
||||||
|
<hr>
|
||||||
|
<button id='about'>About</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<form role='dialog' data-type='value-selector' id='type' class='hidden single'>
|
||||||
|
<section class='scrollable'>
|
||||||
|
<h1>Brush Type</h1>
|
||||||
|
<ol role='listbox'>
|
||||||
|
<li aria-selected='true' data-target='sketch'><label><span>Sketch</span></label></li>
|
||||||
|
<li data-target='fur'><label><span>Fur</span></label></li>
|
||||||
|
<li data-target='pencil'><label><span>Pencil</span></label></li>
|
||||||
|
<li data-target='line'><label><span>Line</span></label></li>
|
||||||
|
<li data-target='shape'><label><span>Shape</span></label></li>
|
||||||
|
<!--<li><label><span>Eraser</span></label></li>-->
|
||||||
|
</ol>
|
||||||
|
</section>
|
||||||
|
<menu>
|
||||||
|
<button class='affirmative full'>Cancel</button>
|
||||||
|
</menu>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<form role='dialog' data-type='value-selector' id='lineJoin' class='hidden single'>
|
||||||
|
<section class='scrollable'>
|
||||||
|
<h1>Line Join</h1>
|
||||||
|
<ol role='listbox'>
|
||||||
|
<li aria-selected='true'><label><span>Round</span></label></li>
|
||||||
|
<li><label><span>Bevel</span></label></li>
|
||||||
|
<li><label><span>Miter</span></label></li>
|
||||||
|
</ol>
|
||||||
|
</section>
|
||||||
|
<menu>
|
||||||
|
<button class='affirmative full'>Cancel</button>
|
||||||
|
</menu>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<form role='dialog' data-type='value-selector' id='shape' class='hidden single'>
|
||||||
|
<section class='scrollable'>
|
||||||
|
<h1>Shape Type</h1>
|
||||||
|
<ol role='listbox'>
|
||||||
|
<li aria-selected='true' data-target='shape'><label><span>Circle</span></label></li>
|
||||||
|
<li data-target='shape'><label><span>Rectangle</span></label></li>
|
||||||
|
<li data-target='shape'><label><span>Square</span></label></li>
|
||||||
|
<li data-target='shape'><label><span>Triangle</span></label></li>
|
||||||
|
</ol>
|
||||||
|
<menu>
|
||||||
|
<button class='affirmative full'>Cancel</button>
|
||||||
|
</menu>
|
||||||
|
</section>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
|
||||||
|
<form role='dialog' data-type='value-selector' id='lineCap' class='hidden single'>
|
||||||
|
<section class='scrollable'>
|
||||||
|
<h1>Line Cap</h1>
|
||||||
|
<ol role='listbox'>
|
||||||
|
<li aria-selected='true'><label><span>Round</span></label></li>
|
||||||
|
<li><label><span>Square</span></label></li>
|
||||||
|
<li><label><span>Butt</span></label></li>
|
||||||
|
</ol>
|
||||||
|
</section>
|
||||||
|
<menu>
|
||||||
|
<button class='affirmative full'>Cancel</button>
|
||||||
|
</menu>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<form role='dialog' data-type='value-selector' id='save' class='hidden confirm'>
|
||||||
|
<section class='scrollable'>
|
||||||
|
<h1>Save</h1>
|
||||||
|
<h1>Type</h1>
|
||||||
|
<ol role='listbox'>
|
||||||
|
<li id='exp' aria-selected='true'><label><span>Export to Image</span></label></li>
|
||||||
|
<li id='pro'><label><span>Sketchy Project</span></label></li>
|
||||||
|
</ol>
|
||||||
|
<h1>Background</h1>
|
||||||
|
<ol role='listbox'>
|
||||||
|
<li aria-selected='true'><label><span>White</span></label></li>
|
||||||
|
<li><label><span>Current Color</span></label></li>
|
||||||
|
<li><label><span>Transparent</span></label></li>
|
||||||
|
</ol>
|
||||||
|
<h1>File Name</h1>
|
||||||
|
<ol role='listbox'>
|
||||||
|
<li aria-selected='true' data-input><label><span contenteditable>My Sketch</span></label></li>
|
||||||
|
</ol>
|
||||||
|
<br>
|
||||||
|
<span class='special'>Note: You must disable pop-up blocker to save your sketch.</span>
|
||||||
|
</section>
|
||||||
|
<menu>
|
||||||
|
<button class='affirmative' type='button'>Cancel</button>
|
||||||
|
<button class='affirmative' type='button'>Save</button>
|
||||||
|
</menu>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<form role='dialog' data-type='value-selector' id='load' class='hidden confirm'>
|
||||||
|
<section class='scrollable'>
|
||||||
|
<h1>Load</h1>
|
||||||
|
<h1 class='hidden'>file</h1>
|
||||||
|
<ol role='listbox'>
|
||||||
|
</ol>
|
||||||
|
</section>
|
||||||
|
<menu>
|
||||||
|
<button class='affirmative' type='button'>Cancel</button>
|
||||||
|
<button class='affirmative' type='button'>Load</button>
|
||||||
|
</menu>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- COLOR PICKER -->
|
||||||
|
<div class='picker overlay hidden'>
|
||||||
|
<div class='color-picker'>
|
||||||
|
<input value='Hex' class='format' type='hidden' selected>
|
||||||
|
<input class='color' val='#000000'>
|
||||||
|
<div class="spectrum">
|
||||||
|
<div>
|
||||||
|
<div class="pin"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<input class="luminosity" type="range" min="0" max="100" />
|
||||||
|
</div>
|
||||||
|
<button class='close'>x</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class='about overlay hidden'>
|
||||||
|
<p>Sketchy</p>
|
||||||
|
<span>Sketchy is a free sketch / paint application for Firefox.<br />Current version: 1.2</span>
|
||||||
|
<p>Developer</p>
|
||||||
|
<span>Sketchy was found by Mahdi Dibaiee. More info: <a href='http://about.me/mdibaiee'>About.me</a>
|
||||||
|
<br><br>
|
||||||
|
Contact: <br>
|
||||||
|
<a href='https://twitter.com/mdibaiee'>Twitter</a> •
|
||||||
|
<a href='mailto:mdibaiee@aol.com'>Email</a>
|
||||||
|
<br><br>
|
||||||
|
<a href='http://mdibaiee.github.io/Sketchy/changelog.html'>Changelog</a>
|
||||||
|
</span>
|
||||||
|
<button class='close'>x</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class='tour overlay hidden'>
|
||||||
|
<p>Tips</p>
|
||||||
|
<span>Hey! Let me give you some tips to help you along the way,</span><br /><br />
|
||||||
|
<span>To finish a line, hold your finger for 1 second on mobile, or double click on desktop.</span><br />
|
||||||
|
<span>Line join, fill / stroke are applied when the line is finished.</span><br /><br />
|
||||||
|
<span>If you found something missing, please get in touch with us.</span>
|
||||||
|
<button class='button'>Gotcha!</button>
|
||||||
|
<button class='close'>x</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class='vote overlay hidden'>
|
||||||
|
<p>King of Firefox OS Apps</p>
|
||||||
|
<span>Hey! FirefoxOSGuide.com has started a competition, judging the best Firefox OS application by users' vote.</span><br /><span>Would you consider taking a few minutes to vote for us, please?</span><br /><br />
|
||||||
|
<span>We're working to add new features to Sketchy like sharing and maybe some 'hosted' addons.</span><br /><br />
|
||||||
|
<span>If you would like to see something in Sketchy's new version, please get in touch with us.</span>
|
||||||
|
<br /><br />
|
||||||
|
<a href='http://bit.ly/1irTueS'>What's your Favorite Firefox OS application?</a>
|
||||||
|
<br />
|
||||||
|
<a href='http://bit.ly/1hosWbM'>Original post on Firefox OS Guide</a>
|
||||||
|
<button class='button'>OK!</button>
|
||||||
|
<button class='close'>x</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- PRELOADER -->
|
||||||
|
<div class='hidden'>
|
||||||
|
<img src='css/value_selector/images/ui/pattern.png'>
|
||||||
|
<img src='css/value_selector/images/ui/gradient.png'>
|
||||||
|
<img src='css/value_selector/images/ui/shadow.png'>
|
||||||
|
<img src='css/value_selector/images/ui/shadow-invert.png'>
|
||||||
|
<img src='css/value_selector/images/icons/checked.png'>
|
||||||
|
<img src='css/value_selector/images/ui/default.png'>
|
||||||
|
<img src='css/value_selector/images/ui/affirmative.png'>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script src='js/libs/zepto.min.js'></script>
|
||||||
|
<script src='js/libs/touch.js'></script>
|
||||||
|
<script src='js/libs/color-picker-touch.js'></script>
|
||||||
|
<script src='js/functions.js'></script>
|
||||||
|
<script src='js/shared.js'></script>
|
||||||
|
<script src='js/events.js'></script>
|
||||||
|
<script src='js/diff.js'></script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
123
Android/js/diff.js
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
$(document).ready(function() {
|
||||||
|
|
||||||
|
$('*').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 sd = window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fs) {
|
||||||
|
var fdata = dataToBlob(data);
|
||||||
|
var req = fs.root.getFile(save['file name'] + '.png', {create: true}, function(file) {
|
||||||
|
file.createWriter(function(writer) {
|
||||||
|
writer.write(fdata);
|
||||||
|
alert('Your Sketch was saved successfuly: ' + this.result);
|
||||||
|
}, function() {
|
||||||
|
alert('Something bad happened trying to save your sketch ' + save['file name'] + '\n Possible reasons:\n Duplicate Name \n Not enough permission')
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}, function(error) {
|
||||||
|
alert('Couldn\'t access filesystem\n' + error.message);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
BIN
Android/res/drawable/sketchy.png
Normal file
After Width: | Height: | Size: 3.7 KiB |
20
Gruntfile.js
@ -28,6 +28,13 @@ module.exports = function(grunt) {
|
|||||||
dest: 'build/mobile/js',
|
dest: 'build/mobile/js',
|
||||||
filter: 'isFile'
|
filter: 'isFile'
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
expand: true,
|
||||||
|
cwd: 'Android/js/',
|
||||||
|
src: '*',
|
||||||
|
dest: 'build/android/js',
|
||||||
|
filter: 'isFile'
|
||||||
|
},
|
||||||
{
|
{
|
||||||
expand: true,
|
expand: true,
|
||||||
cwd: 'Web/js/',
|
cwd: 'Web/js/',
|
||||||
@ -42,6 +49,7 @@ module.exports = function(grunt) {
|
|||||||
production: {
|
production: {
|
||||||
files: {
|
files: {
|
||||||
'build/mobile/css/main.css': 'Shared/css/main.less',
|
'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'
|
'build/web/css/main.css': 'Shared/css/main.less'
|
||||||
},
|
},
|
||||||
compress: true
|
compress: true
|
||||||
@ -68,6 +76,12 @@ module.exports = function(grunt) {
|
|||||||
src: ['index.html', 'manifest.webapp'],
|
src: ['index.html', 'manifest.webapp'],
|
||||||
dest: 'build/mobile'
|
dest: 'build/mobile'
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
expand: true,
|
||||||
|
cwd: 'Android',
|
||||||
|
src: ['index.html', 'config.xml', 'res'],
|
||||||
|
dest: 'build/android'
|
||||||
|
},
|
||||||
{
|
{
|
||||||
expand: true,
|
expand: true,
|
||||||
cwd: 'Web',
|
cwd: 'Web',
|
||||||
@ -84,6 +98,12 @@ module.exports = function(grunt) {
|
|||||||
src: '*/**',
|
src: '*/**',
|
||||||
dest: 'build/mobile/css'
|
dest: 'build/mobile/css'
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
expand: true,
|
||||||
|
cwd: 'Shared/css',
|
||||||
|
src: '*/**',
|
||||||
|
dest: 'build/android/css'
|
||||||
|
},
|
||||||
{
|
{
|
||||||
expand: true,
|
expand: true,
|
||||||
cwd: 'Shared/css',
|
cwd: 'Shared/css',
|
||||||
|
13
Mobile/index.html
Executable file → Normal file
@ -238,6 +238,19 @@
|
|||||||
<button class='close'>x</button>
|
<button class='close'>x</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class='vote overlay hidden'>
|
||||||
|
<p>King of Firefox OS Apps</p>
|
||||||
|
<span>Hey! FirefoxOSGuide.com has started a competition, judging the best Firefox OS application by users' vote.</span><br /><span>Would you consider taking a few minutes to vote for us, please?</span><br /><br />
|
||||||
|
<span>We're working to add new features to Sketchy like sharing and maybe some 'hosted' addons.</span><br /><br />
|
||||||
|
<span>If you would like to see something in Sketchy's new version, please get in touch with us.</span>
|
||||||
|
<br /><br />
|
||||||
|
<a href='http://bit.ly/1irTueS'>What's your Favorite Firefox OS application?</a>
|
||||||
|
<br />
|
||||||
|
<a href='http://bit.ly/1hosWbM'>Original post on Firefox OS Guide</a>
|
||||||
|
<button class='button'>OK!</button>
|
||||||
|
<button class='close'>x</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- PRELOADER -->
|
<!-- PRELOADER -->
|
||||||
<div class='hidden'>
|
<div class='hidden'>
|
||||||
<img src='css/value_selector/images/ui/pattern.png'>
|
<img src='css/value_selector/images/ui/pattern.png'>
|
||||||
|
@ -111,9 +111,9 @@ $(document).ready(function() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if( localStorage.getItem('sawTips') != settings.version ) {
|
if( !localStorage.getItem('sawVote') ) {
|
||||||
$('.tour').removeClass('hidden');
|
$('.vote').removeClass('hidden');
|
||||||
localStorage.setItem('sawTips', settings.version);
|
localStorage.setItem('sawVote', true);
|
||||||
}
|
}
|
||||||
|
|
||||||
})
|
})
|
||||||
|
6
Mobile/manifest.webapp
Executable file → Normal file
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "Sketchy",
|
"name": "Sketchy",
|
||||||
"description": "Free Sketch/Paint app",
|
"description": "Free full-featured Sketch app",
|
||||||
"version": "1.2",
|
"version": "1.2.1",
|
||||||
"fullscreen": "true",
|
"fullscreen": "true",
|
||||||
"type": "privileged",
|
"type": "privileged",
|
||||||
"launch_path": "/index.html",
|
"launch_path": "/index.html",
|
||||||
@ -18,7 +18,7 @@
|
|||||||
},
|
},
|
||||||
"developer": {
|
"developer": {
|
||||||
"name": "Mahdi Dibaiee",
|
"name": "Mahdi Dibaiee",
|
||||||
"url": "https://twitter.com/mdibaiee"
|
"url": "http://dibaiee.ir/"
|
||||||
},
|
},
|
||||||
"locales": {
|
"locales": {
|
||||||
"en": {
|
"en": {
|
||||||
|
0
Shared/css/color-picker.less
Executable file → Normal file
0
Shared/css/fonts.less
Executable file → Normal file
0
Shared/css/fonts/MozTT-Bold.ttf
Executable file → Normal file
0
Shared/css/fonts/MozTT-Light.ttf
Executable file → Normal file
0
Shared/css/fonts/MozTT-Medium.ttf
Executable file → Normal file
0
Shared/css/fonts/MozTT-Regular.ttf
Executable file → Normal file
0
Shared/css/imgs/bg_overlay_pressed_1.png
Executable file → Normal file
Before Width: | Height: | Size: 93 B After Width: | Height: | Size: 93 B |
0
Shared/css/imgs/bg_overlay_pressed_2.png
Executable file → Normal file
Before Width: | Height: | Size: 94 B After Width: | Height: | Size: 94 B |
0
Shared/css/imgs/clear.png
Executable file → Normal file
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
0
Shared/css/imgs/div_line_lg_black.png
Executable file → Normal file
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.0 KiB |
0
Shared/css/imgs/div_line_sm_black.png
Executable file → Normal file
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.0 KiB |
0
Shared/css/imgs/download.png
Executable file → Normal file
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
0
Shared/css/imgs/header_bg_black.png
Executable file → Normal file
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
0
Shared/css/imgs/load.png
Executable file → Normal file
Before Width: | Height: | Size: 413 B After Width: | Height: | Size: 413 B |
0
Shared/css/imgs/menu.png
Executable file → Normal file
Before Width: | Height: | Size: 182 B After Width: | Height: | Size: 182 B |
0
Shared/css/imgs/redo.png
Executable file → Normal file
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
0
Shared/css/imgs/settings.png
Executable file → Normal file
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
0
Shared/css/imgs/undo.png
Executable file → Normal file
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
0
Shared/css/main.css
Executable file → Normal file
10
Shared/css/main.less
Executable file → Normal file
@ -87,7 +87,7 @@ button {
|
|||||||
left: 97%;
|
left: 97%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.picker, .about, .tour {
|
.picker, .about, .tour, .vote {
|
||||||
font-family: 'MozTT-Light';
|
font-family: 'MozTT-Light';
|
||||||
width: 30rem;
|
width: 30rem;
|
||||||
height: 24.6rem;
|
height: 24.6rem;
|
||||||
@ -102,7 +102,7 @@ button {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.about, .tour {
|
.about, .tour, .vote {
|
||||||
background: #262626;
|
background: #262626;
|
||||||
padding: 1rem 2rem;;
|
padding: 1rem 2rem;;
|
||||||
height: 23rem;
|
height: 23rem;
|
||||||
@ -130,7 +130,7 @@ button {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.tour {
|
.tour, .vote {
|
||||||
.button {
|
.button {
|
||||||
width: 30rem;
|
width: 30rem;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
@ -139,6 +139,10 @@ button {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.vote {
|
||||||
|
height: 30rem;
|
||||||
|
}
|
||||||
|
|
||||||
header {
|
header {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 5.3rem;
|
height: 5.3rem;
|
||||||
|
0
Shared/css/seekbars.less
Executable file → Normal file
0
Shared/css/seekbars/images/ui/handler.png
Executable file → Normal file
Before Width: | Height: | Size: 636 B After Width: | Height: | Size: 636 B |
0
Shared/css/seekbars/images/ui/handler@1.5x.png
Executable file → Normal file
Before Width: | Height: | Size: 960 B After Width: | Height: | Size: 960 B |
0
Shared/css/seekbars/images/ui/handler@2x.png
Executable file → Normal file
Before Width: | Height: | Size: 938 B After Width: | Height: | Size: 938 B |
0
Shared/css/seekbars/seekbars.css
Executable file → Normal file
0
Shared/css/switches.less
Executable file → Normal file
0
Shared/css/switches/images/check/danger.png
Executable file → Normal file
Before Width: | Height: | Size: 583 B After Width: | Height: | Size: 583 B |
0
Shared/css/switches/images/check/danger@1.5x.png
Executable file → Normal file
Before Width: | Height: | Size: 946 B After Width: | Height: | Size: 946 B |
0
Shared/css/switches/images/check/danger@2x.png
Executable file → Normal file
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
0
Shared/css/switches/images/check/default.png
Executable file → Normal file
Before Width: | Height: | Size: 583 B After Width: | Height: | Size: 583 B |
0
Shared/css/switches/images/check/default@1.5x.png
Executable file → Normal file
Before Width: | Height: | Size: 946 B After Width: | Height: | Size: 946 B |
0
Shared/css/switches/images/check/default@2x.png
Executable file → Normal file
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
0
Shared/css/switches/images/radio/danger.png
Executable file → Normal file
Before Width: | Height: | Size: 578 B After Width: | Height: | Size: 578 B |
0
Shared/css/switches/images/radio/danger@1.5x.png
Executable file → Normal file
Before Width: | Height: | Size: 893 B After Width: | Height: | Size: 893 B |
0
Shared/css/switches/images/radio/danger@2x.png
Executable file → Normal file
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
0
Shared/css/switches/images/radio/default.png
Executable file → Normal file
Before Width: | Height: | Size: 575 B After Width: | Height: | Size: 575 B |
0
Shared/css/switches/images/radio/default@1.5x.png
Executable file → Normal file
Before Width: | Height: | Size: 889 B After Width: | Height: | Size: 889 B |
0
Shared/css/switches/images/radio/default@2x.png
Executable file → Normal file
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
0
Shared/css/switches/images/switch/background.png
Executable file → Normal file
Before Width: | Height: | Size: 755 B After Width: | Height: | Size: 755 B |
0
Shared/css/switches/images/switch/background@1.5x.png
Executable file → Normal file
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.0 KiB |
0
Shared/css/switches/images/switch/background_off.png
Executable file → Normal file
Before Width: | Height: | Size: 475 B After Width: | Height: | Size: 475 B |
0
Shared/css/switches/images/switch/background_off@1.5x.png
Executable file → Normal file
Before Width: | Height: | Size: 616 B After Width: | Height: | Size: 616 B |
0
Shared/css/value_selector.less
Executable file → Normal file
0
Shared/css/value_selector/images/icons/checked.png
Executable file → Normal file
Before Width: | Height: | Size: 177 B After Width: | Height: | Size: 177 B |
0
Shared/css/value_selector/images/icons/checked@1.5x.png
Executable file → Normal file
Before Width: | Height: | Size: 392 B After Width: | Height: | Size: 392 B |
0
Shared/css/value_selector/images/icons/checked@2x.png
Executable file → Normal file
Before Width: | Height: | Size: 601 B After Width: | Height: | Size: 601 B |
0
Shared/css/value_selector/images/ui/affirmative.png
Executable file → Normal file
Before Width: | Height: | Size: 101 B After Width: | Height: | Size: 101 B |
0
Shared/css/value_selector/images/ui/default.png
Executable file → Normal file
Before Width: | Height: | Size: 82 B After Width: | Height: | Size: 82 B |
0
Shared/css/value_selector/images/ui/gradient.png
Executable file → Normal file
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 3.4 KiB |
0
Shared/css/value_selector/images/ui/gradient@1.5x.png
Executable file → Normal file
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 7.7 KiB |
0
Shared/css/value_selector/images/ui/pattern.png
Executable file → Normal file
Before Width: | Height: | Size: 6.7 KiB After Width: | Height: | Size: 6.7 KiB |
0
Shared/css/value_selector/images/ui/shadow-invert.png
Executable file → Normal file
Before Width: | Height: | Size: 83 B After Width: | Height: | Size: 83 B |
0
Shared/css/value_selector/images/ui/shadow-invert@1.5x.png
Executable file → Normal file
Before Width: | Height: | Size: 154 B After Width: | Height: | Size: 154 B |
0
Shared/css/value_selector/images/ui/shadow-invert@2x.png
Executable file → Normal file
Before Width: | Height: | Size: 86 B After Width: | Height: | Size: 86 B |
0
Shared/css/value_selector/images/ui/shadow.png
Executable file → Normal file
Before Width: | Height: | Size: 82 B After Width: | Height: | Size: 82 B |
0
Shared/css/value_selector/images/ui/shadow@1.5x.png
Executable file → Normal file
Before Width: | Height: | Size: 154 B After Width: | Height: | Size: 154 B |
0
Shared/css/value_selector/images/ui/shadow@2x.png
Executable file → Normal file
Before Width: | Height: | Size: 87 B After Width: | Height: | Size: 87 B |
0
Shared/img/icons/MozillaFXOSIconTemplate1_overlay.png
Executable file → Normal file
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.3 KiB |
0
Shared/img/icons/icon120.png
Executable file → Normal file
Before Width: | Height: | Size: 8.0 KiB After Width: | Height: | Size: 8.0 KiB |
0
Shared/img/icons/icon128.png
Executable file → Normal file
Before Width: | Height: | Size: 8.9 KiB After Width: | Height: | Size: 8.9 KiB |
0
Shared/img/icons/icon16.png
Executable file → Normal file
Before Width: | Height: | Size: 738 B After Width: | Height: | Size: 738 B |
0
Shared/img/icons/icon2.png
Executable file → Normal file
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 7.2 KiB |
0
Shared/img/icons/icon2.svg
Executable file → Normal file
Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 6.6 KiB |
0
Shared/img/icons/icon32.png
Executable file → Normal file
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
0
Shared/img/icons/icon48.png
Executable file → Normal file
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB |
0
Shared/img/icons/icon60.png
Executable file → Normal file
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.7 KiB |
0
Shared/img/icons/icon64.png
Executable file → Normal file
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 4.0 KiB |
0
Shared/img/icons/icon90.png
Executable file → Normal file
Before Width: | Height: | Size: 6.0 KiB After Width: | Height: | Size: 6.0 KiB |
2
Shared/js/events.js
Executable file → Normal file
@ -240,7 +240,7 @@ $(document).ready(function() {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
$('.close, .tour button').on('click tap', function() {
|
$('.close, .tour button, .vote button').on('click tap', function() {
|
||||||
$(this).parent().addClass('hidden');
|
$(this).parent().addClass('hidden');
|
||||||
$('body').off('click tap');
|
$('body').off('click tap');
|
||||||
})
|
})
|
||||||
|
0
Shared/js/functions.js
Executable file → Normal file
0
Shared/js/libs/color-picker-touch.js
Executable file → Normal file
0
Shared/js/libs/color-picker.js
Executable file → Normal file
0
Shared/js/libs/mobilebrowsers.js
Executable file → Normal file
0
Shared/js/libs/stack.js
Executable file → Normal file
0
Shared/js/libs/touch.js
Executable file → Normal file
0
Shared/js/libs/yepnope.min.js
vendored
Executable file → Normal file
0
Shared/js/libs/zepto.min.js
vendored
Executable file → Normal file
0
Web/cache.appcache
Executable file → Normal file
0
Web/index.html
Executable file → Normal file
0
Web/js/main.js
Executable file → Normal file
0
Web/manifest.webapp
Executable file → Normal file
9
build/android/.cordova/config.json
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"lib": {
|
||||||
|
"www": {
|
||||||
|
"id": "com.mdibaiee.sketchy",
|
||||||
|
"version": "1.2.0",
|
||||||
|
"uri": "https://mdibaiee.github.io/Sketchy/build/web/"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
BIN
build/android/android.zip
Normal file
20
build/android/config.xml
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<widget id='com.mdibaiee.sketchy' version='1.2.1'>
|
||||||
|
|
||||||
|
<name>Sketchy</name>
|
||||||
|
<description>
|
||||||
|
Free full-featured Sketch app
|
||||||
|
</description>
|
||||||
|
<author email='mdibaiee@aol.com' href='http://dibaiee.ir'>
|
||||||
|
Mahdi Dibaiee
|
||||||
|
</author>
|
||||||
|
<content src='index.html'/>
|
||||||
|
<access origin='*'/>
|
||||||
|
|
||||||
|
<preference name='KeepRunning' value='false'/>
|
||||||
|
<preference name='SplashScreen' value='sketchy'/>
|
||||||
|
<preference name='SetFullScreen' value='true'/>
|
||||||
|
<preference name='FullScreen' value='true'/>
|
||||||
|
<preference name='DisallowOverscroll' value='true'/>
|
||||||
|
</widget>
|
||||||
|
|
||||||
|
|
BIN
build/android/css/fonts/MozTT-Bold.ttf
Normal file
BIN
build/android/css/fonts/MozTT-Light.ttf
Normal file
BIN
build/android/css/fonts/MozTT-Medium.ttf
Normal file
BIN
build/android/css/fonts/MozTT-Regular.ttf
Normal file
BIN
build/android/css/imgs/bg_overlay_pressed_1.png
Normal file
After Width: | Height: | Size: 93 B |