From 3f3db8f953feab5f83a1637f5f810ac835bd9cd8 Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Tue, 16 Jun 2009 20:29:25 +0000 Subject: [PATCH] Fix for bug #3486 Monotone-Parent: 5b157dfb1488dbe9d2aa3f2e03d255c9bf733ede Monotone-Revision: aa0162c14e4f909e63d3ee7b4d7c67aea973ddd2 Monotone-Author: flachapelle@inverse.ca Monotone-Date: 2009-06-16T20:29:25 Monotone-Branch: ca.inverse.sogo --- UI/WebServerResources/HTMLElement.js | 13 +++--- UI/WebServerResources/UIxMailEditor.js | 61 +++++++++++--------------- 2 files changed, 32 insertions(+), 42 deletions(-) diff --git a/UI/WebServerResources/HTMLElement.js b/UI/WebServerResources/HTMLElement.js index c0c81a3cd..0a1fb1bc2 100644 --- a/UI/WebServerResources/HTMLElement.js +++ b/UI/WebServerResources/HTMLElement.js @@ -218,18 +218,17 @@ Element.addMethods( } }, - setCaretTo: function(element, pos) { - element = $(element); - if (typeof(element.selectionStart) - != "undefined") { // For Mozilla and Safari - element.focus(); + setCaretTo: function(element, pos) { + element = $(element); + if (element.setSelectionRange) { // For Mozilla and Safari + element.focus(); element.setSelectionRange(pos, pos); } else if (element.createTextRange) { // For IE - var range = element.createTextRange(); + var range = element.createTextRange(); range.move("character", pos); range.select(); - } + } }, selectText: function(element, start, end) { diff --git a/UI/WebServerResources/UIxMailEditor.js b/UI/WebServerResources/UIxMailEditor.js index 9df0ef9e2..a9e31943e 100644 --- a/UI/WebServerResources/UIxMailEditor.js +++ b/UI/WebServerResources/UIxMailEditor.js @@ -8,7 +8,8 @@ var MailEditor = { selectedIndex: -1, delay: 750, delayedSearch: false, - signatureLength: 0 + signatureLength: 0, + textFirstFocus: true }; function onContactAdd() { @@ -267,7 +268,25 @@ function clickedEditorSave(sender) { return false; } -function onTextFocus() { +function onTextFocus(event) { + if (MailEditor.textFirstFocus) { + var content = this.getValue(); + var replyPlacement = UserDefaults["ReplyPlacement"]; + if (replyPlacement == "above") { + this.insertBefore(document.createTextNode("\r\r"), this.lastChild); + this.setCaretTo(0); + } + else { + var caretPosition = this.getValue().length - MailEditor.signatureLength; + if (Prototype.Browser.IE) + caretPosition -= lineBreakCount(this.getValue().substring(0, caretPosition)); + if (hasSignature()) + caretPosition -= 1; + this.setCaretTo(caretPosition); + } + MailEditor.textFirstFocus = false; + } + var input = currentAttachmentInput(); if (input) input.parentNode.removeChild(input); @@ -275,11 +294,11 @@ function onTextFocus() { function onTextKeyDown(event) { if (event.keyCode == Event.KEY_TAB) { + // Change behavior of tab key if (event.shiftKey) { - var nodes = $("subjectRow").childNodesWithTag("input"); - var objectInput = $(nodes[0]); - objectInput.focus(); - objectInput.selectText(0, objectInput.value.length); + var subjectField = $$("div#subjectRow input").first(); + subjectField.focus(); + subjectField.selectText(0, subjectField.value.length); preventDefault(event); } else { @@ -310,31 +329,6 @@ function onTextIEUpdateCursorPos(event) { this.selectionRange = document.selection.createRange().duplicate(); } -function onTextFirstFocus() { - var content = this.getValue(); - var replyPlacement = UserDefaults["ReplyPlacement"]; - - if (replyPlacement == "above") { - this.insertBefore(document.createTextNode("\r\r"), this.lastChild); - this.setCaretTo(0); - } - else { - var caretPosition = this.getValue().length - MailEditor.signatureLength; - if (Prototype.Browser.IE) - caretPosition -= lineBreakCount(this.getValue().substring(0, caretPosition)); - if (hasSignature()) - caretPosition -= 2; - this.setCaretTo(caretPosition); - } - - Event.stopObserving(this, "focus", onTextFirstFocus); -} - -function onTextContextMenu(event) { - event.returnValue = true; - event.cancelBubble = true; -} - function onTextMouseDown(event) { if (event.button == 0) { event.returnValue = false; @@ -555,10 +549,8 @@ function initMailEditor() { if (UserDefaults["ReplyPlacement"] != "above") { textarea.scrollTop = textarea.scrollHeight; } - textarea.observe("focus", onTextFirstFocus); textarea.observe("focus", onTextFocus); - // textarea.observe("contextmenu", onTextContextMenu); - textarea.observe("mousedown", onTextMouseDown, true); + //textarea.observe("mousedown", onTextMouseDown); textarea.observe("keydown", onTextKeyDown); if (Prototype.Browser.IE) { @@ -693,7 +685,6 @@ function onSelectPriority(event) { node = $(node).up("button"); popupToolbarMenu(node, "priority-menu"); Event.stop(event); - // preventDefault(event); } }