Skip to content

Commit

Permalink
Extended Trigger by adding prompt.
Browse files Browse the repository at this point in the history
  • Loading branch information
petersirka committed Mar 19, 2024
1 parent 71aa08e commit edfa62c
Showing 1 changed file with 47 additions and 16 deletions.
63 changes: 47 additions & 16 deletions components/trigger.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,45 +3,50 @@
exports.id = 'trigger';
exports.name = 'Trigger';
exports.group = 'Triggers';
exports.version = '3';
exports.icon = 'ti ti-bullhorn';
exports.version = '4';
exports.icon = 'ti ti-start';
exports.author = 'Total.js';
exports.config = { random: true, type: 'string', data: '', restart: false };
exports.config = { random: true, type: 'string', data: '', restart: false, prompt: false };
exports.outputs = [{ id: 'output', name: 'Output' }];
exports.kind = 'trigger';

exports.make = function(instance, config) {

instance.trigger = function() {
var regprompt = /\{prompt\}/g;

var val;
instance.trigger = function(msg) {

var random = !config.prompt && config.random;
var val = config.data;
var prompt = msg.value || '';

switch (config.type) {
case 'number':
val = config.random ? U.random() : config.data.parseFloat();
val = random ? U.random() : val.replace(regprompt, prompt).parseFloat();
break;
case 'buffer':
try {
val = config.random ? Buffer.from(U.random_string()) : Buffer.from(config.data, 'base64');
val = random ? Buffer.from(U.random_string()) : Buffer.from(val.replace(regprompt, prompt), 'base64');
} catch (e) {
instance.throw(e);
}
break;
case 'date':
val = config.random ? NOW.add('-' + U.random(500, 10) + ' seconds') : config.data.parseDate();
val = random ? NOW.add('-' + U.random(500, 10) + ' seconds') : val.replace(regprompt, prompt).parseDate();
break;
case 'object':
try {
val = config.random ? {} : (new Function('return ' + config.data))();
val = random ? {} : (new Function('return ' + val.replace(regprompt, prompt)))();
} catch (e) {
instance.throw(e);
}
break;
case 'boolean':
val = config.random ? U.random() % 2 === 0 : config.data === 'true' || config.data === 'on' || config.data === '1';
var tmp = random ? '' : val.replace(regprompt, prompt);
val = random ? U.random() % 2 === 0 : tmp === 'true' || tmp === 'on' || tmp === '1';
break;
default:
val = config.random ? U.random_string(20) : config.data;
val = random ? U.random_string(20) : val.replace(regprompt, prompt);
break;
}

Expand All @@ -68,11 +73,18 @@
<ui-component name="input" path="?.type" config="dirsource:string|String,number|Number,boolean|Boolean,date|Date,object|Object,buffer|Buffer as Base64;required:1">Type</ui-component>
<div class="mt10 m">
<ui-component name="input" path="?.restart" config="type:checkbox">Trigger 5s after initialization.</ui-component>
<ui-component name="input" path="?.random" config="type:checkbox">Random data</ui-component>
<ui-component name="input" path="?.prompt" config="type:checkbox">Prompt</ui-component>
<ui-bind path="?.prompt" config="disabled" class="block">
<ui-component name="input" path="?.random" config="type:checkbox">Random data</ui-component>
</ui-bind>
<ui-bind path="?.prompt" config="show" class="block hidden m mt10">
<ui-component name="input" path="?.promptlabel" config="placeholder:Enter a value"><b>Prompt label</b></ui-component>
</ui-bind>
</div>
<ui-bind path="?.random" config="hide" class="hidden">
<ui-bind path="?" config="hide:value.hide && !value.prompt" class="hidden">
<hr />
<ui-component name="input" path="?.data" config="required:1;height:250;type:multiline;maxlength:100000;monospace:1">Data</ui-component>
<ui-bind path="?.prompt" config="show" class="help hidden">The prompt value will be assigned to the <code>{prompt}</code> keyword in the code.</ui-bind>
</ui-bind>
</div>
</settings>
Expand All @@ -83,9 +95,28 @@

<body>
<header>
<i class="ICON"></i>NAME
<i class="$ICON"></i>$NAME
</header>
<div class="padding">
<button class="exec" data-exec="FUNC.trigger">Run</button>
<button class="exec" data-exec="=click">Run</button>
</div>
</body>
</body>

<script>
TOUCH(function(exports) {

exports.click = function(el) {

if (exports.config.prompt) {
var opt = {};
opt.name = exports.config.promptlabel || 'Enter a value';
opt.value = '';
opt.callback = function(val) {
exports.trigger({ value: val });
};
SETTER('prompt/show', opt);
} else
exports.trigger();
};
});
</script>

0 comments on commit edfa62c

Please sign in to comment.