From 411ab96e4bd99c0b29aa48afdee5d5b9f3b3eb6a Mon Sep 17 00:00:00 2001
From: Matthew Cobbs
Date: Thu, 26 Jan 2012 20:56:25 -0500
Subject: [PATCH] Build 0.5.16 - Shortened references to Stitches in code
---
README.md | 6 +-
build.properties | 4 +-
build/css/stitches-0.5.14-min.css | 7 -
build/css/stitches-0.5.16-min.css | 7 +
...titches-0.5.14.css => stitches-0.5.16.css} | 10 +-
build/js/stitches-0.5.14-min.js | 1 -
build/js/stitches-0.5.16-min.js | 1 +
...{stitches-0.5.14.js => stitches-0.5.16.js} | 430 ++++++++++--------
build/js/stitches.html | 8 +-
dist/stitches-0.5.16.zip | Bin 0 -> 95049 bytes
docs/file.html | 25 +-
docs/icon.html | 103 +++--
docs/icons.html | 13 +-
docs/page.html | 146 +++---
docs/stitches.html | 115 ++---
src/file.js | 25 +-
src/icon.js | 141 +++---
src/icons.js | 13 +-
src/page.js | 146 +++---
src/stitches.css | 10 +-
src/stitches.html | 8 +-
src/stitches.js | 97 ++--
22 files changed, 697 insertions(+), 619 deletions(-)
delete mode 100644 build/css/stitches-0.5.14-min.css
create mode 100644 build/css/stitches-0.5.16-min.css
rename build/css/{stitches-0.5.14.css => stitches-0.5.16.css} (97%)
delete mode 100644 build/js/stitches-0.5.14-min.js
create mode 100644 build/js/stitches-0.5.16-min.js
rename build/js/{stitches-0.5.14.js => stitches-0.5.16.js} (68%)
create mode 100644 dist/stitches-0.5.16.zip
diff --git a/README.md b/README.md
index 9afd3e7c..c4ae0ab3 100644
--- a/README.md
+++ b/README.md
@@ -1,19 +1,19 @@
## Stitches
[Stitches](http://draeton.github.com/stitches/) is an HTML5 sprite sheet generator.
-The current version is `0.5.14`. Documentation is available
+The current version is `0.5.16`. Documentation is available
[here](http://draeton.github.com/stitches/stitches/docs/stitches.html).
## Implementation
Stitches requires a stylesheet, a script, and an HTML element to get the job done:
-
+
-
+
Once that's in place, the sprite sheet generator is created by the `init` method:
diff --git a/build.properties b/build.properties
index ad81359c..db1085f0 100644
--- a/build.properties
+++ b/build.properties
@@ -1,4 +1,4 @@
-#Wed, 25 Jan 2012 11:53:39 -0500
+#Thu, 26 Jan 2012 20:56:00 -0500
build.major=0
build.minor=5
-build.number=14
+build.number=16
diff --git a/build/css/stitches-0.5.14-min.css b/build/css/stitches-0.5.14-min.css
deleted file mode 100644
index 777289ea..00000000
--- a/build/css/stitches-0.5.14-min.css
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * Stitches - HTML5 Sprite Generator
- * http://draeton.github.com/stitches
- *
- * Copyright 2011, Matthew Cobbs
- * Licensed under the MIT license.
- */.stitches{position:relative;z-index:0;width:500px;overflow:hidden;margin:1em auto;font-family:Arial,sans-serif;font-size:16px;line-height:20px;color:#222}.stitches .drawer{z-index:100;width:125px;position:absolute;top:20px;left:-125px;opacity:.4;-moz-opacity:.4;filter:alpha(opacity=0.4)}.stitches .drawer:hover{opacity:1;-moz-opacity:1;filter:alpha(opacity=1)}.stitches .drawer .cabinet{display:block;width:125px;height:30px;overflow:hidden;background:#039a27;border-radius:0 10px 0 0;padding:0;margin:0}.stitches .drawer .cabinet:hover{background:#04cc33}.stitches .drawer .cabinet:active{background:#05ff3f}.stitches .drawer .cabinet span{display:block;width:125px;height:30px;position:absolute;top:0;left:0;color:white;text-align:center;font-weight:bold;font-size:14px;line-height:30px}.stitches .drawer .cabinet input.files{display:block;width:125px;height:30px;position:absolute;top:0;left:0;opacity:0;-moz-opacity:0;filter:alpha(opacity=0)}.stitches .drawer .open-options{display:block;width:125px;height:30px;background:#03669a;border-radius:0 0 10px 0;padding:0;margin:0;color:white;text-align:center;font-weight:bold;font-size:14px;line-height:30px;text-decoration:none}.stitches .drawer .open:hover{background:#0486cc}.stitches .drawer .open:active{background:#05a8ff}.stitches .dropbox{z-index:0;height:200px;border-radius:10px 10px 0 0;padding:20px 0 0;position:relative;background-color:#fff}.stitches .droplabel{display:block;width:400px;position:absolute;top:100px;left:50%;margin-left:-200px;text-align:center;font-weight:bold;color:#aaa}.stitches .droplabel.error{color:red}.stitches .dropping{background-color:#f0f0f0;background-image:linear-gradient(bottom,#fff 0,#f0f0f0 100%);background-image:-o-linear-gradient(bottom,#fff 0,#f0f0f0 100%);background-image:-moz-linear-gradient(bottom,#fff 0,#f0f0f0 100%);background-image:-webkit-linear-gradient(bottom,#fff 0,#f0f0f0 100%);background-image:-ms-linear-gradient(bottom,#fff 0,#f0f0f0 100%);background-image:-webkit-gradient(linear,left bottom,left top,color-stop(0,#fff),color-stop(1,#f0f0f0))}.stitches .filelist{font-size:14px;line-height:14px;color:#777;height:200px;overflow:auto;margin:0;padding:0}.stitches .filelist li{position:relative;display:block;overflow:hidden;padding:9px 20px;border-top:1px solid #f0f0f0;height:40px;display:none}.stitches .filelist li:hover{background-color:#f0f0f0;background-image:linear-gradient(top,#fff 0,#c8c8c8 100%);background-image:-o-linear-gradient(top,#fff 0,#c8c8c8 100%);background-image:-moz-linear-gradient(top,#fff 0,#c8c8c8 100%);background-image:-webkit-linear-gradient(top,#fff 0,#c8c8c8 100%);background-image:-ms-linear-gradient(top,#fff 0,#c8c8c8 100%);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#fff),color-stop(1,#c8c8c8))}.stitches .filelist li span.icon{display:block;float:left;width:60px;margin-right:10px;text-align:center}.stitches .filelist li span.icon img{max-width:40px;max-height:40px}.stitches .filelist li span.name{display:block;float:left;margin-right:10px;padding-top:14px}.stitches .filelist li a.remove{padding-top:14px;display:block;float:left}.stitches .buttons{overflow:hidden;margin-bottom:40px}.stitches .buttons a{display:block;width:124px;border-right:1px solid #f2f2f2;float:left;background:#03669a;color:white;text-align:center;font-size:14px;line-height:30px;font-weight:bold;text-decoration:none}.stitches .buttons a:hover{background:#0486cc}.stitches .buttons a:active{background:#05a8ff}.stitches .buttons a.disabled{background:#aaa!important;color:#ccc!important;cursor:default}.stitches .buttons a.clear{border-radius:0 0 10px 0;border-right:0;width:125px}.stitches .buttons a.generate{border-radius:0 0 0 10px;background:#039a27}.stitches .buttons a.generate:hover{background:#04cc33}.stitches .buttons a.generate:active{background:#05ff3f}.stitches .options{position:absolute;z-index:200;top:0;left:0;padding:20px 12px 0 12px;height:230px;width:476px;border-radius:10px;display:none;background-color:#f0f0f0;background-image:linear-gradient(top,#fff 0,#c8c8c8 100%);background-image:-o-linear-gradient(top,#fff 0,#c8c8c8 100%);background-image:-moz-linear-gradient(top,#fff 0,#c8c8c8 100%);background-image:-webkit-linear-gradient(top,#fff 0,#c8c8c8 100%);background-image:-ms-linear-gradient(top,#fff 0,#c8c8c8 100%);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#fff),color-stop(1,#c8c8c8))}.stitches .options a.close-options{position:absolute;top:12px;right:12px;font-size:20px;text-decoration:none;color:red}.stitches .options h2{margin:0 0 12px 0;padding:0;font-size:16px;line-height:16px}.stitches .options p{margin:0 0 12px 0;padding:0;font-size:14px;line-height:18px;clear:both}.stitches .options label{font-size:12px;line-height:12px;font-weight:bold;display:inline-block;margin-top:6px;padding:0;width:auto;float:none;text-align:left}.stitches .options input{vertical-align:middle;width:auto;color:black}
\ No newline at end of file
diff --git a/build/css/stitches-0.5.16-min.css b/build/css/stitches-0.5.16-min.css
new file mode 100644
index 00000000..ba104a4f
--- /dev/null
+++ b/build/css/stitches-0.5.16-min.css
@@ -0,0 +1,7 @@
+/*!
+ * Stitches - HTML5 Sprite Generator
+ * http://draeton.github.com/stitches
+ *
+ * Copyright 2011, Matthew Cobbs
+ * Licensed under the MIT license.
+ */.stitches{position:relative;z-index:0;width:500px;overflow:hidden;margin:1em auto;font-family:Arial,sans-serif;font-size:16px;line-height:20px;color:#222}.stitches .drawer{z-index:100;width:125px;position:absolute;top:20px;left:-125px;opacity:.4;-moz-opacity:.4;filter:alpha(opacity=0.4)}.stitches .drawer:hover{opacity:1;-moz-opacity:1;filter:alpha(opacity=1)}.stitches .drawer .cabinet{display:block;width:125px;height:30px;overflow:hidden;background:#039a27;border-radius:0 10px 0 0;padding:0;margin:0}.stitches .drawer .cabinet:hover{background:#04cc33}.stitches .drawer .cabinet:active{background:#05ff3f}.stitches .drawer .cabinet span{display:block;width:125px;height:30px;position:absolute;top:0;left:0;color:white;text-align:center;font-weight:bold;font-size:14px;line-height:30px}.stitches .drawer .cabinet input.files{display:block;width:125px;height:30px;position:absolute;top:0;left:0;opacity:0;-moz-opacity:0;filter:alpha(opacity=0)}.stitches .drawer .open-options{display:block;width:125px;height:30px;background:#039a27;border-radius:0 0 10px 0;padding:0;margin:0;color:white;text-align:center;font-weight:bold;font-size:14px;line-height:30px;text-decoration:none}.stitches .drawer .open-options:hover{background:#04cc33}.stitches .drawer .open-options:active{background:#05ff3f}.stitches .dropbox{z-index:0;height:200px;border-radius:10px 10px 0 0;padding:20px 0 0;position:relative;background-color:#fff}.stitches .droplabel{display:block;width:400px;position:absolute;top:100px;left:50%;margin-left:-200px;text-align:center;font-weight:bold;color:#aaa}.stitches .droplabel.error{color:red}.stitches .dropping{background-color:#f0f0f0;background-image:linear-gradient(bottom,#fff 0,#f0f0f0 100%);background-image:-o-linear-gradient(bottom,#fff 0,#f0f0f0 100%);background-image:-moz-linear-gradient(bottom,#fff 0,#f0f0f0 100%);background-image:-webkit-linear-gradient(bottom,#fff 0,#f0f0f0 100%);background-image:-ms-linear-gradient(bottom,#fff 0,#f0f0f0 100%);background-image:-webkit-gradient(linear,left bottom,left top,color-stop(0,#fff),color-stop(1,#f0f0f0))}.stitches .filelist{font-size:14px;line-height:14px;color:#777;height:200px;overflow:auto;margin:0;padding:0}.stitches .filelist li{position:relative;display:block;overflow:hidden;padding:9px 20px;border-top:1px solid #f0f0f0;height:40px;display:none}.stitches .filelist li:hover{background-color:#f0f0f0;background-image:linear-gradient(top,#fff 0,#c8c8c8 100%);background-image:-o-linear-gradient(top,#fff 0,#c8c8c8 100%);background-image:-moz-linear-gradient(top,#fff 0,#c8c8c8 100%);background-image:-webkit-linear-gradient(top,#fff 0,#c8c8c8 100%);background-image:-ms-linear-gradient(top,#fff 0,#c8c8c8 100%);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#fff),color-stop(1,#c8c8c8))}.stitches .filelist li span.icon{display:block;float:left;width:60px;margin-right:10px;text-align:center}.stitches .filelist li span.icon img{max-width:40px;max-height:40px}.stitches .filelist li span.name{display:block;float:left;margin-right:10px;padding-top:14px}.stitches .filelist li a.remove{padding-top:14px;display:block;float:left}.stitches .buttons{overflow:hidden;margin-bottom:40px}.stitches .buttons a{display:block;width:124px;border-right:1px solid #f2f2f2;float:left;background:#03669a;color:white;text-align:center;font-size:14px;line-height:30px;font-weight:bold;text-decoration:none}.stitches .buttons a:hover{background:#0486cc}.stitches .buttons a:active{background:#05a8ff}.stitches .buttons a.disabled{background:#aaa!important;color:#ccc!important;cursor:default}.stitches .buttons a.clear{border-radius:0 0 10px 0;border-right:0;width:125px}.stitches .buttons a.generate{border-radius:0 0 0 10px;background:#039a27}.stitches .buttons a.generate:hover{background:#04cc33}.stitches .buttons a.generate:active{background:#05ff3f}.stitches .options{position:absolute;z-index:200;top:0;left:0;padding:20px 12px 0 12px;height:230px;width:476px;border-radius:10px;display:none;background-color:#f0f0f0;background-image:linear-gradient(top,#fff 0,#c8c8c8 100%);background-image:-o-linear-gradient(top,#fff 0,#c8c8c8 100%);background-image:-moz-linear-gradient(top,#fff 0,#c8c8c8 100%);background-image:-webkit-linear-gradient(top,#fff 0,#c8c8c8 100%);background-image:-ms-linear-gradient(top,#fff 0,#c8c8c8 100%);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#fff),color-stop(1,#c8c8c8))}.stitches .options a.close-options{position:absolute;top:12px;right:12px;font-size:20px;text-decoration:none;color:red}.stitches .options h2{margin:0 0 12px 0;padding:0;font-size:16px;line-height:16px}.stitches .options p{margin:0 0 12px 0;padding:0;font-size:14px;line-height:18px;clear:both}.stitches .options label{font-size:12px;line-height:12px;font-weight:bold;display:inline-block;margin-top:6px;padding:0;width:auto;float:none;text-align:left}.stitches .options input{vertical-align:middle;width:auto;color:black}
\ No newline at end of file
diff --git a/build/css/stitches-0.5.14.css b/build/css/stitches-0.5.16.css
similarity index 97%
rename from build/css/stitches-0.5.14.css
rename to build/css/stitches-0.5.16.css
index 4b047ba3..c67c0391 100644
--- a/build/css/stitches-0.5.14.css
+++ b/build/css/stitches-0.5.16.css
@@ -84,7 +84,7 @@
display: block;
width: 125px;
height: 30px;
- background: #03669A; /* blue 0486CC 05A8FF */
+ background: #039a27; /* green 04CC33 05FF3F */
border-radius: 0 0 10px 0;
padding: 0;
margin: 0;
@@ -96,12 +96,12 @@
text-decoration: none;
}
-.stitches .drawer .open:hover {
- background: #0486CC;
+.stitches .drawer .open-options:hover {
+ background: #04CC33;
}
-.stitches .drawer .open:active {
- background: #05A8FF;
+.stitches .drawer .open-options:active {
+ background: #05FF3F;
}
/* dropbox */
diff --git a/build/js/stitches-0.5.14-min.js b/build/js/stitches-0.5.14-min.js
deleted file mode 100644
index f2240de3..00000000
--- a/build/js/stitches-0.5.14-min.js
+++ /dev/null
@@ -1 +0,0 @@
-(function(window,$,Modernizr){window.Stitches=(function(){var defaults={jsdir:"js",prefix:"sprite",padding:10,dataURI:false};return{_topics:{},init:function($elem,config){Stitches.settings=$.extend({},defaults,config);Stitches.iconQueue=[];Stitches.Page.$elem=$elem;Stitches.sub("page.error",Stitches.Page.errorHandler);Stitches.sub("page.init.done",Stitches.Page.fetchTemplates);Stitches.sub("page.templates.done",Stitches.Page.render);Stitches.sub("page.render.done",Stitches.checkAPIs);Stitches.sub("page.apis.done",Stitches.Page.bindDragAndDrop);Stitches.sub("page.apis.done",Stitches.Page.bindButtons);Stitches.sub("page.apis.done",Stitches.Page.bindCabinet);Stitches.sub("page.apis.done",Stitches.Page.bindOptions);Stitches.sub("page.apis.done",Stitches.Page.subscribe);Stitches.sub("page.drop.done",Stitches.File.queueFiles);Stitches.sub("file.queue.done",Stitches.File.queueIcons);Stitches.sub("file.icon.done",Stitches.Page.addIcon);Stitches.sub("file.remove.done",Stitches.Page.removeIcon);Stitches.sub("file.unqueue",Stitches.File.unqueueIcon);Stitches.sub("file.unqueue.all",Stitches.File.unqueueAllIcons);Stitches.sub("sprite.generate",Stitches.generateStitches);Stitches.pub("page.init.done");},sub:function(topic,fn){var callbacks=Stitches._topics[topic]||$.Callbacks("stopOnFalse");if(fn){callbacks.add(fn);}Stitches._topics[topic]=callbacks;},unsub:function(topic,fn){var callbacks=Stitches._topics[topic];if(callbacks){callbacks.remove(fn);}},pub:function(topic){var callbacks=Stitches._topics[topic],args=Array.prototype.slice.call(arguments,1);if(callbacks){callbacks.fire.apply(callbacks,args);}},checkAPIs:function(){Modernizr.load([{test:typeof FileReader!=="undefined"&&Modernizr.draganddrop,nope:Stitches.settings.jsdir+"/dropfile/dropfile.js"},{test:Modernizr.canvas,nope:Stitches.settings.jsdir+"/flashcanvas/flashcanvas.js",complete:function(){if(typeof FileReader!=="undefined"&&Modernizr.draganddrop&&Modernizr.canvas){Stitches.pub("page.apis.done");}else{Stitches.pub("page.error",new Error("Required APIs are not present."));}}}]);},generateStitches:function(looseIcons){var placedIcons=Stitches.positionImages(looseIcons);var sprite=Stitches.makeStitches(placedIcons);var stylesheet=Stitches.makeStylesheet(placedIcons,sprite);Stitches.pub("sprite.generate.done",sprite,stylesheet);},positionImages:function(looseIcons){var placedIcons=[];$(looseIcons).each(function(idx,icon){icon.x=icon.y=0;icon.isPlaced=false;});looseIcons=looseIcons.sort(function(a,b){if(b.area===a.area){return b.name>a.name?1:-1;}else{return b.area-a.area;}});Stitches.canvas=Stitches.Icons.idealCanvas(looseIcons);Stitches.Icons.placeIcons(looseIcons,placedIcons,Stitches.canvas);Stitches.Icons.cropCanvas(placedIcons,Stitches.canvas);Stitches.pub("sprite.position.done",placedIcons);return placedIcons;},makeStitches:function(placedIcons){var context,data;try{context=Stitches.canvas.getContext("2d");$(placedIcons).each(function(idx,icon){context.drawImage(icon.image,icon.x,icon.y);});data=Stitches.canvas.toDataURL();}catch(e){Stitches.pub("page.error",e);}Stitches.pub("sprite.image.done",data);return data;},makeStylesheet:function(placedIcons,sprite){placedIcons=placedIcons.sort(function(a,b){return a.namemaxW?icon.width:maxW;maxH=icon.height>maxH?icon.height:maxH;area+=icon.area;});var ideal=Math.ceil(Math.sqrt(area));var idealW=maxW>ideal?maxW:ideal;var idealH=maxH>ideal?maxH:ideal;var canvas=document.createElement("canvas");canvas.width=idealW;canvas.height=idealH;return canvas;},placeIcons:function(loose,placed,canvas){var i=0;while(loose.length&&i<10){$(loose).each(function(idx,icon){if(!icon.isPlaced){icon.isPlaced=Stitches.Icons.placeIcon(icon,placed,canvas);}});i++;}for(i=0;iicon.x);y1=(p.yicon.y);if(x1&&x2&&y1&&y2){intersect.push(p);}});if(intersect.length){overlap=intersect.pop();}else{placed.push(icon);}return overlap;},cropCanvas:function(placed,canvas){var w=0,h=0;$(placed).each(function(idx,icon){w=w>icon.x+icon.width?w:icon.x+icon.width;h=h>icon.y+icon.height?h:icon.y+icon.height;});canvas.width=w;canvas.height=h;}};})();})(window,Stitches,jQuery);(function(window,Stitches){var guid=0;var nameCache={};Stitches.Icon=function(name,src,cb){var self=this;this.guid=guid++;this.name=Stitches.Icon.getName(name);this.image=new Image();this.image.onload=function(){self.x=0;self.y=0;self.width=self.image.width+Stitches.settings.padding;self.height=self.image.height+Stitches.settings.padding;self.area=self.width*self.height;if(cb){cb(self);}};this.image.src=src;};Stitches.Icon.getName=function(name){var i=1,fix;name=name.replace(/[\s.]+/gi,"-").replace(/[^a-z0-9\-]/gi,"_");if(nameCache[name]){do{fix=name+"-"+i++;}while(nameCache[fix]);name=fix;}nameCache[name]=true;return name;};Stitches.Icon.clearNameCache=function(name){if(name){delete nameCache[name];}else{nameCache={};}};})(window,Stitches);(function(){var cache={};Stitches.tmpl=function tmpl(str,data){var fn=!/\W/.test(str)?cache[str]=cache[str]||tmpl(document.getElementById(str).innerHTML):new Function("obj","var p=[],print=function(){p.push.apply(p,arguments);};with(obj){p.push('"+str.replace(/[\r\t\n]/g," ").split("<%").join("\t").replace(/((^|%>)[^\t]*)'/g,"$1\r").replace(/\t=(.*?)%>/g,"',$1,'").split("\t").join("');").split("%>").join("p.push('").split("\r").join("\\'")+"');}return p.join('');");return data?fn(data):fn;};})();(function(window,Stitches,$){Stitches.Page=(function(){var rendered=false;return{fetchTemplates:function(){return $.get(Stitches.settings.jsdir+"/stitches.html",function(html){$("body").append(html);Stitches.Page.templates={stitches:Stitches.tmpl("stitches_tmpl"),icon:Stitches.tmpl("stitches_icon_tmpl")};Stitches.pub("page.templates.done");});},render:function(){var $div=$(Stitches.Page.templates.stitches({}));$div.appendTo(Stitches.Page.$elem);Stitches.Page.$stitches=$(".stitches",Stitches.Page.$elem);Stitches.Page.$drawer=$(".drawer",Stitches.Page.$elem);Stitches.Page.$dropbox=$(".dropbox",Stitches.Page.$elem);Stitches.Page.$droplabel=$(".droplabel",Stitches.Page.$elem);Stitches.Page.$filelist=$(".filelist",Stitches.Page.$elem);Stitches.Page.$buttons=$(".buttons",Stitches.Page.$elem);Stitches.Page.buttons={$generate:$("a.generate",Stitches.Page.$buttons),$clear:$("a.clear",Stitches.Page.$buttons),$sprite:$("a.dlsprite",Stitches.Page.$buttons),$stylesheet:$("a.dlstylesheet",Stitches.Page.$buttons)};Stitches.Page.$options=$(".options",Stitches.Page.$elem);Stitches.Page.inputs={$prefix:$("input[name=prefix]",Stitches.Page.$options),$padding:$("input[name=padding]",Stitches.Page.$options),$dataURI:$("input[name=dataURI]",Stitches.Page.$options)};Stitches.Page.inputs.$prefix.val(Stitches.settings.prefix);Stitches.Page.inputs.$padding.val(Stitches.settings.padding);Stitches.Page.inputs.$dataURI.filter("[value="+Stitches.settings.dataURI+"]").attr("checked",true);rendered=true;Stitches.pub("page.render.done");},errorHandler:function(e){if(rendered){Stitches.Page.$droplabel.html("× "+e.message).addClass("error");}throw e;},subscribe:function(){var buttons=Stitches.Page.buttons;var $droplabel=Stitches.Page.$droplabel;Stitches.sub("file.icon.done",function(icon){if(Stitches.iconQueue.length===1){$droplabel.fadeOut("fast");buttons.$generate.removeClass("disabled");buttons.$clear.removeClass("disabled");}buttons.$sprite.addClass("disabled");buttons.$stylesheet.addClass("disabled");});Stitches.sub("file.remove.done",function(icon){if(Stitches.iconQueue.length<1){$droplabel.fadeIn("fast");buttons.$generate.addClass("disabled");buttons.$clear.addClass("disabled");}buttons.$sprite.addClass("disabled");buttons.$stylesheet.addClass("disabled");});Stitches.sub("sprite.generate.done",function(sprite,stylesheet){buttons.$sprite.attr("href",sprite).removeClass("disabled");buttons.$stylesheet.attr("href",stylesheet).removeClass("disabled");});},_noop:function(e){e.preventDefault();e.stopPropagation();},bindDragAndDrop:function(){var dropbox=Stitches.Page.$dropbox.get(0);dropbox.addEventListener("dragenter",Stitches.Page._dragStart,false);dropbox.addEventListener("dragleave",Stitches.Page._dragStop,false);dropbox.addEventListener("dragexit",Stitches.Page._dragStop,false);dropbox.addEventListener("dragover",Stitches.Page._noop,false);dropbox.addEventListener("drop",Stitches.Page._drop,false);},_dragStart:function(e){Stitches.Page.$dropbox.addClass("dropping");},_dragStop:function(e){if($(e.target).parents(".dropbox").length===0){Stitches.Page.$dropbox.removeClass("dropping");}},_drop:function(e){e.stopPropagation();e.preventDefault();Stitches.Page.$dropbox.removeClass("dropping");var evt=e||window.event;var files=(evt.files||evt.dataTransfer.files);if(files.length>0){Stitches.pub("page.drop.done",files);}},bindButtons:function(){var $elem=Stitches.Page.$elem;$elem.delegate("a.disabled","click",Stitches.Page._noop);$elem.delegate("a.generate","click",Stitches.Page._generate);$elem.delegate("a.remove","click",Stitches.Page._removeFile);$elem.delegate("a.clear","click",Stitches.Page._removeAllFiles);},bindCabinet:function(){var $elem=Stitches.Page.$elem;var $stitches=Stitches.Page.$stitches;var $options=Stitches.Page.$options;var $drawer=Stitches.Page.$drawer;var $cabinet=$("form.cabinet",$drawer);var $input=$("input.files",$drawer);$stitches.hover(function(){$drawer.stop().animate({left:"-5px"},250);},function(){$drawer.stop().animate({left:"-125px"},250);});$input.bind("change",function(){if(this.files.length){Stitches.pub("page.drop.done",this.files);}$cabinet.trigger("reset");});$drawer.delegate("a.open-options","click",function(){$options.fadeIn();});},bindOptions:function(){var $options=Stitches.Page.$options;var buttons=Stitches.Page.buttons;$options.delegate("a.close-options","click",function(){$options.fadeOut();});$options.delegate("input","change",function(){buttons.$sprite.addClass("disabled");buttons.$stylesheet.addClass("disabled");});$options.delegate("input[name=prefix]","change",function(){Stitches.settings.prefix=Stitches.Page.inputs.$prefix.val();});$options.delegate("input[name=padding]","change",function(){var padding=Stitches.Page.inputs.$padding.val();Stitches.settings.padding=+padding;Stitches.Page.updateIconDimensions();});$options.delegate("input[name=dataURI]","change",function(){var dataURI=Stitches.Page.inputs.$dataURI.filter(":checked").val();Stitches.settings.dataURI=dataURI==="true"?true:false;});},_generate:function(e){Stitches.pub("sprite.generate",[].concat(Stitches.iconQueue));},_removeFile:function(e){var icon=$(this).parent("li").data("icon");Stitches.pub("file.unqueue",icon);},_removeAllFiles:function(e){Stitches.pub("file.unqueue.all");},addIcon:function(icon){$(Stitches.Page.templates.icon(icon)).data("icon",icon).appendTo(Stitches.Page.$filelist).fadeIn("fast");},removeIcon:function(icon){Stitches.Page.$filelist.find("li").filter(function(){return $(this).data("icon")===icon;}).fadeOut("fast").remove();},updateIconDimensions:function(){var padding=Stitches.settings.padding;$.each(Stitches.iconQueue,function(i,icon){icon.width=icon.image.width+padding;icon.height=icon.image.height+padding;});}};})();})(window,Stitches,jQuery);(function(window,Stitches,$){Stitches.File=(function(){var readQueue=[];return{queueFiles:function(files){$.each(files,function(i,file){if(/jpeg|png|gif/.test(file.type)){readQueue.push(file);Stitches.pub("file.queue.done",file);}});},queueIcons:function(){var file,reader;file=readQueue.shift();if(file){try{reader=new FileReader();reader.onloadend=function(e){var icon=new Stitches.Icon(file.name,e.target.result);Stitches.iconQueue.push(icon);Stitches.pub("file.icon.done",icon);};reader.readAsDataURL(file);}catch(e){Stitches.pub("page.error",e);}}},unqueueIcon:function(icon){Stitches.iconQueue=$.grep(Stitches.iconQueue,function(item){return item!==icon;});Stitches.Icon.clearNameCache(icon.name);Stitches.pub("file.remove.done",icon);},unqueueAllIcons:function(){$.each(Stitches.iconQueue,function(i,icon){Stitches.File.unqueueIcon(icon);});Stitches.Icon.clearNameCache();}};})();})(window,Stitches,jQuery);
\ No newline at end of file
diff --git a/build/js/stitches-0.5.16-min.js b/build/js/stitches-0.5.16-min.js
new file mode 100644
index 00000000..783d22be
--- /dev/null
+++ b/build/js/stitches-0.5.16-min.js
@@ -0,0 +1 @@
+(function(window,$,Modernizr){var S=window.Stitches=(function(){var defaults={jsdir:"js",prefix:"sprite",padding:10,dataURI:false};var _topics={};return{init:function($elem,config){S.settings=$.extend({},defaults,config);S.iconQueue=[];S.Page.$elem=$elem;S.sub("page.error",S.Page.errorHandler);S.sub("page.init.done",S.Page.fetchTemplates);S.sub("page.templates.done",S.Page.render);S.sub("page.render.done",S.checkAPIs);S.sub("page.apis.done",S.Page.bindDragAndDrop);S.sub("page.apis.done",S.Page.bindButtons);S.sub("page.apis.done",S.Page.bindCabinet);S.sub("page.apis.done",S.Page.bindOptions);S.sub("page.apis.done",S.Page.subscribe);S.sub("page.drop.done",S.File.queueFiles);S.sub("file.queue.done",S.File.queueIcons);S.sub("file.icon.done",S.Page.addIcon);S.sub("file.remove.done",S.Page.removeIcon);S.sub("file.unqueue",S.File.unqueueIcon);S.sub("file.unqueue.all",S.File.unqueueAllIcons);S.sub("sprite.generate",S.generateStitches);S.pub("page.init.done");},sub:function(topic,fn){var callbacks=_topics[topic]||$.Callbacks("stopOnFalse");if(fn){callbacks.add(fn);}_topics[topic]=callbacks;},unsub:function(topic,fn){var callbacks=_topics[topic];if(callbacks){callbacks.remove(fn);}},pub:function(topic){var callbacks=_topics[topic],args=Array.prototype.slice.call(arguments,1);if(callbacks){callbacks.fire.apply(callbacks,args);}},checkAPIs:function(){Modernizr.load([{test:typeof FileReader!=="undefined"&&Modernizr.draganddrop,nope:S.settings.jsdir+"/dropfile/dropfile.js"},{test:Modernizr.canvas,nope:S.settings.jsdir+"/flashcanvas/flashcanvas.js",complete:function(){if(typeof FileReader!=="undefined"&&Modernizr.draganddrop&&Modernizr.canvas){S.pub("page.apis.done");}else{S.pub("page.error",new Error("Required APIs are not present."));}}}]);},generateStitches:function(looseIcons){var placedIcons=S.positionImages(looseIcons);var sprite=S.makeStitches(placedIcons);var stylesheet=S.makeStylesheet(placedIcons,sprite);S.pub("sprite.generate.done",sprite,stylesheet);},positionImages:function(looseIcons){var placedIcons=[];$(looseIcons).each(function(idx,icon){icon.x=icon.y=0;icon.isPlaced=false;});looseIcons=looseIcons.sort(function(a,b){if(b.area===a.area){return b.name>a.name?1:-1;}else{return b.area-a.area;}});S.canvas=S.Icons.idealCanvas(looseIcons);S.Icons.placeIcons(looseIcons,placedIcons,S.canvas);S.Icons.cropCanvas(placedIcons,S.canvas);S.pub("sprite.position.done",placedIcons);return placedIcons;},makeStitches:function(placedIcons){var context,data;try{context=S.canvas.getContext("2d");$(placedIcons).each(function(idx,icon){context.drawImage(icon.image,icon.x,icon.y);});data=S.canvas.toDataURL();}catch(e){S.pub("page.error",e);}S.pub("sprite.image.done",data);return data;},makeStylesheet:function(placedIcons,sprite){placedIcons=placedIcons.sort(function(a,b){return a.namemaxW?icon.width:maxW;maxH=icon.height>maxH?icon.height:maxH;area+=icon.area;});var ideal=Math.ceil(Math.sqrt(area));var idealW=maxW>ideal?maxW:ideal;var idealH=maxH>ideal?maxH:ideal;var canvas=document.createElement("canvas");canvas.width=idealW;canvas.height=idealH;return canvas;},placeIcons:function(loose,placed,canvas){var i=0;while(loose.length&&i<10){$(loose).each(function(idx,icon){if(!icon.isPlaced){icon.isPlaced=S.Icons.placeIcon(icon,placed,canvas);}});i++;}for(i=0;iicon.x);y1=(p.yicon.y);if(x1&&x2&&y1&&y2){intersect.push(p);}});if(intersect.length){overlap=intersect.pop();}else{placed.push(icon);}return overlap;},cropCanvas:function(placed,canvas){var w=0,h=0;$(placed).each(function(idx,icon){w=w>icon.x+icon.width?w:icon.x+icon.width;h=h>icon.y+icon.height?h:icon.y+icon.height;});canvas.width=w;canvas.height=h;}};})();})(window,Stitches,jQuery);(function(window,Stitches){Stitches.Icon=(function(){var S=window.Stitches;var guid=0;var nameCache={};var Icon=function(name,src,cb){var self=this;this.guid=guid++;this.name=S.Icon.getName(name);this.image=new Image();this.image.onload=function(){self.x=0;self.y=0;self.width=self.image.width+S.settings.padding;self.height=self.image.height+S.settings.padding;self.area=self.width*self.height;if(cb){cb(self);}};this.image.src=src;};Icon.getName=function(name){var i=1,fix;name=name.replace(/[\s.]+/gi,"-").replace(/[^a-z0-9\-]/gi,"_");if(nameCache[name]){do{fix=name+"-"+i++;}while(nameCache[fix]);name=fix;}nameCache[name]=true;return name;};Icon.clearNameCache=function(name){if(name){delete nameCache[name];}else{nameCache={};}};return Icon;})();})(window,Stitches);(function(){var cache={};Stitches.tmpl=function tmpl(str,data){var fn=!/\W/.test(str)?cache[str]=cache[str]||tmpl(document.getElementById(str).innerHTML):new Function("obj","var p=[],print=function(){p.push.apply(p,arguments);};with(obj){p.push('"+str.replace(/[\r\t\n]/g," ").split("<%").join("\t").replace(/((^|%>)[^\t]*)'/g,"$1\r").replace(/\t=(.*?)%>/g,"',$1,'").split("\t").join("');").split("%>").join("p.push('").split("\r").join("\\'")+"');}return p.join('');");return data?fn(data):fn;};})();(function(window,Stitches,$){Stitches.Page=(function(){var S=window.Stitches;var rendered=false;return{fetchTemplates:function(){return $.get(S.settings.jsdir+"/stitches.html",function(html){$("body").append(html);S.Page.templates={stitches:S.tmpl("stitches_tmpl"),icon:S.tmpl("stitches_icon_tmpl")};S.pub("page.templates.done");});},render:function(){var $div=$(S.Page.templates.stitches({}));$div.appendTo(S.Page.$elem);S.Page.$stitches=$(".stitches",S.Page.$elem);S.Page.$drawer=$(".drawer",S.Page.$elem);S.Page.$dropbox=$(".dropbox",S.Page.$elem);S.Page.$droplabel=$(".droplabel",S.Page.$elem);S.Page.$filelist=$(".filelist",S.Page.$elem);S.Page.$buttons=$(".buttons",S.Page.$elem);S.Page.buttons={$generate:$("a.generate",S.Page.$buttons),$clear:$("a.clear",S.Page.$buttons),$sprite:$("a.dlsprite",S.Page.$buttons),$stylesheet:$("a.dlstylesheet",S.Page.$buttons)};S.Page.$options=$(".options",S.Page.$elem);S.Page.inputs={$prefix:$("input[name=prefix]",S.Page.$options),$padding:$("input[name=padding]",S.Page.$options),$dataURI:$("input[name=dataURI]",S.Page.$options)};S.Page.inputs.$prefix.val(S.settings.prefix);S.Page.inputs.$padding.val(S.settings.padding);S.Page.inputs.$dataURI.filter("[value="+S.settings.dataURI+"]").attr("checked",true);rendered=true;S.pub("page.render.done");},errorHandler:function(e){if(rendered){S.Page.$droplabel.html("× "+e.message).addClass("error");}throw e;},subscribe:function(){var buttons=S.Page.buttons;var $droplabel=S.Page.$droplabel;S.sub("file.icon.done",function(icon){if(S.iconQueue.length===1){$droplabel.fadeOut("fast");buttons.$generate.removeClass("disabled");buttons.$clear.removeClass("disabled");}buttons.$sprite.addClass("disabled");buttons.$stylesheet.addClass("disabled");});S.sub("file.remove.done",function(icon){if(S.iconQueue.length<1){$droplabel.fadeIn("fast");buttons.$generate.addClass("disabled");buttons.$clear.addClass("disabled");}buttons.$sprite.addClass("disabled");buttons.$stylesheet.addClass("disabled");});S.sub("sprite.generate.done",function(sprite,stylesheet){buttons.$sprite.attr("href",sprite).removeClass("disabled");buttons.$stylesheet.attr("href",stylesheet).removeClass("disabled");});},_noop:function(e){e.preventDefault();e.stopPropagation();},bindDragAndDrop:function(){var dropbox=S.Page.$dropbox.get(0);dropbox.addEventListener("dragenter",S.Page._dragStart,false);dropbox.addEventListener("dragleave",S.Page._dragStop,false);dropbox.addEventListener("dragexit",S.Page._dragStop,false);dropbox.addEventListener("dragover",S.Page._noop,false);dropbox.addEventListener("drop",S.Page._drop,false);},_dragStart:function(e){S.Page.$dropbox.addClass("dropping");},_dragStop:function(e){if($(e.target).parents(".dropbox").length===0){S.Page.$dropbox.removeClass("dropping");}},_drop:function(e){e.stopPropagation();e.preventDefault();S.Page.$dropbox.removeClass("dropping");var evt=e||window.event;var files=(evt.files||evt.dataTransfer.files);if(files.length>0){S.pub("page.drop.done",files);}},bindButtons:function(){var $elem=S.Page.$elem;$elem.delegate("a.disabled","click",S.Page._noop);$elem.delegate("a.generate","click",S.Page._generate);$elem.delegate("a.remove","click",S.Page._removeFile);$elem.delegate("a.clear","click",S.Page._removeAllFiles);},bindCabinet:function(){var $elem=S.Page.$elem;var $stitches=S.Page.$stitches;var $options=S.Page.$options;var $drawer=S.Page.$drawer;var $cabinet=$("form.cabinet",$drawer);var $input=$("input.files",$drawer);$stitches.hover(function(){$drawer.stop().animate({left:"-5px"},250);},function(){$drawer.stop().animate({left:"-125px"},250);});$input.bind("change",function(){if(this.files.length){S.pub("page.drop.done",this.files);}$cabinet.trigger("reset");});$drawer.delegate("a.open-options","click",function(){$options.fadeIn();});},bindOptions:function(){var $options=S.Page.$options;var buttons=S.Page.buttons;$options.delegate("a.close-options","click",function(){$options.fadeOut();});$options.delegate("input","change",function(){buttons.$sprite.addClass("disabled");buttons.$stylesheet.addClass("disabled");});$options.delegate("input[name=prefix]","change",function(){S.settings.prefix=S.Page.inputs.$prefix.val();});$options.delegate("input[name=padding]","change",function(){var padding=S.Page.inputs.$padding.val();S.settings.padding=+padding;S.Page.updateIconDimensions();});$options.delegate("input[name=dataURI]","change",function(){var dataURI=S.Page.inputs.$dataURI.filter(":checked").val();S.settings.dataURI=dataURI==="true"?true:false;});},_generate:function(e){S.pub("sprite.generate",[].concat(S.iconQueue));},_removeFile:function(e){var icon=$(this).parent("li").data("icon");S.pub("file.unqueue",icon);},_removeAllFiles:function(e){S.pub("file.unqueue.all");},addIcon:function(icon){$(S.Page.templates.icon(icon)).data("icon",icon).appendTo(S.Page.$filelist).fadeIn("fast");},removeIcon:function(icon){S.Page.$filelist.find("li").filter(function(){return $(this).data("icon")===icon;}).fadeOut("fast").remove();},updateIconDimensions:function(){var padding=S.settings.padding;$.each(S.iconQueue,function(i,icon){icon.width=icon.image.width+padding;icon.height=icon.image.height+padding;});}};})();})(window,Stitches,jQuery);(function(window,Stitches,$){Stitches.File=(function(){var S=window.Stitches;var readQueue=[];return{queueFiles:function(files){$.each(files,function(i,file){if(/jpeg|png|gif/.test(file.type)){readQueue.push(file);S.pub("file.queue.done",file);}});},queueIcons:function(){var file,reader;file=readQueue.shift();if(file){try{reader=new FileReader();reader.onloadend=function(e){var icon=new S.Icon(file.name,e.target.result);S.iconQueue.push(icon);S.pub("file.icon.done",icon);};reader.readAsDataURL(file);}catch(e){S.pub("page.error",e);}}},unqueueIcon:function(icon){S.iconQueue=$.grep(S.iconQueue,function(item){return item!==icon;});S.Icon.clearNameCache(icon.name);S.pub("file.remove.done",icon);},unqueueAllIcons:function(){$.each(S.iconQueue,function(i,icon){S.File.unqueueIcon(icon);});S.Icon.clearNameCache();}};})();})(window,Stitches,jQuery);
\ No newline at end of file
diff --git a/build/js/stitches-0.5.14.js b/build/js/stitches-0.5.16.js
similarity index 68%
rename from build/js/stitches-0.5.14.js
rename to build/js/stitches-0.5.16.js
index 9b2dcbe0..1b33bdd6 100644
--- a/build/js/stitches-0.5.14.js
+++ b/build/js/stitches-0.5.16.js
@@ -13,8 +13,9 @@
// ## Stitches namespace
//
// Holds all methods
- window.Stitches = (function () {
- // **Some configuration defaults**
+ var S = window.Stitches = (function () {
+
+ /* Some configuration defaults */
var defaults = {
"jsdir": "js",
"prefix": "sprite",
@@ -22,10 +23,10 @@
"dataURI": false
};
- return {
- // **Pub/sub subscription manager**
- _topics: {},
+ /* Pub/sub subscription manager */
+ var _topics = {};
+ return {
// ### init
//
// Readies everything for user interaction.
@@ -33,30 +34,30 @@
// @param {jQuery} $elem A wrapped DOM node
// @param {Object} config An optional settings object
init: function ($elem, config) {
- Stitches.settings = $.extend({}, defaults, config);
- Stitches.iconQueue = [];
- Stitches.Page.$elem = $elem;
+ S.settings = $.extend({}, defaults, config);
+ S.iconQueue = [];
+ S.Page.$elem = $elem;
/* setup subscriptions */
- Stitches.sub("page.error", Stitches.Page.errorHandler);
- Stitches.sub("page.init.done", Stitches.Page.fetchTemplates);
- Stitches.sub("page.templates.done", Stitches.Page.render);
- Stitches.sub("page.render.done", Stitches.checkAPIs);
- Stitches.sub("page.apis.done", Stitches.Page.bindDragAndDrop);
- Stitches.sub("page.apis.done", Stitches.Page.bindButtons);
- Stitches.sub("page.apis.done", Stitches.Page.bindCabinet);
- Stitches.sub("page.apis.done", Stitches.Page.bindOptions);
- Stitches.sub("page.apis.done", Stitches.Page.subscribe);
- Stitches.sub("page.drop.done", Stitches.File.queueFiles);
- Stitches.sub("file.queue.done", Stitches.File.queueIcons);
- Stitches.sub("file.icon.done", Stitches.Page.addIcon);
- Stitches.sub("file.remove.done", Stitches.Page.removeIcon);
- Stitches.sub("file.unqueue", Stitches.File.unqueueIcon);
- Stitches.sub("file.unqueue.all", Stitches.File.unqueueAllIcons);
- Stitches.sub("sprite.generate", Stitches.generateStitches);
+ S.sub("page.error", S.Page.errorHandler);
+ S.sub("page.init.done", S.Page.fetchTemplates);
+ S.sub("page.templates.done", S.Page.render);
+ S.sub("page.render.done", S.checkAPIs);
+ S.sub("page.apis.done", S.Page.bindDragAndDrop);
+ S.sub("page.apis.done", S.Page.bindButtons);
+ S.sub("page.apis.done", S.Page.bindCabinet);
+ S.sub("page.apis.done", S.Page.bindOptions);
+ S.sub("page.apis.done", S.Page.subscribe);
+ S.sub("page.drop.done", S.File.queueFiles);
+ S.sub("file.queue.done", S.File.queueIcons);
+ S.sub("file.icon.done", S.Page.addIcon);
+ S.sub("file.remove.done", S.Page.removeIcon);
+ S.sub("file.unqueue", S.File.unqueueIcon);
+ S.sub("file.unqueue.all", S.File.unqueueAllIcons);
+ S.sub("sprite.generate", S.generateStitches);
/* notify */
- Stitches.pub("page.init.done");
+ S.pub("page.init.done");
},
// ### sub
@@ -66,11 +67,11 @@
// @param {String} topic The subscription topic name
// @param {Function} fn A callback to fire
sub: function (topic, fn) {
- var callbacks = Stitches._topics[topic] || $.Callbacks("stopOnFalse");
+ var callbacks = _topics[topic] || $.Callbacks("stopOnFalse");
if (fn) {
callbacks.add(fn);
}
- Stitches._topics[topic] = callbacks;
+ _topics[topic] = callbacks;
},
// ### unsub
@@ -80,7 +81,7 @@
// @param {String} topic The subscription topic name
// @param {Function} fn A callback to remove
unsub: function (topic, fn) {
- var callbacks = Stitches._topics[topic];
+ var callbacks = _topics[topic];
if (callbacks) {
callbacks.remove(fn);
}
@@ -92,7 +93,7 @@
//
// @param {String} topic The subscription topic name
pub: function (topic) {
- var callbacks = Stitches._topics[topic],
+ var callbacks = _topics[topic],
args = Array.prototype.slice.call(arguments, 1);
if (callbacks) {
callbacks.fire.apply(callbacks, args);
@@ -108,16 +109,16 @@
Modernizr.load([
{
test: typeof FileReader !== "undefined" && Modernizr.draganddrop,
- nope: Stitches.settings.jsdir + "/dropfile/dropfile.js"
+ nope: S.settings.jsdir + "/dropfile/dropfile.js"
},
{
test: Modernizr.canvas,
- nope: Stitches.settings.jsdir + "/flashcanvas/flashcanvas.js",
+ nope: S.settings.jsdir + "/flashcanvas/flashcanvas.js",
complete: function () {
if (typeof FileReader !== "undefined" && Modernizr.draganddrop && Modernizr.canvas) {
- Stitches.pub("page.apis.done");
+ S.pub("page.apis.done");
} else {
- Stitches.pub("page.error", new Error("Required APIs are not present."));
+ S.pub("page.error", new Error("Required APIs are not present."));
}
}
}
@@ -132,12 +133,12 @@
//
// @param {[Icon]} looseIcons An Icon array of images to place
generateStitches: function (looseIcons) {
- var placedIcons = Stitches.positionImages(looseIcons);
- var sprite = Stitches.makeStitches(placedIcons);
- var stylesheet = Stitches.makeStylesheet(placedIcons, sprite);
+ var placedIcons = S.positionImages(looseIcons);
+ var sprite = S.makeStitches(placedIcons);
+ var stylesheet = S.makeStylesheet(placedIcons, sprite);
/* notify */
- Stitches.pub("sprite.generate.done", sprite, stylesheet);
+ S.pub("sprite.generate.done", sprite, stylesheet);
},
// ### positionImages
@@ -165,16 +166,16 @@
});
/* find the ideal sprite for this set of icons */
- Stitches.canvas = Stitches.Icons.idealCanvas(looseIcons);
+ S.canvas = S.Icons.idealCanvas(looseIcons);
/* try to place all of the icons on the ideal canvas */
- Stitches.Icons.placeIcons(looseIcons, placedIcons, Stitches.canvas);
+ S.Icons.placeIcons(looseIcons, placedIcons, S.canvas);
/* trim empty edges */
- Stitches.Icons.cropCanvas(placedIcons, Stitches.canvas);
+ S.Icons.cropCanvas(placedIcons, S.canvas);
/* notify and return */
- Stitches.pub("sprite.position.done", placedIcons);
+ S.pub("sprite.position.done", placedIcons);
return placedIcons;
},
@@ -191,19 +192,19 @@
domain blocking in browses for access to write
image data to the canvas */
try {
- context = Stitches.canvas.getContext('2d');
+ context = S.canvas.getContext('2d');
$(placedIcons).each(function (idx, icon) {
context.drawImage(icon.image, icon.x, icon.y);
});
/* create image link */
- data = Stitches.canvas.toDataURL();
+ data = S.canvas.toDataURL();
} catch (e) {
- Stitches.pub("page.error", e);
+ S.pub("page.error", e);
}
/* notify and return */
- Stitches.pub("sprite.image.done", data);
+ S.pub("sprite.image.done", data);
return data;
},
@@ -220,10 +221,10 @@
return a.name < b.name ? -1 : 1;
});
- var prefix = Stitches.settings.prefix;
+ var prefix = S.settings.prefix;
var backgroundImage
- if (Stitches.settings.dataURI) {
+ if (S.settings.dataURI) {
backgroundImage = sprite;
} else {
backgroundImage = "download.png";
@@ -249,7 +250,7 @@
var data = "data:," + encodeURIComponent(css.join("\n"));
/* notify and return */
- Stitches.pub("sprite.stylesheet.done", data);
+ S.pub("sprite.stylesheet.done", data);
return data;
}
};
@@ -267,12 +268,17 @@
"use strict";
- var document = window.document;
-
// ## Stitches.Icons namespace
//
// Holds all methods for working with icons
Stitches.Icons = (function () {
+
+ /* shortcut */
+ var S = window.Stitches;
+
+ /* shortcut */
+ var document = window.document;
+
return {
// ### idealCanvas
//
@@ -327,7 +333,7 @@
while (loose.length && i < 10) {
$(loose).each(function (idx, icon) {
if (!icon.isPlaced) {
- icon.isPlaced = Stitches.Icons.placeIcon(icon, placed, canvas);
+ icon.isPlaced = S.Icons.placeIcon(icon, placed, canvas);
}
});
@@ -363,7 +369,7 @@
icon.x = x;
icon.y = y;
- var overlap = Stitches.Icons.isOverlapped(icon, placed);
+ var overlap = S.Icons.isOverlapped(icon, placed);
if (!overlap) {
return true;
}
@@ -451,78 +457,91 @@
"use strict";
- // **Maintain a unique id for each icon**
- var guid = 0;
-
- // **Maintains a unique name for each icon**
- var nameCache = {};
-
- // ## Stitches.Icon class
+ // ## Stitches.Icon namespace
//
- // Wraps a single icon. Creates a new image from the source
- // and sets additional properties after the image loads.
- // The callback is generally used to handle queueuing
- //
- // @param {String} name
- // @param {String} src
- // @param {Function} cb Optional callback
- Stitches.Icon = function (name, src, cb) {
- var self = this;
-
- this.guid = guid++;
- this.name = Stitches.Icon.getName(name);
-
- this.image = new Image();
- this.image.onload = function () {
- self.x = 0;
- self.y = 0;
- self.width = self.image.width + Stitches.settings.padding;
- self.height = self.image.height + Stitches.settings.padding;
- self.area = self.width * self.height;
-
- if (cb) {
- cb(self);
+ // Constructs and manages icons
+ Stitches.Icon = (function () {
+
+ /* shortcut */
+ var S = window.Stitches;
+
+ /* Maintain a unique id for each icon */
+ var guid = 0;
+
+ /* Maintains a unique name for each icon */
+ var nameCache = {};
+
+ // ### Icon
+ //
+ // Wraps a single icon. Creates a new image from the source
+ // and sets additional properties after the image loads.
+ // The callback is generally used to handle queueuing
+ //
+ // @param {String} name
+ // @param {String} src
+ // @param {Function} cb Optional callback
+ // @constructor
+ var Icon = function (name, src, cb) {
+ var self = this;
+
+ this.guid = guid++;
+ this.name = S.Icon.getName(name);
+
+ this.image = new Image();
+ this.image.onload = function () {
+ self.x = 0;
+ self.y = 0;
+ self.width = self.image.width + S.settings.padding;
+ self.height = self.image.height + S.settings.padding;
+ self.area = self.width * self.height;
+
+ if (cb) {
+ cb(self);
+ }
}
- }
- this.image.src = src;
- };
+ this.image.src = src;
+ };
- // ### Stitches.Icon.getName
- //
- // Return a unique name. If the name is already in the nameCache,
- // append a value until a unique name is found.
- //
- // @param {String} name
- // @return {String}
- Stitches.Icon.getName = function (name) {
- var i = 1, fix;
-
- name = name.replace(/[\s.]+/gi, "-").replace(/[^a-z0-9\-]/gi, "_");
-
- if (nameCache[name]) {
- do {
- fix = name + "-" + i++;
- } while (nameCache[fix]);
- name = fix;
- }
-
- nameCache[name] = true;
- return name;
- };
+ // ### Icon.getName
+ //
+ // Return a unique name. If the name is already in the nameCache,
+ // append a value until a unique name is found.
+ //
+ // @param {String} name
+ // @return {String}
+ Icon.getName = function (name) {
+ var i = 1, fix;
+
+ name = name.replace(/[\s.]+/gi, "-").replace(/[^a-z0-9\-]/gi, "_");
+
+ if (nameCache[name]) {
+ do {
+ fix = name + "-" + i++;
+ } while (nameCache[fix]);
+ name = fix;
+ }
- // ### Stitches.Icon.clearNameCache
- //
- // Clear the name cache. If a name is passed in, only clear that key
- //
- // @param {String} name
- // @return {String}
- Stitches.Icon.clearNameCache = function (name) {
- if (name) {
- delete nameCache[name];
- } else {
- nameCache = {};
- }
- };
+ nameCache[name] = true;
+ return name;
+ };
+
+ // ### Icon.clearNameCache
+ //
+ // Clear the name cache. If a name is passed in, only clear that key
+ //
+ // @param {String} name
+ // @return {String}
+ Icon.clearNameCache = function (name) {
+ if (name) {
+ delete nameCache[name];
+ } else {
+ nameCache = {};
+ }
+ };
+
+ /* return constructor */
+ return Icon;
+ })();
})(window, Stitches);/* Simple JavaScript Templating
John Resig - http://ejohn.org/ - MIT Licensed */
@@ -564,6 +583,10 @@
// Holds all DOM interaction methods
Stitches.Page = (function () {
+ /* shortcut */
+ var S = window.Stitches;
+
+ /* true when the widget has rendered */
var rendered = false;
return {
@@ -573,16 +596,16 @@
//
// @return {jqXHR}
fetchTemplates: function () {
- return $.get(Stitches.settings.jsdir + "/stitches.html", function (html) {
+ return $.get(S.settings.jsdir + "/stitches.html", function (html) {
$("body").append(html);
- Stitches.Page.templates = {
- stitches: Stitches.tmpl("stitches_tmpl"),
- icon: Stitches.tmpl("stitches_icon_tmpl")
+ S.Page.templates = {
+ stitches: S.tmpl("stitches_tmpl"),
+ icon: S.tmpl("stitches_icon_tmpl")
};
/* notify */
- Stitches.pub("page.templates.done");
+ S.pub("page.templates.done");
});
},
@@ -590,37 +613,37 @@
//
// Creates the stitches widget and content
render: function () {
- var $div = $(Stitches.Page.templates.stitches({}));
- $div.appendTo(Stitches.Page.$elem);
+ var $div = $(S.Page.templates.stitches({}));
+ $div.appendTo(S.Page.$elem);
// set dom element references
- Stitches.Page.$stitches = $(".stitches", Stitches.Page.$elem);
- Stitches.Page.$drawer = $(".drawer", Stitches.Page.$elem);
- Stitches.Page.$dropbox = $(".dropbox", Stitches.Page.$elem);
- Stitches.Page.$droplabel = $(".droplabel", Stitches.Page.$elem);
- Stitches.Page.$filelist = $(".filelist", Stitches.Page.$elem);
- Stitches.Page.$buttons = $(".buttons", Stitches.Page.$elem);
- Stitches.Page.buttons = {
- $generate: $("a.generate", Stitches.Page.$buttons),
- $clear: $("a.clear", Stitches.Page.$buttons),
- $sprite: $("a.dlsprite", Stitches.Page.$buttons),
- $stylesheet: $("a.dlstylesheet", Stitches.Page.$buttons)
+ S.Page.$stitches = $(".stitches", S.Page.$elem);
+ S.Page.$drawer = $(".drawer", S.Page.$elem);
+ S.Page.$dropbox = $(".dropbox", S.Page.$elem);
+ S.Page.$droplabel = $(".droplabel", S.Page.$elem);
+ S.Page.$filelist = $(".filelist", S.Page.$elem);
+ S.Page.$buttons = $(".buttons", S.Page.$elem);
+ S.Page.buttons = {
+ $generate: $("a.generate", S.Page.$buttons),
+ $clear: $("a.clear", S.Page.$buttons),
+ $sprite: $("a.dlsprite", S.Page.$buttons),
+ $stylesheet: $("a.dlstylesheet", S.Page.$buttons)
};
// set options
- Stitches.Page.$options = $(".options", Stitches.Page.$elem);
- Stitches.Page.inputs = {
- $prefix: $("input[name=prefix]", Stitches.Page.$options),
- $padding: $("input[name=padding]", Stitches.Page.$options),
- $dataURI: $("input[name=dataURI]", Stitches.Page.$options)
+ S.Page.$options = $(".options", S.Page.$elem);
+ S.Page.inputs = {
+ $prefix: $("input[name=prefix]", S.Page.$options),
+ $padding: $("input[name=padding]", S.Page.$options),
+ $dataURI: $("input[name=dataURI]", S.Page.$options)
};
- Stitches.Page.inputs.$prefix.val(Stitches.settings.prefix);
- Stitches.Page.inputs.$padding.val(Stitches.settings.padding);
- Stitches.Page.inputs.$dataURI.filter("[value=" + Stitches.settings.dataURI + "]").attr("checked", true);
+ S.Page.inputs.$prefix.val(S.settings.prefix);
+ S.Page.inputs.$padding.val(S.settings.padding);
+ S.Page.inputs.$dataURI.filter("[value=" + S.settings.dataURI + "]").attr("checked", true);
/* notify */
rendered = true;
- Stitches.pub("page.render.done");
+ S.pub("page.render.done");
},
// ## errorHandler
@@ -628,7 +651,7 @@
// Handles all error messages
errorHandler: function (e) {
if (rendered) {
- Stitches.Page.$droplabel.html("× " + e.message).addClass("error");
+ S.Page.$droplabel.html("× " + e.message).addClass("error");
}
throw e;
},
@@ -637,12 +660,12 @@
//
// Handles all subscriptions
subscribe: function () {
- var buttons = Stitches.Page.buttons;
- var $droplabel = Stitches.Page.$droplabel;
+ var buttons = S.Page.buttons;
+ var $droplabel = S.Page.$droplabel;
/* handle drop label and buttons on queue length changes */
- Stitches.sub("file.icon.done", function (icon) {
- if (Stitches.iconQueue.length === 1) {
+ S.sub("file.icon.done", function (icon) {
+ if (S.iconQueue.length === 1) {
$droplabel.fadeOut("fast");
buttons.$generate.removeClass("disabled");
buttons.$clear.removeClass("disabled");
@@ -650,8 +673,8 @@
buttons.$sprite.addClass("disabled");
buttons.$stylesheet.addClass("disabled");
});
- Stitches.sub("file.remove.done", function (icon) {
- if (Stitches.iconQueue.length < 1) {
+ S.sub("file.remove.done", function (icon) {
+ if (S.iconQueue.length < 1) {
$droplabel.fadeIn("fast");
buttons.$generate.addClass("disabled");
buttons.$clear.addClass("disabled");
@@ -661,7 +684,7 @@
});
/* handle sprite and stylesheet generation */
- Stitches.sub("sprite.generate.done", function (sprite, stylesheet) {
+ S.sub("sprite.generate.done", function (sprite, stylesheet) {
buttons.$sprite.attr("href", sprite).removeClass("disabled");
buttons.$stylesheet.attr("href", stylesheet).removeClass("disabled");
});
@@ -677,34 +700,34 @@
//
// Bind all of the event listeners for drag and drop
bindDragAndDrop: function () {
- var dropbox = Stitches.Page.$dropbox.get(0);
- dropbox.addEventListener("dragenter", Stitches.Page._dragStart, false);
- dropbox.addEventListener("dragleave", Stitches.Page._dragStop, false);
- dropbox.addEventListener("dragexit", Stitches.Page._dragStop, false);
- dropbox.addEventListener("dragover", Stitches.Page._noop, false);
- dropbox.addEventListener("drop", Stitches.Page._drop, false);
+ var dropbox = S.Page.$dropbox.get(0);
+ dropbox.addEventListener("dragenter", S.Page._dragStart, false);
+ dropbox.addEventListener("dragleave", S.Page._dragStop, false);
+ dropbox.addEventListener("dragexit", S.Page._dragStop, false);
+ dropbox.addEventListener("dragover", S.Page._noop, false);
+ dropbox.addEventListener("drop", S.Page._drop, false);
},
// #### *Private drag and drop methods*
_dragStart: function (e) {
- Stitches.Page.$dropbox.addClass("dropping");
+ S.Page.$dropbox.addClass("dropping");
},
_dragStop: function (e) {
if ($(e.target).parents(".dropbox").length === 0) {
- Stitches.Page.$dropbox.removeClass("dropping");
+ S.Page.$dropbox.removeClass("dropping");
}
},
_drop: function (e) {
e.stopPropagation();
e.preventDefault();
- Stitches.Page.$dropbox.removeClass("dropping");
+ S.Page.$dropbox.removeClass("dropping");
var evt = e || window.event;
var files = (evt.files || evt.dataTransfer.files);
if (files.length > 0) {
- Stitches.pub("page.drop.done", files);
+ S.pub("page.drop.done", files);
}
},
@@ -712,21 +735,21 @@
//
// Bind all of the event listeners for buttons
bindButtons: function () {
- var $elem = Stitches.Page.$elem;
- $elem.delegate("a.disabled", "click", Stitches.Page._noop);
- $elem.delegate("a.generate", "click", Stitches.Page._generate);
- $elem.delegate("a.remove", "click", Stitches.Page._removeFile);
- $elem.delegate("a.clear", "click", Stitches.Page._removeAllFiles);
+ var $elem = S.Page.$elem;
+ $elem.delegate("a.disabled", "click", S.Page._noop);
+ $elem.delegate("a.generate", "click", S.Page._generate);
+ $elem.delegate("a.remove", "click", S.Page._removeFile);
+ $elem.delegate("a.clear", "click", S.Page._removeAllFiles);
},
// ### bindCabinet
//
// Bind all of the event listeners for the cabinet
bindCabinet: function () {
- var $elem = Stitches.Page.$elem;
- var $stitches = Stitches.Page.$stitches;
- var $options = Stitches.Page.$options;
- var $drawer = Stitches.Page.$drawer;
+ var $elem = S.Page.$elem;
+ var $stitches = S.Page.$stitches;
+ var $options = S.Page.$options;
+ var $drawer = S.Page.$drawer;
var $cabinet = $("form.cabinet", $drawer);
var $input = $("input.files", $drawer);
@@ -740,7 +763,7 @@
// on change event, use the drop event to handle files
$input.bind("change", function () {
if (this.files.length) {
- Stitches.pub("page.drop.done", this.files);
+ S.pub("page.drop.done", this.files);
}
$cabinet.trigger("reset");
});
@@ -755,8 +778,8 @@
//
// Bind all of the event listeners for the options panel
bindOptions: function () {
- var $options = Stitches.Page.$options;
- var buttons = Stitches.Page.buttons;
+ var $options = S.Page.$options;
+ var buttons = S.Page.buttons;
$options.delegate("a.close-options", "click", function () {
$options.fadeOut();
@@ -768,34 +791,34 @@
});
$options.delegate("input[name=prefix]", "change", function () {
- Stitches.settings.prefix = Stitches.Page.inputs.$prefix.val();
+ S.settings.prefix = S.Page.inputs.$prefix.val();
});
$options.delegate("input[name=padding]", "change", function () {
- var padding = Stitches.Page.inputs.$padding.val();
- Stitches.settings.padding = +padding;
- Stitches.Page.updateIconDimensions();
+ var padding = S.Page.inputs.$padding.val();
+ S.settings.padding = +padding;
+ S.Page.updateIconDimensions();
});
$options.delegate("input[name=dataURI]", "change", function () {
- var dataURI = Stitches.Page.inputs.$dataURI.filter(":checked").val();
- Stitches.settings.dataURI = dataURI === "true" ? true : false;
+ var dataURI = S.Page.inputs.$dataURI.filter(":checked").val();
+ S.settings.dataURI = dataURI === "true" ? true : false;
});
},
// #### *Private button methods*
_generate: function (e) {
/* [].concat to copy array */
- Stitches.pub("sprite.generate", [].concat(Stitches.iconQueue));
+ S.pub("sprite.generate", [].concat(S.iconQueue));
},
_removeFile: function (e) {
var icon = $(this).parent("li").data("icon");
- Stitches.pub("file.unqueue", icon);
+ S.pub("file.unqueue", icon);
},
_removeAllFiles: function (e) {
- Stitches.pub("file.unqueue.all");
+ S.pub("file.unqueue.all");
},
// ### addIcon
@@ -803,9 +826,9 @@
// Add an icon to the file list
// @param {Icon} icon
addIcon: function (icon) {
- $(Stitches.Page.templates.icon(icon))
+ $(S.Page.templates.icon(icon))
.data("icon", icon)
- .appendTo(Stitches.Page.$filelist)
+ .appendTo(S.Page.$filelist)
.fadeIn("fast");
},
@@ -814,7 +837,7 @@
// Remove an icon from the file list
// @param {Icon} icon
removeIcon: function (icon) {
- Stitches.Page.$filelist.find("li")
+ S.Page.$filelist.find("li")
.filter(function () {
return $(this).data("icon") === icon;
})
@@ -826,9 +849,9 @@
//
// Update icon dimensions after changing padding setting
updateIconDimensions: function () {
- var padding = Stitches.settings.padding;
+ var padding = S.settings.padding;
- $.each(Stitches.iconQueue, function (i, icon) {
+ $.each(S.iconQueue, function (i, icon) {
icon.width = icon.image.width + padding;
icon.height = icon.image.height + padding;
});
@@ -853,6 +876,9 @@
// Holds all File procesing methods
Stitches.File = (function () {
+ /* shortcut */
+ var S = window.Stitches;
+
/* track files to read */
var readQueue = [];
@@ -866,7 +892,7 @@
$.each(files, function (i, file) {
if (/jpeg|png|gif/.test(file.type)) {
readQueue.push(file);
- Stitches.pub("file.queue.done", file);
+ S.pub("file.queue.done", file);
}
});
},
@@ -884,15 +910,15 @@
reader = new FileReader();
reader.onloadend = function (e) {
/* create an icon and add to the icon queue */
- var icon = new Stitches.Icon(file.name, e.target.result);
- Stitches.iconQueue.push(icon);
+ var icon = new S.Icon(file.name, e.target.result);
+ S.iconQueue.push(icon);
/* notify */
- Stitches.pub("file.icon.done", icon);
+ S.pub("file.icon.done", icon);
};
reader.readAsDataURL(file);
} catch (e) {
- Stitches.pub("page.error", e);
+ S.pub("page.error", e);
}
}
},
@@ -904,23 +930,23 @@
// @param {Icon} icon
unqueueIcon: function (icon) {
/* remove the icon from the queue */
- Stitches.iconQueue = $.grep(Stitches.iconQueue, function (item) {
+ S.iconQueue = $.grep(S.iconQueue, function (item) {
return item !== icon;
});
- Stitches.Icon.clearNameCache(icon.name);
+ S.Icon.clearNameCache(icon.name);
/* notify */
- Stitches.pub("file.remove.done", icon);
+ S.pub("file.remove.done", icon);
},
// ### unqueueAllIcons
//
// Clear all icons from the queue
unqueueAllIcons: function () {
- $.each(Stitches.iconQueue, function (i, icon) {
- Stitches.File.unqueueIcon(icon);
+ $.each(S.iconQueue, function (i, icon) {
+ S.File.unqueueIcon(icon);
});
- Stitches.Icon.clearNameCache();
+ S.Icon.clearNameCache();
}
};
})();
diff --git a/build/js/stitches.html b/build/js/stitches.html
index b2870d5c..cc7fc12f 100644
--- a/build/js/stitches.html
+++ b/build/js/stitches.html
@@ -27,10 +27,10 @@ options
diff --git a/dist/stitches-0.5.16.zip b/dist/stitches-0.5.16.zip
new file mode 100644
index 0000000000000000000000000000000000000000..2bfbe92d583b0f15bbe54109d8b5ac77d094b635
GIT binary patch
literal 95049
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