aboutsummaryrefslogtreecommitdiff
path: root/p
diff options
context:
space:
mode:
authorGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2016-02-28 12:13:19 +0100
committerGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2016-02-28 12:13:19 +0100
commit3b2f9533c363406087cf77c56db16a120b9523c7 (patch)
tree14743e94e95a6970e5dfe06bd5414deaed25d0ee /p
parent830c5aad03ff4d0cfbde4fcf275b04de6c4f4019 (diff)
parent995cf58d249c6a2ddfd042cc5b509914295c882f (diff)
Merge pull request #1078 from Alkarex/CSP-no-inline
Content-Security-Policy
Diffstat (limited to 'p')
-rw-r--r--p/scripts/install.js76
-rw-r--r--p/scripts/main.js77
-rw-r--r--p/scripts/persona.js2
-rw-r--r--p/scripts/repartition.js72
-rw-r--r--p/scripts/stats.js56
-rw-r--r--p/themes/base-theme/template.css8
6 files changed, 279 insertions, 12 deletions
diff --git a/p/scripts/install.js b/p/scripts/install.js
new file mode 100644
index 000000000..9a49e6031
--- /dev/null
+++ b/p/scripts/install.js
@@ -0,0 +1,76 @@
+"use strict";
+
+function show_password() {
+ var button = this;
+ var passwordField = document.getElementById(button.getAttribute('data-toggle'));
+ passwordField.setAttribute('type', 'text');
+ button.className += ' active';
+ return false;
+}
+function hide_password() {
+ var button = this;
+ var passwordField = document.getElementById(button.getAttribute('data-toggle'));
+ passwordField.setAttribute('type', 'password');
+ button.className = button.className.replace(/(?:^|\s)active(?!\S)/g , '');
+ return false;
+}
+var toggles = document.getElementsByClassName('toggle-password');
+for (var i = 0 ; i < toggles.length ; i++) {
+ toggles[i].addEventListener('mousedown', show_password);
+ toggles[i].addEventListener('mouseup', hide_password);
+}
+
+function auth_type_change() {
+ var auth_type = document.getElementById('auth_type');
+ if (auth_type) {
+ var auth_value = auth_type.value,
+ password_input = document.getElementById('passwordPlain'),
+ mail_input = document.getElementById('mail_login');
+
+ if (auth_value === 'form') {
+ password_input.required = true;
+ mail_input.required = false;
+ } else if (auth_value === 'persona') {
+ password_input.required = false;
+ mail_input.required = true;
+ } else {
+ password_input.required = false;
+ mail_input.required = false;
+ }
+ }
+}
+var auth_type = document.getElementById('auth_type');
+if (auth_type) {
+ auth_type_change();
+ auth_type.addEventListener('change', auth_type_change);
+}
+
+function mySqlShowHide() {
+ var mysql = document.getElementById('mysql');
+ if (mysql) {
+ mysql.style.display = document.getElementById('type').value === 'mysql' ? 'block' : 'none';
+ if (document.getElementById('type').value !== 'mysql') {
+ document.getElementById('host').value = '';
+ document.getElementById('user').value = '';
+ document.getElementById('pass').value = '';
+ document.getElementById('base').value = '';
+ document.getElementById('prefix').value = '';
+ }
+ }
+}
+var bd_type = document.getElementById('type');
+if (bd_type) {
+ mySqlShowHide();
+ bd_type.addEventListener('change', mySqlShowHide);
+}
+
+function ask_confirmation(e) {
+ var str_confirmation = this.getAttribute('data-str-confirm');
+ if (!confirm(str_confirmation)) {
+ e.preventDefault();
+ }
+}
+var confirms = document.getElementsByClassName('confirm');
+for (var i = 0 ; i < confirms.length ; i++) {
+ confirms[i].addEventListener('click', ask_confirmation);
+}
diff --git a/p/scripts/main.js b/p/scripts/main.js
index 968c945c8..f1b82900e 100644
--- a/p/scripts/main.js
+++ b/p/scripts/main.js
@@ -767,6 +767,31 @@ function init_nav_entries() {
});
}
+// <actualize>
+var feed_processed = 0;
+
+function updateFeed(feeds, feeds_count) {
+ var feed = feeds.pop();
+ if (feed == undefined) {
+ return;
+ }
+
+ $.ajax({
+ type: 'POST',
+ url: feed['url'],
+ }).complete(function (data) {
+ feed_processed++;
+ $("#actualizeProgress .progress").html(feed_processed + " / " + feeds_count);
+ $("#actualizeProgress .title").html(feed['title']);
+
+ if (feed_processed === feeds_count) {
+ window.location.reload();
+ } else {
+ updateFeed(feeds, feeds_count);
+ }
+ });
+}
+
function init_actualize() {
var auto = false;
@@ -777,14 +802,25 @@ function init_actualize() {
ajax_loading = true;
- $.getScript('./?c=javascript&a=actualize').done(function () {
- if (auto && feed_count < 1) {
+ $.getJSON('./?c=javascript&a=actualize').done(function (data) {
+ if (auto && data.feeds.length < 1) {
auto = false;
ajax_loading = false;
return false;
}
-
- updateFeeds();
+ if (data.feeds.length === 0) {
+ openNotification(data.feedback_no_refresh, "good");
+ ajax_loading = false;
+ return;
+ }
+ //Progress bar
+ var feeds_count = data.feeds.length;
+ $('body').after('<div id="actualizeProgress" class="notification good">' + data.feedback_actualize +
+ '<br /><span class="title">/</span><br /><span class="progress">0 / ' + feeds_count +
+ '</span></div>');
+ for (var i = 10; i > 0; i--) {
+ updateFeed(data.feeds, feeds_count);
+ }
});
return false;
@@ -795,7 +831,7 @@ function init_actualize() {
$("#actualize").click();
}
}
-
+// </actualize>
// <notification>
var notification = null,
@@ -863,7 +899,7 @@ function notifs_html5_show(nb) {
var notification = new window.Notification(i18n['notif_title_articles'], {
icon: "../themes/icons/favicon-256.png",
- body: i18n['notif_body_articles'].replace("\d", nb),
+ body: i18n['notif_body_articles'].replace('%d', nb),
tag: "freshRssNewArticles"
});
@@ -871,7 +907,7 @@ function notifs_html5_show(nb) {
window.location.reload();
}
- if (context['html5_notif_timeout'] !== 0){
+ if (context['html5_notif_timeout'] !== 0) {
setTimeout(function() {
notification.close();
}, context['html5_notif_timeout'] * 1000);
@@ -899,7 +935,7 @@ function refreshUnreads() {
if ((incUnreadsFeed(null, feed_id, nbUnreads - feed_unreads) || isAll) && //Update of current view?
(nbUnreads - feed_unreads > 0)) {
- $('#new-article').show();
+ $('#new-article').attr('aria-hidden', 'false').show();
new_articles = true;
};
});
@@ -1122,10 +1158,10 @@ function init_feed_observers() {
$('select[id="category"]').on('change', function() {
var detail = $('#new_category_name').parent();
if ($(this).val() === 'nc') {
- detail.show();
+ detail.attr('aria-hidden', 'false').show();
detail.find('input').focus();
} else {
- detail.hide();
+ detail.attr('aria-hidden', 'true').hide();
}
});
}
@@ -1245,14 +1281,32 @@ function init_configuration_alert() {
});
}
+function init_subscription() {
+ $('body').on('click', '.bookmarkClick', function (e) {
+ return false;
+ });
+}
+
+function parseJsonVars() {
+ var jsonVars = document.getElementById('jsonVars'),
+ json = JSON.parse(jsonVars.innerHTML);
+ jsonVars.outerHTML = '';
+ window.context = json.context;
+ window.shortcuts = json.shortcuts;
+ window.url = json.url;
+ window.i18n = json.i18n;
+ window.icons = json.icons;
+}
+
function init_all() {
- if (!(window.$ && window.context)) {
+ if (!window.$) {
if (window.console) {
console.log('FreshRSS waiting for JS…');
}
window.setTimeout(init_all, 50);
return;
}
+ parseJsonVars();
init_notifications();
init_confirm_action();
$stream = $('#stream');
@@ -1269,6 +1323,7 @@ function init_all() {
init_notifs_html5();
window.setInterval(refreshUnreads, 120000);
} else {
+ init_subscription();
init_crypto_form();
init_share_observers();
init_remove_observers();
diff --git a/p/scripts/persona.js b/p/scripts/persona.js
index 36aeeaf56..63ab43795 100644
--- a/p/scripts/persona.js
+++ b/p/scripts/persona.js
@@ -1,7 +1,7 @@
"use strict";
function init_persona() {
- if (!(navigator.id && window.$)) {
+ if (!(navigator.id && window.$ && window.url)) {
if (window.console) {
console.log('FreshRSS (Persona) waiting for JS…');
}
diff --git a/p/scripts/repartition.js b/p/scripts/repartition.js
new file mode 100644
index 000000000..a391de2f2
--- /dev/null
+++ b/p/scripts/repartition.js
@@ -0,0 +1,72 @@
+"use strict";
+function initStats() {
+ if (!window.Flotr) {
+ if (window.console) {
+ console.log('FreshRSS waiting for Flotr…');
+ }
+ window.setTimeout(initStats, 50);
+ return;
+ }
+ var jsonRepartition = document.getElementById('jsonRepartition'),
+ stats = JSON.parse(jsonRepartition.innerHTML);
+ jsonRepartition.outerHTML = '';
+ // Entry per hour
+ Flotr.draw(document.getElementById('statsEntryPerHour'),
+ [{
+ data: stats.repartitionHour,
+ bars: {horizontal: false, show: true}
+ }],
+ {
+ grid: {verticalLines: false},
+ xaxis: {noTicks: 23,
+ tickFormatter: function(x) {
+ var x = parseInt(x);
+ return x + 1;
+ },
+ min: -0.9,
+ max: 23.9,
+ tickDecimals: 0},
+ yaxis: {min: 0},
+ mouse: {relative: true, track: true, trackDecimals: 0, trackFormatter: function(obj) {return numberFormat(obj.y);}}
+ });
+ // Entry per day of week
+ Flotr.draw(document.getElementById('statsEntryPerDayOfWeek'),
+ [{
+ data: stats.repartitionDayOfWeek,
+ bars: {horizontal: false, show: true}
+ }],
+ {
+ grid: {verticalLines: false},
+ xaxis: {noTicks: 6,
+ tickFormatter: function(x) {
+ var x = parseInt(x);
+ return stats.days[x];
+ },
+ min: -0.9,
+ max: 6.9,
+ tickDecimals: 0},
+ yaxis: {min: 0},
+ mouse: {relative: true, track: true, trackDecimals: 0, trackFormatter: function(obj) {return numberFormat(obj.y);}}
+ });
+ // Entry per month
+ Flotr.draw(document.getElementById('statsEntryPerMonth'),
+ [{
+ data: stats.repartitionMonth,
+ bars: {horizontal: false, show: true}
+ }],
+ {
+ grid: {verticalLines: false},
+ xaxis: {noTicks: 12,
+ tickFormatter: function(x) {
+ var x = parseInt(x);
+ return stats.months[(x - 1)];
+ },
+ min: 0.1,
+ max: 12.9,
+ tickDecimals: 0},
+ yaxis: {min: 0},
+ mouse: {relative: true, track: true, trackDecimals: 0, trackFormatter: function(obj) {return numberFormat(obj.y);}}
+ });
+
+}
+initStats();
diff --git a/p/scripts/stats.js b/p/scripts/stats.js
new file mode 100644
index 000000000..2e8ab6e27
--- /dev/null
+++ b/p/scripts/stats.js
@@ -0,0 +1,56 @@
+"use strict";
+function initStats() {
+ if (!window.Flotr) {
+ if (window.console) {
+ console.log('FreshRSS waiting for Flotr…');
+ }
+ window.setTimeout(initStats, 50);
+ return;
+ }
+ var jsonStats = document.getElementById('jsonStats'),
+ stats = JSON.parse(jsonStats.innerHTML);
+ jsonStats.outerHTML = '';
+ // Entry per day
+ var avg = [];
+ for (var i = -31; i <= 0; i++) {
+ avg.push([i, stats.average]);
+ }
+ Flotr.draw(document.getElementById('statsEntryPerDay'),
+ [{
+ data: stats.dataCount,
+ bars: {horizontal: false, show: true}
+ },{
+ data: avg,
+ lines: {show: true},
+ label: stats.average,
+ }],
+ {
+ grid: {verticalLines: false},
+ xaxis: {noTicks: 6, showLabels: false, tickDecimals: 0, min: -30.75, max: -0.25},
+ yaxis: {min: 0},
+ mouse: {relative: true, track: true, trackDecimals: 0, trackFormatter: function(obj) {return numberFormat(obj.y);}}
+ });
+ // Feed per category
+ Flotr.draw(document.getElementById('statsFeedPerCategory'),
+ stats.feedByCategory,
+ {
+ grid: {verticalLines: false, horizontalLines: false},
+ pie: {explode: 10, show: true, labelFormatter: function(){return '';}},
+ xaxis: {showLabels: false},
+ yaxis: {showLabels: false},
+ mouse: {relative: true, track: true, trackDecimals: 0, trackFormatter: function(obj) {return obj.series.label + ' - '+ numberFormat(obj.y) + ' ('+ (obj.fraction * 100).toFixed(1) + '%)';}},
+ legend: {container: document.getElementById('statsFeedPerCategoryLegend'), noColumns: 3}
+ });
+ // Entry per category
+ Flotr.draw(document.getElementById('statsEntryPerCategory'),
+ stats.entryByCategory,
+ {
+ grid: {verticalLines: false, horizontalLines: false},
+ pie: {explode: 10, show: true, labelFormatter: function(){return '';}},
+ xaxis: {showLabels: false},
+ yaxis: {showLabels: false},
+ mouse: {relative: true, track: true, trackDecimals: 0, trackFormatter: function(obj) {return obj.series.label + ' - '+ numberFormat(obj.y) + ' ('+ (obj.fraction * 100).toFixed(1) + '%)';}},
+ legend: {container: document.getElementById('statsEntryPerCategoryLegend'), noColumns: 3}
+ });
+}
+initStats();
diff --git a/p/themes/base-theme/template.css b/p/themes/base-theme/template.css
index 17a43d3ed..8a12423be 100644
--- a/p/themes/base-theme/template.css
+++ b/p/themes/base-theme/template.css
@@ -110,6 +110,11 @@ td.numeric {
/*=== COMPONENTS */
/*===============*/
+
+[aria-hidden="true"] {
+ display: none;
+}
+
/*=== Forms */
.form-group::after {
content: "";
@@ -620,6 +625,9 @@ br + br + br {
.stat > table {
width: 100%;
}
+.statGraph {
+ height: 300px;
+}
/*=== GLOBAL VIEW */
/*================*/