'use strict' /* eslint-disable new-cap */ /* eslint-disable no-new */ /* global __, dojo, dijit, Notify, App, Feeds, $$, xhrPost, xhrJson, Tables, Effect, fox */ /* exported CommonDialogs */ const CommonDialogs = { closeInfoBox: function() { const dialog = dijit.byId("infoBox"); if (dialog) dialog.hide(); }, removeFeedIcon: function(id) { if (confirm(__("Remove stored feed icon?"))) { Notify.progress("Removing feed icon...", true); const query = {op: "pref-feeds", method: "removeicon", feed_id: id}; xhrPost("backend.php", query, () => { Notify.info("Feed icon removed."); if (App.isPrefs()) dijit.byId("feedTree").reload(); else Feeds.reload(); const icon = $$(".feed-editor-icon")[0]; if (icon) icon.src = icon.src.replace(/\?[0-9]+$/, "?" + new Date().getTime()); }); } return false; }, uploadFeedIcon: function() { const file = $("icon_file"); if (file.value.length == 0) { alert(__("Please select an image file to upload.")); } else if (confirm(__("Upload new icon for this feed?"))) { Notify.progress("Uploading, please wait...", true); const xhr = new XMLHttpRequest(); xhr.open( 'POST', 'backend.php', true ); xhr.onload = function () { switch (parseInt(this.responseText)) { case 0: { Notify.info("Upload complete."); if (App.isPrefs()) dijit.byId("feedTree").reload(); else Feeds.reload(); const icon = $$(".feed-editor-icon")[0]; if (icon) icon.src = icon.src.replace(/\?[0-9]+$/, "?" + new Date().getTime()); } break; case 1: Notify.error("Upload failed: icon is too big."); break; case 2: Notify.error("Upload failed."); break; } }; xhr.send(new FormData($("feed_icon_upload_form"))); } return false; }, quickAddFeed: function() { xhrPost("backend.php", {op: "feeds", method: "quickAddFeed"}, (transport) => { const dialog = new fox.SingleUseDialog({ id: "feedAddDlg", title: __("Subscribe to Feed"), content: transport.responseText, show_error: function (msg) { const elem = $("fadd_error_message"); elem.innerHTML = msg; if (!Element.visible(elem)) new Effect.Appear(elem); }, execute: function () { if (this.validate()) { console.log(dojo.objectToQuery(this.attr('value'))); const feed_url = this.attr('value').feed; Element.show("feed_add_spinner"); Element.hide("fadd_error_message"); xhrPost("backend.php", this.attr('value'), (transport) => { try { let reply; try { reply = JSON.parse(transport.responseText); } catch (e) { Element.hide("feed_add_spinner"); alert(__("Failed to parse output. This can indicate server timeout and/or network issues. Backend output was logged to browser console.")); console.log('quickAddFeed, backend returned:' + transport.responseText); return; } const rc = reply['result']; Notify.close(); Element.hide("feed_add_spinner"); console.log(rc); switch (parseInt(rc['code'])) { case 1: dialog.hide(); Notify.info(__("Subscribed to %s").replace("%s", feed_url)); if (App.isPrefs()) dijit.byId("feedTree").reload(); else Feeds.reload(); break; case 2: dialog.show_error(__("Specified URL seems to be invalid.")); break; case 3: dialog.show_error(__("Specified URL doesn't seem to contain any feeds.")); break; case 4: { const feeds = rc['feeds']; Element.show("fadd_multiple_notify"); const select = dijit.byId("feedDlg_feedContainerSelect"); while (select.getOptions().length > 0) select.removeOption(0); select.addOption({value: '', label: __("Expand to select feed")}); for (const feedUrl in feeds) { if (feeds.hasOwnProperty(feedUrl)) { select.addOption({value: feedUrl, label: feeds[feedUrl]}); } } Effect.Appear('feedDlg_feedsContainer', {duration: 0.5}); } break; case 5: dialog.show_error(__("Couldn't download the specified URL: %s").replace("%s", rc['message'])); break; case 6: dialog.show_error(__("XML validation failed: %s").replace("%s", rc['message'])); break; case 0: dialog.show_error(__("You are already subscribed to this feed.")); break; } } catch (e) { console.error(transport.responseText); App.Error.report(e); } }); } }, }); dialog.show(); }); }, showFeedsWithErrors: function() { xhrJson("backend.php", {op: "pref-feeds", method: "feedsWithErrors"}, (reply) => { const dialog = new fox.SingleUseDialog({ id: "errorFeedsDlg", title: __("Feeds with update errors"), getSelectedFeeds: function () { return Tables.getSelected("error-feeds-list"); }, removeSelected: function () { const sel_rows = this.getSelectedFeeds(); if (sel_rows.length > 0) { if (confirm(__("Remove selected feeds?"))) { Notify.progress("Removing selected feeds...", true); const query = { op: "pref-feeds", method: "remove", ids: sel_rows.toString() }; xhrPost("backend.php", query, () => { Notify.close(); dialog.hide(); if (App.isPrefs()) dijit.byId("feedTree").reload(); else Feeds.reload(); }); } } else { alert(__("No feeds selected.")); } }, content: `
${App.escapeHtml(row.title)} | ${App.escapeHtml(row.last_error)} |