forked from phcode-dev/staging.phcode.dev
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathExtensionManagerDialog.js
More file actions
1 lines (1 loc) · 8.73 KB
/
ExtensionManagerDialog.js
File metadata and controls
1 lines (1 loc) · 8.73 KB
1
define(function(require,exports,module){var _=require("thirdparty/lodash"),Mustache=require("thirdparty/mustache/mustache"),Dialogs=require("widgets/Dialogs"),DefaultDialogs=require("widgets/DefaultDialogs"),Package=require("extensibility/Package"),Strings=require("strings"),StringUtils=require("utils/StringUtils"),Commands=require("command/Commands"),CommandManager=require("command/CommandManager"),InstallExtensionDialog=require("extensibility/InstallExtensionDialog"),ThemeManager=require("view/ThemeManager"),AppInit=require("utils/AppInit"),Async=require("utils/Async"),KeyEvent=require("utils/KeyEvent"),ExtensionManager=require("extensibility/ExtensionManager"),ExtensionManagerView=require("extensibility/ExtensionManagerView").ExtensionManagerView,ExtensionManagerViewModel=require("extensibility/ExtensionManagerViewModel"),PreferencesManager=require("preferences/PreferencesManager"),Metrics=require("utils/Metrics"),dialogTemplate=require("text!htmlContent/extension-manager-dialog.html"),_activeTabIndex;function _performChanges(){var hasRemovedExtensions=ExtensionManager.hasExtensionsToRemove(),hasUpdatedExtensions=ExtensionManager.hasExtensionsToUpdate(),hasDisabledExtensions=ExtensionManager.hasExtensionsToDisable();if(hasRemovedExtensions||hasUpdatedExtensions||hasDisabledExtensions){var buttonLabel=Strings.CHANGE_AND_RELOAD;!hasRemovedExtensions||hasUpdatedExtensions||hasDisabledExtensions?!hasUpdatedExtensions||hasRemovedExtensions||hasDisabledExtensions?!hasDisabledExtensions||hasRemovedExtensions||hasUpdatedExtensions||(buttonLabel=Strings.DISABLE_AND_RELOAD):buttonLabel=Strings.UPDATE_AND_RELOAD:buttonLabel=Strings.REMOVE_AND_RELOAD;var dlg=Dialogs.showModalDialog(DefaultDialogs.DIALOG_ID_CHANGE_EXTENSIONS,Strings.CHANGE_AND_RELOAD_TITLE,Strings.CHANGE_AND_RELOAD_MESSAGE,[{className:Dialogs.DIALOG_BTN_CLASS_NORMAL,id:Dialogs.DIALOG_BTN_CANCEL,text:Strings.CANCEL},{className:Dialogs.DIALOG_BTN_CLASS_PRIMARY,id:Dialogs.DIALOG_BTN_OK,text:buttonLabel}],!1),$dlg=dlg.getElement();$dlg.one("buttonClick",function(e,buttonId){var removeExtensionsPromise,updateExtensionsPromise,disableExtensionsPromise,removeErrors,updateErrors,disableErrors;buttonId===Dialogs.DIALOG_BTN_OK?($dlg.find(".dialog-button").prop("disabled",!0),$dlg.find(".close").hide(),$dlg.find(".dialog-message").text(Strings.PROCESSING_EXTENSIONS).append("<span class='spinner inline spin'/>"),removeExtensionsPromise=ExtensionManager.removeMarkedExtensions().fail(function(errorArray){removeErrors=errorArray}),updateExtensionsPromise=ExtensionManager.updateExtensions().fail(function(errorArray){updateErrors=errorArray}),disableExtensionsPromise=ExtensionManager.disableMarkedExtensions().fail(function(errorArray){disableErrors=errorArray}),Async.waitForAll([removeExtensionsPromise,updateExtensionsPromise,disableExtensionsPromise],!0).always(function(){dlg.close()}).done(function(){CommandManager.execute(Commands.APP_RELOAD)}).fail(function(){var ids=[],dialogs=[];function nextDialog(){var dialog=dialogs.shift();dialog?Dialogs.showModalDialog(dialog.dialog,dialog.title,dialog.message).done(nextDialog):CommandManager.execute(Commands.APP_RELOAD)}removeErrors&&(removeErrors.forEach(function(errorObj){ids.push(errorObj.item)}),dialogs.push({dialog:DefaultDialogs.DIALOG_ID_ERROR,title:Strings.EXTENSION_MANAGER_REMOVE,message:StringUtils.format(Strings.EXTENSION_MANAGER_REMOVE_ERROR,ids.join(", "))})),updateErrors&&(ids.length=0,updateErrors.forEach(function(errorObj){ids.push(errorObj.item),errorObj.error&&errorObj.error.forEach?(console.error("Errors for",errorObj.item),errorObj.error.forEach(function(error){console.error(Package.formatError(error))})):console.error("Error for",errorObj.item,errorObj)}),dialogs.push({dialog:DefaultDialogs.DIALOG_ID_ERROR,title:Strings.EXTENSION_MANAGER_UPDATE,message:StringUtils.format(Strings.EXTENSION_MANAGER_UPDATE_ERROR,ids.join(", "))})),disableErrors&&(ids.length=0,disableErrors.forEach(function(errorObj){ids.push(errorObj.item)}),dialogs.push({dialog:DefaultDialogs.DIALOG_ID_ERROR,title:Strings.EXTENSION_MANAGER_DISABLE,message:StringUtils.format(Strings.EXTENSION_MANAGER_DISABLE_ERROR,ids.join(", "))})),nextDialog()})):(dlg.close(),ExtensionManager.cleanupUpdates(),ExtensionManager.unmarkAllForRemoval(),ExtensionManager.unmarkAllForDisabling())})}}function _showDialog(which){Metrics.countEvent(Metrics.EVENT_TYPE.EXTENSIONS,"dialogue","shown");let dialog,$dlg,views=[],$search,$searchClear,$modalDlg,context={Strings:Strings,showRegistry:!!brackets.config.extension_registry},models=[],originalTheme=ThemeManager.getCurrentTheme();function updateSearchDisabled(){var model=models[_activeTabIndex],searchDisabled=""===$search.val()&&(!model.filterSet||0===model.filterSet.length);return $search.prop("disabled",searchDisabled),$searchClear.prop("disabled",searchDisabled),searchDisabled}function clearSearch(){$search.val(""),views.forEach(function(view,index){view.filter(""),$modalDlg.scrollTop(0)}),updateSearchDisabled()||$search.focus()}function setActiveTab($tab){models[_activeTabIndex]&&(models[_activeTabIndex].scrollPos=$modalDlg.scrollTop()),$tab.tab("show"),models[_activeTabIndex]&&($modalDlg.scrollTop(models[_activeTabIndex].scrollPos||0),clearSearch(),2===_activeTabIndex?$(".ext-sort-group").hide():$(".ext-sort-group").show())}function updateNotificationIcon(index){var model=models[index],$notificationIcon=$dlg.find(".nav-tabs li").eq(index).find(".notification");model.notifyCount?($notificationIcon.text(model.notifyCount),$notificationIcon.show()):$notificationIcon.hide()}var modelInitPromise;return context.showRegistry&&(models.push(new ExtensionManagerViewModel.RegistryViewModel),models.push(new ExtensionManagerViewModel.ThemesViewModel)),models.push(new ExtensionManagerViewModel.InstalledViewModel),models.push(new ExtensionManagerViewModel.DefaultViewModel),(dialog=Dialogs.showModalDialogUsingTemplate(Mustache.render(dialogTemplate,context))).done(function(){$(window.document).off(".extensionManager"),models.forEach(function(model){model.dispose()}),_performChanges()}),$dlg=dialog.getElement(),$search=$(".search",$dlg),$searchClear=$(".search-clear",$dlg),$modalDlg=$(".modal-body",$dlg),$dlg.find(".nav-tabs a").on("click",function(event){setActiveTab($(this))}),$(window.document).on("keyup.extensionManager",function(event){if(event.keyCode===KeyEvent.DOM_VK_TAB&&event.ctrlKey){var $tabs=$(".nav-tabs a",$dlg),tabIndex=_activeTabIndex;event.shiftKey?tabIndex--:tabIndex++,tabIndex%=$tabs.length,setActiveTab($tabs.eq(tabIndex))}}),Async.doInParallel(models,function(model,index){var view=new ExtensionManagerView,promise=view.initialize(model),lastNotifyCount;return promise.always(function(){views[index]=view,lastNotifyCount=model.notifyCount,updateNotificationIcon(index)}),model.on("change",function(){lastNotifyCount!==model.notifyCount&&(lastNotifyCount=model.notifyCount,updateNotificationIcon(index))}),promise},!0).always(function(){var searchTimeoutID;$(".spinner",$dlg).remove(),views.forEach(function(view){view.$el.appendTo($modalDlg)}),$("a[data-toggle='tab']",$dlg).each(function(index,tabElement){$(tabElement).on("show",function(event){_activeTabIndex=index,updateSearchDisabled()||$dlg.find(".search").focus()})}),$dlg.on("input",".search",function(e){clearTimeout(searchTimeoutID);var query=$(this).val();searchTimeoutID=setTimeout(function(){views[_activeTabIndex].filter(query),$modalDlg.scrollTop(0)},200)}).on("click",".search-clear",clearSearch),$dlg.on("change",".sort-extensions",function(e){var sortBy=$(this).val();PreferencesManager.set("extensions.sort",sortBy),models.forEach(function(model,index){index<=1&&(model._setSortedExtensionList(ExtensionManager.extensions,1===index),views[index].filter($(".search").val()))})}),models.forEach(function(model,index){model.on("change",function(){_activeTabIndex===index&&updateSearchDisabled()})});var $activeTab=$dlg.find(".nav-tabs li.active a");$activeTab.length?($activeTab.parent().removeClass("active"),$activeTab.tab("show")):$("#toolbar-extension-manager").hasClass("updatesAvailable")?$dlg.find(".nav-tabs a.installed").tab("show"):$dlg.find(".nav-tabs a:first").tab("show"),$activeTab.length&&$activeTab.hasClass("installed")||!$activeTab.length&&$("#toolbar-extension-manager").hasClass("updatesAvailable")?$(".ext-sort-group").hide():$(".ext-sort-group").show()}),$(".extension-manager-dialog .install-from-url").click(function(){Metrics.countEvent(Metrics.EVENT_TYPE.EXTENSIONS,"install","fromURL"),InstallExtensionDialog.showDialog().done(ExtensionManager.updateFromDownload)}),"themes"===which&&$dlg.find(".nav-tabs a.themes").click(),(new $.Deferred).resolve(dialog).promise()}require("widgets/bootstrap-tab"),CommandManager.register(Strings.CMD_EXTENSION_MANAGER,Commands.FILE_EXTENSION_MANAGER,_showDialog),AppInit.appReady(function(){$("#toolbar-extension-manager").click(_showDialog)}),exports._performChanges=_performChanges});