From 3dae0cfcaefc69d5524e03d1b8b282deae9f181d Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Mon, 20 May 2013 19:59:40 +0300 Subject: [PATCH] [feature/editor-code-tabs] Correctly count indentation on first line Correctly count indentation on first line of code tag PHPBB3-11557 --- phpBB/styles/prosilver/template/editor.js | 25 +++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/phpBB/styles/prosilver/template/editor.js b/phpBB/styles/prosilver/template/editor.js index fd4c68adfe..311c1957ba 100644 --- a/phpBB/styles/prosilver/template/editor.js +++ b/phpBB/styles/prosilver/template/editor.js @@ -401,7 +401,7 @@ function getCaretPosition(txtarea) { */ (function($) { $(document).ready(function() { - var doc, textarea, startTags, endTags; + var doc, textarea, startTags, startTagsEnd, endTags; // find textarea, make sure browser supports necessary functions if (document.forms[form_name]) { @@ -421,6 +421,7 @@ function getCaretPosition(txtarea) { // list of allowed start and end bbcode code tags, in lower case startTags = ['[code]', '[code=']; + startTagsEnd = ']'; endTags = ['[/code]']; function inTag() { @@ -450,11 +451,27 @@ function getCaretPosition(txtarea) { return (lastEnd < lastStart); } - function getLastLine() { + function getLastLine(stripCodeTags) { var start = textarea.selectionStart, value = textarea.value, index = value.lastIndexOf("\n", start - 1); - return value.substring(index + 1, start); + value = value.substring(index + 1, start); + if (stripCodeTags) { + for (var i = 0; i < startTags.length; i++) { + index = value.lastIndexOf(startTags[i]); + if (index >= 0) { + var tagLength = startTags[i].length; + value = value.substring(index + tagLength); + if (startTags[i].lastIndexOf(startTagsEnd) != tagLength) { + index = value.indexOf(startTagsEnd); + if (index >= 0) { + value = value.substr(index + 1); + } + } + } + } + } + return value; } function appendCode(code) { @@ -480,7 +497,7 @@ function getCaretPosition(txtarea) { // intercept new line characters if (key == 13) { if (inTag()) { - var lastLine = getLastLine(), + var lastLine = getLastLine(true), code = '' + /^\s*/g.exec(lastLine); if (code.length > 0) { appendCode("\n" + code);