From 7ab90c6c828a512662a323f1401f39766d3d6f8d Mon Sep 17 00:00:00 2001 From: Cesar G Date: Wed, 23 Oct 2013 22:32:37 -0700 Subject: [ticket/11138] Increase AJAX timeout period to 15 seconds. PHPBB3-11138 --- phpBB/assets/javascript/core.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB/assets/javascript') diff --git a/phpBB/assets/javascript/core.js b/phpBB/assets/javascript/core.js index ab0891e70c..7bd3b85d7d 100644 --- a/phpBB/assets/javascript/core.js +++ b/phpBB/assets/javascript/core.js @@ -27,12 +27,12 @@ phpbb.loadingAlert = function() { } else { loadingAlert.show(); dark.fadeIn(phpbb.alertTime, function() { - // Wait five seconds and display an error if nothing has been returned by then. + // Wait fifteen seconds and display an error if nothing has been returned by then. phpbbAlertTimer = setTimeout(function() { if (loadingAlert.is(':visible')) { phpbb.alert($('#phpbb_alert').attr('data-l-err'), $('#phpbb_alert').attr('data-l-timeout-processing-req')); } - }, 5000); + }, 15000); }); } -- cgit v1.2.1 From 368b3f0d9e6af2fe625c2955130399cefb86e41b Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Sat, 26 Oct 2013 16:29:37 +0300 Subject: [ticket/11956] Move dropdown handler to assets PHPBB3-11956 --- phpBB/assets/javascript/core.js | 116 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) (limited to 'phpBB/assets/javascript') diff --git a/phpBB/assets/javascript/core.js b/phpBB/assets/javascript/core.js index 7bd3b85d7d..e19729c4ab 100644 --- a/phpBB/assets/javascript/core.js +++ b/phpBB/assets/javascript/core.js @@ -829,6 +829,122 @@ phpbb.applyCodeEditor = function(textarea) { }); }; +/** +* Dropdown toggle event handler +* This handler is used by phpBB.registerDropdown() and other functions +*/ +phpbb.toggleDropdown = function() { + var $this = $(this), + options = $this.data('dropdown-options'), + parent = options.parent, + visible = parent.hasClass('dropdown-visible'); + + if (!visible) { + // Hide other dropdown menus + $('.dropdown-container.dropdown-visible .dropdown-toggle').each(phpbb.toggleDropdown); + + // Figure out direction of dropdown + var direction = options.direction, + verticalDirection = options.verticalDirection, + offset = $this.offset(); + + if (direction == 'auto') { + if (($(window).width() - $this.outerWidth(true)) / 2 > offset.left) { + direction = 'right'; + } + else { + direction = 'left'; + } + } + parent.toggleClass(options.leftClass, direction == 'left').toggleClass(options.rightClass, direction == 'right'); + + if (verticalDirection == 'auto') { + var height = $(window).height(), + top = offset.top - $(window).scrollTop(); + + if (top < height * 0.7) { + verticalDirection = 'down'; + } + else { + verticalDirection = 'up'; + } + } + parent.toggleClass(options.upClass, verticalDirection == 'up').toggleClass(options.downClass, verticalDirection == 'down'); + } + + options.dropdown.toggle(); + parent.toggleClass(options.visibleClass, !visible).toggleClass('dropdown-visible', !visible); + + // Check dimensions when showing dropdown + // !visible because variable shows state of dropdown before it was toggled + if (!visible) { + options.dropdown.find('.dropdown-contents').each(function() { + var $this = $(this), + windowWidth = $(window).width(); + + $this.css({ + marginLeft: 0, + left: 0, + maxWidth: (windowWidth - 4) + 'px' + }); + + var offset = $this.offset().left, + width = $this.outerWidth(true); + + if (offset < 2) { + $this.css('left', (2 - offset) + 'px'); + } + else if ((offset + width + 2) > windowWidth) { + $this.css('margin-left', (windowWidth - offset - width - 2) + 'px'); + } + }); + } + + // Prevent event propagation + if (arguments.length > 0) { + try { + var e = arguments[0]; + e.preventDefault(); + e.stopPropagation(); + } + catch (error) { } + } + return false; +}; + +/** +* Register dropdown menu +* Shows/hides dropdown, decides which side to open to +* +* @param {jQuery} toggle Link that toggles dropdown. +* @param {jQuery} dropdown Dropdown menu. +* @param {Object} options List of options. Optional. +*/ +phpbb.registerDropdown = function(toggle, dropdown, options) +{ + var ops = { + parent: toggle.parent(), // Parent item to add classes to + direction: 'auto', // Direction of dropdown menu. Possible values: auto, left, right + verticalDirection: 'auto', // Vertical direction. Possible values: auto, up, down + visibleClass: 'visible', // Class to add to parent item when dropdown is visible + leftClass: 'dropdown-left', // Class to add to parent item when dropdown opens to left side + rightClass: 'dropdown-right', // Class to add to parent item when dropdown opens to right side + upClass: 'dropdown-up', // Class to add to parent item when dropdown opens above menu item + downClass: 'dropdown-down' // Class to add to parent item when dropdown opens below menu item + }; + if (options) { + ops = $.extend(ops, options); + } + ops.dropdown = dropdown; + + ops.parent.addClass('dropdown-container'); + toggle.addClass('dropdown-toggle'); + + toggle.data('dropdown-options', ops); + + toggle.click(phpbb.toggleDropdown); +}; + /** * Apply code editor to all textarea elements with data-bbcode attribute */ -- cgit v1.2.1 From c521380273be66ed99e2f16ba914a033a6bf3250 Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Sat, 26 Oct 2013 16:35:59 +0300 Subject: [ticket/11956] Move code that hides dropdowns to assets PHPBB3-11956 --- phpBB/assets/javascript/core.js | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'phpBB/assets/javascript') diff --git a/phpBB/assets/javascript/core.js b/phpBB/assets/javascript/core.js index e19729c4ab..efb945a117 100644 --- a/phpBB/assets/javascript/core.js +++ b/phpBB/assets/javascript/core.js @@ -829,6 +829,16 @@ phpbb.applyCodeEditor = function(textarea) { }); }; +/** +* List of classes that toggle dropdown menu, +* list of classes that contain visible dropdown menu +* +* Add your own classes to strings with comma (probably you +* will never need to do that) +*/ +phpbb.dropdownHandles = '.dropdown-container.dropdown-visible .dropdown-toggle'; +phpbb.dropdownVisibleContainers = '.dropdown-container.dropdown-visible'; + /** * Dropdown toggle event handler * This handler is used by phpBB.registerDropdown() and other functions @@ -841,7 +851,7 @@ phpbb.toggleDropdown = function() { if (!visible) { // Hide other dropdown menus - $('.dropdown-container.dropdown-visible .dropdown-toggle').each(phpbb.toggleDropdown); + $(phpbb.dropdownHandles).each(phpbb.toggleDropdown); // Figure out direction of dropdown var direction = options.direction, @@ -952,6 +962,14 @@ $(document).ready(function() { $('textarea[data-bbcode]').each(function() { phpbb.applyCodeEditor(this); }); + + // Hide active dropdowns when click event happens outside + $('body').click(function(e) { + var parents = $(e.target).parents(); + if (!parents.is(phpbb.dropdownVisibleContainers)) { + $(phpbb.dropdownHandles).each(phpbb.toggleDropdown); + } + }); }); })(jQuery); // Avoid conflicts with other libraries -- cgit v1.2.1 From da4e0c4219e5132ffddd67fc4621840c557c132a Mon Sep 17 00:00:00 2001 From: Cesar G Date: Tue, 15 Oct 2013 21:37:53 -0700 Subject: [ticket/11928] Replace AJAX loading popup with animation. PHPBB3-11928 --- phpBB/assets/javascript/core.js | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) (limited to 'phpBB/assets/javascript') diff --git a/phpBB/assets/javascript/core.js b/phpBB/assets/javascript/core.js index efb945a117..dfbbd12929 100644 --- a/phpBB/assets/javascript/core.js +++ b/phpBB/assets/javascript/core.js @@ -12,7 +12,7 @@ var keymap = { }; var dark = $('#darkenwrapper'); -var loadingAlert = $('#loadingalert'); +var loadingAlert = $('#loading_indicator'); var phpbbAlertTimer = null; @@ -22,18 +22,14 @@ var phpbbAlertTimer = null; * @returns object Returns loadingAlert. */ phpbb.loadingAlert = function() { - if (dark.is(':visible')) { + if (!loadingAlert.is(':visible')) { loadingAlert.fadeIn(phpbb.alertTime); - } else { - loadingAlert.show(); - dark.fadeIn(phpbb.alertTime, function() { - // Wait fifteen seconds and display an error if nothing has been returned by then. - phpbbAlertTimer = setTimeout(function() { - if (loadingAlert.is(':visible')) { - phpbb.alert($('#phpbb_alert').attr('data-l-err'), $('#phpbb_alert').attr('data-l-timeout-processing-req')); - } - }, 15000); - }); + // Wait fifteen seconds and display an error if nothing has been returned by then. + phpbbAlertTimer = setTimeout(function() { + if (loadingAlert.is(':visible')) { + phpbb.alert($('#phpbb_alert').attr('data-l-err'), $('#phpbb_alert').attr('data-l-timeout-processing-req')); + } + }, 15000); } return loadingAlert; @@ -66,6 +62,10 @@ phpbb.alert = function(title, msg, fadedark) { div.find('.alert_title').html(title); div.find('.alert_text').html(msg); + if (!dark.is(':visible')) { + dark.fadeIn(phpbb.alertTime); + } + div.bind('click', function(e) { e.stopPropagation(); }); @@ -131,6 +131,10 @@ phpbb.confirm = function(msg, callback, fadedark) { var div = $('#phpbb_confirm'); div.find('.alert_text').html(msg); + if (!dark.is(':visible')) { + dark.fadeIn(phpbb.alertTime); + } + div.bind('click', function(e) { e.stopPropagation(); }); @@ -372,13 +376,16 @@ phpbb.ajaxify = function(options) { phpbb.loadingAlert(); } - $.ajax({ + var request = $.ajax({ url: action, type: method, data: data, success: returnHandler, error: errorHandler }); + request.always(function() { + loadingAlert.fadeOut(phpbb.alertTime); + }); event.preventDefault(); }); -- cgit v1.2.1 From 4b024f035e0b49bea40932ff4a1180766fa7639a Mon Sep 17 00:00:00 2001 From: Cesar G Date: Wed, 30 Oct 2013 14:42:43 -0700 Subject: [ticket/11928] Rename loadingAlert to loading_indicator. PHPBB3-11928 --- phpBB/assets/javascript/core.js | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) (limited to 'phpBB/assets/javascript') diff --git a/phpBB/assets/javascript/core.js b/phpBB/assets/javascript/core.js index dfbbd12929..1fa558721d 100644 --- a/phpBB/assets/javascript/core.js +++ b/phpBB/assets/javascript/core.js @@ -12,27 +12,27 @@ var keymap = { }; var dark = $('#darkenwrapper'); -var loadingAlert = $('#loading_indicator'); +var loading_indicator = $('#loading_indicator'); var phpbbAlertTimer = null; /** * Display a loading screen * - * @returns object Returns loadingAlert. + * @returns object Returns loading_indicator. */ -phpbb.loadingAlert = function() { - if (!loadingAlert.is(':visible')) { - loadingAlert.fadeIn(phpbb.alertTime); +phpbb.loading_indicator = function() { + if (!loading_indicator.is(':visible')) { + loading_indicator.fadeIn(phpbb.alertTime); // Wait fifteen seconds and display an error if nothing has been returned by then. phpbbAlertTimer = setTimeout(function() { - if (loadingAlert.is(':visible')) { + if (loading_indicator.is(':visible')) { phpbb.alert($('#phpbb_alert').attr('data-l-err'), $('#phpbb_alert').attr('data-l-timeout-processing-req')); } }, 15000); } - return loadingAlert; + return loading_indicator; }; /** @@ -97,8 +97,8 @@ phpbb.alert = function(title, msg, fadedark) { e.preventDefault(); }); - if (loadingAlert.is(':visible')) { - loadingAlert.fadeOut(phpbb.alertTime, function() { + if (loading_indicator.is(':visible')) { + loading_indicator.fadeOut(phpbb.alertTime, function() { dark.append(div); div.fadeIn(phpbb.alertTime); }); @@ -188,8 +188,8 @@ phpbb.confirm = function(msg, callback, fadedark) { e.preventDefault(); }); - if (loadingAlert.is(':visible')) { - loadingAlert.fadeOut(phpbb.alertTime, function() { + if (loading_indicator.is(':visible')) { + loading_indicator.fadeOut(phpbb.alertTime, function() { dark.append(div); div.fadeIn(phpbb.alertTime); }); @@ -330,7 +330,7 @@ phpbb.ajaxify = function(options) { // If confirmation is required, display a dialog to the user. phpbb.confirm(res.MESSAGE_BODY, function(del) { if (del) { - phpbb.loadingAlert(); + phpbb.loading_indicator(); data = $('
' + res.S_HIDDEN_FIELDS + '
').serialize(); $.ajax({ url: res.S_CONFIRM_ACTION, @@ -373,7 +373,7 @@ phpbb.ajaxify = function(options) { } if (overlay && (typeof $this.attr('data-overlay') === 'undefined' || $this.attr('data-overlay') === 'true')) { - phpbb.loadingAlert(); + phpbb.loading_indicator(); } var request = $.ajax({ @@ -384,7 +384,7 @@ phpbb.ajaxify = function(options) { error: errorHandler }); request.always(function() { - loadingAlert.fadeOut(phpbb.alertTime); + loading_indicator.fadeOut(phpbb.alertTime); }); event.preventDefault(); -- cgit v1.2.1 From 478c3ea3a07437e752331ee74ccb20f52c3ab4c9 Mon Sep 17 00:00:00 2001 From: Cesar G Date: Sun, 3 Nov 2013 10:49:28 -0800 Subject: [ticket/11928] Javascript requires camel case. PHPBB3-11928 --- phpBB/assets/javascript/core.js | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) (limited to 'phpBB/assets/javascript') diff --git a/phpBB/assets/javascript/core.js b/phpBB/assets/javascript/core.js index 1fa558721d..a3a6d75dd2 100644 --- a/phpBB/assets/javascript/core.js +++ b/phpBB/assets/javascript/core.js @@ -12,27 +12,27 @@ var keymap = { }; var dark = $('#darkenwrapper'); -var loading_indicator = $('#loading_indicator'); +var loadingIndicator = $('#loading_indicator'); var phpbbAlertTimer = null; /** * Display a loading screen * - * @returns object Returns loading_indicator. + * @returns object Returns loadingIndicator. */ -phpbb.loading_indicator = function() { - if (!loading_indicator.is(':visible')) { - loading_indicator.fadeIn(phpbb.alertTime); +phpbb.loadingIndicator = function() { + if (!loadingIndicator.is(':visible')) { + loadingIndicator.fadeIn(phpbb.alertTime); // Wait fifteen seconds and display an error if nothing has been returned by then. phpbbAlertTimer = setTimeout(function() { - if (loading_indicator.is(':visible')) { + if (loadingIndicator.is(':visible')) { phpbb.alert($('#phpbb_alert').attr('data-l-err'), $('#phpbb_alert').attr('data-l-timeout-processing-req')); } }, 15000); } - return loading_indicator; + return loadingIndicator; }; /** @@ -97,8 +97,8 @@ phpbb.alert = function(title, msg, fadedark) { e.preventDefault(); }); - if (loading_indicator.is(':visible')) { - loading_indicator.fadeOut(phpbb.alertTime, function() { + if (loadingIndicator.is(':visible')) { + loadingIndicator.fadeOut(phpbb.alertTime, function() { dark.append(div); div.fadeIn(phpbb.alertTime); }); @@ -188,8 +188,8 @@ phpbb.confirm = function(msg, callback, fadedark) { e.preventDefault(); }); - if (loading_indicator.is(':visible')) { - loading_indicator.fadeOut(phpbb.alertTime, function() { + if (loadingIndicator.is(':visible')) { + loadingIndicator.fadeOut(phpbb.alertTime, function() { dark.append(div); div.fadeIn(phpbb.alertTime); }); @@ -330,7 +330,7 @@ phpbb.ajaxify = function(options) { // If confirmation is required, display a dialog to the user. phpbb.confirm(res.MESSAGE_BODY, function(del) { if (del) { - phpbb.loading_indicator(); + phpbb.loadingIndicator(); data = $('
' + res.S_HIDDEN_FIELDS + '
').serialize(); $.ajax({ url: res.S_CONFIRM_ACTION, @@ -373,7 +373,7 @@ phpbb.ajaxify = function(options) { } if (overlay && (typeof $this.attr('data-overlay') === 'undefined' || $this.attr('data-overlay') === 'true')) { - phpbb.loading_indicator(); + phpbb.loadingIndicator(); } var request = $.ajax({ @@ -384,7 +384,7 @@ phpbb.ajaxify = function(options) { error: errorHandler }); request.always(function() { - loading_indicator.fadeOut(phpbb.alertTime); + loadingIndicator.fadeOut(phpbb.alertTime); }); event.preventDefault(); -- cgit v1.2.1 From 253f8d75934492a460a9e38cb948f792e01096f5 Mon Sep 17 00:00:00 2001 From: Cesar G Date: Fri, 8 Nov 2013 06:13:55 -0800 Subject: [ticket/12001] Ensure that form data is sent to server in AJAX requests. PHPBB3-12001 --- phpBB/assets/javascript/core.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB/assets/javascript') diff --git a/phpBB/assets/javascript/core.js b/phpBB/assets/javascript/core.js index a3a6d75dd2..8370ef8d45 100644 --- a/phpBB/assets/javascript/core.js +++ b/phpBB/assets/javascript/core.js @@ -335,7 +335,7 @@ phpbb.ajaxify = function(options) { $.ajax({ url: res.S_CONFIRM_ACTION, type: 'POST', - data: data + '&confirm=' + res.YES_VALUE, + data: data + '&confirm=' + res.YES_VALUE + '&' + $('#phpbb_confirm form').serialize(), success: returnHandler, error: errorHandler }); -- cgit v1.2.1 From c386bf7911edfc4613c6a70dae37db76bfe645cb Mon Sep 17 00:00:00 2001 From: Cesar G Date: Fri, 18 Oct 2013 20:47:22 -0700 Subject: [ticket/11472] Make prosilver's editor.js an asset used by all styles. PHPBB3-11472 --- phpBB/assets/javascript/editor.js | 422 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 422 insertions(+) create mode 100644 phpBB/assets/javascript/editor.js (limited to 'phpBB/assets/javascript') diff --git a/phpBB/assets/javascript/editor.js b/phpBB/assets/javascript/editor.js new file mode 100644 index 0000000000..66a3cb51ac --- /dev/null +++ b/phpBB/assets/javascript/editor.js @@ -0,0 +1,422 @@ +/** +* bbCode control by subBlue design [ www.subBlue.com ] +* Includes unixsafe colour palette selector by SHS` +*/ + +// Startup variables +var imageTag = false; +var theSelection = false; +var bbcodeEnabled = true; + +// Check for Browser & Platform for PC & IE specific bits +// More details from: http://www.mozilla.org/docs/web-developer/sniffer/browser_type.html +var clientPC = navigator.userAgent.toLowerCase(); // Get client info +var clientVer = parseInt(navigator.appVersion, 10); // Get browser version + +var is_ie = ((clientPC.indexOf('msie') !== -1) && (clientPC.indexOf('opera') === -1)); +var is_win = ((clientPC.indexOf('win') !== -1) || (clientPC.indexOf('16bit') !== -1)); +var baseHeight; + +/** +* Shows the help messages in the helpline window +*/ +function helpline(help) { + document.forms[form_name].helpbox.value = help_line[help]; +} + +/** +* Fix a bug involving the TextRange object. From +* http://www.frostjedi.com/terra/scripts/demo/caretBug.html +*/ +function initInsertions() { + var doc; + + if (document.forms[form_name]) { + doc = document; + } else { + doc = opener.document; + } + + var textarea = doc.forms[form_name].elements[text_name]; + + if (is_ie && typeof(baseHeight) !== 'number') { + textarea.focus(); + baseHeight = doc.selection.createRange().duplicate().boundingHeight; + + if (!document.forms[form_name]) { + document.body.focus(); + } + } +} + +/** +* bbstyle +*/ +function bbstyle(bbnumber) { + if (bbnumber !== -1) { + bbfontstyle(bbtags[bbnumber], bbtags[bbnumber+1]); + } else { + insert_text('[*]'); + document.forms[form_name].elements[text_name].focus(); + } +} + +/** +* Apply bbcodes +*/ +function bbfontstyle(bbopen, bbclose) { + theSelection = false; + + var textarea = document.forms[form_name].elements[text_name]; + + textarea.focus(); + + if ((clientVer >= 4) && is_ie && is_win) { + // Get text selection + theSelection = document.selection.createRange().text; + + if (theSelection) { + // Add tags around selection + document.selection.createRange().text = bbopen + theSelection + bbclose; + document.forms[form_name].elements[text_name].focus(); + theSelection = ''; + return; + } + } else if (document.forms[form_name].elements[text_name].selectionEnd + && (document.forms[form_name].elements[text_name].selectionEnd - document.forms[form_name].elements[text_name].selectionStart > 0)) { + mozWrap(document.forms[form_name].elements[text_name], bbopen, bbclose); + document.forms[form_name].elements[text_name].focus(); + theSelection = ''; + return; + } + + //The new position for the cursor after adding the bbcode + var caret_pos = getCaretPosition(textarea).start; + var new_pos = caret_pos + bbopen.length; + + // Open tag + insert_text(bbopen + bbclose); + + // Center the cursor when we don't have a selection + // Gecko and proper browsers + if (!isNaN(textarea.selectionStart)) { + textarea.selectionStart = new_pos; + textarea.selectionEnd = new_pos; + } + // IE + else if (document.selection) { + var range = textarea.createTextRange(); + range.move("character", new_pos); + range.select(); + storeCaret(textarea); + } + + textarea.focus(); + return; +} + +/** +* Insert text at position +*/ +function insert_text(text, spaces, popup) { + var textarea; + + if (!popup) { + textarea = document.forms[form_name].elements[text_name]; + } else { + textarea = opener.document.forms[form_name].elements[text_name]; + } + + if (spaces) { + text = ' ' + text + ' '; + } + + // Since IE9, IE also has textarea.selectionStart, but it still needs to be treated the old way. + // Therefore we simply add a !is_ie here until IE fixes the text-selection completely. + if (!isNaN(textarea.selectionStart) && !is_ie) { + var sel_start = textarea.selectionStart; + var sel_end = textarea.selectionEnd; + + mozWrap(textarea, text, ''); + textarea.selectionStart = sel_start + text.length; + textarea.selectionEnd = sel_end + text.length; + } else if (textarea.createTextRange && textarea.caretPos) { + if (baseHeight !== textarea.caretPos.boundingHeight) { + textarea.focus(); + storeCaret(textarea); + } + + var caret_pos = textarea.caretPos; + caret_pos.text = caret_pos.text.charAt(caret_pos.text.length - 1) === ' ' ? caret_pos.text + text + ' ' : caret_pos.text + text; + } else { + textarea.value = textarea.value + text; + } + + if (!popup) { + textarea.focus(); + } +} + +/** +* Add inline attachment at position +*/ +function attach_inline(index, filename) { + insert_text('[attachment=' + index + ']' + filename + '[/attachment]'); + document.forms[form_name].elements[text_name].focus(); +} + +/** +* Add quote text to message +*/ +function addquote(post_id, username, l_wrote) { + var message_name = 'message_' + post_id; + var theSelection = ''; + var divarea = false; + var i; + + if (l_wrote === undefined) { + // Backwards compatibility + l_wrote = 'wrote'; + } + + if (document.all) { + divarea = document.all[message_name]; + } else { + divarea = document.getElementById(message_name); + } + + // Get text selection - not only the post content :( + // IE9 must use the document.selection method but has the *.getSelection so we just force no IE + if (window.getSelection && !is_ie && !window.opera) { + theSelection = window.getSelection().toString(); + } else if (document.getSelection && !is_ie) { + theSelection = document.getSelection(); + } else if (document.selection) { + theSelection = document.selection.createRange().text; + } + + if (theSelection === '' || typeof theSelection === 'undefined' || theSelection === null) { + if (divarea.innerHTML) { + theSelection = divarea.innerHTML.replace(/
/ig, '\n'); + theSelection = theSelection.replace(//ig, '\n'); + theSelection = theSelection.replace(/<\;/ig, '<'); + theSelection = theSelection.replace(/>\;/ig, '>'); + theSelection = theSelection.replace(/&\;/ig, '&'); + theSelection = theSelection.replace(/ \;/ig, ' '); + } else if (document.all) { + theSelection = divarea.innerText; + } else if (divarea.textContent) { + theSelection = divarea.textContent; + } else if (divarea.firstChild.nodeValue) { + theSelection = divarea.firstChild.nodeValue; + } + } + + if (theSelection) { + if (bbcodeEnabled) { + insert_text('[quote="' + username + '"]' + theSelection + '[/quote]'); + } else { + insert_text(username + ' ' + l_wrote + ':' + '\n'); + var lines = split_lines(theSelection); + for (i = 0; i < lines.length; i++) { + insert_text('> ' + lines[i] + '\n'); + } + } + } + + return; +} + +function split_lines(text) { + var lines = text.split('\n'); + var splitLines = new Array(); + var j = 0; + var i; + + for(i = 0; i < lines.length; i++) { + if (lines[i].length <= 80) { + splitLines[j] = lines[i]; + j++; + } else { + var line = lines[i]; + var splitAt; + do { + splitAt = line.indexOf(' ', 80); + + if (splitAt === -1) { + splitLines[j] = line; + j++; + } else { + splitLines[j] = line.substring(0, splitAt); + line = line.substring(splitAt); + j++; + } + } + while(splitAt !== -1); + } + } + return splitLines; +} + +/** +* From http://www.massless.org/mozedit/ +*/ +function mozWrap(txtarea, open, close) { + var selLength = (typeof(txtarea.textLength) === 'undefined') ? txtarea.value.length : txtarea.textLength; + var selStart = txtarea.selectionStart; + var selEnd = txtarea.selectionEnd; + var scrollTop = txtarea.scrollTop; + + if (selEnd === 1 || selEnd === 2) { + selEnd = selLength; + } + + var s1 = (txtarea.value).substring(0,selStart); + var s2 = (txtarea.value).substring(selStart, selEnd); + var s3 = (txtarea.value).substring(selEnd, selLength); + + txtarea.value = s1 + open + s2 + close + s3; + txtarea.selectionStart = selStart + open.length; + txtarea.selectionEnd = selEnd + open.length; + txtarea.focus(); + txtarea.scrollTop = scrollTop; + + return; +} + +/** +* Insert at Caret position. Code from +* http://www.faqts.com/knowledge_base/view.phtml/aid/1052/fid/130 +*/ +function storeCaret(textEl) { + if (textEl.createTextRange) { + textEl.caretPos = document.selection.createRange().duplicate(); + } +} + +/** +* Color pallette +*/ +function colorPalette(dir, width, height) { + var r = 0, + g = 0, + b = 0, + numberList = new Array(6), + color = '', + html = ''; + + numberList[0] = '00'; + numberList[1] = '40'; + numberList[2] = '80'; + numberList[3] = 'BF'; + numberList[4] = 'FF'; + + html += ''; + + for (r = 0; r < 5; r++) { + if (dir == 'h') { + html += ''; + } + + for (g = 0; g < 5; g++) { + if (dir == 'v') { + html += ''; + } + + for (b = 0; b < 5; b++) { + color = String(numberList[r]) + String(numberList[g]) + String(numberList[b]); + html += ''; + } + + if (dir == 'v') { + html += ''; + } + } + + if (dir == 'h') { + html += ''; + } + } + html += '
'; + html += ''; + html += '
'; + return html; +} + +(function($) { + $(document).ready(function() { + $('#color_palette_placeholder').each(function() { + $(this).html(colorPalette('h', 15, 12)); + }); + }); +})(jQuery); + +/** +* Caret Position object +*/ +function caretPosition() { + var start = null; + var end = null; +} + +/** +* Get the caret position in an textarea +*/ +function getCaretPosition(txtarea) { + var caretPos = new caretPosition(); + + // simple Gecko/Opera way + if (txtarea.selectionStart || txtarea.selectionStart === 0) { + caretPos.start = txtarea.selectionStart; + caretPos.end = txtarea.selectionEnd; + } + // dirty and slow IE way + else if (document.selection) { + // get current selection + var range = document.selection.createRange(); + + // a new selection of the whole textarea + var range_all = document.body.createTextRange(); + range_all.moveToElementText(txtarea); + + // calculate selection start point by moving beginning of range_all to beginning of range + var sel_start; + for (sel_start = 0; range_all.compareEndPoints('StartToStart', range) < 0; sel_start++) { + range_all.moveStart('character', 1); + } + + txtarea.sel_start = sel_start; + + // we ignore the end value for IE, this is already dirty enough and we don't need it + caretPos.start = txtarea.sel_start; + caretPos.end = txtarea.sel_start; + } + + return caretPos; +} + +/** +* Allow to use tab character when typing code +* Keep indentation of last line of code when typing code +*/ +(function($) { + $(document).ready(function() { + var doc, textarea; + + // find textarea, make sure browser supports necessary functions + if (document.forms[form_name]) { + doc = document; + } else { + doc = opener.document; + } + + if (!doc.forms[form_name]) { + return; + } + + textarea = doc.forms[form_name].elements[text_name]; + + phpbb.applyCodeEditor(textarea); + }); +})(jQuery); + -- cgit v1.2.1 From 79b5e9689617df62030be13f8b9912aee32e7bcb Mon Sep 17 00:00:00 2001 From: Cesar G Date: Fri, 18 Oct 2013 21:23:53 -0700 Subject: [ticket/11472] Make the color swatch configurable and fix it in subsilver2 PHPBB3-11472 --- phpBB/assets/javascript/editor.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'phpBB/assets/javascript') diff --git a/phpBB/assets/javascript/editor.js b/phpBB/assets/javascript/editor.js index 66a3cb51ac..418dd163aa 100644 --- a/phpBB/assets/javascript/editor.js +++ b/phpBB/assets/javascript/editor.js @@ -346,7 +346,11 @@ function colorPalette(dir, width, height) { (function($) { $(document).ready(function() { $('#color_palette_placeholder').each(function() { - $(this).html(colorPalette('h', 15, 12)); + var orientation = $(this).attr('data-orientation'), + height = $(this).attr('data-height'), + width = $(this).attr('data-width'); + + $(this).html(colorPalette(orientation, width, height)); }); }); })(jQuery); -- cgit v1.2.1 From 0385d163647f954062ef6ccb511602e8e69fc1d1 Mon Sep 17 00:00:00 2001 From: Cesar G Date: Tue, 12 Nov 2013 23:57:27 -0800 Subject: [ticket/10810] Move the color palette code to core.js. PHPBB3-10810 --- phpBB/assets/javascript/core.js | 57 ++++++++++++++++++++++++++++++++++++ phpBB/assets/javascript/editor.js | 61 --------------------------------------- 2 files changed, 57 insertions(+), 61 deletions(-) (limited to 'phpBB/assets/javascript') diff --git a/phpBB/assets/javascript/core.js b/phpBB/assets/javascript/core.js index a3a6d75dd2..a5931d5e90 100644 --- a/phpBB/assets/javascript/core.js +++ b/phpBB/assets/javascript/core.js @@ -962,6 +962,55 @@ phpbb.registerDropdown = function(toggle, dropdown, options) toggle.click(phpbb.toggleDropdown); }; +/** +* Get the HTML for a color palette table +*/ +phpbb.colorPalette = function(dir, width, height) { + var r = 0, + g = 0, + b = 0, + numberList = new Array(6), + color = '', + html = ''; + + numberList[0] = '00'; + numberList[1] = '40'; + numberList[2] = '80'; + numberList[3] = 'BF'; + numberList[4] = 'FF'; + + html += ''; + + for (r = 0; r < 5; r++) { + if (dir == 'h') { + html += ''; + } + + for (g = 0; g < 5; g++) { + if (dir == 'v') { + html += ''; + } + + for (b = 0; b < 5; b++) { + color = String(numberList[r]) + String(numberList[g]) + String(numberList[b]); + html += ''; + } + + if (dir == 'v') { + html += ''; + } + } + + if (dir == 'h') { + html += ''; + } + } + html += '
'; + html += ''; + html += '
'; + return html; +} + /** * Apply code editor to all textarea elements with data-bbcode attribute */ @@ -977,6 +1026,14 @@ $(document).ready(function() { $(phpbb.dropdownHandles).each(phpbb.toggleDropdown); } }); + + $('#color_palette_placeholder').each(function() { + var orientation = $(this).attr('data-orientation'), + height = $(this).attr('data-height'), + width = $(this).attr('data-width'); + + $(this).html(phpbb.colorPalette(orientation, width, height)); + }); }); })(jQuery); // Avoid conflicts with other libraries diff --git a/phpBB/assets/javascript/editor.js b/phpBB/assets/javascript/editor.js index 418dd163aa..5222de9fee 100644 --- a/phpBB/assets/javascript/editor.js +++ b/phpBB/assets/javascript/editor.js @@ -294,67 +294,6 @@ function storeCaret(textEl) { } } -/** -* Color pallette -*/ -function colorPalette(dir, width, height) { - var r = 0, - g = 0, - b = 0, - numberList = new Array(6), - color = '', - html = ''; - - numberList[0] = '00'; - numberList[1] = '40'; - numberList[2] = '80'; - numberList[3] = 'BF'; - numberList[4] = 'FF'; - - html += ''; - - for (r = 0; r < 5; r++) { - if (dir == 'h') { - html += ''; - } - - for (g = 0; g < 5; g++) { - if (dir == 'v') { - html += ''; - } - - for (b = 0; b < 5; b++) { - color = String(numberList[r]) + String(numberList[g]) + String(numberList[b]); - html += ''; - } - - if (dir == 'v') { - html += ''; - } - } - - if (dir == 'h') { - html += ''; - } - } - html += '
'; - html += ''; - html += '
'; - return html; -} - -(function($) { - $(document).ready(function() { - $('#color_palette_placeholder').each(function() { - var orientation = $(this).attr('data-orientation'), - height = $(this).attr('data-height'), - width = $(this).attr('data-width'); - - $(this).html(colorPalette(orientation, width, height)); - }); - }); -})(jQuery); - /** * Caret Position object */ -- cgit v1.2.1 From 9a9669bebd3edcb3dde7459660eece3a73856cf6 Mon Sep 17 00:00:00 2001 From: Cesar G Date: Wed, 13 Nov 2013 00:14:35 -0800 Subject: [ticket/10810] Make the color palette usable outside of the editor context. PHPBB3-10810 --- phpBB/assets/javascript/core.js | 50 ++++++++++++++++++++++++++++++++++------- 1 file changed, 42 insertions(+), 8 deletions(-) (limited to 'phpBB/assets/javascript') diff --git a/phpBB/assets/javascript/core.js b/phpBB/assets/javascript/core.js index a5931d5e90..69a09427fe 100644 --- a/phpBB/assets/javascript/core.js +++ b/phpBB/assets/javascript/core.js @@ -963,7 +963,11 @@ phpbb.registerDropdown = function(toggle, dropdown, options) }; /** -* Get the HTML for a color palette table +* Get the HTML for a color palette table. +* +* @param string dir Palette direction - either v or h +* @param int width Palette cell width. +* @param int height Palette cell height. */ phpbb.colorPalette = function(dir, width, height) { var r = 0, @@ -979,7 +983,7 @@ phpbb.colorPalette = function(dir, width, height) { numberList[3] = 'BF'; numberList[4] = 'FF'; - html += ''; + html += '
'; for (r = 0; r < 5; r++) { if (dir == 'h') { @@ -994,7 +998,7 @@ phpbb.colorPalette = function(dir, width, height) { for (b = 0; b < 5; b++) { color = String(numberList[r]) + String(numberList[g]) + String(numberList[b]); html += ''; } @@ -1011,6 +1015,40 @@ phpbb.colorPalette = function(dir, width, height) { return html; } +/** +* Register a color palette. +* +* @param object el jQuery object for the palette container. +*/ +phpbb.registerPalette = function(el) { + var orientation = el.attr('data-orientation'), + height = el.attr('data-height'), + width = el.attr('data-width'), + target = el.attr('data-target'), + bbcode = el.attr('data-bbcode'); + + // Insert the palette HTML into the container. + el.html(phpbb.colorPalette(orientation, width, height)); + + // Add toggle control. + $('#color_palette_toggle').click(function(e) { + el.toggle(); + e.preventDefault(); + }); + + // Attach event handler when a palette cell is clicked. + $(el).on('click', 'a', function(e) { + var color = $(this).attr('data-color'); + + if (bbcode) { + bbfontstyle('[color=#' + color + ']', '[/color]'); + } else { + $(target).val(color); + } + e.preventDefault(); + }); +} + /** * Apply code editor to all textarea elements with data-bbcode attribute */ @@ -1028,11 +1066,7 @@ $(document).ready(function() { }); $('#color_palette_placeholder').each(function() { - var orientation = $(this).attr('data-orientation'), - height = $(this).attr('data-height'), - width = $(this).attr('data-width'); - - $(this).html(phpbb.colorPalette(orientation, width, height)); + phpbb.registerPalette($(this)); }); }); -- cgit v1.2.1 From 739f1a3bdd733a45d9192d1e0d8da4e44caa1a3d Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Thu, 31 Oct 2013 10:29:46 +0200 Subject: [ticket/11984] Do not resize textarea on touch devices PHPBB3-11984 --- phpBB/assets/javascript/core.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'phpBB/assets/javascript') diff --git a/phpBB/assets/javascript/core.js b/phpBB/assets/javascript/core.js index a3a6d75dd2..238bfad90b 100644 --- a/phpBB/assets/javascript/core.js +++ b/phpBB/assets/javascript/core.js @@ -15,6 +15,7 @@ var dark = $('#darkenwrapper'); var loadingIndicator = $('#loading_indicator'); var phpbbAlertTimer = null; +var isTouch = (window && typeof window.ontouchstart !== 'undefined'); /** * Display a loading screen @@ -623,8 +624,9 @@ phpbb.resizeTextArea = function(items, options) { resetCallback: function(item) { } }; - if (arguments.length > 1) - { + if (isTouch) return; + + if (arguments.length > 1) { configuration = $.extend(configuration, options); } -- cgit v1.2.1 From 4b0410a9d9ab9a405722f0d14d659ab3b7096f11 Mon Sep 17 00:00:00 2001 From: Cesar G Date: Fri, 8 Nov 2013 11:32:42 -0800 Subject: [ticket/11241] Add dropdown control button. PHPBB3-11241 --- phpBB/assets/javascript/core.js | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'phpBB/assets/javascript') diff --git a/phpBB/assets/javascript/core.js b/phpBB/assets/javascript/core.js index 8d0db5da1a..5b8331bdce 100644 --- a/phpBB/assets/javascript/core.js +++ b/phpBB/assets/javascript/core.js @@ -931,6 +931,14 @@ phpbb.toggleDropdown = function() { return false; }; +/** +* Toggle dropdown submenu +*/ +phpbb.toggleSubmenu = function(e) { + $(this).siblings('.dropdown-submenu').toggle(); + e.preventDefault(); +} + /** * Register dropdown menu * Shows/hides dropdown, decides which side to open to @@ -962,6 +970,7 @@ phpbb.registerDropdown = function(toggle, dropdown, options) toggle.data('dropdown-options', ops); toggle.click(phpbb.toggleDropdown); + $('.dropdown-toggle-submenu', ops.parent).click(phpbb.toggleSubmenu); }; /** -- cgit v1.2.1
'; - html += ''; + html += ''; html += '