forked from phcode-dev/staging.phcode.dev
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathTaskManager.js
More file actions
1 lines (1 loc) · 10.5 KB
/
TaskManager.js
File metadata and controls
1 lines (1 loc) · 10.5 KB
1
define(function(require,exports,module){const Strings=require("strings"),EventDispatcher=require("utils/EventDispatcher"),StringUtils=require("utils/StringUtils"),taskList={},STATUS_SUCCESS="success",STATUS_FAIL="fail",STATUS_INCOMPLETE="incomplete",SPINNER_FAIL="spinner-failure",SPINNER_SUCCESS="spinner-success",SPINNER_NORMAL="spinner-normal",SPINNER_HIDE_TIME=Phoenix.isTestWindow?5:3e3;let currentSpinnerType=null,spinnerHideTimer,$spinner,legacyExtensionBusy=!1,taskSelect;function _showSpinnerIcon(spinnerType){return spinnerType===SPINNER_FAIL?(clearTimeout(spinnerHideTimer),$spinner.removeClass("forced-hidden"),$spinner.removeClass(SPINNER_SUCCESS),$spinner.addClass(SPINNER_FAIL),void(currentSpinnerType=SPINNER_FAIL)):spinnerType===SPINNER_SUCCESS?(clearTimeout(spinnerHideTimer),$spinner.removeClass("forced-hidden"),$spinner.removeClass(SPINNER_FAIL),$spinner.addClass(SPINNER_SUCCESS),void(currentSpinnerType=SPINNER_SUCCESS)):void(spinnerType===SPINNER_NORMAL&&(clearTimeout(spinnerHideTimer),$spinner.removeClass("forced-hidden"),$spinner.removeClass(SPINNER_FAIL),$spinner.removeClass(SPINNER_SUCCESS),spinnerHideTimer=setTimeout(hideSpinnerIcon,SPINNER_HIDE_TIME),currentSpinnerType=SPINNER_NORMAL))}function hideSpinnerIcon(){clearTimeout(spinnerHideTimer),currentSpinnerType=null,$spinner.addClass("forced-hidden"),$spinner.removeClass(SPINNER_FAIL),$spinner.removeClass(SPINNER_SUCCESS)}function renderSpinnerIcon(showNormalSpinnerIfNone){let unackSuccessTaskFound=!1;currentSpinnerType&¤tSpinnerType!==SPINNER_NORMAL&&hideSpinnerIcon();for(let task of Object.values(taskList)){if(!task._spinnerIconAck&&task.isFailed())return void _showSpinnerIcon(SPINNER_FAIL);!task._spinnerIconAck&&task.isSucceeded()&&(unackSuccessTaskFound=!0)}unackSuccessTaskFound?_showSpinnerIcon(SPINNER_SUCCESS):showNormalSpinnerIfNone&&_showSpinnerIcon(SPINNER_NORMAL)}function _onDropdownShown(){for(let task of Object.values(taskList))task._spinnerIconAck=!0;hideSpinnerIcon()}function _setTaskSelect(select){taskSelect=select,$spinner=$("#status-tasks .spinner"),Phoenix.isTestWindow&&(exports.taskSelect=taskSelect,exports.SPINNER_HIDE_TIME=SPINNER_HIDE_TIME),hideSpinnerIcon()}function _renderItem(item,index){if(item===Strings.STATUSBAR_TASKS_UNKNOWN_EXTENSION_TASK)return Strings.STATUSBAR_TASKS_UNKNOWN_EXTENSION_TASK;if(!taskList[item])return console.error("Cannot render task item",item),"unknown";const task=taskList[item];task._$html=$(`<div class="task-status-popup-item">\n <div class="task-icon">\n <i class="fa-solid fa-download"></i>\n </div>\n <div class="status-container">\n <div class="task-heading">\n <span class="task-title">${task._title||task._id}</span>\n </div>\n <div class="progress-bar-container">\n <div class="progress-bar-background">\n <div\n class="progress progress-bar-foreground-pulse"\n style="width: 100%"></div>\n </div>\n <div class="pause-icon forced-hidden" >\n <i class="fa-solid fa-circle-pause"></i>\n </div>\n <div class="play-icon forced-hidden" >\n <i class="fa-solid fa-circle-play"></i>\n </div>\n <div class="retry-icon forced-hidden">\n <i class="fa-solid fa-rotate"></i>\n </div>\n <div class="close-icon forced-hidden">\n <i class="fa-solid fa-circle-xmark"></i>\n </div>\n </div>\n <div class="task-message">${task._message||""}</div>\n </div>\n </div>`);const eventListeners={".pause-icon":"onPauseClick",".play-icon":"onPlayClick",".retry-icon":"onRetryClick",".close-icon":"onStopClick"};for(let iconClass of Object.keys(eventListeners))task._$html.find(iconClass).click(evt=>{console.log(iconClass);const cbFn=eventListeners[iconClass];return task[cbFn]&&task[cbFn](evt)});return _reRenderComponents(task),{$html:task._$html}}function _onSelect(el,selection){if(selection===Strings.STATUSBAR_TASKS_UNKNOWN_EXTENSION_TASK)return;if(!taskList[selection])return void console.error("Cannot select task item",selection);const task=taskList[selection];return task.onSelect&&task.onSelect(el)}function _getDefaultTaskIDs(){return legacyExtensionBusy?[Strings.STATUSBAR_TASKS_UNKNOWN_EXTENSION_TASK,Strings.STATUSBAR_TASKS_HIDE_SPINNER]:[Strings.STATUSBAR_TASKS_HIDE_SPINNER]}function _showOrHideStatusBarIfNeeded(){const taskArray=Object.keys(taskList);taskArray.length&&taskArray.push("---"),taskSelect.items=[...taskArray,..._getDefaultTaskIDs()],taskSelect.refresh(),Object.keys(taskList).length||legacyExtensionBusy?$("#status-tasks").removeClass("forced-hidden"):($("#status-tasks").addClass("forced-hidden"),taskSelect.closeDropdown())}function _renderProgressbar(task){const $html=task._$html;task._$html&&($html.find(".progress").removeClass("progress-bar-foreground").removeClass("progress-bar-foreground-pulse").removeClass("progress-bar-foreground-failure").removeClass("progress-bar-foreground-success"),task._completedStatus!==STATUS_SUCCESS?task._completedStatus!==STATUS_FAIL?task._percent?$html.find(".progress").addClass("progress-bar-foreground").css("width",`${task._percent}%`):$html.find(".progress").addClass("progress-bar-foreground-pulse").css("width","100%"):$html.find(".progress").addClass("progress-bar-foreground-failure").css("width","100%"):$html.find(".progress").addClass("progress-bar-foreground-success").css("width","100%"))}function _renderPlayIcons(task){const $html=task._$html;if(!task._$html)return;const iconMap={".close-icon":"_showStopIcon",".pause-icon":"_showPauseIcon",".play-icon":"_showPlayIcon",".retry-icon":"_showRestartIcon"};for(let iconClass of Object.keys(iconMap)){const showIconMessage=iconMap[iconClass];task[showIconMessage]?$html.find(iconClass).removeClass("forced-hidden").attr("title",task[showIconMessage]):$html.find(iconClass).addClass("forced-hidden")}}function _reRenderComponents(task){const $html=task._$html;task._$html&&($html.find(".task-title").text(task._title||task._id),$html.find(".task-message").text(task._message||""),task._iconHTML&&$html.find(".task-icon").html(task._iconHTML),_renderProgressbar(task),_renderPlayIcons(task))}function addNewTask(taskTitle,message,iconHTML=null,options={onPauseClick:null,onPlayClick:null,onStopClick:null,onRetryClick:null,onSelect:null,progressPercent:null,noSpinnerNotification:!1}){if(!taskTitle)throw new Error("taskTitle is required to call addNewTask");const task={_id:`${taskTitle}-${StringUtils.randomString(10)}`,_title:taskTitle,_message:message,_showPauseIcon:null,_showPlayIcon:null,_showStopIcon:null,_showRestartIcon:null,onPauseClick:options&&options.onPauseClick,onPlayClick:options&&options.onPlayClick,onStopClick:options&&options.onStopClick,onRetryClick:options&&options.onRetryClick,onSelect:options&&options.onSelect,_percent:options&&options.progressPercent,_completedStatus:STATUS_INCOMPLETE,_iconHTML:iconHTML,_noSpinnerNotification:options&&options.noSpinnerNotification,_spinnerIconAck:!!options&&!!options.noSpinnerNotification};function close(){delete taskList[task._id],_showOrHideStatusBarIfNeeded(),renderSpinnerIcon()}function setIconHTML(html){task._iconHTML=html,task._$html&&task._$html.find(".task-icon").html(task._iconHTML)}function setTitle(title){task._title=title,task._$html&&task._$html.find(".task-title").text(task._title||task._id)}function getTitle(){return task._title}function setMessage(_message){task._message=_message,task._$html&&task._$html.find(".task-message").text(task._message||"")}function getMessage(){return task._message}function show(){$("#status-tasks .btn-dropdown").click()}function setProgressPercent(percent){task._percent=percent,task._completedStatus=STATUS_INCOMPLETE,_renderProgressbar(task),task._spinnerIconAck=!0,renderSpinnerIcon()}function getProgressPercent(){return task._percent}function setFailed(){task._completedStatus=STATUS_FAIL,_renderProgressbar(task),task._noSpinnerNotification||(task._spinnerIconAck=!1),renderSpinnerIcon()}function isFailed(){return task._completedStatus===STATUS_FAIL}function setSucceeded(){task._completedStatus=STATUS_SUCCESS,_renderProgressbar(task),task._noSpinnerNotification||(task._spinnerIconAck=!1),renderSpinnerIcon()}function isSucceeded(){return task._completedStatus===STATUS_SUCCESS}function showStopIcon(tooltipMessage){task._showStopIcon=tooltipMessage||Strings.STATUSBAR_TASKS_STOP,_renderPlayIcons(task)}function showPlayIcon(tooltipMessage){task._showPlayIcon=tooltipMessage||Strings.STATUSBAR_TASKS_PLAY,_renderPlayIcons(task)}function showPauseIcon(tooltipMessage){task._showPauseIcon=tooltipMessage||Strings.STATUSBAR_TASKS_PAUSE,_renderPlayIcons(task)}function showRestartIcon(tooltipMessage){task._showRestartIcon=tooltipMessage||Strings.STATUSBAR_TASKS_RESTART,_renderPlayIcons(task)}function hideStopIcon(){task._showStopIcon=null,_renderPlayIcons(task)}function hidePlayIcon(){task._showPlayIcon=null,_renderPlayIcons(task)}function hidePauseIcon(){task._showPauseIcon=null,_renderPlayIcons(task)}function hideRestartIcon(){task._showRestartIcon=null,_renderPlayIcons(task)}function flashSpinnerForAttention(){renderSpinnerIcon(!0)}return task.show=show,task.close=close,task.setTitle=setTitle,task.getTitle=getTitle,task.setMessage=setMessage,task.getMessage=getMessage,task.setSucceded=setSucceeded,task.isSucceeded=isSucceeded,task.setFailed=setFailed,task.isFailed=isFailed,task.setProgressPercent=setProgressPercent,task.getProgressPercent=getProgressPercent,task.setIconHTML=setIconHTML,task.showStopIcon=showStopIcon,task.hideStopIcon=hideStopIcon,task.showPlayIcon=showPlayIcon,task.hidePlayIcon=hidePlayIcon,task.showPauseIcon=showPauseIcon,task.hidePauseIcon=hidePauseIcon,task.showRestartIcon=showRestartIcon,task.hideRestartIcon=hideRestartIcon,task.flashSpinnerForAttention=flashSpinnerForAttention,taskList[task._id]=task,EventDispatcher.makeEventDispatcher(task),_showOrHideStatusBarIfNeeded(),task._noSpinnerNotification?renderSpinnerIcon():renderSpinnerIcon(!0),task}function _setLegacyExtensionBusy(busy){legacyExtensionBusy=busy,busy?renderSpinnerIcon(!0):renderSpinnerIcon(),_showOrHideStatusBarIfNeeded()}exports._setTaskSelect=_setTaskSelect,exports._onDropdownShown=_onDropdownShown,exports._renderItem=_renderItem,exports._onSelect=_onSelect,exports._setLegacyExtensionBusy=_setLegacyExtensionBusy,window.TaskManager=exports,exports.addNewTask=addNewTask});