summaryrefslogtreecommitdiff
path: root/js/PrefHelpers.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/PrefHelpers.js')
-rw-r--r--js/PrefHelpers.js425
1 files changed, 261 insertions, 164 deletions
diff --git a/js/PrefHelpers.js b/js/PrefHelpers.js
index 5bb76d179..62f6d91b1 100644
--- a/js/PrefHelpers.js
+++ b/js/PrefHelpers.js
@@ -1,7 +1,7 @@
'use strict';
/* eslint-disable no-new */
-/* global __, dijit, dojo, Tables, xhrPost, Notify, xhrJson, App, fox, Effect */
+/* global __, dijit, dojo, Tables, xhrPost, Notify, xhr, App, fox */
const Helpers = {
AppPasswords: {
@@ -9,7 +9,7 @@ const Helpers = {
return Tables.getSelected("app-password-list");
},
updateContent: function(data) {
- $("app_passwords_holder").innerHTML = data;
+ App.byId("app_passwords_holder").innerHTML = data;
dojo.parser.parse("app_passwords_holder");
},
removeSelected: function() {
@@ -19,8 +19,8 @@ const Helpers = {
alert("No passwords selected.");
} else if (confirm(__("Remove selected app passwords?"))) {
- xhrPost("backend.php", {op: "pref-prefs", method: "deleteAppPassword", ids: rows.toString()}, (transport) => {
- this.updateContent(transport.responseText);
+ xhr.post("backend.php", {op: "pref-prefs", method: "deleteAppPassword", ids: rows.toString()}, (reply) => {
+ this.updateContent(reply);
Notify.close();
});
@@ -31,8 +31,8 @@ const Helpers = {
const title = prompt("Password description:")
if (title) {
- xhrPost("backend.php", {op: "pref-prefs", method: "generateAppPassword", title: title}, (transport) => {
- this.updateContent(transport.responseText);
+ xhr.post("backend.php", {op: "pref-prefs", method: "generateAppPassword", title: title}, (reply) => {
+ this.updateContent(reply);
Notify.close();
});
@@ -40,16 +40,21 @@ const Helpers = {
}
},
},
- clearFeedAccessKeys: function() {
- if (confirm(__("This will invalidate all previously generated feed URLs. Continue?"))) {
- Notify.progress("Clearing URLs...");
+ Feeds: {
+ clearFeedAccessKeys: function() {
+ if (confirm(__("This will invalidate all previously generated feed URLs. Continue?"))) {
+ Notify.progress("Clearing URLs...");
- xhrPost("backend.php", {op: "pref-feeds", method: "clearKeys"}, () => {
- Notify.info("Generated URLs cleared.");
- });
- }
+ xhr.post("backend.php", {op: "pref-feeds", method: "clearKeys"}, () => {
+ Notify.info("Generated URLs cleared.");
+ });
+ }
- return false;
+ return false;
+ },
+ },
+ System: {
+ //
},
EventLog: {
log_page: 0,
@@ -58,8 +63,13 @@ const Helpers = {
this.update();
},
update: function() {
- xhrPost("backend.php", { op: "pref-system", severity: dijit.byId("severity").attr('value'), page: Helpers.EventLog.log_page }, (transport) => {
- dijit.byId('systemTab').attr('content', transport.responseText);
+ xhr.post("backend.php", {
+ op: "pref-system",
+ severity: dijit.byId("severity").attr('value'),
+ page: Helpers.EventLog.log_page
+ }, (reply) => {
+
+ dijit.byId('systemTab').attr('content', reply);
Notify.close();
});
},
@@ -77,161 +87,216 @@ const Helpers = {
Notify.progress("Loading, please wait...");
- xhrPost("backend.php", {op: "pref-system", method: "clearLog"}, () => {
+ xhr.post("backend.php", {op: "pref-system", method: "clearLog"}, () => {
Helpers.EventLog.refresh();
});
}
},
},
- editProfiles: function() {
- const dialog = new fox.SingleUseDialog({
- id: "profileEditDlg",
- title: __("Settings Profiles"),
- getSelectedProfiles: function () {
- return Tables.getSelected("pref-profiles-list");
- },
- removeSelected: function () {
- const sel_rows = this.getSelectedProfiles();
-
- if (sel_rows.length > 0) {
- if (confirm(__("Remove selected profiles? Active and default profiles will not be removed."))) {
- Notify.progress("Removing selected profiles...", true);
-
- const query = {
- op: "rpc", method: "remprofiles",
- ids: sel_rows.toString()
- };
-
- xhrPost("backend.php", query, () => {
+ Profiles: {
+ edit: function() {
+ const dialog = new fox.SingleUseDialog({
+ id: "profileEditDlg",
+ title: __("Settings Profiles"),
+ getSelectedProfiles: function () {
+ return Tables.getSelected("pref-profiles-list");
+ },
+ removeSelected: function () {
+ const sel_rows = this.getSelectedProfiles();
+
+ if (sel_rows.length > 0) {
+ if (confirm(__("Remove selected profiles? Active and default profiles will not be removed."))) {
+ Notify.progress("Removing selected profiles...", true);
+
+ const query = {
+ op: "pref-prefs", method: "remprofiles",
+ ids: sel_rows.toString()
+ };
+
+ xhr.post("backend.php", query, () => {
+ Notify.close();
+ dialog.refresh();
+ });
+ }
+
+ } else {
+ alert(__("No profiles selected."));
+ }
+ },
+ addProfile: function () {
+ if (this.validate()) {
+ Notify.progress("Creating profile...", true);
+
+ const query = {op: "pref-prefs", method: "addprofile", title: dialog.attr('value').newprofile};
+
+ xhr.post("backend.php", query, () => {
Notify.close();
dialog.refresh();
});
- }
- } else {
- alert(__("No profiles selected."));
- }
- },
- addProfile: function () {
- if (this.validate()) {
- Notify.progress("Creating profile...", true);
-
- const query = {op: "rpc", method: "addprofile", title: dialog.attr('value').newprofile};
+ }
+ },
+ refresh: function() {
+ xhr.json("backend.php", {op: 'pref-prefs', method: 'getprofiles'}, (reply) => {
+ dialog.attr('content', `
+ <div dojoType='fox.Toolbar'>
+ <div dojoType='fox.form.DropDownButton'>
+ <span>${__('Select')}</span>
+ <div dojoType='dijit.Menu' style='display: none'>
+ <div onclick="Tables.select('pref-profiles-list', true)"
+ dojoType='dijit.MenuItem'>${__('All')}</div>
+ <div onclick="Tables.select('pref-profiles-list', false)"
+ dojoType='dijit.MenuItem'>${__('None')}</div>
+ </div>
+ </div>
+
+ <div class="pull-right">
+ <input name='newprofile' dojoType='dijit.form.ValidationTextBox' required='1'>
+ ${App.FormFields.button_tag(__('Create profile'), "", {onclick: 'App.dialogOf(this).addProfile()'})}
+ </div>
+ </div>
- xhrPost("backend.php", query, () => {
- Notify.close();
- dialog.refresh();
+ <form onsubmit='return false'>
+ <div class='panel panel-scrollable'>
+ <table width='100%' id='pref-profiles-list'>
+ ${reply.map((profile) => `
+ <tr data-row-id="${profile.id}">
+ <td width='5%'>
+ ${App.FormFields.checkbox_tag("", false, "", {onclick: 'Tables.onRowChecked(this)'})}
+ </td>
+ <td>
+ ${profile.id > 0 ?
+ `<span dojoType='dijit.InlineEditBox' width='300px' autoSave='false'
+ profile-id='${profile.id}'>${profile.title}
+ <script type='dojo/method' event='onChange' args='value'>
+ xhr.post("backend.php",
+ {op: 'pref-prefs', method: 'saveprofile', value: value, id: this.attr('profile-id')}, () => {
+ //
+ });
+ </script>
+ </span>` : `${profile.title}`}
+ ${profile.active ? __("(active)") : ""}
+ </td>
+ </tr>
+ `).join("")}
+ </table>
+ </div>
+
+ <footer>
+ ${App.FormFields.button_tag(__('Remove selected profiles'), "",
+ {class: 'pull-left alt-danger', onclick: 'App.dialogOf(this).removeSelected()'})}
+ ${App.FormFields.submit_tag(__('Activate profile'), {onclick: 'App.dialogOf(this).execute()'})}
+ ${App.FormFields.cancel_dialog_tag(__('Cancel'))}
+ </footer>
+ </form>
+ `);
});
+ },
+ execute: function () {
+ const sel_rows = this.getSelectedProfiles();
- }
- },
- refresh: function() {
- xhrPost("backend.php", {op: 'pref-prefs', method: 'editPrefProfiles'}, (transport) => {
- dialog.attr('content', transport.responseText);
- });
- },
- execute: function () {
- const sel_rows = this.getSelectedProfiles();
+ if (sel_rows.length == 1) {
+ if (confirm(__("Activate selected profile?"))) {
+ Notify.progress("Loading, please wait...");
- if (sel_rows.length == 1) {
- if (confirm(__("Activate selected profile?"))) {
- Notify.progress("Loading, please wait...");
+ xhr.post("backend.php", {op: "pref-prefs", method: "activateprofile", id: sel_rows.toString()}, () => {
+ window.location.reload();
+ });
+ }
- xhrPost("backend.php", {op: "rpc", method: "setprofile", id: sel_rows.toString()}, () => {
- window.location.reload();
- });
+ } else {
+ alert(__("Please choose a profile to activate."));
}
+ },
+ content: ""
+ });
- } else {
- alert(__("Please choose a profile to activate."));
- }
- },
- content: ""
- });
-
- dialog.refresh();
- dialog.show();
+ dialog.refresh();
+ dialog.show();
+ },
},
- customizeCSS: function() {
- xhrJson("backend.php", {op: "pref-prefs", method: "customizeCSS"}, (reply) => {
+ Prefs: {
+ customizeCSS: function() {
+ xhr.json("backend.php", {op: "pref-prefs", method: "customizeCSS"}, (reply) => {
+
+ const dialog = new fox.SingleUseDialog({
+ title: __("Customize stylesheet"),
+ apply: function() {
+ xhr.post("backend.php", this.attr('value'), () => {
+ Element.show("css_edit_apply_msg");
+ App.byId("user_css_style").innerText = this.attr('value');
+ });
+ },
+ execute: function () {
+ Notify.progress('Saving data...', true);
- const dialog = new fox.SingleUseDialog({
- title: __("Customize stylesheet"),
- apply: function() {
- xhrPost("backend.php", this.attr('value'), () => {
- new Effect.Appear("css_edit_apply_msg");
- $("user_css_style").innerText = this.attr('value');
- });
- },
- execute: function () {
- Notify.progress('Saving data...', true);
+ xhr.post("backend.php", this.attr('value'), () => {
+ window.location.reload();
+ });
+ },
+ content: `
+ <div class='alert alert-info'>
+ ${__("You can override colors, fonts and layout of your currently selected theme with custom CSS declarations here.")}
+ </div>
- xhrPost("backend.php", this.attr('value'), () => {
- window.location.reload();
- });
- },
- content: `
- <div class='alert alert-info'>
- ${__("You can override colors, fonts and layout of your currently selected theme with custom CSS declarations here.")}
- </div>
-
- ${App.FormFields.hidden('op', 'rpc')}
- ${App.FormFields.hidden('method', 'setpref')}
- ${App.FormFields.hidden('key', 'USER_STYLESHEET')}
-
- <div id='css_edit_apply_msg' style='display : none'>
- <div class='alert alert-warning'>
- ${__("User CSS has been applied, you might need to reload the page to see all changes.")}
+ ${App.FormFields.hidden_tag('op', 'rpc')}
+ ${App.FormFields.hidden_tag('method', 'setpref')}
+ ${App.FormFields.hidden_tag('key', 'USER_STYLESHEET')}
+
+ <div id='css_edit_apply_msg' style='display : none'>
+ <div class='alert alert-warning'>
+ ${__("User CSS has been applied, you might need to reload the page to see all changes.")}
+ </div>
</div>
- </div>
-
- <textarea class='panel user-css-editor' dojoType='dijit.form.SimpleTextarea'
- style='font-size : 12px;' name='value'>${reply.value}</textarea>
-
- <footer>
- <button dojoType='dijit.form.Button' class='alt-success' onclick="App.dialogOf(this).apply()">
- ${__('Apply')}
- </button>
- <button dojoType='dijit.form.Button' class='alt-primary' type='submit'>
- ${__('Save and reload')}
- </button>
- <button dojoType='dijit.form.Button' onclick="App.dialogOf(this).hide()">
- ${__('Cancel')}
- </button>
- </footer>
- `
- });
- dialog.show();
+ <textarea class='panel user-css-editor' dojoType='dijit.form.SimpleTextarea'
+ style='font-size : 12px;' name='value'>${reply.value}</textarea>
+
+ <footer>
+ <button dojoType='dijit.form.Button' class='alt-success' onclick="App.dialogOf(this).apply()">
+ ${__('Apply')}
+ </button>
+ <button dojoType='dijit.form.Button' class='alt-primary' type='submit'>
+ ${__('Save and reload')}
+ </button>
+ <button dojoType='dijit.form.Button' onclick="App.dialogOf(this).hide()">
+ ${__('Cancel')}
+ </button>
+ </footer>
+ `
+ });
+
+ dialog.show();
- });
- },
- confirmReset: function() {
- if (confirm(__("Reset to defaults?"))) {
- xhrPost("backend.php", {op: "pref-prefs", method: "resetconfig"}, (transport) => {
- Helpers.refresh();
- Notify.info(transport.responseText);
});
- }
- },
- clearPluginData: function(name) {
- if (confirm(__("Clear stored data for this plugin?"))) {
- Notify.progress("Loading, please wait...");
+ },
+ confirmReset: function() {
+ if (confirm(__("Reset to defaults?"))) {
+ xhr.post("backend.php", {op: "pref-prefs", method: "resetconfig"}, (reply) => {
+ Helpers.Prefs.refresh();
+ Notify.info(reply);
+ });
+ }
+ },
+ clearPluginData: function(name) {
+ if (confirm(__("Clear stored data for this plugin?"))) {
+ Notify.progress("Loading, please wait...");
- xhrPost("backend.php", {op: "pref-prefs", method: "clearplugindata", name: name}, () => {
- Helpers.refresh();
+ xhr.post("backend.php", {op: "pref-prefs", method: "clearplugindata", name: name}, () => {
+ Helpers.Prefs.refresh();
+ });
+ }
+ },
+ refresh: function() {
+ xhr.post("backend.php", { op: "pref-prefs" }, (reply) => {
+ dijit.byId('prefsTab').attr('content', reply);
+ Notify.close();
});
- }
- },
- refresh: function() {
- xhrPost("backend.php", { op: "pref-prefs" }, (transport) => {
- dijit.byId('prefsTab').attr('content', transport.responseText);
- Notify.close();
- });
+ },
},
OPML: {
import: function() {
- const opml_file = $("opml_file");
+ const opml_file = App.byId("opml_file");
if (opml_file.value.length == 0) {
alert(__("Please choose an OPML file first."));
@@ -273,7 +338,7 @@ const Helpers = {
dialog.show();
};
- xhr.send(new FormData($("opml_import_form")));
+ xhr.send(new FormData(App.byId("opml_import_form")));
return false;
}
@@ -282,30 +347,62 @@ const Helpers = {
console.log("export");
window.open("backend.php?op=opml&method=export&" + dojo.formToQuery("opmlExportForm"));
},
- changeKey: function() {
- if (confirm(__("Replace current OPML publishing address with a new one?"))) {
- Notify.progress("Trying to change address...", true);
-
- xhrJson("backend.php", {op: "pref-feeds", method: "regenOPMLKey"}, (reply) => {
- if (reply) {
- const new_link = reply.link;
- const e = $('pub_opml_url');
+ publish: function() {
+ Notify.progress("Loading, please wait...", true);
- if (new_link) {
- e.href = new_link;
- e.innerHTML = new_link;
+ xhr.json("backend.php", {op: "pref-feeds", method: "getOPMLKey"}, (reply) => {
+ try {
+ const dialog = new fox.SingleUseDialog({
+ title: __("Public OPML URL"),
+ regenOPMLKey: function() {
+ if (confirm(__("Replace current OPML publishing address with a new one?"))) {
+ Notify.progress("Trying to change address...", true);
+
+ xhr.json("backend.php", {op: "pref-feeds", method: "regenOPMLKey"}, (reply) => {
+ if (reply) {
+ const new_link = reply.link;
+ const target = this.domNode.querySelector('.generated_url');
+
+ if (new_link && target) {
+ target.href = new_link;
+ target.innerHTML = new_link;
+
+ Notify.close();
+
+ } else {
+ Notify.error("Could not change feed URL.");
+ }
+ }
+ });
+ }
+ return false;
+ },
+ content: `
+ <header>${__("Your Public OPML URL is:")}</header>
+ <section>
+ <div class='panel text-center'>
+ <a class='generated_url' href="${App.escapeHtml(reply.link)}" target='_blank'>${App.escapeHtml(reply.link)}</a>
+ </div>
+ </section>
+ <footer class='text-center'>
+ <button dojoType='dijit.form.Button' onclick="return App.dialogOf(this).regenOPMLKey()">
+ ${__('Generate new URL')}
+ </button>
+ <button dojoType='dijit.form.Button' type='submit' class='alt-primary'>
+ ${__('Close this window')}
+ </button>
+ </footer>
+ `
+ });
- new Effect.Highlight(e);
+ dialog.show();
- Notify.close();
+ Notify.close();
- } else {
- Notify.error("Could not change feed URL.");
- }
- }
- });
- }
- return false;
+ } catch (e) {
+ App.Error.report(e);
+ }
+ });
},
}
};