[Groonga-commit] groonga/groonga [master] admin: create result table as jQuery object instead of HTML

Back to archive index

null+****@clear***** null+****@clear*****
2012年 4月 6日 (金) 18:39:42 JST


Kouhei Sutou	2012-04-06 18:39:42 +0900 (Fri, 06 Apr 2012)

  New Revision: 6cba7786afaf0d516da85899806a903814b0d83d

  Log:
    admin: create result table as jQuery object instead of HTML

  Modified files:
    data/html/admin/js/groonga-admin.js

  Modified: data/html/admin/js/groonga-admin.js (+46 -37)
===================================================================
--- data/html/admin/js/groonga-admin.js    2012-04-06 17:25:14 +0900 (068a951)
+++ data/html/admin/js/groonga-admin.js    2012-04-06 18:39:42 +0900 (c4fd689)
@@ -362,7 +362,7 @@ jQuery.extend(GroongaAdmin.prototype, {
           var $result = $("#suggest-result-tab-" + type);
           $result
             .empty()
-            .append($("<div/>").html(that._createResultTable(response)));
+            .append($("<div/>").append(that._createResultTable(response)));
         },
         error: function(jqXHR, textStatus, errorThrown) {
         }
@@ -426,76 +426,85 @@ jQuery.extend(GroongaAdmin.prototype, {
     }
   },
   _createResultTable: function (result, options) {
+    var that = this;
     if (!options) {
       options = {};
     }
-    var elms = ['<table class="records">'];
+    var table = $('<table class="records"/>');
     if ($.isArray(result)) {
-      elms.push('<thead>');
       var nEntries = result.length;
       if (nEntries >= 1) {
+        var thead = $('<thead/>');
+        table.append(thead);
         var line = result[0];
-        elms.push('<thead>');
         if ($.isArray(line)) {
-          elms.push('<tr>');
+          var tr = $('<tr/>');
+          thead.append(tr);
           var m = line.length;
           if (options.check) {
-            elms.push('<th/>');
+            tr.append($('<th/>'));
           }
           for (var j = 0; j < m; j++) {
-            elms.push('<th>');
-            elms.push(prim2html(line[j][0], 128));
-            elms.push('<br />');
-            elms.push(prim2html(line[j][1], 128));
-            elms.push('</th>');
+            var th = $('<th/>');
+            tr.append(th);
+            th.append(prim2html(line[j][0], 128));
+            th.append($('<br />'));
+            th.append(prim2html(line[j][1], 128));
           }
           if (options.button) {
-            elms.push('<th/>');
+            tr.append($('<th/>'));
           }
-          elms.push('</tr>');
         }
-        elms.push('</thead>');
-        elms.push('<tbody>');
+        var tbody = $('<tbody>');
+        table.append(tbody);
         for (var i = 1; i < nEntries; i++) {
           line = result[i];
           if ($.isArray(line)) {
-            elms.push('<tr>');
+            var tr = $('<tr>');
+            table.append(tr);
             var m = line.length;
             switch(options.check) {// チェックボックスの値を何にするか
             case 1: // 1番目の要素(レコード一覧の_id等)
             case 2: // 2番目の要素(テーブル・カラム一覧のname等)
-              elms.push('<td><input type="checkbox" value="');
-              elms.push(line[options.check-1]);
-              elms.push('" /></td>');
+              var td = $('<td/>');
+              tr.append(td);
+              td.append($('<input/>')
+                        .attr("type", "checkbox")
+                        .attr("value", line[options.check-1]));
               break;
             }
             for (var j = 0; j < m; j++) {
-              elms.push('<td>');
-              elms.push(prim2html(line[j], 128));
-              elms.push('</td>');
+              var td = $('<td/>');
+              tr.append(td);
+              td.append(prim2html(line[j], 128));
             }
             switch(options.button) {
             case 1: // Edit record
-              // TODO: This doesn't work becuase GroongaAdmin instance has
-              // show_edit_record function not GroongaAdmin object.
-              elms.push('<td><input type="button" onClick="GroongaAdmin.show_edit_record(');
-              elms.push(line[0]);
-              elms.push(');" value="編集" /></td>');
+              var td = $('<td/>');
+              tr.append(td);
+              td.append($('<input/>')
+                        .attr("type", "button")
+                        .attr("value", "編集")
+                        .click(function () {
+                          that.show_edit_record(line[0]);
+                        }));
               break;
             case 2: // Table
-              elms.push('<td><input type="button" onClick="$(\'#side-menu-tablelist-link-');
-              elms.push(line[1]);
-              elms.push('\').click();" value="詳細" /></td>');
+              var td = $('<td/>');
+              tr.append(td);
+              td.append($('<input/>')
+                        .attr("type", "button")
+                        .attr("value", "詳細")
+                        .click(function () {
+                          $("#side-menu-tablelist-link-" + line[1]).click();
+                        }));
               break;
             }
-            elms.push('</tr>');
           }
         }
-        elms.push('</tbody>');
       }
     }
-    elms.push('</table>');
-    return elms.join('');
+    return table;
   },
   show_edit_record: function(id) {
     $('#table-tabs').tabs('select', 2);
@@ -657,7 +666,7 @@ jQuery.extend(GroongaAdmin.prototype, {
         success: function(d) {
           if (that.validateajax(d) < 0) { return; }
           var b = d[1];
-          var table = $(that._createResultTable(b, {check: 2, button: 2}));
+          var table = that._createResultTable(b, {check: 2, button: 2});
           $('#tab-tablelist-table').append($('<h1 />').text('テーブル一覧')).append(table);
           that.hideloading();
         },
@@ -773,7 +782,7 @@ jQuery.extend(GroongaAdmin.prototype, {
             .append($('<h1 />').text('レコード一覧: ' + params['table']))
             .append($('<p />').text('総件数: ' + all_count))
             .append(pager.clone(true))
-            .append($('<div />').html(that._createResultTable(recs, {check: 1, button: 1})))
+            .append($('<div />').append(that._createResultTable(recs, {check: 1, button: 1})))
             .append(pager);
           that.hideloading();
         },
@@ -794,7 +803,7 @@ jQuery.extend(GroongaAdmin.prototype, {
         success: function(d) {
           if (that.validateajax(d) < 0) { return; }
           var b = d[1];
-          var table = $(that._createResultTable(b, {check: 2}));
+          var table = that._createResultTable(b, {check: 2});
           $('#tab-columnlist-table')
             .append($('<h1 />').text('カラム一覧: ' + table_name))
             .append(table);




Groonga-commit メーリングリストの案内
Back to archive index