mirror of
https://github.com/node-red/node-red.git
synced 2025-03-01 10:36:34 +00:00
Merge pull request #4440 from node-red/4429-add-typed-validators
Add validators to any fields using msg-typed Input
This commit is contained in:
commit
ee7ee083b0
@ -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
|
||||||
|
@ -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,
|
||||||
|
@ -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:""},
|
||||||
|
@ -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,
|
||||||
|
@ -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"}
|
||||||
|
@ -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}
|
||||||
|
@ -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:""}
|
||||||
},
|
},
|
||||||
|
@ -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:""}
|
||||||
},
|
},
|
||||||
|
@ -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" },
|
||||||
|
@ -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},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user