From f58b56d5d188fc05cb6fbea921c4b13374a6bbaf Mon Sep 17 00:00:00 2001 From: donniean Date: Thu, 31 Mar 2022 16:29:02 +0800 Subject: [PATCH] feat: modified config (#139) * feat: split config * feat: split config * feat: modified styles * feat: modified styles * feat: modified styles * feat: modified styles * feat: modified styles * feat: modified styles * feat: m * feat: modified config * feat: modified config * feat: modified config * feat: modified config * feat: modified config * feat: modified config * feat: add linters * feat: add linters --- .eslintignore | 8 ++ .eslintrc.js | 131 ++++++++++++++++++++++++++ .stylelintignore | 8 ++ .stylelintrc.js | 21 +++++ SUMMARY.md | 2 - docusaurus.config.base.js | 73 +++++--------- docusaurus.config.js | 11 +-- docusaurus.config.qingcloud.js | 41 -------- docusaurus.config.tkeel.js | 90 +++++++++--------- package.json | 43 +++++++-- sidebars.js | 28 +----- src/styles/{_base.scss => base.scss} | 10 +- src/styles/qingcloud.scss | 30 ------ src/styles/tkeel.scss | 32 +++---- static/images/qingcloud-logo-mark.svg | 11 --- 15 files changed, 299 insertions(+), 240 deletions(-) create mode 100644 .eslintignore create mode 100644 .eslintrc.js create mode 100644 .stylelintignore create mode 100644 .stylelintrc.js delete mode 100755 SUMMARY.md delete mode 100644 docusaurus.config.qingcloud.js rename src/styles/{_base.scss => base.scss} (91%) delete mode 100644 src/styles/qingcloud.scss delete mode 100644 static/images/qingcloud-logo-mark.svg diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000000..c78a8041ed --- /dev/null +++ b/.eslintignore @@ -0,0 +1,8 @@ +node_modules/ +.docusaurus/ +build/ +docs/ +blog/ +.yarn/ + +!docs/developer_cookbook/tkeel_plugin/create_console.md diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000000..c801cfea8a --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,131 @@ +module.exports = { + root: true, + parser: '@babel/eslint-parser', + parserOptions: { + ecmaVersion: 'latest', + sourceType: 'module', + requireConfigFile: false, + }, + env: { + browser: true, + node: true, + commonjs: true, + 'shared-node-browser': true, + amd: true, + es6: true, + es2017: true, + es2020: true, + es2021: true, + }, + extends: [ + 'airbnb', + 'airbnb/hooks', + 'plugin:eslint-comments/recommended', + 'plugin:promise/recommended', + 'plugin:unicorn/recommended', + 'plugin:sonarjs/recommended', + 'plugin:prettier/recommended', + ], + rules: { + 'no-console': process.env.NODE_ENV === 'development' ? 'warn' : 'error', + 'no-param-reassign': [ + 'error', + { + props: true, + ignorePropertyModificationsFor: [ + 'acc', + 'accumulator', + 'e', + 'ctx', + 'context', + 'req', + 'request', + 'res', + 'response', + '$scope', + 'staticContext', + 'draft', + ], + }, + ], + 'no-useless-call': 'error', + 'import/no-duplicates': ['error', { considerQueryString: true }], + 'import/order': [ + 'error', + { + groups: [ + 'builtin', + 'external', + 'internal', + ['parent', 'sibling', 'index'], + 'object', + 'type', + 'unknown', + ], + 'newlines-between': 'always', + alphabetize: { + order: 'asc', + }, + warnOnUnassignedImports: true, + }, + ], + 'unicorn/filename-case': [ + 'error', + { + cases: { + kebabCase: true, + camelCase: true, + pascalCase: true, + }, + }, + ], + 'unicorn/no-array-for-each': 'off', + 'unicorn/no-null': 'off', + 'unicorn/prevent-abbreviations': 'off', + 'react/jsx-key': 'error', + 'react/jsx-props-no-spreading': 'off', + 'react/jsx-uses-react': 'off', + 'react/react-in-jsx-scope': 'off', + 'react/require-default-props': [ + 'error', + { forbidDefaultForRequired: true, ignoreFunctionalComponents: true }, + ], + }, + overrides: [ + { + files: ['**/*.js'], + rules: { + 'import/no-extraneous-dependencies': 'off', + 'unicorn/prefer-module': 'off', + }, + }, + { + files: ['**/*.{ts,tsx}'], + parserOptions: { + project: './tsconfig.json', + }, + settings: { + 'import/resolver': { + typescript: { + alwaysTryTypes: true, + }, + }, + }, + extends: [ + 'plugin:@typescript-eslint/recommended', + 'plugin:@typescript-eslint/recommended-requiring-type-checking', + 'airbnb-typescript', + 'plugin:prettier/recommended', + ], + plugins: ['simple-import-sort'], + rules: { + 'sort-imports': 'off', + 'import/order': 'off', + 'simple-import-sort/imports': 'error', + 'simple-import-sort/exports': 'error', + '@typescript-eslint/ban-ts-comment': 'off', + '@typescript-eslint/no-floating-promises': 'off', + }, + }, + ], +}; diff --git a/.stylelintignore b/.stylelintignore new file mode 100644 index 0000000000..c78a8041ed --- /dev/null +++ b/.stylelintignore @@ -0,0 +1,8 @@ +node_modules/ +.docusaurus/ +build/ +docs/ +blog/ +.yarn/ + +!docs/developer_cookbook/tkeel_plugin/create_console.md diff --git a/.stylelintrc.js b/.stylelintrc.js new file mode 100644 index 0000000000..3d1b81da60 --- /dev/null +++ b/.stylelintrc.js @@ -0,0 +1,21 @@ +module.exports = { + plugins: ['stylelint-order'], + extends: [ + 'stylelint-config-standard', + 'stylelint-config-rational-order', + 'stylelint-config-standard-scss', + 'stylelint-prettier/recommended', + ], + rules: { + 'color-named': ['never', { ignore: ['inside-function'] }], + 'selector-list-comma-space-after': 'always-single-line', + 'no-unknown-animations': true, + 'selector-class-pattern': null, + }, + /*overrides: [ + { + files: ['**!/!*.scss'], + extends: ['stylelint-config-standard-scss'], + }, + ],*/ +}; diff --git a/SUMMARY.md b/SUMMARY.md deleted file mode 100755 index 25a519ca19..0000000000 --- a/SUMMARY.md +++ /dev/null @@ -1,2 +0,0 @@ -# Summary - diff --git a/docusaurus.config.base.js b/docusaurus.config.base.js index 34b3e0da13..b0c372488c 100644 --- a/docusaurus.config.base.js +++ b/docusaurus.config.base.js @@ -1,60 +1,37 @@ -// @ts-check -// Note: type annotations allow type checking and IDEs autocompletion - -const lightCodeTheme = require('prism-react-renderer/themes/github'); const darkCodeTheme = require('prism-react-renderer/themes/dracula'); +const lightCodeTheme = require('prism-react-renderer/themes/github'); -/** @type {import('@docusaurus/types').Config} */ const config = { - baseUrl: '/', onBrokenLinks: 'throw', onBrokenMarkdownLinks: 'warn', - themeConfig: - /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ - ({ - colorMode: { - defaultMode: 'light', - disableSwitch: true, - respectPrefersColorScheme: false, - }, - navbar: { - items: [ - { to: '/getting_started/guide', label: '新手引导', position: 'left' }, - { to: '/api/Core/tag', label: 'API', position: 'left' }, - ], - }, - /* footer: { - style: 'dark', - links: [ - { - title: '文档', - items: [ - { - label: '什么是 tKeel', - to: '/', - }, - { - label: '概念', - to: '/internal_concepts/platform', - }, - { - label: '新手引导', - to: '/getting_started/guide', - }, - ], - }, - ], - }, */ - prism: { - theme: lightCodeTheme, - darkTheme: darkCodeTheme, - }, - }), + themeConfig: { + colorMode: { + defaultMode: 'light', + disableSwitch: true, + respectPrefersColorScheme: false, + }, + + navbar: { + items: [ + { + href: 'https://github.com/tkeel-io/tkeel', + position: 'right', + className: 'header-github-link', + 'aria-label': 'GitHub repository', + }, + ], + }, + + prism: { + theme: lightCodeTheme, + darkTheme: darkCodeTheme, + }, + }, i18n: { defaultLocale: 'zh-cn', - locales: ['zh-cn'], + locales: ['en', 'zh-cn'], }, plugins: ['docusaurus-plugin-sass'], diff --git a/docusaurus.config.js b/docusaurus.config.js index 494f852e99..8398031d7d 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -1,17 +1,8 @@ const { merge } = require('webpack-merge'); -const configType = 'tkeel'; // tkeel, qingcloud - const baseConfig = require('./docusaurus.config.base'); const tkeelConfig = require('./docusaurus.config.tkeel'); -const qingcloudConfig = require('./docusaurus.config.qingcloud'); - -let config = null; -if (configType === 'qingcloud') { - config = merge({}, baseConfig, qingcloudConfig); -} else { - config = merge({}, baseConfig, tkeelConfig); -} +const config = merge({}, baseConfig, tkeelConfig); module.exports = config; diff --git a/docusaurus.config.qingcloud.js b/docusaurus.config.qingcloud.js deleted file mode 100644 index 9e6297487c..0000000000 --- a/docusaurus.config.qingcloud.js +++ /dev/null @@ -1,41 +0,0 @@ -// @ts-check -// Note: type annotations allow type checking and IDEs autocompletion - -/** @type {import('@docusaurus/types').Config} */ -const config = { - title: 'QingCloud 物联网平台', - tagline: '', - url: 'https://docs.tkeel.io', - favicon: 'images/qingcloud-logo-mark.svg', - organizationName: '', - projectName: 'docs', - deploymentBranch: 'gh-pages', - - presets: [ - [ - '@docusaurus/preset-classic', - /** @type {import('@docusaurus/preset-classic').Options} */ - ({ - docs: { - sidebarPath: require.resolve('./sidebars.js'), - routeBasePath: '/', - showLastUpdateTime: true, - }, - theme: { - customCss: require.resolve('./src/styles/qingcloud.scss'), - }, - }), - ], - ], - - themeConfig: - /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ - ({ - navbar: { - style: 'dark', - title: 'QingCloud 物联网平台', - }, - }), -}; - -module.exports = config; diff --git a/docusaurus.config.tkeel.js b/docusaurus.config.tkeel.js index 5232ea54a4..bd95664b23 100644 --- a/docusaurus.config.tkeel.js +++ b/docusaurus.config.tkeel.js @@ -1,13 +1,8 @@ -// @ts-check -// Note: type annotations allow type checking and IDEs autocompletion - -const tKeelGitHub = 'https://github.com/tkeel-io/tkeel'; - -/** @type {import('@docusaurus/types').Config} */ const config = { title: 'tKeel', tagline: 'tKeel are cool', url: 'https://docs.tkeel.io', + baseUrl: '/', favicon: 'images/tkeel-logo-mark.svg', organizationName: 'tkeel-io', projectName: 'docs', @@ -16,8 +11,7 @@ const config = { presets: [ [ '@docusaurus/preset-classic', - /** @type {import('@docusaurus/preset-classic').Options} */ - ({ + { docs: { sidebarPath: require.resolve('./sidebars.js'), routeBasePath: '/', @@ -27,44 +21,56 @@ const config = { theme: { customCss: require.resolve('./src/styles/tkeel.scss'), }, - }), + }, ], ], - themeConfig: - /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ - ({ - navbar: { - logo: { - alt: 'tKeel', - src: 'images/tkeel-logo-type-dark.svg', - width: 149, - height: 28, - }, - items: [ - { - href: tKeelGitHub, - position: 'right', - className: 'header-github-link', - 'aria-label': 'GitHub repository', - }, - ], + themeConfig: { + navbar: { + logo: { + alt: 'tKeel', + src: 'images/tkeel-logo-type-dark.svg', + width: 149, + height: 28, }, - /* footer: { - links: [ - { - title: '社区', - items: [ - { - label: 'GitHub', - href: tKeelGitHub, - }, - ], - }, - ], - copyright: `Copyright © ${new Date().getFullYear()} tKeel. Built with Docusaurus.`, - }, */ - }), + items: [ + { to: '/getting_started/guide', label: '新手引导', position: 'left' }, + { to: '/api/Core/tag', label: 'API', position: 'left' }, + ], + }, + footer: { + style: 'dark', + links: [ + { + title: '文档', + items: [ + { + label: '什么是 tKeel', + to: '/', + }, + { + label: '概念', + to: '/internal_concepts/platform', + }, + { + label: '新手引导', + to: '/getting_started/guide', + }, + ], + }, + { + title: '社区', + items: [ + { + label: 'GitHub', + href: 'https://github.com/tkeel-io/tkeel', + }, + ], + }, + ], + copyright: `Copyright © ${new Date().getFullYear()} tKeel. Built with Docusaurus.`, + }, + }, scripts: [ { diff --git a/package.json b/package.json index f699c4670e..4d3f7a5ef5 100644 --- a/package.json +++ b/package.json @@ -10,17 +10,22 @@ }, "license": "Apache-2.0", "scripts": { - "docusaurus": "docusaurus", - "start": "docusaurus start", "build": "docusaurus build", - "swizzle": "docusaurus swizzle", - "deploy": "docusaurus deploy", "clear": "docusaurus clear", + "deploy": "docusaurus deploy", + "docusaurus": "docusaurus", + "lint:eslint": "eslint \"**/*.{js,ts,tsx}\"", + "lint:eslint:fix": "eslint --fix \"**/*.{js,ts,tsx}\"", + "lint:stylelint": "stylelint \"**/*.{css,scss}\"", + "lint:stylelint:fix": "stylelint --fix \"**/*.{css,scss}\"", + "lint:tsc": "tsc --noEmit", + "prettier": "npx prettier --write \"**/*.{js,jsx,ts,tsx,css,scss,json,md}\"", "serve": "docusaurus serve", - "write-translations": "docusaurus write-translations", - "write-heading-ids": "docusaurus write-heading-ids", + "start": "docusaurus start", + "swizzle": "docusaurus swizzle", "typecheck": "tsc", - "prettier": "npx prettier --write \"**/*.{js,jsx,ts,tsx,css,scss,json,md}\"" + "write-heading-ids": "docusaurus write-heading-ids", + "write-translations": "docusaurus write-translations" }, "dependencies": { "@docusaurus/core": "^2.0.0-beta.18", @@ -29,15 +34,39 @@ "react-dom": "^17.0.2" }, "devDependencies": { + "@babel/core": "^7.17.8", + "@babel/eslint-parser": "^7.17.0", "@docusaurus/module-type-aliases": "^2.0.0-beta.18", "@mdx-js/react": "^1.6.22", "@svgr/webpack": "^6.2.1", "@tsconfig/docusaurus": "^1.0.5", "docusaurus-plugin-sass": "^0.2.2", + "eslint": "^8.12.0", + "eslint-config-airbnb": "^19.0.4", + "eslint-config-airbnb-typescript": "^16.1.4", + "eslint-config-prettier": "^8.5.0", + "eslint-import-resolver-typescript": "^2.7.0", + "eslint-plugin-eslint-comments": "^3.2.0", + "eslint-plugin-import": "^2.25.4", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-prettier": "^4.0.0", + "eslint-plugin-promise": "^6.0.0", + "eslint-plugin-react": "^7.29.4", + "eslint-plugin-react-hooks": "^4.4.0", + "eslint-plugin-simple-import-sort": "^7.0.0", + "eslint-plugin-sonarjs": "^0.13.0", + "eslint-plugin-unicorn": "^41.0.1", "file-loader": "^6.2.0", "prettier": "^2.6.1", "prism-react-renderer": "^1.3.1", "sass": "^1.49.9", + "stylelint": "^14.6.1", + "stylelint-config-prettier": "^9.0.3", + "stylelint-config-rational-order": "^0.1.2", + "stylelint-config-standard": "^25.0.0", + "stylelint-config-standard-scss": "^3.0.0", + "stylelint-order": "^5.0.0", + "stylelint-prettier": "^2.0.0", "typescript": "^4.6.3", "url-loader": "^4.1.1", "webpack-merge": "^5.8.0" diff --git a/sidebars.js b/sidebars.js index fd342f2cdb..e691968ffc 100644 --- a/sidebars.js +++ b/sidebars.js @@ -1,31 +1,5 @@ -/** - * Creating a sidebar enables you to: - - create an ordered group of docs - - render a sidebar for each doc of that group - - provide next/previous navigation - - The sidebars can be generated from the filesystem, or explicitly defined here. - - Create as many sidebars as you want. - */ - -// @ts-check - -/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ const sidebars = { - // By default, Docusaurus generates a sidebar from the docs folder structure - tutorialSidebar: [{type: 'autogenerated', dirName: '.'}], - - // But you can create a sidebar manually - /* - tutorialSidebar: [ - { - type: 'category', - label: 'Tutorial', - items: ['hello'], - }, - ], - */ + tutorialSidebar: [{ type: 'autogenerated', dirName: '.' }], }; module.exports = sidebars; diff --git a/src/styles/_base.scss b/src/styles/base.scss similarity index 91% rename from src/styles/_base.scss rename to src/styles/base.scss index 60e20c09ad..90bd047892 100644 --- a/src/styles/_base.scss +++ b/src/styles/base.scss @@ -8,8 +8,8 @@ } .navbar__title { - font-size: 18px; font-weight: 700; + font-size: 18px; line-height: 27px; } @@ -35,10 +35,10 @@ a.navbar__item.navbar__link { .markdown img { box-sizing: border-box; padding: 8px; - border: 1px solid #d1d7df; - box-shadow: 0 10px 15px -3px rgba(113, 128, 150, 0.1), - 0px 4px 6px -2px rgba(113, 128, 150, 0.05); background-color: #fff; + border: 1px solid #d1d7df; + box-shadow: 0 10px 15px -3px rgb(113 128 150 / 10%), + 0 4px 6px -2px rgb(113 128 150 / 5%); } .pagination-nav__sublabel { @@ -48,10 +48,10 @@ a.navbar__item.navbar__link { } .pagination-nav__label { - font-weight: 500; // font-size: 16px; // line-height: 28px; color: #242e42; + font-weight: 500; &:hover { color: var(--ifm-color-primary); diff --git a/src/styles/qingcloud.scss b/src/styles/qingcloud.scss deleted file mode 100644 index 00582e8a48..0000000000 --- a/src/styles/qingcloud.scss +++ /dev/null @@ -1,30 +0,0 @@ -@import '_base'; - -:root { - --ifm-color-primary: #00a971; - --ifm-color-primary-dark: #009866; - --ifm-color-primary-darker: #009060; - --ifm-color-primary-darkest: #00764f; - --ifm-color-primary-light: #00ba7c; - --ifm-color-primary-lighter: #00c282; - --ifm-color-primary-lightest: #00dc93; -} - -.navbar__brand { - margin-right: 3rem; -} - -.navbar__title { - color: #fff; -} - -a.navbar__item.navbar__link { - color: #abb4be; -} - -a.navbar__item.navbar__link { - &:hover, - &.navbar__link--active { - color: #fff; - } -} diff --git a/src/styles/tkeel.scss b/src/styles/tkeel.scss index a861a3aa30..768c3d4712 100644 --- a/src/styles/tkeel.scss +++ b/src/styles/tkeel.scss @@ -1,14 +1,14 @@ -@import '_base'; +@import 'base'; :root { --ifm-color-primary: #2580ff; --ifm-color-primary-dark: #086fff; --ifm-color-primary-darker: #0068f8; - --ifm-color-primary-darkest: #0055cc; + --ifm-color-primary-darkest: #05c; --ifm-color-primary-light: #4291ff; --ifm-color-primary-lighter: #519aff; --ifm-color-primary-lightest: #7db3ff; - --ifm-navbar-shadow: 0px 4px 4px rgba(54, 67, 92, 0.03); + --ifm-navbar-shadow: 0 4px 4px rgb(54 67 92 / 3%); } .navbar__brand { @@ -21,35 +21,33 @@ a.navbar__item.navbar__link { color: #5f708a; -} -a.navbar__item.navbar__link { &:hover, &.navbar__link--active { color: #000; } } -html[data-theme='dark'] { - .header-github-link { - &:before { - background: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='white' d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E") - no-repeat; - } - } -} - .header-github-link { &:hover { opacity: 0.6; } - &:before { - content: ''; + &::before { + display: flex; width: 24px; height: 24px; - display: flex; background: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E") no-repeat; + content: ''; + } +} + +html[data-theme='dark'] { + .header-github-link { + &::before { + background: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='white' d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E") + no-repeat; + } } } diff --git a/static/images/qingcloud-logo-mark.svg b/static/images/qingcloud-logo-mark.svg deleted file mode 100644 index 2fc555f4df..0000000000 --- a/static/images/qingcloud-logo-mark.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - -