@pluginarch/create-parch
Version:
this is way to create a ui project
1,506 lines (1,410 loc) • 60 kB
JavaScript
let attrsKey = null
function scriptFormat(id, attrs, scriptStr = '') {
scriptStr = removeComment(scriptStr).replace(/\n/gm, '')
const funName = `gen${attrs.tag}Script`
let script = scriptStr
let events = ''
// 如果组件有内置事件,优先处理内置事件函数
if (window[funName]) {
attrsKey = attrs.attrMap
const eventsResult = window[funName].call(window, id, scriptStr, attrsKey)
script = eventsResult.script
events = eventsResult.events
}
const attrResult = transformAttrChangedScript(id, script, events)
script = attrResult.script
events = attrResult.events
const animResult = transformAnimScript(id, script, events)
script = animResult.script
events = animResult.events
script = qml2js(id, script, attrs.attrMap)
if (script) {
script = removeFun(script)
}
// 将最后面的逗号删掉在,再拼上前后的一对花括号
events = `{${events.trim().slice(0, -1)}}`
return { script, events }
}
/*
处理属性改变事件名
*/
function combinedEvents(id, propsname, script, events) {
for (let k = 0; k < propsname.length; k++) {
let firstUpCasepropName = propsname[k].replace(/^\S/, (s) =>
s.toUpperCase()
)
if (script.includes(`on${firstUpCasepropName}Changed`)) {
script = script.replace(
`on${firstUpCasepropName}Changed:`,
`function ${id}_${firstUpCasepropName}ChangedHandler()`
)
events +=
`'on` +
firstUpCasepropName.replace(/([A-Z])/g, '-$1').toLowerCase() +
`-changed': _vm.${id}_${firstUpCasepropName}ChangedHandler,`
}
}
if (script.includes('onMouseLeftOneClickAction')) {
script = script.replace(
'onMouseLeftOneClickAction:',
`function ${id}_MouseLeftOneClickActionHandler()`
)
events += `'on-mouse-left-one-click-action': _vm.${id}_MouseLeftOneClickActionHandler,`
}
if (script.includes('onMouseLeftDoubleClickAciton')) {
script = script.replace(
'onMouseLeftDoubleClickAciton:',
`function ${id}_MouseLeftDoubleClickAcitonHandler()`
)
events += `'on-mouse-left-double-click-aciton': _vm.${id}_MouseLeftDoubleClickAcitonHandler,`
}
if (script.includes('onMouseRightDoubleClickAction')) {
script = script.replace(
'onMouseRightDoubleClickAction:',
`function ${id}_MouseRightDoubleClickActionHandler()`
)
events += `'on-mouse-right-double-click-action': _vm.${id}_MouseRightDoubleClickActionHandler,`
}
return { script, events }
}
/**
* 监听动画结束的事件,目前尚无实现方案
* @param {String} id
* @param {String} script
* @param {String} events
*/
function transformAnimScript(id, script, events) {
if (script.includes('onAnimStop')) {
script = script.replace('onAnimStop:', `function ${id}_AnimStopHandler()`)
events += `onAnimStop: _vm.${id}_AnimStopHandler,`
}
return { script, events }
}
/**
* 统一处理「除事件触发之外]的属性变化事件
* @param {String} id
* @param {String} script
* @param {String} events
*/
function transformAttrChangedScript(id, script, events) {
script = script.replace(/on[A-Z][a-z]+Changed:/g, (attrChangeName) => {
const attr = attrChangeName
.replace('on', '')
.replace('Changed:', '')
.replace(/^\S/, (s) => s.toLowerCase()) // 首字母小写
events += `${attrChangeName} _vm.${id}_${attr}ChangedHandler,`
return `function ${id}_${attr}ChangedHandler(${attr})`
})
return { script, events }
}
/**
* 将qml中[全局变量执行的脚本]转化为js脚本
* 借助第三方的ast解析器实现
* @param {String} id 组件id
* @param {String} code 脚本字符串
*/
function qml2js(id, code, attrMap) {
const keys = Object.keys(attrMap),
refPicture = attrMap['refPicture']
let map = {}
if (id === refPicture && attrMap.subGraphIdMap) {
map = attrMap.subGraphIdMap
} else if (
refPicture &&
window[refPicture] &&
window[refPicture]['subGraphIdMap']
) {
map = window[refPicture]['subGraphIdMap']
}
const ast = esprima.parseScript(code)
estraverse.traverse(ast, {
enter(node, parent) {
if (node.type === 'UnaryExpression') {
if (
refPicture &&
node.argument &&
node.argument.name &&
map[node.argument.name]
) {
//合并图元取反变量的处理 !recv_parm
node.argument.name = map[node.argument.name]
}
}
if (node.type === 'ForInStatement' && node.right && node.right.name) {
if (refPicture && map[node.right.name]) {
//for 循环变量替换
node.right.name = map[node.right.name]
}
}
// TODO 后需考虑对以下判断逻辑重构
/**
* 同时满足以下三个条件时对赋值语句进行修改,形如 text="111111"
* 1. 类型为赋值语句
* 2. left.name存在,即直接给变量赋值,而不是给对象的属性赋值
* 3. 该变量为当前组件的某一属性名称
*/
if (node.type === 'AssignmentExpression' && node.left && node.left.name) {
if (keys.includes(node.left.name)) {
node.left = transformAst(node, 'left', id)
} else if (refPicture && map[node.left.name]) {
//子图中变量名替换
node.left.name = map[node.left.name]
}
}
/**
* 同时满足以下三个条件时对赋值语句进行修改,形如 aaa=text
* 1. 类型为赋值语句
* 2. left.name存在,即直接给变量赋值,而不是给对象的属性赋值
* 3. 该变量为当前组件的某一属性名称
*/
if (
node.type === 'AssignmentExpression' &&
node.right &&
node.right.name
) {
if (keys.includes(node.right.name)) {
node.right = transformAst(node, 'right', id)
} else if (refPicture && map[node.right.name]) {
//子图中变量名替换
node.right.name = map[node.right.name]
}
}
/**满足下述条件:
* 1.类型是return语句
* 2.返回的该变量是当前组件的某一属性名称
* 例如:return enabled;
* */
if(node.type === 'ReturnStatement' && node.argument && node.argument.name) {
if (keys.includes(node.argument.name)) {
node.argument = transformAst(node, 'argument', id)
}
}
/**
* 同时满足以下三个条件时对赋值语句进行修改,形如 text == '666'
* 1. 类型为判断语句
* 2. left.name存在,即直接给变量赋值,而不是给对象的属性赋值
* 3. 该变量为当前组件的某一属性名称
*/
if (node.type === 'BinaryExpression' && node.left && node.left.name) {
if (keys.includes(node.left.name)) {
node.left = transformAst(node, 'left', id)
} else if (refPicture && map[node.left.name]) {
//子图中变量名替换
node.left.name = map[node.left.name]
}
}
/**
* 同时满足以下三个条件时对赋值语句进行修改,形如 '666' == text
* 1. 类型为判断语句
* 2. right.name存在,即直接给变量赋值,而不是给对象的属性赋值
* 3. 该变量为当前组件的某一属性名称
*/
if (node.type === 'BinaryExpression' && node.right && node.right.name) {
if (keys.includes(node.right.name)) {
node.right = transformAst(node, 'right', id)
} else if (refPicture && map[node.right.name]) {
//子图中变量名替换
node.right.name = map[node.right.name]
}
}
/**
* 同时满足以下三个条件时对函数调用语句进行修改, 形如test('88888')
* 1. 类型为调用表语句
* 2. callee.name存在,即使直接调用全局函数,而不是调用对象函数
* 3. 该函数非全局函数
*/
if (node.type === 'CallExpression' && node.callee && node.callee.name) {
if (!window[node.callee.name]) {
node.callee = transformAst(node, 'callee', id)
} else {
node.arguments.forEach((arg) => {
if (arg.type === 'Identifier' && refPicture && map[arg.name]) {
//子图方法调用参数判断
arg.name = map[arg.name]
}
})
}
}
/**
* 上述CallExpression表达式不满足要求,故此补充
* 当例如:function a(){const json={}; json.sort(up)};
* function up(x,y){return x.vol_id - y.vol_id;}
* up 没括号,不在满足上述要求,则不会自动补充this
*/
if (
node.type === 'CallExpression' &&
node.callee &&
node.arguments &&
node.arguments.length &&
node.callee.property &&
node.callee.property.name &&
node.callee.property.name === 'sort'
) {
for (let argsNo = 0; argsNo < node.arguments.length; argsNo++) {
if (
node.arguments[argsNo].type === 'Identifier' &&
!window[node.arguments[argsNo].name]
) {
node.arguments[argsNo] = transformAstArgument(
node,
`arguments`,
id,
argsNo
)
}
}
}
/**
* 同时满足以下三个条件时对赋值语句进行修改,形如 var aaa = text
* 1. 类型为声明语句
* 2. init.name存在,即直接给变量赋值,而不是给对象的属性赋值
* 3. 该变量为当前组件的某一属性名称
*/
if (node.type === 'VariableDeclarator' && node.init) {
if (keys.includes(node.init.name) && node.init.name) {
node.init = transformAst(node, 'init', id)
} else if (refPicture && map[node.init.name]) {
//子图中变量名替换
node.init.name = map[node.init.name]
}
/**
* 处理 右边是情景new对象的情景,例如:
* var date_start = new Date(cur_start);
* 合并图形没有将cur_start进行替换
*/
if (refPicture && node.init.type === 'NewExpression') {
if (
node.init.arguments &&
node.init.arguments[0] &&
node.init.arguments[0].name &&
map[node.init.arguments[0].name]
) {
node.init.arguments[0].name = map[node.init.arguments[0].name]
}
}
/**
* 变量申明右侧是数组,数组内包含需要替换的变量
*/
if (refPicture && node.init.type === 'ArrayExpression') {
const ele = node.init.elements
ele.forEach((r) => {
if (r.type === 'Identifier' && map[r.name]) {
r.name = map[r.name]
}
})
}
}
if (node.type === 'MemberExpression' && node.object) {
if (node.object.name) {
if (map[node.object.name]) {
node.object.name = map[node.object.name]
}
if (
node.property &&
node.property.type === 'Identifier' &&
refPicture
) {
if (
map[node.property.name] &&
map.hasOwnProperty(node.property.name)
) {
node.property.name = map[node.property.name]
} else if (
window[refPicture].ispicturecombine &&
node.object.name === 'GLOBAL' &&
node.property.name === 'picture'
) {
node.property.name = refPicture
}
}
}
if (node.object.object && node.object.object.name) {
if (map[node.object.object.name]) {
node.object.object.name = map[node.object.object.name]
}
if (
node.property &&
node.property.type === 'Identifier' &&
refPicture
) {
if (map[node.property.name]) {
node.property.name = map[node.property.name]
} else if (
window[refPicture].ispicturecombine &&
node.object.object.name === 'GLOBAL' &&
node.property.name === 'picture'
) {
node.property.name = refPicture
}
}
}
}
if (
node.type === 'CallExpression' &&
node.callee &&
node.callee.object &&
node.callee.object.name
) {
if (map[node.callee.object.name]) {
node.callee.object.name = map[node.callee.object.name]
}
node.arguments.forEach((arg) => {
if (arg.type === 'Identifier' && refPicture && map[arg.name]) {
//子图方法调用参数判断
arg.name = map[arg.name]
}
})
if (
(node.callee.object.name === 'GLOBAL' ||
node.callee.object.name === 'VIEW') &&
refPicture &&
node.arguments
) {
//子图全局方法调用判断
const arg0 = node.arguments[0]
if (arg0) {
if (arg0.value && map[arg0.value]) {
arg0.value = map[arg0.value]
} else if (
((node.callee.object.name === 'GLOBAL' &&
node.callee.property.name === 'setPropertyValue') ||
node.callee.object.name === 'VIEW') &&
arg0.type === 'Identifier'
) {
arg0.name = `"${refPicture}_"+` + arg0.name
}
}
}
}
if (
node.type === 'Property' &&
node.value.type === 'Identifier' &&
refPicture
) {
if (map[node.value.name]) {
node.value.name = map[node.value.name]
}
}
if (node.type === 'FunctionDeclaration' && refPicture) {
for (let i = 0; i < node.params.length; i++) {
if (
node.params[i].type === 'Identifier' &&
map[node.params[i].name]
) {
node.params[i].name = map[node.params[i].name]
}
}
}
}
})
return escodegen.generate(ast)
}
/**
* 对ast进行转换以适配js语法
* @param {Object} node
* @param {String} key
* @param {String} id
*/
function transformAst(node, key, id) {
return {
computed: false,
object: {
name: id,
type: 'Identifier'
},
property: {
name: node[key].name,
type: node[key].type
},
type: 'MemberExpression'
}
}
/**
* 对ast进行转换以适配js语法
* @param {Object} node
* @param {String} key
* @param {String} id
*/
function transformAstArgument(node, key, id, argNo) {
return {
computed: false,
object: {
name: id,
type: 'Identifier'
},
property: {
name: node[key][argNo].name,
type: node[key][argNo].type
},
type: 'MemberExpression'
}
}
/**
* 删除注释,不然会对后面的字符串处理造成影响
* @param {String} code
*/
function removeComment(code) {
// 将'://'全部替换为特殊字符,删除注释代码后再将其恢复回来
const tmp1 = '://'
const regTmp1 = /:\/\//g
const tmp2 = '@:@/@/@'
const regTmp2 = /@:@\/@\/@/g
code = code.replace(regTmp1, tmp2)
const reg = /(\/\/.*)|(\/\*[\s\S]*?\*\/)/g
code = code.replace(reg, '')
result = code.replace(regTmp2, tmp1)
return result
}
/**
* 匹配并替换掉所有的function保留字以适配vue中的render函数的拼接
* @param {String} scriptStr
*/
function removeFun(scriptStr) {
// FIXME 处理回调函数报错的临时办法
scriptStr = scriptStr.replace(/function \(/g, 'function(')
return scriptStr.replace(/function /g, ',').substring(1)
}
function genButtonScript(id, script, attrsKey) {
let events = ''
/**
* 统一南瑞与科东的两套事件触发标准规范
* 南瑞标准中事件是直接写在script中的,比如下方button的click事件
* 科东标准类似于原生dom的事件写法,是在标签中声明事件类型(onMouseLeftOneClickAction)并调用具名函数来触发
* 考虑到科东标准更加接近于前端的事实标准,因此统一为科东标准,在组件库中通过模拟自定义事件来处理,事件的参数列表参照南瑞标准
*
* !!!<---注意--->!!!
* 后期为了将这些组件迁移到qt环境中需要将每个组件写到一个html文件中,
* 而html目前推荐使用中划线事件名称命名,因此这些修改将事件名改成了中划线命名法
* !!!<---注意--->!!!
*/
if (attrsKey['onClickedAction'] && attrsKey['onClickedAction'] != '') {
let clickAction = attrsKey['onClickedAction']
if (clickAction.includes('(')) {
clickAction = clickAction.split('(')[0]
}
events += `'on-mouse-left-one-click-action': _vm.${clickAction},`
} else if (script.includes('onClicked')) {
script = script.replace(
'onClicked:', // 南瑞规范
`function ${id}_ClickHandler(text)`
)
events += `'on-mouse-left-one-click-action': _vm.${id}_ClickHandler,`
}
if (
attrsKey['onDoubleClickedAction'] &&
attrsKey['onDoubleClickedAction'] != ''
) {
let doubleClickedAction = attrsKey['onDoubleClickedAction']
if (doubleClickedAction.includes('(')) {
doubleClickedAction = doubleClickedAction.split('(')[0]
}
events += `'on-mouse-left-double-click-aciton': _vm.${doubleClickedAction},`
} else if (script.includes('onDoubleClicked')) {
script = script.replace(
'onDoubleClicked:', // 南瑞规范
`function ${id}_DoubleClickHandler(text)`
)
events += `'on-mouse-left-double-click-aciton': _vm.${id}_DoubleClickHandler,`
}
if (
attrsKey['onRightClickedAction'] &&
attrsKey['onRightClickedAction'] != ''
) {
let rightClickedAction = attrsKey['onRightClickedAction']
if (rightClickedAction.includes('(')) {
rightClickedAction = rightClickedAction.split('(')[0]
}
events += `'on-right-clicked': _vm.${rightClickedAction},`
} else if (script.includes('onRightClicked')) {
script = script.replace(
'onRightClicked:', // 南瑞规范
`function ${id}_RightClickHandler(text)`
)
events += `'on-right-clicked': _vm.${id}_RightClickHandler,`
}
if (attrsKey['onPressedAction'] && attrsKey['onPressedAction'] != '') {
let pressedAction = attrsKey['onPressedAction']
if (pressedAction.includes('(')) {
pressedAction = pressedAction.split('(')[0]
}
events += `'on-pressed': _vm.${pressedAction},`
} else if (script.includes('onPressed')) {
script = script.replace(
'onPressed:', // 南瑞规范
`function ${id}_PressedHandler(text)`
)
events += `'on-pressed': _vm.${id}_PressedHandler,`
}
if (attrsKey['onReleasedAction'] && attrsKey['onReleasedAction'] != '') {
let releasedAction = attrsKey['onReleasedAction']
if (releasedAction.includes('(')) {
releasedAction = releasedAction.split('(')[0]
}
events += `'on-released': _vm.${releasedAction},`
} else if (script.includes('onReleased')) {
script = script.replace(
'onReleased:', // 南瑞规范
`function ${id}_ReleasedHandler(text)`
)
events += `'on-released': _vm.${id}_ReleasedHandler,`
}
if (script.includes('onHoveredChanged')) {
script = script.replace(
'onHoveredChanged:',
`function ${id}_HoveredChangedHandler(text)`
)
events += `'on-hovered-changed': _vm.${id}_HoveredChangedHandler,`
}
if (script.includes('onEntered')) {
script = script.replace(
'onEntered:',
`function ${id}_EnteredHandler(text)`
)
events += `'on-entered': _vm.${id}_EnteredHandler,`
}
if (script.includes('onExited')) {
script = script.replace(
'onExited:',
`function ${id}_ExitedHandler(text)`
)
events += `'on-exited': _vm.${id}_ExitedHandler,`
}
return combinedEvents(id, Object.keys(attrsKey), script, events)
}
function genTextAreaScript(id, script) {
let events = ''
if (attrsKey['onTextChangeAction'] && attrsKey['onTextChangeAction'] != '') {
let textChangeAction = attrsKey['onTextChangeAction']
if (textChangeAction.includes('(')) {
textChangeAction = textChangeAction.split('(')[0]
}
events += `'on-text-change-aciton': _vm.${textChangeAction},`
} else if (script.includes('onTextChangeAction')) {
script = script.replace(
'onTextChangeAction:',
`function ${id}_TextChangeHandler(text)`
)
events += `'on-text-change-action': _vm.${id}_TextChangeHandler,`
}
if (
attrsKey['onLengthChangeAction'] &&
attrsKey['onLengthChangeAction'] != ''
) {
let lengthChangeAction = attrsKey['onLengthChangeAction']
if (lengthChangeAction.includes('(')) {
lengthChangeAction = lengthChangeAction.split('(')[0]
}
events += `'on-length-change-action': _vm.${lengthChangeAction},`
} else if (script.includes('onLengthChangeAction')) {
script = script.replace(
'onLengthChangeAction:',
`function ${id}_LengthChangeHandler(length)`
)
events += `'on-length-change-action': _vm.${id}_LengthChangeHandler,`
}
if (
attrsKey['onSelectedTextChangeAction'] &&
attrsKey['onSelectedTextChangeAction'] != ''
) {
let selectedTextChangeAction = attrsKey['onSelectedTextChangeAction']
if (selectedTextChangeAction.includes('(')) {
selectedTextChangeAction = selectedTextChangeAction.split('(')[0]
}
events += `'on-selected-text-change-action': _vm.${selectedTextChangeAction},`
} else if (script.includes('onSelectionChangeAction')) {
script = script.replace(
'onSelectionChangeAction:',
`function ${id}_SelectionChangeHandler(cursorPosition)`
)
events += `'on-selection-change-action': _vm.${id}_SelectionChangeHandler,`
}
if (script.includes('onSelectedTextChangeAction')) {
script = script.replace(
'onSelectedTextChangeAction:',
`function ${id}_SelectedTextChangeHandler(text)`
)
events += `'on-selected-text-change-action': _vm.${id}_SelectedTextChangeHandler,`
}
return combinedEvents(id, Object.keys(attrsKey), script, events)
}
function genPasswordFieldScript(id, scriptstr) {
// 包含genTextAreaScript的所有事件且参数相同
let { script, events } = genTextAreaScript(id, scriptstr)
if (script.includes('onEditingFinished')) {
script = script.replace(
'onEditingFinished:',
`function ${id}_EditingFinishedHandler()`
)
events += `'on-editing-finished': _vm.${id}_EditingFinishedHandler,`
}
return combinedEvents(id, Object.keys(attrsKey), script, events)
}
function genTextFieldScript(id, scriptstr) {
// 包含genPasswordFieldScript的所有事件且参数相同
let { script, events } = genTextAreaScript(id, scriptstr)
if (
attrsKey['onEnterPressedAction'] &&
attrsKey['onEnterPressedAction'] != ''
) {
let enterPressedAction = attrsKey['onEnterPressedAction']
if (enterPressedAction.includes('(')) {
enterPressedAction = enterPressedAction.split('(')[0]
}
events += `'on-enter-pressed-aciton': _vm.${enterPressedAction},`
} else if (script.includes('onEnterPressed')) {
script = script.replace(
'onEnterPressed:',
`function ${id}_EnterPressedHandler(text)`
)
events += `'on-enter-pressed': _vm.${id}_EnterPressedHandler,`
}
if (script.includes('onEditingFinished')) {
script = script.replace(
'onEditingFinished:',
`function ${id}_EditingFinishedHandler(text)`
)
events += `'on-editing-finished': _vm.${id}_EditingFinishedHandler,`
}
return combinedEvents(id, Object.keys(attrsKey), script, events)
}
function genFPictureScript(id, script) {
let events = ''
if (script.includes('onClicked')) {
script = script.replace('onClicked:', `function ${id}_ClickedHandler(name)`)
events += `onClicked: _vm.${id}_ClickedHandler,`
}
if (script.includes('onMouseLeftDoubleClickAciton')) {
script = script.replace(
'onMouseLeftDoubleClickAciton:',
`function ${id}_MouseLeftDoubleClickAcitonHandler(name)`
)
events += `onMouseLeftDoubleClickAciton: _vm.${id}_MouseLeftDoubleClickAcitonHandler,`
}
if (script.includes('onMouseLeftOneClickAction')) {
script = script.replace(
'onMouseLeftOneClickAction:',
`function ${id}_MouseLeftOneClickActionHandler(name)`
)
events += `onMouseLeftOneClickAction: _vm.${id}_MouseLeftOneClickActionHandler,`
}
if (script.includes('onMouseRightOneClickAction')) {
script = script.replace(
'onMouseRightOneClickAction:',
`function ${id}_MouseRightOneClickActionHandler(name)`
)
events += `onMouseRightOneClickAction: _vm.${id}_MouseRightOneClickActionHandler,`
}
if (script.includes('onMouseRightDoubleClickAction')) {
script = script.replace(
'onMouseRightDoubleClickAction:',
`function ${id}_MouseRightDoubleClickActionHandler(name)`
)
events += `onMouseRightDoubleClickAction: _vm.${id}_MouseRightDoubleClickActionHandler,`
}
return combinedEvents(id, Object.keys(attrsKey), script, events)
}
function genToggleGroupScript(id, script, attrsKey) {
let events = ''
if (attrsKey['onClickedAction'] && attrsKey['onClickedAction'] != '') {
let clickAction = attrsKey['onClickedAction']
if (clickAction.includes('(')) {
clickAction = clickAction.split('(')[0]
}
events += `'on-clicked': _vm.${clickAction},`
} else if (script.includes('onClicked')) {
script = script.replace('onClicked:', `function ${id}_ClickHandler(name)`)
events += `'on-clicked': _vm.${id}_ClickHandler,`
}
return combinedEvents(id, Object.keys(attrsKey), script, events)
}
function genRGTodoListScript(id, script) {
let events = ''
if (script.includes('onDoubleClicked')) {
script = script.replace(
'onDoubleClicked:',
`function ${id}_DoubleClickHandler(index,message)`
)
events += `onDoubleClicked: _vm.${id}_DoubleClickHandler,`
}
return { script, events }
}
function genCheckBoxScript(id, script) {
let events = ''
if (
attrsKey['onSelectedChangeAction'] &&
attrsKey['onSelectedChangeAction'] != ''
) {
let selectedChangeAction = attrsKey['onSelectedChangeAction']
if (selectedChangeAction.includes('(')) {
selectedChangeAction = selectedChangeAction.split('(')[0]
}
events += `'on-selection-change-action': _vm.${selectedChangeAction},`
} else if (script.includes('onSelectedChangeAction')) {
script = script.replace(
'onSelectedChangeAction:',
`function ${id}_SelectedChangeHandler(checked)`
)
events += `'on-selected-change-action': _vm.${id}_SelectedChangeHandler,`
}
return combinedEvents(id, Object.keys(attrsKey), script, events)
}
function genToggleButtonScript(id, script) {
let events = ''
if (
attrsKey['onSelectedChangeAction'] &&
attrsKey['onSelectedChangeAction'] != ''
) {
let selectedChangeAction = attrsKey['onSelectedChangeAction']
if (selectedChangeAction.includes('(')) {
selectedChangeAction = selectedChangeAction.split('(')[0]
}
events += `'on-selection-change-action': _vm.${selectedChangeAction},`
} else if (script.includes('onSelectedChangeAction')) {
script = script.replace(
'onSelectedChangeAction:',
`function ${id}_SelectedChangeHandler(selected)`
)
events += `onSelectedChangeAction: _vm.${id}_SelectedChangeHandler,`
}
if (script.includes('onClicked')) {
script = script.replace(
'onClicked:', // 南瑞规范
`function ${id}_ClickHandler(text)`
)
events += `onMouseLeftOneClickAction: _vm.${id}_ClickHandler,`
}
if (script.includes('onDoubleClicked')) {
script = script.replace(
'onDoubleClicked:', // 南瑞规范
`function ${id}_DoubleClickHandler()`
)
events += `onMouseLeftDoubleClickAciton: _vm.${id}_DoubleClickHandler,`
}
// TODO 以下三个事件尚未实现
if (script.includes('onPressAndHold')) {
script = script.replace(
'onPressAndHold:', // 南瑞规范
`function ${id}_PressAndHoldHandler()`
)
events += `onPressAndHold: _vm.${id}_PressAndHoldHandler,`
}
if (script.includes('onPressed')) {
script = script.replace(
'onPressed:', // 南瑞规范
`function ${id}_PressedHandler()`
)
events += `onPressed: _vm.${id}_PressedHandler,`
}
if (script.includes('onReleased')) {
script = script.replace(
'onReleased:', // 南瑞规范
`function ${id}_ReleasedHandler()`
)
events += `onReleased: _vm.${id}_ReleasedHandler,`
}
return combinedEvents(id, Object.keys(attrsKey), script, events)
}
function genChoiceBoxScript(id, script) {
let events = ''
if (
attrsKey['onValueChangeAction'] &&
attrsKey['onValueChangeAction'] != ''
) {
let valueChangeAction = attrsKey['onValueChangeAction']
if (valueChangeAction.includes('(')) {
valueChangeAction = valueChangeAction.split('(')[0]
}
events += `'on-value-change-action': _vm.${valueChangeAction},`
} else if (script.includes('onValueChangeAction')) {
script = script.replace(
'onValueChangeAction:',
`function ${id}_valueChangeHandler(text)`
)
events += `'on-value-change-action': _vm.${id}_valueChangeHandler,`
}
return combinedEvents(id, Object.keys(attrsKey), script, events)
}
function genComboBoxScript(id, scriptstr) {
// 复用genSpinnerScript的部分逻辑
let { script, events } = genSpinnerScript(id, scriptstr)
if (script.includes('onClicked')) {
script = script.replace('onClicked:', `function ${id}_clickHandler(value)`)
events += `'on-clicked': _vm.${id}_clickHandler,`
}
if (
attrsKey['onValueChangeAction'] &&
attrsKey['onValueChangeAction'] != ''
) {
let valueChangeAction = attrsKey['onValueChangeAction']
if (valueChangeAction.includes('(')) {
valueChangeAction = valueChangeAction.split('(')[0]
}
events += `'on-value-change-action': _vm.${valueChangeAction},`
} else if (script.includes('onValueChangeAction')) {
script = script.replace(
'onValueChangeAction:',
`function ${id}_valueChangeHandler(text)`
)
events += `'on-value-change-action': _vm.${id}_valueChangeHandler,`
}
// TODO 以下2个事件尚未实现
if (script.includes('onHighlighted')) {
script = script.replace(
'onHighlighted:',
`function ${id}_HighlightHandler(index)`
)
events += `onHighlighted: _vm.${id}_HighlightHandler,`
}
if (script.includes('onActivated')) {
script = script.replace(
'onActivated:',
`function ${id}_ActivatedHandler(index)`
)
events += `onActivated: _vm.${id}_ActivatedHandler,`
}
if (script.includes('onPressedChanged')) {
script = script.replace(
'onPressedChanged:',
`function ${id}_PressedHandler(value)`
)
events += `onPressedChanged: _vm.${id}_PressedHandler,`
}
if (script.includes('onCurrentTextChanged')) {
script = script.replace(
'onCurrentTextChanged:',
`function ${id}_CurrentTextHandler(value)`
)
events += `onCurrentTextChanged: _vm.${id}_CurrentTextHandler,`
}
return combinedEvents(id, Object.keys(attrsKey), script, events)
}
function genRadioButtonScript(id, script) {
return genCheckBoxScript(id, script)
}
function genCommandButtonScript(id, script) {
let events = ''
if (script.includes('onClicked')) {
script = script.replace(
'onClicked:', // 南瑞规范
`function ${id}_ClickHandler()`
)
/**
* 2022/04/13 修复点击失败
*/
events += `'on-clicked': _vm.${id}_ClickHandler,`
}
return combinedEvents(id, Object.keys(attrsKey), script, events)
}
function genSliderScript(id, script) {
let events = ''
if (
attrsKey['onSelectedChangeAction'] &&
attrsKey['onSelectedChangeAction'] != ''
) {
let selectedChangeAction = attrsKey['onSelectedChangeAction']
if (selectedChangeAction.includes('(')) {
selectedChangeAction = selectedChangeAction.split('(')[0]
}
events += `'on-selection-change-action': _vm.${selectedChangeAction},`
} else if (script.includes('onSelectedChangeAction')) {
script = script.replace(
'onSelectedChangeAction:',
`function ${id}_SelectedChangeHandler(checked)`
)
events += `'on-selected-change-action': _vm.${id}_SelectedChangeHandler,`
}
if (
attrsKey['onValueChangeAction'] &&
attrsKey['onValueChangeAction'] != ''
) {
let valueChangeAction = attrsKey['onValueChangeAction']
if (valueChangeAction.includes('(')) {
valueChangeAction = valueChangeAction.split('(')[0]
}
events += `'on-value-change-action': _vm.${onValueChangeAction},`
} else if (script.includes('onValueChangeAction')) {
script = script.replace(
'onValueChangeAction:',
`function ${id}_ValueChangeHandler(checked)`
)
events += `'on-value-change-action': _vm.${id}_ValueChangeHandler,`
}
// const propsName = ['min', 'max', 'blockIncrement', 'value', 'minorTickCount', 'majorTickUnit', 'lineColor', 'sliderColor', 'showLabel', 'showTickMarks', 'showTickLabels','orientation','w','h','x','y']
return combinedEvents(id, Object.keys(attrsKey), script, events)
}
function genDLabelScript(id, script) {
let events = ''
if (script.includes('onClicked')) {
script = script.replace(
'onClicked:', // 南瑞规范
`function ${id}_ClickHandler()`
)
// events += `onMouseLeftOneClickAction: _vm.${id}_ClickHandler,`
events += `'on-clicked': _vm.${id}_ClickHandler,`
}
if (script.includes('onDoubleClicked')) {
script = script.replace(
'onDoubleClicked:', // 南瑞规范
`function ${id}_DoubleClickHandler()`
)
events += `'on-double-clicked': _vm.${id}_DoubleClickHandler,`
// events += `onMouseLeftDoubleClickAciton: _vm.${id}_DoubleClickHandler,`
}
// 关联的dataSourse数据返回时触发
if (script.includes('onDataReturn')) {
script = script.replace(
'onDataReturn:', // 南瑞规范
`function ${id}_DataReturnHandler()`
)
events += `'on-data-return': _vm.${id}_DataReturnHandler,`
// events += `onDataReturn: _vm.${id}_DataReturnHandler,`
}
// const propsName = ['visible', 'clip', 'text', 'textFont', 'color', 'decimalNum', 'textAlign', 'playAnimation','w','h','x','y','enable','rollSpeed']
return combinedEvents(id, Object.keys(attrsKey), script, events)
// return { script, events }
}
function genProgressBarScript(id, script) {
let events = ''
if (
attrsKey['onProgressChangeAction'] &&
attrsKey['onProgressChangeAction'] != ''
) {
let progressChangeAction = attrsKey['onProgressChangeAction']
if (progressChangeAction.includes('(')) {
progressChangeAction = progressChangeAction.split('(')[0]
}
events += `'on-progress-change-action': _vm.${progressChangeAction},`
} else if (script.includes('onProgressChangeAction')) {
script = script.replace(
'onProgressChangeAction:',
`function ${id}_ProgressChangeHandler(progress)`
)
events += `'on-progress-change-action': _vm.${id}_ProgressChangeHandler,`
}
// return { script, events }
// const propsName = ['visible', 'clip', 'maximumValue', 'minimumValue', 'progress', 'indeterminate', 'orientation', 'showLabel', 'backColor', 'progressColor', 'labelColor','x','y','w','h','enable','opacity','aliasType']
return combinedEvents(id, Object.keys(attrsKey), script, events)
}
function genHyperlinkScript(id, script) {
let events = ''
if (script.includes('onClicked')) {
script = script.replace(
'onClicked:',
`function ${id}_ClickHandler(checked)`
)
events += `'on-mouse-left-one-click-action': _vm.${id}_ClickHandler,`
}
// TODO 未实现
if (script.includes('onAction')) {
script = script.replace('onAction:', `function ${id}_ActionHandler()`)
events += `'on-action': _vm.${id}_ActionHandler,`
}
return { script, events }
}
function genTimerScript(id, script) {
let events = ''
if (script.includes('onTriggered')) {
script = script.replace('onTriggered:', `function ${id}_TriggeredHandler()`)
events += `onTriggered: _vm.${id}_TriggeredHandler,`
}
return combinedEvents(id, Object.keys(attrsKey), script, events)
}
function genDatePickerScript(id, script) {
let events = ''
if (
attrsKey['onValueChangeAction'] &&
attrsKey['onValueChangeAction'] != ''
) {
let valueChangeAction = attrsKey['onValueChangeAction']
if (valueChangeAction.includes('(')) {
valueChangeAction = valueChangeAction.split('(')[0]
}
events += `'on-value-change-action': _vm.${valueChangeAction},`
} else if (script.includes('onValueChangeAction')) {
script = script.replace(
'onValueChangeAction:',
`function ${id}_valueChangeHandler(date)`
)
events += `'on-value-change-action': _vm.${id}_valueChangeHandler,`
}
// TODO 未实现
if (script.includes('onNewClicked')) {
script = script.replace(
'onNewClicked:',
`function ${id}_NewClickHandler(date)`
)
events += `onNewClicked: _vm.${id}_NewClickHandler,`
}
return combinedEvents(id, Object.keys(attrsKey), script, events)
}
function genNStateImageScript(id, script) {
let events = ''
if (script.includes('onClicked')) {
script = script.replace(
'onClicked:',
`function ${id}_ClickedHandler(state)`
)
events += `onClicked: _vm.${id}_ClickedHandler,`
}
if (script.includes('onRightButtonClicked')) {
script = script.replace(
'onRightButtonClicked:',
`function ${id}_RightButtonClickedHandler(state)`
)
events += `onRightButtonClicked: _vm.${id}_RightButtonClickedHandler,`
}
return combinedEvents(id, Object.keys(attrsKey), script, events)
}
function genMediaViewScript(id, script) {
let events = ''
if (script.includes('onClicked')) {
script = script.replace('onClicked:', `function ${id}_ClickHandler()`)
// events += `onClicked: _vm.${id}_ClickHandler,`
events += `'on-clicked': _vm.${id}_ClickHandler,`
}
if (script.includes('onRightButtonClicked')) {
script = script.replace(
'onRightButtonClicked:',
`function ${id}_RightClickHandler()`
)
// events += `onRightButtonClicked: _vm.${id}_RightClickHandler,`
events += `'on-right-button-clicked': _vm.${id}_RightClickHandler,`
}
if (script.includes('onErrorAction')) {
script = script.replace(
'onErrorAction:',
`function ${id}_ErrorHandler(event)`
)
// events += `onErrorAction: _vm.${id}_ErrorHandler,`
events += `'on-error-action': _vm.${id}_ErrorHandler,`
}
// return { script, events }
// const propsName = ['source', 'cycleCount', 'autoPlay', 'preserveRatio', 'borderColor','w','h']
return combinedEvents(id, Object.keys(attrsKey), script, events)
}
function genDataSourceScript(id, script, attrsKey) {
let events = ''
if (attrsKey['onValueChanged'] && attrsKey['onValueChanged'] != '') {
let action = attrsKey['onValueChanged']
if (action.includes('(')) {
action = action.split('(')[0]
}
events += `'on-value-changed': _vm.${action},`
} else if (script.includes('onValueChanged')) {
script = script.replace(
'onValueChanged:',
`function ${id}_ValueChangedHandler(value)`
)
events += `onValueChanged: _vm.${id}_ValueChangedHandler,`
}
// const propsName = ['dataSource', 'extraInfo', 'interval', 'name', 'timer']
return combinedEvents(id, Object.keys(attrsKey), script, events)
// return { script, events }
}
function genWebViewScript(id, script) {
let events = ''
// 网页回调时触发
if (script.includes('onJsCallBack')) {
script = script.replace(
'onJsCallBack:',
`function ${id}_JsCallBackHandler(value)`
)
events += `onJsCallBack: _vm.${id}_JsCallBackHandler,`
}
// const propsName = ['url','w','h','x','y']
return combinedEvents(id, Object.keys(attrsKey), script, events)
// return { script, events }
}
function genSwitchButtonScript(id, script) {
let events = ''
if (script.includes('onToggleLeft')) {
script = script.replace(
'onToggleLeft:',
`function ${id}_onToggleLeftHandler()`
)
events += `onToggleLeft: _vm.${id}_onToggleLeftHandler,`
}
if (script.includes('onToggleRight')) {
script = script.replace(
'onToggleRight:',
`function ${id}_onToggleRightHandler()`
)
events += `onToggleRight: _vm.${id}_onToggleRightHandler,`
}
// const propsName = ['radius', 'backCheckedColor', 'backColor','w','h','x','y']
return combinedEvents(id, Object.keys(attrsKey), script, events)
// return { script, events }
}
function genSpinnerScript(id, script) {
let events = ''
if (
attrsKey['onValueChangeAction'] &&
attrsKey['onValueChangeAction'] != ''
) {
let valueChangeAction = attrsKey['onValueChangeAction']
if (valueChangeAction.includes('(')) {
valueChangeAction = valueChangeAction.split('(')[0]
}
events += `'on-value-change-action': _vm.${valueChangeAction},`
} else if (script.includes('onValueChangeAction')) {
script = script.replace(
'onValueChangeAction:',
`function ${id}_valueChangeHandler(value)`
)
// events += `onValueChangeAction: _vm.${id}_valueChangeHandler,`
events += `'on-value-change-action': _vm.${id}_valueChangeHandler,`
}
const propsName = [
'min',
'max',
'editable',
'value',
'precision',
'amountToStepBy',
'w',
'h',
'x',
'y'
]
return combinedEvents(id, Object.keys(attrsKey), script, events)
// return { script, events }
}
function genComposeCheckBoxScript(id,script,attrsKey) {
let events = ''
if (script.includes('onClosed')) {
script = script.replace(
'onClosed:',
`function ${id}_ClosedHandler(text)`
)
events += `'on-closed': _vm.${id}_ClosedHandler,`
}
return combinedEvents(id, Object.keys(attrsKey), script, events)
}
function genComposeComboBoxScript(id, script, attrsKey) {
let events = ''
if (script.includes('onValueChanged')) {
script = script.replace(
'onValueChanged:',
`function ${id}_ValueChangedHandler(value)`
)
events += `'on-value-changed': _vm.${id}_ValueChangedHandler,`
}
if (attrsKey['onIndexChanged'] && attrsKey['onIndexChanged'] != '') {
let changeAction = attrsKey['onIndexChanged']
if (changeAction.includes('(')) {
changeAction = changeAction.split('(')[0]
}
events += `'on-index-changed': _vm.${changeAction},`
} else if (script.includes('onIndexChanged')) {
script = script.replace(
'onIndexChanged:',
`function ${id}_IndexChangedHandler()`
)
events += `'on-index-changed': _vm.${id}_IndexChangedHandler,`
}
// const propsName = ['id', 'visible', 'clip', 'currentValue', 'radiusW', 'backBeginColor', 'backEndColor', 'textFont', 'w', 'h', 'x', 'y', 'dataSource', 'opacity']
return combinedEvents(id, Object.keys(attrsKey), script, events)
// return { script, events }
}
function genTableViewScript(id, script) {
return genTableItemScript(id, script)
}
function genETableViewScript(id, script) {
return genTableItemScript(id, script)
}
function genTableItemScript(id, script) {
let events = ''
if (script.includes('onValueFinished')) {
script = script.replace(
'onValueFinished:',
`function ${id}_ValueFinishedHandler()`
)
events += `'on-value-finished': _vm.${id}_ValueFinishedHandler,`
}
if (attrsKey['onRowClickedAction'] && attrsKey['onRowClickedAction'] != '') {
let rowClickedAction = attrsKey['onRowClickedAction']
if (rowClickedAction.includes('(')) {
rowClickedAction = rowClickedAction.split('(')[0]
}
events += `'on-row-clicked': _vm.${rowClickedAction},`
} else if (script.includes('onRowClicked')) {
script = script.replace(
'onRowClicked:',
`function ${id}_RowClickedHandler(value,row,column,jsonobject)`
)
events += `'on-row-clicked': _vm.${id}_RowClickedHandler,`
}
if (
attrsKey['onRowDoubleClickedAction'] &&
attrsKey['onRowDoubleClickedAction'] != ''
) {
let rowDoubleClickedAction = attrsKey['onRowDoubleClickedAction']
if (rowDoubleClickedAction.includes('(')) {
rowDoubleClickedAction = rowDoubleClickedAction.split('(')[0]
}
events += `'on-row-double-clicked': _vm.${rowDoubleClickedAction},`
} else if (script.includes('onRowDoubleClicked')) {
script = script.replace(
'onRowDoubleClicked:',
`function ${id}_RowDoubleClickedHandler(value,row,column,jsonobject)`
)
events += `'on-row-double-clicked': _vm.${id}_RowDoubleClickedHandler,`
}
if (script.includes('onRightMouseClicked')) {
script = script.replace(
'onRightMouseClicked:',
`function ${id}_RightMouseClickedHandler(value,row,column,jsonobject)`
)
events += `'on-right-mouse-clicked': _vm.${id}_RightMouseClickedHandler,`
}
if (script.includes('onLeftMouseClicked')) {
script = script.replace(
'onLeftMouseClicked:',
`function ${id}_LeftMouseClickedHandler(value,row,column,jsonobject)`
)
events += `'on-left-mouse-clicked': _vm.${id}_LeftMouseClickedHandler,`
}
if (script.includes('onLeftMouseDoubleClicked')) {
script = script.replace(
'onLeftMouseDoubleClicked:',
`function ${id}_LeftMouseDoubleClickedHandler(value,row,column,jsonobject)`
)
events += `'on-left-mouse-double-clicked': _vm.${id}_LeftMouseDoubleClickedHandler,`
}
if (
attrsKey['onRowRightClickedAction'] &&
attrsKey['onRowRightClickedAction'] != ''
) {
let rowRightClickedAction = attrsKey['onRowRightClickedAction']
if (rowRightClickedAction.includes('(')) {
rowRightClickedAction = rowRightClickedAction.split('(')[0]
}
events += `'on-row-right-clicked': _vm.${rowRightClickedAction},`
} else if (script.includes('onRowRightClicked')) {
script = script.replace(
'onRowRightClicked:',
`function ${id}_RowRightClickedHandler(value,row,column,jsonobject)`
)
events += `'on-row-right-clicked': _vm.${id}_RowRightClickedHandler,`
}
if (
attrsKey['onItemClickedAction'] &&
attrsKey['onItemClickedAction'] != ''
) {
let itemClickedAction = attrsKey['onItemClickedAction']
if (itemClickedAction.includes('(')) {
itemClickedAction = itemClickedAction.split('(')[0]
}
events += `'on-item-clicked': _vm.${itemClickedAction},`
} else if (script.includes('onItemClicked')) {
script = script.replace(
'onItemClicked:',
`function ${id}_ItemClickedHandler(value,row,column,jsonobject)`
)
events += `'on-item-clicked': _vm.${id}_ItemClickedHandler,`
}
if (
attrsKey['onItemDoubleClickedAction'] &&
attrsKey['onItemDoubleClickedAction'] != ''
) {
let itemDoubleClickedAction = attrsKey['onItemDoubleClickedAction']
if (itemDoubleClickedAction.includes('(')) {
itemDoubleClickedAction = itemDoubleClickedAction.split('(')[0]
}
events += `'on-item-double-clicked': _vm.${itemDoubleClickedAction},`
} else if (script.includes('onItemDoubleClicked')) {
script = script.replace(
'onItemDoubleClicked:',
`function ${id}_ItemDoubleClickedHandler(value,row,column,jsonobject)`
)
events += `'on-item-double-clicked': _vm.${id}_ItemDoubleClickedHandler,`
}
if (
attrsKey['onItemRightClickedAction'] &&
attrsKey['onItemRightClickedAction'] != ''
) {
let itemRightClickedAction = attrsKey['onItemRightClickedAction']
if (itemRightClickedAction.includes('(')) {
itemRightClickedAction = itemRightClickedAction.split('(')[0]
}
events += `'on-item-right-clicked': _vm.${itemRightClickedAction},`
} else if (script.includes('onItemRightClicked')) {
script = script.replace(
'onItemRightClicked:',
`function ${id}_ItemRightClickedHandler(value,row,column,jsonobject)`
)
events += `'on-item-right-clicked': _vm.${id}_ItemRightClickedHandler,`
}
if (
attrsKey['onCheckedChangedAction'] &&
attrsKey['onCheckedChangedAction'] != ''
) {
let checkedChangedAction = attrsKey['onCheckedChangedAction']
if (checkedChangedAction.includes('(')) {
checkedChangedAction = checkedChangedAction.split('(')[0]
}
events += `'on-checked-changed': _vm.${checkedChangedAction},`
} else if (script.includes('onCheckedChanged')) {
script = script.replace(
'onCheckedChanged:',
`function ${id}_CheckedChangedHandler(value,row,column,checked,jsonobject)`
)
events += `'on-checked-changed': _vm.${id}_CheckedChangedHandler,`
}
return combinedEvents(id, Object.keys(attrsKey), script, events)
}
function genVerticalTableItemScript(id, script) {
let events = ''
if (script.includes('onSelected')) {
script = script.replace(
'onSelected:',
`function ${id}_SelectedHandler(select)`
)
events += `onSelected: _vm.${id}_SelectedHandler,`
}
if (script.includes('onValueChanged')) {
script = script.replace(
'onValueChanged:',
`function ${id}_ValueChangedHandler(value,column,row,,columnValue,rowValue)`
)
events += `onValueChanged: _vm.${id}_ValueChangedHandler,`
}
if (script.includes('onRowClicked')) {
script = script.replace(
'onRowClicked:',
`function ${id}_RowClickedHandler(row, value)`
)
events += `onRowClicked: _vm.${id}_RowClickedHandler,`
}
return combinedEvents(id, Object.keys(attrsKey), script, events)
}
function genListViewScript(id, script) {
let events = ''
if (
attrsKey['onSelectedChangeAction'] &&
attrsKey['onSelectedChangeAction'] != ''
) {
let selectedChangeAction = attrsKey['onSelectedChangeAction']
if (selectedChangeAction.includes('(')) {
selectedChangeAction = selectedChangeAction.split('(')[0]
}
events += `'on-selection-change-action': _vm.${selectedChangeAction},`
} else if (script.includes('onSelectedChangeAction')) {
script = script.replace(
'onSelectedChangeAction:',
`function ${id}_SelectedChangeActionHandler(index,value)`
)
events += `onSelectedChangeAction: _vm.${id}_SelectedChangeActionHandler,`
}
if (attrsKey['onEditStartAction'] && attrsKey['onEditStartAction'] != '') {
let editStartAction = attrsKey['onEditStartAction']
if (editStartAction.includes('(')) {
editStartAction = editStartAction.split('(')[0]
}
events += `'on-edit-start-action': _vm.${editStartAction},`
} else if (script.includes('onEditStartAction')) {
script = script.replace(
'onEditStartAction:',
`function ${id}_EditStartActionHandler(index,value)`
)
events += `onEditStartAction: _vm.${id}_EditStartAction