Browse Source

redactor plugins

Namdak Tonpa 9 years ago
parent
commit
21e5375e44

+ 75 - 0
priv/js/lang/ru.js

@@ -0,0 +1,75 @@
+(function ($) {
+$.Redactor.opts.langs['ru'] = {
+	html: 'Код',
+	video: 'Видео',
+	image: 'Изображение',
+	table: 'Таблица',
+	link: 'Ссылка',
+	link_insert: 'Вставить ссылку ...',
+	link_edit: 'Изменить ссылку',
+	unlink: 'Удалить ссылку',
+	formatting: 'Форматирование',
+	paragraph: 'Обычный текст',
+	quote: 'Цитата',
+	code: 'Код',
+	header1: 'Заголовок 1',
+	header2: 'Заголовок 2',
+	header3: 'Заголовок 3',
+	header4: 'Заголовок 4',
+	header5: 'Заголовок 5',
+	bold:  'Полужирный',
+	italic: 'Наклонный',
+	fontcolor: 'Цвет текста',
+	backcolor: 'Заливка текста',
+	unorderedlist: 'Обычный список',
+	orderedlist: 'Нумерованный список',
+	outdent: 'Уменьшить отступ',
+	indent: 'Увеличить отступ',
+	cancel: 'Отменить',
+	insert: 'Вставить',
+	save: 'Сохранить',
+	_delete: 'Удалить',
+	insert_table: 'Вставить таблицу',
+	insert_row_above: 'Добавить строку сверху',
+	insert_row_below: 'Добавить строку снизу',
+	insert_column_left: 'Добавить столбец слева',
+	insert_column_right: 'Добавить столбец справа',
+	delete_column: 'Удалить столбец',
+	delete_row: 'Удалить строку',
+	delete_table: 'Удалить таблицу',
+	rows: 'Строки',
+	columns: 'Столбцы',
+	add_head: 'Добавить заголовок',
+	delete_head: 'Удалить заголовок',
+	title: 'Подсказка',
+	image_position: 'Обтекание текстом',
+	none: 'Нет',
+	left: 'Cлева',
+	right: 'Cправа',
+	image_web_link: 'Cсылка на изображение',
+	text: 'Текст',
+	mailto: 'Эл. почта',
+	web: 'URL',
+	video_html_code: 'Код видео ролика',
+	file: 'Файл',
+	upload: 'Загрузить',
+	download: 'Скачать',
+	choose: 'Выбрать',
+	or_choose: 'Или выберите',
+	drop_file_here: 'Перетащите файл сюда',
+	align_left:	'По левому краю',
+	align_center: 'По центру',
+	align_right: 'По правому краю',
+	align_justify: 'Выровнять текст по ширине',
+	horizontalrule: 'Горизонтальная линейка',
+	fullscreen: 'Во весь экран',
+	deleted: 'Зачеркнутый',
+	anchor: 'Якорь',
+	link_new_tab: 'Открывать в новой вкладке',
+	underline: 'Подчеркнутый',
+	alignment: 'Выравнивание',
+	filename: 'Название (необязательно)',
+	edit: 'Ред.',
+	center: 'По центру'
+};
+})( jQuery );

+ 76 - 0
priv/js/lang/ua.js

@@ -0,0 +1,76 @@
+(function ($) {
+$.Redactor.opts.langs['ua'] = {
+	html: 'Код',
+	video: 'Відео',
+	image: 'Зображення',
+	table: 'Таблиця',
+	link: 'Посилання',
+	link_insert: 'Вставити посилання ...',
+	link_edit: 'Edit link',
+	unlink: 'Видалити посилання',
+	formatting: 'Стилі',
+	paragraph: 'Звичайний текст',
+	quote: 'Цитата',
+	code: 'Код',
+	header1: 'Заголовок 1',
+	header2: 'Заголовок 2',
+	header3: 'Заголовок 3',
+	header4: 'Заголовок 4',
+	header5: 'Заголовок 5',
+	bold:  'Жирний',
+	italic: 'Похилий',
+	fontcolor: 'Колір тексту',
+	backcolor: 'Заливка тексту',
+	unorderedlist: 'Звичайний список',
+	orderedlist: 'Нумерований список',
+	outdent: 'Зменшити відступ',
+	indent: 'Збільшити відступ',
+	cancel: 'Скасувати',
+	insert: 'Вставити',
+	save: 'Зберегти',
+	_delete: 'Видалити',
+	insert_table: 'Вставити таблицю',
+	insert_row_above: 'Додати рядок зверху',
+	insert_row_below: 'Додати рядок знизу',
+	insert_column_left: 'Додати стовпець ліворуч',
+	insert_column_right: 'Додати стовпець праворуч',
+	delete_column: 'Видалити стовпець',
+	delete_row: 'Видалити рядок',
+	delete_table: 'Видалити таблицю',
+	rows: 'Рядки',
+	columns: 'Стовпці',
+	add_head: 'Додати заголовок',
+	delete_head: 'Видалити заголовок',
+	title: 'Підказка',
+	image_view: 'Завантажити зображення',
+	image_position: 'Обтікання текстом',
+	none: 'ні',
+	left: 'ліворуч',
+	right: 'праворуч',
+	image_web_link: 'Посилання на зображення',
+	text: 'Текст',
+	mailto: 'Ел. пошта',
+	web: 'URL',
+	video_html_code: 'Код відео ролика',
+	file: 'Файл',
+	upload: 'Завантажити',
+	download: 'Завантажити',
+	choose: 'Вибрати',
+	or_choose: 'Або виберіть',
+	drop_file_here: 'Перетягніть файл сюди',
+	align_left:	'По лівому краю',
+	align_center: 'По центру',
+	align_right: 'По правому краю',
+	align_justify: 'Вирівняти текст по ширині',
+	horizontalrule: 'Горизонтальная лінійка',
+	fullscreen: 'На весь екран',
+	deleted: 'Закреслений',
+    anchor: 'Anchor',
+	link_new_tab: 'Open link in new tab',
+	underline: 'Underline',
+	alignment: 'Alignment',
+	filename: 'Name (optional)',
+	edit: 'Edit',
+	center: 'Center'
+};
+})( jQuery );

+ 6 - 0
priv/js/plugins/clips/clips.css

@@ -0,0 +1,6 @@
+.label-red {
+	color: #fff;
+	background: #c92020;
+	padding: 0 7px;
+	border-radius: 4px;
+}

+ 62 - 0
priv/js/plugins/clips/clips.js

