瀏覽代碼

HUE-2892 [notebook] Disable $ variables for R

Added ${var} support to all the snippets
Restyled variables input
Fixed regex to detect variables and replace them
Added variable showing at page load
Enrico Berti 10 年之前
父節點
當前提交
c5346fa

二進制
apps/spark/java/-version


+ 8 - 7
apps/spark/src/spark/static/spark/js/spark.ko.js

@@ -111,7 +111,7 @@ var TYPE_ACE_EDITOR_MAP = {
   'pyspark': 'ace/mode/python',
   'spark': 'ace/mode/scala',
   'pig': 'ace/mode/pig',
-  'r': 'ace/mode/r',
+  'r': 'ace/mode/r'
 };
 
 var getDefaultSnippetProperties = function (snippetType) {
@@ -186,13 +186,11 @@ var Snippet = function (vm, notebook, snippet) {
 
   self.variables = ko.observableArray([]);
   self.variableNames = ko.computed(function () {
-    var matches = [];
-    var myRegexp = /(?:[^\\]\$)([^\d'" ]\w*)/g;
-    var match = myRegexp.exec(self.statement_raw());
+    var re = /(?:^|\W)\${(\w+)(?!\w)}/g;
 
-    while (match != null) {
+    var match, matches = [];
+    while (match = re.exec(self.statement_raw())) {
       matches.push(match[1]);
-      match = myRegexp.exec(self.statement());
     }
     return matches;
   });
@@ -234,7 +232,7 @@ var Snippet = function (vm, notebook, snippet) {
   self.statement = ko.computed(function () {
     var statement = self.statement_raw();
     $.each(self.variables(), function (index, variable) {
-      statement = statement.replace(RegExp("([^\\\\])\\$" + variable.name(), "g"), "$1" + variable.value());
+      statement = statement.replace(RegExp("([^\\\\])?\\${" + variable.name() + "}", "g"), "$1" + variable.value());
     });
     return statement;
   });
@@ -905,6 +903,9 @@ function EditorViewModel(notebooks, options) {
     self.notebooks.push(_n);
     if (_n.snippets().length > 0) {
       _n.selectedSnippet(_n.snippets()[_n.snippets().length - 1].type());
+      _n.snippets().forEach(function(snippet){
+        snippet.statement_raw.valueHasMutated();
+      });
     }
   };
 

+ 11 - 7
apps/spark/src/spark/templates/editor_components.mako

@@ -448,14 +448,8 @@ from django.utils.translation import ugettext as _
 </script>
 
 <script type="text/html" id="code-editor-snippet-body">
-  <div class="row-fluid">
+  <div class="row-fluid" style="margin-bottom: 5px">
     <div class="editor span12" data-bind="verticalSlide: codeVisible">
-      <div data-bind="foreach: variables">
-        <div>
-          <span data-bind="text: name"></span>
-          <input type="text" data-bind="value: value" />
-        </div>
-      </div>
       <div class="ace-editor" data-bind="attr: { id: id() }, aceEditor: {
           value: statement_raw,
           onExecute: execute,
@@ -467,7 +461,17 @@ from django.utils.translation import ugettext as _
           openIt: '${ _("Double click to open it") }',
           placeholder: $root.snippetPlaceholders[type()] }"></div>
       </div>
+    <div class="clearfix"></div>
+    <ul data-bind="foreach: variables" class="unstyled inline">
+        <li>
+          <div class="input-prepend margin-top-10">
+            <span class="muted add-on" data-bind="text: name"></span>
+            <input class="input-medium" type="text" placeholder="${ _("Variable value") }" data-bind="value: value">
+          </div>
+        </li>
+      </ul>
   </div>
+  <div class="clearfix"></div>
 
   <!-- ko template: 'snippet-footer-actions' --><!-- /ko -->
   <!-- ko template: 'snippet-results' --><!-- /ko -->