forked from phcode-dev/staging.phcode.dev
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathStateManager.js
More file actions
1 lines (1 loc) · 4.98 KB
/
StateManager.js
File metadata and controls
1 lines (1 loc) · 4.98 KB
1
define(function(require,exports,module){const _=require("thirdparty/lodash"),EventDispatcher=require("utils/EventDispatcher"),ProjectManager=require("project/ProjectManager"),PROJECT_CONTEXT="project",GLOBAL_CONTEXT="global",PROJECT_THEN_GLOBAL_CONTEXT="any",PHSTORE_STATEMANAGER_PREFIX="STATE_",transformDotsInID={},definedPreferences={};function _getKey(id,useProjectContext){if(useProjectContext){const projectRootPath=ProjectManager.getProjectRoot().fullPath;return`${PHSTORE_STATEMANAGER_PREFIX}${projectRootPath}${id}`}return`${PHSTORE_STATEMANAGER_PREFIX}${id}`}function _GET_CONTEXT_FROM_LEGACY_CONTEXT(context=null){return"project"===_.get(context,"location.layer")?PROJECT_CONTEXT:GLOBAL_CONTEXT}function _getItemOrDefault(item,id){return null==item&&definedPreferences[id]?definedPreferences[id].initial:item}function getVal(id,context=GLOBAL_CONTEXT){let item;switch("production"!==Phoenix.config.environment&&"object"==typeof context&&console.warn("Use of context object in state is deprecated. Please migrate to StateManager"),transformDotsInID[id]&&(id=id.replace(".",":")),context){case GLOBAL_CONTEXT:return _getItemOrDefault(item=PhStore.getItem(_getKey(id,!1)),id);case PROJECT_CONTEXT:return _getItemOrDefault(item=PhStore.getItem(_getKey(id,!0)),id);case PROJECT_THEN_GLOBAL_CONTEXT:const val=PhStore.getItem(_getKey(id,!0));return val||_getItemOrDefault(item=PhStore.getItem(_getKey(id,!1)),id);default:return"production"!==Phoenix.config.environment&&console.warn("Use of context object in StateManager.get() is deprecated. Please migrate to StateManager"),getVal(id,_GET_CONTEXT_FROM_LEGACY_CONTEXT(context))}}function setVal(id,value,context=GLOBAL_CONTEXT){switch(transformDotsInID[id]&&(id=id.replace(".",":")),context){case PROJECT_THEN_GLOBAL_CONTEXT:throw new Error("Cannot use PROJECT_THEN_GLOBAL_CONTEXT with set");case GLOBAL_CONTEXT:return void PhStore.setItem(_getKey(id,!1),value);case PROJECT_CONTEXT:return void PhStore.setItem(_getKey(id,!0),value);default:"production"!==Phoenix.config.environment&&console.warn("Use of context object in StateManager.set() is deprecated. Please migrate to StateManager"),setVal(id,value,_GET_CONTEXT_FROM_LEGACY_CONTEXT(context))}}function definePreferenceInternal(id,type,initial,options){if(definedPreferences[id])throw new Error("Preference "+id+" was redefined");id.includes(".")&&(transformDotsInID[id]=!0,id=id.replace(".",":"),console.error(`StateManager.definePreference should not be called with an id ${id} that has a`+" `.`- trying to continue..."));const key=_getKey(id,!1),preference={watchExternalChanges:function(){PhStore.watchExternalChanges(key)},unwatchExternalChanges:function(){PhStore.unwatchExternalChanges(key)}};return EventDispatcher.makeEventDispatcher(preference),PhStore.on(key,(_event,changeType)=>{preference.trigger("change",changeType)}),definedPreferences[id]={type:type,initial:initial,options:options,preference:preference},preference}function getPreferenceInternal(id){if(!definedPreferences[id])throw new Error("getPreference "+id+" no such preference defined.");return definedPreferences[id].preference}const knownExtensions={};function createExtensionStateManager(extensionID){let i=0;extensionID.includes(".")&&(extensionID=extensionID.replace(".",":"));let originalExtensionID=extensionID;for(;knownExtensions[extensionID];){let newID=`${originalExtensionID}_${i++}`;console.warn(`Another extension of the same id ${extensionID} exists in createExtensionStateManager.`+` Mitigating-Identifying a new free id to use... ${newID}`),extensionID=newID}knownExtensions[extensionID]=!0;const extPrefix=`EXT_${extensionID}`;return{get:function(id,context){return getVal(`${extPrefix}_${id}`,context)},set:function(id,value,context){return setVal(`${extPrefix}_${id}`,value,context)},definePreference:function(id,type,initial,options){return definePreferenceInternal(`${extPrefix}_${id}`,type,initial,options)},getPreference:function(id){return getPreferenceInternal(`${extPrefix}_${id}`)},PROJECT_CONTEXT:PROJECT_CONTEXT,GLOBAL_CONTEXT:GLOBAL_CONTEXT,PROJECT_THEN_GLOBAL_CONTEXT:PROJECT_THEN_GLOBAL_CONTEXT}}function save(){console.warn("StateManager.save() is deprecated. Settings are auto saved to a high throughput Database")}function getPrefixedSystem(prefix){return console.warn("StateManager.getPrefixedSystem() is deprecated. Use StateManager.createExtensionStateManager()"),createExtensionStateManager(prefix)}const _INTERNAL_STATES={TAB_SPACES:"TAB_SPC_"};exports._INTERNAL_STATES=_INTERNAL_STATES,exports._createInternalStateManager=createExtensionStateManager,exports.get=getVal,exports.set=setVal,exports.definePreference=definePreferenceInternal,exports.getPreference=getPreferenceInternal,exports.createExtensionStateManager=createExtensionStateManager,exports.save=save,exports.getPrefixedSystem=getPrefixedSystem,exports.PROJECT_CONTEXT=PROJECT_CONTEXT,exports.GLOBAL_CONTEXT=GLOBAL_CONTEXT,exports.PROJECT_THEN_GLOBAL_CONTEXT=PROJECT_THEN_GLOBAL_CONTEXT,exports.CHANGE_TYPE_INTERNAL=PhStore.CHANGE_TYPE_INTERNAL,exports.CHANGE_TYPE_EXTERNAL=PhStore.CHANGE_TYPE_EXTERNAL});