@kademi/keditor
Version:
KEditor is a jQuery plugin which provides a content editor with drag n drop, configurable contents
148 lines (123 loc) • 6.14 kB
JavaScript
import KEditor from 'keditor';
KEditor.components['video'] = {
init: function (contentArea, container, component, keditor) {
let componentContent = component.children('.keditor-component-content');
let video = componentContent.find('video');
if (!video.parent().is('.video-wrapper')) {
video.wrap('<div class="video-wrapper"></div>');
}
},
getContent: function (component, keditor) {
let componentContent = component.children('.keditor-component-content');
let video = componentContent.find('video');
video.unwrap();
return componentContent.html();
},
settingEnabled: true,
settingTitle: 'Video Settings',
initSettingForm: function (form, keditor) {
form.append(`
<form class="form-horizontal">
<div class="form-group">
<label for="video-input" class="col-sm-12">Video file</label>
<div class="col-sm-12">
<div class="video-toolbar">
<a href="#" class="btn-video-input btn btn-sm btn-primary"><i class="fa fa-upload"></i></a>
<input class="video-input" type="file" style="display: none" />
</div>
</div>
</div>
<div class="form-group">
<label for="video-autoplay" class="col-sm-12">Autoplay</label>
<div class="col-sm-12">
<input type="checkbox" class="video-autoplay" />
</div>
</div>
<div class="form-group">
<label for="video-loop" class="col-sm-12">Loop</label>
<div class="col-sm-12">
<input type="checkbox" class="video-loop" />
</div>
</div>
<div class="form-group">
<label for="video-controls" class="col-sm-12">Show Controls</label>
<div class="col-sm-12">
<input type="checkbox" class="video-controls" checked />
</div>
</div>
<div class="form-group">
<label for="" class="col-sm-12">Ratio</label>
<div class="col-sm-12">
<input type="radio" name="video-radio" class="video-ratio" value="4/3" checked /> 4:3
</div>
<div class="col-sm-12">
<input type="radio" name="video-radio" class="video-ratio" value="16/9" /> 16:9
</div>
</div>
<div class="form-group">
<label for="video-width" class="col-sm-12">Width (px)</label>
<div class="col-sm-12">
<input type="number" class="video-width form-control" min="320" max="1920" value="320" />
</div>
</div>
</form>
`);
let fileInput = form.find('.video-input');
form.find('.btn-video-input').on('click', function (e) {
e.preventDefault();
fileInput.trigger('click');
});
fileInput.on('change', function () {
let file = this.files[0];
let video = keditor.getSettingComponent().find('video');
if (/video/.test(file.type)) {
// Todo: Upload to your server :)
video.attr('src', URL.createObjectURL(file));
} else {
alert('Your selected file is not an video file!');
}
});
let autoplayToggle = form.find('.video-autoplay');
autoplayToggle.on('click', function () {
let video = keditor.getSettingComponent().find('video');
video.prop('autoplay', this.checked);
});
let loopToggle = form.find('.video-loop');
loopToggle.on('click', function () {
let video = keditor.getSettingComponent().find('video');
video.prop('loop', this.checked);
});
let ratio = form.find('.video-ratio');
ratio.on('click', function () {
let video = keditor.getSettingComponent().find('video');
video.attr('data-ratio', this.value);
form.find('.video-width').trigger('change');
});
let controlToggle = form.find('.video-controls');
controlToggle.on('click', function () {
let video = keditor.getSettingComponent().find('video');
video.prop('controls', this.checked);
});
let videoWidth = form.find('.video-width');
videoWidth.on('change', function () {
let video = keditor.getSettingComponent().find('video');
let currentRatio = video.attr('data-ratio') === '16/9' ? 16 / 9 : 4 / 3;
let height = this.value / currentRatio;
video.attr('width', this.value);
video.attr('height', height);
});
},
showSettingForm: function (form, component, keditor) {
let video = component.find('video');
let autoplayToggle = form.find('.video-autoplay');
autoplayToggle.prop('checked', video.prop('autoplay'));
let loopToggle = form.find('.video-loop');
loopToggle.prop('checked', video.prop('loop'));
let ratio = form.find('.video-ratio');
ratio.prop('checked', false).filter('[value="' + video.attr('data-ratio') + '"]').prop('checked', true);
let controlToggle = form.find('.video-controls');
controlToggle.prop('checked', video.prop('controls'));
let videoWidth = form.find('.video-width');
videoWidth.val(video.attr('width'));
}
};