From daceb06ea16494383a2daac74e6c1bd31e6ef4a9 Mon Sep 17 00:00:00 2001 From: Frank Kohlhepp Date: Sat, 28 May 2011 14:59:50 +0200 Subject: [PATCH] Refactored search --- source/css/main.css | 2 +- source/js/classes/fancy-settings.js | 3 +- source/js/classes/search.js | 48 ++++++++++++++++------------- source/js/i18n.js | 8 +++-- 4 files changed, 35 insertions(+), 26 deletions(-) diff --git a/source/css/main.css b/source/css/main.css index 6c2111e..5232eb7 100755 --- a/source/css/main.css +++ b/source/css/main.css @@ -126,7 +126,7 @@ body.searching #search-result-container { } body.measuring .tab-content, body.measuring #search-result-container { - display: block; + display: block !important; opacity: 0; overflow: hidden; } diff --git a/source/js/classes/fancy-settings.js b/source/js/classes/fancy-settings.js index a033e6a..5c0223f 100644 --- a/source/js/classes/fancy-settings.js +++ b/source/js/classes/fancy-settings.js @@ -96,7 +96,6 @@ settings.each(function (setting) { if (setting.params.type !== type) { - console.error("Only one type per group is allowed."); throw "multipleTypes"; } @@ -111,8 +110,10 @@ if (width < maxWidth) { if (type === "button" || type === "slider") { setting.element.setStyle("margin-left", (maxWidth - width + 2) + "px"); + setting.search.element.setStyle("margin-left", (maxWidth - width + 2) + "px"); } else { setting.element.setStyle("margin-left", (maxWidth - width) + "px"); + setting.search.element.setStyle("margin-left", (maxWidth - width) + "px"); } } }); diff --git a/source/js/classes/search.js b/source/js/classes/search.js index d530900..7278219 100755 --- a/source/js/classes/search.js +++ b/source/js/classes/search.js @@ -14,6 +14,7 @@ this.search = search; this.searchResultContainer = searchResultContainer; + this.setting = new Setting(new Element("div")); // Create setting for message "nothing found" setting = new Setting(this.searchResultContainer); @@ -43,26 +44,25 @@ }, "add": function (setting) { - this.index.push(setting); - }, - - "find": function (searchString) { - var result, - groupName, - group, - row, - content + var searchSetting = this.setting.create(setting.params); + setting.search = searchSetting; + searchSetting.original = setting; + this.index.push(searchSetting); - // Reset all settings - this.index.each(function (setting) { - setting.bundle.inject(setting.bundleContainer); + setting.addEvent("action", function (value, stopPropagation) { + if (searchSetting.set !== undefined && stopPropagation !== true) { + searchSetting.set(value, true); + } }); - - // Hide all groups - Object.each(this.groups, function (group) { - group.dispose(); + searchSetting.addEvent("action", function (value) { + if (setting.set !== undefined) { + setting.set(value, true); + } + setting.fireEvent("action", [value, true]); }); - + }, + + "find": function (searchString) { // Exit search mode if (searchString.trim() === "") { document.body.removeClass("searching"); @@ -70,13 +70,18 @@ } // Or enter search mode + this.index.each(function (setting) { setting.bundle.dispose(); }); + Object.each(this.groups, function (group) { group.dispose(); }); document.body.addClass("searching"); - result = this.index.filter(function (setting) { + + // Filter settings + var result = this.index.filter(function (setting) { if (setting.params.searchString.contains(searchString.trim().toLowerCase())) { return true; } }); + // Display settings result.each((function (setting) { var group, row; @@ -86,9 +91,9 @@ this.groups[setting.params.group] = (new Element("table", { "class": "setting group" })).inject(this.searchResultContainer); - group = this.groups[setting.params.group]; - var row = (new Element("tr")).inject(group); + group = this.groups[setting.params.group]; + row = (new Element("tr")).inject(group); (new Element("td", { "class": "setting group-name", @@ -99,8 +104,7 @@ "class": "setting group-content" })).inject(row); } else { - group = this.groups[setting.params.group]; - group.inject(this.searchResultContainer); + group = this.groups[setting.params.group].inject(this.searchResultContainer); } setting.bundle.inject(group.content); diff --git a/source/js/i18n.js b/source/js/i18n.js index f3c89d3..a352634 100755 --- a/source/js/i18n.js +++ b/source/js/i18n.js @@ -5,8 +5,12 @@ // (function () { var lang = navigator.language.split("-")[0]; - if (typeOf(this.i18n) !== "object") { this.i18n = {}; } + if (this.i18n === undefined) { this.i18n = {}; } this.i18n.get = function (value) { + if (value === "lang") { + return lang; + } + if (this.hasOwnProperty(value)) { value = this[value]; if (value.hasOwnProperty(lang)) { @@ -17,7 +21,7 @@ return Object.values(value)[0]; } } else { - return undefined; + return value; } }; }());