|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- CKEDITOR.plugins.add('html5video', {
- requires: 'widget',
- lang: 'bg,ca,de,en,eu,es,ru,uk,fr,ko,pt,pt-br,pl,zh,zh-cn',
- icons: 'html5video',
- init: function (editor) {
- editor.widgets.add('html5video', {
- button: editor.lang.html5video.button,
- template: '<div class="ckeditor-html5-video"></div>',
- /*
- * Allowed content rules (http://docs.ckeditor.com/#!/guide/dev_allowed_content_rules):
- * - div-s with text-align,float,margin-left,margin-right inline style rules and required ckeditor-html5-video class.
- * - video tags with src, controls, width and height attributes.
- */
- allowedContent: 'div[data-responsive](!ckeditor-html5-video){text-align,float,margin-left,margin-right}; video[src,poster,controls,autoplay,width, height,loop]{max-width,height};',
- requiredContent: 'div(ckeditor-html5-video); video[src];',
- upcast: function (element) {
- return element.name === 'div' && element.hasClass('ckeditor-html5-video');
- },
- dialog: 'html5video',
- init: function () {
- var src = '';
- var autoplay = '';
- var loop = '';
- var controls = '';
- var align = this.element.getStyle('text-align');
-
- var width = '';
- var height = '';
- var poster = '';
-
- // If there's a child (the video element)
- if (this.element.getChild(0)) {
- // get it's attributes.
- src = this.element.getChild(0).getAttribute('src');
- width = this.element.getChild(0).getAttribute('width');
- height = this.element.getChild(0).getAttribute('height');
- autoplay = this.element.getChild(0).getAttribute('autoplay');
- allowdownload = !this.element.getChild(0).getAttribute('controlslist');
- loop = this.element.getChild(0).getAttribute('loop');
- advisorytitle = this.element.getChild(0).getAttribute('title');
- controls = this.element.getChild(0).getAttribute('controls');
- responsive = this.element.getAttribute('data-responsive');
- poster = this.element.getChild(0).getAttribute('poster');
- }
-
- if (src) {
- this.setData('src', src);
-
- if (align) {
- this.setData('align', align);
- } else {
- this.setData('align', 'none');
- }
-
- if (width) {
- this.setData('width', width);
- }
-
- if (height) {
- this.setData('height', height);
- }
-
- if (autoplay) {
- this.setData('autoplay', 'yes');
- }
-
- if (allowdownload) {
- this.setData('allowdownload', 'yes');
- }
-
- if (loop) {
- this.setData('loop', 'yes');
- }
-
- if (advisorytitle) {
- this.setData('advisorytitle', advisorytitle);
- }
-
- if (responsive) {
- this.setData('responsive', responsive);
- }
-
- if (controls) {
- this.setData('controls', controls);
- }
-
- if (poster) {
- this.setData('poster', poster);
- }
- }
- },
- data: function () {
- // If there is an video source
- if (this.data.src) {
- // and there isn't a child (the video element)
- if (!this.element.getChild(0)) {
- // Create a new <video> element.
- var videoElement = new CKEDITOR.dom.element('video');
- // Set the controls attribute.
- if (this.data.controls) {
- videoElement.setAttribute('controls', 'controls');
- }
- // Append it to the container of the plugin.
- this.element.append(videoElement);
- }
- this.element.getChild(0).setAttribute('src', this.data.src);
- if (this.data.width) this.element.getChild(0).setAttribute('width', this.data.width);
- if (this.data.height) this.element.getChild(0).setAttribute('height', this.data.height);
-
- if (this.data.responsive) {
- this.element.setAttribute("data-responsive", this.data.responsive);
- this.element.getChild(0).setStyle('max-width', '100%');
- this.element.getChild(0).setStyle('height', 'auto');
- } else {
- this.element.removeAttribute("data-responsive");
- this.element.getChild(0).removeStyle('max-width');
- this.element.getChild(0).removeStyle('height');
- }
-
- if (this.data.poster) this.element.getChild(0).setAttribute('poster', this.data.poster);
- }
-
- this.element.removeStyle('float');
- this.element.removeStyle('margin-left');
- this.element.removeStyle('margin-right');
-
- if (this.data.align === 'none') {
- this.element.removeStyle('text-align');
- } else {
- this.element.setStyle('text-align', this.data.align);
- }
-
- if (this.data.align === 'left') {
- this.element.setStyle('float', this.data.align);
- this.element.setStyle('margin-right', '10px');
- } else if (this.data.align === 'right') {
- this.element.setStyle('float', this.data.align);
- this.element.setStyle('margin-left', '10px');
- }
-
- if (this.element.getChild(0)) {
- if (this.data.autoplay === 'yes') {
- this.element.getChild(0).setAttribute('autoplay', 'autoplay');
- } else {
- this.element.getChild(0).removeAttribute('autoplay');
- }
-
- if (this.data.loop === 'yes') {
- this.element.getChild(0).setAttribute('loop', 'loop');
- } else {
- this.element.getChild(0).removeAttribute('loop');
- }
-
- if (this.data.allowdownload === 'yes') {
- this.element.getChild(0).removeAttribute('controlslist');
- } else {
- this.element.getChild(0).setAttribute('controlslist', 'nodownload');
- }
-
- if (this.data.advisorytitle) {
- this.element.getChild(0).setAttribute('title', this.data.advisorytitle);
- } else {
- this.element.getChild(0).removeAttribute('title');
- }
-
- if (this.data.controls) {
- this.element.getChild(0).setAttribute('controls', 'controls');
- } else {
- this.element.getChild(0).removeAttribute('controls');
- }
- }
- }
- });
-
- if (editor.contextMenu) {
- editor.addMenuGroup('html5videoGroup');
- editor.addMenuItem('html5videoPropertiesItem', {
- label: editor.lang.html5video.videoProperties,
- icon: 'html5video',
- command: 'html5video',
- group: 'html5videoGroup'
- });
-
- editor.contextMenu.addListener(function (element) {
- if (element &&
- element.getChild(0) &&
- element.getChild(0).hasClass &&
- element.getChild(0).hasClass('ckeditor-html5-video')) {
- return { html5videoPropertiesItem: CKEDITOR.TRISTATE_OFF };
- }
- });
- }
-
- CKEDITOR.dialog.add('html5video', this.path + 'dialogs/html5video.js');
- }
- });
|