ginebra2/chrome/bedrockchrome/bookmarkview.superpage/bookmarkview.js
changeset 5 0f2326c2a325
parent 0 1450b09d0cfd
child 6 1c3b8676e58c
--- a/ginebra2/chrome/bedrockchrome/bookmarkview.superpage/bookmarkview.js	Fri May 14 15:40:36 2010 +0300
+++ b/ginebra2/chrome/bedrockchrome/bookmarkview.superpage/bookmarkview.js	Wed Jun 23 17:59:43 2010 +0300
@@ -1,250 +1,304 @@
-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 __prevOpenedBookmarkControl = null;
+var __previousSortEle = null;
+var __bookmarkCount= 0;
+var __bookmarkEditElement= null;
 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;
+var __cancelLinkOpening = false;
 
-function longPressStarted(lp)
+function _enableSorting(ele) {
+
+    ele.className = 'sort';
+		
+		var evt = document.createEvent("MouseEvents");
+		evt.initMouseEvent("mousedown", true, true, window,
+		  0, 0, 0, gInitialX, gInitialY, false, false, false, false, 0, null);
+		var canceled = !ele.dispatchEvent(evt);
+    
+  	views.WebView.gesturesEnabled = false;
+
+    ele.childNodes[0].className = 'controlInSort';
+    ele.childNodes[0].childNodes[0].className = 'collapsedSort';
+
+  __sortingEnabled = true;
+  __sortEleOffsetTop = ele.offsetTop;
+  __previousSortEle = ele;
+    
+    ele.className = 'highlight';
+
+  }
+
+function _disableSorting(ele) {
+
+    views.WebView.gesturesEnabled = true;
+    
+    ele.className = 'no-sort';
+    ele.childNodes[0].className = 'controlIn';
+    ele.childNodes[0].childNodes[0].className = 'collapsed';
+
+    __sortingEnabled = false;
+    __sortEleOffsetTop = 0;
+    __previousSortEle = null;
+}
+
+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) {
+                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);
+                        _disableSorting(li);
+
+                        var div = li.childNodes[1];
+                        window.bookmarksManager.reorderBokmarks(div.childNodes[0].firstChild.nodeValue,i);
+                    }
+                }
+            }
+    });
+
+    $("#bookmarkListTree").sortable('enable');
+    $("#bookmarkListTree").disableSelection();
+}
+
+function _longPress(ele)
+{
+  if (__sortingEnabled)
+  {
+            _disableSorting(__previousSortEle)
+            return false;
+  }
+
+  if(__prevOpenedBookmarkControl)
+  	_bookmarkHideControl(__prevOpenedBookmarkControl);
+  	
+    _enableSorting(ele);
+}
+
+function _longPressStarted(lp)
 {
     // Remember the current LongPress object so we can cancel it if scrolling
     // starts.
     __currentLongPress = lp;
+    __cancelLinkOpening = false;
 }
 
