Navrang Oza (Open ERP) has proposed merging 
lp:~openerp-dev/openerp-web/capslock-check_noz into lp:openerp-web.

Requested reviews:
  OpenERP R&D Web Team (openerp-dev-web)

For more details, see:
https://code.launchpad.net/~openerp-dev/openerp-web/capslock-check_noz/+merge/71817

- To check weather capslock key is ON or OFF.
- Works for database, login forms.
-- 
https://code.launchpad.net/~openerp-dev/openerp-web/capslock-check_noz/+merge/71817
Your team OpenERP R&D Team is subscribed to branch 
lp:~openerp-dev/openerp-web/capslock-check_noz.
=== modified file 'addons/base/__openerp__.py'
--- addons/base/__openerp__.py	2011-08-09 15:30:21 +0000
+++ addons/base/__openerp__.py	2011-08-17 06:44:24 +0000
@@ -8,6 +8,7 @@
         "static/lib/jquery/jquery-1.6.2.js",
         "static/lib/jquery.form/jquery.form.js",
         "static/lib/jquery.validate/jquery.validate.js",
+        "static/lib/jquery.capslock/jquery.capslock.js",
         "static/lib/jquery.ba-bbq/jquery.ba-bbq.js",
         "static/lib/jquery.contextmenu/jquery.contextmenu.r2.packed.js",
         "static/lib/jquery.blockUI/jquery.blockUI.js",

