]> git.wh0rd.org - tt-rss.git/commitdiff
refactor feed edit dialog
authorAndrew Dolgov <fox@fakecake.org>
Sat, 20 Nov 2010 12:29:50 +0000 (15:29 +0300)
committerAndrew Dolgov <fox@fakecake.org>
Sat, 20 Nov 2010 12:29:50 +0000 (15:29 +0300)
FeedTree.js
functions.js
functions.php
modules/pref-feeds.php
prefs.js
tt-rss.js

index 18112f6b7d48b4fc267c798b3ac840d0c5393e7d..93ccf002505b734a13f9c90e69162587b5d36026 100644 (file)
@@ -107,7 +107,7 @@ dojo.declare("fox.FeedTree", dijit.Tree, {
                        menu.addChild(new dijit.MenuItem({
                                label: __("Edit feed"),
                                onClick: function() {
-                                       editFeedDlg(this.getParent().row_id);
+                                       editFeed(this.getParent().row_id);
                                }}));
 
                        menu.addChild(new dijit.MenuItem({
index 946e29a9a9512917b226168a6910875857e6cb0b..5e3156126082094a38d95b8e2de35084ec26cf5a 100644 (file)
@@ -1330,7 +1330,7 @@ function has_local_storage() {
 
 function catSelectOnChange(elem) {
        try {
-               var value = elem[elem.selectedIndex].value;
+/*             var value = elem[elem.selectedIndex].value;
                var def = elem.getAttribute('default');
 
                if (value == "ADD_CAT") {
@@ -1341,7 +1341,7 @@ function catSelectOnChange(elem) {
                                elem.selectedIndex = 0;
 
                        quickAddCat(elem);
-               }
+               } */
 
        } catch (e) {
                exception_error("catSelectOnChange", e);
@@ -1563,3 +1563,47 @@ function getSelectedTableRowIds(id) {
        return rows;
 }
 
+function editFeed(feed, event) {
+
+       try {
+               var query = "backend.php?op=pref-feeds&subop=editfeed&id=" +
+                       param_escape(feed);
+
+               console.log(query);
+
+               if (dijit.byId("feedEditDlg"))
+                       dijit.byId("feedEditDlg").destroyRecursive();
+
+               dialog = new dijit.Dialog({
+                       id: "feedEditDlg",
+                       title: __("Edit Feed"),
+                       style: "width: 600px",
+                       execute: function() {
+                               if (this.validate()) {
+                                       console.log(dojo.objectToQuery(this.attr('value')));
+
+                                       notify_progress("Saving data...", true);
+
+                                       new Ajax.Request("backend.php", {
+                                               parameters: dojo.objectToQuery(dialog.attr('value')),
+                                               onComplete: function(transport) {
+                                                       dialog.hide();
+                                                       if (inPreferences()) {
+                                                               updateFeedList();
+                                                       } else {
+                                                               notify('');
+                                                               dlg_frefresh_callback(transport);
+                                                       }
+                                       }})
+                               }
+                       },
+                       href: query});
+
+               dialog.show();
+
+       } catch (e) {
+               exception_error("editFeed", e);
+       }
+}
+
+
index 2dcf5d3fc3490809710087f74a5d495ca5079bff..3f18392a802d539ecb0b62c15be256d10a222c35 100644 (file)
                                        $line["id"], htmlspecialchars($line["title"]));
                }
 
-               print "<option value=\"ADD_CAT\">" .__("Add category...") . "</option>";
+#              print "<option value=\"ADD_CAT\">" .__("Add category...") . "</option>";
 
                print "</select>";
        }
index 0596fc076f65f978f7adfedc9a04885bec8f612d..698aa1525c81303aab51d2ee655fc81c78bd04f7 100644 (file)
                }
 
                if ($subop == "editfeed") {
-                       header("Content-Type: text/xml");
-
-                       print "<dlg id=\"$subop\">";
-                       print "<title>".__('Feed Editor')."</title>";
-                       print "<content><![CDATA[";
 
                        $feed_id = db_escape_string($_REQUEST["id"]);
 
                        $title = htmlspecialchars(db_fetch_result($result,
                                0, "title"));
 
-                       $icon_file = ICONS_DIR . "/$feed_id.ico";
-       
-                       if (file_exists($icon_file) && filesize($icon_file) > 0) {
-                                       $feed_icon = "<img width=\"16\" height=\"16\"
-                                               src=\"" . ICONS_URL . "/$feed_id.ico\">";
-                       } else {
-                               $feed_icon = "";
-                       }
-
-                       print "<form id=\"edit_feed_form\" onsubmit=\"return false\">"; 
-
-                       print "<input type=\"hidden\" name=\"id\" value=\"$feed_id\">";
-                       print "<input type=\"hidden\" name=\"op\" value=\"pref-feeds\">";
-                       print "<input type=\"hidden\" name=\"subop\" value=\"editSave\">";
+                       print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"id\" value=\"$feed_id\">";
+                       print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"op\" value=\"pref-feeds\">";
+                       print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"subop\" value=\"editSave\">";
 
                        print "<div class=\"dlgSec\">".__("Feed")."</div>";
                        print "<div class=\"dlgSecCont\">";
 
                        /* Title */
 
-                       print "<input style=\"font-size : 16px\" size=\"40\" onkeypress=\"return filterCR(event, feedEditSave)\"
-                                           name=\"title\" value=\"$title\">";
+                       print "<input dojoType=\"dijit.form.ValidationTextBox\" required=\"1\"
+                               style=\"font-size : 16px; width: 20em\" name=\"title\" value=\"$title\">";
 
                        /* Feed URL */
 
                        print "<br/>";
 
                        print __('URL:') . " ";
-                       print "<input size=\"40\" onkeypress=\"return filterCR(event, feedEditSave)\"
+                       print "<input dojoType=\"dijit.form.ValidationTextBox\" required=\"1\"
+                               regExp='^(http|https)://.*' style=\"width : 20em\"
                                name=\"feed_url\" value=\"$feed_url\">";
 
                        /* Category */
 
                                print __('Place in category:') . " ";
 
-                               print_feed_cat_select($link, "cat_id", $cat_id, $disabled);
+                               print_feed_cat_select($link, "cat_id", $cat_id, 
+                                       'dojoType="dijit.form.Select"');
                        }
 
                        print "</div>";
 
                        $update_interval = db_fetch_result($result, 0, "update_interval");
 
-                       print_select_hash("update_interval", $update_interval, $update_intervals);
+                       print_select_hash("update_interval", $update_interval, $update_intervals, 
+                               'dojoType="dijit.form.Select"');
 
                        /* Update method */
 
-                       $update_method = db_fetch_result($result, 0, "update_method");
+                       $update_method = db_fetch_result($result, 0, "update_method", 
+                               'dojoType="dijit.form.Select"');
 
                        print " " . __('using') . " ";
-                       print_select_hash("update_method", $update_method, $update_methods);                    
+                       print_select_hash("update_method", $update_method, $update_methods,
+                               'dojoType="dijit.form.Select"');                        
 
                        $purge_interval = db_fetch_result($result, 0, "purge_interval");
 
 
                                print __('Article purging:') . " ";
 
-                               print_select_hash("purge_interval", $purge_interval, $purge_intervals);
+                               print_select_hash("purge_interval", $purge_interval, $purge_intervals, 
+                                       'dojoType="dijit.form.Select"');
 
                        } else {
                                print "<input type='hidden' name='purge_interval' value='$purge_interval'>";
 
                        print "<tr><td>" . __('Login:') . "</td><td>";
 
-                       print "<input size=\"20\" onkeypress=\"return filterCR(event, feedEditSave)\"
+                       print "<input dojoType=\"dijit.form.TextBox\" 
                                name=\"auth_login\" value=\"$auth_login\">";
 
                        print "</tr><tr><td>" . __("Password:") . "</td><td>";
 
                        $auth_pass = htmlspecialchars(db_fetch_result($result, 0, "auth_pass"));
 
-                       print "<input size=\"20\" type=\"password\" name=\"auth_pass\" 
-                               onkeypress=\"return filterCR(event, feedEditSave)\"
+                       print "<input dojoType=\"dijit.form.TextBox\" type=\"password\" name=\"auth_pass\" 
                                value=\"$auth_pass\">";
 
                        print "</td></tr></table>";
                        print "<div class=\"dlgSec\">".__("Options")."</div>";
                        print "<div class=\"dlgSecCont\">";
 
-                       print "<div style=\"line-height : 100%\">";
+#                      print "<div style=\"line-height : 100%\">";
 
                        $private = sql_bool_to_bool(db_fetch_result($result, 0, "private"));
 
                        if ($private) {
-                               $checked = "checked";
+                               $checked = "checked=\"1\"";
                        } else {
                                $checked = "";
                        }
 
-                       print "<input type=\"checkbox\" name=\"private\" id=\"private\" 
+                       print "<input dojoType=\"dijit.form.CheckBox\" type=\"checkbox\" name=\"private\" id=\"private\" 
                                $checked>&nbsp;<label for=\"private\">".__('Hide from Popular feeds')."</label>";
 
                        $rtl_content = sql_bool_to_bool(db_fetch_result($result, 0, "rtl_content"));
 
                        if ($rtl_content) {
-                               $checked = "checked";
+                               $checked = "checked=\"1\"";
                        } else {
                                $checked = "";
                        }
 
-                       print "<br/><input type=\"checkbox\" id=\"rtl_content\" name=\"rtl_content\"
+                       print "<br/><input dojoType=\"dijit.form.CheckBox\" type=\"checkbox\" id=\"rtl_content\" name=\"rtl_content\"
                                $checked>&nbsp;<label for=\"rtl_content\">".__('Right-to-left content')."</label>";
 
                        $include_in_digest = sql_bool_to_bool(db_fetch_result($result, 0, "include_in_digest"));
 
                        if ($include_in_digest) {
-                               $checked = "checked";
+                               $checked = "checked=\"1\"";
                        } else {
                                $checked = "";
                        }
 
-                       print "<br/><input type=\"checkbox\" id=\"include_in_digest\" 
+                       print "<br/><input dojoType=\"dijit.form.CheckBox\" type=\"checkbox\" id=\"include_in_digest\" 
                                name=\"include_in_digest\"
                                $checked>&nbsp;<label for=\"include_in_digest\">".__('Include in e-mail digest')."</label>";
 
                                $checked = "";
                        }
 
-                       print "<br/><input type=\"checkbox\" id=\"always_display_enclosures\" 
+                       print "<br/><input dojoType=\"dijit.form.CheckBox\" type=\"checkbox\" id=\"always_display_enclosures\" 
                                name=\"always_display_enclosures\"
                                $checked>&nbsp;<label for=\"always_display_enclosures\">".__('Always display image attachments')."</label>";
 
                        $cache_images = sql_bool_to_bool(db_fetch_result($result, 0, "cache_images"));
 
                        if ($cache_images) {
-                               $checked = "checked";
+                               $checked = "checked=\"1\"";
                        } else {
                                $checked = "";
                        }
 
-                       print "<br/><input type=\"checkbox\" id=\"cache_images\" 
+                       print "<br/><input dojoType=\"dijit.form.CheckBox\" type=\"checkbox\" id=\"cache_images\" 
                                name=\"cache_images\"
                                $checked>&nbsp;<label for=\"cache_images\">".
                                __('Cache images locally (SimplePie only)')."</label>";
 
 
-                       print "</div>";
+#                      print "</div>";
                        print "</div>";
 
-                       print "</form>";
-
                        /* Icon */
 
                        print "<br/>";
                                <input type=\"hidden\" name=\"op\" value=\"pref-feeds\">
                                <input type=\"hidden\" name=\"feed_id\" value=\"$feed_id\">
                                <input type=\"hidden\" name=\"subop\" value=\"uploadicon\">
-                               <button onclick=\"return uploadFeedIcon();\"
+                               <button dojoType=\"dijit.form.Button\" onclick=\"return uploadFeedIcon();\"
                                        type=\"submit\">".__('Replace')."</button>
-                               <button onclick=\"return removeFeedIcon($feed_id);\"
+                               <button dojoType=\"dijit.form.Button\" onclick=\"return removeFeedIcon($feed_id);\"
                                        type=\"submit\">".__('Remove')."</button>
                                </form>";
 
 
                        print "<div class='dlgButtons'>
                                <div style=\"float : left\">
-                               <button onclick='return unsubscribeFeed($feed_id, \"$title\")'>".
+                               <button dojoType=\"dijit.form.Button\" onclick='return unsubscribeFeed($feed_id, \"$title\")'>".
                                        __('Unsubscribe')."</button>
                                </div>
-                               <button onclick=\"return feedEditSave()\">".__('Save')."</button>
-                               <button onclick=\"return feedEditCancel()\">".__('Cancel')."</button>
-                               </div>";
-
-                       print "]]></content></dlg>";
+                               <button dojoType=\"dijit.form.Button\" onclick=\"return dijit.byId('feedEditDlg').execute()\">".__('Save')."</button>
+                               <button dojoType=\"dijit.form.Button\" onclick=\"return dijit.byId('feedEditDlg').hide()\">".__('Cancel')."</button>
+                       </div>";
 
                        return;
                }
index 14af5b6078f8d628b0b15a96130b94fbb66da6cf..5ca4e33383fa500666e60f64b7db1a8cfc1843d9 100644 (file)
--- a/prefs.js
+++ b/prefs.js
@@ -347,39 +347,6 @@ function editFilter(id, event) {
        }
 }
 
-function editFeed(feed, event) {
-
-       try {
-
-               if (event && !event.ctrlKey) {
-
-                       notify_progress("Loading, please wait...");
-
-//                     selectTableRows('prefFeedList', 'none');        
-//                     selectTableRowById('FEEDR-'+feed, 'FRCHK-'+feed, true);
-       
-                       var query = "?op=pref-feeds&subop=editfeed&id=" +
-                               param_escape(feed);
-       
-                       new Ajax.Request("backend.php", {
-                               parameters: query,
-                               onComplete: function(transport) {
-                                               infobox_callback2(transport);
-                                               document.forms["edit_feed_form"].title.focus();
-                                       } });
-
-               } else if (event.ctrlKey) {
-//                     var cb = $('FRCHK-' + feed);
-//                     cb.checked = !cb.checked;
-//                     toggleSelectRow(cb);
-               }
-
-
-       } catch (e) {
-               exception_error("editFeed", e);
-       }
-}
-
 function getSelectedLabels() {
        var tree = dijit.byId("labelTree");
        var items = tree.model.getCheckedItems();
@@ -679,36 +646,6 @@ function removeSelectedFeedCats() {
        return false;
 }
 
-function feedEditCancel() {
-       closeInfoBox();
-       return false;
-}
-
-function feedEditSave() {
-
-       try {
-       
-               // FIXME: add parameter validation
-
-               var query = Form.serialize("edit_feed_form");
-
-               notify_progress("Saving feed...");
-
-               new Ajax.Request("backend.php", {
-                       parameters: query,
-                       onComplete: function(transport) { 
-                               feedlist_callback2(transport); 
-                       } });
-
-               closeInfoBox();
-
-               return false;
-
-       } catch (e) {
-               exception_error("feedEditSave", e);
-       } 
-}
-
 function userEditCancel() {
        closeInfoBox();
        return false;
@@ -1080,6 +1017,7 @@ function init() {
                dojo.require("dijit.form.Select");
                dojo.require("dijit.form.FilteringSelect");
                dojo.require("dijit.form.TextBox");
+               dojo.require("dijit.form.CheckBox");
                dojo.require("dijit.form.ValidationTextBox");
                dojo.require("dijit.form.RadioButton");
                dojo.require("dijit.form.Select");
index 5409fe89915643d8de58b8faa439387776d5e364..1559530b8a4854621421921b3b51da18b0524cfd 100644 (file)
--- a/tt-rss.js
+++ b/tt-rss.js
@@ -279,6 +279,7 @@ function init() {
                dojo.require("dijit.form.TextBox");
                dojo.require("dijit.form.ValidationTextBox");
                dojo.require("dijit.form.FilteringSelect");
+               dojo.require("dijit.form.CheckBox");
                dojo.require("dijit.Toolbar");
                dojo.require("dijit.ProgressBar");
                dojo.require("dijit.Menu");
@@ -375,7 +376,7 @@ function quickMenuGo(opid) {
                }
 
                if (opid == "qmcEditFeed") {
-                       editFeedDlg(getActiveFeedId());
+                       editFeed(getActiveFeedId());
                }
        
                if (opid == "qmcRemoveFeed") {
@@ -530,77 +531,6 @@ function catchupFeedInGroup(id) {
        }
 }
 
-function editFeedDlg(feed) {
-       try {
-
-               if (!feed) {
-                       alert(__("Please select some feed first."));
-                       return;
-               }
-       
-               if ((feed <= 0) || activeFeedIsCat()) {
-                       alert(__("You can't edit this kind of feed."));
-                       return;
-               }
-       
-               var query = "";
-       
-               if (feed > 0) {
-                       query = "?op=pref-feeds&subop=editfeed&id=" +   param_escape(feed);
-               } else {
-                       query = "?op=pref-labels&subop=edit&id=" +      param_escape(-feed-11);
-               }
-
-               disableHotkeys();
-
-               notify_progress("Loading, please wait...", true);
-
-               new Ajax.Request("backend.php", {
-                       parameters: query,
-                       onComplete: function(transport) { 
-                               infobox_callback2(transport); 
-                               document.forms["edit_feed_form"].title.focus();
-                       } });
-
-       } catch (e) {
-               exception_error("editFeedDlg", e);
-       }
-}
-
-/* this functions duplicate those of prefs.js feed editor, with
-       some differences because there is no feedlist */
-
-function feedEditCancel() {
-       closeInfoBox();
-       return false;
-}
-
-function feedEditSave() {
-
-       try {
-       
-               // FIXME: add parameter validation
-
-               var query = Form.serialize("edit_feed_form");
-
-               notify_progress("Saving feed...");
-
-               new Ajax.Request("backend.php", {
-                       parameters: query,
-                       onComplete: function(transport) { 
-                               dlg_frefresh_callback(transport); 
-                       } });
-
-               cache_flush();
-               closeInfoBox();
-
-               return false;
-
-       } catch (e) {
-               exception_error("feedEditSave (main)", e);
-       } 
-}
-
 function collapse_feedlist() {
        try {
 
@@ -913,7 +843,7 @@ function hotkey_handler(e) {
                        }
 
                        if (keycode == 69) { // e
-                               editFeedDlg(getActiveFeedId());
+                               editFeed(getActiveFeedId());
                                return false;
                        }