From d3de0a6fff9ea94ab3c7f5b49cad56dad5d3c0b7 Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期四, 22 九月 2022 17:36:24 +0800 Subject: [PATCH] 2022-09-22 --- src/menu/components/form/formaction/formconfig.jsx | 2 src/templates/zshare/modalform/index.jsx | 2 src/menu/components/card/cardcellcomponent/index.jsx | 2 src/templates/zshare/formconfig.jsx | 13 +++ src/menu/components/share/actioncomponent/formconfig.jsx | 54 ++++++++----- src/menu/components/card/cardcellcomponent/dragaction/action.jsx | 4 src/mob/modulesource/index.jsx | 4 + src/mob/modulesource/option.jsx | 2 src/menu/viewnodes/index.jsx | 2 src/menu/modulecell/index.jsx | 2 src/menu/components/card/cardsimplecomponent/options.jsx | 30 +++++++ src/menu/components/share/actioncomponent/actionform/index.jsx | 18 +++- src/tabviews/zshare/fileupload/index.jsx | 14 +++ src/tabviews/zshare/actionList/normalbutton/index.jsx | 6 + src/menu/components/card/cardcomponent/options.jsx | 29 ++++++ 15 files changed, 143 insertions(+), 41 deletions(-) diff --git a/src/menu/components/card/cardcellcomponent/dragaction/action.jsx b/src/menu/components/card/cardcellcomponent/dragaction/action.jsx index baf28f1..31328d0 100644 --- a/src/menu/components/card/cardcellcomponent/dragaction/action.jsx +++ b/src/menu/components/card/cardcellcomponent/dragaction/action.jsx @@ -53,8 +53,10 @@ if (card.OpenType === 'form') { if (card.formType === 'switch') { btnElement = (<Switch style={_style} className={card.size === 'large' ? 'ant-switch-large' : ''} size={card.size} checkedChildren={card.openText || ''} unCheckedChildren={card.closeText || ''}/>) - } else { + } else if (card.formType === 'radio') { btnElement = (<Checkbox style={_style}></Checkbox>) + } else { + btnElement = (<Button style={_style} type="link"><MkIcon type="scan"/></Button>) } } else if (card.show === 'icon') { btnElement = (<Button style={_style} type="link"><MkIcon type={card.icon}/>{warning}</Button>) diff --git a/src/menu/components/card/cardcellcomponent/index.jsx b/src/menu/components/card/cardcellcomponent/index.jsx index 20e37de..ce15a0c 100644 --- a/src/menu/components/card/cardcellcomponent/index.jsx +++ b/src/menu/components/card/cardcellcomponent/index.jsx @@ -149,7 +149,7 @@ let options = ['font', 'border', 'padding', 'margin', 'background'] if (element.eleType === 'button') { - if (element.OpenType === 'form') { + if (element.OpenType === 'form' && element.formType !== 'scan') { options = ['margin', 'float'] } else { options.push('width', 'minHeight', 'float') diff --git a/src/menu/components/card/cardcomponent/options.jsx b/src/menu/components/card/cardcomponent/options.jsx index d36487f..a2faaf0 100644 --- a/src/menu/components/card/cardcomponent/options.jsx +++ b/src/menu/components/card/cardcomponent/options.jsx @@ -40,6 +40,12 @@ if (hasMenus) { ops = [{value: 'menus', label: '鑿滃崟缁�'}] } + let adapters = sessionStorage.getItem('adapter') || '' + if (adapters.indexOf('wxmini') > -1) { + ops.push({value: 'miniprogram', label: '灏忕▼搴�'}) + } else if (setting.click === 'miniprogram') { + setting.click = '' + } const cardSettingForm = [ { @@ -97,11 +103,11 @@ forbid: subtype !== 'propcard' }, { - type: !hasMenus ? 'radio' : 'select', + type: ops.length === 0 ? 'radio' : 'select', field: 'click', label: '鐐瑰嚮浜嬩欢', initval: setting.click || '', - tooltip: '褰撶粦瀹氱偣鍑讳簨浠舵椂锛屽崱鐗囩殑鍒囨崲鍔熻兘灏嗗け鏁堛��', + // tooltip: '褰撶粦瀹氱偣鍑讳簨浠舵椂锛屽崱鐗囩殑鍒囨崲鍔熻兘灏嗗け鏁堛��', required: false, options: [ {value: '', label: '鏃�'}, @@ -114,11 +120,13 @@ {field: 'menu', values: ['menu']}, {field: 'linkurl', values: ['link']}, {field: 'open', values: ['menu', 'link', 'menus']}, - {field: 'joint', values: ['menu', 'link', 'menus']}, + {field: 'joint', values: ['menu', 'link', 'menus', 'miniprogram']}, {field: 'linkbtn', values: ['button']}, {field: 'clickType', values: ['button']}, {field: 'menuType', values: ['menus']}, {field: 'menus', values: ['menus']}, + {field: 'miniAppId', values: ['miniprogram']}, + {field: 'miniPath', values: ['miniprogram']}, ] }, { @@ -148,6 +156,21 @@ span: 24 }, { + type: 'text', + field: 'miniAppId', + label: '灏忕▼搴廇ppID', + initval: setting.miniAppId || '', + required: true + }, + { + type: 'text', + field: 'miniPath', + label: '椤甸潰璺緞', + initval: setting.miniPath || '', + tooltip: '鍙寚瀹氳烦杞皬绋嬪簭椤甸潰锛屼负绌烘椂鎵撳紑棣栭〉锛屾敞锛氬弬鏁版嫾鎺ュ湪鎸囧畾椤甸潰鏃舵湁鏁堛��', + required: false + }, + { type: 'radio', field: 'open', label: '鎵撳紑鏂瑰紡', diff --git a/src/menu/components/card/cardsimplecomponent/options.jsx b/src/menu/components/card/cardsimplecomponent/options.jsx index 7b397d1..06b6740 100644 --- a/src/menu/components/card/cardsimplecomponent/options.jsx +++ b/src/menu/components/card/cardsimplecomponent/options.jsx @@ -83,7 +83,7 @@ field: 'click', label: '鐐瑰嚮浜嬩欢', initval: setting.click || '', - tooltip: '褰撻�夋嫨瑙﹀彂鎸夐挳鏃讹紝鍙湁褰撳崱鐗囦腑鍙瓨鍦ㄤ竴涓寜閽椂鏈夋晥銆�', + // tooltip: '褰撻�夋嫨瑙﹀彂鎸夐挳鏃讹紝鍙湁褰撳崱鐗囦腑鍙瓨鍦ㄤ竴涓寜閽椂鏈夋晥銆�', required: false, options: [ {value: '', label: '鏃�'}, @@ -198,6 +198,14 @@ } } + let ops = [] + let adapters = sessionStorage.getItem('adapter') || '' + if (adapters.indexOf('wxmini') > -1) { + ops.push({value: 'miniprogram', label: '灏忕▼搴�'}) + } else if (setting.click === 'miniprogram') { + setting.click = '' + } + const cardSettingForm = [ { type: 'text', @@ -218,12 +226,15 @@ {value: '', label: '鏃�'}, {value: 'menu', label: '鑿滃崟'}, {value: 'link', label: '閾炬帴'}, + ...ops ], controlFields: [ {field: 'menu', values: ['menu']}, {field: 'linkurl', values: ['link']}, {field: 'open', values: ['menu', 'link']}, - {field: 'joint', values: ['menu', 'link']}, + {field: 'joint', values: ['menu', 'link', 'miniprogram']}, + {field: 'miniAppId', values: ['miniprogram']}, + {field: 'miniPath', values: ['miniprogram']}, ] }, { @@ -248,6 +259,21 @@ forbid: appType !== 'pc' && appType !== 'mob' }, { + type: 'text', + field: 'miniAppId', + label: '灏忕▼搴廇ppID', + initval: setting.miniAppId || '', + required: true + }, + { + type: 'text', + field: 'miniPath', + label: '椤甸潰璺緞', + initval: setting.miniPath || '', + tooltip: '鍙寚瀹氳烦杞皬绋嬪簭椤甸潰锛屼负绌烘椂鎵撳紑棣栭〉锛屾敞锛氬弬鏁版嫾鎺ュ湪鎸囧畾椤甸潰鏃舵湁鏁堛��', + required: false + }, + { type: 'radio', field: 'joint', label: '鍙傛暟鎷兼帴', diff --git a/src/menu/components/form/formaction/formconfig.jsx b/src/menu/components/form/formaction/formconfig.jsx index 73b27d1..f27f8b5 100644 --- a/src/menu/components/form/formaction/formconfig.jsx +++ b/src/menu/components/form/formaction/formconfig.jsx @@ -296,7 +296,7 @@ type: 'text', key: 'output', label: '杩斿洖鍊�', - tooltip: '鎵ц鎴愬姛鍚庣殑杩斿洖鍊笺�傜郴缁熷嚱鏁板彲鎸囧畾杩斿洖鐨勫彉閲忥紙浠绗﹀紑澶达紝濡侤id锛夛紱鑷畾涔夊嚱鏁板彲鎸囧畾杩斿洖瀛楁锛堝id锛夈��', + tooltip: '鎵ц鎴愬姛鍚庣殑杩斿洖鍊笺�傜郴缁熷嚱鏁板彲鎸囧畾杩斿洖鐨勫彉閲忥紙浠绗﹀紑澶达紝杩斿洖id鏃跺彲浣跨敤@id@锛夛紱鑷畾涔夊嚱鏁板彲鎸囧畾杩斿洖瀛楁锛堝id锛夈��', initVal: card.output || '', required: false }, diff --git a/src/menu/components/share/actioncomponent/actionform/index.jsx b/src/menu/components/share/actioncomponent/actionform/index.jsx index a6125a5..29dcf6e 100644 --- a/src/menu/components/share/actioncomponent/actionform/index.jsx +++ b/src/menu/components/share/actioncomponent/actionform/index.jsx @@ -236,8 +236,10 @@ if (this.record.formType === 'switch') { shows.push('field', 'size', 'openVal', 'closeVal', 'openText', 'closeText') - } else { + } else if (this.record.formType === 'radio') { shows.push('field', 'openVal', 'closeVal') + } else { + shows.push('field') } reOptions.intertype = this.state.interTypeOptions.filter(item => item.value !== 'custom') @@ -428,6 +430,9 @@ shows.push('innerFunc', 'Ot', 'execSuccess', 'execError', 'urlkey') } else if (_funcType === 'pay') { shows.push('payType', 'Ot', 'execSuccess', 'execError', 'syncComponent', 'openmenu') + if (this.record.openmenu && this.record.openmenu !== 'goback') { + shows.push('open') + } reOptions.Ot = requireOptions.filter(op => ['requiredSgl'].includes(op.value)) } else if (_funcType === 'refund') { shows.push('Ot', 'execSuccess', 'execError', 'syncComponent', 'openmenu') @@ -878,9 +883,14 @@ values.modal = card.modal || null if (values.OpenType === 'form') { - if (/^(0|[1-9]\d*)$/.test(values.openVal) && /^(0|[1-9]\d*)$/.test(values.closeVal)) { - values.openVal = +values.openVal - values.closeVal = +values.closeVal + if (values.formType !== 'scan') { + if (/^(0|[1-9]\d*)$/.test(values.openVal) && /^(0|[1-9]\d*)$/.test(values.closeVal)) { + values.openVal = +values.openVal + values.closeVal = +values.closeVal + } + } else { + values.show = 'icon' + values.icon = 'scan' } } else if (values.OpenType === 'excelOut') { values.Ot = 'notRequired' diff --git a/src/menu/components/share/actioncomponent/formconfig.jsx b/src/menu/components/share/actioncomponent/formconfig.jsx index 157db98..970a91a 100644 --- a/src/menu/components/share/actioncomponent/formconfig.jsx +++ b/src/menu/components/share/actioncomponent/formconfig.jsx @@ -173,7 +173,7 @@ if (type === 'card') { opentypes.push({ value: 'form', - text: '琛ㄥ崟锛堝紑鍏虫垨鍕鹃�夋锛�' + text: '琛ㄥ崟' }) } else if (card.OpenType === 'form') { // 鎷栨嫿娣诲姞绫诲瀷杞崲 card.OpenType = 'pop' @@ -197,6 +197,16 @@ value: 'closetab', text: '鍏抽棴鏍囩' }] + } + + let formTypes = [] + if (appType === 'mob') { + formTypes = [{ + value: 'scan', + text: '鎵弿' + }] + } else if (card.formType === 'scan') { + card.formType = 'switch' } let forms = [ @@ -245,7 +255,8 @@ }, { value: 'radio', text: '鍕鹃�夋' - }] + }, + ...formTypes] }, { type: 'select', @@ -281,9 +292,9 @@ options: [{ value: 'wxpay', text: '寰俊' - }, { - value: 'alipay', - text: '鏀粯瀹�' + // }, { + // value: 'alipay', + // text: '鏀粯瀹�' }] }, { @@ -737,6 +748,7 @@ tooltip: '鎵ц鎴愬姛鍚庨渶瑕佹墦寮�鐨勮彍鍗曘��', initVal: card.openmenu || (!appType ? [] : ''), help: appType === 'mob' || appType === 'pc' ? '鍙繑鍥炰笂涓�椤点��' : null, + extendName: 'MenuNo', required: false, allowClear: true, options: appType === 'mob' || appType === 'pc' ? [...appMenus, {value: 'goback', text: '杩斿洖锛堜笂涓�椤碉級'}] : menulist, @@ -746,7 +758,7 @@ type: 'text', key: 'output', label: '杩斿洖鍊�', - tooltip: '鎵ц鎴愬姛鍚庣殑杩斿洖鍊笺�傜郴缁熷嚱鏁板彲鎸囧畾杩斿洖鐨勫彉閲忥紙浠绗﹀紑澶达紝濡侤id锛夛紱鑷畾涔夊嚱鏁板彲鎸囧畾杩斿洖瀛楁锛堝id锛夈��', + tooltip: '鎵ц鎴愬姛鍚庣殑杩斿洖鍊笺�傜郴缁熷嚱鏁板彲鎸囧畾杩斿洖鐨勫彉閲忥紙浠绗﹀紑澶达紝杩斿洖id鏃跺彲浣跨敤@id@锛夛紱鑷畾涔夊嚱鏁板彲鎸囧畾杩斿洖瀛楁锛堝id锛夈��', initVal: card.output || '', required: false, forbid: viewType === 'popview' @@ -907,6 +919,21 @@ required: false }, { + type: 'radio', + key: 'hidden', + label: '闅愯棌', + initVal: card.hidden || 'false', + tooltip: '闅愯棌鍚庢寜閽湪椤甸潰涓笉鏄剧ず锛屼笖涓嶅弬涓庢潈闄愬垎閰嶃��', + required: false, + options: [{ + value: 'false', + text: '鍚�' + }, { + value: 'true', + text: '鏄�' + }] + }, + { type: 'splitLine', key: 'title', label: '琛ㄥ崟', @@ -965,21 +992,6 @@ label: '鍏抽棴鎻愮ず', initVal: card.closeText || '', required: false, - }, - { - type: 'radio', - key: 'hidden', - label: '闅愯棌', - initVal: card.hidden || 'false', - tooltip: '闅愯棌鍚庢寜閽湪椤甸潰涓笉鏄剧ず锛屼笖涓嶅弬涓庢潈闄愬垎閰嶃��', - required: false, - options: [{ - value: 'false', - text: '鍚�' - }, { - value: 'true', - text: '鏄�' - }] }, { type: 'radio', diff --git a/src/menu/modulecell/index.jsx b/src/menu/modulecell/index.jsx index 135b1e9..e1c5fad 100644 --- a/src/menu/modulecell/index.jsx +++ b/src/menu/modulecell/index.jsx @@ -38,7 +38,7 @@ { value: 'tab', text: '鏍囩椤�', type: 'action', class: 'button', $init: true }, { value: 'innerpage', text: '鏂伴〉闈�', type: 'action', class: 'button', $init: true }, { value: 'funcbutton', text: '鍔熻兘鎸夐挳', type: 'action', class: 'button', $init: true }, - { value: 'form', text: '琛ㄥ崟(寮�鍏�)', type: 'action', class: 'button', $init: true } + { value: 'form', text: '琛ㄥ崟', type: 'action', class: 'button', $init: true } ] }, { diff --git a/src/menu/viewnodes/index.jsx b/src/menu/viewnodes/index.jsx index c0515df..ec0fd77 100644 --- a/src/menu/viewnodes/index.jsx +++ b/src/menu/viewnodes/index.jsx @@ -174,7 +174,7 @@ return ` <group> <rect draggable="true" style={{width: ${width}, height: 26, cursor: 'pointer', fill: 'transparent' }}> - <text style={{ fontSize: 12, fill: ${cfg.deleted ? '#959595' : 'black'}, marginLeft: 12, marginTop: 6 }}>${cfg.label}</text> + <text style={{ fontSize: 12, fill: ${cfg.deleted ? '#959595' : 'black'}, cursor: 'pointer', marginLeft: 12, marginTop: 6 }}>${cfg.label}</text> </rect> <rect style={{ fill: ${color}, width: ${width}, cursor: 'pointer', height: 2, x: 0, y: 32 }} /> </group> diff --git a/src/mob/modulesource/index.jsx b/src/mob/modulesource/index.jsx index f84cdd7..2ee0d7e 100644 --- a/src/mob/modulesource/index.jsx +++ b/src/mob/modulesource/index.jsx @@ -23,6 +23,10 @@ options = fromJS(components).toJS() } else { options = fromJS(menuOptions).toJS() + let adapters = sessionStorage.getItem('adapter') || '' + if (adapters.indexOf('wxmini') === -1) { + options = options.filter(item => item.adapter !== 'mini') + } } this.setState({ diff --git a/src/mob/modulesource/option.jsx b/src/mob/modulesource/option.jsx index 6843f2a..3052eb7 100644 --- a/src/mob/modulesource/option.jsx +++ b/src/mob/modulesource/option.jsx @@ -60,5 +60,5 @@ { type: 'menu', url: SandBox, component: 'code', subtype: 'sandbox', title: '鑷畾涔�', width: 24 }, { type: 'menu', url: group, component: 'group', subtype: 'normalgroup', title: '鍒嗙粍', width: 24 }, { type: 'menu', url: Login, component: 'login', subtype: 'normallogin', title: '娉ㄥ唽/鐧诲綍', width: 24 }, - { type: 'menu', url: officialAccount, component: 'officialAccount', subtype: 'officialAccount', title: '鍏虫敞鍏紬鍙凤紙灏忕▼搴忎腑锛�', width: 24 }, + { type: 'menu', url: officialAccount, component: 'officialAccount', subtype: 'officialAccount', title: '鍏虫敞鍏紬鍙凤紙灏忕▼搴忎腑锛�', width: 24, adapter: 'mini' }, ] diff --git a/src/tabviews/zshare/actionList/normalbutton/index.jsx b/src/tabviews/zshare/actionList/normalbutton/index.jsx index 7b31de2..8787af5 100644 --- a/src/tabviews/zshare/actionList/normalbutton/index.jsx +++ b/src/tabviews/zshare/actionList/normalbutton/index.jsx @@ -2563,10 +2563,12 @@ if (hidden) return null if (btn.OpenType === 'form') { - if (btn.formType === 'switch') { + if (btn.formType === 'switch') { return <Switch loading={loading} checked={check} disabled={disabled || loading} title={disabled ? (btn.reason || '') : ''} onChange={(val,e) => {e.stopPropagation();this.actionTrigger()}} style={btn.style} className={btn.size === 'large' ? 'ant-switch-large' : ''} size={btn.size} checkedChildren={btn.openText || ''} unCheckedChildren={btn.closeText || ''}/> - } else { + } else if (btn.formType === 'radio') { return <Checkbox disabled={disabled || loading} title={disabled ? (btn.reason || '') : ''} checked={check} onChange={(e) => {e.stopPropagation();this.actionTrigger()}} style={btn.style}></Checkbox> + } else { + return <Button type="link" icon="scan" disabled={true} style={btn.style} onClick={(e) => {e.stopPropagation()}}></Button> } } diff --git a/src/tabviews/zshare/fileupload/index.jsx b/src/tabviews/zshare/fileupload/index.jsx index 54d9727..cb0be7b 100644 --- a/src/tabviews/zshare/fileupload/index.jsx +++ b/src/tabviews/zshare/fileupload/index.jsx @@ -24,6 +24,7 @@ compress: 'false', fileType: 'text', showprogress: false, + maxSize: 0, filelist: [] } @@ -89,6 +90,7 @@ filelist, compress, limit: config.limit || 2, + maxSize: config.maxSize || 0, maxFile: maxFile, fileType: config.fileType || 'text' }) @@ -218,7 +220,7 @@ } beforeUpload = (file) => { - const { accepts, compress, limit, rduri } = this.state + const { accepts, compress, limit, rduri, maxSize } = this.state if (accepts && file.name) { let pass = false @@ -235,6 +237,16 @@ return false } } + if (maxSize) { + let fileSize = file.size / 1024 / 1024 + + if (fileSize > maxSize) { + setTimeout(() => { + this.onFail(`鏂囦欢澶у皬涓嶅彲瓒呰繃${maxSize}M`) + }, 10) + return false + } + } this.setState({ showprogress: true, diff --git a/src/templates/zshare/formconfig.jsx b/src/templates/zshare/formconfig.jsx index 6ec8e3d..0195364 100644 --- a/src/templates/zshare/formconfig.jsx +++ b/src/templates/zshare/formconfig.jsx @@ -1371,7 +1371,7 @@ type: 'text', key: 'output', label: '杩斿洖鍊�', - tooltip: '鎵ц鎴愬姛鍚庣殑杩斿洖鍊笺�傜郴缁熷嚱鏁板彲鎸囧畾杩斿洖鐨勫彉閲忥紙浠绗﹀紑澶达紝濡侤id锛夛紱鑷畾涔夊嚱鏁板彲鎸囧畾杩斿洖瀛楁锛堝id锛夈��', + tooltip: '鎵ц鎴愬姛鍚庣殑杩斿洖鍊笺�傜郴缁熷嚱鏁板彲鎸囧畾杩斿洖鐨勫彉閲忥紙浠绗﹀紑澶达紝杩斿洖id鏃跺彲浣跨敤@id@锛夛紱鑷畾涔夊嚱鏁板彲鎸囧畾杩斿洖瀛楁锛堝id锛夈��', initVal: card.output || '', required: false }, @@ -3561,6 +3561,17 @@ }, { type: 'number', + key: 'maxSize', + min: 0.01, + max: 1024, + precision: 2, + label: '鏈�澶у�硷紙M锛�', + initVal: card.maxSize, + tooltip: '鏂囦欢鏈�澶у�硷紝瓒呭嚭鏃朵笉鍏佽涓婁紶锛屽�间负绌烘椂涓嶉檺鍒躲��', + required: false + }, + { + type: 'number', key: 'span', min: 1, max: 24, diff --git a/src/templates/zshare/modalform/index.jsx b/src/templates/zshare/modalform/index.jsx index 2b1a8e2..0865361 100644 --- a/src/templates/zshare/modalform/index.jsx +++ b/src/templates/zshare/modalform/index.jsx @@ -27,7 +27,7 @@ checkcard: ['initval', 'readonly', 'required', 'hidden', 'readin', 'resourceType', 'span', 'labelwidth', 'display', 'tooltip', 'extra', 'width', 'multiple', 'splitline', 'marginTop', 'marginBottom'], multiselect: ['initval', 'readonly', 'required', 'hidden', 'readin', 'resourceType', 'fieldlength', 'span', 'labelwidth', 'tooltip', 'extra', 'marginTop', 'marginBottom', 'dropdown'], link: ['initval', 'readonly', 'required', 'hidden', 'readin', 'resourceType', 'declare', 'setAll', 'linkField', 'linkSubField', 'span', 'labelwidth', 'tooltip', 'extra', 'emptyText', 'enter', 'splitline', 'dropdown', 'marginTop', 'marginBottom'], - fileupload: ['readonly', 'required', 'readin', 'fieldlength', 'maxfile', 'fileType', 'span', 'labelwidth', 'tooltip', 'extra', 'compress', 'miniSet', 'splitline', 'marginTop', 'marginBottom'], + fileupload: ['readonly', 'required', 'readin', 'fieldlength', 'maxfile', 'fileType', 'span', 'labelwidth', 'tooltip', 'extra', 'compress', 'miniSet', 'splitline', 'marginTop', 'marginBottom', 'maxSize'], switch: ['initval', 'openVal', 'closeVal', 'openText', 'closeText', 'readonly', 'hidden', 'readin', 'span', 'labelwidth', 'tooltip', 'extra', 'splitline', 'marginTop', 'marginBottom'], date: ['initval', 'readonly', 'required', 'hidden', 'readin', 'span', 'labelwidth', 'tooltip', 'extra', 'declareType', 'mode', 'splitline', 'marginTop', 'marginBottom', 'minDate', 'maxDate', 'precision'], datemonth: ['initval', 'readonly', 'required', 'hidden', 'readin', 'span', 'labelwidth', 'tooltip', 'extra', 'declareType', 'splitline', 'marginTop', 'marginBottom'], -- Gitblit v1.8.0