c7327db491392895aefae7fdbd94db58575b4635
[ccsdk/distribution.git] / dgbuilder / nodes / dge / dgelogic / forNode.html
1 <!--
2   Copyright 2013 IBM Corp.
3
4   Licensed under the Apache License, Version 2.0 (the "License");
5   you may not use this file except in compliance with the License.
6   You may obtain a copy of the License at
7
8   http://www.apache.org/licenses/LICENSE-2.0
9
10   Unless required by applicable law or agreed to in writing, software
11   distributed under the License is distributed on an "AS IS" BASIS,
12   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   See the License for the specific language governing permissions and
14   limitations under the License.
15 -->
16
17 <script type="text/x-red" data-template-name="for">
18     <div class="form-row">
19         <label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
20         <input type="text" id="node-input-name" placeholder="Name">
21     </div>
22     <div class="form-row">
23         <label for="node-input-xml"><i class="fa fa-wrench"></i> Node XML</label>
24         <input type="hidden" id="node-input-xml" autofocus="autofocus">
25         <div style="height: 450px;" class="node-text-editor" id="node-input-xml-editor" onkeyup="resetStatus()" ></div>
26     </div>
27     <div class="form-row">
28     <a href="#" class="btn btn-mini" id="node-input-validate" style="margin-top: 4px;"><b>Validate XML</b></a>
29     <a href="#" class="btn btn-mini" id="node-input-show-sli-values" style="margin-top: 4px;"><b>Show Values</b></a> 
30     <input type="hidden" id="node-input-comments">
31     <a href="#" class="btn btn-mini" id="node-input-btnComments" style="margin-top: 4px;"><b>Add Comments</b></a>
32     <div id="node-validate-result" class="form-tips" style="float:right;font-size:10px"></div>
33     </div>
34     <div class="form-tips">See the Info tab for help using this node.</div>
35 </script>
36
37 <script type="text/x-red" data-help-name="for">
38         <p>A for node.</p>
39         <p>First line of XML must contain opening tag.</p>
40         <p>Do not include closing tag - it will be automatically generated.</p>
41
42 <div class="section">
43 <h5><a name="Description"></a>Description</h5>
44 <p>A <b>for</b> node provides a fixed iteration looping mechanism, similar to the Java for loop</p></div>
45 <div class="section">
46 <h5><a name="Attributes"></a>Attributes</h5>
47 <table border="1" class="table table-striped">
48 <tr class="a">
49 <td align="center"><b>index</b></td>
50 <td align="left">index variable</td></tr>
51 <tr class="b">
52 <td align="center"><b>start</b></td>
53 <td align="left">initial value</td></tr>
54 <tr class="a">
55 <td align="center"><b>end</b></td>
56 <td align="left">maximum value</td></tr></table></div>
57 <div class="section">
58 <h5><a name="Parameters"></a>Parameters</h5>
59 <p>Not applicable.</p></div>
60 <div class="section">
61 <h5><a name="Outcomes"></a>Outcomes</h5>
62 <p>Not applicable. The <b>status</b> node has no outcomes.</p></div>
63 <div class="section">
64 <h5><a name="Example"></a>Example</h5>
65 <div class="source">
66 <pre>&lt;for index=&quot;i&quot; start=&quot;0&quot; end=&quot;$network.num-segments&quot;&gt;
67   &lt;set&gt;
68     &lt;parameter name=&quot;$vlanlist&quot; value=&quot;$network.segment[i].provider-segmentation-id&quot;/&gt;
69   &lt;/set&gt;
70 &lt;/for&gt;</pre></div></div></div>    
71 </script>
72
73
74 <script type="text/javascript">
75     RED.nodes.registerType('for',{
76         color:"#fdd0a2",
77         category: 'DGElogic',
78         defaults: {
79             name: {value:"for"},
80             xml: {value:"<for index='' start='' end='' >\n"},
81             comments:{value:""},        
82             outputs: {value:1}
83         },
84         inputs:1,
85         outputs:1,
86         icon: "arrow-in.png",
87         label: function() {
88             return this.name;
89         },
90         oneditprepare: function() {
91             $( "#node-input-outputs" ).spinner({
92                 min:1
93             });
94
95
96              var comments = $( "#node-input-comments").val();
97              if(comments != null){
98                 comments = comments.trim();
99                 if(comments != ''){
100                         $("#node-input-btnComments").html("<span style='color:blue;'><b>View Comments</b></span>");
101                 }
102              }
103
104             function functionDialogResize(ev,ui) {
105                 $("#node-input-xml-editor").css("height",(ui.size.height-275)+"px");
106             };
107
108             $( "#dialog" ).dialog( "option", "width", 1200 );
109             $( "#dialog" ).dialog( "option", "height", 750 );
110             $( "#dialog" ).on("dialogresize", functionDialogResize);
111             $( "#dialog" ).one("dialogopen", function(ev) {
112                 var size = $( "#dialog" ).dialog('option','sizeCache-function');
113                 if (size) {
114                     functionDialogResize(null,{size:size});
115                 }
116             });
117
118             /* close dialog when ESC is pressed and released */ 
119             $( "#dialog" ).keyup(function(event){
120                 if(event.which == 27 ) {
121                         $("#node-dialog-cancel").click();
122                 }
123             }); 
124
125             $( "#dialog" ).one("dialogclose", function(ev,ui) {
126                 var height = $( "#dialog" ).dialog('option','height');
127                 $( "#dialog" ).off("dialogresize",functionDialogResize);
128             });
129             var that = this;
130             require(["orion/editor/edit"], function(edit) {
131                 that.editor = edit({
132                     parent:document.getElementById('node-input-xml-editor'),
133                     lang:"html",
134                     contents: $("#node-input-xml").val()
135                 });
136                 RED.library.create({
137                     url:"functions", // where to get the data from
138                     type:"function", // the type of object the library is for
139                     editor:that.editor, // the field name the main text body goes to
140                     fields:['name','outputs']
141                 });
142                 $("#node-input-name").focus();
143                 $("#node-input-validate").click(function(){
144                                 console.log("validate clicked.");
145                                 //console.dir(that.editor);
146                                 //console.log("getText:" + that.editor.getText());
147                                 var val = that.editor.getText();
148                                 validateXML(val); 
149                 });
150                 $("#node-input-show-sli-values").click(function(){
151                                 console.log("SLIValues clicked.");
152                                 showValuesBox(that.editor,sliValuesObj);
153                 });
154
155             });
156             //for click of add comments button
157             $("#node-input-btnComments").click(function(e){
158                         showCommentsBox();
159             }); 
160         },
161         oneditsave: function() {
162             $("#node-input-xml").val(this.editor.getText());
163                 var resp=validateXML(this.editor.getText());
164                 if(resp){
165                         this.status = {fill:"green",shape:"dot",text:"OK"};
166                 }else{
167                         this.status = {fill:"red",shape:"dot",text:"ERROR"};
168                 }       
169                 delete this.editor;
170         }
171     });
172 </script>