Browse Source

UI improvements

Andrew Dolgov 13 years ago
parent
commit
42c3291622
8 changed files with 95 additions and 79 deletions
  1. 1 1
      backend.php
  2. 1 1
      feedlist.js
  3. 45 44
      functions.js
  4. BIN
      images/indicator_white.gif
  5. 21 22
      prefs.js
  6. 18 2
      tt-rss.css
  7. 8 8
      tt-rss.js
  8. 1 1
      viewfeed.js

+ 1 - 1
backend.php

@@ -54,7 +54,7 @@
 		header("Content-Type: application/xml");
 		print_error_xml(7); exit;
 	}
-
+	
 	if (!($_SESSION["uid"] && validate_session($link)) && $op != "globalUpdateFeeds" 
 			&& $op != "rss" && $op != "getUnread") {
 

+ 1 - 1
feedlist.js

@@ -135,7 +135,7 @@ function viewfeed(feed, subop, is_cat, subop_param, skip_history, offset) {
 		container.innerHTML = "<div class=\"loadingPrompt\"><img src=\"images/indicator_white.gif\">&nbsp;" +
 			"Loading, please wait...</div>"; */
 
-		notify("Loading, please wait...", true);
+		notify_progress("Loading, please wait...", true);
 
 //		xmlhttp.abort();
 

+ 45 - 44
functions.js

@@ -103,34 +103,18 @@ function delay(gap) {
 }
 
 var notify_hide_timerid = false;
-var notify_last_doc = false;
-
-var notify_effect = false; 
 
 function hide_notify() {
-	if (notify_last_doc) {
-		var n = notify_last_doc.getElementById("notify");		
+	var n = document.getElementById("notify");
+	if (n) {
 		n.style.display = "none";
-
-/*		if (browser_has_opacity()) {
-			if (notify_opacity >= 0) {
-				notify_opacity = notify_opacity - 0.1;
-				n.style.opacity = notify_opacity;
-				notify_hide_timerid = window.setTimeout("hide_notify()", 20);	
-			} else {
-				n.style.display = "none";
-				n.style.opacity = 1;
-			}
-		} else {
-			n.style.display = "none";
-		} */
 	}
 } 
 
-function notify_real(msg, doc, no_hide, is_err) {
+function notify_real(msg, no_hide, n_type) {
 
-	var n = doc.getElementById("notify");
-	var nb = doc.getElementById("notify_body");
+	var n = document.getElementById("notify");
+	var nb = document.getElementById("notify_body");
 
 	if (!n || !nb) return;
 
@@ -138,9 +122,6 @@ function notify_real(msg, doc, no_hide, is_err) {
 		window.clearTimeout(notify_hide_timerid);
 	}
 
-	notify_last_doc = doc;
-	notify_opacity = 1;
-
 	if (msg == "") {
 		if (n.style.display == "block") {
 			notify_hide_timerid = window.setTimeout("hide_notify()", 0);
@@ -150,17 +131,25 @@ function notify_real(msg, doc, no_hide, is_err) {
 		n.style.display = "block";
 	}
 
-	if (is_err) {
+	/* types:
+
+		1 - generic
+		2 - progress
+		3 - error
+		4 - info
+
+	*/
+
+	if (n_type == 1) {
+		n.className = "notify";
+	} else if (n_type == 2) {
+		n.className = "notifyProgress";
+		msg = "<img src='images/indicator_white.gif'> " + msg;
+	} else if (n_type == 3) {
 		n.className = "notifyError";
-//		n.style.backgroundColor = "#ffcccc";
-//		n.style.color = "black";
-//		n.style.borderColor = "#ff0000";
 		msg = "<img src='images/sign_excl.png'> " + msg;
-	} else {
-		n.className = "notify";
-//		n.style.backgroundColor = "#fff7d5";
-//		n.style.borderColor = "#d7c47a";
-//		n.style.color = "black";
+	} else if (n_type == 4) {
+		n.className = "notifyInfo";
 		msg = "<img src='images/sign_info.png'> " + msg;
 	}
 
@@ -173,16 +162,26 @@ function notify_real(msg, doc, no_hide, is_err) {
 	}
 }
 
-function p_notify(msg, no_hide, is_err) {
-	notify_real(msg, document, no_hide, is_err);
+function notify(msg, no_hide) {
+	notify_real(msg, no_hide, 1);
 }
 
-function notify(msg, no_hide, is_err) {
-	notify_real(msg, document, no_hide, is_err);
+function notify_progress(msg, no_hide) {
+	notify_real(msg, no_hide, 2);
+}
+
+function notify_error(msg, no_hide) {
+	notify_real(msg, no_hide, 3);
+
+}
+
+function notify_info(msg, no_hide) {
+	notify_real(msg, no_hide, 4);
 }
 
 function printLockingError() {
-	notify("Please wait until operation finishes");}
+	notify_info("Please wait until operation finishes.");
+}
 
 function hotkey_handler(e) {
 
@@ -668,14 +667,14 @@ function parse_counters(reply, scheduled_call) {
 function parse_counters_reply(xmlhttp, scheduled_call) {
 
 	if (!xmlhttp.responseXML) {
-		notify("refetch_callback: backend did not return valid XML", true, true);
+		notify_error("Backend did not return valid XML", true);
 		return;
 	}
 
 	var reply = xmlhttp.responseXML.firstChild;
 	
 	if (!reply) {
-		notify("refetch_callback: backend did not return expected XML object", true, true);
+		notify_error("Backend did not return expected XML object", true);
 		updateTitle("");
 		return;
 	} 
@@ -1344,7 +1343,7 @@ function infobox_submit_callback() {
 			}
 		} catch (e) { }
 
-		notify(xmlhttp.responseText);
+//		notify_info(xmlhttp.responseText);
 
 	} 
 }
@@ -1416,7 +1415,7 @@ function qafAdd() {
 		return false;
 	}
 
-	notify("Adding feed...", true);
+	notify_progress("Adding feed...");
 
 	closeInfoBox();
 
@@ -1549,7 +1548,9 @@ function fatalError(code, message) {
 			var fe = document.getElementById("fatal_error");
 			var fc = document.getElementById("fatal_error_msg");
 	
-			fc.innerHTML = "Code " + code + ": " + message;
+			if (message == "") message = "Unknown error";
+
+			fc.innerHTML = "<img src='images/sign_excl.png'> " + message + " (Code " + code + ")";
 	
 			fe.style.display = "block";
 		}
@@ -1625,7 +1626,7 @@ function logoutUser() {
 	try {
 		if (xmlhttp_ready(xmlhttp_rpc)) {
 
-			notify("Logging out, please wait...");
+			notify_progress("Logging out, please wait...", true);
 
 			xmlhttp_rpc.open("GET", "backend.php?op=rpc&subop=logout", true);
 			xmlhttp_rpc.onreadystatechange=logout_callback;

BIN
images/indicator_white.gif


+ 21 - 22
prefs.js

@@ -126,10 +126,9 @@ function gethelp_callback() {
 
 
 function notify_callback() {
-	var container = document.getElementById('notify');
 	if (xmlhttp.readyState == 4) {
-		container.innerHTML=xmlhttp.responseText;
-	}
+		notify_info(xmlhttp.responseText);
+	} 
 }
 
 function updateFeedList(sort_key) {
@@ -216,7 +215,7 @@ function addFeed() {
 	} else if (!isValidURL(link.value)) {
 		alert("Error: Invalid feed URL.");
 	} else {
-		notify("Adding feed...");
+		notify_progress("Adding feed...");
 
 		xmlhttp.open("GET", "backend.php?op=pref-feeds&subop=add&from=tt-rss&feed_url=" +
 			param_escape(link.value), true);
@@ -241,7 +240,7 @@ function addFeedCat() {
 	if (cat.value.length == 0) {
 		alert("Can't add category: no name specified.");
 	} else {
-		notify("Adding feed category...");
+		notify_progress("Adding feed category...");
 
 		xmlhttp.open("GET", "backend.php?op=pref-feeds&subop=editCats&action=add&cat=" +
 			param_escape(cat.value), true);
@@ -265,7 +264,7 @@ function addUser() {
 	if (sqlexp.value.length == 0) {
 		alert("Can't add user: no login specified.");
 	} else {
-		notify("Adding user...");
+		notify_progress("Adding user...");
 
 		xmlhttp.open("GET", "backend.php?op=pref-users&subop=add&login=" +
 			param_escape(sqlexp.value), true);			
@@ -427,7 +426,7 @@ function removeSelectedLabels() {
 		var ok = confirm("Remove selected labels?");
 
 		if (ok) {
-			notify("Removing selected labels...");
+			notify_progress("Removing selected labels...");
 	
 			xmlhttp.open("GET", "backend.php?op=pref-labels&subop=remove&ids="+
 				param_escape(sel_rows.toString()), true);
@@ -455,7 +454,7 @@ function removeSelectedUsers() {
 		var ok = confirm("Remove selected users?");
 
 		if (ok) {
-			notify("Removing selected users...");
+			notify_progress("Removing selected users...");
 	
 			xmlhttp.open("GET", "backend.php?op=pref-users&subop=remove&ids="+
 				param_escape(sel_rows.toString()), true);
@@ -484,7 +483,7 @@ function removeSelectedFilters() {
 		var ok = confirm("Remove selected filters?");
 
 		if (ok) {
-			notify("Removing selected filters...");
+			notify_progress("Removing selected filters...");
 	
 			xmlhttp.open("GET", "backend.php?op=pref-filters&subop=remove&ids="+
 				param_escape(sel_rows.toString()), true);
@@ -514,7 +513,7 @@ function removeSelectedFeeds() {
 
 		if (ok) {
 
-			notify("Unsubscribing from selected feeds...");
+			notify_progress("Unsubscribing from selected feeds...");
 	
 			xmlhttp.open("GET", "backend.php?op=pref-feeds&subop=remove&ids="+
 				param_escape(sel_rows.toString()), true);
@@ -545,7 +544,7 @@ function removeSelectedFeedCats() {
 		var ok = confirm("Remove selected categories?");
 
 		if (ok) {
-			notify("Removing selected categories...");
+			notify_progress("Removing selected categories...");
 	
 			xmlhttp.open("GET", "backend.php?op=pref-feeds&subop=editCats&action=remove&ids="+
 				param_escape(sel_rows.toString()), true);
@@ -607,7 +606,7 @@ function feedEditSave() {
 
 		var query = Form.serialize("edit_feed_form");
 
-		notify("Saving feed...");
+		notify_progress("Saving feed...");
 
 		xmlhttp.open("POST", "backend.php", true);
 		xmlhttp.onreadystatechange=feedlist_callback;
@@ -630,7 +629,7 @@ function feedCatEditSave() {
 		return
 	}
 
-	notify("Saving category...");
+	notify_progress("Saving category...");
 
 	var query = Form.serialize("feed_cat_edit_form");
 
@@ -746,7 +745,7 @@ function labelEditSave() {
 
 	closeInfoBox();
 
-	notify("Saving label...");
+	notify_progress("Saving label...");
 
 	active_label = false;
 
@@ -773,7 +772,7 @@ function userEditSave() {
 		return;
 	}
 	
-	notify("Saving user...");
+	notify_progress("Saving user...");
 
 	closeInfoBox();
 
@@ -803,7 +802,7 @@ function filterEditSave() {
 		}
 	} */
 
-	notify("Saving filter...");
+	notify_progress("Saving filter...");
 
 	var query = Form.serialize("filter_edit_form");
 
@@ -871,7 +870,7 @@ function resetSelectedUserPass() {
 	var ok = confirm("Reset password of selected user?");
 
 	if (ok) {
-		notify("Resetting password for selected user...");
+		notify_progress("Resetting password for selected user...");
 	
 		var id = rows[0];
 	
@@ -926,7 +925,7 @@ function selectedFeedDetails() {
 	}
 
 	if (rows.length > 1) {
-		notify("Please select only one feed.");
+		alert("Please select only one feed.");
 		return;
 	}
 
@@ -965,12 +964,12 @@ function editSelectedFeed() {
 	var rows = getSelectedFeeds();
 
 	if (rows.length == 0) {
-		notify("No feeds are selected.");
+		alert("No feeds are selected.");
 		return;
 	}
 
 	if (rows.length > 1) {
-		notify("Please select one feed.");
+		alert("Please select one feed.");
 		return;
 	}
 
@@ -1143,7 +1142,7 @@ function selectTab(id, noupdate, subop) {
 
 			debug("selectTab: " + id + "(NU: " + noupdate + ")");
 	
-//			notify("Loading, please wait...", true);
+			notify_progress("Loading, please wait...", true);
 	
 			// close active infobox if needed
 			closeInfoBox();
@@ -1313,7 +1312,7 @@ function categorizeSelectedFeeds() {
 
 	if (sel_rows.length > 0) {
 
-		notify("Changing category of selected feeds...");
+		notify_progress("Changing category of selected feeds...");
 
 		xmlhttp.open("GET", "backend.php?op=pref-feeds&subop=categorize&ids="+
 			param_escape(sel_rows.toString()) + "&cat_id=" + param_escape(cat_id), true);

+ 18 - 2
tt-rss.css

@@ -238,6 +238,18 @@ input.editbox {
 	vertical-align : middle;
 }
 
+.notifyProgress {
+	border-color : #d7c47a;
+	background-color : #fff7d5;
+	color : black;
+}
+
+.notifyInfo {
+	border-color : #7AD78E;
+	background-color : #D5FFDB;
+	color : black;
+}
+
 .notify {
 	border-color : #d7c47a;
 	background-color : #fff7d5;
@@ -1065,11 +1077,11 @@ a.cdmToggleLink:hover {
 }
 
 #fatal_error_msg {
-	border : 1px solid #c0c0c0;
-	background-color : #f0f0f0;
 	color : black;
 	padding : 10px;
 	font-weight : normal;
+	background-color : #ffcccc;
+	border : 1px solid #ff0000;
 }
 
 #fatal_error_msg a {
@@ -1081,6 +1093,10 @@ a.cdmToggleLink:hover {
 	text-decoration : underline;
 }
 
+#fatal_error_msg img {
+	vertical-align : middle;
+}
+
 #noDaemonWarning {	
 	position : absolute;
 	background-color : #ecf4ff;		  

+ 8 - 8
tt-rss.js

@@ -37,7 +37,7 @@ function toggleTags() {
 		p.innerHTML = "display tags";
 	}
 	
-	notify("Loading, please wait...");
+	notify_progress("Loading, please wait...");
 
 	updateFeedList();
 }
@@ -71,7 +71,7 @@ function refetch_callback() {
 			debug("refetch_callback: done");
 
 			if (!daemon_enabled && !daemon_refresh_only) {
-				notify("All feeds updated.");
+				notify_info("All feeds updated.");
 				updateTitle("");
 			} else {
 				//notify("");
@@ -135,7 +135,7 @@ function backend_sanity_check_callback() {
 function scheduleFeedUpdate(force) {
 
 	if (!daemon_enabled && !daemon_refresh_only) {
-		notify("Updating feeds, please wait.", true);
+		notify_progress("Updating feeds, please wait.", true);
 		updateTitle("Updating");
 	}
 
@@ -231,7 +231,7 @@ function catchupAllFeeds() {
 
 	var query_str = "backend.php?op=feeds&subop=catchupAll";
 
-	notify("Marking all feeds as read...");
+	notify_progress("Marking all feeds as read...");
 
 	debug("catchupAllFeeds Q=" + query_str);
 
@@ -474,7 +474,7 @@ function quickMenuGo(opid) {
 
 function qfdDelete(feed_id) {
 
-	notify("Removing feed...");
+	notify_progress("Removing feed...");
 
 	if (!xmlhttp_ready(xmlhttp)) {
 		printLockingError();
@@ -552,7 +552,7 @@ function parse_runtime_info(elem) {
 		}
 
 		if (k == "daemon_is_running" && v != 1) {
-			notify("<span onclick=\"javascript:explainError(1)\">Update daemon is not runing.</span>", true, true);
+			notify_error("<span onclick=\"javascript:explainError(1)\">Update daemon is not runing.</span>");
 		}
 
 /*		var w = document.getElementById("noDaemonWarning");
@@ -634,7 +634,7 @@ function feedEditSave() {
 
 		var query = Form.serialize("edit_feed_form");
 
-		notify("Saving feed...");
+		notify_progress("Saving feed...");
 
 		xmlhttp.open("POST", "backend.php", true);
 		xmlhttp.onreadystatechange=dlg_frefresh_callback;
@@ -701,7 +701,7 @@ function localHotkeyHandler(e) {
 			}
 
 		} else {
-			notify("No operation to undo");
+			notify_error("No operation to undo");
 		}
 
 		return false;

+ 1 - 1
viewfeed.js

@@ -514,7 +514,7 @@ function editTagsSave() {
 		printLockingError();
 	}
 
-	notify("Saving article tags...");
+	notify_progress("Saving article tags...");
 
 	var form = document.forms["tag_edit_form"];