From 4aa9c871d9858c4779a9fb4baa16a39840fe385a Mon Sep 17 00:00:00 2001
From: Steffen Kamper <info@sk-typo3.de>
Date: Mon, 3 May 2010 10:33:17 +0000
Subject: [PATCH] Fixed bug #14144: Positioning of toolbar elements broken,
 especially in Safari (thanks to Stefan Galinski)

git-svn-id: https://svn.typo3.org/TYPO3v4/Core/trunk@7521 709f56b5-9817-0410-a4d7-c38de5d9e867
---
 ChangeLog                                          |  4 ++++
 typo3/js/backendsearch.js                          | 14 ++++++++++----
 typo3/js/clearcachemenu.js                         | 12 +++++++++---
 typo3/js/shortcutmenu.js                           | 11 ++++++++---
 typo3/js/workspacemenu.js                          | 13 +++++++++----
 typo3/sysext/opendocs/opendocs.js                  | 12 ++++++++----
 .../sysext/sys_action/toolbarmenu/tx_sysactions.js | 12 ++++++++----
 7 files changed, 56 insertions(+), 22 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index b562e636e96f..71978d7286b3 100755
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2010-05-03  Steffen Kamper  <info@sk-typo3.de>
+
+	* Fixed bug #14144: Positioning of toolbar elements broken, especially in Safari (thanks to Stefan Galinski)
+
 2010-05-03  Xavier Perseguers  <typo3@perseguers.ch>
 
 	* Raised DBAL version from 1.1.4 to 1.1.5
