diff --git a/main/webapp/modules/core/MOD-INF/controller.js b/main/webapp/modules/core/MOD-INF/controller.js
index 85da832d9..503d4e921 100644
--- a/main/webapp/modules/core/MOD-INF/controller.js
+++ b/main/webapp/modules/core/MOD-INF/controller.js
@@ -492,6 +492,7 @@ function init() {
"scripts/dialogs/scatterplot-dialog.js",
"scripts/dialogs/templating-exporter-dialog.js",
"scripts/dialogs/column-reordering-dialog.js",
+ "scripts/dialogs/common-transform-dialog.js",
"scripts/dialogs/custom-tabular-exporter-dialog.js",
"scripts/dialogs/sql-exporter-dialog.js",
"scripts/dialogs/expression-column-dialog.js",
diff --git a/main/webapp/modules/core/langs/translation-en.json b/main/webapp/modules/core/langs/translation-en.json
index 5c6dc8811..a02c23feb 100644
--- a/main/webapp/modules/core/langs/translation-en.json
+++ b/main/webapp/modules/core/langs/translation-en.json
@@ -439,6 +439,7 @@
"core-views/facet": "Facet",
"core-views/edit-cells": "Edit cells",
"core-views/edit-column": "Edit column",
+ "core-views/edit-all-columns": "Edit all columns",
"core-views/transpose": "Transpose",
"core-views/sort": "Sort",
"core-views/collapse-expand": "Collapse/expand columns to make viewing the data more convenient",
diff --git a/main/webapp/modules/core/scripts/dialogs/common-transform-dialog.html b/main/webapp/modules/core/scripts/dialogs/common-transform-dialog.html
new file mode 100644
index 000000000..d02e4cac4
--- /dev/null
+++ b/main/webapp/modules/core/scripts/dialogs/common-transform-dialog.html
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/main/webapp/modules/core/scripts/dialogs/common-transform-dialog.js b/main/webapp/modules/core/scripts/dialogs/common-transform-dialog.js
new file mode 100644
index 000000000..0f34310bd
--- /dev/null
+++ b/main/webapp/modules/core/scripts/dialogs/common-transform-dialog.js
@@ -0,0 +1,134 @@
+/*
+
+Copyright 2010, Google Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+ * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+*/
+
+function commonTransformDialog(expression,label) {
+ this._createDialog(expression,label);
+
+}
+
+commonTransformDialog.prototype._createDialog = function(expression,label) {
+ var self = this;
+ var dialog = $(DOM.loadHTML("core", "scripts/dialogs/common-transform-dialog.html"));
+ this._elmts = DOM.bind(dialog);
+ this._elmts.dialogHeader.html($.i18n(label));
+ this._elmts.selectAllButton.html($.i18n('core-buttons/select-all'));
+ this._elmts.deselectAllButton.html($.i18n('core-buttons/deselect-all'));
+ this._elmts.okButton.html($.i18n('core-buttons/ok'));
+ this._elmts.cancelButton.html($.i18n('core-buttons/cancel'));
+
+ this._level = DialogSystem.showDialog(dialog);
+ var container = this._elmts.columnContainer;
+
+ for (var i = 0; i < theProject.columnModel.columns.length; i++) {
+ var col = theProject.columnModel.columns[i];
+ var colName = col.name;
+ var columnIndex = Refine.columnNameToColumnIndex(col.name);
+ var div = $('