summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2005-08-24 09:02:58 +0100
committerAndrew Dolgov <[email protected]>2005-08-24 09:02:58 +0100
commit508a81e1b6502ac275a95831befe14d92c9ad55c (patch)
tree3a5da092abfd78612bf4fd1888c5d884185ad576
parent61c1a4d190ebcbfe810cd7c54dacf3279b36989d (diff)
feed editor, xmlhttp locking in preferences, try to initialize xmlhttp_rpc via ActiveX and a big piggie
-rw-r--r--backend.php37
-rw-r--r--functions.js12
-rw-r--r--prefs.js125
-rw-r--r--prefs.php7
-rw-r--r--tt-rss.css19
-rw-r--r--tt-rss.js6
6 files changed, 198 insertions, 8 deletions
diff --git a/backend.php b/backend.php
index 9697c0e01..027c7060d 100644
--- a/backend.php
+++ b/backend.php
@@ -356,7 +356,42 @@
$subop = $_GET["subop"];
if ($subop == "edit") {
- print "<p>[Edit feed placeholder]</p>";
+
+ $feed_id = $_GET["id"];
+
+ $result = pg_query("SELECT title,feed_url
+ FROM ttrss_feeds WHERE id = '$feed_id'");
+
+ $fedit_link = pg_fetch_result($result, 0, "feed_url");
+ $fedit_title = pg_fetch_result($result, 0, "title");
+
+ print "<table class=\"prefAddFeed\">
+ <td>Title:</td><td><input id=\"fedit_title\" value=\"$fedit_title\"></td></tr>
+ <td>Link:</td><td><input id=\"fedit_link\" value=\"$fedit_link\"></td></tr>
+ <tr><td colspan=\"2\" align=\"right\">
+ <a class=\"button\" href=\"javascript:feedEditCancel()\">Cancel</a>
+ <a class=\"button\" href=\"javascript:feedEditSave($feed_id)\">Save</a>
+ </td></tr>
+ </table>";
+
+ } else {
+
+ print "<table class=\"prefAddFeed\">
+ <td><input id=\"fadd_link\"></td>
+ <td colspan=\"4\" align=\"right\">
+ <a class=\"button\" href=\"javascript:addFeed()\">Add feed</a></td></tr>
+ </table>";
+
+ }
+
+ if ($subop == "editSave") {
+ $feed_title = pg_escape_string($_GET["t"]);
+ $feed_link = pg_escape_string($_GET["l"]);
+ $feed_id = $_GET["id"];
+
+ $result = pg_query("UPDATE ttrss_feeds SET
+ title = '$feed_title', feed_url = '$feed_link' WHERE id = '$feed_id'");
+
}
if ($subop == "remove") {
diff --git a/functions.js b/functions.js
index 25a19908b..b634974ab 100644
--- a/functions.js
+++ b/functions.js
@@ -12,6 +12,14 @@ function param_unescape(arg) {
return unescape(arg);
}
+function delay(gap) {
+ var then,now;
+ then=new Date().getTime();
+ now=then;
+ while((now-then)<gap) {
+ now=new Date().getTime();
+ }
+}
function notify(msg) {
@@ -27,4 +35,8 @@ function notify(msg) {
}
+function printLockingError() {
+ notify("Please wait until operation finishes");
+}
+
diff --git a/prefs.js b/prefs.js
index f9170665b..c01ba4ebb 100644
--- a/prefs.js
+++ b/prefs.js
@@ -42,6 +42,11 @@ function notify_callback() {
function updateFeedList() {
+ if (xmlhttp.readyState != 4 && xmlhttp.readyState != 0) {
+ printLockingError();
+ return
+ }
+
document.getElementById("feeds").innerHTML = "Loading feeds, please wait...";
xmlhttp.open("GET", "backend.php?op=pref-feeds", true);
@@ -66,6 +71,11 @@ function toggleSelectRow(sender) {
function addFeed() {
+ if (xmlhttp.readyState != 4 && xmlhttp.readyState != 0) {
+ printLockingError();
+ return
+ }
+
var link = document.getElementById("fadd_link");
if (link.value.length == 0) {
@@ -86,7 +96,12 @@ function addFeed() {
function editFeed(feed) {
- notify("Editing feed...");
+// notify("Editing feed...");
+
+ if (xmlhttp.readyState != 4 && xmlhttp.readyState != 0) {
+ printLockingError();
+ return
+ }
xmlhttp.open("GET", "backend.php?op=pref-feeds&subop=edit&id=" +
param_escape(feed), true);
@@ -113,6 +128,11 @@ function getSelectedFeeds() {
function readSelectedFeeds() {
+ if (xmlhttp.readyState != 4 && xmlhttp.readyState != 0) {
+ printLockingError();
+ return
+ }
+
var sel_rows = getSelectedFeeds();
if (sel_rows.length > 0) {
@@ -133,6 +153,11 @@ function readSelectedFeeds() {
function unreadSelectedFeeds() {
+ if (xmlhttp.readyState != 4 && xmlhttp.readyState != 0) {
+ printLockingError();
+ return
+ }
+
var sel_rows = getSelectedFeeds();
if (sel_rows.length > 0) {
@@ -153,6 +178,11 @@ function unreadSelectedFeeds() {
function removeSelectedFeeds() {
+ if (xmlhttp.readyState != 4 && xmlhttp.readyState != 0) {
+ printLockingError();
+ return
+ }
+
var sel_rows = getSelectedFeeds();
if (sel_rows.length > 0) {
@@ -172,10 +202,101 @@ function removeSelectedFeeds() {
}
+function feedEditCancel() {
+
+ if (xmlhttp.readyState != 4 && xmlhttp.readyState != 0) {
+ printLockingError();
+ return
+ }
+
+ notify("Operation cancelled.");
+
+ xmlhttp.open("GET", "backend.php?op=pref-feeds", true);
+ xmlhttp.onreadystatechange=feedlist_callback;
+ xmlhttp.send(null);
+
+}
+
+function feedEditSave(feed) {
+
+ if (xmlhttp.readyState != 4 && xmlhttp.readyState != 0) {
+ printLockingError();
+ return
+ }
+
+ notify("Saving feed.");
+
+ var link = document.getElementById("fedit_link").value;
+ var title = document.getElementById("fedit_title").value;
+
+ if (link.length == 0) {
+ notify("Feed link cannot be blank.");
+ return;
+ }
+
+ if (title.length == 0) {
+ notify("Feed title cannot be blank.");
+ return;
+ }
+
+ xmlhttp.open("GET", "backend.php?op=pref-feeds&subop=editSave&id=" +
+ feed + "&l=" + param_escape(link) + "&t=" + param_escape(title) ,true);
+ xmlhttp.onreadystatechange=feedlist_callback;
+ xmlhttp.send(null);
+
+}
+
+function editSelectedFeed() {
+ var rows = getSelectedFeeds();
+
+ if (rows.length == 0) {
+ notify("No feeds are selected.");
+ return;
+ }
+
+ if (rows.length > 1) {
+ notify("Please select one feed.");
+ return;
+ }
+
+ editFeed(rows[0]);
+
+}
+
+var seq = "";
+
+function hotkey_handler(e) {
+ var keycode;
+
+ if (window.event) {
+ keycode = window.event.keyCode;
+ } else if (e) {
+ keycode = e.which;
+ }
+
+ if (keycode == 13 || keycode == 27) {
+ seq = "";
+ } else {
+ seq = seq + "" + keycode;
+ }
+
+ var piggie = document.getElementById("piggie");
+
+ if (seq.match("807371717369")) {
+ piggie.style.display = "block";
+ seq = "";
+ notify("I loveded it!!!");
+ } else {
+ piggie.style.display = "none";
+ notify("");
+ }
+
+}
+
function init() {
updateFeedList();
-
+ document.onkeydown = hotkey_handler;
notify("");
}
diff --git a/prefs.php b/prefs.php
index 1a85bf3c4..fa67a45ee 100644
--- a/prefs.php
+++ b/prefs.php
@@ -29,15 +29,20 @@
<td class="prefContent" valign="top" colspan="2">
<h2>Feed Configuration</h2>
+<!--
<table class="prefAddFeed">
<td><input id="fadd_link"></td>
<td colspan="4" align="right">
<a class="button" href="javascript:addFeed()">Add feed</a></td></tr>
- </table>
+ </table>
+-->
+ <div id="piggie">&nbsp;</div>
<div id="feeds">&nbsp;</div>
<p>Selection:&nbsp;
+ <a class="button"
+ href="javascript:editSelectedFeed()">Edit</a>&nbsp;
<a class="buttonWarn"
href="javascript:removeSelectedFeeds()">Remove</a>&nbsp;
<a class="button"
diff --git a/tt-rss.css b/tt-rss.css
index a02f81a76..d5f88276b 100644
--- a/tt-rss.css
+++ b/tt-rss.css
@@ -148,6 +148,7 @@ table.main td.prefContent {
border-width : 1px 0px 0px 0px;
border-color : #c0c0c0;
border-style : solid;
+
}
table.main td.content {
@@ -320,3 +321,21 @@ table.postTable td.post {
padding : 20px;
}
+
+#piggie {
+ width : 400;
+ height : 400;
+ left : 50;
+ background-color : white;
+ display : none;
+ z-index : 3;
+ background-image : url("http://madoka.spb.ru/stuff/fox/piggie.png");
+ background-position : center center;
+ background-repeat : no-repeat;
+ position : absolute;
+ border : 1px solid pink;
+ margin-left : auto;
+ margin-right : auto;
+ -moz-border-radius : 10px;
+ opacity : 0.8;
+}
diff --git a/tt-rss.js b/tt-rss.js
index 2ed413a97..16ca4cf1a 100644
--- a/tt-rss.js
+++ b/tt-rss.js
@@ -18,8 +18,10 @@ try {
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
+ xmlhttp_rpc = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
+ xmlhttp_rpc = false;
}
}
@end @*/
@@ -30,10 +32,6 @@ if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
}
-function printLockingError() {
- notify("Please wait until operation finishes");
-}
-
function notify_callback() {
var container = document.getElementById('notify');
if (xmlhttp.readyState == 4) {