ginebra2/chrome/bedrockchrome/bookmarkview.superpage/bookmarkview.js
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 04 May 2010 12:39:35 +0300
changeset 0 1450b09d0cfd
child 3 0954f5dd2cd0
child 5 0f2326c2a325
permissions -rw-r--r--
Revision: 201015 Kit: 201018

var _prevOpenedBookmarkControl = null;
var previousSortEle = null;

function BookmarkToggleControls(ele){
	try {
		
			if(_sortingEnabled && ele.parentNode.parentNode!=previousSortEle) 
			{
				_sortingEnabled = false;
				previousSortEle.className = 'li.no-sort';
				views.WebView.gesturesEnabled = true;
				return false;
			}		
			else if(_sortingEnabled && (ele.parentNode.parentNode==previousSortEle))
			{
				return false;
			}
			
			ele.parentNode.className = (ele.parentNode.className == 'controlIn') ? 'controlOut' : 'controlIn';
			if(ele.parentNode.className == 'controlIn') {
				ele.className = 'collapsed';
				ele.parentNode.childNodes[1].className = "collapsedIcons";
				ele.parentNode.parentNode.childNodes[1].style.width = (parseInt(window.innerWidth)-115)+"px";
			}
	 		else {		
				ele.className = 'expanded';
				ele.parentNode.childNodes[1].className = "expandedIcons";
				ele.parentNode.parentNode.childNodes[1].style.width = (parseInt(window.innerWidth)-195)+"px";
			}

		if(_prevOpenedBookmarkControl != null && _prevOpenedBookmarkControl != ele)
			BookmarkHideControl(_prevOpenedBookmarkControl);
			
	}catch(e) { alert(e); }
	_prevOpenedBookmarkControl = ele;
}


function BookmarkHideControl(ele){
	ele.parentNode.className = 'controlIn';
 	ele.className = 'collapsed';
}


function deleteBookmark(r,bmtitle)
{
	window.bookmarksManager.deleteBookmark(bmtitle);
	//ToDo : check for error code
	r.parentNode.parentNode.parentNode.removeChild(r.parentNode.parentNode);
}


function openUrl(ele, newUrl) {
		// DragStart & DragEnd listeners are defined at bottom
		if(_sortingEnabled && (ele.parentNode!=previousSortEle)) 
		{
			_sortingEnabled = false;
			previousSortEle.className = 'li.no-sort';
			views.WebView.gesturesEnabled = true;
			return false;
		}
		else if(_sortingEnabled && (ele.parentNode==previousSortEle))
			{
				return false;
			}
		else if(__dragendFlag) 
		{
			__dragendFlag = false;
			return false;
		}		

    window.views.WebView.showNormalPage();
    window.ViewStack.switchView( "WebView","BookmarkTreeView");
      	  
		// Laod a page to chrome view
		window.views.WebView.loadUrlToCurrentPage(newUrl);
		views.WebView.gesturesEnabled = true;
}


//'<div class="Title"  onclick="openUrl(\''+bmurl+'\')">'+
//'<div class="collapsedIcons"><img src="icons/edit-icon.gif" width="56" height="56" class="controlIcon">'+
//background-image: url(\''+bmfavicon+'\');

function createBookmarkElement(bmtitle,bmfullurl,bmtrimmedurl, idValue)
{
		var _width = parseInt(window.innerWidth)-115;
		
		var li=document.createElement('li');
		li.id = idValue;
		li.innerHTML = 	  
		'<div class="controlIn">'+
		  '<div class="collapsed" onClick="javascript:BookmarkToggleControls(this);"></div>'+
			'<img class="controlIcon" src="icons/delete-icon.gif" width="56" height="56" vspace="7" hspace="5"  onclick="deleteBookmark(this, \''+bmtitle+'\')">'+
		'</div>'+
		'<div class="Title" style="width:'+_width+'px;" onclick="openUrl(this,\''+bmfullurl+'\')">'+
			'<span class="aTitle">'+bmtitle+'</span>'+
			'<br/>'+
			'<span class="aUrl">'+bmtrimmedurl+'</span>'+
		'</div>';
		
		return li;
}

function clearBookmarkList()
{
	var list = document.getElementById('bookmarkListTree'); 
	while( list.hasChildNodes() ) { 
		list.removeChild( list.lastChild ); 
	} 
}