@@ -0,0 +1,62 @@
+(function($)
+{
+	$.Redactor.prototype.clips = function()
+	{
+		return {
+			init: function()
+			{
+				var items = [
+					['Lorem ipsum...', 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'],
+					['Red label', '<span class="label-red">Label</span>']
+				];
+
+				this.clips.template = $('<ul id="redactor-modal-list">');
+
+				for (var i = 0; i < items.length; i++)
+				{
+					var li = $('<li>');
+					var a = $('<a href="#" class="redactor-clip-link">').text(items[i][0]);
+					var div = $('<div class="redactor-clip">').hide().html(items[i][1]);
+
+					li.append(a);
+					li.append(div);
+					this.clips.template.append(li);
+				}
+
+				this.modal.addTemplate('clips', '<section>' + this.utils.getOuterHtml(this.clips.template) + '</section>');
+
+				var button = this.button.add('clips', 'Clips');
+				this.button.addCallback(button, this.clips.show);
+
+			},
+			show: function()
+			{
+				this.modal.load('clips', 'Insert Clips', 400);
+
+				this.modal.createCancelButton();
+
+				$('#redactor-modal-list').find('.redactor-clip-link').each($.proxy(this.clips.load, this));
+
+				this.selection.save();
+				this.modal.show();
+			},
+			load: function(i,s)
+			{
+				$(s).on('click', $.proxy(function(e)
+				{
+					e.preventDefault();
+					this.clips.insert($(s).next().html());
+
+				}, this));
+			},
+			insert: function(html)
+			{
+				this.selection.restore();
+				this.insert.html(html);
+				this.modal.close();
+				this.observe.load();
+			}
+		};
+	};
+})(jQuery);
+

+ 42 - 0
priv/js/plugins/counter/counter.js

@@ -0,0 +1,42 @@
+(function($)
+{
+	$.Redactor.prototype.counter = function()
+	{
+		return {
+			init: function()
+			{
+				if (!this.opts.counterCallback) return;
+
+				this.$editor.on('keyup.redactor-limiter', $.proxy(function(e)
+				{
+					var words = 0, characters = 0, spaces = 0;
+
+					var html = this.code.get();
+
+					var text = html.replace(/<\/(.*?)>/gi, ' ');
+					text = text.replace(/<(.*?)>/gi, '');
+					text = text.replace(/\t/gi, '');
+					text = text.replace(/\n/gi, ' ');
+					text = text.replace(/\r/gi, ' ');
+					text = $.trim(text);
+
+					if (text !== '')
+					{
+						var arrWords = text.split(/\s+/);
+						var arrSpaces = text.match(/\s/g);
+
+						if (arrWords) words = arrWords.length;
+						if (arrSpaces) spaces = arrSpaces.length;
+
+						characters = text.length;
+
+					}
+
+					this.core.setCallback('counter', { words: words, characters: characters, spaces: spaces });
+
+
+				}, this));
+			}
+		};
+	};
+})(jQuery);

+ 51 - 0
priv/js/plugins/definedlinks/definedlinks.js

@@ -0,0 +1,51 @@
+(function($)
+{
+	$.Redactor.prototype.definedlinks = function()
+	{
+		return {
+			init: function()
+			{
+				if (!this.opts.definedLinks) return;
+
+				this.modal.addCallback('link', $.proxy(this.definedlinks.load, this));
+
+			},
+			load: function()
+			{
+				var $select = $('<select id="redactor-defined-links" />');
+				$('#redactor-modal-link-insert').prepend($select);
+
+				this.definedlinks.storage = {};
+
+				$.getJSON(this.opts.definedLinks, $.proxy(function(data)
+				{
+					$.each(data, $.proxy(function(key, val)
+					{
+						this.definedlinks.storage[key] = val;
+						$select.append($('<option>').val(key).html(val.name));
+
+					}, this));
+
+					$select.on('change', $.proxy(this.definedlinks.select, this));
+
+				}, this));
+
+			},
+			select: function(e)
+			{
+				var key = $(e.target).val();
+				var name = '', url = '';
+				if (key !== 0)
+				{
+					name = this.definedlinks.storage[key].name;
+					url = this.definedlinks.storage[key].url;
+				}
+
+				$('#redactor-link-url').val(url);
+
+				var $el = $('#redactor-link-url-text');
+				if ($el.val() === '') $el.val(name);
+			}
+		};
+	};
+})(jQuery);

+ 62 - 0
priv/js/plugins/filemanager/filemanager.js

@@ -0,0 +1,62 @@
+(function($)
+{
+	$.Redactor.prototype.filemanager = function()
+	{
+		return {
+			init: function()
+			{
+				if (!this.opts.fileManagerJson) return;
+
+				this.modal.addCallback('file', this.filemanager.load);
+			},
+			load: function()
+			{
+				var $modal = this.modal.getModal();
+
+				this.modal.createTabber($modal);
+				this.modal.addTab(1, 'Upload', 'active');
+				this.modal.addTab(2, 'Choose');
+
+				$('#redactor-modal-file-upload-box').addClass('redactor-tab redactor-tab1');
+
+				var $box = $('<div id="redactor-file-manager-box" style="overflow: auto; height: 300px;" class="redactor-tab redactor-tab2">').hide();
+				$modal.append($box);
+
+
+				$.ajax({
+				  dataType: "json",
+				  cache: false,
+				  url: this.opts.fileManagerJson,
+				  success: $.proxy(function(data)
+					{
+						var ul = $('<ul id="redactor-modal-list">');
+						$.each(data, $.proxy(function(key, val)
+						{
+							var a = $('<a href="#" title="' + val.title + '" rel="' + val.link + '" class="redactor-file-manager-link">' + val.title + ' <span style="font-size: 11px; color: #888;">' + val.name + '</span> <span style="position: absolute; right: 10px; font-size: 11px; color: #888;">(' + val.size + ')</span></a>');
+							var li = $('<li />');
+
+							a.on('click', $.proxy(this.filemanager.insert, this));
+
+							li.append(a);
+							ul.append(li);
+
+						}, this));
+
+						$('#redactor-file-manager-box').append(ul);
+
+
+					}, this)
+				});
+
+			},
+			insert: function(e)
+			{
+				e.preventDefault();
+
+				var $target = $(e.target).closest('.redactor-file-manager-link');
+
+				this.file.insert('<a href="' + $target.attr('rel') + '">' + $target.attr('title') + '</a>');
+			}
+		};
+	};
+})(jQuery);

+ 74 - 0
priv/js/plugins/fontcolor/fontcolor.js

@@ -0,0 +1,74 @@
+(function($)
+{
+	$.Redactor.prototype.fontcolor = function()
+	{
+		return {
+			init: function()
+			{
+				var colors = [
+					'#ffffff', '#000000', '#eeece1', '#1f497d', '#4f81bd', '#c0504d', '#9bbb59', '#8064a2', '#4bacc6', '#f79646', '#ffff00',
+					'#f2f2f2', '#7f7f7f', '#ddd9c3', '#c6d9f0', '#dbe5f1', '#f2dcdb', '#ebf1dd', '#e5e0ec', '#dbeef3', '#fdeada', '#fff2ca',
+					'#d8d8d8', '#595959', '#c4bd97', '#8db3e2', '#b8cce4', '#e5b9b7', '#d7e3bc', '#ccc1d9', '#b7dde8', '#fbd5b5', '#ffe694',
+					'#bfbfbf', '#3f3f3f', '#938953', '#548dd4', '#95b3d7', '#d99694', '#c3d69b', '#b2a2c7', '#b7dde8', '#fac08f', '#f2c314',
+					'#a5a5a5', '#262626', '#494429', '#17365d', '#366092', '#953734', '#76923c', '#5f497a', '#92cddc', '#e36c09', '#c09100',
+					'#7f7f7f', '#0c0c0c', '#1d1b10', '#0f243e', '#244061', '#632423', '#4f6128', '#3f3151', '#31859b',  '#974806', '#7f6000'
+				];
+
+				var buttons = ['fontcolor', 'backcolor'];
+
+				for (var i = 0; i < 2; i++)
+				{
+					var name = buttons[i];
+
+					var button = this.button.add(name, this.lang.get(name));
+					var $dropdown = this.button.addDropdown(button);
+
+					$dropdown.width(242);
+					this.fontcolor.buildPicker($dropdown, name, colors);
+
+				}
+			},
+			buildPicker: function($dropdown, name, colors)
+			{
+				var rule = (name == 'backcolor') ? 'background-color' : 'color';
+
+				var len = colors.length;
+				var self = this;
+				var func = function(e)
+				{
+					e.preventDefault();
+					self.fontcolor.set($(this).data('rule'), $(this).attr('rel'));
+				};
+
+				for (var z = 0; z < len; z++)
+				{
+					var color = colors[z];
+
+					var $swatch = $('<a rel="' + color + '" data-rule="' + rule +'" href="#" style="float: left; font-size: 0; border: 2px solid #fff; padding: 0; margin: 0; width: 22px; height: 22px;"></a>');
+					$swatch.css('background-color', color);
+					$swatch.on('click', func);
+
+					$dropdown.append($swatch);
+				}
+
+				var $elNone = $('<a href="#" style="display: block; clear: both; padding: 5px; font-size: 12px; line-height: 1;"></a>').html(this.lang.get('none'));
+				$elNone.on('click', $.proxy(function(e)
+				{
+					e.preventDefault();
+					this.fontcolor.remove(rule);
+
+				}, this));
+
+				$dropdown.append($elNone);
+			},
+			set: function(rule, type)
+			{
+				this.inline.format('span', 'style', rule + ': ' + type + ';');
+			},
+			remove: function(rule)
+			{
+				this.inline.removeStyleRule(rule);
+			}
+		};
+	};
+})(jQuery);

+ 33 - 0
priv/js/plugins/fontfamily/fontfamily.js

@@ -0,0 +1,33 @@
+(function($)
+{
+	$.Redactor.prototype.fontfamily = function()
+	{
+		return {
+			init: function ()
+			{
+				var fonts = [ 'Arial', 'Helvetica', 'Georgia', 'Times New Roman', 'Monospace' ];
+				var that = this;
+				var dropdown = {};
+
+				$.each(fonts, function(i, s)
+				{
+					dropdown['s' + i] = { title: s, func: function() { that.fontfamily.set(s); }};
+				});
+
+				dropdown.remove = { title: 'Remove Font Family', func: that.fontfamily.reset };
+
+				var button = this.button.add('fontfamily', 'Change Font Family');
+				this.button.addDropdown(button, dropdown);
+
+			},
+			set: function (value)
+			{
+				this.inline.format('span', 'style', 'font-family:' + value + ';');
+			},
+			reset: function()
+			{
+				this.inline.removeStyleRule('font-family');
+			}
+		};
+	};
+})(jQuery);

+ 32 - 0
priv/js/plugins/fontsize/fontsize.js

@@ -0,0 +1,32 @@
+(function($)
+{
+	$.Redactor.prototype.fontsize = function()
+	{
+		return {
+			init: function()
+			{
+				var fonts = [10, 11, 12, 14, 16, 18, 20, 24, 28, 30];
+				var that = this;
+				var dropdown = {};
+
+				$.each(fonts, function(i, s)
+				{
+					dropdown['s' + i] = { title: s + 'px', func: function() { that.fontsize.set(s); } };
+				});
+
+				dropdown.remove = { title: 'Remove Font Size', func: that.fontsize.reset };
+
+				var button = this.button.add('fontsize', 'Change Font Size');
+				this.button.addDropdown(button, dropdown);
+			},
+			set: function(size)
+			{
+				this.inline.format('span', 'style', 'font-size: ' + size + 'px;');
+			},
+			reset: function()
+			{
+				this.inline.removeStyleRule('font-size');
+			}
+		};
+	};
+})(jQuery);

+ 121 - 0
priv/js/plugins/fullscreen/fullscreen.js

@@ -0,0 +1,121 @@
+(function($)
+{
+	$.Redactor.prototype.fullscreen = function()
+	{
+		return {
+			init: function()
+			{
+				this.fullscreen.isOpen = false;
+
+				var button = this.button.add('fullscreen', 'Fullscreen');
+				this.button.addCallback(button, this.fullscreen.toggle);
+
+				if (this.opts.fullscreen) this.fullscreen.toggle();
+			},
+			enable: function()
+			{
+				this.button.changeIcon('fullscreen', 'normalscreen');
+				this.button.setActive('fullscreen');
+				this.fullscreen.isOpen = true;
+
+				if (this.opts.toolbarExternal)
+				{
+					this.fullscreen.toolcss = {};
+					this.fullscreen.boxcss = {};
+					this.fullscreen.toolcss.width = this.$toolbar.css('width');
+					this.fullscreen.toolcss.top = this.$toolbar.css('top');
+					this.fullscreen.toolcss.position = this.$toolbar.css('position');
+					this.fullscreen.boxcss.top = this.$box.css('top');
+				}
+
+				this.fullscreen.height = this.$editor.height();
+
+				if (this.opts.maxHeight) this.$editor.css('max-height', '');
+				if (this.opts.minHeight) this.$editor.css('min-height', '');
+
+				if (!this.$fullscreenPlaceholder) this.$fullscreenPlaceholder = $('<div/>');
+				this.$fullscreenPlaceholder.insertAfter(this.$box);
+
+				this.$box.appendTo(document.body);
+
+				this.$box.addClass('redactor-box-fullscreen');
+				$('body, html').css('overflow', 'hidden');
+
+				this.fullscreen.resize();
+				$(window).on('resize.redactor.fullscreen', $.proxy(this.fullscreen.resize, this));
+				$(document).scrollTop(0, 0);
+
+				$('.redactor-toolbar-tooltip').hide();
+				this.$editor.focus();
+				this.observe.load();
+			},
+			disable: function()
+			{
+				this.button.removeIcon('fullscreen', 'normalscreen');
+				this.button.setInactive('fullscreen');
+				this.fullscreen.isOpen = false;
+
+				$(window).off('resize.redactor.fullscreen');
+				$('body, html').css('overflow', '');
+
+				this.$box.insertBefore(this.$fullscreenPlaceholder);
+				this.$fullscreenPlaceholder.remove();
+
+				this.$box.removeClass('redactor-box-fullscreen').css({ width: 'auto', height: 'auto' });
+
+				this.code.sync();
+
+				if (this.opts.toolbarExternal)
+				{
+					this.$box.css('top', this.fullscreen.boxcss.top);
+					this.$toolbar.css({
+						'width': this.fullscreen.toolcss.width,
+						'top': this.fullscreen.toolcss.top,
+						'position': this.fullscreen.toolcss.position
+					});
+				}
+
+				if (this.opts.minHeight) this.$editor.css('minHeight', this.opts.minHeight);
+				if (this.opts.maxHeight) this.$editor.css('maxHeight', this.opts.maxHeight);
+
+				$('.redactor-toolbar-tooltip').hide();
+				this.$editor.css('height', 'auto');
+				this.$editor.focus();
+				this.observe.load();
+			},
+			toggle: function()
+			{
+				if (this.fullscreen.isOpen)
+				{
+					this.fullscreen.disable();
+				}
+				else
+				{
+					this.fullscreen.enable();
+				}
+			},
+			resize: function()
+			{
+				if (!this.fullscreen.isOpen) return;
+
+				var toolbarHeight = this.$toolbar.height();
+
+				var height = $(window).height() - toolbarHeight - this.utils.normalize(this.$editor.css('padding-top')) - this.utils.normalize(this.$editor.css('padding-bottom'));
+				this.$box.width($(window).width()).height(height);
+
+				if (this.opts.toolbarExternal)
+				{
+					this.$toolbar.css({
+						'top': '0px',
+						'position': 'absolute',
+						'width': '100%'
+					});
+
+					this.$box.css('top', toolbarHeight + 'px');
+				}
+
+				this.$editor.height(height);
+			}
+		};
+	};
+})(jQuery);

+ 55 - 0
priv/js/plugins/imagemanager/imagemanager.js

@@ -0,0 +1,55 @@
+(function($)
+{
+	$.Redactor.prototype.imagemanager = function()
+	{
+		return {
+			init: function()
+			{
+				if (!this.opts.imageManagerJson) return;
+
+				this.modal.addCallback('image', this.imagemanager.load);
+			},
+			load: function()
+			{
+				var $modal = this.modal.getModal();
+
+				this.modal.createTabber($modal);
+				this.modal.addTab(1, 'Upload', 'active');
+				this.modal.addTab(2, 'Choose');
+
+				$('#redactor-modal-image-droparea').addClass('redactor-tab redactor-tab1');
+
+				var $box = $('<div id="redactor-image-manager-box" style="overflow: auto; height: 300px;" class="redactor-tab redactor-tab2">').hide();
+				$modal.append($box);
+
+				$.ajax({
+				  dataType: "json",
+				  cache: false,
+				  url: this.opts.imageManagerJson,
+				  success: $.proxy(function(data)
+					{
+						$.each(data, $.proxy(function(key, val)
+						{
+							// title
+							var thumbtitle = '';
+							if (typeof val.title !== 'undefined') thumbtitle = val.title;
+
+							var img = $('<img src="' + val.thumb + '" rel="' + val.image + '" title="' + thumbtitle + '" style="width: 100px; height: 75px; cursor: pointer;" />');
+							$('#redactor-image-manager-box').append(img);
+							$(img).click($.proxy(this.imagemanager.insert, this));
+
+						}, this));
+
+
+					}, this)
+				});
+
+
+			},
+			insert: function(e)
+			{
+				this.image.insert('<img src="' + $(e.target).attr('rel') + '" alt="' + $(e.target).attr('title') + '">');
+			}
+		};
+	};
+})(jQuery);

+ 39 - 0
priv/js/plugins/limiter/limiter.js

@@ -0,0 +1,39 @@
+(function($)
+{
+	$.Redactor.prototype.limiter = function()
+	{
+		return {
+			init: function()
+			{
+				if (!this.opts.limiter) return;
+
+				this.$editor.on('keydown.redactor-limiter', $.proxy(function(e)
+				{
+					var key = e.which;
+					var ctrl = e.ctrlKey || e.metaKey;
+
+					if (key == this.keyCode.BACKSPACE
+					   	|| key == this.keyCode.DELETE
+					    || key == this.keyCode.ESC
+					    || key == this.keyCode.SHIFT
+					    || (ctrl && key == 65)
+					    || (ctrl && key == 82)
+					    || (ctrl && key == 116)
+					)
+					{
+						return;
+					}
+
+					var count = this.$editor.text().length;
+					if (count >= this.opts.limiter)
+					{
+						return false;
+					}
+
+
+				}, this));
+
+			}
+		};
+	};
+})(jQuery);

+ 470 - 0
priv/js/plugins/table/table.js

@@ -0,0 +1,470 @@
+(function($)
+{
+	$.Redactor.prototype.table = function()
+	{
+		return {
+			getTemplate: function()
+			{
+				return String()
+				+ '<section id="redactor-modal-table-insert">'
+					+ '<label>' + this.lang.get('rows') + '</label>'
+					+ '<input type="text" size="5" value="2" id="redactor-table-rows" />'
+					+ '<label>' + this.lang.get('columns') + '</label>'
+					+ '<input type="text" size="5" value="3" id="redactor-table-columns" />'
+				+ '</section>';
+			},
+			init: function()
+			{
+				var dropdown = {};
+
+				dropdown.insert_table = {
+									title: this.lang.get('insert_table'),
+									func: this.table.show,
+									observe: {
+										element: 'table',
+										in: {
+											attr: {
+												'class': 'redactor-dropdown-link-inactive',
+												'aria-disabled': true,
+											}
+										}
+									}
+								};
+
+				dropdown.insert_row_above = {
+									title: this.lang.get('insert_row_above'),
+									func: this.table.addRowAbove,
+									observe: {
+										element: 'table',
+										out: {
+											attr: {
+												'class': 'redactor-dropdown-link-inactive',
+												'aria-disabled': true,
+											}
+										}
+									}
+								};
+
+				dropdown.insert_row_below = {
+									title: this.lang.get('insert_row_below'),
+									func: this.table.addRowBelow,
+									observe: {
+										element: 'table',
+										out: {
+											attr: {
+												'class': 'redactor-dropdown-link-inactive',
+												'aria-disabled': true,
+											}
+										}
+									}
+								};
+
+				dropdown.insert_column_left = {
+									title: this.lang.get('insert_column_left'),
+									func: this.table.addColumnLeft,
+									observe: {
+										element: 'table',
+										out: {
+											attr: {
+												'class': 'redactor-dropdown-link-inactive',
+												'aria-disabled': true,
+											}
+										}
+									}
+								};
+
+				dropdown.insert_column_right = {
+									title: this.lang.get('insert_column_right'),
+									func: this.table.addColumnRight,
+									observe: {
+										element: 'table',
+										out: {
+											attr: {
+												'class': 'redactor-dropdown-link-inactive',
+												'aria-disabled': true,
+											}
+										}
+									}
+								};
+
+				dropdown.add_head = {
+									title: this.lang.get('add_head'),
+									func: this.table.addHead,
+									observe: {
+										element: 'table',
+										out: {
+											attr: {
+												'class': 'redactor-dropdown-link-inactive',
+												'aria-disabled': true,
+											}
+										}
+									}
+								};
+
+				dropdown.delete_head = {
+									title: this.lang.get('delete_head'),
+									func: this.table.deleteHead,
+									observe: {
+										element: 'table',
+										out: {
+											attr: {
+												'class': 'redactor-dropdown-link-inactive',
+												'aria-disabled': true,
+											}
+										}
+									}
+								};
+
+				dropdown.delete_column = {
+									title: this.lang.get('delete_column'),
+									func: this.table.deleteColumn,
+									observe: {
+										element: 'table',
+										out: {
+											attr: {
+												'class': 'redactor-dropdown-link-inactive',
+												'aria-disabled': true,
+											}
+										}
+									}
+								};
+
+				dropdown.delete_row = {
+									title: this.lang.get('delete_row'),
+									func: this.table.deleteRow,
+									observe: {
+										element: 'table',
+										out: {
+											attr: {
+												'class': 'redactor-dropdown-link-inactive',
+												'aria-disabled': true,
+											}
+										}
+									}
+								};
+
+				dropdown.delete_table = {
+									title: this.lang.get('delete_table'),
+									func: this.table.deleteTable,
+									observe: {
+										element: 'table',
+										out: {
+											attr: {
+												'class': 'redactor-dropdown-link-inactive',
+												'aria-disabled': true,
+											}
+										}
+									}
+								};
+
+				this.observe.addButton('td', 'table');
+				this.observe.addButton('th', 'table');
+
+				var button = this.button.addBefore('link', 'table', this.lang.get('table'));
+				this.button.addDropdown(button, dropdown);
+			},
+			show: function()
+			{
+				this.modal.addTemplate('table', this.table.getTemplate());
+
+				this.modal.load('table', this.lang.get('insert_table'), 300);
+				this.modal.createCancelButton();
+
+				var button = this.modal.createActionButton(this.lang.get('insert'));
+				button.on('click', this.table.insert);
+
+				this.selection.save();
+				this.modal.show();
+
+				$('#redactor-table-rows').focus();
+
+			},
+			insert: function()
+			{
+				this.placeholder.remove();
+
+				var rows = $('#redactor-table-rows').val(),
+					columns = $('#redactor-table-columns').val(),
+					$tableBox = $('<div>'),
+					tableId = Math.floor(Math.random() * 99999),
+					$table = $('<table id="table' + tableId + '"><tbody></tbody></table>'),
+					i, $row, z, $column;
+
+				for (i = 0; i < rows; i++)
+				{
+					$row = $('<tr>');
+
+					for (z = 0; z < columns; z++)
+					{
+						$column = $('<td>' + this.opts.invisibleSpace + '</td>');
+
+						// set the focus to the first td
+						if (i === 0 && z === 0)
+						{
+							$column.append(this.selection.getMarker());
+						}
+
+						$($row).append($column);
+					}
+
+					$table.append($row);
+				}
+
+				$tableBox.append($table);
+				var html = $tableBox.html();
+
+				this.modal.close();
+				this.selection.restore();
+
+				if (this.table.getTable()) return;
+
+				this.buffer.set();
+
+				var current = this.selection.getBlock() || this.selection.getCurrent();
+				if (current && current.tagName != 'BODY')
+				{
+					if (current.tagName == 'LI') current = $(current).closest('ul, ol');
+					$(current).after(html);
+				}
+				else
+				{
+					this.insert.html(html, false);
+				}
+
+				this.selection.restore();
+
+				var table = this.$editor.find('#table' + tableId);
+
+				var p = table.prev("p");
+
+				if (p.length > 0 && this.utils.isEmpty(p.html()))
+				{
+					p.remove();
+				}
+
+				if (!this.opts.linebreaks && (this.utils.browser('mozilla') || this.utils.browser('msie')))
+				{
+					var $next = table.next();
+					if ($next.length === 0)
+					{
+						 table.after(this.opts.emptyHtml);
+					}
+				}
+
+				this.observe.buttons();
+
+				table.find('span.redactor-selection-marker').remove();
+				table.removeAttr('id');
+
+				this.code.sync();
+				this.core.setCallback('insertedTable', table);
+			},
+			getTable: function()
+			{
+				var $table = $(this.selection.getParent()).closest('table');
+
+				if (!this.utils.isRedactorParent($table)) return false;
+				if ($table.size() === 0) return false;
+
+				return $table;
+			},
+			restoreAfterDelete: function($table)
+			{
+				this.selection.restore();
+				$table.find('span.redactor-selection-marker').remove();
+				this.code.sync();
+			},
+			deleteTable: function()
+			{
+				var $table = this.table.getTable();
+				if (!$table) return;
+
+				this.buffer.set();
+
+
+				var $next = $table.next();
+				if (!this.opts.linebreaks && $next.length !== 0)
+				{
+					this.caret.setStart($next);
+				}
+				else
+				{
+					this.caret.setAfter($table);
+				}
+
+
+				$table.remove();
+
+				this.code.sync();
+			},
+			deleteRow: function()
+			{
+			var $table = this.table.getTable();
+			if (!$table) return;
+
+			var $current = $(this.selection.getCurrent());
+
+			this.buffer.set();
+
+			var $current_tr = $current.closest('tr');
+			var $focus_tr = $current_tr.prev().length ? $current_tr.prev() : $current_tr.next();
+			if ($focus_tr.length)
+			{
+				var $focus_td = $focus_tr.children('td, th').first();
+				if ($focus_td.length) $focus_td.prepend(this.selection.getMarker());
+			}
+
+			$current_tr.remove();
+			this.table.restoreAfterDelete($table);
+		},
+			deleteColumn: function()
+			{
+			var $table = this.table.getTable();
+			if (!$table) return;
+
+			this.buffer.set();
+
+			var $current = $(this.selection.getCurrent());
+			var $current_td = $current.closest('td, th');
+			var index = $current_td[0].cellIndex;
+
+			$table.find('tr').each($.proxy(function(i, elem)
+			{
+				var $elem = $(elem);
+				var focusIndex = index - 1 < 0 ? index + 1 : index - 1;
+				if (i === 0) $elem.find('td, th').eq(focusIndex).prepend(this.selection.getMarker());
+
+				$elem.find('td, th').eq(index).remove();
+
+			}, this));
+
+			this.table.restoreAfterDelete($table);
+		},
+			addHead: function()
+			{
+				var $table = this.table.getTable();
+				if (!$table) return;
+
+				this.buffer.set();
+
+				if ($table.find('thead').size() !== 0)
+				{
+					this.table.deleteHead();
+					return;
+				}
+
+				var tr = $table.find('tr').first().clone();
+				tr.find('td').replaceWith($.proxy(function()
+				{
+					return $('<th>').html(this.opts.invisibleSpace);
+				}, this));
+
+				$thead = $('<thead></thead>').append(tr);
+				$table.prepend($thead);
+
+				this.code.sync();
+
+			},
+			deleteHead: function()
+			{
+				var $table = this.table.getTable();
+				if (!$table) return;
+
+				var $thead = $table.find('thead');
+				if ($thead.size() === 0) return;
+
+				this.buffer.set();
+
+				$thead.remove();
+				this.code.sync();
+			},
+			addRowAbove: function()
+			{
+				this.table.addRow('before');
+			},
+			addRowBelow: function()
+			{
+				this.table.addRow('after');
+			},
+			addColumnLeft: function()
+			{
+				this.table.addColumn('before');
+			},
+			addColumnRight: function()
+			{
+				this.table.addColumn('after');
+			},
+			addRow: function(type)
+			{
+				var $table = this.table.getTable();
+				if (!$table) return;
+
+				this.buffer.set();
+
+				var $current = $(this.selection.getCurrent());
+				var $current_tr = $current.closest('tr');
+				var new_tr = $current_tr.clone();
+
+				new_tr.find('th').replaceWith(function()
+				{
+					var $td = $('<td>');
+					$td[0].attributes = this.attributes;
+
+					return $td.append($(this).contents());
+				});
+
+				new_tr.find('td').html(this.opts.invisibleSpace);
+
+				if (type == 'after')
+				{
+					$current_tr.after(new_tr);
+				}
+				else
+				{
+					$current_tr.before(new_tr);
+				}
+
+				this.code.sync();
+			},
+			addColumn: function (type)
+			{
+				var $table = this.table.getTable();
+				if (!$table) return;
+
+				var index = 0;
+				var current = $(this.selection.getCurrent());
+
+				this.buffer.set();
+
+				var $current_tr = current.closest('tr');
+				var $current_td = current.closest('td, th');
+
+				$current_tr.find('td, th').each($.proxy(function(i, elem)
+				{
+					if ($(elem)[0] === $current_td[0]) index = i;
+
+				}, this));
+
+				$table.find('tr').each($.proxy(function(i, elem)
+				{
+					var $current = $(elem).find('td, th').eq(index);
+
+					var td = $current.clone();
+					td.html(this.opts.invisibleSpace);
+
+					if (type == 'after')
+					{
+						$current.after(td);
+					}
+					else
+					{
+						$current.before(td);
+					}
+
+				}, this));
+
+				this.code.sync();
+			}
+		};
+	};
+})(jQuery);

+ 29 - 0
priv/js/plugins/textdirection/textdirection.js

@@ -0,0 +1,29 @@
+(function($)
+{
+	$.Redactor.prototype.textdirection = function()
+	{
+		return {
+			init: function()
+			{
+				var that = this;
+				var dropdown = {};
+
+				dropdown.ltr = { title: 'Left to Right', func: that.textdirection.setLtr };
+				dropdown.rtl = { title: 'Right to Left', func: that.textdirection.setRtl};
+
+				var button = this.button.add('textdirection', 'Change Text Direction');
+				this.button.addDropdown(button, dropdown);
+			},
+			setRtl: function()
+			{
+				this.buffer.set();
+				this.block.setAttr('dir', 'rtl');
+			},
+			setLtr: function()
+			{
+				this.buffer.set();
+				this.block.removeAttr('dir');
+			}
+		};
+	};
+})(jQuery);

+ 73 - 0
priv/js/plugins/textexpander/textexpander.js

@@ -0,0 +1,73 @@
+(function($)
+{
+	$.Redactor.prototype.textexpander = function()
+	{
+		return {
+			init: function()
+			{
+				if (!this.opts.textexpander) return;
+
+				this.$editor.on('keyup.redactor-limiter', $.proxy(function(e)
+				{
+					var key = e.which;
+					if (key == this.keyCode.SPACE)
+					{
+						var current = this.textexpander.getCurrent();
+						var cloned = $(current).clone();
+
+						var $div = $('<div>');
+						$div.html(cloned);
+
+						var text = $div.html();
+						$div.remove();
+
+						var len = this.opts.textexpander.length;
+						var replaced = 0;
+
+						for (var i = 0; i < len; i++)
+						{
+							var re = new RegExp(this.opts.textexpander[i][0]);
+							if (text.search(re) != -1)
+							{
+								replaced++;
+								text = text.replace(re, this.opts.textexpander[i][1]);
+
+								$div = $('<div>');
+								$div.html(text);
+								$div.append(this.selection.getMarker());
+
+								var html = $div.html().replace(/&nbsp;/, '');
+
+								$(current).replaceWith(html);
+								$div.remove();
+							}
+						}
+
+						if (replaced !== 0)
+						{
+							this.selection.restore();
+						}
+					}
+
+
+				}, this));
+
+			},
+			getCurrent: function()
+			{
+				var selection
+				if (window.getSelection) selection = window.getSelection();
+				else if (document.selection && document.selection.type != "Control") selection = document.selection;
+
+				if (this.utils.browser('mozilla'))
+				{
+					return selection.anchorNode.previousSibling;
+				}
+				else
+				{
+					return selection.anchorNode;
+				}
+			}
+		};
+	};
+})(jQuery);

+ 75 - 0
priv/js/plugins/video/video.js

@@ -0,0 +1,75 @@
+(function($)
+{
+	$.Redactor.prototype.video = function()
+	{
+		return {
+			reUrlYoutube: /https?:\/\/(?:[0-9A-Z-]+\.)?(?:youtu\.be\/|youtube\.com\S*[^\w\-\s])([\w\-]{11})(?=[^\w\-]|$)(?![?=&+%\w.-]*(?:['"][^<>]*>|<\/a>))[?=&+%\w.-]*/ig,
+			reUrlVimeo: /https?:\/\/(www\.)?vimeo.com\/(\d+)($|\/)/,
+			getTemplate: function()
+			{
+				return String()
+				+ '<section id="redactor-modal-video-insert">'
+					+ '<label>' + this.lang.get('video_html_code') + '</label>'
+					+ '<textarea id="redactor-insert-video-area" style="height: 160px;"></textarea>'
+				+ '</section>';
+			},
+			init: function()
+			{
+				var button = this.button.addAfter('image', 'video', this.lang.get('video'));
+				this.button.addCallback(button, this.video.show);
+			},
+			show: function()
+			{
+				this.modal.addTemplate('video', this.video.getTemplate());
+
+				this.modal.load('video', this.lang.get('video'), 700);
+				this.modal.createCancelButton();
+
+				var button = this.modal.createActionButton(this.lang.get('insert'));
+				button.on('click', this.video.insert);
+
+				this.selection.save();
+				this.modal.show();
+
+				$('#redactor-insert-video-area').focus();
+
+			},
+			insert: function()
+			{
+				var data = $('#redactor-insert-video-area').val();
+
+				if (!data.match(/<iframe|<video/gi))
+				{
+					data = this.clean.stripTags(data);
+
+					// parse if it is link on youtube & vimeo
+					var iframeStart = '<iframe style="width: 500px; height: 281px;" src="',
+						iframeEnd = '" frameborder="0" allowfullscreen></iframe>';
+
+					if (data.match(this.video.reUrlYoutube))
+					{
+						data = data.replace(this.video.reUrlYoutube, iframeStart + '//www.youtube.com/embed/$1' + iframeEnd);
+					}
+					else if (data.match(this.video.reUrlVimeo))
+					{
+						data = data.replace(this.video.reUrlVimeo, iframeStart + '//player.vimeo.com/video/$2' + iframeEnd);
+					}
+				}
+
+				this.selection.restore();
+				this.modal.close();
+
+				var current = this.selection.getBlock() || this.selection.getCurrent();
+
+				if (current) $(current).after(data);
+				else
+				{
+					this.insert.html(data);
+				}
+
+				this.code.sync();
+			}
+
+		};
+	};
+})(jQuery);

BIN
priv/js/redactor-font.eot


+ 948 - 0
priv/js/redactor.css

@@ -0,0 +1,948 @@
+/*
+	Icon font
+*/
+@font-face {
+  font-family: 'RedactorFont';
+  src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMggi/NUAAAC8AAAAYGNtYXAaVcx2AAABHAAAAExnYXNwAAAAEAAAAWgAAAAIZ2x5Zm8dIFkAAAFwAAATSGhlYWQACVb9AAAUuAAAADZoaGVhA+ECBQAAFPAAAAAkaG10eEEBA94AABUUAAAAkGxvY2FVlFE8AAAVpAAAAEptYXhwAC8AkgAAFfAAAAAgbmFtZRHEcG0AABYQAAABZnBvc3QAAwAAAAAXeAAAACAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADmHwHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEADgAAAAKAAgAAgACAAEAIOYf//3//wAAAAAAIOYA//3//wAB/+MaBAADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAwAAACUCAAGSAAQACQANAAA3EQURBQEFEQURATUXBwACAP4AAdv+SgG2/tySkiUBbgH+lAEBSgH+3AEBJv7/3G9sAAAGAAAASQIAAW4ABAAJAA4AEwAYAB0AABMhFSE1FSEVITUVIRUhNSczFSM1FTMVIzUVMxUjNZIBbv6SAW7+kgFu/pKSSUlJSUlJAW5JSW5JSW5JSdxJSW5JSW5JSQAAAAACAAAAJQH3AZIAFgAuAAAlLgMnBzIuAic+AyMXNh4CByUnMg4CBx4DIxcnHgMXNi4CBwH3Dik/XUABAR04Vjg+WDUYAQFNeEcZEv7MAQENHDMlHzIfEQEBASZUTDYHCSBIZj4lGCQaEARqFi5HLzJFKhJqDC1RZSzVPQoWIxkbJBQID0wCCQ4VDxo4KA8PAAACAG4AJQGSAZIABAAzAAA3IQchJzceAzMyPgI3PgMnNyMXDgMHDgMjIi4CJy4DNycjBx4DF24BJQH+3QFABRIUGg0QGBUQCAYKBgQBAUABAQEEBAQCCAgKBQYJCQcEAgUCAwEBPwEBAwcJCEkkJD8HCgYEBAYKBwcRFRkPtcMGCQkHAwMFAwEBAwUDAwcJCQbDtQ8ZFREHAAUAAP//AgABtwAGAA4AFgBHAF8AAAEzFTMVIzUfAQc1IzUzNS8BNxUzFSMVFx4DFRwBDgEHDgMHMh4CFx4DHwEjJzwBJjQjLgMrARUjNTMyHgIXBzMyPgI3PgM1NC4CJy4DKwEVAUkjS24mkZFvb96RkW9vDAMFAwECAwICBQUGBAECAgIBAQICAgEbIBMBAQIEBQUCCh0qCAwKCQM3DgMFBQMCAQIBAQEBAgECAwQGAw4BtpYgtv9cXEolSUhcXEklSlUDCAoNBwQJBwcCAwUDAgEBAQIBAQMEBANCLgEBAQIGBwYCSLYBAwUDRAECAgECBAQGAwQFBQQBAgIBATIAAAAAAwBtAAABkgGTAAMADAARAAAlIzcXBzM3MxczAyMDFyEVITUBI0YjI7ZKF2MXSmVbZQEBJP7c5nh4eUlJASb+2iRJSQAKAAAAJQIAAZIABAAJAA4AEwAYAB0AIgAnACwAMQAANxEFEQU3FzUHFTU3NScVJwcVFzUVJxU3NRUHFRc1NxUXNQclBxUXNRUnFTc1FQcVFzUAAgD+ALeSkpKSJW1tbW1tbSWSkgEkbW1tbW1tJQFuAf6UASUBSgFIbQFIAUq4AUgBSm8BSgFIbQFIAUrbSAFKAQEBSAFKbwFKAUhtAUgBSgAAAAIACQAlAgABkgAWAC4AACUOAxU1DgMHJj4CFzU0HgIXBT4DNxU1FD4CNy4DNRUmDgIXAgA5VTkcQVxAKA8RGEh3Thc2Vz/+PAY3S1UlECAxICYyHQw9Z0chCt8wRi8VAWsFDxsjGS1kUiwLaQETKUYxYBAUDwgDTRABCRMlGhoiFwkBPhAQJzkZAAAAAgBJAEkBtwFuAEcAjwAAAQ4DFRQeAhceAxc+Azc+AzU0LgInLgMHJg4CBwYiBiYHNAYmIicwLgE0NTQ+Ajc+Azc1DgMHJw4DFRQeAhceAxc+Azc+AzU0LgInLgMHJg4CBwYiBiYVJgYmIjUiJjQmNTQ+Ajc+Azc1DgMHATkJDQkEAwYKBgcOEBAJCA4NDAUGCAUDAwQHBQUKCgwGBQoICAMBAgIBAQEBAQEBAQMGCgYGDxITCxMhHBYJzQkNCQQDBwkHBg4QEQgIDg0MBgUIBQMCBQcFBAoLDAYFCQkIAwECAgEBAQEBAQEBAwcJBgcPERQLEyEcFwkBIgwYHBsQCxgUEgcICwgDAQECBggGBQ0MDwYIDA0KBgUIBAQBAQICBQECAgEBAQECAQQCBQEKEhQRCggQDAwDFwgQFBQNAQwYHBsQCxgUEgcICwgDAQECBggGBQ0MDwYIDA0KBgUIBAQBAQICBQECAgEBAQECAQQCBQEKEhQRCggQDAwDFwgQFBQNAAT//wBJAgABbgAEAAkADgASAAATIRUhNRchFSE1FSEVITUHNQcXAAIA/gC3AUn+twFJ/rclk5MBbklJbklJbklJSbdcWwAAAAUAAABJAgABbgAEAAkADgAaAG0AABMhFSE1FSEVITUVIRUhNSczNSM1IwcVNxUjFRc+Azc+Azc0PgE0NTQuAicuAyMiBioBByIOAiMVPgM3Mj4BMjM6AR4BFx4CFBUcAQYUBw4DBw4DDwEVMzUjPgM3MZIBbv6SAW7+kgFu/pKNRBgUFhYYIAUHBQMBAgICAQEBAQEDBAICBgcHBQEEAwQCAgMEBAICBAQDAgIDAwMCAgMDAwEBAgEBAQEBAgICAQQGCQULRC0BAwQEAgFuSUluSUluSUlrFF0GFAZJFJEFBwYEAQIDBAMBAgMDAwIDBwUFAgIEAgEBAQEBAhUBAgIBAQEBAQIBAQIDBAIBAgMCAQICAwMCAQUHCQYNExQBBAMFAgADAAAASQIAAW4ALAAxAGwAACUiLgInNTMeAzMyPgI1NC4CIyIOAgcjNT4DMzIeAhUUDgIjJzMVIzUnIg4CByMVDgMVFB4CFxUzHgMzMj4CNzMVDgMjIi4CNTQ+AjMyHgIXFSMuAyMBbgoUEhEIHgUKCwsGEyEZDg4ZIRMGCwsKBR4IERIUCh41KBcXKDUet5KSJQYLCwoFHgQHBQICBQcEHgUKCwsGBgsLCgUeCBESFAoeNSgXFyg1HgoUEhEIHgUKCwsGSQMGBwU0AgQDAQ0XHhESHhcNAQMEAjQFBwYDFyg1Hx41KBe3SUkvAQMEAhgFCw0OBwcNDQsGFwIEAwEBAwQCNAUHBgMXKDUeHzUoFwMGBwU0AgQDAQAAAAEAAAC3AgABAAAEAAATIRUhNQACAP4AAQBJSQABAJIASQGSAZIADAAAAQ8CFzcHNxc3DwEXAQcpQQvBC0ApQAvBC0EBWdYBOAE6AdgBOgE4AQAAAAQAAABJAgABbgAEAAkADgASAAATIRUhNRchFSE1FSEVITUHNRcHAAIA/gC3AUn+twFJ/re3k5MBbklJbklJbklJSbdcWwAAAAMAAAAlAgABkgAEAAkAEgAANxEFEQUBBREFEQc/ARcVJTU3FwACAP4AAdv+SgG2tiQwPv6Sbm4lAW4B/pQBAUoB/twBASa4AV5eSgFIk5MABAAlAAAB2wG3AAMAGgAeADUAAAEVJzMHHgIGDwEOAS4BJy4BNDY/AT4BHgEXARcnFTceATI2PwE+AS4BJy4CBg8BDgEeARcB29vbKgMDAQICcwIGBgYCAwMBAnQCBQYGAv5029sqAwYGBQJzAgEBAgMCBgYGAnICAgEDAgG33NwrAgYGBgJzAgEBAgMDBQYGAnMCAQECA/51AdvaKgMDAQJzAgUGBgMCAwECAnMCBQYGAgAABAAA/9sCAAHbAAMAGgAeADUAACU1Fwc3LgI2PwE+AR4BFx4BFAYPAQ4BIiYnBycXNQcuASIGDwEOAR4BFx4CNj8BPgEuAScBJdvbKgMDAQICcwIGBgYCAwMBAnQCBQYGAnTb2yoDBgYFAnMCAQECAwIGBgYCcgICAQMC/9zbASwCBgYGAnICAgEDAgMGBgUCcwIBAwN1AdzbKgMDAQJzAgUGBgMCAwECAnICBgYGAgABAG4AJQFuAZIAEgAAJREjESM1Ii4CNTQ+AjsBESMBSSRKFigeEREeKBaTJSUBSf63khEeKBcWKB4R/pMAAAAAAwAlAAEB3AG2AAoAVwB4AAAlMwcnMzUjNxcjFQcOAwcOAyMiLgInLgM1ND4CNz4DOwE1NC4CJy4DIyIOAgcOAwc1PgM3PgIyMzIeAhceAx0BIzU1IyIOAgcOAxUUHgIXHgMzMj4CNz4DPQEBkkpcXEpKXFxK6wIGBgcEAwgICQUIDw4LBQUHBQIDBQkGBQ8SFAwlAQMDAgMFBwgFBAoJCQQFCQkJBQQJCQkEBQkKCQUNFRENBQUIBQI0FQgMCggDAwUDAQECAwICBQUHAwUJCQcCAwUCApKRkZORkZMHBAYFBQECAwIBAgUHBQULDQ8JCRANCwQFBgUCCQMGBQQCAgICAQEBAgEBAwQFAy8CAwMCAQEBAQIFCAUGDhIXDXgYSwECAwICBgYIBQQGBgUCAgMCAQIEBgQECgsOBwQAAAAEACUASgHbAW4AAwAMAC0AegAANyM3FwczNzMXMwMjAyUVFA4CBw4DIyIuAicuAzU0PgI3PgM7ATcuAyMqAQ4BBw4DBxU+Azc+AzMyHgIXHgMdASMiDgIHDgMVFB4CFx4DMzI+Ajc+AzcVMzU0LgInrjUbGok4EUsSOE1ETQF/AQMFAwMHCQoFBAYGBQIDAwIBAgMEAwMJCw0IFiIFDhIWDQYKCgoFBAoJCgQFCgoJBQUJCgoFBAkHBgIDAwMBJg0WEw8GBgkGAwIFCAUFDA4QCQUJCQgEBAcHBgI3AgUIBsV1dXZHRwEf/uFlBAcOCwsEBAYEAwICAwICBQYHAwUJBwUCAgMCAWIFCAYCAQEBAQMCBAIwAwUEAwIBAgEBAQIDAQIEBgYDCQMEBwQFCw4QCgkPDgsFBQcFAgEBAwICBQUHAxh7DhcTDwUAAAIASQBJAbcBkwAEAIEAABMhFSE1Fx4DFx4DFRQOAgcOAyMiLgInLgMnFR4DFx4DMzI+Ajc+AzU0LgInLgMvAS4DJy4DNTQ+Ajc+AzMyHgIXHgMXNS4DJy4DIyIOAgcOAxUUHgIXHgMfAUkBbv6SvwQIBgYCAgMDAQIDBQQDCAkLBgYNDAwGBg0NDQYGCwwNBgYNDAwHDxoXEggHCwgDAgUHBAUMDxIKHAcNCQcDAgMDAQIDBQMDCAkKBgYLCgsGBQsLCgYGCwwLBgYLDAsGDBcUEQcICwcDAgQHBAUMERUNIAEAJSUxAgMFBAMDBgYHAwUICAYDAgQDAQECAwMCBQcIBEEDBAUDAgECAQEDBgkGBQ8SFQwJEA8NBgYKCggDCwIFBQQDAgUFBgMFBwcFAwIDAwEBAgMCAgQGBgM9AgUDBAEBAgEBAwcJBgYPERMLCA8ODAQFCgoJBQsAAAQAAABJAgABbgAEAAkADgATAAA/ARcHJxc3FwcnJScHFzcXJwcXNwAltiO4AbYluCMB/yO4JbYBuCO2Jdsdkh6TAZQekhwBHZIekwGUHpIcAAAAAAUAAP/bAgAB2wAEAAkADgATABgAABcRIREhASERIREHITUhFRUhNSEVFSE1IRUAAgD+AAHb/koBtkn+3AEk/twBJP7cASQlAgD+AAHc/kkBt5JJSW5JSW5JSQAAAwCTAEkBbQGSABcALwBbAAA3Mh4CFx4DFwYUDgEHDgMrATczNzIeAhceAhQXBhQOAQcOAysBNzMDMzI+Ajc+Ayc2LgInLgMnPgM3PgMnNi4CJy4DKwED+AcNCQkDBAMEAQEBBAQEAgkKDQcqASgBBQsIBwIDAwQBAQQCBAEICAsFKgEoZGQRGRgRCAYLBgQBAQMEBwQGCg8OCggMDQgFAwcDAwEBBAYLBgcQFBcOZAHeAQMEAwMICQwHBgsJCAIDBAMBYYECAgMDAgYHCQUFCQcGAgIEAgFN/uoDBQgGBQ4RFQsKEQ8NBgUJBgQBAQMFBwUECwwOCAsSDw0FBggFAv63AAADACUAAAHbAbcABAANABEAADcRIREhEyMDMzczFzMDBxcjNyUBtv5K/URMOBBLETdLIho0GgABt/5JAW7+20hIASU1eHgAAAACAEIAHwG8AZkAIQBLAAAlBycOAS4BJwcXBw4BIiYvAS4BNDY/AT4BMhYfAR4BFAYHJy4BIgYPAQ4BFBYXHgE+AT8BLgMnLgI2PwE+AhYXBxc3PgE0JicBvJQEBQsMCwYhHg8PJygnDw8PDw8P1w8nKCcPDw8QEA8lCxscHAvFCwwLCgsbHRsLJwMFBgUCCgwDBQhSBg8QEgl+JoYLCwoL9pQEAQECAwMgHg8PDw8PDxAmKCcP1w8QEA8PDycoJw9+CwoLC8YLGx0bCwoLAQsLJgIDBAUCChcXFQhSBgYBBAV9JYYLHBwbCwAAAAMAAABJAgABbgAEAAkADgAAEyEVITUXIRUhNRczFSM1AAIA/gCSAW7+kpPb2wFuSUluSUluSUkAAwAAAEkCAAFuAAQACQAOAAATIRUhNRUhFSE1FTMVIzUAAgD+AAFt/pPc3AFuSUluSUluSUkAAAADAAAASQIAAW4ABAAJAA4AABMhFSE1FSEVITUVIRUhNQAB//4BAf/+AQIA/gABbklJbklJbklJAAMAAABJAgABbgAEAAkADgAAEyEHIScHIRchNxchByEnbgElAf7dAW0B/wH9/wFtASUB/t0BAW5JSW5JSW5JSQAGAAAAJwIAAZUACAANABQAGAAdACEAADc1IxEhFTMRIQEhFSE1FyMVIRUhNQcjNxcXITUhFScXIzdJSQG3Sf5JAUn+kwFtSiX+twFu27hcXG3+2wElKSlJICdJASVK/twBSdzcSbcl3EltbSUlJW5JSQAAAAEAAAABAADCHXSvXw889QALAgAAAAAAz3WLJQAAAADPdYsl////2wIAAdsAAAAIAAIAAAAAAAAAAQAAAeD/4AAAAgD//wAAAgAAAQAAAAAAAAAAAAAAAAAAACQAAAAAAAAAAAAAAAABAAAAAgAAAAIAAAACAAAAAgAAbgIAAAACAABtAgAAAAIAAAkCAABJAgD//wIAAAACAAAAAgAAAAIAAJICAAAAAgAAAAIAACUCAAAAAgAAbgIAACUCAAAlAgAASQIAAAACAAAAAgAAkwIAACUCAABCAgAAAAIAAAACAAAAAgAAAAIAAAAAAAAAAAoAFAAeAEAAcAC4AQQBhgGoAfoCQAMCAyYDuARGBFQEcASUBLwFFgVuBY4GLgbUB4IHrAfaCFwIgAj2CRIJLglKCWoJpAAAAAEAAAAkAJAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAYAAAAAQAAAAAAAgAOAGoAAQAAAAAAAwAYAC4AAQAAAAAABAAYAHgAAQAAAAAABQAWABgAAQAAAAAABgAMAEYAAQAAAAAACgAoAJAAAwABBAkAAQAYAAAAAwABBAkAAgAOAGoAAwABBAkAAwAYAC4AAwABBAkABAAYAHgAAwABBAkABQAWABgAAwABBAkABgAYAFIAAwABBAkACgAoAJAAUgBlAGQAYQBjAHQAbwByAEYAbwBuAHQAVgBlAHIAcwBpAG8AbgAgADEALgAwAFIAZQBkAGEAYwB0AG8AcgBGAG8AbgB0UmVkYWN0b3JGb250AFIAZQBkAGEAYwB0AG8AcgBGAG8AbgB0AFIAZQBnAHUAbABhAHIAUgBlAGQAYQBjAHQAbwByAEYAbwBuAHQARwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==) format('truetype'), url(data:application/font-woff;charset=utf-8;base64,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) format('woff');
+  font-weight: normal;
+  font-style: normal;
+}
+/*
+	Box
+*/
+.redactor-box {
+  position: relative;
+  overflow: visible;
+  margin-bottom: 24px;
+}
+.redactor-box textarea {
+  display: block;
+  position: relative;
+  margin: 0;
+  padding: 0;
+  width: 100%;
+  overflow: auto;
+  outline: none;
+  border: none;
+  background-color: #111;
+  box-shadow: none;
+  color: #ccc;
+  font-size: 13px;
+  font-family: Menlo, Monaco, monospace, sans-serif !important;
+  resize: none;
+}
+.redactor-box textarea:focus {
+  outline: none;
+}
+.redactor-editor,
+.redactor-box {
+  background: #fff;
+}
+/*
+	Z-index setup
+*/
+.redactor-editor,
+.redactor-box,
+.redactor-box textarea {
+  z-index: auto;
+}
+.redactor-box-fullscreen {
+  z-index: 1051;
+}
+.redactor-toolbar {
+  z-index: 100;
+}
+.redactor-dropdown {
+  z-index: 1052;
+}
+#redactor-modal-overlay,
+#redactor-modal-box,
+#redactor-modal {
+  z-index: 1053;
+}
+/*
+	Fullscreen
+*/
+body .redactor-box-fullscreen {
+  position: fixed;
+  top: 0;
+  left: 0;
+  width: 100%;
+}
+/*
+	Utils
+*/
+.redactor-scrollbar-measure {
+  position: absolute;
+  top: -9999px;
+  width: 50px;
+  height: 50px;
+  overflow: scroll;
+}
+/*
+	Editor
+*/
+.redactor-editor {
+  position: relative;
+  overflow: auto;
+  margin: 0 !important;
+  padding: 20px;
+  min-height: 80px;
+  outline: none;
+  white-space: normal;
+  border: 1px solid #eee;
+  font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif !important;
+  font-size: 14px;
+  line-height: 1.6em;
+}
+.redactor-editor:focus {
+  outline: none;
+}
+.toolbar-fixed-box + .redactor-editor {
+  padding-top: 32px !important;
+}
+/*
+	Placeholder
+*/
+.redactor-placeholder:after {
+  position: absolute;
+  top: 20px;
+  left: 20px;
+  content: attr(placeholder);
+  display: block;
+  /* For Firefox */
+  color: #999 !important;
+  font-weight: normal !important;
+}
+/*
+	Toolbar
+*/
+.redactor-toolbar {
+  position: relative;
+  top: 0;
+  left: 0;
+  margin: 0 !important;
+  padding: 0 !important;
+  list-style: none !important;
+  font-size: 14px !important;
+  line-height: 1 !important;
+  background: #fff;
+  border: none;
+  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
+}
+.redactor-toolbar:after {
+  content: "";
+  display: table;
+  clear: both;
+}
+.redactor-toolbar.redactor-toolbar-overflow {
+  overflow-y: auto;
+  height: 29px;
+  white-space: nowrap;
+}
+.redactor-toolbar.redactor-toolbar-external {
+  z-index: 999;
+  box-shadow: none;
+  border: 1px solid rgba(0, 0, 0, 0.1);
+}
+.redactor-toolbar li {
+  vertical-align: top;
+  display: inline-block;
+  margin: 0 !important;
+  padding: 0 !important;
+  outline: none;
+  list-style: none !important;
+  -webkit-box-sizing: content-box;
+  -moz-box-sizing: content-box;
+  box-sizing: content-box;
+}
+.redactor-toolbar li a {
+  display: block;
+  color: #333;
+  text-align: center;
+  padding: 9px 10px;
+  outline: none;
+  border: none;
+  text-decoration: none;
+  cursor: pointer;
+  zoom: 1;
+  -webkit-box-sizing: content-box;
+  -moz-box-sizing: content-box;
+  box-sizing: content-box;
+}
+.redactor-toolbar li a:hover {
+  outline: none;
+  background-color: #1f78d8;
+  color: #fff;
+}
+.redactor-toolbar li a:hover i:before {
+  color: #fff;
+}
+.redactor-toolbar li a:active,
+.redactor-toolbar li a.redactor-act {
+  outline: none;
+  background-color: #ccc;
+  color: #444;
+}
+.redactor-toolbar li a.redactor-btn-image {
+  width: 14px;
+  height: 14px;
+  background-position: center center;
+  background-repeat: no-repeat;
+}
+.redactor-toolbar li a.fa-redactor-btn {
+  display: inline-block;
+  padding: 9px 10px 8px 10px;
+  line-height: 1;
+}
+.redactor-toolbar li a.redactor-button-disabled {
+  filter: alpha(opacity=30);
+  -moz-opacity: 0.3;
+  opacity: 0.3;
+}
+.redactor-toolbar li a.redactor-button-disabled:hover {
+  color: #333;
+  outline: none;
+  background-color: transparent !important;
+  cursor: default;
+}
+.redactor-toolbar li a.redactor-button-focus {
+  color: #fff;
+  background: #000;
+}
+/*
+	CodeMirror
+*/
+.redactor-box .CodeMirror {
+  display: none;
+}
+/*
+	Icons
+*/
+.re-icon {
+  font-family: 'RedactorFont';
+  speak: none;
+  font-style: normal;
+  font-weight: normal;
+  font-variant: normal;
+  text-transform: none;
+  line-height: 1;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+.re-icon i:before {
+  position: relative;
+  font-size: 14px;
+}
+.re-video:before {
+  content: "\e600";
+}
+.re-unorderedlist:before {
+  content: "\e601";
+}
+.re-undo:before {
+  content: "\e602";
+}
+.re-underline:before {
+  content: "\e603";
+}
+.re-textdirection:before {
+  content: "\e604";
+}
+.re-fontcolor:before {
+  content: "\e605";
+}
+.re-table:before {
+  content: "\e606";
+}
+.re-redo:before {
+  content: "\e607";
+}
+.re-quote:before {
+  content: "\e608";
+}
+.re-outdent:before {
+  content: "\e609";
+}
+.re-orderedlist:before {
+  content: "\e60a";
+}
+.re-link:before {
+  content: "\e60b";
+}
+.re-horizontalrule:before {
+  content: "\e60c";
+}
+.re-italic:before {
+  content: "\e60d";
+}
+.re-indent:before {
+  content: "\e60e";
+}
+.re-image:before {
+  content: "\e60f";
+}
+.re-fullscreen:before {
+  content: "\e610";
+}
+.re-normalscreen:before {
+  content: "\e611";
+}
+.re-formatting:before {
+  content: "\e612";
+}
+.re-fontsize:before {
+  content: "\e613";
+}
+.re-fontfamily:before {
+  content: "\e614";
+}
+.re-deleted:before {
+  content: "\e615";
+}
+.re-html:before {
+  content: "\e616";
+}
+.re-clips:before {
+  content: "\e617";
+}
+.re-bold:before {
+  content: "\e618";
+}
+.re-backcolor:before {
+  content: "\e619";
+}
+.re-file:before {
+  content: "\e61a";
+}
+.re-alignright:before {
+  content: "\e61b";
+}
+.re-alignment:before,
+.re-alignleft:before {
+  content: "\e61c";
+}
+.re-alignjustify:before {
+  content: "\e61d";
+}
+.re-aligncenter:before {
+  content: "\e61e";
+}
+.re-gallery:before {
+  content: "\e61f";
+}
+/*
+	Toolbar tooltip
+*/
+.redactor-toolbar-tooltip {
+  position: absolute;
+  z-index: 1054;
+  text-align: center;
+  top: 0;
+  left: 0;
+  background: #000;
+  color: #fff;
+  padding: 5px 8px;
+  line-height: 1;
+  font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif !important;
+  font-size: 12px;
+  border-radius: 2px;
+}
+/*
+	Dropdown
+*/
+.redactor-dropdown {
+  position: absolute;
+  top: 28px;
+  left: 0;
+  padding: 0;
+  min-width: 220px;
+  max-height: 254px;
+  overflow: auto;
+  background-color: #fff;
+  box-shadow: 0 1px 7px rgba(0, 0, 0, 0.25);
+  font-size: 14px;
+  font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif !important;
+  line-height: 1.6em;
+}
+.redactor-dropdown a {
+  display: block;
+  padding: 10px 15px;
+  color: #000;
+  text-decoration: none;
+  border-bottom: 1px solid rgba(0, 0, 0, 0.07);
+}
+.redactor-dropdown a:last-child {
+  border-bottom: none;
+}
+.redactor-dropdown a:hover {
+  background-color: #1f78d8;
+  color: #fff !important;
+  text-decoration: none;
+}
+.redactor-dropdown a.selected {
+  background-color: #000;
+  color: #fff;
+}
+.redactor-dropdown a.redactor-dropdown-link-inactive,
+.redactor-dropdown a.redactor-dropdown-link-inactive:hover {
+  background: none;
+  cursor: default;
+  color: #000 !important;
+  filter: alpha(opacity=40);
+  -moz-opacity: 0.4;
+  opacity: 0.4;
+}
+.redactor-dropdown a.redactor-dropdown-link-selected {
+  color: #fff;
+  background: #000;
+}
+/*
+	IMAGE BOX
+*/
+#redactor-image-box {
+  position: relative;
+  max-width: 100%;
+  display: inline-block;
+  line-height: 0;
+  outline: 1px dashed rgba(0, 0, 0, 0.6);
+}
+#redactor-image-editter {
+  position: absolute;
+  z-index: 5;
+  top: 50%;
+  left: 50%;
+  margin-top: -11px;
+  margin-left: -18px;
+  line-height: 1;
+  background-color: #000;
+  color: #fff;
+  font-size: 11px;
+  padding: 7px 10px;
+  cursor: pointer;
+}
+#redactor-image-resizer {
+  position: absolute;
+  z-index: 2;
+  line-height: 1;
+  cursor: nw-resize;
+  bottom: -4px;
+  right: -5px;
+  border: 1px solid #fff;
+  background-color: #000;
+  width: 8px;
+  height: 8px;
+}
+/*
+	LINK TOOLTIP
+*/
+.redactor-link-tooltip {
+  position: absolute;
+  z-index: 99;
+  padding: 10px;
+  line-height: 1;
+  display: inline-block;
+  background-color: #000;
+  color: #555 !important;
+}
+.redactor-link-tooltip,
+.redactor-link-tooltip a {
+  font-size: 12px;
+  font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif !important;
+}
+.redactor-link-tooltip a {
+  color: #ccc;
+  margin: 0 5px;
+  text-decoration: none;
+}
+.redactor-link-tooltip a:hover {
+  color: #fff;
+}
+/*
+	DROPAREA
+*/
+#redactor-droparea {
+  position: relative;
+  overflow: hidden;
+  padding: 140px 20px;
+  border: 3px dashed rgba(0, 0, 0, 0.1);
+}
+#redactor-droparea.drag-hover {
+  background: rgba(200, 222, 250, 0.75);
+}
+#redactor-droparea.drag-drop {
+  background: rgba(250, 248, 200, 0.5);
+}
+#redactor-droparea-placeholder {
+  text-align: center;
+  font-size: 12px;
+  color: rgba(0, 0, 0, 0.7);
+}
+/*
+	PROGRESS
+*/
+#redactor-progress {
+  position: fixed;
+  top: 0;
+  left: 0;
+  width: 100%;
+  z-index: 1000000;
+  height: 10px;
+}
+#redactor-progress span {
+  display: block;
+  width: 100%;
+  height: 100%;
+  background-color: #3d58a8;
+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);
+  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);
+  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);
+  -webkit-animation: progress-bar-stripes 2s linear infinite;
+  -o-animation: progress-bar-stripes 2s linear infinite;
+  animation: progress-bar-stripes 2s linear infinite;
+  background-size: 40px 40px;
+}
+@-webkit-keyframes progress-bar-stripes {
+  from {
+    background-position: 40px 0;
+  }
+  to {
+    background-position: 0 0;
+  }
+}
+@-o-keyframes progress-bar-stripes {
+  from {
+    background-position: 40px 0;
+  }
+  to {
+    background-position: 0 0;
+  }
+}
+@keyframes progress-bar-stripes {
+  from {
+    background-position: 40px 0;
+  }
+  to {
+    background-position: 0 0;
+  }
+}
+/*
+	MODAL
+*/
+#redactor-modal-overlay {
+  position: fixed;
+  top: 0;
+  left: 0;
+  margin: auto;
+  overflow: auto;
+  width: 100%;
+  height: 100%;
+  background-color: #000 !important;
+  filter: alpha(opacity=30);
+  -moz-opacity: 0.3;
+  opacity: 0.3;
+}
+#redactor-modal-box {
+  position: fixed;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  overflow-x: hidden;
+  overflow-y: auto;
+}
+#redactor-modal {
+  outline: 0;
+  position: relative;
+  margin: auto;
+  margin-bottom: 20px;
+  padding: 0;
+  background: #fff;
+  color: #000;
+  font-size: 14px !important;
+  font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif !important;
+  box-shadow: 0 1px 70px rgba(0, 0, 0, 0.5);
+}
+#redactor-modal header {
+  padding: 30px 40px 5px 40px;
+  font-size: 18px;
+  font-weight: bold;
+}
+#redactor-modal section {
+  padding: 30px 40px 50px 40px;
+}
+#redactor-modal label {
+  display: block;
+  float: none !important;
+  margin: 15px 0 3px 0 !important;
+  padding: 0;
+}
+#redactor-modal input[type="radio"],
+#redactor-modal input[type="checkbox"] {
+  position: relative;
+  top: -1px;
+}
+#redactor-modal select {
+  width: 100%;
+}
+#redactor-modal input[type="text"],
+#redactor-modal input[type="password"],
+#redactor-modal input[type="email"],
+#redactor-modal input[type="url"],
+#redactor-modal textarea {
+  position: relative;
+  z-index: 2;
+  margin: 0;
+  padding: 5px 4px;
+  height: 28px;
+  border: 1px solid #ccc;
+  border-radius: 1px;
+  background-color: white;
+  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2) inset;
+  color: #333;
+  width: 100%;
+  font-size: 14px;
+  font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif !important;
+  -moz-transition: border 0.3s ease-in;
+  transition: border 0.3s ease-in;
+}
+#redactor-modal input[type="text"]:focus,
+#redactor-modal input[type="password"]:focus,
+#redactor-modal input[type="email"]:focus,
+#redactor-modal input[type="url"]:focus,
+#redactor-modal textarea:focus {
+  outline: none;
+  border-color: #5ca9e4;
+  box-shadow: 0 0 0 2px rgba(70, 161, 231, 0.3), 0 1px 2px rgba(0, 0, 0, 0.2) inset;
+}
+#redactor-modal input[type="text"].redactor-input-error,
+#redactor-modal input[type="password"].redactor-input-error,
+#redactor-modal input[type="email"].redactor-input-error,
+#redactor-modal input[type="url"].redactor-input-error,
+#redactor-modal textarea.redactor-input-error {
+  border-color: #e82f2f;
+  box-shadow: 0 0 0 2px rgba(232, 47, 47, 0.3), 0 1px 2px rgba(0, 0, 0, 0.2) inset;
+}
+#redactor-modal textarea {
+  display: block;
+  margin-top: 4px;
+  line-height: 1.4em;
+}
+/*
+	Tabs in Modal
+*/
+#redactor-modal-tabber {
+  margin-bottom: 15px;
+  font-size: 12px;
+}
+#redactor-modal-tabber a {
+  border: 1px solid #ddd;
+  line-height: 1;
+  padding: 8px 15px;
+  margin-right: -1px;
+  text-decoration: none;
+  color: #000;
+}
+#redactor-modal-tabber a:hover {
+  background-color: #1f78d8;
+  border-color: #1f78d8;
+  color: #fff;
+}
+#redactor-modal-tabber a.active {
+  cursor: default;
+  background-color: #ddd;
+  border-color: #ddd;
+  color: rgba(0, 0, 0, 0.6);
+}
+/*
+	List in Modal
+*/
+#redactor-modal #redactor-modal-list {
+  margin-left: 0;
+  padding-left: 0;
+  list-style: none;
+  max-height: 250px;
+  overflow-x: auto;
+}
+#redactor-modal #redactor-modal-list li {
+  border-bottom: 1px solid #ddd;
+}
+#redactor-modal #redactor-modal-list li:last-child {
+  border-bottom: none;
+}
+#redactor-modal #redactor-modal-list a {
+  padding: 10px 5px;
+  color: #000;
+  text-decoration: none;
+  font-size: 13px;
+  display: block;
+  position: relative;
+}
+#redactor-modal #redactor-modal-list a:hover {
+  background-color: #eee;
+}
+#redactor-modal-close {
+  position: absolute;
+  top: 10px;
+  right: 10px;
+  width: 30px;
+  height: 30px;
+  text-align: right;
+  color: #bbb;
+  font-size: 30px;
+  font-weight: 300;
+  cursor: pointer;
+  -webkit-appearance: none;
+  padding: 0;
+  border: 0;
+  background: 0;
+  outline: none;
+}
+#redactor-modal-close:hover {
+  color: #000;
+}
+#redactor-modal footer button {
+  position: relative;
+  width: 100%;
+  padding: 14px 16px;
+  margin: 0;
+  outline: none;
+  border: none;
+  background-color: #ddd;
+  color: #000;
+  text-align: center;
+  text-decoration: none;
+  font-weight: normal;
+  font-size: 12px;
+  font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif !important;
+  line-height: 1;
+  cursor: pointer;
+}
+#redactor-modal footer button:hover {
+  color: #777;
+  background: none;
+  background: #bbb;
+  text-decoration: none;
+}
+#redactor-modal footer button.redactor-modal-delete-btn {
+  background: none;
+  color: #fff;
+  background-color: #b52525;
+}
+#redactor-modal footer button.redactor-modal-delete-btn:hover {
+  color: rgba(255, 255, 255, 0.6);
+  background-color: #881b1b;
+}
+#redactor-modal footer button.redactor-modal-action-btn {
+  background: none;
+  color: #fff;
+  background-color: #2461b5;
+}
+#redactor-modal footer button.redactor-modal-action-btn:hover {
+  color: rgba(255, 255, 255, 0.6);
+  background-color: #1a4580;
+}
+/*
+	##############################################
+
+	DROPDOWN FORMATTING
+
+	##############################################
+*/
+.redactor-dropdown .redactor-formatting-blockquote {
+  color: rgba(0, 0, 0, 0.4);
+  font-style: italic;
+}
+.redactor-dropdown .redactor-formatting-pre {
+  font-family: monospace, sans-serif;
+}
+.redactor-dropdown .redactor-formatting-h1 {
+  font-size: 36px;
+  line-height: 36px;
+  font-weight: bold;
+}
+.redactor-dropdown .redactor-formatting-h2 {
+  font-size: 24px;
+  line-height: 36px;
+  font-weight: bold;
+}
+.redactor-dropdown .redactor-formatting-h3 {
+  font-size: 21px;
+  line-height: 30px;
+  font-weight: bold;
+}
+.redactor-dropdown .redactor-formatting-h4 {
+  font-size: 18px;
+  line-height: 26px;
+  font-weight: bold;
+}
+.redactor-dropdown .redactor-formatting-h5 {
+  font-size: 16px;
+  line-height: 23px;
+  font-weight: bold;
+}
+/*
+	##############################################
+
+	 CONTENT STYLES
+
+	##############################################
+*/
+.redactor-editor code,
+.redactor-editor pre {
+  font-family: Menlo, Monaco, monospace, sans-serif !important;
+  cursor: text;
+}
+.redactor-editor div,
+.redactor-editor p,
+.redactor-editor ul,
+.redactor-editor ol,
+.redactor-editor table,
+.redactor-editor dl,
+.redactor-editor blockquote,
+.redactor-editor pre {
+  font-size: 14px;
+  line-height: 1.6em;
+}
+.redactor-editor a {
+  color: #15c;
+  text-decoration: underline;
+}
+.redactor-editor object,
+.redactor-editor embed,
+.redactor-editor video,
+.redactor-editor img {
+  max-width: 100%;
+  width: auto;
+}
+.redactor-editor video,
+.redactor-editor img {
+  height: auto;
+}
+.redactor-editor div,
+.redactor-editor p,
+.redactor-editor ul,
+.redactor-editor ol,
+.redactor-editor table,
+.redactor-editor dl,
+.redactor-editor figure,
+.redactor-editor blockquote,
+.redactor-editor pre {
+  margin: 0;
+  margin-bottom: 15px;
+  border: none;
+  background: none;
+  box-shadow: none;
+}
+.redactor-editor iframe,
+.redactor-editor object,
+.redactor-editor hr {
+  margin-bottom: 15px;
+}
+.redactor-editor blockquote {
+  margin-left: 1.6em !important;
+  padding: 0;
+  text-align: left;
+  color: #777;
+  font-style: italic;
+}
+.redactor-editor blockquote:before,
+.redactor-editor blockquote:after {
+  content: '';
+}
+.redactor-editor ul,
+.redactor-editor ol {
+  padding-left: 2em;
+}
+.redactor-editor ul ul,
+.redactor-editor ol ol,
+.redactor-editor ul ol,
+.redactor-editor ol ul {
+  margin: 2px;
+  padding: 0;
+  padding-left: 2em;
+  border: none;
+}
+.redactor-editor ol ol li {
+  list-style-type: lower-alpha;
+}
+.redactor-editor ol ol ol li {
+  list-style-type: lower-roman;
+}
+.redactor-editor dl dt {
+  font-weight: bold;
+}
+.redactor-editor dd {
+  margin-left: 1em;
+}
+.redactor-editor table {
+  border-collapse: collapse;
+  font-size: 1em;
+  width: 100%;
+}
+.redactor-editor table td,
+.redactor-editor table th {
+  padding: 5px;
+  border: 1px solid #ddd;
+  vertical-align: top;
+}
+.redactor-editor table thead td,
+.redactor-editor table th {
+  font-weight: bold;
+  border-bottom-color: #888;
+}
+.redactor-editor code {
+  background-color: #d8d7d7;
+}
+.redactor-editor pre {
+  padding: 1em;
+  border: 1px solid #ddd;
+  border-radius: 3px;
+  background: #f8f8f8;
+  font-size: 90%;
+}
+.redactor-editor hr {
+  display: block;
+  height: 1px;
+  border: 0;
+  border-top: 1px solid #ccc;
+}
+.redactor-editor h1,
+.redactor-editor h2,
+.redactor-editor h3,
+.redactor-editor h4,
+.redactor-editor h5,
+.redactor-editor h6 {
+  font-weight: bold;
+  color: #000;
+  padding: 0;
+  background: none;
+  text-rendering: optimizeLegibility;
+  margin: 0 0 .5em 0;
+}
+.redactor-editor h1,
+.redactor-editor h2,
+.redactor-editor h3,
+.redactor-editor h4 {
+  line-height: 1.3;
+}
+.redactor-editor h1 {
+  font-size: 36px;
+}
+.redactor-editor h2 {
+  font-size: 24px;
+  margin-bottom: .7em;
+}
+.redactor-editor h3 {
+  font-size: 21px;
+}
+.redactor-editor h4 {
+  font-size: 18px;
+}
+.redactor-editor h5 {
+  font-size: 16px;
+}
+.redactor-editor h6 {
+  font-size: 12px;
+  text-transform: uppercase;
+}

