diff options
author | Vjacheslav Trushkin <cyberalien@gmail.com> | 2013-05-22 20:52:15 +0300 |
---|---|---|
committer | Vjacheslav Trushkin <cyberalien@gmail.com> | 2013-05-22 20:52:15 +0300 |
commit | 9db0fa88569da1922ac21d9a003b7e577a96c810 (patch) | |
tree | 97e7ecb807937a13b19f487d3be9ee8fbcd6b985 /phpBB/assets/javascript | |
parent | 809c51f30d28e5dc1449f817b7563d12e4050f7e (diff) | |
download | forums-9db0fa88569da1922ac21d9a003b7e577a96c810.tar forums-9db0fa88569da1922ac21d9a003b7e577a96c810.tar.gz forums-9db0fa88569da1922ac21d9a003b7e577a96c810.tar.bz2 forums-9db0fa88569da1922ac21d9a003b7e577a96c810.tar.xz forums-9db0fa88569da1922ac21d9a003b7e577a96c810.zip |
[feature/editor-code-tabs] Make inTag function reusable
Change inTag function to reusable JS function that can check
for any BBCode
PHPBB3-11557
Diffstat (limited to 'phpBB/assets/javascript')
-rw-r--r-- | phpBB/assets/javascript/core.js | 73 |
1 files changed, 44 insertions, 29 deletions
diff --git a/phpBB/assets/javascript/core.js b/phpBB/assets/javascript/core.js index 1a8beb8224..be4b21abf0 100644 --- a/phpBB/assets/javascript/core.js +++ b/phpBB/assets/javascript/core.js @@ -664,6 +664,49 @@ phpbb.resizeTextArea = function(items, options) { }; /** +* Check if cursor in textarea is currently inside a bbcode tag +* +* @param {object} textarea Textarea DOM object +* @param {Array} startTags List of start tags to look for +* For example, Array('[code]', '[code=') +* @param {Array} endTags List of end tags to look for +* For example, Array('[/code]') +* +* @return {boolean} True if cursor is in bbcode tag +*/ +phpbb.inBBCodeTag = function(textarea, startTags, endTags) { + var start = textarea.selectionStart, + lastEnd = -1, + lastStart = -1, + i, index, value; + + if (typeof start !== 'number') { + return false; + } + + value = textarea.value.toLowerCase(); + + for (i = 0; i < startTags.length; i++) { + var tagLength = startTags[i].length; + if (start >= tagLength) { + index = value.lastIndexOf(startTags[i], start - tagLength); + lastStart = Math.max(lastStart, index); + } + } + if (lastStart == -1) return false; + + if (start > 0) { + for (i = 0; i < endTags.length; i++) { + index = value.lastIndexOf(endTags[i], start - 1); + lastEnd = Math.max(lastEnd, index); + } + } + + return (lastEnd < lastStart); +} + + +/** * Adjust textarea to manage code bbcode * * This function allows to use tab characters when typing code @@ -689,36 +732,8 @@ phpbb.applyCodeEditor = function(textarea) { return; } - /** - * Check if cursor is currently inside code tag - * - * @return {boolean} True if cursor is in code tag - */ function inTag() { - var start = textarea.selectionStart, - lastEnd = -1, - lastStart = -1, - i, index, value; - - value = textarea.value.toLowerCase(); - - for (i = 0; i < startTags.length; i++) { - var tagLength = startTags[i].length; - if (start >= tagLength) { - index = value.lastIndexOf(startTags[i], start - tagLength); - lastStart = Math.max(lastStart, index); - } - } - if (lastStart == -1) return false; - - if (start > 0) { - for (i = 0; i < endTags.length; i++) { - index = value.lastIndexOf(endTags[i], start - 1); - lastEnd = Math.max(lastEnd, index); - } - } - - return (lastEnd < lastStart); + return phpbb.inBBCodeTag(textarea, startTags, endTags); } /** |