From 0199d72dfaa3c3d6dc6df9df422bebe9ccf3c368 Mon Sep 17 00:00:00 2001 From: Guillaume Chau Date: Mon, 2 Jul 2018 00:05:27 +0200 Subject: [PATCH] feat(ui): project homepage --- .../apollo-server/connectors/projects.js | 19 +++++++- .../cli-ui/apollo-server/schema/project.js | 4 +- .../@vue/cli-ui/apollo-server/util/strings.js | 11 +++++ packages/@vue/cli-ui/locales/en.json | 3 +- packages/@vue/cli-ui/package.json | 3 +- .../src/components/ProjectSelectListItem.vue | 9 ++++ .../@vue/cli-ui/src/components/TopBar.vue | 8 ++++ .../cli-ui/src/graphql/projectFragment.gql | 1 + yarn.lock | 44 +++++++++++++++++-- 9 files changed, 94 insertions(+), 8 deletions(-) create mode 100644 packages/@vue/cli-ui/apollo-server/util/strings.js diff --git a/packages/@vue/cli-ui/apollo-server/connectors/projects.js b/packages/@vue/cli-ui/apollo-server/connectors/projects.js index 83cd8acf31..ec0e9f7f8e 100644 --- a/packages/@vue/cli-ui/apollo-server/connectors/projects.js +++ b/packages/@vue/cli-ui/apollo-server/connectors/projects.js @@ -8,6 +8,7 @@ const { defaults } = require('@vue/cli/lib/options') const { toShortPluginId } = require('@vue/cli-shared-utils') const { progress: installProgress } = require('@vue/cli/lib/util/installDeps') const { clearModule } = require('@vue/cli/lib/util/module') +const parseGitConfig = require('parse-git-config') // Connectors const progress = require('./progress') const cwd = require('./cwd') @@ -20,6 +21,7 @@ const getContext = require('../context') // Utils const { log } = require('../util/logger') const { notify } = require('../util/notification') +const { getHttpsGitURL } = require('../util/strings') const PROGRESS_ID = 'project-create' @@ -414,6 +416,20 @@ function getType (project) { return !project.type ? 'vue' : project.type } +function getHomepage (project, context) { + const gitConfigPath = path.join(project.path, '.git', 'config') + if (fs.existsSync(gitConfigPath)) { + const gitConfig = parseGitConfig.sync({ path: gitConfigPath }) + const gitRemoteUrl = gitConfig['remote "origin"'] + if (gitRemoteUrl) { + return getHttpsGitURL(gitRemoteUrl.url) + } + } + + const pkg = folders.readPackage(project.path, context) + return pkg.homepage +} + // Open last project async function autoOpenLastProject () { const context = getContext() @@ -446,5 +462,6 @@ module.exports = { setFavorite, initCreator, removeCreator, - getType + getType, + getHomepage } diff --git a/packages/@vue/cli-ui/apollo-server/schema/project.js b/packages/@vue/cli-ui/apollo-server/schema/project.js index 7588f26834..b8e02cc7d2 100644 --- a/packages/@vue/cli-ui/apollo-server/schema/project.js +++ b/packages/@vue/cli-ui/apollo-server/schema/project.js @@ -32,6 +32,7 @@ type Project { favorite: Int plugins: [Plugin] tasks: [Task] + homepage: String } enum ProjectType { @@ -82,7 +83,8 @@ exports.resolvers = { Project: { type: (project, args, context) => projects.getType(project), plugins: (project, args, context) => plugins.list(project.path, context), - tasks: (project, args, context) => tasks.list({ file: project.path, api: false }, context) + tasks: (project, args, context) => tasks.list({ file: project.path, api: false }, context), + homepage: (project, args, context) => projects.getHomepage(project, context) }, Query: { diff --git a/packages/@vue/cli-ui/apollo-server/util/strings.js b/packages/@vue/cli-ui/apollo-server/util/strings.js new file mode 100644 index 0000000000..467912ee1e --- /dev/null +++ b/packages/@vue/cli-ui/apollo-server/util/strings.js @@ -0,0 +1,11 @@ +exports.getHttpsGitURL = url => { + if (url.startsWith('http')) { + return url.replace('.git', '') + } else if (url.startsWith('git@')) { + return url + .replace(':', '/') + .replace('git@', 'https://') + .replace(/.git([^.git]*)$/, '') + } + return url +} diff --git a/packages/@vue/cli-ui/locales/en.json b/packages/@vue/cli-ui/locales/en.json index d839c0116e..72420642b3 100644 --- a/packages/@vue/cli-ui/locales/en.json +++ b/packages/@vue/cli-ui/locales/en.json @@ -149,7 +149,8 @@ }, "top-bar": { "no-favorites": "No favorite projects", - "favorite-projects": "Favorite projects" + "favorite-projects": "Favorite projects", + "homepage": "Home page" }, "view-badge": { "labels": { diff --git a/packages/@vue/cli-ui/package.json b/packages/@vue/cli-ui/package.json index 14727a6343..f296e51aa7 100644 --- a/packages/@vue/cli-ui/package.json +++ b/packages/@vue/cli-ui/package.json @@ -47,6 +47,7 @@ "lru-cache": "^4.1.2", "node-ipc": "^9.1.1", "node-notifier": "^5.2.1", + "parse-git-config": "^2.0.2", "portfinder": "^1.0.13", "semver": "^5.5.0", "shortid": "^2.2.8", @@ -60,7 +61,7 @@ "@vue/cli-plugin-eslint": "^3.0.0-rc.3", "@vue/cli-service": "^3.0.0-rc.3", "@vue/eslint-config-standard": "^3.0.0-rc.3", - "@vue/ui": "^0.4.4", + "@vue/ui": "^0.4.5", "ansi_up": "^2.0.2", "cross-env": "^5.1.5", "eslint": "^4.16.0", diff --git a/packages/@vue/cli-ui/src/components/ProjectSelectListItem.vue b/packages/@vue/cli-ui/src/components/ProjectSelectListItem.vue index d222cedb8c..cb01ca3920 100644 --- a/packages/@vue/cli-ui/src/components/ProjectSelectListItem.vue +++ b/packages/@vue/cli-ui/src/components/ProjectSelectListItem.vue @@ -25,6 +25,15 @@
+ {{ $t('org.vue.components.project-select-list-item.tooltips.favorite') }} + +