Add validators to any fields using msg-typed Input

Fixes #4429
This commit is contained in:
Nick O'Leary 2023-11-20 17:17:52 +00:00
parent 3dec609459
commit 722fe02933
No known key found for this signature in database
GPG Key ID: 4F2157149161A6C9
10 changed files with 51 additions and 13 deletions

View File

@ -40,9 +40,22 @@ RED.validators = {
return opt ? RED._("validator.errors.invalid-regexp") : false; return opt ? RED._("validator.errors.invalid-regexp") : false;
}; };
}, },
typedInput: function(ptypeName,isConfig,mopt) { typedInput: function(ptypeName, isConfig, mopt) {
let options = ptypeName
if (typeof ptypeName === 'string' ) {
options = {}
options.typeField = ptypeName
options.isConfig = isConfig
options.allowBlank = false
}
return function(v, opt) { return function(v, opt) {
var ptype = $("#node-"+(isConfig?"config-":"")+"input-"+ptypeName).val() || this[ptypeName]; let ptype = options.type
if (!ptype && options.typeField) {
ptype = $("#node-"+(options.isConfig?"config-":"")+"input-"+options.typeField).val() || this[options.typeField];
}
if (options.allowBlank && v === '') {
return true
}
const result = RED.utils.validateTypedProperty(v, ptype, opt) const result = RED.utils.validateTypedProperty(v, ptype, opt)
if (result === true || opt) { if (result === true || opt) {
// Valid, or opt provided - return result as-is // Valid, or opt provided - return result as-is

View File

@ -57,7 +57,12 @@
action: {value:"scale"}, action: {value:"scale"},
round: {value:false}, round: {value:false},
property: {value:"payload",required:true, property: {value:"payload",required:true,
label:RED._("node-red:common.label.property")}, label:RED._("node-red:common.label.property"),
validate: RED.validators.typedInput({ type: 'msg' })
},
// RED.validators.typedInput("propertyType", false)},
name: {value:""} name: {value:""}
}, },
inputs: 1, inputs: 1,

View File

@ -56,7 +56,7 @@
color:"darksalmon", color:"darksalmon",
defaults: { defaults: {
command: {value:""}, command: {value:""},
addpay: {value:""}, addpay: {value:"", validate: RED.validators.typedInput({ type: 'msg', allowBlank: true })},
append: {value:""}, append: {value:""},
useSpawn: {value:"false"}, useSpawn: {value:"false"},
timer: {value:""}, timer: {value:""},

View File

@ -56,9 +56,11 @@
inout: {value:"out"}, inout: {value:"out"},
septopics: {value:true}, septopics: {value:true},
property: {value:"payload", required:true, property: {value:"payload", required:true,
label:RED._("node-red:rbe.label.property")}, label:RED._("node-red:rbe.label.property"),
validate: RED.validators.typedInput({ type: 'msg' })},
topi: {value:"topic", required:true, topi: {value:"topic", required:true,
label:RED._("node-red:rbe.label.topic")} label:RED._("node-red:rbe.label.topic"),
validate: RED.validators.typedInput({ type: 'msg' })}
}, },
inputs:1, inputs:1,
outputs:1, outputs:1,

View File

@ -41,8 +41,8 @@
color:"#DEBD5C", color:"#DEBD5C",
defaults: { defaults: {
name: {value:""}, name: {value:""},
property: {value:"payload"}, property: {value:"payload", validate: RED.validators.typedInput({ type: 'msg' }) },
outproperty: {value:"payload"}, outproperty: {value:"payload", validate: RED.validators.typedInput({ type: 'msg' }) },
tag: {value:""}, tag: {value:""},
ret: {value:"html"}, ret: {value:"html"},
as: {value:"single"} as: {value:"single"}

View File

@ -32,6 +32,7 @@
defaults: { defaults: {
name: {value:""}, name: {value:""},
property: {value:"payload",required:true, property: {value:"payload",required:true,
validate: RED.validators.typedInput({ type: 'msg' }),
label:RED._("node-red:json.label.property")}, label:RED._("node-red:json.label.property")},
action: {value:""}, action: {value:""},
pretty: {value:false} pretty: {value:false}

View File

@ -27,7 +27,8 @@
defaults: { defaults: {
name: {value:""}, name: {value:""},
property: {value:"payload",required:true, property: {value:"payload",required:true,
label:RED._("node-red:common.label.property")}, label:RED._("node-red:common.label.property"),
validate: RED.validators.typedInput({ type: 'msg' })},
attr: {value:""}, attr: {value:""},
chr: {value:""} chr: {value:""}
}, },

View File

@ -16,6 +16,7 @@
color:"#DEBD5C", color:"#DEBD5C",
defaults: { defaults: {
property: {value:"payload",required:true, property: {value:"payload",required:true,
validate: RED.validators.typedInput({ type: 'msg' }),
label:RED._("node-red:common.label.property")}, label:RED._("node-red:common.label.property")},
name: {value:""} name: {value:""}
}, },

View File

@ -57,7 +57,7 @@
arraySplt: {value:1}, arraySplt: {value:1},
arraySpltType: {value:"len"}, arraySpltType: {value:"len"},
stream: {value:false}, stream: {value:false},
addname: {value:""} addname: {value:"", validate: RED.validators.typedInput({ type: 'msg', allowBlank: true })}
}, },
inputs:1, inputs:1,
outputs:1, outputs:1,
@ -208,7 +208,22 @@
validate:RED.validators.typedInput("propertyType", false) validate:RED.validators.typedInput("propertyType", false)
}, },
propertyType: { value:"msg"}, propertyType: { value:"msg"},
key: {value:"topic"}, key: {value:"topic", validate: (function () {
const typeValidator = RED.validators.typedInput({ type: 'msg' })
return function(v, opt) {
const joinMode = $("#node-input-mode").val() || this.mode
if (joinMode !== 'custom') {
return true
}
const buildType = $("#node-input-build").val() || this.build
if (buildType !== 'object') {
return true
} else {
return typeValidator(v, opt)
}
}
})()
},
joiner: { value:"\\n"}, joiner: { value:"\\n"},
joinerType: { value:"str"}, joinerType: { value:"str"},
accumulate: { value:"false" }, accumulate: { value:"false" },

View File

@ -198,7 +198,7 @@
category: 'storage', category: 'storage',
defaults: { defaults: {
name: {value:""}, name: {value:""},
filename: {value:""}, filename: {value:"", validate: RED.validators.typedInput({ typeField: 'filenameType' })},
filenameType: {value:"str"}, filenameType: {value:"str"},
appendNewline: {value:true}, appendNewline: {value:true},
createDir: {value:false}, createDir: {value:false},
@ -297,7 +297,7 @@
category: 'storage', category: 'storage',
defaults: { defaults: {
name: {value:""}, name: {value:""},
filename: {value:""}, filename: {value:"", validate: RED.validators.typedInput({ typeField: 'filenameType' }) },
filenameType: {value:"str"}, filenameType: {value:"str"},
format: {value:"utf8"}, format: {value:"utf8"},
chunk: {value:false}, chunk: {value:false},