=== added directory 'addons/base/static/lib/jquery.capslock'
=== added file 'addons/base/static/lib/jquery.capslock/jquery.capslock.js'
--- addons/base/static/lib/jquery.capslock/jquery.capslock.js	1970-01-01 00:00:00 +0000
+++ addons/base/static/lib/jquery.capslock/jquery.capslock.js	2011-08-17 06:44:24 +0000
@@ -0,0 +1,221 @@
+/*
+ * Capslock 0.3 - jQuery plugin to detect if a user's caps lock is on or not.
+ * 
+ * Provides events, "caps_lock_on" and "caps_lock_off", that custom functions can be bound to.
+ * The capslock function can be called on a specific element, or a set of elements:
+ * 		$("#my_textarea").capslock(options);	// One textarea
+ * 		$("textarea").capslock(options);		// All textareas
+ *
+ * Copyright (c) 2009 Arthur McLean
+ *
+ * Dual licensed under the MIT and GPL licenses:
+ *   http://www.opensource.org/licenses/mit-license.php
+ *   http://www.gnu.org/licenses/gpl.html
+ *
+ */
+
+; // Just in case the previously included plug-in failed to close with a semi-colon.
+(function($) {
+	
+	$.fn.capslock = function(options) {
+		
+		if (options) $.extend($.fn.capslock.defaults, options);
+		
+		this.each(function() {
+			$(this).bind("caps_lock_on", $.fn.capslock.defaults.caps_lock_on);
+			$(this).bind("caps_lock_off", $.fn.capslock.defaults.caps_lock_off);
+			
+			$(this).keypress(function(e){
+				check_caps_lock(e);
+			});
+		});
+		
+		return this;
+	};
+	
+
+	
+	// The actual check:
+	function check_caps_lock(e) {
+		
+		var ascii_code	= e.which;
+		var letter = String.fromCharCode(ascii_code);
+		var upper = letter.toUpperCase();
+		var shift_key	= e.shiftKey;
+		
+		if(
+			($.inArray(ascii_code, $.fn.capslock.defaults.ascii_exceptions) === -1)
+			&&
+			(letter === upper)
+			&&
+			!shift_key
+		) {
+			$(e.target).trigger("caps_lock_on");
+		} else {
+			$(e.target).trigger("caps_lock_off");
+		}
+		
+		/*
+		if( (65 <= ascii_code) && (ascii_code <= 90) && !shift_key) {
+			$(e.target).trigger("caps_lock_on");
+		} else {
+			$(e.target).trigger("caps_lock_off");
+		}
+		*/
+		
+		if($.fn.capslock.defaults.debug) {
+			if(console) {
+				console.log("Ascii code: " + ascii_code);
+				console.log("Letter: " + letter);
+				console.log("Upper Case: " + upper);
+				console.log("Shift key: " + shift_key);
+			}
+		}
+		
+	}
+	
+	// Public definition of defaults for easy overriding:
+	$.fn.capslock.defaults = {
+		caps_lock_on:	function() {},
+		caps_lock_off:	function() {},
+		debug:			false,
+		ascii_exceptions: [
+			0,		// Null char
+			1,		// Start of Heading
+			2,		// Start of Text
+			3,		// End of Text
+			4,		// End of Transmission
+			5,		// Enquiry
+			6,		// Acknowledgment
+			7,		// Bell
+			8,		// Back Space
+			9,		// Horizontal Tab
+			10,		// Line Feed
+			11,		// Vertical Tab
+			12,		// Form Feed
+			13,		// Carriage Return
+			14,		// Shift Out / X-On
+			15,		// Shift In / X-Off
+			16,		// Data Line Escape
+			17,		// Device Control 1 (oft. XON)
+			18,		// Device Control 2
+			19,		// Device Control 3 (oft. XOFF)
+			20,		// Device Control 4
+			21,		// Negative Acknowledgement
+			22,		// Synchronous Idle
+			23,		// End of Transmit Block
+			24,		// Cancel
+			25,		// End of Medium
+			26,		// Substitute
+			27,		// Escape
+			28,		// File Separator
+			29,		// Group Separator
+			30,		// Record Separator
+			31,		// Unit Separator
+			32,		// Space
+			33,		// Exclamation mark
+			34,		// Double quotes (or speech marks)
+			35,		// Number
+			36,		// Dollar
+			37,		// Procenttecken
+			38,		// Ampersand
+			39,		// Single quote
+			40,		// Open parenthesis (or open bracket)
+			41,		// Close parenthesis (or close bracket)
+			42,		// Asterisk
+			43,		// Plus
+			44,		// Comma
+			45,		// Hyphen
+			46,		// Period, dot or full stop
+			47,		// Slash or divide
+			48,		// Zero
+			49,		// One
+			50,		// Two
+			51,		// Three
+			52,		// Four
+			53,		// Five
+			54,		// Six
+			55,		// Seven
+			56,		// Eight
+			57,		// Nine
+			58,		// Colon
+			59,		// Semicolon
+			60,		// Less than (or open angled bracket)
+			61,		// Equals
+			62,		// Greater than (or close angled bracket)
+			63,		// Question mark
+			64,		// At symbol
+			91,		// Opening bracket
+			92,		// Backslash
+			93,		// Closing bracket
+			94,		// Caret - circumflex
+			95,		// Underscore
+			96,		// Grave accent
+			123,	// Opening brace
+			124,	// Vertical bar
+			125,	// Closing brace
+			126,	// Equivalency sign - tilde
+			127,	// Delete
+			128,	// Euro sign
+			129,	// Unassigned?	 	 	 	 
+			130,	// Single low-9 quotation mark
+			132,	// Double low-9 quotation mark
+			133,	// Horizontal ellipsis
+			134,	// Dagger
+			135,	// Double dagger
+			136,	// Modifier letter circumflex accent
+			137,	// Per mille sign
+			139,	// Single left-pointing angle quotation
+			141,	// Unassigned?	
+			143,	// Unassigned?	 	 	 	 
+			144,	// Unassigned?	 	 	 	 
+			145,	// Left single quotation mark
+			146,	// Right single quotation mark
+			147,	// Left double quotation mark
+			148,	// Right double quotation mark
+			149,	// Bullet
+			150,	// En dash
+			151,	// Em dash
+			152,	// Small tilde
+			153,	// Trade mark sign
+			155,	// Single right-pointing angle quotation mark
+			157,	// Unassigned?	
+			160,	// Non-breaking space
+			161,	// Inverted exclamation mark
+			162,	// Cent sign
+			163,	// Pound sign
+			164,	// Currency sign
+			165,	// Yen sign
+			166,	// Pipe, Broken vertical bar
+			167,	// Section sign
+			168,	// Spacing diaeresis - umlaut
+			169,	// Copyright sign
+			170,	// Feminine ordinal indicator
+			171,	// Left double angle quotes
+			172,	// Not sign
+			173,	// Soft hyphen
+			174,	// Registered trade mark sign
+			175,	// Spacing macron - overline
+			176,	// Degree sign
+			177,	// Plus-or-minus sign
+			178,	// Superscript two - squared
+			179,	// Superscript three - cubed
+			180,	// Acute accent - spacing acute
+			181,	// Micro sign
+			182,	// Pilcrow sign - paragraph sign
+			183,	// Middle dot - Georgian comma
+			184,	// Spacing cedilla
+			185,	// Superscript one
+			186,	// Masculine ordinal indicator
+			187,	// Right double angle quotes
+			188,	// Fraction one quarter
+			189,	// Fraction one half
+			190,	// Fraction three quarters
+			191,	// Inverted question mark
+			215,	// Multiplication sign
+			247		// Division sign
+		]
+	};
+	
+})(jQuery);
+

