Кнопка для вставки таблицы позволит вам и вашим пользователям быстро вставлять HTML теги для создания таблиц. Однако небольшое знание HTML все же может потребоваться для простых пользователей, чтобы знать куда вводить текст таблицы. Без элементарных знаний HTML разметки ваши пользователи, наверняка, не смогут создать объединенные ячейки, а просто оставят их пустыми.
Более простой синтаксис для вставки таблиц и не требующий знания HTML предоставляет модуль Tables Filter. Подробнее о нем читайте в статье Tables Filter — Таблицы в ноде — просто и со вкусом.
Вернемся к BUEditor. Ниже вы видите коды для 6-го друпала, для кнопок в виде диалогового окна с заголовком «Таблица» и в виде всплывающего окна.
Кнопка для вставки таблицы диалогом (D6):
js:
BUE.dialog.open('Таблица', '<table id="bue-quick-table" style="width: auto; height: auto;"> <tr><td></td><td></td><td></td></tr> <tr><td></td><td></td><td></td></tr> <tr><td></td><td></td><td></td></tr> </table>', 'fadeIn');
quickTableX = -1, quickTableY = -1;
quickTableTd = function () {
$(this).css(
{width: '16px', height: '16px', border: '1px solid #ddd', padding: '5px', backgroundColor: 'white', cursor: 'pointer'}
).html(' ').mouseover(quickTableTdOver).click(quickTableTdClick);
};
quickTableTdOver = function () {
var row = this.parentNode, table = row.parentNode, X = this.cellIndex, Y = row.rowIndex;
if (X == row.cells.length - 1) {
for (var i = table.rows.length; i; i--) quickTableTd.apply(table.rows[i-1].insertCell(X+1));
}
if (Y == table.rows.length - 1) {
var _row = table.insertRow(Y+1);
for (var i = 0, t = row.cells.length; i < t; i++) quickTableTd.apply(_row.insertCell(i));
}
var aX = X < quickTableX ? [quickTableX, X, quickTableY, 'white'] : [X, quickTableX, Y, 'blue'];
var aY = Y < quickTableY ? [quickTableY, Y, quickTableX, 'white'] : [Y, quickTableY, X, 'blue'];
for (var i = aX[0]; i > aX[1]; i--) for (var j = aX[2]; j > -1; j--) {
table.rows[j].cells[i].style.backgroundColor = aX[3];
}
for (var i = aY[0]; i > aY[1]; i--) for (var j = aY[2]; j > -1; j--) {
table.rows[i].cells[j].style.backgroundColor = aY[3];
}
quickTableX = X, quickTableY = Y;
};
quickTableTdClick = function () {
var cells = '', rows = '';
for (var i = quickTableX; i > -1 ; i--) {
cells += ' <td></td>\n';
}
for (var i = quickTableY; i > -1 ; i--) {
rows += '\n<tr>\n'+ cells +'</tr>';
}
BUE.dialog.close('fadeOut');
BUE.active.replaceSelection('<table>'+ rows +'\n</table>', 'end');
// или можно использовать строку ниже
// E.replaceSelection('<table>'+ rows +'\n</table>', 'end');
};
$('#bue-quick-table td').each(quickTableTd);
Кнопка для вставки таблицы всплывающим окном (aka popup) (D6):
js:
BUE.quickPop.open('<table id="bue-quick-table" style="width: auto; height: auto;"> <tr><td></td><td></td><td></td></tr> <tr><td></td><td></td><td></td></tr> <tr><td></td><td></td><td></td></tr> </table>', 'fadeIn');
quickTableX = -1, quickTableY = -1;
quickTableTd = function () {
$(this).css(
{width: '16px', height: '16px', border: '1px solid #ddd', padding: '5px', backgroundColor: 'white', cursor: 'pointer'}
).html(' ').mouseover(quickTableTdOver).click(quickTableTdClick);
};
quickTableTdOver = function () {
var row = this.parentNode, table = row.parentNode, X = this.cellIndex, Y = row.rowIndex;
if (X == row.cells.length - 1) {
for (var i = table.rows.length; i; i--) quickTableTd.apply(table.rows[i-1].insertCell(X+1));
}
if (Y == table.rows.length - 1) {
var _row = table.insertRow(Y+1);
for (var i = 0, t = row.cells.length; i < t; i++) quickTableTd.apply(_row.insertCell(i));
}
var aX = X < quickTableX ? [quickTableX, X, quickTableY, 'white'] : [X, quickTableX, Y, 'blue'];
var aY = Y < quickTableY ? [quickTableY, Y, quickTableX, 'white'] : [Y, quickTableY, X, 'blue'];
for (var i = aX[0]; i > aX[1]; i--) for (var j = aX[2]; j > -1; j--) {
table.rows[j].cells[i].style.backgroundColor = aX[3];
}
for (var i = aY[0]; i > aY[1]; i--) for (var j = aY[2]; j > -1; j--) {
table.rows[i].cells[j].style.backgroundColor = aY[3];
}
quickTableX = X, quickTableY = Y;
};
quickTableTdClick = function () {
var cells = '', rows = '';
for (var i = quickTableX; i > -1 ; i--) {
cells += ' <td></td>\n';
}
for (var i = quickTableY; i > -1 ; i--) {
rows += '\n<tr>\n'+ cells +'</tr>';
}
BUE.active.replaceSelection('<table>'+ rows +'\n</table>', 'end');
};
$('#bue-quick-table td').each(quickTableTd);
Источник кода (popup): http://ufku.com/drupal/bueditor/contributions/quick-table
Скриншоты диалогового и всплывающего окон:

Скачать код кнопки
Во вложении вы найдете JS файл (GZIP) с кодом этой кнопки:
- оригинал кода
- для D6 диалоговое окно
- для D6 всплывающее окно
- для D5 диалоговое окно
Также может быть полезно…
7 Комментариев [Нет новых]
неплоха бы оформить код как расширение (новая фича в версии 2.0)
Как это делается? Я кажется что-то пропустила. Будь добр, скинь ссылку на API или инструкцию.
в папке bueditor/library можно посмотреть примеры расширений, там же ридми есть
А можно поподробнее как этот функционал добавить в BUEditor.
Скачиваете файл с кодом. Ищите подходящий вам код по комментариям и копируете. А дальше, как обычно, добавляете кнопку к BUEditor и вставляете код в содержимое новой кнопки.
Спасибо!
Из архива почему-то какие-то крякозябли выходят, даже если и файл в *.js переименовываешь, пришлось скопировать из источника.
Копировать отсюда из-за цифр гешифильтра неудобно)
Переименовывать ничего не нужно, только РАСПАКОВАТЬ GZIP архив. Никаких крякозябов в файле нет, нормально и скачивается и открывается. Не знаю, как и чем вы его открывали.
Видимо, надо еще и ZIP приложить.
Потому и приложен с архив JS файлом.
Что ты об этом думаешь?