diff --git a/classes/pref/feeds.php b/classes/pref/feeds.php index 659f7e183..086bf04f4 100755 --- a/classes/pref/feeds.php +++ b/classes/pref/feeds.php @@ -26,7 +26,7 @@ class Pref_Feeds extends Handler_Protected { function batch_edit_cbox($elem, $label = false) { print ""; + onchange=\"App.dialogOf(this).toggleField(this, '$elem', '$label')\">"; } function renamecat() { @@ -807,7 +807,8 @@ class Pref_Feeds extends Handler_Protected { $title = htmlspecialchars($title, ENT_QUOTES); print ""; @@ -950,10 +949,10 @@ class Pref_Filters extends Handler_Protected { print ""; diff --git a/js/App.js b/js/App.js index cd96dfe2a..8ea6c70b3 100644 --- a/js/App.js +++ b/js/App.js @@ -99,12 +99,12 @@ const App = { }); if (callback) { - link.onload = function () { + link.onload = function() { document.querySelector("body").removeClassName("css_loading"); callback(); }; - link.onerror = function(event) { + link.onerror = function() { alert("Fatal error while loading application stylesheet: " + link.getAttribute("href")); } } @@ -336,15 +336,6 @@ const App = { dialog = new fox.SingleUseDialog({ title: title, id: 'infoBox', - onCancel: function () { - return true; - }, - onExecute: function () { - return true; - }, - onClose: function () { - return true; - }, content: content }); } else { @@ -472,8 +463,6 @@ const App = { backendSanityCallback: function(transport) { const reply = JSON.parse(transport.responseText); - /* global ERRORS */ - if (!reply) { this.Error.fatal(ERRORS[3], {info: transport.responseText}); return; @@ -677,8 +666,8 @@ const App = { }, initSecondStage: function() { - document.onkeydown = (event) => { return this.hotkeyHandler(event) }; - document.onkeypress = (event) => { return this.hotkeyHandler(event) }; + document.onkeydown = (event) => this.hotkeyHandler(event); + document.onkeypress = (event) => this.hotkeyHandler(event); if (this.is_prefs) { diff --git a/js/CommonDialogs.js b/js/CommonDialogs.js index 700867e73..fe685def3 100644 --- a/js/CommonDialogs.js +++ b/js/CommonDialogs.js @@ -1,6 +1,6 @@ 'use strict' -/* global __, ngettext, dojo, dijit, Notify, App, Feeds, $$, xhrPost, xhrJson, Tables, Effect, fox */ +/* global __, dojo, dijit, Notify, App, Feeds, $$, xhrPost, xhrJson, Tables, Effect, fox */ /* exported CommonDialogs */ const CommonDialogs = { @@ -264,8 +264,6 @@ const CommonDialogs = { const query = {op: "pref-feeds", quiet: 1, method: "remove", ids: feed_id}; xhrPost("backend.php", query, () => { - if (dijit.byId("feedEditDlg")) dijit.byId("feedEditDlg").hide(); - if (App.isPrefs()) { dijit.byId("feedTree").reload(); } else { @@ -293,6 +291,12 @@ const CommonDialogs = { const dialog = new fox.SingleUseDialog({ id: "feedEditDlg", title: __("Edit Feed"), + unsubscribeFeed: function(feed_id, title) { + if (confirm(__("Unsubscribe from %s?").replace("%s", title))) { + dialog.hide(); + CommonDialogs.unsubscribeFeed(feed_id); + } + }, execute: function () { if (this.validate()) { Notify.progress("Saving data...", true); @@ -351,16 +355,6 @@ const CommonDialogs = { try { const dialog = new fox.SingleUseDialog({ title: __("Public OPML URL"), - id: 'publicOPMLDlg', - onCancel: function () { - return true; - }, - onExecute: function () { - return true; - }, - onClose: function () { - return true; - }, content: `
${__("Your Public OPML URL is:")}
@@ -399,16 +393,6 @@ const CommonDialogs = { const dialog = new fox.SingleUseDialog({ title: __("Show as feed"), - id: 'genFeedDlg', - onCancel: function () { - return true; - }, - onExecute: function () { - return true; - }, - onClose: function () { - return true; - }, content: `
${__("%s can be accessed via the following secret URL:").replace("%s", feed_title)}
diff --git a/js/CommonFilters.js b/js/CommonFilters.js index 1d5b9236b..cfb6ca93e 100644 --- a/js/CommonFilters.js +++ b/js/CommonFilters.js @@ -90,10 +90,7 @@ const Filters = { }); }, addFilterRule: function(replaceNode, ruleStr) { - if (dijit.byId("filterNewRuleDlg")) - dijit.byId("filterNewRuleDlg").destroyRecursive(); - - const rule_dlg = new dijit.Dialog({ + const dialog = new fox.SingleUseDialog({ id: "filterNewRuleDlg", title: ruleStr ? __("Edit rule") : __("Add rule"), execute: function () { @@ -105,41 +102,40 @@ const Filters = { content: __('Loading, please wait...'), }); - const tmph = dojo.connect(rule_dlg, "onShow", null, function (/* e */) { + const tmph = dojo.connect(dialog, "onShow", null, function (/* e */) { dojo.disconnect(tmph); xhrPost("backend.php", {op: 'pref-filters', method: 'newrule', rule: ruleStr}, (transport) => { - rule_dlg.attr('content', transport.responseText); + dialog.attr('content', transport.responseText); }); }); - rule_dlg.show(); + dialog.show(); }, addFilterAction: function(replaceNode, actionStr) { - if (dijit.byId("filterNewActionDlg")) - dijit.byId("filterNewActionDlg").destroyRecursive(); - - const query = "backend.php?op=pref-filters&method=newaction&action=" + - encodeURIComponent(actionStr); - - const rule_dlg = new dijit.Dialog({ - id: "filterNewActionDlg", + const dialog = new fox.SingleUseDialog({ title: actionStr ? __("Edit action") : __("Add action"), execute: function () { if (this.validate()) { Filters.createNewActionElement($("filterDlg_Actions"), replaceNode); this.hide(); } - }, - href: query + } + }); + + const tmph = dojo.connect(dialog, "onShow", null, function (/* e */) { + dojo.disconnect(tmph); + + xhrPost("backend.php", {op: 'pref-filters', method: 'newaction', action: actionStr}, (transport) => { + dialog.attr('content', transport.responseText); + }); }); - rule_dlg.show(); + dialog.show(); }, test: function(params) { - const test_dlg = new fox.SingleUseDialog({ - id: "filterTestDlg", + const dialog = new fox.SingleUseDialog({ title: "Test Filter", results: 0, limit: 100, @@ -147,7 +143,7 @@ const Filters = { getTestResults: function (params, offset) { params.method = 'testFilterDo'; params.offset = offset; - params.limit = test_dlg.limit; + params.limit = dialog.limit; console.log("getTestResults:" + offset); @@ -155,16 +151,16 @@ const Filters = { try { const result = JSON.parse(transport.responseText); - if (result && dijit.byId("filterTestDlg") && dijit.byId("filterTestDlg").open) { - test_dlg.results += result.length; + if (result && dialog && dialog.open) { + dialog.results += result.length; console.log("got results:" + result.length); $("prefFilterProgressMsg").innerHTML = __("Looking for articles (%d processed, %f found)...") - .replace("%f", test_dlg.results) + .replace("%f", dialog.results) .replace("%d", offset); - console.log(offset + " " + test_dlg.max_offset); + console.log(offset + " " + dialog.max_offset); for (let i = 0; i < result.length; i++) { const tmp = dojo.create("table", { innerHTML: result[i]}); @@ -172,11 +168,11 @@ const Filters = { $("prefFilterTestResultList").innerHTML += tmp.innerHTML; } - if (test_dlg.results < 30 && offset < test_dlg.max_offset) { + if (dialog.results < 30 && offset < dialog.max_offset) { // get the next batch window.setTimeout(function () { - test_dlg.getTestResults(params, offset + test_dlg.limit); + dialog.getTestResults(params, offset + dialog.limit); }, 0); } else { @@ -184,31 +180,27 @@ const Filters = { Element.hide("prefFilterLoadingIndicator"); - if (test_dlg.results == 0) { + if (dialog.results == 0) { $("prefFilterTestResultList").innerHTML = ` ${__('No recent articles matching this filter have been found.')}`; $("prefFilterProgressMsg").innerHTML = "Articles matching this filter:"; } else { $("prefFilterProgressMsg").innerHTML = __("Found %d articles matching this filter:") - .replace("%d", test_dlg.results); + .replace("%d", dialog.results); } } } else if (!result) { console.log("getTestResults: can't parse results object"); - Element.hide("prefFilterLoadingIndicator"); - Notify.error("Error while trying to get filter test results."); - } else { console.log("getTestResults: dialog closed, bailing out."); } } catch (e) { App.Error.report(e); } - }); }, content: ` @@ -225,11 +217,11 @@ const Filters = { ` }); - dojo.connect(test_dlg, "onShow", null, function (/* e */) { - test_dlg.getTestResults(params, 0); + dojo.connect(dialog, "onShow", null, function (/* e */) { + dialog.getTestResults(params, 0); }); - test_dlg.show(); + dialog.show(); }, edit: function(id) { // if no id, new filter dialog let query;