var __dragendFlag = false;

function longtapbm(ele)
{ 
  if(_sortingEnabled)
  {
			_sortingEnabled = false;
			previousSortEle.className = 'li.no-sort';
			views.WebView.gesturesEnabled = true;
			return false;
  }
  	
  _sortingEnabled = true;
  _sortEleOffsetTop = ele.offsetTop;
  views.WebView.gesturesEnabled = false;
	ele.className = 'sort';
	previousSortEle = ele;
	$("#bookmarkListTree").sortable('enable');

}

// Set to the LongPress object that is currently waiting for activation,
// ie. it has gotten a mouse-down event and has its timer running.
var __currentLongPress;

function longPressStarted(lp)
{
    // Remember the current LongPress object so we can cancel it if scrolling
    // starts.
    __currentLongPress = lp;
}

function handlePanStarted(type) 
{
    // Scrolling started, cancel the LongPress.
    if(__currentLongPress != undefined) {
        __currentLongPress.cancel();
        __currentLongPress = undefined;
    }
}

function createBookmarkView()
{
		try
		{
			__currentLongPress = undefined;
			clearBookmarkList();
			//Get bookmarks data from database
			var bookmakrData = window.bookmarksManager.getBookmarksJSON();
			var myObject = eval('(' + bookmakrData + ')');
			var ul=document.getElementById('bookmarkListTree');
			for(x=0; x<myObject.length; x++)
			{
				var bmurl = myObject[x].urlvalue;
				var bmtitle = myObject[x].title;
				var bmtrimmedurl = bmurl.replace('http://','');
				bmtrimmedurl = bmtrimmedurl.replace('www.','');
				bmtrimmedurl = bmtrimmedurl.replace('file:///','');
				
				//create element and add it to bookmark view   
				var li = createBookmarkElement(bmtitle,bmurl,bmtrimmedurl, x);
				li.className = 'no-sort';
				ul.appendChild(li);
				ul.childNodes[0].focus();
				
				new LongPress(li.id, longtapbm, longPressStarted);
			}
		} catch(E) { alert(E); }
		dragInit();
}

function _updateBookmarkViewGoemetry(displayMode)
{
	try{
		var _list = document.getElementsByClassName('Title');
		for(var i=0; i<_list.length; i++){
			 if(_list[i].parentNode.childNodes[0].className == 'controlIn'){
			 	_list[i].style.width = (parseInt(window.innerWidth)-115)+"px";
			}
			 else{		
			 		_list[i].style.width = (parseInt(window.innerWidth)-195)+"px";
			 }
		}
	}catch(e){ alert(e); }

}

function launchBookmarkView()
{
	try{
        window.chrome.aspectChanged.connect(_updateBookmarkViewGoemetry);
        		
        // Get Bookmarks from the database		
        createBookmarkView();

        // Watch for the start of scrolling in the view so we can cancel the 
        // long presses to prevent them from interfere with scrolling.  Otherwise
        // the long press callback will fire and trigger sortable mode.        
        views.WebView.startingPanGesture.connect(handlePanStarted);
        
    }catch(e){ alert(e); }	
}

function dragInit()
{
	$("#bookmarkListTree").sortable({
		placeholder: 'ui-state-highlight',
		axis:'y',
	  cancel : 'li.no-sort',
	  scrollSensitivity : 40,
	  scrollSpeed : 40,
		start: function(event, ui) {  
			__dragendFlag = true; 
			},
	  update: function(event, ui) {
			 _sortingEnabled = false;	
	     views.WebView.gesturesEnabled = true;
			 $("#bookmarkListTree").sortable('disable');
	
				var sortedItemId = ui.item[0].id;
				var _a = $('#bookmarkListTree').sortable('toArray');
				for(var i=0; i<_a.length; i++)
				{
					if(sortedItemId == _a[i])
					{
						var li = document.getElementById(sortedItemId);
						li.className = 'no-sort';
						var div = li.childNodes[1];
						window.bookmarksManager.reorderBokmarks(div.childNodes[0].firstChild.nodeValue,i);
					}
				}
			}
	});
	
	$("#bookmarkListTree").sortable('disable');
	$("#bookmarkListTree").disableSelection();
		
}