From 03cdf4fc84ac17d6290b1da52936619b611faf0a Mon Sep 17 00:00:00 2001
From: Francesca Sperati <6431@ait.nsw.edu.au>
Date: Fri, 8 Feb 2019 14:12:07 +1100
Subject: [PATCH] new-ad new-user srchbar wysiwyg
---
package.json | 2 +-
.../scripts/ads-add/ads-add.controller.js | 12 +
src/assets/scripts/ads-add/ads-add.html | 88 +
src/assets/scripts/ads-add/ads-add.service.js | 8 +
src/assets/scripts/ads-add/index.js | 13 +
.../scripts/ads-details/ads-details.html | 4 +-
src/assets/scripts/app/index.js | 5 +
src/assets/scripts/index.js | 3 +-
.../scripts/nwTopbar/topbar.controller.js | 3 +
src/assets/scripts/search/index.js | 6 +-
src/assets/scripts/trumbowyg/index.js | 23 +
src/assets/scripts/trumbowyg/langs/ar.js | 67 +
src/assets/scripts/trumbowyg/langs/ar.min.js | 11 +
src/assets/scripts/trumbowyg/langs/bg.js | 54 +
src/assets/scripts/trumbowyg/langs/bg.min.js | 8 +
src/assets/scripts/trumbowyg/langs/by.js | 61 +
src/assets/scripts/trumbowyg/langs/by.min.js | 8 +
src/assets/scripts/trumbowyg/langs/ca.js | 57 +
src/assets/scripts/trumbowyg/langs/ca.min.js | 11 +
src/assets/scripts/trumbowyg/langs/cs.js | 54 +
src/assets/scripts/trumbowyg/langs/cs.min.js | 8 +
src/assets/scripts/trumbowyg/langs/da.js | 64 +
src/assets/scripts/trumbowyg/langs/da.min.js | 9 +
src/assets/scripts/trumbowyg/langs/de.js | 57 +
src/assets/scripts/trumbowyg/langs/de.min.js | 9 +
src/assets/scripts/trumbowyg/langs/el.js | 59 +
src/assets/scripts/trumbowyg/langs/el.min.js | 12 +
src/assets/scripts/trumbowyg/langs/es.js | 63 +
src/assets/scripts/trumbowyg/langs/es.min.js | 9 +
src/assets/scripts/trumbowyg/langs/es_ar.js | 56 +
.../scripts/trumbowyg/langs/es_ar.min.js | 10 +
src/assets/scripts/trumbowyg/langs/fa.js | 58 +
src/assets/scripts/trumbowyg/langs/fa.min.js | 10 +
src/assets/scripts/trumbowyg/langs/fi.js | 58 +
src/assets/scripts/trumbowyg/langs/fi.min.js | 9 +
src/assets/scripts/trumbowyg/langs/fr.js | 66 +
src/assets/scripts/trumbowyg/langs/fr.min.js | 12 +
src/assets/scripts/trumbowyg/langs/he.js | 57 +
src/assets/scripts/trumbowyg/langs/he.min.js | 9 +
src/assets/scripts/trumbowyg/langs/hr.js | 54 +
src/assets/scripts/trumbowyg/langs/hr.min.js | 9 +
src/assets/scripts/trumbowyg/langs/hu.js | 58 +
src/assets/scripts/trumbowyg/langs/hu.min.js | 10 +
src/assets/scripts/trumbowyg/langs/id.js | 57 +
src/assets/scripts/trumbowyg/langs/id.min.js | 11 +
src/assets/scripts/trumbowyg/langs/it.js | 59 +
src/assets/scripts/trumbowyg/langs/it.min.js | 8 +
src/assets/scripts/trumbowyg/langs/ja.js | 63 +
src/assets/scripts/trumbowyg/langs/ja.min.js | 10 +
src/assets/scripts/trumbowyg/langs/ko.js | 56 +
src/assets/scripts/trumbowyg/langs/ko.min.js | 10 +
src/assets/scripts/trumbowyg/langs/lt.js | 59 +
src/assets/scripts/trumbowyg/langs/lt.min.js | 8 +
src/assets/scripts/trumbowyg/langs/mn.js | 49 +
src/assets/scripts/trumbowyg/langs/mn.min.js | 8 +
src/assets/scripts/trumbowyg/langs/my.js | 54 +
src/assets/scripts/trumbowyg/langs/my.min.js | 8 +
src/assets/scripts/trumbowyg/langs/nl.js | 61 +
src/assets/scripts/trumbowyg/langs/nl.min.js | 9 +
src/assets/scripts/trumbowyg/langs/no_nb.js | 56 +
.../scripts/trumbowyg/langs/no_nb.min.js | 10 +
src/assets/scripts/trumbowyg/langs/ph.js | 54 +
src/assets/scripts/trumbowyg/langs/ph.min.js | 8 +
src/assets/scripts/trumbowyg/langs/pl.js | 55 +
src/assets/scripts/trumbowyg/langs/pl.min.js | 9 +
src/assets/scripts/trumbowyg/langs/pt.js | 65 +
src/assets/scripts/trumbowyg/langs/pt.min.js | 11 +
src/assets/scripts/trumbowyg/langs/pt_br.js | 65 +
.../scripts/trumbowyg/langs/pt_br.min.js | 11 +
src/assets/scripts/trumbowyg/langs/ro.js | 58 +
src/assets/scripts/trumbowyg/langs/ro.min.js | 12 +
src/assets/scripts/trumbowyg/langs/rs.js | 53 +
src/assets/scripts/trumbowyg/langs/rs.min.js | 8 +
.../scripts/trumbowyg/langs/rs_latin.js | 54 +
.../scripts/trumbowyg/langs/rs_latin.min.js | 9 +
src/assets/scripts/trumbowyg/langs/ru.js | 61 +
src/assets/scripts/trumbowyg/langs/ru.min.js | 8 +
src/assets/scripts/trumbowyg/langs/sk.js | 54 +
src/assets/scripts/trumbowyg/langs/sk.min.js | 8 +
src/assets/scripts/trumbowyg/langs/sq.js | 65 +
src/assets/scripts/trumbowyg/langs/sq.min.js | 8 +
src/assets/scripts/trumbowyg/langs/sv.js | 58 +
src/assets/scripts/trumbowyg/langs/sv.min.js | 12 +
src/assets/scripts/trumbowyg/langs/th.js | 55 +
src/assets/scripts/trumbowyg/langs/th.min.js | 9 +
src/assets/scripts/trumbowyg/langs/tr.js | 55 +
src/assets/scripts/trumbowyg/langs/tr.min.js | 9 +
src/assets/scripts/trumbowyg/langs/ua.js | 54 +
src/assets/scripts/trumbowyg/langs/ua.min.js | 8 +
src/assets/scripts/trumbowyg/langs/vi.js | 55 +
src/assets/scripts/trumbowyg/langs/vi.min.js | 9 +
src/assets/scripts/trumbowyg/langs/zh_cn.js | 57 +
.../scripts/trumbowyg/langs/zh_cn.min.js | 11 +
src/assets/scripts/trumbowyg/langs/zh_tw.js | 66 +
.../scripts/trumbowyg/langs/zh_tw.min.js | 11 +
.../trumbowyg.allowtagsfrompaste.js | 143 ++
.../trumbowyg.allowtagsfrompaste.min.js | 1 +
.../plugins/base64/trumbowyg.base64.js | 147 ++
.../plugins/base64/trumbowyg.base64.min.js | 1 +
.../cleanpaste/trumbowyg.cleanpaste.js | 112 +
.../cleanpaste/trumbowyg.cleanpaste.min.js | 1 +
.../plugins/colors/trumbowyg.colors.js | 203 ++
.../plugins/colors/trumbowyg.colors.min.js | 1 +
.../colors/ui/sass/trumbowyg.colors.scss | 49 +
.../plugins/colors/ui/trumbowyg.colors.css | 43 +
.../colors/ui/trumbowyg.colors.min.css | 2 +
.../plugins/emoji/trumbowyg.emoji.js | 1350 ++++++++++++
.../plugins/emoji/trumbowyg.emoji.min.js | 1 +
.../emoji/ui/sass/trumbowyg.emoji.scss | 56 +
.../plugins/emoji/ui/trumbowyg.emoji.css | 47 +
.../plugins/emoji/ui/trumbowyg.emoji.min.css | 2 +
.../fontfamily/trumbowyg.fontfamily.js | 85 +
.../fontfamily/trumbowyg.fontfamily.min.js | 1 +
.../plugins/fontsize/trumbowyg.fontsize.js | 197 ++
.../fontsize/trumbowyg.fontsize.min.js | 1 +
.../plugins/highlight/trumbowyg.highlight.js | 85 +
.../highlight/trumbowyg.highlight.min.js | 1 +
.../ui/sass/trumbowyg.highlight.scss | 25 +
.../highlight/ui/trumbowyg.highlight.css | 20 +
.../highlight/ui/trumbowyg.highlight.min.css | 2 +
.../plugins/history/trumbowyg.history.js | 208 ++
.../plugins/history/trumbowyg.history.min.js | 1 +
.../insertaudio/trumbowyg.insertaudio.js | 95 +
.../insertaudio/trumbowyg.insertaudio.min.js | 1 +
.../lineheight/trumbowyg.lineheight.js | 131 ++
.../lineheight/trumbowyg.lineheight.min.js | 1 +
.../plugins/mathml/trumbowyg.mathml.js | 103 +
.../plugins/mathml/trumbowyg.mathml.min.js | 1 +
.../mathml/ui/sass/trumbowyg.mathml.scss | 36 +
.../plugins/mathml/ui/trumbowyg.mathml.css | 29 +
.../mathml/ui/trumbowyg.mathml.min.css | 2 +
.../plugins/mention/trumbowyg.mention.js | 114 +
.../plugins/mention/trumbowyg.mention.min.js | 1 +
.../mention/ui/sass/trumbowyg.mention.scss | 39 +
.../plugins/mention/ui/trumbowyg.mention.css | 32 +
.../mention/ui/trumbowyg.mention.min.css | 2 +
.../plugins/noembed/trumbowyg.noembed.js | 115 ++
.../plugins/noembed/trumbowyg.noembed.min.js | 1 +
.../pasteembed/trumbowyg.pasteembed.js | 96 +
.../pasteembed/trumbowyg.pasteembed.min.js | 1 +
.../pasteimage/trumbowyg.pasteimage.js | 41 +
.../pasteimage/trumbowyg.pasteimage.min.js | 1 +
.../preformatted/trumbowyg.preformatted.js | 139 ++
.../trumbowyg.preformatted.min.js | 1 +
.../plugins/resizimg/trumbowyg.resizimg.js | 70 +
.../resizimg/trumbowyg.resizimg.min.js | 1 +
.../trumbowyg/plugins/ruby/trumbowyg.ruby.js | 87 +
.../plugins/ruby/trumbowyg.ruby.min.js | 1 +
.../specialchars/trumbowyg.specialchars.js | 74 +
.../trumbowyg.specialchars.min.js | 1 +
.../ui/sass/trumbowyg.specialchars.scss | 63 +
.../ui/trumbowyg.specialchars.css | 53 +
.../ui/trumbowyg.specialchars.min.css | 2 +
.../plugins/table/trumbowyg.table.js | 325 +++
.../plugins/table/trumbowyg.table.min.js | 1 +
.../table/ui/sass/trumbowyg.table.scss | 42 +
.../plugins/table/ui/trumbowyg.table.css | 33 +
.../plugins/table/ui/trumbowyg.table.min.css | 2 +
.../plugins/template/trumbowyg.template.js | 73 +
.../template/trumbowyg.template.min.js | 1 +
.../plugins/upload/trumbowyg.upload.js | 271 +++
.../plugins/upload/trumbowyg.upload.min.js | 1 +
src/assets/scripts/trumbowyg/trumbowyg.js | 1834 +++++++++++++++++
src/assets/scripts/trumbowyg/trumbowyg.min.js | 2 +
src/assets/scripts/trumbowyg/ui/icons.svg | 1 +
.../scripts/trumbowyg/ui/sass/trumbowyg.scss | 810 ++++++++
src/assets/scripts/trumbowyg/ui/trumbowyg.css | 591 ++++++
.../scripts/trumbowyg/ui/trumbowyg.min.css | 2 +
src/assets/static/trumbowyg/icons.svg | 1 +
src/assets/styles/index.scss | 1 +
src/assets/styles/nomit.scss | 19 +
src/new-ad.html | 8 +-
src/new-user.html | 372 ++++
webpack/plugins/htmlPlugin.js | 1 +
174 files changed, 11505 insertions(+), 10 deletions(-)
create mode 100644 src/assets/scripts/ads-add/ads-add.controller.js
create mode 100644 src/assets/scripts/ads-add/ads-add.html
create mode 100644 src/assets/scripts/ads-add/ads-add.service.js
create mode 100644 src/assets/scripts/ads-add/index.js
create mode 100755 src/assets/scripts/trumbowyg/index.js
create mode 100755 src/assets/scripts/trumbowyg/langs/ar.js
create mode 100755 src/assets/scripts/trumbowyg/langs/ar.min.js
create mode 100755 src/assets/scripts/trumbowyg/langs/bg.js
create mode 100755 src/assets/scripts/trumbowyg/langs/bg.min.js
create mode 100755 src/assets/scripts/trumbowyg/langs/by.js
create mode 100755 src/assets/scripts/trumbowyg/langs/by.min.js
create mode 100755 src/assets/scripts/trumbowyg/langs/ca.js
create mode 100755 src/assets/scripts/trumbowyg/langs/ca.min.js
create mode 100755 src/assets/scripts/trumbowyg/langs/cs.js
create mode 100755 src/assets/scripts/trumbowyg/langs/cs.min.js
create mode 100755 src/assets/scripts/trumbowyg/langs/da.js
create mode 100755 src/assets/scripts/trumbowyg/langs/da.min.js
create mode 100755 src/assets/scripts/trumbowyg/langs/de.js
create mode 100755 src/assets/scripts/trumbowyg/langs/de.min.js
create mode 100755 src/assets/scripts/trumbowyg/langs/el.js
create mode 100755 src/assets/scripts/trumbowyg/langs/el.min.js
create mode 100755 src/assets/scripts/trumbowyg/langs/es.js
create mode 100755 src/assets/scripts/trumbowyg/langs/es.min.js
create mode 100755 src/assets/scripts/trumbowyg/langs/es_ar.js
create mode 100755 src/assets/scripts/trumbowyg/langs/es_ar.min.js
create mode 100755 src/assets/scripts/trumbowyg/langs/fa.js
create mode 100755 src/assets/scripts/trumbowyg/langs/fa.min.js
create mode 100755 src/assets/scripts/trumbowyg/langs/fi.js
create mode 100755 src/assets/scripts/trumbowyg/langs/fi.min.js
create mode 100755 src/assets/scripts/trumbowyg/langs/fr.js
create mode 100755 src/assets/scripts/trumbowyg/langs/fr.min.js
create mode 100755 src/assets/scripts/trumbowyg/langs/he.js
create mode 100755 src/assets/scripts/trumbowyg/langs/he.min.js
create mode 100755 src/assets/scripts/trumbowyg/langs/hr.js
create mode 100755 src/assets/scripts/trumbowyg/langs/hr.min.js
create mode 100755 src/assets/scripts/trumbowyg/langs/hu.js
create mode 100755 src/assets/scripts/trumbowyg/langs/hu.min.js
create mode 100755 src/assets/scripts/trumbowyg/langs/id.js
create mode 100755 src/assets/scripts/trumbowyg/langs/id.min.js
create mode 100755 src/assets/scripts/trumbowyg/langs/it.js
create mode 100755 src/assets/scripts/trumbowyg/langs/it.min.js
create mode 100755 src/assets/scripts/trumbowyg/langs/ja.js
create mode 100755 src/assets/scripts/trumbowyg/langs/ja.min.js
create mode 100755 src/assets/scripts/trumbowyg/langs/ko.js
create mode 100755 src/assets/scripts/trumbowyg/langs/ko.min.js
create mode 100755 src/assets/scripts/trumbowyg/langs/lt.js
create mode 100755 src/assets/scripts/trumbowyg/langs/lt.min.js
create mode 100755 src/assets/scripts/trumbowyg/langs/mn.js
create mode 100755 src/assets/scripts/trumbowyg/langs/mn.min.js
create mode 100755 src/assets/scripts/trumbowyg/langs/my.js
create mode 100755 src/assets/scripts/trumbowyg/langs/my.min.js
create mode 100755 src/assets/scripts/trumbowyg/langs/nl.js
create mode 100755 src/assets/scripts/trumbowyg/langs/nl.min.js
create mode 100755 src/assets/scripts/trumbowyg/langs/no_nb.js
create mode 100755 src/assets/scripts/trumbowyg/langs/no_nb.min.js
create mode 100755 src/assets/scripts/trumbowyg/langs/ph.js
create mode 100755 src/assets/scripts/trumbowyg/langs/ph.min.js
create mode 100755 src/assets/scripts/trumbowyg/langs/pl.js
create mode 100755 src/assets/scripts/trumbowyg/langs/pl.min.js
create mode 100755 src/assets/scripts/trumbowyg/langs/pt.js
create mode 100755 src/assets/scripts/trumbowyg/langs/pt.min.js
create mode 100755 src/assets/scripts/trumbowyg/langs/pt_br.js
create mode 100755 src/assets/scripts/trumbowyg/langs/pt_br.min.js
create mode 100755 src/assets/scripts/trumbowyg/langs/ro.js
create mode 100755 src/assets/scripts/trumbowyg/langs/ro.min.js
create mode 100755 src/assets/scripts/trumbowyg/langs/rs.js
create mode 100755 src/assets/scripts/trumbowyg/langs/rs.min.js
create mode 100755 src/assets/scripts/trumbowyg/langs/rs_latin.js
create mode 100755 src/assets/scripts/trumbowyg/langs/rs_latin.min.js
create mode 100755 src/assets/scripts/trumbowyg/langs/ru.js
create mode 100755 src/assets/scripts/trumbowyg/langs/ru.min.js
create mode 100755 src/assets/scripts/trumbowyg/langs/sk.js
create mode 100755 src/assets/scripts/trumbowyg/langs/sk.min.js
create mode 100755 src/assets/scripts/trumbowyg/langs/sq.js
create mode 100755 src/assets/scripts/trumbowyg/langs/sq.min.js
create mode 100755 src/assets/scripts/trumbowyg/langs/sv.js
create mode 100755 src/assets/scripts/trumbowyg/langs/sv.min.js
create mode 100755 src/assets/scripts/trumbowyg/langs/th.js
create mode 100755 src/assets/scripts/trumbowyg/langs/th.min.js
create mode 100755 src/assets/scripts/trumbowyg/langs/tr.js
create mode 100755 src/assets/scripts/trumbowyg/langs/tr.min.js
create mode 100755 src/assets/scripts/trumbowyg/langs/ua.js
create mode 100755 src/assets/scripts/trumbowyg/langs/ua.min.js
create mode 100755 src/assets/scripts/trumbowyg/langs/vi.js
create mode 100755 src/assets/scripts/trumbowyg/langs/vi.min.js
create mode 100755 src/assets/scripts/trumbowyg/langs/zh_cn.js
create mode 100755 src/assets/scripts/trumbowyg/langs/zh_cn.min.js
create mode 100755 src/assets/scripts/trumbowyg/langs/zh_tw.js
create mode 100755 src/assets/scripts/trumbowyg/langs/zh_tw.min.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/allowtagsfrompaste/trumbowyg.allowtagsfrompaste.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/allowtagsfrompaste/trumbowyg.allowtagsfrompaste.min.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/base64/trumbowyg.base64.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/base64/trumbowyg.base64.min.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/cleanpaste/trumbowyg.cleanpaste.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/cleanpaste/trumbowyg.cleanpaste.min.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/colors/trumbowyg.colors.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/colors/trumbowyg.colors.min.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/colors/ui/sass/trumbowyg.colors.scss
create mode 100755 src/assets/scripts/trumbowyg/plugins/colors/ui/trumbowyg.colors.css
create mode 100755 src/assets/scripts/trumbowyg/plugins/colors/ui/trumbowyg.colors.min.css
create mode 100755 src/assets/scripts/trumbowyg/plugins/emoji/trumbowyg.emoji.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/emoji/trumbowyg.emoji.min.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/emoji/ui/sass/trumbowyg.emoji.scss
create mode 100755 src/assets/scripts/trumbowyg/plugins/emoji/ui/trumbowyg.emoji.css
create mode 100755 src/assets/scripts/trumbowyg/plugins/emoji/ui/trumbowyg.emoji.min.css
create mode 100755 src/assets/scripts/trumbowyg/plugins/fontfamily/trumbowyg.fontfamily.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/fontfamily/trumbowyg.fontfamily.min.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/fontsize/trumbowyg.fontsize.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/fontsize/trumbowyg.fontsize.min.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/highlight/trumbowyg.highlight.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/highlight/trumbowyg.highlight.min.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/highlight/ui/sass/trumbowyg.highlight.scss
create mode 100755 src/assets/scripts/trumbowyg/plugins/highlight/ui/trumbowyg.highlight.css
create mode 100755 src/assets/scripts/trumbowyg/plugins/highlight/ui/trumbowyg.highlight.min.css
create mode 100755 src/assets/scripts/trumbowyg/plugins/history/trumbowyg.history.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/history/trumbowyg.history.min.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/insertaudio/trumbowyg.insertaudio.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/insertaudio/trumbowyg.insertaudio.min.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/lineheight/trumbowyg.lineheight.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/lineheight/trumbowyg.lineheight.min.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/mathml/trumbowyg.mathml.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/mathml/trumbowyg.mathml.min.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/mathml/ui/sass/trumbowyg.mathml.scss
create mode 100755 src/assets/scripts/trumbowyg/plugins/mathml/ui/trumbowyg.mathml.css
create mode 100755 src/assets/scripts/trumbowyg/plugins/mathml/ui/trumbowyg.mathml.min.css
create mode 100755 src/assets/scripts/trumbowyg/plugins/mention/trumbowyg.mention.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/mention/trumbowyg.mention.min.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/mention/ui/sass/trumbowyg.mention.scss
create mode 100755 src/assets/scripts/trumbowyg/plugins/mention/ui/trumbowyg.mention.css
create mode 100755 src/assets/scripts/trumbowyg/plugins/mention/ui/trumbowyg.mention.min.css
create mode 100755 src/assets/scripts/trumbowyg/plugins/noembed/trumbowyg.noembed.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/noembed/trumbowyg.noembed.min.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/pasteembed/trumbowyg.pasteembed.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/pasteembed/trumbowyg.pasteembed.min.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/pasteimage/trumbowyg.pasteimage.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/pasteimage/trumbowyg.pasteimage.min.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/preformatted/trumbowyg.preformatted.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/preformatted/trumbowyg.preformatted.min.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/resizimg/trumbowyg.resizimg.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/resizimg/trumbowyg.resizimg.min.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/ruby/trumbowyg.ruby.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/ruby/trumbowyg.ruby.min.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/specialchars/trumbowyg.specialchars.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/specialchars/trumbowyg.specialchars.min.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/specialchars/ui/sass/trumbowyg.specialchars.scss
create mode 100755 src/assets/scripts/trumbowyg/plugins/specialchars/ui/trumbowyg.specialchars.css
create mode 100755 src/assets/scripts/trumbowyg/plugins/specialchars/ui/trumbowyg.specialchars.min.css
create mode 100755 src/assets/scripts/trumbowyg/plugins/table/trumbowyg.table.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/table/trumbowyg.table.min.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/table/ui/sass/trumbowyg.table.scss
create mode 100755 src/assets/scripts/trumbowyg/plugins/table/ui/trumbowyg.table.css
create mode 100755 src/assets/scripts/trumbowyg/plugins/table/ui/trumbowyg.table.min.css
create mode 100755 src/assets/scripts/trumbowyg/plugins/template/trumbowyg.template.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/template/trumbowyg.template.min.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/upload/trumbowyg.upload.js
create mode 100755 src/assets/scripts/trumbowyg/plugins/upload/trumbowyg.upload.min.js
create mode 100755 src/assets/scripts/trumbowyg/trumbowyg.js
create mode 100755 src/assets/scripts/trumbowyg/trumbowyg.min.js
create mode 100755 src/assets/scripts/trumbowyg/ui/icons.svg
create mode 100755 src/assets/scripts/trumbowyg/ui/sass/trumbowyg.scss
create mode 100755 src/assets/scripts/trumbowyg/ui/trumbowyg.css
create mode 100755 src/assets/scripts/trumbowyg/ui/trumbowyg.min.css
create mode 100755 src/assets/static/trumbowyg/icons.svg
create mode 100644 src/new-user.html
diff --git a/package.json b/package.json
index 4991144..0145141 100755
--- a/package.json
+++ b/package.json
@@ -19,9 +19,9 @@
"dependencies": {
"angular": "^1.6.4",
"angular-cookies": "^1.6.4",
- "avatar-initials": "^4.1.0",
"angular-filter": "^0.5.17",
"angular-route": "^1.6.4",
+ "avatar-initials": "^4.1.0",
"babel-core": "^6.26.0",
"babel-eslint": "^8.0.1",
"babel-loader": "^7.1.2",
diff --git a/src/assets/scripts/ads-add/ads-add.controller.js b/src/assets/scripts/ads-add/ads-add.controller.js
new file mode 100644
index 0000000..c0846e9
--- /dev/null
+++ b/src/assets/scripts/ads-add/ads-add.controller.js
@@ -0,0 +1,12 @@
+const AdsAddController = ($scope, AdsAddService, $routeParams, UserService) => {
+ $scope.$on('loadUserSuccess', function (event, user) {
+ $scope.user = user;
+
+ $scope.classifications = ['class1', 'class2'];
+ $scope.skills = ['s1', 's2'];
+
+ });
+ UserService.loadUser();
+}
+
+export default AdsAddController;
\ No newline at end of file
diff --git a/src/assets/scripts/ads-add/ads-add.html b/src/assets/scripts/ads-add/ads-add.html
new file mode 100644
index 0000000..c9d59e5
--- /dev/null
+++ b/src/assets/scripts/ads-add/ads-add.html
@@ -0,0 +1,88 @@
+Create a new Internship Ad
+
14th March 2019 (Friday)
',
+ '' + Prism.highlight(text, Prism.languages[language]) + '',
+ '',
+ ].join('');
+ }
+
+ // If my plugin is a button
+ function buildButtonDef(trumbowyg) {
+ return {
+ fn: function () {
+ var $modal = trumbowyg.openModal('Code', [
+ '',''+n.highlight(i,n.languages[e])+"",""].join("")}function o(i){return{fn:function(){var o=i.openModal("Code",[''
+ },
+ da: {
+ preformatted: 'Præformateret '
+ },
+ fr: {
+ preformatted: 'Exemple de code '
+ },
+ it: {
+ preformatted: 'Codice '
+ },
+ zh_cn: {
+ preformatted: '代码示例 '
+ },
+ ru: {
+ preformatted: 'Пример кода '
+ },
+ ja: {
+ preformatted: 'コードサンプル '
+ },
+ tr: {
+ preformatted: 'Kod örneği '
+ },
+ zh_tw: {
+ preformatted: '代碼範例 '
+ },
+ pt_br: {
+ preformatted: 'Exemple de código '
+ }
+ },
+ // jshint camelcase:true
+
+ plugins: {
+ preformatted: {
+ init: function (trumbowyg) {
+ var btnDef = {
+ fn: function () {
+ trumbowyg.saveRange();
+ var text = trumbowyg.getRangeText();
+ if (text.replace(/\s/g, '') !== '') {
+ try {
+ var curtag = getSelectionParentElement().tagName.toLowerCase();
+ if (curtag === 'code' || curtag === 'pre') {
+ return unwrapCode();
+ }
+ else {
+ trumbowyg.execCmd('insertHTML', '' + strip(text) + '
');
+ }
+ } catch (e) {
+ }
+ }
+ },
+ tag: 'pre'
+ };
+
+ trumbowyg.addBtnDef('preformatted', btnDef);
+ }
+ }
+ }
+ });
+
+ /*
+ * GetSelectionParentElement
+ */
+ function getSelectionParentElement() {
+ var parentEl = null,
+ selection;
+
+ if (window.getSelection) {
+ selection = window.getSelection();
+ if (selection.rangeCount) {
+ parentEl = selection.getRangeAt(0).commonAncestorContainer;
+ if (parentEl.nodeType !== 1) {
+ parentEl = parentEl.parentNode;
+ }
+ }
+ } else if ((selection = document.selection) && selection.type !== 'Control') {
+ parentEl = selection.createRange().parentElement();
+ }
+
+ return parentEl;
+ }
+
+ /*
+ * Strip
+ * returns a text without HTML tags
+ */
+ function strip(html) {
+ var tmp = document.createElement('DIV');
+ tmp.innerHTML = html;
+ return tmp.textContent || tmp.innerText || '';
+ }
+
+ /*
+ * UnwrapCode
+ * ADD/FIX: to improve, works but can be better
+ * "paranoic" solution
+ */
+ function unwrapCode() {
+ var container = null;
+
+ if (document.selection) { //for IE
+ container = document.selection.createRange().parentElement();
+ } else {
+ var select = window.getSelection();
+ if (select.rangeCount > 0) {
+ container = select.getRangeAt(0).startContainer.parentNode;
+ }
+ }
+
+ //'paranoic' unwrap
+ var ispre = $(container).contents().closest('pre').length;
+ var iscode = $(container).contents().closest('code').length;
+
+ if (ispre && iscode) {
+ $(container).contents().unwrap('code').unwrap('pre');
+ } else if (ispre) {
+ $(container).contents().unwrap('pre');
+ } else if (iscode) {
+ $(container).contents().unwrap('code');
+ }
+ }
+})(jQuery);
diff --git a/src/assets/scripts/trumbowyg/plugins/preformatted/trumbowyg.preformatted.min.js b/src/assets/scripts/trumbowyg/plugins/preformatted/trumbowyg.preformatted.min.js
new file mode 100755
index 0000000..b1d2873
--- /dev/null
+++ b/src/assets/scripts/trumbowyg/plugins/preformatted/trumbowyg.preformatted.min.js
@@ -0,0 +1 @@
+!function(e){"use strict";function t(){var e,t=null;return window.getSelection?(e=window.getSelection(),e.rangeCount&&(t=e.getRangeAt(0).commonAncestorContainer,1!==t.nodeType&&(t=t.parentNode))):(e=document.selection)&&"Control"!==e.type&&(t=e.createRange().parentElement()),t}function r(e){var t=document.createElement("DIV");return t.innerHTML=e,t.textContent||t.innerText||""}function n(){var t=null;if(document.selection)t=document.selection.createRange().parentElement();else{var r=window.getSelection();r.rangeCount>0&&(t=r.getRangeAt(0).startContainer.parentNode)}var n=e(t).contents().closest("pre").length,o=e(t).contents().closest("code").length;n&&o?e(t).contents().unwrap("code").unwrap("pre"):n?e(t).contents().unwrap("pre"):o&&e(t).contents().unwrap("code")}e.extend(!0,e.trumbowyg,{langs:{en:{preformatted:"Code sample "},da:{preformatted:"Præformateret "},fr:{preformatted:"Exemple de code "},it:{preformatted:"Codice "},zh_cn:{preformatted:"代码示例 "},ru:{preformatted:"Пример кода "},ja:{preformatted:"コードサンプル "},tr:{preformatted:"Kod örneği "},zh_tw:{preformatted:"代碼範例 "},pt_br:{preformatted:"Exemple de código "}},plugins:{preformatted:{init:function(e){var o={fn:function(){e.saveRange();var o=e.getRangeText();if(""!==o.replace(/\s/g,""))try{var a=t().tagName.toLowerCase();if("code"===a||"pre"===a)return n();e.execCmd("insertHTML",""+r(o)+"
")}catch(p){}},tag:"pre"};e.addBtnDef("preformatted",o)}}}})}(jQuery);
\ No newline at end of file
diff --git a/src/assets/scripts/trumbowyg/plugins/resizimg/trumbowyg.resizimg.js b/src/assets/scripts/trumbowyg/plugins/resizimg/trumbowyg.resizimg.js
new file mode 100755
index 0000000..f7629df
--- /dev/null
+++ b/src/assets/scripts/trumbowyg/plugins/resizimg/trumbowyg.resizimg.js
@@ -0,0 +1,70 @@
+(function ($) {
+ 'use strict';
+
+ var defaultOptions = {
+ minSize: 32,
+ step: 4
+ };
+
+ var preventDefault = function (ev) {
+ return ev.preventDefault();
+ };
+
+ $.extend(true, $.trumbowyg, {
+ plugins: {
+ resizimg: {
+ init: function (trumbowyg) {
+ trumbowyg.o.plugins.resizimg = $.extend(true, {},
+ defaultOptions,
+ trumbowyg.o.plugins.resizimg || {},
+ {
+ resizable: {
+ resizeWidth: false,
+ onDragStart: function (ev, $el) {
+ var opt = trumbowyg.o.plugins.resizimg;
+ var x = ev.pageX - $el.offset().left;
+ var y = ev.pageY - $el.offset().top;
+ if (x < $el.width() - opt.minSize || y < $el.height() - opt.minSize) {
+ return false;
+ }
+ },
+ onDrag: function (ev, $el, newWidth, newHeight) {
+ var opt = trumbowyg.o.plugins.resizimg;
+ if (newHeight < opt.minSize) {
+ newHeight = opt.minSize;
+ }
+ newHeight -= newHeight % opt.step;
+ $el.height(newHeight);
+ return false;
+ },
+ onDragEnd: function () {
+ trumbowyg.syncCode();
+ }
+ }
+ }
+ );
+
+ function initResizable() {
+ trumbowyg.$ed.find('img:not(.resizable)')
+ .resizable(trumbowyg.o.plugins.resizimg.resizable)
+ .on('mousedown', preventDefault);
+ }
+
+ function destroyResizable() {
+ trumbowyg.$ed.find('img.resizable')
+ .resizable('destroy')
+ .off('mousedown', preventDefault)
+ .removeClass('resizable');
+ trumbowyg.syncTextarea();
+ }
+
+ trumbowyg.$c.on('tbwinit', initResizable);
+ trumbowyg.$c.on('tbwfocus', initResizable);
+ trumbowyg.$c.on('tbwchange', initResizable);
+ trumbowyg.$c.on('tbwblur', destroyResizable);
+ trumbowyg.$c.on('tbwclose', destroyResizable);
+ }
+ }
+ }
+ });
+})(jQuery);
diff --git a/src/assets/scripts/trumbowyg/plugins/resizimg/trumbowyg.resizimg.min.js b/src/assets/scripts/trumbowyg/plugins/resizimg/trumbowyg.resizimg.min.js
new file mode 100755
index 0000000..6ce6325
--- /dev/null
+++ b/src/assets/scripts/trumbowyg/plugins/resizimg/trumbowyg.resizimg.min.js
@@ -0,0 +1 @@
+!function(e){"use strict";var i={minSize:32,step:4},n=function(e){return e.preventDefault()};e.extend(!0,e.trumbowyg,{plugins:{resizimg:{init:function(t){function o(){t.$ed.find("img:not(.resizable)").resizable(t.o.plugins.resizimg.resizable).on("mousedown",n)}function r(){t.$ed.find("img.resizable").resizable("destroy").off("mousedown",n).removeClass("resizable"),t.syncTextarea()}t.o.plugins.resizimg=e.extend(!0,{},i,t.o.plugins.resizimg||{},{resizable:{resizeWidth:!1,onDragStart:function(e,i){var n=t.o.plugins.resizimg,o=e.pageX-i.offset().left,r=e.pageY-i.offset().top;if(o' + v.modal + '')[0];
+ trumbowyg.range.deleteContents();
+ trumbowyg.range.insertNode(node);
+ trumbowyg.syncCode();
+ trumbowyg.$c.trigger('tbwchange');
+ return true;
+ }
+ );
+ }
+ };
+ trumbowyg.addBtnDef('ruby', btnDef);
+ }
+ }
+ }
+ });
+})(jQuery);
diff --git a/src/assets/scripts/trumbowyg/plugins/ruby/trumbowyg.ruby.min.js b/src/assets/scripts/trumbowyg/plugins/ruby/trumbowyg.ruby.min.js
new file mode 100755
index 0000000..cd6ba5b
--- /dev/null
+++ b/src/assets/scripts/trumbowyg/plugins/ruby/trumbowyg.ruby.min.js
@@ -0,0 +1 @@
+!function(r){"use strict";r.extend(!0,r.trumbowyg,{langs:{en:{ruby:"Add ruby text",rubyModal:"Ruby modal",rubyText:"Ruby text"},da:{ruby:"Tilføj ruby tekst",rubyModal:"Ruby modal",rubyText:"Ruby tekst"},fr:{ruby:"Ajouter du texte ruby",rubyModal:"Modale ruby",rubyText:"Texte ruby"},id:{ruby:"Sisipkan teks ruby",rubyModal:"Modal teks ruby",rubyText:"Teks ruby"},tr:{ruby:"Ruby metni ekle",rubyModal:"Ruby modal",rubyText:"Ruby metni"},zh_tw:{ruby:"加入 ruby 文字",rubyModal:"Ruby 彈跳視窗",rubyText:"Ruby 文字"},pt_br:{ruby:"Adicionar texto ruby",rubyModal:"Modal ruby",rubyText:"Texto ruby"}},plugins:{ruby:{init:function(u){var e={fn:function(){u.saveRange(),u.openModalInsert(u.lang.ruby,{rubyText:{label:u.lang.rubyText,required:!1},modal:{label:u.lang.rubyModal,value:u.getRangeText(),required:!0}},function(e){var b=r(''+e.modal+"")[0];return u.range.deleteContents(),u.range.insertNode(b),u.syncCode(),u.$c.trigger("tbwchange"),!0})}};u.addBtnDef("ruby",e)}}}})}(jQuery);
\ No newline at end of file
diff --git a/src/assets/scripts/trumbowyg/plugins/specialchars/trumbowyg.specialchars.js b/src/assets/scripts/trumbowyg/plugins/specialchars/trumbowyg.specialchars.js
new file mode 100755
index 0000000..c5d05cc
--- /dev/null
+++ b/src/assets/scripts/trumbowyg/plugins/specialchars/trumbowyg.specialchars.js
@@ -0,0 +1,74 @@
+/* ===========================================================
+ * trumbowyg.specialchars.js v0.99
+ * Unicode characters picker plugin for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Renaud Hoyoux (geektortoise)
+*/
+
+(function ($) {
+ 'use strict';
+
+ var defaultOptions = {
+ symbolList: [
+ // currencies
+ '0024','20AC','00A3','00A2','00A5','00A4','2030', null,
+ // legal signs
+ '00A9','00AE', '2122', null,
+ // textual sign
+ '00A7','00B6','00C6','00E6','0152','0153', null,
+ '2022','25CF','2023','25B6','2B29','25C6',null,
+ //maths
+ '00B1','00D7','00F7','21D2','21D4','220F','2211','2243','2264','2265'
+ ]
+ };
+
+ $.extend(true, $.trumbowyg, {
+ langs: {
+ en: {
+ specialChars: 'Special characters'
+ },
+ fr: {
+ specialChars: 'Caractères spéciaux'
+ }
+ },
+ plugins: {
+ specialchars: {
+ init: function (trumbowyg) {
+ trumbowyg.o.plugins.specialchars = trumbowyg.o.plugins.specialchars || defaultOptions;
+ var specialCharsBtnDef = {
+ dropdown: buildDropdown(trumbowyg)
+ };
+
+ trumbowyg.addBtnDef('specialChars', specialCharsBtnDef);
+ }
+ }
+ }
+ });
+ function buildDropdown(trumbowyg) {
+ var dropdown = [];
+ var isNull = false;
+ $.each(trumbowyg.o.plugins.specialchars.symbolList, function (i, symbol) {
+ if(symbol === null){
+ symbol = ' ';
+ } else {
+ symbol = '' + symbol;
+ }
+ var btn = symbol.replace(/:/g, ''),
+ defaultSymbolBtnName = 'symbol-' + btn,
+ defaultSymbolBtnDef = {
+ text: symbol,
+ fn: function () {
+ var encodedSymbol = String.fromCodePoint(symbol.replace("", "0"));
+ trumbowyg.execCmd('insertText', encodedSymbol);
+ return true;
+ }
+ };
+
+ trumbowyg.addBtnDef(defaultSymbolBtnName, defaultSymbolBtnDef);
+ dropdown.push(defaultSymbolBtnName);
+ });
+
+ return dropdown;
+ }
+})(jQuery);
diff --git a/src/assets/scripts/trumbowyg/plugins/specialchars/trumbowyg.specialchars.min.js b/src/assets/scripts/trumbowyg/plugins/specialchars/trumbowyg.specialchars.min.js
new file mode 100755
index 0000000..814b55c
--- /dev/null
+++ b/src/assets/scripts/trumbowyg/plugins/specialchars/trumbowyg.specialchars.min.js
@@ -0,0 +1 @@
+!function(n){"use strict";function s(s){var a=[];return n.each(s.o.plugins.specialchars.symbolList,function(n,e){e=null===e?" ":""+e;var r=e.replace(/:/g,""),l="symbol-"+r,c={text:e,fn:function(){var n=String.fromCodePoint(e.replace("","0"));return s.execCmd("insertText",n),!0}};s.addBtnDef(l,c),a.push(l)}),a}var a={symbolList:["0024","20AC","00A3","00A2","00A5","00A4","2030",null,"00A9","00AE","2122",null,"00A7","00B6","00C6","00E6","0152","0153",null,"2022","25CF","2023","25B6","2B29","25C6",null,"00B1","00D7","00F7","21D2","21D4","220F","2211","2243","2264","2265"]};n.extend(!0,n.trumbowyg,{langs:{en:{specialChars:"Special characters"},fr:{specialChars:"Caractères spéciaux"}},plugins:{specialchars:{init:function(n){n.o.plugins.specialchars=n.o.plugins.specialchars||a;var e={dropdown:s(n)};n.addBtnDef("specialChars",e)}}}})}(jQuery);
\ No newline at end of file
diff --git a/src/assets/scripts/trumbowyg/plugins/specialchars/ui/sass/trumbowyg.specialchars.scss b/src/assets/scripts/trumbowyg/plugins/specialchars/ui/sass/trumbowyg.specialchars.scss
new file mode 100755
index 0000000..8902ca4
--- /dev/null
+++ b/src/assets/scripts/trumbowyg/plugins/specialchars/ui/sass/trumbowyg.specialchars.scss
@@ -0,0 +1,63 @@
+/**
+ * Trumbowyg v2.14.0 - A lightweight WYSIWYG editor
+ * Default stylesheet for Trumbowyg editor plugin
+ * ------------------------
+ * @link http://alex-d.github.io/Trumbowyg
+ * @license MIT
+ * @author Alexandre Demode (Alex-D)
+ * Twitter : @AlexandreDemode
+ * Website : alex-d.fr
+ */
+
+.trumbowyg-symbol-\ -dropdown-button {
+ display: none !important;
+}
+.trumbowyg-symbol-\ -dropdown-button + button {
+ clear: both;
+}
+
+.trumbowyg-dropdown-specialChars {
+ width: 265px;
+ padding: 7px 0 7px 5px;
+ height: 200px;
+ overflow-y: scroll;
+ overflow-x: hidden;
+}
+
+.trumbowyg-dropdown-specialChars svg {
+ display: none !important;
+}
+
+.trumbowyg-dropdown-specialChars button {
+ display: block;
+ position: relative;
+ float: left;
+ height: 26px;
+ width: 26px;
+ padding: 0;
+ margin: 2px;
+ line-height: 24px;
+ text-align: center;
+
+ &:hover,
+ &:focus {
+ &::after {
+ display: block;
+ position: absolute;
+ top: -5px;
+ left: -5px;
+ height: 27px;
+ width: 27px;
+ background: inherit;
+ box-shadow: #000 0 0 2px;
+ z-index: 10;
+ background-color: transparent;
+ }
+ }
+}
+
+.trumbowyg .specialChars {
+ width: 22px;
+ height: 22px;
+ display: inline-block;
+}
diff --git a/src/assets/scripts/trumbowyg/plugins/specialchars/ui/trumbowyg.specialchars.css b/src/assets/scripts/trumbowyg/plugins/specialchars/ui/trumbowyg.specialchars.css
new file mode 100755
index 0000000..54b6132
--- /dev/null
+++ b/src/assets/scripts/trumbowyg/plugins/specialchars/ui/trumbowyg.specialchars.css
@@ -0,0 +1,53 @@
+/**
+ * Trumbowyg v2.14.0 - A lightweight WYSIWYG editor
+ * Trumbowyg plugin stylesheet
+ * ------------------------
+ * @link http://alex-d.github.io/Trumbowyg
+ * @license MIT
+ * @author Alexandre Demode (Alex-D)
+ * Twitter : @AlexandreDemode
+ * Website : alex-d.fr
+ */
+
+.trumbowyg-symbol-\ -dropdown-button {
+ display: none !important; }
+
+.trumbowyg-symbol-\ -dropdown-button + button {
+ clear: both; }
+
+.trumbowyg-dropdown-specialChars {
+ width: 265px;
+ padding: 7px 0 7px 5px;
+ height: 200px;
+ overflow-y: scroll;
+ overflow-x: hidden; }
+
+.trumbowyg-dropdown-specialChars svg {
+ display: none !important; }
+
+.trumbowyg-dropdown-specialChars button {
+ display: block;
+ position: relative;
+ float: left;
+ height: 26px;
+ width: 26px;
+ padding: 0;
+ margin: 2px;
+ line-height: 24px;
+ text-align: center; }
+ .trumbowyg-dropdown-specialChars button:hover::after, .trumbowyg-dropdown-specialChars button:focus::after {
+ display: block;
+ position: absolute;
+ top: -5px;
+ left: -5px;
+ height: 27px;
+ width: 27px;
+ background: inherit;
+ box-shadow: #000 0 0 2px;
+ z-index: 10;
+ background-color: transparent; }
+
+.trumbowyg .specialChars {
+ width: 22px;
+ height: 22px;
+ display: inline-block; }
diff --git a/src/assets/scripts/trumbowyg/plugins/specialchars/ui/trumbowyg.specialchars.min.css b/src/assets/scripts/trumbowyg/plugins/specialchars/ui/trumbowyg.specialchars.min.css
new file mode 100755
index 0000000..f118d7e
--- /dev/null
+++ b/src/assets/scripts/trumbowyg/plugins/specialchars/ui/trumbowyg.specialchars.min.css
@@ -0,0 +1,2 @@
+/** Trumbowyg v2.14.0 - A lightweight WYSIWYG editor - alex-d.github.io/Trumbowyg - License MIT - Author : Alexandre Demode (Alex-D) / alex-d.fr */
+.trumbowyg-dropdown-specialChars svg,.trumbowyg-symbol-\ -dropdown-button{display:none!important}.trumbowyg-symbol-\ -dropdown-button+button{clear:both}.trumbowyg-dropdown-specialChars{width:265px;padding:7px 0 7px 5px;height:200px;overflow-y:scroll;overflow-x:hidden}.trumbowyg-dropdown-specialChars button{display:block;position:relative;float:left;height:26px;width:26px;padding:0;margin:2px;line-height:24px;text-align:center}.trumbowyg-dropdown-specialChars button:focus::after,.trumbowyg-dropdown-specialChars button:hover::after{display:block;position:absolute;top:-5px;left:-5px;height:27px;width:27px;background:inherit;box-shadow:#000 0 0 2px;z-index:10;background-color:transparent}.trumbowyg .specialChars{width:22px;height:22px;display:inline-block}
\ No newline at end of file
diff --git a/src/assets/scripts/trumbowyg/plugins/table/trumbowyg.table.js b/src/assets/scripts/trumbowyg/plugins/table/trumbowyg.table.js
new file mode 100755
index 0000000..eeb8ba5
--- /dev/null
+++ b/src/assets/scripts/trumbowyg/plugins/table/trumbowyg.table.js
@@ -0,0 +1,325 @@
+/* ===========================================================
+ * trumbowyg.table.custom.js v2.0
+ * Table plugin for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Sven Dunemann [dunemann@forelabs.eu]
+ */
+
+(function ($) {
+ 'use strict';
+
+ var defaultOptions = {
+ rows: 8,
+ columns: 8,
+ styler: 'table'
+ };
+
+ $.extend(true, $.trumbowyg, {
+ langs: {
+ en: {
+ table: 'Insert table',
+ tableAddRow: 'Add row',
+ tableAddColumn: 'Add column',
+ tableDeleteRow: 'Delete row',
+ tableDeleteColumn: 'Delete column',
+ tableDestroy: 'Delete table',
+ error: 'Error'
+ },
+ da: {
+ table: 'Indsæt tabel',
+ tableAddRow: 'Tilføj række',
+ tableAddColumn: 'Tilføj kolonne',
+ tableDeleteRow: 'Slet række',
+ tableDeleteColumn: 'Slet kolonne',
+ tableDestroy: 'Slet tabel',
+ error: 'Fejl'
+ },
+ de: {
+ table: 'Tabelle einfügen',
+ tableAddRow: 'Zeile hinzufügen',
+ tableAddColumn: 'Spalte hinzufügen',
+ tableDeleteRow: 'Zeile löschen',
+ tableDeleteColumn: 'Spalte löschen',
+ tableDestroy: 'Tabelle löschen',
+ error: 'Error'
+ },
+ sk: {
+ table: 'Vytvoriť tabuľky',
+ tableAddRow: 'Pridať riadok',
+ tableAddColumn: 'Pridať stĺpec',
+ error: 'Chyba'
+ },
+ fr: {
+ table: 'Insérer un tableau',
+ tableAddRow: 'Ajouter des lignes',
+ tableAddColumn: 'Ajouter des colonnes',
+ tableDeleteRow: 'Effacer la ligne',
+ tableDeleteColumn: 'Effacer la colonne',
+ tableDestroy: 'Effacer le tableau',
+ error: 'Erreur'
+ },
+ cs: {
+ table: 'Vytvořit příkaz Table',
+ tableAddRow: 'Přidat řádek',
+ tableAddColumn: 'Přidat sloupec',
+ error: 'Chyba'
+ },
+ ru: {
+ table: 'Вставить таблицу',
+ tableAddRow: 'Добавить строку',
+ tableAddColumn: 'Добавить столбец',
+ tableDeleteRow: 'Удалить строку',
+ tableDeleteColumn: 'Удалить столбец',
+ tableDestroy: 'Удалить таблицу',
+ error: 'Ошибка'
+ },
+ ja: {
+ table: '表の挿入',
+ tableAddRow: '行の追加',
+ tableAddColumn: '列の追加',
+ error: 'エラー'
+ },
+ tr: {
+ table: 'Tablo ekle',
+ tableAddRow: 'Satır ekle',
+ tableAddColumn: 'Kolon ekle',
+ error: 'Hata'
+ },
+ zh_tw: {
+ table: '插入表格',
+ tableAddRow: '加入行',
+ tableAddColumn: '加入列',
+ tableDeleteRow: '刪除行',
+ tableDeleteColumn: '刪除列',
+ tableDestroy: '刪除表格',
+ error: '錯誤'
+ },
+ id: {
+ table: 'Sisipkan tabel',
+ tableAddRow: 'Sisipkan baris',
+ tableAddColumn: 'Sisipkan kolom',
+ tableDeleteRow: 'Hapus baris',
+ tableDeleteColumn: 'Hapus kolom',
+ tableDestroy: 'Hapus tabel',
+ error: 'Galat'
+ },
+ pt_br: {
+ table: 'Inserir tabela',
+ tableAddRow: 'Adicionar linha',
+ tableAddColumn: 'Adicionar coluna',
+ tableDeleteRow: 'Deletar linha',
+ tableDeleteColumn: 'Deletar coluna',
+ tableDestroy: 'Deletar tabela',
+ error: 'Erro'
+ }
+ },
+
+ plugins: {
+ table: {
+ init: function (t) {
+ t.o.plugins.table = $.extend(true, {}, defaultOptions, t.o.plugins.table || {});
+
+ var buildButtonDef = {
+ fn: function () {
+ t.saveRange();
+
+ var btnName = 'table';
+
+ var dropdownPrefix = t.o.prefix + 'dropdown',
+ dropdownOptions = { // the dropdown
+ class: dropdownPrefix + '-' + btnName + ' ' + dropdownPrefix + ' ' + t.o.prefix + 'fixed-top'
+ };
+ dropdownOptions['data-' + dropdownPrefix] = btnName;
+ var $dropdown = $('', dropdownOptions);
+
+ if (t.$box.find("." + dropdownPrefix + "-" + btnName).length === 0) {
+ t.$box.append($dropdown.hide());
+ } else {
+ $dropdown = t.$box.find("." + dropdownPrefix + "-" + btnName);
+ }
+
+ // clear dropdown
+ $dropdown.html('');
+
+ // when active table show AddRow / AddColumn
+ if (t.$box.find("." + t.o.prefix + "table-button").hasClass(t.o.prefix + 'active-button')) {
+ $dropdown.append(t.buildSubBtn('tableAddRow'));
+ $dropdown.append(t.buildSubBtn('tableAddColumn'));
+ $dropdown.append(t.buildSubBtn('tableDeleteRow'));
+ $dropdown.append(t.buildSubBtn('tableDeleteColumn'));
+ $dropdown.append(t.buildSubBtn('tableDestroy'));
+ } else {
+ var tableSelect = $('
');
+ for (var i = 0; i < t.o.plugins.table.rows; i += 1) {
+ var row = $(' ').appendTo(tableSelect);
+ for (var j = 0; j < t.o.plugins.table.columns; j += 1) {
+ $(' ').appendTo(row);
+ }
+ }
+ tableSelect.find('td').on('mouseover', tableAnimate);
+ tableSelect.find('td').on('mousedown', tableBuild);
+
+ $dropdown.append(tableSelect);
+ $dropdown.append($('1x1 '));
+ }
+
+ t.dropdown(btnName);
+ }
+ };
+
+ var tableAnimate = function(column_event) {
+ var column = $(column_event.target),
+ table = column.parents('table'),
+ colIndex = this.cellIndex,
+ rowIndex = this.parentNode.rowIndex;
+
+ // reset all columns
+ table.find('td').removeClass('active');
+
+ for (var i = 0; i <= rowIndex; i += 1) {
+ for (var j = 0; j <= colIndex; j += 1) {
+ table.find("tr:nth-of-type("+(i+1)+")").find("td:nth-of-type("+(j+1)+")").addClass('active');
+ }
+ }
+
+ // set label
+ table.next('center').html((colIndex+1) + "x" + (rowIndex+1));
+ };
+
+ var tableBuild = function(column_event) {
+ t.saveRange();
+
+ var tabler = $('
');
+ if (t.o.plugins.table.styler) {
+ tabler.attr('class', t.o.plugins.table.styler);
+ }
+
+ var column = $(column_event.target),
+ colIndex = this.cellIndex,
+ rowIndex = this.parentNode.rowIndex;
+
+ for (var i = 0; i <= rowIndex; i += 1) {
+ var row = $(' ').appendTo(tabler);
+ for (var j = 0; j <= colIndex; j += 1) {
+ $(' ').appendTo(row);
+ }
+ }
+
+ t.range.deleteContents();
+ t.range.insertNode(tabler[0]);
+ t.$c.trigger('tbwchange');
+ };
+
+ var addRow = {
+ title: t.lang['tableAddRow'],
+ text: t.lang['tableAddRow'],
+ ico: 'row-below',
+
+ fn: function () {
+ t.saveRange();
+
+ var node = t.doc.getSelection().focusNode;
+ var table = $(node).closest('table');
+
+ if(table.length > 0) {
+ var row = $(' ');
+ // add columns according to current columns count
+ for (var i = 0; i < table.find('tr')[0].childElementCount; i += 1) {
+ $(' ').appendTo(row);
+ }
+ // add row to table
+ row.appendTo(table);
+ }
+
+ return true;
+ }
+ };
+
+ var addColumn = {
+ title: t.lang['tableAddColumn'],
+ text: t.lang['tableAddColumn'],
+ ico: 'col-right',
+
+ fn: function () {
+ t.saveRange();
+
+ var node = t.doc.getSelection().focusNode;
+ var table = $(node).closest('table');
+
+ if(table.length > 0) {
+ $(table).find('tr').each(function() {
+ $(this).find('td:last').after(' ');
+ });
+ }
+
+ return true;
+ }
+ };
+
+ var destroy = {
+ title: t.lang['tableDestroy'],
+ text: t.lang['tableDestroy'],
+ ico: 'table-delete',
+
+ fn: function () {
+ t.saveRange();
+
+ var node = t.doc.getSelection().focusNode,
+ table = $(node).closest('table');
+
+ table.remove();
+
+ return true;
+ }
+ };
+
+ var deleteRow = {
+ title: t.lang['tableDeleteRow'],
+ text: t.lang['tableDeleteRow'],
+ ico: 'row-delete',
+
+ fn: function () {
+ t.saveRange();
+
+ var node = t.doc.getSelection().focusNode,
+ row = $(node).closest('tr');
+
+ row.remove();
+
+ return true;
+ }
+ };
+
+ var deleteColumn = {
+ title: t.lang['tableDeleteColumn'],
+ text: t.lang['tableDeleteColumn'],
+ ico: 'col-delete',
+
+ fn: function () {
+ t.saveRange();
+
+ var node = t.doc.getSelection().focusNode,
+ table = $(node).closest('table'),
+ td = $(node).closest('td'),
+ cellIndex = td.index();
+
+ $(table).find('tr').each(function() {
+ $(this).find('td:eq('+cellIndex+')').remove();
+ });
+
+ return true;
+ }
+ };
+
+ t.addBtnDef('table', buildButtonDef);
+ t.addBtnDef('tableAddRow', addRow);
+ t.addBtnDef('tableAddColumn', addColumn);
+ t.addBtnDef('tableDeleteRow', deleteRow);
+ t.addBtnDef('tableDeleteColumn', deleteColumn);
+ t.addBtnDef('tableDestroy', destroy);
+ }
+ }
+ }
+ });
+})(jQuery);
diff --git a/src/assets/scripts/trumbowyg/plugins/table/trumbowyg.table.min.js b/src/assets/scripts/trumbowyg/plugins/table/trumbowyg.table.min.js
new file mode 100755
index 0000000..fcc4498
--- /dev/null
+++ b/src/assets/scripts/trumbowyg/plugins/table/trumbowyg.table.min.js
@@ -0,0 +1 @@
+!function(e){"use strict";var t={rows:8,columns:8,styler:"table"};e.extend(!0,e.trumbowyg,{langs:{en:{table:"Insert table",tableAddRow:"Add row",tableAddColumn:"Add column",tableDeleteRow:"Delete row",tableDeleteColumn:"Delete column",tableDestroy:"Delete table",error:"Error"},da:{table:"Indsæt tabel",tableAddRow:"Tilføj række",tableAddColumn:"Tilføj kolonne",tableDeleteRow:"Slet række",tableDeleteColumn:"Slet kolonne",tableDestroy:"Slet tabel",error:"Fejl"},de:{table:"Tabelle einfügen",tableAddRow:"Zeile hinzufügen",tableAddColumn:"Spalte hinzufügen",tableDeleteRow:"Zeile löschen",tableDeleteColumn:"Spalte löschen",tableDestroy:"Tabelle löschen",error:"Error"},sk:{table:"Vytvoriť tabuľky",tableAddRow:"Pridať riadok",tableAddColumn:"Pridať stĺpec",error:"Chyba"},fr:{table:"Insérer un tableau",tableAddRow:"Ajouter des lignes",tableAddColumn:"Ajouter des colonnes",tableDeleteRow:"Effacer la ligne",tableDeleteColumn:"Effacer la colonne",tableDestroy:"Effacer le tableau",error:"Erreur"},cs:{table:"Vytvořit příkaz Table",tableAddRow:"Přidat řádek",tableAddColumn:"Přidat sloupec",error:"Chyba"},ru:{table:"Вставить таблицу",tableAddRow:"Добавить строку",tableAddColumn:"Добавить столбец",tableDeleteRow:"Удалить строку",tableDeleteColumn:"Удалить столбец",tableDestroy:"Удалить таблицу",error:"Ошибка"},ja:{table:"表の挿入",tableAddRow:"行の追加",tableAddColumn:"列の追加",error:"エラー"},tr:{table:"Tablo ekle",tableAddRow:"Satır ekle",tableAddColumn:"Kolon ekle",error:"Hata"},zh_tw:{table:"插入表格",tableAddRow:"加入行",tableAddColumn:"加入列",tableDeleteRow:"刪除行",tableDeleteColumn:"刪除列",tableDestroy:"刪除表格",error:"錯誤"},id:{table:"Sisipkan tabel",tableAddRow:"Sisipkan baris",tableAddColumn:"Sisipkan kolom",tableDeleteRow:"Hapus baris",tableDeleteColumn:"Hapus kolom",tableDestroy:"Hapus tabel",error:"Galat"},pt_br:{table:"Inserir tabela",tableAddRow:"Adicionar linha",tableAddColumn:"Adicionar coluna",tableDeleteRow:"Deletar linha",tableDeleteColumn:"Deletar coluna",tableDestroy:"Deletar tabela",error:"Erro"}},plugins:{table:{init:function(l){l.o.plugins.table=e.extend(!0,{},t,l.o.plugins.table||{});var a={fn:function(){l.saveRange();var t="table",a=l.o.prefix+"dropdown",d={"class":a+"-"+t+" "+a+" "+l.o.prefix+"fixed-top"};d["data-"+a]=t;var r=e("",d);if(0===l.$box.find("."+a+"-"+t).length?l.$box.append(r.hide()):r=l.$box.find("."+a+"-"+t),r.html(""),l.$box.find("."+l.o.prefix+"table-button").hasClass(l.o.prefix+"active-button"))r.append(l.buildSubBtn("tableAddRow")),r.append(l.buildSubBtn("tableAddColumn")),r.append(l.buildSubBtn("tableDeleteRow")),r.append(l.buildSubBtn("tableDeleteColumn")),r.append(l.buildSubBtn("tableDestroy"));else{for(var b=e("
"),i=0;i").appendTo(b),u=0;u").appendTo(s);b.find("td").on("mouseover",o),b.find("td").on("mousedown",n),r.append(b),r.append(e("1x1 "))}l.dropdown(t)}},o=function(t){var l=e(t.target),a=l.parents("table"),o=this.cellIndex,n=this.parentNode.rowIndex;a.find("td").removeClass("active");for(var d=0;d<=n;d+=1)for(var r=0;r<=o;r+=1)a.find("tr:nth-of-type("+(d+1)+")").find("td:nth-of-type("+(r+1)+")").addClass("active");a.next("center").html(o+1+"x"+(n+1))},n=function(t){l.saveRange();var a=e("
");l.o.plugins.table.styler&&a.attr("class",l.o.plugins.table.styler);for(var o=(e(t.target),this.cellIndex),n=this.parentNode.rowIndex,d=0;d<=n;d+=1)for(var r=e(" ").appendTo(a),b=0;b<=o;b+=1)e(" ").appendTo(r);l.range.deleteContents(),l.range.insertNode(a[0]),l.$c.trigger("tbwchange")},d={title:l.lang.tableAddRow,text:l.lang.tableAddRow,ico:"row-below",fn:function(){l.saveRange();var t=l.doc.getSelection().focusNode,a=e(t).closest("table");if(a.length>0){for(var o=e(" "),n=0;n").appendTo(o);o.appendTo(a)}return!0}},r={title:l.lang.tableAddColumn,text:l.lang.tableAddColumn,ico:"col-right",fn:function(){l.saveRange();var t=l.doc.getSelection().focusNode,a=e(t).closest("table");return a.length>0&&e(a).find("tr").each(function(){e(this).find("td:last").after(" ")}),!0}},b={title:l.lang.tableDestroy,text:l.lang.tableDestroy,ico:"table-delete",fn:function(){l.saveRange();var t=l.doc.getSelection().focusNode,a=e(t).closest("table");return a.remove(),!0}},i={title:l.lang.tableDeleteRow,text:l.lang.tableDeleteRow,ico:"row-delete",fn:function(){l.saveRange();var t=l.doc.getSelection().focusNode,a=e(t).closest("tr");return a.remove(),!0}},s={title:l.lang.tableDeleteColumn,text:l.lang.tableDeleteColumn,ico:"col-delete",fn:function(){l.saveRange();var t=l.doc.getSelection().focusNode,a=e(t).closest("table"),o=e(t).closest("td"),n=o.index();return e(a).find("tr").each(function(){e(this).find("td:eq("+n+")").remove()}),!0}};l.addBtnDef("table",a),l.addBtnDef("tableAddRow",d),l.addBtnDef("tableAddColumn",r),l.addBtnDef("tableDeleteRow",i),l.addBtnDef("tableDeleteColumn",s),l.addBtnDef("tableDestroy",b)}}}})}(jQuery);
\ No newline at end of file
diff --git a/src/assets/scripts/trumbowyg/plugins/table/ui/sass/trumbowyg.table.scss b/src/assets/scripts/trumbowyg/plugins/table/ui/sass/trumbowyg.table.scss
new file mode 100755
index 0000000..db88a36
--- /dev/null
+++ b/src/assets/scripts/trumbowyg/plugins/table/ui/sass/trumbowyg.table.scss
@@ -0,0 +1,42 @@
+/**
+ * Trumbowyg v2.14.0 - A lightweight WYSIWYG editor
+ * Default stylesheet for Trumbowyg editor plugin
+ * ------------------------
+ * @link http://alex-d.github.io/Trumbowyg
+ * @license MIT
+ * @author Alexandre Demode (Alex-D)
+ * Twitter : @AlexandreDemode
+ * Website : alex-d.fr
+ */
+
+.trumbowyg-editor table {
+ width: 100%;
+
+ td {
+ border: 1px dotted #e7eaec;
+ padding: 8px;
+ }
+}
+
+.trumbowyg-dropdown-table {
+ table {
+ margin: 10px;
+ display: inline-block;
+ }
+
+ table td {
+ display: inline-block;
+ height: 20px;
+ width: 20px;
+ margin: 1px;
+ padding: 0;
+ background-color: #fff;
+ box-shadow: 0 0 0 1px #cecece inset;
+
+ &.active {
+ background-color: #00b393;
+ box-shadow: none;
+ cursor: pointer;
+ }
+ }
+}
diff --git a/src/assets/scripts/trumbowyg/plugins/table/ui/trumbowyg.table.css b/src/assets/scripts/trumbowyg/plugins/table/ui/trumbowyg.table.css
new file mode 100755
index 0000000..a3cdecf
--- /dev/null
+++ b/src/assets/scripts/trumbowyg/plugins/table/ui/trumbowyg.table.css
@@ -0,0 +1,33 @@
+/**
+ * Trumbowyg v2.14.0 - A lightweight WYSIWYG editor
+ * Trumbowyg plugin stylesheet
+ * ------------------------
+ * @link http://alex-d.github.io/Trumbowyg
+ * @license MIT
+ * @author Alexandre Demode (Alex-D)
+ * Twitter : @AlexandreDemode
+ * Website : alex-d.fr
+ */
+
+.trumbowyg-editor table {
+ width: 100%; }
+ .trumbowyg-editor table td {
+ border: 1px dotted #e7eaec;
+ padding: 8px; }
+
+.trumbowyg-dropdown-table table {
+ margin: 10px;
+ display: inline-block; }
+
+.trumbowyg-dropdown-table table td {
+ display: inline-block;
+ height: 20px;
+ width: 20px;
+ margin: 1px;
+ padding: 0;
+ background-color: #fff;
+ box-shadow: 0 0 0 1px #cecece inset; }
+ .trumbowyg-dropdown-table table td.active {
+ background-color: #00b393;
+ box-shadow: none;
+ cursor: pointer; }
diff --git a/src/assets/scripts/trumbowyg/plugins/table/ui/trumbowyg.table.min.css b/src/assets/scripts/trumbowyg/plugins/table/ui/trumbowyg.table.min.css
new file mode 100755
index 0000000..0ed78be
--- /dev/null
+++ b/src/assets/scripts/trumbowyg/plugins/table/ui/trumbowyg.table.min.css
@@ -0,0 +1,2 @@
+/** Trumbowyg v2.14.0 - A lightweight WYSIWYG editor - alex-d.github.io/Trumbowyg - License MIT - Author : Alexandre Demode (Alex-D) / alex-d.fr */
+.trumbowyg-editor table{width:100%}.trumbowyg-editor table td{border:1px dotted #e7eaec;padding:8px}.trumbowyg-dropdown-table table{margin:10px;display:inline-block}.trumbowyg-dropdown-table table td{display:inline-block;height:20px;width:20px;margin:1px;padding:0;background-color:#fff;box-shadow:0 0 0 1px #cecece inset}.trumbowyg-dropdown-table table td.active{background-color:#00b393;box-shadow:none;cursor:pointer}
\ No newline at end of file
diff --git a/src/assets/scripts/trumbowyg/plugins/template/trumbowyg.template.js b/src/assets/scripts/trumbowyg/plugins/template/trumbowyg.template.js
new file mode 100755
index 0000000..e7ffdb9
--- /dev/null
+++ b/src/assets/scripts/trumbowyg/plugins/template/trumbowyg.template.js
@@ -0,0 +1,73 @@
+(function ($) {
+ 'use strict';
+
+ // Adds the language variables
+ $.extend(true, $.trumbowyg, {
+ langs: {
+ en: {
+ template: 'Template'
+ },
+ da: {
+ template: 'Skabelon'
+ },
+ fr: {
+ template: 'Patron'
+ },
+ nl: {
+ template: 'Sjabloon'
+ },
+ ru: {
+ template: 'Шаблон'
+ },
+ ja: {
+ template: 'テンプレート'
+ },
+ tr: {
+ template: 'Şablon'
+ },
+ zh_tw: {
+ template: '模板',
+ },
+ pt_br: {
+ template: 'Modelo'
+ }
+ }
+ });
+
+ // Adds the extra button definition
+ $.extend(true, $.trumbowyg, {
+ plugins: {
+ template: {
+ shouldInit: function (trumbowyg) {
+ return trumbowyg.o.plugins.hasOwnProperty('templates');
+ },
+ init: function (trumbowyg) {
+ trumbowyg.addBtnDef('template', {
+ dropdown: templateSelector(trumbowyg),
+ hasIcon: false,
+ text: trumbowyg.lang.template
+ });
+ }
+ }
+ }
+ });
+
+ // Creates the template-selector dropdown.
+ function templateSelector(trumbowyg) {
+ var available = trumbowyg.o.plugins.templates;
+ var templates = [];
+
+ $.each(available, function (index, template) {
+ trumbowyg.addBtnDef('template_' + index, {
+ fn: function () {
+ trumbowyg.html(template.html);
+ },
+ hasIcon: false,
+ title: template.name
+ });
+ templates.push('template_' + index);
+ });
+
+ return templates;
+ }
+})(jQuery);
diff --git a/src/assets/scripts/trumbowyg/plugins/template/trumbowyg.template.min.js b/src/assets/scripts/trumbowyg/plugins/template/trumbowyg.template.min.js
new file mode 100755
index 0000000..6cd3eff
--- /dev/null
+++ b/src/assets/scripts/trumbowyg/plugins/template/trumbowyg.template.min.js
@@ -0,0 +1 @@
+!function(t){"use strict";function e(e){var n=e.o.plugins.templates,a=[];return t.each(n,function(t,n){e.addBtnDef("template_"+t,{fn:function(){e.html(n.html)},hasIcon:!1,title:n.name}),a.push("template_"+t)}),a}t.extend(!0,t.trumbowyg,{langs:{en:{template:"Template"},da:{template:"Skabelon"},fr:{template:"Patron"},nl:{template:"Sjabloon"},ru:{template:"Шаблон"},ja:{template:"テンプレート"},tr:{template:"Şablon"},zh_tw:{template:"模板"},pt_br:{template:"Modelo"}}}),t.extend(!0,t.trumbowyg,{plugins:{template:{shouldInit:function(t){return t.o.plugins.hasOwnProperty("templates")},init:function(t){t.addBtnDef("template",{dropdown:e(t),hasIcon:!1,text:t.lang.template})}}}})}(jQuery);
\ No newline at end of file
diff --git a/src/assets/scripts/trumbowyg/plugins/upload/trumbowyg.upload.js b/src/assets/scripts/trumbowyg/plugins/upload/trumbowyg.upload.js
new file mode 100755
index 0000000..c34b9f3
--- /dev/null
+++ b/src/assets/scripts/trumbowyg/plugins/upload/trumbowyg.upload.js
@@ -0,0 +1,271 @@
+/* ===========================================================
+ * trumbowyg.upload.js v1.2
+ * Upload plugin for Trumbowyg
+ * http://alex-d.github.com/Trumbowyg
+ * ===========================================================
+ * Author : Alexandre Demode (Alex-D)
+ * Twitter : @AlexandreDemode
+ * Website : alex-d.fr
+ * Mod by : Aleksandr-ru
+ * Twitter : @Aleksandr_ru
+ * Website : aleksandr.ru
+ */
+
+(function ($) {
+ 'use strict';
+
+ var defaultOptions = {
+ serverPath: '',
+ fileFieldName: 'fileToUpload',
+ data: [], // Additional data for ajax [{name: 'key', value: 'value'}]
+ headers: {}, // Additional headers
+ xhrFields: {}, // Additional fields
+ urlPropertyName: 'file', // How to get url from the json response (for instance 'url' for {url: ....})
+ statusPropertyName: 'success', // How to get status from the json response
+ success: undefined, // Success callback: function (data, trumbowyg, $modal, values) {}
+ error: undefined, // Error callback: function () {}
+ imageWidthModalEdit: false // Add ability to edit image width
+ };
+
+ function getDeep(object, propertyParts) {
+ var mainProperty = propertyParts.shift(),
+ otherProperties = propertyParts;
+
+ if (object !== null) {
+ if (otherProperties.length === 0) {
+ return object[mainProperty];
+ }
+
+ if (typeof object === 'object') {
+ return getDeep(object[mainProperty], otherProperties);
+ }
+ }
+ return object;
+ }
+
+ addXhrProgressEvent();
+
+ $.extend(true, $.trumbowyg, {
+ langs: {
+ // jshint camelcase:false
+ en: {
+ upload: 'Upload',
+ file: 'File',
+ uploadError: 'Error'
+ },
+ da: {
+ upload: 'Upload',
+ file: 'Fil',
+ uploadError: 'Fejl'
+ },
+ de: {
+ upload: 'Hochladen',
+ file: 'Datei',
+ uploadError: 'Fehler'
+ },
+ 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'
+ },
+ zh_cn: {
+ upload: '上传',
+ file: '文件',
+ uploadError: '错误'
+ },
+ zh_tw: {
+ upload: '上傳',
+ file: '文件',
+ uploadError: '錯誤'
+ },
+ ru: {
+ upload: 'Загрузка',
+ file: 'Файл',
+ uploadError: 'Ошибка'
+ },
+ ja: {
+ upload: 'アップロード',
+ file: 'ファイル',
+ uploadError: 'エラー'
+ },
+ pt_br: {
+ upload: 'Enviar do local',
+ file: 'Arquivo',
+ uploadError: 'Erro'
+ },
+ tr: {
+ upload: 'Yükle',
+ file: 'Dosya',
+ uploadError: 'Hata'
+ }
+ },
+ // jshint camelcase:true
+
+ plugins: {
+ upload: {
+ init: function (trumbowyg) {
+ trumbowyg.o.plugins.upload = $.extend(true, {}, defaultOptions, trumbowyg.o.plugins.upload || {});
+ var btnDef = {
+ fn: function () {
+ trumbowyg.saveRange();
+
+ var file,
+ prefix = trumbowyg.o.prefix;
+
+ var fields = {
+ file: {
+ type: 'file',
+ required: true,
+ attributes: {
+ accept: 'image/*'
+ }
+ },
+ alt: {
+ label: 'description',
+ value: trumbowyg.getRangeText()
+ }
+ };
+
+ if (trumbowyg.o.plugins.upload.imageWidthModalEdit) {
+ fields.width = {
+ value: ''
+ };
+ }
+
+ var $modal = trumbowyg.openModalInsert(
+ // Title
+ trumbowyg.lang.upload,
+
+ // Fields
+ fields,
+
+ // Callback
+ function (values) {
+ var data = new FormData();
+ data.append(trumbowyg.o.plugins.upload.fileFieldName, file);
+
+ trumbowyg.o.plugins.upload.data.map(function (cur) {
+ data.append(cur.name, cur.value);
+ });
+
+ $.map(values, function (curr, key) {
+ if (key !== 'file') {
+ data.append(key, curr);
+ }
+ });
+
+ if ($('.' + prefix + 'progress', $modal).length === 0) {
+ $('.' + prefix + 'modal-title', $modal)
+ .after(
+ $('', {
+ 'class': prefix + 'progress'
+ }).append(
+ $('', {
+ 'class': prefix + 'progress-bar'
+ })
+ )
+ );
+ }
+
+ $.ajax({
+ url: trumbowyg.o.plugins.upload.serverPath,
+ headers: trumbowyg.o.plugins.upload.headers,
+ xhrFields: trumbowyg.o.plugins.upload.xhrFields,
+ type: 'POST',
+ data: data,
+ cache: false,
+ dataType: 'json',
+ processData: false,
+ contentType: false,
+
+ progressUpload: function (e) {
+ $('.' + prefix + 'progress-bar').css('width', Math.round(e.loaded * 100 / e.total) + '%');
+ },
+
+ success: function (data) {
+ if (trumbowyg.o.plugins.upload.success) {
+ trumbowyg.o.plugins.upload.success(data, trumbowyg, $modal, values);
+ } else {
+ if (!!getDeep(data, trumbowyg.o.plugins.upload.statusPropertyName.split('.'))) {
+ var url = getDeep(data, trumbowyg.o.plugins.upload.urlPropertyName.split('.'));
+ trumbowyg.execCmd('insertImage', url, false, true);
+ var $img = $('img[src="' + url + '"]:not([alt])', trumbowyg.$box);
+ $img.attr('alt', values.alt);
+ if (trumbowyg.o.imageWidthModalEdit && parseInt(values.width) > 0) {
+ $img.attr({
+ width: values.width
+ });
+ }
+ setTimeout(function () {
+ trumbowyg.closeModal();
+ }, 250);
+ trumbowyg.$c.trigger('tbwuploadsuccess', [trumbowyg, data, url]);
+ } else {
+ trumbowyg.addErrorOnModalField(
+ $('input[type=file]', $modal),
+ trumbowyg.lang[data.message]
+ );
+ trumbowyg.$c.trigger('tbwuploaderror', [trumbowyg, data]);
+ }
+ }
+ },
+
+ error: trumbowyg.o.plugins.upload.error || function () {
+ trumbowyg.addErrorOnModalField(
+ $('input[type=file]', $modal),
+ trumbowyg.lang.uploadError
+ );
+ trumbowyg.$c.trigger('tbwuploaderror', [trumbowyg]);
+ }
+ });
+ }
+ );
+
+ $('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;
+ }
+ });
+ }
+ };
+
+ trumbowyg.addBtnDef('upload', btnDef);
+ }
+ }
+ }
+ });
+
+ function addXhrProgressEvent() {
+ if (!$.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/src/assets/scripts/trumbowyg/plugins/upload/trumbowyg.upload.min.js b/src/assets/scripts/trumbowyg/plugins/upload/trumbowyg.upload.min.js
new file mode 100755
index 0000000..575f1f8
--- /dev/null
+++ b/src/assets/scripts/trumbowyg/plugins/upload/trumbowyg.upload.min.js
@@ -0,0 +1 @@
+!function(r){"use strict";function e(r,a){var o=a.shift(),l=a;if(null!==r){if(0===l.length)return r[o];if("object"==typeof r)return e(r[o],l)}return r}function a(){if(!r.trumbowyg.addedXhrProgressEvent){var e=r.ajaxSettings.xhr;r.ajaxSetup({xhr:function(){var r=e(),a=this;return r&&"object"==typeof r.upload&&void 0!==a.progressUpload&&r.upload.addEventListener("progress",function(r){a.progressUpload(r)},!1),r}}),r.trumbowyg.addedXhrProgressEvent=!0}}var o={serverPath:"",fileFieldName:"fileToUpload",data:[],headers:{},xhrFields:{},urlPropertyName:"file",statusPropertyName:"success",success:void 0,error:void 0,imageWidthModalEdit:!1};a(),r.extend(!0,r.trumbowyg,{langs:{en:{upload:"Upload",file:"File",uploadError:"Error"},da:{upload:"Upload",file:"Fil",uploadError:"Fejl"},de:{upload:"Hochladen",file:"Datei",uploadError:"Fehler"},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"},zh_cn:{upload:"上传",file:"文件",uploadError:"错误"},zh_tw:{upload:"上傳",file:"文件",uploadError:"錯誤"},ru:{upload:"Загрузка",file:"Файл",uploadError:"Ошибка"},ja:{upload:"アップロード",file:"ファイル",uploadError:"エラー"},pt_br:{upload:"Enviar do local",file:"Arquivo",uploadError:"Erro"},tr:{upload:"Yükle",file:"Dosya",uploadError:"Hata"}},plugins:{upload:{init:function(a){a.o.plugins.upload=r.extend(!0,{},o,a.o.plugins.upload||{});var l={fn:function(){a.saveRange();var o,l=a.o.prefix,t={file:{type:"file",required:!0,attributes:{accept:"image/*"}},alt:{label:"description",value:a.getRangeText()}};a.o.plugins.upload.imageWidthModalEdit&&(t.width={value:""});var d=a.openModalInsert(a.lang.upload,t,function(t){var i=new FormData;i.append(a.o.plugins.upload.fileFieldName,o),a.o.plugins.upload.data.map(function(r){i.append(r.name,r.value)}),r.map(t,function(r,e){"file"!==e&&i.append(e,r)}),0===r("."+l+"progress",d).length&&r("."+l+"modal-title",d).after(r("",{"class":l+"progress"}).append(r("",{"class":l+"progress-bar"}))),r.ajax({url:a.o.plugins.upload.serverPath,headers:a.o.plugins.upload.headers,xhrFields:a.o.plugins.upload.xhrFields,type:"POST",data:i,cache:!1,dataType:"json",processData:!1,contentType:!1,progressUpload:function(e){r("."+l+"progress-bar").css("width",Math.round(100*e.loaded/e.total)+"%")},success:function(o){if(a.o.plugins.upload.success)a.o.plugins.upload.success(o,a,d,t);else if(e(o,a.o.plugins.upload.statusPropertyName.split("."))){var l=e(o,a.o.plugins.upload.urlPropertyName.split("."));a.execCmd("insertImage",l,!1,!0);var i=r('img[src="'+l+'"]:not([alt])',a.$box);i.attr("alt",t.alt),a.o.imageWidthModalEdit&&parseInt(t.width)>0&&i.attr({width:t.width}),setTimeout(function(){a.closeModal()},250),a.$c.trigger("tbwuploadsuccess",[a,o,l])}else a.addErrorOnModalField(r("input[type=file]",d),a.lang[o.message]),a.$c.trigger("tbwuploaderror",[a,o])},error:a.o.plugins.upload.error||function(){a.addErrorOnModalField(r("input[type=file]",d),a.lang.uploadError),a.$c.trigger("tbwuploaderror",[a])}})});r("input[type=file]").on("change",function(r){try{o=r.target.files[0]}catch(e){o=r.target.value}})}};a.addBtnDef("upload",l)}}}})}(jQuery);
\ No newline at end of file
diff --git a/src/assets/scripts/trumbowyg/trumbowyg.js b/src/assets/scripts/trumbowyg/trumbowyg.js
new file mode 100755
index 0000000..3585ee1
--- /dev/null
+++ b/src/assets/scripts/trumbowyg/trumbowyg.js
@@ -0,0 +1,1834 @@
+/**
+ * Trumbowyg v2.14.0 - 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',
+
+ undo: 'Undo',
+ redo: 'Redo',
+
+ formatting: 'Formatting',
+ p: 'Paragraph',
+ blockquote: 'Quote',
+ code: 'Code',
+ header: 'Header',
+
+ bold: 'Bold',
+ italic: 'Italic',
+ strikethrough: 'Stroke',
+ underline: 'Underline',
+
+ strong: 'Strong',
+ em: 'Emphasis',
+ del: 'Deleted',
+
+ superscript: 'Superscript',
+ subscript: 'Subscript',
+
+ unorderedList: 'Unordered list',
+ orderedList: 'Ordered list',
+
+ insertImage: 'Insert Image',
+ 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',
+ width: 'Width'
+ }
+ },
+
+ // Plugins
+ plugins: {},
+
+ // SVG Path globally
+ svgPath: null,
+
+ hideButtonTexts: null
+};
+
+// Makes default options read-only
+Object.defineProperty(jQuery.trumbowyg, 'defaultOptions', {
+ value: {
+ lang: 'en',
+
+ fixedBtnPane: false,
+ fixedFullWidth: false,
+ autogrow: false,
+ autogrowOnEnter: false,
+ imageWidthModalEdit: false,
+
+ prefix: 'trumbowyg-',
+
+ semantic: true,
+ resetCss: false,
+ removeformatPasted: false,
+ tagsToRemove: [],
+ tagsToKeep: ['hr', 'img', 'embed', 'iframe', 'input'],
+ btns: [
+ ['viewHTML'],
+ ['undo', 'redo'], // Only supported in Blink browsers
+ ['formatting'],
+ ['strong', 'em', 'del'],
+ ['superscript', 'subscript'],
+ ['link'],
+ ['insertImage'],
+ ['justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull'],
+ ['unorderedList', 'orderedList'],
+ ['horizontalRule'],
+ ['removeformat'],
+ ['fullscreen']
+ ],
+ // For custom button definitions
+ btnsDef: {},
+
+ inlineElementsSelector: 'a,abbr,acronym,b,caption,cite,code,col,dfn,dir,dt,dd,em,font,hr,i,kbd,li,q,span,strikeout,strong,sub,sup,u',
+
+ pasteHandlers: [],
+
+ // imgDblClickHandler: default is defined in constructor
+
+ plugins: {},
+ urlProtocol: false,
+ minimalLinks: false
+ },
+ writable: false,
+ enumerable: true,
+ configurable: false
+});
+
+
+(function (navigator, window, document, $) {
+ 'use strict';
+
+ var CONFIRM_EVENT = 'tbwconfirm',
+ CANCEL_EVENT = 'tbwcancel';
+
+ $.fn.trumbowyg = function (options, params) {
+ var trumbowygDataName = 'trumbowyg';
+ if (options === Object(options) || !options) {
+ return this.each(function () {
+ if (!$(this).data(trumbowygDataName)) {
+ $(this).data(trumbowygDataName, new Trumbowyg(this, options));
+ }
+ });
+ }
+ if (this.length === 1) {
+ try {
+ var t = $(this).data(trumbowygDataName);
+ switch (options) {
+ // Exec command
+ case 'execCmd':
+ return t.execCmd(params.cmd, params.param, params.forceCss);
+
+ // Modal box
+ case 'openModal':
+ return t.openModal(params.title, params.content);
+ case 'closeModal':
+ return t.closeModal();
+ case 'openModalInsert':
+ return t.openModalInsert(params.title, params.fields, params.callback);
+
+ // Range
+ case 'saveRange':
+ return t.saveRange();
+ case 'getRange':
+ return t.range;
+ case 'getRangeText':
+ return t.getRangeText();
+ case 'restoreRange':
+ return t.restoreRange();
+
+ // Enable/disable
+ case 'enable':
+ return t.setDisabled(false);
+ case 'disable':
+ return t.setDisabled(true);
+
+ // Toggle
+ case 'toggle':
+ return t.toggle();
+
+ // Destroy
+ case 'destroy':
+ return t.destroy();
+
+ // Empty
+ case 'empty':
+ return t.empty();
+
+ // HTML
+ case 'html':
+ return t.html(params);
+ }
+ } catch (c) {
+ }
+ }
+
+ return false;
+ };
+
+ // @param: editorElem is the DOM element
+ var Trumbowyg = function (editorElem, options) {
+ var t = this,
+ trumbowygIconsId = 'trumbowyg-icons',
+ $trumbowyg = $.trumbowyg;
+
+ // 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
+
+ options = options || {};
+
+ // Localization management
+ if (options.lang != null || $trumbowyg.langs[options.lang] != null) {
+ t.lang = $.extend(true, {}, $trumbowyg.langs.en, $trumbowyg.langs[options.lang]);
+ } else {
+ t.lang = $trumbowyg.langs.en;
+ }
+
+ t.hideButtonTexts = $trumbowyg.hideButtonTexts != null ? $trumbowyg.hideButtonTexts : options.hideButtonTexts;
+
+ // SVG path
+ var svgPathOption = $trumbowyg.svgPath != null ? $trumbowyg.svgPath : options.svgPath;
+ t.hasSvg = svgPathOption !== false;
+ t.svgPath = !!t.doc.querySelector('base') ? window.location.href.split('#')[0] : '';
+ if ($('#' + trumbowygIconsId, t.doc).length === 0 && svgPathOption !== false) {
+ if (svgPathOption == null) {
+ // Hack to get svgPathOption based on trumbowyg.js path
+ var scriptElements = document.getElementsByTagName('script');
+ for (var i = 0; i < scriptElements.length; i += 1) {
+ var source = scriptElements[i].src;
+ var matches = source.match('trumbowyg(\.min)?\.js');
+ if (matches != null) {
+ svgPathOption = source.substring(0, source.indexOf(matches[0])) + 'ui/icons.svg';
+ }
+ }
+ if (svgPathOption == null) {
+ console.warn('You must define svgPath: https://goo.gl/CfTY9U'); // jshint ignore:line
+ }
+ }
+
+ var div = t.doc.createElement('div');
+ div.id = trumbowygIconsId;
+ t.doc.body.insertBefore(div, t.doc.body.childNodes[0]);
+ $.ajax({
+ async: true,
+ type: 'GET',
+ contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
+ dataType: 'xml',
+ crossDomain: true,
+ url: svgPathOption,
+ data: null,
+ beforeSend: null,
+ complete: null,
+ success: function (data) {
+ div.innerHTML = new XMLSerializer().serializeToString(data.documentElement);
+ }
+ });
+ }
+
+
+ /**
+ * When the button is associated to a empty object
+ * fn and title attributs are defined from the button key value
+ *
+ * For example
+ * foo: {}
+ * is equivalent to :
+ * foo: {
+ * fn: 'foo',
+ * title: this.lang.foo
+ * }
+ */
+ var h = t.lang.header, // Header translation
+ isBlinkFunction = function () {
+ return (window.chrome || (window.Intl && Intl.v8BreakIterator)) && 'CSS' in window;
+ };
+ t.btnsDef = {
+ viewHTML: {
+ fn: 'toggle',
+ class: 'trumbowyg-not-disable',
+ },
+
+ undo: {
+ isSupported: isBlinkFunction,
+ key: 'Z'
+ },
+ redo: {
+ isSupported: isBlinkFunction,
+ key: 'Y'
+ },
+
+ p: {
+ fn: 'formatBlock'
+ },
+ blockquote: {
+ fn: 'formatBlock'
+ },
+ h1: {
+ fn: 'formatBlock',
+ title: h + ' 1'
+ },
+ h2: {
+ fn: 'formatBlock',
+ title: h + ' 2'
+ },
+ h3: {
+ fn: 'formatBlock',
+ title: h + ' 3'
+ },
+ h4: {
+ fn: 'formatBlock',
+ title: h + ' 4'
+ },
+ subscript: {
+ tag: 'sub'
+ },
+ superscript: {
+ tag: 'sup'
+ },
+
+ bold: {
+ key: 'B',
+ tag: 'b'
+ },
+ italic: {
+ key: 'I',
+ tag: 'i'
+ },
+ underline: {
+ tag: 'u'
+ },
+ strikethrough: {
+ tag: 'strike'
+ },
+
+ strong: {
+ fn: 'bold',
+ key: 'B'
+ },
+ em: {
+ fn: 'italic',
+ key: 'I'
+ },
+ del: {
+ fn: 'strikethrough'
+ },
+
+ createLink: {
+ key: 'K',
+ tag: 'a'
+ },
+ unlink: {},
+
+ insertImage: {},
+
+ justifyLeft: {
+ tag: 'left',
+ forceCss: true
+ },
+ justifyCenter: {
+ tag: 'center',
+ forceCss: true
+ },
+ justifyRight: {
+ tag: 'right',
+ forceCss: true
+ },
+ justifyFull: {
+ tag: 'justify',
+ forceCss: true
+ },
+
+ unorderedList: {
+ fn: 'insertUnorderedList',
+ tag: 'ul'
+ },
+ orderedList: {
+ fn: 'insertOrderedList',
+ tag: 'ol'
+ },
+
+ horizontalRule: {
+ fn: 'insertHorizontalRule'
+ },
+
+ removeformat: {},
+
+ fullscreen: {
+ class: 'trumbowyg-not-disable'
+ },
+ close: {
+ fn: 'destroy',
+ class: 'trumbowyg-not-disable'
+ },
+
+ // Dropdowns
+ formatting: {
+ dropdown: ['p', 'blockquote', 'h1', 'h2', 'h3', 'h4'],
+ ico: 'p'
+ },
+ link: {
+ dropdown: ['createLink', 'unlink']
+ }
+ };
+
+ // Defaults Options
+ t.o = $.extend(true, {}, $trumbowyg.defaultOptions, options);
+ if (!t.o.hasOwnProperty('imgDblClickHandler')) {
+ t.o.imgDblClickHandler = t.getDefaultImgDblClickHandler();
+ }
+
+ t.urlPrefix = t.setupUrlPrefix();
+
+ t.disabled = t.o.disabled || (editorElem.nodeName === 'TEXTAREA' && editorElem.disabled);
+
+ if (options.btns) {
+ t.o.btns = options.btns;
+ } else if (!t.o.semantic) {
+ t.o.btns[3] = ['bold', 'italic', 'underline', 'strikethrough'];
+ }
+
+ $.each(t.o.btnsDef, function (btnName, btnDef) {
+ t.addBtnDef(btnName, btnDef);
+ });
+
+ // put this here in the event it would be merged in with options
+ t.eventNamespace = 'trumbowyg-event';
+
+ // Keyboard shortcuts are load in this array
+ t.keys = [];
+
+ // Tag to button dynamically hydrated
+ t.tagToButton = {};
+ t.tagHandlers = [];
+
+ // Admit multiple paste handlers
+ t.pasteHandlers = [].concat(t.o.pasteHandlers);
+
+ // Check if browser is IE
+ t.isIE = (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') !== -1);
+
+ t.init();
+ };
+
+ Trumbowyg.prototype = {
+ DEFAULT_SEMANTIC_MAP: {
+ 'b': 'strong',
+ 'i': 'em',
+ 's': 'del',
+ 'strike': 'del',
+ 'div': 'p'
+ },
+
+ init: function () {
+ var t = this;
+ t.height = t.$ta.height();
+
+ t.initPlugins();
+
+ try {
+ // Disable image resize, try-catch for old IE
+ t.doc.execCommand('enableObjectResizing', false, false);
+ t.doc.execCommand('defaultParagraphSeparator', false, 'p');
+ } catch (e) {
+ }
+
+ t.buildEditor();
+ t.buildBtnPane();
+
+ t.fixedBtnPaneEvents();
+
+ t.buildOverlay();
+
+ setTimeout(function () {
+ if (t.disabled) {
+ t.setDisabled(true);
+ }
+ t.$c.trigger('tbwinit');
+ });
+ },
+
+ addBtnDef: function (btnName, btnDef) {
+ this.btnsDef[btnName] = btnDef;
+ },
+
+ setupUrlPrefix: function () {
+ var protocol = this.o.urlProtocol;
+ if (!protocol) {
+ return;
+ }
+
+ if (typeof(protocol) !== 'string') {
+ return 'https://';
+ }
+ return /:\/\/$/.test(protocol) ? protocol : protocol + '://';
+ },
+
+ 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 || 'ltr'
+ })
+ .html(html)
+ ;
+
+ if (t.o.tabindex) {
+ t.$ed.attr('tabindex', t.o.tabindex);
+ }
+
+ if (t.$c.is('[placeholder]')) {
+ t.$ed.attr('placeholder', t.$c.attr('placeholder'));
+ }
+
+ if (t.$c.is('[spellcheck]')) {
+ t.$ed.attr('spellcheck', t.$c.attr('spellcheck'));
+ }
+
+ if (t.o.resetCss) {
+ t.$ed.addClass(prefix + 'reset-css');
+ }
+
+ if (!t.o.autogrow) {
+ t.$ta.add(t.$ed).css({
+ height: t.height
+ });
+ }
+
+ t.semanticCode();
+
+ if (t.o.autogrowOnEnter) {
+ t.$ed.addClass(prefix + 'autogrow-on-enter');
+ }
+
+ var ctrl = false,
+ composition = false,
+ debounceButtonPaneStatus,
+ updateEventName = 'keyup';
+
+ t.$ed
+ .on('dblclick', 'img', t.o.imgDblClickHandler)
+ .on('keydown', function (e) {
+ if ((e.ctrlKey || e.metaKey) && !e.altKey) {
+ ctrl = true;
+ var key = t.keys[String.fromCharCode(e.which).toUpperCase()];
+
+ try {
+ t.execCmd(key.fn, key.param);
+ return false;
+ } catch (c) {
+ }
+ }
+ })
+ .on('compositionstart compositionupdate', function () {
+ composition = true;
+ })
+ .on(updateEventName + ' compositionend', function (e) {
+ if (e.type === 'compositionend') {
+ composition = false;
+ } else if (composition) {
+ return;
+ }
+
+ var keyCode = e.which;
+
+ if (keyCode >= 37 && keyCode <= 40) {
+ return;
+ }
+
+ if ((e.ctrlKey || e.metaKey) && (keyCode === 89 || keyCode === 90)) {
+ t.semanticCode(false, true);
+ t.$c.trigger('tbwchange');
+ } else if (!ctrl && keyCode !== 17) {
+ var compositionEndIE = t.isIE ? e.type === 'compositionend' : true;
+ t.semanticCode(false, compositionEndIE && keyCode === 13);
+ t.$c.trigger('tbwchange');
+ } else if (typeof e.which === 'undefined') {
+ t.semanticCode(false, false, true);
+ }
+
+ setTimeout(function () {
+ ctrl = false;
+ }, 50);
+ })
+ .on('mouseup keydown keyup', function (e) {
+ if ((!e.ctrlKey && !e.metaKey) || e.altKey) {
+ setTimeout(function () { // "hold on" to the ctrl key for 50ms
+ ctrl = false;
+ }, 50);
+ }
+ clearTimeout(debounceButtonPaneStatus);
+ debounceButtonPaneStatus = setTimeout(function () {
+ t.updateButtonPaneStatus();
+ }, 50);
+ })
+ .on('focus blur', function (e) {
+ t.$c.trigger('tbw' + e.type);
+ if (e.type === 'blur') {
+ $('.' + prefix + 'active-button', t.$btnPane).removeClass(prefix + 'active-button ' + prefix + 'active');
+ }
+ if (t.o.autogrowOnEnter) {
+ if (t.autogrowOnEnterDontClose) {
+ return;
+ }
+ if (e.type === 'focus') {
+ t.autogrowOnEnterWasFocused = true;
+ t.autogrowEditorOnEnter();
+ }
+ else if (!t.o.autogrow) {
+ t.$ed.css({height: t.$ed.css('min-height')});
+ t.$c.trigger('tbwresize');
+ }
+ }
+ })
+ .on('cut drop', function () {
+ setTimeout(function () {
+ t.semanticCode(false, true);
+ t.$c.trigger('tbwchange');
+ }, 0);
+ })
+ .on('paste', function (e) {
+ if (t.o.removeformatPasted) {
+ e.preventDefault();
+
+ if (window.getSelection && window.getSelection().deleteFromDocument) {
+ window.getSelection().deleteFromDocument();
+ }
+
+ try {
+ // IE
+ var text = window.clipboardData.getData('Text');
+
+ try {
+ // <= IE10
+ t.doc.selection.createRange().pasteHTML(text);
+ } catch (c) {
+ // IE 11
+ t.doc.getSelection().getRangeAt(0).insertNode(t.doc.createTextNode(text));
+ }
+ t.$c.trigger('tbwchange', e);
+ } catch (d) {
+ // Not IE
+ t.execCmd('insertText', (e.originalEvent || e).clipboardData.getData('text/plain'));
+ }
+ }
+
+ // Call pasteHandlers
+ $.each(t.pasteHandlers, function (i, pasteHandler) {
+ pasteHandler(e);
+ });
+
+ setTimeout(function () {
+ t.semanticCode(false, true);
+ t.$c.trigger('tbwpaste', e);
+ t.$c.trigger('tbwchange');
+ }, 0);
+ });
+
+ t.$ta
+ .on('keyup', function () {
+ t.$c.trigger('tbwchange');
+ })
+ .on('paste', function () {
+ setTimeout(function () {
+ t.$c.trigger('tbwchange');
+ }, 0);
+ });
+
+ t.$box.on('keydown', function (e) {
+ if (e.which === 27 && $('.' + prefix + 'modal-box', t.$box).length === 1) {
+ t.closeModal();
+ return false;
+ }
+ });
+ },
+
+ //autogrow when entering logic
+ autogrowEditorOnEnter: function () {
+ var t = this;
+ t.$ed.removeClass('autogrow-on-enter');
+ var oldHeight = t.$ed[0].clientHeight;
+ t.$ed.height('auto');
+ var totalHeight = t.$ed[0].scrollHeight;
+ t.$ed.addClass('autogrow-on-enter');
+ if (oldHeight !== totalHeight) {
+ t.$ed.height(oldHeight);
+ setTimeout(function () {
+ t.$ed.css({height: totalHeight});
+ t.$c.trigger('tbwresize');
+ }, 0);
+ }
+ },
+
+
+ // Build button pane, use o.btns option
+ buildBtnPane: function () {
+ var t = this,
+ prefix = t.o.prefix;
+
+ var $btnPane = t.$btnPane = $('', {
+ class: prefix + 'button-pane'
+ });
+
+ $.each(t.o.btns, function (i, btnGrp) {
+ if (!$.isArray(btnGrp)) {
+ btnGrp = [btnGrp];
+ }
+
+ var $btnGroup = $('', {
+ class: prefix + 'button-group ' + ((btnGrp.indexOf('fullscreen') >= 0) ? prefix + 'right' : '')
+ });
+ $.each(btnGrp, function (i, btn) {
+ try { // Prevent buildBtn error
+ if (t.isSupportedBtn(btn)) { // It's a supported button
+ $btnGroup.append(t.buildBtn(btn));
+ }
+ } catch (c) {
+ }
+ });
+
+ if ($btnGroup.html().trim().length > 0) {
+ $btnPane.append($btnGroup);
+ }
+ });
+
+ t.$box.prepend($btnPane);
+ },
+
+
+ // Build a button and his action
+ buildBtn: function (btnName) { // btnName is name of the button
+ var t = this,
+ prefix = t.o.prefix,
+ btn = t.btnsDef[btnName],
+ isDropdown = btn.dropdown,
+ hasIcon = btn.hasIcon != null ? btn.hasIcon : true,
+ textDef = t.lang[btnName] || btnName,
+
+ $btn = $('', {
+ type: 'button',
+ class: prefix + btnName + '-button ' + (btn.class || '') + (!hasIcon ? ' ' + prefix + 'textual-button' : ''),
+ html: t.hasSvg && hasIcon ?
+ '' :
+ t.hideButtonTexts ? '' : (btn.text || btn.title || t.lang[btnName] || btnName),
+ title: (btn.title || btn.text || textDef) + ((btn.key) ? ' (Ctrl + ' + btn.key + ')' : ''),
+ tabindex: -1,
+ mousedown: function () {
+ if (!isDropdown || $('.' + btnName + '-' + prefix + 'dropdown', t.$box).is(':hidden')) {
+ $('body', t.doc).trigger('mousedown');
+ }
+
+ if ((t.$btnPane.hasClass(prefix + 'disable') || t.$box.hasClass(prefix + 'disabled')) &&
+ !$(this).hasClass(prefix + 'active') &&
+ !$(this).hasClass(prefix + 'not-disable')) {
+ return false;
+ }
+
+ t.execCmd((isDropdown ? 'dropdown' : false) || btn.fn || btnName, btn.param || btnName, btn.forceCss);
+
+ return false;
+ }
+ });
+
+ if (isDropdown) {
+ $btn.addClass(prefix + 'open-dropdown');
+ var dropdownPrefix = prefix + 'dropdown',
+ dropdownOptions = { // the dropdown
+ class: dropdownPrefix + '-' + btnName + ' ' + dropdownPrefix + ' ' + prefix + 'fixed-top'
+ };
+ dropdownOptions['data-' + dropdownPrefix] = btnName;
+ var $dropdown = $('', dropdownOptions);
+ $.each(isDropdown, function (i, def) {
+ if (t.btnsDef[def] && t.isSupportedBtn(def)) {
+ $dropdown.append(t.buildSubBtn(def));
+ }
+ });
+ t.$box.append($dropdown.hide());
+ } else if (btn.key) {
+ t.keys[btn.key] = {
+ fn: btn.fn || btnName,
+ param: btn.param || btnName
+ };
+ }
+
+ if (!isDropdown) {
+ t.tagToButton[(btn.tag || btnName).toLowerCase()] = btnName;
+ }
+
+ return $btn;
+ },
+ // Build a button for dropdown menu
+ // @param n : name of the subbutton
+ buildSubBtn: function (btnName) {
+ var t = this,
+ prefix = t.o.prefix,
+ btn = t.btnsDef[btnName],
+ hasIcon = btn.hasIcon != null ? btn.hasIcon : true;
+
+ if (btn.key) {
+ t.keys[btn.key] = {
+ fn: btn.fn || btnName,
+ param: btn.param || btnName
+ };
+ }
+
+ t.tagToButton[(btn.tag || btnName).toLowerCase()] = btnName;
+
+ return $('', {
+ type: 'button',
+ class: prefix + btnName + '-dropdown-button' + (btn.ico ? ' ' + prefix + btn.ico + '-button' : ''),
+ html: t.hasSvg && hasIcon ? '' + (btn.text || btn.title || t.lang[btnName] || btnName) : (btn.text || btn.title || t.lang[btnName] || btnName),
+ title: ((btn.key) ? ' (Ctrl + ' + btn.key + ')' : null),
+ style: btn.style || null,
+ mousedown: function () {
+ $('body', t.doc).trigger('mousedown');
+
+ t.execCmd(btn.fn || btnName, btn.param || btnName, btn.forceCss);
+
+ return false;
+ }
+ });
+ },
+ // Check if button is supported
+ isSupportedBtn: function (b) {
+ try {
+ return this.btnsDef[b].isSupported();
+ } catch (c) {
+ }
+ return true;
+ },
+
+ // Build overlay for modal box
+ buildOverlay: function () {
+ var t = this;
+ t.$overlay = $('', {
+ class: t.o.prefix + 'overlay'
+ }).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.' + t.eventNamespace + ' resize.' + t.eventNamespace, function () {
+ if (!$box) {
+ return;
+ }
+
+ t.syncCode();
+
+ var scrollTop = $(window).scrollTop(),
+ offset = $box.offset().top + 1,
+ bp = t.$btnPane,
+ oh = bp.outerHeight() - 2;
+
+ 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
+ });
+ }
+ });
+ },
+
+ // Disable editor
+ setDisabled: function (disable) {
+ var t = this,
+ prefix = t.o.prefix;
+
+ t.disabled = disable;
+
+ if (disable) {
+ t.$ta.attr('disabled', true);
+ } else {
+ t.$ta.removeAttr('disabled');
+ }
+ t.$box.toggleClass(prefix + 'disabled', disable);
+ t.$ed.attr('contenteditable', !disable);
+ },
+
+ // Destroy the editor
+ destroy: function () {
+ var t = this,
+ prefix = t.o.prefix;
+
+ if (t.isTextarea) {
+ t.$box.after(
+ t.$ta
+ .css({height: ''})
+ .val(t.html())
+ .removeClass(prefix + 'textarea')
+ .show()
+ );
+ } else {
+ t.$box.after(
+ t.$ed
+ .css({height: ''})
+ .removeClass(prefix + 'editor')
+ .removeAttr('contenteditable')
+ .removeAttr('dir')
+ .html(t.html())
+ .show()
+ );
+ }
+
+ t.$ed.off('dblclick', 'img');
+
+ t.destroyPlugins();
+
+ t.$box.remove();
+ t.$c.removeData('trumbowyg');
+ $('body').removeClass(prefix + 'body-fullscreen');
+ t.$c.trigger('tbwclose');
+ $(window).off('scroll.' + t.eventNamespace + ' resize.' + t.eventNamespace);
+ },
+
+
+ // 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;
+
+ if (t.o.autogrowOnEnter) {
+ t.autogrowOnEnterDontClose = !t.$box.hasClass(prefix + 'editor-hidden');
+ }
+
+ t.semanticCode(false, true);
+
+ setTimeout(function () {
+ t.doc.activeElement.blur();
+ 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');
+ }
+
+ if (t.o.autogrowOnEnter && !t.autogrowOnEnterDontClose) {
+ t.autogrowEditorOnEnter();
+ }
+ }, 0);
+ },
+
+ // Open dropdown when click on a button which open that
+ dropdown: function (name) {
+ var t = this,
+ d = t.doc,
+ prefix = t.o.prefix,
+ $dropdown = $('[data-' + prefix + 'dropdown=' + name + ']', t.$box),
+ $btn = $('.' + prefix + name + '-button', t.$btnPane),
+ show = $dropdown.is(':hidden');
+
+ $('body', d).trigger('mousedown');
+
+ if (show) {
+ var o = $btn.offset().left;
+ $btn.addClass(prefix + 'active');
+
+ $dropdown.css({
+ position: 'absolute',
+ top: $btn.offset().top - t.$btnPane.offset().top + $btn.outerHeight(),
+ left: (t.o.fixedFullWidth && t.isFixed) ? o + 'px' : (o - t.$btnPane.offset().left) + 'px'
+ }).show();
+
+ $(window).trigger('scroll');
+
+ $('body', d).on('mousedown.' + t.eventNamespace, function (e) {
+ if (!$dropdown.is(e.target)) {
+ $('.' + prefix + 'dropdown', t.$box).hide();
+ $('.' + prefix + 'active', t.$btnPane).removeClass(prefix + 'active');
+ $('body', d).off('mousedown.' + t.eventNamespace);
+ }
+ });
+ }
+ },
+
+
+ // HTML Code management
+ html: function (html) {
+ var t = this;
+
+ if (html != null) {
+ t.$ta.val(html);
+ t.syncCode(true);
+ t.$c.trigger('tbwchange');
+ return t;
+ }
+
+ return t.$ta.val();
+ },
+ syncTextarea: function () {
+ var t = this;
+ t.$ta.val(t.$ed.text().trim().length > 0 || t.$ed.find(t.o.tagsToKeep.join(',')).length > 0 ? t.$ed.html() : '');
+ },
+ syncCode: function (force) {
+ var t = this;
+ if (!force && t.$ed.is(':visible')) {
+ t.syncTextarea();
+ } else {
+ // wrap the content in a div it's easier to get the innerhtml
+ var html = $('').html(t.$ta.val());
+ //scrub the html before loading into the doc
+ var safe = $('').append(html);
+ $(t.o.tagsToRemove.join(','), safe).remove();
+ t.$ed.html(safe.contents().html());
+ }
+
+ 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');
+ }
+ }
+ if (t.o.autogrowOnEnter) {
+ // t.autogrowEditorOnEnter();
+ t.$ed.height('auto');
+ var totalheight = t.autogrowOnEnterWasFocused ? t.$ed[0].scrollHeight : t.$ed.css('min-height');
+ if (totalheight !== t.$ta.css('height')) {
+ t.$ed.css({height: totalheight});
+ t.$c.trigger('tbwresize');
+ }
+ }
+ },
+
+ // Analyse and update to semantic code
+ // @param force : force to sync code from textarea
+ // @param full : wrap text nodes in
+ // @param keepRange : leave selection range as it is
+ semanticCode: function (force, full, keepRange) {
+ var t = this;
+ t.saveRange();
+ t.syncCode(force);
+
+ if (t.o.semantic) {
+ t.semanticTag('b');
+ t.semanticTag('i');
+ t.semanticTag('s');
+ t.semanticTag('strike');
+
+ if (full) {
+ var inlineElementsSelector = t.o.inlineElementsSelector,
+ blockElementsSelector = ':not(' + inlineElementsSelector + ')';
+
+ // Wrap text nodes in span for easier processing
+ t.$ed.contents().filter(function () {
+ return this.nodeType === 3 && this.nodeValue.trim().length > 0;
+ }).wrap('');
+
+ // Wrap groups of inline elements in paragraphs (recursive)
+ var wrapInlinesInParagraphsFrom = function ($from) {
+ if ($from.length !== 0) {
+ var $finalParagraph = $from.nextUntil(blockElementsSelector).addBack().wrapAll('
').parent(),
+ $nextElement = $finalParagraph.nextAll(inlineElementsSelector).first();
+ $finalParagraph.next('br').remove();
+ wrapInlinesInParagraphsFrom($nextElement);
+ }
+ };
+ wrapInlinesInParagraphsFrom(t.$ed.children(inlineElementsSelector).first());
+
+ t.semanticTag('div', true);
+
+ // Unwrap paragraphs content, containing nothing usefull
+ t.$ed.find('p').filter(function () {
+ // Don't remove currently being edited element
+ if (t.range && this === t.range.startContainer) {
+ return false;
+ }
+ return $(this).text().trim().length === 0 && $(this).children().not('br,span').length === 0;
+ }).contents().unwrap();
+
+ // Get rid of temporary span's
+ $('[data-tbw]', t.$ed).contents().unwrap();
+
+ // Remove empty
+ t.$ed.find('p:empty').remove();
+ }
+
+ if (!keepRange) {
+ t.restoreRange();
+ }
+
+ t.syncTextarea();
+ }
+ },
+
+ semanticTag: function (oldTag, copyAttributes) {
+ var newTag;
+
+ if (this.o.semantic != null && typeof this.o.semantic === 'object' && this.o.semantic.hasOwnProperty(oldTag)) {
+ newTag = this.o.semantic[oldTag];
+ } else if (this.o.semantic === true && this.DEFAULT_SEMANTIC_MAP.hasOwnProperty(oldTag)) {
+ newTag = this.DEFAULT_SEMANTIC_MAP[oldTag];
+ } else {
+ return;
+ }
+
+ $(oldTag, this.$ed).each(function () {
+ var $oldTag = $(this);
+ if($oldTag.contents().length === 0) {
+ return false;
+ }
+
+ $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,
+ documentSelection = t.doc.getSelection(),
+ node = documentSelection.focusNode,
+ text = new XMLSerializer().serializeToString(documentSelection.getRangeAt(0).cloneContents()),
+ url,
+ title,
+ target;
+
+ while (['A', 'DIV'].indexOf(node.nodeName) < 0) {
+ node = node.parentNode;
+ }
+
+ if (node && node.nodeName === 'A') {
+ var $a = $(node);
+ text = $a.text();
+ url = $a.attr('href');
+ if (!t.o.minimalLinks) {
+ title = $a.attr('title');
+ target = $a.attr('target');
+ }
+ var range = t.doc.createRange();
+ range.selectNode(node);
+ documentSelection.removeAllRanges();
+ documentSelection.addRange(range);
+ }
+
+ t.saveRange();
+
+ var options = {
+ url: {
+ label: 'URL',
+ required: true,
+ value: url
+ },
+ text: {
+ label: t.lang.text,
+ value: text
+ }
+ };
+ if (!t.o.minimalLinks) {
+ Object.assign(options, {
+ title: {
+ label: t.lang.title,
+ value: title
+ },
+ target: {
+ label: t.lang.target,
+ value: target
+ }
+ });
+ }
+
+ t.openModalInsert(t.lang.createLink, options, function (v) { // v is value
+ var url = t.prependUrlPrefix(v.url);
+ if (!url.length) {
+ return false;
+ }
+
+ var link = $(['', v.text || v.url, ''].join(''));
+
+ if (!t.o.minimalLinks) {
+ if (v.title.length > 0) {
+ link.attr('title', v.title);
+ }
+ if (v.target.length > 0) {
+ link.attr('target', v.target);
+ }
+ }
+ t.range.deleteContents();
+ t.range.insertNode(link[0]);
+ t.syncCode();
+ t.$c.trigger('tbwchange');
+ return true;
+ });
+ },
+ prependUrlPrefix: function (url) {
+ var t = this;
+ if (!t.urlPrefix) {
+ return url;
+ }
+
+ var VALID_LINK_PREFIX = /^([a-z][-+.a-z0-9]*:|\/|#)/i;
+ if (VALID_LINK_PREFIX.test(url)) {
+ return url;
+ }
+
+ var SIMPLE_EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
+ if (SIMPLE_EMAIL_REGEX.test(url)) {
+ return 'mailto:' + url;
+ }
+
+ return t.urlPrefix + url;
+ },
+ unlink: function () {
+ var t = this,
+ documentSelection = t.doc.getSelection(),
+ node = documentSelection.focusNode;
+
+ if (documentSelection.isCollapsed) {
+ while (['A', 'DIV'].indexOf(node.nodeName) < 0) {
+ node = node.parentNode;
+ }
+
+ if (node && node.nodeName === 'A') {
+ var range = t.doc.createRange();
+ range.selectNode(node);
+ documentSelection.removeAllRanges();
+ documentSelection.addRange(range);
+ }
+ }
+ t.execCmd('unlink', undefined, undefined, true);
+ },
+ insertImage: function () {
+ var t = this;
+ t.saveRange();
+
+ var options = {
+ url: {
+ label: 'URL',
+ required: true
+ },
+ alt: {
+ label: t.lang.description,
+ value: t.getRangeText()
+ }
+ };
+
+ if (t.o.imageWidthModalEdit) {
+ options.width = {};
+ }
+
+ t.openModalInsert(t.lang.insertImage, options, function (v) { // v are values
+ t.execCmd('insertImage', v.url, false, true);
+ var $img = $('img[src="' + v.url + '"]:not([alt])', t.$box);
+ $img.attr('alt', v.alt);
+
+ if (t.o.imageWidthModalEdit) {
+ $img.attr({
+ width: v.width
+ });
+ }
+
+ t.syncCode();
+ t.$c.trigger('tbwchange');
+
+ return true;
+ });
+ },
+ fullscreen: function () {
+ var t = this,
+ prefix = t.o.prefix,
+ fullscreenCssClass = prefix + 'fullscreen',
+ isFullscreen;
+
+ t.$box.toggleClass(fullscreenCssClass);
+ isFullscreen = t.$box.hasClass(fullscreenCssClass);
+ $('body').toggleClass(prefix + 'body-fullscreen', isFullscreen);
+ $(window).trigger('scroll');
+ t.$c.trigger('tbw' + (isFullscreen ? 'open' : 'close') + 'fullscreen');
+ },
+
+
+ /*
+ * Call method of trumbowyg if exist
+ * else try to call anonymous function
+ * and finaly native execCommand
+ */
+ execCmd: function (cmd, param, forceCss, skipTrumbowyg) {
+ var t = this;
+ skipTrumbowyg = !!skipTrumbowyg || '';
+
+ if (cmd !== 'dropdown') {
+ t.$ed.focus();
+ }
+
+ try {
+ t.doc.execCommand('styleWithCSS', false, forceCss || false);
+ } catch (c) {
+ }
+
+ try {
+ t[cmd + skipTrumbowyg](param);
+ } catch (c) {
+ try {
+ cmd(param);
+ } catch (e2) {
+ if (cmd === 'insertHorizontalRule') {
+ param = undefined;
+ } else if (cmd === 'formatBlock' && t.isIE) {
+ param = '<' + param + '>';
+ }
+
+ t.doc.execCommand(cmd, false, param);
+
+ t.syncCode();
+ t.semanticCode(false, true);
+ }
+
+ if (cmd !== 'dropdown') {
+ t.updateButtonPaneStatus();
+ t.$c.trigger('tbwchange');
+ }
+ }
+ },
+
+
+ // 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;
+ }
+ if (t.o.autogrowOnEnter) {
+ t.autogrowOnEnterDontClose = true;
+ }
+
+ t.saveRange();
+ 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.$box.offset().top + t.$btnPane.height(),
+ zIndex: 99999
+ }).appendTo($(t.doc.body));
+
+ // Click on overlay close modal by cancelling them
+ t.$overlay.one('click', function () {
+ $modal.trigger(CANCEL_EVENT);
+ return false;
+ });
+
+ // Build the form
+ var $form = $('', {
+ action: '',
+ html: content
+ })
+ .on('submit', function () {
+ $modal.trigger(CONFIRM_EVENT);
+ return false;
+ })
+ .on('reset', function () {
+ $modal.trigger(CANCEL_EVENT);
+ return false;
+ })
+ .on('submit reset', function () {
+ if (t.o.autogrowOnEnter) {
+ t.autogrowOnEnterDontClose = 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 $modalBox = $('.' + prefix + 'modal-box', $(document.body));
+
+ $modalBox.animate({
+ top: '-' + $modalBox.height()
+ }, 100, function () {
+ $modalBox.parent().remove();
+ t.hideOverlay();
+ });
+
+ t.restoreRange();
+ },
+ // Preformated build and management modal
+ openModalInsert: function (title, fields, cmd) {
+ var t = this,
+ prefix = t.o.prefix,
+ lg = t.lang,
+ html = '';
+
+ $.each(fields, function (fieldName, field) {
+ var l = field.label || fieldName,
+ n = field.name || fieldName,
+ a = field.attributes || {};
+
+ var attr = Object.keys(a).map(function (prop) {
+ return prop + '="' + a[prop] + '"';
+ }).join(' ');
+
+ html += '';
+ });
+
+ return t.openModal(title, html)
+ .on(CONFIRM_EVENT, function () {
+ var $form = $('form', $(this)),
+ valid = true,
+ values = {};
+
+ $.each(fields, function (fieldName, field) {
+ var n = field.name || fieldName;
+
+ var $field = $('input[name="' + n + '"]', $form),
+ inputType = $field.attr('type');
+
+ switch (inputType.toLowerCase()) {
+ case 'checkbox':
+ values[n] = $field.is(':checked');
+ break;
+ case 'radio':
+ values[n] = $field.filter(':checked').val();
+ break;
+ default:
+ values[n] = $.trim($field.val());
+ break;
+ }
+ // Validate value
+ if (field.required && values[n] === '') {
+ valid = false;
+ t.addErrorOnModalField($field, t.lang.required);
+ } else if (field.pattern && !field.pattern.test(values[n])) {
+ valid = false;
+ t.addErrorOnModalField($field, field.patternError);
+ }
+ });
+
+ if (valid) {
+ t.restoreRange();
+
+ if (cmd(values, fields)) {
+ t.syncCode();
+ t.$c.trigger('tbwchange');
+ t.closeModal();
+ $(this).off(CONFIRM_EVENT);
+ }
+ }
+ })
+ .one(CANCEL_EVENT, function () {
+ $(this).off(CONFIRM_EVENT);
+ 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
+ })
+ );
+ },
+
+ getDefaultImgDblClickHandler: function () {
+ var t = this;
+
+ return function () {
+ var $img = $(this),
+ src = $img.attr('src'),
+ base64 = '(Base64)';
+
+ if (src.indexOf('data:image') === 0) {
+ src = base64;
+ }
+
+ var options = {
+ url: {
+ label: 'URL',
+ value: src,
+ required: true
+ },
+ alt: {
+ label: t.lang.description,
+ value: $img.attr('alt')
+ }
+ };
+
+ if (t.o.imageWidthModalEdit) {
+ options.width = {
+ value: $img.attr('width') ? $img.attr('width') : ''
+ };
+ }
+
+ t.openModalInsert(t.lang.insertImage, options, function (v) {
+ if (v.url !== base64) {
+ $img.attr({
+ src: v.url
+ });
+ }
+ $img.attr({
+ alt: v.alt
+ });
+
+ if (t.o.imageWidthModalEdit) {
+ if (parseInt(v.width) > 0) {
+ $img.attr({
+ width: v.width
+ });
+ } else {
+ $img.removeAttr('width');
+ }
+ }
+
+ return true;
+ });
+ return false;
+ };
+ },
+
+ // Range management
+ saveRange: function () {
+ var t = this,
+ documentSelection = t.doc.getSelection();
+
+ t.range = null;
+
+ if (!documentSelection || !documentSelection.rangeCount) {
+ return;
+ }
+
+ var savedRange = t.range = documentSelection.getRangeAt(0),
+ range = t.doc.createRange(),
+ rangeStart;
+ range.selectNodeContents(t.$ed[0]);
+ range.setEnd(savedRange.startContainer, savedRange.startOffset);
+ rangeStart = (range + '').length;
+ t.metaRange = {
+ start: rangeStart,
+ end: rangeStart + (savedRange + '').length
+ };
+ },
+ restoreRange: function () {
+ var t = this,
+ metaRange = t.metaRange,
+ savedRange = t.range,
+ documentSelection = t.doc.getSelection(),
+ range;
+
+ if (!savedRange) {
+ return;
+ }
+
+ if (metaRange && metaRange.start !== metaRange.end) { // Algorithm from http://jsfiddle.net/WeWy7/3/
+ var charIndex = 0,
+ nodeStack = [t.$ed[0]],
+ node,
+ foundStart = false,
+ stop = false;
+
+ range = t.doc.createRange();
+
+ while (!stop && (node = nodeStack.pop())) {
+ if (node.nodeType === 3) {
+ var nextCharIndex = charIndex + node.length;
+ if (!foundStart && metaRange.start >= charIndex && metaRange.start <= nextCharIndex) {
+ range.setStart(node, metaRange.start - charIndex);
+ foundStart = true;
+ }
+ if (foundStart && metaRange.end >= charIndex && metaRange.end <= nextCharIndex) {
+ range.setEnd(node, metaRange.end - charIndex);
+ stop = true;
+ }
+ charIndex = nextCharIndex;
+ } else {
+ var cn = node.childNodes,
+ i = cn.length;
+
+ while (i > 0) {
+ i -= 1;
+ nodeStack.push(cn[i]);
+ }
+ }
+ }
+ }
+
+ documentSelection.removeAllRanges();
+ documentSelection.addRange(range || savedRange);
+ },
+ getRangeText: function () {
+ return this.range + '';
+ },
+
+ updateButtonPaneStatus: function () {
+ var t = this,
+ prefix = t.o.prefix,
+ tags = t.getTagsRecursive(t.doc.getSelection().focusNode),
+ activeClasses = prefix + 'active-button ' + prefix + 'active';
+
+ $('.' + prefix + 'active-button', t.$btnPane).removeClass(activeClasses);
+ $.each(tags, function (i, tag) {
+ var btnName = t.tagToButton[tag.toLowerCase()],
+ $btn = $('.' + prefix + btnName + '-button', t.$btnPane);
+
+ if ($btn.length > 0) {
+ $btn.addClass(activeClasses);
+ } else {
+ try {
+ $btn = $('.' + prefix + 'dropdown .' + prefix + btnName + '-dropdown-button', t.$box);
+ var dropdownBtnName = $btn.parent().data('dropdown');
+ $('.' + prefix + dropdownBtnName + '-button', t.$box).addClass(activeClasses);
+ } catch (e) {
+ }
+ }
+ });
+ },
+ getTagsRecursive: function (element, tags) {
+ var t = this;
+ tags = tags || (element && element.tagName ? [element.tagName] : []);
+
+ if (element && element.parentNode) {
+ element = element.parentNode;
+ } else {
+ return tags;
+ }
+
+ var tag = element.tagName;
+ if (tag === 'DIV') {
+ return tags;
+ }
+ if (tag === 'P' && element.style.textAlign !== '') {
+ tags.push(element.style.textAlign);
+ }
+
+ $.each(t.tagHandlers, function (i, tagHandler) {
+ tags = tags.concat(tagHandler(element, t));
+ });
+
+ tags.push(tag);
+
+ return t.getTagsRecursive(element, tags).filter(function (tag) {
+ return tag != null;
+ });
+ },
+
+ // Plugins
+ initPlugins: function () {
+ var t = this;
+ t.loadedPlugins = [];
+ $.each($.trumbowyg.plugins, function (name, plugin) {
+ if (!plugin.shouldInit || plugin.shouldInit(t)) {
+ plugin.init(t);
+ if (plugin.tagHandler) {
+ t.tagHandlers.push(plugin.tagHandler);
+ }
+ t.loadedPlugins.push(plugin);
+ }
+ });
+ },
+ destroyPlugins: function () {
+ $.each(this.loadedPlugins, function (i, plugin) {
+ if (plugin.destroy) {
+ plugin.destroy();
+ }
+ });
+ }
+ };
+})(navigator, window, document, jQuery);
diff --git a/src/assets/scripts/trumbowyg/trumbowyg.min.js b/src/assets/scripts/trumbowyg/trumbowyg.min.js
new file mode 100755
index 0000000..9669b31
--- /dev/null
+++ b/src/assets/scripts/trumbowyg/trumbowyg.min.js
@@ -0,0 +1,2 @@
+/** Trumbowyg v2.14.0 - 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",undo:"Undo",redo:"Redo",formatting:"Formatting",p:"Paragraph",blockquote:"Quote",code:"Code",header:"Header",bold:"Bold",italic:"Italic",strikethrough:"Stroke",underline:"Underline",strong:"Strong",em:"Emphasis",del:"Deleted",superscript:"Superscript",subscript:"Subscript",unorderedList:"Unordered list",orderedList:"Ordered list",insertImage:"Insert Image",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",width:"Width"}},plugins:{},svgPath:null,hideButtonTexts:null},Object.defineProperty(jQuery.trumbowyg,"defaultOptions",{value:{lang:"en",fixedBtnPane:!1,fixedFullWidth:!1,autogrow:!1,autogrowOnEnter:!1,imageWidthModalEdit:!1,prefix:"trumbowyg-",semantic:!0,resetCss:!1,removeformatPasted:!1,tagsToRemove:[],tagsToKeep:["hr","img","embed","iframe","input"],btns:[["viewHTML"],["undo","redo"],["formatting"],["strong","em","del"],["superscript","subscript"],["link"],["insertImage"],["justifyLeft","justifyCenter","justifyRight","justifyFull"],["unorderedList","orderedList"],["horizontalRule"],["removeformat"],["fullscreen"]],btnsDef:{},inlineElementsSelector:"a,abbr,acronym,b,caption,cite,code,col,dfn,dir,dt,dd,em,font,hr,i,kbd,li,q,span,strikeout,strong,sub,sup,u",pasteHandlers:[],plugins:{},urlProtocol:!1,minimalLinks:!1},writable:!1,enumerable:!0,configurable:!1}),function(e,t,n,a){"use strict";var o="tbwconfirm",r="tbwcancel";a.fn.trumbowyg=function(e,t){var n="trumbowyg";if(e===Object(e)||!e)return this.each(function(){a(this).data(n)||a(this).data(n,new i(this,e))});if(1===this.length)try{var o=a(this).data(n);switch(e){case"execCmd":return o.execCmd(t.cmd,t.param,t.forceCss);case"openModal":return o.openModal(t.title,t.content);case"closeModal":return o.closeModal();case"openModalInsert":return o.openModalInsert(t.title,t.fields,t.callback);case"saveRange":return o.saveRange();case"getRange":return o.range;case"getRangeText":return o.getRangeText();case"restoreRange":return o.restoreRange();case"enable":return o.setDisabled(!1);case"disable":return o.setDisabled(!0);case"toggle":return o.toggle();case"destroy":return o.destroy();case"empty":return o.empty();case"html":return o.html(t)}}catch(r){}return!1};var i=function(o,r){var i=this,s="trumbowyg-icons",l=a.trumbowyg;i.doc=o.ownerDocument||n,i.$ta=a(o),i.$c=a(o),r=r||{},null!=r.lang||null!=l.langs[r.lang]?i.lang=a.extend(!0,{},l.langs.en,l.langs[r.lang]):i.lang=l.langs.en,i.hideButtonTexts=null!=l.hideButtonTexts?l.hideButtonTexts:r.hideButtonTexts;var d=null!=l.svgPath?l.svgPath:r.svgPath;if(i.hasSvg=d!==!1,i.svgPath=i.doc.querySelector("base")?t.location.href.split("#")[0]:"",0===a("#"+s,i.doc).length&&d!==!1){if(null==d){for(var c=n.getElementsByTagName("script"),u=0;u",{"class":n+"box "+n+"editor-visible "+n+e.o.lang+" trumbowyg"}),e.isTextarea=e.$ta.is("textarea"),e.isTextarea?(o=e.$ta.val(),e.$ed=a(""),e.$box.insertAfter(e.$ta).append(e.$ed,e.$ta)):(e.$ed=e.$ta,o=e.$ed.html(),e.$ta=a("",{name:e.$ta.attr("id"),height:e.height}).val(o),e.$box.insertAfter(e.$ed).append(e.$ta,e.$ed),e.syncCode()),e.$ta.addClass(n+"textarea").attr("tabindex",-1),e.$ed.addClass(n+"editor").attr({contenteditable:!0,dir:e.lang._dir||"ltr"}).html(o),e.o.tabindex&&e.$ed.attr("tabindex",e.o.tabindex),e.$c.is("[placeholder]")&&e.$ed.attr("placeholder",e.$c.attr("placeholder")),e.$c.is("[spellcheck]")&&e.$ed.attr("spellcheck",e.$c.attr("spellcheck")),e.o.resetCss&&e.$ed.addClass(n+"reset-css"),e.o.autogrow||e.$ta.add(e.$ed).css({height:e.height}),e.semanticCode(),e.o.autogrowOnEnter&&e.$ed.addClass(n+"autogrow-on-enter");var r,i=!1,s=!1,l="keyup";e.$ed.on("dblclick","img",e.o.imgDblClickHandler).on("keydown",function(t){if((t.ctrlKey||t.metaKey)&&!t.altKey){i=!0;var n=e.keys[String.fromCharCode(t.which).toUpperCase()];try{return e.execCmd(n.fn,n.param),!1}catch(a){}}}).on("compositionstart compositionupdate",function(){s=!0}).on(l+" compositionend",function(t){if("compositionend"===t.type)s=!1;else if(s)return;var n=t.which;if(!(n>=37&&n<=40)){if(!t.ctrlKey&&!t.metaKey||89!==n&&90!==n)if(i||17===n)"undefined"==typeof t.which&&e.semanticCode(!1,!1,!0);else{var a=!e.isIE||"compositionend"===t.type;e.semanticCode(!1,a&&13===n),e.$c.trigger("tbwchange")}else e.semanticCode(!1,!0),e.$c.trigger("tbwchange");setTimeout(function(){i=!1},50)}}).on("mouseup keydown keyup",function(t){(!t.ctrlKey&&!t.metaKey||t.altKey)&&setTimeout(function(){i=!1},50),clearTimeout(r),r=setTimeout(function(){e.updateButtonPaneStatus()},50)}).on("focus blur",function(t){if(e.$c.trigger("tbw"+t.type),"blur"===t.type&&a("."+n+"active-button",e.$btnPane).removeClass(n+"active-button "+n+"active"),e.o.autogrowOnEnter){if(e.autogrowOnEnterDontClose)return;"focus"===t.type?(e.autogrowOnEnterWasFocused=!0,e.autogrowEditorOnEnter()):e.o.autogrow||(e.$ed.css({height:e.$ed.css("min-height")}),e.$c.trigger("tbwresize"))}}).on("cut drop",function(){setTimeout(function(){e.semanticCode(!1,!0),e.$c.trigger("tbwchange")},0)}).on("paste",function(n){if(e.o.removeformatPasted){n.preventDefault(),t.getSelection&&t.getSelection().deleteFromDocument&&t.getSelection().deleteFromDocument();try{var o=t.clipboardData.getData("Text");try{e.doc.selection.createRange().pasteHTML(o)}catch(r){e.doc.getSelection().getRangeAt(0).insertNode(e.doc.createTextNode(o))}e.$c.trigger("tbwchange",n)}catch(i){e.execCmd("insertText",(n.originalEvent||n).clipboardData.getData("text/plain"))}}a.each(e.pasteHandlers,function(e,t){t(n)}),setTimeout(function(){e.semanticCode(!1,!0),e.$c.trigger("tbwpaste",n),e.$c.trigger("tbwchange")},0)}),e.$ta.on("keyup",function(){e.$c.trigger("tbwchange")}).on("paste",function(){setTimeout(function(){e.$c.trigger("tbwchange")},0)}),e.$box.on("keydown",function(t){if(27===t.which&&1===a("."+n+"modal-box",e.$box).length)return e.closeModal(),!1})},autogrowEditorOnEnter:function(){var e=this;e.$ed.removeClass("autogrow-on-enter");var t=e.$ed[0].clientHeight;e.$ed.height("auto");var n=e.$ed[0].scrollHeight;e.$ed.addClass("autogrow-on-enter"),t!==n&&(e.$ed.height(t),setTimeout(function(){e.$ed.css({height:n}),e.$c.trigger("tbwresize")},0))},buildBtnPane:function(){var e=this,t=e.o.prefix,n=e.$btnPane=a("",{"class":t+"button-pane"});a.each(e.o.btns,function(o,r){a.isArray(r)||(r=[r]);var i=a("",{"class":t+"button-group "+(r.indexOf("fullscreen")>=0?t+"right":"")});a.each(r,function(t,n){try{e.isSupportedBtn(n)&&i.append(e.buildBtn(n))}catch(a){}}),i.html().trim().length>0&&n.append(i)}),e.$box.prepend(n)},buildBtn:function(e){var t=this,n=t.o.prefix,o=t.btnsDef[e],r=o.dropdown,i=null==o.hasIcon||o.hasIcon,s=t.lang[e]||e,l=a("",{type:"button","class":n+e+"-button "+(o["class"]||"")+(i?"":" "+n+"textual-button"),html:t.hasSvg&&i?'':t.hideButtonTexts?"":o.text||o.title||t.lang[e]||e,title:(o.title||o.text||s)+(o.key?" (Ctrl + "+o.key+")":""),tabindex:-1,mousedown:function(){return r&&!a("."+e+"-"+n+"dropdown",t.$box).is(":hidden")||a("body",t.doc).trigger("mousedown"),!((t.$btnPane.hasClass(n+"disable")||t.$box.hasClass(n+"disabled"))&&!a(this).hasClass(n+"active")&&!a(this).hasClass(n+"not-disable"))&&(t.execCmd(!!r&&"dropdown"||o.fn||e,o.param||e,o.forceCss),!1)}});if(r){l.addClass(n+"open-dropdown");var d=n+"dropdown",c={"class":d+"-"+e+" "+d+" "+n+"fixed-top"};c["data-"+d]=e;var u=a("",c);a.each(r,function(e,n){t.btnsDef[n]&&t.isSupportedBtn(n)&&u.append(t.buildSubBtn(n))}),t.$box.append(u.hide())}else o.key&&(t.keys[o.key]={fn:o.fn||e,param:o.param||e});return r||(t.tagToButton[(o.tag||e).toLowerCase()]=e),l},buildSubBtn:function(e){var t=this,n=t.o.prefix,o=t.btnsDef[e],r=null==o.hasIcon||o.hasIcon;return o.key&&(t.keys[o.key]={fn:o.fn||e,param:o.param||e}),t.tagToButton[(o.tag||e).toLowerCase()]=e,a("",{type:"button","class":n+e+"-dropdown-button"+(o.ico?" "+n+o.ico+"-button":""),html:t.hasSvg&&r?''+(o.text||o.title||t.lang[e]||e):o.text||o.title||t.lang[e]||e,title:o.key?" (Ctrl + "+o.key+")":null,style:o.style||null,mousedown:function(){return a("body",t.doc).trigger("mousedown"),t.execCmd(o.fn||e,o.param||e,o.forceCss),!1}})},isSupportedBtn:function(e){try{return this.btnsDef[e].isSupported()}catch(t){}return!0},buildOverlay:function(){var e=this;return e.$overlay=a("",{"class":e.o.prefix+"overlay"}).appendTo(e.$box),e.$overlay},showOverlay:function(){var e=this;a(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,o=e.$box;e.o.fixedBtnPane&&(e.isFixed=!1,a(t).on("scroll."+e.eventNamespace+" resize."+e.eventNamespace,function(){if(o){e.syncCode();var r=a(t).scrollTop(),i=o.offset().top+1,s=e.$btnPane,l=s.outerHeight()-2;r-i>0&&r-i-e.height<0?(e.isFixed||(e.isFixed=!0,s.css({position:"fixed",top:0,left:n?"0":"auto",zIndex:7}),a([e.$ta,e.$ed]).css({marginTop:s.height()})),s.css({width:n?"100%":o.width()-1+"px"}),a("."+e.o.prefix+"fixed-top",o).css({position:n?"fixed":"absolute",top:n?l:l+(r-i)+"px",zIndex:15})):e.isFixed&&(e.isFixed=!1,s.removeAttr("style"),a([e.$ta,e.$ed]).css({marginTop:0}),a("."+e.o.prefix+"fixed-top",o).css({position:"absolute",top:l}))}}))},setDisabled:function(e){var t=this,n=t.o.prefix;t.disabled=e,e?t.$ta.attr("disabled",!0):t.$ta.removeAttr("disabled"),t.$box.toggleClass(n+"disabled",e),t.$ed.attr("contenteditable",!e)},destroy:function(){var e=this,n=e.o.prefix;e.isTextarea?e.$box.after(e.$ta.css({height:""}).val(e.html()).removeClass(n+"textarea").show()):e.$box.after(e.$ed.css({height:""}).removeClass(n+"editor").removeAttr("contenteditable").removeAttr("dir").html(e.html()).show()),e.$ed.off("dblclick","img"),e.destroyPlugins(),e.$box.remove(),e.$c.removeData("trumbowyg"),a("body").removeClass(n+"body-fullscreen"),e.$c.trigger("tbwclose"),a(t).off("scroll."+e.eventNamespace+" resize."+e.eventNamespace)},empty:function(){this.$ta.val(""),this.syncCode(!0)},toggle:function(){var e=this,t=e.o.prefix;e.o.autogrowOnEnter&&(e.autogrowOnEnterDontClose=!e.$box.hasClass(t+"editor-hidden")),e.semanticCode(!1,!0),setTimeout(function(){e.doc.activeElement.blur(),e.$box.toggleClass(t+"editor-hidden "+t+"editor-visible"),e.$btnPane.toggleClass(t+"disable"),a("."+t+"viewHTML-button",e.$btnPane).toggleClass(t+"active"),e.$box.hasClass(t+"editor-visible")?e.$ta.attr("tabindex",-1):e.$ta.removeAttr("tabindex"),e.o.autogrowOnEnter&&!e.autogrowOnEnterDontClose&&e.autogrowEditorOnEnter()},0)},dropdown:function(e){var n=this,o=n.doc,r=n.o.prefix,i=a("[data-"+r+"dropdown="+e+"]",n.$box),s=a("."+r+e+"-button",n.$btnPane),l=i.is(":hidden");if(a("body",o).trigger("mousedown"),l){var d=s.offset().left;s.addClass(r+"active"),i.css({position:"absolute",top:s.offset().top-n.$btnPane.offset().top+s.outerHeight(),left:n.o.fixedFullWidth&&n.isFixed?d+"px":d-n.$btnPane.offset().left+"px"}).show(),a(t).trigger("scroll"),a("body",o).on("mousedown."+n.eventNamespace,function(e){i.is(e.target)||(a("."+r+"dropdown",n.$box).hide(),a("."+r+"active",n.$btnPane).removeClass(r+"active"),a("body",o).off("mousedown."+n.eventNamespace))})}},html:function(e){var t=this;return null!=e?(t.$ta.val(e),t.syncCode(!0),t.$c.trigger("tbwchange"),t):t.$ta.val()},syncTextarea:function(){var e=this;e.$ta.val(e.$ed.text().trim().length>0||e.$ed.find(e.o.tagsToKeep.join(",")).length>0?e.$ed.html():"")},syncCode:function(e){var t=this;if(!e&&t.$ed.is(":visible"))t.syncTextarea();else{var n=a("").html(t.$ta.val()),o=a("").append(n);a(t.o.tagsToRemove.join(","),o).remove(),t.$ed.html(o.contents().html())}if(t.o.autogrow&&(t.height=t.$ed.height(),t.height!==t.$ta.css("height")&&(t.$ta.css({height:t.height}),t.$c.trigger("tbwresize"))),t.o.autogrowOnEnter){t.$ed.height("auto");var r=t.autogrowOnEnterWasFocused?t.$ed[0].scrollHeight:t.$ed.css("min-height");r!==t.$ta.css("height")&&(t.$ed.css({height:r}),t.$c.trigger("tbwresize"))}},semanticCode:function(e,t,n){var o=this;if(o.saveRange(),o.syncCode(e),o.o.semantic){if(o.semanticTag("b"),o.semanticTag("i"),o.semanticTag("s"),o.semanticTag("strike"),t){var r=o.o.inlineElementsSelector,i=":not("+r+")";o.$ed.contents().filter(function(){return 3===this.nodeType&&this.nodeValue.trim().length>0}).wrap("");var s=function(e){if(0!==e.length){var t=e.nextUntil(i).addBack().wrapAll("").parent(),n=t.nextAll(r).first();t.next("br").remove(),s(n)}};s(o.$ed.children(r).first()),o.semanticTag("div",!0),o.$ed.find("p").filter(function(){return(!o.range||this!==o.range.startContainer)&&(0===a(this).text().trim().length&&0===a(this).children().not("br,span").length)}).contents().unwrap(),a("[data-tbw]",o.$ed).contents().unwrap(),o.$ed.find("p:empty").remove()}n||o.restoreRange(),o.syncTextarea()}},semanticTag:function(e,t){var n;if(null!=this.o.semantic&&"object"==typeof this.o.semantic&&this.o.semantic.hasOwnProperty(e))n=this.o.semantic[e];else{if(this.o.semantic!==!0||!this.DEFAULT_SEMANTIC_MAP.hasOwnProperty(e))return;n=this.DEFAULT_SEMANTIC_MAP[e]}a(e,this.$ed).each(function(){var e=a(this);return 0!==e.contents().length&&(e.wrap("<"+n+"/>"),t&&a.each(e.prop("attributes"),function(){e.parent().attr(this.name,this.value)}),void e.contents().unwrap())})},createLink:function(){for(var e,t,n,o=this,r=o.doc.getSelection(),i=r.focusNode,s=(new XMLSerializer).serializeToString(r.getRangeAt(0).cloneContents());["A","DIV"].indexOf(i.nodeName)<0;)i=i.parentNode;if(i&&"A"===i.nodeName){var l=a(i);s=l.text(),e=l.attr("href"),o.o.minimalLinks||(t=l.attr("title"),n=l.attr("target"));var d=o.doc.createRange();d.selectNode(i),r.removeAllRanges(),r.addRange(d)}o.saveRange();var c={url:{label:"URL",required:!0,value:e},text:{label:o.lang.text,value:s}};o.o.minimalLinks||Object.assign(c,{title:{label:o.lang.title,value:t},target:{label:o.lang.target,value:n}}),o.openModalInsert(o.lang.createLink,c,function(e){var t=o.prependUrlPrefix(e.url);if(!t.length)return!1;var n=a(['',e.text||e.url,""].join(""));return o.o.minimalLinks||(e.title.length>0&&n.attr("title",e.title),e.target.length>0&&n.attr("target",e.target)),o.range.deleteContents(),o.range.insertNode(n[0]),o.syncCode(),o.$c.trigger("tbwchange"),!0})},prependUrlPrefix:function(e){var t=this;if(!t.urlPrefix)return e;var n=/^([a-z][-+.a-z0-9]*:|\/|#)/i;if(n.test(e))return e;var a=/^[^\s@]+@[^\s@]+\.[^\s@]+$/;return a.test(e)?"mailto:"+e:t.urlPrefix+e},unlink:function(){var e=this,t=e.doc.getSelection(),n=t.focusNode;if(t.isCollapsed){for(;["A","DIV"].indexOf(n.nodeName)<0;)n=n.parentNode;if(n&&"A"===n.nodeName){var a=e.doc.createRange();a.selectNode(n),t.removeAllRanges(),t.addRange(a)}}e.execCmd("unlink",void 0,void 0,!0)},insertImage:function(){var e=this;e.saveRange();var t={url:{label:"URL",required:!0},alt:{label:e.lang.description,value:e.getRangeText()}};e.o.imageWidthModalEdit&&(t.width={}),e.openModalInsert(e.lang.insertImage,t,function(t){e.execCmd("insertImage",t.url,!1,!0);var n=a('img[src="'+t.url+'"]:not([alt])',e.$box);return n.attr("alt",t.alt),e.o.imageWidthModalEdit&&n.attr({width:t.width}),e.syncCode(),e.$c.trigger("tbwchange"),!0})},fullscreen:function(){var e,n=this,o=n.o.prefix,r=o+"fullscreen";n.$box.toggleClass(r),e=n.$box.hasClass(r),a("body").toggleClass(o+"body-fullscreen",e),a(t).trigger("scroll"),n.$c.trigger("tbw"+(e?"open":"close")+"fullscreen")},execCmd:function(e,t,n,a){var o=this;a=!!a||"","dropdown"!==e&&o.$ed.focus();try{o.doc.execCommand("styleWithCSS",!1,n||!1)}catch(r){}try{o[e+a](t)}catch(r){try{e(t)}catch(i){"insertHorizontalRule"===e?t=void 0:"formatBlock"===e&&o.isIE&&(t="<"+t+">"),o.doc.execCommand(e,!1,t),o.syncCode(),o.semanticCode(!1,!0)}"dropdown"!==e&&(o.updateButtonPaneStatus(),o.$c.trigger("tbwchange"))}},openModal:function(e,n){var i=this,s=i.o.prefix;if(a("."+s+"modal-box",i.$box).length>0)return!1;i.o.autogrowOnEnter&&(i.autogrowOnEnterDontClose=!0),i.saveRange(),i.showOverlay(),i.$btnPane.addClass(s+"disable");var l=a("",{"class":s+"modal "+s+"fixed-top"}).css({top:i.$box.offset().top+i.$btnPane.height(),zIndex:99999}).appendTo(a(i.doc.body));i.$overlay.one("click",function(){return l.trigger(r),!1});var d=a("",{action:"",html:n}).on("submit",function(){return l.trigger(o),!1}).on("reset",function(){return l.trigger(r),!1}).on("submit reset",function(){i.o.autogrowOnEnter&&(i.autogrowOnEnterDontClose=!1)}),c=a("",{"class":s+"modal-box",html:d}).css({top:"-"+i.$btnPane.outerHeight()+"px",opacity:0}).appendTo(l).animate({top:0,opacity:1},100);return a("",{text:e,"class":s+"modal-title"}).prependTo(c),l.height(c.outerHeight()+10),a("input:first",c).focus(),i.buildModalBtn("submit",c),i.buildModalBtn("reset",c),a(t).trigger("scroll"),l},buildModalBtn:function(e,t){var n=this,o=n.o.prefix;return a("",{"class":o+"modal-button "+o+"modal-"+e,type:e,text:n.lang[e]||e}).appendTo(a("form",t))},closeModal:function(){var e=this,t=e.o.prefix;e.$btnPane.removeClass(t+"disable"),e.$overlay.off();var o=a("."+t+"modal-box",a(n.body));o.animate({top:"-"+o.height()},100,function(){o.parent().remove(),e.hideOverlay()}),e.restoreRange()},openModalInsert:function(e,t,n){var i=this,s=i.o.prefix,l=i.lang,d="";return a.each(t,function(e,t){var n=t.label||e,a=t.name||e,o=t.attributes||{},r=Object.keys(o).map(function(e){return e+'="'+o[e]+'"'}).join(" ");d+='"}),i.openModal(e,d).on(o,function(){var e=a("form",a(this)),r=!0,s={};a.each(t,function(t,n){var o=n.name||t,l=a('input[name="'+o+'"]',e),d=l.attr("type");switch(d.toLowerCase()){case"checkbox":s[o]=l.is(":checked");break;case"radio":s[o]=l.filter(":checked").val();break;default:s[o]=a.trim(l.val())}n.required&&""===s[o]?(r=!1,i.addErrorOnModalField(l,i.lang.required)):n.pattern&&!n.pattern.test(s[o])&&(r=!1,i.addErrorOnModalField(l,n.patternError))}),r&&(i.restoreRange(),n(s,t)&&(i.syncCode(),i.$c.trigger("tbwchange"),i.closeModal(),a(this).off(o)))}).one(r,function(){a(this).off(o),i.closeModal()})},addErrorOnModalField:function(e,t){var n=this.o.prefix,o=e.parent();e.on("change keyup",function(){o.removeClass(n+"input-error")}),o.addClass(n+"input-error").find("input+span").append(a("",{"class":n+"msg-error",text:t}))},getDefaultImgDblClickHandler:function(){var e=this;return function(){var t=a(this),n=t.attr("src"),o="(Base64)";0===n.indexOf("data:image")&&(n=o);var r={url:{label:"URL",value:n,required:!0},alt:{label:e.lang.description,value:t.attr("alt")}};return e.o.imageWidthModalEdit&&(r.width={value:t.attr("width")?t.attr("width"):""}),e.openModalInsert(e.lang.insertImage,r,function(n){return n.url!==o&&t.attr({src:n.url}),t.attr({alt:n.alt}),e.o.imageWidthModalEdit&&(parseInt(n.width)>0?t.attr({width:n.width}):t.removeAttr("width")),!0}),!1}},saveRange:function(){var e=this,t=e.doc.getSelection();if(e.range=null,t&&t.rangeCount){var n,a=e.range=t.getRangeAt(0),o=e.doc.createRange();o.selectNodeContents(e.$ed[0]),o.setEnd(a.startContainer,a.startOffset),n=(o+"").length,e.metaRange={start:n,end:n+(a+"").length}}},restoreRange:function(){var e,t=this,n=t.metaRange,a=t.range,o=t.doc.getSelection();if(a){if(n&&n.start!==n.end){var r,i=0,s=[t.$ed[0]],l=!1,d=!1;for(e=t.doc.createRange();!d&&(r=s.pop());)if(3===r.nodeType){var c=i+r.length;!l&&n.start>=i&&n.start<=c&&(e.setStart(r,n.start-i),l=!0),l&&n.end>=i&&n.end<=c&&(e.setEnd(r,n.end-i),d=!0),i=c}else for(var u=r.childNodes,g=u.length;g>0;)g-=1,s.push(u[g])}o.removeAllRanges(),o.addRange(e||a)}},getRangeText:function(){return this.range+""},updateButtonPaneStatus:function(){var e=this,t=e.o.prefix,n=e.getTagsRecursive(e.doc.getSelection().focusNode),o=t+"active-button "+t+"active";a("."+t+"active-button",e.$btnPane).removeClass(o),a.each(n,function(n,r){var i=e.tagToButton[r.toLowerCase()],s=a("."+t+i+"-button",e.$btnPane);if(s.length>0)s.addClass(o);else try{s=a("."+t+"dropdown ."+t+i+"-dropdown-button",e.$box);var l=s.parent().data("dropdown");a("."+t+l+"-button",e.$box).addClass(o)}catch(d){}})},getTagsRecursive:function(e,t){var n=this;if(t=t||(e&&e.tagName?[e.tagName]:[]),!e||!e.parentNode)return t;e=e.parentNode;var o=e.tagName;return"DIV"===o?t:("P"===o&&""!==e.style.textAlign&&t.push(e.style.textAlign),a.each(n.tagHandlers,function(a,o){t=t.concat(o(e,n))}),t.push(o),n.getTagsRecursive(e,t).filter(function(e){return null!=e}))},initPlugins:function(){var e=this;e.loadedPlugins=[],a.each(a.trumbowyg.plugins,function(t,n){n.shouldInit&&!n.shouldInit(e)||(n.init(e),n.tagHandler&&e.tagHandlers.push(n.tagHandler),e.loadedPlugins.push(n))})},destroyPlugins:function(){a.each(this.loadedPlugins,function(e,t){t.destroy&&t.destroy()})}}}(navigator,window,document,jQuery);
\ No newline at end of file
diff --git a/src/assets/scripts/trumbowyg/ui/icons.svg b/src/assets/scripts/trumbowyg/ui/icons.svg
new file mode 100755
index 0000000..f03b3c7
--- /dev/null
+++ b/src/assets/scripts/trumbowyg/ui/icons.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/scripts/trumbowyg/ui/sass/trumbowyg.scss b/src/assets/scripts/trumbowyg/ui/sass/trumbowyg.scss
new file mode 100755
index 0000000..ad2c406
--- /dev/null
+++ b/src/assets/scripts/trumbowyg/ui/sass/trumbowyg.scss
@@ -0,0 +1,810 @@
+/**
+ * Trumbowyg v2.14.0 - 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
+ */
+
+$light-color: #ecf0f1 !default;
+$dark-color: #222 !default;
+
+$modal-submit-color: #2ecc71 !default;
+$modal-reset-color: #EEE !default;
+
+$transition-duration: 150ms !default;
+$slow-transition-duration: 300ms !default;
+
+#trumbowyg-icons {
+ overflow: hidden;
+ visibility: hidden;
+ height: 0;
+ width: 0;
+
+ svg {
+ height: 0;
+ width: 0;
+ }
+}
+
+.trumbowyg-box,
+.trumbowyg-modal {
+ *,
+ *::before,
+ *::after {
+ box-sizing: border-box;
+ }
+
+ svg {
+ width: 17px;
+ height: 100%;
+ fill: $dark-color;
+ }
+}
+
+.trumbowyg-box,
+.trumbowyg-editor {
+ display: block;
+ position: relative;
+ border: 1px solid #DDD;
+ width: 100%;
+ min-height: 300px;
+ margin: 17px auto;
+}
+
+.trumbowyg-box .trumbowyg-editor {
+ margin: 0 auto;
+}
+
+.trumbowyg-box.trumbowyg-fullscreen {
+ background: #FEFEFE;
+ border: none !important;
+}
+
+.trumbowyg-editor,
+.trumbowyg-textarea {
+ position: relative;
+ box-sizing: border-box;
+ padding: 20px;
+ min-height: 300px;
+ width: 100%;
+ border-style: none;
+ resize: none;
+ outline: none;
+ overflow: auto;
+
+ &.trumbowyg-autogrow-on-enter {
+ transition: height $slow-transition-duration ease-out;
+ }
+}
+
+.trumbowyg-box-blur .trumbowyg-editor {
+ *,
+ &::before {
+ color: transparent !important;
+ text-shadow: 0 0 7px #333;
+
+ @media screen and (min-width: 0 \0) {
+ color: rgba(200, 200, 200, 0.6) !important;
+ }
+ @supports (-ms-accelerator:true) {
+ color: rgba(200, 200, 200, 0.6) !important;
+ }
+ }
+ img,
+ hr {
+ opacity: 0.2;
+ }
+}
+
+.trumbowyg-textarea {
+ position: relative;
+ display: block;
+ overflow: auto;
+ border: none;
+ font-size: 14px;
+ font-family: "Inconsolata", "Consolas", "Courier", "Courier New", sans-serif;
+ line-height: 18px;
+}
+
+.trumbowyg-box.trumbowyg-editor-visible {
+ .trumbowyg-textarea {
+ height: 1px !important;
+ width: 25%;
+ min-height: 0 !important;
+ padding: 0 !important;
+ background: none;
+ opacity: 0 !important;
+ }
+}
+
+.trumbowyg-box.trumbowyg-editor-hidden {
+ .trumbowyg-textarea {
+ display: block;
+ }
+ .trumbowyg-editor {
+ display: none;
+ }
+}
+
+.trumbowyg-box.trumbowyg-disabled {
+ .trumbowyg-textarea {
+ opacity: 0.8;
+ background: none;
+ }
+}
+
+.trumbowyg-editor[contenteditable=true]:empty:not(:focus)::before {
+ content: attr(placeholder);
+ color: #999;
+ pointer-events: none;
+}
+
+.trumbowyg-button-pane {
+ width: 100%;
+ min-height: 36px;
+ background: $light-color;
+ border-bottom: 1px solid darken($light-color, 7%);
+ margin: 0;
+ padding: 0 5px;
+ position: relative;
+ list-style-type: none;
+ line-height: 10px;
+ backface-visibility: hidden;
+ z-index: 11;
+
+ &::after {
+ content: " ";
+ display: block;
+ position: absolute;
+ top: 36px;
+ left: 0;
+ right: 0;
+ width: 100%;
+ height: 1px;
+ background: darken($light-color, 7%);
+ }
+
+ .trumbowyg-button-group {
+ display: inline-block;
+
+ .trumbowyg-fullscreen-button svg {
+ color: transparent;
+ }
+
+ &::after {
+ content: " ";
+ display: inline-block;
+ width: 1px;
+ background: darken($light-color, 7%);
+ margin: 0 5px;
+ height: 35px;
+ vertical-align: top;
+ }
+
+ &:last-child::after {
+ content: none;
+ }
+ }
+
+ button {
+ display: inline-block;
+ position: relative;
+ width: 35px;
+ height: 35px;
+ padding: 1px 6px !important;
+ margin-bottom: 1px;
+ overflow: hidden;
+ border: none;
+ cursor: pointer;
+ background: none;
+ vertical-align: middle;
+ transition: background-color $transition-duration, opacity $transition-duration;
+
+ &.trumbowyg-textual-button {
+ width: auto;
+ line-height: 35px;
+ user-select: none;
+ }
+ }
+
+ &.trumbowyg-disable button:not(.trumbowyg-not-disable):not(.trumbowyg-active),
+ button.trumbowyg-disable,
+ .trumbowyg-disabled & button:not(.trumbowyg-not-disable):not(.trumbowyg-viewHTML-button) {
+ opacity: 0.2;
+ cursor: default;
+ }
+ &.trumbowyg-disable,
+ .trumbowyg-disabled & {
+ .trumbowyg-button-group::before {
+ background: darken($light-color, 3%);
+ }
+ }
+
+ button:not(.trumbowyg-disable):hover,
+ button:not(.trumbowyg-disable):focus,
+ button.trumbowyg-active {
+ background-color: #FFF;
+ outline: none;
+ }
+
+ .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-textual-button {
+ padding-left: 10px !important;
+ padding-right: 18px !important;
+
+ &::after {
+ top: 17px;
+ right: 7px;
+ }
+ }
+ }
+
+ .trumbowyg-right {
+ float: right;
+ }
+}
+
+.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;
+ z-index: 12;
+
+ button {
+ display: block;
+ width: 100%;
+ height: 35px;
+ line-height: 35px;
+ text-decoration: none;
+ background: #FFF;
+ padding: 0 10px;
+ color: #333 !important;
+ border: none;
+ cursor: pointer;
+ text-align: left;
+ font-size: 15px;
+ transition: all $transition-duration;
+
+ &:hover,
+ &:focus {
+ background: $light-color;
+ }
+
+ svg {
+ float: left;
+ margin-right: 14px;
+ }
+ }
+}
+
+/* Modal box */
+.trumbowyg-modal {
+ position: absolute;
+ top: 0;
+ left: 50%;
+ transform: translateX(-50%);
+ max-width: 520px;
+ width: 100%;
+ height: 350px;
+ z-index: 12;
+ overflow: hidden;
+ backface-visibility: hidden;
+}
+
+.trumbowyg-modal-box {
+ position: absolute;
+ top: 0;
+ left: 50%;
+ transform: translateX(-50%);
+ max-width: 500px;
+ width: calc(100% - 20px);
+ 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%;
+ height: 3px;
+ position: absolute;
+ top: 58px;
+
+ .trumbowyg-progress-bar {
+ background: #2BC06A;
+ width: 0;
+ height: 100%;
+ transition: width $transition-duration linear;
+ }
+ }
+
+ label {
+ display: block;
+ position: relative;
+ margin: 15px 12px;
+ height: 29px;
+ line-height: 29px;
+ overflow: hidden;
+
+ .trumbowyg-input-infos {
+ display: block;
+ text-align: left;
+ height: 25px;
+ line-height: 25px;
+ transition: all 150ms;
+
+ span {
+ display: block;
+ color: darken($light-color, 45%);
+ background-color: lighten($light-color, 5%);
+ border: 1px solid #DEDEDE;
+ padding: 0 7px;
+ width: 150px;
+ }
+ 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: #fff;
+ font-size: 14px;
+ max-width: 330px;
+ width: 70%;
+ padding: 0 7px;
+ transition: all $transition-duration;
+
+ &:hover,
+ &:focus {
+ outline: none;
+ border: 1px solid #95a5a6;
+ }
+ &:focus {
+ background: lighten($light-color, 5%);
+ }
+ }
+
+ input[type="checkbox"]{
+ left: 5px;
+ top: 5px;
+ right: auto;
+
+ + .trumbowyg-input-infos span{
+ width: auto;
+ padding-left: 25px;
+ }
+ }
+ }
+
+ .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;
+ cursor: pointer;
+ font-family: "Trebuchet MS", Helvetica, Verdana, sans-serif;
+ font-size: 16px;
+ transition: all $transition-duration;
+
+ &.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%);
+ }
+ }
+
+ &.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, 0.5);
+ height: 100%;
+ width: 100%;
+ left: 0;
+ display: none;
+ top: 0;
+ z-index: 10;
+}
+
+/**
+ * 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-editor,
+ .trumbowyg-textarea {
+ height: calc(100% - 37px) !important;
+ overflow: auto;
+ }
+ .trumbowyg-overlay {
+ height: 100% !important;
+ }
+ .trumbowyg-button-group .trumbowyg-fullscreen-button svg {
+ color: $dark-color;
+ fill: transparent;
+ }
+}
+
+.trumbowyg-editor {
+ object,
+ embed,
+ video,
+ img {
+ max-width: 100%;
+ }
+ video,
+ img {
+ height: auto;
+ }
+ img {
+ cursor: move;
+ }
+
+ /*
+ * lset for resetCss option
+ */
+ &.trumbowyg-reset-css {
+ background: #FEFEFE !important;
+ font-family: "Trebuchet MS", Helvetica, Verdana, sans-serif !important;
+ font-size: 14px !important;
+ line-height: 1.45em !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 {
+ list-style: disc;
+ }
+ 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;
+ }
+ }
+}
+
+/*
+ * Dark theme
+ */
+.trumbowyg-dark {
+ .trumbowyg-textarea {
+ background: #111;
+ color: #ddd;
+ }
+ .trumbowyg-box {
+ border: 1px solid lighten($dark-color, 7%);
+
+ &.trumbowyg-fullscreen {
+ background: #111;
+ }
+ &.trumbowyg-box-blur .trumbowyg-editor {
+ *,
+ &::before {
+ text-shadow: 0 0 7px #ccc;
+
+ @media screen and (min-width: 0 \0
+ ) {
+ color: rgba(20, 20, 20, 0.6) !important;
+ }
+ @supports (-ms-accelerator:true) {
+ color: rgba(20, 20, 20, 0.6) !important;
+ }
+ }
+ }
+
+ svg {
+ fill: $light-color;
+ color: $light-color;
+ }
+ }
+ .trumbowyg-button-pane {
+ background-color: $dark-color;
+ border-bottom-color: lighten($dark-color, 7%);
+
+ &::after {
+ background: lighten($dark-color, 7%);
+ }
+
+ .trumbowyg-button-group:not(:empty) {
+ &::after {
+ background-color: lighten($dark-color, 7%);
+ }
+ .trumbowyg-fullscreen-button svg {
+ color: transparent;
+ }
+ }
+
+ &.trumbowyg-disable {
+ .trumbowyg-button-group::after {
+ background-color: lighten($dark-color, 3%);
+ }
+ }
+
+ button:not(.trumbowyg-disable):hover,
+ button:not(.trumbowyg-disable):focus,
+ button.trumbowyg-active {
+ background-color: #333;
+ }
+
+ .trumbowyg-open-dropdown::after {
+ border-top-color: #fff;
+ }
+ }
+ .trumbowyg-fullscreen {
+ .trumbowyg-button-group .trumbowyg-fullscreen-button svg {
+ color: $light-color;
+ fill: transparent;
+ }
+ }
+
+ .trumbowyg-dropdown {
+ border-color: $dark-color;
+ background: #333;
+ box-shadow: rgba(0, 0, 0, .3) 0 2px 3px;
+
+ button {
+ background: #333;
+ color: #fff !important;
+
+ &:hover,
+ &:focus {
+ background: $dark-color;
+ }
+ }
+ }
+
+ // 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: lighten($dark-color, 25%);
+ }
+ &:focus {
+ background-color: lighten($dark-color, 5%);
+ }
+ }
+ }
+
+ .trumbowyg-modal-button {
+ &.trumbowyg-modal-submit {
+ background: darken($modal-submit-color, 20%);
+
+ &:hover,
+ &:focus {
+ background: darken($modal-submit-color, 10%);
+ }
+ &:active {
+ background: darken($modal-submit-color, 25%);
+ }
+ }
+ &.trumbowyg-modal-reset {
+ background: #333;
+ color: #ccc;
+
+ &:hover,
+ &:focus {
+ background: #444;
+ }
+ &:active {
+ background: #111;
+ }
+ }
+ }
+ }
+ .trumbowyg-overlay {
+ background-color: rgba(15, 15, 15, 0.6);
+ }
+}
diff --git a/src/assets/scripts/trumbowyg/ui/trumbowyg.css b/src/assets/scripts/trumbowyg/ui/trumbowyg.css
new file mode 100755
index 0000000..82e713c
--- /dev/null
+++ b/src/assets/scripts/trumbowyg/ui/trumbowyg.css
@@ -0,0 +1,591 @@
+/**
+ * Trumbowyg v2.14.0 - 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-icons {
+ overflow: hidden;
+ visibility: hidden;
+ height: 0;
+ width: 0; }
+ #trumbowyg-icons svg {
+ height: 0;
+ width: 0; }
+
+.trumbowyg-box *,
+.trumbowyg-box *::before,
+.trumbowyg-box *::after,
+.trumbowyg-modal *,
+.trumbowyg-modal *::before,
+.trumbowyg-modal *::after {
+ box-sizing: border-box; }
+
+.trumbowyg-box svg,
+.trumbowyg-modal svg {
+ width: 17px;
+ height: 100%;
+ fill: #222; }
+
+.trumbowyg-box,
+.trumbowyg-editor {
+ display: block;
+ position: relative;
+ border: 1px solid #DDD;
+ width: 100%;
+ min-height: 300px;
+ margin: 17px auto; }
+
+.trumbowyg-box .trumbowyg-editor {
+ margin: 0 auto; }
+
+.trumbowyg-box.trumbowyg-fullscreen {
+ background: #FEFEFE;
+ border: none !important; }
+
+.trumbowyg-editor,
+.trumbowyg-textarea {
+ position: relative;
+ box-sizing: border-box;
+ padding: 20px;
+ min-height: 300px;
+ width: 100%;
+ border-style: none;
+ resize: none;
+ outline: none;
+ overflow: auto; }
+ .trumbowyg-editor.trumbowyg-autogrow-on-enter,
+ .trumbowyg-textarea.trumbowyg-autogrow-on-enter {
+ transition: height 300ms ease-out; }
+
+.trumbowyg-box-blur .trumbowyg-editor *, .trumbowyg-box-blur .trumbowyg-editor::before {
+ color: transparent !important;
+ text-shadow: 0 0 7px #333; }
+ @media screen and (min-width: 0 \0) {
+ .trumbowyg-box-blur .trumbowyg-editor *, .trumbowyg-box-blur .trumbowyg-editor::before {
+ color: rgba(200, 200, 200, 0.6) !important; } }
+ @supports (-ms-accelerator: true) {
+ .trumbowyg-box-blur .trumbowyg-editor *, .trumbowyg-box-blur .trumbowyg-editor::before {
+ color: rgba(200, 200, 200, 0.6) !important; } }
+
+.trumbowyg-box-blur .trumbowyg-editor img,
+.trumbowyg-box-blur .trumbowyg-editor hr {
+ opacity: 0.2; }
+
+.trumbowyg-textarea {
+ position: relative;
+ display: block;
+ overflow: auto;
+ border: none;
+ font-size: 14px;
+ font-family: "Inconsolata", "Consolas", "Courier", "Courier New", sans-serif;
+ line-height: 18px; }
+
+.trumbowyg-box.trumbowyg-editor-visible .trumbowyg-textarea {
+ height: 1px !important;
+ width: 25%;
+ min-height: 0 !important;
+ padding: 0 !important;
+ background: none;
+ opacity: 0 !important; }
+
+.trumbowyg-box.trumbowyg-editor-hidden .trumbowyg-textarea {
+ display: block; }
+
+.trumbowyg-box.trumbowyg-editor-hidden .trumbowyg-editor {
+ display: none; }
+
+.trumbowyg-box.trumbowyg-disabled .trumbowyg-textarea {
+ opacity: 0.8;
+ background: none; }
+
+.trumbowyg-editor[contenteditable=true]:empty:not(:focus)::before {
+ content: attr(placeholder);
+ color: #999;
+ pointer-events: none; }
+
+.trumbowyg-button-pane {
+ width: 100%;
+ min-height: 36px;
+ background: #ecf0f1;
+ border-bottom: 1px solid #d7e0e2;
+ margin: 0;
+ padding: 0 5px;
+ position: relative;
+ list-style-type: none;
+ line-height: 10px;
+ backface-visibility: hidden;
+ z-index: 11; }
+ .trumbowyg-button-pane::after {
+ content: " ";
+ display: block;
+ position: absolute;
+ top: 36px;
+ left: 0;
+ right: 0;
+ width: 100%;
+ height: 1px;
+ background: #d7e0e2; }
+ .trumbowyg-button-pane .trumbowyg-button-group {
+ display: inline-block; }
+ .trumbowyg-button-pane .trumbowyg-button-group .trumbowyg-fullscreen-button svg {
+ color: transparent; }
+ .trumbowyg-button-pane .trumbowyg-button-group::after {
+ content: " ";
+ display: inline-block;
+ width: 1px;
+ background: #d7e0e2;
+ margin: 0 5px;
+ height: 35px;
+ vertical-align: top; }
+ .trumbowyg-button-pane .trumbowyg-button-group:last-child::after {
+ content: none; }
+ .trumbowyg-button-pane button {
+ display: inline-block;
+ position: relative;
+ width: 35px;
+ height: 35px;
+ padding: 1px 6px !important;
+ margin-bottom: 1px;
+ overflow: hidden;
+ border: none;
+ cursor: pointer;
+ background: none;
+ vertical-align: middle;
+ transition: background-color 150ms, opacity 150ms; }
+ .trumbowyg-button-pane button.trumbowyg-textual-button {
+ width: auto;
+ line-height: 35px;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none; }
+ .trumbowyg-button-pane.trumbowyg-disable button:not(.trumbowyg-not-disable):not(.trumbowyg-active),
+ .trumbowyg-button-pane button.trumbowyg-disable,
+ .trumbowyg-disabled .trumbowyg-button-pane button:not(.trumbowyg-not-disable):not(.trumbowyg-viewHTML-button) {
+ opacity: 0.2;
+ cursor: default; }
+ .trumbowyg-button-pane.trumbowyg-disable .trumbowyg-button-group::before,
+ .trumbowyg-disabled .trumbowyg-button-pane .trumbowyg-button-group::before {
+ background: #e3e9eb; }
+ .trumbowyg-button-pane button:not(.trumbowyg-disable):hover,
+ .trumbowyg-button-pane button:not(.trumbowyg-disable):focus,
+ .trumbowyg-button-pane button.trumbowyg-active {
+ background-color: #FFF;
+ outline: none; }
+ .trumbowyg-button-pane .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-open-dropdown.trumbowyg-textual-button {
+ padding-left: 10px !important;
+ padding-right: 18px !important; }
+ .trumbowyg-button-pane .trumbowyg-open-dropdown.trumbowyg-textual-button::after {
+ top: 17px;
+ right: 7px; }
+ .trumbowyg-button-pane .trumbowyg-right {
+ float: right; }
+
+.trumbowyg-dropdown {
+ width: 200px;
+ border: 1px solid #ecf0f1;
+ padding: 5px 0;
+ border-top: none;
+ background: #FFF;
+ margin-left: -1px;
+ box-shadow: rgba(0, 0, 0, 0.1) 0 2px 3px;
+ z-index: 12; }
+ .trumbowyg-dropdown button {
+ display: block;
+ width: 100%;
+ height: 35px;
+ line-height: 35px;
+ text-decoration: none;
+ background: #FFF;
+ padding: 0 10px;
+ color: #333 !important;
+ border: none;
+ cursor: pointer;
+ text-align: left;
+ font-size: 15px;
+ transition: all 150ms; }
+ .trumbowyg-dropdown button:hover, .trumbowyg-dropdown button:focus {
+ background: #ecf0f1; }
+ .trumbowyg-dropdown button svg {
+ float: left;
+ margin-right: 14px; }
+
+/* Modal box */
+.trumbowyg-modal {
+ position: absolute;
+ top: 0;
+ left: 50%;
+ transform: translateX(-50%);
+ max-width: 520px;
+ width: 100%;
+ height: 350px;
+ z-index: 12;
+ overflow: hidden;
+ backface-visibility: hidden; }
+
+.trumbowyg-modal-box {
+ position: absolute;
+ top: 0;
+ left: 50%;
+ transform: translateX(-50%);
+ max-width: 500px;
+ width: calc(100% - 20px);
+ padding-bottom: 45px;
+ z-index: 1;
+ background-color: #FFF;
+ text-align: center;
+ font-size: 14px;
+ box-shadow: rgba(0, 0, 0, 0.2) 0 2px 3px;
+ 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%;
+ height: 3px;
+ position: absolute;
+ top: 58px; }
+ .trumbowyg-modal-box .trumbowyg-progress .trumbowyg-progress-bar {
+ background: #2BC06A;
+ width: 0;
+ height: 100%;
+ transition: width 150ms linear; }
+ .trumbowyg-modal-box label {
+ display: block;
+ position: relative;
+ margin: 15px 12px;
+ height: 29px;
+ line-height: 29px;
+ overflow: hidden; }
+ .trumbowyg-modal-box label .trumbowyg-input-infos {
+ display: block;
+ text-align: left;
+ height: 25px;
+ line-height: 25px;
+ transition: all 150ms; }
+ .trumbowyg-modal-box label .trumbowyg-input-infos span {
+ display: block;
+ color: #69878f;
+ background-color: #fbfcfc;
+ border: 1px solid #DEDEDE;
+ padding: 0 7px;
+ width: 150px; }
+ .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: #fff;
+ font-size: 14px;
+ max-width: 330px;
+ width: 70%;
+ padding: 0 7px;
+ transition: all 150ms; }
+ .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: #fbfcfc; }
+ .trumbowyg-modal-box label input[type="checkbox"] {
+ left: 5px;
+ top: 5px;
+ right: auto; }
+ .trumbowyg-modal-box label input[type="checkbox"] + .trumbowyg-input-infos span {
+ width: auto;
+ padding-left: 25px; }
+ .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;
+ cursor: pointer;
+ font-family: "Trebuchet MS", Helvetica, Verdana, sans-serif;
+ font-size: 16px;
+ transition: all 150ms; }
+ .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit {
+ right: 110px;
+ background: #2bc06a; }
+ .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit:hover, .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit:focus {
+ background: #40d47e;
+ outline: none; }
+ .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit:active {
+ background: #25a25a; }
+ .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: #d5d5d5; }
+
+.trumbowyg-overlay {
+ position: absolute;
+ background-color: rgba(255, 255, 255, 0.5);
+ height: 100%;
+ width: 100%;
+ left: 0;
+ display: none;
+ top: 0;
+ z-index: 10; }
+
+/**
+ * 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-editor,
+ .trumbowyg-fullscreen .trumbowyg-textarea {
+ height: calc(100% - 37px) !important;
+ overflow: auto; }
+ .trumbowyg-fullscreen .trumbowyg-overlay {
+ height: 100% !important; }
+ .trumbowyg-fullscreen .trumbowyg-button-group .trumbowyg-fullscreen-button svg {
+ color: #222;
+ fill: transparent; }
+
+.trumbowyg-editor {
+ /*
+ * lset for resetCss option
+ */ }
+ .trumbowyg-editor object,
+ .trumbowyg-editor embed,
+ .trumbowyg-editor video,
+ .trumbowyg-editor img {
+ 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;
+ 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 {
+ 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 {
+ list-style: disc; }
+ .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; }
+
+/*
+ * Dark theme
+ */
+.trumbowyg-dark .trumbowyg-textarea {
+ background: #111;
+ color: #ddd; }
+
+.trumbowyg-dark .trumbowyg-box {
+ border: 1px solid #343434; }
+ .trumbowyg-dark .trumbowyg-box.trumbowyg-fullscreen {
+ background: #111; }
+ .trumbowyg-dark .trumbowyg-box.trumbowyg-box-blur .trumbowyg-editor *, .trumbowyg-dark .trumbowyg-box.trumbowyg-box-blur .trumbowyg-editor::before {
+ text-shadow: 0 0 7px #ccc; }
+ @media screen and (min-width: 0 \0 ) {
+ .trumbowyg-dark .trumbowyg-box.trumbowyg-box-blur .trumbowyg-editor *, .trumbowyg-dark .trumbowyg-box.trumbowyg-box-blur .trumbowyg-editor::before {
+ color: rgba(20, 20, 20, 0.6) !important; } }
+ @supports (-ms-accelerator: true) {
+ .trumbowyg-dark .trumbowyg-box.trumbowyg-box-blur .trumbowyg-editor *, .trumbowyg-dark .trumbowyg-box.trumbowyg-box-blur .trumbowyg-editor::before {
+ color: rgba(20, 20, 20, 0.6) !important; } }
+ .trumbowyg-dark .trumbowyg-box svg {
+ fill: #ecf0f1;
+ color: #ecf0f1; }
+
+.trumbowyg-dark .trumbowyg-button-pane {
+ background-color: #222;
+ border-bottom-color: #343434; }
+ .trumbowyg-dark .trumbowyg-button-pane::after {
+ background: #343434; }
+ .trumbowyg-dark .trumbowyg-button-pane .trumbowyg-button-group:not(:empty)::after {
+ background-color: #343434; }
+ .trumbowyg-dark .trumbowyg-button-pane .trumbowyg-button-group:not(:empty) .trumbowyg-fullscreen-button svg {
+ color: transparent; }
+ .trumbowyg-dark .trumbowyg-button-pane.trumbowyg-disable .trumbowyg-button-group::after {
+ background-color: #2a2a2a; }
+ .trumbowyg-dark .trumbowyg-button-pane button:not(.trumbowyg-disable):hover,
+ .trumbowyg-dark .trumbowyg-button-pane button:not(.trumbowyg-disable):focus,
+ .trumbowyg-dark .trumbowyg-button-pane button.trumbowyg-active {
+ background-color: #333; }
+ .trumbowyg-dark .trumbowyg-button-pane .trumbowyg-open-dropdown::after {
+ border-top-color: #fff; }
+
+.trumbowyg-dark .trumbowyg-fullscreen .trumbowyg-button-group .trumbowyg-fullscreen-button svg {
+ color: #ecf0f1;
+ fill: transparent; }
+
+.trumbowyg-dark .trumbowyg-dropdown {
+ border-color: #222;
+ background: #333;
+ box-shadow: rgba(0, 0, 0, 0.3) 0 2px 3px; }
+ .trumbowyg-dark .trumbowyg-dropdown button {
+ background: #333;
+ color: #fff !important; }
+ .trumbowyg-dark .trumbowyg-dropdown button:hover, .trumbowyg-dark .trumbowyg-dropdown button:focus {
+ background: #222; }
+
+.trumbowyg-dark .trumbowyg-modal-box {
+ background-color: #222; }
+ .trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-title {
+ border-bottom: 1px solid #555;
+ color: #fff;
+ background: #3c3c3c; }
+ .trumbowyg-dark .trumbowyg-modal-box label {
+ display: block;
+ position: relative;
+ margin: 15px 12px;
+ height: 27px;
+ line-height: 27px;
+ overflow: hidden; }
+ .trumbowyg-dark .trumbowyg-modal-box label .trumbowyg-input-infos span {
+ color: #eee;
+ background-color: #2f2f2f;
+ border-color: #222; }
+ .trumbowyg-dark .trumbowyg-modal-box label .trumbowyg-input-infos span.trumbowyg-msg-error {
+ color: #e74c3c; }
+ .trumbowyg-dark .trumbowyg-modal-box label.trumbowyg-input-error input,
+ .trumbowyg-dark .trumbowyg-modal-box label.trumbowyg-input-error textarea {
+ border-color: #e74c3c; }
+ .trumbowyg-dark .trumbowyg-modal-box label input {
+ border-color: #222;
+ color: #eee;
+ background: #333; }
+ .trumbowyg-dark .trumbowyg-modal-box label input:hover, .trumbowyg-dark .trumbowyg-modal-box label input:focus {
+ border-color: #626262; }
+ .trumbowyg-dark .trumbowyg-modal-box label input:focus {
+ background-color: #2f2f2f; }
+ .trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit {
+ background: #1b7943; }
+ .trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit:hover, .trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit:focus {
+ background: #25a25a; }
+ .trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit:active {
+ background: #176437; }
+ .trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset {
+ background: #333;
+ color: #ccc; }
+ .trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset:hover, .trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset:focus {
+ background: #444; }
+ .trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset:active {
+ background: #111; }
+
+.trumbowyg-dark .trumbowyg-overlay {
+ background-color: rgba(15, 15, 15, 0.6); }
diff --git a/src/assets/scripts/trumbowyg/ui/trumbowyg.min.css b/src/assets/scripts/trumbowyg/ui/trumbowyg.min.css
new file mode 100755
index 0000000..4cdae11
--- /dev/null
+++ b/src/assets/scripts/trumbowyg/ui/trumbowyg.min.css
@@ -0,0 +1,2 @@
+/** Trumbowyg v2.14.0 - A lightweight WYSIWYG editor - alex-d.github.io/Trumbowyg - License MIT - Author : Alexandre Demode (Alex-D) / alex-d.fr */
+#trumbowyg-icons,#trumbowyg-icons svg{height:0;width:0}#trumbowyg-icons{overflow:hidden;visibility:hidden}.trumbowyg-box *,.trumbowyg-box ::after,.trumbowyg-box ::before,.trumbowyg-modal *,.trumbowyg-modal ::after,.trumbowyg-modal ::before{box-sizing:border-box}.trumbowyg-box svg,.trumbowyg-modal svg{width:17px;height:100%;fill:#222}.trumbowyg-box,.trumbowyg-editor{display:block;position:relative;border:1px solid #DDD;width:100%;min-height:300px;margin:17px auto}.trumbowyg-box .trumbowyg-editor{margin:0 auto}.trumbowyg-box.trumbowyg-fullscreen{background:#FEFEFE;border:none!important}.trumbowyg-editor,.trumbowyg-textarea{position:relative;box-sizing:border-box;padding:20px;min-height:300px;width:100%;border-style:none;resize:none;outline:0;overflow:auto}.trumbowyg-editor.trumbowyg-autogrow-on-enter,.trumbowyg-textarea.trumbowyg-autogrow-on-enter{transition:height .3s ease-out}.trumbowyg-box-blur .trumbowyg-editor *,.trumbowyg-box-blur .trumbowyg-editor::before{color:transparent!important;text-shadow:0 0 7px #333}@media screen and (min-width:0 \0){.trumbowyg-box-blur .trumbowyg-editor *,.trumbowyg-box-blur .trumbowyg-editor::before{color:rgba(200,200,200,.6)!important}}@supports (-ms-accelerator:true){.trumbowyg-box-blur .trumbowyg-editor *,.trumbowyg-box-blur .trumbowyg-editor::before{color:rgba(200,200,200,.6)!important}}.trumbowyg-box-blur .trumbowyg-editor hr,.trumbowyg-box-blur .trumbowyg-editor img{opacity:.2}.trumbowyg-textarea{position:relative;display:block;overflow:auto;border:none;font-size:14px;font-family:Inconsolata,Consolas,Courier,"Courier New",sans-serif;line-height:18px}.trumbowyg-box.trumbowyg-editor-visible .trumbowyg-textarea{height:1px!important;width:25%;min-height:0!important;padding:0!important;background:0 0;opacity:0!important}.trumbowyg-box.trumbowyg-editor-hidden .trumbowyg-textarea{display:block}.trumbowyg-box.trumbowyg-editor-hidden .trumbowyg-editor{display:none}.trumbowyg-box.trumbowyg-disabled .trumbowyg-textarea{opacity:.8;background:0 0}.trumbowyg-editor[contenteditable=true]:empty:not(:focus)::before{content:attr(placeholder);color:#999;pointer-events:none}.trumbowyg-button-pane{width:100%;min-height:36px;background:#ecf0f1;border-bottom:1px solid #d7e0e2;margin:0;padding:0 5px;position:relative;list-style-type:none;line-height:10px;backface-visibility:hidden;z-index:11}.trumbowyg-button-pane::after{content:" ";display:block;position:absolute;top:36px;left:0;right:0;width:100%;height:1px;background:#d7e0e2}.trumbowyg-button-pane .trumbowyg-button-group{display:inline-block}.trumbowyg-button-pane .trumbowyg-button-group .trumbowyg-fullscreen-button svg{color:transparent}.trumbowyg-button-pane .trumbowyg-button-group::after{content:" ";display:inline-block;width:1px;background:#d7e0e2;margin:0 5px;height:35px;vertical-align:top}.trumbowyg-button-pane .trumbowyg-button-group:last-child::after{content:none}.trumbowyg-button-pane button{display:inline-block;position:relative;width:35px;height:35px;padding:1px 6px!important;margin-bottom:1px;overflow:hidden;border:none;cursor:pointer;background:0 0;vertical-align:middle;transition:background-color 150ms,opacity 150ms}.trumbowyg-button-pane button.trumbowyg-textual-button{width:auto;line-height:35px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.trumbowyg-button-pane button.trumbowyg-disable,.trumbowyg-button-pane.trumbowyg-disable button:not(.trumbowyg-not-disable):not(.trumbowyg-active),.trumbowyg-disabled .trumbowyg-button-pane button:not(.trumbowyg-not-disable):not(.trumbowyg-viewHTML-button){opacity:.2;cursor:default}.trumbowyg-button-pane.trumbowyg-disable .trumbowyg-button-group::before,.trumbowyg-disabled .trumbowyg-button-pane .trumbowyg-button-group::before{background:#e3e9eb}.trumbowyg-button-pane button.trumbowyg-active,.trumbowyg-button-pane button:not(.trumbowyg-disable):focus,.trumbowyg-button-pane button:not(.trumbowyg-disable):hover{background-color:#FFF;outline:0}.trumbowyg-button-pane .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-open-dropdown.trumbowyg-textual-button{padding-left:10px!important;padding-right:18px!important}.trumbowyg-button-pane .trumbowyg-open-dropdown.trumbowyg-textual-button::after{top:17px;right:7px}.trumbowyg-modal,.trumbowyg-modal-box{top:0;left:50%;transform:translateX(-50%);backface-visibility:hidden;position:absolute}.trumbowyg-button-pane .trumbowyg-right{float:right}.trumbowyg-dropdown{width:200px;border:1px solid #ecf0f1;padding:5px 0;border-top:none;background:#FFF;margin-left:-1px;box-shadow:rgba(0,0,0,.1) 0 2px 3px;z-index:12}.trumbowyg-dropdown button{display:block;width:100%;height:35px;line-height:35px;text-decoration:none;background:#FFF;padding:0 10px;color:#333!important;border:none;cursor:pointer;text-align:left;font-size:15px;transition:all 150ms}.trumbowyg-dropdown button:focus,.trumbowyg-dropdown button:hover{background:#ecf0f1}.trumbowyg-dropdown button svg{float:left;margin-right:14px}.trumbowyg-modal{max-width:520px;width:100%;height:350px;z-index:12;overflow:hidden}.trumbowyg-modal-box{max-width:500px;width:calc(100% - 20px);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}.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%;height:3px;position:absolute;top:58px}.trumbowyg-modal-box .trumbowyg-progress .trumbowyg-progress-bar{background:#2BC06A;width:0;height:100%;transition:width 150ms linear}.trumbowyg-modal-box label{display:block;position:relative;margin:15px 12px;height:29px;line-height:29px;overflow:hidden}.trumbowyg-modal-box label .trumbowyg-input-infos{display:block;text-align:left;height:25px;line-height:25px;transition:all 150ms}.trumbowyg-modal-box label .trumbowyg-input-infos span{display:block;color:#69878f;background-color:#fbfcfc;border:1px solid #DEDEDE;padding:0 7px;width:150px}.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:#fff;font-size:14px;max-width:330px;width:70%;padding:0 7px;transition:all 150ms}.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:#fbfcfc}.trumbowyg-modal-box label input[type=checkbox]{left:5px;top:5px;right:auto}.trumbowyg-modal-box label input[type=checkbox]+.trumbowyg-input-infos span{width:auto;padding-left:25px}.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;cursor:pointer;font-family:"Trebuchet MS",Helvetica,Verdana,sans-serif;font-size:16px;transition:all 150ms}.trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit{right:110px;background:#2bc06a}.trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit:focus,.trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit:hover{background:#40d47e;outline:0}.trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit:active{background:#25a25a}.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:#d5d5d5}.trumbowyg-overlay{position:absolute;background-color:rgba(255,255,255,.5);height:100%;width:100%;left:0;display:none;top:0;z-index:10}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-editor,.trumbowyg-fullscreen .trumbowyg-textarea{height:calc(100% - 37px)!important;overflow:auto}.trumbowyg-fullscreen .trumbowyg-overlay{height:100%!important}.trumbowyg-fullscreen .trumbowyg-button-group .trumbowyg-fullscreen-button svg{color:#222;fill:transparent}.trumbowyg-editor embed,.trumbowyg-editor img,.trumbowyg-editor object,.trumbowyg-editor video{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;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{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 ul{list-style:disc}.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-dark .trumbowyg-textarea{background:#111;color:#ddd}.trumbowyg-dark .trumbowyg-box{border:1px solid #343434}.trumbowyg-dark .trumbowyg-box.trumbowyg-fullscreen{background:#111}.trumbowyg-dark .trumbowyg-box.trumbowyg-box-blur .trumbowyg-editor *,.trumbowyg-dark .trumbowyg-box.trumbowyg-box-blur .trumbowyg-editor::before{text-shadow:0 0 7px #ccc}@media screen and (min-width:0 \0){.trumbowyg-dark .trumbowyg-box.trumbowyg-box-blur .trumbowyg-editor *,.trumbowyg-dark .trumbowyg-box.trumbowyg-box-blur .trumbowyg-editor::before{color:rgba(20,20,20,.6)!important}}@supports (-ms-accelerator:true){.trumbowyg-dark .trumbowyg-box.trumbowyg-box-blur .trumbowyg-editor *,.trumbowyg-dark .trumbowyg-box.trumbowyg-box-blur .trumbowyg-editor::before{color:rgba(20,20,20,.6)!important}}.trumbowyg-dark .trumbowyg-box svg{fill:#ecf0f1;color:#ecf0f1}.trumbowyg-dark .trumbowyg-button-pane{background-color:#222;border-bottom-color:#343434}.trumbowyg-dark .trumbowyg-button-pane::after{background:#343434}.trumbowyg-dark .trumbowyg-button-pane .trumbowyg-button-group:not(:empty)::after{background-color:#343434}.trumbowyg-dark .trumbowyg-button-pane .trumbowyg-button-group:not(:empty) .trumbowyg-fullscreen-button svg{color:transparent}.trumbowyg-dark .trumbowyg-button-pane.trumbowyg-disable .trumbowyg-button-group::after{background-color:#2a2a2a}.trumbowyg-dark .trumbowyg-button-pane button.trumbowyg-active,.trumbowyg-dark .trumbowyg-button-pane button:not(.trumbowyg-disable):focus,.trumbowyg-dark .trumbowyg-button-pane button:not(.trumbowyg-disable):hover{background-color:#333}.trumbowyg-dark .trumbowyg-button-pane .trumbowyg-open-dropdown::after{border-top-color:#fff}.trumbowyg-dark .trumbowyg-fullscreen .trumbowyg-button-group .trumbowyg-fullscreen-button svg{color:#ecf0f1;fill:transparent}.trumbowyg-dark .trumbowyg-dropdown{border-color:#222;background:#333;box-shadow:rgba(0,0,0,.3) 0 2px 3px}.trumbowyg-dark .trumbowyg-dropdown button{background:#333;color:#fff!important}.trumbowyg-dark .trumbowyg-dropdown button:focus,.trumbowyg-dark .trumbowyg-dropdown button:hover{background:#222}.trumbowyg-dark .trumbowyg-modal-box{background-color:#222}.trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-title{border-bottom:1px solid #555;color:#fff;background:#3c3c3c}.trumbowyg-dark .trumbowyg-modal-box label{display:block;position:relative;margin:15px 12px;height:27px;line-height:27px;overflow:hidden}.trumbowyg-dark .trumbowyg-modal-box label .trumbowyg-input-infos span{color:#eee;background-color:#2f2f2f;border-color:#222}.trumbowyg-dark .trumbowyg-modal-box label .trumbowyg-input-infos span.trumbowyg-msg-error{color:#e74c3c}.trumbowyg-dark .trumbowyg-modal-box label.trumbowyg-input-error input,.trumbowyg-dark .trumbowyg-modal-box label.trumbowyg-input-error textarea{border-color:#e74c3c}.trumbowyg-dark .trumbowyg-modal-box label input{border-color:#222;color:#eee;background:#333}.trumbowyg-dark .trumbowyg-modal-box label input:focus,.trumbowyg-dark .trumbowyg-modal-box label input:hover{border-color:#626262}.trumbowyg-dark .trumbowyg-modal-box label input:focus{background-color:#2f2f2f}.trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit{background:#1b7943}.trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit:focus,.trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit:hover{background:#25a25a}.trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-submit:active{background:#176437}.trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset{background:#333;color:#ccc}.trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset:focus,.trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset:hover{background:#444}.trumbowyg-dark .trumbowyg-modal-box .trumbowyg-modal-button.trumbowyg-modal-reset:active{background:#111}.trumbowyg-dark .trumbowyg-overlay{background-color:rgba(15,15,15,.6)}
\ No newline at end of file
diff --git a/src/assets/static/trumbowyg/icons.svg b/src/assets/static/trumbowyg/icons.svg
new file mode 100755
index 0000000..f03b3c7
--- /dev/null
+++ b/src/assets/static/trumbowyg/icons.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/styles/index.scss b/src/assets/styles/index.scss
index 3b2ae2a..8f3d076 100755
--- a/src/assets/styles/index.scss
+++ b/src/assets/styles/index.scss
@@ -3,4 +3,5 @@
@import "~bootstrap/scss/bootstrap";
@import 'spec/index';
@import 'vendor/index';
+@import '../scripts/trumbowyg/ui/sass/trumbowyg.scss';
@import 'nomit';
diff --git a/src/assets/styles/nomit.scss b/src/assets/styles/nomit.scss
index 7a807a6..1fda058 100644
--- a/src/assets/styles/nomit.scss
+++ b/src/assets/styles/nomit.scss
@@ -130,6 +130,7 @@ h1{
}
.btn-skills{
+ cursor: default !important;
color: #501db9;
background-color: transparent;
border: 1px solid #501db9;
@@ -602,4 +603,22 @@ body.modal-open .blurra{
-o-filter: blur(6px);
-ms-filter: blur(6px);
filter: blur(6px);
+}
+
+//new user
+.create-new-user-tab{
+ background-color: #fff;
+}
+
+.tab-new-user{
+ margin: auto;
+ width: 100%;
+}
+
+.card-new-user{
+ border: none;
+}
+
+.ciao{
+ border-color: #fff !important;
}
\ No newline at end of file
diff --git a/src/new-ad.html b/src/new-ad.html
index 08aa423..3469cc8 100644
--- a/src/new-ad.html
+++ b/src/new-ad.html
@@ -116,10 +116,10 @@
-
+
-
+
Name of the Company loggedin
@@ -127,9 +127,9 @@
About the business:
-
+
About the role:
-
+
diff --git a/src/new-user.html b/src/new-user.html
new file mode 100644
index 0000000..72aaee3
--- /dev/null
+++ b/src/new-user.html
@@ -0,0 +1,372 @@
+
+
+
+
+
+
+ Add a new User
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${require('html-loader!./_sidebar.html')}
+
+
+
+
+ ${require('html-loader!./_topbar.html')}
+
+
+
+
+
+
+
+ Add a new User / Company
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ New User
+
+
+
+
+
+
+ First Name
+
+
+
+ Middle Name
+
+
+
+ Last Name
+
+
+
+
+
+
+ Email Address
+
+
+
+ Phone Number
+
+
+
+ State
+
+
+
+
+
+
+ Nationality
+
+
+
+ Visa Type
+
+
+
+ Language (Select one or more)
+
+
+
+
+
+
+ Education
+
+
+
+
+
+
+
+ Main Classification:
+
+
+
+ Skills:
+
+
+
+
+
+ Graphic Design
+ Adobe Creaetive CC
+ Illustration
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ New Referee
+
+
+
+
+
+
+ Name
+
+
+
+ Business Type
+
+
+
+ ABN
+
+
+
+
+
+
+ Email Address
+
+
+
+ Phone Number
+
+
+
+ Website
+
+
+
+
+
+
+
+ Address
+
+
+
+ City
+
+
+
+ State
+
+
+
+ Zip
+
+
+
+
+
+
+ Description
+
+
+
+
+
+ Twitter
+
+
+
+ Facebook
+
+
+
+ Instagram
+
+
+
+ Linkedin
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/webpack/plugins/htmlPlugin.js b/webpack/plugins/htmlPlugin.js
index 7ed7a55..c70798d 100755
--- a/webpack/plugins/htmlPlugin.js
+++ b/webpack/plugins/htmlPlugin.js
@@ -21,6 +21,7 @@ const titles = {
'email': 'Email',
'forms': 'Forms',
'profile': 'profile',
+ 'new-user': 'new-user',
'users': 'users',
'companies': 'companies',
'referees': 'referees',