UNPKG

3.29 kBJavaScriptView Raw
1const { isArr } = require('./util/tools');
2
3// https://developer.mozilla.org/en-US/docs/Web/HTML/Element
4const HTML_TAGS = [
5// Main root
6'html',
7// Document metadata
8'link,meta,style,title',
9// Sectioning root
10'body',
11// Content sectioning
12'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section',
13// Text content
14'blockquote,dd,dir,div,dl,dt,figcaption,figure,hr,li,main,ol,p,pre,ul',
15// Inline text semantics
16'a,abbr,b,bdi,bdo,br,cite,code,data,dfn,em,i,kdb,mark,nobr,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,tt,u,var,wbr',
17// Image and multimedia
18'area,audio,img,map,track,video',
19// Embedded content
20'applet,embed,iframe,noembed,object,param,picture,source',
21// Scripting
22'canvas,noscript,script',
23// Demarcating edits
24'del,ins',
25// Table content
26'caption,col,colgroup,table,tbody,td,tfoot,th,thead,tr',
27// Forms
28'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea',
29// Interactive elements
30'details,dialog,menu,menuitem,summary',
31// Web Components
32'content,element,shadow,slot,template',
33// Obsolete and deprecated elements
34'acronym,applet,basefont,bgsound,big,blink,center,command,content,dir,element,font,frame,frameset,image,isindex,keygen,listing,marquee,menuitem,multicol,nextid,nobr,noembed,noframes,plaintext,shadow,spacer,strike,tt,xmp'
35].join(',').split(',');
36
37// https://developers.weixin.qq.com/miniprogram/dev/component/
38const WXML_TAGS = [
39// view
40'block,view,scroll-view,swiper,movable-view,cover-view',
41// base
42'icon,text,rich-text,progress',
43// form
44'button,checkbox,form,input,label,picker,picker-view,radio,slider,switch,textarea',
45// navigator
46'navigator',
47// audio
48'image,video,camera,live-player,live-pusher',
49// map
50'map',
51// canvas
52'canvas',
53// slot
54'slot',
55// ability
56'open-data,web-view,ad'
57].join(',').split(',');
58
59const HTML2WXML_MAP = {
60 'select': 'picker',
61 'datalist': 'picker',
62 'img': 'image',
63 'source': 'audio',
64 'video': 'video',
65 'track': 'video',
66 'a': 'navigator',
67 'span': 'label',
68 'contact-button': 'contact-button',
69 // support template [template](https://developers.weixin.qq.com/miniprogram/dev/framework/view/wxml/template.html)
70 'wx-template': 'template'
71};
72
73/**
74 * combine two tags array/object
75 * @param {Array} original original tag list
76 * @param {Undefined/String/Array/Object} additional additional list
77 * @return {Array} new tag list Array
78 */
79const combineTag = function (original, additional) {
80 if (isArr(additional)) {
81 return original.concat(additional);
82 } else if (typeof additional === 'string') {
83 return original.concat(additional.split(','));
84 } else if (typeof additional !== 'object') {
85 return [].concat(original);
86 }
87
88 let addTags = [];
89 let removeTags = [];
90 for (let k in additional) {
91 if (addTags[k]) {
92 addTags.push(k);
93 } else {
94 removeTags.push(k);
95 }
96 }
97
98 let rst = original.concat(addTags);
99 removeTags.forEach(k => {
100 let index = rst.indexOf(k);
101 while (index !== -1) {
102 rst.splice(index, 1);
103 index = rst.indexOf(k);
104 }
105 });
106};
107
108const combineTagMap = function (original, additional = {}) {
109 return Object.assign({}, original, additional);
110};
111
112exports = module.exports = {
113 HTML_TAGS,
114 WXML_TAGS,
115 HTML2WXML_MAP,
116 combineTag,
117 combineTagMap
118};