Обновление шаблонов от 12.05.2019 - использование HTTPS вместо HTTP

Теперь Code4august использует защищённое соединение. Чтобы его использовать, замените http:// на https:// в адресах скриптов.

Шаблон "Клиент->HTML-Шаблоны 1->Отправка":

Найдите:

%C4AROOT = "http://code4august.ru"%

Замените на:

%C4AROOT = "https://code4august.ru"%

Шаблон "Клиент->Страницы->Страница X":

Если вы забыли номер страницы X, узнать его можно в разделе "Клиент->Виртуальные каталоги".

Найдите:

%C4AROOT = "http://code4august.ru"%

Замените на:

%C4AROOT = "https://code4august.ru"%

Обновление шаблонов от 5.04.2019 - сервис "Редактор кнопок"

Добавлена возможность использовать юникод (в том числе и эмодзи) в именах кнопок. Для включения этой возможности обновите шаблоны.

Шаблон "Клиент->Страницы->Страница X":

Если вы забыли номер страницы X, узнать его можно в разделе "Клиент->Виртуальные каталоги".

Найдите:

function base64x(s){
  var trans = [];
  var trans2 = [0x402,0x403,0x201A,0x453,0x201E,0x2026,0x2020,0x2021, 0x20AC,0x2030,0x409,0x2039,0x40A,0x40C,0x40B,0x40F, 0x452,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014, 0,0x2122,0x459,0x203A,0x45A,0x45C,0x45B,0x45F, 0,0x40E,0x45E,0x408,0,0x490,0,0, 0x401,0,0x404,0,0,0,0,0x407, 0,0,0x406,0x456,0x491,0,0,0, 0x451,0x2116,0x454,0,0x458,0x405,0x455,0x457];
  var inp = "";
  var output = "";
  var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
  var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._";
  for(var i = 0x410; i <= 0x44F; i++) trans[i] = i - 0x350;
  for(var i = 0; i < 64; i++) if(trans2[i]) trans[trans2[i]] = 0x80 + i;
  for(var i = 0; i < s.length; i++){
    var n = s.charCodeAt(i);
    if(trans[n]) n = trans[n];
    if(n <= 0xFF) inp += String.fromCharCode(n);
  }
  var i = 0;
  while (i < inp.length) {
    chr1 = inp.charCodeAt(i++);
    chr2 = inp.charCodeAt(i++);
    chr3 = inp.charCodeAt(i++);
    enc1 = chr1 >> 2;
    enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
    enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
    enc4 = chr3 & 63;
    if (isNaN(chr2)) {
      enc3 = enc4 = 64;
    } else if (isNaN(chr3)) {
      enc4 = 64;
    }
    output += _keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4); 
  }
  return output;
}

Замените на:

function base64x(s) {
  var utf8table = [[0x80, 0], [0x800, 0xc0], [0x10000, 0xe0], [0x200000, 0xf0]];
  var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._";
  var i, j, k, c, arr = [], result = '', enc = [];
  for (i = 0; i < s.length; i++) {
    c = s.charCodeAt(i);
    if (c >> 10 == 0x36 && s.charCodeAt(i+1) >> 10 == 0x37) {
      c = ((c - 0xd800) << 10) + s.charCodeAt(++i) + 0x2400;
    }
    for (j = 0; j < utf8table.length; j++) {
      if (c < utf8table[j][0]) {
        arr.push(c >> 6 * j | utf8table[j][1]);
        for (k = 6 * (j - 1); k >= 0; k -= 6)
          arr.push(c >> k & 0x3f | 0x80);
        break;
      }
    }
  }
  for (i = 0; i < arr.length; i += 3) {
    enc[0] = arr[i] >> 2;
    enc[1] = ((arr[i] & 3) << 4) | (arr[i+1] >> 4);
    enc[2] = ((arr[i+1] & 15) << 2) | (arr[i+2] >> 6);
    enc[3] = arr[i+2] & 63;
    if (isNaN(arr[i+1])) enc[2] = 64;
    if (isNaN(arr[i+2])) enc[3] = 64;
    result += enc.map(function(x){ return keyStr.charAt(x) }).join('');
  }
  return result;
}