diff --git a/public/src/forum/topic.js b/public/src/forum/topic.js
index 063183ffe5..03ff757387 100644
--- a/public/src/forum/topic.js
+++ b/public/src/forum/topic.js
@@ -221,21 +221,23 @@
});
});
- $('#content').on('click', '.post_reply', function() {
- var selectionText = '',
- selection = window.getSelection() || document.getSelection();
+ var reply_fn = function() {
+ var selectionText = '',
+ selection = window.getSelection() || document.getSelection();
- if ($(selection.baseNode).parents('.post-content').length > 0) {
- var snippet = selection.toString();
- if (snippet.length > 0) selectionText = '> ' + snippet.replace(/\n/g, '\n> ');
- }
+ if ($(selection.baseNode).parents('.post-content').length > 0) {
+ var snippet = selection.toString();
+ if (snippet.length > 0) selectionText = '> ' + snippet.replace(/\n/g, '\n> ');
+ }
- if (thread_state.locked !== '1') {
- require(['composer'], function(cmp) {
- cmp.push(tid, null, null, selectionText + '\n\n');
- });
- }
- });
+ if (thread_state.locked !== '1') {
+ require(['composer'], function(cmp) {
+ cmp.push(tid, null, null, selectionText + '\n\n');
+ });
+ }
+ };
+ $('.post-container').on('click', '.post_reply', reply_fn);
+ $('#post_reply').on('click', reply_fn);
$('.post-container').on('click', '.quote', function() {
if (thread_state.locked !== '1') {
diff --git a/public/src/modules/composer.js b/public/src/modules/composer.js
index 7ee61144f7..bad6387110 100644
--- a/public/src/modules/composer.js
+++ b/public/src/modules/composer.js
@@ -8,140 +8,142 @@ define(['taskbar'], function(taskbar) {
};
composer.init = function() {
- // Create the fixed bottom bar
- var taskbar = document.getElementById('taskbar');
+ if (!composer.initialized) {
+ // Create the fixed bottom bar
+ var taskbar = document.getElementById('taskbar');
- composer.postContainer = document.createElement('div');
- composer.postContainer.className = 'post-window row-fluid';
- composer.postContainer.innerHTML = '
' +
- '
' +
- '
';
- document.body.insertBefore(composer.postContainer, taskbar);
+ document.body.insertBefore(composer.postContainer, taskbar);
- socket.on('api:composer.push', function(threadData) {
- if (!threadData.error) {
- var uuid = utils.generateUUID();
+ socket.on('api:composer.push', function(threadData) {
+ if (!threadData.error) {
+ var uuid = utils.generateUUID();
- composer.taskbar.push('composer', uuid, {
- title: (!threadData.cid ? (threadData.title || '') : 'New Topic'),
- icon: threadData.picture
- });
+ composer.taskbar.push('composer', uuid, {
+ title: (!threadData.cid ? (threadData.title || '') : 'New Topic'),
+ icon: threadData.picture
+ });
- composer.posts[uuid] = {
- tid: threadData.tid,
- cid: threadData.cid,
- pid: threadData.pid,
- title: threadData.title || '',
- body: threadData.body || ''
- };
- composer.load(uuid);
- } else {
- app.alert({
- type: 'error',
- timeout: 5000,
- alert_id: 'post_error',
- title: 'Please Log In to Post',
- message: 'Posting is currently restricted to registered members only, click here to log in',
- clickfn: function() {
- ajaxify.go('login');
- }
- });
- }
- });
+ composer.posts[uuid] = {
+ tid: threadData.tid,
+ cid: threadData.cid,
+ pid: threadData.pid,
+ title: threadData.title || '',
+ body: threadData.body || ''
+ };
+ composer.load(uuid);
+ } else {
+ app.alert({
+ type: 'error',
+ timeout: 5000,
+ alert_id: 'post_error',
+ title: 'Please Log In to Post',
+ message: 'Posting is currently restricted to registered members only, click here to log in',
+ clickfn: function() {
+ ajaxify.go('login');
+ }
+ });
+ }
+ });
- socket.on('api:composer.editCheck', function(editCheck) {
- if (editCheck.titleEditable === true) composer.postContainer.querySelector('input').readOnly = false;
- });
+ socket.on('api:composer.editCheck', function(editCheck) {
+ if (editCheck.titleEditable === true) composer.postContainer.querySelector('input').readOnly = false;
+ });
- // Post Window events
- var jPostContainer = $(composer.postContainer),
- postContentEl = composer.postContainer.querySelector('textarea')
- jPostContainer.on('change', 'input, textarea', function() {
- var uuid = $(this).parents('.post-window')[0].getAttribute('data-uuid');
- if (this.nodeName === 'INPUT') composer.posts[uuid].title = this.value;
- else if (this.nodeName === 'TEXTAREA') composer.posts[uuid].body = this.value;
- });
- jPostContainer.on('click', '.action-bar button', function() {
- var action = this.getAttribute('data-action'),
- uuid = $(this).parents('.post-window').attr('data-uuid');
- switch(action) {
- case 'post': composer.post(uuid); break;
- case 'minimize': composer.minimize(uuid); break;
- case 'discard': composer.discard(uuid); break;
- }
- });
- jPostContainer.on('click', '.formatting-bar span', function() {
- var iconClass = this.querySelector('i').className,
- cursorEnd = postContentEl.value.length,
- selectionStart = postContentEl.selectionStart,
- selectionEnd = postContentEl.selectionEnd,
- selectionLength = selectionEnd - selectionStart;
+ // Post Window events
+ var jPostContainer = $(composer.postContainer),
+ postContentEl = composer.postContainer.querySelector('textarea')
+ jPostContainer.on('change', 'input, textarea', function() {
+ var uuid = $(this).parents('.post-window')[0].getAttribute('data-uuid');
+ if (this.nodeName === 'INPUT') composer.posts[uuid].title = this.value;
+ else if (this.nodeName === 'TEXTAREA') composer.posts[uuid].body = this.value;
+ });
+ jPostContainer.on('click', '.action-bar button', function() {
+ var action = this.getAttribute('data-action'),
+ uuid = $(this).parents('.post-window').attr('data-uuid');
+ switch(action) {
+ case 'post': composer.post(uuid); break;
+ case 'minimize': composer.minimize(uuid); break;
+ case 'discard': composer.discard(uuid); break;
+ }
+ });
+ jPostContainer.on('click', '.formatting-bar span', function() {
+ var iconClass = this.querySelector('i').className,
+ cursorEnd = postContentEl.value.length,
+ selectionStart = postContentEl.selectionStart,
+ selectionEnd = postContentEl.selectionEnd,
+ selectionLength = selectionEnd - selectionStart;
- switch(iconClass) {
- case 'icon-bold':
- if (selectionStart === selectionEnd) {
+ switch(iconClass) {
+ case 'icon-bold':
+ if (selectionStart === selectionEnd) {
+ // Nothing selected
+ postContentEl.value = postContentEl.value + '**bolded text**';
+ postContentEl.selectionStart = cursorEnd+2;
+ postContentEl.selectionEnd = postContentEl.value.length - 2;
+ } else {
+ // Text selected
+ postContentEl.value = postContentEl.value.slice(0, selectionStart) + '**' + postContentEl.value.slice(selectionStart, selectionEnd) + '**' + postContentEl.value.slice(selectionEnd);
+ postContentEl.selectionStart = selectionStart + 2;
+ postContentEl.selectionEnd = selectionEnd + 2;
+ }
+ break;
+ case 'icon-italic':
+ if (selectionStart === selectionEnd) {
+ // Nothing selected
+ postContentEl.value = postContentEl.value + '*italicised text*';
+ postContentEl.selectionStart = cursorEnd+1;
+ postContentEl.selectionEnd = postContentEl.value.length - 1;
+ } else {
+ // Text selected
+ postContentEl.value = postContentEl.value.slice(0, selectionStart) + '*' + postContentEl.value.slice(selectionStart, selectionEnd) + '*' + postContentEl.value.slice(selectionEnd);
+ postContentEl.selectionStart = selectionStart + 1;
+ postContentEl.selectionEnd = selectionEnd + 1;
+ }
+ break;
+ case 'icon-list':
// Nothing selected
- postContentEl.value = postContentEl.value + '**bolded text**';
- postContentEl.selectionStart = cursorEnd+2;
- postContentEl.selectionEnd = postContentEl.value.length - 2;
- } else {
- // Text selected
- postContentEl.value = postContentEl.value.slice(0, selectionStart) + '**' + postContentEl.value.slice(selectionStart, selectionEnd) + '**' + postContentEl.value.slice(selectionEnd);
- postContentEl.selectionStart = selectionStart + 2;
- postContentEl.selectionEnd = selectionEnd + 2;
- }
- break;
- case 'icon-italic':
- if (selectionStart === selectionEnd) {
- // Nothing selected
- postContentEl.value = postContentEl.value + '*italicised text*';
- postContentEl.selectionStart = cursorEnd+1;
- postContentEl.selectionEnd = postContentEl.value.length - 1;
- } else {
- // Text selected
- postContentEl.value = postContentEl.value.slice(0, selectionStart) + '*' + postContentEl.value.slice(selectionStart, selectionEnd) + '*' + postContentEl.value.slice(selectionEnd);
- postContentEl.selectionStart = selectionStart + 1;
- postContentEl.selectionEnd = selectionEnd + 1;
- }
- break;
- case 'icon-list':
- // Nothing selected
- postContentEl.value = postContentEl.value + "\n\n* list item";
- postContentEl.selectionStart = cursorEnd+4;
- postContentEl.selectionEnd = postContentEl.value.length;
- break;
- case 'icon-link':
- if (selectionStart === selectionEnd) {
- // Nothing selected
- postContentEl.value = postContentEl.value + '[link text](link url)';
- postContentEl.selectionStart = cursorEnd+12;
- postContentEl.selectionEnd = postContentEl.value.length - 1;
- } else {
- // Text selected
- postContentEl.value = postContentEl.value.slice(0, selectionStart) + '[' + postContentEl.value.slice(selectionStart, selectionEnd) + '](link url)' + postContentEl.value.slice(selectionEnd);
- postContentEl.selectionStart = selectionStart + selectionLength + 3;
- postContentEl.selectionEnd = selectionEnd + 11;
- }
- break;
- }
- });
+ postContentEl.value = postContentEl.value + "\n\n* list item";
+ postContentEl.selectionStart = cursorEnd+4;
+ postContentEl.selectionEnd = postContentEl.value.length;
+ break;
+ case 'icon-link':
+ if (selectionStart === selectionEnd) {
+ // Nothing selected
+ postContentEl.value = postContentEl.value + '[link text](link url)';
+ postContentEl.selectionStart = cursorEnd+12;
+ postContentEl.selectionEnd = postContentEl.value.length - 1;
+ } else {
+ // Text selected
+ postContentEl.value = postContentEl.value.slice(0, selectionStart) + '[' + postContentEl.value.slice(selectionStart, selectionEnd) + '](link url)' + postContentEl.value.slice(selectionEnd);
+ postContentEl.selectionStart = selectionStart + selectionLength + 3;
+ postContentEl.selectionEnd = selectionEnd + 11;
+ }
+ break;
+ }
+ });
- composer.initialized = true;
+ composer.initialized = true;
+ }
}
composer.push = function(tid, cid, pid, text) {
diff --git a/public/templates/topic.tpl b/public/templates/topic.tpl
index 177b95956c..287240e20c 100644
--- a/public/templates/topic.tpl
+++ b/public/templates/topic.tpl
@@ -48,7 +48,7 @@
-
+