| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- DrawingBoard.Utils = {};
- /*!
- * Tim (lite)
- * github.com/premasagar/tim
- *//*
- A tiny, secure JavaScript micro-templating script.
- */
- DrawingBoard.Utils.tpl = (function(){
- "use strict";
- var start = "{{",
- end = "}}",
- path = "[a-z0-9_][\\.a-z0-9_]*", // e.g. config.person.name
- pattern = new RegExp(start + "\\s*("+ path +")\\s*" + end, "gi"),
- undef;
- return function(template, data){
- // Merge data into the template string
- return template.replace(pattern, function(tag, token){
- var path = token.split("."),
- len = path.length,
- lookup = data,
- i = 0;
- for (; i < len; i++){
- lookup = lookup[path[i]];
- // Property not found
- if (lookup === undef){
- throw "tim: '" + path[i] + "' not found in " + tag;
- }
- // Return the required value
- if (i === len - 1){
- return lookup;
- }
- }
- });
- };
- }());
- /**
- * https://github.com/jeromeetienne/microevent.js
- * MicroEvent - to make any js object an event emitter (server or browser)
- *
- * - pure javascript - server compatible, browser compatible
- * - dont rely on the browser doms
- * - super simple - you get it immediatly, no mistery, no magic involved
- *
- * - create a MicroEventDebug with goodies to debug
- * - make it safer to use
- */
- DrawingBoard.Utils.MicroEvent = function(){};
- DrawingBoard.Utils.MicroEvent.prototype = {
- bind : function(event, fct){
- this._events = this._events || {};
- this._events[event] = this._events[event] || [];
- this._events[event].push(fct);
- },
- unbind : function(event, fct){
- this._events = this._events || {};
- if( event in this._events === false ) return;
- this._events[event].splice(this._events[event].indexOf(fct), 1);
- },
- trigger : function(event /* , args... */){
- this._events = this._events || {};
- if( event in this._events === false ) return;
- for(var i = 0; i < this._events[event].length; i++){
- this._events[event][i].apply(this, Array.prototype.slice.call(arguments, 1));
- }
- }
- };
- //I know.
- DrawingBoard.Utils._boxBorderSize = function($el, withPadding, withMargin, direction) {
- withPadding = !!withPadding || true;
- withMargin = !!withMargin || false;
- var width = 0,
- props;
- if (direction == "width") {
- props = ['border-left-width', 'border-right-width'];
- if (withPadding) props.push('padding-left', 'padding-right');
- if (withMargin) props.push('margin-left', 'margin-right');
- } else {
- props = ['border-top-width', 'border-bottom-width'];
- if (withPadding) props.push('padding-top', 'padding-bottom');
- if (withMargin) props.push('margin-top', 'margin-bottom');
- }
- for (var i = props.length - 1; i >= 0; i--)
- width += parseInt($el.css(props[i]).replace('px', ''), 10);
- return width;
- };
- DrawingBoard.Utils.boxBorderWidth = function($el, withPadding, withMargin) {
- return DrawingBoard.Utils._boxBorderSize($el, withPadding, withMargin, 'width');
- };
- DrawingBoard.Utils.boxBorderHeight = function($el, withPadding, withMargin) {
- return DrawingBoard.Utils._boxBorderSize($el, withPadding, withMargin, 'height');
- };
- DrawingBoard.Utils.isColor = function(string) {
- if (!string || !string.length) return false;
- return (/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i).test(string) || $.inArray(string.substring(0, 3), ['rgb', 'hsl']) !== -1;
- };
- /**
- * Packs an RGB color into a single integer.
- */
- DrawingBoard.Utils.RGBToInt = function(r, g, b) {
- var c = 0;
- c |= (r & 255) << 16;
- c |= (g & 255) << 8;
- c |= (b & 255);
- return c;
- };
- /**
- * Returns informations on the pixel located at (x,y).
- */
- DrawingBoard.Utils.pixelAt = function(image, x, y) {
- var i = (y * image.width + x) * 4;
- var c = DrawingBoard.Utils.RGBToInt(
- image.data[i],
- image.data[i + 1],
- image.data[i + 2]
- );
- return [
- i, // INDEX
- x, // X
- y, // Y
- c // COLOR
- ];
- };
- (function() {
- var lastTime = 0;
- var vendors = ['ms', 'moz', 'webkit', 'o'];
- for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
- window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];
- window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] || window[vendors[x]+'CancelRequestAnimationFrame'];
- }
- }());
|