Name: Smart Url Cleaner
Version: 3-1
Author: Misj'
Description: Easy way to modify URLs based on matching-criteria

--- /usr/palm/applications/com.palm.app.browser/source/ActionBar.js.urlc.orig
+++ /usr/palm/applications/com.palm.app.browser/source/ActionBar.js
@@ -21,6 +21,7 @@
 		onLoad: "",
 		onStopLoad: "",
 		onRefresh: "",
+		onToggleJS: "",
 		onAddBookmark: "",
 		onAddToLauncher: "",
 		onShareLink: "",
@@ -33,6 +34,8 @@
 			{kind: "ToolButton", name: "back", className: "actionbar-tool-button", icon: "images/chrome/menu-icon-back.png", onclick: "doBack"},
 			{kind: "ToolButton", name: "forward", className: "actionbar-tool-button", icon: "images/chrome/menu-icon-forward.png", onclick: "doForward"},
 			{kind: "ToolButton", name: "search", className: "actionbar-tool-button", flex: 1, kind: "URLSearch", onLoad: "doLoad", onStopLoad: "doStopLoad", onRefresh: "doRefresh"},
+			{kind: "ToolButton", name: "urlc_cleanUrl", className: "actionbar-tool-button", icon: "urlc-menu-icon-cleanUrl", iconIsClassName: true, onclick: "urlc_cleanUrl"},
+			{kind: "ToolButton", name: "urlc_toggleJS", className: "actionbar-tool-button", icon: "urlc-jsToggleOn", iconIsClassName: true, onclick: "urlc_toggleJS"},
 			{kind: "ToolButton", name: "share", className: "actionbar-tool-button", icon: "images/chrome/menu-icon-share.png", onclick: "showSharePopup"},
 			{kind: "ToolButton", className: "actionbar-tool-button", icon: "images/chrome/menu-icon-newcard.png", onclick: "doNewCard"},
 			{kind: "ToolButton", className: "actionbar-tool-button", icon: "images/chrome/menu-icon-bookmark.png", onclick: "doOpenBookmarks"},
@@ -59,6 +62,7 @@
 		this.inherited(arguments);
 		this.urlChanged();
 		this.titleChanged();
+		this.urlc_showButtonsByTweak();
 		this.canGoBackChanged();
 		this.canGoForwardChanged();
 		this.canShareChanged();
