mirror of
https://github.com/piskelapp/piskel.git
synced 2023-08-10 21:12:52 +03:00
Merge pull request #125 from juliandescottes/propose-use-iframe-cheap-templates
Propose use iframe cheap templates
This commit is contained in:
40
Gruntfile.js
40
Gruntfile.js
@@ -11,6 +11,25 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
module.exports = function(grunt) {
|
module.exports = function(grunt) {
|
||||||
|
|
||||||
|
var piskelScripts = require('./piskel-script-list.js').scripts;
|
||||||
|
var getGhostConfig = function (delay) {
|
||||||
|
return {
|
||||||
|
filesSrc : ['tests/integration/casperjs/*_test.js'],
|
||||||
|
options : {
|
||||||
|
args : {
|
||||||
|
baseUrl : 'http://localhost:' + '<%= connect.www.options.port %>/',
|
||||||
|
mode : '?debug',
|
||||||
|
delay : delay
|
||||||
|
},
|
||||||
|
direct : false,
|
||||||
|
logLevel : 'info',
|
||||||
|
printCommand : false,
|
||||||
|
printFilePaths : true
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
grunt.initConfig({
|
grunt.initConfig({
|
||||||
jshint: {
|
jshint: {
|
||||||
/*options: {
|
/*options: {
|
||||||
@@ -38,30 +57,20 @@ module.exports = function(grunt) {
|
|||||||
www : {
|
www : {
|
||||||
options : {
|
options : {
|
||||||
base : '.',
|
base : '.',
|
||||||
port : 4545
|
port : 7357
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
ghost : {
|
ghost : {
|
||||||
dist : {
|
default : getGhostConfig(3000),
|
||||||
filesSrc : ['tests/integration/casperjs/*_test.js'],
|
local : getGhostConfig(50)
|
||||||
options : {
|
|
||||||
args : {
|
|
||||||
baseUrl : 'http://localhost:' + '<%= connect.www.options.port %>/'
|
|
||||||
},
|
|
||||||
direct : false,
|
|
||||||
logLevel : 'debug',
|
|
||||||
printCommand : false,
|
|
||||||
printFilePaths : true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
concat : {
|
concat : {
|
||||||
options : {
|
options : {
|
||||||
separator : ';',
|
separator : ';',
|
||||||
},
|
},
|
||||||
dist : {
|
dist : {
|
||||||
src : require('./script-load-list.js').scripts,
|
src : piskelScripts,
|
||||||
dest : 'build/piskel-packaged.js',
|
dest : 'build/piskel-packaged.js',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@@ -93,7 +102,8 @@ module.exports = function(grunt) {
|
|||||||
grunt.loadNpmTasks('grunt-leading-indent');
|
grunt.loadNpmTasks('grunt-leading-indent');
|
||||||
|
|
||||||
grunt.registerTask('lint', ['leadingIndent:jsFiles', 'leadingIndent:cssFiles', 'jshint']);
|
grunt.registerTask('lint', ['leadingIndent:jsFiles', 'leadingIndent:cssFiles', 'jshint']);
|
||||||
grunt.registerTask('test', ['leadingIndent:jsFiles', 'leadingIndent:cssFiles', 'jshint', 'connect', 'ghost']);
|
grunt.registerTask('test', ['leadingIndent:jsFiles', 'leadingIndent:cssFiles', 'jshint', 'connect', 'ghost:default']);
|
||||||
|
grunt.registerTask('precommit', ['leadingIndent:jsFiles', 'leadingIndent:cssFiles', 'jshint', 'connect', 'ghost:local']);
|
||||||
|
|
||||||
grunt.registerTask('default', ['jshint', 'concat', 'uglify']);
|
grunt.registerTask('default', ['jshint', 'concat', 'uglify']);
|
||||||
};
|
};
|
||||||
|
7
cheap-partials.js
Normal file
7
cheap-partials.js
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
// SUPER CHEAP TEMPLATES !
|
||||||
|
window._ctl = function (event) {
|
||||||
|
var iframe=event.target || event.srcElement, div=document.createElement("div");
|
||||||
|
div.innerHTML = iframe.contentWindow.document.body.innerHTML;
|
||||||
|
if (div.children.length == 1) div = div.children[0];
|
||||||
|
iframe.parentNode.replaceChild(div, iframe);
|
||||||
|
};
|
120
index.html
120
index.html
@@ -3,7 +3,6 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||||
|
|
||||||
<title>Piskel</title>
|
<title>Piskel</title>
|
||||||
<meta name="description" content="">
|
<meta name="description" content="">
|
||||||
<meta name="author" content="Julian Descottes">
|
<meta name="author" content="Julian Descottes">
|
||||||
@@ -16,85 +15,24 @@
|
|||||||
<link rel="stylesheet" type="text/css" href="css/preview-film-section.css">
|
<link rel="stylesheet" type="text/css" href="css/preview-film-section.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
<script src="cheap-partials.js" type="text/javascript"></script>
|
||||||
<div class="piskel-name-container">
|
<div class="piskel-name-container">
|
||||||
<input readonly id="piskel-name" type="text" value=""/>
|
<input readonly id="piskel-name" type="text" value=""/>
|
||||||
</div>
|
</div>
|
||||||
<div id="main-wrapper" class="main-wrapper">
|
<div id="main-wrapper" class="main-wrapper">
|
||||||
<div class="sticky-section left-sticky-section" id="tool-section">
|
<iframe src="templates/drawing-tools.html" class="_ctl" onload="_ctl(event)"></iframe>
|
||||||
<div class="sticky-section-wrap">
|
|
||||||
<div class="vertical-centerer">
|
|
||||||
<ul id="tools-container" class="tools-wrapper"></ul>
|
|
||||||
<div class="palette-wrapper">
|
|
||||||
<div class="tool-icon tool-color-picker">
|
|
||||||
<input id="color-picker" class="color {hash:true}" type="text" value="" />
|
|
||||||
<input id="secondary-color-picker" class="secondary-color-picker color {hash:true}" type="text" value="" />
|
|
||||||
</div>
|
|
||||||
<div class="tool-icon tool-palette">
|
|
||||||
<div id="palette" class="palette">
|
|
||||||
<span class="tool-icon palette-color transparent-color" data-color="TRANSPARENT" title="Transparent"></span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div id="application-action-section" class="sticky-section right-sticky-section">
|
<div id="application-action-section" class="sticky-section right-sticky-section">
|
||||||
<div class="sticky-section-wrap">
|
<div class="sticky-section-wrap">
|
||||||
<div class="vertical-centerer">
|
<iframe src="templates/options.html" class="_ctl" onload="_ctl(event)"></iframe>
|
||||||
<div id="settings" class="tool-icon gear-icon" title="Preferences" rel="tooltip" data-placement="left"></div>
|
<iframe src="templates/user-settings-drawer.html" class="cheap-template" onload="_ctl(event)"></iframe>
|
||||||
<a class="tool-icon gallery-icon" title="Visit gallery" href="http://juliandescottes.github.io/piskel-website/" rel="tooltip" data-placement="left" target="_blank"></a>
|
|
||||||
<div class="tool-icon save-icon" title="Save to gallery" onclick="pskl.app.storeSheet()" rel="tooltip" data-placement="left" ></div>
|
|
||||||
<div class="tool-icon upload-cloud-icon" title="Upload as an animated GIF" onclick="pskl.app.uploadAsAnimatedGIF()" rel="tooltip" data-placement="left">
|
|
||||||
<span class="label">GIF</span>
|
|
||||||
</div>
|
|
||||||
<div class="tool-icon upload-cloud-icon" title="Upload as a spritesheet PNG" onclick="pskl.app.uploadAsSpritesheetPNG()" rel="tooltip" data-placement="left">
|
|
||||||
<span class="label">PNG</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="drawer vertical-centerer">
|
|
||||||
<div class="drawer-content">
|
|
||||||
<div class="settings-section">
|
|
||||||
<div class="settings-title">
|
|
||||||
Canvas settings:
|
|
||||||
</div>
|
|
||||||
<div class="settings-item">
|
|
||||||
<label>Background:</label>
|
|
||||||
<div id="background-picker-wrapper" class="background-picker-wrapper">
|
|
||||||
<div class="background-picker light-picker-background" data-background-class="light-canvas-background"
|
|
||||||
rel="tooltip" data-placement="bottom" title="light / high contrast">
|
|
||||||
</div>
|
|
||||||
<div class="background-picker medium-picker-background" data-background-class="medium-canvas-background"
|
|
||||||
rel="tooltip" data-placement="bottom" title="medium / high contrast">
|
|
||||||
</div>
|
|
||||||
<div class="background-picker lowcont-medium-picker-background" data-background-class="lowcont-medium-canvas-background"
|
|
||||||
rel="tooltip" data-placement="bottom" title="medium / low contrast">
|
|
||||||
</div>
|
|
||||||
<div class="background-picker lowcont-dark-picker-background" data-background-class="lowcont-dark-canvas-background"
|
|
||||||
rel="tooltip" data-placement="bottom" title="dark / low contrast">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="settings-item">
|
|
||||||
<label for="show-grid">Show grid:</label> <input id="show-grid" type="checkbox"/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="column-wrapper" class="column-wrapper">
|
<div id="column-wrapper" class="column-wrapper">
|
||||||
<div class='column left-column'>
|
<div class='column left-column'>
|
||||||
|
|
||||||
<!-- List of frames: -->
|
<!-- List of frames: -->
|
||||||
<div id="preview-list-wrapper" class="preview-list-wrapper">
|
<iframe src="templates/frames-list.html" class="_ctl" onload="_ctl(event)"></iframe>
|
||||||
<div id="preview-list-scroller" class="preview-list-scroller">
|
|
||||||
<ul class="preview-list" id="preview-list"></ul>
|
|
||||||
</div>
|
|
||||||
<div class="top-overflow"></div>
|
|
||||||
<div class="bottom-overflow"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class='column main-column'>
|
<div class='column main-column'>
|
||||||
@@ -106,55 +44,11 @@
|
|||||||
|
|
||||||
<div class="column right-column">
|
<div class="column right-column">
|
||||||
<!-- Animation preview: -->
|
<!-- Animation preview: -->
|
||||||
<div class='preview-container'>
|
<iframe src="templates/preview.html" class="_ctl" onload="_ctl(event)"></iframe>
|
||||||
<div id='preview-canvas-container' class="canvas-container">
|
|
||||||
<div class="canvas-background"></div>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<span id="display-fps" class="display-fps">12 FPS</span>
|
|
||||||
<input id="preview-fps" class="range-fps" type="range" min="1" max="24" value="12"/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript" src="piskel-boot.js"></script>
|
||||||
(function () {
|
|
||||||
|
|
||||||
var loadScript = function (src, callback) {
|
|
||||||
var script = window.document.createElement('script');
|
|
||||||
script.setAttribute('src',src);
|
|
||||||
script.setAttribute('onload',callback);
|
|
||||||
window.document.body.appendChild(script);
|
|
||||||
};
|
|
||||||
|
|
||||||
if (window.location.href.indexOf("debug") != -1) {
|
|
||||||
window.exports = {};
|
|
||||||
var scriptIndex = 0;
|
|
||||||
window.loadNextScript = function () {
|
|
||||||
if (scriptIndex == exports.scripts.length) {
|
|
||||||
pskl.app.init();
|
|
||||||
// cleanup
|
|
||||||
delete window.exports;
|
|
||||||
delete window.loadDebugScripts;
|
|
||||||
delete window.done;
|
|
||||||
} else {
|
|
||||||
loadScript(exports.scripts[scriptIndex], "loadNextScript()");
|
|
||||||
scriptIndex ++;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
loadScript("script-load-list.js", "loadNextScript()");
|
|
||||||
} else {
|
|
||||||
var script;
|
|
||||||
if (window.location.href.indexOf("pack") != -1) {
|
|
||||||
script = "build/piskel-packaged.js";
|
|
||||||
} else {
|
|
||||||
script = "build/piskel-packaged-min.js";
|
|
||||||
}
|
|
||||||
loadScript(script, "pskl.app.init()");
|
|
||||||
}
|
|
||||||
})();
|
|
||||||
</script>
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
File diff suppressed because one or more lines are too long
42
piskel-boot.js
Normal file
42
piskel-boot.js
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
(function () {
|
||||||
|
|
||||||
|
var loadScript = function (src, callback) {
|
||||||
|
var script = window.document.createElement('script');
|
||||||
|
script.setAttribute('src',src);
|
||||||
|
script.setAttribute('onload',callback);
|
||||||
|
window.document.body.appendChild(script);
|
||||||
|
};
|
||||||
|
|
||||||
|
if (window.location.href.indexOf("debug") != -1) {
|
||||||
|
window.exports = {};
|
||||||
|
var scriptIndex = 0;
|
||||||
|
window.loadNextScript = function () {
|
||||||
|
if (scriptIndex == exports.scripts.length) {
|
||||||
|
pskl.app.init();
|
||||||
|
// cleanup
|
||||||
|
delete window.exports;
|
||||||
|
delete window.loadDebugScripts;
|
||||||
|
delete window.done;
|
||||||
|
} else {
|
||||||
|
loadScript(exports.scripts[scriptIndex], "loadNextScript()");
|
||||||
|
scriptIndex ++;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
loadScript("piskel-script-list.js", "loadNextScript()");
|
||||||
|
} else {
|
||||||
|
var script;
|
||||||
|
if (window.location.href.indexOf("pack") != -1) {
|
||||||
|
script = "build/piskel-packaged.js";
|
||||||
|
} else {
|
||||||
|
script = "build/piskel-packaged-min.js";
|
||||||
|
}
|
||||||
|
var loaderInterval = window.setInterval(function () {
|
||||||
|
if (document.querySelectorAll("._ctl").length === 0) {
|
||||||
|
window.clearInterval(loaderInterval);
|
||||||
|
loadScript(script, "pskl.app.init()");
|
||||||
|
} else {
|
||||||
|
console.log("waiting for templates to load ....");
|
||||||
|
}
|
||||||
|
}, 100);
|
||||||
|
}
|
||||||
|
})();
|
25
pre-commit
Normal file
25
pre-commit
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# stash unstaged changes, run release task, stage release updates and restore stashed files
|
||||||
|
|
||||||
|
NAME=$(git branch | grep '*' | sed 's/* //')
|
||||||
|
|
||||||
|
# don't run on rebase
|
||||||
|
if [ $NAME != '(no branch)' ]
|
||||||
|
then
|
||||||
|
NOT_STAGED=$(git status | grep 'not staged')
|
||||||
|
# if [ "${NOT_STAGED#*not staged}" != "$NOT_STAGED" ]
|
||||||
|
if [ "$NOT_STAGED" != "" ]
|
||||||
|
then
|
||||||
|
echo "Unclean directory, aborting commit. Run git status."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
grunt precommit
|
||||||
|
RETVAL=$?
|
||||||
|
|
||||||
|
if [ $RETVAL -ne 0 ]
|
||||||
|
then
|
||||||
|
echo "grunt test failed, aborting commit. Run grunt test"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
18
templates/drawing-tools.html
Normal file
18
templates/drawing-tools.html
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
<div class="sticky-section left-sticky-section" id="tool-section">
|
||||||
|
<div class="sticky-section-wrap">
|
||||||
|
<div class="vertical-centerer">
|
||||||
|
<ul id="tools-container" class="tools-wrapper"></ul>
|
||||||
|
<div class="palette-wrapper">
|
||||||
|
<div class="tool-icon tool-color-picker">
|
||||||
|
<input id="color-picker" class="color {hash:true}" type="text" value="" />
|
||||||
|
<input id="secondary-color-picker" class="secondary-color-picker color {hash:true}" type="text" value="" />
|
||||||
|
</div>
|
||||||
|
<div class="tool-icon tool-palette">
|
||||||
|
<div id="palette" class="palette">
|
||||||
|
<span class="tool-icon palette-color transparent-color" data-color="TRANSPARENT" title="Transparent"></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
7
templates/frames-list.html
Normal file
7
templates/frames-list.html
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
<div id="preview-list-wrapper" class="preview-list-wrapper">
|
||||||
|
<div id="preview-list-scroller" class="preview-list-scroller">
|
||||||
|
<ul class="preview-list" id="preview-list"></ul>
|
||||||
|
</div>
|
||||||
|
<div class="top-overflow"></div>
|
||||||
|
<div class="bottom-overflow"></div>
|
||||||
|
</div>
|
11
templates/options.html
Normal file
11
templates/options.html
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
<div class="vertical-centerer">
|
||||||
|
<div id="settings" class="tool-icon gear-icon" title="Preferences" rel="tooltip" data-placement="left"></div>
|
||||||
|
<a class="tool-icon gallery-icon" title="Visit gallery" href="http://juliandescottes.github.io/piskel-website/" rel="tooltip" data-placement="left" target="_blank"></a>
|
||||||
|
<div class="tool-icon save-icon" title="Save to gallery" onclick="pskl.app.storeSheet()" rel="tooltip" data-placement="left" ></div>
|
||||||
|
<div class="tool-icon upload-cloud-icon" title="Upload as an animated GIF" onclick="pskl.app.uploadAsAnimatedGIF()" rel="tooltip" data-placement="left">
|
||||||
|
<span class="label">GIF</span>
|
||||||
|
</div>
|
||||||
|
<div class="tool-icon upload-cloud-icon" title="Upload as a spritesheet PNG" onclick="pskl.app.uploadAsSpritesheetPNG()" rel="tooltip" data-placement="left">
|
||||||
|
<span class="label">PNG</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
9
templates/preview.html
Normal file
9
templates/preview.html
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<div class='preview-container'>
|
||||||
|
<div id='preview-canvas-container' class="canvas-container">
|
||||||
|
<div class="canvas-background"></div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<span id="display-fps" class="display-fps">12 FPS</span>
|
||||||
|
<input id="preview-fps" class="range-fps" type="range" min="1" max="24" value="12"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
30
templates/user-settings-drawer.html
Normal file
30
templates/user-settings-drawer.html
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
<div class="drawer vertical-centerer">
|
||||||
|
<div class="drawer-content">
|
||||||
|
<div class="settings-section">
|
||||||
|
<div class="settings-title">
|
||||||
|
Canvas settings:
|
||||||
|
</div>
|
||||||
|
<div class="settings-item">
|
||||||
|
<label>Background:</label>
|
||||||
|
<div id="background-picker-wrapper" class="background-picker-wrapper">
|
||||||
|
<div class="background-picker light-picker-background" data-background-class="light-canvas-background"
|
||||||
|
rel="tooltip" data-placement="bottom" title="light / high contrast">
|
||||||
|
</div>
|
||||||
|
<div class="background-picker medium-picker-background" data-background-class="medium-canvas-background"
|
||||||
|
rel="tooltip" data-placement="bottom" title="medium / high contrast">
|
||||||
|
</div>
|
||||||
|
<div class="background-picker lowcont-medium-picker-background" data-background-class="lowcont-medium-canvas-background"
|
||||||
|
rel="tooltip" data-placement="bottom" title="medium / low contrast">
|
||||||
|
</div>
|
||||||
|
<div class="background-picker lowcont-dark-picker-background" data-background-class="lowcont-dark-canvas-background"
|
||||||
|
rel="tooltip" data-placement="bottom" title="dark / low contrast">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="settings-item">
|
||||||
|
<label for="show-grid">Show grid:</label> <input id="show-grid" type="checkbox"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
@@ -1,11 +1,11 @@
|
|||||||
casper
|
casper
|
||||||
.start(casper.cli.get('baseUrl')+"?debug")
|
.start(casper.cli.get('baseUrl')+"?debug")
|
||||||
.then(function () {
|
.then(function () {
|
||||||
this.wait(3000);
|
this.wait(casper.cli.get('delay'));
|
||||||
})
|
})
|
||||||
.then(function () {
|
.then(function () {
|
||||||
this.echo(casper.cli.get('baseUrl')+"?debug");
|
this.echo(casper.cli.get('baseUrl')+"?debug");
|
||||||
// If there was a JS error after the page load, casper won't perform asserts
|
// If there was a JS error after the page load, casper won't perform asserts
|
||||||
this.test.assertExists('html', 'Casper JS cannot assert DOM elements. A JS error has probably occured.');
|
this.test.assertExists('html', 'Casper JS cannot assert DOM elements. A JS error has probably occured.');
|
||||||
|
|
||||||
this.test.assertExists('#drawing-canvas-container canvas', 'Check if drawing canvas element is created');
|
this.test.assertExists('#drawing-canvas-container canvas', 'Check if drawing canvas element is created');
|
||||||
|
Reference in New Issue
Block a user