=== modified file 'addons/base/static/src/css/base.css'
--- addons/base/static/src/css/base.css	2011-08-16 14:30:38 +0000
+++ addons/base/static/src/css/base.css	2011-08-17 06:44:24 +0000
@@ -144,6 +144,11 @@
     display: none;
 }
 
+img#caps_on_img {
+    position: fixed;
+    margin: 2px 0 0 -20px;  
+}
+
 /* Database */
 .openerp.database_block .db_options_row {
     height: 100%;

=== added file 'addons/base/static/src/img/caps-warning.png'
Binary files addons/base/static/src/img/caps-warning.png	1970-01-01 00:00:00 +0000 and addons/base/static/src/img/caps-warning.png	2011-08-17 06:44:24 +0000 differ
=== removed file 'addons/base/static/src/img/db.png'
Binary files addons/base/static/src/img/db.png	2011-06-24 06:52:12 +0000 and addons/base/static/src/img/db.png	1970-01-01 00:00:00 +0000 differ
=== modified file 'addons/base/static/src/js/chrome.js'
--- addons/base/static/src/js/chrome.js	2011-08-16 14:25:15 +0000
+++ addons/base/static/src/js/chrome.js	2011-08-17 06:44:24 +0000
@@ -171,6 +171,30 @@
     }
 });
 
+openerp.base.Capslock = openerp.base.Widget.extend({
+    init: function(parent, element_id) {
+        this._super(parent, element_id);
+    },
+    start: function() {
+        $('input[type=password]').each(function() {
+            $(this).focus(function() {
+                var img_class = $(this).attr('name') + '_warn_img';
+                var options = {
+                    caps_lock_on: function() {
+                        if ($('img.' + img_class).length == 0) {
+                            $("<img class=" + img_class + " src='/base/static/src/img/caps-warning.png' title='Caps lock is ON' id='caps_on_img'></img>").insertAfter($(this));
+                        }
+                    },
+                    caps_lock_off: function() {
+                        if ($('img.' + img_class)) $('img.' + img_class).remove();
+                    }
+                };
+                $(this).capslock(options);
+            });
+        });
+    }
+});
+
 openerp.base.Database = openerp.base.Widget.extend({
     init: function(parent, element_id, option_id) {
         this._super(parent, element_id);
@@ -178,6 +202,8 @@
     },
     start: function() {
         this.$element.html(QWeb.render("Database", this));
+        this.capslock = new openerp.base.Capslock();
+        
         this.$element.closest(".openerp")
                 .removeClass("login-mode")
                 .addClass("database_block");
@@ -291,8 +317,9 @@
     },
     do_create: function() {
         var self = this;
-       	self.$option_id.html(QWeb.render("CreateDB", self));
-
+        self.$option_id.html(QWeb.render("CreateDB", self));
+        this.capslock.start();
+        
         self.$option_id.find("form[name=create_db_form]").validate({
             submitHandler: function (form) {
                 var fields = $(form).serializeArray();
@@ -318,6 +345,7 @@
     do_drop: function() {
         var self = this;
        	self.$option_id.html(QWeb.render("DropDB", self));
+       	this.capslock.start();
        	
        	self.$option_id.find("form[name=drop_db_form]").validate({
             submitHandler: function (form) {
@@ -367,7 +395,8 @@
     do_backup: function() {
         var self = this;
        	self.$option_id.html(QWeb.render("BackupDB", self));
-
+        this.capslock.start();
+        
         self.$option_id.find("form[name=backup_db_form]").validate({
             submitHandler: function (form) {
                 $.blockUI();
@@ -406,6 +435,7 @@
     do_restore: function() {
         var self = this;
        	self.$option_id.html(QWeb.render("RestoreDB", self));
+       	this.capslock.start();
        	
        	self.$option_id.find("form[name=restore_db_form]").validate({
             submitHandler: function (form) {
@@ -445,7 +475,8 @@
     do_change_password: function() {
         var self = this;
        	self.$option_id.html(QWeb.render("Change_DB_Pwd", self));
-
+        this.capslock.start();
+        
         self.$option_id.find("form[name=change_pwd_form]").validate({
             messages: {
                 old_pwd: "Please enter your previous password",
@@ -500,8 +531,12 @@
     },
     display: function() {
         var self = this;
-
+        
         this.$element.html(QWeb.render("Login", this));
+        
+        this.capslock = new openerp.base.Capslock();
+        this.capslock.start();
+        
         this.database = new openerp.base.Database(
                 this, "oe_database", "oe_db_options");
 

_______________________________________________
Mailing list: https://launchpad.net/~openerp-dev-gtk
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~openerp-dev-gtk
More help   : https://help.launchpad.net/ListHelp

Reply via email to