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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
16
hgs
parents:
diff changeset
     1
/*!
hgs
parents:
diff changeset
     2
  \file geolocationDialog.js This module contains GeolocationDialog class which
hgs
parents:
diff changeset
     3
  prompts user for accepting/rejection geolocation request.
hgs
parents:
diff changeset
     4
*/
hgs
parents:
diff changeset
     5
function GeolocationDialog() {
hgs
parents:
diff changeset
     6
	  var _frame;
hgs
parents:
diff changeset
     7
	  var _page;
hgs
parents:
diff changeset
     8
	
hgs
parents:
diff changeset
     9
    var onChromeComplete = function()
hgs
parents:
diff changeset
    10
    {
hgs
parents:
diff changeset
    11
        // Watch for geolocation permission request. ".bind(this)" is used to resolve amibiguous this pointer.
hgs
parents:
diff changeset
    12
        window.pageController.requestGeolocationPermission.connect(
hgs
parents:
diff changeset
    13
            function(frame, page, domain) {
hgs
parents:
diff changeset
    14
       
hgs
parents:
diff changeset
    15
        	      _frame = frame;
hgs
parents:
diff changeset
    16
        	      _page = page;
hgs
parents:
diff changeset
    17
        	      
hgs
parents:
diff changeset
    18
        	      this.showDialog(domain);
hgs
parents:
diff changeset
    19
        	      
hgs
parents:
diff changeset
    20
            }.bind(this)
hgs
parents:
diff changeset
    21
        );
hgs
parents:
diff changeset
    22
    }
hgs
parents:
diff changeset
    23
    
hgs
parents:
diff changeset
    24
    //! Create the html/DOM elements for the Dialog.
hgs
parents:
diff changeset
    25
    this.setupPage = function() {
hgs
parents:
diff changeset
    26
        var html =
hgs
parents:
diff changeset
    27
            '<div class="top"></div>' +
hgs
parents:
diff changeset
    28
              '<div class="body">' +
hgs
parents:
diff changeset
    29
                '<div class="geolocationTextLabel" id="geolocationDialogTitle">Location Permissions</div>' +
hgs
parents:
diff changeset
    30
                '<div class="geolocationWarningLabel" id="geolocationDialogWarning"></div>' +
hgs
parents:
diff changeset
    31
                '<div class="geolocationCheckboxTextLabel"><input type="checkbox" id="geolocationCheckboxId"/>' +
hgs
parents:
diff changeset
    32
                '<label id="geolocationCheckboxTextLabelId" onmouseup="GeolocationDialog.toggleCheckbox();"> Save This Setting</label></div>' +
hgs
parents:
diff changeset
    33
                '<div class="controls">' +
hgs
parents:
diff changeset
    34
                  '<div type="button" onmouseup="GeolocationDialog.permissionGranted();" class="geolocationAcceptButton"></div>' + 
hgs
parents:
diff changeset
    35
                  '<div type="button" onmouseup="GeolocationDialog.permissionDenied();" class="geolocationRejectButton"></div>' +
hgs
parents:
diff changeset
    36
                '</div>' + /*controls*/
hgs
parents:
diff changeset
    37
              '</div>' + /*body*/
hgs
parents:
diff changeset
    38
            '<div class="bottom"></div>';
hgs
parents:
diff changeset
    39
        document.write(html);
hgs
parents:
diff changeset
    40
    }
hgs
parents:
diff changeset
    41
    
hgs
parents:
diff changeset
    42
    //! Show the Dialog to display the request domain and ask user for permission.
hgs
parents:
diff changeset
    43
    this.showDialog = function(domain) {
hgs
parents:
diff changeset
    44
    	  snippets.BookmarkViewToolbarId.enabled = false;
hgs
parents:
diff changeset
    45
        snippets.WebViewToolbarId.enabled = false;
hgs
parents:
diff changeset
    46
        
hgs
parents:
diff changeset
    47
        // Translate these texts
hgs
parents:
diff changeset
    48
        var dialogTitle = document.getElementById("geolocationDialogTitle");
hgs
parents:
diff changeset
    49
        dialogTitle.firstChild.nodeValue = window.localeDelegate.translateText("txt_browser_location_dialog_location_permissions");
hgs
parents:
diff changeset
    50
               
hgs
parents:
diff changeset
    51
    	  var dialogWarning = document.getElementById("geolocationDialogWarning");
hgs
parents:
diff changeset
    52
    	  dialogWarning.innerHTML = "Allow " + domain + " to Use Your Location?";
hgs
parents:
diff changeset
    53
	      dialogWarning.firstChild.nodeValue = window.localeDelegate.translateText("txt_browser_location_dialog_allow");
hgs
parents:
diff changeset
    54
	      
hgs
parents:
diff changeset
    55
	      var checkboxTitle = document.getElementById("geolocationCheckboxTextLabelId");
hgs
parents:
diff changeset
    56
        checkboxTitle.firstChild.nodeValue= window.localeDelegate.translateText("txt_browser_location_dialog_save_setting");
hgs
parents:
diff changeset
    57
	      
hgs
parents:
diff changeset
    58
        window.snippets.GeolocationDialogId.show(false);
hgs
parents:
diff changeset
    59
    }
hgs
parents:
diff changeset
    60
    
hgs
parents:
diff changeset
    61
    //! Hide the Dialog.
hgs
parents:
diff changeset
    62
    this.hideDialog = function() {
hgs
parents:
diff changeset
    63
        window.snippets.GeolocationDialogId.hide();
hgs
parents:
diff changeset
    64
        
hgs
parents:
diff changeset
    65
        snippets.BookmarkViewToolbarId.enabled = true;
hgs
parents:
diff changeset
    66
        snippets.WebViewToolbarId.enabled = true;
hgs
parents:
diff changeset
    67
    }
hgs
parents:
diff changeset
    68
    
hgs
parents:
diff changeset
    69
    //! Allow the text label for the checkbox to toggle the checkbox
hgs
parents:
diff changeset
    70
    GeolocationDialog.toggleCheckbox = function() {
hgs
parents:
diff changeset
    71
        document.getElementById("geolocationCheckboxId").checked = !document.getElementById("geolocationCheckboxId").checked;
hgs
parents:
diff changeset
    72
    }.bind(this)
hgs
parents:
diff changeset
    73
    
hgs
parents:
diff changeset
    74
    //! Grant the permission.
hgs
parents:
diff changeset
    75
    GeolocationDialog.permissionGranted = function() {
hgs
parents:
diff changeset
    76
	      window.pageController.setGeolocationPermission(_frame, _page, true,
hgs
parents:
diff changeset
    77
	          document.getElementById("geolocationCheckboxId").checked);
hgs
parents:
diff changeset
    78
	          
hgs
parents:
diff changeset
    79
	      document.getElementById("geolocationCheckboxId").checked = false;
hgs
parents:
diff changeset
    80
	      
hgs
parents:
diff changeset
    81
	      this.hideDialog();
hgs
parents:
diff changeset
    82
    }.bind(this)
hgs
parents:
diff changeset
    83
hgs
parents:
diff changeset
    84
    //! Deny the permission.
hgs
parents:
diff changeset
    85
    GeolocationDialog.permissionDenied = function() {
hgs
parents:
diff changeset
    86
	      window.pageController.setGeolocationPermission(_frame, _page, false,
hgs
parents:
diff changeset
    87
	          document.getElementById("geolocationCheckboxId").checked);
hgs
parents:
diff changeset
    88
	          
hgs
parents:
diff changeset
    89
	      document.getElementById("geolocationCheckboxId").checked = false;
hgs
parents:
diff changeset
    90
	      
hgs
parents:
diff changeset
    91
	      this.hideDialog();
hgs
parents:
diff changeset
    92
    }.bind(this)
hgs
parents:
diff changeset
    93
    
hgs
parents:
diff changeset
    94
    this.setupPage();
hgs
parents:
diff changeset
    95
    
hgs
parents:
diff changeset
    96
    chrome.chromeComplete.connect(onChromeComplete.bind(this));
hgs
parents:
diff changeset
    97
}