diff --git a/README.md b/README.md index 3558263..23f694a 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ Add this code to you to your page to enable Clippy.js. - + + + + ``` Usage: Actions diff --git a/build/clippy.js b/build/clippy.js index a787621..3ef6ca6 100644 --- a/build/clippy.js +++ b/build/clippy.js @@ -844,9 +844,14 @@ clippy.Balloon.prototype = { }; -clippy.BASE_PATH = '//s3.amazonaws.com/clippy.js/Agents/'; - -clippy.load = function (name, successCb, failCb) { +clippy.load = function (options, successCb, failCb) { + if(typeof options === 'string') { + var name = options; + clippy.BASE_PATH = '//s3.amazonaws.com/clippy.js/Agents/'; + } else { + var name = options.hasOwnProperty('name') ? options.name : 'Clippy'; + clippy.BASE_PATH = options.hasOwnProperty('path') ? options.path : '//s3.amazonaws.com/clippy.js/Agents/'; + } var path = clippy.BASE_PATH + name; var mapDfd = clippy.load._loadMap(path); @@ -1012,4 +1017,3 @@ clippy.Queue.prototype = { this._progressQueue(); } }; - diff --git a/build/clippy.min.js b/build/clippy.min.js index 9645371..dc8381b 100644 --- a/build/clippy.min.js +++ b/build/clippy.min.js @@ -1 +1,29 @@ -var clippy={};clippy.Agent=function(a,b,c){this.path=a,this._queue=new clippy.Queue($.proxy(this._onQueueEmpty,this)),this._el=$('
').hide(),$(document.body).append(this._el),this._animator=new clippy.Animator(this._el,a,b,c),this._balloon=new clippy.Balloon(this._el),this._setupEvents()},clippy.Agent.prototype={gestureAt:function(a,b){var c=this._getDirection(a,b),d="Gesture"+c,e="Look"+c,f=this.hasAnimation(d)?d:e;return this.play(f)},hide:function(a,b){this._hidden=!0;var c=this._el;this.stop();if(a){this._el.hide(),this.stop(),this.pause(),b&&b();return}return this._playInternal("Hide",function(){c.hide(),this.pause(),b&&b()})},moveTo:function(a,b,c){var d=this._getDirection(a,b),e="Move"+d;c===undefined&&(c=1e3),this._addToQueue(function(d){if(c===0){this._el.css({top:b,left:a}),this.reposition(),d();return}if(!this.hasAnimation(e)){this._el.animate({top:b,left:a},c,d);return}var f=$.proxy(function(e,f){f===clippy.Animator.States.EXITED&&d(),f===clippy.Animator.States.WAITING&&this._el.animate({top:b,left:a},c,$.proxy(function(){this._animator.exitAnimation()},this))},this);this._playInternal(e,f)},this)},_playInternal:function(a,b){this._isIdleAnimation()&&this._idleDfd&&this._idleDfd.state()==="pending"&&this._idleDfd.done($.proxy(function(){this._playInternal(a,b)},this)),this._animator.showAnimation(a,b)},play:function(a,b,c){return this.hasAnimation(a)?(b===undefined&&(b=5e3),this._addToQueue(function(d){var e=!1,f=function(a,b){b===clippy.Animator.States.EXITED&&(e=!0,c&&c(),d())};b&&window.setTimeout($.proxy(function(){if(e)return;this._animator.exitAnimation()},this),b),this._playInternal(a,f)},this),!0):!1},show:function(a){this._hidden=!1;if(a){this._el.show(),this.resume(),this._onQueueEmpty();return}if(this._el.css("top")==="auto"||!this._el.css("left")==="auto"){var b=$(window).width()*.8,c=($(window).height()+$(document).scrollTop())*.8;this._el.css({top:c,left:b})}return this.resume(),this.play("Show")},speak:function(a,b){this._addToQueue(function(c){this._balloon.speak(c,a,b)},this)},closeBalloon:function(){this._balloon.hide()},delay:function(a){a=a||250,this._addToQueue(function(b){this._onQueueEmpty(),window.setTimeout(b,a)})},stopCurrent:function(){this._animator.exitAnimation(),this._balloon.close()},stop:function(){this._queue.clear(),this._animator.exitAnimation(),this._balloon.hide()},hasAnimation:function(a){return this._animator.hasAnimation(a)},animations:function(){return this._animator.animations()},animate:function(){var a=this.animations(),b=a[Math.floor(Math.random()*a.length)];return b.indexOf("Idle")===0?this.animate():this.play(b)},_getDirection:function(a,b){var c=this._el.offset(),d=this._el.height(),e=this._el.width(),f=c.left+e/2,g=c.top+d/2,h=g-b,i=f-a,j=Math.round(180*Math.atan2(h,i)/Math.PI);return-45<=j&&j<45?"Right":45<=j&&j<135?"Up":135<=j&&j<=180||-180<=j&&j<-135?"Left":-135<=j&&j<-45?"Down":"Top"},_onQueueEmpty:function(){if(this._hidden||this._isIdleAnimation())return;var a=this._getIdleAnimation();this._idleDfd=$.Deferred(),this._animator.showAnimation(a,$.proxy(this._onIdleComplete,this))},_onIdleComplete:function(a,b){b===clippy.Animator.States.EXITED&&this._idleDfd.resolve()},_isIdleAnimation:function(){var a=this._animator.currentAnimationName;return a&&a.indexOf("Idle")===0},_getIdleAnimation:function(){var a=this.animations(),b=[];for(var c=0;ce&&(h=e-b-j),i-j<0?i=j:i+c+j>d&&(i=d-c-j),this._el.css({left:i,top:h}),this._balloon.reposition()},_onMouseDown:function(a){a.preventDefault(),this._startDrag(a)},_startDrag:function(a){this.pause(),this._balloon.hide(!0),this._offset=this._calculateClickOffset(a),this._moveHandle=$.proxy(this._dragMove,this),this._upHandle=$.proxy(this._finishDrag,this),$(window).on("mousemove",this._moveHandle),$(window).on("mouseup",this._upHandle),this._dragUpdateLoop=window.setTimeout($.proxy(this._updateLocation,this),10)},_calculateClickOffset:function(a){var b=a.pageX,c=a.pageY,d=this._el.offset();return{top:c-d.top,left:b-d.left}},_updateLocation:function(){this._el.css({top:this._targetY,left:this._taregtX}),this._dragUpdateLoop=window.setTimeout($.proxy(this._updateLocation,this),10)},_dragMove:function(a){a.preventDefault();var b=a.clientX-this._offset.left,c=a.clientY-this._offset.top;this._taregtX=b,this._targetY=c},_finishDrag:function(){window.clearTimeout(this._dragUpdateLoop),$(window).off("mousemove",this._moveHandle),$(window).off("mouseup",this._upHandle),this._balloon.show(),this.reposition(),this.resume()},_addToQueue:function(a,b){b&&(a=$.proxy(a,b)),this._queue.queue(a)},pause:function(){this._animator.pause(),this._balloon.pause()},resume:function(){this._animator.resume(),this._balloon.resume()}},clippy.Animator=function(a,b,c,d){this._el=a,this._data=c,this._path=b,this._currentFrameIndex=0,this._currentFrame=undefined,this._exiting=!1,this._currentAnimation=undefined,this._endCallback=undefined,this._started=!1,this._sounds={},this.currentAnimationName=undefined,this.preloadSounds(d),this._overlays=[this._el];var e=this._el;this._setupElement(this._el);for(var f=1;f"));e.append(g),this._overlays.push(g),e=g}},clippy.Animator.prototype={_setupElement:function(a){var b=this._data.framesize;return a.css("display","none"),a.css({width:b[0],height:b[1]}),a.css("background","url('"+this._path+"/map.png') no-repeat"),a},animations:function(){var a=[],b=this._data.animations;for(var c in b)a.push(c);return a},preloadSounds:function(a){for(var b=0;b=this._currentAnimation.frames.length-1},_step:function(){if(!this._currentAnimation)return;var a=Math.min(this._getNextAnimationFrame(),this._currentAnimation.frames.length-1),b=!this._currentFrame||this._currentFrameIndex!==a;this._currentFrameIndex=a;if(!this._atLastFrame()||!this._currentAnimation.useExitBranching)this._currentFrame=this._currentAnimation.frames[this._currentFrameIndex];this._draw(),this._playSound(),this._loop=window.setTimeout($.proxy(this._step,this),this._currentFrame.duration),this._endCallback&&b&&this._atLastFrame()&&(this._currentAnimation.useExitBranching&&!this._exiting?this._endCallback(this.currentAnimationName,clippy.Animator.States.WAITING):this._endCallback(this.currentAnimationName,clippy.Animator.States.EXITED))},pause:function(){window.clearTimeout(this._loop)},resume:function(){this._step()}},clippy.Animator.States={WAITING:1,EXITED:0},clippy.Balloon=function(a){this._targetEl=a,this._hidden=!0,this._setup()},clippy.Balloon.prototype={WORD_SPEAK_TIME:200,CLOSE_BALLOON_DELAY:2e3,_setup:function(){this._balloon=$('
').hide(),this._content=this._balloon.find(".clippy-content"),$(document.body).append(this._balloon)},reposition:function(){var a=["top-left","top-right","bottom-left","bottom-right"];for(var b=0;be||i+c+j>d?!0:!1},speak:function(a,b,c){this._hidden=!1,this.show();var d=this._content;d.height("auto"),d.width("auto"),d.text(b),d.height(d.height()),d.width(d.width()),d.text(""),this.reposition(),this._complete=a,this._sayWords(b,c,a)},show:function(){if(this._hidden)return;this._balloon.show()},hide:function(a){if(a){this._balloon.hide();return}this._hiding=window.setTimeout($.proxy(this._finishHideBalloon,this),this.CLOSE_BALLOON_DELAY)},_finishHideBalloon:function(){if(this._active)return;this._balloon.hide(),this._hidden=!0,this._hiding=null},_sayWords:function(a,b,c){this._active=!0,this._hold=b;var d=a.split(/[^\S-]/),e=this.WORD_SPEAK_TIME,f=this._content,g=1;this._addWord=$.proxy(function(){if(!this._active)return;g>d.length?(this._active=!1,this._hold||(c(),this.hide())):(f.text(d.slice(0,g).join(" ")),g++,this._loop=window.setTimeout($.proxy(this._addWord,this),e))},this),this._addWord()},close:function(){this._active?this._hold=!1:this._hold&&this._complete()},pause:function(){window.clearTimeout(this._loop),this._hiding&&(window.clearTimeout(this._hiding),this._hiding=null)},resume:function(){this._addWord&&this._addWord(),this._hiding=window.setTimeout($.proxy(this._finishHideBalloon,this),this.CLOSE_BALLOON_DELAY)}},clippy.BASE_PATH="//s3.amazonaws.com/clippy.js/Agents/",clippy.load=function(a,b,c){var d=clippy.BASE_PATH+a,e=clippy.load._loadMap(d),f=clippy.load._loadAgent(a,d),g=clippy.load._loadSounds(a,d),h;f.done(function(a){h=a});var i;g.done(function(a){i=a});var j=function(){var a=new clippy.Agent(d,h,i);b(a)};$.when(e,f,g).done(j).fail(c)},clippy.load._maps={},clippy.load._loadMap=function(a){var b=clippy.load._maps[a];if(b)return b;b=clippy.load._maps[a]=$.Deferred();var c=a+"/map.png",d=new Image;return d.onload=b.resolve,d.onerror=b.reject,d.setAttribute("src",c),b.promise()},clippy.load._sounds={},clippy.load._loadSounds=function(a,b){var c=clippy.load._sounds[a];if(c)return c;c=clippy.load._sounds[a]=$.Deferred();var d=document.createElement("audio"),e=!!d.canPlayType&&""!=d.canPlayType("audio/mpeg"),f=!!d.canPlayType&&""!=d.canPlayType('audio/ogg; codecs="vorbis"');if(!e&&!f)c.resolve({});else{var g=b+(e?"/sounds-mp3.js":"/sounds-ogg.js");clippy.load._loadScript(g)}return c.promise()},clippy.load._data={},clippy.load._loadAgent=function(a,b){var c=clippy.load._data[a];if(c)return c;c=clippy.load._getAgentDfd(a);var d=b+"/agent.js";return clippy.load._loadScript(d),c.promise()},clippy.load._loadScript=function(a){var b=document.createElement("script");b.setAttribute("src",a),b.setAttribute("async","async"),b.setAttribute("type","text/javascript"),document.head.appendChild(b)},clippy.load._getAgentDfd=function(a){var b=clippy.load._data[a];return b||(b=clippy.load._data[a]=$.Deferred()),b},clippy.ready=function(a,b){var c=clippy.load._getAgentDfd(a);c.resolve(b)},clippy.soundsReady=function(a,b){var c=clippy.load._sounds[a];c||(c=clippy.load._sounds[a]=$.Deferred()),c.resolve(b)},clippy.Queue=function(a){this._queue=[],this._onEmptyCallback=a},clippy.Queue.prototype={queue:function(a){this._queue.push(a),this._queue.length===1&&!this._active&&this._progressQueue()},_progressQueue:function(){if(!this._queue.length){this._onEmptyCallback();return}var a=this._queue.shift();this._active=!0;var b=$.proxy(this.next,this);a(b)},clear:function(){this._queue=[]},next:function(){this._active=!1,this._progressQueue()}} +var clippy={Agent:function(a,b,c){this.path=a;this._queue=new clippy.Queue($.proxy(this._onQueueEmpty,this));this._el=$('
').hide();$(document.body).append(this._el);this._animator=new clippy.Animator(this._el,a,b,c);this._balloon=new clippy.Balloon(this._el);this._setupEvents()}}; +clippy.Agent.prototype={gestureAt:function(a,b){var c=this._getDirection(a,b),d="Gesture"+c,c="Look"+c,d=this.hasAnimation(d)?d:c;return this.play(d)},hide:function(a,b){this._hidden=!0;var c=this._el;this.stop();if(a)this._el.hide(),this.stop(),this.pause(),b&&b();else return this._playInternal("Hide",function(){c.hide();this.pause();b&&b()})},moveTo:function(a,b,c){var d="Move"+this._getDirection(a,b);void 0===c&&(c=1E3);this._addToQueue(function(e){if(0===c)this._el.css({top:b,left:a}),this.reposition(), +e();else if(this.hasAnimation(d)){var f=$.proxy(function(d,f){f===clippy.Animator.States.EXITED&&e();f===clippy.Animator.States.WAITING&&this._el.animate({top:b,left:a},c,$.proxy(function(){this._animator.exitAnimation()},this))},this);this._playInternal(d,f)}else this._el.animate({top:b,left:a},c,e)},this)},_playInternal:function(a,b){this._isIdleAnimation()&&this._idleDfd&&"pending"===this._idleDfd.state()&&this._idleDfd.done($.proxy(function(){this._playInternal(a,b)},this));this._animator.showAnimation(a, +b)},play:function(a,b,c){if(!this.hasAnimation(a))return!1;void 0===b&&(b=5E3);this._addToQueue(function(d){var e=!1;b&&window.setTimeout($.proxy(function(){e||this._animator.exitAnimation()},this),b);this._playInternal(a,function(a,b){b===clippy.Animator.States.EXITED&&(e=!0,c&&c(),d())})},this);return!0},show:function(a){this._hidden=!1;if(a)this._el.show(),this.resume(),this._onQueueEmpty();else{if("auto"===this._el.css("top")||"auto"===!this._el.css("left")){a=.8*$(window).width();var b=.8*($(window).height()+ +$(document).scrollTop());this._el.css({top:b,left:a})}this.resume();return this.play("Show")}},speak:function(a,b){this._addToQueue(function(c){this._balloon.speak(c,a,b)},this)},closeBalloon:function(){this._balloon.hide()},delay:function(a){a=a||250;this._addToQueue(function(b){this._onQueueEmpty();window.setTimeout(b,a)})},stopCurrent:function(){this._animator.exitAnimation();this._balloon.close()},stop:function(){this._queue.clear();this._animator.exitAnimation();this._balloon.hide()},hasAnimation:function(a){return this._animator.hasAnimation(a)}, +animations:function(){return this._animator.animations()},animate:function(){var a=this.animations(),a=a[Math.floor(Math.random()*a.length)];return 0===a.indexOf("Idle")?this.animate():this.play(a)},_getDirection:function(a,b){var c=this._el.offset(),d=this._el.height(),e=this._el.width(),c=Math.round(180*Math.atan2(c.top+d/2-b,c.left+e/2-a)/Math.PI);return-45<=c&&45>c?"Right":45<=c&&135>c?"Up":135<=c&&180>=c||-180<=c&&-135>c?"Left":-135<=c&&-45>c?"Down":"Top"},_onQueueEmpty:function(){if(!this._hidden&& +!this._isIdleAnimation()){var a=this._getIdleAnimation();this._idleDfd=$.Deferred();this._animator.showAnimation(a,$.proxy(this._onIdleComplete,this))}},_onIdleComplete:function(a,b){b===clippy.Animator.States.EXITED&&this._idleDfd.resolve()},_isIdleAnimation:function(){var a=this._animator.currentAnimationName;return a&&0===a.indexOf("Idle")},_getIdleAnimation:function(){for(var a=this.animations(),b=[],c=0;cf-5?f=5:f+b+5>e&&(f=e-b-5);0>a-5?a=5:a+c+5>d&&(a=d-c-5);this._el.css({left:a,top:f});this._balloon.reposition()}},_onMouseDown:function(a){a.preventDefault();this._startDrag(a)},_startDrag:function(a){this.pause();this._balloon.hide(!0);this._offset=this._calculateClickOffset(a);this._moveHandle=$.proxy(this._dragMove,this);this._upHandle=$.proxy(this._finishDrag,this);$(window).on("mousemove",this._moveHandle);$(window).on("mouseup",this._upHandle);this._dragUpdateLoop=window.setTimeout($.proxy(this._updateLocation, +this),10)},_calculateClickOffset:function(a){var b=a.pageX;a=a.pageY;var c=this._el.offset();return{top:a-c.top,left:b-c.left}},_updateLocation:function(){this._el.css({top:this._targetY,left:this._taregtX});this._dragUpdateLoop=window.setTimeout($.proxy(this._updateLocation,this),10)},_dragMove:function(a){a.preventDefault();var b=a.clientY-this._offset.top;this._taregtX=a.clientX-this._offset.left;this._targetY=b},_finishDrag:function(){window.clearTimeout(this._dragUpdateLoop);$(window).off("mousemove", +this._moveHandle);$(window).off("mouseup",this._upHandle);this._balloon.show();this.reposition();this.resume()},_addToQueue:function(a,b){b&&(a=$.proxy(a,b));this._queue.queue(a)},pause:function(){this._animator.pause();this._balloon.pause()},resume:function(){this._animator.resume();this._balloon.resume()}}; +clippy.Animator=function(a,b,c,d){this._el=a;this._data=c;this._path=b;this._currentFrameIndex=0;this._currentFrame=void 0;this._exiting=!1;this._endCallback=this._currentAnimation=void 0;this._started=!1;this._sounds={};this.currentAnimationName=void 0;this.preloadSounds(d);this._overlays=[this._el];a=this._el;this._setupElement(this._el);for(b=1;b")),a.append(c),this._overlays.push(c),a=c}; +clippy.Animator.prototype={_setupElement:function(a){var b=this._data.framesize;a.css("display","none");a.css({width:b[0],height:b[1]});a.css("background","url('"+this._path+"/map.png') no-repeat");return a},animations:function(){var a=[],b=this._data.animations,c;for(c in b)a.push(c);return a},preloadSounds:function(a){for(var b=0;b=this._currentAnimation.frames.length-1},_step:function(){if(this._currentAnimation){var a=Math.min(this._getNextAnimationFrame(),this._currentAnimation.frames.length-1),b=!this._currentFrame||this._currentFrameIndex!==a;this._currentFrameIndex=a;this._atLastFrame()&&this._currentAnimation.useExitBranching||(this._currentFrame=this._currentAnimation.frames[this._currentFrameIndex]);this._draw();this._playSound();this._loop=window.setTimeout($.proxy(this._step, +this),this._currentFrame.duration);this._endCallback&&b&&this._atLastFrame()&&(this._currentAnimation.useExitBranching&&!this._exiting?this._endCallback(this.currentAnimationName,clippy.Animator.States.WAITING):this._endCallback(this.currentAnimationName,clippy.Animator.States.EXITED))}},pause:function(){window.clearTimeout(this._loop)},resume:function(){this._step()}};clippy.Animator.States={WAITING:1,EXITED:0};clippy.Balloon=function(a){this._targetEl=a;this._hidden=!0;this._setup()}; +clippy.Balloon.prototype={WORD_SPEAK_TIME:320,CLOSE_BALLOON_DELAY:2E3,_setup:function(){this._balloon=$('
').hide();this._content=this._balloon.find(".clippy-content");$(document.body).append(this._balloon)},reposition:function(){for(var a=["top-left","top-right","bottom-left","bottom-right"],b=0;bf-5||0>a-5||f+b+5>e||a+c+5>d?!0:!1},speak:function(a,b,c){this._hidden=!1;this.show();var d=this._content;d.height("auto");d.width("auto"); +d.text(b);d.height(d.height());d.width(d.width());d.text("");this.reposition();this._complete=a;this._sayWords(b,c,a)},show:function(){this._hidden||this._balloon.show()},hide:function(a){a?this._balloon.hide():this._hiding=window.setTimeout($.proxy(this._finishHideBalloon,this),this.CLOSE_BALLOON_DELAY)},_finishHideBalloon:function(){this._active||(this._balloon.hide(),this._hidden=!0,this._hiding=null)},_sayWords:function(a,b,c){this._active=!0;this._hold=b;var d=a.split(/[^\S-]/),e=this.WORD_SPEAK_TIME, +f=this._content,g=1;this._addWord=$.proxy(function(){this._active&&(g>d.length?(this._active=!1,this._hold||(c(),this.hide())):(f.text(d.slice(0,g).join(" ")),g++,this._loop=window.setTimeout($.proxy(this._addWord,this),e)))},this);this._addWord()},close:function(){this._active?this._hold=!1:this._hold&&this._complete()},pause:function(){window.clearTimeout(this._loop);this._hiding&&(window.clearTimeout(this._hiding),this._hiding=null)},resume:function(){this._addWord&&this._addWord();this._hiding= +window.setTimeout($.proxy(this._finishHideBalloon,this),this.CLOSE_BALLOON_DELAY)}}; +clippy.load=function(a,b,c){if("string"===typeof a){var d=a;clippy.BASE_PATH="//s3.amazonaws.com/clippy.js/Agents/"}else d=a.hasOwnProperty("name")?a.name:"Clippy",clippy.BASE_PATH=a.hasOwnProperty("path")?a.path:"//s3.amazonaws.com/clippy.js/Agents/";var e=clippy.BASE_PATH+d;a=clippy.load._loadMap(e);var f=clippy.load._loadAgent(d,e),d=clippy.load._loadSounds(d,e),g;f.done(function(a){g=a});var h;d.done(function(a){h=a});$.when(a,f,d).done(function(){var a=new clippy.Agent(e,g,h);b(a)}).fail(c)}; +clippy.load._maps={};clippy.load._loadMap=function(a){var b=clippy.load._maps[a];if(b)return b;b=clippy.load._maps[a]=$.Deferred();a+="/map.png";var c=new Image;c.onload=b.resolve;c.onerror=b.reject;c.setAttribute("src",a);return b.promise()};clippy.load._sounds={}; +clippy.load._loadSounds=function(a,b){var c=clippy.load._sounds[a];if(c)return c;var c=clippy.load._sounds[a]=$.Deferred(),d=document.createElement("audio"),e=!!d.canPlayType&&""!=d.canPlayType("audio/mpeg"),d=!!d.canPlayType&&""!=d.canPlayType('audio/ogg; codecs="vorbis"');e||d?clippy.load._loadScript(b+(e?"/sounds-mp3.js":"/sounds-ogg.js")):c.resolve({});return c.promise()};clippy.load._data={}; +clippy.load._loadAgent=function(a,b){var c=clippy.load._data[a];if(c)return c;c=clippy.load._getAgentDfd(a);clippy.load._loadScript(b+"/agent.js");return c.promise()};clippy.load._loadScript=function(a){var b=document.createElement("script");b.setAttribute("src",a);b.setAttribute("async","async");b.setAttribute("type","text/javascript");document.head.appendChild(b)};clippy.load._getAgentDfd=function(a){var b=clippy.load._data[a];b||(b=clippy.load._data[a]=$.Deferred());return b}; +clippy.ready=function(a,b){clippy.load._getAgentDfd(a).resolve(b)};clippy.soundsReady=function(a,b){var c=clippy.load._sounds[a];c||(c=clippy.load._sounds[a]=$.Deferred());c.resolve(b)};clippy.Queue=function(a){this._queue=[];this._onEmptyCallback=a}; +clippy.Queue.prototype={queue:function(a){this._queue.push(a);1!==this._queue.length||this._active||this._progressQueue()},_progressQueue:function(){if(this._queue.length){var a=this._queue.shift();this._active=!0;var b=$.proxy(this.next,this);a(b)}else this._onEmptyCallback()},clear:function(){this._queue=[]},next:function(){this._active=!1;this._progressQueue()}}; diff --git a/demo/index.html b/demo/index.html new file mode 100644 index 0000000..634723a --- /dev/null +++ b/demo/index.html @@ -0,0 +1,82 @@ + + + Clippy.js Demonstration + + + + + + + + + + + diff --git a/src/load.js b/src/load.js index 2664174..3c1e8a8 100644 --- a/src/load.js +++ b/src/load.js @@ -1,6 +1,12 @@ -clippy.BASE_PATH = '//s3.amazonaws.com/clippy.js/Agents/'; -clippy.load = function (name, successCb, failCb) { +clippy.load = function (options, successCb, failCb) { + if(typeof options === 'string') { + var name = options; + clippy.BASE_PATH = '//s3.amazonaws.com/clippy.js/Agents/'; + } else { + var name = options.hasOwnProperty('name') ? options.name : 'Clippy'; + clippy.BASE_PATH = options.hasOwnProperty('path') ? options.path : '//s3.amazonaws.com/clippy.js/Agents/'; + } var path = clippy.BASE_PATH + name; var mapDfd = clippy.load._loadMap(path);