@@ -84,6 +88,98 @@
 	},
 	defaultSearchChanged: function() {
 		this.$.search.setDefaultSearch(this.defaultSearch);
+	},
+	urlc_cleanUrl: function() {
+		var cleanUrl = function cleanUrl(item) {
+			if (item.enabled) {
+				var urlChanged = false;
+
+				// we use either a regular expression or a simple string.
+				var m = item.markerRegEx  ? new RegExp(item.marker  || "", item.markerREFlag || "") : item.marker  || "";
+				var s = item.searchRegEx  ? new RegExp(item.search  || "", item.searchREFlag || "") : item.search  || "";
+				var r = item.replace || "";
+
+				// .toUpperCase is a quick test to see if it's a regular expression or a string.
+				var hasMarker = m.toUpperCase === undefined ? m.test(currentUrl) : !!(currentUrl.indexOf(m)+1);
+				var hasSearch = s.toUpperCase === undefined ? s.test(currentUrl) : !!(currentUrl.indexOf(s)+1);
+				if (hasMarker && hasSearch) {
+					currentUrl = currentUrl.replace(s,r);
+					urlChanged = true;
+				}
+				if (hasMarker) {
+					if (item.prepend && currentUrl.indexOf(item.prepend) !== 0) {
+						// the url has not yet been prepended (or at least it's not at the start
+						// of the url);
+						currentUrl = (item.prepend || "") + currentUrl
+						urlChanged = true;
+					}
+					if (item.append && currentUrl.indexOf(item.append)  !== currentUrl.length - (item.append || "").length) {
+						// quick check to see if the append is at the end of the URL string.
+						// if not, we'll add it.
+						currentUrl = currentUrl + (item.append || "");
+						urlChanged = true;
+					}
+				}
+				return urlChanged;
+			}
+			return false;
+		}
+
+		var defaultUrlCleaner;
+		var cleanList = enyo.$.browserApp.urlc_getCleanList();
+			cleanList.some(function(item, idx, arr) {
+				if (item.default) {
+					defaultUrlCleaner = item;
+					arr = arr.splice(idx, 1);
+					return true;
+				}
+				return false;
+			}.bind(this));
+		var addressBar = this.$.search.$.address;
+		var currentUrl = decodeURIComponent(addressBar.$.userinput.getValue());
+		var hasScheme  = /:\/\//.test(currentUrl);	// does it have :// in the url.
+		var currentUrl = hasScheme ? currentUrl : "http://" + currentUrl;
+
+		var urlCleaned = cleanList.some(function(item, idx, arr) {
+			return cleanUrl(item);
+		});
+		if (!urlCleaned) {
+			urlCleaned = cleanUrl(defaultUrlCleaner);
+		}
+		if (urlCleaned) {
+			addressBar.$.userinput.setValue(currentUrl);
+			addressBar.go();
+		}
+	},
+	urlc_toggleJS: function (inSender) {
+		if (!inSender.getIcon) {
+			return;
+		}
+		var icon = inSender.getIcon();
+		if (icon.indexOf('Off') === -1) {
+			inSender.setIcon("urlc-jsToggleOff");
+			this.doToggleJS("enableJavascript", "Browser", false);
+		} else {
+			inSender.setIcon("urlc-jsToggleOn");
+			this.doToggleJS("enableJavascript", "Browser", true);
+		}
+		this.$.search.$.address.go();
+	},
+	urlc_toggleJS_setButton: function (value) {
+		// purely cosmetic...
+		var onoff = value ? "On" : "Off";
+		this.$.urlc_toggleJS.setIcon("urlc-jsToggle"+onoff);
+	},
+	urlc_showButtonsByTweak: function() {
+		var urlc_tweakSettings = enyo.$.browserApp.getSmartCleanUrlSettings();
+		this.$.urlc_cleanUrl.setShowing(urlc_tweakSettings.showSmartCleanButton);
+		this.$.urlc_toggleJS.setShowing(urlc_tweakSettings.showQuickJSToggle);
+
+		if (urlc_tweakSettings.returnValue === undefined) {
+			setTimeout(function() {
+				this.urlc_showButtonsByTweak();
+			}.bind(this), 20);
+		}
 	},
 	showSharePopup: function(inSender, inEvent) {
 		this.$.sharePopup.openAt({top: -1000});
--- /usr/palm/applications/com.palm.app.browser/source/AddressInput.js.urlc.orig
+++ /usr/palm/applications/com.palm.app.browser/source/AddressInput.js
@@ -48,6 +48,21 @@
 	},
 	inputKeydown: function(inSender, inEvent) {
 		if (inEvent.keyCode == 13) {
+			var urlc_tweakSettings = enyo.$.browserApp.getSmartCleanUrlSettings();
+			var userInput = this.getUserInput();
+			if (urlc_tweakSettings.autoClean) {
+				// using a regex-check to see wether the input is likely a URL (otherwise I won't
+				// clean it as it is possibly a google search or something). The URL check is done
+				// as followed: http://blog.mattheworiordan.com/post/13174566389/url-regular-expression-for-links-with-or-without
+				// (although I made it case insensitive)
+
+				var regex = /((([a-z]{3,9}:(?:\/\/)?)(?:[\-;:&=\+\$,\w]+@)?[a-z0-9\.\-]+|(?:www\.|[\-;:&=\+\$,\w]+@)[a-z0-9\.\-]+)((?:\/[\+~%\/\.\w\-]*)?\??(?:[\-\+=&;%@\.\w]*)#?(?:[\.\!\/\\\w]*))?)/i;
+				if (regex.test(userInput)) {
+					this.owner.owner.urlc_cleanUrl();	// will also call this.go, so we don't have
+														// to run the below command.
+					return;
+				}
+			}
 			this.go();
 		}
 	},
--- /usr/palm/applications/com.palm.app.browser/source/Browser.js.urlc.orig
+++ /usr/palm/applications/com.palm.app.browser/source/Browser.js
@@ -11,6 +11,7 @@
 		onPageTitleChanged: "",
 		onPageLoadStopped: "",
 		onFileLoad: "",
+		onToggleJS: "",
 		onAddBookmark: "",
 		onAddToLauncher: "",
 		onShareLink: "",
@@ -30,6 +31,7 @@
 			onLoad: "goClick",
 			onStopLoad: "stopClick",
 			onRefresh: "reloadClick",
+			onToggleJS: "urlc_toggleJS",
 			onAddBookmark: "doAddBookmark",
 			onAddToLauncher: "doAddToLauncher",
 			onShareLink: "doShareLink",
@@ -414,6 +416,9 @@
 		this.$.view.callBrowserAdapter("stopLoad");
 		this.$.actionbar.setProgress(0);
 	},
+	urlc_toggleJS: function(inSender, inPreference, inType, inValue) {
+		this.doToggleJS(inPreference, inType, inValue);
+	},
 	loadStarted: function() {
 	   this._lastProgress = 0;
 	   if (this._timeoutHandle != null) {
--- /usr/palm/applications/com.palm.app.browser/source/BrowserApp.js.urlc.orig
+++ /usr/palm/applications/com.palm.app.browser/source/BrowserApp.js
@@ -7,6 +7,61 @@
 		systemPreferences: {},
 		browserPreferences: {},
 		searchPreferences: [],
+		smartCleanUrlSettings: {
+			returnValue: undefined,
+			showQuickJSToggle: false,
+			showSmartCleanButton: true,
+			showSmartCleanSettings: true,
+			autoClean: false
+		},
+		defaultCleanUrl: [
+			{
+				description: "Use Google WebLight to show page",
+				prepend: "https://googleweblight.com/?lite_url=",
+				custom: false,
+				enabled: true,
+				default: true
+			},
+			{
+				description: "Play YouTube using Flash",
+				marker:  "https://www.youtube.com/",
+				search:  "(watch\\?v=)",
+				replace: "v/",
+				searchRegEx: true,
+				markerRegEx: false,
+				custom: false,
+				enabled: true
+			},
+			{
+				description: "YouTube from Flash back to Default",
+				marker:  "https://www.youtube.com/",
+				search:  "/v/",
+				replace: "/watch?v=",
+				searchRegEx: false,
+				markerRegEx: false,
+				custom: false,
+				enabled: true
+			},
+			{
+				description: "Clean up Google Redirect URL",
+				marker:  "www.google.",
+				search:  "(.*)(q=)(.*)(&sa=)(.*)",
+				replace: "$3",
+				searchRegEx: true,
+				markerRegEx: false,
+				custom: false,
+				enabled: true
+			},
+			{
+				description: "Remove Google WebLight",
+				marker:  "googleweblight.com/",
+				search:  "(https?:\\/\\/googleweblight\\.com\\/\\?lite_url=)(.*?)((&ts=)|$)(.*)",
+				replace: "$2",
+				searchRegEx: true,
+				custom: false,
+				enabled: true,
+			},
+		],
 		defaultSearch: ""
 	},
 	components: [
@@ -30,6 +85,7 @@
 			{name: "startPage", kind: "StartPage", 
 				onUrlChange: "processUrlChange",
 				onOpenBookmarks: "bookmarksClick",
+				onToggleJS: "preferenceChanged",
 				onNewCard: "newCardClick",
 				onShow: "startPageShown"
 			},
@@ -43,6 +99,7 @@
 				onOpenBookmarks: "bookmarksClick",
 				onPrint: "printClick",
 				onUrlRedirected: "openResource",
+				onToggleJS: "preferenceChanged",
 				onClose: "browserClosed",
 				onShow: "browserShown",
 				onHide: "browserHidden"
@@ -96,6 +153,7 @@
 			acceptCaption: $L("Clear List"),
 			onAccept: "clearDownloads"
 		},
+		{name: "getURLCleanerTweaks", kind: "PalmService", service:"palm://org.webosinternals.tweaks.prefs/", method:"get", onSuccess:"URLCTweaksFound", onFailure: "URLCTweaksFailed"},
 		{kind: "PrintDialog", lazy: false, duplexOption: true, colorOption: true, onRenderDocument: "renderDocument", appName: "Browser"},
 		{kind: "AppMenu", onBeforeOpen: "toggleAppMenuItems", components: [
 			//{caption: $L("Find on Page"), onclick: "showFindOnPage"},
@@ -113,6 +171,8 @@
 	create: function() {
 		this.inherited(arguments);
 		this.fetchInitialPreferences();
+		// make the call to the Tweaks service
+		this.$.getURLCleanerTweaks.call({owner: "ca.canucksoftware.patches.browser-smart-url-cleaner", keys: ["showQuickJSToggle","showSmartCleanButton","showSmartCleanSettings","autoClean"]});
 		this.log(enyo.json.stringify(enyo.windowParams));
 	},
 	applicationRelaunchHandler: function(inSender) {
@@ -132,6 +192,57 @@
 			return true;
 		}
 	},
+	URLCTweaksFound: function (inSender, inResponse) {
+		if (inResponse) {
+		var urlcTweaks = this.getSmartCleanUrlSettings();
+			urlcTweaks.showQuickJSToggle = inResponse.showQuickJSToggle !== undefined ? inResponse.showQuickJSToggle : urlcTweaks.showQuickJSToggle;
+			urlcTweaks.showSmartCleanButton = inResponse.showSmartCleanButton !== undefined ? inResponse.showSmartCleanButton : urlcTweaks.showSmartCleanButton;
+			urlcTweaks.showSmartCleanSettings = inResponse.showSmartCleanSettings !== undefined ? inResponse.showSmartCleanSettings : urlcTweaks.showSmartCleanSettings;
+			urlcTweaks.autoClean = inResponse.autoClean !== undefined ? inResponse.autoClean : urlcTweaks.autoClean;
+			urlcTweaks.returnValue = true;
+		} else {
+			urlcTweaks.returnValue = false;
+		}
+	},
+	URLCTweaksFailed: function (inSender, inResponse) {
+		var urlcTweaks = this.getSmartCleanUrlSettings();
+			urlcTweaks.returnValue = false;
+	},
+	urlc_getCleanList: function() {
+		var cleanList = JSON.parse(enyo.getCookie("browser_cleanUrlList") || JSON.stringify(this.getDefaultCleanUrl()));	// quick and dirty copy of our JSON data
+		var nonCustomCleanList = JSON.parse(JSON.stringify(this.getDefaultCleanUrl()));
+		var foundNCclist = {};
+
+		// We need to make sure that the standard filters are up to date (so that when we update them
+		// in the patch, the cookie doesn't overwrite them). New standard filters should be added, and
+		// filters that are not standard anymore should stay in the list but be set to custom.
+
+		// I will use the description as defining identifiers.
+
+		cleanList.forEach(function(item, idx, arr) {
+			// we need to update existing items, and set them to 'custom' when they're not in the list anymore
+			if (item.custom === true) {return}
+			item.custom = !nonCustomCleanList.some(function(ncItem, ncIdx, ncArr) {
+				if (ncItem.description === item.description) {
+					foundNCclist[ncItem.description] = true;
+					arr[idx] = ncItem;	// remember binding (which is why I don't do item = ncItem here);
+					arr[idx].enabled = item.enabled; // we want to make sure that 'enabled' works as expected.
+													 // even after an update.
+					return true;
+				}
+				return false;
+			});
+			if (arr[idx].custom && arr[idx].default) {
+				arr[idx].default = false;
+			}
+		});
+		nonCustomCleanList.forEach(function(ncItem, ncIdx, ncArr) {
+			// we also need to add them to the list if they're not in there.
+			if (foundNCclist[ncItem.description]) {return};
+			cleanList = cleanList.concat([ncItem]);
+		});
+		return cleanList;
+	},
 	rendered: function() {
 		this.inherited(arguments);
 		this.log();
@@ -246,6 +357,14 @@
 			blockPopups: "setBlockPopups",
 			acceptCookies: "setAcceptCookies",
 		}
+		if (inPreference === "enableJavascript") {
+			this.$.pane.children.forEach(function(child, idx, arr) {
+				if (child.name === "browser" || child.name === "startPage") {
+					child.$.actionbar.urlc_toggleJS_setButton(inValue);
+					return true;
+				}
+			});
+		}
 		this.$.pane.viewByName("browser");
 		var o = inPreference == "clearHistory" || inPreference == "clearBookmarks" ? this : this.$.browser;
 		this.log(preferenceMap[inPreference] || inPreference);
@@ -289,6 +408,14 @@
 	gotBrowserPreferences: function(inSender, inResponse) {
 		for (var i=0,p;p=inResponse.results[i];i++) {
 			this.browserPreferences[p.key] = p.value;
+			if (p.key === "enableJavascript") {
+				this.$.pane.children.some(function(child, idx, arr) {
+					if (child.name === "browser" || child.name === "startPage") {
+						child.$.actionbar.urlc_toggleJS_setButton(p.value);
+						return true;
+					}
+				});
+			}
 		}
 		this.browserPreferencesChanged();
 	},
--- .urlc.orig/usr/palm/applications/com.palm.app.browser/source/Preferences.js.urlc.orig
+++ /usr/palm/applications/com.palm.app.browser/source/Preferences.js
@@ -3,6 +3,8 @@
 	kind: enyo.VFlexBox,
 	className: "basic-back",
 	published: {
+		cleanUrlList: [],
+		defaultUrlCleaner: {},
 		browserPreferences: {},
 		systemPreferences: {},
 		searchPreferences: [],
@@ -36,6 +38,16 @@
 						{kind: "ToggleButton", name: "flashplugins", onChange: "togglePreferenceClick", preference: "flashplugins", type: "System"}
 					]},
 				]},
