diff --git a/CHANGES.txt b/CHANGES.txt index 59b883d5c..bc6b209f9 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -20,6 +20,7 @@ Fixes: - Issue 14: "Limiting Freebase load to starred records" We load whatever rows that are filtered through, not particularly starred rows. - Issue 49: "Add Edit Cells / Set Null" +- Issue 30: "Transform dialog should remember preferred language." Features: - Row/record sorting (Issue 32) diff --git a/LICENSE.txt b/LICENSE.txt index f4d2c9fe4..6efb0a434 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -116,6 +116,9 @@ licenses/json.LICENSE.txt licenses/mockito.LICENSE.txt mockito + +http://www.opensource.org/licenses/mit-license.php + jquery.cookie Others ------ diff --git a/src/main/webapp/externals/jquery.cookie.js b/src/main/webapp/externals/jquery.cookie.js new file mode 100644 index 000000000..6df1faca2 --- /dev/null +++ b/src/main/webapp/externals/jquery.cookie.js @@ -0,0 +1,96 @@ +/** + * Cookie plugin + * + * Copyright (c) 2006 Klaus Hartl (stilbuero.de) + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * + */ + +/** + * Create a cookie with the given name and value and other optional parameters. + * + * @example $.cookie('the_cookie', 'the_value'); + * @desc Set the value of a cookie. + * @example $.cookie('the_cookie', 'the_value', { expires: 7, path: '/', domain: 'jquery.com', secure: true }); + * @desc Create a cookie with all available options. + * @example $.cookie('the_cookie', 'the_value'); + * @desc Create a session cookie. + * @example $.cookie('the_cookie', null); + * @desc Delete a cookie by passing null as value. Keep in mind that you have to use the same path and domain + * used when the cookie was set. + * + * @param String name The name of the cookie. + * @param String value The value of the cookie. + * @param Object options An object literal containing key/value pairs to provide optional cookie attributes. + * @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object. + * If a negative value is specified (e.g. a date in the past), the cookie will be deleted. + * If set to null or omitted, the cookie will be a session cookie and will not be retained + * when the the browser exits. + * @option String path The value of the path atribute of the cookie (default: path of page that created the cookie). + * @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie). + * @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will + * require a secure protocol (like HTTPS). + * @type undefined + * + * @name $.cookie + * @cat Plugins/Cookie + * @author Klaus Hartl/klaus.hartl@stilbuero.de + */ + +/** + * Get the value of a cookie with the given name. + * + * @example $.cookie('the_cookie'); + * @desc Get the value of a cookie. + * + * @param String name The name of the cookie. + * @return The value of the cookie. + * @type String + * + * @name $.cookie + * @cat Plugins/Cookie + * @author Klaus Hartl/klaus.hartl@stilbuero.de + */ +jQuery.cookie = function(name, value, options) { + if (typeof value != 'undefined') { // name and value given, set cookie + options = options || {}; + if (value === null) { + value = ''; + options.expires = -1; + } + var expires = ''; + if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) { + var date; + if (typeof options.expires == 'number') { + date = new Date(); + date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000)); + } else { + date = options.expires; + } + expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE + } + // CAUTION: Needed to parenthesize options.path and options.domain + // in the following expressions, otherwise they evaluate to undefined + // in the packed version for some reason... + var path = options.path ? '; path=' + (options.path) : ''; + var domain = options.domain ? '; domain=' + (options.domain) : ''; + var secure = options.secure ? '; secure' : ''; + document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join(''); + } else { // only name given, get cookie + var cookieValue = null; + if (document.cookie && document.cookie != '') { + var cookies = document.cookie.split(';'); + for (var i = 0; i < cookies.length; i++) { + var cookie = jQuery.trim(cookies[i]); + // Does this cookie string begin with the name we want? + if (cookie.substring(0, name.length + 1) == (name + '=')) { + cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); + break; + } + } + } + return cookieValue; + } +}; \ No newline at end of file diff --git a/src/main/webapp/project.html b/src/main/webapp/project.html index a9ff18eca..86aa86ca3 100644 --- a/src/main/webapp/project.html +++ b/src/main/webapp/project.html @@ -39,6 +39,7 @@ + diff --git a/src/main/webapp/scripts/dialogs/expression-preview-dialog.js b/src/main/webapp/scripts/dialogs/expression-preview-dialog.js index 6f4427d3d..af1229607 100644 --- a/src/main/webapp/scripts/dialogs/expression-preview-dialog.js +++ b/src/main/webapp/scripts/dialogs/expression-preview-dialog.js @@ -80,11 +80,34 @@ ExpressionPreviewDialog.Widget = function( values, expression ) { + var language = "gel"; + if (!(expression)) { + language = $.cookie("scripting.lang"); + if (language == "jython") { + this.expression = "return value"; + } else if (language == "clojure") { + this.expression = "value"; + } else { + language = "gel"; + this.expression = "value"; + } + } else { + this.expression = expression; + + var colon = expression.indexOf(":"); + if (colon > 0) { + var l = expression.substring(0, colon); + if (l == "gel" || l == "jython" || l == "clojure") { + this.expression = expression.substring(colon + 1); + language = l; + } + } + } + this._elmts = elmts; this._cellIndex = cellIndex; this._rowIndices = rowIndices; this._values = values; - this.expression = expression; this._results = null; this._timerID = null; @@ -93,17 +116,11 @@ ExpressionPreviewDialog.Widget = function( $("#expression-preview-tabs-history").css("display", ""); $("#expression-preview-tabs-help").css("display", ""); - var language = "gel"; - var colon = expression.indexOf(":"); - if (colon > 0) { - var l = expression.substring(0, colon); - if (l == "gel" || l == "jython" || l == "clojure") { - this.expression = expression.substring(colon + 1); - language = l; - } - } this._elmts.expressionPreviewLanguageSelect[0].value = language; - this._elmts.expressionPreviewLanguageSelect.bind("change", function() { self.update(); }); + this._elmts.expressionPreviewLanguageSelect.bind("change", function() { + $.cookie("scripting.lang", this.value); + self.update(); + }); var self = this; this._elmts.expressionPreviewTextarea @@ -242,7 +259,7 @@ ExpressionPreviewDialog.Widget.prototype._renderExpressionHistory = function(dat var table = $( '' + - '' + + '' + '
ExpressionLanguageFrom
FromExpression
' ).appendTo(elmt)[0]; @@ -250,9 +267,7 @@ ExpressionPreviewDialog.Widget.prototype._renderExpressionHistory = function(dat var tr = table.insertRow(table.rows.length); var o = Scripting.parse(entry.code); - $(tr.insertCell(0)).text(o.expression); - - $('Reuse').appendTo(tr.insertCell(1)).click(function() { + $('Reuse').appendTo(tr.insertCell(0)).click(function() { self._elmts.expressionPreviewTextarea[0].value = o.expression; self._elmts.expressionPreviewLanguageSelect[0].value = o.language; @@ -263,8 +278,9 @@ ExpressionPreviewDialog.Widget.prototype._renderExpressionHistory = function(dat self.update(); }); - $(tr.insertCell(2)).text(o.language); - $(tr.insertCell(3)).html(entry.global ? "Other projects" : "This project"); + $(tr.insertCell(1)).html(entry.global ? "Other projects" : "This project"); + $(tr.insertCell(2)).text(o.language + ":"); + $(tr.insertCell(3)).text(o.expression); }; for (var i = 0; i < data.expressions.length; i++) { diff --git a/src/main/webapp/scripts/views/data-table-column-header-ui.js b/src/main/webapp/scripts/views/data-table-column-header-ui.js index f545303b9..3101b1769 100644 --- a/src/main/webapp/scripts/views/data-table-column-header-ui.js +++ b/src/main/webapp/scripts/views/data-table-column-header-ui.js @@ -101,11 +101,11 @@ DataTableColumnHeaderUI.prototype._createMenuForColumnHeader = function(elmt) { {}, { label: "Custom Text Facet ...", - click: function() { self._doFilterByExpressionPrompt("value", "list"); } + click: function() { self._doFilterByExpressionPrompt(null, "list"); } }, { label: "Custom Numeric Facet ...", - click: function() { self._doFilterByExpressionPrompt("value", "range"); } + click: function() { self._doFilterByExpressionPrompt(null, "range"); } }, { label: "Customized Facets", @@ -692,7 +692,7 @@ DataTableColumnHeaderUI.prototype._doTextTransformPrompt = function() { this._column.cellIndex, o.rowIndices, o.values, - "value" + null ); previewWidget._prepareUpdate = function(params) { params.repeat = bodyElmts.repeatCheckbox[0].checked; @@ -916,7 +916,7 @@ DataTableColumnHeaderUI.prototype._doAddColumn = function(initialExpression) { this._column.cellIndex, o.rowIndices, o.values, - "value" + null ); };