Explorar o código

HUE-1518 [hbase] Some Final Bugfixes & Polish

Kevin Wang %!s(int64=12) %!d(string=hai) anos
pai
achega
012a8d9

+ 7 - 5
apps/hbase/src/hbase/templates/app.mako

@@ -198,7 +198,7 @@ ${ commonheader(None, "hbase", user) | n,unicode }
       <div class="container-fluid">
         <div class="row-fluid">
           <div id="searchbar-main" class="span5" data-bind="click: search.clickTagBar">
-            <div id="search-tags" contenteditable="true" data-bind="editableText: search.cur_input, hasfocus: search.focused, css: { 'active': search.cur_input() != '' }, event: { 'keydown': search.onKeyDown, click: search.updateMenu.bind(null) }" data-placeholder="${_('row_key, row_key_prefix* + scan_length, row_key [family:col1, family2:col2, family3:]')}">
+            <div id="search-tags" contenteditable="true" data-bind="editableText: search.cur_input, hasfocus: search.focused, css: { 'active': search.cur_input() != '' }, event: { 'keydown': search.onKeyDown, click: search.updateMenu.bind(null) }" data-placeholder="${_('row_key, row_prefix* +scan_len [col1, family:col2, fam3:, col_prefix* +3, fam: col2 to col3] {Filter1() AND Filter2()}')}">
             </div>
           </div>
           <ul id="search-typeahead" data-bind="visible: search.focused() && !search.submitted()">
@@ -262,20 +262,22 @@ ${ commonheader(None, "hbase", user) | n,unicode }
               <button class="btn" data-bind="enable: views.tabledata.selected().length > 0, click: views.tabledata.dropSelected"><i class="icon-trash"></i> ${_('Drop Rows')}</button>
             % endif
             <button id="bulk-upload-btn" class="btn fileChooserBtn" data-toggle="tooltip" title="${_('.CSV, .TSV, etc...')}" aria-hidden="true"><i class="icon-upload"></i> ${_('Bulk Upload')}</button>
-            <a href="#new_row_modal" data-bind="click:function(){app.focusModel(app.views.tabledata);logGA('new_row_modal');}" role="button" class="btn btn-primary" data-callback="" data-toggle="modal"><i class='icon-plus-sign'></i> ${_('New Row')}</a>
+            <a href="#new_row_modal" data-bind="click:function(){app.focusModel(app.views.tabledata);launchModal('new_row_modal')}" role="button" class="btn btn-primary" data-callback=""><i class='icon-plus-sign'></i> ${_('New Row')}</a>
           </span>
         </div>
     </div>
 
     <!-- New Row Modal -->
     <form id="new_row_modal" action="putRow" method="POST" class="modal hide fade ajaxSubmit" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
+    </form>
+    <script id="new_row_modal_template" type="text/html">
       <div class="modal-header">
         <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
-        <h3>${_('Insert New Row')} - <span data-bind="text: pageTitle"></span></h3>
+        <h3>${_('Insert New Row')}</h3>
       </div>
       <div class="modal-body controls">
         <input type="hidden" name="cluster" data-bind="value:app.cluster"/>
-        <input type="hidden" name="tableName" data-bind="value:views.tabledata.name"/>
+        <input type="hidden" name="tableName" data-bind="value:app.views.tabledata.name"/>
         <label class="control-label">${_('Row Key')}</label>
         <input type="text" name="row_key" placeholder="row_key">
         <input type="hidden" name="column_data" data-subscribe="#new_row_field_list"/>
@@ -286,7 +288,7 @@ ${ commonheader(None, "hbase", user) | n,unicode }
         <button class="btn" data-dismiss="modal" aria-hidden="true">${_('Cancel')}</button>
         <input type="submit" class="btn btn-primary" value="Submit" />
       </div>
-    </form>
+    </script>
 
     <!-- New Column Modal -->
     <form id="new_column_modal" action="putColumn" method="POST" class="modal hide fade ajaxSubmit" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">

+ 1 - 1
apps/hbase/static/css/hbase.css

@@ -546,7 +546,7 @@ textarea {
 	font-size: 50px;
 }
 
