Refactor javascript_vars.phtml

Introduce kind of context objectin JavaScript

See https://github.com/marienfressinaud/FreshRSS/issues/634
See https://github.com/marienfressinaud/FreshRSS/issues/655
This commit is contained in:
Marien Fressinaud
2014-10-05 17:29:09 +02:00
parent 70131f776a
commit d8ed718aab
4 changed files with 70 additions and 81 deletions

View File

@@ -1,21 +1,30 @@
"use strict";
<?php
echo '"use strict";', "\n";
$mark = $this->conf->mark_when;
echo 'var ',
'help_url="', FRESHRSS_WIKI, '"',
',hide_posts=', ($this->conf->display_posts || Minz_Request::param('output') === 'reader') ? 'false' : 'true',
',display_order="', Minz_Request::param('order', $this->conf->sort_order), '"',
',auto_mark_article=', $mark['article'] ? 'true' : 'false',
',auto_mark_site=', $mark['site'] ? 'true' : 'false',
',auto_mark_scroll=', $mark['scroll'] ? 'true' : 'false',
',auto_load_more=', $this->conf->auto_load_more ? 'true' : 'false',
',does_lazyload=', $this->conf->lazyload ? 'true' : 'false',
',sticky_post=', $this->conf->sticky_post ? 'true' : 'false';
$mail = Minz_Session::param ('mail', false);
$auto_actualize = Minz_Session::param('actualize_feeds', false);
$hide_posts = ($this->conf->display_posts ||
Minz_Request::param('output') === 'reader');
$s = $this->conf->shortcuts;
echo ',shortcuts={',
echo 'var context={',
'hide_posts:', $hide_posts ? 'false' : 'true', ',',
'display_order:"', Minz_Request::param('order', $this->conf->sort_order), '",',
'auto_mark_article:', $mark['article'] ? 'true' : 'false', ',',
'auto_mark_site:', $mark['site'] ? 'true' : 'false', ',',
'auto_mark_scroll:', $mark['scroll'] ? 'true' : 'false', ',',
'auto_load_more:', $this->conf->auto_load_more ? 'true' : 'false', ',',
'auto_actualize_feeds:', $auto_actualize ? 'true' : 'false', ',',
'does_lazyload:', $this->conf->lazyload ? 'true' : 'false', ',',
'sticky_post:', $this->conf->sticky_post ? 'true' : 'false', ',',
'html5_notif_timeout:', $this->conf->html5_notif_timeout, ',',
'auth_type:"', Minz_Configuration::authType(), '",',
'current_user_mail:', $mail ? ('"' . $mail . '"') : 'null', ',',
'current_view:"', Minz_Request::param('output', 'normal'), '"',
"},\n";
echo 'shortcuts={',
'mark_read:"', $s['mark_read'], '",',
'mark_favorite:"', $s['mark_favorite'], '",',
'go_website:"', $s['go_website'], '",',
@@ -32,32 +41,20 @@ echo ',shortcuts={',
'close_dropdown:"', $s['close_dropdown'], '"',
"},\n";
if (Minz_Request::param ('output') === 'global') {
echo "iconClose='", _i('close'), "',\n";
}
echo 'url={',
'index:"', _url('index', 'index'), '",',
'login:"', _url('index', 'login'), '",',
'logout:"', _url('index', 'logout'), '",',
'help:"', FRESHRSS_WIKI, '"',
"},\n";
$authType = Minz_Configuration::authType();
if ($authType === 'persona') {
// If user is disconnected, current_user_mail MUST be null
$mail = Minz_Session::param ('mail', false);
if ($mail) {
echo 'current_user_mail="' . $mail . '",';
} else {
echo 'current_user_mail=null,';
}
}
echo 'i18n={',
'confirmation_default:"', _t('confirm_action'), '",',
'notif_title_articles:"', _t('notif_title_new_articles'), '",',
'notif_body_articles:"', _t('notif_body_new_articles'), '",',
'category_empty:"', _t('category_empty'), '"',
"},\n";
echo 'authType="', $authType, '",',
'url_freshrss="', _url ('index', 'index'), '",',
'url_login="', _url ('index', 'login'), '",',
'url_logout="', _url ('index', 'logout'), '",';
echo 'str_confirmation_default="', _t('confirm_action'), '"', ",\n";
echo 'str_notif_title_articles="', _t('notif_title_new_articles'), '"', ",\n";
echo 'str_notif_body_articles="', _t('notif_body_new_articles'), '"', ",\n";
echo 'str_category_empty="', _t('category_empty'), '"', ",\n";
echo 'html5_notif_timeout=', $this->conf->html5_notif_timeout,",\n";
$autoActualise = Minz_Session::param('actualize_feeds', false);
echo 'auto_actualize_feeds=', $autoActualise ? 'true' : 'false', ";\n";
echo 'icons={',
'close:\'', _i('close'), '\'',
"}\n";

