diff --git l10n_client.js l10n_client.js index 5a5a088..b470009 100644 --- l10n_client.js +++ l10n_client.js @@ -1,107 +1,36 @@ // $Id: l10n_client.js,v 1.10.2.8 2010-04-20 22:36:09 goba Exp $ -// Store all l10n_client related data + methods in its own object -jQuery.extend(Drupal, { - l10nClient: new (function() { - // Set "selected" string to unselected, i.e. -1 - this.selected = -1; - // Keybindings - this.keys = {'toggle':'ctrl+shift+s', 'clear': 'esc'}; // Keybindings - // Keybinding functions - this.key = function(pressed) { - switch(pressed) { - case 'toggle': - // Grab user-hilighted text & send it into the search filter - userSelection = window.getSelection ? window.getSelection() : document.getSelection ? document.getSelection() : document.selection.createRange().text; - userSelection = String(userSelection); - if(userSelection.length > 0) { - Drupal.l10nClient.filter(userSelection); - Drupal.l10nClient.toggle(1); - $('#l10n-client .string-search').focus(); - } else { - if($('#l10n-client').is('.hidden')) { - Drupal.l10nClient.toggle(1); - if(!$.browser.safari) { - $('#l10n-client .string-search').focus(); - } - } else { - Drupal.l10nClient.toggle(0); - } - } - break; - case 'clear': - this.filter(false); - break; - } - } - // Toggle the l10nclient - this.toggle = function(state) { - switch(state) { - case 1: - $('#l10n-client-string-select, #l10n-client-string-editor, #l10n-client .labels .label').show(); - $('#l10n-client').height('22em').removeClass('hidden'); - $('#l10n-client .labels .toggle').text('X'); - if(!$.browser.msie) { - $('body').css('border-bottom', '22em solid #fff'); - } - $.cookie('Drupal_l10n_client', '1', {expires: 7, path: '/'}); - break; - case 0: - $('#l10n-client-string-select, #l10n-client-string-editor, #l10n-client .labels .label').hide(); - $('#l10n-client').height('2em').addClass('hidden'); - $('#l10n-client .labels .toggle').text(Drupal.t('Translate Text')); - if(!$.browser.msie) { - $('body').css('border-bottom', '0px'); - } - $.cookie('Drupal_l10n_client', '0', {expires: 7, path: '/'}); - break; - } - } - // Get a string from the DOM tree - this.getString = function(index, type) { - return $('#l10n-client-data div:eq('+index+') .'+type).text(); - } - // Set a string in the DOM tree - this.setString = function(index, data) { - $('#l10n-client-data div:eq('+index+') .target').text(data); - } - // Filter the the string list by a search string - this.filter = function(search) { - if(search == false || search == '') { - $('#l10n-client #search-filter-clear').focus(); - $('#l10n-client-string-select li').show(); - $('#l10n-client .string-search').val(''); - $('#l10n-client .string-search').focus(); - } else { - if(search.length > 0) { - $('#l10n-client-string-select li').hide(); - $('#l10n-client-string-select li:contains('+search+')').show(); - $('#l10n-client .string-search').val(search); - } - } - } - }) -}); +// Store some data we need later on. +Drupal.settings.l10nClient = { + selected: -1, + keys: { + 'toggle': 'ctrl+shift+s', + 'clear': 'esc' + } +}; // Attaches the localization editor behavior to all required fields. Drupal.behaviors.l10nClient = function (context) { - // Killswitch - attach only once. - if ($('#l10n-client').is('.l10n-client-processed')) { + var self = Drupal.behaviors.l10nClient, + $client = $('#l10n-client'); + + // Killswitch, only attach once + if ($client.is('.l10n-client-processed')) { return; } // First time - init & attach all handlers. - $('#l10n-client').addClass('l10n-client-processed'); + $client.addClass('l10n-client-processed'); switch($.cookie('Drupal_l10n_client')) { case '1': - Drupal.l10nClient.toggle(1); + self.toggle(1); break; default: - Drupal.l10nClient.toggle(0); + self.toggle(0); break; } - + // If the selection changes, copy string values to the source and target fields. // Add class to indicate selected string in list widget. $('#l10n-client-string-select li').click(function() { @@ -109,19 +38,18 @@ Drupal.behaviors.l10nClient = function (context) { $(this).addClass('active'); var index = $('#l10n-client-string-select li').index(this); - $('#l10n-client-string-editor .source-text').text(Drupal.l10nClient.getString(index, 'source')); - $('#l10n-client-form .translation-target').val(Drupal.l10nClient.getString(index, 'target')); - $('#l10n-client-form #edit-textgroup').val(Drupal.l10nClient.getString(index, 'textgroup')); - Drupal.l10nClient.selected = index; + $('#l10n-client-string-editor .source-text').text(self.getString(index, 'source')); + $('#l10n-client-form .translation-target').val(Drupal.behaviors.l10nClient.getString(index, 'target')); + self.selected = index; $('#l10n-client-form .form-submit').removeAttr("disabled"); }); // When l10n_client window is clicked, toggle based on current state. - $('#l10n-client .labels .toggle').click(function() { - if($('#l10n-client').is('.hidden')) { - Drupal.l10nClient.toggle(1); + $client.find('.labels .toggle').click(function() { + if($client.is('.hidden')) { + self.toggle(1); } else { - Drupal.l10nClient.toggle(0); + self.toggle(0); } }); @@ -139,18 +67,18 @@ Drupal.behaviors.l10nClient = function (context) { // Register keybindings using jQuery hotkeys if($.hotkeys) { - $.hotkeys.add(Drupal.l10nClient.keys['toggle'], function(){Drupal.l10nClient.key('toggle')}); - $.hotkeys.add(Drupal.l10nClient.keys['clear'], {target:'#l10n-client .string-search', type:'keyup'}, function(){Drupal.l10nClient.key('clear')}); + $.hotkeys.add(Drupal.settings.l10nClient.keys['toggle'], function(){self.key('toggle')}); + $.hotkeys.add(Drupal.settings.l10nClient.keys['clear'], {target:'#l10n-client .string-search', type:'keyup'}, function(){self.key('clear')}); } - + // Custom listener for l10n_client livesearch - $('#l10n-client .string-search').keyup(function(key) { - Drupal.l10nClient.filter($('#l10n-client .string-search').val()); + $client.find('.edit-search').keyup(function(key) { + self.filter($(this).val()); }); // Clear search - $('#l10n-client #l10n-client-search-filter-clear').click(function() { - Drupal.l10nClient.filter(false); + $client.find('#l10n-client-search-filter-clear').click(function() { + self.filter(false); return false; }); @@ -169,7 +97,7 @@ Drupal.behaviors.l10nClient = function (context) { }, success: function (data) { // Store string in local js - Drupal.l10nClient.setString(Drupal.l10nClient.selected, $('#l10n-client-form .translation-target').val()); + Drupal.behaviors.l10nClient.setString(Drupal.settings.l10nClient.selected, $('#l10n-client-form .translation-target').val()); // Figure out the display of the new translation in the selection list. var newTranslation = $('#l10n-client-form .translation-target').val(); @@ -190,14 +118,13 @@ Drupal.behaviors.l10nClient = function (context) { // above 81. newTranslationDisplay = newTranslationStripped.substr(0, 78) + '...'; } - + // Mark string as translated. - $('#l10n-client-string-select li').eq(Drupal.l10nClient.selected).removeClass('untranslated').removeClass('active').addClass('translated').text(newTranslationDisplay); + $('#l10n-client-string-select li').eq(Drupal.settings.l10nClient.selected).removeClass('untranslated').removeClass('active').addClass('translated').text(newTranslationDisplay); // Empty input fields. $('#l10n-client-string-editor .source-text').html(''); $('#l10n-client-form .translation-target').val(''); - }, error: function (xmlhttp) { alert(Drupal.t('An HTTP error @status occured.', { '@status': xmlhttp.status })); @@ -205,5 +132,85 @@ Drupal.behaviors.l10nClient = function (context) { }); return false; }); - +}; + +// Keybinding functions +Drupal.behaviors.l10nClient.key = function(pressed) { + var self = Drupal.behaviors.l10nClient, + $client = $('#l10n-client'); + switch (pressed) { + case 'toggle': + // Grab user-hilighted text & send it into the search filter + var userSelection = window.getSelection ? window.getSelection() : document.getSelection ? document.getSelection() : document.selection.createRange().text; + userSelection = String(userSelection); + if(userSelection.length > 0) { + self.filter(userSelection); + self.toggle(1); + $client.find('.string-search').focus(); + } else { + if($client.is('.hidden')) { + self.toggle(1); + if(!$.browser.safari) { + $client.find('.string-search').focus(); + } + } else { + self.toggle(0); + } + } + break; + case 'clear': + self.filter(false); + break; + } +}; + +// Toggle the l10nclient +Drupal.behaviors.l10nClient.toggle = function(state) { + var $client = $('#l10n-client'); + switch(state) { + case 1: + $('#l10n-client-string-select, #l10n-client-string-editor, #l10n-client .labels .label').show(); + $client.height('22em').removeClass('hidden'); + $client.find('.labels .toggle').text('X'); + if(!$.browser.msie) { + $('body').css('border-bottom', '22em solid #fff'); + } + $.cookie('Drupal_l10n_client', '1', {expires: 7, path: '/'}); + break; + case 0: + $('#l10n-client-string-select, #l10n-client-string-editor, #l10n-client .labels .label').hide(); + $client.height('2em').addClass('hidden'); + $client.find('.labels .toggle').text(Drupal.t('Translate Text')); + if(!$.browser.msie) { + $('body').css('border-bottom', '0px'); + } + $.cookie('Drupal_l10n_client', '0', {expires: 7, path: '/'}); + break; + } +}; + +// Get a string from the DOM tree +Drupal.behaviors.l10nClient.getString = function(index, type) { + return $('#l10n-client-data div:eq('+index+') .'+type).text(); +}; + +// Set a string in the DOM tree +Drupal.behaviors.l10nClient.setString = function(index, data) { + $('#l10n-client-data div:eq('+index+') .target').text(data); +}; + +// Filter the the string list by a search string +Drupal.behaviors.l10nClient.filter = function(search) { + var $client = $('#l10n-client'); + if(search == false || search == '') { + $client.find('#search-filter-clear').focus(); + $('#l10n-client-string-select li').show(); + $client.find('#edit-search').val('').focus(); + } else { + if(search.length > 0) { + $('#l10n-client-string-select li').hide(); + $('#l10n-client-string-select li:contains('+search+')').show(); + $client.find('#edit-search').val(search); + } + } };