(function ($) { 'use strict'; window.RedactorPlugins = window.RedactorPlugins || {} var Table = function (redactor) { this.redactor = redactor } Table.prototype = { control: { rowUp : { text: 'Add row above' }, rowDown : { text: 'Add row below' }, colLeft : { text: 'Add column left' }, colRight : { text: 'Add column right' }, addHead : { text: 'Add header' }, delHead : { text: 'Delete header' }, delCol : { text: 'Delete column' }, delRow : { text: 'Delete row' }, delTable : { text: 'Delete table' }, stripe : { text: 'Striped row' }, border : { text: 'Borders on rows' }, fullBorder: { text: 'Borders everywhere' } }, controlGroup: [ 'up', 'down', '|', { 'Table Options': [ 'rowUp', 'rowDown', 'colLeft', 'colRight', '|', 'addHead', 'delHead', '|', 'delCol', 'delRow', 'delTable', '|', 'border', 'stripe', 'fullBorder' ] }, 'remove'], insertTable: function (rows, columns) { this.redactor.buffer.set(false) var $tableBox = $('
'), tableId = Math.floor(Math.random() * 99999), $table = $('| Header | ').appendTo($row) } for (var i = 0; i < rows; i++) { $row = $('||||
|---|---|---|---|---|
| Data | ') /* * Set the focus to the first table data row */ if (i === 0 && z === 0) { $column.append('' + this.redactor.opts.invisibleSpace + '') } $($row).append($column) } $tbody.append($row) } $('||||
| ').text('Data').appendTo($clone) } if (command === 'rowUp') { $clone.insertBefore($row) } else { $clone.insertAfter($row) } }, this)() break case 'colLeft': case 'colRight': $.proxy(function () { var $cell = $target.closest('td'), $row = $cell.closest('tr'), $table = $row.closest('table'), position = $row.children().index($cell) + 1, insertPosition = command === 'colLeft' ? 'before' : 'after' $table.find('thead tr').children(':nth-child(' + position + ')')[insertPosition]($(' | ').text('Header')) $table.find('tbody tr').children(':nth-child(' + position + ')')[insertPosition]($(' | ').text('Data'))
}, this)()
break
case 'addHead':
if (!$figure.find('table thead').length) {
$.proxy(function () {
var numCols = $figure.find('tr').first().children().length,
$table = $figure.find('table'),
$thead = $('').prependTo($table),
$row = $('| ').text('Header').appendTo($row)
}
}, this)()
}
break
case 'delHead':
$figure.find('thead').remove()
break
case 'delCol':
$.proxy(function () {
var $cell = $target.closest('td'),
position = $cell.parent().children().index($cell) + 1
$cell.closest('table').find('tr').children(':nth-child(' + position + ')').remove()
}, this)()
break
case 'delRow':
$target.closest('tr').remove()
break
case 'delTable':
$figure.remove()
break
case 'border':
$figure.removeClass('oc-table-bordered-all').toggleClass('oc-table-bordered-rows')
break
case 'stripe':
$figure.toggleClass('oc-table-striped')
break
case 'fullBorder':
$figure.removeClass('oc-table-bordered-rows').toggleClass('oc-table-bordered-all')
break
}
}
}
window.RedactorPlugins.table = function() {
return {
init: function () {
this.table = new Table(this)
var button = this.button.addBefore('link', 'table', 'Table')
this.button.addCallback(button, $.proxy(function () {
/*
* Save cursor position
*/
this.selection.save()
var callback = $.proxy(function () {
setTimeout(function () {
$('#redactor_table_rows').trigger('focus')
}, 200)
}, this)
var insert = $.proxy(function () {
this.table.insertTable($('#redactor_table_rows').val(), $('#redactor_table_columns').val())
this.button.setInactive('table')
}, this)
var modal = String()
+ ' | |