ginebra2/chrome/bedrockchrome/geolocation.snippet/geolocationDialog.js
changeset 16 3c88a81ff781
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ginebra2/chrome/bedrockchrome/geolocation.snippet/geolocationDialog.js	Fri Oct 15 17:30:59 2010 -0400
@@ -0,0 +1,97 @@
+/*!
+  \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));
+}