-function handlePanStarted(type) 
+function _handlePanStarted(type)
 {
+		__cancelLinkOpening = true;
+		
     // Scrolling started, cancel the LongPress.
-    if(__currentLongPress != undefined) {
+      if (__currentLongPress != undefined) {
         __currentLongPress.cancel();
         __currentLongPress = undefined;
     }
 }
 
-function createBookmarkView()
+
+function _bookmarkHideControl(ele){
+    ele.childNodes[0].className = 'controlIn';
+    ele.childNodes[0].childNodes[0].className = 'collapsed';
+    ele.childNodes[1].style.width = (parseInt(window.innerWidth)-70)+"px";
+}
+
+function _bookmarkToggleControls(ele){
+    try {
+
+            if (__sortingEnabled && ele.parentNode.parentNode!=__previousSortEle)
+            {
+                _disableSorting(__previousSortEle)
+                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.parentNode.childNodes[1].style.width = (parseInt(window.innerWidth)-70)+"px";
+            }
+            else {
+                ele.className = 'expanded';
+                ele.parentNode.parentNode.childNodes[1].style.width = (parseInt(window.innerWidth)-220)+"px";
+            }
+
+        if (__prevOpenedBookmarkControl != null && __prevOpenedBookmarkControl != ele.parentNode.parentNode)
+            _bookmarkHideControl(__prevOpenedBookmarkControl);
+
+    }catch(e) { alert(e); }
+
+    __prevOpenedBookmarkControl = ele.parentNode.parentNode;
+}
+
+function _addNewBookmark(bmtitle,bmurl)
 {
-		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();
+    if (__previousSortEle    != null)
+        _disableSorting(__previousSortEle)
+
+    __bookmarkCount += 1;
+    //create element and add it to bookmark view
+    var ul=document.getElementById('bookmarkListTree');
+    var dbgTitle = bmtitle.replace(/'/g, "&#39");
+  dbgTitle = dbgTitle.replace(/"/g, "&#34");
+    var li = _createBookmarkElement(dbgTitle,bmurl,__bookmarkCount);
+		li.className = 'no-sort';
+    ul.insertBefore(li, ul.childNodes[0]);
+    ul.childNodes[0].focus();
+		new LongPress(li.id, _longPress, _longPressStarted);
+
+    $('html, body').animate({
+                        scrollTop: 0}, 1000);
+}
+
+function _editBookmark(bmtitle,bmurl)
+{
+    __bookmarkEditElement.childNodes[1].childNodes[0].innerText  = bmtitle;
+    __bookmarkEditElement.childNodes[1].childNodes[2].innerText  = bmurl;
+}
+
+function _launchEditBookmark(r,bmtitle,bmurl)
+{
+    __bookmarkEditElement = r.parentNode.parentNode;
+    window.bookmarksManager.launchEditBookmark(bmtitle,bmurl);
+}
+
+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))
+        {
+            _disableSorting(__previousSortEle)
+            return false;
+        }
+        else if (__sortingEnabled && (ele.parentNode==__previousSortEle))
+            {
+                return false;
+            }
+        else if (__dragendFlag)
+        {
+            __dragendFlag = false;
+            return false;
+        }
+        else if(__cancelLinkOpening)
+        {
+        	__cancelLinkOpening = 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;
 }
 
 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); }
+    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)-70)+"px";
+            }
+             else{
+                    _list[i].style.width = (parseInt(window.innerWidth)-220)+"px";
+             }
+        }
+    }catch(e){ alert(e); }
+
+}
 
+function _createBookmarkElement(bmtitle,bmfullurl,idValue)
+{
+        var _width = parseInt(window.innerWidth)-70;
+        var escapedTitle = bmtitle.replace(/&#39/g, "\\'"); 
+        var li=document.createElement('li');
+        li.id = idValue;
+        li.innerHTML =
+        '<div class="controlIn">'+
+          '<div class="collapsed" onClick="javascript:_bookmarkToggleControls(this);"></div>'+
+            '<img src="icons/edit_btn.png" width="56" height="56" vspace="7" hspace="5" '+
+              'onclick="_launchEditBookmark(this,this.parentNode.parentNode.childNodes[1].childNodes[0].innerText,'+
+                                                                     'this.parentNode.parentNode.childNodes[1].childNodes[2].innerText)">'+
+            '<img src="icons/delete_btn.png" width="56" height="56" vspace="7" hspace="5" '+
+               'onclick="_deleteBookmark(this, \''+escapedTitle+'\')">'+
+        '</div>'+
+        '<div class="Title" style="width:'+_width+'px;" onclick="_openUrl(this,this.childNodes[2].innerText);">'+
+            '<span class="aTitle">'+bmtitle+'</span>'+
+            '<br/>'+
+            '<span class="aUrl">'+bmfullurl+'</span>'+
+        '</div>';
+
+        return li;
+}
+
+function _createBookmarkView()
+{
+        try
+        {
+            __currentLongPress = undefined;
+            //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;
+
+                //create element and add it to bookmark view
+                var li = _createBookmarkElement(bmtitle,bmurl, x);
+                li.className = 'no-sort';
+                ul.appendChild(li);
+                ul.childNodes[0].focus();
+
+                new LongPress(li.id, _longPress, _longPressStarted);
+                __bookmarkCount = x;
+            }
+        } catch(E) { alert(E); }
+
+        _dragInit();
 }
 
 function launchBookmarkView()
 {
-	try{
+    try{
         window.chrome.aspectChanged.connect(_updateBookmarkViewGoemetry);
-        		
-        // Get Bookmarks from the database		
-        createBookmarkView();
+        window.bookmarksManager.bookmarkEntryAdded.connect(_addNewBookmark);
+        window.bookmarksManager.bookmarkEntryModified.connect(_editBookmark);
 
-        // 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); }	
-}
+        // Get Bookmarks from the database
+        _createBookmarkView();
 
-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();
-		
-}
+        // 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); }
+}
\ No newline at end of file