Prechádzať zdrojové kódy

! Revision 10756 broke parts of SMF (Many Files)
! Fix for admin tables overflow bug with sidebar menus (index.css)

Spuds 12 rokov pred
rodič
commit
3e61c6e2d1

+ 1 - 2
Sources/PersonalMessage.php

@@ -1247,8 +1247,7 @@ function MessageSearch2()
 	// Now we look for -test, etc.... normaller.
 	foreach ($tempSearch as $index => $word)
 	{
-		$word = trim($word);
-		if ($word[0] == '.')
+		if (strpos(trim($word), '-') === 0)
 		{
 			$word = substr($smcFunc['strtolower']($word), 1);
 			if (strlen($word) > 0)

+ 3 - 3
Sources/Post.php

@@ -2106,9 +2106,9 @@ function Post2()
 
 	// Return to post if the mod is on.
 	if (isset($_REQUEST['msg']) && !empty($_REQUEST['goback']))
-		redirectexit('topic=' . $topic . '.msg' . $_REQUEST['msg'] . '#msg' . $_REQUEST['msg'], $context['browser']['is_ie']);
+		redirectexit('topic=' . $topic . '.msg' . $_REQUEST['msg'] . '#msg' . $_REQUEST['msg'], isBrowser('ie'));
 	elseif (!empty($_REQUEST['goback']))
-		redirectexit('topic=' . $topic . '.new#new', $context['browser']['is_ie']);
+		redirectexit('topic=' . $topic . '.new#new', isBrowser('ie'));
 	// Dut-dut-duh-duh-DUH-duh-dut-duh-duh!  *dances to the Final Fantasy Fanfare...*
 	else
 		redirectexit('board=' . $board . '.0');
@@ -2290,7 +2290,7 @@ function AnnouncementSend()
 		if (!empty($_REQUEST['move']) && allowedTo('move_any'))
 			redirectexit('action=movetopic;topic=' . $topic . '.0' . (empty($_REQUEST['goback']) ? '' : ';goback'));
 		elseif (!empty($_REQUEST['goback']))
-			redirectexit('topic=' . $topic . '.new;boardseen#new', $context['browser']['is_ie']);
+			redirectexit('topic=' . $topic . '.new;boardseen#new', isBrowser('ie'));
 		else
 			redirectexit('board=' . $board . '.0');
 	}

+ 1 - 1
Themes/default/css/index.css

@@ -2702,7 +2702,7 @@ tr.titlebg td
 	position: relative;
 	left: 0;
 	right: 0;
-	overflow: hidden;
+	overflow: auto;
 }
 
 tr.windowbg td, tr.windowbg2 td, tr.approvebg td, tr.highlight2 td

+ 100 - 0
Themes/default/scripts/hoverIntent.js