-#new_table_modal ul
+#new_table_modal ul, #new_row_field_list
 {
 	list-style-type: none;
 	padding: 0px;

+ 7 - 4
apps/hbase/static/js/app.js

@@ -21,6 +21,9 @@ var AppViewModel = function() {
   self.pageTitle = ko.observable("");
   self.focusModel = ko.observable();
   self.cluster = ko.observable("");
+  self.cluster.subscribe(function() {
+    app.views.tabledata.name('');
+  });
   self.clusters = ko.observableArray();
   API.query('getClusters').done(function(data) {
     app.clusters(data);
@@ -97,11 +100,12 @@ routie({
   ':cluster/:table/query/:query': function(cluster, table, query) {
       logGA('query_table');
       app.station('table');
+      resetSearch();
+      app.search.cur_input(query);
       Router.setTable(cluster, table);
       resetElements();
       Views.render('dataview');
       app.views.tabledata._reloadcfs(function(){
-        app.search.cur_input(query);
         app.search.evaluate();
         app.views.tabledata.searchQuery(query);
       });
@@ -122,7 +126,9 @@ routie({
       app.cluster(cluster);
       app.pageTitle(cluster);
       Views.render('clusterview');
+      resetSearch();
       resetElements();
+      app.views.tabledata.name('');
       app.views.tables.reload();
       routed = true;
     },
@@ -222,9 +228,6 @@ $('form.ajaxSubmit').submit(bindSubmit).on('hidden', function() {
 $('a.action_addColumn').click(function() {
   $(this).parent().find("ul").append("<li><input type=\"text\" name=\"table_columns\" placeholder = \"family_name\"/></li>")
 });
-$('a.action_addColumnValue').click(function() {
-  $(this).parent().find("ul").append("<li><input type=\"text\" name=\"column_values\" class=\"ignore\" placeholder = \"family:column_name\"/> <input type=\"text\" name=\"column_values\" class=\"ignore\" placeholder = \"cell_value\"/></li>")
-});
 
 var konami = [38, 38, 40, 40, 37, 39, 37, 39, 66, 65, 13];
 var konami_index = 0;

+ 13 - 6
apps/hbase/static/js/controls.js

@@ -163,10 +163,11 @@ var SmartViewModel = function(options) {
 
   self.columnFamilies = ko.observableArray();
   self.name = ko.observable(options.name);
-  self.name.subscribe(function(){
+  self.name.subscribe(function(val){
+    if(!val) return;
     self.columnFamilies([]);
     self._reloadcfs();
-    if(app.station() == 'table')
+    if(app.station() == 'table' && app.search.cur_input())
       return;
     self.querySet.removeAll();
     self.evaluateQuery();
@@ -919,9 +920,13 @@ var tagsearch = function() {
     switch(self.mode()) {
       case 'filter':
         var focus = val.replace(/\{|\}|\s|&[^;]+?;/g,"").split(searchRenderers.rowkey.nested.filter.nested.linker.select).slice(-1)[0];
-        self.activeSuggestions(self.filters.filter(function(a) {
-          return a.toLowerCase().replace(" ","").indexOf(focus.toLowerCase()) != -1;
-        }));
+        if(focus != "") {
+          self.activeSuggestions(self.filters.filter(function(a) {
+            return a.toLowerCase().replace(" ","").indexOf(focus.toLowerCase()) != -1;
+          }));
+        } else {
+          self.activeSuggestions([]);
+        }
         return;
       case 'rowkey':
         var validate = window.getSelection().getRangeAt(0).startContainer.nodeValue;
@@ -993,6 +998,8 @@ var CellHistoryPage = function(options) {
 
   self.pickHistory = function(data) {
     data.history = self;
-    launchModal('cell_edit_modal',{ content: data, mime: detectMimeType(data.value), readonly: true })
+    if(!ko.isObservable(data.value))
+      data.value = ko.observable(data.value);
+    launchModal('cell_edit_modal',{ content: data, mime: detectMimeType(data.value()), readonly: true })
   };
 };

+ 19 - 11
apps/hbase/static/js/utils.js

@@ -111,15 +111,22 @@ function launchModal(modal, data) {
           app.focusModel(data.content);
       data.content.history.reload();
 
-      var path = '/hbase/api/putUpload/"' + app.cluster() + '"/"' + app.views.tabledata.name() + '"/"' + data.content.parent.row + '"/"' + data.content.name + '"';
-      var uploader = new qq.FileUploaderBasic({
-        button: document.getElementById("file-upload-btn"),
-        action: path,
-        fileFieldLabel: 'hbase_file',
-        multiple: false,
-        onComplete:function (id, fileName, response) {
-          data.content.reload();
-        }
+      if(data.content.parent) {
+        var path = '/hbase/api/putUpload/"' + app.cluster() + '"/"' + app.views.tabledata.name() + '"/"' + data.content.parent.row + '"/"' + data.content.name + '"';
+        var uploader = new qq.FileUploaderBasic({
+          button: document.getElementById("file-upload-btn"),
+          action: path,
+          fileFieldLabel: 'hbase_file',
+          multiple: false,
+          onComplete:function (id, fileName, response) {
+            data.content.reload();
+          }
+        });
+      }
+      break;
+    case 'new_row_modal':
+      $('a.action_addColumnValue').click(function() {
+        $(this).parent().find("ul").append("<li><input type=\"text\" name=\"column_values\" class=\"ignore\" placeholder = \"family:column_name\"/> <input type=\"text\" name=\"column_values\" class=\"ignore\" placeholder = \"cell_value\"/></li>")
       });
       break;
     case 'new_column_modal':
@@ -142,8 +149,9 @@ function launchModal(modal, data) {
       });
       break;
   }
-  element.modal('show');
-logGA(modal.slice(0, modal.indexOf('_modal') != -1 ? modal.indexOf('_modal') : modal.length));
+  if(!element.hasClass('in'))
+    element.modal('show');
+  logGA(modal.slice(0, modal.indexOf('_modal') != -1 ? modal.indexOf('_modal') : modal.length));
 }
 
 function parseXML(xml) {