prisme-flow
Version:
prisme platform flow engine
200 lines (189 loc) • 6.61 kB
HTML
<!--
Created by prisme.io on 09/06/2017.
@author <a href="mailto:hello@prisme.io">savane vamara</a> (prisme.io)
-->
<script type="text/x-red" data-template-name="mongodb">
<div class="form-row">
<label for="node-config-input-uri"><i class="icon-globe"></i> URI</label>
<input type="text" id="node-config-input-uri" placeholder="mongodb://host1.yourprovider.com:27017,host2.yourprovider.com:27017/yourdb?replicaSet=foo" />
</div>
<div class="form-row">
<label for="node-config-input-name"><i class="icon-tag"></i> Name</label>
<input type="text" id="node-config-input-name" placeholder="Name" />
</div>
<div class="form-row">
<label for="node-config-input-user"><i class="icon-user"></i> Username</label>
<input type="text" id="node-config-input-user" />
</div>
<div class="form-row">
<label for="node-config-input-password"><i class="icon-lock"></i> Password</label>
<input type="password" id="node-config-input-password" />
</div>
<div class="form-row">
<label for="node-config-input-options"><i class="icon-wrench"></i> Connection Options</label>
<input type="text" id="node-config-input-options" placeholder="Stringified JSON" />
</div>
<div class="form-row">
<label for="node-config-input-parallelism"><i class="icon-tasks"></i> Parallelism Limit</label>
<input type="number" id="node-config-input-parallelism" />
</div>
</script>
<script type="text/javascript">
RED.nodes.registerType("mongodb", {
"category": "config",
"color": "#b7a492",
"defaults": {
"uri": {
"value": ""
},
"name": {
"value": ""
},
"options": {
"value": ""
},
"parallelism": {
"value": -1
}
},
"credentials": {
"user": {
"type": "text"
},
"password": {
"type": "password"
}
},
"label": function() {
return this.name || (this.hostname + ":" + this.port + "/" + this.db);
}
});
</script>
<script type="text/x-red" data-template-name="mongodb in">
<div class="form-row">
<label for="node-input-service"><i class="icon-folder-close"></i> Service</label>
<select id="node-input-service">
<option value="" disabled></option>
<option value="_ext_">External service</option>
</select>
</div>
<div class="form-row hide" id="node-input-external-details">
<label for="node-input-configNode"><i class="icon-bookmark"></i> Server</label>
<input type="text" id="node-input-configNode" />
</div>
<div class="form-row">
<label for="node-input-collection"><i class="icon-briefcase"></i> Collection</label>
<input type="text" id="node-input-collection" placeholder="collection" />
</div>
<div class="form-row">
<label for="node-input-operation"><i class="fa fa-wrench"></i> Operation</label>
<select type="text" id="node-input-operation" style="display: inline-block; vertical-align: top;">
<option value="" id="node-input-dynamic-operation" style="font-style: italic;">Dynamic (msg.operation)</option>
</select>
</div>
<div class="form-row">
<label for="node-input-name"><i class="icon-tag"></i> Name</label>
<input type="text" id="node-input-name" placeholder="Name" />
</div>
<div class="form-tips" id="node-warning" style="display: none">
<b> Tip:</b> If no collection is set, ensure <b>msg.collection</b> will contain the collection name.
</div>
</script>
<script type="text/x-red" data-help-name="mongodb in">
<p>Calls a MongoDB collection method based on the selected operator.</p>
<p>If <b>msg.payload</b> is an array, each element is passed as an arugment.</p>
<p>See the <a href="http://mongodb.github.io/node-mongodb-native/2.1/api/Collection.html" target="_blank"><i>MongoDB collection api-2 docs</i></a> for examples.</p>
<p>The result is returned in <b>msg.payload</b>.</p>
</script>
<script type="text/javascript">
RED.nodes.registerType("mongodb in", {
category: "storage-input",
color: "#b7a492",
defaults: {
service: {
value: "",
required: true
},
configNode: {
type: "mongodb",
validate: function validateServer(v) {
return this.service !== "_ext_" || v !== "_ADD_";
}
},
name: {
value: ""
},
collection: {
value: ""
},
operation: {
value: ""
}
},
inputs: 1,
outputs: 1,
icon: "mongodb.png",
label: function label() {
var mongoConfigNode = RED.nodes.node(this.configNode);
if (this.name) {
return this.name;
}
var serviceName = "mongodb";
if (this.service && this.service !== "_ext_") {
serviceName = this.service;
} else if (mongoConfigNode) {
serviceName = mongoConfigNode.label();
}
return serviceName + " " + this.collection + " " + this.operation;
},
labelStyle: function() {
return this.name ? "node_label_italic" : "";
},
oneditprepare: function oneditprepare() {
var serviceSelect = $('#node-input-service');
var node = this;
$.getJSON("mongodb/vcap", function(data) {
var last = serviceSelect.children().last();
var opts = data.map(function(d) {
return $('<option></option>').attr('value', d.name).attr('selected', node.service === d.name).text(d.name).wrap('<p/>').parent().html();
});
if (opts.length === 0) {
node.service = "_ext_";
serviceSelect.find("option").filter(function() {
return $(this).val() === node.service;
}).attr('selected', true);
} else {
last.before(opts.join(""));
}
serviceSelect.change();
});
serviceSelect.change(function() {
var service = serviceSelect.val();
if (service === "_ext_") {
$('#node-input-external-details').show();
} else {
$('#node-input-external-details').hide();
}
});
var selectOperation = $('#node-input-operation');
console.log('getting operations json');
$.getJSON("mongodb/operations", function(data) {
console.log('operations', data);
selectOperation.children().last().after(data.map(function(d) {
return $('<option></option>').attr('value', d).attr('selected', node.operation === d).text(d).wrap('<p/>').parent().html();
}).join(""));
if (data.indexOf(node.operation) < 0) {
$('#node-input-dynamic-operation').attr('selected', true);
}
selectOperation.change();
});
$('#node-input-collection').change(function () {
if($('#node-input-collection').val()) {
$('#node-warning').hide();
} else {
$('#node-warning').show();
}
});
}
});
</script>