+				{kind: "RowGroup", name: "urlc_settings", caption: $L("URL Cleaner"), style: "margin-bottom: 10px", components: [
+					{kind: "Control", name: "placeHolderForLayout"},
+					{kind: "VirtualRepeater", name: "urlc_repeater", onSetupRow: "showCleanerList", components: [
+						{kind: "urlc_itemTemplate", onMovePosition: "urlc_reposition", onConfirm: "urlc_removeFilter", onChange: "urlc_updateFilter"}
+					]},
+					{kind: "Item", layoutKind: "HFlexLayout", components: [
+						{kind: "Spacer"},
+						{kind: "Button", caption: "Add Cleaner Filter", onclick: "urlc_addFilter"}
+					]}
+				]},
 				{kind: "Button", caption: $L("Clear Bookmarks"), onclick: "promptButtonClick", dialog: "clearBookmarksPrompt"},
 				{kind: "Button", caption: $L("Clear History"), onclick: "promptButtonClick", dialog: "clearHistoryPrompt"},
 				{kind: "Button", caption: $L("Clear Cookies"), onclick: "promptButtonClick", dialog: "clearCookiesPrompt"},
@@ -51,7 +63,7 @@
 			]},
 		]},
 		{kind: "Toolbar", pack: "center", className: "enyo-toolbar-light", components: [
-	 	   	{kind: "Button", caption: $L("Done"), onclick: "doClose", className: "enyo-preference-button enyo-button-dark"}
+	 	   	{kind: "Button", caption: $L("Done"), onclick: "doDoClose", className: "enyo-preference-button enyo-button-dark"}
 		]},
 		{name: "clearBookmarksPrompt", kind: "BrowserPreferencePrompt",
 			caption: $L("Would you like to clear your bookmarks?"),
@@ -84,6 +96,45 @@
 	],
 	create: function() {
 		this.inherited(arguments);
+
+		this.urlc_showSettingsByTweak();
+		var cleanList = enyo.$.browserApp.urlc_getCleanList();
+			cleanList.some(function(item, idx, arr) {
+				if (item.default) {
+					this.setDefaultUrlCleaner(item);
+					arr = arr.splice(idx, 1);
+					return true;
+				}
+				return false;
+			}.bind(this));
+			this.setCleanUrlList(cleanList);
+	},
+	rendered: function() {
+		this.inherited(arguments);
+		// bit of a dirty layout fix
+		this.$.urlc_repeater.parent.applyStyle("padding","0");
+	},
+	doDoClose: function () {
+		// let's remove empty filters. They would just clutter up our list.
+		var cleanList = this.getCleanUrlList();
+		var i;
+		for (i = cleanList.length-1; i>=0; i--) {
+			if (!cleanList[i].marker &&
+				!cleanList[i].search &&
+				!cleanList[i].replace &&
+				!cleanList[i].prepend &&
+				!cleanList[i].append) {
+				// this one is considered empty, so we can remove it automatically
+				cleanList.splice(i, 1);
+			}
+		}
+		this.setCleanUrlList(cleanList);
+		this.urlc_safeList();
+		this.$.urlc_repeater.render();  // Not the most logical place to rerender. But
+										// I added it here to make sure that reopening
+										// the preferences behaves as expected.
+
+		this.doClose();
 	},
 	browserPreferencesChanged: function() {
 		this.log();
@@ -133,5 +184,392 @@
 	},
 	fireChange: function(inPreference, inType, inValue) {
 		this.doPreferenceChanged(inPreference, inType, inValue);
+	},
+	showCleanerList: function(inSender, inEvent) {
+		var cleanList = this.getCleanUrlList();
+		var defaultCleaner = this.getDefaultUrlCleaner();
+		var item = cleanList[inEvent] || defaultCleaner;
+
+		if (inEvent === cleanList.length + 1) {
+			return false;	// our list is finished.
+		}
+
+		this.$.urlc_itemTemplate.setMaxRows(cleanList.length-1);	// intentionally set before the index.
+		this.$.urlc_itemTemplate.setIndex(inEvent);
+
+		this.$.urlc_itemTemplate.setCustom(item.custom)
+
+		this.$.urlc_itemTemplate.setDescription(item.description);
+		this.$.urlc_itemTemplate.setEnabled(item.enabled);
+		this.$.urlc_itemTemplate.setMarker(item.marker);
+		this.$.urlc_itemTemplate.setMarkerRegEx(item.markerRegEx);
+		this.$.urlc_itemTemplate.setMarkerREFlag(item.markerREFlag);
+		this.$.urlc_itemTemplate.setSearch(item.search);
+		this.$.urlc_itemTemplate.setSearchRegEx(item.searchRegEx);
+		this.$.urlc_itemTemplate.setSearchREFlag(item.searchREFlag);
+		this.$.urlc_itemTemplate.setReplace(item.replace);
+		this.$.urlc_itemTemplate.setPrepend(item.prepend);
+		this.$.urlc_itemTemplate.setAppend(item.append);
+
+		return true;
+	},
+	findRowIndex: function (element) {
+		var rowIndex = element.hasNode().getAttribute('rowindex');
+		if (rowIndex !== null) {
+			return parseFloat(rowIndex, 10);
+		}
+		var parent = element.parent;
+		if (parent) {
+			return this.findRowIndex(parent);
+		};
+		return -1;
+	},
+	urlc_reposition: function (inSender, inEvent) {
+		var idx = inSender.getIndex();
+		var newIdx = inEvent === "up" ? idx-1 : idx+1;
+
+		var cleanList = this.getCleanUrlList();
+			cleanList.splice(newIdx, 0, cleanList.splice(idx,1)[0]);
+			// see also: https://stackoverflow.com/questions/2440700/reordering-arrays
+
+		// store our new list order
+		this.urlc_safeList();
+
+		// get edit state (open or closed);
+		this.$.urlc_repeater.prepareRow(idx)
+		this.$.urlc_itemTemplate.$.drawer.setAnimate(false);
+		var currentOpen = this.$.urlc_itemTemplate.$.drawer.getOpen();
+		this.$.urlc_repeater.prepareRow(newIdx)
+		this.$.urlc_itemTemplate.$.drawer.setAnimate(false);
+		var otherOpen   = this.$.urlc_itemTemplate.$.drawer.getOpen();
+
+		// let's rerender.
+		this.$.urlc_repeater.renderRow(idx);
+		this.$.urlc_itemTemplate.hideUrlFilter();
+		this.$.urlc_itemTemplate.$.drawer.setOpen(otherOpen);
+		this.$.urlc_itemTemplate.$.drawer.setAnimate(true);
+		
+		this.$.urlc_repeater.renderRow(newIdx);
+		this.$.urlc_itemTemplate.highlight();
+		this.$.urlc_itemTemplate.hideUrlFilter();
+		this.$.urlc_itemTemplate.$.drawer.setOpen(currentOpen);
+		this.$.urlc_itemTemplate.$.drawer.setAnimate(true);
+	},
+	urlc_addFilter: function () {
+		var emptyFilter = {
+			description: "Description of this filter",
+			custom: true,
+		}
+		var cleanList = this.getCleanUrlList();
+		this.setCleanUrlList(cleanList.concat([emptyFilter]));
+
+		this.$.urlc_repeater.render();
+		this.$.urlc_repeater.prepareRow(cleanList.length);	// since we added an item to ths.cleanUrlList, we
+															// can use cleanList.length here (which doesn't
+															// have the added item)
+		this.$.urlc_itemTemplate.$.drawer.setOpen(true);
+
+		this.urlc_safeList();
+	},
+	urlc_safeList: function() {
+		var cleanList	= this.getCleanUrlList();
+		var defaultClean = this.getDefaultUrlCleaner();
+		var fullCleanList = [defaultClean].concat(cleanList);
+		enyo.setCookie("browser_cleanUrlList", JSON.stringify(fullCleanList));
+	},
+	urlc_removeFilter: function (inSender, inEvent) {
+		var cleanList = this.getCleanUrlList();
+			cleanList.splice(inEvent, 1);
+		this.setCleanUrlList(cleanList);
+		this.urlc_safeList();
+		this.$.urlc_repeater.render();
+	},
+	urlc_updateFilter: function (inSender, inEvent) {
+		var idx = inSender.getIndex();
+		var key = inEvent.key
+
+		var cleanList = this.getCleanUrlList();
+		var defaultCleaner = this.getDefaultUrlCleaner();
+		var item = cleanList[idx] || defaultCleaner;
+
+		switch (key) {
+			case "marker": // intentional bleed through
+			case "search":
+			case "replace":
+				item[key] = inEvent.settings.pattern;
+				item[key+"RegEx"] = inEvent.settings.isRegEx;
+				item[key+"REFlag"] = inEvent.settings.regexFlag;
+			break;
+			case "append": 	// intentional bleed through
+			case "prepend":
+				item[key] = inEvent.settings.pattern;
+			break;
+			default:
+				item[key] = inEvent.settings;
+			break;
+		}
+		this.urlc_safeList();
+	},
+	urlc_showSettingsByTweak: function() {
+		var urlc_tweakSettings = enyo.$.browserApp.getSmartCleanUrlSettings();
+		this.$.urlc_settings.setShowing(urlc_tweakSettings.showSmartCleanSettings);
+
+		if (urlc_tweakSettings.returnValue === undefined) {
+			setTimeout(function() {
+				this.urlc_showSettingsByTweak();
+			}.bind(this), 20);
+		}
+	}
+});
+
+enyo.kind({
+	name: "urlc_settingsInput",
+	kind: "Control",
+	layoutKind: "HFlexLayout",
+	published: {
+		isRegEx: false,
+		canBeRegEx: true,
+		label: "",
+		pattern: "",
+		regexFlag: ""
+	},
+	events: {
+		onChange: ""
+	},
+	components: [
+		{layoutKind: "VFlexLayout", pack: "center", components: [
+			{kind: "Control", name: "label", content: "test", width: "108px", className: "urlc-label"},
+		]},
+		{kind: "RoundedInputBox", flex: 1, align: "end", align: "end",components: [
+			{kind: "BasicRichText", name: "pattern", hint: "", width: "100%", onchange: "settingsChanged", onfocus: "trimContent", className: "urlc-pattern-input"},
+			{kind: "BasicInput", name: "flag", hint: "", width: "36px", className: "enyo-input-inner enyo-richtext urlc-regexFlag urlc-pattern-input", onchange: "settingsChanged", onfocus: "trimContent"}
+		]},
+		{kind: "ToggleButton", name: "regExToggle", offLabel: "str", onLabel: "reg", onChange: "settingsChanged", source: "match", className: "urlc-toggleButton"}
+	],
+	create:function() {
+		this.inherited(arguments);
+
+		this.canBeRegExChanged();
+		this.isRegExChanged();
+
+		this.labelChanged();
+		this.patternChanged();
+		this.regexFlagChanged();
+
+		// Hack to make sure that we have a number of spellcheck settings.
+		// By default this is only possible for enyo.input and its children.
+		// But we need it for our BasicRichtText and BasicInput.
+		var elements = [this.$.pattern, this.$.flag];
+			elements.forEach(function(element, idx, arr) {
+				element.setAttribute("x-palm-text-entry", null);
+				element.setAttribute("x-palm-disable-auto-cap", true);
+				element.setAttribute("x-palm-title-cap", null);
+				element.setAttribute("autocorrect", "off");
+				element.setAttribute("spellcheck", false);
+				element.setAttribute("x-palm-enable-linker", null);
+				element.setAttribute("x-palm-enable-emoticons", null);
+				element.setAttribute("x-palm-word-completions", "disabled");
+			});
+	},
+	canBeRegExChanged: function() {
+		this.$.regExToggle.setShowing(this.getCanBeRegEx());
+		this.setIsRegEx(this.getCanBeRegEx());
+	},
+	isRegExChanged: function() {
+		this.$.regExToggle.setState(this.getIsRegEx());
+		if (this.getIsRegEx()) {
+			this.$.pattern.addClass("urlc-input-regex");
+		} else {
+			this.$.pattern.removeClass("urlc-input-regex");
+		}
+		this.$.flag.setShowing(this.getIsRegEx());
+	},
+	styleAsRegEx: function(bool) {
+		if (bool) {
+			this.$.pattern.addClass("urlc-input-regex");
+			this.$.pattern.addClass("urlc-input-noDecoration");
+		} else {
+			this.$.pattern.removeClass("urlc-input-regex");
+			this.$.pattern.removeClass("urlc-input-noDecoration");
+		}
+	},
+	labelChanged: function() {
+		this.$.label.setContent(this.getLabel());
+	},
+	patternChanged: function() {
+		this.$.pattern.setValue(this.getPattern() || "");
+	},
+	regexFlagChanged: function() {
+		this.$.flag.setValue(this.getRegexFlag() || "");
+	},
+	settingsChanged: function() {
+		this.setIsRegEx  (this.getCanBeRegEx() ? this.$.regExToggle.getState() : false);
+		this.setPattern  (this.$.pattern.getValue().trim());
+		this.setRegexFlag(this.$.flag.getValue().trim());
+		var output = {
+			isRegEx: this.getIsRegEx()	 || false,
+			pattern: this.getPattern()	 || "",
+			regexFlag: this.getRegexFlag() || ""
+		};
+		this.doChange(output);
+	},
+	trimContent: function (inSender, inEvent) {
+		if (inSender.setValue) {
+			inSender.setValue(inSender.getValue().trim() || "");
+		} else {
+			inSender.setContent(inSender.getContent().trim() || "");
+		}
+	}
+});
+
+enyo.kind({
+	name: "urlc_itemTemplate",
+	kind: "SwipeableItem",
+	layoutKind: "VFlexLayout",
+	published: {
+		description: "",
+		custom: false,
+		enabled: true,
+		marker: "",
+		markerRegEx: false,
+		markerREFlag: "",
+		search: "",
+		searchRegEx: true,
+		searchREFlag: "",
+		replace: "",
+		replaceRegEx: true,
+		replaceREFlag: "",
+		prepend: "",
+		append: "",
+		index: 0,
+		maxRows: 0,
+		default: false
+	},
+	events: {
+		onChange: "",
+		onMovePosition: ""
+	},
+	className: "urlc-item",
+	components: [
+		{layoutKind: "HFlexLayout", align: "center", pack: "center", components: [
+			{kind: "IconButton", name: "up", icon: "urlc-menu-icon-up", iconIsClassName: true, className: "urlc-cleanButton", onclick: "changePosition", direction: "up"},
+			{kind: "IconButton", icon: "urlc-menu-icon-cleanUrl", iconIsClassName: true, className: "urlc-cleanButton", onclick: "editUrlFilter"},
+
+			{kind: "InputBox", flex: 1, name: "descriptionInput", onblur: "changeDescription", components: [
+				{kind: "BasicRichText", name: "description", flex: 1, className: "enyo-input-inner urlc-description", onfocus: "selectContent"},
+			]},
+			{kind: "ToggleButton", name: "active", className: "urlc_toggleButton", onChange: "toggleEnabled"},
+			{kind: "IconButton", name: "down", icon: "urlc-menu-icon-down", iconIsClassName: true, className: "urlc-cleanButton", onclick: "changePosition", direction: "down"},
+		]},
+		{kind: "Drawer", name: "drawer", className: "urlc-drawer", open: false, components: [
+			{kind: "urlc_settingsInput", name: "marker",  label: "Marker (Address)", onChange: "changeSettings"},
+			{kind: "urlc_settingsInput", name: "search",  label: "Match pattern", onChange: "changeSettings"},
+			{kind: "urlc_settingsInput", name: "replace", label: "Replace pattern", canBeRegEx: false, onChange: "changeSettings"},
+			{kind: "urlc_settingsInput", name: "prepend", label: "Prepend", canBeRegEx: false, onChange: "changeSettings"},
+			{kind: "urlc_settingsInput", name: "append",  label: "Append", canBeRegEx: false, onChange: "changeSettings"},
+		]},
+	],
+	create:function() {
+		this.inherited(arguments);
+
+		this.customChanged();
+		this.enabledChanged();
+
+		this.descriptionChanged();
+
+		this.markerChanged(); this.markerRegExChanged(); this.markerREFlagChanged()
+		this.searchChanged(); this.searchRegExChanged(); this.searchREFlagChanged();
+		this.replaceChanged();
+
+		this.prependChanged();
+		this.appendChanged();
+	},
+	descriptionChanged: function () {
+		this.$.description.setContent(this.getDescription());
+	},
+	customChanged: function() {
+		if (!this.getCustom()) {
+			// we don't want our preset items to be editable. Users can turn
+			// them off, but they can't modify their content.
+			this.$.descriptionInput.addClass("urlc-noEdit");
+			this.$.drawer.addClass("urlc-noEdit");
+		} else {
+			this.$.descriptionInput.removeClass("urlc-noEdit");
+			this.$.drawer.removeClass("urlc-noEdit");
+		}
+		this.setSwipeable(!!this.getCustom());
+	},
+	enabledChanged: function() {
+		this.$.active.setState(!!this.getEnabled())
+	},
+	markerChanged: function() {
+		this.$.marker.setPattern(this.getMarker());
+	},
+	markerRegExChanged: function () {
+		this.$.marker.setIsRegEx(this.getMarkerRegEx());
+	},
+	markerREFlagChanged: function () {
+		this.$.marker.setRegexFlag(this.getMarkerREFlag());
+	},
+	searchChanged: function() {
+		this.$.search.setPattern(this.getSearch());
+	},
+	searchRegExChanged: function () {
+		this.$.search.setIsRegEx(this.getSearchRegEx());
+		this.$.replace.styleAsRegEx(this.$.search.getIsRegEx());
+	},
+	searchREFlagChanged: function () {
+		this.$.search.setRegexFlag(this.getSearchREFlag());
+	},
+	replaceChanged: function() {
+		this.$.replace.setPattern(this.getReplace());
+	},
+	prependChanged: function () {
+		this.$.prepend.setPattern(this.getPrepend());
+	},
+	appendChanged: function () {
+		this.$.append.setPattern(this.getAppend());
+	},
+	editUrlFilter: function (inSender, inEvent) {
+		this.$.drawer.toggleOpen();
+	},
+	showUrlFilter: function () {
+		this.$.drawer.setOpen(true);
+	},
+	hideUrlFilter: function() {
+		this.$.drawer.setOpen(false);
+	},
+	changePosition: function (inSender, inEvent) {
+		this.doMovePosition(inSender.direction);
+	},
+	indexChanged: function () {
+		this.$.up.removeClass  ("urlc-hideUpDown");
+		this.$.down.removeClass("urlc-hideUpDown");
+
+		if (this.getIndex() === 0 || this.getIndex() > this.getMaxRows()) {
+			this.$.up.addClass("urlc-hideUpDown");
+		}
+		if (this.getIndex() === this.getMaxRows() || this.getIndex() > this.getMaxRows()) {
+			this.$.down.addClass("urlc-hideUpDown");
+		}
+	},
+	highlight: function () {
+		this.addClass('urlc-highlight');
+		setTimeout(function() {
+			this.removeClass('urlc-highlight');
+		}.bind(this), 150);
+	},
+	changeSettings: function (inSender, inEvent) {
+		this.$.replace.styleAsRegEx(this.$.search.getIsRegEx());
+		this.doChange({key: inSender.name, settings: inEvent});
+	},
+	toggleEnabled: function (inSender, inEvent) {
+		this.doChange({key: "enabled", settings: inEvent});
+	},
+	changeDescription: function (inSender, inEvent) {
+		this.doChange({key: "description", settings: this.$.description.getValue()});
+	},
+	selectContent: function (inSender, inEvent) {
+		inSender.forceSelect();
 	}
 });
