Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
5 lines
No EOL
1.6 KiB
JavaScript
5 lines
No EOL
1.6 KiB
JavaScript
;'use strict';(function(exports){var CloseLock=function(manager,topic){this._manager=manager;this._topic=topic;};CloseLock.prototype.unlock=function(){this._manager.releaseLock(this,this._topic);};var CloseLockManager=function CloseLockManager(){this._closeLocks=null;this._awakeLocks=null;this.waitForUnlock=false;};CloseLockManager.prototype.onclose=null;CloseLockManager.prototype.start=function(){this._closeLocks=new Set();this._awakeLocks=new Set();this.waitForUnlock=false;};CloseLockManager.prototype.stop=function(){this._closeLocks=null;this._awakeLocks=null;this.waitForUnlock=false;};CloseLockManager.prototype.requestLock=function(topic){var lock=new CloseLock(this,topic);switch(topic){case'requestClose':this._closeLocks.add(lock);break;case'stayAwake':this._awakeLocks.add(lock);break;default:throw'CloseLockManager: Undefined topic '+topic;}
|
|
this._maybeCloseNow();return lock;};CloseLockManager.prototype.releaseLock=function(lock,topic){if(!(lock instanceof CloseLock)){throw'CloseLockManager: releaseLock need a lock.';}
|
|
var set;switch(topic){case'requestClose':set=this._closeLocks;break;case'stayAwake':set=this._awakeLocks;break;default:throw'CloseLockManager: Undefined topic '+topic;}
|
|
if(!set.has(lock)){return;}
|
|
set.delete(lock);this._maybeCloseNow();};CloseLockManager.prototype._maybeCloseNow=function(){if(this._awakeLocks.size===0&&this._closeLocks.size!==0){if(typeof this.onclose==='function'){this.onclose();}else{console.error('CloseLockManager: '+'close should be triggered now but no callback attached.');}}};exports.CloseLockManager=CloseLockManager;exports.CloseLock=CloseLock;})(window); |