@@ -0,0 +1,100 @@
+;(function($){
+	/* hoverIntent by Brian Cherne */
+
+ /*
+ * PLEASE READ THE FOLLOWING BEFORE PLAYING AROUND WITH ANYTHING. KTHNX.
+ * SMF Dev copy - Antechinus - 20th October 2011.
+ * Code has been tweaked to give responsive menus without compromising a11y.
+ * If contemplating changes, testing for full functionality is essential or a11y will be degraded.
+ * Since a11y is the whole point of this system, degradation is not at all desirable regardless of personal preferences.
+ * If you do not understand the a11y advantages of this system, please ask before making changes.
+ *
+ * Full functionality means:
+ * 1/ hoverIntent plugin functions so that drop menus do NOT open or close instantly when cursor touches first level anchor.
+ * 2/ The drop menus should only open when the cursor actually stops on the first level anchor, or is moving very slowly.
+ * 3/ There should be a delay before the drop menus close on mouseout, for people with less than perfect tracking ability.
+ * 4/ Settings for custom tooltips will be done separately in another file.
+ */
+
+	$.fn.hoverIntent = function(f,g) {
+		// default configuration options
+		var cfg = {
+			sensitivity: 10,
+			interval: 40,
+			timeout: 1
+		};
+		// override configuration options with user supplied object
+		cfg = $.extend(cfg, g ? { over: f, out: g } : f );
+
+		// instantiate variables
+		// cX, cY = current X and Y position of mouse, updated by mousemove event
+		// pX, pY = previous X and Y position of mouse, set by mouseover and polling interval
+		var cX, cY, pX, pY;
+
+		// A private function for getting mouse position
+		var track = function(ev) {
+			cX = ev.pageX;
+			cY = ev.pageY;
+		};
+
+		// A private function for comparing current and previous mouse position
+		var compare = function(ev,ob) {
+			ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t);
+			// compare mouse positions to see if they've crossed the threshold
+			if ( ( Math.abs(pX-cX) + Math.abs(pY-cY) ) < cfg.sensitivity ) {
+				$(ob).unbind("mousemove",track);
+				// set hoverIntent state to true (so mouseOut can be called)
+				ob.hoverIntent_s = 1;
+				return cfg.over.apply(ob,[ev]);
+			} else {
+				// set previous coordinates for next time
+				pX = cX; pY = cY;
+				// use self-calling timeout, guarantees intervals are spaced out properly (avoids JavaScript timer bugs)
+				ob.hoverIntent_t = setTimeout( function(){compare(ev, ob);} , cfg.interval );
+			}
+		};
+
+		// A private function for delaying the mouseOut function
+		var delay = function(ev,ob) {
+			ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t);
+			ob.hoverIntent_s = 0;
+			return cfg.out.apply(ob,[ev]);
+		};
+
+		// A private function for handling mouse 'hovering'
+		var handleHover = function(e) {
+			// next three lines copied from jQuery.hover, ignore children onMouseOver/onMouseOut
+			var p = (e.type == "mouseover" ? e.fromElement : e.toElement) || e.relatedTarget;
+			while ( p && p != this ) { try { p = p.parentNode; } catch(e) { p = this; } }
+			if ( p == this ) { return false; }
+
+			// copy objects to be passed into t (required for event object to be passed in IE)
+			var ev = jQuery.extend({},e);
+			var ob = this;
+
+			// cancel hoverIntent timer if it exists
+			if (ob.hoverIntent_t) { ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t); }
+
+			// else e.type == "onmouseover"
+			if (e.type == "mouseover") {
+				// set "previous" X and Y position based on initial entry point
+				pX = ev.pageX; pY = ev.pageY;
+				// update "current" X and Y position based on mousemove
+				$(ob).bind("mousemove",track);
+				// start polling interval (self-calling timeout) to compare mouse coordinates over time
+				if (ob.hoverIntent_s != 1) { ob.hoverIntent_t = setTimeout( function(){compare(ev,ob);} , cfg.interval );}
+
+			// else e.type == "onmouseout"
+			} else {
+				// unbind expensive mousemove event
+				$(ob).unbind("mousemove",track);
+				// if hoverIntent state is true, then call the mouseOut function after the specified delay
+				if (ob.hoverIntent_s == 1) { ob.hoverIntent_t = setTimeout( function(){delay(ev,ob);} , cfg.timeout );}
+			}
+		};
+
+		// bind the function to the two event listeners
+		return this.mouseover(handleHover).mouseout(handleHover);
+	};
+	
+})(jQuery);

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 1 - 0
Themes/default/scripts/jquery-1.6.4.min.js


+ 124 - 0
Themes/default/scripts/superfish.js

