Избранное

11 июня 2014, 20:02

Блокировки в Javascript

При создании практически любых веб-форм, необходимо позаботиться о том, чтобы пользователь, от скуки, не начал нажимать на отправку формы много раз, а сервис не получил несколько дубликатов одних и тех же данных.

Для этого можно пользоваться очень простой и короткой «библиотекой» (не уверен, что так можно назвать пять строк кода, но всё же):

(function() {
    var blocks = {};
    window.setBlock = function(name) { if (name in blocks) return false; return blocks[name] = true; }
    window.clearBlock = function(name) { delete blocks[name]; return true; }
})();



Как это действует:

  1. Функция setBlock() ставит блокировку по указанному коду. Если блокировки не было — возвращает true, если блокировка уже есть, возвращает false.
  2. Функция clearBlock() снимает блокировку по указанному коду.

Пример использования данных функций:

$('.my-submit').on('click', function() {
    if (setBlock('my-form-submit')) {
        // Устанавливаем блокировку в первый раз.
        // Тут можно ещё, например, выставить кнопке параметр disabled.

        // Отправляем нашу форму
        $.post('form-submit.php', function() {
            // Обрабатываем ответ формы, как это необходимо.

            // После обработки снимаем блокировку: теперь форму можно отправлять снова
            clearBlock('my-form-submit');
        }).fail(function() {
            // Эта функция будет выполнена, если произойдёт ошибка связи (скажем, у пользователя сломается интернет).
            // В таком случае нам важно снять блокировку, чтобы пользователь мог отправить форму снова,
            // когда его интернет заработает.
            clearBlock('my-form-submit');
        });
});

В приведённом примере до тех пор, пока не будет вызвана одна из функций clearBlock(), повторные нажатия на кнопку ни к чему не приведут, поскольку функция setBlock() будет возвращать false.

В качестве имени блокировки можно использовать любой текст. Например, на одном из разрабатываемых сейчас проектов я таким образом реализовал работу лайков: при добавлении лайка к элементу на странице ставится блокировка с именем "like" + elementID, таким образом, одновременно может идти несколько блокировок на разные действия.

17 июня 2013, 15:01

Всем по бизнес-линчу

15 июля мы с Василием Бердниковым запустим сервис, с помощью которого можно рецензировать дизайнерские работы. Это как Лебедевский «Бизнес-линч», только лично ваш и рассчитанный на командную работу. Сервис называется «Пиксони́».

Как продукт работает уже сейчас можно увидеть на видео:

Сейчас идёт закрытое тестирование. А через месяц мы откроем бета-версию с личными и корпоративными аккаунтами.

Цитата от Василия:

Если вы дизайнер или студия — вам это должно быть интересно.

Лично мне альфа-версии уже хватило, чтобы понять как я не смогу жить без этой штуки:
  • не нужно никого отвлекать от работы;
  • легко ориентируешься в проектах дизайнеров;
  • всегда знаешь где можно взять свежую или старую версию макета.

С Pixoni станет легче подсказать об ошибках в макетах и найти свои ошибки с помощью коллег. Эта штуковина реально учит работать с деталями. И работать с клиентами она тоже поможет в том случае, если в вашем общении не хватает конкретики.

Это я вам, ребята говорю не как разработчик, а как дизайнер-практик.

Должен сказать, что мне, как совершенно не дизайнеру, а очень даже программисту, Pixoni очень сильно помогает: клиентам и дизайнерам становится значительно проще сообщать мне, какие проблемы они видят в свёрстанных и запрограммированных макетах.

Больше никаких фраз от клиента вида «и ещё над меню справа нужно немного больше отступ сделать у крайнего левого элемента».

И, кстати, никакого флеша!

С Pixoni вы сможете:

  • приглашать к рецензии коллег по электронной почте или прямой ссылке;
  • рецензировать работы своих коллег и получать от них отзывы о своих макетах;
  • загружать макеты в папки проектов и хранить их версии;
  • работать с историей рецензий;
  • в корпоративных аккаунтах можно менять цветовую схему интерфейса;
  • и ещё много чего...

Ждите июля.

На официальном сайте можно оставить электронку, и мы вам напомним о выходе бета-версии.

На вопросы отвечу в комментариях.

В веб-окружении Битрикса по-умолчанию стоит msmtp для отправки писем. Если ваш домен привязан к Яндекс.Почте для домена, и вы хотите отправлять почту через реально существующий почтовый ящик с авторизацией, вам придётся внести в файл конфигурации некоторые изменения, чтобы всё работало хорошо.

Файл /home/bitrix/.msmtprc:

account default
logfile /var/log/msmtp.log
host smtp.yandex.ru
port 587 # именно этот порт!
from robot@domain.ru
keepbcc on
auth on
user robot@domain.ru
password <password>
tls on
tls_starttls on # обязательно для Яндекс.ПДД и SparkPost
tls_certcheck off

В случае использования SparkPost в качестве user задавайте SMTP_Injection, а в пароль пишите свой API ключ, которому разрешено право Send via SMTP.

Не забудьте открыть 587 порт в iptables.

И не задавайте слишком длинных паролей.

P.S: Яндекс разрешит отправлять почту через этот аккаунт только после того, как вы в нём один раз авторизуетесь, введёте личные данные и согласитесь с правилами работы.

P.S #2: при работе с GMail вторую строку (tls_starttls) наоборот включать не нужно.

P.S #3: при работе с Mandrill прописывать такое:

auth login
port 25
tls off
tls_starttls off
tls_certcheck off
timeout 5