ginebra2/chrome/bedrockchrome/geolocation.snippet/geolocationDialog.js
author hgs
Fri, 15 Oct 2010 17:30:59 -0400
changeset 16 3c88a81ff781
permissions -rw-r--r--
201041

/*!
  \file geolocationDialog.js This module contains GeolocationDialog class which
  prompts user for accepting/rejection geolocation request.
*/
function GeolocationDialog() {
	  var _frame;
	  var _page;
	
    var onChromeComplete = function()
    {
        // Watch for geolocation permission request. ".bind(this)" is used to resolve amibiguous this pointer.
        window.pageController.requestGeolocationPermission.connect(
            function(frame, page, domain) {
       
        	      _frame = frame;
        	      _page = page;
        	      
        	      this.showDialog(domain);
        	      
            }.bind(this)
        );
    }
    
    //! Create the html/DOM elements for the Dialog.
    this.setupPage = function() {
        var html =
            '<div class="top"></div>' +
              '<div class="body">' +
                '<div class="geolocationTextLabel" id="geolocationDialogTitle">Location Permissions</div>' +
                '<div class="geolocationWarningLabel" id="geolocationDialogWarning"></div>' +
                '<div class="geolocationCheckboxTextLabel"><input type="checkbox" id="geolocationCheckboxId"/>' +
                '<label id="geolocationCheckboxTextLabelId" onmouseup="GeolocationDialog.toggleCheckbox();"> Save This Setting</label></div>' +
                '<div class="controls">' +
                  '<div type="button" onmouseup="GeolocationDialog.permissionGranted();" class="geolocationAcceptButton"></div>' + 
                  '<div type="button" onmouseup="GeolocationDialog.permissionDenied();" class="geolocationRejectButton"></div>' +
                '</div>' + /*controls*/
              '</div>' + /*body*/
            '<div class="bottom"></div>';
        document.write(html);
    }
    
    //! Show the Dialog to display the request domain and ask user for permission.
    this.showDialog = function(domain) {
    	  snippets.BookmarkViewToolbarId.enabled = false;
        snippets.WebViewToolbarId.enabled = false;
        
        // Translate these texts
        var dialogTitle = document.getElementById("geolocationDialogTitle");
        dialogTitle.firstChild.nodeValue = window.localeDelegate.translateText("txt_browser_location_dialog_location_permissions");
               
    	  var dialogWarning = document.getElementById("geolocationDialogWarning");
    	  dialogWarning.innerHTML = "Allow " + domain + " to Use Your Location?";
	      dialogWarning.firstChild.nodeValue = window.localeDelegate.translateText("txt_browser_location_dialog_allow");
	      
	      var checkboxTitle = document.getElementById("geolocationCheckboxTextLabelId");
        checkboxTitle.firstChild.nodeValue= window.localeDelegate.translateText("txt_browser_location_dialog_save_setting");
	      
        window.snippets.GeolocationDialogId.show(false);
    }
    
    //! Hide the Dialog.
    this.hideDialog = function() {
        window.snippets.GeolocationDialogId.hide();
        
        snippets.BookmarkViewToolbarId.enabled = true;
        snippets.WebViewToolbarId.enabled = true;
    }
    
    //! Allow the text label for the checkbox to toggle the checkbox
    GeolocationDialog.toggleCheckbox = function() {
        document.getElementById("geolocationCheckboxId").checked = !document.getElementById("geolocationCheckboxId").checked;
    }.bind(this)
    
    //! Grant the permission.
    GeolocationDialog.permissionGranted = function() {
	      window.pageController.setGeolocationPermission(_frame, _page, true,
	          document.getElementById("geolocationCheckboxId").checked);
	          
	      document.getElementById("geolocationCheckboxId").checked = false;
	      
	      this.hideDialog();
    }.bind(this)

    //! Deny the permission.
    GeolocationDialog.permissionDenied = function() {
	      window.pageController.setGeolocationPermission(_frame, _page, false,
	          document.getElementById("geolocationCheckboxId").checked);
	          
	      document.getElementById("geolocationCheckboxId").checked = false;
	      
	      this.hideDialog();
    }.bind(this)
    
    this.setupPage();
    
    chrome.chromeComplete.connect(onChromeComplete.bind(this));
}