@@ -0,0 +1,124 @@
+
+/*
+ * Superfish v1.4.8 - jQuery menu widget
+ * Copyright (c) 2008 Joel Birch
+ *
+ * Dual licensed under the MIT and GPL licenses:
+ * 	http://www.opensource.org/licenses/mit-license.php
+ * 	http://www.gnu.org/licenses/gpl.html
+ *
+ * CHANGELOG: http://users.tpg.com.au/j_birch/plugins/superfish/changelog.txt
+ */
+ 
+ /*
+ * PLEASE READ THE FOLLOWING BEFORE PLAYING AROUND WITH ANYTHING. KTHNX.
+ * Dev copy. Antechinus - 20th October 2011.
+ * Code has been tweaked to remove stuff we do not need (IE7 fix, etc).
+ * Remaining code appears to be essential for full functionality.
+ * If contemplating changes, testing for full functionality is essential or a11y will be degraded.
+ * Since a11y is the whole point of this system, degradation is not at all desirable regardless of personal preferences.
+ * If you do not understand the a11y advantages of this system, please ask before making changes.
+ *
+ * Full functionality means:
+ * 1/ hoverIntent plugin functions so that drop menus do NOT open or close instantly when cursor touches first level anchor.
+ * 2/ The drop menus should only open when the cursor actually stops on the first level anchor, or is moving very slowly.
+ * 3/ There should be a delay before the drop menus close on mouseout, for people with less than perfect tracking ability.
+ * 4/ The drop menus must remain fully accessible via keyboard navigation (eg: the Tab key).
+ */
+
+;(function($){
+	$.fn.superfish = function(op){
+
+		var sf = $.fn.superfish,
+			c = sf.c,
+			over = function(){
+				var $$ = $(this), menu = getMenu($$);
+				clearTimeout(menu.sfTimer);
+				$$.showSuperfishUl().siblings().hideSuperfishUl();
+			},
+			out = function(){
+				var $$ = $(this), menu = getMenu($$), o = sf.op;
+				clearTimeout(menu.sfTimer);
+				menu.sfTimer=setTimeout(function(){
+					o.retainPath=($.inArray($$[0],o.$path)>-1);
+					$$.hideSuperfishUl();
+					if (o.$path.length && $$.parents(['li.',o.hoverClass].join('')).length<1){over.call(o.$path);}
+				},o.delay);	
+			},
+			getMenu = function($menu){
+				var menu = $menu.parents(['ul.',c.menuClass,':first'].join(''))[0];
+				sf.op = sf.o[menu.serial];
+				return menu;
+			},
+			// This next line is essential, despite the other code for arrows being removed.
+			// Changing the next line WILL break hoverIntent functionality. Very bad.
+			addArrow = function($a){$a.addClass(c.anchorClass)};
+
+		return this.each(function() {
+			var s = this.serial = sf.o.length;
+			var o = $.extend({},sf.defaults,op);
+			o.$path = $('li.'+o.pathClass,this).slice(0,o.pathLevels).each(function(){
+				$(this).addClass([o.hoverClass,c.bcClass].join(' '))
+					.filter('li:has(ul)').removeClass(o.pathClass);
+			});
+			sf.o[s] = sf.op = o;
+			$('li:has(ul)',this)[($.fn.hoverIntent && !o.disableHI) ? 'hoverIntent' : 'hover'](over,out).each(function() {})
+			.not('.'+c.bcClass)
+				.hideSuperfishUl();
+
+			var $a = $('a',this);
+			$a.each(function(i){
+				var $li = $a.eq(i).parents('li');
+				$a.eq(i).focus(function(){over.call($li);}).blur(function(){out.call($li);});
+			});
+			o.onInit.call(this);
+			
+		}).each(function() {
+			var menuClasses = [c.menuClass];
+			$(this).addClass(menuClasses.join(' '));
+		});
+	};
+
+	var sf = $.fn.superfish;
+	sf.o = [];
+	sf.op = {};
+	sf.c = {
+		bcClass     : 'sf-breadcrumb',
+		menuClass   : 'sf-js-enabled',
+		anchorClass : 'sf-with-ul',
+	};
+	sf.defaults = {
+		hoverClass	: 'sfhover',
+		pathClass	: 'current',
+		pathLevels	: 1,
+		delay		: 700,
+		animation	: {opacity:'show', height:'show'},
+		speed		: 300,
+		disableHI	: false,		// Leave as false. True disables hoverIntent detection (not good).
+		onInit		: function(){}, // callback functions
+		onBeforeShow: function(){},
+		onShow		: function(){},
+		onHide		: function(){}
+	};
+	$.fn.extend({
+		hideSuperfishUl : function(){
+			var o = sf.op,
+				not = (o.retainPath===true) ? o.$path : '';
+			o.retainPath = false;
+			var $ul = $(['li.',o.hoverClass].join(''),this).add(this).not(not).removeClass(o.hoverClass)
+					.find('>ul').hide().css('opacity','0');
+			o.onHide.call($ul);
+			return this;
+		},
+		showSuperfishUl : function(){
+			var o = sf.op,
+				sh = sf.c,
+				$ul = this.addClass(o.hoverClass)
+					.find('>ul:hidden').css('opacity','1');
+			o.onBeforeShow.call($ul);
+			$ul.animate(o.animation,o.speed,function(){o.onShow.call($ul);});
+			return this;
+		}
+	});
+
+})(jQuery);

Niektoré súbory nie sú zobrazené, pretože je v týchto rozdielových dátach zmenené mnoho súborov