127 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			127 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /*
 | |
| This program is free software; you can redistribute it and/or modify
 | |
| it under the terms of the GNU AFFERO General Public License as published by
 | |
| the Free Software Foundation; either version 3 of the License, or
 | |
| any later version.
 | |
| 
 | |
| This program is distributed in the hope that it will be useful,
 | |
| but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
| GNU General Public License for more details.
 | |
| 
 | |
| You should have received a copy of the GNU Affero General Public License
 | |
| along with this program; if not, write to the Free Software
 | |
| Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 | |
| or see http://www.gnu.org/licenses/agpl.txt.
 | |
| */
 | |
| 
 | |
| // OSRM GUIBoxHandle
 | |
| // [performs showing and hiding of UI boxes]
 | |
| 
 | |
| OSRM.GUIBoxHandle = function( box_name, side, cssText, transitionStartFct, transitionEndFct  ) {
 | |
| 	// do not create handle if box does not contain a toggle button
 | |
| 	var toggle = document.getElementById( box_name + '-toggle');
 | |
| 	if( toggle == null ) {
 | |
| 		console.log("[error] No toggle button for " + box_name);
 | |
| 		return;
 | |
| 	}
 | |
| 	
 | |
| 	// create DOM elements
 | |
| 	var wrapper = document.createElement('div');
 | |
| 	wrapper.id = box_name + '-handle-wrapper';
 | |
| 	wrapper.className = 'not-selectable box-wrapper box-handle-wrapper-'+side;
 | |
| 	wrapper.style.cssText += cssText;
 | |
| 	var content = document.createElement('div');
 | |
| 	content.id = box_name + '-handle-content';
 | |
| 	content.className = 'box-content box-handle-content-'+side;
 | |
| 	var icon = document.createElement('div');
 | |
| 	icon.id = box_name + '-handle-icon';
 | |
| 	icon.className = 'iconic-button';
 | |
| 	
 | |
| 	content.appendChild(icon);
 | |
| 	wrapper.appendChild(content);
 | |
| 	document.body.appendChild(wrapper);
 | |
| 	
 | |
| 	// create attributes
 | |
| 	this._box = document.getElementById( box_name + '-wrapper' );
 | |
| 	this._width = this._box.clientWidth;
 | |
| 	this._handle = wrapper;
 | |
| 	this._box_group = null;
 | |
| 
 | |
| 	// show or hide
 | |
| 	if(side=="left") {
 | |
| 		this._box_visible = true;
 | |
| 		this._handle.style.visibility="hidden";
 | |
| 	} else {
 | |
| 		this._box_visible = false;
 | |
| 		this._handle.style.visibility="visible";		
 | |
| 	}	
 | |
| 	
 | |
| 	// add functionality
 | |
| 	var toggle_fct = side == "left" ? this._toggleLeft : this._toggleRight;
 | |
| 	var full_fct = transitionStartFct ? OSRM.concat(toggle_fct, transitionStartFct) : toggle_fct;
 | |
| 	var fct = OSRM.bind( this, full_fct );
 | |
| 	toggle.onclick = fct;
 | |
| 	icon.onclick = fct;
 | |
| 	
 | |
| 	var full_fct = transitionEndFct ? OSRM.concat(this._onTransitionEnd, transitionEndFct) : this._onTransitionEnd;
 | |
| 	var fct = OSRM.bind( this, full_fct );	
 | |
| 	if( OSRM.Browser.FF3==-1 && OSRM.Browser.IE6_9==-1 ) {
 | |
| 		var box_wrapper = document.getElementById(box_name + '-wrapper');
 | |
| 		box_wrapper.addEventListener("transitionend", fct, false);
 | |
| 		box_wrapper.addEventListener("webkitTransitionEnd", fct, false);
 | |
| 		box_wrapper.addEventListener("oTransitionEnd", fct, false);
 | |
| 		box_wrapper.addEventListener("MSTransitionEnd", fct, false);
 | |
| 	} else {
 | |
| 		this._transitionEndFct = fct;
 | |
| 	}
 | |
| };
 | |
| 
 | |
| OSRM.extend( OSRM.GUIBoxHandle, {
 | |
| addToGroup: function(group) {
 | |
| 	this._box_group = group;
 | |
| },
 | |
| show: function() {
 | |
| 	this._handle.style.visibility="visible";
 | |
| },
 | |
| hide: function() {
 | |
| 	this._handle.style.visibility="hidden";
 | |
| },
 | |
| boxVisible: function() {
 | |
| 	return this._box_visible;
 | |
| },
 | |
| boxWidth: function() {
 | |
| 	return this._width;
 | |
| },
 | |
| 
 | |
| _toggleLeft: function() {
 | |
| 	if( this._box_visible == false ) {
 | |
| 		if(this._box_group) this._box_group.hide(); else this.hide();
 | |
| 		this._box.style.left="5px";
 | |
| 	} else {
 | |
| 		this._box.style.left=-this._width+"px";
 | |
| 	}
 | |
| 	// old browser support
 | |
| 	if( OSRM.Browser.FF3!=-1 || OSRM.Browser.IE6_9!=-1 )
 | |
| 		setTimeout(this._transitionEndFct, 0);
 | |
| },
 | |
| _toggleRight: function() {
 | |
| 	if( this._box_visible == false ) {
 | |
| 		if(this._box_group) this._box_group.hide(); else this.hide();
 | |
| 		this._box.style.right="5px";
 | |
| 	} else {
 | |
| 		this._box.style.right=-this._width+"px";
 | |
| 	}
 | |
| 	// old browser support
 | |
| 	if( OSRM.Browser.FF3!=-1 || OSRM.Browser.IE6_9!=-1 )
 | |
| 		setTimeout(this._transitionEndFct, 0);
 | |
| },
 | |
| _onTransitionEnd: function() {
 | |
| 	if( this._box_visible == true ) {
 | |
| 		if(this._box_group) this._box_group.show(); else this.show();
 | |
| 		this._box_visible = false;
 | |
| 	} else {
 | |
| 		this._box_visible = true;		
 | |
| 	}	
 | |
| }
 | |
| }); |