diff --git a/admin/views/edit-page.php b/admin/views/edit-page.php
index e4872589..2e08e672 100644
--- a/admin/views/edit-page.php
+++ b/admin/views/edit-page.php
@@ -6,12 +6,12 @@
p('Title') ?>
-
+
p('Content') ?> p('HTML and Markdown code supported') ?>
-
+
p('Title') ?>
-
+
p('Content') ?> p('HTML and Markdown code supported') ?>
-
+
p('Title') ?>
-
+
p('Content') ?> p('HTML and Markdown code supported') ?>
-
+
p('Title') ?>
-
+
p('Content') ?> p('HTML and Markdown code supported') ?>
-
+
adminTheme().'/');
define('HTML_PATH_ADMIN_ROOT', HTML_PATH_ROOT.'admin/');
define('HTML_PATH_UPLOADS', HTML_PATH_ROOT.'content/uploads/');
+define('HTML_PATH_PLUGINS', HTML_PATH_ROOT.'plugins/');
// Objects with dependency
$Language = new dbLanguage( $Site->locale() );
diff --git a/kernel/dbsite.class.php b/kernel/dbsite.class.php
index 217e5911..c71602f7 100644
--- a/kernel/dbsite.class.php
+++ b/kernel/dbsite.class.php
@@ -166,6 +166,16 @@ class dbSite extends dbJSON
return $this->db['locale'];
}
+ // Returns the current language in short format.
+ public function shortLanguage()
+ {
+ $locale = $this->locale();
+ $explode = explode('_', $locale);
+ $short = array_shift($explode);
+
+ return $short;
+ }
+
// Returns the current homepage.
public function homepage()
{
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/.bowerrc b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/.bowerrc
new file mode 100755
index 00000000..c8474bfb
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/.bowerrc
@@ -0,0 +1,3 @@
+{
+ "directory": "bower_components/"
+}
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/.gitattributes b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/.gitattributes
new file mode 100755
index 00000000..2aa7647e
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/.gitattributes
@@ -0,0 +1,6 @@
+# Auto detect text files and perform LF normalization
+* text=auto
+
+# SCSS and JS files must always use LF for tools to work
+*.js eol=lf
+*.scss eol=lf
\ No newline at end of file
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/.gitignore b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/.gitignore
new file mode 100755
index 00000000..57671038
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/.gitignore
@@ -0,0 +1,19 @@
+# Others
+~$*
+/.sass-cache
+/uploaded-files
+/node_modules
+/bower_components
+/dist
+/src/ui/sass/_sprite*
+/plugins/**/ui/sass/_sprite*
+
+
+# Windows image file caches
+Thumbs.db
+
+# Folder config file
+Desktop.ini
+
+# Mac crap
+.DS_Store
\ No newline at end of file
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/.jshintrc b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/.jshintrc
new file mode 100755
index 00000000..7e0e9495
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/.jshintrc
@@ -0,0 +1,15 @@
+{
+ "expr": true,
+ "noarg": true,
+ "onevar": true,
+ "quotmark": "simple",
+ "undef": true,
+ "unused": true,
+
+ "browser": true,
+ "node": true,
+
+ "globals": {
+ "jQuery": false
+ }
+}
\ No newline at end of file
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/CONTRIBUTORS.md b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/CONTRIBUTORS.md
new file mode 100755
index 00000000..3ea65e94
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/CONTRIBUTORS.md
@@ -0,0 +1,38 @@
+# Contributors
+
+Trumbowyg is the result of many people who made translations or the code better.
+
+- Alex-D
+- lizardK
+- VeeeneX
+- Danny Hiemstra
+- Nicolás Moncada
+- Jan Svoboda
+- Manfred62
+- Nikola Trifunovic
+- Vlad Radulescu
+- foo9
+- g2010a
+- Adam Balogh
+- Andreas Kohn
+- Andrey Kogut
+- Antoine Leblanc
+- Christian
+- Delvallée
+- JoongSeob Vito Kim
+- MIRK0
+- Moisés Márquez
+- Nathan Rosquist
+- Paweł Abramowicz
+- Ramiro Varandas Jr
+- Rezha Julio
+- Vinzgore
+- Wisse Jelgersma
+- abomokhahmed
+- akai
+- basteyy
+- brentanalexander
+- munzur
+- teppokoivula
+- udidoron
+- Олег Ильин
\ No newline at end of file
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/Gulpfile.js b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/Gulpfile.js
new file mode 100755
index 00000000..ea94219f
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/Gulpfile.js
@@ -0,0 +1,166 @@
+var gulp = require('gulp'),
+ del = require('del'),
+ vinylPaths = require('vinyl-paths'),
+ $ = require('gulp-load-plugins')(),
+ spritesmith = require('gulp.spritesmith');
+
+var paths = {
+ scripts: ['src/trumbowyg.js'],
+ langs: ['src/langs/**.js', '!src/langs/en.js'],
+ plugins: ['plugins/*/**.js', '!plugins/*/Gulpfile.js'],
+ sprites: {
+ 'icons-white': 'src/ui/images/icons-white/**.png',
+ 'icons-white-2x': 'src/ui/images/icons-white-2x/**.png',
+ 'icons-black': 'src/ui/images/icons-black/**.png',
+ 'icons-black-2x': 'src/ui/images/icons-black-2x/**.png'
+ },
+ mainStyle: 'src/ui/sass/trumbowyg.scss',
+ styles: {
+ sass: 'src/ui/sass'
+ }
+};
+
+var pkg = require('./package.json');
+var banner = ['/**',
+ ' * <%= pkg.title %> v<%= pkg.version %> - <%= pkg.description %>',
+ ' * <%= description %>',
+ ' * ------------------------',
+ ' * @link <%= pkg.homepage %>',
+ ' * @license <%= pkg.license %>',
+ ' * @author <%= pkg.author.name %>',
+ ' * Twitter : @AlexandreDemode',
+ ' * Website : <%= pkg.author.url.replace("http://", "") %>',
+ ' */',
+ '\n'].join('\n');
+var bannerLight = ['/** <%= pkg.title %> v<%= pkg.version %> - <%= pkg.description %>',
+ ' - <%= pkg.homepage.replace("http://", "") %>',
+ ' - License <%= pkg.license %>',
+ ' - Author : <%= pkg.author.name %>',
+ ' / <%= pkg.author.url.replace("http://", "") %>',
+ ' */',
+ '\n'].join('');
+
+
+
+
+gulp.task('clean', function(){
+ return gulp.src(['dist/*', 'src/ui/sass/_sprite*.scss'])
+ .pipe(vinylPaths(del));
+});
+
+gulp.task('test', ['test-scripts', 'test-langs', 'test-plugins']);
+gulp.task('test-scripts', function(){
+ return gulp.src(paths.scripts)
+ .pipe($.jshint())
+ .pipe($.jshint.reporter('jshint-stylish'));
+});
+gulp.task('test-langs', function(){
+ return gulp.src(paths.langs)
+ .pipe($.jshint())
+ .pipe($.jshint.reporter('jshint-stylish'));
+});
+gulp.task('test-plugins', function(){
+ return gulp.src(paths.plugins)
+ .pipe($.jshint())
+ .pipe($.jshint.reporter('jshint-stylish'));
+});
+
+gulp.task('scripts', ['test-scripts'], function(){
+ return gulp.src(paths.scripts)
+ .pipe($.header(banner, { pkg: pkg, description: 'Trumbowyg core file' }))
+ .pipe($.newer('dist/trumbowyg.js'))
+ .pipe($.concat('trumbowyg.js', { newLine: '\r\n\r\n' }))
+ .pipe(gulp.dest('dist/'))
+ .pipe($.size({ title: 'trumbowyg.js' }))
+ .pipe($.rename({ suffix: ".min" }))
+ .pipe($.uglify())
+ .pipe($.header(bannerLight, { pkg: pkg }))
+ .pipe(gulp.dest('dist/'))
+ .pipe($.size({ title: 'trumbowyg.min.js' }))
+});
+
+gulp.task('langs', ['test-langs'], function(){
+ return gulp.src(paths.langs)
+ .pipe($.rename({ suffix: ".min" }))
+ .pipe($.uglify({
+ preserveComments: 'all'
+ }))
+ .pipe(gulp.dest('dist/langs/'))
+});
+
+gulp.task('plugins', ['test-plugins'], function(){
+ return gulp.src(paths.plugins)
+ .pipe(gulp.dest('dist/plugins/'))
+ .pipe($.rename({ suffix: ".min" }))
+ .pipe($.uglify())
+ .pipe(gulp.dest('dist/plugins/'))
+});
+
+
+
+gulp.task('sprites', function(){
+ return makeSprite('white') && makeSprite('white', '-2x') && makeSprite('black') && makeSprite('black', '-2x');
+});
+function makeSprite(color, resolution){
+ var suffix = '-' + color + ((resolution) ? resolution : '');
+ var sprite = gulp.src(paths.sprites['icons' + suffix])
+ .pipe(spritesmith({
+ imgName: 'icons' + suffix + '.png',
+ cssName: '_sprite' + suffix + '.scss',
+ cssTemplate: function(params){
+ var output = '', e;
+ for(var i in params.items){
+ e = params.items[i];
+ output += '$' + e.name + suffix + ': ' + e.px.offset_x + ' ' + e.px.offset_y + ';\n';
+ }
+ if(params.items.length > 0){
+ output += '\n\n';
+ output += '$sprite-height' + suffix + ': ' + params.items[0].px.total_height + ';\n';
+ output += '$sprite-width' + suffix + ': ' + params.items[0].px.total_width + ';\n';
+ output += '$icons' + suffix + ': "./images/icons' + suffix + '.png";';
+ }
+
+ return output;
+ }
+ }));
+ sprite.img.pipe(gulp.dest('dist/ui/images/'));
+ sprite.css.pipe(gulp.dest(paths.styles.sass));
+ return sprite.css;
+}
+
+
+
+gulp.task("styles", ["sprites"], function(){
+ return gulp.src(paths.mainStyle)
+ .pipe($.sass({
+ sass: paths.styles.sass
+ }))
+ .pipe($.autoprefixer(["last 1 version", "> 1%", "ff >= 20", "ie >= 8", "opera >= 12", "Android >= 2.2"], { cascade: true }))
+ .pipe($.header(banner, { pkg: pkg, description: "Default stylesheet for Trumbowyg editor" }))
+ .pipe(gulp.dest("dist/ui/"))
+ .pipe($.size({ title: "trumbowyg.css" }))
+ .pipe($.rename({ suffix: ".min" })) // génère une version minimifié
+ .pipe($.minifyCss())
+ .pipe($.header(bannerLight, { pkg: pkg }))
+ .pipe(gulp.dest("dist/ui/"))
+ .pipe($.size({ title: "trumbowyg.min.css" }));
+});
+
+
+
+gulp.task('watch', function(){
+ gulp.watch(paths.scripts, ['scripts']);
+ gulp.watch(paths.langs, ['langs']);
+ gulp.watch(paths.plugins, ['plugins']);
+ gulp.watch(paths.mainStyle, ['styles']);
+
+ gulp.watch(['dist/**', 'dist/*/**'], function(file){
+ $.livereload.changed(file);
+ });
+
+ $.livereload.listen();
+});
+
+gulp.task('build', ['scripts', 'langs', 'plugins', 'styles']);
+
+gulp.task('default', ['build', 'watch']);
\ No newline at end of file
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/LICENSE b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/LICENSE
new file mode 100755
index 00000000..de773f5b
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2012-2014 Alexandre Demode (Alex-D)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
\ No newline at end of file
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/README.md b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/README.md
new file mode 100755
index 00000000..4f47d250
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/README.md
@@ -0,0 +1,34 @@
+# Trumbowyg WYSIWYG Editor
+
+Trumbowyg is a simple and lightweight WYSIWYG editor, is only 15kB for faster page loading.
+
+[](http://alex-d.github.io/Trumbowyg/)
+
+Visit presentation page : http://alex-d.github.io/Trumbowyg/
+
+
+# Documentation
+
+All you need to know about Trumbowyg is here : http://alex-d.github.io/Trumbowyg/documentation.html (or [on the home](http://alex-d.github.io/Trumbowyg/))
+
+
+# Contribute
+
+You can contribute to Trumbowyg with translations in languages you know.
+Thanks to `node` and `gulp`, you can improve core script, style or icons easily.
+
+## Getting Started
+
+- Clone the repository
+- `cd Trumbowyg` to go into the project's root directory
+- `npm install` to install development dependencies
+- `npm install -g bower gulp` to install bower and gulp command if you don't have them already
+- `bower install` to install Trumbowyg dependencies (ie: jQuery)
+- `gulp build` to build the project
+
+`gulp` command launch default Gulp task watcher and rebuild on the fly.
+
+
+# License
+
+This project is under MIT license. See [LICENSE](LICENSE) file for details.
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/banner.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/banner.png
new file mode 100755
index 00000000..eacf4d12
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/banner.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/bower.json b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/bower.json
new file mode 100755
index 00000000..747aa7f4
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/bower.json
@@ -0,0 +1,36 @@
+{
+ "name": "trumbowyg",
+ "version": "2.0.0-beta.4",
+ "homepage": "https://github.com/Alex-D/Trumbowyg",
+ "authors": [
+ {
+ "name": "Alexandre Demode (Alex-D)",
+ "email": "contact@alex-d.fr",
+ "homepage": "http://alex-d.fr"
+ }
+ ],
+ "description": "A lightweight WYSIWYG editor",
+ "main": "dist/trumbowyg.js",
+ "keywords": [
+ "editor",
+ "wysiwyg",
+ "javascript",
+ "richtext"
+ ],
+ "license": "MIT",
+ "ignore": [
+ "**/.*",
+ "bower_components",
+ "node_modules",
+ "plugins",
+ "!dist/plugins",
+ "test",
+ "tests",
+ "src",
+ "Gulpfile.js",
+ "package.json"
+ ],
+ "dependencies": {
+ "jquery": ">=1.7"
+ }
+}
\ No newline at end of file
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/examples/css/main.css b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/examples/css/main.css
new file mode 100755
index 00000000..edbf128d
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/examples/css/main.css
@@ -0,0 +1,14 @@
+html,
+body {
+ margin: 0;
+ padding: 0;
+ background-color: #F2F2F2;
+ font-family: "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
+}
+header {
+ text-align: center;
+}
+#main {
+ max-width: 960px;
+ margin: 0 auto;
+}
\ No newline at end of file
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/examples/index.html b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/examples/index.html
new file mode 100755
index 00000000..647529e3
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/examples/index.html
@@ -0,0 +1,41 @@
+
+
+
+
+ Trumbowyg by Alex-D
+
+
+
+
+
+
+
+
+
This editor is the default build of Trumbowyg.
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. Possimus, aliquam, minima fugiat placeat provident optio nam reiciendis eius beatae quibusdam!
+
+
+ The text is derived from Cicero's De Finibus Bonorum et Malorum (On the Ends of Goods and Evils, or alternatively [About] The Purposes of Good and Evil ). The original passage began: Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit (Translation: "Neither is there anyone who loves grief itself since it is grief and thus wants to obtain it").
+
+
+
+
The code
+
+$('#editor').trumbowyg();
+
+
+
+
+
+
+
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/examples/plugins/base64.html b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/examples/plugins/base64.html
new file mode 100755
index 00000000..19e0f61c
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/examples/plugins/base64.html
@@ -0,0 +1,108 @@
+
+
+
+
+ base64 plugin | Trumbowyg by Alex-D
+
+
+
+
+
+
+
+
+
+
+
Insert your base64 image!
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. Possimus, aliquam, minima fugiat placeat provident optio nam reiciendis eius beatae quibusdam!
+
+
+ The text is derived from Cicero's De Finibus Bonorum et Malorum (On the Ends of Goods and Evils, or alternatively [About] The Purposes of Good and Evil ). The original passage began: Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit (Translation: "Neither is there anyone who loves grief itself since it is grief and thus wants to obtain it").
+
+
+
+
The code
+
+$('#editor')
+.trumbowyg({
+ btnsAdd: ['base64']
+});
+
+
+
+
+
+
+
+
Insert your base64 image through image dropdown!
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. Possimus, aliquam, minima fugiat placeat provident optio nam reiciendis eius beatae quibusdam!
+
+
+ The text is derived from Cicero's De Finibus Bonorum et Malorum (On the Ends of Goods and Evils, or alternatively [About] The Purposes of Good and Evil ). The original passage began: Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit (Translation: "Neither is there anyone who loves grief itself since it is grief and thus wants to obtain it").
+
+
+
+
The code
+
+$('#editor-dropdown')
+.trumbowyg({
+ btnsDef: {
+ // Create a new dropdown
+ image: {
+ dropdown: ['insertImage', 'base64'],
+ ico: 'insertImage'
+ }
+ },
+ // Redefine the button pane
+ btns: ['viewHTML',
+ '|', 'formatting',
+ '|', 'btnGrp-semantic',
+ '|', 'link',
+ '|', 'image',
+ '|', 'btnGrp-justify',
+ '|', 'btnGrp-lists',
+ '|', 'horizontalRule']
+});
+
+
+
+
+
+
+
+
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/examples/plugins/colors.html b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/examples/plugins/colors.html
new file mode 100755
index 00000000..77ac0f24
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/examples/plugins/colors.html
@@ -0,0 +1,49 @@
+
+
+
+
+ Colors plugin | Trumbowyg by Alex-D
+
+
+
+
+
+
+
+
+
+
You can color me!
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. Possimus, aliquam, minima fugiat placeat provident optio nam reiciendis eius beatae quibusdam!
+
+
+ The text is derived from Cicero's De Finibus Bonorum et Malorum (On the Ends of Goods and Evils, or alternatively [About] The Purposes of Good and Evil ). The original passage began: Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit (Translation: "Neither is there anyone who loves grief itself since it is grief and thus wants to obtain it").
+
+
+
+
The code
+
+$('#editor')
+.trumbowyg({
+ // You can only add one of foreColor/backColor
+ btnsAdd: ['foreColor', 'backColor']
+});
+
+
+
+
+
+
+
+
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/examples/plugins/upload.html b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/examples/plugins/upload.html
new file mode 100755
index 00000000..8392874c
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/examples/plugins/upload.html
@@ -0,0 +1,111 @@
+
+
+
+
+ upload plugin | Trumbowyg by Alex-D
+
+
+
+
+
+
+ Upload plugin for Trumbowyg
+
+
+ You can insert an image by upload.
+
+
+ Note: this demo does not works without a PHP server, but you can take a look at the files to understand how to use this plugin and how to implement the back-end to match with the plugin.
+
+
+
+
+
+
+
Insert your uploaded image!
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. Possimus, aliquam, minima fugiat placeat provident optio nam reiciendis eius beatae quibusdam!
+
+
+ The text is derived from Cicero's De Finibus Bonorum et Malorum (On the Ends of Goods and Evils, or alternatively [About] The Purposes of Good and Evil ). The original passage began: Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit (Translation: "Neither is there anyone who loves grief itself since it is grief and thus wants to obtain it").
+
+
+
+
The code
+
+$('#editor')
+.trumbowyg({
+ btnsAdd: ['upload']
+});
+
+
+
+
+
+
+
+
Insert your uploaded image through image dropdown!
+
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit. Possimus, aliquam, minima fugiat placeat provident optio nam reiciendis eius beatae quibusdam!
+
+
+ The text is derived from Cicero's De Finibus Bonorum et Malorum (On the Ends of Goods and Evils, or alternatively [About] The Purposes of Good and Evil ). The original passage began: Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit (Translation: "Neither is there anyone who loves grief itself since it is grief and thus wants to obtain it").
+
+
+
+
The code
+
+$('#editor-dropdown')
+.trumbowyg({
+ btnsDef: {
+ // Create a new dropdown
+ image: {
+ dropdown: ['insertImage', 'upload'],
+ ico: 'insertImage'
+ }
+ },
+ // Redefine the button pane
+ btns: ['viewHTML',
+ '|', 'formatting',
+ '|', 'btnGrp-semantic',
+ '|', 'link',
+ '|', 'image',
+ '|', 'btnGrp-justify',
+ '|', 'btnGrp-lists',
+ '|', 'horizontalRule']
+});
+
+
+
+
+
+
+
+
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/index.html b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/index.html
new file mode 100755
index 00000000..e78bf874
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/index.html
@@ -0,0 +1,287 @@
+
+
+
+
+ Trumbowyg by Alex-D
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/package.json b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/package.json
new file mode 100755
index 00000000..1e86ceb2
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/package.json
@@ -0,0 +1,47 @@
+{
+ "name": "trumbowyg",
+ "title": "Trumbowyg",
+ "description": "A lightweight WYSIWYG editor",
+ "version": "2.0.0-beta.4",
+ "main": "dist/trumbowyg.js",
+ "homepage": "http://alex-d.github.io/Trumbowyg",
+ "author": {
+ "name": "Alexandre Demode (Alex-D)",
+ "email": "contact@alex-d.fr",
+ "url": "http://alex-d.fr"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/Alex-D/Trumbowyg.git"
+ },
+ "bugs": {
+ "url": "https://github.com/Alex-D/Trumbowyg/issues"
+ },
+ "license": "MIT",
+ "devDependencies": {
+ "bower": "^1.3.9",
+ "del": "^1.1.1",
+ "gulp": "^3.8.5",
+ "gulp-autoprefixer": "0.0.8",
+ "gulp-concat": "~2.3.4",
+ "gulp-header": "^1.2.2",
+ "gulp-imagemin": "~1.0.0",
+ "gulp-jshint": "~1.8.4",
+ "gulp-livereload": "~2.1.0",
+ "gulp-load-plugins": "~0.5.3",
+ "gulp-minify-css": "~0.3.7",
+ "gulp-newer": "~0.3.0",
+ "gulp-rename": "~1.2.0",
+ "gulp-sass": "~0.7.3",
+ "gulp-size": "~1.0.0",
+ "gulp-uglify": "~0.3.1",
+ "gulp.spritesmith": "~1.1.1",
+ "jshint-stylish": "~0.4.0",
+ "vinyl-paths": "^1.0.0"
+ },
+ "scripts": {
+ "build": "npm install && gulp build",
+ "start": "gulp",
+ "test": "gulp test"
+ }
+}
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/plugins/base64/trumbowyg.base64.js b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/plugins/base64/trumbowyg.base64.js
new file mode 100755
index 00000000..05653dba
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/plugins/base64/trumbowyg.base64.js
@@ -0,0 +1,81 @@
+/* ===========================================================
+ * trumbowyg.base64.js v1.0
+ * Base64 plugin for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Cyril Biencourt (lizardK)
+ */
+
+(function($){
+ 'use strict';
+
+ $.extend(true, $.trumbowyg, {
+ langs: {
+ en: {
+ base64: "Image as base64",
+ file: "File",
+ errFileReaderNotSupported: "FileReader is not supported by your browser."
+ },
+ fr: {
+ base64: "Image en base64",
+ file: "Fichier"
+ },
+ cs: {
+ base64: "Vložit obrázek",
+ file: "Soubor"
+ }
+ },
+
+ opts: {
+ btnsDef: {
+ base64: {
+ isSupported: function(){
+ if(typeof FileReader === "undefined"){
+ if (window.console !== undefined) {
+ console.err('[Trumbowyg - Plugin base64] FileReader is not supported by your browser.');
+ }
+ return false;
+ }
+ return true;
+ },
+ func: function(params, tbw){
+ var file;
+ tbw.openModalInsert(
+ // Title
+ tbw.lang.base64,
+
+ // Fields
+ {
+ file: {
+ type: 'file',
+ required: true
+ },
+ alt: {
+ label: 'description'
+ }
+ },
+
+ // Callback
+ function(values){
+ var fReader = new FileReader();
+
+ fReader.onloadend = function(){
+ tbw.execCmd('insertImage', fReader.result);
+ $(['img[src="', fReader.result, '"]:not([alt])'].join(''), tbw.$box).attr('alt', values.alt);
+ tbw.closeModal();
+ };
+
+ fReader.readAsDataURL(file);
+ }
+ );
+
+ $('input[type=file]').on('change', function(e){
+ file = e.target.files[0];
+ });
+ },
+ ico: 'insertImage'
+ }
+ }
+ }
+ });
+})(jQuery);
\ No newline at end of file
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/plugins/colors/Gulpfile.js b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/plugins/colors/Gulpfile.js
new file mode 100755
index 00000000..cec0edd6
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/plugins/colors/Gulpfile.js
@@ -0,0 +1,107 @@
+var gulp = require('gulp'),
+ del = require('del'),
+ vinylPaths = require('vinyl-paths'),
+ $ = require('gulp-load-plugins')(),
+ spritesmith = require('gulp.spritesmith');
+
+var paths = {
+ sprites: {
+ 'icons-white': 'ui/images/icons-white/**.png',
+ 'icons-white-2x': 'ui/images/icons-white-2x/**.png',
+ 'icons-black': 'ui/images/icons-black/**.png',
+ 'icons-black-2x': 'ui/images/icons-black-2x/**.png'
+ },
+ mainStyle: 'ui/sass/trumbowyg.colors.scss',
+ styles: {
+ sass: 'ui/sass',
+ includePaths: ['ui/sass', '../../src/ui/sass/mixins']
+ }
+};
+
+var pkg = require('../../package.json');
+var banner = ['/**',
+ ' * <%= pkg.title %> v<%= pkg.version %> - <%= pkg.description %>',
+ ' * <%= description %>',
+ ' * ------------------------',
+ ' * @link <%= pkg.homepage %>',
+ ' * @license <%= pkg.license %>',
+ ' * @author <%= pkg.author.name %>',
+ ' * Twitter : @AlexandreDemode',
+ ' * Website : <%= pkg.author.url.replace("http://", "") %>',
+ ' */',
+ '\n'].join('\n');
+var bannerLight = ['/** <%= pkg.title %> v<%= pkg.version %> - <%= pkg.description %>',
+ ' - <%= pkg.homepage.replace("http://", "") %>',
+ ' - License <%= pkg.license %>',
+ ' - Author : <%= pkg.author.name %>',
+ ' / <%= pkg.author.url.replace("http://", "") %>',
+ ' */',
+ '\n'].join('');
+
+
+gulp.task('clean', function(){
+ return gulp.src(['ui/sass/_sprite*.scss'])
+ .pipe(vinylPaths(del));
+});
+
+
+gulp.task('sprites', function(){
+ return makeSprite('white') && makeSprite('white', '-2x') && makeSprite('black') && makeSprite('black', '-2x');
+});
+function makeSprite(color, resolution){
+ var suffix = '-' + color + ((resolution) ? resolution : '');
+ var sprite = gulp.src(paths.sprites['icons' + suffix])
+ .pipe(spritesmith({
+ imgName: 'icons' + suffix + '.png',
+ cssName: '_sprite' + suffix + '.scss',
+ cssTemplate: function(params){
+ var output = '', e;
+ for(var i in params.items){
+ e = params.items[i];
+ output += '$' + e.name + suffix + ': ' + e.px.offset_x + ' ' + e.px.offset_y + ';\n';
+ }
+ if(params.items.length > 0){
+ output += '\n\n';
+ output += '$sprite-height' + suffix + ': ' + params.items[0].px.total_height + ';\n';
+ output += '$sprite-width' + suffix + ': ' + params.items[0].px.total_width + ';\n';
+ output += '$icons' + suffix + ': "./images/icons' + suffix + '.png";';
+ }
+
+ return output;
+ }
+ }));
+ sprite.img.pipe(gulp.dest('../../dist/plugins/colors/ui/images/'));
+ sprite.css.pipe(gulp.dest(paths.styles.sass));
+ return sprite.css;
+}
+
+
+
+gulp.task("styles", ["sprites"], function(){
+ return gulp.src(paths.mainStyle)
+ .pipe($.sass({
+ sass: paths.styles.sass,
+ includePaths: paths.styles.includePaths
+ }))
+ .pipe($.autoprefixer(["last 1 version", "> 1%", "ff >= 20", "ie >= 8", "opera >= 12", "Android >= 2.2"], { cascade: true }))
+ .pipe($.header(banner, { pkg: pkg, description: "Colors plugin stylesheet for Trumbowyg editor" }))
+ .pipe(gulp.dest("../../dist/plugins/colors/ui/"))
+ .pipe($.size({ title: "trumbowyg.colors.css" }))
+ .pipe($.rename({ suffix: ".min" })) // génère une version minimifié
+ .pipe($.minifyCss())
+ .pipe($.header(bannerLight, { pkg: pkg }))
+ .pipe(gulp.dest("../../dist/plugins/colors/ui/"))
+ .pipe($.size({ title: "trumbowyg.colors.min.css" }));
+});
+
+
+
+gulp.task('watch', function(){
+ gulp.watch(paths.mainStyle, ['styles']);
+});
+
+
+
+gulp.task('build', ['sprites', 'styles']);
+
+gulp.task('default', ['build', 'watch']);
\ No newline at end of file
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/plugins/colors/trumbowyg.colors.js b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/plugins/colors/trumbowyg.colors.js
new file mode 100755
index 00000000..3dd69f78
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/plugins/colors/trumbowyg.colors.js
@@ -0,0 +1,83 @@
+/* ===========================================================
+ * trumbowyg.colors.js v1.0
+ * Colors picker plugin for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Alexandre Demode (Alex-D)
+ * Twitter : @AlexandreDemode
+ * Website : alex-d.fr
+ */
+
+(function($){
+ 'use strict';
+
+ $.extend(true, $.trumbowyg, {
+ langs: {
+ cs: {
+ foreColor: "Barva textu",
+ backColor: "Barva pozadí"
+ },
+ en: {
+ foreColor: "Text color",
+ backColor: "Background color"
+ },
+ fr: {
+ foreColor: "Couleur du texte",
+ backColor: "Couleur de fond"
+ },
+ sk: {
+ foreColor: "Farba textu",
+ backColor: "Farba pozadia"
+ }
+ }
+ });
+
+ // Create btnsDef entry
+ $.extend(true, $.trumbowyg, {
+ opts: {
+ btnsDef: {}
+ }
+ });
+
+ // Set default colors
+ if(!$.trumbowyg.opts.colors)
+ $.trumbowyg.opts.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'];
+
+ // Add all colors in two dropdowns
+ $.extend(true, $.trumbowyg, {
+ opts: {
+ btnsDef: {
+ foreColor: {
+ dropdown: buildDropdown('foreColor')
+ },
+ backColor: {
+ dropdown: buildDropdown('backColor')
+ }
+ }
+ }
+ });
+
+
+
+ function buildDropdown(func){
+ var dropdown = [];
+
+ $.each($.trumbowyg.opts.colors, function(i, color){
+ var btn = '_' + func + color;
+ $.trumbowyg.opts.btnsDef[btn] = {
+ func: func,
+ param: '#' + color,
+ style: 'background-color: #' + color + ';'
+ };
+ dropdown.push(btn);
+ });
+ var btn = '_' + func + 'transparent';
+ $.trumbowyg.opts.btnsDef[btn] = {
+ func: func,
+ param: 'transparent',
+ style: 'background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAG0lEQVQIW2NkQAAfEJMRmwBYhoGBYQtMBYoAADziAp0jtJTgAAAAAElFTkSuQmCC);'
+ };
+ dropdown.push(btn);
+ return dropdown;
+ }
+})(jQuery);
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/plugins/colors/ui/images/icons-black-2x/backcolor.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/plugins/colors/ui/images/icons-black-2x/backcolor.png
new file mode 100755
index 00000000..de89ae8b
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/plugins/colors/ui/images/icons-black-2x/backcolor.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/plugins/colors/ui/images/icons-black-2x/forecolor.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/plugins/colors/ui/images/icons-black-2x/forecolor.png
new file mode 100755
index 00000000..84017702
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/plugins/colors/ui/images/icons-black-2x/forecolor.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/plugins/colors/ui/images/icons-black/backcolor.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/plugins/colors/ui/images/icons-black/backcolor.png
new file mode 100755
index 00000000..9b1c70e5
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/plugins/colors/ui/images/icons-black/backcolor.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/plugins/colors/ui/images/icons-black/forecolor.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/plugins/colors/ui/images/icons-black/forecolor.png
new file mode 100755
index 00000000..8e2a21e6
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/plugins/colors/ui/images/icons-black/forecolor.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/plugins/colors/ui/images/icons-white-2x/backcolor.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/plugins/colors/ui/images/icons-white-2x/backcolor.png
new file mode 100755
index 00000000..ca162cce
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/plugins/colors/ui/images/icons-white-2x/backcolor.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/plugins/colors/ui/images/icons-white-2x/forecolor.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/plugins/colors/ui/images/icons-white-2x/forecolor.png
new file mode 100755
index 00000000..c70ca9bd
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/plugins/colors/ui/images/icons-white-2x/forecolor.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/plugins/colors/ui/images/icons-white/backcolor.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/plugins/colors/ui/images/icons-white/backcolor.png
new file mode 100755
index 00000000..8e324abf
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/plugins/colors/ui/images/icons-white/backcolor.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/plugins/colors/ui/images/icons-white/forecolor.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/plugins/colors/ui/images/icons-white/forecolor.png
new file mode 100755
index 00000000..cbe3c3df
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/plugins/colors/ui/images/icons-white/forecolor.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/plugins/colors/ui/sass/trumbowyg.colors.scss b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/plugins/colors/ui/sass/trumbowyg.colors.scss
new file mode 100755
index 00000000..e9ea3e71
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/plugins/colors/ui/sass/trumbowyg.colors.scss
@@ -0,0 +1,94 @@
+@import "sprite-black";
+@import "sprite-black-2x";
+@import "sprite-white";
+@import "sprite-white-2x";
+
+@import "sprite-pos";
+
+.foreColor-trumbowyg-dropdown,
+.backColor-trumbowyg-dropdown {
+ width: 276px;
+ padding: 7px 5px;
+
+ button {
+ display: block;
+ position: relative;
+ float: left;
+ text-indent: -9999px;
+ height: 20px;
+ width: 20px;
+ border: 1px solid #333;
+ padding: 0;
+ margin: 2px;
+
+ &:hover,
+ &:focus {
+ &::after {
+ content: " ";
+ display: block;
+ height: 27px;
+ width: 27px;
+ background: inherit;
+ position: absolute;
+ top: -5px;
+ left: -5px;
+ border: 1px solid #FFF;
+ box-shadow: #000 0 0 2px;
+ z-index: 10;
+ }
+ }
+ }
+}
+
+
+
+/*
+ * Buttons icons
+ */
+.trumbowyg-button-pane li button {
+ &.trumbowyg-foreColor-button,
+ &.trumbowyg-backColor-button {
+ background-image: url($icons-black);
+ }
+
+ &.trumbowyg-foreColor-button { @include sprite-pos($forecolor-black); }
+ &.trumbowyg-backColor-button { @include sprite-pos($backcolor-black); }
+}
+
+.trumbowyg-black {
+ .trumbowyg-button-pane li button {
+ &.trumbowyg-foreColor-button,
+ &.trumbowyg-backColor-button {
+ background-image: url($icons-white);
+ }
+
+ &.trumbowyg-foreColor-button { @include sprite-pos($forecolor-white); }
+ &.trumbowyg-backColor-button { @include sprite-pos($backcolor-white); }
+ }
+}
+
+
+@media only screen and (-webkit-min-device-pixel-ratio: 1.3), only screen and (min--moz-device-pixel-ratio: 1.3), only screen and (-o-min-device-pixel-ratio: 4/3), only screen and (min-device-pixel-ratio: 1.3), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx){
+ .trumbowyg-button-pane li button {
+ &.trumbowyg-foreColor-button,
+ &.trumbowyg-backColor-button {
+ background-image: url($icons-black-2x) !important;
+ background-size: round($sprite-width-black-2x / 2) round($sprite-height-black-2x / 2) !important;
+ }
+
+ &.trumbowyg-foreColor-button { @include sprite-pos($forecolor-black-2x, true); }
+ &.trumbowyg-backColor-button { @include sprite-pos($backcolor-black-2x, true); }
+ }
+
+ .trumbowyg-black {
+ .trumbowyg-button-pane li button {
+ &.trumbowyg-foreColor-button,
+ &.trumbowyg-backColor-button {
+ background-image: url($icons-white-2x) !important;
+ }
+
+ &.trumbowyg-foreColor-button { @include sprite-pos($forecolor-white-2x, true); }
+ &.trumbowyg-backColor-button { @include sprite-pos($backcolor-white-2x, true); }
+ }
+ }
+}
\ No newline at end of file
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/plugins/upload/trumbowyg.upload.js b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/plugins/upload/trumbowyg.upload.js
new file mode 100755
index 00000000..626e4059
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/plugins/upload/trumbowyg.upload.js
@@ -0,0 +1,157 @@
+/* ===========================================================
+ * trumbowyg.upload.js v1.0
+ * Upload plugin for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Alexandre Demode (Alex-D)
+ * Twitter : @AlexandreDemode
+ * Website : alex-d.fr
+ */
+
+(function($){
+ 'use strict';
+
+ addXhrProgressEvent();
+
+ $.extend(true, $.trumbowyg, {
+ langs: {
+ en: {
+ upload: "Upload",
+ file: "File",
+ uploadError: "Error"
+ },
+ sk: {
+ upload: "Nahrať",
+ file: "Súbor",
+ uploadError: "Chyba"
+ },
+ fr: {
+ upload: "Envoi",
+ file: "Fichier",
+ uploadError: "Erreur"
+ },
+ cs: {
+ upload: "Nahrát obrázek",
+ file: "Soubor",
+ uploadError: "Chyba"
+ }
+ },
+
+ upload: {
+ serverPath: './src/plugins/upload/trumbowyg.upload.php'
+ },
+
+ opts: {
+ btnsDef: {
+ upload: {
+ func: function(params, tbw){
+ var file,
+ pfx = tbw.o.prefix;
+
+ var $modal = tbw.openModalInsert(
+ // Title
+ tbw.lang.upload,
+
+ // Fields
+ {
+ file: {
+ type: 'file',
+ required: true
+ },
+ alt: {
+ label: 'description'
+ }
+ },
+
+ // Callback
+ function(){
+ var data = new FormData();
+ data.append('fileToUpload', file);
+
+ if($('.' + pfx +'progress', $modal).length === 0)
+ $('.' + pfx + 'modal-title', $modal)
+ .after(
+ $('
', {
+ 'class': pfx +'progress'
+ })
+ .append(
+ $('
', {
+ 'class': pfx +'progress-bar'
+ })
+ )
+ );
+
+ $.ajax({
+ url: $.trumbowyg.upload.serverPath,
+ type: 'POST',
+ data: data,
+ cache: false,
+ dataType: 'json',
+ processData: false,
+ contentType: false,
+
+ progressUpload: function(e){
+ $('.' + pfx + 'progress-bar').stop().animate({
+ width: Math.round(e.loaded * 100 / e.total) + '%'
+ }, 200);
+ },
+
+ success: function(data){
+ if(data.message == "uploadSuccess") {
+ tbw.execCmd('insertImage', data.file);
+ setTimeout(function(){
+ tbw.closeModal();
+ }, 250);
+ } else {
+ tbw.addErrorOnModalField(
+ $('input[type=file]', $modal),
+ tbw.lang[data.message]
+ );
+ }
+ },
+ error: function(){
+ tbw.addErrorOnModalField(
+ $('input[type=file]', $modal),
+ tbw.lang.uploadError
+ );
+ }
+ });
+ }
+ );
+
+ $('input[type=file]').on('change', function(e){
+ try {
+ // If multiple files allowed, we just get the first.
+ file = e.target.files[0];
+ } catch (err) {
+ // In IE8, multiple files not allowed
+ file = e.target.value;
+ }
+ });
+ },
+ ico: 'insertImage'
+ }
+ }
+ }
+ });
+
+
+ function addXhrProgressEvent(){
+ if (!$.trumbowyg && !$.trumbowyg.addedXhrProgressEvent) { // Avoid adding progress event multiple times
+ var originalXhr = $.ajaxSettings.xhr;
+ $.ajaxSetup({
+ xhr: function() {
+ var req = originalXhr(),
+ that = this;
+ if(req && typeof req.upload == "object" && that.progressUpload !== undefined)
+ req.upload.addEventListener("progress", function(e){
+ that.progressUpload(e);
+ }, false);
+
+ return req;
+ }
+ });
+ $.trumbowyg.addedXhrProgressEvent = true;
+ }
+ }
+})(jQuery);
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/plugins/upload/trumbowyg.upload.php b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/plugins/upload/trumbowyg.upload.php
new file mode 100755
index 00000000..32490ff5
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/plugins/upload/trumbowyg.upload.php
@@ -0,0 +1,49 @@
+ 'uploadSuccess',
+ 'file' => $file,
+ );
+ } else {
+ $error = true;
+ $data = array(
+ 'message' => 'uploadError',
+ );
+ }
+} else {
+ $data = array(
+ 'message' => 'uploadNotAjax',
+ 'formData' => $_POST
+ );
+}
+
+
+
+echo json_encode($data);
\ No newline at end of file
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/ar.js b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/ar.js
new file mode 100755
index 00000000..a03b4f1b
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/ar.js
@@ -0,0 +1,45 @@
+/* ===========================================================
+ * ar.js
+ * Arabic translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Abo Mokh ahmed (abomokhahmed)
+ * Github : https://github.com/abomokhahmed
+ */
+
+jQuery.trumbowyg.langs.ar = {
+ _dir:"rtl",
+ viewHTML:"إعرض-HTML",
+ formatting:"تصميم",
+ p:"فقرة",
+ blockquote:"اقتباس",
+ code:"كود",
+ header:"رئيسي",
+ bold:"عريض",
+ italic:"مائل",
+ strikethrough:"مشطوب",
+ underline:"خطّ سفلي",
+ strong:"بارز",
+ em:"تغميق",
+ del:"حذف",
+ unorderedList:"قائمة غير مرتّبة",
+ orderedList:"قائمة مرتّبة",
+ insertImage:"إدخال صورة",
+ insertVideo:"إدخال فيديو",
+ link:"رابط",
+ createLink:"انشاء رابط",
+ unlink:"حذف رابط",
+ justifyLeft:"تصحيح للشمال",
+ justifyCenter:"تصحيح للمركز",
+ justifyRight:"تصحيح لليمين",
+ justifyFull:"تصحيح لكلا الإتّجاهين",
+ horizontalRule:"إدخال خطّ أفقي",
+ fullscreen:"شاشة واسعة",
+ close:"إغلاق",
+ submit:"أرسل",
+ reset:"تهيئة من حديد",
+ required:"إلزامي",
+ description:"وصف",
+ title:"عنوان",
+ text:"نصّ"
+};
\ No newline at end of file
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/ca.js b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/ca.js
new file mode 100755
index 00000000..0e5d2827
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/ca.js
@@ -0,0 +1,57 @@
+/* ===========================================================
+ * ca.js
+ * Catalan translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Àlfons Sánchez (alsanan)
+ * Twitter : @alsanan
+ * Website : about.me/alsanan
+ * Github : https://github.com/alsanan
+ */
+
+jQuery.trumbowyg.langs.ca = {
+ viewHTML: "Veure HTML",
+
+ formatting: "Formatar",
+ p: "Paragraf",
+ blockquote: "Citació",
+ code: "Codi",
+ header: "Títol",
+
+ bold: "Negreta",
+ italic: "Itàlica",
+ strikethrough: "Suprimir",
+ underline: "Subratllat",
+
+ strong: "Forta",
+ em: "Èmfasi",
+ del: "Apagar",
+
+ unorderedList: "Lista desordenada",
+ orderedList: "Lista ordenada",
+
+ insertImage: "Inserir imatge",
+ insertVideo: "Inserir vídeo",
+ link: "Enllaç",
+ createLink: "Crear un enllaç",
+ unlink: "Eliminar enllaç",
+
+ justifyLeft: "Alinear a esquerra",
+ justifyCenter: "Centrar",
+ justifyRight: "Alinear a dreta",
+ justifyFull: "Justificar",
+
+ horizontalRule: "Inserir separador horitzontal",
+
+ fullscreen: "Pantalla completa",
+
+ close: "Tancar",
+
+ submit: "Enviar",
+ reset: "Reiniciar",
+
+ required: "Obligatori",
+ description: "Descripció",
+ title: "Títol",
+ text: "Text"
+};
\ No newline at end of file
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/cs.js b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/cs.js
new file mode 100755
index 00000000..8cbfeef1
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/cs.js
@@ -0,0 +1,54 @@
+/* ===========================================================
+ * cs.js
+ * Czech translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Jan Svoboda (https://github.com/svoboda-jan)
+ */
+
+jQuery.trumbowyg.langs.cs = {
+ viewHTML: "Zobrazit HTML",
+
+ formatting: "Formátování",
+ p: "Odstavec",
+ blockquote: "Citace",
+ code: "Kód",
+ header: "Nadpis",
+
+ bold: "Tučné",
+ italic: "Kurzíva",
+ strikethrough: "Přeškrtnuté",
+ underline: "Podtržené",
+
+ strong: "Tučné",
+ em: "Zvýraznit",
+ del: "Smazat",
+
+ unorderedList: "Netříděný seznam",
+ orderedList: "Tříděný seznam",
+
+ insertImage: "Vložit obrázek",
+ insertVideo: "Vložit video",
+ link: "Odkaz",
+ createLink: "Vložit odkaz",
+ unlink: "Smazat odkaz",
+
+ justifyLeft: "Zarovnat doleva",
+ justifyCenter: "Zarovnat na střed",
+ justifyRight: "Zarovnat doprava",
+ justifyFull: "Zarovnat do bloku",
+
+ horizontalRule: "Vložit vodorovnou čáru",
+
+ fullscreen: "Režim celé obrazovky",
+
+ close: "Zavřít",
+
+ submit: "Potvrdit",
+ reset: "Zrušit",
+
+ required: "Povinné",
+ description: "Popis",
+ title: "Nadpis",
+ text: "Text"
+};
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/da.js b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/da.js
new file mode 100755
index 00000000..628caea2
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/da.js
@@ -0,0 +1,55 @@
+/* ===========================================================
+ * da.js
+ * Danish translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Christian Pedersen
+ * Github : https://github.com/chripede
+ */
+
+jQuery.trumbowyg.langs.da = {
+ viewHTML: "Vis HTML",
+
+ formatting: "Formatter",
+ p: "Afsnit",
+ blockquote: "Citat",
+ code: "Kode",
+ header: "Overskrift",
+
+ bold: "Fed",
+ italic: "Kursiv",
+ strikethrough: "Gennemstreg",
+ underline: "Understreg",
+
+ strong: "Vigtig",
+ em: "Fremhæv",
+ del: "Slettet",
+
+ unorderedList: "Uordnet liste",
+ orderedList: "Ordnet liste",
+
+ insertImage: "Indsæt billede",
+ insertVideo: "Indsæt video",
+ link: "Link",
+ createLink: "Indsæt link",
+ unlink: "Fjern link",
+
+ justifyLeft: "Venstrestil",
+ justifyCenter: "Centrer",
+ justifyRight: "Højrestil",
+ justifyFull: "Lige margener",
+
+ horizontalRule: "Horisontal linie",
+
+ fullscreen: "Fuld skærm",
+
+ close: "Luk",
+
+ submit: "Bekræft",
+ reset: "Annuller",
+
+ required: "Påkrævet",
+ description: "Beskrivelse",
+ title: "Titel",
+ text: "Tekst"
+};
\ No newline at end of file
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/de.js b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/de.js
new file mode 100755
index 00000000..0b29944d
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/de.js
@@ -0,0 +1,55 @@
+/* ===========================================================
+ * de.js
+ * German translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Manfred Timm
+ * Github : https://github.com/Manfred62
+ */
+
+jQuery.trumbowyg.langs.de = {
+ viewHTML: "HTML anzeigen",
+
+ formatting: "Formatieren",
+ p: "Absatz",
+ blockquote: "Zitat",
+ code: "Code",
+ header: "Überschrift",
+
+ bold: "Fett",
+ italic: "Kursiv",
+ strikethrough: "Durchgestrichen",
+ underline: "Unterstrichen",
+
+ strong: "Wichtig",
+ em: "Betont",
+ del: "Gelöscht",
+
+ unorderedList: "Ungeordnete Liste",
+ orderedList: "Geordnete Liste",
+
+ insertImage: "Bild einfügen",
+ insertVideo: "Video einfügen",
+ link: "Link",
+ createLink: "Link einfügen",
+ unlink: "Link entfernen",
+
+ justifyLeft: "Links ausrichten",
+ justifyCenter: "Zentrieren",
+ justifyRight: "Rechts ausrichten",
+ justifyFull: "Blocksatz",
+
+ horizontalRule: "Horizontale Linie einfügen",
+
+ fullscreen: "Vollbild",
+
+ close: "Schliessen",
+
+ submit: "Bestätigen",
+ reset: "Rücksetzen",
+
+ required: "Erforderlich",
+ description: "Beschreibung",
+ title: "Titel",
+ text: "Text"
+};
\ No newline at end of file
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/en.js b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/en.js
new file mode 100755
index 00000000..ac16e30e
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/en.js
@@ -0,0 +1,14 @@
+/* ===========================================================
+ * en.js
+ * English translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Alexandre Demode (Alex-D)
+ * Twitter : @AlexandreDemode
+ * Website : alex-d.fr
+ */
+
+/**
+ * English is the default languange of Trumbowyg,
+ * you don't need to include any file :)
+ */
\ No newline at end of file
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/es.js b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/es.js
new file mode 100755
index 00000000..4fe4e9b4
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/es.js
@@ -0,0 +1,55 @@
+/* ===========================================================
+ * es.js
+ * Spanish translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Moisés Márquez
+ * Email : moises.marquez.g@gmail.com
+ */
+
+jQuery.trumbowyg.langs.es = {
+ viewHTML: "Ver HTML",
+
+ formatting: "Formato",
+ p: "Párrafo",
+ blockquote: "Cita",
+ code: "Código",
+ header: "Título",
+
+ bold: "Negrita",
+ italic: "Cursiva",
+ strikethrough: "Tachado",
+ underline: "Subrayado",
+
+ strong: "Negrita",
+ em: "Énfasis",
+ del: "Borrar",
+
+ unorderedList: "Lista Desordenada",
+ orderedList: "Lista Ordenada",
+
+ insertImage: "Insertar una imagen",
+ insertVideo: "Insertar un vídeo",
+ link: "Enlace",
+ createLink: "Insertar un enlace",
+ unlink: "Suprimir un enlace",
+
+ justifyLeft: "Izquierda",
+ justifyCenter: "Centrar",
+ justifyRight: "Derecha",
+ justifyFull: "Justificado",
+
+ horizontalRule: "Insertar separador horizontal",
+
+ fullscreen: "Pantalla completa",
+
+ close: "Cerrar",
+
+ submit: "Enviar",
+ reset: "Cancelar",
+
+ required: "Obligatorio",
+ description: "Descripción",
+ title: "Título",
+ text: "Texto"
+};
\ No newline at end of file
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/es_ar.js b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/es_ar.js
new file mode 100755
index 00000000..2c1e55fb
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/es_ar.js
@@ -0,0 +1,55 @@
+/* ===========================================================
+ * es_ar.js
+ * Spanish (Argentina) translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Félix Vera
+ * Email : felix.vera@gmail.com
+ */
+
+jQuery.trumbowyg.langs.es_ar = {
+ viewHTML: "Ver HTML",
+
+ formatting: "Formato",
+ p: "Párrafo",
+ blockquote: "Cita",
+ code: "Código",
+ header: "Título",
+
+ bold: "Negrita",
+ italic: "Itálica",
+ strikethrough: "Tachado",
+ underline: "Subrayado",
+
+ strong: "Fuere",
+ em: "Énfasis",
+ del: "Borrar",
+
+ unorderedList: "Lista Desordenada",
+ orderedList: "Lista Ordenada",
+
+ insertImage: "Insertar una imagen",
+ insertVideo: "Insertar un video",
+ link: "Vínculo",
+ createLink: "Insertar un vínculo",
+ unlink: "Suprimir un vínculo",
+
+ justifyLeft: "Alinear a la Izquierda",
+ justifyCenter: "Centrar",
+ justifyRight: "Alinear a la Derecha",
+ justifyFull: "Justificado",
+
+ horizontalRule: "Insertar separado Horizontal",
+
+ fullscreen: "Pantalla Completa",
+
+ close: "Cerrar",
+
+ submit: "Enviar",
+ reset: "Cancelar",
+
+ required: "Obligatorio",
+ description: "Descripción",
+ title: "Título",
+ text: "Texto"
+};
\ No newline at end of file
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/fa.js b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/fa.js
new file mode 100755
index 00000000..2a1b586e
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/fa.js
@@ -0,0 +1,56 @@
+/* ===========================================================
+ * fa.js
+ * Persian translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Kiarash Soleimanzadeh
+ * Github : https://github.com/kiyarash
+ * Email : kiarash.s@hotmail.com
+ */
+
+jQuery.trumbowyg.langs.fa = {
+ viewHTML: "نمایش کد اچ تی ام ال",
+
+ formatting: "قالب بندی",
+ p: "پاراگراف",
+ blockquote: "نقل قول",
+ code: "کد",
+ header: "سر تیتر",
+
+ bold: "ضخیم",
+ italic: "مورب",
+ strikethrough: "میان خط دار",
+ underline: "زیر خط دار",
+
+ strong: "برجسته",
+ em: "مورب",
+ del: "حذف شده",
+
+ unorderedList: "لیست نامرتب",
+ orderedList: "لیست مرتب",
+
+ insertImage: "درج تصویر",
+ insertVideo: "درج ویدئو",
+ link: "لینک",
+ createLink: "درج لینک",
+ unlink: "حذف لینک",
+
+ justifyLeft: "تراز به چپ",
+ justifyCenter: "تراز به وسط",
+ justifyRight: "تراز به راست",
+ justifyFull: "تراز به چپ و راست",
+
+ horizontalRule: "درج خط افقی",
+
+ fullscreen: "تمام صفحه",
+
+ close: "بستن",
+
+ submit: "تائید",
+ reset: "انصراف",
+
+ required: "اجباری",
+ description: "توضیحات",
+ title: "عنوان",
+ text: "متن"
+};
\ No newline at end of file
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/fi.js b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/fi.js
new file mode 100755
index 00000000..4adaf428
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/fi.js
@@ -0,0 +1,55 @@
+/* ===========================================================
+ * fi.js
+ * Finnish translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Teppo Koivula (teppokoivula)
+ * Github : https://github.com/teppokoivula
+ */
+
+jQuery.trumbowyg.langs.fi = {
+ viewHTML: "Näytä HTML",
+
+ formatting: "Muotoilu",
+ p: "Kappale",
+ blockquote: "Lainaus",
+ code: "Koodi",
+ header: "Otsikko",
+
+ bold: "Lihavointi",
+ italic: "Kursivointi",
+ strikethrough: "Yliviivaus",
+ underline: "Allevivaus",
+
+ strong: "Vahvennus",
+ em: "Painotus",
+ del: "Poistettu",
+
+ unorderedList: "Numeroimaton lista",
+ orderedList: "Numeroitu lista",
+
+ insertImage: "Lisää kuva",
+ insertVideo: "Lisää video",
+ link: "Linkki",
+ createLink: "Luo linkki",
+ unlink: "Poista linkki",
+
+ justifyLeft: "Asemoi vasemmalle",
+ justifyCenter: "Keskitä",
+ justifyRight: "Asemoi oikealle",
+ justifyFull: "Tasaa",
+
+ horizontalRule: "Vaakaviiva",
+
+ fullscreen: "Kokoruutu",
+
+ close: "Sulje",
+
+ submit: "Lähetä",
+ reset: "Palauta",
+
+ required: "Pakollinen",
+ description: "Kuvaus",
+ title: "Otsikko",
+ text: "Teksti"
+};
\ No newline at end of file
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/fr.js b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/fr.js
new file mode 100755
index 00000000..182bb52a
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/fr.js
@@ -0,0 +1,56 @@
+/* ===========================================================
+ * fr.js
+ * French translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Alexandre Demode (Alex-D)
+ * Twitter : @AlexandreDemode
+ * Website : alex-d.fr
+ */
+
+jQuery.trumbowyg.langs.fr = {
+ viewHTML: "Voir le HTML",
+
+ formatting: "Format",
+ p: "Paragraphe",
+ blockquote: "Citation",
+ code: "Code",
+ header: "Titre",
+
+ bold: "Gras",
+ italic: "Italique",
+ strikethrough: "Rayé",
+ underline: "Souligné",
+
+ strong: "Fort",
+ em: "Emphase",
+ del: "Supprimé",
+
+ unorderedList: "Liste à puces",
+ orderedList: "Liste ordonnée",
+
+ insertImage: "Insérer une image",
+ insertVideo: "Insérer une video",
+ link: "Lien",
+ createLink: "Insérer un lien",
+ unlink: "Supprimer le lien",
+
+ justifyLeft: "Aligner à gauche",
+ justifyCenter: "Centrer",
+ justifyRight: "Aligner à droite",
+ justifyFull: "Justifier",
+
+ horizontalRule: "Insérer un séparateur horizontal",
+
+ fullscreen: "Plein écran",
+
+ close: "Fermer",
+
+ submit: "Valider",
+ reset: "Annuler",
+
+ required: "Obligatoire",
+ description: "Description",
+ title: "Titre",
+ text: "Texte"
+};
\ No newline at end of file
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/he.js b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/he.js
new file mode 100755
index 00000000..4a094f4c
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/he.js
@@ -0,0 +1,57 @@
+/* ===========================================================
+* he.js
+* Hebrew translation for Trumbowyg
+* http://alex-d.github.com/Trumbowyg
+* ===========================================================
+* Author : Udi Doron (udidoron)
+* Github : https://github.com/udidoron
+*/
+
+jQuery.trumbowyg.langs.he = {
+ _dir: "rtl",
+
+ viewHTML: "צפה ב-HTML",
+
+ formatting: "פורמט",
+ p: "פסקה",
+ blockquote: "ציטוט",
+ code: "קוד",
+ header: "ראשית",
+
+ bold: "מודגש",
+ italic: "נטוי",
+ strikethrough: "קו חוצה",
+ underline: "קו תחתון",
+
+ strong: "בולט",
+ em: "הדגשה",
+ del: "נמחק",
+
+ unorderedList: "רשימה ללא סדר",
+ orderedList: "רשימה מסודרת",
+
+ insertImage: "הכנס תמונה",
+ insertVideo: "הכנס סרטון",
+ link: "קישור",
+ createLink: "צור קישור",
+ unlink: "הסר קישור",
+
+ justifyLeft: "ישר לשמאל",
+ justifyCenter: "מרכז",
+ justifyRight: "ישר לימין",
+ justifyFull: "ישר לשני הצדדים",
+
+ horizontalRule: "הכנס קו אופקי",
+
+ fullscreen: "מסך מלא",
+
+ close: "סגור",
+
+ submit: "שלח",
+ reset: "אתחל מחדש",
+
+ required: "נחוץ",
+ description: "תיאור",
+ title: "כותרת",
+ text: "טקסט"
+};
\ No newline at end of file
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/id.js b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/id.js
new file mode 100755
index 00000000..6b048fb1
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/id.js
@@ -0,0 +1,57 @@
+/* ===========================================================
+ * id.js
+ * Indonesian translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Rezha Julio (kimiamania)
+ * Twitter : @kimiamania
+ * Website : http://rezhajulio.web.id
+ * Github : https://github.com/kimiamania
+ */
+
+jQuery.trumbowyg.langs.id = {
+ viewHTML: "Lihat HTML",
+
+ formatting: "Penyusunan",
+ p: "Paragraf",
+ blockquote: "Kutipan",
+ code: "Kode",
+ header: "Kepala",
+
+ bold: "Tebal",
+ italic: "Miring",
+ strikethrough: "Coret",
+ underline: "Garis bawah",
+
+ strong: "Tebal",
+ em: "Miring",
+ del: "Dicoret",
+
+ unorderedList: "Daftar tak teratur",
+ orderedList: "Daftar teratur",
+
+ insertImage: "Sisipkan gambar",
+ insertVideo: "Sisipkan video",
+ link: "Tautan",
+ createLink: "Sisipkan Tautan",
+ unlink: "Singkirkan tautan",
+
+ justifyLeft: "Rata kiri",
+ justifyCenter: "Rata Tengah",
+ justifyRight: "Rata kanan",
+ justifyFull: "Rata kiri dan kanan",
+
+ horizontalRule: "Sisipkan garis mendatar",
+
+ fullscreen: "Layar penuh",
+
+ close: "Tutup",
+
+ submit: "Setuju",
+ reset: "Batal",
+
+ required: "Diperlukan",
+ description: "Deskripsi",
+ title: "Judul",
+ text: "Teks"
+};
\ No newline at end of file
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/it.js b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/it.js
new file mode 100755
index 00000000..ad784e50
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/it.js
@@ -0,0 +1,54 @@
+/* ===========================================================
+ * it.js
+ * Italian translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Mirko Buffoni
+ */
+
+jQuery.trumbowyg.langs.it = {
+ viewHTML: "Mostra HTML",
+
+ formatting: "Formattazione",
+ p: "Paragrafo",
+ blockquote: "Citazione",
+ code: "Codice",
+ header: "Intestazione",
+
+ bold: "Grassetto",
+ italic: "Italico",
+ strikethrough: "Barrato",
+ underline: "Sottolineato",
+
+ strong: "Rafforza",
+ em: "Enfatizza",
+ del: "Cancella",
+
+ unorderedList: "Elenco puntato",
+ orderedList: "Elenco numerato",
+
+ insertImage: "Inserisci immagine",
+ insertVideo: "Inserisci video",
+ link: "Collegamento",
+ createLink: "Crea un collegamento",
+ unlink: "Elimina collegamento",
+
+ justifyLeft: "Allinea a sinistra",
+ justifyCenter: "Centra",
+ justifyRight: "Allinea a destra",
+ justifyFull: "Giustifica",
+
+ horizontalRule: "Inserisci un separatore orizzontale",
+
+ fullscreen: "Schermo intero",
+
+ close: "Chiudi",
+
+ submit: "Invia",
+ reset: "Annulla",
+
+ required: "Obbligatorio",
+ description: "Descrizione",
+ title: "Titolo",
+ text: "Testo"
+};
\ No newline at end of file
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/ja.js b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/ja.js
new file mode 100755
index 00000000..86d600db
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/ja.js
@@ -0,0 +1,56 @@
+/* ===========================================================
+ * ja.js
+ * Japanese translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Kouta Fukuhara (foo9)
+ * Twitter : @foo9
+ * Website : https://github.com/foo9
+ */
+
+jQuery.trumbowyg.langs.ja = {
+ viewHTML: "HTML表示",
+
+ formatting: "フォーマット",
+ p: "段落",
+ blockquote: "引用",
+ code: "コード",
+ header: "見出し",
+
+ bold: "太字",
+ italic: "斜体",
+ strikethrough: "取り消し線",
+ underline: "下線",
+
+ strong: "太字",
+ em: "斜体",
+ del: "取り消し線",
+
+ unorderedList: "順序なしリスト",
+ orderedList: "順序ありリスト",
+
+ insertImage: "画像の挿入",
+ insertVideo: "動画の挿入",
+ link: "リンク",
+ createLink: "リンクの作成",
+ unlink: "リンクの削除",
+
+ justifyLeft: "左揃え",
+ justifyCenter: "中央揃え",
+ justifyRight: "右揃え",
+ justifyFull: "両端揃え",
+
+ horizontalRule: "横罫線",
+
+ fullscreen: "全画面表示",
+
+ close: "閉じる",
+
+ submit: "送信",
+ reset: "キャンセル",
+
+ required: "必須",
+ description: "説明",
+ title: "タイトル",
+ text: "テキスト"
+};
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/ko.js b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/ko.js
new file mode 100755
index 00000000..ae6027c0
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/ko.js
@@ -0,0 +1,56 @@
+/* ===========================================================
+ * ko.js
+ * Korean translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : JoongSeob Vito Kim (dorajistyle)
+ * Blog : http://dorajistyle.pe.kr
+ * Github : https://github.com/dorajistyle
+ */
+
+jQuery.trumbowyg.langs.ko = {
+ viewHTML: "HTML로 보기",
+
+ formatting: "양식",
+ p: "문단",
+ blockquote: "인용부호",
+ code: "코드",
+ header: "머릿말",
+
+ bold: "진하게",
+ italic: "기울임",
+ strikethrough: "취소선",
+ underline: "밑줄",
+
+ strong: "굵게",
+ em: "강조",
+ del: "취소",
+
+ unorderedList: "순차 목록",
+ orderedList: "비순차 목록",
+
+ insertImage: "이미지 넣기",
+ insertVideo: "비디오 넣기",
+ link: "링크",
+ createLink: "링크 넣기",
+ unlink: "링크 없애기",
+
+ justifyLeft: "왼쪽 정렬",
+ justifyCenter: "가운데 정렬",
+ justifyRight: "오른쪽 정렬",
+ justifyFull: "혼합 정렬",
+
+ horizontalRule: "가로줄 넣기",
+
+ fullscreen: "전체 화면",
+
+ close: "닫기",
+
+ submit: "전송",
+ reset: "초기화",
+
+ required: "꼭 입력해야 합니다.",
+ description: "설명",
+ title: "제목",
+ text: "본문 내용"
+};
\ No newline at end of file
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/nl.js b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/nl.js
new file mode 100755
index 00000000..fed7be0f
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/nl.js
@@ -0,0 +1,56 @@
+/* ===========================================================
+ * nl.js
+ * Dutch translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Danny Hiemstra
+ * Github : https://github.com/dhiemstra
+ */
+
+jQuery.trumbowyg.langs.nl = {
+ viewHTML: "HTML bekijken",
+
+ formatting: "Opmaak",
+ p: "Paragraaf",
+ blockquote: "Citaat",
+ code: "Code",
+ header: "Kop",
+
+ bold: "Vet",
+ italic: "Cursief",
+ strikethrough: "Doorhalen",
+ underline: "Onderlijnen",
+
+ strong: "Sterk",
+ em: "Nadruk",
+ del: "Verwijderd",
+
+ unorderedList: "Ongenummerde lijst",
+ orderedList: "Genummerde lijst",
+
+ insertImage: "Afbeelding invoegen",
+ insertVideo: "Video invoegen",
+ link: "Link",
+ createLink: "Link maken",
+ unlink: "Link verwijderen",
+
+ justifyLeft: "Links uitlijnen",
+ justifyCenter: "Centreren",
+ justifyRight: "Rechts uitlijnen",
+ justifyFull: "Uitvullen",
+
+ horizontalRule: "Horizontale lijn",
+ removeFormat: "Opmaak verwijderen",
+
+ fullscreen: "Volledig scherm",
+
+ close: "Sluiten",
+
+ submit: "Verzenden",
+ reset: "Herstellen",
+
+ required: "Verplicht",
+ description: "Omschrijving",
+ title: "Titel",
+ text: "Tekst"
+};
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/pl.js b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/pl.js
new file mode 100755
index 00000000..5e5ad1b7
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/pl.js
@@ -0,0 +1,55 @@
+/* ===========================================================
+ * pl.js
+ * Polish translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Paweł Abramowicz
+ * Github : https://github.com/pawelabrams
+ */
+
+jQuery.trumbowyg.langs.pl = {
+ viewHTML: "Pokaż HTML",
+
+ formatting: "Format",
+ p: "Akapit",
+ blockquote: "Cytat",
+ code: "Kod",
+ header: "Nagłówek",
+
+ bold: "Pogrubienie",
+ italic: "Pochylenie",
+ strikethrough: "Przekreślenie",
+ underline: "Podkreślenie",
+
+ strong: "Wytłuszczenie",
+ em: "Uwydatnienie",
+ del: "Usunięte",
+
+ unorderedList: "Lista nieuporządkowana",
+ orderedList: "Lista uporządkowana",
+
+ insertImage: "Wstaw obraz",
+ insertVideo: "Wstaw film",
+ link: "Link",
+ createLink: "Wstaw link",
+ unlink: "Usuń link",
+
+ justifyLeft: "Wyrównaj do lewej",
+ justifyCenter: "Wyśrodkuj",
+ justifyRight: "Wyrównaj do prawej",
+ justifyFull: "Wyjustuj",
+
+ horizontalRule: "Odkreśl linią",
+
+ fullscreen: "Pełny ekran",
+
+ close: "Zamknij",
+
+ submit: "Zastosuj",
+ reset: "Przywróć",
+
+ required: "Wymagane",
+ description: "Opis",
+ title: "Tytuł",
+ text: "Tekst"
+};
\ No newline at end of file
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/pt.js b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/pt.js
new file mode 100755
index 00000000..df72e014
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/pt.js
@@ -0,0 +1,57 @@
+/* ===========================================================
+ * pt.js
+ * Portuguese translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Ramiro Varandas Jr (ramirovjr)
+ * Twitter : @ramirovjnr
+ * Website : about.me/ramirovjnr
+ * Github : https://github.com/ramirovjr
+ */
+
+jQuery.trumbowyg.langs.pt = {
+ viewHTML: "Ver HTML",
+
+ formatting: "Formatar",
+ p: "Paragráfo",
+ blockquote: "Citação",
+ code: "Código",
+ header: "Título",
+
+ bold: "Negrito",
+ italic: "Itálico",
+ strikethrough: "Suprimir",
+ underline: "Sublinhado",
+
+ strong: "Forte",
+ em: "Ênfase",
+ del: "Apagar",
+
+ unorderedList: "Lista não ordenada",
+ orderedList: "Liste ordenada",
+
+ insertImage: "Inserir imagem",
+ insertVideo: "Inserir vídeo",
+ link: "Link",
+ createLink: "Criar um link",
+ unlink: "Remover link",
+
+ justifyLeft: "Alinhar a esquerda",
+ justifyCenter: "Centralizar",
+ justifyRight: "Alinhar a direita",
+ justifyFull: "Justificar",
+
+ horizontalRule: "Inserir separador horizontal",
+
+ fullscreen: "Tela cheia",
+
+ close: "Fechar",
+
+ submit: "Enviar",
+ reset: "Limpar",
+
+ required: "Obrigatório",
+ description: "Descrição",
+ title: "Título",
+ text: "Texto"
+};
\ No newline at end of file
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/ro.js b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/ro.js
new file mode 100755
index 00000000..39aea363
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/ro.js
@@ -0,0 +1,59 @@
+/* ===========================================================
+ * ro.js
+ * Romanian translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Vladut Radulescu (pacMakaveli)
+ *
+ * Email: pacMakaveli90@gmail.com
+ * Twitter : @pacMakaveli90
+ * Website : creative-studio51.co.uk
+ * Github : https://github.com/pacMakaveli
+ */
+
+jQuery.trumbowyg.langs.pt = {
+ viewHTML: "Vizualizare HTML",
+
+ formatting: "Format",
+ p: "Paragraf",
+ blockquote: "Citație",
+ code: "Cod",
+ header: "Titlu",
+
+ bold: "Bold",
+ italic: "Italic",
+ strikethrough: "Tăiat",
+ underline: "Subliniat",
+
+ strong: "Puternic",
+ em: "Accentuat",
+ del: "Sterge",
+
+ unorderedList: "Lista dezordonată",
+ orderedList: "Liste ordonată",
+
+ insertImage: "Adăugare Imagine",
+ insertVideo: "Adăugare Video",
+ link: "Link",
+ createLink: "Crează link",
+ unlink: "Remover link",
+
+ justifyLeft: "Aliniază stânga",
+ justifyCenter: "Aliniază centru",
+ justifyRight: "Aliniază dreapta",
+ justifyFull: "Justificare",
+
+ horizontalRule: "Linie orizontală",
+
+ fullscreen: "Tot ecranul",
+
+ close: "Închide",
+
+ submit: "Procesează",
+ reset: "Resetează",
+
+ required: "Obligatoriu",
+ description: "Descriere",
+ title: "Titlu",
+ text: "Text"
+};
\ No newline at end of file
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/rs.js b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/rs.js
new file mode 100755
index 00000000..6228be5f
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/rs.js
@@ -0,0 +1,44 @@
+/* ===========================================================
+ * rs.js
+ * Serbian (Cyrlic) translation for Trumbowyg
+ * https://www.github.com/johonunu
+ * ===========================================================
+ * Author : Nikola Trifunovic (https://www.github.com/johonunu)
+ */
+
+jQuery.trumbowyg.langs.rs = {
+ viewHTML: "Погледај HTML кóд",
+ formatting: "Форматирање",
+ p: "Параграф",
+ blockquote: "Цитат",
+ code: "Кóд",
+ header: "Наслов",
+ bold: "Подебљано",
+ italic: "Курзив",
+ strikethrough: "Прецртано",
+ underline: "Подвучено",
+ strong: "Подебљано",
+ em: "Истакнуто",
+ del: "Обрисано",
+ unorderedList: "Ненабројива листа",
+ orderedList: "Набројива листа",
+ insertImage: "Унеси слику",
+ insertVideo: "Унеси видео",
+ link: "Линк",
+ createLink: "Унеси линк",
+ unlink: "Уклони линк",
+ justifyLeft: "Лево равнање",
+ justifyCenter: "Централно равнање",
+ justifyRight: "Десно равнање",
+ justifyFull: "Обострано равнање",
+ horizontalRule: "Хоризонтална линија",
+ fullscreen: "Режим читавог екрана",
+ close: "Затвори",
+ submit: "Унеси",
+ reset: "Откажи",
+ required: "Обавезно поље",
+ invalidUrl: "URL",
+ description: "Опис",
+ title: "Наслов",
+ text: "Текст"
+};
\ No newline at end of file
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/rs_latin.js b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/rs_latin.js
new file mode 100755
index 00000000..08e5da11
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/rs_latin.js
@@ -0,0 +1,44 @@
+/* ===========================================================
+ * rs_latin.js
+ * Serbian (Latin) translation for Trumbowyg
+ * https://www.github.com/johonunu
+ * ===========================================================
+ * Author : Nikola Trifunovic (https://www.github.com/johonunu)
+ */
+
+jQuery.trumbowyg.langs.rs_latin = {
+ viewHTML: "Poglеdaj HTML kód",
+ formatting: "Formatiranjе",
+ p: "Paragraf",
+ blockquote: "Citat",
+ code: "Kód",
+ header: "Naslov",
+ bold: "Podеbljano",
+ italic: "Kurziv",
+ strikethrough: "Prеcrtano",
+ underline: "Podvučеno",
+ strong: "Podеbljano",
+ em: "Istaknuto",
+ del: "Obrisano",
+ unorderedList: "Nеnabrojiva lista",
+ orderedList: "Nabrojiva lista",
+ insertImage: "Unеsi sliku",
+ insertVideo: "Unеsi vidеo",
+ link: "Link",
+ createLink: "Unеsi link",
+ unlink: "Ukloni link",
+ justifyLeft: "Lеvo ravnanjе",
+ justifyCenter: "Cеntralno ravnanjе",
+ justifyRight: "Dеsno ravnanjе",
+ justifyFull: "Obostrano ravnanjе",
+ horizontalRule: "Horizontalna linija",
+ fullscreen: "Rеžim čitavog еkrana",
+ close: "Zatvori",
+ submit: "Unеsi",
+ reset: "Otkaži",
+ required: "Obavеzno poljе",
+ invalidUrl: "URL",
+ description: "Opis",
+ title: "Naslov",
+ text: "Tеkst"
+};
\ No newline at end of file
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/ru.js b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/ru.js
new file mode 100755
index 00000000..31080b22
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/ru.js
@@ -0,0 +1,54 @@
+/* ===========================================================
+ * ru.js
+ * Russion translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Yuri Lya
+ */
+
+jQuery.trumbowyg.langs.ru = {
+ viewHTML: "Посмотреть HTML",
+
+ formatting: "Форматирование",
+ p: "Обычный",
+ blockquote: "Цитата",
+ code: "Код",
+ header: "Заголовок",
+
+ bold: "Полужирный",
+ italic: "Курсив",
+ strikethrough: "Зачеркнутый",
+ underline: "Подчеркнутый",
+
+ strong: "Полужирный",
+ em: "Курсив",
+ del: "Зачеркнутый",
+
+ unorderedList: "Обычный список",
+ orderedList: "Нумерованный список",
+
+ insertImage: "Вставить изображение",
+ insertVideo: "Вставить видео",
+ link: "Ссылка",
+ createLink: "Вставить ссылку",
+ unlink: "Удалить ссылку",
+
+ justifyLeft: "По левому краю",
+ justifyCenter: "По центру",
+ justifyRight: "По правому краю",
+ justifyFull: "По ширине",
+
+ horizontalRule: "Горизонтальная линия",
+
+ fullscreen: "Во весь экран",
+
+ close: "Закрыть",
+
+ submit: "Вставить",
+ reset: "Отменить",
+
+ required: "Обязательное",
+ description: "Описание",
+ title: "Подсказка",
+ text: "Текст"
+};
\ No newline at end of file
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/sk.js b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/sk.js
new file mode 100755
index 00000000..32c9ae3c
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/sk.js
@@ -0,0 +1,54 @@
+/* ===========================================================
+ * sk.js
+ * Slovak translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : VeeeneX (https://github.com/VeeeneX)
+ */
+
+jQuery.trumbowyg.langs.sk = {
+ viewHTML: "Zobraziť HTML",
+
+ formatting: "Formátovanie",
+ p: "Paragraf",
+ blockquote: "Citácia",
+ code: "Kód",
+ header: "Nadpis",
+
+ bold: "Tučné",
+ italic: "Kurzíva",
+ strikethrough: "Preškrtnuté",
+ underline: "Podčiarknuté",
+
+ strong: "Tučné",
+ em: "Zvýrazniť",
+ del: "Zmazať",
+
+ unorderedList: "Netriedený zoznam",
+ orderedList: "Triedený zoznam",
+
+ insertImage: "Vložiť obrázok",
+ insertVideo: "Vložiť video",
+ link: "Odkaz",
+ createLink: "Vložiť odkaz",
+ unlink: "Zmazať odkaz",
+
+ justifyLeft: "Zarovnať doľava",
+ justifyCenter: "Zarovnať na stred",
+ justifyRight: "Zarovnať doprava",
+ justifyFull: "Zarovnať do bloku",
+
+ horizontalRule: "Vložit vodorovnú čiaru",
+
+ fullscreen: "Režim celej obrazovky",
+
+ close: "Zavrieť",
+
+ submit: "Potvrdiť",
+ reset: "Zrušiť",
+
+ required: "Povinné",
+ description: "Popis",
+ title: "Nadpis",
+ text: "Text"
+};
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/tr.js b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/tr.js
new file mode 100755
index 00000000..277cd8dd
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/tr.js
@@ -0,0 +1,56 @@
+/* ===========================================================
+ * tr.js
+ * Turkish translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Emrah Bilbay (munzur)
+ * Github : https://github.com/munzur
+ * Website: http://kafe.in/
+ */
+
+jQuery.trumbowyg.langs.tr = {
+ viewHTML: "HTML Kodu",
+
+ formatting: "Biçimlendirme",
+ p: "Paragraf",
+ blockquote: "Alıntı",
+ code: "Kod",
+ header: "Başlık",
+
+ bold: "Kalın",
+ italic: "İtalik",
+ strikethrough: "Orta çizgi",
+ underline: "Alt çigzi",
+
+ strong: "Koyu",
+ em: "Vurgulu",
+ del: "Üstü çizilmiş",
+
+ unorderedList: "Numarasız liste",
+ orderedList: "Numaralı liste",
+
+ insertImage: "Resim yerleştir",
+ insertVideo: "Video yerleştir",
+ link: "Link",
+ createLink: "Link yerleştir",
+ unlink: "Linki sil",
+
+ justifyLeft: "Sola hizala",
+ justifyCenter: "Ortaya hizala",
+ justifyRight: "Sağa hizala",
+ justifyFull: "Yasla",
+
+ horizontalRule: "Yatay çizgi ekle",
+
+ fullscreen: "Tam ekran",
+
+ close: "Kapat",
+
+ submit: "Onayla",
+ reset: "Sıfırla",
+
+ required: "Gerekli",
+ description: "Açıklama",
+ title: "Başlık",
+ text: "Metin"
+};
\ No newline at end of file
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/zh_cn.js b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/zh_cn.js
new file mode 100755
index 00000000..a76a72a8
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/langs/zh_cn.js
@@ -0,0 +1,56 @@
+/* ===========================================================
+ * zh_cn.js
+ * Simplified Chinese translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Liu Kai (akai)
+ * Twitter : @akai404
+ * Github : https://github.com/akai
+ */
+
+jQuery.trumbowyg.langs.zh_cn = {
+ viewHTML: "源代码",
+
+ formatting: "格式",
+ p: "段落",
+ blockquote: "引用",
+ code: "代码",
+ header: "标题",
+
+ bold: "加粗",
+ italic: "斜体",
+ strikethrough: "删除线",
+ underline: "下划线",
+
+ strong: "加粗",
+ em: "斜体",
+ del: "删除线",
+
+ unorderedList: "无序列表",
+ orderedList: "有序列表",
+
+ insertImage: "插入图片",
+ insertVideo: "插入视频",
+ link: "超链接",
+ createLink: "插入链接",
+ unlink: "取消链接",
+
+ justifyLeft: "居左对齐",
+ justifyCenter: "居中对齐",
+ justifyRight: "居右对齐",
+ justifyFull: "两端对齐",
+
+ horizontalRule: "插入分隔线",
+
+ fullscreen: "全屏",
+
+ close: "关闭",
+
+ submit: "确定",
+ reset: "取消",
+
+ required: "必需的",
+ description: "描述",
+ title: "标题",
+ text: "文字"
+};
\ No newline at end of file
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/trumbowyg.js b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/trumbowyg.js
new file mode 100755
index 00000000..d4bbfb38
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/trumbowyg.js
@@ -0,0 +1,1213 @@
+jQuery.trumbowyg = {
+ langs: {
+ en: {
+ viewHTML: "View HTML",
+
+ formatting: "Formatting",
+ p: "Paragraph",
+ blockquote: "Quote",
+ code: "Code",
+ header: "Header",
+
+ bold: "Bold",
+ italic: "Italic",
+ strikethrough: "Stroke",
+ underline: "Underline",
+
+ strong: "Strong",
+ em: "Emphasis",
+ del: "Deleted",
+
+ unorderedList: "Unordered list",
+ orderedList: "Ordered list",
+
+ insertImage: "Insert Image",
+ insertVideo: "Insert Video",
+ link: "Link",
+ createLink: "Insert link",
+ unlink: "Remove link",
+
+ justifyLeft: "Align Left",
+ justifyCenter: "Align Center",
+ justifyRight: "Align Right",
+ justifyFull: "Align Justify",
+
+ horizontalRule: "Insert horizontal rule",
+ removeformat: "Remove format",
+
+ fullscreen: "fullscreen",
+
+ close: "Close",
+
+ submit: "Confirm",
+ reset: "Cancel",
+
+ required: "Required",
+ description: "Description",
+ title: "Title",
+ text: "Text",
+ target: "Target"
+ }
+ },
+
+ // User default options
+ opts: {},
+
+ btnsGrps: {
+ design: ['bold', 'italic', 'underline', 'strikethrough'],
+ semantic: ['strong', 'em', 'del'],
+ justify: ['justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull'],
+ lists: ['unorderedList', 'orderedList']
+ }
+};
+
+
+
+(function(navigator, window, document, $, undefined){
+ 'use strict';
+
+ // @param : o are options
+ // @param : p are params
+ $.fn.trumbowyg = function(o, p){
+ if(o === Object(o) || !o){
+ return this.each(function(){
+ if(!$(this).data('trumbowyg'))
+ $(this).data('trumbowyg', new Trumbowyg(this, o));
+ });
+ }
+ if(this.length === 1){
+ try {
+ var t = $(this).data('trumbowyg');
+ switch(o){
+ // Modal box
+ case 'openModal':
+ return t.openModal(p.title, p.content);
+ case 'closeModal':
+ return t.closeModal();
+ case 'openModalInsert':
+ return t.openModalInsert(p.title, p.fields, p.callback);
+
+ // Selection
+ case 'saveSelection':
+ return t.saveSelection();
+ case 'getSelection':
+ return t.selection;
+ case 'getSelectedText':
+ return t.getSelectedText();
+ case 'restoreSelection':
+ return t.restoreSelection();
+
+ // Destroy
+ case 'destroy':
+ return t.destroy();
+
+ // Empty
+ case 'empty':
+ return t.empty();
+
+ // Public options
+ case 'lang':
+ return t.lang;
+
+ // HTML
+ case 'html':
+ return t.html(p);
+ }
+ } catch(e){}
+ }
+
+ return false;
+ };
+
+ // @param : editorElem is the DOM element
+ // @param : o are options
+ var Trumbowyg = function(editorElem, o){
+ var t = this;
+ // Get the document of the element. It use to makes the plugin
+ // compatible on iframes.
+ t.doc = editorElem.ownerDocument || document;
+ // jQuery object of the editor
+ t.$ta = $(editorElem); // $ta : Textarea
+ t.$c = $(editorElem); // $c : creator
+
+ // Extend with options
+ o = $.extend(true, {}, o, $.trumbowyg.opts);
+
+ // Localization management
+ if(typeof o.lang === 'undefined' || typeof $.trumbowyg.langs[o.lang] === 'undefined')
+ t.lang = $.trumbowyg.langs.en;
+ else
+ t.lang = $.extend(true, {}, $.trumbowyg.langs.en, $.trumbowyg.langs[o.lang]);
+
+ // Header translation
+ var h = t.lang.header;
+
+ // Defaults Options
+ t.o = $.extend(true, {}, {
+ lang: 'en',
+ dir: 'ltr',
+
+ closable: false,
+ fullscreenable: true,
+ fixedBtnPane: false,
+ fixedFullWidth: false,
+ autogrow: false,
+
+ prefix: 'trumbowyg-',
+
+ // WYSIWYG only
+ semantic: true,
+ resetCss: false,
+ removeformatPasted: false,
+
+ btns: [
+ 'viewHTML',
+ '|', 'formatting',
+ '|', 'btnGrp-design',
+ '|', 'link',
+ '|', 'insertImage',
+ '|', 'btnGrp-justify',
+ '|', 'btnGrp-lists',
+ '|', 'horizontalRule',
+ '|', 'removeformat'
+ ],
+ btnsAdd: [],
+
+ /**
+ * When the button is associated to a empty object
+ * func and title attributs are defined from the button key value
+ *
+ * For example
+ * foo: {}
+ * is equivalent to :
+ * foo: {
+ * func: 'foo',
+ * title: this.lang.foo
+ * }
+ */
+ btnsDef: {
+ viewHTML: {
+ func: 'toggle'
+ },
+
+ p: {
+ func: 'formatBlock'
+ },
+ blockquote: {
+ func: 'formatBlock'
+ },
+ h1: {
+ func: 'formatBlock',
+ title: h + ' 1'
+ },
+ h2: {
+ func: 'formatBlock',
+ title: h + ' 2'
+ },
+ h3: {
+ func: 'formatBlock',
+ title: h + ' 3'
+ },
+ h4: {
+ func: 'formatBlock',
+ title: h + ' 4'
+ },
+
+ bold: {
+ key: 'B'
+ },
+ italic: {
+ key: 'I'
+ },
+ underline: {},
+ strikethrough: {},
+
+ strong: {
+ func: 'bold',
+ key: 'B'
+ },
+ em: {
+ func: 'italic',
+ key: 'I'
+ },
+ del: {
+ func: 'strikethrough'
+ },
+
+ createLink: {
+ key: 'K'
+ },
+ unlink: {},
+
+ insertImage: {},
+
+ justifyLeft: {},
+ justifyCenter: {},
+ justifyRight: {},
+ justifyFull: {},
+
+ unorderedList: {
+ func: 'insertUnorderedList'
+ },
+ orderedList: {
+ func: 'insertOrderedList'
+ },
+
+ horizontalRule: {
+ func: 'insertHorizontalRule'
+ },
+
+ removeformat: {},
+
+ // Dropdowns
+ formatting: {
+ dropdown: ['p', 'blockquote', 'h1', 'h2', 'h3', 'h4']
+ },
+ link: {
+ dropdown: ['createLink', 'unlink']
+ }
+ },
+
+ blockLevelElements: ['br', 'p', 'div', 'ul', 'ol', 'table', 'img', 'address', 'article', 'aside', 'audio', 'blockquote', 'canvas', 'dl', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hgroup', 'hr', 'main', 'nav', 'noscript', 'output', 'pre', 'section', 'tfoot', 'video']
+
+ }, o);
+
+ if(o.btns)
+ t.o.btns = o.btns;
+ else if(t.o.semantic)
+ t.o.btns[4] = 'btnGrp-semantic';
+
+ // Keyboard shortcuts are load in this array
+ t.keys = [];
+
+ t.init();
+ };
+
+ Trumbowyg.prototype = {
+ init: function(){
+ var t = this;
+ t.height = t.$ta.height();
+
+ t.buildEditor();
+ t.buildBtnPane();
+
+ t.fixedBtnPaneEvents();
+
+ t.buildOverlay();
+ },
+
+ buildEditor: function(){
+ var t = this,
+ prefix = t.o.prefix,
+ html = '';
+
+ t.$box = $('
', {
+ 'class': prefix + 'box ' + prefix + 'editor-visible ' + prefix + t.o.lang + ' trumbowyg'
+ });
+
+ // $ta = Textarea
+ // $ed = Editor
+ t.isTextarea = t.$ta.is('textarea');
+ if(t.isTextarea){
+ html = t.$ta.val();
+ t.$ed = $('
');
+ t.$box
+ .insertAfter(t.$ta)
+ .append(t.$ed, t.$ta);
+ } else {
+ t.$ed = t.$ta;
+ html = t.$ed.html();
+
+ t.$ta = $(' ', {
+ name: t.$ta.attr('id'),
+ height: t.height
+ }).val(html);
+
+ t.$box
+ .insertAfter(t.$ed)
+ .append(t.$ta, t.$ed);
+ t.syncCode();
+ }
+
+ t.$ta
+ .addClass(prefix + 'textarea')
+ .attr('tabindex', -1)
+ ;
+
+ t.$ed
+ .addClass(prefix + 'editor')
+ .attr({
+ 'contenteditable': true,
+ 'dir': t.lang._dir || t.o.dir
+ })
+ .html(html)
+ ;
+
+ if(t.$c.is('[placeholder]')){
+ t.$ed.attr('placeholder', t.$c.attr('placeholder'));
+ }
+
+ if(t.o.resetCss){
+ t.$ed.addClass(prefix + 'reset-css');
+ }
+
+ if(!t.o.autogrow){
+ t.$ta.add(t.$ed).css({
+ height: t.height,
+ overflow: 'auto'
+ });
+ }
+
+ if(t.o.semantic){
+ t.semanticCode();
+ }
+
+
+ t._ctrl = false;
+ t.$ed
+ .on('dblclick', 'img', function(){
+ var $img = $(this);
+ t.openModalInsert(t.lang.insertImage, {
+ url: {
+ label: 'URL',
+ value: $img.attr('src'),
+ required: true
+ },
+ alt: {
+ label: t.lang.description,
+ value: $img.attr('alt')
+ }
+ }, function(v){
+ return $img.attr({
+ src: v.url,
+ alt: v.alt
+ });
+ });
+ return false;
+ })
+ .on('keydown', function(e){
+ t._composition = (e.which === 229);
+
+ if(e.ctrlKey){
+ t._ctrl = true;
+ var k = t.keys[String.fromCharCode(e.which).toUpperCase()];
+
+ try {
+ t.execCmd(k.func, k.param);
+ return false;
+ } catch(e){}
+ }
+ })
+ .on('keyup', function(e){
+ if(!t._ctrl && e.which !== 17 && !t._composition){
+ t.semanticCode(false, e.which === 13);
+ t.$c.trigger('tbwchange');
+ }
+
+ setTimeout(function(){
+ t._ctrl = false;
+ }, 200);
+ })
+ .on('focus blur', function(e){
+ t.$c.trigger('tbw' + e.type);
+ })
+ .on('paste', function(e){
+ if(t.o.removeformatPasted){
+ e.preventDefault();
+
+ try {
+ // IE
+ var text = window.clipboardData.getData("Text");
+
+ try {
+ // <= IE10
+ t.doc.selection.createRange().pasteHTML(text);
+ } catch(err){
+ // IE 11
+ t.doc.getSelection().getRangeAt(0).insertNode(document.createTextNode(text));
+ }
+ } catch(err){
+ // Not IE
+ t.execCmd('insertText', (e.originalEvent || e).clipboardData.getData('text/plain'));
+ }
+ }
+
+ setTimeout(function() {
+ if(t.o.semantic) {
+ t.semanticCode(false, true);
+ } else {
+ t.syncCode();
+ }
+ t.$c.trigger('tbwpaste', e);
+ }, 0);
+
+ });
+ t.$ta.on('keyup paste', function(){
+ t.$c.trigger('tbwchange');
+ });
+
+ $(t.doc).on('keydown', function(e){
+ if(e.which === 27){
+ t.closeModal();
+ return false;
+ }
+ });
+ },
+
+
+ // Build button pane, use o.btns and o.btnsAdd options
+ buildBtnPane: function(){
+ var t = this,
+ prefix = t.o.prefix;
+
+ if(t.o.btns === false)
+ return;
+
+ t.$btnPane = $('', {
+ 'class': prefix + 'button-pane'
+ });
+
+ $.each(t.o.btns.concat(t.o.btnsAdd), function(i, btn){
+ // Managment of group of buttons
+ try {
+ var b = btn.split('btnGrp-');
+ if(b[1] !== undefined)
+ btn = $.trumbowyg.btnsGrps[b[1]];
+ } catch(e){}
+
+ if(!$.isArray(btn))
+ btn = [btn];
+
+ $.each(btn, function(i, b){
+ try { // Prevent buildBtn error
+ var $li = $(' ');
+
+ if(b === '|') // It's a separator
+ $li.addClass(prefix + 'separator');
+ else if(t.isSupportedBtn(b)) // It's a supported button
+ $li.append(t.buildBtn(b));
+
+ t.$btnPane.append($li);
+ } catch(e){}
+ });
+ });
+
+ // Build right li for fullscreen and close buttons
+ var $liRight = $(' ', {
+ 'class': prefix + 'not-disable ' + prefix + 'buttons-right'
+ });
+
+ // Add the fullscreen button
+ if(t.o.fullscreenable)
+ $liRight.append(
+ t.buildRightBtn('fullscreen')
+ .on('click', function(){
+ var cssClass = prefix + 'fullscreen';
+ t.$box.toggleClass(cssClass);
+
+ if(t.$box.hasClass(cssClass)){
+ $('body').addClass(prefix + 'body-fullscreen');
+ $.each([t.$ta, t.$ed], function(){
+ $(this).css({
+ height: 'calc(100% - 35px)',
+ overflow: 'auto'
+ });
+ });
+ t.$btnPane.css('width', '100%');
+ } else {
+ $('body').removeClass(prefix + 'body-fullscreen');
+ t.$box.removeAttr('style');
+ if(!t.o.autogrow)
+ $.each([t.$ta, t.$ed], function(){
+ $(this).css('height', t.height);
+ });
+ }
+ $(window).trigger('scroll');
+ })
+ );
+
+ // Build and add close button
+ if(t.o.closable)
+ $liRight
+ .append(
+ t.buildRightBtn('close')
+ .on('click', function(){
+ if(t.$box.hasClass(prefix + 'fullscreen'))
+ $('body').css('overflow', 'auto');
+ t.destroy();
+ t.$c.trigger('tbwclose');
+ })
+ );
+
+
+ // Add right li only if isn't empty
+ if($liRight.not(':empty'))
+ t.$btnPane.append($liRight);
+
+ t.$box.prepend(t.$btnPane);
+ },
+
+
+ // Build a button and his action
+ buildBtn: function(n){ // n is name of the button
+ var t = this,
+ prefix = t.o.prefix,
+ btn = t.o.btnsDef[n],
+ d = btn.dropdown,
+ textDef = t.lang[n] || n,
+
+ $btn = $(' ', {
+ type: 'button',
+ 'class': prefix + n +'-button' + (btn.ico ? ' '+ prefix + btn.ico +'-button' : ''),
+ text: btn.text || btn.title || textDef,
+ title: btn.title || btn.text || textDef + ((btn.key) ? ' (Ctrl + ' + btn.key + ')' : ''),
+ tabindex: -1,
+ mousedown: function(){
+ if(!d || $('.'+n+'-'+prefix + 'dropdown', t.$box).is(':hidden'))
+ $('body', t.doc).trigger('mousedown');
+
+ if(t.$btnPane.hasClass(prefix + 'disable') && !$(this).hasClass(prefix + 'active') && !$(this).parent().hasClass(prefix + 'not-disable'))
+ return false;
+
+ t.execCmd((d ? 'dropdown' : false) || btn.func || n,
+ btn.param || n);
+
+ return false;
+ }
+ });
+
+ if(d){
+ $btn.addClass(prefix + 'open-dropdown');
+ var c = prefix + 'dropdown',
+ dd = $('
', { // the dropdown
+ 'class': n + '-' + c + ' ' + c + ' ' + prefix + 'fixed-top'
+ });
+ $.each(d, function(i, def){
+ if(t.o.btnsDef[def] && t.isSupportedBtn(def))
+ dd.append(t.buildSubBtn(def));
+ });
+ t.$box.append(dd.hide());
+ } else if(btn.key){
+ t.keys[btn.key] = {
+ func: btn.func || n,
+ param: btn.param || n
+ };
+ }
+
+ return $btn;
+ },
+ // Build a button for dropdown menu
+ // @param n : name of the subbutton
+ buildSubBtn: function(n){
+ var t = this,
+ b = t.o.btnsDef[n];
+
+ if(b.key){
+ t.keys[b.key] = {
+ func: b.func || n,
+ param: b.param || n
+ };
+ }
+
+ return $(' ', {
+ type: 'button',
+ 'class': t.o.prefix + n +'-dropdown-button' + (b.ico ? ' '+ t.o.prefix + b.ico +'-button' : ''),
+ text: b.text || b.title || t.lang[n] || n,
+ title: ((b.key) ? ' (Ctrl + ' + b.key + ')' : null),
+ style: b.style || null,
+ mousedown: function(){
+ $('body', t.doc).trigger('mousedown');
+
+ t.execCmd(b.func || n,
+ b.param || n);
+
+ return false;
+ }
+ });
+ },
+ // Build a button for right li
+ // @param n : name of the right button
+ buildRightBtn: function(n){
+ var l = this.lang[n];
+ return $(' ', {
+ type: 'button',
+ 'class': this.o.prefix + n + '-button',
+ title: l,
+ text: l,
+ tabindex: -1
+ });
+ },
+ // Check if button is supported
+ isSupportedBtn: function(b){
+ try {
+ return this.o.btnsDef[b].isSupported();
+ } catch(e){}
+ return true;
+ },
+
+ // Build overlay for modal box
+ buildOverlay: function(){
+ var t = this;
+ t.$overlay = $('
', {
+ 'class': t.o.prefix + 'overlay'
+ }).css({
+ top: t.$btnPane.outerHeight(),
+ height: (t.$ed.outerHeight() + 1) + 'px'
+ }).appendTo(t.$box);
+ return t.$overlay;
+ },
+ showOverlay: function(){
+ var t = this;
+ $(window).trigger('scroll');
+ t.$overlay.fadeIn(200);
+ t.$box.addClass(t.o.prefix + 'box-blur');
+ },
+ hideOverlay: function(){
+ var t = this;
+ t.$overlay.fadeOut(50);
+ t.$box.removeClass(t.o.prefix + 'box-blur');
+ },
+
+ // Management of fixed button pane
+ fixedBtnPaneEvents: function(){
+ var t = this,
+ fixedFullWidth = t.o.fixedFullWidth,
+ box = t.$box;
+ if(!t.o.fixedBtnPane)
+ return;
+
+ t.isFixed = false;
+
+ $(window)
+ .on('scroll resize', function(){
+ if(!box)
+ return;
+
+ t.syncCode();
+
+ var scrollTop = $(window).scrollTop(),
+ offset = box.offset().top + 1,
+ bp = t.$btnPane,
+ oh = bp.outerHeight();
+
+ if((scrollTop - offset > 0) && ((scrollTop - offset - t.height) < 0)){
+ if(!t.isFixed){
+ t.isFixed = true;
+ bp.css({
+ position: 'fixed',
+ top: 0,
+ left: fixedFullWidth ? '0' : 'auto',
+ zIndex: 7
+ });
+ $([t.$ta, t.$ed]).css({ marginTop: bp.height() });
+ }
+ bp.css({
+ width: fixedFullWidth ? '100%' : ((box.width()-1) + 'px')
+ });
+
+ $('.' + t.o.prefix + 'fixed-top', box).css({
+ position: fixedFullWidth ? 'fixed' : 'absolute',
+ top: fixedFullWidth ? oh : oh + (scrollTop - offset) + 'px',
+ zIndex: 15
+ });
+ } else if(t.isFixed) {
+ t.isFixed = false;
+ bp.removeAttr('style');
+ $([t.$ta, t.$ed]).css({ marginTop: 0 });
+ $('.' + t.o.prefix + 'fixed-top', box).css({
+ position: 'absolute',
+ top: oh
+ });
+ }
+ });
+ },
+
+
+
+ // Destroy the editor
+ destroy: function(){
+ var t = this,
+ prefix = t.o.prefix,
+ height = t.height,
+ html = t.html();
+
+ if(t.isTextarea)
+ t.$box.after(
+ t.$ta.css({ height: height })
+ .val(html)
+ .removeClass(prefix + 'textarea')
+ .show()
+ );
+ else
+ t.$box.after(
+ t.$ed
+ .css({ height: height })
+ .removeClass(prefix + 'editor')
+ .removeAttr('contenteditable')
+ .html(html)
+ .show()
+ );
+
+ t.$box.remove();
+ t.$c.removeData('trumbowyg');
+ },
+
+
+
+ // Empty the editor
+ empty: function(){
+ this.$ta.val('');
+ this.syncCode(true);
+ },
+
+
+
+ // Function call when click on viewHTML button
+ toggle: function(){
+ var t = this,
+ prefix = t.o.prefix;
+ t.semanticCode(false, true);
+ t.$box.toggleClass(prefix + 'editor-hidden ' + prefix + 'editor-visible');
+ t.$btnPane.toggleClass(prefix + 'disable');
+ $('.'+prefix + 'viewHTML-button', t.$btnPane).toggleClass(prefix + 'active');
+ if(t.$box.hasClass(prefix + 'editor-visible'))
+ t.$ta.attr('tabindex', -1);
+ else
+ t.$ta.removeAttr('tabindex');
+ },
+
+ // Open dropdown when click on a button which open that
+ dropdown: function(name){
+ var t = this,
+ d = t.doc,
+ prefix = t.o.prefix,
+ $dd = $('.'+name+'-'+prefix + 'dropdown', t.$box),
+ $btn = $('.'+prefix+name+'-button', t.$btnPane);
+
+ if($dd.is(':hidden')){
+ var o = $btn.offset().left;
+ $btn.addClass(prefix + 'active');
+
+ $dd.css({
+ position: 'absolute',
+ top: t.$btnPane.outerHeight(),
+ left: (t.o.fixedFullWidth && t.isFixed) ? o+'px' : (o - t.$btnPane.offset().left)+'px'
+ }).show();
+
+ $(window).trigger('scroll');
+
+ $('body', d).on('mousedown', function(){
+ $('.' + prefix + 'dropdown', d).hide();
+ $('.' + prefix + 'active', d).removeClass(prefix + 'active');
+ $('body', d).off('mousedown');
+ });
+ } else
+ $('body', d).trigger('mousedown');
+ },
+
+
+
+ // HTML Code management
+ html: function(html){
+ var t = this;
+ if(html){
+ t.$ta.val(html);
+ t.syncCode(true);
+ return t;
+ } else
+ return t.$ta.val();
+ },
+ syncCode: function(force){
+ var t = this;
+ if(!force && t.$ed.is(':visible')){
+ t.$ta.val(t.$ed.html());
+ t.$c.trigger('tbwchange');
+ } else {
+ t.$ed.html(t.$ta.val());
+ }
+
+ if(t.o.autogrow){
+ t.height = t.$ed.height();
+ if(t.height != t.$ta.css('height')){
+ t.$ta.css({ height: t.height });
+ t.$c.trigger('tbwresize');
+ }
+ }
+ },
+
+ // Analyse and update to semantic code
+ // @param force : force to sync code from textarea
+ // @param full : wrap text nodes in
+ semanticCode: function(force, full){
+ var t = this;
+ t.syncCode(force);
+ t.saveSelection();
+
+ if(t.o.semantic){
+ t.semanticTag('b', 'strong');
+ t.semanticTag('i', 'em');
+ t.semanticTag('strike', 'del');
+
+ if(full){
+ var blockElementsSelector = t.o.blockLevelElements.join(', '),
+ inlineElementsSelector = ':not(' + blockElementsSelector + ')';
+
+ // Wrap text nodes in span for easier processing
+ t.$ed.contents().filter(function() {
+ return this.nodeType === 3 && $.trim(this.nodeValue).length > 0;
+ }).wrap(' ');
+
+ // Wrap groups of inline elements in paragraphs (recursive)
+ var wrapInlinesInParagraphsFrom = function($from) {
+ if ($from.length !== 0) {
+ var $finalParagraph = $from.nextUntil(blockElementsSelector + ', br').andSelf()
+ .wrapAll('
').parent();
+
+ $finalParagraph.next('br').remove();
+
+ var $nextElement = $finalParagraph.nextAll(inlineElementsSelector).first();
+ if ($nextElement.length) {
+ wrapInlinesInParagraphsFrom($nextElement);
+ }
+ }
+ };
+ wrapInlinesInParagraphsFrom(t.$ed.children(inlineElementsSelector).first());
+
+ t.semanticTag('div', 'p', true);
+
+ // Unwrap paragraphs content, containing nothing usefull
+ t.$ed.find('p').filter(function() {
+ if (t.selection && this === t.selection.startContainer) {
+ // Don't remove currently being edited element
+ return false;
+ }
+ return $(this).text().trim().length === 0 && $(this).children().not('br, span').length === 0;
+ }).contents().unwrap();
+
+ // Get rid of temporial span's
+ $('[data-trumbowyg-textnode]', t.$ed).contents().unwrap();
+
+ // Replace empty with (IE loves adding empty
)
+ t.$ed.find('p:empty').replaceWith(' ');
+ }
+
+ t.restoreSelection();
+
+ t.$ta.val(t.$ed.html());
+ }
+ },
+
+ semanticTag: function(oldTag, newTag, copyAttributes){
+ $(oldTag, this.$ed).each(function() {
+ var $oldTag = $(this);
+ $oldTag.wrap('<' + newTag + '/>');
+ if (copyAttributes) {
+ $.each($oldTag.prop('attributes'), function() {
+ $oldTag.parent().attr(this.name, this.value);
+ });
+ }
+ $oldTag.contents().unwrap();
+ });
+ },
+
+ // Function call when user click on "Insert Link"
+ createLink: function(){
+ var t = this;
+ t.saveSelection();
+ t.openModalInsert(t.lang.createLink, {
+ url: {
+ label: 'URL',
+ required: true
+ },
+ title: {
+ label: t.lang.title
+ },
+ text: {
+ label: t.lang.text,
+ value: t.getSelectedText()
+ },
+ target: {
+ label: t.lang.target
+ }
+ }, function(v){ // v is value
+ var link = $(['', v.text, ' '].join(''));
+ if (v.title.length > 0)
+ link.attr('title',v.title);
+ if (v.target.length > 0)
+ link.attr('target',v.target);
+ t.selection.deleteContents();
+ t.selection.insertNode(link.get(0));
+ t.restoreSelection();
+ return true;
+ });
+ },
+ insertImage: function(){
+ var t = this;
+ t.saveSelection();
+ t.openModalInsert(t.lang.insertImage, {
+ url: {
+ label: 'URL',
+ required: true
+ },
+ alt: {
+ label: t.lang.description,
+ value: t.getSelectedText()
+ }
+ }, function(v){ // v are values
+ t.execCmd('insertImage', v.url);
+ $('img[src="'+v.url+'"]:not([alt])', t.$box).attr('alt', v.alt);
+ return true;
+ });
+ },
+
+
+ /*
+ * Call method of trumbowyg if exist
+ * else try to call anonymous function
+ * and finaly native execCommand
+ */
+ execCmd: function(cmd, param){
+ var t = this;
+ if(cmd != 'dropdown')
+ t.$ed.focus();
+
+ try {
+ t[cmd](param);
+ } catch(e){
+ try {
+ cmd(param, t);
+ } catch(e2){
+ if(cmd == 'insertHorizontalRule')
+ param = null;
+ else if(cmd == 'formatBlock' && (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0))
+ param = '<' + param + '>';
+
+ t.doc.execCommand(cmd, false, param);
+ }
+ }
+
+ if(cmd != 'dropdown')
+ t.syncCode();
+ },
+
+
+ // Open a modal box
+ openModal: function(title, content){
+ var t = this,
+ prefix = t.o.prefix;
+
+ // No open a modal box when exist other modal box
+ if($('.' + prefix + 'modal-box', t.$box).length > 0)
+ return false;
+
+ t.saveSelection();
+ t.showOverlay();
+
+ // Disable all btnPane btns
+ t.$btnPane.addClass(prefix + 'disable');
+
+ // Build out of ModalBox, it's the mask for animations
+ var $modal = $('
', {
+ 'class': prefix + 'modal ' + prefix + 'fixed-top'
+ }).css({
+ top: (t.$btnPane.height() + 1) + 'px'
+ }).appendTo(t.$box);
+
+ // Click on overlay close modal by cancelling them
+ t.$overlay.one('click', function(){
+ $modal.trigger(prefix + 'cancel');
+ return false;
+ });
+
+ // Build the form
+ var $form = $(' ', {
+ action: '',
+ html: content
+ })
+ .on('submit', function(){
+ $modal.trigger(prefix + 'confirm');
+ return false;
+ })
+ .on('reset', function(){
+ $modal.trigger(prefix + 'cancel');
+ return false;
+ });
+
+
+ // Build ModalBox and animate to show them
+ var $box = $('
', {
+ 'class': prefix + 'modal-box',
+ html: $form
+ })
+ .css({
+ top: '-' + t.$btnPane.outerHeight() + 'px',
+ opacity: 0
+ })
+ .appendTo($modal)
+ .animate({
+ top: 0,
+ opacity: 1
+ }, 100);
+
+
+ // Append title
+ $(' ', {
+ text: title,
+ 'class': prefix + 'modal-title'
+ }).prependTo($box);
+
+ $modal.height($box.outerHeight() + 10);
+
+
+ // Focus in modal box
+ $('input:first', $box).focus();
+
+
+ // Append Confirm and Cancel buttons
+ t.buildModalBtn('submit', $box);
+ t.buildModalBtn('reset', $box);
+
+
+ $(window).trigger('scroll');
+
+ return $modal;
+ },
+ // @param n is name of modal
+ buildModalBtn: function(n, $modal){
+ var t = this,
+ prefix = t.o.prefix;
+
+ return $(' ', {
+ 'class': prefix + 'modal-button ' + prefix + 'modal-' + n,
+ type: n,
+ text: t.lang[n] || n
+ }).appendTo($('form', $modal));
+ },
+ // close current modal box
+ closeModal: function(){
+ var t = this,
+ prefix = t.o.prefix;
+
+ t.$btnPane.removeClass(prefix + 'disable');
+ t.$overlay.off();
+
+ // Find the modal box
+ var $mb = $('.' + prefix + 'modal-box', t.$box);
+
+ $mb.animate({
+ top: '-' + $mb.height()
+ }, 100, function(){
+ $mb.parent().remove();
+ t.hideOverlay();
+ });
+
+ t.restoreSelection();
+ },
+ // Preformated build and management modal
+ openModalInsert: function(title, fields, cmd){
+ var t = this,
+ prefix = t.o.prefix,
+ lg = t.lang,
+ html = '';
+
+ for(var f in fields){
+ var fd = fields[f], // field definition
+ l = fd.label,
+ n = (fd.name) ? fd.name : f;
+
+ html += ''+
+ ((!l) ? (lg[f] ? lg[f] : f) : (lg[l] ? lg[l] : l))+
+ ' ';
+ }
+
+ return t.openModal(title, html)
+ .on(prefix + 'confirm', function(){
+ var $form = $('form', $(this)),
+ valid = true,
+ v = {}; // values
+
+ for(var f in fields){
+ var $field = $('input[name="'+f+'"]', $form);
+
+ v[f] = $.trim($field.val());
+
+ // Validate value
+ if(fields[f].required && v[f] === ''){
+ valid = false;
+ t.addErrorOnModalField($field, t.lang.required);
+ } else if(fields[f].pattern && !fields[f].pattern.test(v[f])){
+ valid = false;
+ t.addErrorOnModalField($field, fields[f].patternError);
+ }
+ }
+
+ if(valid){
+ t.restoreSelection();
+
+ if(cmd(v, fields)){
+ t.syncCode();
+ t.closeModal();
+ $(this).off(prefix + 'confirm');
+ }
+ }
+ })
+ .one(prefix + 'cancel', function(){
+ $(this).off(prefix + 'confirm');
+ t.closeModal();
+ });
+ },
+ addErrorOnModalField: function($field, err){
+ var prefix = this.o.prefix,
+ $label = $field.parent();
+
+ $field
+ .on('change keyup', function(){
+ $label.removeClass(prefix + 'input-error');
+ });
+
+ $label
+ .addClass(prefix + 'input-error')
+ .find('input+span')
+ .append(
+ $(' ', {
+ 'class': prefix +'msg-error',
+ text: err
+ })
+ );
+ },
+
+
+
+
+ // Selection management
+ saveSelection: function(){
+ var t = this,
+ ds = t.doc.selection;
+
+ t.selection = null;
+ if(window.getSelection){
+ var s = window.getSelection();
+ if(s.getRangeAt && s.rangeCount)
+ t.selection = s.getRangeAt(0);
+ } else if(ds && ds.createRange)
+ t.selection = ds.createRange();
+ },
+ restoreSelection: function(){
+ var t = this,
+ range = t.selection;
+
+ if(range){
+ if(window.getSelection){
+ var s = window.getSelection();
+ s.removeAllRanges();
+ s.addRange(range);
+ } else if(t.doc.selection && range.select)
+ range.select();
+ }
+ },
+ getSelectedText: function(){
+ var s = this.selection;
+ return (s.text !== undefined) ? s.text : s+'';
+ }
+ };
+})(navigator, window, document, jQuery);
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/attachement.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/attachement.png
new file mode 100755
index 00000000..6c851f8a
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/attachement.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/barre.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/barre.png
new file mode 100755
index 00000000..deaa2868
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/barre.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/bold.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/bold.png
new file mode 100755
index 00000000..461e7cb7
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/bold.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/center-align.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/center-align.png
new file mode 100755
index 00000000..cf9f9636
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/center-align.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/close.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/close.png
new file mode 100755
index 00000000..11aac73b
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/close.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/formatting.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/formatting.png
new file mode 100755
index 00000000..8e6f6b51
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/formatting.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/fullscreen-exit.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/fullscreen-exit.png
new file mode 100755
index 00000000..eca2fc6a
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/fullscreen-exit.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/fullscreen.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/fullscreen.png
new file mode 100755
index 00000000..61aef0c0
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/fullscreen.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/gras.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/gras.png
new file mode 100755
index 00000000..8b7f0861
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/gras.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/horizontal-rule.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/horizontal-rule.png
new file mode 100755
index 00000000..fcf4d781
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/horizontal-rule.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/image.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/image.png
new file mode 100755
index 00000000..3b7e8d18
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/image.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/italic.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/italic.png
new file mode 100755
index 00000000..069d69ba
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/italic.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/justify-align.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/justify-align.png
new file mode 100755
index 00000000..3102f96c
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/justify-align.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/left-align.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/left-align.png
new file mode 100755
index 00000000..e948d6ce
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/left-align.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/link.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/link.png
new file mode 100755
index 00000000..9a317a8b
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/link.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/ordered-list.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/ordered-list.png
new file mode 100755
index 00000000..124eb2b2
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/ordered-list.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/removeformat.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/removeformat.png
new file mode 100755
index 00000000..4b431f94
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/removeformat.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/right-align.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/right-align.png
new file mode 100755
index 00000000..b37d044c
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/right-align.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/souligne.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/souligne.png
new file mode 100755
index 00000000..fbf6c51a
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/souligne.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/strikethrough.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/strikethrough.png
new file mode 100755
index 00000000..f1732f99
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/strikethrough.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/underline.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/underline.png
new file mode 100755
index 00000000..b7dee98d
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/underline.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/unordered-list.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/unordered-list.png
new file mode 100755
index 00000000..de298ca7
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/unordered-list.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/video.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/video.png
new file mode 100755
index 00000000..e5515fa0
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/video.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/view-html.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/view-html.png
new file mode 100755
index 00000000..7ade67c5
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black-2x/view-html.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/attachement.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/attachement.png
new file mode 100755
index 00000000..40dbd8e1
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/attachement.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/barre.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/barre.png
new file mode 100755
index 00000000..51891f2a
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/barre.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/bold.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/bold.png
new file mode 100755
index 00000000..89399822
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/bold.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/center-align.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/center-align.png
new file mode 100755
index 00000000..0e6e3e01
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/center-align.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/close.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/close.png
new file mode 100755
index 00000000..cecce3ae
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/close.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/formatting.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/formatting.png
new file mode 100755
index 00000000..37fac438
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/formatting.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/fullscreen-exit.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/fullscreen-exit.png
new file mode 100755
index 00000000..5558ebb0
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/fullscreen-exit.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/fullscreen.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/fullscreen.png
new file mode 100755
index 00000000..c59886e3
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/fullscreen.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/gras.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/gras.png
new file mode 100755
index 00000000..b20a4457
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/gras.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/horizontal-rule.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/horizontal-rule.png
new file mode 100755
index 00000000..32b5ce9a
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/horizontal-rule.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/image.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/image.png
new file mode 100755
index 00000000..d5b7d9b3
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/image.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/italic.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/italic.png
new file mode 100755
index 00000000..a2fe98c3
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/italic.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/justify-align.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/justify-align.png
new file mode 100755
index 00000000..feb76545
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/justify-align.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/left-align.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/left-align.png
new file mode 100755
index 00000000..78bd2897
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/left-align.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/link.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/link.png
new file mode 100755
index 00000000..b5bb2a11
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/link.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/ordered-list.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/ordered-list.png
new file mode 100755
index 00000000..38a4809e
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/ordered-list.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/removeformat.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/removeformat.png
new file mode 100755
index 00000000..5fe14557
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/removeformat.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/right-align.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/right-align.png
new file mode 100755
index 00000000..456baa35
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/right-align.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/souligne.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/souligne.png
new file mode 100755
index 00000000..bfd2968c
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/souligne.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/strikethrough.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/strikethrough.png
new file mode 100755
index 00000000..5e16ba88
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/strikethrough.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/underline.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/underline.png
new file mode 100755
index 00000000..73df74c7
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/underline.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/unordered-list.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/unordered-list.png
new file mode 100755
index 00000000..8bd28103
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/unordered-list.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/video.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/video.png
new file mode 100755
index 00000000..05c6fce0
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/video.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/view-html.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/view-html.png
new file mode 100755
index 00000000..50ef6a52
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-black/view-html.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/attachement.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/attachement.png
new file mode 100755
index 00000000..bb4dfc33
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/attachement.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/barre.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/barre.png
new file mode 100755
index 00000000..a8cc0bf2
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/barre.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/bold.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/bold.png
new file mode 100755
index 00000000..b0c3219c
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/bold.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/center-align.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/center-align.png
new file mode 100755
index 00000000..1f2b79d2
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/center-align.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/close.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/close.png
new file mode 100755
index 00000000..bf3f964f
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/close.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/formatting.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/formatting.png
new file mode 100755
index 00000000..0a757b4b
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/formatting.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/fullscreen-exit.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/fullscreen-exit.png
new file mode 100755
index 00000000..fa0e8eb8
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/fullscreen-exit.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/fullscreen.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/fullscreen.png
new file mode 100755
index 00000000..9a37067e
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/fullscreen.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/gras.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/gras.png
new file mode 100755
index 00000000..cd14ed45
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/gras.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/horizontal-rule.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/horizontal-rule.png
new file mode 100755
index 00000000..03f8baa1
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/horizontal-rule.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/image.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/image.png
new file mode 100755
index 00000000..958a66ec
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/image.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/italic.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/italic.png
new file mode 100755
index 00000000..66db159b
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/italic.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/justify-align.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/justify-align.png
new file mode 100755
index 00000000..010ca542
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/justify-align.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/left-align.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/left-align.png
new file mode 100755
index 00000000..54a4403c
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/left-align.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/link.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/link.png
new file mode 100755
index 00000000..270437e0
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/link.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/ordered-list.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/ordered-list.png
new file mode 100755
index 00000000..60cb60a3
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/ordered-list.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/removeformat.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/removeformat.png
new file mode 100755
index 00000000..8d07870c
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/removeformat.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/right-align.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/right-align.png
new file mode 100755
index 00000000..2f3284d4
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/right-align.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/souligne.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/souligne.png
new file mode 100755
index 00000000..f35005e7
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/souligne.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/strikethrough.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/strikethrough.png
new file mode 100755
index 00000000..d34c09d5
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/strikethrough.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/underline.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/underline.png
new file mode 100755
index 00000000..e0180641
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/underline.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/unordered-list.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/unordered-list.png
new file mode 100755
index 00000000..5c08e40c
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/unordered-list.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/video.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/video.png
new file mode 100755
index 00000000..a9d6db1b
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/video.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/view-html.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/view-html.png
new file mode 100755
index 00000000..37478d07
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white-2x/view-html.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/attachement.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/attachement.png
new file mode 100755
index 00000000..34769558
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/attachement.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/barre.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/barre.png
new file mode 100755
index 00000000..c6bdbfd3
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/barre.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/bold.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/bold.png
new file mode 100755
index 00000000..aea17816
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/bold.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/center-align.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/center-align.png
new file mode 100755
index 00000000..102f5e1b
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/center-align.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/close.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/close.png
new file mode 100755
index 00000000..ff369523
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/close.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/formatting.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/formatting.png
new file mode 100755
index 00000000..642bcd19
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/formatting.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/fullscreen-exit.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/fullscreen-exit.png
new file mode 100755
index 00000000..d1e90290
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/fullscreen-exit.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/fullscreen.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/fullscreen.png
new file mode 100755
index 00000000..e36528d4
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/fullscreen.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/gras.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/gras.png
new file mode 100755
index 00000000..c8a04a45
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/gras.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/horizontal-rule.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/horizontal-rule.png
new file mode 100755
index 00000000..ebe4c2a8
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/horizontal-rule.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/image.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/image.png
new file mode 100755
index 00000000..ed7cf83e
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/image.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/italic.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/italic.png
new file mode 100755
index 00000000..c6a110e3
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/italic.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/justify-align.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/justify-align.png
new file mode 100755
index 00000000..ba757bc0
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/justify-align.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/left-align.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/left-align.png
new file mode 100755
index 00000000..dc6fe273
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/left-align.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/link.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/link.png
new file mode 100755
index 00000000..aa0fd3d8
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/link.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/ordered-list.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/ordered-list.png
new file mode 100755
index 00000000..1b5a6cc6
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/ordered-list.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/removeformat.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/removeformat.png
new file mode 100755
index 00000000..1405225f
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/removeformat.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/right-align.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/right-align.png
new file mode 100755
index 00000000..7b72a728
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/right-align.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/souligne.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/souligne.png
new file mode 100755
index 00000000..1cd82caa
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/souligne.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/strikethrough.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/strikethrough.png
new file mode 100755
index 00000000..502c42a5
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/strikethrough.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/underline.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/underline.png
new file mode 100755
index 00000000..d1593510
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/underline.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/unordered-list.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/unordered-list.png
new file mode 100755
index 00000000..ca728974
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/unordered-list.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/video.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/video.png
new file mode 100755
index 00000000..34d43fe9
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/video.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/view-html.png b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/view-html.png
new file mode 100755
index 00000000..3d28e74d
Binary files /dev/null and b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/images/icons-white/view-html.png differ
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/sass/mixins/_sprite-pos.scss b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/sass/mixins/_sprite-pos.scss
new file mode 100755
index 00000000..54fd564e
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/sass/mixins/_sprite-pos.scss
@@ -0,0 +1,7 @@
+@mixin sprite-pos($_item, $retina: false){
+ @if($retina == false){
+ background-position: nth($_item, 1)+5 nth($_item, 2)+5;
+ } @else {
+ background-position: round(nth($_item, 1)/ 2)+5 round(nth($_item, 2)/ 2)+5;
+ }
+}
\ No newline at end of file
diff --git a/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/sass/trumbowyg.scss b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/sass/trumbowyg.scss
new file mode 100755
index 00000000..7eec8e5f
--- /dev/null
+++ b/plugins/trumbowyg/Trumbowyg-2.0.0-beta.4/src/ui/sass/trumbowyg.scss
@@ -0,0 +1,809 @@
+@import "sprite-black";
+@import "sprite-black-2x";
+@import "sprite-white";
+@import "sprite-white-2x";
+
+@import "mixins/sprite-pos";
+
+$light-color: #ecf0f1;
+$dark-color: #222;
+
+
+
+.trumbowyg-box {
+ *,
+ *::before,
+ *::after {
+ box-sizing: border-box;
+ }
+}
+.trumbowyg-box,
+.trumbowyg-editor {
+ display: block;
+ position: relative;
+ border: 1px solid #DDD;
+ width: 96%;
+ min-height: 300px;
+ margin: 17px auto;
+}
+.trumbowyg-box .trumbowyg-editor {
+ margin: 0 auto;
+}
+.trumbowyg-box.trumbowyg-fullscreen {
+ background: #FEFEFE;
+}
+.trumbowyg-editor,
+.trumbowyg-textarea {
+ position: relative;
+ box-sizing: border-box;
+ padding: 1% 2%;
+ min-height: 300px;
+ width: 100%;
+ border-style: none;
+ resize: none;
+ outline: none;
+}
+.trumbowyg-box-blur .trumbowyg-editor {
+ * {
+ color: transparent !important;
+ text-shadow: 0 0 7px #333;
+ }
+ img {
+ opacity: .2;
+ }
+}
+.trumbowyg-textarea {
+ position: relative;
+ display: block;
+ overflow: auto;
+ border: none;
+ white-space: normal;
+ font-size: 14px;
+ font-family: "Inconsolata", "Consolas", "Courier", "Courier New", sans-serif;
+ line-height: 18px;
+}
+.trumbowyg-box.trumbowyg-editor-visible {
+ .trumbowyg-textarea {
+ position: absolute;
+ top: 37px;
+ height: 1px !important;
+ width: 25%;
+ min-height: 0 !important;
+ padding: 0 !important;
+ background: none;
+ opacity: 0;
+ }
+}
+.trumbowyg-box.trumbowyg-editor-hidden {
+ .trumbowyg-textarea {
+ display: block;
+ }
+ .trumbowyg-editor {
+ display: none;
+ }
+}
+.trumbowyg-editor[contenteditable=true]:empty:before{
+ content: attr(placeholder);
+ color: #999;
+}
+
+.trumbowyg-button-pane {
+ position: relative;
+ width: 100%;
+ background: $light-color;
+ border-bottom: 1px solid darken($light-color, 7%);
+ margin: 0;
+ padding: 0;
+ list-style-type: none;
+ line-height: 10px;
+ backface-visibility: hidden;
+
+ li {
+ display: inline-block;
+ text-align: center;
+ overflow: hidden;
+ padding: 0 !important;
+
+ &.trumbowyg-separator {
+ width: 1px;
+ background: darken($light-color, 7%);
+ margin: 0 5px;
+ height: 35px;
+ }
+ }
+
+ &.trumbowyg-disable {
+ li:not(.trumbowyg-not-disable) button:not(.trumbowyg-active) {
+ opacity: .2;
+ cursor: default;
+ }
+ li.trumbowyg-separator {
+ background: darken($light-color, 3%);
+ }
+ }
+
+ li button {
+ padding: 1px 6px !important;
+ // At bottom of this stylesheet
+ }
+
+ &:not(.trumbowyg-disable) li button:hover,
+ &:not(.trumbowyg-disable) li button:focus,
+ li button.trumbowyg-active,
+ li.trumbowyg-not-disable button:hover,
+ li.trumbowyg-not-disable button:focus {
+ background-color: #FFF;
+ outline: none;
+ }
+
+ li .trumbowyg-open-dropdown:after {
+ display: block;
+ content: " ";
+ position: absolute;
+ top: 25px;
+ right: 3px;
+ height: 0;
+ width: 0;
+ border: 3px solid transparent;
+ border-top-color: #555;
+ }
+
+ .trumbowyg-buttons-right {
+ float: right;
+ width: auto;
+
+ button {
+ float: left;
+ }
+ }
+}
+
+.trumbowyg-dropdown {
+ width: 200px;
+ border: 1px solid $light-color;
+ padding: 5px 0;
+ border-top: none;
+ background: #FFF;
+ margin-left: -1px;
+ box-shadow: rgba(0, 0, 0, .1) 0 2px 3px;
+
+ button {
+ display: block;
+ width: 100%;
+ height: 35px;
+ line-height: 35px;
+ text-decoration: none;
+ background: #FFF;
+ padding: 0 14px;
+ color: #333 !important;
+ border: none;
+ cursor: pointer;
+ text-align: left;
+ font-size: 15px;
+ transition: all .15s;
+
+ &:hover,
+ &:focus {
+ background: $light-color;
+ }
+ }
+}
+
+
+/* Modal box */
+.trumbowyg-modal {
+ position: absolute;
+ top: 0;
+ left: 50%;
+ margin-left: -260px;
+ width: 520px;
+ height: 350px;
+ overflow: hidden;
+ backface-visibility: hidden;
+}
+.trumbowyg-modal-box {
+ position: absolute;
+ top: 0;
+ left: 50%;
+ margin-left: -250px;
+ width: 500px;
+ padding-bottom: 45px;
+ z-index: 1;
+ background-color: #FFF;
+ text-align: center;
+ font-size: 14px;
+ box-shadow: rgba(0, 0, 0, .2) 0 2px 3px;
+ backface-visibility: hidden;
+
+ .trumbowyg-modal-title {
+ font-size: 24px;
+ font-weight: bold;
+ margin: 0 0 20px;
+ padding: 15px 0 13px;
+ display: block;
+ border-bottom: 1px solid #EEE;
+ color: #333;
+ background: lighten($light-color, 5%);
+ }
+
+ .trumbowyg-progress {
+ width: 100%;
+ background: #F00;
+ height: 3px;
+ position: absolute;
+ top: 58px;
+
+ .trumbowyg-progress-bar {
+ background: #2BC06A;
+ height: 100%;
+ transition: width .15s linear;
+ }
+ }
+
+ label {
+ display: block;
+ position: relative;
+ margin: 15px 12px;
+ height: 27px;
+ line-height: 27px;
+ overflow: hidden;
+
+ .trumbowyg-input-infos {
+ display: block;
+ text-align: left;
+ height: 25px;
+ line-height: 25px;
+ transition: all .15;
+
+ span {
+ display: block;
+ color: darken($light-color, 45%);
+ background-color: lighten($light-color, 5%);
+ border: 1px solid #DEDEDE;
+ padding: 0 7px;
+ width: 137px;
+ }
+ span.trumbowyg-msg-error {
+ color: #e74c3c;
+ }
+ }
+
+ &.trumbowyg-input-error {
+ input,
+ textarea {
+ border: 1px solid #e74c3c;
+ }
+
+ .trumbowyg-input-infos {
+ margin-top: -27px;
+ }
+ }
+
+ input {
+ position: absolute;
+ top: 0;
+ right: 0;
+ height: 27px;
+ line-height: 27px;
+ border: 1px solid #DEDEDE;
+ background: transparent;
+ font-size: 14px;
+ width: 340px;
+ padding: 0 7px;
+ transition: all .15s;
+
+ &:hover,
+ &:focus {
+ outline: none;
+ border: 1px solid #95a5a6;
+ }
+ &:focus {
+ background: rgba(230, 230, 255, .1);
+ }
+ }
+ }
+
+ .error {
+ margin-top: 25px;
+ display: block;
+ color: red;
+ }
+
+ .trumbowyg-modal-button {
+ position: absolute;
+ bottom: 10px;
+ right: 0;
+ text-decoration: none;
+ color: #FFF;
+ display: block;
+ width: 100px;
+ height: 35px;
+ line-height: 33px;
+ margin: 0 10px;
+ background-color: #333;
+ border: none;
+ border-top: none;
+ cursor: pointer;
+ font-family: "Trebuchet MS", Helvetica, Verdana, sans-serif;
+ font-size: 16px;
+ transition: all .15s;
+
+ $modal-submit-color : #2ecc71;
+ &.trumbowyg-modal-submit {
+ right: 110px;
+ background: darken($modal-submit-color, 3%);
+
+ &:hover,
+ &:focus {
+ background: lighten($modal-submit-color, 5%);
+ outline: none;
+ }
+ &:active {
+ background: darken($modal-submit-color, 10%);
+ }
+ }
+
+ $modal-reset-color : #EEE;
+ &.trumbowyg-modal-reset {
+ color: #555;
+ background: darken($modal-reset-color, 3%);
+
+ &:hover,
+ &:focus {
+ background: lighten($modal-reset-color, 5%);
+ outline: none;
+ }
+ &:active {
+ background: darken($modal-reset-color, 10%);
+ }
+ }
+ }
+}
+.trumbowyg-overlay {
+ position: absolute;
+ background-color: rgba(255, 255, 255, .5);
+ width: 100%;
+ left: 0;
+ display: none;
+}
+
+
+/**
+ * Fullscreen
+ */
+body.trumbowyg-body-fullscreen {
+ overflow: hidden;
+}
+.trumbowyg-fullscreen {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ margin: 0;
+ padding: 0;
+ z-index: 99999;
+
+ &.trumbowyg-box,
+ .trumbowyg-editor {
+ border: none;
+ }
+ .trumbowyg-overlay {
+ height: 100% !important;
+ }
+}
+
+
+
+/*
+ * Reset for resetCss option
+ */
+.trumbowyg-editor {
+ object,
+ embed,
+ video,
+ img {
+ width: auto;
+ max-width: 100%;
+ }
+ video,
+ img {
+ height: auto;
+ }
+ img { cursor: move; }
+
+ &.trumbowyg-reset-css {
+ background: #FEFEFE !important;
+ font-family: "Trebuchet MS", Helvetica, Verdana, sans-serif !important;
+ font-size: 14px !important;
+ line-height: 1.45em !important;
+ white-space: normal !important;
+ color: #333;
+
+ a {
+ color: #15c !important;
+ text-decoration: underline !important;
+ }
+
+ div,
+ p,
+ ul,
+ ol,
+ blockquote {
+ box-shadow: none !important;
+ background: none !important;
+ margin: 0 !important;
+ margin-bottom: 15px !important;
+ line-height: 1.4em !important;
+ font-family: "Trebuchet MS", Helvetica, Verdana, sans-serif !important;
+ font-size: 14px !important;
+ border: none;
+ }
+ iframe,
+ object,
+ hr {
+ margin-bottom: 15px !important;
+ }
+ blockquote {
+ margin-left: 32px !important;
+ font-style: italic !important;
+ color: #555;
+ }
+ ul,
+ ol {
+ padding-left: 20px !important;
+ }
+ ul ul,
+ ol ol,
+ ul ol,
+ ol ul {
+ border: none;
+ margin: 2px !important;
+ padding: 0 !important;
+ padding-left: 24px !important;
+ }
+ hr {
+ display: block;
+ height: 1px;
+ border: none;
+ border-top: 1px solid #CCC;
+ }
+
+ h1,
+ h2,
+ h3,
+ h4 {
+ color: #111;
+ background: none;
+ margin: 0 !important;
+ padding: 0 !important;
+ font-weight: bold;
+ }
+
+ h1 {
+ font-size: 32px !important;
+ line-height: 38px !important;
+ margin-bottom: 20px !important;
+ }
+ h2 {
+ font-size: 26px !important;
+ line-height: 34px !important;
+ margin-bottom: 15px !important;
+ }
+ h3 {
+ font-size: 22px !important;
+ line-height: 28px !important;
+ margin-bottom: 7px !important;
+ }
+ h4 {
+ font-size: 16px !important;
+ line-height: 22px !important;
+ margin-bottom: 7px !important;
+ }
+ }
+}
+
+
+/*
+ * Black theme
+ */
+.trumbowyg-black {
+ .trumbowyg-button-pane {
+ background-color: $dark-color;
+ border-bottom-color: lighten($dark-color, 7%);
+
+ li {
+ &.trumbowyg-separator {
+ background-color: lighten($dark-color, 7%);
+ }
+ }
+
+ &.trumbowyg-disable {
+ li.trumbowyg-separator {
+ background-color: lighten($dark-color, 3%);
+ }
+ }
+
+ li button {
+ // At bottom of this stylesheet
+ }
+
+ &:not(.trumbowyg-disable) li button:hover,
+ &:not(.trumbowyg-disable) li button:focus,
+ li button.trumbowyg-active,
+ li.trumbowyg-not-disable button:hover,
+ li.trumbowyg-not-disable button:focus {
+ background-color: #555;
+ }
+
+ li .trumbowyg-open-dropdown:after {
+ border-top-color: #fff;
+ }
+ }
+ .trumbowyg-dropdown {
+ border-color: $dark-color;
+ background: $dark-color;
+
+ button {
+ background: $dark-color;
+ color: #fff;
+
+ &:hover,
+ &:focus {
+ background: #555;
+ }
+ }
+ }
+
+ // Modal box
+ .trumbowyg-modal-box {
+ background-color: $dark-color;
+
+ .trumbowyg-modal-title {
+ border-bottom: 1px solid #555;
+ color: #fff;
+ background: lighten($dark-color, 10%);
+ }
+
+ label {
+ display: block;
+ position: relative;
+ margin: 15px 12px;
+ height: 27px;
+ line-height: 27px;
+ overflow: hidden;
+
+ .trumbowyg-input-infos {
+ span {
+ color: #eee;
+ background-color: lighten($dark-color, 5%);
+ border-color: $dark-color;
+ }
+ span.trumbowyg-msg-error {
+ color: #e74c3c;
+ }
+ }
+
+ &.trumbowyg-input-error {
+ input,
+ textarea {
+ border-color: #e74c3c;
+ }
+ }
+
+ input {
+ border-color: $dark-color;
+ color: #eee;
+ background: #333;
+
+ &:hover,
+ &:focus {
+ border-color: #95a5a6;
+ }
+ &:focus {
+ background-color: rgba(230, 230, 255, .1);
+ }
+ }
+ }
+ }
+ .trumbowyg-overlay {
+ background-color: rgba(0, 0, 0, .5);
+ }
+}
+
+
+
+/*
+ * Buttons icons
+ */
+.trumbowyg-button-pane li button {
+ display: block;
+ position: relative;
+ text-indent: -9999px;
+ width: 35px;
+ height: 35px;
+ overflow: hidden;
+ background: transparent url($icons-black) no-repeat;
+ border: none;
+ cursor: pointer;
+ transition: background-color .15s, background-image .15s, opacity .15s;
+
+ &.trumbowyg-viewHTML-button { @include sprite-pos($view-html-black); }
+ &.trumbowyg-formatting-button { @include sprite-pos($formatting-black); }
+
+ /* English and others */
+ &.trumbowyg-bold-button, &.trumbowyg-strong-button { @include sprite-pos($bold-black); }
+ &.trumbowyg-italic-button, &.trumbowyg-em-button { @include sprite-pos($italic-black); }
+ &.trumbowyg-underline-button { @include sprite-pos($underline-black); }
+ &.trumbowyg-strikethrough-button, &.trumbowyg-del-button { @include sprite-pos($strikethrough-black); }
+
+ &.trumbowyg-link-button { @include sprite-pos($link-black); }
+
+ &.trumbowyg-insertImage-button { @include sprite-pos($image-black); }
+
+ &.trumbowyg-justifyLeft-button { @include sprite-pos($left-align-black); }
+ &.trumbowyg-justifyCenter-button { @include sprite-pos($center-align-black); }
+ &.trumbowyg-justifyRight-button { @include sprite-pos($right-align-black); }
+ &.trumbowyg-justifyFull-button { @include sprite-pos($justify-align-black); }
+
+ &.trumbowyg-unorderedList-button { @include sprite-pos($unordered-list-black); }
+ &.trumbowyg-orderedList-button { @include sprite-pos($ordered-list-black); }
+
+ &.trumbowyg-horizontalRule-button { @include sprite-pos($horizontal-rule-black); }
+
+ &.trumbowyg-removeformat-button { @include sprite-pos($removeformat-black); }
+
+ &.trumbowyg-fullscreen-button { @include sprite-pos($fullscreen-black); }
+ &.trumbowyg-close-button { @include sprite-pos($close-black); }
+}
+.trumbowyg-fullscreen .trumbowyg-button-pane li button.trumbowyg-fullscreen-button { @include sprite-pos($fullscreen-exit-black); }
+.trumbowyg-button-pane li {
+ &:first-child button { margin-left: 6px; }
+ &:last-child button { margin-right: 6px; }
+}
+
+/* French */
+.trumbowyg-fr .trumbowyg-button-pane li button {
+ &.trumbowyg-bold-button, &.trumbowyg-strong-button { @include sprite-pos($gras-black); }
+ &.trumbowyg-underline-button { @include sprite-pos($souligne-black); }
+ &.trumbowyg-strikethrough-button, &.trumbowyg-del-button { @include sprite-pos($barre-black); }
+}
+
+
+.trumbowyg-black {
+ .trumbowyg-button-pane li button {
+ background-image: url($icons-white);
+
+ &.trumbowyg-viewHTML-button { @include sprite-pos($view-html-white); }
+ &.trumbowyg-formatting-button { @include sprite-pos($formatting-white); }
+
+ /* English and others */
+ &.trumbowyg-bold-button, &.trumbowyg-strong-button { @include sprite-pos($bold-white); }
+ &.trumbowyg-italic-button, &.trumbowyg-em-button { @include sprite-pos($italic-white); }
+ &.trumbowyg-underline-button { @include sprite-pos($underline-white); }
+ &.trumbowyg-strikethrough-button, &.trumbowyg-del-button { @include sprite-pos($strikethrough-white); }
+
+ &.trumbowyg-link-button { @include sprite-pos($link-white); }
+
+ &.trumbowyg-insertImage-button { @include sprite-pos($image-white); }
+
+ &.trumbowyg-justifyLeft-button { @include sprite-pos($left-align-white); }
+ &.trumbowyg-justifyCenter-button { @include sprite-pos($center-align-white); }
+ &.trumbowyg-justifyRight-button { @include sprite-pos($right-align-white); }
+ &.trumbowyg-justifyFull-button { @include sprite-pos($justify-align-white); }
+
+ &.trumbowyg-unorderedList-button { @include sprite-pos($unordered-list-white); }
+ &.trumbowyg-orderedList-button { @include sprite-pos($ordered-list-white); }
+
+ &.trumbowyg-horizontalRule-button { @include sprite-pos($horizontal-rule-white); }
+
+ &.trumbowyg-removeformat-button { @include sprite-pos($removeformat-white); }
+
+ &.trumbowyg-fullscreen-button { @include sprite-pos($fullscreen-white); }
+ &.trumbowyg-close-button { @include sprite-pos($close-white); }
+ }
+ .trumbowyg-fullscreen .trumbowyg-button-pane li button.trumbowyg-fullscreen-button { @include sprite-pos($fullscreen-exit-white); }
+ .trumbowyg-button-pane li {
+ &:first-child button { margin-left: 6px; }
+ &:last-child button { margin-right: 6px; }
+ }
+
+ /* French */
+ .trumbowyg-fr .trumbowyg-button-pane li button {
+ &.trumbowyg-bold-button, &.trumbowyg-strong-button { @include sprite-pos($gras-white); }
+ &.trumbowyg-underline-button { @include sprite-pos($souligne-white); }
+ &.trumbowyg-strikethrough-button, &.trumbowyg-del-button { @include sprite-pos($barre-white); }
+ }
+}
+
+
+
+
+
+@media only screen and (-webkit-min-device-pixel-ratio: 1.3), only screen and (min--moz-device-pixel-ratio: 1.3), only screen and (-o-min-device-pixel-ratio: 4/3), only screen and (min-device-pixel-ratio: 1.3), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx){
+ .trumbowyg-button-pane li button {
+ background-size: round($sprite-width-black-2x / 2) round($sprite-height-black-2x / 2) !important;
+ background-image: url($icons-black-2x) !important;
+
+ &.trumbowyg-viewHTML-button { @include sprite-pos($view-html-black-2x, true); }
+ &.trumbowyg-formatting-button { @include sprite-pos($formatting-black-2x, true); }
+
+ /* English and others */
+ &.trumbowyg-bold-button, &.trumbowyg-strong-button { @include sprite-pos($bold-black-2x, true); }
+ &.trumbowyg-italic-button, &.trumbowyg-em-button { @include sprite-pos($italic-black-2x, true); }
+ &.trumbowyg-underline-button { @include sprite-pos($underline-black-2x, true); }
+ &.trumbowyg-strikethrough-button, &.trumbowyg-del-button { @include sprite-pos($strikethrough-black-2x, true); }
+
+ &.trumbowyg-link-button { @include sprite-pos($link-black-2x, true); }
+
+ &.trumbowyg-insertImage-button { @include sprite-pos($image-black-2x, true); }
+
+ &.trumbowyg-justifyLeft-button { @include sprite-pos($left-align-black-2x, true); }
+ &.trumbowyg-justifyCenter-button { @include sprite-pos($center-align-black-2x, true); }
+ &.trumbowyg-justifyRight-button { @include sprite-pos($right-align-black-2x, true); }
+ &.trumbowyg-justifyFull-button { @include sprite-pos($justify-align-black-2x, true); }
+
+ &.trumbowyg-unorderedList-button { @include sprite-pos($unordered-list-black-2x, true); }
+ &.trumbowyg-orderedList-button { @include sprite-pos($ordered-list-black-2x, true); }
+
+ &.trumbowyg-horizontalRule-button { @include sprite-pos($horizontal-rule-black-2x, true); }
+
+ &.trumbowyg-removeformat-button { @include sprite-pos($removeformat-black-2x, true); }
+
+ &.trumbowyg-fullscreen-button { @include sprite-pos($fullscreen-black-2x, true); }
+ &.trumbowyg-close-button { @include sprite-pos($close-black-2x, true); }
+ }
+ .trumbowyg-fullscreen .trumbowyg-button-pane li a.trumbowyg-fullscreen-button { @include sprite-pos($fullscreen-exit-black-2x, true); }
+
+ /* French */
+ .trumbowyg-fr .trumbowyg-button-pane li button {
+ &.trumbowyg-bold-button, &.trumbowyg-strong-button { @include sprite-pos($gras-black-2x, true); }
+ &.trumbowyg-underline-button { @include sprite-pos($souligne-black-2x, true); }
+ &.trumbowyg-strikethrough-button, &.trumbowyg-del-button { @include sprite-pos($barre-black-2x, true); }
+ }
+
+
+ /* Black theme */
+ .trumbowyg-black {
+ .trumbowyg-button-pane li button {
+ background-size: round($sprite-width-white-2x / 2) round($sprite-height-white-2x / 2) !important;
+ background-image: url($icons-white-2x) !important;
+
+ &.trumbowyg-viewHTML-button { @include sprite-pos($view-html-white-2x, true); }
+ &.trumbowyg-formatting-button { @include sprite-pos($formatting-white-2x, true); }
+
+ /* English and others */
+ &.trumbowyg-bold-button, &.trumbowyg-strong-button { @include sprite-pos($bold-white-2x, true); }
+ &.trumbowyg-italic-button, &.trumbowyg-em-button { @include sprite-pos($italic-white-2x, true); }
+ &.trumbowyg-underline-button { @include sprite-pos($underline-white-2x, true); }
+ &.trumbowyg-strikethrough-button, &.trumbowyg-del-button { @include sprite-pos($strikethrough-white-2x, true); }
+
+ &.trumbowyg-link-button { @include sprite-pos($link-white-2x, true); }
+
+ &.trumbowyg-insertImage-button { @include sprite-pos($image-white-2x, true); }
+
+ &.trumbowyg-justifyLeft-button { @include sprite-pos($left-align-white-2x, true); }
+ &.trumbowyg-justifyCenter-button { @include sprite-pos($center-align-white-2x, true); }
+ &.trumbowyg-justifyRight-button { @include sprite-pos($right-align-white-2x, true); }
+ &.trumbowyg-justifyFull-button { @include sprite-pos($justify-align-white-2x, true); }
+
+ &.trumbowyg-unorderedList-button { @include sprite-pos($unordered-list-white-2x, true); }
+ &.trumbowyg-orderedList-button { @include sprite-pos($ordered-list-white-2x, true); }
+
+ &.trumbowyg-horizontalRule-button { @include sprite-pos($horizontal-rule-white-2x, true); }
+
+ &.trumbowyg-removeformat-button { @include sprite-pos($removeformat-white-2x, true); }
+
+ &.trumbowyg-fullscreen-button { @include sprite-pos($fullscreen-white-2x, true); }
+ &.trumbowyg-close-button { @include sprite-pos($close-white-2x, true); }
+ }
+ .trumbowyg-fullscreen .trumbowyg-button-pane li a.trumbowyg-fullscreen-button { @include sprite-pos($fullscreen-exit-white-2x, true); }
+
+ /* French */
+ .trumbowyg-fr .trumbowyg-button-pane li button {
+ &.trumbowyg-bold-button, &.trumbowyg-strong-button { @include sprite-pos($gras-white-2x, true); }
+ &.trumbowyg-underline-button { @include sprite-pos($souligne-white-2x, true); }
+ &.trumbowyg-strikethrough-button, &.trumbowyg-del-button { @include sprite-pos($barre-white-2x, true); }
+ }
+ }
+}
\ No newline at end of file
diff --git a/plugins/trumbowyg/language/en_US.json b/plugins/trumbowyg/language/en_US.json
new file mode 100755
index 00000000..37563f0b
--- /dev/null
+++ b/plugins/trumbowyg/language/en_US.json
@@ -0,0 +1,12 @@
+{
+ "plugin-data":
+ {
+ "name": "Trumbowyg",
+ "description": "Trumbowyg is a very small jQuery plugin for creating a powerful WYSIWYG editor.",
+ "author": "Fred",
+ "email": "",
+ "website": "",
+ "version":"2.0.0-beta.6",
+ "releaseDate": "2015-07-27"
+ }
+}
\ No newline at end of file
diff --git a/plugins/trumbowyg/language/fr_FR.json b/plugins/trumbowyg/language/fr_FR.json
new file mode 100755
index 00000000..4643ce48
--- /dev/null
+++ b/plugins/trumbowyg/language/fr_FR.json
@@ -0,0 +1,12 @@
+{
+ "plugin-data":
+ {
+ "name": "Trumbowyg",
+ "description": "Trumbowyg est un éditeur WYSIWYG comme il en existe d'autres, si ce n'est que l'objectif de celui-ci est d'être le plus simple et le plus léger possible.",
+ "author": "Fred",
+ "email": "",
+ "website": "",
+ "version":"2.0.0-beta.6",
+ "releaseDate": "2015-07-27"
+ }
+}
\ No newline at end of file
diff --git a/plugins/trumbowyg/plugin.php b/plugins/trumbowyg/plugin.php
new file mode 100755
index 00000000..5463b353
--- /dev/null
+++ b/plugins/trumbowyg/plugin.php
@@ -0,0 +1,54 @@
+loadWhenController))
+ {
+ $language = $Site->shortLanguage();
+
+ $html = '';
+ $html .= '';
+ $html .= ' ';
+
+ // CSS fix for Bludit
+ $html .= '';
+ }
+
+ return $html;
+ }
+
+ public function onAdminBodyEnd()
+ {
+ global $Language;
+ global $Site;
+ global $layout;
+
+ $html = '';
+
+ if(in_array($layout['controller'], $this->loadWhenController))
+ {
+ $language = $Site->shortLanguage();
+
+ $html = '';
+ }
+
+ return $html;
+ }
+}
diff --git a/plugins/trumbowyg/trumbowyg/langs/ar.min.js b/plugins/trumbowyg/trumbowyg/langs/ar.min.js
new file mode 100755
index 00000000..0f83dd37
--- /dev/null
+++ b/plugins/trumbowyg/trumbowyg/langs/ar.min.js
@@ -0,0 +1,9 @@
+/* ===========================================================
+ * ar.js
+ * Arabic translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Abo Mokh ahmed (abomokhahmed)
+ * Github : https://github.com/abomokhahmed
+ */
+jQuery.trumbowyg.langs.ar={_dir:"rtl",viewHTML:"إعرض-HTML",formatting:"تصميم",p:"فقرة",blockquote:"اقتباس",code:"كود",header:"رئيسي",bold:"عريض",italic:"مائل",strikethrough:"مشطوب",underline:"خطّ سفلي",strong:"بارز",em:"تغميق",del:"حذف",unorderedList:"قائمة غير مرتّبة",orderedList:"قائمة مرتّبة",insertImage:"إدخال صورة",insertVideo:"إدخال فيديو",link:"رابط",createLink:"انشاء رابط",unlink:"حذف رابط",justifyLeft:"تصحيح للشمال",justifyCenter:"تصحيح للمركز",justifyRight:"تصحيح لليمين",justifyFull:"تصحيح لكلا الإتّجاهين",horizontalRule:"إدخال خطّ أفقي",fullscreen:"شاشة واسعة",close:"إغلاق",submit:"أرسل",reset:"تهيئة من حديد",required:"إلزامي",description:"وصف",title:"عنوان",text:"نصّ"};
\ No newline at end of file
diff --git a/plugins/trumbowyg/trumbowyg/langs/ca.min.js b/plugins/trumbowyg/trumbowyg/langs/ca.min.js
new file mode 100755
index 00000000..f6cf1f24
--- /dev/null
+++ b/plugins/trumbowyg/trumbowyg/langs/ca.min.js
@@ -0,0 +1,11 @@
+/* ===========================================================
+ * ca.js
+ * Catalan translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Àlfons Sánchez (alsanan)
+ * Twitter : @alsanan
+ * Website : about.me/alsanan
+ * Github : https://github.com/alsanan
+ */
+jQuery.trumbowyg.langs.ca={viewHTML:"Veure HTML",formatting:"Formatar",p:"Paragraf",blockquote:"Citació",code:"Codi",header:"Títol",bold:"Negreta",italic:"Itàlica",strikethrough:"Suprimir",underline:"Subratllat",strong:"Forta",em:"Èmfasi",del:"Apagar",unorderedList:"Lista desordenada",orderedList:"Lista ordenada",insertImage:"Inserir imatge",insertVideo:"Inserir vídeo",link:"Enllaç",createLink:"Crear un enllaç",unlink:"Eliminar enllaç",justifyLeft:"Alinear a esquerra",justifyCenter:"Centrar",justifyRight:"Alinear a dreta",justifyFull:"Justificar",horizontalRule:"Inserir separador horitzontal",fullscreen:"Pantalla completa",close:"Tancar",submit:"Enviar",reset:"Reiniciar",required:"Obligatori",description:"Descripció",title:"Títol",text:"Text"};
\ No newline at end of file
diff --git a/plugins/trumbowyg/trumbowyg/langs/cs.min.js b/plugins/trumbowyg/trumbowyg/langs/cs.min.js
new file mode 100755
index 00000000..0666e151
--- /dev/null
+++ b/plugins/trumbowyg/trumbowyg/langs/cs.min.js
@@ -0,0 +1,8 @@
+/* ===========================================================
+ * cs.js
+ * Czech translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Jan Svoboda (https://github.com/svoboda-jan)
+ */
+jQuery.trumbowyg.langs.cs={viewHTML:"Zobrazit HTML",formatting:"Formátování",p:"Odstavec",blockquote:"Citace",code:"Kód",header:"Nadpis",bold:"Tučné",italic:"Kurzíva",strikethrough:"Přeškrtnuté",underline:"Podtržené",strong:"Tučné",em:"Zvýraznit",del:"Smazat",unorderedList:"Netříděný seznam",orderedList:"Tříděný seznam",insertImage:"Vložit obrázek",insertVideo:"Vložit video",link:"Odkaz",createLink:"Vložit odkaz",unlink:"Smazat odkaz",justifyLeft:"Zarovnat doleva",justifyCenter:"Zarovnat na střed",justifyRight:"Zarovnat doprava",justifyFull:"Zarovnat do bloku",horizontalRule:"Vložit vodorovnou čáru",fullscreen:"Režim celé obrazovky",close:"Zavřít",submit:"Potvrdit",reset:"Zrušit",required:"Povinné",description:"Popis",title:"Nadpis",text:"Text"};
\ No newline at end of file
diff --git a/plugins/trumbowyg/trumbowyg/langs/da.min.js b/plugins/trumbowyg/trumbowyg/langs/da.min.js
new file mode 100755
index 00000000..47adf1a2
--- /dev/null
+++ b/plugins/trumbowyg/trumbowyg/langs/da.min.js
@@ -0,0 +1,9 @@
+/* ===========================================================
+ * da.js
+ * Danish translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Christian Pedersen
+ * Github : https://github.com/chripede
+ */
+jQuery.trumbowyg.langs.da={viewHTML:"Vis HTML",formatting:"Formatter",p:"Afsnit",blockquote:"Citat",code:"Kode",header:"Overskrift",bold:"Fed",italic:"Kursiv",strikethrough:"Gennemstreg",underline:"Understreg",strong:"Vigtig",em:"Fremhæv",del:"Slettet",unorderedList:"Uordnet liste",orderedList:"Ordnet liste",insertImage:"Indsæt billede",insertVideo:"Indsæt video",link:"Link",createLink:"Indsæt link",unlink:"Fjern link",justifyLeft:"Venstrestil",justifyCenter:"Centrer",justifyRight:"Højrestil",justifyFull:"Lige margener",horizontalRule:"Horisontal linie",fullscreen:"Fuld skærm",close:"Luk",submit:"Bekræft",reset:"Annuller",required:"Påkrævet",description:"Beskrivelse",title:"Titel",text:"Tekst"};
\ No newline at end of file
diff --git a/plugins/trumbowyg/trumbowyg/langs/de.min.js b/plugins/trumbowyg/trumbowyg/langs/de.min.js
new file mode 100755
index 00000000..15e3ae02
--- /dev/null
+++ b/plugins/trumbowyg/trumbowyg/langs/de.min.js
@@ -0,0 +1,9 @@
+/* ===========================================================
+ * de.js
+ * German translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Manfred Timm
+ * Github : https://github.com/Manfred62
+ */
+jQuery.trumbowyg.langs.de={viewHTML:"HTML anzeigen",formatting:"Formatieren",p:"Absatz",blockquote:"Zitat",code:"Code",header:"Überschrift",bold:"Fett",italic:"Kursiv",strikethrough:"Durchgestrichen",underline:"Unterstrichen",strong:"Wichtig",em:"Betont",del:"Gelöscht",unorderedList:"Ungeordnete Liste",orderedList:"Geordnete Liste",insertImage:"Bild einfügen",insertVideo:"Video einfügen",link:"Link",createLink:"Link einfügen",unlink:"Link entfernen",justifyLeft:"Links ausrichten",justifyCenter:"Zentrieren",justifyRight:"Rechts ausrichten",justifyFull:"Blocksatz",horizontalRule:"Horizontale Linie einfügen",fullscreen:"Vollbild",close:"Schliessen",submit:"Bestätigen",reset:"Rücksetzen",required:"Erforderlich",description:"Beschreibung",title:"Titel",text:"Text"};
\ No newline at end of file
diff --git a/plugins/trumbowyg/trumbowyg/langs/es.min.js b/plugins/trumbowyg/trumbowyg/langs/es.min.js
new file mode 100755
index 00000000..da16ed52
--- /dev/null
+++ b/plugins/trumbowyg/trumbowyg/langs/es.min.js
@@ -0,0 +1,9 @@
+/* ===========================================================
+ * es.js
+ * Spanish translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Moisés Márquez
+ * Email : moises.marquez.g@gmail.com
+ */
+jQuery.trumbowyg.langs.es={viewHTML:"Ver HTML",formatting:"Formato",p:"Párrafo",blockquote:"Cita",code:"Código",header:"Título",bold:"Negrita",italic:"Cursiva",strikethrough:"Tachado",underline:"Subrayado",strong:"Negrita",em:"Énfasis",del:"Borrar",unorderedList:"Lista Desordenada",orderedList:"Lista Ordenada",insertImage:"Insertar una imagen",insertVideo:"Insertar un vídeo",link:"Enlace",createLink:"Insertar un enlace",unlink:"Suprimir un enlace",justifyLeft:"Izquierda",justifyCenter:"Centrar",justifyRight:"Derecha",justifyFull:"Justificado",horizontalRule:"Insertar separador horizontal",fullscreen:"Pantalla completa",close:"Cerrar",submit:"Enviar",reset:"Cancelar",required:"Obligatorio",description:"Descripción",title:"Título",text:"Texto"};
\ No newline at end of file
diff --git a/plugins/trumbowyg/trumbowyg/langs/es_ar.min.js b/plugins/trumbowyg/trumbowyg/langs/es_ar.min.js
new file mode 100755
index 00000000..0d4ed99a
--- /dev/null
+++ b/plugins/trumbowyg/trumbowyg/langs/es_ar.min.js
@@ -0,0 +1,9 @@
+/* ===========================================================
+ * es_ar.js
+ * Spanish (Argentina) translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Félix Vera
+ * Email : felix.vera@gmail.com
+ */
+jQuery.trumbowyg.langs.es_ar={viewHTML:"Ver HTML",formatting:"Formato",p:"Párrafo",blockquote:"Cita",code:"Código",header:"Título",bold:"Negrita",italic:"Itálica",strikethrough:"Tachado",underline:"Subrayado",strong:"Fuere",em:"Énfasis",del:"Borrar",unorderedList:"Lista Desordenada",orderedList:"Lista Ordenada",insertImage:"Insertar una imagen",insertVideo:"Insertar un video",link:"Vínculo",createLink:"Insertar un vínculo",unlink:"Suprimir un vínculo",justifyLeft:"Alinear a la Izquierda",justifyCenter:"Centrar",justifyRight:"Alinear a la Derecha",justifyFull:"Justificado",horizontalRule:"Insertar separado Horizontal",fullscreen:"Pantalla Completa",close:"Cerrar",submit:"Enviar",reset:"Cancelar",required:"Obligatorio",description:"Descripción",title:"Título",text:"Texto"};
\ No newline at end of file
diff --git a/plugins/trumbowyg/trumbowyg/langs/fa.min.js b/plugins/trumbowyg/trumbowyg/langs/fa.min.js
new file mode 100755
index 00000000..c3f9843c
--- /dev/null
+++ b/plugins/trumbowyg/trumbowyg/langs/fa.min.js
@@ -0,0 +1,10 @@
+/* ===========================================================
+ * fa.js
+ * Persian translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Kiarash Soleimanzadeh
+ * Github : https://github.com/kiyarash
+ * Email : kiarash.s@hotmail.com
+ */
+jQuery.trumbowyg.langs.fa={viewHTML:"نمایش کد اچ تی ام ال",formatting:"قالب بندی",p:"پاراگراف",blockquote:"نقل قول",code:"کد",header:"سر تیتر",bold:"ضخیم",italic:"مورب",strikethrough:"میان خط دار",underline:"زیر خط دار",strong:"برجسته",em:"مورب",del:"حذف شده",unorderedList:"لیست نامرتب",orderedList:"لیست مرتب",insertImage:"درج تصویر",insertVideo:"درج ویدئو",link:"لینک",createLink:"درج لینک",unlink:"حذف لینک",justifyLeft:"تراز به چپ",justifyCenter:"تراز به وسط",justifyRight:"تراز به راست",justifyFull:"تراز به چپ و راست",horizontalRule:"درج خط افقی",fullscreen:"تمام صفحه",close:"بستن",submit:"تائید",reset:"انصراف",required:"اجباری",description:"توضیحات",title:"عنوان",text:"متن"};
\ No newline at end of file
diff --git a/plugins/trumbowyg/trumbowyg/langs/fi.min.js b/plugins/trumbowyg/trumbowyg/langs/fi.min.js
new file mode 100755
index 00000000..e6dde022
--- /dev/null
+++ b/plugins/trumbowyg/trumbowyg/langs/fi.min.js
@@ -0,0 +1,9 @@
+/* ===========================================================
+ * fi.js
+ * Finnish translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Teppo Koivula (teppokoivula)
+ * Github : https://github.com/teppokoivula
+ */
+jQuery.trumbowyg.langs.fi={viewHTML:"Näytä HTML",formatting:"Muotoilu",p:"Kappale",blockquote:"Lainaus",code:"Koodi",header:"Otsikko",bold:"Lihavointi",italic:"Kursivointi",strikethrough:"Yliviivaus",underline:"Allevivaus",strong:"Vahvennus",em:"Painotus",del:"Poistettu",unorderedList:"Numeroimaton lista",orderedList:"Numeroitu lista",insertImage:"Lisää kuva",insertVideo:"Lisää video",link:"Linkki",createLink:"Luo linkki",unlink:"Poista linkki",justifyLeft:"Asemoi vasemmalle",justifyCenter:"Keskitä",justifyRight:"Asemoi oikealle",justifyFull:"Tasaa",horizontalRule:"Vaakaviiva",fullscreen:"Kokoruutu",close:"Sulje",submit:"Lähetä",reset:"Palauta",required:"Pakollinen",description:"Kuvaus",title:"Otsikko",text:"Teksti"};
\ No newline at end of file
diff --git a/plugins/trumbowyg/trumbowyg/langs/fr.min.js b/plugins/trumbowyg/trumbowyg/langs/fr.min.js
new file mode 100755
index 00000000..7274d757
--- /dev/null
+++ b/plugins/trumbowyg/trumbowyg/langs/fr.min.js
@@ -0,0 +1,10 @@
+/* ===========================================================
+ * fr.js
+ * French translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Alexandre Demode (Alex-D)
+ * Twitter : @AlexandreDemode
+ * Website : alex-d.fr
+ */
+jQuery.trumbowyg.langs.fr={viewHTML:"Voir le HTML",formatting:"Format",p:"Paragraphe",blockquote:"Citation",code:"Code",header:"Titre",bold:"Gras",italic:"Italique",strikethrough:"Rayé",underline:"Souligné",strong:"Fort",em:"Emphase",del:"Supprimé",unorderedList:"Liste à puces",orderedList:"Liste ordonnée",insertImage:"Insérer une image",insertVideo:"Insérer une video",link:"Lien",createLink:"Insérer un lien",unlink:"Supprimer le lien",justifyLeft:"Aligner à gauche",justifyCenter:"Centrer",justifyRight:"Aligner à droite",justifyFull:"Justifier",horizontalRule:"Insérer un séparateur horizontal",fullscreen:"Plein écran",close:"Fermer",submit:"Valider",reset:"Annuler",required:"Obligatoire",description:"Description",title:"Titre",text:"Texte"};
\ No newline at end of file
diff --git a/plugins/trumbowyg/trumbowyg/langs/he.min.js b/plugins/trumbowyg/trumbowyg/langs/he.min.js
new file mode 100755
index 00000000..a706ecd0
--- /dev/null
+++ b/plugins/trumbowyg/trumbowyg/langs/he.min.js
@@ -0,0 +1,9 @@
+/* ===========================================================
+* he.js
+* Hebrew translation for Trumbowyg
+* http://alex-d.github.com/Trumbowyg
+* ===========================================================
+* Author : Udi Doron (udidoron)
+* Github : https://github.com/udidoron
+*/
+jQuery.trumbowyg.langs.he={_dir:"rtl",viewHTML:"צפה ב-HTML",formatting:"פורמט",p:"פסקה",blockquote:"ציטוט",code:"קוד",header:"ראשית",bold:"מודגש",italic:"נטוי",strikethrough:"קו חוצה",underline:"קו תחתון",strong:"בולט",em:"הדגשה",del:"נמחק",unorderedList:"רשימה ללא סדר",orderedList:"רשימה מסודרת",insertImage:"הכנס תמונה",insertVideo:"הכנס סרטון",link:"קישור",createLink:"צור קישור",unlink:"הסר קישור",justifyLeft:"ישר לשמאל",justifyCenter:"מרכז",justifyRight:"ישר לימין",justifyFull:"ישר לשני הצדדים",horizontalRule:"הכנס קו אופקי",fullscreen:"מסך מלא",close:"סגור",submit:"שלח",reset:"אתחל מחדש",required:"נחוץ",description:"תיאור",title:"כותרת",text:"טקסט"};
\ No newline at end of file
diff --git a/plugins/trumbowyg/trumbowyg/langs/id.min.js b/plugins/trumbowyg/trumbowyg/langs/id.min.js
new file mode 100755
index 00000000..418fc885
--- /dev/null
+++ b/plugins/trumbowyg/trumbowyg/langs/id.min.js
@@ -0,0 +1,11 @@
+/* ===========================================================
+ * id.js
+ * Indonesian translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Rezha Julio (kimiamania)
+ * Twitter : @kimiamania
+ * Website : http://rezhajulio.web.id
+ * Github : https://github.com/kimiamania
+ */
+jQuery.trumbowyg.langs.id={viewHTML:"Lihat HTML",formatting:"Penyusunan",p:"Paragraf",blockquote:"Kutipan",code:"Kode",header:"Kepala",bold:"Tebal",italic:"Miring",strikethrough:"Coret",underline:"Garis bawah",strong:"Tebal",em:"Miring",del:"Dicoret",unorderedList:"Daftar tak teratur",orderedList:"Daftar teratur",insertImage:"Sisipkan gambar",insertVideo:"Sisipkan video",link:"Tautan",createLink:"Sisipkan Tautan",unlink:"Singkirkan tautan",justifyLeft:"Rata kiri",justifyCenter:"Rata Tengah",justifyRight:"Rata kanan",justifyFull:"Rata kiri dan kanan",horizontalRule:"Sisipkan garis mendatar",fullscreen:"Layar penuh",close:"Tutup",submit:"Setuju",reset:"Batal",required:"Diperlukan",description:"Deskripsi",title:"Judul",text:"Teks"};
\ No newline at end of file
diff --git a/plugins/trumbowyg/trumbowyg/langs/it.min.js b/plugins/trumbowyg/trumbowyg/langs/it.min.js
new file mode 100755
index 00000000..da7fd4b0
--- /dev/null
+++ b/plugins/trumbowyg/trumbowyg/langs/it.min.js
@@ -0,0 +1,8 @@
+/* ===========================================================
+ * it.js
+ * Italian translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Mirko Buffoni
+ */
+jQuery.trumbowyg.langs.it={viewHTML:"Mostra HTML",formatting:"Formattazione",p:"Paragrafo",blockquote:"Citazione",code:"Codice",header:"Intestazione",bold:"Grassetto",italic:"Italico",strikethrough:"Barrato",underline:"Sottolineato",strong:"Rafforza",em:"Enfatizza",del:"Cancella",unorderedList:"Elenco puntato",orderedList:"Elenco numerato",insertImage:"Inserisci immagine",insertVideo:"Inserisci video",link:"Collegamento",createLink:"Crea un collegamento",unlink:"Elimina collegamento",justifyLeft:"Allinea a sinistra",justifyCenter:"Centra",justifyRight:"Allinea a destra",justifyFull:"Giustifica",horizontalRule:"Inserisci un separatore orizzontale",fullscreen:"Schermo intero",close:"Chiudi",submit:"Invia",reset:"Annulla",required:"Obbligatorio",description:"Descrizione",title:"Titolo",text:"Testo"};
\ No newline at end of file
diff --git a/plugins/trumbowyg/trumbowyg/langs/ja.min.js b/plugins/trumbowyg/trumbowyg/langs/ja.min.js
new file mode 100755
index 00000000..ff34a2f0
--- /dev/null
+++ b/plugins/trumbowyg/trumbowyg/langs/ja.min.js
@@ -0,0 +1,10 @@
+/* ===========================================================
+ * ja.js
+ * Japanese translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Kouta Fukuhara (foo9)
+ * Twitter : @foo9
+ * Website : https://github.com/foo9
+ */
+jQuery.trumbowyg.langs.ja={viewHTML:"HTML表示",formatting:"フォーマット",p:"段落",blockquote:"引用",code:"コード",header:"見出し",bold:"太字",italic:"斜体",strikethrough:"取り消し線",underline:"下線",strong:"太字",em:"斜体",del:"取り消し線",unorderedList:"順序なしリスト",orderedList:"順序ありリスト",insertImage:"画像の挿入",insertVideo:"動画の挿入",link:"リンク",createLink:"リンクの作成",unlink:"リンクの削除",justifyLeft:"左揃え",justifyCenter:"中央揃え",justifyRight:"右揃え",justifyFull:"両端揃え",horizontalRule:"横罫線",fullscreen:"全画面表示",close:"閉じる",submit:"送信",reset:"キャンセル",required:"必須",description:"説明",title:"タイトル",text:"テキスト"};
\ No newline at end of file
diff --git a/plugins/trumbowyg/trumbowyg/langs/ko.min.js b/plugins/trumbowyg/trumbowyg/langs/ko.min.js
new file mode 100755
index 00000000..76e9c248
--- /dev/null
+++ b/plugins/trumbowyg/trumbowyg/langs/ko.min.js
@@ -0,0 +1,10 @@
+/* ===========================================================
+ * ko.js
+ * Korean translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : JoongSeob Vito Kim (dorajistyle)
+ * Blog : http://dorajistyle.pe.kr
+ * Github : https://github.com/dorajistyle
+ */
+jQuery.trumbowyg.langs.ko={viewHTML:"HTML로 보기",formatting:"양식",p:"문단",blockquote:"인용부호",code:"코드",header:"머릿말",bold:"진하게",italic:"기울임",strikethrough:"취소선",underline:"밑줄",strong:"굵게",em:"강조",del:"취소",unorderedList:"순차 목록",orderedList:"비순차 목록",insertImage:"이미지 넣기",insertVideo:"비디오 넣기",link:"링크",createLink:"링크 넣기",unlink:"링크 없애기",justifyLeft:"왼쪽 정렬",justifyCenter:"가운데 정렬",justifyRight:"오른쪽 정렬",justifyFull:"혼합 정렬",horizontalRule:"가로줄 넣기",fullscreen:"전체 화면",close:"닫기",submit:"전송",reset:"초기화",required:"꼭 입력해야 합니다.",description:"설명",title:"제목",text:"본문 내용"};
\ No newline at end of file
diff --git a/plugins/trumbowyg/trumbowyg/langs/nl.min.js b/plugins/trumbowyg/trumbowyg/langs/nl.min.js
new file mode 100755
index 00000000..ddd7b1bd
--- /dev/null
+++ b/plugins/trumbowyg/trumbowyg/langs/nl.min.js
@@ -0,0 +1,9 @@
+/* ===========================================================
+ * nl.js
+ * Dutch translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Danny Hiemstra
+ * Github : https://github.com/dhiemstra
+ */
+jQuery.trumbowyg.langs.nl={viewHTML:"HTML bekijken",formatting:"Opmaak",p:"Paragraaf",blockquote:"Citaat",code:"Code",header:"Kop",bold:"Vet",italic:"Cursief",strikethrough:"Doorhalen",underline:"Onderlijnen",strong:"Sterk",em:"Nadruk",del:"Verwijderd",unorderedList:"Ongenummerde lijst",orderedList:"Genummerde lijst",insertImage:"Afbeelding invoegen",insertVideo:"Video invoegen",link:"Link",createLink:"Link maken",unlink:"Link verwijderen",justifyLeft:"Links uitlijnen",justifyCenter:"Centreren",justifyRight:"Rechts uitlijnen",justifyFull:"Uitvullen",horizontalRule:"Horizontale lijn",removeFormat:"Opmaak verwijderen",fullscreen:"Volledig scherm",close:"Sluiten",submit:"Verzenden",reset:"Herstellen",required:"Verplicht",description:"Omschrijving",title:"Titel",text:"Tekst"};
\ No newline at end of file
diff --git a/plugins/trumbowyg/trumbowyg/langs/pl.min.js b/plugins/trumbowyg/trumbowyg/langs/pl.min.js
new file mode 100755
index 00000000..7d7a436a
--- /dev/null
+++ b/plugins/trumbowyg/trumbowyg/langs/pl.min.js
@@ -0,0 +1,9 @@
+/* ===========================================================
+ * pl.js
+ * Polish translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Paweł Abramowicz
+ * Github : https://github.com/pawelabrams
+ */
+jQuery.trumbowyg.langs.pl={viewHTML:"Pokaż HTML",formatting:"Format",p:"Akapit",blockquote:"Cytat",code:"Kod",header:"Nagłówek",bold:"Pogrubienie",italic:"Pochylenie",strikethrough:"Przekreślenie",underline:"Podkreślenie",strong:"Wytłuszczenie",em:"Uwydatnienie",del:"Usunięte",unorderedList:"Lista nieuporządkowana",orderedList:"Lista uporządkowana",insertImage:"Wstaw obraz",insertVideo:"Wstaw film",link:"Link",createLink:"Wstaw link",unlink:"Usuń link",justifyLeft:"Wyrównaj do lewej",justifyCenter:"Wyśrodkuj",justifyRight:"Wyrównaj do prawej",justifyFull:"Wyjustuj",horizontalRule:"Odkreśl linią",fullscreen:"Pełny ekran",close:"Zamknij",submit:"Zastosuj",reset:"Przywróć",required:"Wymagane",description:"Opis",title:"Tytuł",text:"Tekst"};
\ No newline at end of file
diff --git a/plugins/trumbowyg/trumbowyg/langs/pt.min.js b/plugins/trumbowyg/trumbowyg/langs/pt.min.js
new file mode 100755
index 00000000..462fda3a
--- /dev/null
+++ b/plugins/trumbowyg/trumbowyg/langs/pt.min.js
@@ -0,0 +1,11 @@
+/* ===========================================================
+ * pt.js
+ * Portuguese translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Ramiro Varandas Jr (ramirovjr)
+ * Twitter : @ramirovjnr
+ * Website : about.me/ramirovjnr
+ * Github : https://github.com/ramirovjr
+ */
+jQuery.trumbowyg.langs.pt={viewHTML:"Ver HTML",formatting:"Formatar",p:"Paragráfo",blockquote:"Citação",code:"Código",header:"Título",bold:"Negrito",italic:"Itálico",strikethrough:"Suprimir",underline:"Sublinhado",strong:"Forte",em:"Ênfase",del:"Apagar",unorderedList:"Lista não ordenada",orderedList:"Liste ordenada",insertImage:"Inserir imagem",insertVideo:"Inserir vídeo",link:"Link",createLink:"Criar um link",unlink:"Remover link",justifyLeft:"Alinhar a esquerda",justifyCenter:"Centralizar",justifyRight:"Alinhar a direita",justifyFull:"Justificar",horizontalRule:"Inserir separador horizontal",fullscreen:"Tela cheia",close:"Fechar",submit:"Enviar",reset:"Limpar",required:"Obrigatório",description:"Descrição",title:"Título",text:"Texto"};
\ No newline at end of file
diff --git a/plugins/trumbowyg/trumbowyg/langs/ro.min.js b/plugins/trumbowyg/trumbowyg/langs/ro.min.js
new file mode 100755
index 00000000..80ca551b
--- /dev/null
+++ b/plugins/trumbowyg/trumbowyg/langs/ro.min.js
@@ -0,0 +1,13 @@
+/* ===========================================================
+ * ro.js
+ * Romanian translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Vladut Radulescu (pacMakaveli)
+ *
+ * Email: pacMakaveli90@gmail.com
+ * Twitter : @pacMakaveli90
+ * Website : creative-studio51.co.uk
+ * Github : https://github.com/pacMakaveli
+ */
+jQuery.trumbowyg.langs.pt={viewHTML:"Vizualizare HTML",formatting:"Format",p:"Paragraf",blockquote:"Citație",code:"Cod",header:"Titlu",bold:"Bold",italic:"Italic",strikethrough:"Tăiat",underline:"Subliniat",strong:"Puternic",em:"Accentuat",del:"Sterge",unorderedList:"Lista dezordonată",orderedList:"Liste ordonată",insertImage:"Adăugare Imagine",insertVideo:"Adăugare Video",link:"Link",createLink:"Crează link",unlink:"Remover link",justifyLeft:"Aliniază stânga",justifyCenter:"Aliniază centru",justifyRight:"Aliniază dreapta",justifyFull:"Justificare",horizontalRule:"Linie orizontală",fullscreen:"Tot ecranul",close:"Închide",submit:"Procesează",reset:"Resetează",required:"Obligatoriu",description:"Descriere",title:"Titlu",text:"Text"};
\ No newline at end of file
diff --git a/plugins/trumbowyg/trumbowyg/langs/rs.min.js b/plugins/trumbowyg/trumbowyg/langs/rs.min.js
new file mode 100755
index 00000000..f591173a
--- /dev/null
+++ b/plugins/trumbowyg/trumbowyg/langs/rs.min.js
@@ -0,0 +1,8 @@
+/* ===========================================================
+ * rs.js
+ * Serbian (Cyrlic) translation for Trumbowyg
+ * https://www.github.com/johonunu
+ * ===========================================================
+ * Author : Nikola Trifunovic (https://www.github.com/johonunu)
+ */
+jQuery.trumbowyg.langs.rs={viewHTML:"Погледај HTML кóд",formatting:"Форматирање",p:"Параграф",blockquote:"Цитат",code:"Кóд",header:"Наслов",bold:"Подебљано",italic:"Курзив",strikethrough:"Прецртано",underline:"Подвучено",strong:"Подебљано",em:"Истакнуто",del:"Обрисано",unorderedList:"Ненабројива листа",orderedList:"Набројива листа",insertImage:"Унеси слику",insertVideo:"Унеси видео",link:"Линк",createLink:"Унеси линк",unlink:"Уклони линк",justifyLeft:"Лево равнање",justifyCenter:"Централно равнање",justifyRight:"Десно равнање",justifyFull:"Обострано равнање",horizontalRule:"Хоризонтална линија",fullscreen:"Режим читавог екрана",close:"Затвори",submit:"Унеси",reset:"Откажи",required:"Обавезно поље",invalidUrl:"URL",description:"Опис",title:"Наслов",text:"Текст"};
\ No newline at end of file
diff --git a/plugins/trumbowyg/trumbowyg/langs/rs_latin.min.js b/plugins/trumbowyg/trumbowyg/langs/rs_latin.min.js
new file mode 100755
index 00000000..9fe81099
--- /dev/null
+++ b/plugins/trumbowyg/trumbowyg/langs/rs_latin.min.js
@@ -0,0 +1,8 @@
+/* ===========================================================
+ * rs_latin.js
+ * Serbian (Latin) translation for Trumbowyg
+ * https://www.github.com/johonunu
+ * ===========================================================
+ * Author : Nikola Trifunovic (https://www.github.com/johonunu)
+ */
+jQuery.trumbowyg.langs.rs_latin={viewHTML:"Poglеdaj HTML kód",formatting:"Formatiranjе",p:"Paragraf",blockquote:"Citat",code:"Kód",header:"Naslov",bold:"Podеbljano",italic:"Kurziv",strikethrough:"Prеcrtano",underline:"Podvučеno",strong:"Podеbljano",em:"Istaknuto",del:"Obrisano",unorderedList:"Nеnabrojiva lista",orderedList:"Nabrojiva lista",insertImage:"Unеsi sliku",insertVideo:"Unеsi vidеo",link:"Link",createLink:"Unеsi link",unlink:"Ukloni link",justifyLeft:"Lеvo ravnanjе",justifyCenter:"Cеntralno ravnanjе",justifyRight:"Dеsno ravnanjе",justifyFull:"Obostrano ravnanjе",horizontalRule:"Horizontalna linija",fullscreen:"Rеžim čitavog еkrana",close:"Zatvori",submit:"Unеsi",reset:"Otkaži",required:"Obavеzno poljе",invalidUrl:"URL",description:"Opis",title:"Naslov",text:"Tеkst"};
\ No newline at end of file
diff --git a/plugins/trumbowyg/trumbowyg/langs/ru.min.js b/plugins/trumbowyg/trumbowyg/langs/ru.min.js
new file mode 100755
index 00000000..8132efea
--- /dev/null
+++ b/plugins/trumbowyg/trumbowyg/langs/ru.min.js
@@ -0,0 +1,8 @@
+/* ===========================================================
+ * ru.js
+ * Russion translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Yuri Lya
+ */
+jQuery.trumbowyg.langs.ru={viewHTML:"Посмотреть HTML",formatting:"Форматирование",p:"Обычный",blockquote:"Цитата",code:"Код",header:"Заголовок",bold:"Полужирный",italic:"Курсив",strikethrough:"Зачеркнутый",underline:"Подчеркнутый",strong:"Полужирный",em:"Курсив",del:"Зачеркнутый",unorderedList:"Обычный список",orderedList:"Нумерованный список",insertImage:"Вставить изображение",insertVideo:"Вставить видео",link:"Ссылка",createLink:"Вставить ссылку",unlink:"Удалить ссылку",justifyLeft:"По левому краю",justifyCenter:"По центру",justifyRight:"По правому краю",justifyFull:"По ширине",horizontalRule:"Горизонтальная линия",fullscreen:"Во весь экран",close:"Закрыть",submit:"Вставить",reset:"Отменить",required:"Обязательное",description:"Описание",title:"Подсказка",text:"Текст"};
\ No newline at end of file
diff --git a/plugins/trumbowyg/trumbowyg/langs/sk.min.js b/plugins/trumbowyg/trumbowyg/langs/sk.min.js
new file mode 100755
index 00000000..cb74fd2a
--- /dev/null
+++ b/plugins/trumbowyg/trumbowyg/langs/sk.min.js
@@ -0,0 +1,8 @@
+/* ===========================================================
+ * sk.js
+ * Slovak translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : VeeeneX (https://github.com/VeeeneX)
+ */
+jQuery.trumbowyg.langs.sk={viewHTML:"Zobraziť HTML",formatting:"Formátovanie",p:"Paragraf",blockquote:"Citácia",code:"Kód",header:"Nadpis",bold:"Tučné",italic:"Kurzíva",strikethrough:"Preškrtnuté",underline:"Podčiarknuté",strong:"Tučné",em:"Zvýrazniť",del:"Zmazať",unorderedList:"Netriedený zoznam",orderedList:"Triedený zoznam",insertImage:"Vložiť obrázok",insertVideo:"Vložiť video",link:"Odkaz",createLink:"Vložiť odkaz",unlink:"Zmazať odkaz",justifyLeft:"Zarovnať doľava",justifyCenter:"Zarovnať na stred",justifyRight:"Zarovnať doprava",justifyFull:"Zarovnať do bloku",horizontalRule:"Vložit vodorovnú čiaru",fullscreen:"Režim celej obrazovky",close:"Zavrieť",submit:"Potvrdiť",reset:"Zrušiť",required:"Povinné",description:"Popis",title:"Nadpis",text:"Text"};
\ No newline at end of file
diff --git a/plugins/trumbowyg/trumbowyg/langs/tr.min.js b/plugins/trumbowyg/trumbowyg/langs/tr.min.js
new file mode 100755
index 00000000..f320ac9b
--- /dev/null
+++ b/plugins/trumbowyg/trumbowyg/langs/tr.min.js
@@ -0,0 +1,10 @@
+/* ===========================================================
+ * tr.js
+ * Turkish translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Emrah Bilbay (munzur)
+ * Github : https://github.com/munzur
+ * Website: http://kafe.in/
+ */
+jQuery.trumbowyg.langs.tr={viewHTML:"HTML Kodu",formatting:"Biçimlendirme",p:"Paragraf",blockquote:"Alıntı",code:"Kod",header:"Başlık",bold:"Kalın",italic:"İtalik",strikethrough:"Orta çizgi",underline:"Alt çigzi",strong:"Koyu",em:"Vurgulu",del:"Üstü çizilmiş",unorderedList:"Numarasız liste",orderedList:"Numaralı liste",insertImage:"Resim yerleştir",insertVideo:"Video yerleştir",link:"Link",createLink:"Link yerleştir",unlink:"Linki sil",justifyLeft:"Sola hizala",justifyCenter:"Ortaya hizala",justifyRight:"Sağa hizala",justifyFull:"Yasla",horizontalRule:"Yatay çizgi ekle",fullscreen:"Tam ekran",close:"Kapat",submit:"Onayla",reset:"Sıfırla",required:"Gerekli",description:"Açıklama",title:"Başlık",text:"Metin"};
\ No newline at end of file
diff --git a/plugins/trumbowyg/trumbowyg/langs/zh_cn.min.js b/plugins/trumbowyg/trumbowyg/langs/zh_cn.min.js
new file mode 100755
index 00000000..0f4c13d1
--- /dev/null
+++ b/plugins/trumbowyg/trumbowyg/langs/zh_cn.min.js
@@ -0,0 +1,10 @@
+/* ===========================================================
+ * zh_cn.js
+ * Simplified Chinese translation for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Liu Kai (akai)
+ * Twitter : @akai404
+ * Github : https://github.com/akai
+ */
+jQuery.trumbowyg.langs.zh_cn={viewHTML:"源代码",formatting:"格式",p:"段落",blockquote:"引用",code:"代码",header:"标题",bold:"加粗",italic:"斜体",strikethrough:"删除线",underline:"下划线",strong:"加粗",em:"斜体",del:"删除线",unorderedList:"无序列表",orderedList:"有序列表",insertImage:"插入图片",insertVideo:"插入视频",link:"超链接",createLink:"插入链接",unlink:"取消链接",justifyLeft:"居左对齐",justifyCenter:"居中对齐",justifyRight:"居右对齐",justifyFull:"两端对齐",horizontalRule:"插入分隔线",fullscreen:"全屏",close:"关闭",submit:"确定",reset:"取消",required:"必需的",description:"描述",title:"标题",text:"文字"};
\ No newline at end of file
diff --git a/plugins/trumbowyg/trumbowyg/plugins/base64/trumbowyg.base64.js b/plugins/trumbowyg/trumbowyg/plugins/base64/trumbowyg.base64.js
new file mode 100755
index 00000000..05653dba
--- /dev/null
+++ b/plugins/trumbowyg/trumbowyg/plugins/base64/trumbowyg.base64.js
@@ -0,0 +1,81 @@
+/* ===========================================================
+ * trumbowyg.base64.js v1.0
+ * Base64 plugin for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Cyril Biencourt (lizardK)
+ */
+
+(function($){
+ 'use strict';
+
+ $.extend(true, $.trumbowyg, {
+ langs: {
+ en: {
+ base64: "Image as base64",
+ file: "File",
+ errFileReaderNotSupported: "FileReader is not supported by your browser."
+ },
+ fr: {
+ base64: "Image en base64",
+ file: "Fichier"
+ },
+ cs: {
+ base64: "Vložit obrázek",
+ file: "Soubor"
+ }
+ },
+
+ opts: {
+ btnsDef: {
+ base64: {
+ isSupported: function(){
+ if(typeof FileReader === "undefined"){
+ if (window.console !== undefined) {
+ console.err('[Trumbowyg - Plugin base64] FileReader is not supported by your browser.');
+ }
+ return false;
+ }
+ return true;
+ },
+ func: function(params, tbw){
+ var file;
+ tbw.openModalInsert(
+ // Title
+ tbw.lang.base64,
+
+ // Fields
+ {
+ file: {
+ type: 'file',
+ required: true
+ },
+ alt: {
+ label: 'description'
+ }
+ },
+
+ // Callback
+ function(values){
+ var fReader = new FileReader();
+
+ fReader.onloadend = function(){
+ tbw.execCmd('insertImage', fReader.result);
+ $(['img[src="', fReader.result, '"]:not([alt])'].join(''), tbw.$box).attr('alt', values.alt);
+ tbw.closeModal();
+ };
+
+ fReader.readAsDataURL(file);
+ }
+ );
+
+ $('input[type=file]').on('change', function(e){
+ file = e.target.files[0];
+ });
+ },
+ ico: 'insertImage'
+ }
+ }
+ }
+ });
+})(jQuery);
\ No newline at end of file
diff --git a/plugins/trumbowyg/trumbowyg/plugins/base64/trumbowyg.base64.min.js b/plugins/trumbowyg/trumbowyg/plugins/base64/trumbowyg.base64.min.js
new file mode 100755
index 00000000..8ba7c172
--- /dev/null
+++ b/plugins/trumbowyg/trumbowyg/plugins/base64/trumbowyg.base64.min.js
@@ -0,0 +1 @@
+!function(e){"use strict";e.extend(!0,e.trumbowyg,{langs:{en:{base64:"Image as base64",file:"File",errFileReaderNotSupported:"FileReader is not supported by your browser."},fr:{base64:"Image en base64",file:"Fichier"},cs:{base64:"Vložit obrázek",file:"Soubor"}},opts:{btnsDef:{base64:{isSupported:function(){return"undefined"==typeof FileReader?(void 0!==window.console&&console.err("[Trumbowyg - Plugin base64] FileReader is not supported by your browser."),!1):!0},func:function(o,r){var n;r.openModalInsert(r.lang.base64,{file:{type:"file",required:!0},alt:{label:"description"}},function(o){var t=new FileReader;t.onloadend=function(){r.execCmd("insertImage",t.result),e(['img[src="',t.result,'"]:not([alt])'].join(""),r.$box).attr("alt",o.alt),r.closeModal()},t.readAsDataURL(n)}),e("input[type=file]").on("change",function(e){n=e.target.files[0]})},ico:"insertImage"}}}})}(jQuery);
\ No newline at end of file
diff --git a/plugins/trumbowyg/trumbowyg/plugins/colors/trumbowyg.colors.js b/plugins/trumbowyg/trumbowyg/plugins/colors/trumbowyg.colors.js
new file mode 100755
index 00000000..3dd69f78
--- /dev/null
+++ b/plugins/trumbowyg/trumbowyg/plugins/colors/trumbowyg.colors.js
@@ -0,0 +1,83 @@
+/* ===========================================================
+ * trumbowyg.colors.js v1.0
+ * Colors picker plugin for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Alexandre Demode (Alex-D)
+ * Twitter : @AlexandreDemode
+ * Website : alex-d.fr
+ */
+
+(function($){
+ 'use strict';
+
+ $.extend(true, $.trumbowyg, {
+ langs: {
+ cs: {
+ foreColor: "Barva textu",
+ backColor: "Barva pozadí"
+ },
+ en: {
+ foreColor: "Text color",
+ backColor: "Background color"
+ },
+ fr: {
+ foreColor: "Couleur du texte",
+ backColor: "Couleur de fond"
+ },
+ sk: {
+ foreColor: "Farba textu",
+ backColor: "Farba pozadia"
+ }
+ }
+ });
+
+ // Create btnsDef entry
+ $.extend(true, $.trumbowyg, {
+ opts: {
+ btnsDef: {}
+ }
+ });
+
+ // Set default colors
+ if(!$.trumbowyg.opts.colors)
+ $.trumbowyg.opts.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'];
+
+ // Add all colors in two dropdowns
+ $.extend(true, $.trumbowyg, {
+ opts: {
+ btnsDef: {
+ foreColor: {
+ dropdown: buildDropdown('foreColor')
+ },
+ backColor: {
+ dropdown: buildDropdown('backColor')
+ }
+ }
+ }
+ });
+
+
+
+ function buildDropdown(func){
+ var dropdown = [];
+
+ $.each($.trumbowyg.opts.colors, function(i, color){
+ var btn = '_' + func + color;
+ $.trumbowyg.opts.btnsDef[btn] = {
+ func: func,
+ param: '#' + color,
+ style: 'background-color: #' + color + ';'
+ };
+ dropdown.push(btn);
+ });
+ var btn = '_' + func + 'transparent';
+ $.trumbowyg.opts.btnsDef[btn] = {
+ func: func,
+ param: 'transparent',
+ style: 'background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAG0lEQVQIW2NkQAAfEJMRmwBYhoGBYQtMBYoAADziAp0jtJTgAAAAAElFTkSuQmCC);'
+ };
+ dropdown.push(btn);
+ return dropdown;
+ }
+})(jQuery);
diff --git a/plugins/trumbowyg/trumbowyg/plugins/colors/trumbowyg.colors.min.js b/plugins/trumbowyg/trumbowyg/plugins/colors/trumbowyg.colors.min.js
new file mode 100755
index 00000000..26962a71
--- /dev/null
+++ b/plugins/trumbowyg/trumbowyg/plugins/colors/trumbowyg.colors.min.js
@@ -0,0 +1 @@
+!function(o){"use strict";function f(f){var r=[];o.each(o.trumbowyg.opts.colors,function(e,d){var c="_"+f+d;o.trumbowyg.opts.btnsDef[c]={func:f,param:"#"+d,style:"background-color: #"+d+";"},r.push(c)});var e="_"+f+"transparent";return o.trumbowyg.opts.btnsDef[e]={func:f,param:"transparent",style:"background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAG0lEQVQIW2NkQAAfEJMRmwBYhoGBYQtMBYoAADziAp0jtJTgAAAAAElFTkSuQmCC);"},r.push(e),r}o.extend(!0,o.trumbowyg,{langs:{cs:{foreColor:"Barva textu",backColor:"Barva pozadí"},en:{foreColor:"Text color",backColor:"Background color"},fr:{foreColor:"Couleur du texte",backColor:"Couleur de fond"},sk:{foreColor:"Farba textu",backColor:"Farba pozadia"}}}),o.extend(!0,o.trumbowyg,{opts:{btnsDef:{}}}),o.trumbowyg.opts.colors||(o.trumbowyg.opts.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"]),o.extend(!0,o.trumbowyg,{opts:{btnsDef:{foreColor:{dropdown:f("foreColor")},backColor:{dropdown:f("backColor")}}}})}(jQuery);
\ No newline at end of file
diff --git a/plugins/trumbowyg/trumbowyg/plugins/colors/ui/images/icons-black-2x.png b/plugins/trumbowyg/trumbowyg/plugins/colors/ui/images/icons-black-2x.png
new file mode 100755
index 00000000..590d5959
Binary files /dev/null and b/plugins/trumbowyg/trumbowyg/plugins/colors/ui/images/icons-black-2x.png differ
diff --git a/plugins/trumbowyg/trumbowyg/plugins/colors/ui/images/icons-black.png b/plugins/trumbowyg/trumbowyg/plugins/colors/ui/images/icons-black.png
new file mode 100755
index 00000000..5dfee50e
Binary files /dev/null and b/plugins/trumbowyg/trumbowyg/plugins/colors/ui/images/icons-black.png differ
diff --git a/plugins/trumbowyg/trumbowyg/plugins/colors/ui/images/icons-white-2x.png b/plugins/trumbowyg/trumbowyg/plugins/colors/ui/images/icons-white-2x.png
new file mode 100755
index 00000000..cbfe4cb9
Binary files /dev/null and b/plugins/trumbowyg/trumbowyg/plugins/colors/ui/images/icons-white-2x.png differ
diff --git a/plugins/trumbowyg/trumbowyg/plugins/colors/ui/images/icons-white.png b/plugins/trumbowyg/trumbowyg/plugins/colors/ui/images/icons-white.png
new file mode 100755
index 00000000..ff1b40a3
Binary files /dev/null and b/plugins/trumbowyg/trumbowyg/plugins/colors/ui/images/icons-white.png differ
diff --git a/plugins/trumbowyg/trumbowyg/plugins/colors/ui/trumbowyg.colors.css b/plugins/trumbowyg/trumbowyg/plugins/colors/ui/trumbowyg.colors.css
new file mode 100755
index 00000000..2425f5d0
--- /dev/null
+++ b/plugins/trumbowyg/trumbowyg/plugins/colors/ui/trumbowyg.colors.css
@@ -0,0 +1,70 @@
+/**
+ * Trumbowyg v2.0.0-beta.4 - A lightweight WYSIWYG editor
+ * Colors plugin stylesheet for Trumbowyg editor
+ * ------------------------
+ * @link http://alex-d.github.io/Trumbowyg
+ * @license MIT
+ * @author Alexandre Demode (Alex-D)
+ * Twitter : @AlexandreDemode
+ * Website : alex-d.fr
+ */
+
+.foreColor-trumbowyg-dropdown, .backColor-trumbowyg-dropdown {
+ width: 276px;
+ padding: 7px 5px; }
+ .foreColor-trumbowyg-dropdown button, .backColor-trumbowyg-dropdown button {
+ display: block;
+ position: relative;
+ float: left;
+ text-indent: -9999px;
+ height: 20px;
+ width: 20px;
+ border: 1px solid #333;
+ padding: 0;
+ margin: 2px; }
+ .foreColor-trumbowyg-dropdown button:hover::after, .foreColor-trumbowyg-dropdown button:focus::after, .backColor-trumbowyg-dropdown button:hover::after, .backColor-trumbowyg-dropdown button:focus::after {
+ content: " ";
+ display: block;
+ height: 27px;
+ width: 27px;
+ background: inherit;
+ position: absolute;
+ top: -5px;
+ left: -5px;
+ border: 1px solid #FFF;
+ -webkit-box-shadow: #000 0 0 2px;
+ box-shadow: #000 0 0 2px;
+ z-index: 10; }
+
+/*
+ * Buttons icons
+ */
+.trumbowyg-button-pane li button.trumbowyg-foreColor-button, .trumbowyg-button-pane li button.trumbowyg-backColor-button {
+ background-image: url("./images/icons-black.png"); }
+.trumbowyg-button-pane li button.trumbowyg-foreColor-button {
+ background-position: 5px -20px; }
+.trumbowyg-button-pane li button.trumbowyg-backColor-button {
+ background-position: 5px 5px; }
+
+.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-foreColor-button, .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-backColor-button {
+ background-image: url("./images/icons-white.png"); }
+.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-foreColor-button {
+ background-position: 5px -20px; }
+.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-backColor-button {
+ background-position: 5px 5px; }
+
+@media only screen and (-webkit-min-device-pixel-ratio: 1.3), only screen and (min--moz-device-pixel-ratio: 1.3), only screen and (-o-min-device-pixel-ratio: 4/3), only screen and (min-device-pixel-ratio: 1.3), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx) {
+ .trumbowyg-button-pane li button.trumbowyg-foreColor-button, .trumbowyg-button-pane li button.trumbowyg-backColor-button {
+ background-image: url("./images/icons-black-2x.png") !important;
+ -webkit-background-size: 25px 50px !important;
+ background-size: 25px 50px !important; }
+ .trumbowyg-button-pane li button.trumbowyg-foreColor-button {
+ background-position: 5px -20px; }
+ .trumbowyg-button-pane li button.trumbowyg-backColor-button {
+ background-position: 5px 5px; }
+ .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-foreColor-button, .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-backColor-button {
+ background-image: url("./images/icons-white-2x.png") !important; }
+ .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-foreColor-button {
+ background-position: 5px -20px; }
+ .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-backColor-button {
+ background-position: 5px 5px; } }
diff --git a/plugins/trumbowyg/trumbowyg/plugins/colors/ui/trumbowyg.colors.min.css b/plugins/trumbowyg/trumbowyg/plugins/colors/ui/trumbowyg.colors.min.css
new file mode 100755
index 00000000..a9360bb4
--- /dev/null
+++ b/plugins/trumbowyg/trumbowyg/plugins/colors/ui/trumbowyg.colors.min.css
@@ -0,0 +1,2 @@
+/** Trumbowyg v2.0.0-beta.4 - A lightweight WYSIWYG editor - alex-d.github.io/Trumbowyg - License MIT - Author : Alexandre Demode (Alex-D) / alex-d.fr */
+.backColor-trumbowyg-dropdown,.foreColor-trumbowyg-dropdown{width:276px;padding:7px 5px}.backColor-trumbowyg-dropdown button,.foreColor-trumbowyg-dropdown button{display:block;position:relative;float:left;text-indent:-9999px;height:20px;width:20px;border:1px solid #333;padding:0;margin:2px}.backColor-trumbowyg-dropdown button:focus::after,.backColor-trumbowyg-dropdown button:hover::after,.foreColor-trumbowyg-dropdown button:focus::after,.foreColor-trumbowyg-dropdown button:hover::after{content:" ";display:block;height:27px;width:27px;background:inherit;position:absolute;top:-5px;left:-5px;border:1px solid #FFF;-webkit-box-shadow:#000 0 0 2px;box-shadow:#000 0 0 2px;z-index:10}.trumbowyg-button-pane li button.trumbowyg-backColor-button,.trumbowyg-button-pane li button.trumbowyg-foreColor-button{background-image:url(./images/icons-black.png)}.trumbowyg-button-pane li button.trumbowyg-foreColor-button{background-position:5px -20px}.trumbowyg-button-pane li button.trumbowyg-backColor-button{background-position:5px 5px}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-backColor-button,.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-foreColor-button{background-image:url(./images/icons-white.png)}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-foreColor-button{background-position:5px -20px}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-backColor-button{background-position:5px 5px}@media only screen and (-webkit-min-device-pixel-ratio:1.3),only screen and (min--moz-device-pixel-ratio:1.3),only screen and (-o-min-device-pixel-ratio:4/3),only screen and (min-device-pixel-ratio:1.3),only screen and (min-resolution:192dpi),only screen and (min-resolution:2dppx){.trumbowyg-button-pane li button.trumbowyg-backColor-button,.trumbowyg-button-pane li button.trumbowyg-foreColor-button{background-image:url(./images/icons-black-2x.png)!important;-webkit-background-size:25px 50px!important;background-size:25px 50px!important}.trumbowyg-button-pane li button.trumbowyg-foreColor-button{background-position:5px -20px}.trumbowyg-button-pane li button.trumbowyg-backColor-button{background-position:5px 5px}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-backColor-button,.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-foreColor-button{background-image:url(./images/icons-white-2x.png)!important}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-foreColor-button{background-position:5px -20px}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-backColor-button{background-position:5px 5px}}
\ No newline at end of file
diff --git a/plugins/trumbowyg/trumbowyg/plugins/upload/trumbowyg.upload.js b/plugins/trumbowyg/trumbowyg/plugins/upload/trumbowyg.upload.js
new file mode 100755
index 00000000..626e4059
--- /dev/null
+++ b/plugins/trumbowyg/trumbowyg/plugins/upload/trumbowyg.upload.js
@@ -0,0 +1,157 @@
+/* ===========================================================
+ * trumbowyg.upload.js v1.0
+ * Upload plugin for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Alexandre Demode (Alex-D)
+ * Twitter : @AlexandreDemode
+ * Website : alex-d.fr
+ */
+
+(function($){
+ 'use strict';
+
+ addXhrProgressEvent();
+
+ $.extend(true, $.trumbowyg, {
+ langs: {
+ en: {
+ upload: "Upload",
+ file: "File",
+ uploadError: "Error"
+ },
+ sk: {
+ upload: "Nahrať",
+ file: "Súbor",
+ uploadError: "Chyba"
+ },
+ fr: {
+ upload: "Envoi",
+ file: "Fichier",
+ uploadError: "Erreur"
+ },
+ cs: {
+ upload: "Nahrát obrázek",
+ file: "Soubor",
+ uploadError: "Chyba"
+ }
+ },
+
+ upload: {
+ serverPath: './src/plugins/upload/trumbowyg.upload.php'
+ },
+
+ opts: {
+ btnsDef: {
+ upload: {
+ func: function(params, tbw){
+ var file,
+ pfx = tbw.o.prefix;
+
+ var $modal = tbw.openModalInsert(
+ // Title
+ tbw.lang.upload,
+
+ // Fields
+ {
+ file: {
+ type: 'file',
+ required: true
+ },
+ alt: {
+ label: 'description'
+ }
+ },
+
+ // Callback
+ function(){
+ var data = new FormData();
+ data.append('fileToUpload', file);
+
+ if($('.' + pfx +'progress', $modal).length === 0)
+ $('.' + pfx + 'modal-title', $modal)
+ .after(
+ $('
', {
+ 'class': pfx +'progress'
+ })
+ .append(
+ $('
', {
+ 'class': pfx +'progress-bar'
+ })
+ )
+ );
+
+ $.ajax({
+ url: $.trumbowyg.upload.serverPath,
+ type: 'POST',
+ data: data,
+ cache: false,
+ dataType: 'json',
+ processData: false,
+ contentType: false,
+
+ progressUpload: function(e){
+ $('.' + pfx + 'progress-bar').stop().animate({
+ width: Math.round(e.loaded * 100 / e.total) + '%'
+ }, 200);
+ },
+
+ success: function(data){
+ if(data.message == "uploadSuccess") {
+ tbw.execCmd('insertImage', data.file);
+ setTimeout(function(){
+ tbw.closeModal();
+ }, 250);
+ } else {
+ tbw.addErrorOnModalField(
+ $('input[type=file]', $modal),
+ tbw.lang[data.message]
+ );
+ }
+ },
+ error: function(){
+ tbw.addErrorOnModalField(
+ $('input[type=file]', $modal),
+ tbw.lang.uploadError
+ );
+ }
+ });
+ }
+ );
+
+ $('input[type=file]').on('change', function(e){
+ try {
+ // If multiple files allowed, we just get the first.
+ file = e.target.files[0];
+ } catch (err) {
+ // In IE8, multiple files not allowed
+ file = e.target.value;
+ }
+ });
+ },
+ ico: 'insertImage'
+ }
+ }
+ }
+ });
+
+
+ function addXhrProgressEvent(){
+ if (!$.trumbowyg && !$.trumbowyg.addedXhrProgressEvent) { // Avoid adding progress event multiple times
+ var originalXhr = $.ajaxSettings.xhr;
+ $.ajaxSetup({
+ xhr: function() {
+ var req = originalXhr(),
+ that = this;
+ if(req && typeof req.upload == "object" && that.progressUpload !== undefined)
+ req.upload.addEventListener("progress", function(e){
+ that.progressUpload(e);
+ }, false);
+
+ return req;
+ }
+ });
+ $.trumbowyg.addedXhrProgressEvent = true;
+ }
+ }
+})(jQuery);
diff --git a/plugins/trumbowyg/trumbowyg/plugins/upload/trumbowyg.upload.min.js b/plugins/trumbowyg/trumbowyg/plugins/upload/trumbowyg.upload.min.js
new file mode 100755
index 00000000..cd55a9e2
--- /dev/null
+++ b/plugins/trumbowyg/trumbowyg/plugins/upload/trumbowyg.upload.min.js
@@ -0,0 +1 @@
+!function(r){"use strict";function e(){if(!r.trumbowyg&&!r.trumbowyg.addedXhrProgressEvent){var e=r.ajaxSettings.xhr;r.ajaxSetup({xhr:function(){var r=e(),o=this;return r&&"object"==typeof r.upload&&void 0!==o.progressUpload&&r.upload.addEventListener("progress",function(r){o.progressUpload(r)},!1),r}}),r.trumbowyg.addedXhrProgressEvent=!0}}e(),r.extend(!0,r.trumbowyg,{langs:{en:{upload:"Upload",file:"File",uploadError:"Error"},sk:{upload:"Nahrať",file:"Súbor",uploadError:"Chyba"},fr:{upload:"Envoi",file:"Fichier",uploadError:"Erreur"},cs:{upload:"Nahrát obrázek",file:"Soubor",uploadError:"Chyba"}},upload:{serverPath:"./src/plugins/upload/trumbowyg.upload.php"},opts:{btnsDef:{upload:{func:function(e,o){var a,t=o.o.prefix,l=o.openModalInsert(o.lang.upload,{file:{type:"file",required:!0},alt:{label:"description"}},function(){var e=new FormData;e.append("fileToUpload",a),0===r("."+t+"progress",l).length&&r("."+t+"modal-title",l).after(r("
",{"class":t+"progress"}).append(r("
",{"class":t+"progress-bar"}))),r.ajax({url:r.trumbowyg.upload.serverPath,type:"POST",data:e,cache:!1,dataType:"json",processData:!1,contentType:!1,progressUpload:function(e){r("."+t+"progress-bar").stop().animate({width:Math.round(100*e.loaded/e.total)+"%"},200)},success:function(e){"uploadSuccess"==e.message?(o.execCmd("insertImage",e.file),setTimeout(function(){o.closeModal()},250)):o.addErrorOnModalField(r("input[type=file]",l),o.lang[e.message])},error:function(){o.addErrorOnModalField(r("input[type=file]",l),o.lang.uploadError)}})});r("input[type=file]").on("change",function(r){try{a=r.target.files[0]}catch(e){a=r.target.value}})},ico:"insertImage"}}}})}(jQuery);
\ No newline at end of file
diff --git a/plugins/trumbowyg/trumbowyg/trumbowyg.js b/plugins/trumbowyg/trumbowyg/trumbowyg.js
new file mode 100755
index 00000000..e83a4a2c
--- /dev/null
+++ b/plugins/trumbowyg/trumbowyg/trumbowyg.js
@@ -0,0 +1,1224 @@
+/**
+ * Trumbowyg v2.0.0-beta.4 - A lightweight WYSIWYG editor
+ * Trumbowyg core file
+ * ------------------------
+ * @link http://alex-d.github.io/Trumbowyg
+ * @license MIT
+ * @author Alexandre Demode (Alex-D)
+ * Twitter : @AlexandreDemode
+ * Website : alex-d.fr
+ */
+
+jQuery.trumbowyg = {
+ langs: {
+ en: {
+ viewHTML: "View HTML",
+
+ formatting: "Formatting",
+ p: "Paragraph",
+ blockquote: "Quote",
+ code: "Code",
+ header: "Header",
+
+ bold: "Bold",
+ italic: "Italic",
+ strikethrough: "Stroke",
+ underline: "Underline",
+
+ strong: "Strong",
+ em: "Emphasis",
+ del: "Deleted",
+
+ unorderedList: "Unordered list",
+ orderedList: "Ordered list",
+
+ insertImage: "Insert Image",
+ insertVideo: "Insert Video",
+ link: "Link",
+ createLink: "Insert link",
+ unlink: "Remove link",
+
+ justifyLeft: "Align Left",
+ justifyCenter: "Align Center",
+ justifyRight: "Align Right",
+ justifyFull: "Align Justify",
+
+ horizontalRule: "Insert horizontal rule",
+ removeformat: "Remove format",
+
+ fullscreen: "fullscreen",
+
+ close: "Close",
+
+ submit: "Confirm",
+ reset: "Cancel",
+
+ required: "Required",
+ description: "Description",
+ title: "Title",
+ text: "Text",
+ target: "Target"
+ }
+ },
+
+ // User default options
+ opts: {},
+
+ btnsGrps: {
+ design: ['bold', 'italic', 'underline', 'strikethrough'],
+ semantic: ['strong', 'em', 'del'],
+ justify: ['justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull'],
+ lists: ['unorderedList', 'orderedList']
+ }
+};
+
+
+
+(function(navigator, window, document, $, undefined){
+ 'use strict';
+
+ // @param : o are options
+ // @param : p are params
+ $.fn.trumbowyg = function(o, p){
+ if(o === Object(o) || !o){
+ return this.each(function(){
+ if(!$(this).data('trumbowyg'))
+ $(this).data('trumbowyg', new Trumbowyg(this, o));
+ });
+ }
+ if(this.length === 1){
+ try {
+ var t = $(this).data('trumbowyg');
+ switch(o){
+ // Modal box
+ case 'openModal':
+ return t.openModal(p.title, p.content);
+ case 'closeModal':
+ return t.closeModal();
+ case 'openModalInsert':
+ return t.openModalInsert(p.title, p.fields, p.callback);
+
+ // Selection
+ case 'saveSelection':
+ return t.saveSelection();
+ case 'getSelection':
+ return t.selection;
+ case 'getSelectedText':
+ return t.getSelectedText();
+ case 'restoreSelection':
+ return t.restoreSelection();
+
+ // Destroy
+ case 'destroy':
+ return t.destroy();
+
+ // Empty
+ case 'empty':
+ return t.empty();
+
+ // Public options
+ case 'lang':
+ return t.lang;
+
+ // HTML
+ case 'html':
+ return t.html(p);
+ }
+ } catch(e){}
+ }
+
+ return false;
+ };
+
+ // @param : editorElem is the DOM element
+ // @param : o are options
+ var Trumbowyg = function(editorElem, o){
+ var t = this;
+ // Get the document of the element. It use to makes the plugin
+ // compatible on iframes.
+ t.doc = editorElem.ownerDocument || document;
+ // jQuery object of the editor
+ t.$ta = $(editorElem); // $ta : Textarea
+ t.$c = $(editorElem); // $c : creator
+
+ // Extend with options
+ o = $.extend(true, {}, o, $.trumbowyg.opts);
+
+ // Localization management
+ if(typeof o.lang === 'undefined' || typeof $.trumbowyg.langs[o.lang] === 'undefined')
+ t.lang = $.trumbowyg.langs.en;
+ else
+ t.lang = $.extend(true, {}, $.trumbowyg.langs.en, $.trumbowyg.langs[o.lang]);
+
+ // Header translation
+ var h = t.lang.header;
+
+ // Defaults Options
+ t.o = $.extend(true, {}, {
+ lang: 'en',
+ dir: 'ltr',
+
+ closable: false,
+ fullscreenable: true,
+ fixedBtnPane: false,
+ fixedFullWidth: false,
+ autogrow: false,
+
+ prefix: 'trumbowyg-',
+
+ // WYSIWYG only
+ semantic: true,
+ resetCss: false,
+ removeformatPasted: false,
+
+ btns: [
+ 'viewHTML',
+ '|', 'formatting',
+ '|', 'btnGrp-design',
+ '|', 'link',
+ '|', 'insertImage',
+ '|', 'btnGrp-justify',
+ '|', 'btnGrp-lists',
+ '|', 'horizontalRule',
+ '|', 'removeformat'
+ ],
+ btnsAdd: [],
+
+ /**
+ * When the button is associated to a empty object
+ * func and title attributs are defined from the button key value
+ *
+ * For example
+ * foo: {}
+ * is equivalent to :
+ * foo: {
+ * func: 'foo',
+ * title: this.lang.foo
+ * }
+ */
+ btnsDef: {
+ viewHTML: {
+ func: 'toggle'
+ },
+
+ p: {
+ func: 'formatBlock'
+ },
+ blockquote: {
+ func: 'formatBlock'
+ },
+ h1: {
+ func: 'formatBlock',
+ title: h + ' 1'
+ },
+ h2: {
+ func: 'formatBlock',
+ title: h + ' 2'
+ },
+ h3: {
+ func: 'formatBlock',
+ title: h + ' 3'
+ },
+ h4: {
+ func: 'formatBlock',
+ title: h + ' 4'
+ },
+
+ bold: {
+ key: 'B'
+ },
+ italic: {
+ key: 'I'
+ },
+ underline: {},
+ strikethrough: {},
+
+ strong: {
+ func: 'bold',
+ key: 'B'
+ },
+ em: {
+ func: 'italic',
+ key: 'I'
+ },
+ del: {
+ func: 'strikethrough'
+ },
+
+ createLink: {
+ key: 'K'
+ },
+ unlink: {},
+
+ insertImage: {},
+
+ justifyLeft: {},
+ justifyCenter: {},
+ justifyRight: {},
+ justifyFull: {},
+
+ unorderedList: {
+ func: 'insertUnorderedList'
+ },
+ orderedList: {
+ func: 'insertOrderedList'
+ },
+
+ horizontalRule: {
+ func: 'insertHorizontalRule'
+ },
+
+ removeformat: {},
+
+ // Dropdowns
+ formatting: {
+ dropdown: ['p', 'blockquote', 'h1', 'h2', 'h3', 'h4']
+ },
+ link: {
+ dropdown: ['createLink', 'unlink']
+ }
+ },
+
+ blockLevelElements: ['br', 'p', 'div', 'ul', 'ol', 'table', 'img', 'address', 'article', 'aside', 'audio', 'blockquote', 'canvas', 'dl', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hgroup', 'hr', 'main', 'nav', 'noscript', 'output', 'pre', 'section', 'tfoot', 'video']
+
+ }, o);
+
+ if(o.btns)
+ t.o.btns = o.btns;
+ else if(t.o.semantic)
+ t.o.btns[4] = 'btnGrp-semantic';
+
+ // Keyboard shortcuts are load in this array
+ t.keys = [];
+
+ t.init();
+ };
+
+ Trumbowyg.prototype = {
+ init: function(){
+ var t = this;
+ t.height = t.$ta.height();
+
+ t.buildEditor();
+ t.buildBtnPane();
+
+ t.fixedBtnPaneEvents();
+
+ t.buildOverlay();
+ },
+
+ buildEditor: function(){
+ var t = this,
+ prefix = t.o.prefix,
+ html = '';
+
+ t.$box = $('
', {
+ 'class': prefix + 'box ' + prefix + 'editor-visible ' + prefix + t.o.lang + ' trumbowyg'
+ });
+
+ // $ta = Textarea
+ // $ed = Editor
+ t.isTextarea = t.$ta.is('textarea');
+ if(t.isTextarea){
+ html = t.$ta.val();
+ t.$ed = $('
');
+ t.$box
+ .insertAfter(t.$ta)
+ .append(t.$ed, t.$ta);
+ } else {
+ t.$ed = t.$ta;
+ html = t.$ed.html();
+
+ t.$ta = $(' ', {
+ name: t.$ta.attr('id'),
+ height: t.height
+ }).val(html);
+
+ t.$box
+ .insertAfter(t.$ed)
+ .append(t.$ta, t.$ed);
+ t.syncCode();
+ }
+
+ t.$ta
+ .addClass(prefix + 'textarea')
+ .attr('tabindex', -1)
+ ;
+
+ t.$ed
+ .addClass(prefix + 'editor')
+ .attr({
+ 'contenteditable': true,
+ 'dir': t.lang._dir || t.o.dir
+ })
+ .html(html)
+ ;
+
+ if(t.$c.is('[placeholder]')){
+ t.$ed.attr('placeholder', t.$c.attr('placeholder'));
+ }
+
+ if(t.o.resetCss){
+ t.$ed.addClass(prefix + 'reset-css');
+ }
+
+ if(!t.o.autogrow){
+ t.$ta.add(t.$ed).css({
+ height: t.height,
+ overflow: 'auto'
+ });
+ }
+
+ if(t.o.semantic){
+ t.semanticCode();
+ }
+
+
+ t._ctrl = false;
+ t.$ed
+ .on('dblclick', 'img', function(){
+ var $img = $(this);
+ t.openModalInsert(t.lang.insertImage, {
+ url: {
+ label: 'URL',
+ value: $img.attr('src'),
+ required: true
+ },
+ alt: {
+ label: t.lang.description,
+ value: $img.attr('alt')
+ }
+ }, function(v){
+ return $img.attr({
+ src: v.url,
+ alt: v.alt
+ });
+ });
+ return false;
+ })
+ .on('keydown', function(e){
+ t._composition = (e.which === 229);
+
+ if(e.ctrlKey){
+ t._ctrl = true;
+ var k = t.keys[String.fromCharCode(e.which).toUpperCase()];
+
+ try {
+ t.execCmd(k.func, k.param);
+ return false;
+ } catch(e){}
+ }
+ })
+ .on('keyup', function(e){
+ if(!t._ctrl && e.which !== 17 && !t._composition){
+ t.semanticCode(false, e.which === 13);
+ t.$c.trigger('tbwchange');
+ }
+
+ setTimeout(function(){
+ t._ctrl = false;
+ }, 200);
+ })
+ .on('focus blur', function(e){
+ t.$c.trigger('tbw' + e.type);
+ })
+ .on('paste', function(e){
+ if(t.o.removeformatPasted){
+ e.preventDefault();
+
+ try {
+ // IE
+ var text = window.clipboardData.getData("Text");
+
+ try {
+ // <= IE10
+ t.doc.selection.createRange().pasteHTML(text);
+ } catch(err){
+ // IE 11
+ t.doc.getSelection().getRangeAt(0).insertNode(document.createTextNode(text));
+ }
+ } catch(err){
+ // Not IE
+ t.execCmd('insertText', (e.originalEvent || e).clipboardData.getData('text/plain'));
+ }
+ }
+
+ setTimeout(function() {
+ if(t.o.semantic) {
+ t.semanticCode(false, true);
+ } else {
+ t.syncCode();
+ }
+ t.$c.trigger('tbwpaste', e);
+ }, 0);
+
+ });
+ t.$ta.on('keyup paste', function(){
+ t.$c.trigger('tbwchange');
+ });
+
+ $(t.doc).on('keydown', function(e){
+ if(e.which === 27){
+ t.closeModal();
+ return false;
+ }
+ });
+ },
+
+
+ // Build button pane, use o.btns and o.btnsAdd options
+ buildBtnPane: function(){
+ var t = this,
+ prefix = t.o.prefix;
+
+ if(t.o.btns === false)
+ return;
+
+ t.$btnPane = $('', {
+ 'class': prefix + 'button-pane'
+ });
+
+ $.each(t.o.btns.concat(t.o.btnsAdd), function(i, btn){
+ // Managment of group of buttons
+ try {
+ var b = btn.split('btnGrp-');
+ if(b[1] !== undefined)
+ btn = $.trumbowyg.btnsGrps[b[1]];
+ } catch(e){}
+
+ if(!$.isArray(btn))
+ btn = [btn];
+
+ $.each(btn, function(i, b){
+ try { // Prevent buildBtn error
+ var $li = $(' ');
+
+ if(b === '|') // It's a separator
+ $li.addClass(prefix + 'separator');
+ else if(t.isSupportedBtn(b)) // It's a supported button
+ $li.append(t.buildBtn(b));
+
+ t.$btnPane.append($li);
+ } catch(e){}
+ });
+ });
+
+ // Build right li for fullscreen and close buttons
+ var $liRight = $(' ', {
+ 'class': prefix + 'not-disable ' + prefix + 'buttons-right'
+ });
+
+ // Add the fullscreen button
+ if(t.o.fullscreenable)
+ $liRight.append(
+ t.buildRightBtn('fullscreen')
+ .on('click', function(){
+ var cssClass = prefix + 'fullscreen';
+ t.$box.toggleClass(cssClass);
+
+ if(t.$box.hasClass(cssClass)){
+ $('body').addClass(prefix + 'body-fullscreen');
+ $.each([t.$ta, t.$ed], function(){
+ $(this).css({
+ height: 'calc(100% - 35px)',
+ overflow: 'auto'
+ });
+ });
+ t.$btnPane.css('width', '100%');
+ } else {
+ $('body').removeClass(prefix + 'body-fullscreen');
+ t.$box.removeAttr('style');
+ if(!t.o.autogrow)
+ $.each([t.$ta, t.$ed], function(){
+ $(this).css('height', t.height);
+ });
+ }
+ $(window).trigger('scroll');
+ })
+ );
+
+ // Build and add close button
+ if(t.o.closable)
+ $liRight
+ .append(
+ t.buildRightBtn('close')
+ .on('click', function(){
+ if(t.$box.hasClass(prefix + 'fullscreen'))
+ $('body').css('overflow', 'auto');
+ t.destroy();
+ t.$c.trigger('tbwclose');
+ })
+ );
+
+
+ // Add right li only if isn't empty
+ if($liRight.not(':empty'))
+ t.$btnPane.append($liRight);
+
+ t.$box.prepend(t.$btnPane);
+ },
+
+
+ // Build a button and his action
+ buildBtn: function(n){ // n is name of the button
+ var t = this,
+ prefix = t.o.prefix,
+ btn = t.o.btnsDef[n],
+ d = btn.dropdown,
+ textDef = t.lang[n] || n,
+
+ $btn = $(' ', {
+ type: 'button',
+ 'class': prefix + n +'-button' + (btn.ico ? ' '+ prefix + btn.ico +'-button' : ''),
+ text: btn.text || btn.title || textDef,
+ title: btn.title || btn.text || textDef + ((btn.key) ? ' (Ctrl + ' + btn.key + ')' : ''),
+ tabindex: -1,
+ mousedown: function(){
+ if(!d || $('.'+n+'-'+prefix + 'dropdown', t.$box).is(':hidden'))
+ $('body', t.doc).trigger('mousedown');
+
+ if(t.$btnPane.hasClass(prefix + 'disable') && !$(this).hasClass(prefix + 'active') && !$(this).parent().hasClass(prefix + 'not-disable'))
+ return false;
+
+ t.execCmd((d ? 'dropdown' : false) || btn.func || n,
+ btn.param || n);
+
+ return false;
+ }
+ });
+
+ if(d){
+ $btn.addClass(prefix + 'open-dropdown');
+ var c = prefix + 'dropdown',
+ dd = $('
', { // the dropdown
+ 'class': n + '-' + c + ' ' + c + ' ' + prefix + 'fixed-top'
+ });
+ $.each(d, function(i, def){
+ if(t.o.btnsDef[def] && t.isSupportedBtn(def))
+ dd.append(t.buildSubBtn(def));
+ });
+ t.$box.append(dd.hide());
+ } else if(btn.key){
+ t.keys[btn.key] = {
+ func: btn.func || n,
+ param: btn.param || n
+ };
+ }
+
+ return $btn;
+ },
+ // Build a button for dropdown menu
+ // @param n : name of the subbutton
+ buildSubBtn: function(n){
+ var t = this,
+ b = t.o.btnsDef[n];
+
+ if(b.key){
+ t.keys[b.key] = {
+ func: b.func || n,
+ param: b.param || n
+ };
+ }
+
+ return $(' ', {
+ type: 'button',
+ 'class': t.o.prefix + n +'-dropdown-button' + (b.ico ? ' '+ t.o.prefix + b.ico +'-button' : ''),
+ text: b.text || b.title || t.lang[n] || n,
+ title: ((b.key) ? ' (Ctrl + ' + b.key + ')' : null),
+ style: b.style || null,
+ mousedown: function(){
+ $('body', t.doc).trigger('mousedown');
+
+ t.execCmd(b.func || n,
+ b.param || n);
+
+ return false;
+ }
+ });
+ },
+ // Build a button for right li
+ // @param n : name of the right button
+ buildRightBtn: function(n){
+ var l = this.lang[n];
+ return $(' ', {
+ type: 'button',
+ 'class': this.o.prefix + n + '-button',
+ title: l,
+ text: l,
+ tabindex: -1
+ });
+ },
+ // Check if button is supported
+ isSupportedBtn: function(b){
+ try {
+ return this.o.btnsDef[b].isSupported();
+ } catch(e){}
+ return true;
+ },
+
+ // Build overlay for modal box
+ buildOverlay: function(){
+ var t = this;
+ t.$overlay = $('
', {
+ 'class': t.o.prefix + 'overlay'
+ }).css({
+ top: t.$btnPane.outerHeight(),
+ height: (t.$ed.outerHeight() + 1) + 'px'
+ }).appendTo(t.$box);
+ return t.$overlay;
+ },
+ showOverlay: function(){
+ var t = this;
+ $(window).trigger('scroll');
+ t.$overlay.fadeIn(200);
+ t.$box.addClass(t.o.prefix + 'box-blur');
+ },
+ hideOverlay: function(){
+ var t = this;
+ t.$overlay.fadeOut(50);
+ t.$box.removeClass(t.o.prefix + 'box-blur');
+ },
+
+ // Management of fixed button pane
+ fixedBtnPaneEvents: function(){
+ var t = this,
+ fixedFullWidth = t.o.fixedFullWidth,
+ box = t.$box;
+ if(!t.o.fixedBtnPane)
+ return;
+
+ t.isFixed = false;
+
+ $(window)
+ .on('scroll resize', function(){
+ if(!box)
+ return;
+
+ t.syncCode();
+
+ var scrollTop = $(window).scrollTop(),
+ offset = box.offset().top + 1,
+ bp = t.$btnPane,
+ oh = bp.outerHeight();
+
+ if((scrollTop - offset > 0) && ((scrollTop - offset - t.height) < 0)){
+ if(!t.isFixed){
+ t.isFixed = true;
+ bp.css({
+ position: 'fixed',
+ top: 0,
+ left: fixedFullWidth ? '0' : 'auto',
+ zIndex: 7
+ });
+ $([t.$ta, t.$ed]).css({ marginTop: bp.height() });
+ }
+ bp.css({
+ width: fixedFullWidth ? '100%' : ((box.width()-1) + 'px')
+ });
+
+ $('.' + t.o.prefix + 'fixed-top', box).css({
+ position: fixedFullWidth ? 'fixed' : 'absolute',
+ top: fixedFullWidth ? oh : oh + (scrollTop - offset) + 'px',
+ zIndex: 15
+ });
+ } else if(t.isFixed) {
+ t.isFixed = false;
+ bp.removeAttr('style');
+ $([t.$ta, t.$ed]).css({ marginTop: 0 });
+ $('.' + t.o.prefix + 'fixed-top', box).css({
+ position: 'absolute',
+ top: oh
+ });
+ }
+ });
+ },
+
+
+
+ // Destroy the editor
+ destroy: function(){
+ var t = this,
+ prefix = t.o.prefix,
+ height = t.height,
+ html = t.html();
+
+ if(t.isTextarea)
+ t.$box.after(
+ t.$ta.css({ height: height })
+ .val(html)
+ .removeClass(prefix + 'textarea')
+ .show()
+ );
+ else
+ t.$box.after(
+ t.$ed
+ .css({ height: height })
+ .removeClass(prefix + 'editor')
+ .removeAttr('contenteditable')
+ .html(html)
+ .show()
+ );
+
+ t.$box.remove();
+ t.$c.removeData('trumbowyg');
+ },
+
+
+
+ // Empty the editor
+ empty: function(){
+ this.$ta.val('');
+ this.syncCode(true);
+ },
+
+
+
+ // Function call when click on viewHTML button
+ toggle: function(){
+ var t = this,
+ prefix = t.o.prefix;
+ t.semanticCode(false, true);
+ t.$box.toggleClass(prefix + 'editor-hidden ' + prefix + 'editor-visible');
+ t.$btnPane.toggleClass(prefix + 'disable');
+ $('.'+prefix + 'viewHTML-button', t.$btnPane).toggleClass(prefix + 'active');
+ if(t.$box.hasClass(prefix + 'editor-visible'))
+ t.$ta.attr('tabindex', -1);
+ else
+ t.$ta.removeAttr('tabindex');
+ },
+
+ // Open dropdown when click on a button which open that
+ dropdown: function(name){
+ var t = this,
+ d = t.doc,
+ prefix = t.o.prefix,
+ $dd = $('.'+name+'-'+prefix + 'dropdown', t.$box),
+ $btn = $('.'+prefix+name+'-button', t.$btnPane);
+
+ if($dd.is(':hidden')){
+ var o = $btn.offset().left;
+ $btn.addClass(prefix + 'active');
+
+ $dd.css({
+ position: 'absolute',
+ top: t.$btnPane.outerHeight(),
+ left: (t.o.fixedFullWidth && t.isFixed) ? o+'px' : (o - t.$btnPane.offset().left)+'px'
+ }).show();
+
+ $(window).trigger('scroll');
+
+ $('body', d).on('mousedown', function(){
+ $('.' + prefix + 'dropdown', d).hide();
+ $('.' + prefix + 'active', d).removeClass(prefix + 'active');
+ $('body', d).off('mousedown');
+ });
+ } else
+ $('body', d).trigger('mousedown');
+ },
+
+
+
+ // HTML Code management
+ html: function(html){
+ var t = this;
+ if(html){
+ t.$ta.val(html);
+ t.syncCode(true);
+ return t;
+ } else
+ return t.$ta.val();
+ },
+ syncCode: function(force){
+ var t = this;
+ if(!force && t.$ed.is(':visible')){
+ t.$ta.val(t.$ed.html());
+ t.$c.trigger('tbwchange');
+ } else {
+ t.$ed.html(t.$ta.val());
+ }
+
+ if(t.o.autogrow){
+ t.height = t.$ed.height();
+ if(t.height != t.$ta.css('height')){
+ t.$ta.css({ height: t.height });
+ t.$c.trigger('tbwresize');
+ }
+ }
+ },
+
+ // Analyse and update to semantic code
+ // @param force : force to sync code from textarea
+ // @param full : wrap text nodes in
+ semanticCode: function(force, full){
+ var t = this;
+ t.syncCode(force);
+ t.saveSelection();
+
+ if(t.o.semantic){
+ t.semanticTag('b', 'strong');
+ t.semanticTag('i', 'em');
+ t.semanticTag('strike', 'del');
+
+ if(full){
+ var blockElementsSelector = t.o.blockLevelElements.join(', '),
+ inlineElementsSelector = ':not(' + blockElementsSelector + ')';
+
+ // Wrap text nodes in span for easier processing
+ t.$ed.contents().filter(function() {
+ return this.nodeType === 3 && $.trim(this.nodeValue).length > 0;
+ }).wrap(' ');
+
+ // Wrap groups of inline elements in paragraphs (recursive)
+ var wrapInlinesInParagraphsFrom = function($from) {
+ if ($from.length !== 0) {
+ var $finalParagraph = $from.nextUntil(blockElementsSelector + ', br').andSelf()
+ .wrapAll('
').parent();
+
+ $finalParagraph.next('br').remove();
+
+ var $nextElement = $finalParagraph.nextAll(inlineElementsSelector).first();
+ if ($nextElement.length) {
+ wrapInlinesInParagraphsFrom($nextElement);
+ }
+ }
+ };
+ wrapInlinesInParagraphsFrom(t.$ed.children(inlineElementsSelector).first());
+
+ t.semanticTag('div', 'p', true);
+
+ // Unwrap paragraphs content, containing nothing usefull
+ t.$ed.find('p').filter(function() {
+ if (t.selection && this === t.selection.startContainer) {
+ // Don't remove currently being edited element
+ return false;
+ }
+ return $(this).text().trim().length === 0 && $(this).children().not('br, span').length === 0;
+ }).contents().unwrap();
+
+ // Get rid of temporial span's
+ $('[data-trumbowyg-textnode]', t.$ed).contents().unwrap();
+
+ // Replace empty with (IE loves adding empty
)
+ t.$ed.find('p:empty').replaceWith(' ');
+ }
+
+ t.restoreSelection();
+
+ t.$ta.val(t.$ed.html());
+ }
+ },
+
+ semanticTag: function(oldTag, newTag, copyAttributes){
+ $(oldTag, this.$ed).each(function() {
+ var $oldTag = $(this);
+ $oldTag.wrap('<' + newTag + '/>');
+ if (copyAttributes) {
+ $.each($oldTag.prop('attributes'), function() {
+ $oldTag.parent().attr(this.name, this.value);
+ });
+ }
+ $oldTag.contents().unwrap();
+ });
+ },
+
+ // Function call when user click on "Insert Link"
+ createLink: function(){
+ var t = this;
+ t.saveSelection();
+ t.openModalInsert(t.lang.createLink, {
+ url: {
+ label: 'URL',
+ required: true
+ },
+ title: {
+ label: t.lang.title
+ },
+ text: {
+ label: t.lang.text,
+ value: t.getSelectedText()
+ },
+ target: {
+ label: t.lang.target
+ }
+ }, function(v){ // v is value
+ var link = $(['', v.text, ' '].join(''));
+ if (v.title.length > 0)
+ link.attr('title',v.title);
+ if (v.target.length > 0)
+ link.attr('target',v.target);
+ t.selection.deleteContents();
+ t.selection.insertNode(link.get(0));
+ t.restoreSelection();
+ return true;
+ });
+ },
+ insertImage: function(){
+ var t = this;
+ t.saveSelection();
+ t.openModalInsert(t.lang.insertImage, {
+ url: {
+ label: 'URL',
+ required: true
+ },
+ alt: {
+ label: t.lang.description,
+ value: t.getSelectedText()
+ }
+ }, function(v){ // v are values
+ t.execCmd('insertImage', v.url);
+ $('img[src="'+v.url+'"]:not([alt])', t.$box).attr('alt', v.alt);
+ return true;
+ });
+ },
+
+
+ /*
+ * Call method of trumbowyg if exist
+ * else try to call anonymous function
+ * and finaly native execCommand
+ */
+ execCmd: function(cmd, param){
+ var t = this;
+ if(cmd != 'dropdown')
+ t.$ed.focus();
+
+ try {
+ t[cmd](param);
+ } catch(e){
+ try {
+ cmd(param, t);
+ } catch(e2){
+ if(cmd == 'insertHorizontalRule')
+ param = null;
+ else if(cmd == 'formatBlock' && (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0))
+ param = '<' + param + '>';
+
+ t.doc.execCommand(cmd, false, param);
+ }
+ }
+
+ if(cmd != 'dropdown')
+ t.syncCode();
+ },
+
+
+ // Open a modal box
+ openModal: function(title, content){
+ var t = this,
+ prefix = t.o.prefix;
+
+ // No open a modal box when exist other modal box
+ if($('.' + prefix + 'modal-box', t.$box).length > 0)
+ return false;
+
+ t.saveSelection();
+ t.showOverlay();
+
+ // Disable all btnPane btns
+ t.$btnPane.addClass(prefix + 'disable');
+
+ // Build out of ModalBox, it's the mask for animations
+ var $modal = $('
', {
+ 'class': prefix + 'modal ' + prefix + 'fixed-top'
+ }).css({
+ top: (t.$btnPane.height() + 1) + 'px'
+ }).appendTo(t.$box);
+
+ // Click on overlay close modal by cancelling them
+ t.$overlay.one('click', function(){
+ $modal.trigger(prefix + 'cancel');
+ return false;
+ });
+
+ // Build the form
+ var $form = $(' ', {
+ action: '',
+ html: content
+ })
+ .on('submit', function(){
+ $modal.trigger(prefix + 'confirm');
+ return false;
+ })
+ .on('reset', function(){
+ $modal.trigger(prefix + 'cancel');
+ return false;
+ });
+
+
+ // Build ModalBox and animate to show them
+ var $box = $('
', {
+ 'class': prefix + 'modal-box',
+ html: $form
+ })
+ .css({
+ top: '-' + t.$btnPane.outerHeight() + 'px',
+ opacity: 0
+ })
+ .appendTo($modal)
+ .animate({
+ top: 0,
+ opacity: 1
+ }, 100);
+
+
+ // Append title
+ $(' ', {
+ text: title,
+ 'class': prefix + 'modal-title'
+ }).prependTo($box);
+
+ $modal.height($box.outerHeight() + 10);
+
+
+ // Focus in modal box
+ $('input:first', $box).focus();
+
+
+ // Append Confirm and Cancel buttons
+ t.buildModalBtn('submit', $box);
+ t.buildModalBtn('reset', $box);
+
+
+ $(window).trigger('scroll');
+
+ return $modal;
+ },
+ // @param n is name of modal
+ buildModalBtn: function(n, $modal){
+ var t = this,
+ prefix = t.o.prefix;
+
+ return $(' ', {
+ 'class': prefix + 'modal-button ' + prefix + 'modal-' + n,
+ type: n,
+ text: t.lang[n] || n
+ }).appendTo($('form', $modal));
+ },
+ // close current modal box
+ closeModal: function(){
+ var t = this,
+ prefix = t.o.prefix;
+
+ t.$btnPane.removeClass(prefix + 'disable');
+ t.$overlay.off();
+
+ // Find the modal box
+ var $mb = $('.' + prefix + 'modal-box', t.$box);
+
+ $mb.animate({
+ top: '-' + $mb.height()
+ }, 100, function(){
+ $mb.parent().remove();
+ t.hideOverlay();
+ });
+
+ t.restoreSelection();
+ },
+ // Preformated build and management modal
+ openModalInsert: function(title, fields, cmd){
+ var t = this,
+ prefix = t.o.prefix,
+ lg = t.lang,
+ html = '';
+
+ for(var f in fields){
+ var fd = fields[f], // field definition
+ l = fd.label,
+ n = (fd.name) ? fd.name : f;
+
+ html += ''+
+ ((!l) ? (lg[f] ? lg[f] : f) : (lg[l] ? lg[l] : l))+
+ ' ';
+ }
+
+ return t.openModal(title, html)
+ .on(prefix + 'confirm', function(){
+ var $form = $('form', $(this)),
+ valid = true,
+ v = {}; // values
+
+ for(var f in fields){
+ var $field = $('input[name="'+f+'"]', $form);
+
+ v[f] = $.trim($field.val());
+
+ // Validate value
+ if(fields[f].required && v[f] === ''){
+ valid = false;
+ t.addErrorOnModalField($field, t.lang.required);
+ } else if(fields[f].pattern && !fields[f].pattern.test(v[f])){
+ valid = false;
+ t.addErrorOnModalField($field, fields[f].patternError);
+ }
+ }
+
+ if(valid){
+ t.restoreSelection();
+
+ if(cmd(v, fields)){
+ t.syncCode();
+ t.closeModal();
+ $(this).off(prefix + 'confirm');
+ }
+ }
+ })
+ .one(prefix + 'cancel', function(){
+ $(this).off(prefix + 'confirm');
+ t.closeModal();
+ });
+ },
+ addErrorOnModalField: function($field, err){
+ var prefix = this.o.prefix,
+ $label = $field.parent();
+
+ $field
+ .on('change keyup', function(){
+ $label.removeClass(prefix + 'input-error');
+ });
+
+ $label
+ .addClass(prefix + 'input-error')
+ .find('input+span')
+ .append(
+ $(' ', {
+ 'class': prefix +'msg-error',
+ text: err
+ })
+ );
+ },
+
+
+
+
+ // Selection management
+ saveSelection: function(){
+ var t = this,
+ ds = t.doc.selection;
+
+ t.selection = null;
+ if(window.getSelection){
+ var s = window.getSelection();
+ if(s.getRangeAt && s.rangeCount)
+ t.selection = s.getRangeAt(0);
+ } else if(ds && ds.createRange)
+ t.selection = ds.createRange();
+ },
+ restoreSelection: function(){
+ var t = this,
+ range = t.selection;
+
+ if(range){
+ if(window.getSelection){
+ var s = window.getSelection();
+ s.removeAllRanges();
+ s.addRange(range);
+ } else if(t.doc.selection && range.select)
+ range.select();
+ }
+ },
+ getSelectedText: function(){
+ var s = this.selection;
+ return (s.text !== undefined) ? s.text : s+'';
+ }
+ };
+})(navigator, window, document, jQuery);
diff --git a/plugins/trumbowyg/trumbowyg/trumbowyg.min.js b/plugins/trumbowyg/trumbowyg/trumbowyg.min.js
new file mode 100755
index 00000000..60b10751
--- /dev/null
+++ b/plugins/trumbowyg/trumbowyg/trumbowyg.min.js
@@ -0,0 +1,2 @@
+/** Trumbowyg v2.0.0-beta.4 - A lightweight WYSIWYG editor - alex-d.github.io/Trumbowyg - License MIT - Author : Alexandre Demode (Alex-D) / alex-d.fr */
+jQuery.trumbowyg={langs:{en:{viewHTML:"View HTML",formatting:"Formatting",p:"Paragraph",blockquote:"Quote",code:"Code",header:"Header",bold:"Bold",italic:"Italic",strikethrough:"Stroke",underline:"Underline",strong:"Strong",em:"Emphasis",del:"Deleted",unorderedList:"Unordered list",orderedList:"Ordered list",insertImage:"Insert Image",insertVideo:"Insert Video",link:"Link",createLink:"Insert link",unlink:"Remove link",justifyLeft:"Align Left",justifyCenter:"Align Center",justifyRight:"Align Right",justifyFull:"Align Justify",horizontalRule:"Insert horizontal rule",removeformat:"Remove format",fullscreen:"fullscreen",close:"Close",submit:"Confirm",reset:"Cancel",required:"Required",description:"Description",title:"Title",text:"Text",target:"Target"}},opts:{},btnsGrps:{design:["bold","italic","underline","strikethrough"],semantic:["strong","em","del"],justify:["justifyLeft","justifyCenter","justifyRight","justifyFull"],lists:["unorderedList","orderedList"]}},function(e,t,n,o,r){"use strict";o.fn.trumbowyg=function(e,t){if(e===Object(e)||!e)return this.each(function(){o(this).data("trumbowyg")||o(this).data("trumbowyg",new i(this,e))});if(1===this.length)try{var n=o(this).data("trumbowyg");switch(e){case"openModal":return n.openModal(t.title,t.content);case"closeModal":return n.closeModal();case"openModalInsert":return n.openModalInsert(t.title,t.fields,t.callback);case"saveSelection":return n.saveSelection();case"getSelection":return n.selection;case"getSelectedText":return n.getSelectedText();case"restoreSelection":return n.restoreSelection();case"destroy":return n.destroy();case"empty":return n.empty();case"lang":return n.lang;case"html":return n.html(t)}}catch(r){}return!1};var i=function(e,t){var r=this;r.doc=e.ownerDocument||n,r.$ta=o(e),r.$c=o(e),t=o.extend(!0,{},t,o.trumbowyg.opts),r.lang="undefined"==typeof t.lang||"undefined"==typeof o.trumbowyg.langs[t.lang]?o.trumbowyg.langs.en:o.extend(!0,{},o.trumbowyg.langs.en,o.trumbowyg.langs[t.lang]);var i=r.lang.header;r.o=o.extend(!0,{},{lang:"en",dir:"ltr",closable:!1,fullscreenable:!0,fixedBtnPane:!1,fixedFullWidth:!1,autogrow:!1,prefix:"trumbowyg-",semantic:!0,resetCss:!1,removeformatPasted:!1,btns:["viewHTML","|","formatting","|","btnGrp-design","|","link","|","insertImage","|","btnGrp-justify","|","btnGrp-lists","|","horizontalRule","|","removeformat"],btnsAdd:[],btnsDef:{viewHTML:{func:"toggle"},p:{func:"formatBlock"},blockquote:{func:"formatBlock"},h1:{func:"formatBlock",title:i+" 1"},h2:{func:"formatBlock",title:i+" 2"},h3:{func:"formatBlock",title:i+" 3"},h4:{func:"formatBlock",title:i+" 4"},bold:{key:"B"},italic:{key:"I"},underline:{},strikethrough:{},strong:{func:"bold",key:"B"},em:{func:"italic",key:"I"},del:{func:"strikethrough"},createLink:{key:"K"},unlink:{},insertImage:{},justifyLeft:{},justifyCenter:{},justifyRight:{},justifyFull:{},unorderedList:{func:"insertUnorderedList"},orderedList:{func:"insertOrderedList"},horizontalRule:{func:"insertHorizontalRule"},removeformat:{},formatting:{dropdown:["p","blockquote","h1","h2","h3","h4"]},link:{dropdown:["createLink","unlink"]}},blockLevelElements:["br","p","div","ul","ol","table","img","address","article","aside","audio","blockquote","canvas","dl","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","main","nav","noscript","output","pre","section","tfoot","video"]},t),t.btns?r.o.btns=t.btns:r.o.semantic&&(r.o.btns[4]="btnGrp-semantic"),r.keys=[],r.init()};i.prototype={init:function(){var e=this;e.height=e.$ta.height(),e.buildEditor(),e.buildBtnPane(),e.fixedBtnPaneEvents(),e.buildOverlay()},buildEditor:function(){var e=this,r=e.o.prefix,i="";e.$box=o("
",{"class":r+"box "+r+"editor-visible "+r+e.o.lang+" trumbowyg"}),e.isTextarea=e.$ta.is("textarea"),e.isTextarea?(i=e.$ta.val(),e.$ed=o("
"),e.$box.insertAfter(e.$ta).append(e.$ed,e.$ta)):(e.$ed=e.$ta,i=e.$ed.html(),e.$ta=o(" ",{name:e.$ta.attr("id"),height:e.height}).val(i),e.$box.insertAfter(e.$ed).append(e.$ta,e.$ed),e.syncCode()),e.$ta.addClass(r+"textarea").attr("tabindex",-1),e.$ed.addClass(r+"editor").attr({contenteditable:!0,dir:e.lang._dir||e.o.dir}).html(i),e.$c.is("[placeholder]")&&e.$ed.attr("placeholder",e.$c.attr("placeholder")),e.o.resetCss&&e.$ed.addClass(r+"reset-css"),e.o.autogrow||e.$ta.add(e.$ed).css({height:e.height,overflow:"auto"}),e.o.semantic&&e.semanticCode(),e._ctrl=!1,e.$ed.on("dblclick","img",function(){var t=o(this);return e.openModalInsert(e.lang.insertImage,{url:{label:"URL",value:t.attr("src"),required:!0},alt:{label:e.lang.description,value:t.attr("alt")}},function(e){return t.attr({src:e.url,alt:e.alt})}),!1}).on("keydown",function(t){if(e._composition=229===t.which,t.ctrlKey){e._ctrl=!0;var n=e.keys[String.fromCharCode(t.which).toUpperCase()];try{return e.execCmd(n.func,n.param),!1}catch(t){}}}).on("keyup",function(t){e._ctrl||17===t.which||e._composition||(e.semanticCode(!1,13===t.which),e.$c.trigger("tbwchange")),setTimeout(function(){e._ctrl=!1},200)}).on("focus blur",function(t){e.$c.trigger("tbw"+t.type)}).on("paste",function(o){if(e.o.removeformatPasted){o.preventDefault();try{var r=t.clipboardData.getData("Text");try{e.doc.selection.createRange().pasteHTML(r)}catch(i){e.doc.getSelection().getRangeAt(0).insertNode(n.createTextNode(r))}}catch(i){e.execCmd("insertText",(o.originalEvent||o).clipboardData.getData("text/plain"))}}setTimeout(function(){e.o.semantic?e.semanticCode(!1,!0):e.syncCode(),e.$c.trigger("tbwpaste",o)},0)}),e.$ta.on("keyup paste",function(){e.$c.trigger("tbwchange")}),o(e.doc).on("keydown",function(t){return 27===t.which?(e.closeModal(),!1):void 0})},buildBtnPane:function(){var e=this,n=e.o.prefix;if(e.o.btns!==!1){e.$btnPane=o("",{"class":n+"button-pane"}),o.each(e.o.btns.concat(e.o.btnsAdd),function(t,i){try{var a=i.split("btnGrp-");a[1]!==r&&(i=o.trumbowyg.btnsGrps[a[1]])}catch(s){}o.isArray(i)||(i=[i]),o.each(i,function(t,r){try{var i=o(" ");"|"===r?i.addClass(n+"separator"):e.isSupportedBtn(r)&&i.append(e.buildBtn(r)),e.$btnPane.append(i)}catch(a){}})});var i=o(" ",{"class":n+"not-disable "+n+"buttons-right"});e.o.fullscreenable&&i.append(e.buildRightBtn("fullscreen").on("click",function(){var r=n+"fullscreen";e.$box.toggleClass(r),e.$box.hasClass(r)?(o("body").addClass(n+"body-fullscreen"),o.each([e.$ta,e.$ed],function(){o(this).css({height:"calc(100% - 35px)",overflow:"auto"})}),e.$btnPane.css("width","100%")):(o("body").removeClass(n+"body-fullscreen"),e.$box.removeAttr("style"),e.o.autogrow||o.each([e.$ta,e.$ed],function(){o(this).css("height",e.height)})),o(t).trigger("scroll")})),e.o.closable&&i.append(e.buildRightBtn("close").on("click",function(){e.$box.hasClass(n+"fullscreen")&&o("body").css("overflow","auto"),e.destroy(),e.$c.trigger("tbwclose")})),i.not(":empty")&&e.$btnPane.append(i),e.$box.prepend(e.$btnPane)}},buildBtn:function(e){var t=this,n=t.o.prefix,r=t.o.btnsDef[e],i=r.dropdown,a=t.lang[e]||e,s=o(" ",{type:"button","class":n+e+"-button"+(r.ico?" "+n+r.ico+"-button":""),text:r.text||r.title||a,title:r.title||r.text||a+(r.key?" (Ctrl + "+r.key+")":""),tabindex:-1,mousedown:function(){return(!i||o("."+e+"-"+n+"dropdown",t.$box).is(":hidden"))&&o("body",t.doc).trigger("mousedown"),!t.$btnPane.hasClass(n+"disable")||o(this).hasClass(n+"active")||o(this).parent().hasClass(n+"not-disable")?(t.execCmd((i?"dropdown":!1)||r.func||e,r.param||e),!1):!1}});if(i){s.addClass(n+"open-dropdown");var l=n+"dropdown",c=o("
",{"class":e+"-"+l+" "+l+" "+n+"fixed-top"});o.each(i,function(e,n){t.o.btnsDef[n]&&t.isSupportedBtn(n)&&c.append(t.buildSubBtn(n))}),t.$box.append(c.hide())}else r.key&&(t.keys[r.key]={func:r.func||e,param:r.param||e});return s},buildSubBtn:function(e){var t=this,n=t.o.btnsDef[e];return n.key&&(t.keys[n.key]={func:n.func||e,param:n.param||e}),o(" ",{type:"button","class":t.o.prefix+e+"-dropdown-button"+(n.ico?" "+t.o.prefix+n.ico+"-button":""),text:n.text||n.title||t.lang[e]||e,title:n.key?" (Ctrl + "+n.key+")":null,style:n.style||null,mousedown:function(){return o("body",t.doc).trigger("mousedown"),t.execCmd(n.func||e,n.param||e),!1}})},buildRightBtn:function(e){var t=this.lang[e];return o(" ",{type:"button","class":this.o.prefix+e+"-button",title:t,text:t,tabindex:-1})},isSupportedBtn:function(e){try{return this.o.btnsDef[e].isSupported()}catch(t){}return!0},buildOverlay:function(){var e=this;return e.$overlay=o("
",{"class":e.o.prefix+"overlay"}).css({top:e.$btnPane.outerHeight(),height:e.$ed.outerHeight()+1+"px"}).appendTo(e.$box),e.$overlay},showOverlay:function(){var e=this;o(t).trigger("scroll"),e.$overlay.fadeIn(200),e.$box.addClass(e.o.prefix+"box-blur")},hideOverlay:function(){var e=this;e.$overlay.fadeOut(50),e.$box.removeClass(e.o.prefix+"box-blur")},fixedBtnPaneEvents:function(){var e=this,n=e.o.fixedFullWidth,r=e.$box;e.o.fixedBtnPane&&(e.isFixed=!1,o(t).on("scroll resize",function(){if(r){e.syncCode();var i=o(t).scrollTop(),a=r.offset().top+1,s=e.$btnPane,l=s.outerHeight();i-a>0&&i-a-e.height<0?(e.isFixed||(e.isFixed=!0,s.css({position:"fixed",top:0,left:n?"0":"auto",zIndex:7}),o([e.$ta,e.$ed]).css({marginTop:s.height()})),s.css({width:n?"100%":r.width()-1+"px"}),o("."+e.o.prefix+"fixed-top",r).css({position:n?"fixed":"absolute",top:n?l:l+(i-a)+"px",zIndex:15})):e.isFixed&&(e.isFixed=!1,s.removeAttr("style"),o([e.$ta,e.$ed]).css({marginTop:0}),o("."+e.o.prefix+"fixed-top",r).css({position:"absolute",top:l}))}}))},destroy:function(){var e=this,t=e.o.prefix,n=e.height,o=e.html();e.isTextarea?e.$box.after(e.$ta.css({height:n}).val(o).removeClass(t+"textarea").show()):e.$box.after(e.$ed.css({height:n}).removeClass(t+"editor").removeAttr("contenteditable").html(o).show()),e.$box.remove(),e.$c.removeData("trumbowyg")},empty:function(){this.$ta.val(""),this.syncCode(!0)},toggle:function(){var e=this,t=e.o.prefix;e.semanticCode(!1,!0),e.$box.toggleClass(t+"editor-hidden "+t+"editor-visible"),e.$btnPane.toggleClass(t+"disable"),o("."+t+"viewHTML-button",e.$btnPane).toggleClass(t+"active"),e.$box.hasClass(t+"editor-visible")?e.$ta.attr("tabindex",-1):e.$ta.removeAttr("tabindex")},dropdown:function(e){var n=this,r=n.doc,i=n.o.prefix,a=o("."+e+"-"+i+"dropdown",n.$box),s=o("."+i+e+"-button",n.$btnPane);if(a.is(":hidden")){var l=s.offset().left;s.addClass(i+"active"),a.css({position:"absolute",top:n.$btnPane.outerHeight(),left:n.o.fixedFullWidth&&n.isFixed?l+"px":l-n.$btnPane.offset().left+"px"}).show(),o(t).trigger("scroll"),o("body",r).on("mousedown",function(){o("."+i+"dropdown",r).hide(),o("."+i+"active",r).removeClass(i+"active"),o("body",r).off("mousedown")})}else o("body",r).trigger("mousedown")},html:function(e){var t=this;return e?(t.$ta.val(e),t.syncCode(!0),t):t.$ta.val()},syncCode:function(e){var t=this;!e&&t.$ed.is(":visible")?(t.$ta.val(t.$ed.html()),t.$c.trigger("tbwchange")):t.$ed.html(t.$ta.val()),t.o.autogrow&&(t.height=t.$ed.height(),t.height!=t.$ta.css("height")&&(t.$ta.css({height:t.height}),t.$c.trigger("tbwresize")))},semanticCode:function(e,t){var n=this;if(n.syncCode(e),n.saveSelection(),n.o.semantic){if(n.semanticTag("b","strong"),n.semanticTag("i","em"),n.semanticTag("strike","del"),t){var r=n.o.blockLevelElements.join(", "),i=":not("+r+")";n.$ed.contents().filter(function(){return 3===this.nodeType&&o.trim(this.nodeValue).length>0}).wrap(" ");var a=function(e){if(0!==e.length){var t=e.nextUntil(r+", br").andSelf().wrapAll("
").parent();t.next("br").remove();var n=t.nextAll(i).first();n.length&&a(n)}};a(n.$ed.children(i).first()),n.semanticTag("div","p",!0),n.$ed.find("p").filter(function(){return n.selection&&this===n.selection.startContainer?!1:0===o(this).text().trim().length&&0===o(this).children().not("br, span").length}).contents().unwrap(),o("[data-trumbowyg-textnode]",n.$ed).contents().unwrap(),n.$ed.find("p:empty").replaceWith(" ")}n.restoreSelection(),n.$ta.val(n.$ed.html())}},semanticTag:function(e,t,n){o(e,this.$ed).each(function(){var e=o(this);e.wrap("<"+t+"/>"),n&&o.each(e.prop("attributes"),function(){e.parent().attr(this.name,this.value)}),e.contents().unwrap()})},createLink:function(){var e=this;e.saveSelection(),e.openModalInsert(e.lang.createLink,{url:{label:"URL",required:!0},title:{label:e.lang.title},text:{label:e.lang.text,value:e.getSelectedText()},target:{label:e.lang.target}},function(t){var n=o(['',t.text," "].join(""));return t.title.length>0&&n.attr("title",t.title),t.target.length>0&&n.attr("target",t.target),e.selection.deleteContents(),e.selection.insertNode(n.get(0)),e.restoreSelection(),!0})},insertImage:function(){var e=this;e.saveSelection(),e.openModalInsert(e.lang.insertImage,{url:{label:"URL",required:!0},alt:{label:e.lang.description,value:e.getSelectedText()}},function(t){return e.execCmd("insertImage",t.url),o('img[src="'+t.url+'"]:not([alt])',e.$box).attr("alt",t.alt),!0})},execCmd:function(t,n){var o=this;"dropdown"!=t&&o.$ed.focus();try{o[t](n)}catch(r){try{t(n,o)}catch(i){"insertHorizontalRule"==t?n=null:"formatBlock"==t&&(-1!==e.userAgent.indexOf("MSIE")||e.appVersion.indexOf("Trident/")>0)&&(n="<"+n+">"),o.doc.execCommand(t,!1,n)}}"dropdown"!=t&&o.syncCode()},openModal:function(e,n){var r=this,i=r.o.prefix;if(o("."+i+"modal-box",r.$box).length>0)return!1;r.saveSelection(),r.showOverlay(),r.$btnPane.addClass(i+"disable");var a=o("
",{"class":i+"modal "+i+"fixed-top"}).css({top:r.$btnPane.height()+1+"px"}).appendTo(r.$box);r.$overlay.one("click",function(){return a.trigger(i+"cancel"),!1});var s=o(" ",{action:"",html:n}).on("submit",function(){return a.trigger(i+"confirm"),!1}).on("reset",function(){return a.trigger(i+"cancel"),!1}),l=o("
",{"class":i+"modal-box",html:s}).css({top:"-"+r.$btnPane.outerHeight()+"px",opacity:0}).appendTo(a).animate({top:0,opacity:1},100);return o(" ",{text:e,"class":i+"modal-title"}).prependTo(l),a.height(l.outerHeight()+10),o("input:first",l).focus(),r.buildModalBtn("submit",l),r.buildModalBtn("reset",l),o(t).trigger("scroll"),a},buildModalBtn:function(e,t){var n=this,r=n.o.prefix;return o(" ",{"class":r+"modal-button "+r+"modal-"+e,type:e,text:n.lang[e]||e}).appendTo(o("form",t))},closeModal:function(){var e=this,t=e.o.prefix;e.$btnPane.removeClass(t+"disable"),e.$overlay.off();var n=o("."+t+"modal-box",e.$box);n.animate({top:"-"+n.height()},100,function(){n.parent().remove(),e.hideOverlay()}),e.restoreSelection()},openModalInsert:function(e,t,n){var r=this,i=r.o.prefix,a=r.lang,s="";for(var l in t){var c=t[l],d=c.label,u=c.name?c.name:l;s+=''+(d?a[d]?a[d]:d:a[l]?a[l]:l)+" "}return r.openModal(e,s).on(i+"confirm",function(){var e=o("form",o(this)),a=!0,s={};for(var l in t){var c=o('input[name="'+l+'"]',e);s[l]=o.trim(c.val()),t[l].required&&""===s[l]?(a=!1,r.addErrorOnModalField(c,r.lang.required)):t[l].pattern&&!t[l].pattern.test(s[l])&&(a=!1,r.addErrorOnModalField(c,t[l].patternError))}a&&(r.restoreSelection(),n(s,t)&&(r.syncCode(),r.closeModal(),o(this).off(i+"confirm")))}).one(i+"cancel",function(){o(this).off(i+"confirm"),r.closeModal()})},addErrorOnModalField:function(e,t){var n=this.o.prefix,r=e.parent();e.on("change keyup",function(){r.removeClass(n+"input-error")}),r.addClass(n+"input-error").find("input+span").append(o(" ",{"class":n+"msg-error",text:t}))},saveSelection:function(){var e=this,n=e.doc.selection;if(e.selection=null,t.getSelection){var o=t.getSelection();o.getRangeAt&&o.rangeCount&&(e.selection=o.getRangeAt(0))}else n&&n.createRange&&(e.selection=n.createRange())},restoreSelection:function(){var e=this,n=e.selection;if(n)if(t.getSelection){var o=t.getSelection();o.removeAllRanges(),o.addRange(n)}else e.doc.selection&&n.select&&n.select()},getSelectedText:function(){var e=this.selection;return e.text!==r?e.text:e+""}}}(navigator,window,document,jQuery);
\ No newline at end of file
diff --git a/plugins/trumbowyg/trumbowyg/ui/images/icons-black-2x.png b/plugins/trumbowyg/trumbowyg/ui/images/icons-black-2x.png
new file mode 100755
index 00000000..08bdc74b
Binary files /dev/null and b/plugins/trumbowyg/trumbowyg/ui/images/icons-black-2x.png differ
diff --git a/plugins/trumbowyg/trumbowyg/ui/images/icons-black.png b/plugins/trumbowyg/trumbowyg/ui/images/icons-black.png
new file mode 100755
index 00000000..9b4f7306
Binary files /dev/null and b/plugins/trumbowyg/trumbowyg/ui/images/icons-black.png differ
diff --git a/plugins/trumbowyg/trumbowyg/ui/images/icons-white-2x.png b/plugins/trumbowyg/trumbowyg/ui/images/icons-white-2x.png
new file mode 100755
index 00000000..0d18ea9c
Binary files /dev/null and b/plugins/trumbowyg/trumbowyg/ui/images/icons-white-2x.png differ
diff --git a/plugins/trumbowyg/trumbowyg/ui/images/icons-white.png b/plugins/trumbowyg/trumbowyg/ui/images/icons-white.png
new file mode 100755
index 00000000..2ec87731
Binary files /dev/null and b/plugins/trumbowyg/trumbowyg/ui/images/icons-white.png differ
diff --git a/plugins/trumbowyg/trumbowyg/ui/trumbowyg.css b/plugins/trumbowyg/trumbowyg/ui/trumbowyg.css
new file mode 100755
index 00000000..3a3d5611
--- /dev/null
+++ b/plugins/trumbowyg/trumbowyg/ui/trumbowyg.css
@@ -0,0 +1,661 @@
+/**
+ * Trumbowyg v2.0.0-beta.4 - A lightweight WYSIWYG editor
+ * Default stylesheet for Trumbowyg editor
+ * ------------------------
+ * @link http://alex-d.github.io/Trumbowyg
+ * @license MIT
+ * @author Alexandre Demode (Alex-D)
+ * Twitter : @AlexandreDemode
+ * Website : alex-d.fr
+ */
+
+.trumbowyg-box *, .trumbowyg-box *::before, .trumbowyg-box *::after {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box; }
+
+.trumbowyg-box, .trumbowyg-editor {
+ display: block;
+ position: relative;
+ border: 1px solid #DDD;
+ width: 96%;
+ min-height: 300px;
+ margin: 17px auto; }
+
+.trumbowyg-box .trumbowyg-editor {
+ margin: 0 auto; }
+
+.trumbowyg-box.trumbowyg-fullscreen {
+ background: #FEFEFE; }
+
+.trumbowyg-editor, .trumbowyg-textarea {
+ position: relative;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ padding: 1% 2%;
+ min-height: 300px;
+ width: 100%;
+ border-style: none;
+ resize: none;
+ outline: none; }
+
+.trumbowyg-box-blur .trumbowyg-editor * {
+ color: transparent !important;
+ text-shadow: 0 0 7px #333; }
+.trumbowyg-box-blur .trumbowyg-editor img {
+ opacity: 0.2; }
+
+.trumbowyg-textarea {
+ position: relative;
+ display: block;
+ overflow: auto;
+ border: none;
+ white-space: normal;
+ font-size: 14px;
+ font-family: "Inconsolata", "Consolas", "Courier", "Courier New", sans-serif;
+ line-height: 18px; }
+
+.trumbowyg-box.trumbowyg-editor-visible .trumbowyg-textarea {
+ position: absolute;
+ top: 37px;
+ height: 1px !important;
+ width: 25%;
+ min-height: 0 !important;
+ padding: 0 !important;
+ background: none;
+ opacity: 0; }
+
+.trumbowyg-box.trumbowyg-editor-hidden .trumbowyg-textarea {
+ display: block; }
+.trumbowyg-box.trumbowyg-editor-hidden .trumbowyg-editor {
+ display: none; }
+
+.trumbowyg-editor[contenteditable=true]:empty:before {
+ content: attr(placeholder);
+ color: #999; }
+
+.trumbowyg-button-pane {
+ position: relative;
+ width: 100%;
+ background: #ecf0f1;
+ border-bottom: 1px solid #d7e0e2;
+ margin: 0;
+ padding: 0;
+ list-style-type: none;
+ line-height: 10px;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden; }
+ .trumbowyg-button-pane li {
+ display: inline-block;
+ text-align: center;
+ overflow: hidden;
+ padding: 0 !important; }
+ .trumbowyg-button-pane li.trumbowyg-separator {
+ width: 1px;
+ background: #d7e0e2;
+ margin: 0 5px;
+ height: 35px; }
+ .trumbowyg-button-pane.trumbowyg-disable li:not(.trumbowyg-not-disable) button:not(.trumbowyg-active) {
+ opacity: 0.2;
+ cursor: default; }
+ .trumbowyg-button-pane.trumbowyg-disable li.trumbowyg-separator {
+ background: #e3e9eb; }
+ .trumbowyg-button-pane li button {
+ padding: 1px 6px !important; }
+ .trumbowyg-button-pane:not(.trumbowyg-disable) li button:hover, .trumbowyg-button-pane:not(.trumbowyg-disable) li button:focus, .trumbowyg-button-pane li button.trumbowyg-active, .trumbowyg-button-pane li.trumbowyg-not-disable button:hover, .trumbowyg-button-pane li.trumbowyg-not-disable button:focus {
+ background-color: #FFF;
+ outline: none; }
+ .trumbowyg-button-pane li .trumbowyg-open-dropdown:after {
+ display: block;
+ content: " ";
+ position: absolute;
+ top: 25px;
+ right: 3px;
+ height: 0;
+ width: 0;
+ border: 3px solid transparent;
+ border-top-color: #555; }
+ .trumbowyg-button-pane .trumbowyg-buttons-right {
+ float: right;
+ width: auto; }
+ .trumbowyg-button-pane .trumbowyg-buttons-right button {
+ float: left; }
+
+.trumbowyg-dropdown {
+ width: 200px;
+ border: 1px solid #ecf0f1;
+ padding: 5px 0;
+ border-top: none;
+ background: #FFF;
+ margin-left: -1px;
+ -webkit-box-shadow: rgba(0, 0, 0, 0.1) 0 2px 3px;
+ box-shadow: rgba(0, 0, 0, 0.1) 0 2px 3px; }
+ .trumbowyg-dropdown button {
+ display: block;
+ width: 100%;
+ height: 35px;
+ line-height: 35px;
+ text-decoration: none;
+ background: #FFF;
+ padding: 0 14px;
+ color: #333 !important;
+ border: none;
+ cursor: pointer;
+ text-align: left;
+ font-size: 15px;
+ -webkit-transition: all 0.15s;
+ transition: all 0.15s; }
+ .trumbowyg-dropdown button:hover, .trumbowyg-dropdown button:focus {
+ background: #ecf0f1; }
+
+/* Modal box */
+.trumbowyg-modal {
+ position: absolute;
+ top: 0;
+ left: 50%;
+ margin-left: -260px;
+ width: 520px;
+ height: 350px;
+ overflow: hidden;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden; }
+
+.trumbowyg-modal-box {
+ position: absolute;
+ top: 0;
+ left: 50%;
+ margin-left: -250px;
+ width: 500px;
+ padding-bottom: 45px;
+ z-index: 1;
+ background-color: #FFF;
+ text-align: center;
+ font-size: 14px;
+ -webkit-box-shadow: rgba(0, 0, 0, 0.2) 0 2px 3px;
+ box-shadow: rgba(0, 0, 0, 0.2) 0 2px 3px;
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden; }
+ .trumbowyg-modal-box .trumbowyg-modal-title {
+ font-size: 24px;
+ font-weight: bold;
+ margin: 0 0 20px;
+ padding: 15px 0 13px;
+ display: block;
+ border-bottom: 1px solid #EEE;
+ color: #333;
+ background: #fbfcfc; }
+ .trumbowyg-modal-box .trumbowyg-progress {
+ width: 100%;
+ background: #F00;
+ height: 3px;
+ position: absolute;
+ top: 58px; }
+ .trumbowyg-modal-box .trumbowyg-progress .trumbowyg-progress-bar {
+ background: #2BC06A;
+ height: 100%;
+ -webkit-transition: width 0.15s linear;
+ transition: width 0.15s linear; }
+ .trumbowyg-modal-box label {
+ display: block;
+ position: relative;
+ margin: 15px 12px;
+ height: 27px;
+ line-height: 27px;
+ overflow: hidden; }
+ .trumbowyg-modal-box label .trumbowyg-input-infos {
+ display: block;
+ text-align: left;
+ height: 25px;
+ line-height: 25px;
+ -webkit-transition: all 0.15;
+ transition: all 0.15; }
+ .trumbowyg-modal-box label .trumbowyg-input-infos span {
+ display: block;
+ color: #69878e;
+ background-color: #fbfcfc;
+ border: 1px solid #DEDEDE;
+ padding: 0 7px;
+ width: 137px; }
+ .trumbowyg-modal-box label .trumbowyg-input-infos span.trumbowyg-msg-error {
+ color: #e74c3c; }
+ .trumbowyg-modal-box label.trumbowyg-input-error input, .trumbowyg-modal-box label.trumbowyg-input-error textarea {
+ border: 1px solid #e74c3c; }
+ .trumbowyg-modal-box label.trumbowyg-input-error .trumbowyg-input-infos {
+ margin-top: -27px; }
+ .trumbowyg-modal-box label input {
+ position: absolute;
+ top: 0;
+ right: 0;
+ height: 27px;
+ line-height: 27px;
+ border: 1px solid #DEDEDE;
+ background: transparent;
+ font-size: 14px;
+ width: 340px;
+ padding: 0 7px;
+ -webkit-transition: all 0.15s;
+ transition: all 0.15s; }
+ .trumbowyg-modal-box label input:hover, .trumbowyg-modal-box label input:focus {
+ outline: none;
+ border: 1px solid #95a5a6; }
+ .trumbowyg-modal-box label input:focus {
+ background: rgba(230, 230, 255, 0.1); }
+ .trumbowyg-modal-box .error {
+ margin-top: 25px;
+ display: block;
+ color: red; }
+ .trumbowyg-modal-box .trumbowyg-modal-button {
+ position: absolute;
+ bottom: 10px;
+ right: 0;
+ text-decoration: none;
+ color: #FFF;
+ display: block;
+ width: 100px;
+ height: 35px;
+ line-height: 33px;
+ margin: 0 10px;
+ background-color: #333;
+ border: none;
+ border-top: none;
+ cursor: pointer;
+ font-family: "Trebuchet MS", Helvetica, Verdana, sans-serif;
+ font-size: 16px;
+ -webkit-transition: all 0.15s;
+ transition: all 0.15s; }
+ .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit {
+ right: 110px;
+ background: #2bc069; }
+ .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit:hover, .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit:focus {
+ background: #40d47d;
+ outline: none; }
+ .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit:active {
+ background: #25a259; }
+ .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset {
+ color: #555;
+ background: #e6e6e6; }
+ .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset:hover, .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset:focus {
+ background: #fbfbfb;
+ outline: none; }
+ .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset:active {
+ background: #d4d4d4; }
+
+.trumbowyg-overlay {
+ position: absolute;
+ background-color: rgba(255, 255, 255, 0.5);
+ width: 100%;
+ left: 0;
+ display: none; }
+
+/**
+ * Fullscreen
+ */
+body.trumbowyg-body-fullscreen {
+ overflow: hidden; }
+
+.trumbowyg-fullscreen {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ margin: 0;
+ padding: 0;
+ z-index: 99999; }
+ .trumbowyg-fullscreen.trumbowyg-box, .trumbowyg-fullscreen .trumbowyg-editor {
+ border: none; }
+ .trumbowyg-fullscreen .trumbowyg-overlay {
+ height: 100% !important; }
+
+/*
+ * Reset for resetCss option
+ */
+.trumbowyg-editor object, .trumbowyg-editor embed, .trumbowyg-editor video, .trumbowyg-editor img {
+ width: auto;
+ max-width: 100%; }
+.trumbowyg-editor video, .trumbowyg-editor img {
+ height: auto; }
+.trumbowyg-editor img {
+ cursor: move; }
+.trumbowyg-editor.trumbowyg-reset-css {
+ background: #FEFEFE !important;
+ font-family: "Trebuchet MS", Helvetica, Verdana, sans-serif !important;
+ font-size: 14px !important;
+ line-height: 1.45em !important;
+ white-space: normal !important;
+ color: #333; }
+ .trumbowyg-editor.trumbowyg-reset-css a {
+ color: #15c !important;
+ text-decoration: underline !important; }
+ .trumbowyg-editor.trumbowyg-reset-css div, .trumbowyg-editor.trumbowyg-reset-css p, .trumbowyg-editor.trumbowyg-reset-css ul, .trumbowyg-editor.trumbowyg-reset-css ol, .trumbowyg-editor.trumbowyg-reset-css blockquote {
+ -webkit-box-shadow: none !important;
+ box-shadow: none !important;
+ background: none !important;
+ margin: 0 !important;
+ margin-bottom: 15px !important;
+ line-height: 1.4em !important;
+ font-family: "Trebuchet MS", Helvetica, Verdana, sans-serif !important;
+ font-size: 14px !important;
+ border: none; }
+ .trumbowyg-editor.trumbowyg-reset-css iframe, .trumbowyg-editor.trumbowyg-reset-css object, .trumbowyg-editor.trumbowyg-reset-css hr {
+ margin-bottom: 15px !important; }
+ .trumbowyg-editor.trumbowyg-reset-css blockquote {
+ margin-left: 32px !important;
+ font-style: italic !important;
+ color: #555; }
+ .trumbowyg-editor.trumbowyg-reset-css ul, .trumbowyg-editor.trumbowyg-reset-css ol {
+ padding-left: 20px !important; }
+ .trumbowyg-editor.trumbowyg-reset-css ul ul, .trumbowyg-editor.trumbowyg-reset-css ol ol, .trumbowyg-editor.trumbowyg-reset-css ul ol, .trumbowyg-editor.trumbowyg-reset-css ol ul {
+ border: none;
+ margin: 2px !important;
+ padding: 0 !important;
+ padding-left: 24px !important; }
+ .trumbowyg-editor.trumbowyg-reset-css hr {
+ display: block;
+ height: 1px;
+ border: none;
+ border-top: 1px solid #CCC; }
+ .trumbowyg-editor.trumbowyg-reset-css h1, .trumbowyg-editor.trumbowyg-reset-css h2, .trumbowyg-editor.trumbowyg-reset-css h3, .trumbowyg-editor.trumbowyg-reset-css h4 {
+ color: #111;
+ background: none;
+ margin: 0 !important;
+ padding: 0 !important;
+ font-weight: bold; }
+ .trumbowyg-editor.trumbowyg-reset-css h1 {
+ font-size: 32px !important;
+ line-height: 38px !important;
+ margin-bottom: 20px !important; }
+ .trumbowyg-editor.trumbowyg-reset-css h2 {
+ font-size: 26px !important;
+ line-height: 34px !important;
+ margin-bottom: 15px !important; }
+ .trumbowyg-editor.trumbowyg-reset-css h3 {
+ font-size: 22px !important;
+ line-height: 28px !important;
+ margin-bottom: 7px !important; }
+ .trumbowyg-editor.trumbowyg-reset-css h4 {
+ font-size: 16px !important;
+ line-height: 22px !important;
+ margin-bottom: 7px !important; }
+
+/*
+ * Black theme
+ */
+.trumbowyg-black .trumbowyg-button-pane {
+ background-color: #222;
+ border-bottom-color: #343434; }
+ .trumbowyg-black .trumbowyg-button-pane li.trumbowyg-separator {
+ background-color: #343434; }
+ .trumbowyg-black .trumbowyg-button-pane.trumbowyg-disable li.trumbowyg-separator {
+ background-color: #2a2a2a; }
+ .trumbowyg-black .trumbowyg-button-pane:not(.trumbowyg-disable) li button:hover, .trumbowyg-black .trumbowyg-button-pane:not(.trumbowyg-disable) li button:focus, .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-active, .trumbowyg-black .trumbowyg-button-pane li.trumbowyg-not-disable button:hover, .trumbowyg-black .trumbowyg-button-pane li.trumbowyg-not-disable button:focus {
+ background-color: #555; }
+ .trumbowyg-black .trumbowyg-button-pane li .trumbowyg-open-dropdown:after {
+ border-top-color: #fff; }
+.trumbowyg-black .trumbowyg-dropdown {
+ border-color: #222;
+ background: #222; }
+ .trumbowyg-black .trumbowyg-dropdown button {
+ background: #222;
+ color: #fff; }
+ .trumbowyg-black .trumbowyg-dropdown button:hover, .trumbowyg-black .trumbowyg-dropdown button:focus {
+ background: #555; }
+.trumbowyg-black .trumbowyg-modal-box {
+ background-color: #222; }
+ .trumbowyg-black .trumbowyg-modal-box .trumbowyg-modal-title {
+ border-bottom: 1px solid #555;
+ color: #fff;
+ background: #3c3c3c; }
+ .trumbowyg-black .trumbowyg-modal-box label {
+ display: block;
+ position: relative;
+ margin: 15px 12px;
+ height: 27px;
+ line-height: 27px;
+ overflow: hidden; }
+ .trumbowyg-black .trumbowyg-modal-box label .trumbowyg-input-infos span {
+ color: #eee;
+ background-color: #2f2f2f;
+ border-color: #222; }
+ .trumbowyg-black .trumbowyg-modal-box label .trumbowyg-input-infos span.trumbowyg-msg-error {
+ color: #e74c3c; }
+ .trumbowyg-black .trumbowyg-modal-box label.trumbowyg-input-error input, .trumbowyg-black .trumbowyg-modal-box label.trumbowyg-input-error textarea {
+ border-color: #e74c3c; }
+ .trumbowyg-black .trumbowyg-modal-box label input {
+ border-color: #222;
+ color: #eee;
+ background: #333; }
+ .trumbowyg-black .trumbowyg-modal-box label input:hover, .trumbowyg-black .trumbowyg-modal-box label input:focus {
+ border-color: #95a5a6; }
+ .trumbowyg-black .trumbowyg-modal-box label input:focus {
+ background-color: rgba(230, 230, 255, 0.1); }
+.trumbowyg-black .trumbowyg-overlay {
+ background-color: rgba(0, 0, 0, 0.5); }
+
+/*
+ * Buttons icons
+ */
+.trumbowyg-button-pane li button {
+ display: block;
+ position: relative;
+ text-indent: -9999px;
+ width: 35px;
+ height: 35px;
+ overflow: hidden;
+ background: transparent url("./images/icons-black.png") no-repeat;
+ border: none;
+ cursor: pointer;
+ -webkit-transition: background-color 0.15s, background-image 0.15s, opacity 0.15s;
+ transition: background-color 0.15s, background-image 0.15s, opacity 0.15s;
+ /* English and others */ }
+ .trumbowyg-button-pane li button.trumbowyg-viewHTML-button {
+ background-position: 5px -570px; }
+ .trumbowyg-button-pane li button.trumbowyg-formatting-button {
+ background-position: 5px -120px; }
+ .trumbowyg-button-pane li button.trumbowyg-bold-button, .trumbowyg-button-pane li button.trumbowyg-strong-button {
+ background-position: 5px -45px; }
+ .trumbowyg-button-pane li button.trumbowyg-italic-button, .trumbowyg-button-pane li button.trumbowyg-em-button {
+ background-position: 5px -270px; }
+ .trumbowyg-button-pane li button.trumbowyg-underline-button {
+ background-position: 5px -495px; }
+ .trumbowyg-button-pane li button.trumbowyg-strikethrough-button, .trumbowyg-button-pane li button.trumbowyg-del-button {
+ background-position: 5px -470px; }
+ .trumbowyg-button-pane li button.trumbowyg-link-button {
+ background-position: 5px -345px; }
+ .trumbowyg-button-pane li button.trumbowyg-insertImage-button {
+ background-position: 5px -245px; }
+ .trumbowyg-button-pane li button.trumbowyg-justifyLeft-button {
+ background-position: 5px -320px; }
+ .trumbowyg-button-pane li button.trumbowyg-justifyCenter-button {
+ background-position: 5px -70px; }
+ .trumbowyg-button-pane li button.trumbowyg-justifyRight-button {
+ background-position: 5px -420px; }
+ .trumbowyg-button-pane li button.trumbowyg-justifyFull-button {
+ background-position: 5px 5px; }
+ .trumbowyg-button-pane li button.trumbowyg-unorderedList-button {
+ background-position: 5px -520px; }
+ .trumbowyg-button-pane li button.trumbowyg-orderedList-button {
+ background-position: 5px -370px; }
+ .trumbowyg-button-pane li button.trumbowyg-horizontalRule-button {
+ background-position: 5px -220px; }
+ .trumbowyg-button-pane li button.trumbowyg-removeformat-button {
+ background-position: 5px -395px; }
+ .trumbowyg-button-pane li button.trumbowyg-fullscreen-button {
+ background-position: 5px -170px; }
+ .trumbowyg-button-pane li button.trumbowyg-close-button {
+ background-position: 5px -95px; }
+
+.trumbowyg-fullscreen .trumbowyg-button-pane li button.trumbowyg-fullscreen-button {
+ background-position: 5px -145px; }
+
+.trumbowyg-button-pane li:first-child button {
+ margin-left: 6px; }
+.trumbowyg-button-pane li:last-child button {
+ margin-right: 6px; }
+
+/* French */
+.trumbowyg-fr .trumbowyg-button-pane li button.trumbowyg-bold-button, .trumbowyg-fr .trumbowyg-button-pane li button.trumbowyg-strong-button {
+ background-position: 5px -195px; }
+.trumbowyg-fr .trumbowyg-button-pane li button.trumbowyg-underline-button {
+ background-position: 5px -445px; }
+.trumbowyg-fr .trumbowyg-button-pane li button.trumbowyg-strikethrough-button, .trumbowyg-fr .trumbowyg-button-pane li button.trumbowyg-del-button {
+ background-position: 5px -295px; }
+
+.trumbowyg-black {
+ /* French */ }
+ .trumbowyg-black .trumbowyg-button-pane li button {
+ background-image: url("./images/icons-white.png");
+ /* English and others */ }
+ .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-viewHTML-button {
+ background-position: 5px -570px; }
+ .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-formatting-button {
+ background-position: 5px -120px; }
+ .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-bold-button, .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-strong-button {
+ background-position: 5px -45px; }
+ .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-italic-button, .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-em-button {
+ background-position: 5px -270px; }
+ .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-underline-button {
+ background-position: 5px -495px; }
+ .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-strikethrough-button, .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-del-button {
+ background-position: 5px -470px; }
+ .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-link-button {
+ background-position: 5px -345px; }
+ .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-insertImage-button {
+ background-position: 5px -245px; }
+ .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-justifyLeft-button {
+ background-position: 5px -320px; }
+ .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-justifyCenter-button {
+ background-position: 5px -70px; }
+ .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-justifyRight-button {
+ background-position: 5px -420px; }
+ .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-justifyFull-button {
+ background-position: 5px 5px; }
+ .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-unorderedList-button {
+ background-position: 5px -520px; }
+ .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-orderedList-button {
+ background-position: 5px -370px; }
+ .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-horizontalRule-button {
+ background-position: 5px -220px; }
+ .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-removeformat-button {
+ background-position: 5px -395px; }
+ .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-fullscreen-button {
+ background-position: 5px -170px; }
+ .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-close-button {
+ background-position: 5px -95px; }
+ .trumbowyg-black .trumbowyg-fullscreen .trumbowyg-button-pane li button.trumbowyg-fullscreen-button {
+ background-position: 5px -145px; }
+ .trumbowyg-black .trumbowyg-button-pane li:first-child button {
+ margin-left: 6px; }
+ .trumbowyg-black .trumbowyg-button-pane li:last-child button {
+ margin-right: 6px; }
+ .trumbowyg-black .trumbowyg-fr .trumbowyg-button-pane li button.trumbowyg-bold-button, .trumbowyg-black .trumbowyg-fr .trumbowyg-button-pane li button.trumbowyg-strong-button {
+ background-position: 5px -195px; }
+ .trumbowyg-black .trumbowyg-fr .trumbowyg-button-pane li button.trumbowyg-underline-button {
+ background-position: 5px -445px; }
+ .trumbowyg-black .trumbowyg-fr .trumbowyg-button-pane li button.trumbowyg-strikethrough-button, .trumbowyg-black .trumbowyg-fr .trumbowyg-button-pane li button.trumbowyg-del-button {
+ background-position: 5px -295px; }
+
+@media only screen and (-webkit-min-device-pixel-ratio: 1.3), only screen and (min--moz-device-pixel-ratio: 1.3), only screen and (-o-min-device-pixel-ratio: 4/3), only screen and (min-device-pixel-ratio: 1.3), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx) {
+ /* French */
+ /* Black theme */
+ .trumbowyg-button-pane li button {
+ -webkit-background-size: 25px 600px !important;
+ background-size: 25px 600px !important;
+ background-image: url("./images/icons-black-2x.png") !important;
+ /* English and others */ }
+ .trumbowyg-button-pane li button.trumbowyg-viewHTML-button {
+ background-position: 5px -570px; }
+ .trumbowyg-button-pane li button.trumbowyg-formatting-button {
+ background-position: 5px -120px; }
+ .trumbowyg-button-pane li button.trumbowyg-bold-button, .trumbowyg-button-pane li button.trumbowyg-strong-button {
+ background-position: 5px -45px; }
+ .trumbowyg-button-pane li button.trumbowyg-italic-button, .trumbowyg-button-pane li button.trumbowyg-em-button {
+ background-position: 5px -270px; }
+ .trumbowyg-button-pane li button.trumbowyg-underline-button {
+ background-position: 5px -495px; }
+ .trumbowyg-button-pane li button.trumbowyg-strikethrough-button, .trumbowyg-button-pane li button.trumbowyg-del-button {
+ background-position: 5px -470px; }
+ .trumbowyg-button-pane li button.trumbowyg-link-button {
+ background-position: 5px -345px; }
+ .trumbowyg-button-pane li button.trumbowyg-insertImage-button {
+ background-position: 5px -245px; }
+ .trumbowyg-button-pane li button.trumbowyg-justifyLeft-button {
+ background-position: 5px -320px; }
+ .trumbowyg-button-pane li button.trumbowyg-justifyCenter-button {
+ background-position: 5px -70px; }
+ .trumbowyg-button-pane li button.trumbowyg-justifyRight-button {
+ background-position: 5px -420px; }
+ .trumbowyg-button-pane li button.trumbowyg-justifyFull-button {
+ background-position: 5px 5px; }
+ .trumbowyg-button-pane li button.trumbowyg-unorderedList-button {
+ background-position: 5px -520px; }
+ .trumbowyg-button-pane li button.trumbowyg-orderedList-button {
+ background-position: 5px -370px; }
+ .trumbowyg-button-pane li button.trumbowyg-horizontalRule-button {
+ background-position: 5px -220px; }
+ .trumbowyg-button-pane li button.trumbowyg-removeformat-button {
+ background-position: 5px -395px; }
+ .trumbowyg-button-pane li button.trumbowyg-fullscreen-button {
+ background-position: 5px -170px; }
+ .trumbowyg-button-pane li button.trumbowyg-close-button {
+ background-position: 5px -95px; }
+ .trumbowyg-fullscreen .trumbowyg-button-pane li a.trumbowyg-fullscreen-button {
+ background-position: 5px -145px; }
+ .trumbowyg-fr .trumbowyg-button-pane li button.trumbowyg-bold-button, .trumbowyg-fr .trumbowyg-button-pane li button.trumbowyg-strong-button {
+ background-position: 5px -195px; }
+ .trumbowyg-fr .trumbowyg-button-pane li button.trumbowyg-underline-button {
+ background-position: 5px -445px; }
+ .trumbowyg-fr .trumbowyg-button-pane li button.trumbowyg-strikethrough-button, .trumbowyg-fr .trumbowyg-button-pane li button.trumbowyg-del-button {
+ background-position: 5px -295px; }
+ .trumbowyg-black {
+ /* French */ }
+ .trumbowyg-black .trumbowyg-button-pane li button {
+ -webkit-background-size: 25px 600px !important;
+ background-size: 25px 600px !important;
+ background-image: url("./images/icons-white-2x.png") !important;
+ /* English and others */ }
+ .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-viewHTML-button {
+ background-position: 5px -570px; }
+ .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-formatting-button {
+ background-position: 5px -120px; }
+ .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-bold-button, .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-strong-button {
+ background-position: 5px -45px; }
+ .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-italic-button, .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-em-button {
+ background-position: 5px -270px; }
+ .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-underline-button {
+ background-position: 5px -495px; }
+ .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-strikethrough-button, .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-del-button {
+ background-position: 5px -470px; }
+ .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-link-button {
+ background-position: 5px -345px; }
+ .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-insertImage-button {
+ background-position: 5px -245px; }
+ .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-justifyLeft-button {
+ background-position: 5px -320px; }
+ .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-justifyCenter-button {
+ background-position: 5px -70px; }
+ .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-justifyRight-button {
+ background-position: 5px -420px; }
+ .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-justifyFull-button {
+ background-position: 5px 5px; }
+ .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-unorderedList-button {
+ background-position: 5px -520px; }
+ .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-orderedList-button {
+ background-position: 5px -370px; }
+ .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-horizontalRule-button {
+ background-position: 5px -220px; }
+ .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-removeformat-button {
+ background-position: 5px -395px; }
+ .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-fullscreen-button {
+ background-position: 5px -170px; }
+ .trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-close-button {
+ background-position: 5px -95px; }
+ .trumbowyg-black .trumbowyg-fullscreen .trumbowyg-button-pane li a.trumbowyg-fullscreen-button {
+ background-position: 5px -145px; }
+ .trumbowyg-black .trumbowyg-fr .trumbowyg-button-pane li button.trumbowyg-bold-button, .trumbowyg-black .trumbowyg-fr .trumbowyg-button-pane li button.trumbowyg-strong-button {
+ background-position: 5px -195px; }
+ .trumbowyg-black .trumbowyg-fr .trumbowyg-button-pane li button.trumbowyg-underline-button {
+ background-position: 5px -445px; }
+ .trumbowyg-black .trumbowyg-fr .trumbowyg-button-pane li button.trumbowyg-strikethrough-button, .trumbowyg-black .trumbowyg-fr .trumbowyg-button-pane li button.trumbowyg-del-button {
+ background-position: 5px -295px; } }
diff --git a/plugins/trumbowyg/trumbowyg/ui/trumbowyg.min.css b/plugins/trumbowyg/trumbowyg/ui/trumbowyg.min.css
new file mode 100755
index 00000000..f3f3344e
--- /dev/null
+++ b/plugins/trumbowyg/trumbowyg/ui/trumbowyg.min.css
@@ -0,0 +1,2 @@
+/** Trumbowyg v2.0.0-beta.4 - A lightweight WYSIWYG editor - alex-d.github.io/Trumbowyg - License MIT - Author : Alexandre Demode (Alex-D) / alex-d.fr */
+.trumbowyg-box *,.trumbowyg-box ::after,.trumbowyg-box ::before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.trumbowyg-box,.trumbowyg-editor{display:block;position:relative;border:1px solid #DDD;width:96%;min-height:300px;margin:17px auto}.trumbowyg-box .trumbowyg-editor{margin:0 auto}.trumbowyg-box.trumbowyg-fullscreen{background:#FEFEFE}.trumbowyg-editor,.trumbowyg-textarea{position:relative;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:1% 2%;min-height:300px;width:100%;border-style:none;resize:none;outline:0}.trumbowyg-box-blur .trumbowyg-editor *{color:transparent!important;text-shadow:0 0 7px #333}.trumbowyg-box-blur .trumbowyg-editor img{opacity:.2}.trumbowyg-textarea{position:relative;display:block;overflow:auto;border:none;white-space:normal;font-size:14px;font-family:Inconsolata,Consolas,Courier,"Courier New",sans-serif;line-height:18px}.trumbowyg-box.trumbowyg-editor-visible .trumbowyg-textarea{position:absolute;top:37px;height:1px!important;width:25%;min-height:0!important;padding:0!important;background:0 0;opacity:0}.trumbowyg-box.trumbowyg-editor-hidden .trumbowyg-textarea{display:block}.trumbowyg-box.trumbowyg-editor-hidden .trumbowyg-editor{display:none}.trumbowyg-editor[contenteditable=true]:empty:before{content:attr(placeholder);color:#999}.trumbowyg-button-pane{position:relative;width:100%;background:#ecf0f1;border-bottom:1px solid #d7e0e2;margin:0;padding:0;list-style-type:none;line-height:10px;-webkit-backface-visibility:hidden;backface-visibility:hidden}.trumbowyg-button-pane li{display:inline-block;text-align:center;overflow:hidden;padding:0!important}.trumbowyg-button-pane li.trumbowyg-separator{width:1px;background:#d7e0e2;margin:0 5px;height:35px}.trumbowyg-button-pane.trumbowyg-disable li:not(.trumbowyg-not-disable) button:not(.trumbowyg-active){opacity:.2;cursor:default}.trumbowyg-button-pane.trumbowyg-disable li.trumbowyg-separator{background:#e3e9eb}.trumbowyg-button-pane li button{padding:1px 6px!important}.trumbowyg-button-pane li button.trumbowyg-active,.trumbowyg-button-pane li.trumbowyg-not-disable button:focus,.trumbowyg-button-pane li.trumbowyg-not-disable button:hover,.trumbowyg-button-pane:not(.trumbowyg-disable) li button:focus,.trumbowyg-button-pane:not(.trumbowyg-disable) li button:hover{background-color:#FFF;outline:0}.trumbowyg-button-pane li .trumbowyg-open-dropdown:after{display:block;content:" ";position:absolute;top:25px;right:3px;height:0;width:0;border:3px solid transparent;border-top-color:#555}.trumbowyg-button-pane .trumbowyg-buttons-right{float:right;width:auto}.trumbowyg-button-pane .trumbowyg-buttons-right button{float:left}.trumbowyg-dropdown{width:200px;border:1px solid #ecf0f1;padding:5px 0;border-top:none;background:#FFF;margin-left:-1px;-webkit-box-shadow:rgba(0,0,0,.1) 0 2px 3px;box-shadow:rgba(0,0,0,.1) 0 2px 3px}.trumbowyg-dropdown button{display:block;width:100%;height:35px;line-height:35px;text-decoration:none;background:#FFF;padding:0 14px;color:#333!important;border:none;cursor:pointer;text-align:left;font-size:15px;-webkit-transition:all .15s;transition:all .15s}.trumbowyg-dropdown button:focus,.trumbowyg-dropdown button:hover{background:#ecf0f1}.trumbowyg-modal{position:absolute;top:0;left:50%;margin-left:-260px;width:520px;height:350px;overflow:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden}.trumbowyg-modal-box{position:absolute;top:0;left:50%;margin-left:-250px;width:500px;padding-bottom:45px;z-index:1;background-color:#FFF;text-align:center;font-size:14px;-webkit-box-shadow:rgba(0,0,0,.2) 0 2px 3px;box-shadow:rgba(0,0,0,.2) 0 2px 3px;-webkit-backface-visibility:hidden;backface-visibility:hidden}.trumbowyg-modal-box .trumbowyg-modal-title{font-size:24px;font-weight:700;margin:0 0 20px;padding:15px 0 13px;display:block;border-bottom:1px solid #EEE;color:#333;background:#fbfcfc}.trumbowyg-modal-box .trumbowyg-progress{width:100%;background:red;height:3px;position:absolute;top:58px}.trumbowyg-modal-box .trumbowyg-progress .trumbowyg-progress-bar{background:#2BC06A;height:100%;-webkit-transition:width .15s linear;transition:width .15s linear}.trumbowyg-modal-box label{display:block;position:relative;margin:15px 12px;height:27px;line-height:27px;overflow:hidden}.trumbowyg-modal-box label .trumbowyg-input-infos{display:block;text-align:left;height:25px;line-height:25px;-webkit-transition:all .15;transition:all .15}.trumbowyg-modal-box label .trumbowyg-input-infos span{display:block;color:#69878e;background-color:#fbfcfc;border:1px solid #DEDEDE;padding:0 7px;width:137px}.trumbowyg-modal-box label .trumbowyg-input-infos span.trumbowyg-msg-error{color:#e74c3c}.trumbowyg-modal-box label.trumbowyg-input-error input,.trumbowyg-modal-box label.trumbowyg-input-error textarea{border:1px solid #e74c3c}.trumbowyg-modal-box label.trumbowyg-input-error .trumbowyg-input-infos{margin-top:-27px}.trumbowyg-modal-box label input{position:absolute;top:0;right:0;height:27px;line-height:27px;border:1px solid #DEDEDE;background:0 0;font-size:14px;width:340px;padding:0 7px;-webkit-transition:all .15s;transition:all .15s}.trumbowyg-modal-box label input:focus,.trumbowyg-modal-box label input:hover{outline:0;border:1px solid #95a5a6}.trumbowyg-modal-box label input:focus{background:rgba(230,230,255,.1)}.trumbowyg-modal-box .error{margin-top:25px;display:block;color:red}.trumbowyg-modal-box .trumbowyg-modal-button{position:absolute;bottom:10px;right:0;text-decoration:none;color:#FFF;display:block;width:100px;height:35px;line-height:33px;margin:0 10px;background-color:#333;border:none;border-top:none;cursor:pointer;font-family:"Trebuchet MS",Helvetica,Verdana,sans-serif;font-size:16px;-webkit-transition:all .15s;transition:all .15s}.trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit{right:110px;background:#2bc069}.trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit:focus,.trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit:hover{background:#40d47d;outline:0}.trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit:active{background:#25a259}.trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset{color:#555;background:#e6e6e6}.trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset:focus,.trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset:hover{background:#fbfbfb;outline:0}.trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset:active{background:#d4d4d4}.trumbowyg-overlay{position:absolute;background-color:rgba(255,255,255,.5);width:100%;left:0;display:none}body.trumbowyg-body-fullscreen{overflow:hidden}.trumbowyg-fullscreen{position:fixed;top:0;left:0;width:100%;height:100%;margin:0;padding:0;z-index:99999}.trumbowyg-fullscreen .trumbowyg-editor,.trumbowyg-fullscreen.trumbowyg-box{border:none}.trumbowyg-fullscreen .trumbowyg-overlay{height:100%!important}.trumbowyg-editor embed,.trumbowyg-editor img,.trumbowyg-editor object,.trumbowyg-editor video{width:auto;max-width:100%}.trumbowyg-editor img,.trumbowyg-editor video{height:auto}.trumbowyg-editor img{cursor:move}.trumbowyg-editor.trumbowyg-reset-css{background:#FEFEFE!important;font-family:"Trebuchet MS",Helvetica,Verdana,sans-serif!important;font-size:14px!important;line-height:1.45em!important;white-space:normal!important;color:#333}.trumbowyg-editor.trumbowyg-reset-css a{color:#15c!important;text-decoration:underline!important}.trumbowyg-editor.trumbowyg-reset-css blockquote,.trumbowyg-editor.trumbowyg-reset-css div,.trumbowyg-editor.trumbowyg-reset-css ol,.trumbowyg-editor.trumbowyg-reset-css p,.trumbowyg-editor.trumbowyg-reset-css ul{-webkit-box-shadow:none!important;box-shadow:none!important;background:0 0!important;margin:0 0 15px!important;line-height:1.4em!important;font-family:"Trebuchet MS",Helvetica,Verdana,sans-serif!important;font-size:14px!important;border:none}.trumbowyg-editor.trumbowyg-reset-css hr,.trumbowyg-editor.trumbowyg-reset-css iframe,.trumbowyg-editor.trumbowyg-reset-css object{margin-bottom:15px!important}.trumbowyg-editor.trumbowyg-reset-css blockquote{margin-left:32px!important;font-style:italic!important;color:#555}.trumbowyg-editor.trumbowyg-reset-css ol,.trumbowyg-editor.trumbowyg-reset-css ul{padding-left:20px!important}.trumbowyg-editor.trumbowyg-reset-css ol ol,.trumbowyg-editor.trumbowyg-reset-css ol ul,.trumbowyg-editor.trumbowyg-reset-css ul ol,.trumbowyg-editor.trumbowyg-reset-css ul ul{border:none;margin:2px!important;padding:0 0 0 24px!important}.trumbowyg-editor.trumbowyg-reset-css hr{display:block;height:1px;border:none;border-top:1px solid #CCC}.trumbowyg-editor.trumbowyg-reset-css h1,.trumbowyg-editor.trumbowyg-reset-css h2,.trumbowyg-editor.trumbowyg-reset-css h3,.trumbowyg-editor.trumbowyg-reset-css h4{color:#111;background:0 0;margin:0!important;padding:0!important;font-weight:700}.trumbowyg-editor.trumbowyg-reset-css h1{font-size:32px!important;line-height:38px!important;margin-bottom:20px!important}.trumbowyg-editor.trumbowyg-reset-css h2{font-size:26px!important;line-height:34px!important;margin-bottom:15px!important}.trumbowyg-editor.trumbowyg-reset-css h3{font-size:22px!important;line-height:28px!important;margin-bottom:7px!important}.trumbowyg-editor.trumbowyg-reset-css h4{font-size:16px!important;line-height:22px!important;margin-bottom:7px!important}.trumbowyg-black .trumbowyg-button-pane{background-color:#222;border-bottom-color:#343434}.trumbowyg-black .trumbowyg-button-pane li.trumbowyg-separator{background-color:#343434}.trumbowyg-black .trumbowyg-button-pane.trumbowyg-disable li.trumbowyg-separator{background-color:#2a2a2a}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-active,.trumbowyg-black .trumbowyg-button-pane li.trumbowyg-not-disable button:focus,.trumbowyg-black .trumbowyg-button-pane li.trumbowyg-not-disable button:hover,.trumbowyg-black .trumbowyg-button-pane:not(.trumbowyg-disable) li button:focus,.trumbowyg-black .trumbowyg-button-pane:not(.trumbowyg-disable) li button:hover{background-color:#555}.trumbowyg-black .trumbowyg-button-pane li .trumbowyg-open-dropdown:after{border-top-color:#fff}.trumbowyg-black .trumbowyg-dropdown{border-color:#222;background:#222}.trumbowyg-black .trumbowyg-dropdown button{background:#222;color:#fff}.trumbowyg-black .trumbowyg-dropdown button:focus,.trumbowyg-black .trumbowyg-dropdown button:hover{background:#555}.trumbowyg-black .trumbowyg-modal-box{background-color:#222}.trumbowyg-black .trumbowyg-modal-box .trumbowyg-modal-title{border-bottom:1px solid #555;color:#fff;background:#3c3c3c}.trumbowyg-black .trumbowyg-modal-box label{display:block;position:relative;margin:15px 12px;height:27px;line-height:27px;overflow:hidden}.trumbowyg-black .trumbowyg-modal-box label .trumbowyg-input-infos span{color:#eee;background-color:#2f2f2f;border-color:#222}.trumbowyg-black .trumbowyg-modal-box label .trumbowyg-input-infos span.trumbowyg-msg-error{color:#e74c3c}.trumbowyg-black .trumbowyg-modal-box label.trumbowyg-input-error input,.trumbowyg-black .trumbowyg-modal-box label.trumbowyg-input-error textarea{border-color:#e74c3c}.trumbowyg-black .trumbowyg-modal-box label input{border-color:#222;color:#eee;background:#333}.trumbowyg-black .trumbowyg-modal-box label input:focus,.trumbowyg-black .trumbowyg-modal-box label input:hover{border-color:#95a5a6}.trumbowyg-black .trumbowyg-modal-box label input:focus{background-color:rgba(230,230,255,.1)}.trumbowyg-black .trumbowyg-overlay{background-color:rgba(0,0,0,.5)}.trumbowyg-button-pane li button{display:block;position:relative;text-indent:-9999px;width:35px;height:35px;overflow:hidden;background:url(./images/icons-black.png) no-repeat;border:none;cursor:pointer;-webkit-transition:background-color .15s,background-image .15s,opacity .15s;transition:background-color .15s,background-image .15s,opacity .15s}.trumbowyg-button-pane li button.trumbowyg-viewHTML-button{background-position:5px -570px}.trumbowyg-button-pane li button.trumbowyg-formatting-button{background-position:5px -120px}.trumbowyg-button-pane li button.trumbowyg-bold-button,.trumbowyg-button-pane li button.trumbowyg-strong-button{background-position:5px -45px}.trumbowyg-button-pane li button.trumbowyg-em-button,.trumbowyg-button-pane li button.trumbowyg-italic-button{background-position:5px -270px}.trumbowyg-button-pane li button.trumbowyg-underline-button{background-position:5px -495px}.trumbowyg-button-pane li button.trumbowyg-del-button,.trumbowyg-button-pane li button.trumbowyg-strikethrough-button{background-position:5px -470px}.trumbowyg-button-pane li button.trumbowyg-link-button{background-position:5px -345px}.trumbowyg-button-pane li button.trumbowyg-insertImage-button{background-position:5px -245px}.trumbowyg-button-pane li button.trumbowyg-justifyLeft-button{background-position:5px -320px}.trumbowyg-button-pane li button.trumbowyg-justifyCenter-button{background-position:5px -70px}.trumbowyg-button-pane li button.trumbowyg-justifyRight-button{background-position:5px -420px}.trumbowyg-button-pane li button.trumbowyg-justifyFull-button{background-position:5px 5px}.trumbowyg-button-pane li button.trumbowyg-unorderedList-button{background-position:5px -520px}.trumbowyg-button-pane li button.trumbowyg-orderedList-button{background-position:5px -370px}.trumbowyg-button-pane li button.trumbowyg-horizontalRule-button{background-position:5px -220px}.trumbowyg-button-pane li button.trumbowyg-removeformat-button{background-position:5px -395px}.trumbowyg-button-pane li button.trumbowyg-fullscreen-button{background-position:5px -170px}.trumbowyg-button-pane li button.trumbowyg-close-button{background-position:5px -95px}.trumbowyg-fullscreen .trumbowyg-button-pane li button.trumbowyg-fullscreen-button{background-position:5px -145px}.trumbowyg-button-pane li:first-child button{margin-left:6px}.trumbowyg-button-pane li:last-child button{margin-right:6px}.trumbowyg-fr .trumbowyg-button-pane li button.trumbowyg-bold-button,.trumbowyg-fr .trumbowyg-button-pane li button.trumbowyg-strong-button{background-position:5px -195px}.trumbowyg-fr .trumbowyg-button-pane li button.trumbowyg-underline-button{background-position:5px -445px}.trumbowyg-fr .trumbowyg-button-pane li button.trumbowyg-del-button,.trumbowyg-fr .trumbowyg-button-pane li button.trumbowyg-strikethrough-button{background-position:5px -295px}.trumbowyg-black .trumbowyg-button-pane li button{background-image:url(./images/icons-white.png)}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-viewHTML-button{background-position:5px -570px}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-formatting-button{background-position:5px -120px}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-bold-button,.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-strong-button{background-position:5px -45px}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-em-button,.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-italic-button{background-position:5px -270px}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-underline-button{background-position:5px -495px}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-del-button,.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-strikethrough-button{background-position:5px -470px}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-link-button{background-position:5px -345px}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-insertImage-button{background-position:5px -245px}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-justifyLeft-button{background-position:5px -320px}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-justifyCenter-button{background-position:5px -70px}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-justifyRight-button{background-position:5px -420px}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-justifyFull-button{background-position:5px 5px}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-unorderedList-button{background-position:5px -520px}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-orderedList-button{background-position:5px -370px}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-horizontalRule-button{background-position:5px -220px}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-removeformat-button{background-position:5px -395px}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-fullscreen-button{background-position:5px -170px}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-close-button{background-position:5px -95px}.trumbowyg-black .trumbowyg-fullscreen .trumbowyg-button-pane li button.trumbowyg-fullscreen-button{background-position:5px -145px}.trumbowyg-black .trumbowyg-button-pane li:first-child button{margin-left:6px}.trumbowyg-black .trumbowyg-button-pane li:last-child button{margin-right:6px}.trumbowyg-black .trumbowyg-fr .trumbowyg-button-pane li button.trumbowyg-bold-button,.trumbowyg-black .trumbowyg-fr .trumbowyg-button-pane li button.trumbowyg-strong-button{background-position:5px -195px}.trumbowyg-black .trumbowyg-fr .trumbowyg-button-pane li button.trumbowyg-underline-button{background-position:5px -445px}.trumbowyg-black .trumbowyg-fr .trumbowyg-button-pane li button.trumbowyg-del-button,.trumbowyg-black .trumbowyg-fr .trumbowyg-button-pane li button.trumbowyg-strikethrough-button{background-position:5px -295px}@media only screen and (-webkit-min-device-pixel-ratio:1.3),only screen and (min--moz-device-pixel-ratio:1.3),only screen and (-o-min-device-pixel-ratio:4/3),only screen and (min-device-pixel-ratio:1.3),only screen and (min-resolution:192dpi),only screen and (min-resolution:2dppx){.trumbowyg-button-pane li button{-webkit-background-size:25px 600px!important;background-size:25px 600px!important;background-image:url(./images/icons-black-2x.png)!important}.trumbowyg-button-pane li button.trumbowyg-viewHTML-button{background-position:5px -570px}.trumbowyg-button-pane li button.trumbowyg-formatting-button{background-position:5px -120px}.trumbowyg-button-pane li button.trumbowyg-bold-button,.trumbowyg-button-pane li button.trumbowyg-strong-button{background-position:5px -45px}.trumbowyg-button-pane li button.trumbowyg-em-button,.trumbowyg-button-pane li button.trumbowyg-italic-button{background-position:5px -270px}.trumbowyg-button-pane li button.trumbowyg-underline-button{background-position:5px -495px}.trumbowyg-button-pane li button.trumbowyg-del-button,.trumbowyg-button-pane li button.trumbowyg-strikethrough-button{background-position:5px -470px}.trumbowyg-button-pane li button.trumbowyg-link-button{background-position:5px -345px}.trumbowyg-button-pane li button.trumbowyg-insertImage-button{background-position:5px -245px}.trumbowyg-button-pane li button.trumbowyg-justifyLeft-button{background-position:5px -320px}.trumbowyg-button-pane li button.trumbowyg-justifyCenter-button{background-position:5px -70px}.trumbowyg-button-pane li button.trumbowyg-justifyRight-button{background-position:5px -420px}.trumbowyg-button-pane li button.trumbowyg-justifyFull-button{background-position:5px 5px}.trumbowyg-button-pane li button.trumbowyg-unorderedList-button{background-position:5px -520px}.trumbowyg-button-pane li button.trumbowyg-orderedList-button{background-position:5px -370px}.trumbowyg-button-pane li button.trumbowyg-horizontalRule-button{background-position:5px -220px}.trumbowyg-button-pane li button.trumbowyg-removeformat-button{background-position:5px -395px}.trumbowyg-button-pane li button.trumbowyg-fullscreen-button{background-position:5px -170px}.trumbowyg-button-pane li button.trumbowyg-close-button{background-position:5px -95px}.trumbowyg-fullscreen .trumbowyg-button-pane li a.trumbowyg-fullscreen-button{background-position:5px -145px}.trumbowyg-fr .trumbowyg-button-pane li button.trumbowyg-bold-button,.trumbowyg-fr .trumbowyg-button-pane li button.trumbowyg-strong-button{background-position:5px -195px}.trumbowyg-fr .trumbowyg-button-pane li button.trumbowyg-underline-button{background-position:5px -445px}.trumbowyg-fr .trumbowyg-button-pane li button.trumbowyg-del-button,.trumbowyg-fr .trumbowyg-button-pane li button.trumbowyg-strikethrough-button{background-position:5px -295px}.trumbowyg-black .trumbowyg-button-pane li button{-webkit-background-size:25px 600px!important;background-size:25px 600px!important;background-image:url(./images/icons-white-2x.png)!important}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-viewHTML-button{background-position:5px -570px}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-formatting-button{background-position:5px -120px}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-bold-button,.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-strong-button{background-position:5px -45px}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-em-button,.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-italic-button{background-position:5px -270px}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-underline-button{background-position:5px -495px}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-del-button,.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-strikethrough-button{background-position:5px -470px}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-link-button{background-position:5px -345px}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-insertImage-button{background-position:5px -245px}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-justifyLeft-button{background-position:5px -320px}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-justifyCenter-button{background-position:5px -70px}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-justifyRight-button{background-position:5px -420px}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-justifyFull-button{background-position:5px 5px}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-unorderedList-button{background-position:5px -520px}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-orderedList-button{background-position:5px -370px}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-horizontalRule-button{background-position:5px -220px}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-removeformat-button{background-position:5px -395px}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-fullscreen-button{background-position:5px -170px}.trumbowyg-black .trumbowyg-button-pane li button.trumbowyg-close-button{background-position:5px -95px}.trumbowyg-black .trumbowyg-fullscreen .trumbowyg-button-pane li a.trumbowyg-fullscreen-button{background-position:5px -145px}.trumbowyg-black .trumbowyg-fr .trumbowyg-button-pane li button.trumbowyg-bold-button,.trumbowyg-black .trumbowyg-fr .trumbowyg-button-pane li button.trumbowyg-strong-button{background-position:5px -195px}.trumbowyg-black .trumbowyg-fr .trumbowyg-button-pane li button.trumbowyg-underline-button{background-position:5px -445px}.trumbowyg-black .trumbowyg-fr .trumbowyg-button-pane li button.trumbowyg-del-button,.trumbowyg-black .trumbowyg-fr .trumbowyg-button-pane li button.trumbowyg-strikethrough-button{background-position:5px -295px}}
\ No newline at end of file