View File

@@ -20,13 +20,13 @@ function dragend_process(t) {
$(t).remove();
if (parent.children().length <= 0) {
parent.append('<li class="item disabled" dropzone="move">' + str_category_empty + '</li>');
parent.append('<li class="item disabled" dropzone="move">' + i18n['category_empty'] + '</li>');
}
}
}
function init_draggable() {
if (!(window.$ && window.url_freshrss)) {
if (!(window.$ && window.i18n)) {
if (window.console) {
console.log('FreshRSS waiting for JS…');
}

View File

@@ -40,7 +40,7 @@ function load_panel(link) {
function init_close_panel() {
$("#panel .close").click(function () {
$("#panel").html('<a class="close" href="#">' + window.iconClose + '</a>');
$("#panel").html('<a class="close" href="#">' + icons['close'] + '</a>');
init_close_panel();
$("#panel").slideToggle();
$("#overlay").fadeOut();

View File

@@ -4,14 +4,6 @@ var $stream = null,
shares = 0,
ajax_loading = false;
function is_normal_mode() {
return $stream.hasClass('normal');
}
function is_global_mode() {
return $stream.hasClass('global');
}
function redirect(url, new_tab) {
if (url) {
if (new_tab) {
@@ -226,7 +218,7 @@ function toggleContent(new_active, old_active) {
return;
}
if (does_lazyload) {
if (context['does_lazyload']) {
new_active.find('img[data-original], iframe[data-original]').each(function () {
this.setAttribute('src', this.getAttribute('data-original'));
this.removeAttribute('data-original');
@@ -245,12 +237,12 @@ function toggleContent(new_active, old_active) {
var box_to_move = "html,body",
relative_move = false;
if (is_global_mode()) {
if (context['current_view'] == 'global') {
box_to_move = "#panel";
relative_move = true;
}
if (sticky_post) {
if (context['sticky_post']) {
var prev_article = new_active.prevAll('.flux'),
new_pos = new_active.position().top,
old_scroll = $(box_to_move).scrollTop();
@@ -259,7 +251,7 @@ function toggleContent(new_active, old_active) {
new_pos = prev_article.position().top;
}
if (hide_posts) {
if (context['hide_posts']) {
if (relative_move) {
new_pos += old_scroll;
}
@@ -278,7 +270,7 @@ function toggleContent(new_active, old_active) {
}
}
if (auto_mark_article && new_active.hasClass('active')) {
if (context['auto_mark_article'] && new_active.hasClass('active')) {
mark_read(new_active, true);
}
}
@@ -378,7 +370,7 @@ function collapse_entry() {
var flux_current = $(".flux.current");
flux_current.toggleClass("active");
if (isCollapsed && auto_mark_article) {
if (isCollapsed && context['auto_mark_article']) {
mark_read(flux_current, true);
}
}
@@ -457,12 +449,12 @@ function inMarkViewport(flux, box_to_follow, relative_follow) {
function init_posts() {
var box_to_follow = $(window),
relative_follow = false;
if (is_global_mode()) {
if (context['current_view'] == 'global') {
box_to_follow = $("#panel");
relative_follow = true;
}
if (auto_mark_scroll) {
if (context['auto_mark_scroll']) {
box_to_follow.scroll(function () {
$('.not_read:visible').each(function () {
if ($(this).children(".flux_content").is(':visible') && inMarkViewport($(this), box_to_follow, relative_follow)) {
@@ -472,7 +464,7 @@ function init_posts() {
});
}
if (auto_load_more) {
if (context['auto_load_more']) {
box_to_follow.scroll(function () {
var load_more = $("#load_more");
if (!load_more.is(':visible')) {
@@ -492,7 +484,7 @@ function init_posts() {
}
function init_column_categories() {
if (!is_normal_mode()) {
if (context['current_view'] !== 'normal') {
return;
}
$('#aside_flux').on('click', '.category>a.dropdown-toggle', function () {
@@ -632,7 +624,7 @@ function init_shortcuts() {
shortcut.add(shortcuts.go_website, function () {
var url_website = $('.flux.current > .flux_header > .title > a').attr("href");
if (auto_mark_site) {
if (context['auto_mark_site']) {
$(".flux.current").each(function () {
mark_read($(this), true);
});
@@ -656,7 +648,7 @@ function init_shortcuts() {
});
shortcut.add(shortcuts.help, function () {
redirect(help_url, true);
redirect(url['help'], true);
}, {
'disable_in_input': true
});
@@ -678,7 +670,7 @@ function init_stream(divStream) {
new_active = $(this).parent();
isCollapsed = true;
if (e.target.tagName.toUpperCase() === 'A') { //Leave real links alone
if (auto_mark_article) {
if (context['auto_mark_article']) {
mark_read(new_active, true);
}
return true;
@@ -724,7 +716,7 @@ function init_stream(divStream) {
$(this).attr('target', '_blank');
});
if (auto_mark_site) {
if (context['auto_mark_site']) {
// catch mouseup instead of click so we can have the correct behaviour
// with middle button click (scroll button).
divStream.on('mouseup', '.flux .link > a', function (e) {
@@ -784,7 +776,7 @@ function init_actualize() {
return false;
});
if (auto_actualize_feeds) {
if (context['auto_actualize_feeds']) {
auto = true;
$("#actualize").click();
}
@@ -855,9 +847,9 @@ function notifs_html5_show(nb) {
return
}
var notification = new window.Notification(str_notif_title_articles, {
var notification = new window.Notification(i18n['notif_title_articles'], {
icon: "../themes/icons/favicon-256.png",
body: str_notif_body_articles.replace("\d", nb),
body: i18n['notif_body_articles.replace("\d", nb)'],
tag: "freshRssNewArticles"
});
@@ -865,10 +857,10 @@ function notifs_html5_show(nb) {
window.location.reload();
}
if (html5_notif_timeout !== 0){
if (context['html5_notif_timeout'] !== 0){
setTimeout(function() {
notification.close();
}, html5_notif_timeout * 1000);
}, context['html5_notif_timeout'] * 1000);
}
}
@@ -922,7 +914,7 @@ function load_more_posts() {
$.get(url_load_more, function (data) {
box_load_more.children('.flux:last').after($('#stream', data).children('.flux, .day'));
$('.pagination').replaceWith($('.pagination', data));
if (display_order === 'ASC') {
if (context['display_order'] === 'ASC') {
$('#nav_menu_read_all > .read_all').attr(
'formaction', $('#bigMarkAsRead').attr('formaction')
);
@@ -953,7 +945,7 @@ function focus_search() {
function init_load_more(box) {
box_load_more = box;
if (!does_lazyload) {
if (!context['does_lazyload']) {
$('img[postpone], audio[postpone], iframe[postpone], video[postpone]').each(function () {
this.removeAttribute('postpone');
});
@@ -1062,7 +1054,7 @@ function init_persona() {
});
navigator.id.watch({
loggedInUser: current_user_mail,
loggedInUser: context['current_user_mail'],
onlogin: function(assertion) {
// A user has logged in! Here you need to:
@@ -1070,13 +1062,13 @@ function init_persona() {
// 2. Update your UI.
$.ajax ({
type: 'POST',
url: url_login,
url: url['login'],
data: {assertion: assertion},
success: function(res, status, xhr) {
/*if (res.status === 'failure') {
alert (res_obj.reason);
} else*/ if (res.status === 'okay') {
location.href = url_freshrss;
location.href = url['index'];
}
},
error: function(res, status, xhr) {
@@ -1091,9 +1083,9 @@ function init_persona() {
// (That's a literal JavaScript null. Not false, 0, or undefined. null.)
$.ajax ({
type: 'POST',
url: url_logout,
url: url['logout'],
success: function(res, status, xhr) {
location.href = url_freshrss;
location.href = url['index'];
},
error: function(res, status, xhr) {
//alert("logout failure" + res);
@@ -1108,7 +1100,7 @@ function init_confirm_action() {
$('body').on('click', '.confirm', function () {
var str_confirmation = $(this).attr('data-str-confirm');
if (!str_confirmation) {
str_confirmation = str_confirmation_default;
str_confirmation = i18n['confirmation_default'];
}
return confirm(str_confirmation);
@@ -1274,7 +1266,7 @@ function init_slider_observers() {
}
function init_all() {
if (!(window.$ && window.url_freshrss)) {
if (!(window.$ && window.context)) {
if (window.console) {
console.log('FreshRSS waiting for JS…');
}
@@ -1282,7 +1274,7 @@ function init_all() {
return;
}
init_notifications();
switch (authType) {
switch (context['auth_type']) {
case 'persona':
init_persona();
break;