forked from phcode-dev/staging.phcode.dev
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathmain.js
More file actions
1 lines (1 loc) · 5.71 KB
/
Copy pathmain.js
File metadata and controls
1 lines (1 loc) · 5.71 KB
1
define(function(require,exports,module){const ProjectManager=require("project/ProjectManager"),SidebarView=require("project/SidebarView"),PreferencesManager=require("preferences/PreferencesManager"),Commands=require("command/Commands"),CommandManager=require("command/CommandManager"),Menus=require("command/Menus"),FileSystem=require("filesystem/FileSystem"),AppInit=require("utils/AppInit"),KeyEvent=require("utils/KeyEvent"),FileUtils=require("file/FileUtils"),PopUpManager=require("widgets/PopUpManager"),Strings=require("strings"),Mustache=require("thirdparty/mustache/mustache"),ProjectsMenuTemplate=require("text!./htmlContent/projects-menu.html"),ExtensionInterface=require("utils/ExtensionInterface"),RECENT_PROJECTS_INTERFACE="Extn.Phoenix.recentProjects";ExtensionInterface.registerExtensionInterface(RECENT_PROJECTS_INTERFACE,exports);const RECENT_PROJECT_STATE="recentProjects";var MAX_PROJECTS=20;let $dropdown;function getRecentProjects(){var recentProjects=PreferencesManager.getViewState(RECENT_PROJECT_STATE)||[],i;for(i=0;i<recentProjects.length;i++)recentProjects[i]=FileUtils.stripTrailingSlash(ProjectManager.updateWelcomeProjectPath(recentProjects[i]+"/"));return recentProjects}function add(){const projectToAdd=ProjectManager.getProjectRoot().fullPath;if(projectToAdd!==ProjectManager.getPlaceholderProjectPath()){var root=FileUtils.stripTrailingSlash(projectToAdd),recentProjects=getRecentProjects(),index=recentProjects.indexOf(root);-1!==index&&recentProjects.splice(index,1),recentProjects.unshift(root),recentProjects.length>MAX_PROJECTS&&(recentProjects=recentProjects.slice(0,MAX_PROJECTS)),PreferencesManager.setViewState(RECENT_PROJECT_STATE,recentProjects)}}function removeFromRecentProject(fullPath){fullPath=FileUtils.stripTrailingSlash(fullPath);let recentProjects=getRecentProjects(),index=recentProjects.indexOf(fullPath),newProjects=[],i;for(i=0;i<recentProjects.length;i++)i!==index&&newProjects.push(recentProjects[i]);PreferencesManager.setViewState(RECENT_PROJECT_STATE,newProjects)}function _handlePopupKeyEvents(event,$popUp){if(event.keyCode===KeyEvent.DOM_VK_DELETE){event.stopPropagation();const $selectedItem=$popUp.find(".selected");return $selectedItem.length&&$selectedItem.data("path")&&(removeFromRecentProject($selectedItem.data("path")),PopUpManager.selectNextItem(1,$popUp),$selectedItem.closest("li").remove(),1===getRecentProjects().length&&$dropdown.find(".divider").remove()),!0}}function closeDropdown(){$dropdown&&PopUpManager.removePopUp($dropdown)}function cleanupDropdown(){$("html").off("click",closeDropdown),$("#project-files-container").off("scroll",closeDropdown),$("#titlebar .nav").off("click",closeDropdown),$dropdown=null}function openProjectWithPath(fullPath){return new Promise((resolve,reject)=>{ProjectManager.openProject(fullPath).then(resolve).fail(function(){var recentProjects,index;-1!==getRecentProjects().indexOf(fullPath)?FileSystem.resolve(fullPath,function(err,item){err&&removeFromRecentProject(fullPath),reject()}):reject()})})}function _handleListEvents(){$dropdown.on("click",".recent-project-delete",function(e){e.stopPropagation(),removeFromRecentProject($(this).parent().data("path")),$(this).closest("li").remove(),1===getRecentProjects().length&&$dropdown.find(".divider").remove()}).on("click","a",function(){var $link=$(this),id=$link.attr("id"),path=$link.data("path");path?(openProjectWithPath(path),closeDropdown()):"open-folder-link"===id?CommandManager.execute(Commands.FILE_OPEN_FOLDER):"new-project-link"===id?CommandManager.execute(Commands.FILE_NEW_PROJECT):"download-project-link"===id&&CommandManager.execute(Commands.FILE_DOWNLOAD_PROJECT)})}function renderPath(fullPath){let parentDirPath=Phoenix.VFS.ensureTrailingSlash(window.path.dirname(fullPath)),rest;if(parentDirPath.startsWith(Phoenix.VFS.getTauriDir()))rest=" - "+window.fs.getTauriPlatformPath(parentDirPath);else if(parentDirPath.startsWith(Phoenix.VFS.getMountDir())){const displayPath=parentDirPath.replace(Phoenix.VFS.getMountDir(),"");displayPath&&(rest=" - "+displayPath)}else rest=" - "+Strings.PROJECT_FROM_BROWSER_TERSE;return{path:fullPath,folder:window.path.basename(fullPath),rest:rest}}function renderList(){const recentProjects=getRecentProjects(),downloadProjectCommand=CommandManager.get(Commands.FILE_DOWNLOAD_PROJECT),currentProject=FileUtils.stripTrailingSlash(ProjectManager.getProjectRoot().fullPath),templateVars={projectList:[],Strings:Strings,downloadProjectClass:downloadProjectCommand.getEnabled()?"":"forced-hidden"};return recentProjects.forEach(function(root){root!==currentProject&&templateVars.projectList.push(renderPath(root))}),Mustache.render(ProjectsMenuTemplate,templateVars)}function showDropdown(position){$dropdown||(Menus.closeAll(),$dropdown=$(renderList()).css({left:position.pageX,top:position.pageY}).appendTo($("body")),PopUpManager.addPopUp($dropdown,cleanupDropdown,!0,{closeCurrentPopups:!0}),PopUpManager.handleSelectionEvents($dropdown,{enableSearchFilter:!0,keyboardEventHandler:_handlePopupKeyEvents}),$("html").on("click",closeDropdown),$("#project-files-container").on("scroll",closeDropdown),$("#titlebar .nav").on("click",closeDropdown),_handleListEvents())}AppInit.appReady(function(){PreferencesManager.stateManager.definePreference(RECENT_PROJECT_STATE,"array",[]).watchExternalChanges(),ProjectManager.on("projectOpen",add),ProjectManager.on("beforeProjectClose",add),add()}),AppInit.htmlReady(function(){$("#project-dropdown-toggle .dropdown-arrow").removeClass("forced-hidden");var cmenuAdapter={open:showDropdown,close:closeDropdown,isOpen:function(){return!!$dropdown}};Menus.ContextMenu.assignContextMenuToSelector("#project-dropdown-toggle",cmenuAdapter)}),exports.getRecentProjects=getRecentProjects,exports.openProjectWithPath=openProjectWithPath,exports.removeFromRecentProject=removeFromRecentProject});