Browse Source

Merge branch 'v4' of https://github.com/jdf2e/nutui into v4

Ymm0008 3 years ago
parent
commit
743b1fe490

+ 24 - 82
jd/createAttributes.cjs

@@ -5,10 +5,28 @@ const MarkdownIt = require('markdown-it')();
 const basePath = path.resolve(__dirname, './../src/packages/__VUE');
 const componentDirs = fs.readdirSync(basePath, 'utf8');
 const config = require('../package.json');
+const cfg = require('./../src/config.json');
 const TYPE_IDENTIFY_OPEN = 'tbody_open';
 const TYPE_IDENTIFY_CLOSE = 'tbody_close';
 const TR_TYPE_IDENTIFY_OPEN = 'tr_open';
 const TR_TYPE_IDENTIFY_CLOSE = 'tr_close';
+const argv = process.argv[2];
+let packages = [];
+
+const kebabCase = (str) => {
+  str = str.replace(str.charAt(0), str.charAt(0).toLocaleLowerCase());
+  return str.replace(/([a-z])([A-Z])/g, (_, p1, p2) => p1 + '-' + p2.toLowerCase());
+};
+
+const getCompName = (name) => {
+  if(!packages.length) {
+    cfg.nav.forEach((item, index) => {
+      packages = packages.concat(item.packages);
+    });
+  }
+  const packageName = packages.find((item) => item.name.toLowerCase() === name.toLowerCase());
+  return packageName.name
+}
 
 const getSubSources = (sources) => {
   let sourcesMap = [];
@@ -24,61 +42,6 @@ const getSubSources = (sources) => {
   return sourcesMap;
 };
 
-const genaratorTags = () => {
-  let componentTags = {};
-  if (!componentDirs.length) return;
-
-  for (let componentDir of componentDirs) {
-    let stat = fs.lstatSync(`${basePath}/${componentDir}`);
-    if (stat.isDirectory()) {
-      const absolutePath = path.join(`${basePath}/${componentDir}`, 'doc.md');
-      if (!fs.existsSync(absolutePath)) continue;
-      const data = fs.readFileSync(absolutePath, 'utf8');
-      let sources = MarkdownIt.parse(data, {});
-      let sourcesMap = getSubSources(sources);
-      componentTags[`nut-${componentDir}`] = { attributes: [] };
-      for (let sourceMap of sourcesMap) {
-        let propItem = sourceMap.filter((source) => source.type === 'inline').length
-          ? `${sourceMap.filter((source) => source.type === 'inline')[0].content.replace(/`.*?`/g, '')}`
-          : '';
-        componentTags[`nut-${componentDir}`]['attributes'].push(propItem);
-      }
-    }
-  }
-
-  return componentTags;
-};
-
-const genaratorAttributes = () => {
-  let componentTags = {};
-  if (!componentDirs.length) return;
-  for (let componentDir of componentDirs) {
-    let stat = fs.lstatSync(`${basePath}/${componentDir}`);
-    if (stat.isDirectory()) {
-      const absolutePath = path.join(`${basePath}/${componentDir}`, 'doc.md');
-      if (!fs.existsSync(absolutePath)) continue;
-      const data = fs.readFileSync(absolutePath, 'utf8');
-      let sources = MarkdownIt.parse(data, {});
-      let sourcesMap = getSubSources(sources);
-      for (let sourceMap of sourcesMap) {
-        const inlineItem = sourceMap.filter((source) => source.type === 'inline').length
-          ? sourceMap.filter((source) => source.type === 'inline')
-          : [];
-        const propItem = inlineItem.length ? `${inlineItem[0].content.replace(/`.*?`/g, '')}` : '';
-        const infoItem = inlineItem.length ? `${inlineItem[1].content}` : '';
-        const typeItem = inlineItem.length ? `${inlineItem[2].content.toLowerCase()}` : '';
-        const defaultItem = inlineItem.length ? `${inlineItem[3].content}` : '';
-        componentTags[`nut-${componentDir}/${propItem}`] = {
-          type: `${typeItem}`,
-          description: `属性说明:${infoItem},默认值:${defaultItem}`
-        };
-      }
-    }
-  }
-
-  return componentTags;
-};
-
 const genaratorWebTypes = () => {
   let typesData = {
     $schema: 'https://raw.githubusercontent.com/JetBrains/web-types/master/schema/web-types.json',
@@ -99,7 +62,10 @@ const genaratorWebTypes = () => {
   for (let componentDir of componentDirs) {
     let stat = fs.lstatSync(`${basePath}/${componentDir}`);
     if (stat.isDirectory()) {
-      const absolutePath = path.join(`${basePath}/${componentDir}`, 'doc.md');
+      let absolutePath = path.join(`${basePath}/${componentDir}`, `doc.md`);
+      if(argv === 'taro') {
+        absolutePath = path.join(`${basePath}/${componentDir}`, `doc.taro.md`);
+      }
       let attributes = [];
       if (!fs.existsSync(absolutePath)) continue;
       const data = fs.readFileSync(absolutePath, 'utf8');
@@ -123,8 +89,9 @@ const genaratorWebTypes = () => {
           }
         });
       }
+      let compoName = kebabCase(getCompName(componentDir));
       typesData.contributions.html.tags.push({
-        name: `nut-${componentDir}`,
+        name: `nut-${compoName}`,
         slots: [],
         events: [],
         attributes: attributes.slice()
@@ -135,29 +102,6 @@ const genaratorWebTypes = () => {
   return typesData;
 };
 
-const writeTags = () => {
-  const componentTags = genaratorTags();
-  let innerText = `${JSON.stringify(componentTags, null, 2)}`;
-  const distPath = path.resolve(__dirname, './../dist');
-  const componentTagsPath = path.resolve(__dirname, './../dist/smartips/tags.json');
-  if (!fs.existsSync(path.join(distPath + '/smartips'))) {
-    fs.mkdirSync(path.join(distPath + '/smartips'));
-  }
-
-  fs.writeFileSync(componentTagsPath, innerText);
-};
-
-const writeAttributes = () => {
-  const componentAttributes = genaratorAttributes();
-  let innerText = `${JSON.stringify(componentAttributes, null, 2)}`;
-  const distPath = path.resolve(__dirname, './../dist');
-  const componentAttributespPath = path.resolve(__dirname, './../dist/smartips/attributes.json');
-  if (!fs.existsSync(path.join(distPath + '/smartips'))) {
-    fs.mkdirSync(path.join(distPath + '/smartips'));
-  }
-  fs.writeFileSync(componentAttributespPath, innerText);
-};
-
 const writeWebTypes = () => {
   const typesData = genaratorWebTypes();
   let innerText = `${JSON.stringify(typesData, null, 2)}`;
@@ -169,6 +113,4 @@ const writeWebTypes = () => {
   fs.writeFileSync(componentWebTypespPath, innerText);
 };
 
-writeTags();
-writeAttributes();
 writeWebTypes();

+ 2 - 5
package.json

@@ -7,10 +7,6 @@
   "style": "dist/style.css",
   "type": "module",
   "typings": "dist/types/index.d.ts",
-  "vetur": {
-    "tags": "dist/smartips/tags.json",
-    "attributes": "dist/smartips/attributes.json"
-  },
   "web-types": "dist/smartips/web-types.json",
   "keywords": [
     "nutui",
@@ -51,7 +47,7 @@
     "build:site-jdt": "npm run checked && vite build --config vite.config.jdt.ts ",
     "build:site:oss": "npm run checked && vite build --base=/nutui/4x/",
     "build": "npm run checked && vite build --config vite.config.build.ts && vite build --config vite.config.build.disperse.ts && npm run generate:themes && vite build --config vite.config.build.css.ts && vite build --config vite.config.build.locale.ts && npm run dts && npm run attrs && node jd/generate-unplugin-deps.cjs nutui && node jd/copy-dist.cjs nutui",
-    "build:taro:vue": "npm run checked:taro:vue && vite build --config vite.config.build.taro.vue.ts && vite build --config vite.config.build.taro.vue.disperse.ts && npm run generate:themes && vite build --config vite.config.build.css.ts && vite build --config vite.config.build.locale.ts && npm run dts:taro && npm run attrs&& node jd/generate-unplugin-deps.cjs nutui-taro && node jd/copy-dist.cjs nutui-taro",
+    "build:taro:vue": "npm run checked:taro:vue && vite build --config vite.config.build.taro.vue.ts && vite build --config vite.config.build.taro.vue.disperse.ts && npm run generate:themes && vite build --config vite.config.build.css.ts && vite build --config vite.config.build.locale.ts && npm run dts:taro && npm run attrs:taro && node jd/generate-unplugin-deps.cjs nutui-taro && node jd/copy-dist.cjs nutui-taro",
     "serve": "vite preview",
     "upload": "yarn build:site:oss && node ./jd/upload.js",
     "add": "node jd/createComponentMode.js",
@@ -68,6 +64,7 @@
     "codeformat": "prettier --write .",
     "copydocs": "node ./jd/copymd.cjs",
     "createTaroConfig": "node ./jd/generate-taro-route.cjs",
+    "attrs:taro": "node ./jd/createAttributes.cjs taro",
     "attrs": "node ./jd/createAttributes.cjs",
     "dts": "rm -rf ./tsc/type && vue-tsc --declaration --emitDeclarationOnly -p ./tsconfig.declaration.json && npm run generate:types",
     "dts:taro": "rm -rf ./tsc/type && vue-tsc --declaration --emitDeclarationOnly -p ./tsconfig.declaration.taro.json && npm run generate:types:taro",

+ 0 - 4
publish/nutui-taro/package.json

@@ -11,10 +11,6 @@
     "dist/packages/_es/*",
     "dist/packages/**/style*"
   ],
-  "vetur": {
-    "tags": "dist/smartips/tags.json",
-    "attributes": "dist/smartips/attributes.json"
-  },
   "web-types": "dist/smartips/web-types.json",
   "keywords": [
     "nutui",

+ 0 - 4
publish/nutui/package.json

@@ -11,10 +11,6 @@
     "dist/packages/_es/*",
     "dist/packages/**/style*"
   ],
-  "vetur": {
-    "tags": "dist/smartips/tags.json",
-    "attributes": "dist/smartips/attributes.json"
-  },
   "web-types": "dist/smartips/web-types.json",
   "keywords": [
     "nutui",

+ 1 - 1
src/packages/__VUE/calendar/index.scss

@@ -196,7 +196,7 @@
             }
           }
 
-          &-disabled {
+          &--disabled {
             color: $calendar-disable-color !important;
           }
 

+ 5 - 4
src/packages/vscode-extension/package.json

@@ -3,7 +3,7 @@
 	"private": true,
 	"displayName": "nutui-vscode-extension",
 	"description": "nutui extension for vscode",
-	"version": "0.0.2",
+	"version": "0.0.3",
 	"icon": "src/nutui.png",
 	"engines": {
 		"vscode": "^1.66.0"
@@ -11,7 +11,7 @@
 	"repository": {
 		"type": "git",
 		"url": "git+https://github.com/jdf2e/nutui.git",
-    "directory": "src/packages/vscode-extension"
+		"directory": "src/packages/vscode-extension"
 	},
 	"categories": [
 		"Other"
@@ -36,7 +36,7 @@
 	"devDependencies": {
 		"@types/glob": "^7.2.0",
 		"@types/mocha": "^9.0.0",
-		"@types/node": "14.x",
+		"@types/node": "^14.x",
 		"@types/vscode": "^1.65.0",
 		"@typescript-eslint/eslint-plugin": "^5.9.1",
 		"@typescript-eslint/parser": "^5.9.1",
@@ -48,7 +48,8 @@
 		"ts-loader": "^9.2.6",
 		"typescript": "^4.5.4",
 		"webpack": "^5.66.0",
-		"webpack-cli": "^4.9.1"
+		"webpack-cli": "^4.9.1",
+		"vscode": "^1.1.37"
 	},
 	"dependencies": {
 		"vsce": "^2.7.0"

+ 19 - 1
src/packages/vscode-extension/scripts/createComponentMap.js

@@ -3,11 +3,28 @@ const fs = require('fs');
 const MarkdownIt = require('markdown-it')();
 
 const basePath = path.resolve(__dirname, './../../__VUE');
+const cfg = require('./../../../config.json');
 const componentDirs = fs.readdirSync(basePath, 'utf8');
 const TYPE_IDENTIFY_OPEN = 'tbody_open';
 const TYPE_IDENTIFY_CLOSE = 'tbody_close';
 const TR_TYPE_IDENTIFY_OPEN = 'tr_open';
 const TR_TYPE_IDENTIFY_CLOSE = 'tr_close';
+let packages = [];
+
+const kebabCase = (str) => {
+  str = str.replace(str.charAt(0), str.charAt(0).toLocaleLowerCase());
+  return str.replace(/([a-z])([A-Z])/g, (_, p1, p2) => p1 + '-' + p2.toLowerCase());
+};
+
+const getCompName = (name) => {
+  if (!packages.length) {
+    cfg.nav.forEach((item, index) => {
+      packages = packages.concat(item.packages);
+    });
+  }
+  const packageName = packages.find((item) => item.name.toLowerCase() === name.toLowerCase());
+  return packageName.name;
+};
 
 const getSubSources = (sources) => {
   const startIndex = sources.findIndex((source) => source.type === TYPE_IDENTIFY_OPEN);
@@ -30,7 +47,8 @@ const genaratorComponentMap = () => {
       const data = fs.readFileSync(absolutePath, 'utf8');
       let sources = MarkdownIt.parse(data, {});
       sources = getSubSources(sources);
-      componentMap[componentDir] = {
+      let compoName = kebabCase(getCompName(componentDir));
+      componentMap[compoName] = {
         site: `/zh-CN/component/${componentDir}`,
         props: sources.filter((source) => source.type === 'inline').length
           ? [`${sources.filter((source) => source.type === 'inline')[0].content}=''`]

+ 28 - 32
src/packages/vscode-extension/src/componentMap.ts

@@ -1,7 +1,7 @@
 import { ComponentDesc } from './componentDesc';
 
 export const componentMap: Record<string, ComponentDesc> = {
-  actionsheet: {
+  'action-sheet': {
     site: '/zh-CN/component/actionsheet',
     props: ["v-model:visible=''"]
   },
@@ -9,7 +9,7 @@ export const componentMap: Record<string, ComponentDesc> = {
     site: '/zh-CN/component/address',
     props: ["v-model:visible=''"]
   },
-  addresslist: {
+  'address-list': {
     site: '/zh-CN/component/addresslist',
     props: ["data=''"]
   },
@@ -21,7 +21,7 @@ export const componentMap: Record<string, ComponentDesc> = {
     site: '/zh-CN/component/audio',
     props: ["url=''"]
   },
-  audiooperate: {
+  'audio-operate': {
     site: '/zh-CN/component/audiooperate',
     props: ["type=''"]
   },
@@ -69,7 +69,7 @@ export const componentMap: Record<string, ComponentDesc> = {
     site: '/zh-CN/component/checkbox',
     props: ["v-model=''"]
   },
-  circleprogress: {
+  'circle-progress': {
     site: '/zh-CN/component/circleprogress',
     props: ["progress=''"]
   },
@@ -79,9 +79,9 @@ export const componentMap: Record<string, ComponentDesc> = {
   },
   comment: {
     site: '/zh-CN/component/comment',
-    props: ["headerType=''"]
+    props: ["header-type=''"]
   },
-  configprovider: {
+  'config-provider': {
     site: '/zh-CN/component/configprovider',
     props: ["theme=''"]
   },
@@ -93,7 +93,7 @@ export const componentMap: Record<string, ComponentDesc> = {
     site: '/zh-CN/component/countup',
     props: ["init-num=''"]
   },
-  datepicker: {
+  'date-picker': {
     site: '/zh-CN/component/datepicker',
     props: ["v-model=''"]
   },
@@ -125,7 +125,7 @@ export const componentMap: Record<string, ComponentDesc> = {
     site: '/zh-CN/component/empty',
     props: ["image=''"]
   },
-  fixednav: {
+  'fixed-nav': {
     site: '/zh-CN/component/fixednav',
     props: ["visible=''"]
   },
@@ -145,7 +145,7 @@ export const componentMap: Record<string, ComponentDesc> = {
     site: '/zh-CN/component/image',
     props: ["src=''"]
   },
-  imagepreview: {
+  'image-preview': {
     site: '/zh-CN/component/imagepreview',
     props: ["show=''"]
   },
@@ -153,15 +153,15 @@ export const componentMap: Record<string, ComponentDesc> = {
     site: '/zh-CN/component/indicator',
     props: ["current=''"]
   },
-  infiniteloading: {
+  'infinite-loading': {
     site: '/zh-CN/component/infiniteloading',
-    props: ["has-more=''"]
+    props: ["v-model=''"]
   },
   input: {
     site: '/zh-CN/component/input',
     props: ["v-model=''"]
   },
-  inputnumber: {
+  'input-number': {
     site: '/zh-CN/component/inputnumber',
     props: ["v-model=''"]
   },
@@ -193,14 +193,10 @@ export const componentMap: Record<string, ComponentDesc> = {
     site: '/zh-CN/component/notify',
     props: ["type=''"]
   },
-  numberkeyboard: {
+  'number-keyboard': {
     site: '/zh-CN/component/numberkeyboard',
     props: ["v-model:visible=''"]
   },
-  oldpicker: {
-    site: '/zh-CN/component/oldpicker',
-    props: ["v-model:visible=''"]
-  },
   overlay: {
     site: '/zh-CN/component/overlay',
     props: ["v-model:visible=''"]
@@ -229,9 +225,9 @@ export const componentMap: Record<string, ComponentDesc> = {
     site: '/zh-CN/component/progress',
     props: ["percentage=''"]
   },
-  pullrefresh: {
+  'pull-refresh': {
     site: '/zh-CN/component/pullrefresh',
-    props: ["useWindow=''"]
+    props: ["v-model=''"]
   },
   radio: {
     site: '/zh-CN/component/radio',
@@ -249,11 +245,11 @@ export const componentMap: Record<string, ComponentDesc> = {
     site: '/zh-CN/component/searchbar',
     props: ["v-model=''"]
   },
-  shortpassword: {
+  'short-password': {
     site: '/zh-CN/component/shortpassword',
     props: ["v-model=''"]
   },
-  sidenavbar: {
+  'side-navbar': {
     site: '/zh-CN/component/sidenavbar',
     props: ["offset=''"]
   },
@@ -285,7 +281,7 @@ export const componentMap: Record<string, ComponentDesc> = {
     site: '/zh-CN/component/swiper',
     props: ["width=''"]
   },
-  swiperitem: {
+  'swiper-item': {
     site: '/zh-CN/component/swiperitem',
     props: ['']
   },
@@ -295,7 +291,7 @@ export const componentMap: Record<string, ComponentDesc> = {
   },
   tabbar: {
     site: '/zh-CN/component/tabbar',
-    props: ["v-model:visible=''"]
+    props: ["v-model=''"]
   },
   table: {
     site: '/zh-CN/component/table',
@@ -309,31 +305,31 @@ export const componentMap: Record<string, ComponentDesc> = {
     site: '/zh-CN/component/tag',
     props: ["type=''"]
   },
-  temp: {
-    site: '/zh-CN/component/temp',
-    props: ["name=''"]
-  },
   textarea: {
     site: '/zh-CN/component/textarea',
     props: ["v-model=''"]
   },
-  timedetail: {
+  'time-detail': {
     site: '/zh-CN/component/timedetail',
     props: ["height=''"]
   },
-  timepannel: {
+  'time-pannel': {
     site: '/zh-CN/component/timepannel',
     props: ["height=''"]
   },
-  timeselect: {
+  'time-select': {
     site: '/zh-CN/component/timeselect',
     props: ["visible=''"]
   },
   toast: {
     site: '/zh-CN/component/toast',
-    props: ["Toast.text=''"]
+    props: ["showToast.text=''"]
+  },
+  tour: {
+    site: '/zh-CN/component/tour',
+    props: ["visible=''"]
   },
-  trendarrow: {
+  'trend-arrow': {
     site: '/zh-CN/component/trendarrow',
     props: ["rate=''"]
   },

+ 2 - 3
src/packages/vscode-extension/src/extension.ts

@@ -22,8 +22,7 @@ const provideHover = (document: vscode.TextDocument, position: vscode.Position,
         const { site } = componentMap[item];
 
         return new vscode.MarkdownString(
-          `[NutUI -> $(references) 请查看 ${bigCamelize(item)} 组件官方文档](${DOC}${site})\n`,
-          true
+          `[NutUI -> $(references) 请查看 ${bigCamelize(item)} 组件官方文档](${DOC}${site})\n`
         );
       });
 
@@ -42,7 +41,7 @@ const provideCompletionItems = () => {
   return completionItems;
 };
 
-const resolveCompletionItem = (item: vscode.CompletionItem) => {
+const resolveCompletionItem = (item: vscode.CompletionItem): any => {
   const name = kebabCase(<string>item.label).slice(4);
   const descriptor: ComponentDesc = componentMap[name];