Oracle DB, Oracle APEX, Linux etc.

Показаны сообщения с ярлыком firefox. Показать все сообщения
Показаны сообщения с ярлыком firefox. Показать все сообщения

вторник, 11 мая 2010 г.

Запятые точками в FF

Столкнулся с довольно простой проблемой, которую, тем не менее, было интересно решать. В основном, из-за отсутствия знаний о механизме обработки событий клавиатуры (keydown, keypress, keyup) и доступе к их атрибутам в Gecko.

Суть проблемы: при вводе пользователем запятой в input определённого класса заменять её на точку. Решение необходимо было исключительно для движка Gecko.
Путь решения: полазив по Сети, я нашёл несколько реализаций. Самое простое - использовать replace(/\,/g, "."), но при этом курсор пользователя постоянно будет смещаться в конец ввода, кроме того, будет заметна процедура подмены символа. Посложнее - подавлять событие при помощи event.preventDefault() и при помощи манипуляций с obj.selectionStart вставлять на нужное место символ, оставляя курсор там же. Но, как по мне, это слишком сложный вариант.

Потому я решил сделать это через event.preventDefault() и эмуляцию нажатия клавиши, создав и запустив цепочку событий keydown-keypress-keyup. Почитав необходимую документацию и таблицу символов Unicode, я написал следующий код, использующий jQuery:

/* Comma-to-period keypress handler */
/* This code uses jQuery framework */
$(document).ready(function(){
  $("input.decimal").keypress(function(e){
    var pntUniCode = 0x2E, comUniCode = 0x2C; /* Unicode FULL STOP (aka PERIOD) and COMMA hex codes */ 
    
    if (e.which == comUniCode) {
        e.preventDefault();
        var newEvent = document.createEvent("KeyboardEvent");
        newEvent.initKeyEvent('keydown', true, true, null, false, false, false, false, 0, pntUniCode);
        e.target.dispatchEvent(newEvent);
        newEvent.initKeyEvent('keypress', true, true, null, false, false, false, false, 0, pntUniCode);
        e.target.dispatchEvent(newEvent);
        newEvent.initKeyEvent('keyup', true, true, null, false, false, false, false, 0, pntUniCode);
        e.target.dispatchEvent(newEvent);
    }
  });
});

Его можно сохранить в файл и подключить к странице, на которой есть элементы с классом decimal, тогда при вводе запятые будут заменяться на точки. Вуаля!

PS: Поскольку я не считаю себя особым спецом в JavaScript, то любая конструктивная критика только приветствуется.

Читать далее

четверг, 4 марта 2010 г.

APEX: Автовход

Пользуясь APEX как разработчик, я пару месяцев назад заскучал по одной определённой возможности, а именно - автовходе. Когда работаешь в одном и том же рабочем пространстве под одной и той же учёткой, вводить логин и пароль каждый раз становится лень. Потому я, недолго думая, написал скрипт для GreaseMonkey:
$s("F4550_P1_COMPANY", "MYWORKSPACE");
$s("F4550_P1_USERNAME", "MYLOGIN");
$s("F4550_P1_PASSWORD", "MYPASSWORD");
$x("LOGIN_BUTTON").click();

Вместо MYWORKSPACE, MYLOGIN и MYPASSWORD, конечно, указаны мои рабочее пространство, логин и пароль.

Если кто-то так же ленив, как и я, возможно, это ему пригодится. :)
Читать далее