diff -r bf4420e9fa4d -r 2e16851ffecd ginebra/chrome/bedrockchrome/urlsearch.snippet/urlsearch.js --- a/ginebra/chrome/bedrockchrome/urlsearch.snippet/urlsearch.js Fri Jun 11 16:23:26 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,567 +0,0 @@ -/*! - \file urlsearch.js This module contains the UrlSearch class. -*/ - -var enumObj = new Object(); -enumObj.state = {Loading:0, Editing:1, Reloadable:2} - -/* The following "classes" are psudo classes since javascript doesn't have - true classes. The prototype object is a property of all JavaScript - objects and can be used to impart properties to each instance of a - class - these properties become public and can't access private class - members. Another way to create a public method is to add code like the - following inside of the class constructor. - - // create a public method named clearPBar - this.clearPBar = function() - { - } - - Methods created this way can access private members. Syntax-wise, - private member variables and methods are created in the usual fasion but - within the class constructor. Semantically they are simulated in JavaScript - using closures. -*/ - -/*! - Class to handle displaying and updating the URL search bar. Only 1 search - bar should be created for the browser. This class is not designed to be code - space efficient for creating multiple URL search bar objects. -*/ -function UrlSearch(lastUrl) -{ - /*! - Class to handle displaying and updating the URL text box. - */ - function UrlTextBox() - { - } - - //! UrlTextBox Public Methods - - UrlTextBox.prototype.getTextBoxValue = function() - { - return document.gotoUrlForm.textBox.value; - } - - UrlTextBox.prototype.setTextBoxValue = function(text) - { - //window.chrome.alert("setTextBoxValue" + text); - document.gotoUrlForm.textBox.value = text; - } - - // Unused Method - UrlTextBox.prototype.textBoxFocus = function() - { - document.gotoUrlForm.textBox.focus(); - } - - UrlTextBox.prototype.hasFocus = function() - { - return document.getElementById("urlBox").hasFocus; - } - - UrlTextBox.prototype.setFocus = function(hasFocus) - { - document.getElementById("urlBox").hasFocus = hasFocus; - } - - /*! - Class to handle displaying and updating the URL tri-state button. - */ - function UrlTriStateButton() - { - } - - //! UrlTriStateButton Public Methods - UrlTriStateButton.prototype.setButton = function() - { - //window.chrome.alert("setButton " + window.pageController.loadState); - btnDom = document.getElementById("tristateBtn").button; - switch (window.pageController.loadState) { - case enumObj.state.Loading: - btnDom.updateImages("urlsearch.snippet/icons/stop.png", - "urlsearch.snippet/icons/stop_pushed.png", - "urlsearch.snippet/icons/stop.png"); - break; - case enumObj.state.Editing: - btnDom.updateImages("urlsearch.snippet/icons/goto.png", - "urlsearch.snippet/icons/goto_pushed.png", - "urlsearch.snippet/icons/goto.png"); - break; - case enumObj.state.Reloadable: - btnDom.updateImages("urlsearch.snippet/icons/reload.png", - "urlsearch.snippet/icons/reload_pushed.png", - "urlsearch.snippet/icons/reload.png"); - break; - default: - window.chrome.alert("Incorrect state"); - break; - } - - document.getElementById("tristateBtn").button.updateButton(); - } - - // Unused Method - UrlTriStateButton.prototype.changeTriState = function(a) - { - if (this.getValue() != a) { - this.setValue(a); - /* Shouln't have to do this check. This function should be - * called only after chrome has completed loading which - * means that all snippets have also been created. - */ - if (window.snippets.UrlSearchChromeId) { - window.snippets.UrlSearchChromeId.repaint(); - } - } - } - - /*! - Class to handle displaying and updating the URL progress bar. - */ - function UrlProgressBar() - { - this.oldpercent = 0; - } - - //! UrlProgressBar Public Methods - - UrlProgressBar.prototype.setProgress = function(widthStr) - { - document.getElementById("PBar").style.width = widthStr; - } - - UrlProgressBar.prototype.handlePageLoadProgress = function(percent) - { - //window.chrome.alert("Load prog "+percent); - if ((window.viewManager.currentView.type == "webView") && - (this.oldpercent != percent)) { - this.oldpercent = percent; - //window.chrome.alert("Load prog "+percent); - var parentWidth = document.getElementById("PWrap").offsetWidth; - this.setProgress((parentWidth * percent)/100 + "px"); - } - } - - UrlProgressBar.prototype.updateProgress = function(percent) - { - if (percent != 100) { - //window.chrome.alert("Load prog "+percent); - var parentWidth = document.getElementById("PWrap").offsetWidth; - this.setProgress((parentWidth * percent)/100 + "px"); - } else { - //clearProgressBar(); - this.setProgress("0%"); - oldpercent = 0; - } - } - - // UrlSearch Private Member Variables - var animator; - var animating = false; - var defaultPos; - var defaultHeight; - var animateDuration = 500; - var __blockDeselect = false; - var urlBarTextBox = new UrlTextBox(); - var urlBarButton = new UrlTriStateButton(); - var urlBarProgressBar = new UrlProgressBar(); - var searchSuggestEngine = new SearchSuggest(); - // UrlSearch Private Methods - - function _urlsearch_write(lastUrl) { - var html = ''+ - '
' + - '' + - '' + - ''+ - '' + - '' + - '' + - '
' + - '
' + - '' + - '
' + - '
' + - '
' + - '
' + - '
'; - - document.write(html); - } - - function loadToMainWindow(gotourl){ - // use a single call to guess url and goto url - // (could do as separate calls, but we try to eliminate lag with a single call) - - //var correctedUrl = window.chrome.guessAndGotoUrl(gotourl); - //urlBarTextBox.setTextBoxValue(correctedUrl); - - var gotourl = window.chrome.guessUrlFromString(gotourl); - window.pageController.currentLoad(gotourl); - urlBarTextBox.setTextBoxValue(gotourl); - window.pageController.urlTextChanged(gotourl); - } - - function loadSearchUrl(gotourl){ - var gotourl = window.chrome.searchUrl(gotourl); - window.pageController.currentLoad(gotourl); - urlBarTextBox.setTextBoxValue(gotourl); - window.pageController.urlTextChanged(gotourl); - } - - function chromeAlert(){ - window.chrome.alert("chrome Alert!"); - } - - function canSeeUrl() - { - return (!window.snippets.UrlSearchChromeId.isHiding && window.snippets.UrlSearchChromeId.isVisible()); - } - - function showUrlBar() - { - if (!canSeeUrl()) { - //window.chrome.alert("showUrlbar"); - window.snippets.UrlSearchChromeId.zValue = window.snippets.StatusBarChromeId.zValue - 1; - window.snippets.UrlSearchChromeId.setPosition(0,defaultPos); - window.snippets.UrlSearchChromeId.show(false); - window.chrome.updateViewPort(); - } - } - - function hideUrlBar() - { - //window.chrome.alert("hideUrlbar"); - if (canSeeUrl()) { - window.snippets.UrlSearchChromeId.hide(false); - } - } - - function slideUrlOut() { - //window.chrome.alert("slideUrlOut"); - if (canSeeUrl()) { - window.snippets.UrlSearchChromeId.zValue = window.snippets.StatusBarChromeId.zValue - 1; - animating = true; - //window.snippets.UrlSearchChromeId.isHiding = true; - animator = window.snippets.UrlSearchChromeId.animate(animateDuration).translateBy(0, -1 * defaultHeight).start(); - animator.updated.connect(animationUpdated); - animator.finished.connect(hideAnimationFinished); - } - } - - function slideUrlIn() - { - /* show it at right position and zorder first */ - window.snippets.UrlSearchChromeId.zValue = window.snippets.StatusBarChromeId.zValue - 1; - window.snippets.UrlSearchChromeId.setPosition(0, defaultPos-defaultHeight); - window.snippets.UrlSearchChromeId.show(false); - //window.snippets.UrlSearchChromeId.isHiding = false; - - animating = true; - animator = window.snippets.UrlSearchChromeId.animate(animateDuration).translateBy(0, defaultHeight).start(); - animator.updated.connect(animationUpdated); - animator.finished.connect(showAnimationFinished); - } - - function setUrlSearchValues() - { - //window.chrome.alert("setUrlSearchValues " + window.pageController.loadText); - urlBarTextBox.setTextBoxValue(window.pageController.loadText); - urlBarButton.setButton(); - - //window.chrome.alert("setProgress " + "New: " + window.pageController.loadProgressValue + " Old Value: " + oldpercent ); - var percent = window.pageController.loadProgressValue; - - urlBarProgressBar.updateProgress(percent); - if (percent == 100) { - __blockDeselect = false; - urlBarTextBox.setFocus(false); - } - window.snippets.UrlSearchChromeId.repaint(); - } - - function animationUpdated(value) - { - window.chrome.updateViewPort(); - } - - function hideAnimationFinished() - { - //window.chrome.alert("hideAnimationFinished"); - animating = false; - window.snippets.UrlSearchChromeId.isHiding = true; - } - - function showAnimationFinished() - { - //window.chrome.alert("showAnimationFinished"); - animating = false; - window.snippets.UrlSearchChromeId.isHiding = false; - } - - // Public Methods - this.focusElement = function(el, event) - { - el.select(); - __blockDeselect = true; - document.getElementById("urlBox").scrollLeft = 1000; - urlBarTextBox.setFocus(true); - } - - this.mouseDownElement = function(el, event) - { - // Clear __justSelected in case the element gained focus through some non-mouse event - // and still has focus. - __blockDeselect = false; - } - - this.mouseUpElement = function(el, event) - { - // Return false to prevent Qt from deselecting the text if we've just selected it - // in focusElement(), return true otherwise. - - var result = !__blockDeselect; - __blockDeselect = false; - return result; - } - - this.clearPBar = function() - { - urlBarProgressBar.setProgress("0%"); - } - - this.pushTriState = function() - { - //window.chrome.alert("pushTriState " + window.pageController.loadState); - switch (window.pageController.loadState) { - case enumObj.state.Loading: - //window.chrome.alert("In loading state, stop loading"); - window.pageController.currentStop(); - setTimeout("urlsearch.clearPBar()", 50); - break; - case enumObj.state.Editing: - //window.chrome.alert("In editing state, start loading"); - loadToMainWindow(urlBarTextBox.getTextBoxValue()); - break; - case enumObj.state.Reloadable: - //window.chrome.alert("In reloadable state, start reloading"); - window.pageController.currentReload(); - break; - default: - window.chrome.alert("Incorrect state"); - break; - } - urlBarButton.setButton(); - - } - - this.resetTriState = function() - { - if(window.pageController.loadState == enumObj.state.Reloadable) { - urlBarTextBox.setFocus(true); - //window.chrome.alert("Change to editing"); - window.pageController.setLoadState(enumObj.state.Editing); - urlBarButton.setButton(); - } - } - - this.querySuggests = function() - { - /* Disable suggests - var text = urlBarTextBox.getTextBoxValue(); - //window.chrome.alert("call searchSuggest " + text); - searchSuggests.removeAllItems(); - searchSuggests.hideSuggests(); - searchSuggestEngine.searchSuggest(text, this.updateSuggests); - */ - } - - this.updateSuggests = function(result) - { - var curText = urlBarTextBox.getTextBoxValue(); - searchSuggests.removeAllItems(); - if (result.length > 1 && curText == result[0]){ - for(var i = 1; i < result.length; i++) { - //window.chrome.alert(result[i]); - searchSuggests.addItem(result[i]); - } - searchSuggests.showSuggests(); - } - - - - } - - // UrlSearch Constructor - - // do setup - _urlsearch_write(lastUrl); - - - // Init the button - new SimpleButton("tristateBtn", - "urlsearch.snippet/icons/goto.png", - "urlsearch.snippet/icons/goto_pushed.png", - "urlsearch.snippet/icons/goto.png", - this.pushTriState); - urlBarButton.setButton(); - - // Note that in the slots below the "this" object is never used directly. - // This is because they don't have access to "this" as they are called - // externaly. - - // Connect Chrome load complete signal to slot. - window.chrome.loadComplete.connect( - function () { - defaultPos = window.snippets.UrlSearchChromeId.anchorOffset; - defaultHeight = UrlSearchChromeId.offsetHeight; - } - ); - - // Connect various Page Controller signals to slots. - window.pageController.pageUrlChanged.connect( - function(url) { - //window.chrome.alert(url); - //url is coming from loadContoller. So need not set it back - urlBarTextBox.setTextBoxValue(url); - } - ); - - window.pageController.pageLoadStarted.connect( - function() { - //window.chrome.alert("Load start"); - urlBarProgressBar.setProgress("5%"); - urlBarButton.setButton(); - - /* show url bar if it's hiding in contentView */ - if (window.viewManager.currentView.type == "webView") { - if (window.snippets.UrlSearchChromeId) { - showUrlBar(); - } - } - } - ); - - window.pageController.pageLoadProgress.connect( - function(percent) { - urlBarProgressBar.handlePageLoadProgress(percent); - } - ); - - window.pageController.pageLoadFinished.connect( - function(ok) { - //window.chrome.alert("pageLoadFinished: "); - // If the load was finished normally and not due to user stopping it, - // simulate progress completion - if(!window.pageController.loadCanceled) { - urlBarProgressBar.setProgress("99%"); - } - setTimeout("urlsearch.clearPBar()", 500); - __blockDeselect = false; - urlBarTextBox.setFocus(false); - urlBarButton.setButton(); - - /* start hide animation if contentYpos is not zero */ - if (window.viewManager.currentView.type == "webView") { - if (window.snippets.UrlSearchChromeId && window.pageController.contentsYPos > 0) { - slideUrlOut(); - } - } - } - ); - - window.pageController.pageIconChanged.connect( - function() { - window.chrome.alert("FAVICON changed"); - } - ); - - window.pageController.pageCreated.connect( - function() { - //window.chrome.alert("add new window"); - showUrlBar(); - } - ); - - window.pageController.pageChanged.connect( - function() { - - //window.chrome.alert("Page changed"); - // Set the values of the new page - setUrlSearchValues(); - } - ); - - window.pageController.pageScrollPositionZero.connect( - function() { - var contentYPos = window.pageController.contentsYPos; - //window.chrome.alert("pageScrollRequested contentYPos = " + contentYPos); - if (contentYPos > 0) { - if(canSeeUrl() && !animating && !pageController.isPageLoading) { - slideUrlOut(); - //window.chrome.updateViewPort(); - } - } - else { - if(!canSeeUrl() && !animating) { - slideUrlIn(); - } - } - } - ); - - // Connect snippets CR signal to slot. - window.snippets.symbianCarriageReturn.connect( - function() { - if (urlBarTextBox.hasFocus()) { - // When we get load started, the button will be changed - loadToMainWindow(urlBarTextBox.getTextBoxValue()); - } - } - ); - - // Connect View Manager current view changed signal to slot. - window.viewManager.currentViewChanged.connect( - function() { - if (window.viewManager.currentView.type == "webView") { - /*window.chrome.alert("currentViewChanged window.viewManager.currentView.type =" + window.viewManager.currentView.type + "Pos " + window.pageController.contentsYPos == 0 + "Loading still: " + pageController.isPageLoading);*/ - // When we change back to content view, show the urlsearch bar if either we are - // at the top or we are still loading the page (in this case, we will hide the urlsearch bar - // if needed on getting loadFinished - if (window.pageController.contentsYPos == 0 || pageController.isPageLoading) { - // show url bar with no animation - showUrlBar(); - } - //set the correct values based on the window - //window.chrome.alert("currentViewChanged " + window.pageController.loadText); - setUrlSearchValues(); - - // place focus in urlsearch bar when returning from adding a new window in windows view - if (window.pageController.loadText == "") { - __blockDeselect = false; - document.getElementById("urlBox").focus(); - return; - } - } else { - //Save url text box value - window.pageController.urlTextChanged(urlBarTextBox.getTextBoxValue()); - - // Remove progress bar and url text field value so that - // incorrect values are not seen before we can update when we come back - urlBarTextBox.setTextBoxValue(""); - urlBarProgressBar.setProgress("0%"); - hideUrlBar(); - } - - } - ); -} -