Mercurial > pub > ImplabJs
diff src/djol/_OneshotTool.js @ 10:8705103f074f
Слияние
author | cin |
---|---|
date | Mon, 21 Aug 2017 18:03:00 +0300 |
parents | f0035923ff3e |
children | 9c21e656cbec |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/djol/_OneshotTool.js Mon Aug 21 18:03:00 2017 +0300 @@ -0,0 +1,65 @@ +define([ "dojo/_base/declare", "implab/safe", "implab/guard", "ol3/_ToolBase", "ol3/ToolType" ], + +function(declare, safe, guard, _ToolBase, ToolType) { + return declare([ _ToolBase ], { + _pending : null, + + _lastResult : null, + + toolType : ToolType.Oneshot, + + invoke : function() { + }, + + onActivating : function() { + var me = this; + + // start the operation + me._lastResult = me._pending = guard(me,"invoke"); + + return this.inherited(arguments); + }, + + onActivated : function() { + var me = this; + + // fire the activate event + this.inherited(arguments); + + me._pending.then(function() { + if (me._pending) { + me.log("Operation finished, deactivating."); + me._pending = null; + me.deactivate(); + } + }, function(ex) { + if (me._pending) { + me.error("Operation failed, deactivating: {0}", ex); + me._pending = null; + me.deactivate(); + } + }); + }, + + onDeactivated : function() { + var d = this._pending; + if (d) { + this.log("Cancelling pending operation"); + this._pending = null; + d.cancel(); + } + + return this.inherited(arguments); + }, + + run : function() { + var me = this; + + return me.activate().then(function(success) { + if (success) + return me._lastResult; + throw new Error("Operation declined"); + }); + } + }); +}); \ No newline at end of file