From f89924f7a19871e26d5805a6c1863903c6e474bf Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Sun, 2 Dec 2018 18:38:27 +0300 Subject: set use strict on JS modules; remove some mostly useless stuff like get_minified_js() --- js/Article.js | 2 + js/ArticleCache.js | 2 + js/CommonDialogs.js | 2 + js/CommonFilters.js | 2 + js/Feeds.js | 2 + js/Headlines.js | 4 +- js/PluginHost.js | 4 +- js/PrefUsers.js | 2 + js/Utils.js | 8 +- js/common.js | 493 ++++++++++++++++++++++++++++++++++++++++++++++++++++ js/functions.js | 492 --------------------------------------------------- js/prefs.js | 1 + js/tt-rss.js | 1 + 13 files changed, 513 insertions(+), 502 deletions(-) create mode 100755 js/common.js delete mode 100755 js/functions.js (limited to 'js') diff --git a/js/Article.js b/js/Article.js index 89bb3b3af..0e1318948 100644 --- a/js/Article.js +++ b/js/Article.js @@ -1,3 +1,5 @@ +'use strict' +/* global __, ngettext */ define(["dojo/_base/declare"], function (declare) { return declare("fox.Article", null, { _active_article_id: 0, diff --git a/js/ArticleCache.js b/js/ArticleCache.js index fbba1f679..a4e8e091f 100644 --- a/js/ArticleCache.js +++ b/js/ArticleCache.js @@ -1,3 +1,5 @@ +'use strict' +/* global __, ngettext */ define(["dojo/_base/declare"], function (declare) { return declare("fox.ArticleCache", null, { has_storage: 'sessionStorage' in window && window['sessionStorage'] !== null, diff --git a/js/CommonDialogs.js b/js/CommonDialogs.js index 757f84f81..d8733e1c2 100644 --- a/js/CommonDialogs.js +++ b/js/CommonDialogs.js @@ -1,3 +1,5 @@ +'use strict' +/* global __, ngettext */ define(["dojo/_base/declare"], function (declare) { return declare("fox.CommonDialogs", null, { quickAddFeed: function() { diff --git a/js/CommonFilters.js b/js/CommonFilters.js index 28a151690..3f508ef71 100644 --- a/js/CommonFilters.js +++ b/js/CommonFilters.js @@ -1,3 +1,5 @@ +'use strict' +/* global __, ngettext */ define(["dojo/_base/declare"], function (declare) { return declare("fox.CommonFilters", null, { filterDlgCheckAction: function(sender) { diff --git a/js/Feeds.js b/js/Feeds.js index a461ab7d2..c7db1aee5 100644 --- a/js/Feeds.js +++ b/js/Feeds.js @@ -1,3 +1,5 @@ +'use strict' +/* global __, ngettext */ define(["dojo/_base/declare"], function (declare) { return declare("fox.Feeds", null, { counters_last_request: 0, diff --git a/js/Headlines.js b/js/Headlines.js index 32bf222a7..d5f680f85 100755 --- a/js/Headlines.js +++ b/js/Headlines.js @@ -1,5 +1,5 @@ -/* global dijit, __, ngettext, notify */ - +'use strict'; +/* global __, ngettext */ define(["dojo/_base/declare"], function (declare) { return declare("fox.Headlines", null, { vgroup_last_feed: undefined, diff --git a/js/PluginHost.js b/js/PluginHost.js index a41694f34..9dbd91756 100644 --- a/js/PluginHost.js +++ b/js/PluginHost.js @@ -19,10 +19,10 @@ const PluginHost = { this.hooks[name].push(callback); }, run: function (name, args) { - console.warn('PluginHost::run ' + name); + //console.warn('PluginHost::run ' + name); if (typeof(this.hooks[name]) != 'undefined') - for (var i = 0; i < this.hooks[name].length; i++) + for (let i = 0; i < this.hooks[name].length; i++) if (!this.hooks[name][i](args)) break; } }; diff --git a/js/PrefUsers.js b/js/PrefUsers.js index aa3c2826d..891af8ddb 100644 --- a/js/PrefUsers.js +++ b/js/PrefUsers.js @@ -1,3 +1,5 @@ +'use strict' +/* global __, ngettext */ define(["dojo/_base/declare"], function (declare) { return declare("fox.PrefUsers", null, { diff --git a/js/Utils.js b/js/Utils.js index 204b3189c..8778143f2 100644 --- a/js/Utils.js +++ b/js/Utils.js @@ -1,3 +1,5 @@ +'use strict' +/* global __, ngettext */ define(["dojo/_base/declare"], function (declare) { return declare("fox.Utils", null, { _rpc_seq: 0, @@ -235,12 +237,6 @@ define(["dojo/_base/declare"], function (declare) { console.log("RI:", k, "=>", v); - if (k == "dep_ts" && parseInt(getInitParam("dep_ts")) > 0) { - if (parseInt(getInitParam("dep_ts")) < parseInt(v) && getInitParam("reload_on_ts_change")) { - window.location.reload(); - } - } - if (k == "daemon_is_running" && v != 1) { notify_error("Update daemon is not running.", true); return; diff --git a/js/common.js b/js/common.js new file mode 100755 index 000000000..b63257099 --- /dev/null +++ b/js/common.js @@ -0,0 +1,493 @@ +'use strict' +/* global dijit, __ */ + +let init_params = {}; +let _label_base_index = -1024; +let loading_progress = 0; +let notify_hide_timerid = false; + +Ajax.Base.prototype.initialize = Ajax.Base.prototype.initialize.wrap( + function (callOriginal, options) { + + if (getInitParam("csrf_token") != undefined) { + Object.extend(options, options || { }); + + if (Object.isString(options.parameters)) + options.parameters = options.parameters.toQueryParams(); + else if (Object.isHash(options.parameters)) + options.parameters = options.parameters.toObject(); + + options.parameters["csrf_token"] = getInitParam("csrf_token"); + } + + return callOriginal(options); + } +); + +/* xhr shorthand helpers */ + +function xhrPost(url, params, complete) { + console.log("xhrPost:", params); + return new Ajax.Request(url, { + parameters: params, + onComplete: complete + }); +} + +function xhrJson(url, params, complete) { + return xhrPost(url, params, (reply) => { + try { + const obj = JSON.parse(reply.responseText); + complete(obj); + } catch (e) { + console.error("xhrJson", e, reply); + complete(null); + } + + }) +} + +/* add method to remove element from array */ +Array.prototype.remove = function(s) { + for (let i=0; i < this.length; i++) { + if (s == this[i]) this.splice(i, 1); + } +}; + +const Lists = { + onRowChecked: function(elem) { + const checked = elem.domNode ? elem.attr("checked") : elem.checked; + // account for dojo checkboxes + elem = elem.domNode || elem; + + const row = elem.up("li"); + + if (row) + checked ? row.addClassName("Selected") : row.removeClassName("Selected"); + } +}; + +// noinspection JSUnusedGlobalSymbols +const Tables = { + onRowChecked: function(elem) { + // account for dojo checkboxes + const checked = elem.domNode ? elem.attr("checked") : elem.checked; + elem = elem.domNode || elem; + + const row = elem.up("tr"); + + if (row) + checked ? row.addClassName("Selected") : row.removeClassName("Selected"); + + }, + select: function(elemId, selected) { + $(elemId).select("tr").each((row) => { + const checkNode = row.select(".dijitCheckBox,input[type=checkbox]")[0]; + if (checkNode) { + const widget = dijit.getEnclosingWidget(checkNode); + + if (widget) { + widget.attr("checked", selected); + } else { + checkNode.checked = selected; + } + + this.onRowChecked(widget); + } + }); + }, + getSelected: function(elemId) { + const rv = []; + + $(elemId).select("tr").each((row) => { + if (row.hasClassName("Selected")) { + // either older prefix-XXX notation or separate attribute + const rowId = row.getAttribute("data-row-id") || row.id.replace(/^[A-Z]*?-/, ""); + + if (!isNaN(rowId)) + rv.push(parseInt(rowId)); + } + }); + + return rv; + } +}; + +function report_error(message, filename, lineno, colno, error) { + exception_error(error, null, filename, lineno); +} + +function exception_error(e, e_compat, filename, lineno, colno) { + if (typeof e == "string") e = e_compat; + + if (!e) return; // no exception object, nothing to report. + + try { + console.error(e); + const msg = e.toString(); + + try { + xhrPost("backend.php", + {op: "rpc", method: "log", + file: e.fileName ? e.fileName : filename, + line: e.lineNumber ? e.lineNumber : lineno, + msg: msg, context: e.stack}, + (transport) => { + console.warn(transport.responseText); + }); + + } catch (e) { + console.error("Exception while trying to log the error.", e); + } + + let content = "

" + msg + "

"; + + if (e.stack) { + content += "
Stack trace:
" + + ""; + } + + content += "
"; + + content += "
"; + + content += ""; + content += "
"; + + if (dijit.byId("exceptionDlg")) + dijit.byId("exceptionDlg").destroyRecursive(); + + const dialog = new dijit.Dialog({ + id: "exceptionDlg", + title: "Unhandled exception", + style: "width: 600px", + content: content}); + + dialog.show(); + + } catch (ei) { + console.error("Exception while trying to report an exception:", ei); + console.error("Original exception:", e); + + alert("Exception occured while trying to report an exception.\n" + + ei.stack + "\n\nOriginal exception:\n" + e.stack); + } + +} + +function param_escape(arg) { + return encodeURIComponent(arg); +} + +function notify_real(msg, no_hide, n_type) { + + const n = $("notify"); + + if (!n) return; + + if (notify_hide_timerid) { + window.clearTimeout(notify_hide_timerid); + } + + if (msg == "") { + if (n.hasClassName("visible")) { + notify_hide_timerid = window.setTimeout(function() { + n.removeClassName("visible") }, 0); + } + return; + } + + /* types: + + 1 - generic + 2 - progress + 3 - error + 4 - info + + */ + + msg = " " + __(msg) + ""; + + if (n_type == 2) { + msg = "" + msg; + no_hide = true; + } else if (n_type == 3) { + msg = "" + msg; + } else if (n_type == 4) { + msg = "" + msg; + } + + msg += " "; + + n.innerHTML = msg; + + window.setTimeout(function() { + // goddamnit firefox + if (n_type == 2) { + n.className = "notify notify_progress visible"; + } else if (n_type == 3) { + n.className = "notify notify_error visible"; + msg = "" + msg; + } else if (n_type == 4) { + n.className = "notify notify_info visible"; + } else { + n.className = "notify visible"; + } + + if (!no_hide) { + notify_hide_timerid = window.setTimeout(function() { + n.removeClassName("visible") }, 5*1000); + } + + }, 10); + +} + +function notify(msg, no_hide) { + notify_real(msg, no_hide, 1); +} + +function notify_progress(msg, no_hide) { + notify_real(msg, no_hide, 2); +} + +function notify_error(msg, no_hide) { + notify_real(msg, no_hide, 3); + +} + +function notify_info(msg, no_hide) { + notify_real(msg, no_hide, 4); +} + +function setCookie(name, value, lifetime, path, domain, secure) { + + let d = false; + + if (lifetime) { + d = new Date(); + d.setTime(d.getTime() + (lifetime * 1000)); + } + + console.log("setCookie: " + name + " => " + value + ": " + d); + + int_setCookie(name, value, d, path, domain, secure); + +} + +function int_setCookie(name, value, expires, path, domain, secure) { + document.cookie= name + "=" + escape(value) + + ((expires) ? "; expires=" + expires.toGMTString() : "") + + ((path) ? "; path=" + path : "") + + ((domain) ? "; domain=" + domain : "") + + ((secure) ? "; secure" : ""); +} + +function delCookie(name, path, domain) { + if (getCookie(name)) { + document.cookie = name + "=" + + ((path) ? ";path=" + path : "") + + ((domain) ? ";domain=" + domain : "" ) + + ";expires=Thu, 01-Jan-1970 00:00:01 GMT"; + } +} + + +function getCookie(name) { + + const dc = document.cookie; + const prefix = name + "="; + let begin = dc.indexOf("; " + prefix); + if (begin == -1) { + begin = dc.indexOf(prefix); + if (begin != 0) return null; + } + else { + begin += 2; + } + let end = document.cookie.indexOf(";", begin); + if (end == -1) { + end = dc.length; + } + return unescape(dc.substring(begin + prefix.length, end)); +} + +// noinspection JSUnusedGlobalSymbols +function displayIfChecked(checkbox, elemId) { + if (checkbox.checked) { + Effect.Appear(elemId, {duration : 0.5}); + } else { + Effect.Fade(elemId, {duration : 0.5}); + } +} + +// noinspection JSUnusedGlobalSymbols +function closeInfoBox() { + const dialog = dijit.byId("infoBox"); + + if (dialog) dialog.hide(); + + return false; +} + +function getInitParam(key) { + return init_params[key]; +} + +function setInitParam(key, value) { + init_params[key] = value; +} + +function fatalError(code, msg, ext_info) { + if (code == 6) { + window.location.href = "index.php"; + } else if (code == 5) { + window.location.href = "public.php?op=dbupdate"; + } else { + + if (msg == "") msg = "Unknown error"; + + if (ext_info) { + if (ext_info.responseText) { + ext_info = ext_info.responseText; + } + } + + /* global ERRORS */ + if (ERRORS && ERRORS[code] && !msg) { + msg = ERRORS[code]; + } + + let content = "
Error code: " + code + "
" + + "

" + msg + "

"; + + if (ext_info) { + content = content + "
Additional information:
" + + ""; + } + + const dialog = new dijit.Dialog({ + title: "Fatal error", + style: "width: 600px", + content: content}); + + dialog.show(); + + } + + return false; + +} + +/* function strip_tags(s) { + return s.replace(/<\/?[^>]+(>|$)/g, ""); +} */ + +// noinspection JSUnusedGlobalSymbols +function uploadIconHandler(rc) { + switch (rc) { + case 0: + notify_info("Upload complete."); + if (App.isPrefs()) { + Feeds.reload(); + } else { + setTimeout('Feeds.reload(false, false)', 50); + } + break; + case 1: + notify_error("Upload failed: icon is too big."); + break; + case 2: + notify_error("Upload failed."); + break; + } +} + +// noinspection JSUnusedGlobalSymbols +function removeFeedIcon(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()) { + Feeds.reload(); + } else { + setTimeout('Feeds.reload(false, false)', 50); + } + }); + } + + return false; +} + +// noinspection JSUnusedGlobalSymbols +function uploadFeedIcon() { + 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); + return true; + } + + return false; +} + +// noinspection JSUnusedGlobalSymbols +function label_to_feed_id(label) { + return _label_base_index - 1 - Math.abs(label); +} + +// noinspection JSUnusedGlobalSymbols +function feed_to_label_id(feed) { + return _label_base_index - 1 + Math.abs(feed); +} + +// http://stackoverflow.com/questions/6251937/how-to-get-selecteduser-highlighted-text-in-contenteditable-element-and-replac +function getSelectionText() { + let text = ""; + + if (typeof window.getSelection != "undefined") { + const sel = window.getSelection(); + if (sel.rangeCount) { + const container = document.createElement("div"); + for (let i = 0, len = sel.rangeCount; i < len; ++i) { + container.appendChild(sel.getRangeAt(i).cloneContents()); + } + text = container.innerHTML; + } + } else if (typeof document.selection != "undefined") { + if (document.selection.type == "Text") { + text = document.selection.createRange().textText; + } + } + + return text.stripTags(); +} + +// noinspection JSUnusedGlobalSymbols +function popupOpenUrl(url) { + const w = window.open(""); + + w.opener = null; + w.location = url; +} + +// noinspection JSUnusedGlobalSymbols +function popupOpenArticle(id) { + const w = window.open("", + "ttrss_article_popup", + "height=900,width=900,resizable=yes,status=no,location=no,menubar=no,directories=no,scrollbars=yes,toolbar=no"); + + w.opener = null; + w.location = "backend.php?op=article&method=view&mode=raw&html=1&zoom=1&id=" + id + "&csrf_token=" + getInitParam("csrf_token"); +} diff --git a/js/functions.js b/js/functions.js deleted file mode 100755 index 0d52358ec..000000000 --- a/js/functions.js +++ /dev/null @@ -1,492 +0,0 @@ -/* global dijit, __ */ - -let init_params = {}; -let _label_base_index = -1024; -let loading_progress = 0; -let notify_hide_timerid = false; - -Ajax.Base.prototype.initialize = Ajax.Base.prototype.initialize.wrap( - function (callOriginal, options) { - - if (getInitParam("csrf_token") != undefined) { - Object.extend(options, options || { }); - - if (Object.isString(options.parameters)) - options.parameters = options.parameters.toQueryParams(); - else if (Object.isHash(options.parameters)) - options.parameters = options.parameters.toObject(); - - options.parameters["csrf_token"] = getInitParam("csrf_token"); - } - - return callOriginal(options); - } -); - -/* xhr shorthand helpers */ - -function xhrPost(url, params, complete) { - console.log("xhrPost:", params); - return new Ajax.Request(url, { - parameters: params, - onComplete: complete - }); -} - -function xhrJson(url, params, complete) { - return xhrPost(url, params, (reply) => { - try { - const obj = JSON.parse(reply.responseText); - complete(obj); - } catch (e) { - console.error("xhrJson", e, reply); - complete(null); - } - - }) -} - -/* add method to remove element from array */ -Array.prototype.remove = function(s) { - for (let i=0; i < this.length; i++) { - if (s == this[i]) this.splice(i, 1); - } -}; - -const Lists = { - onRowChecked: function(elem) { - const checked = elem.domNode ? elem.attr("checked") : elem.checked; - // account for dojo checkboxes - elem = elem.domNode || elem; - - const row = elem.up("li"); - - if (row) - checked ? row.addClassName("Selected") : row.removeClassName("Selected"); - } -}; - -// noinspection JSUnusedGlobalSymbols -const Tables = { - onRowChecked: function(elem) { - // account for dojo checkboxes - const checked = elem.domNode ? elem.attr("checked") : elem.checked; - elem = elem.domNode || elem; - - const row = elem.up("tr"); - - if (row) - checked ? row.addClassName("Selected") : row.removeClassName("Selected"); - - }, - select: function(elemId, selected) { - $(elemId).select("tr").each((row) => { - const checkNode = row.select(".dijitCheckBox,input[type=checkbox]")[0]; - if (checkNode) { - const widget = dijit.getEnclosingWidget(checkNode); - - if (widget) { - widget.attr("checked", selected); - } else { - checkNode.checked = selected; - } - - this.onRowChecked(widget); - } - }); - }, - getSelected: function(elemId) { - const rv = []; - - $(elemId).select("tr").each((row) => { - if (row.hasClassName("Selected")) { - // either older prefix-XXX notation or separate attribute - const rowId = row.getAttribute("data-row-id") || row.id.replace(/^[A-Z]*?-/, ""); - - if (!isNaN(rowId)) - rv.push(parseInt(rowId)); - } - }); - - return rv; - } -}; - -function report_error(message, filename, lineno, colno, error) { - exception_error(error, null, filename, lineno); -} - -function exception_error(e, e_compat, filename, lineno, colno) { - if (typeof e == "string") e = e_compat; - - if (!e) return; // no exception object, nothing to report. - - try { - console.error(e); - const msg = e.toString(); - - try { - xhrPost("backend.php", - {op: "rpc", method: "log", - file: e.fileName ? e.fileName : filename, - line: e.lineNumber ? e.lineNumber : lineno, - msg: msg, context: e.stack}, - (transport) => { - console.warn(transport.responseText); - }); - - } catch (e) { - console.error("Exception while trying to log the error.", e); - } - - let content = "

" + msg + "

"; - - if (e.stack) { - content += "
Stack trace:
" + - ""; - } - - content += "
"; - - content += "
"; - - content += ""; - content += "
"; - - if (dijit.byId("exceptionDlg")) - dijit.byId("exceptionDlg").destroyRecursive(); - - const dialog = new dijit.Dialog({ - id: "exceptionDlg", - title: "Unhandled exception", - style: "width: 600px", - content: content}); - - dialog.show(); - - } catch (ei) { - console.error("Exception while trying to report an exception:", ei); - console.error("Original exception:", e); - - alert("Exception occured while trying to report an exception.\n" + - ei.stack + "\n\nOriginal exception:\n" + e.stack); - } - -} - -function param_escape(arg) { - return encodeURIComponent(arg); -} - -function notify_real(msg, no_hide, n_type) { - - const n = $("notify"); - - if (!n) return; - - if (notify_hide_timerid) { - window.clearTimeout(notify_hide_timerid); - } - - if (msg == "") { - if (n.hasClassName("visible")) { - notify_hide_timerid = window.setTimeout(function() { - n.removeClassName("visible") }, 0); - } - return; - } - - /* types: - - 1 - generic - 2 - progress - 3 - error - 4 - info - - */ - - msg = " " + __(msg) + ""; - - if (n_type == 2) { - msg = "" + msg; - no_hide = true; - } else if (n_type == 3) { - msg = "" + msg; - } else if (n_type == 4) { - msg = "" + msg; - } - - msg += " "; - - n.innerHTML = msg; - - window.setTimeout(function() { - // goddamnit firefox - if (n_type == 2) { - n.className = "notify notify_progress visible"; - } else if (n_type == 3) { - n.className = "notify notify_error visible"; - msg = "" + msg; - } else if (n_type == 4) { - n.className = "notify notify_info visible"; - } else { - n.className = "notify visible"; - } - - if (!no_hide) { - notify_hide_timerid = window.setTimeout(function() { - n.removeClassName("visible") }, 5*1000); - } - - }, 10); - -} - -function notify(msg, no_hide) { - notify_real(msg, no_hide, 1); -} - -function notify_progress(msg, no_hide) { - notify_real(msg, no_hide, 2); -} - -function notify_error(msg, no_hide) { - notify_real(msg, no_hide, 3); - -} - -function notify_info(msg, no_hide) { - notify_real(msg, no_hide, 4); -} - -function setCookie(name, value, lifetime, path, domain, secure) { - - let d = false; - - if (lifetime) { - d = new Date(); - d.setTime(d.getTime() + (lifetime * 1000)); - } - - console.log("setCookie: " + name + " => " + value + ": " + d); - - int_setCookie(name, value, d, path, domain, secure); - -} - -function int_setCookie(name, value, expires, path, domain, secure) { - document.cookie= name + "=" + escape(value) + - ((expires) ? "; expires=" + expires.toGMTString() : "") + - ((path) ? "; path=" + path : "") + - ((domain) ? "; domain=" + domain : "") + - ((secure) ? "; secure" : ""); -} - -function delCookie(name, path, domain) { - if (getCookie(name)) { - document.cookie = name + "=" + - ((path) ? ";path=" + path : "") + - ((domain) ? ";domain=" + domain : "" ) + - ";expires=Thu, 01-Jan-1970 00:00:01 GMT"; - } -} - - -function getCookie(name) { - - const dc = document.cookie; - const prefix = name + "="; - let begin = dc.indexOf("; " + prefix); - if (begin == -1) { - begin = dc.indexOf(prefix); - if (begin != 0) return null; - } - else { - begin += 2; - } - let end = document.cookie.indexOf(";", begin); - if (end == -1) { - end = dc.length; - } - return unescape(dc.substring(begin + prefix.length, end)); -} - -// noinspection JSUnusedGlobalSymbols -function displayIfChecked(checkbox, elemId) { - if (checkbox.checked) { - Effect.Appear(elemId, {duration : 0.5}); - } else { - Effect.Fade(elemId, {duration : 0.5}); - } -} - -// noinspection JSUnusedGlobalSymbols -function closeInfoBox() { - const dialog = dijit.byId("infoBox"); - - if (dialog) dialog.hide(); - - return false; -} - -function getInitParam(key) { - return init_params[key]; -} - -function setInitParam(key, value) { - init_params[key] = value; -} - -function fatalError(code, msg, ext_info) { - if (code == 6) { - window.location.href = "index.php"; - } else if (code == 5) { - window.location.href = "public.php?op=dbupdate"; - } else { - - if (msg == "") msg = "Unknown error"; - - if (ext_info) { - if (ext_info.responseText) { - ext_info = ext_info.responseText; - } - } - - /* global ERRORS */ - if (ERRORS && ERRORS[code] && !msg) { - msg = ERRORS[code]; - } - - let content = "
Error code: " + code + "
" + - "

" + msg + "

"; - - if (ext_info) { - content = content + "
Additional information:
" + - ""; - } - - const dialog = new dijit.Dialog({ - title: "Fatal error", - style: "width: 600px", - content: content}); - - dialog.show(); - - } - - return false; - -} - -/* function strip_tags(s) { - return s.replace(/<\/?[^>]+(>|$)/g, ""); -} */ - -// noinspection JSUnusedGlobalSymbols -function uploadIconHandler(rc) { - switch (rc) { - case 0: - notify_info("Upload complete."); - if (App.isPrefs()) { - Feeds.reload(); - } else { - setTimeout('Feeds.reload(false, false)', 50); - } - break; - case 1: - notify_error("Upload failed: icon is too big."); - break; - case 2: - notify_error("Upload failed."); - break; - } -} - -// noinspection JSUnusedGlobalSymbols -function removeFeedIcon(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()) { - Feeds.reload(); - } else { - setTimeout('Feeds.reload(false, false)', 50); - } - }); - } - - return false; -} - -// noinspection JSUnusedGlobalSymbols -function uploadFeedIcon() { - 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); - return true; - } - - return false; -} - -// noinspection JSUnusedGlobalSymbols -function label_to_feed_id(label) { - return _label_base_index - 1 - Math.abs(label); -} - -// noinspection JSUnusedGlobalSymbols -function feed_to_label_id(feed) { - return _label_base_index - 1 + Math.abs(feed); -} - -// http://stackoverflow.com/questions/6251937/how-to-get-selecteduser-highlighted-text-in-contenteditable-element-and-replac -function getSelectionText() { - let text = ""; - - if (typeof window.getSelection != "undefined") { - const sel = window.getSelection(); - if (sel.rangeCount) { - const container = document.createElement("div"); - for (let i = 0, len = sel.rangeCount; i < len; ++i) { - container.appendChild(sel.getRangeAt(i).cloneContents()); - } - text = container.innerHTML; - } - } else if (typeof document.selection != "undefined") { - if (document.selection.type == "Text") { - text = document.selection.createRange().textText; - } - } - - return text.stripTags(); -} - -// noinspection JSUnusedGlobalSymbols -function popupOpenUrl(url) { - const w = window.open(""); - - w.opener = null; - w.location = url; -} - -// noinspection JSUnusedGlobalSymbols -function popupOpenArticle(id) { - const w = window.open("", - "ttrss_article_popup", - "height=900,width=900,resizable=yes,status=no,location=no,menubar=no,directories=no,scrollbars=yes,toolbar=no"); - - w.opener = null; - w.location = "backend.php?op=article&method=view&mode=raw&html=1&zoom=1&id=" + id + "&csrf_token=" + getInitParam("csrf_token"); -} diff --git a/js/prefs.js b/js/prefs.js index 637bc7905..7c4021201 100755 --- a/js/prefs.js +++ b/js/prefs.js @@ -1,3 +1,4 @@ +'use strict' /* global dijit, __ */ let Utils; diff --git a/js/tt-rss.js b/js/tt-rss.js index cbae4db4c..74b8403f8 100644 --- a/js/tt-rss.js +++ b/js/tt-rss.js @@ -1,3 +1,4 @@ +'use strict' /* global dijit,__ */ let Utils; -- cgit v1.2.3-54-g00ecf