v1.18.x
psychobunny 11 years ago
parent 75824c0d81
commit 090ecaffd1

@ -7,7 +7,9 @@ define(['taskbar'], function(taskbar) {
active: undefined,
posts: {},
saving: undefined
};
},
controls = {};
function initialise() {
socket.on('event:composer.ping', function(post_uuid) {
@ -418,7 +420,7 @@ define(['taskbar'], function(taskbar) {
/*************************************************/
/* Rich Textarea Controls */
/*************************************************/
function insertIntoTextarea(textarea, value) {
controls.insertIntoTextarea = function(textarea, value) {
var $textarea = $(textarea);
var currentVal = $textarea.val();
@ -427,34 +429,34 @@ define(['taskbar'], function(taskbar) {
value +
currentVal.slice(textarea.selectionStart)
);
}
};
function wrapSelectionInTextareaWith(textarea, leading, trailing){
if(trailing === undefined){
trailing = leading;
}
controls.wrapSelectionInTextareaWith = function(textarea, leading, trailing){
if(trailing === undefined){
trailing = leading;
}
var $textarea = $(textarea);
var currentVal = $textarea.val()
var $textarea = $(textarea);
var currentVal = $textarea.val()
$textarea.val(
currentVal.slice(0, textarea.selectionStart) +
leading +
currentVal.slice(textarea.selectionStart, textarea.selectionEnd) +
trailing +
currentVal.slice(textarea.selectionEnd)
);
}
$textarea.val(
currentVal.slice(0, textarea.selectionStart) +
leading +
currentVal.slice(textarea.selectionStart, textarea.selectionEnd) +
trailing +
currentVal.slice(textarea.selectionEnd)
);
};
function updateTextareaSelection(textarea, start, end){
textarea.setSelectionRange(start, end);
$(textarea).focus();
}
controls.updateTextareaSelection = function(textarea, start, end){
textarea.setSelectionRange(start, end);
$(textarea).focus();
};
var formattingDispatchTable = {
'fa fa-bold': function(textarea, selectionStart, selectionEnd){
if(selectionStart === selectionEnd){
insertIntoTextarea(textarea, '**bolded text**');
composer.insertIntoTextarea(textarea, '**bolded text**');
updateTextareaSelection(textarea, selectionStart + 2, selectionStart + 13);
} else {
wrapSelectionInTextareaWith(textarea, '**');
@ -464,7 +466,7 @@ define(['taskbar'], function(taskbar) {
'fa fa-italic': function(textarea, selectionStart, selectionEnd){
if(selectionStart === selectionEnd){
insertIntoTextarea(textarea, "*italicised text*");
composer.insertIntoTextarea(textarea, "*italicised text*");
updateTextareaSelection(textarea, selectionStart + 1, selectionStart + 16);
} else {
wrapSelectionInTextareaWith(textarea, '*');
@ -474,7 +476,7 @@ define(['taskbar'], function(taskbar) {
'fa fa-list': function(textarea, selectionStart, selectionEnd){
if(selectionStart === selectionEnd){
insertIntoTextarea(textarea, "\n* list item");
composer.insertIntoTextarea(textarea, "\n* list item");
// Highlight "list item"
updateTextareaSelection(textarea, selectionStart + 3, selectionStart + 12);
@ -486,7 +488,7 @@ define(['taskbar'], function(taskbar) {
'fa fa-link': function(textarea, selectionStart, selectionEnd){
if(selectionStart === selectionEnd){
insertIntoTextarea(textarea, "[link text](link url)");
composer.insertIntoTextarea(textarea, "[link text](link url)");
// Highlight "link url"
updateTextareaSelection(textarea, selectionStart + 12, selectionEnd + 20);
@ -507,6 +509,8 @@ define(['taskbar'], function(taskbar) {
}
};
var customButtons = [];
function handleFormattingBarClick() {
var iconClass = $(this).find('i').attr('class');
var textarea = $(this).parents('.composer').find('textarea')[0];
@ -516,6 +520,20 @@ define(['taskbar'], function(taskbar) {
}
}
function addComposerButtons() {
for (var button in customButtons) {
if (customButtons.hasOwnProperty(button)) {
$('.formatting-bar .btn-group form').before('<span class="btn btn-link" tabindex="-1"><i class="' + customButtons[button].iconClass + '"></i></span>');
}
}
}
composer.addButton = function(iconClass, onClick) {
formattingDispatchTable[iconClass] = onClick;
customButtons.push({
iconClass: iconClass
});
};
composer.newTopic = function(cid) {
if(!allowed()) {
@ -860,6 +878,8 @@ define(['taskbar'], function(taskbar) {
$(window).trigger('action:composer.loaded', {
post_uuid: post_uuid
});
addComposerButtons();
});
});
};
@ -1015,7 +1035,9 @@ define(['taskbar'], function(taskbar) {
newReply: composer.newReply,
addQuote: composer.addQuote,
editPost: composer.editPost,
addButton: composer.addButton,
load: composer.load,
minimize: composer.minimize
minimize: composer.minimize,
controls: controls
};
});

Loading…
Cancel
Save