diff --git a/typo3/js/backendsearch.js b/typo3/js/backendsearch.js
index 4a173a2756ca..66afcf7efbec 100644
--- a/typo3/js/backendsearch.js
+++ b/typo3/js/backendsearch.js
@@ -37,7 +37,7 @@ var BackendSearch = Class.create({
 	initialize: function() {
 		Event.observe(window, 'resize', this.positionMenu);
 
-		Event.observe(window, 'load', function(){
+		Ext.onReady(function() {
 			this.positionMenu();
 			this.toolbarItemIcon = $$('#backend-search-menu .toolbar-item img')[0].src;
 
@@ -57,7 +57,7 @@ var BackendSearch = Class.create({
 				if(keyCode == Event.KEY_RETURN) {
 					this.invokeSearch();
 				}
-			}.bindAsEventListener(this));
+			}, this);
 
 			$$('#backend-search-menu .toolbar-item')[0].observe('click', this.toggleMenu)
 		}.bindAsEventListener(this));
@@ -69,7 +69,9 @@ var BackendSearch = Class.create({
 	positionMenu: function() {
 		var calculatedOffset = 0;
 		var parentWidth      = $('backend-search-menu').getWidth();
-		var ownWidth         = $$('#backend-search-menu div')[0].getWidth();
+		var currentToolbarItemLayer = $$('#backend-search-menu div')[0];
+		var ownWidth         = currentToolbarItemLayer.getWidth();
+
 		var parentSiblings   = $('backend-search-menu').previousSiblings();
 
 		parentSiblings.each(function(toolbarItem) {
@@ -83,6 +85,10 @@ var BackendSearch = Class.create({
 		});
 		calculatedOffset = calculatedOffset - ownWidth + parentWidth;
 
+		// border correction
+	if (currentToolbarItemLayer.getStyle('display') !== 'none') {
+		calculatedOffset += 2;
+	}
 
 		$$('#backend-search-menu div')[0].setStyle({
 			left: calculatedOffset + 'px'
@@ -134,7 +140,7 @@ var BackendSearch = Class.create({
 						top.loadEditId(jsonResponse.editRecord);
 						break;
 					case 'alternative':
-						this.jump( 
+						this.jump(
 							unescape('alt_doc.php?returnUrl=dummy.php&edit[' + jsonResponse.alternativeTable + '][' + jsonResponse.alternativeUid + ']=edit'),
 							'web_list',
 							'web'
diff --git a/typo3/js/clearcachemenu.js b/typo3/js/clearcachemenu.js
index 0f8696f5413e..494f377e9be1 100644
--- a/typo3/js/clearcachemenu.js
+++ b/typo3/js/clearcachemenu.js
@@ -37,7 +37,7 @@ var ClearCacheMenu = Class.create({
 	initialize: function() {
 		Event.observe(window, 'resize', this.positionMenu);
 
-		Event.observe(window, 'load', function(){
+		Ext.onReady(function() {
 			this.positionMenu();
 			this.toolbarItemIcon = $$('#clear-cache-actions-menu .toolbar-item img')[0].src;
 
@@ -47,7 +47,7 @@ var ClearCacheMenu = Class.create({
 			$$('#clear-cache-actions-menu li a').each(function(element) {
 				Event.observe(element, 'click', this.clearCache.bind(this));
 			}.bindAsEventListener(this));
-		}.bindAsEventListener(this));
+		}, this);
 	},
 
 	/**
@@ -56,7 +56,8 @@ var ClearCacheMenu = Class.create({
 	positionMenu: function() {
 		var calculatedOffset = 0;
 		var parentWidth      = $('clear-cache-actions-menu').getWidth();
-		var ownWidth         = $$('#clear-cache-actions-menu ul')[0].getWidth();
+		var currentToolbarItemLayer = $$('#clear-cache-actions-menu ul')[0];
+		var ownWidth         = currentToolbarItemLayer.getWidth();
 		var parentSiblings   = $('clear-cache-actions-menu').previousSiblings();
 
 		parentSiblings.each(function(toolbarItem) {
@@ -70,6 +71,11 @@ var ClearCacheMenu = Class.create({
 		});
 		calculatedOffset = calculatedOffset - ownWidth + parentWidth;
 
+			// border correction
+		if (currentToolbarItemLayer.getStyle('display') !== 'none') {
+			calculatedOffset += 2;
+		}
+
 
 		$$('#clear-cache-actions-menu ul')[0].setStyle({
 			left: calculatedOffset + 'px'
diff --git a/typo3/js/shortcutmenu.js b/typo3/js/shortcutmenu.js
index 975ade16edf2..9b43fb7d5686 100644
--- a/typo3/js/shortcutmenu.js
+++ b/typo3/js/shortcutmenu.js
@@ -38,13 +38,13 @@ var ShortcutMenu = Class.create({
 	initialize: function() {
 		Event.observe(window, 'resize', this.positionMenu);
 
-		Event.observe(window, 'load', function(){
+		Ext.onReady(function() {
 			this.positionMenu();
 			this.toolbarItemIcon = $$('#shortcut-menu .toolbar-item img')[0].src;
 
 			Event.observe($$('#shortcut-menu .toolbar-item')[0], 'click', this.toggleMenu);
 			this.initControls();
-		}.bindAsEventListener(this));
+		}, this);
 	},
 
 	/**
@@ -107,7 +107,8 @@ var ShortcutMenu = Class.create({
 	positionMenu: function() {
 		var calculatedOffset = 0;
 		var parentWidth      = $('shortcut-menu').getWidth();
-		var ownWidth         = $$('#shortcut-menu .toolbar-item-menu')[0].getWidth();
+		 var currentToolbarItemLayer = $$('#shortcut-menu .toolbar-item-menu')[0];
+		var ownWidth         = currentToolbarItemLayer.getWidth();
 		var parentSiblings   = $('shortcut-menu').previousSiblings();
 
 		parentSiblings.each(function(toolbarItem) {
@@ -121,6 +122,10 @@ var ShortcutMenu = Class.create({
 		});
 		calculatedOffset = calculatedOffset - ownWidth + parentWidth;
 
+			// border correction
+		if (currentToolbarItemLayer.getStyle('display') !== 'none') {
+			calculatedOffset += 2;
+		}
 
 		$$('#shortcut-menu .toolbar-item-menu')[0].setStyle({
 			left: calculatedOffset + 'px'
diff --git a/typo3/js/workspacemenu.js b/typo3/js/workspacemenu.js
index f143001b5322..ef5e5e98d104 100644
--- a/typo3/js/workspacemenu.js
+++ b/typo3/js/workspacemenu.js
@@ -38,7 +38,7 @@ var WorkspaceMenu = Class.create({
 	initialize: function() {
 		Event.observe(window, 'resize', this.positionMenu);
 
-		Event.observe(window, 'load', function(){
+		Ext.onReady(function() {
 			this.positionMenu();
 
 			Event.observe('workspace-selector-menu', 'click', this.toggleMenu);
@@ -50,7 +50,7 @@ var WorkspaceMenu = Class.create({
 				Event.observe(element, 'click', this.switchWorkspace.bind(this));
 			}.bindAsEventListener(this));
 
-		}.bindAsEventListener(this));
+		}, this);
 	},
 
 	/**
@@ -59,7 +59,8 @@ var WorkspaceMenu = Class.create({
 	positionMenu: function() {
 		var calculatedOffset = 0;
 		var parentWidth      = $('workspace-selector-menu').getWidth();
-		var ownWidth         = $$('#workspace-selector-menu ul')[0].getWidth();
+		var currentToolbarItemLayer = $$('#workspace-selector-menu ul')[0];
+		var ownWidth         = currentToolbarItemLayer.getWidth();
 		var parentSiblings   = $('workspace-selector-menu').previousSiblings();
 
 		parentSiblings.each(function(toolbarItem) {
@@ -73,6 +74,10 @@ var WorkspaceMenu = Class.create({
 		});
 		calculatedOffset = calculatedOffset - ownWidth + parentWidth;
 
+			// border correction
+		if (currentToolbarItemLayer.getStyle('display') !== 'none') {
+			calculatedOffset += 2;
+		}
 
 		$$('#workspace-selector-menu ul')[0].setStyle({
 			left: calculatedOffset + 'px'
@@ -145,7 +150,7 @@ var WorkspaceMenu = Class.create({
 			parameters: 'ajaxID=WorkspaceMenu::setWorkspace&workspaceId=' + workspaceId,
 			onSuccess: function(transport, response) {
 				TYPO3.configuration.inWorkspace = response.setWorkspaceId === 0 ? 0 : 1;
-				
+
 					// first remove all checks, then set the check in front of the selected workspace
 				var stateActiveIcon = $$('#workspace-selector-menu img.state-active')[0].cloneNode(true);
 				var stateInactiveIcon = $$('#workspace-selector-menu img.state-inactive')[0].cloneNode(true);
diff --git a/typo3/sysext/opendocs/opendocs.js b/typo3/sysext/opendocs/opendocs.js
index 34b5d6c71f0e..12bda0317eb8 100644
--- a/typo3/sysext/opendocs/opendocs.js
+++ b/typo3/sysext/opendocs/opendocs.js
@@ -39,7 +39,7 @@ var OpenDocs = Class.create({
 	initialize: function() {
 		Event.observe(window, 'resize', this.positionMenu);
 
-		Event.observe(window, 'load', function(){
+		Ext.onReady(function() {
 			this.positionMenu();
 			this.toolbarItemIcon = $$('#tx-opendocs-menu .toolbar-item img')[0].src;
 			this.ajaxScript      = top.TS.PATH_typo3 + this.ajaxScript; // can't be initialized earlier
@@ -47,7 +47,7 @@ var OpenDocs = Class.create({
 			Event.observe($$('#tx-opendocs-menu .toolbar-item')[0], 'click', this.toggleMenu);
 			this.menu = $$('#tx-opendocs-menu .toolbar-item-menu')[0];
 			this.toolbarItemIcon = $$('#shortcut-menu .toolbar-item img')[0].src;
-		}.bindAsEventListener(this));
+		}, this);
 	},
 
 	/**
@@ -56,7 +56,8 @@ var OpenDocs = Class.create({
 	positionMenu: function() {
 		var calculatedOffset = 0;
 		var parentWidth      = $('tx-opendocs-menu').getWidth();
-		var ownWidth         = $$('#tx-opendocs-menu .toolbar-item-menu')[0].getWidth();
+		var currentToolbarItemLayer = $$('#tx-opendocs-menu .toolbar-item-menu')[0];
+		var ownWidth         = currentToolbarItemLayer.getWidth();
 		var parentSiblings   = $('tx-opendocs-menu').previousSiblings();
 
 		parentSiblings.each(function(toolbarItem) {
@@ -70,6 +71,10 @@ var OpenDocs = Class.create({
 		});
 		calculatedOffset = calculatedOffset - ownWidth + parentWidth;
 
+			// border correction
+		if (currentToolbarItemLayer.getStyle('display') !== 'none') {
+			calculatedOffset += 2;
+		}
 
 		$$('#tx-opendocs-menu .toolbar-item-menu')[0].setStyle({
 			left: calculatedOffset + 'px'
@@ -162,4 +167,3 @@ var OpenDocs = Class.create({
 });
 
 var TYPO3BackendOpenDocs = new OpenDocs();
-
diff --git a/typo3/sysext/sys_action/toolbarmenu/tx_sysactions.js b/typo3/sysext/sys_action/toolbarmenu/tx_sysactions.js
index 78b19c55d365..b6451009aace 100644
--- a/typo3/sysext/sys_action/toolbarmenu/tx_sysactions.js
+++ b/typo3/sysext/sys_action/toolbarmenu/tx_sysactions.js
@@ -37,13 +37,13 @@ var SysActionMenu = Class.create({
 	initialize: function() {
 		Event.observe(window, 'resize', this.positionMenu);
 
-		Event.observe(window, 'load', function(){
+		Ext.onReady(function() {
 			this.positionMenu();
 			this.toolbarItemIcon = $$('#tx-sys-action-menu .toolbar-item img')[0].src;
 
 			Event.observe('tx-sys-action-menu', 'click', this.toggleMenu);
 
-		}.bindAsEventListener(this));
+		}, this);
 	},
 
 	/**
@@ -52,7 +52,8 @@ var SysActionMenu = Class.create({
 	positionMenu: function() {
 		var calculatedOffset = 0;
 		var parentWidth      = $('tx-sys-action-menu').getWidth();
-		var ownWidth         = $$('#tx-sys-action-menu ul')[0].getWidth();
+		var currentToolbarItemLayer = $$('#tx-sys-action-menu ul')[0];
+		var ownWidth         = currentToolbarItemLayer.getWidth();
 		var parentSiblings   = $('tx-sys-action-menu').previousSiblings();
 
 		parentSiblings.each(function(toolbarItem) {
@@ -66,6 +67,10 @@ var SysActionMenu = Class.create({
 		});
 		calculatedOffset = calculatedOffset - ownWidth + parentWidth;
 
+			// border correction
+		if (currentToolbarItemLayer.getStyle('display') !== 'none') {
+			calculatedOffset += 2;
+		}
 
 		$$('#tx-sys-action-menu ul')[0].setStyle({
 			left: calculatedOffset + 'px'
@@ -97,4 +102,3 @@ var SysActionMenu = Class.create({
 });
 
 var TYPO3BackendSysactionMenu = new SysActionMenu();
-
-- 
GitLab