--- /usr/palm/applications/com.palm.app.browser/source/StartPage.js.urlc.orig
+++ /usr/palm/applications/com.palm.app.browser/source/StartPage.js
@@ -10,10 +10,11 @@
 	events: {
 		onUrlChange: "",
 		onOpenBookmarks: "",
+		onToggleJS: "",
 		onNewCard: ""
 	},
 	components: [
-		{name: "actionbar", kind: "ActionBar", canShare: false, onLoad: "addressSelect", onOpenBookmarks: "doOpenBookmarks", onNewCard: "doNewCard"},
+		{name: "actionbar", kind: "ActionBar", canShare: false, onLoad: "addressSelect", onOpenBookmarks: "doOpenBookmarks", onNewCard: "doNewCard", onToggleJS: "urlc_toggleJS"},
 		{name: "tall", className: "startpage-placeholder-tall", components: [
 			{name: "placeholder", className: "startpage-placeholder"}
 		]}
@@ -39,6 +40,9 @@
 	urlChanged: function() {
 		this.$.actionbar.setUrl(this.url);
 	},
+	urlc_toggleJS: function(inSender, inPreference, inType, inValue) {
+		this.doToggleJS(inPreference, inType, inValue);
+	},
 	searchPreferencesChanged: function() {
 		this.$.actionbar.setSearchPreferences(this.searchPreferences);
 	},
--- /usr/palm/applications/com.palm.app.browser/css/browser.css.urlc.orig
+++ /usr/palm/applications/com.palm.app.browser/css/browser.css
@@ -337,6 +337,94 @@
 	margin: 6px 3px;
 }
 
