summaryrefslogtreecommitdiff
path: root/js/CommonDialogs.js
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2021-02-20 13:32:09 +0300
committerAndrew Dolgov <[email protected]>2021-02-20 13:32:09 +0300
commit22fe9b54d2150e543338dbc7541f134c0a7c61f6 (patch)
tree920fd8dc8b30b949e92861fd6624a35cd31919ff /js/CommonDialogs.js
parent9586c72a17dabd907becebffc938add10c4a8626 (diff)
feed editor: use client dialog
Diffstat (limited to 'js/CommonDialogs.js')
-rw-r--r--js/CommonDialogs.js437
1 files changed, 191 insertions, 246 deletions
diff --git a/js/CommonDialogs.js b/js/CommonDialogs.js
index 5477e9ecd..704e797d3 100644
--- a/js/CommonDialogs.js
+++ b/js/CommonDialogs.js
@@ -11,72 +11,6 @@ const CommonDialogs = {
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};
-
- xhr.post("backend.php", query, () => {
- Notify.info("Feed icon removed.");
-
- if (App.isPrefs())
- dijit.byId("feedTree").reload();
- else
- Feeds.reload();
-
- const icon = App.findAll(".feed-editor-icon")[0];
-
- if (icon)
- icon.src = icon.src.replace(/\?[0-9]+$/, "?" + new Date().getTime());
-
- });
- }
-
- return false;
- },
- uploadFeedIcon: function() {
- const file = App.byId("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 = App.findAll(".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(App.byId("feed_icon_upload_form")));
- }
-
- return false;
- },
subscribeToFeed: function() {
xhr.json("backend.php",
{op: "feeds", method: "subscribeToFeed"},
@@ -407,6 +341,86 @@ const CommonDialogs = {
CommonDialogs.unsubscribeFeed(feed_id);
}
},
+ uploadIcon: function(input) {
+ if (input.files.length != 0) {
+ const icon_file = input.files[0];
+
+ if (icon_file.type.indexOf("image/") == -1) {
+ alert(__("Please select an image file."));
+ return;
+ }
+
+ const fd = new FormData();
+ fd.append('icon_file', icon_file)
+ fd.append('feed_id', feed_id);
+ fd.append('op', 'pref-feeds');
+ fd.append('method', 'uploadIcon');
+ fd.append('csrf_token', App.getInitParam("csrf_token"));
+
+ const xhr = new XMLHttpRequest();
+
+ xhr.open( 'POST', 'backend.php', true );
+ xhr.onload = function () {
+ console.log(this.responseText);
+
+ // TODO: make a notice box within panel content
+ switch (parseInt(this.responseText)) {
+ case 1:
+ Notify.error("Upload failed: icon is too big.");
+ break;
+ case 2:
+ Notify.error("Upload failed.");
+ break;
+ default:
+ {
+ Notify.info("Upload complete.");
+
+ if (App.isPrefs())
+ dijit.byId("feedTree").reload();
+ else
+ Feeds.reload();
+
+ const icon = dialog.domNode.querySelector(".feedIcon");
+
+ if (icon) {
+ icon.src = this.responseText;
+ icon.show();
+ }
+
+ input.value = "";
+ }
+ }
+ };
+
+ xhr.send(fd);
+
+ }
+ },
+ removeIcon: function(id) {
+ if (confirm(__("Remove stored feed icon?"))) {
+ Notify.progress("Removing feed icon...", true);
+
+ const query = {op: "pref-feeds", method: "removeicon", feed_id: id};
+
+ xhr.post("backend.php", query, () => {
+ Notify.info("Feed icon removed.");
+
+ if (App.isPrefs())
+ dijit.byId("feedTree").reload();
+ else
+ Feeds.reload();
+
+ const icon = dialog.domNode.querySelector(".feedIcon");
+
+ if (icon) {
+ icon.src = "";
+ icon.hide();
+ }
+ });
+ }
+
+ return false;
+ },
execute: function () {
if (this.validate()) {
Notify.progress("Saving data...", true);
@@ -437,205 +451,136 @@ const CommonDialogs = {
// for unsub prompt
dialog.feed_title = feed.title;
+ // options tab
+ const options = {
+ include_in_digest: [ feed.include_in_digest, __('Include in e-mail digest') ],
+ always_display_enclosures: [ feed.always_display_enclosures, __('Always display image attachments') ],
+ hide_images: [ feed.hide_images, __('Do not embed media') ],
+ cache_images: [ feed.cache_images, __('Cache media') ],
+ mark_unread_on_update: [ feed.mark_unread_on_update, __('Mark updated articles as unread') ]
+ };
+
dialog.attr('content',
`
- <div dojoType="dijit.layout.TabContainer" style="height : 450px">
- <div dojoType="dijit.layout.ContentPane" title="${__('General')}">
+ <form onsubmit="return false">
+ <div dojoType="dijit.layout.TabContainer" style="height : 450px">
+ <div dojoType="dijit.layout.ContentPane" title="${__('General')}">
- ${App.FormFields.hidden_tag("id", feed_id)}
- ${App.FormFields.hidden_tag("op", "pref-feeds")}
- ${App.FormFields.hidden_tag("method", "editSave")}
-
- <section>
- <fieldset>
- <input dojoType='dijit.form.ValidationTextBox' required='1'
- placeHolder="${__("Feed Title")}"
- style='font-size : 16px; width: 500px' name='title' value="${App.escapeHtml(feed.title)}">
- </fieldset>
-
- <fieldset>
- <label>${__('URL:')}</label>
- <input dojoType='dijit.form.ValidationTextBox' required='1'
- placeHolder="${__("Feed URL")}"
- regExp='^(http|https)://.*' style='width : 300px'
- name='feed_url' value="${App.escapeHtml(feed.feed_url)}">
-
- ${feed.last_error ?
- `<i class="material-icons"
- title="${App.escapeHtml(feed.last_error)}">error</i>
- ` : ""}
- </fieldset>
+ ${App.FormFields.hidden_tag("id", feed_id)}
+ ${App.FormFields.hidden_tag("op", "pref-feeds")}
+ ${App.FormFields.hidden_tag("method", "editSave")}
- ${reply.cats.enabled ?
- `
+ <section>
<fieldset>
- <label>${__('Place in category:')}</label>
- ${reply.cats.select}
+ <input dojoType='dijit.form.ValidationTextBox' required='1'
+ placeHolder="${__("Feed Title")}"
+ style='font-size : 16px; width: 500px' name='title' value="${App.escapeHtml(feed.title)}">
</fieldset>
- ` : ""}
-
- <fieldset>
- <label>${__('Site URL:')}</label>
- <input dojoType='dijit.form.ValidationTextBox' required='1'
- placeHolder="${__("Site URL")}"
- regExp='^(http|https)://.*' style='width : 300px'
- name='site_url' value="${App.escapeHtml(feed.site_url)}">
- </fieldset>
-
- ${reply.lang.enabled ?
- `
+
<fieldset>
- <label>${__('Language:')}</label>
- ${App.FormFields.select_tag("feed_language", feed.feed_language, reply.lang.all)}
+ <label>${__('URL:')}</label>
+ <input dojoType='dijit.form.ValidationTextBox' required='1'
+ placeHolder="${__("Feed URL")}"
+ regExp='^(http|https)://.*' style='width : 300px'
+ name='feed_url' value="${App.escapeHtml(feed.feed_url)}">
+
+ ${feed.last_error ?
+ `<i class="material-icons"
+ title="${App.escapeHtml(feed.last_error)}">error</i>
+ ` : ""}
</fieldset>
- ` : ""}
-
- <hr/>
-
- <fieldset>
- <label>${__("Update interval:")}</label>
- ${App.FormFields.select_hash("update_interval", feed.update_interval, reply.intervals.update)}
- </fieldset>
- <fieldset>
- <label>${__('Article purging:')}</label>
-
- ${App.FormFields.select_hash("purge_interval",
- feed.purge_interval,
- reply.intervals.purge,
- reply.force_purge ? {disabled: 1} : {})}
-
- </fieldset>
- </section>
- </div>
- <div dojoType="dijit.layout.ContentPane" title="${__('Authentication')}">
- <section>
- <fieldset>
- <label>${__("Login:")}</label>
- <input dojoType='dijit.form.TextBox'
- autocomplete='new-password'
- name='auth_login' value="${App.escapeHtml(feed.auth_login)}">
- </fieldset>
- <fieldset>
- <label>${__("Password:")}</label>
- <input dojoType='dijit.form.TextBox' type='password' name='auth_pass'
- autocomplete='new-password'
- value="${App.escapeHtml(feed.auth_pass)}">
- </fieldset>
- </section>
- </div>
- <div dojoType="dijit.layout.ContentPane" title="'.__('Options').'">
- <section class='narrow'>
-
- $include_in_digest = $row["include_in_digest"];
-
- if ($include_in_digest) {
- $checked = "checked="1"
- } else {
- $checked = "
- }
-
- <fieldset class='narrow'>
-
- <label class='checkbox'><input dojoType="dijit.form.CheckBox" type="checkbox" id="include_in_digest"
- name="include_in_digest"
- $checked> ".__('Include in e-mail digest')."</label>
-
- </fieldset>
-
- $always_display_enclosures = $row["always_display_enclosures"];
-
- if ($always_display_enclosures) {
- $checked = "checked
- } else {
- $checked = "
- }
-
- <fieldset class='narrow'>
-
- <label class='checkbox'><input dojoType="dijit.form.CheckBox" type="checkbox" id="always_display_enclosures"
- name="always_display_enclosures"
- $checked> ".__('Always display image attachments')."</label>
-
- </fieldset>
-
- $hide_images = $row["hide_images"];
-
- if ($hide_images) {
- $checked = "checked="1"
- } else {
- $checked = "
- }
-
- <fieldset class='narrow'>
-
- <label class='checkbox'><input dojoType='dijit.form.CheckBox' type='checkbox' id='hide_images'
- name='hide_images' $checked> ".__('Do not embed media')."</label>
-
- </fieldset>
-
- $cache_images = $row["cache_images"];
-
- if ($cache_images) {
- $checked = "checked="1"
- } else {
- $checked = "
- }
-
- <fieldset class='narrow'>
-
- <label class='checkbox'><input dojoType='dijit.form.CheckBox' type='checkbox' id='cache_images'
- name='cache_images' $checked> ". __('Cache media')."</label>
-
- </fieldset>
-
- $mark_unread_on_update = $row["mark_unread_on_update"];
-
- if ($mark_unread_on_update) {
- $checked = "checked
- } else {
- $checked = "
- }
+ ${reply.cats.enabled ?
+ `
+ <fieldset>
+ <label>${__('Place in category:')}</label>
+ ${reply.cats.select}
+ </fieldset>
+ ` : ""}
- <fieldset class='narrow'>
+ <fieldset>
+ <label>${__('Site URL:')}</label>
+ <input dojoType='dijit.form.ValidationTextBox' required='1'
+ placeHolder="${__("Site URL")}"
+ regExp='^(http|https)://.*' style='width : 300px'
+ name='site_url' value="${App.escapeHtml(feed.site_url)}">
+ </fieldset>
- <label class='checkbox'><input dojoType='dijit.form.CheckBox' type='checkbox' id='mark_unread_on_update'
- name='mark_unread_on_update' $checked> ".__('Mark updated articles as unread')."</label>
+ ${reply.lang.enabled ?
+ `
+ <fieldset>
+ <label>${__('Language:')}</label>
+ ${App.FormFields.select_tag("feed_language",
+ feed.feed_language ? feed.feed_language : reply.lang.default,
+ reply.lang.all)}
+ </fieldset>
+ ` : ""}
- </fieldset>
+ <hr/>
- </div>
+ <fieldset>
+ <label>${__("Update interval:")}</label>
+ ${App.FormFields.select_hash("update_interval", feed.update_interval, reply.intervals.update)}
+ </fieldset>
+ <fieldset>
+ <label>${__('Article purging:')}</label>
- <div dojoType="dijit.layout.ContentPane" title="${__('Icon')}">
+ ${App.FormFields.select_hash("purge_interval",
+ feed.purge_interval,
+ reply.intervals.purge,
+ reply.force_purge ? {disabled: 1} : {})}
- <img class='feedIcon feed-editor-icon' src="${feed.icon ? App.escapeHtml(feed.icon) : ""}">
+ </fieldset>
+ </section>
+ </div>
+ <div dojoType="dijit.layout.ContentPane" title="${__('Authentication')}">
+ <section>
+ <fieldset>
+ <label>${__("Login:")}</label>
+ <input dojoType='dijit.form.TextBox'
+ autocomplete='new-password'
+ name='auth_login' value="${App.escapeHtml(feed.auth_login)}">
+ </fieldset>
+ <fieldset>
+ <label>${__("Password:")}</label>
+ <input dojoType='dijit.form.TextBox' type='password' name='auth_pass'
+ autocomplete='new-password'
+ value="${App.escapeHtml(feed.auth_pass)}">
+ </fieldset>
+ </section>
+ </div>
+ <div dojoType="dijit.layout.ContentPane" title="${__('Options')}">
+ <section class="narrow">
+ ${Object.keys(options).map((name) =>
+ `
+ <fieldset class='narrow'>
+ <label class="checkbox">
+ ${App.FormFields.checkbox_tag(name, options[name][0])}
+ ${options[name][1]}
+ </label>
+ </fieldset>
+ `).join("")}
+ </section>
+ </div>
+ <div dojoType="dijit.layout.ContentPane" title="${__('Icon')}">
+ <div><img class='feedIcon' style="${feed.icon ? "" : "display : none"}" src="${feed.icon ? App.escapeHtml(feed.icon) : ""}"></div>
- <form onsubmit="return false" id="feed_icon_upload_form" enctype="multipart/form-data" method="post">
- <label class="dijitButton">${__("Choose file...")}
- <input style="display: none" id="icon_file" size="10" name="icon_file" type="file">
+ <label class="dijitButton">${__("Upload new icon...")}
+ <input style="display: none" type="file" onchange="App.dialogOf(this).uploadIcon(this)">
</label>
- ${App.FormFields.hidden_tag("op", "pref-feeds")}
- ${App.FormFields.hidden_tag("feed_id", feed_id)}
- ${App.FormFields.hidden_tag("method", "uploadIcon")}
- ${App.FormFields.hidden_tag("csrf_token", App.getInitParam("csrf_token"))}
-
- ${App.FormFields.submit_tag(__("Replace"), {onclick: "return CommonDialogs.uploadFeedIcon()"})}
- ${App.FormFields.submit_tag(__("Remove"), {class: "alt-danger", onclick: "return CommonDialogs.removeFeedIcon("+feed_id+")"})}
- </form>
- </div>
-
- <div dojoType="dijit.layout.ContentPane" title="${__('Plugins')}">
- ${reply.plugin_data}
- </div>
-
+ ${App.FormFields.submit_tag(__("Remove"), {class: "alt-danger", onclick: "App.dialogOf(this).removeIcon("+feed_id+")"})}
+ </div>
+ <div dojoType="dijit.layout.ContentPane" title="${__('Plugins')}">
+ ${reply.plugin_data}
+ </div>
</div>
-
- <footer>
- ${App.FormFields.button_tag(__("Unsubscribe"), "", {class: "pull-left alt-danger", onclick: "App.dialogOf(this).unsubscribe()"})}
- ${App.FormFields.submit_tag(__("Save"), {onclick: "return App.dialogOf(this).execute()"})}
- ${App.FormFields.cancel_dialog_tag(__("Cancel"))}
- </footer>
+ <footer>
+ ${App.FormFields.button_tag(__("Unsubscribe"), "", {class: "pull-left alt-danger", onclick: "App.dialogOf(this).unsubscribe()"})}
+ ${App.FormFields.submit_tag(__("Save"), {onclick: "App.dialogOf(this).execute()"})}
+ ${App.FormFields.cancel_dialog_tag(__("Cancel"))}
+ </footer>
+ </form>
`);
})
});