+ 1006 - 0
priv/js/redactor.less

@@ -0,0 +1,1006 @@
+.clearfix() {
+	&:after {
+		content: "";
+		display: table;
+		clear: both;
+	}
+}
+.transition-redactor(@transition: all linear .2s) {
+	-moz-transition: @transition;
+	transition: @transition;
+}
+
+.opacity-redactor(@opacity: 100) {
+	filter: e(%("alpha(opacity=%d)", @opacity));
+	-moz-opacity: @opacity / 100;
+	opacity: @opacity / 100;
+}
+.box-sizing-redactor(@box-model) {
+	-webkit-box-sizing: @box-model;
+	-moz-box-sizing: @box-model;
+	box-sizing: @box-model;
+}
+.striped-redactor(@color: rgba(255, 255, 255, .2); @angle: 45deg) {
+	background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);
+	background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);
+	background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);
+}
+
+.animation-redactor(@animation) {
+	-webkit-animation: @animation;
+	-o-animation: @animation;
+	animation: @animation;
+}
+
+// VARIABLES
+@redactorFontFamily: Arial, Helvetica, Verdana, Tahoma, sans-serif !important;
+@redactorCodeFontFamily: Menlo, Monaco, monospace, sans-serif !important;
+
+@redactorFontSize: 14px;
+@redactorLineHeight: 1.6em;
+
+/*
+	Icon font
+*/
+@font-face {
+	font-family: 'RedactorFont';
+	src: url(data:application/x-font-ttf;charset=utf-8;base64,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) format('truetype'),
+		 url(data:application/font-woff;charset=utf-8;base64,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) format('woff');
+	font-weight: normal;
+	font-style: normal;
+}
+
+
+/*
+	Box
+*/
+.redactor-box {
+	position: relative;
+	overflow: visible;
+	margin-bottom: 24px;
+
+	& textarea {
+		display: block;
+		position: relative;
+		margin: 0;
+		padding: 0;
+		width: 100%;
+		overflow: auto;
+		outline: none;
+		border: none;
+		background-color: #111;
+		box-shadow: none;
+		color: #ccc;
+		font-size: 13px;
+		font-family: @redactorCodeFontFamily;
+		resize: none;
+		&:focus {
+			outline: none;
+		}
+	}
+}
+.redactor-editor,
+.redactor-box {
+	background: #fff;
+}
+
+/*
+	Z-index setup
+*/
+.redactor-editor,
+.redactor-box,
+.redactor-box textarea {
+	z-index: auto;
+}
+.redactor-box-fullscreen {
+	z-index: 1051;
+}
+.redactor-toolbar {
+	z-index: 100;
+}
+.redactor-dropdown {
+	z-index: 1052;
+}
+#redactor-modal-overlay,
+#redactor-modal-box,
+#redactor-modal {
+	z-index: 1053;
+}
+
+/*
+	Fullscreen
+*/
+body .redactor-box-fullscreen {
+    position: fixed;
+    top: 0;
+    left: 0;
+    width: 100%;
+}
+
+/*
+	Utils
+*/
+.redactor-scrollbar-measure {
+	position: absolute;
+	top: -9999px;
+	width: 50px;
+	height: 50px;
+	overflow: scroll;
+}
+
+/*
+	Editor
+*/
+.redactor-editor {
+	position: relative;
+	overflow: auto;
+	margin: 0 !important;
+	padding: 20px;
+	min-height: 80px;
+	outline: none;
+	white-space: normal;
+	border: 1px solid #eee;
+	font-family: @redactorFontFamily;
+	font-size: @redactorFontSize;
+	line-height: @redactorLineHeight;
+	&:focus {
+		outline: none;
+	}
+}
+.toolbar-fixed-box + .redactor-editor {
+	padding-top: 32px !important;
+}
+
+/*
+	Placeholder
+*/
+.redactor-placeholder:after {
+	position: absolute;
+	top: 20px;
+	left: 20px;
+	content: attr(placeholder);
+	display: block; /* For Firefox */
+	color: #999 !important;
+	font-weight: normal !important;
+}
+
+
+/*
+	Toolbar
+*/
+.redactor-toolbar {
+	position: relative;
+	top: 0;
+	left: 0;
+	margin: 0 !important;
+	padding: 0 !important;
+	list-style: none !important;
+	font-size: 14px !important;
+	line-height: 1 !important;
+
+	background: #fff;
+	border: none;
+	box-shadow: 0 1px 2px rgba(0, 0, 0, .2);
+
+	.clearfix;
+
+	&.redactor-toolbar-overflow {
+		overflow-y: auto;
+		height: 29px;
+		white-space: nowrap;
+	}
+	&.redactor-toolbar-external {
+		z-index: 999;
+		box-shadow: none;
+		border: 1px solid rgba(0, 0, 0, .1);
+	}
+	& li {
+		vertical-align: top;
+		display: inline-block;
+		margin: 0 !important;
+		padding: 0 !important;
+		outline: none;
+		list-style: none !important;
+		.box-sizing-redactor(content-box);
+	}
+	& li a {
+		display: block;
+		color: #333;
+		text-align: center;
+		padding: 9px 10px;
+		cursor: pointer;
+		outline: none;
+		border: none;
+		text-decoration: none;
+		cursor: pointer;
+		zoom: 1;
+		.box-sizing-redactor(content-box);
+	}
+	& li a {
+		&:hover {
+			outline: none;
+			background-color: rgba(31,120,216,1);
+			color: #fff;
+		}
+		&:hover i:before {
+			color: #fff;
+		}
+		&:active,
+		&.redactor-act {
+			outline: none;
+			background-color: #ccc;
+			color: #444;
+		}
+	}
+	& li a.redactor-btn-image {
+		width: 14px;
+	    height: 14px;
+	    background-position: center center;
+	    background-repeat: no-repeat;
+	}
+	& li a.fa-redactor-btn {
+		display: inline-block;
+		padding: 9px 10px 8px 10px;
+		line-height: 1;
+	}
+	& li a.redactor-button-disabled {
+		.opacity-redactor(30);
+		&:hover {
+			color: #333;
+			outline: none;
+			background-color: transparent !important;
+			cursor: default;
+		}
+	}
+	& li a.redactor-button-focus {
+		color:#fff;
+		background:#000;
+	}
+}
+
+/*
+	CodeMirror
+*/
+.redactor-box .CodeMirror {
+	display: none;
+}
+
+/*
+	Icons
+*/
+.re-icon {
+	font-family: 'RedactorFont';
+	speak: none;
+	font-style: normal;
+	font-weight: normal;
+	font-variant: normal;
+	text-transform: none;
+	line-height: 1;
+	-webkit-font-smoothing: antialiased;
+	-moz-osx-font-smoothing: grayscale;
+}
+.re-icon i:before {
+	position: relative;
+	font-size: 14px;
+}
+
+
+.re-video:before {
+	content: "\e600";
+}
+.re-unorderedlist:before {
+	content: "\e601";
+}
+.re-undo:before {
+	content: "\e602";
+}
+.re-underline:before {
+	content: "\e603";
+}
+.re-textdirection:before {
+	content: "\e604";
+}
+.re-fontcolor:before {
+	content: "\e605";
+}
+.re-table:before {
+	content: "\e606";
+}
+.re-redo:before {
+	content: "\e607";
+}
+.re-quote:before {
+	content: "\e608";
+}
+.re-outdent:before {
+	content: "\e609";
+}
+.re-orderedlist:before {
+	content: "\e60a";
+}
+.re-link:before {
+	content: "\e60b";
+}
+.re-horizontalrule:before {
+	content: "\e60c";
+}
+.re-italic:before {
+	content: "\e60d";
+}
+.re-indent:before {
+	content: "\e60e";
+}
+.re-image:before {
+	content: "\e60f";
+}
+.re-fullscreen:before {
+	content: "\e610";
+}
+.re-normalscreen:before {
+	content: "\e611";
+}
+.re-formatting:before {
+	content: "\e612";
+}
+.re-fontsize:before {
+	content: "\e613";
+}
+.re-fontfamily:before {
+	content: "\e614";
+}
+.re-deleted:before {
+	content: "\e615";
+}
+.re-html:before {
+	content: "\e616";
+}
+.re-clips:before {
+	content: "\e617";
+}
+.re-bold:before {
+	content: "\e618";
+}
+.re-backcolor:before {
+	content: "\e619";
+}
+.re-file:before {
+	content: "\e61a";
+}
+.re-alignright:before {
+	content: "\e61b";
+}
+.re-alignment:before,
+.re-alignleft:before {
+	content: "\e61c";
+}
+.re-alignjustify:before {
+	content: "\e61d";
+}
+.re-aligncenter:before {
+	content: "\e61e";
+}
+.re-gallery:before {
+	content: "\e61f";
+}
+
+
+/*
+	Toolbar tooltip
+*/
+.redactor-toolbar-tooltip {
+	position: absolute;
+	z-index: 1054;
+	text-align: center;
+	top: 0;
+	left: 0;
+	background: #000;
+	color: #fff;
+	padding: 5px 8px;
+	line-height: 1;
+	font-family: @redactorFontFamily;
+	font-size: 12px;
+	border-radius: 2px;
+}
+
+
+/*
+	Dropdown
+*/
+.redactor-dropdown {
+	position: absolute;
+	top: 28px;
+	left: 0;
+	padding: 0;
+	min-width: 220px;
+	max-height: 254px;
+	overflow: auto;
+	background-color: #fff;
+	box-shadow: 0 1px 7px rgba(0, 0, 0, .25);
+	font-size: @redactorFontSize;
+	font-family: @redactorFontFamily;
+	line-height: @redactorLineHeight;
+	& a {
+		display: block;
+		padding: 10px 15px;
+		color: #000;
+		text-decoration: none;
+		border-bottom: 1px solid rgba(0, 0, 0, .07);
+		&:last-child {
+			border-bottom: none;
+		}
+		&:hover {
+			background-color: rgba(31, 120, 216, 1);
+			color: #fff !important;
+			text-decoration: none;
+		}
+		&.selected {
+			background-color: #000;
+			color: #fff;
+		}
+        &.redactor-dropdown-link-inactive,
+        &.redactor-dropdown-link-inactive:hover {
+            background: none;
+            cursor: default;
+            color: #000 !important;
+            .opacity-redactor(40);
+        }
+		&.redactor-dropdown-link-selected {
+			color:#fff;
+			background:#000;
+		}
+	}
+}
+
+
+/*
+	IMAGE BOX
+*/
+#redactor-image-box {
+	position: relative;
+	max-width: 100%;
+	display: inline-block;
+	line-height: 0;
+	outline: 1px dashed rgba(0, 0, 0, .6),
+}
+#redactor-image-editter {
+	position: absolute;
+	z-index: 5;
+	top: 50%;
+	left: 50%;
+	margin-top: -11px;
+	margin-left: -18px;
+	line-height: 1;
+	background-color: #000;
+	color: #fff;
+	font-size: 11px;
+	padding: 7px 10px;
+	cursor: pointer;
+}
+#redactor-image-resizer {
+	position: absolute;
+	z-index: 2;
+	line-height: 1;
+	cursor: nw-resize;
+	bottom: -4px;
+	right: -5px;
+	border: 1px solid #fff;
+	background-color: #000;
+	width: 8px;
+	height: 8px;
+}
+
+
+
+/*
+	LINK TOOLTIP
+*/
+.redactor-link-tooltip {
+	position: absolute;
+	z-index: 99;
+	padding: 10px;
+	line-height: 1;
+	display: inline-block;
+	background-color: #000;
+	color: #555 !important;
+}
+.redactor-link-tooltip,
+.redactor-link-tooltip a {
+	font-size: 12px;
+	font-family: @redactorFontFamily;
+}
+.redactor-link-tooltip a {
+	color: #ccc;
+	margin: 0 5px;
+	text-decoration: none;
+	&:hover {
+		color: #fff;
+	}
+}
+
+/*
+	DROPAREA
+*/
+#redactor-droparea {
+	position: relative;
+	overflow: hidden;
+	padding: 140px 20px;
+	border: 3px dashed rgba(0, 0, 0, .1);
+	&.drag-hover {
+		background: rgba(200, 222, 250, 0.75);
+	}
+	&.drag-drop {
+		background: rgba(250, 248, 200, 0.5);
+	}
+}
+#redactor-droparea-placeholder {
+	text-align: center;
+	font-size: 12px;
+	color: rgba(0, 0, 0, .7);
+}
+
+
+/*
+	PROGRESS
+*/
+#redactor-progress {
+	position: fixed;
+	top: 0;
+	left: 0;
+	width: 100%;
+	z-index: 1000000;
+	height: 10px;
+}
+#redactor-progress span {
+	display: block;
+	width: 100%;
+	height: 100%;
+	background-color: #3d58a8;
+	.striped-redactor();
+	.animation-redactor(progress-bar-stripes 2s linear infinite);
+	background-size: 40px 40px;
+}
+
+@-webkit-keyframes progress-bar-stripes {
+	from { background-position: 40px 0; }
+	to { background-position: 0 0; }
+}
+@-o-keyframes progress-bar-stripes {
+	from { background-position: 40px 0; }
+	to { background-position: 0 0; }
+}
+@keyframes progress-bar-stripes {
+	from { background-position: 40px 0; }
+	to { background-position: 0 0; }
+}
+
+
+/*
+	MODAL
+*/
+#redactor-modal-overlay {
+	position: fixed;
+	top: 0;
+	left: 0;
+	margin: auto;
+	overflow: auto;
+	width: 100%;
+	height: 100%;
+	background-color: #000 !important;
+	.opacity-redactor(30);
+}
+#redactor-modal-box {
+	position: fixed;
+	top: 0;
+	left: 0;
+	bottom: 0;
+	right: 0;
+	overflow-x: hidden;
+	overflow-y: auto;
+}
+#redactor-modal {
+	outline:0;
+	position: relative;
+	margin: auto;
+	margin-bottom: 20px;
+	padding: 0;
+	background: #fff;
+	color: #000;
+	font-size: 14px !important;
+	font-family: @redactorFontFamily;
+	box-shadow: 0 1px 70px rgba(0, 0, 0, .5);
+
+	& header {
+		padding: 30px 40px 5px 40px;
+		font-size: 18px;
+		font-weight: bold;
+	}
+	& section {
+		padding: 30px 40px 50px 40px;
+	}
+	& label {
+		display: block;
+		float: none !important;
+		margin: 15px 0 3px 0 !important;
+		padding: 0;
+	}
+	& input[type="radio"],
+	& input[type="checkbox"] {
+		position: relative;
+		top: -1px;
+	}
+	& select {
+		width: 100%;
+	}
+	& input[type="text"],
+	& input[type="password"],
+	& input[type="email"],
+	& input[type="url"],
+	& textarea {
+		position: relative;
+		z-index: 2;
+		margin: 0;
+		padding: 5px 4px;
+		height: 28px;
+		border: 1px solid #ccc;
+		border-radius: 1px;
+		background-color: white;
+		box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2) inset;
+		color: #333;
+		width: 100%;
+		font-size: 14px;
+		font-family: @redactorFontFamily;
+		.transition-redactor(border 0.3s ease-in);
+		&:focus {
+			outline: none;
+			border-color: #5ca9e4;
+			box-shadow: 0 0 0 2px rgba(70, 161, 231, .3), 0 1px 2px rgba(0, 0, 0, .2) inset;
+		}
+		&.redactor-input-error {
+			border-color: #e82f2f;
+			box-shadow: 0 0 0 2px rgba(232, 47, 47, .3), 0 1px 2px rgba(0, 0, 0, .2) inset;
+		}
+	}
+	& textarea {
+		display: block;
+		margin-top: 4px;
+		line-height: 1.4em;
+	}
+
+}
+
+/*
+	Tabs in Modal
+*/
+#redactor-modal-tabber {
+	margin-bottom: 15px;
+	font-size: 12px;
+	& a {
+		border: 1px solid #ddd;
+		line-height: 1;
+		padding: 8px 15px;
+		margin-right: -1px;
+		text-decoration: none;
+		color: #000;
+		&:hover {
+			background-color: rgba(31,120,216,1);
+			border-color: rgba(31,120,216,1);
+			color: #fff;
+		}
+		&.active {
+			cursor: default;
+			background-color: #ddd;
+			border-color: #ddd;
+			color: rgba(0, 0, 0, .6);
+		}
+	}
+}
+
+
+/*
+	List in Modal
+*/
+#redactor-modal {
+	#redactor-modal-list {
+		margin-left: 0;
+		padding-left: 0;
+		list-style: none;
+		max-height: 250px;
+		overflow-x: auto;
+		& li {
+			border-bottom: 1px solid #ddd;
+			&:last-child {
+				border-bottom: none;
+			}
+		}
+
+		& a {
+			padding: 10px 5px;
+			color: #000;
+			text-decoration: none;
+			font-size: 13px;
+			display: block;
+			position: relative;
+			&:hover {
+				background-color: #eee;
+			}
+		}
+	}
+}
+
+#redactor-modal-close {
+	position: absolute;
+	top: 10px;
+	right: 10px;
+	width: 30px;
+	height: 30px;
+	text-align: right;
+	color: #bbb;
+	font-size: 30px;
+	font-weight: 300;
+	cursor: pointer;
+	-webkit-appearance: none;
+	padding:0;
+	border:0;
+	background:0;
+	outline:none;
+	&:hover {
+		color: #000;
+	}
+
+}
+#redactor-modal footer button {
+	position: relative;
+	width: 100%;
+	padding: 14px 16px;
+	margin: 0;
+	outline: none;
+	border: none;
+	background-color: #ddd;
+	color: #000;
+	text-align: center;
+	text-decoration: none;
+	font-weight: normal;
+	font-size: 12px;
+	font-family: @redactorFontFamily;
+	line-height: 1;
+	cursor: pointer;
+
+	&:hover {
+		color: #777;
+		background: none;
+		background: #bbb;
+		text-decoration: none;
+	}
+
+	&.redactor-modal-delete-btn {
+		background: none;
+		color: #fff;
+		background-color: #b52525;
+		&:hover {
+			color: rgba(255, 255, 255, .6);
+			background-color: #881b1b;
+		}
+	}
+	&.redactor-modal-action-btn {
+		background: none;
+		color: #fff;
+		background-color: #2461b5;
+		&:hover {
+			color: rgba(255, 255, 255, .6);
+			background-color: #1a4580;
+		}
+	}
+}
+
+
+/*
+	##############################################
+
+	DROPDOWN FORMATTING
+
+	##############################################
+*/
+.redactor-dropdown {
+	& .redactor-formatting-blockquote {
+		color: rgba(0, 0, 0, .4);
+		font-style: italic;
+	}
+	& .redactor-formatting-pre {
+		font-family: monospace, sans-serif;
+	}
+	& .redactor-formatting-h1 {
+		font-size: 36px;
+		line-height: 36px;
+		font-weight: bold;
+	}
+	& .redactor-formatting-h2 {
+		font-size: 24px;
+		line-height: 36px;
+		font-weight: bold;
+	}
+	& .redactor-formatting-h3 {
+		font-size: 21px;
+		line-height: 30px;
+		font-weight: bold;
+	}
+	& .redactor-formatting-h4 {
+		font-size: 18px;
+		line-height: 26px;
+		font-weight: bold;
+	}
+	& .redactor-formatting-h5 {
+		font-size: 16px;
+		line-height: 23px;
+		font-weight: bold;
+	}
+}
+
+
+/*
+	##############################################
+
+	 CONTENT STYLES
+
+	##############################################
+*/
+.redactor-editor {
+	code,
+	pre {
+		font-family: @redactorCodeFontFamily;
+		cursor: text;
+	}
+	div,
+	p,
+	ul,
+	ol,
+	table,
+	dl,
+	blockquote,
+	pre {
+		font-size: @redactorFontSize;
+		line-height: @redactorLineHeight;
+	}
+	a {
+		color: #15c;
+		text-decoration: underline;
+	}
+
+	object,
+	embed,
+	video,
+	img {
+		max-width: 100%;
+		width: auto;
+	}
+	video,
+	img {
+		height: auto;
+	}
+	div,
+	p,
+	ul,
+	ol,
+	table,
+	dl,
+	figure,
+	blockquote,
+	pre {
+	  margin: 0;
+	  margin-bottom: 15px;
+	  border: none;
+	  background: none;
+	  box-shadow: none;
+	}
+	iframe,
+	object,
+	hr {
+	  margin-bottom: 15px;
+	}
+	blockquote {
+	  margin-left: 1.6em !important;
+	  padding: 0;
+	  text-align: left;
+	  color: #777;
+	  font-style: italic;
+	  &:before,
+	  &:after {
+		  content: '';
+	  }
+	}
+	ul,
+	ol {
+	  padding-left: 2em;
+	}
+	ul ul,
+	ol ol,
+	ul ol,
+	ol ul {
+	  margin: 2px;
+	  padding: 0;
+	  padding-left: 2em;
+	  border: none;
+	}
+	ol ol li {
+		list-style-type: lower-alpha;
+	}
+	ol ol ol li {
+		list-style-type: lower-roman;
+	}
+	dl dt {
+	  font-weight: bold;
+	}
+	dd {
+	  margin-left: 1em;
+	}
+	table {
+	  border-collapse: collapse;
+	  font-size: 1em;
+	  width: 100%;
+	  & td,
+	  & th {
+		  padding: 5px;
+		  border: 1px solid #ddd;
+		  vertical-align: top;
+	  }
+	}
+	table thead td,
+	table th {
+	  font-weight: bold;
+	  border-bottom-color: #888;
+	}
+	code {
+	  background-color: #d8d7d7;
+	}
+	pre {
+	  padding: 1em;
+	  border: 1px solid #ddd;
+	  border-radius: 3px;
+	  background: #f8f8f8;
+	  font-size: 90%;
+	}
+	hr {
+	  display: block;
+	  height: 1px;
+	  border: 0;
+	  border-top: 1px solid #ccc;
+	}
+	h1,
+	h2,
+	h3,
+	h4,
+	h5,
+	h6 {
+		font-weight: bold;
+		color: #000;
+		padding: 0;
+		background: none;
+		text-rendering: optimizeLegibility;
+		margin: 0 0 .5em 0;
+	}
+	h1,
+	h2,
+	h3,
+	h4 {
+	  line-height: 1.3;
+	}
+	h1 {
+	  font-size: 36px;
+	}
+	h2 {
+	  font-size: 24px;
+	  margin-bottom: .7em;
+	}
+	h3 {
+	  font-size: 21px;
+	}
+	h4 {
+	  font-size: 18px;
+	}
+	h5 {
+	  font-size: 16px;
+	}
+	h6 {
+	  font-size: 12px;
+	  text-transform: uppercase;
+	}
+}