+/* URL cleaner */
+.urlc-noEdit {
+	-webkit-pointer-events: none;
+	pointer-events: none;
+}
+.urlc-noEdit .enyo-input, .urlc-noEdit .enyo-input-inner {
+	-webkit-border-image: none !important;
+	background-color: transparent;
+}
+.urlc-noEdit .enyo-toggle-button {
+	opacity: 0.5;
+}
+.urlc-drawer {
+	padding: 0 8px;
+}
+.urlc-label {
+	font-size: 12px;
+}
+.urlc-description{
+	color: #888;
+}
+.urlc-toggleButton {
+	padding: 0;
+	padding-left: 8px;
+}
+.urlc-regexFlag {
+	margin: 0;
+	height: 20px;
+	font-size: 16px;
+	color: #888;
+}
+.urlc-pattern-input {
+	margin-bottom: 3px;
+}
+.urlc-input-regex {
+	padding: 0 7px;
+	position: relative;
+	color: #2071bb;
+}
+.urlc-input-regex:before, .urlc-input-regex:after {
+	content: "/";
+	position: absolute;
+	color: rgba(0,0,0,0.25);
+}
+.urlc-input-noDecoration {
+	padding: 0;
+}
+.urlc-input-noDecoration:before, .urlc-input-noDecoration:after {
+	content: "" !important;
+}
+.urlc-input-regex:before {
+	left: 0;
+	top: 0;
+}
+.urlc-input-regex:after {
+	right: 0;
+	bottom: 0;
+}
+.urlc-cleanButton {
+	-webkit-border-image: none !important;
+	background-color: transparent;
+}
+.urlc-hideUpDown {
+	visibility: hidden;
+}
+.urlc-item {
+	-webkit-transition: background-color 0.05s linear;
+	background-color: rgba(32,113,187,0);
+}
+.urlc-highlight {
+	background-color: rgba(32,113,187,0.35);
+}
+.urlc-menu-icon-up {
+	background-image: url(data:image/png;base64,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);
+}
+.urlc-menu-icon-down {
+	background-image: url(data:image/png;base64,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);
+}
+.urlc-menu-icon-cleanUrl {
+	background-image: url(data:image/png;base64,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);
+}
+.urlc-jsToggleOn {
+	background-image: url(data:image/png;base64,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);
+}
+.urlc-jsToggleOff {
+	background-image: url(data:image/png;base64,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);
+}
+
 /* Misc */
 
 .launch-popup {
