From 2fc0374f7920c9e4ee423d1c50ed1bedd9d1fc6e Mon Sep 17 00:00:00 2001 From: David Huynh Date: Mon, 18 Oct 2010 01:53:23 +0000 Subject: [PATCH] Made data table view's All menu extensible. Added more common transforms. Touched up on a few menus. git-svn-id: http://google-refine.googlecode.com/svn/trunk@1593 7d457c2a-affb-35e4-300a-418c747d4874 --- main/webapp/modules/core/scripts/util/menu.js | 19 +++---- .../views/data-table/column-header-ui.js | 11 ++++ .../views/data-table/data-table-view.js | 53 +++++++++++++++++-- .../views/data-table/menu-edit-cells.js | 37 ++++++++++--- 4 files changed, 99 insertions(+), 21 deletions(-) diff --git a/main/webapp/modules/core/scripts/util/menu.js b/main/webapp/modules/core/scripts/util/menu.js index c41404758..0aeb60b79 100644 --- a/main/webapp/modules/core/scripts/util/menu.js +++ b/main/webapp/modules/core/scripts/util/menu.js @@ -128,16 +128,17 @@ MenuSystem.createAndShowStandardMenu = function(items, elmt, options) { menuItem.addClass("menu-expanded"); - MenuSystem.createAndShowStandardMenu( - item.submenu, - this, - { - horizontal: true, - onDismiss: function() { - menuItem.removeClass("menu-expanded"); - } + var options = { + horizontal: true, + onDismiss: function() { + menuItem.removeClass("menu-expanded"); } - ); + }; + if ("width" in item) { + options.width = item.width; + } + + MenuSystem.createAndShowStandardMenu(item.submenu, this, options); }); } else { menuItem.html(item.label).click(function(evt) { diff --git a/main/webapp/modules/core/scripts/views/data-table/column-header-ui.js b/main/webapp/modules/core/scripts/views/data-table/column-header-ui.js index d7b6a838a..f2996859e 100644 --- a/main/webapp/modules/core/scripts/views/data-table/column-header-ui.js +++ b/main/webapp/modules/core/scripts/views/data-table/column-header-ui.js @@ -9,6 +9,14 @@ function DataTableColumnHeaderUI(dataTableView, column, columnIndex, td) { DataTableColumnHeaderUI._extenders = []; +/* + To extend, call + + DataTableColumnHeaderUI.extendMenu(function(column, columnHeaderUI, menu) { + ... + MenuSystem.appendTo(menu, path, newItems); + }); +*/ DataTableColumnHeaderUI.extendMenu = function(extender) { DataTableColumnHeaderUI._extenders.push(extender); }; @@ -61,12 +69,14 @@ DataTableColumnHeaderUI.prototype._createMenuForColumnHeader = function(elmt) { { id: "core/facet", label: "Facet", + width: "170px", submenu: [] }, {}, { id: "core/edit-cells", label: "Edit Cells", + width: "170px", submenu: [] }, { @@ -145,6 +155,7 @@ DataTableColumnHeaderUI.prototype._createMenuForColumnHeader = function(elmt) { id: "core/reconcile", label: "Reconcile", tooltip: "Match this column's cells to topics on Freebase", + width: "170px", submenu: [] } ]; diff --git a/main/webapp/modules/core/scripts/views/data-table/data-table-view.js b/main/webapp/modules/core/scripts/views/data-table/data-table-view.js index ba7ec70f6..98c1ed754 100644 --- a/main/webapp/modules/core/scripts/views/data-table/data-table-view.js +++ b/main/webapp/modules/core/scripts/views/data-table/data-table-view.js @@ -10,6 +10,25 @@ function DataTableView(div) { this._showRows(0); } +DataTableView._extenders = []; + +/* + To extend, do something like this + + DataTableView.extendMenu(function(dataTableView, menu) { + ... + MenuSystem.appendTo(menu, [ "core/view" ], { + "label": "Test", + "click": function() { + alert("Test"); + } + }); + }); +*/ +DataTableView.extendMenu = function(extender) { + DataTableView._extenders.push(extender); +}; + DataTableView.prototype.getSorting = function() { return this._sorting; }; @@ -429,11 +448,14 @@ DataTableView.prototype._addSortingCriterion = function(criterion, alone) { DataTableView.prototype._createMenuForAllColumns = function(elmt) { var self = this; - MenuSystem.createAndShowStandardMenu([ + var menu = [ { label: "Facet", + id: "core/facets", + width: "200px", submenu: [ { label: "Facet by Star", + id: "core/facet-by-star", click: function() { ui.browsingEngine.addFacet( "list", @@ -450,6 +472,7 @@ DataTableView.prototype._createMenuForAllColumns = function(elmt) { }, { label: "Facet by Flag", + id: "core/facet-by-flag", click: function() { ui.browsingEngine.addFacet( "list", @@ -466,16 +489,21 @@ DataTableView.prototype._createMenuForAllColumns = function(elmt) { } ] }, + {}, { label: "Edit Rows", + id: "core/edit-rows", + width: "200px", submenu: [ { label: "Star Rows", + id: "core/star-rows", click: function() { Refine.postCoreProcess("annotate-rows", { "starred" : "true" }, null, { rowMetadataChanged: true }); } }, { label: "Unstar Rows", + id: "core/unstar-rows", click: function() { Refine.postCoreProcess("annotate-rows", { "starred" : "false" }, null, { rowMetadataChanged: true }); } @@ -483,12 +511,14 @@ DataTableView.prototype._createMenuForAllColumns = function(elmt) { {}, { label: "Flag Rows", + id: "core/flag-rows", click: function() { Refine.postCoreProcess("annotate-rows", { "flagged" : "true" }, null, { rowMetadataChanged: true }); } }, { label: "Unflag Rows", + id: "core/unflag-rows", click: function() { Refine.postCoreProcess("annotate-rows", { "flagged" : "false" }, null, { rowMetadataChanged: true }); } @@ -496,6 +526,7 @@ DataTableView.prototype._createMenuForAllColumns = function(elmt) { {}, { label: "Remove All Matching Rows", + id: "core/remove-rows", click: function() { Refine.postCoreProcess("remove-rows", {}, null, { rowMetadataChanged: true }); } @@ -503,19 +534,26 @@ DataTableView.prototype._createMenuForAllColumns = function(elmt) { ] }, { label: "Edit Columns", + id: "core/edit-columns", + width: "200px", submenu: [ { - label: "Re-order Columns", + label: "Re-order Columns ...", + id: "core/reorder-columns", click: function() { new ColumnReorderingDialog(); } } ] }, + {}, { label: "View", + id: "core/view", + width: "200px", submenu: [ { label: "Collapse All Columns", + id: "core/collapse-all-columns", click: function() { for (var i = 0; i < theProject.columnModel.columns.length; i++) { self._collapsedColumnNames[theProject.columnModel.columns[i].name] = true; @@ -525,6 +563,7 @@ DataTableView.prototype._createMenuForAllColumns = function(elmt) { }, { label: "Expand All Columns", + id: "core/expand-all-columns", click: function() { self._collapsedColumnNames = []; self.render(); @@ -532,7 +571,13 @@ DataTableView.prototype._createMenuForAllColumns = function(elmt) { } ] } - ], elmt, { width: "120px", horizontal: false }); + ]; + + for (var i = 0; i < DataTableView._extenders.length; i++) { + DataTableView._extenders[i].call(null, this, menu); + } + + MenuSystem.createAndShowStandardMenu(menu, elmt, { width: "120px", horizontal: false }); }; DataTableView.prototype._createSortingMenu = function(elmt) { @@ -643,5 +688,3 @@ DataTableView.promptExpressionOnVisibleRows = function(column, title, expression onDone ); }; - - diff --git a/main/webapp/modules/core/scripts/views/data-table/menu-edit-cells.js b/main/webapp/modules/core/scripts/views/data-table/menu-edit-cells.js index 41ce4abe4..580fd0cec 100644 --- a/main/webapp/modules/core/scripts/views/data-table/menu-edit-cells.js +++ b/main/webapp/modules/core/scripts/views/data-table/menu-edit-cells.js @@ -119,16 +119,22 @@ DataTableColumnHeaderUI.extendMenu(function(column, columnHeaderUI, menu) { label: "Common Transforms", submenu: [ { - id: "core/unescape-html-entities", - label: "Unescape HTML entities", - click: function() { doTextTransform("value.unescape('html')", "store-blank", true, 10); } + id: "core/trim-whitespace", + label: "Trim leading and trailing whitespace", + click: function() { doTextTransform("value.trim()", "store-blank", false, ""); } }, { id: "core/collapse-whitespace", - label: "Collapse whitespace", + label: "Collapse consecutive whitespace", click: function() { doTextTransform("value.replace(/\\s+/,' ')", "store-blank", false, ""); } }, {}, + { + id: "core/unescape-html-entities", + label: "Unescape HTML entities", + click: function() { doTextTransform("value.unescape('html')", "store-blank", true, 10); } + }, + {}, { id: "core/to-titlecase", label: "To Titlecase", @@ -144,9 +150,26 @@ DataTableColumnHeaderUI.extendMenu(function(column, columnHeaderUI, menu) { label: "To Lowercase", click: function() { doTextTransform("toLowercase(value)", "store-blank", false, ""); } }, + {}, + { + id: "core/to-number", + label: "To number", + click: function() { doTextTransform("toNumber(value)", "store-blank", false, ""); } + }, + { + id: "core/to-date", + label: "To date", + click: function() { doTextTransform("toDate(value)", "store-blank", false, ""); } + }, + { + id: "core/to-text", + label: "To text", + click: function() { doTextTransform("toString(value)", "store-blank", false, ""); } + }, + {}, { id: "core/to-blank", - label: "To Blank", + label: "Blank out cells", click: function() { doTextTransform("null", "store-blank", false, ""); } } ] @@ -278,12 +301,12 @@ DataTableColumnHeaderUI.extendMenu(function(column, columnHeaderUI, menu) { MenuSystem.appendTo(menu, [ "core/transpose" ], [ { id: "core/transpose-columns-into-rows", - label: "Cells Across Columns into Rows", + label: "Cells Across Columns into Rows ...", click: doTransposeColumnsIntoRows }, { id: "core/transpose-rows-into-columns", - label: "Cells in Rows into Columns", + label: "Cells in Rows into Columns ...", click: doTransposeRowsIntoColumns } ]);