You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
2.0 KiB
JavaScript
83 lines
2.0 KiB
JavaScript
'use strict';
|
|
|
|
/* globals define, socket*/
|
|
|
|
define('composer/preview', function() {
|
|
var preview = {};
|
|
|
|
var timeoutId = 0;
|
|
|
|
preview.render = function(postContainer, callback) {
|
|
callback = callback || function() {};
|
|
if (timeoutId) {
|
|
clearTimeout(timeoutId);
|
|
timeoutId = 0;
|
|
}
|
|
var textarea = postContainer.find('textarea');
|
|
|
|
timeoutId = setTimeout(function() {
|
|
socket.emit('modules.composer.renderPreview', textarea.val(), function(err, preview) {
|
|
timeoutId = 0;
|
|
if (err) {
|
|
return;
|
|
}
|
|
preview = $(preview);
|
|
preview.find('img').addClass('img-responsive');
|
|
postContainer.find('.preview').html(preview);
|
|
$(window).trigger('action:composer.preview');
|
|
callback();
|
|
});
|
|
}, 250);
|
|
};
|
|
|
|
preview.matchScroll = function(postContainer) {
|
|
var textarea = postContainer.find('textarea');
|
|
var preview = postContainer.find('.preview');
|
|
var diff = textarea[0].scrollHeight - textarea.height();
|
|
|
|
if (diff === 0) {
|
|
return;
|
|
}
|
|
|
|
var scrollPercent = textarea.scrollTop() / diff;
|
|
|
|
preview.scrollTop(Math.max(preview[0].scrollHeight - preview.height(), 0) * scrollPercent);
|
|
};
|
|
|
|
preview.handleToggler = function(postContainer) {
|
|
function hidePreview() {
|
|
togglePreview(false);
|
|
localStorage.setItem('composer:previewToggled', true);
|
|
}
|
|
|
|
function showPreview() {
|
|
togglePreview(true);
|
|
localStorage.removeItem('composer:previewToggled');
|
|
}
|
|
|
|
function togglePreview(show) {
|
|
previewContainer.toggleClass('hide', !show);
|
|
writeContainer.toggleClass('maximized', !show);
|
|
showBtn.toggleClass('hide', show);
|
|
|
|
$('.write').focus();
|
|
preview.matchScroll(postContainer);
|
|
}
|
|
|
|
var showBtn = postContainer.find('.write-container .toggle-preview'),
|
|
hideBtn = postContainer.find('.preview-container .toggle-preview'),
|
|
previewContainer = $('.preview-container'),
|
|
writeContainer = $('.write-container');
|
|
|
|
hideBtn.on('click', hidePreview);
|
|
showBtn.on('click', showPreview);
|
|
|
|
if (localStorage.getItem('composer:previewToggled')) {
|
|
hidePreview();
|
|
} else {
|
|
showPreview();
|
|
}
|
|
};
|
|
|
|
return preview;
|
|
}); |