Merge branch 'master' into develop
commit
c2f1d254cc
@ -1,7 +1,7 @@
|
||||
{
|
||||
"logs": "Logs",
|
||||
"control-panel": "Logs Control Panel",
|
||||
"reload": "Reload Logs",
|
||||
"clear": "Clear Logs",
|
||||
"clear-success": "Logs Cleared!"
|
||||
"logs": "Nhật ký",
|
||||
"control-panel": "Bảng điều khiển log",
|
||||
"reload": "Tải lại log",
|
||||
"clear": "Xóa các log",
|
||||
"clear-success": "Các log đã được xóa!"
|
||||
}
|
@ -1,9 +1,9 @@
|
||||
{
|
||||
"loading": "Loading Skins...",
|
||||
"homepage": "Homepage",
|
||||
"select-skin": "Select Skin",
|
||||
"current-skin": "Current Skin",
|
||||
"skin-updated": "Skin Updated",
|
||||
"applied-success": "%1 skin was succesfully applied",
|
||||
"revert-success": "Skin reverted to base colours"
|
||||
"loading": "Đang tải giao diện ...",
|
||||
"homepage": "Trang chủ",
|
||||
"select-skin": "Chọn giao diện",
|
||||
"current-skin": "Giao diện hiện tại",
|
||||
"skin-updated": "Đã cập nhật giao diện",
|
||||
"applied-success": "1% giao diện đã được sử dụng thành công",
|
||||
"revert-success": "Đã trả giao diện về màu cơ bản"
|
||||
}
|
@ -1,90 +1,64 @@
|
||||
'use strict';
|
||||
|
||||
|
||||
(function (ajaxify) {
|
||||
ajaxify.widgets = {};
|
||||
|
||||
ajaxify.widgets.reposition = function (location) {
|
||||
$('body [has-widget-class]').each(function () {
|
||||
var $this = $(this);
|
||||
if ($this.attr('has-widget-target') === location) {
|
||||
$this.removeClass();
|
||||
$this.addClass($this.attr('has-widget-class'));
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
ajaxify.widgets.render = function (template, url, callback) {
|
||||
ajaxify.widgets.render = function (template, callback) {
|
||||
callback = callback || function () {};
|
||||
|
||||
if (template.match(/^admin/)) {
|
||||
return callback();
|
||||
}
|
||||
|
||||
var widgetLocations = ['sidebar', 'footer', 'header'];
|
||||
var locations = Object.keys(ajaxify.data.widgets);
|
||||
|
||||
$('#content [widget-area]').each(function () {
|
||||
var location = $(this).attr('widget-area');
|
||||
if ($.inArray(location, widgetLocations) === -1) {
|
||||
widgetLocations.push(location);
|
||||
locations.forEach(function (location) {
|
||||
var area = $('#content [widget-area="' + location + '"]');
|
||||
if (area.length) {
|
||||
return;
|
||||
}
|
||||
});
|
||||
|
||||
$.get(config.relative_path + '/api/widgets/render?' + config['cache-buster'], {
|
||||
locations: widgetLocations,
|
||||
template: template + '.tpl',
|
||||
url: url,
|
||||
cid: ajaxify.data.cid,
|
||||
isMobile: utils.isMobile(),
|
||||
}, function (renderedAreas) {
|
||||
for (var x = 0; x < renderedAreas.length; x += 1) {
|
||||
var renderedWidgets = renderedAreas[x].widgets;
|
||||
var location = renderedAreas[x].location;
|
||||
var html = '';
|
||||
var widgetsAtLocation = ajaxify.data.widgets[location] || [];
|
||||
var html = '';
|
||||
|
||||
for (var i = 0; i < renderedWidgets.length; i += 1) {
|
||||
html += templates.parse(renderedWidgets[i].html, {});
|
||||
}
|
||||
widgetsAtLocation.forEach(function (widget) {
|
||||
html += widget.html;
|
||||
|
||||
var area = $('#content [widget-area="' + location + '"]');
|
||||
|
||||
if (!area.length && window.location.pathname.indexOf('/admin') === -1 && renderedWidgets.length) {
|
||||
if (location === 'footer' && !$('#content [widget-area="footer"]').length) {
|
||||
$('#content').append($('<div class="row"><div widget-area="footer" class="col-xs-12"></div></div>'));
|
||||
} else if (location === 'sidebar' && !$('#content [widget-area="sidebar"]').length) {
|
||||
if ($('[component="account/cover"]').length) {
|
||||
$('[component="account/cover"]').nextAll().wrapAll($('<div class="row"><div class="col-lg-9 col-xs-12"></div><div widget-area="sidebar" class="col-lg-3 col-xs-12"></div></div></div>'));
|
||||
} else if ($('[component="groups/cover"]').length) {
|
||||
$('[component="groups/cover"]').nextAll().wrapAll($('<div class="row"><div class="col-lg-9 col-xs-12"></div><div widget-area="sidebar" class="col-lg-3 col-xs-12"></div></div></div>'));
|
||||
} else {
|
||||
$('#content > *').wrapAll($('<div class="row"><div class="col-lg-9 col-xs-12"></div><div widget-area="sidebar" class="col-lg-3 col-xs-12"></div></div></div>'));
|
||||
}
|
||||
} else if (location === 'header' && !$('#content [widget-area="header"]').length) {
|
||||
$('#content').prepend($('<div class="row"><div widget-area="header" class="col-xs-12"></div></div>'));
|
||||
if (location === 'footer' && !$('#content [widget-area="footer"]').length) {
|
||||
$('#content').append($('<div class="row"><div widget-area="footer" class="col-xs-12"></div></div>'));
|
||||
} else if (location === 'sidebar' && !$('#content [widget-area="sidebar"]').length) {
|
||||
if ($('[component="account/cover"]').length) {
|
||||
$('[component="account/cover"]').nextAll().wrapAll($('<div class="row"><div class="col-lg-9 col-xs-12"></div><div widget-area="sidebar" class="col-lg-3 col-xs-12"></div></div></div>'));
|
||||
} else if ($('[component="groups/cover"]').length) {
|
||||
$('[component="groups/cover"]').nextAll().wrapAll($('<div class="row"><div class="col-lg-9 col-xs-12"></div><div widget-area="sidebar" class="col-lg-3 col-xs-12"></div></div></div>'));
|
||||
} else {
|
||||
$('#content > *').wrapAll($('<div class="row"><div class="col-lg-9 col-xs-12"></div><div widget-area="sidebar" class="col-lg-3 col-xs-12"></div></div></div>'));
|
||||
}
|
||||
|
||||
area = $('#content [widget-area="' + location + '"]');
|
||||
} else if (location === 'header' && !$('#content [widget-area="header"]').length) {
|
||||
$('#content').prepend($('<div class="row"><div widget-area="header" class="col-xs-12"></div></div>'));
|
||||
}
|
||||
});
|
||||
|
||||
area = $('#content [widget-area="' + location + '"]');
|
||||
if (html && area.length) {
|
||||
area.html(html);
|
||||
}
|
||||
|
||||
if (renderedWidgets.length) {
|
||||
area.removeClass('hidden');
|
||||
ajaxify.widgets.reposition(location);
|
||||
}
|
||||
if (widgetsAtLocation.length) {
|
||||
area.removeClass('hidden');
|
||||
}
|
||||
});
|
||||
|
||||
var widgetAreas = $('#content [widget-area]');
|
||||
widgetAreas.find('img:not(.not-responsive)').addClass('img-responsive');
|
||||
widgetAreas.find('.timeago').timeago();
|
||||
widgetAreas.find('img[title].teaser-pic,img[title].user-img').each(function () {
|
||||
$(this).tooltip({
|
||||
placement: 'top',
|
||||
title: $(this).attr('title'),
|
||||
});
|
||||
var widgetAreas = $('#content [widget-area]');
|
||||
widgetAreas.find('img:not(.not-responsive)').addClass('img-responsive');
|
||||
widgetAreas.find('.timeago').timeago();
|
||||
widgetAreas.find('img[title].teaser-pic,img[title].user-img').each(function () {
|
||||
$(this).tooltip({
|
||||
placement: 'top',
|
||||
title: $(this).attr('title'),
|
||||
});
|
||||
$(window).trigger('action:widgets.loaded', {});
|
||||
|
||||
callback(renderedAreas);
|
||||
});
|
||||
$(window).trigger('action:widgets.loaded', {});
|
||||
callback();
|
||||
};
|
||||
}(ajaxify || {}));
|
||||
|
@ -0,0 +1,22 @@
|
||||
'use strict';
|
||||
|
||||
var async = require('async');
|
||||
var batch = require('../../batch');
|
||||
var db = require('../../database');
|
||||
|
||||
module.exports = {
|
||||
name: 'Wipe all existing RSS tokens',
|
||||
timestamp: Date.UTC(2017, 6, 5),
|
||||
method: function (callback) {
|
||||
var progress = this.progress;
|
||||
|
||||
batch.processSortedSet('users:joindate', function (uids, next) {
|
||||
async.eachLimit(uids, 500, function (uid, next) {
|
||||
progress.incr();
|
||||
db.deleteObjectField('user:' + uid, 'rss_token', next);
|
||||
}, next);
|
||||
}, {
|
||||
progress: progress,
|
||||
}, callback);
|
||||
},
|
||||
};
|
@ -0,0 +1,35 @@
|
||||
'use strict';
|
||||
|
||||
var async = require('async');
|
||||
var db = require('../../database');
|
||||
|
||||
module.exports = {
|
||||
name: 'Fix incorrect robots.txt schema',
|
||||
timestamp: Date.UTC(2017, 6, 10),
|
||||
method: function (callback) {
|
||||
async.waterfall([
|
||||
function (next) {
|
||||
db.getObject('config', next);
|
||||
},
|
||||
function (config, next) {
|
||||
if (!config) {
|
||||
return callback();
|
||||
}
|
||||
// fix mongo nested data
|
||||
if (config.robots && config.robots.txt) {
|
||||
db.setObjectField('config', 'robots:txt', config.robots.txt, next);
|
||||
} else if (typeof config['robots.txt'] === 'string' && config['robots.txt']) {
|
||||
db.setObjectField('config', 'robots:txt', config['robots.txt'], next);
|
||||
} else {
|
||||
next();
|
||||
}
|
||||
},
|
||||
function (next) {
|
||||
db.deleteObjectField('config', 'robots', next);
|
||||
},
|
||||
function (next) {
|
||||
db.deleteObjectField('config', 'robots.txt', next);
|
||||
},
|
||||
], callback);
|
||||
},
|
||||
};
|
Loading…
Reference in New Issue