UNPKG

prisme-flow

Version:

prisme platform flow engine

200 lines (189 loc) 6.61 kB
<!-- 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>