aboutsummaryrefslogtreecommitdiff
path: root/public/assets/javascripts/ckeditor/plugins/studip-upload/plugin.js
diff options
context:
space:
mode:
Diffstat (limited to 'public/assets/javascripts/ckeditor/plugins/studip-upload/plugin.js')
-rw-r--r--public/assets/javascripts/ckeditor/plugins/studip-upload/plugin.js233
1 files changed, 0 insertions, 233 deletions
diff --git a/public/assets/javascripts/ckeditor/plugins/studip-upload/plugin.js b/public/assets/javascripts/ckeditor/plugins/studip-upload/plugin.js
deleted file mode 100644
index aed25f4..0000000
--- a/public/assets/javascripts/ckeditor/plugins/studip-upload/plugin.js
+++ /dev/null
@@ -1,233 +0,0 @@
-CKEDITOR.plugins.add('studip-upload', {
- icons: 'upload',
- hidpi: true,
- lang: 'de,en',
- init: function(editor){
- var lang = editor.lang['studip-upload'];
- // utilities
- var isString = function(object) {
- return (typeof object) === 'string';
- },
- isImage = function(mime_type){
- return isString(mime_type) && mime_type.match('^image');
- },
- isSVG = function(mime_type){
- return isString(mime_type) && mime_type === 'image/svg+xml';
- },
- insertNode = function($node){
- editor.insertHtml($('<div>').append($node).html() + ' ');
- },
- insertImage = function(file){
- insertNode($('<img />').attr({
- src: file.url,
- alt: file.name,
- title: file.name
- }));
- },
- insertLink = function(file){
- insertNode($('<a>').attr({
- href: file.url,
- type: file.type,
- target: '_blank',
- rel: 'nofollow'
- }).append(file.name));
- },
- insertFile = function(file){
- // NOTE StudIP sends SVGs as application/octet-stream
- if (isImage(file.type) && !isSVG(file.type)) {
- insertImage(file);
- } else {
- insertLink(file);
- }
- },
- //Ajax-call for img-upload via copy paste
- uploadFromBase64 = function(studipUpload_url, formDataToUpload, node) {
- $.ajax({
- url: studipUpload_url,
- data: formDataToUpload,
- type:"POST",
- contentType:false,
- async: false,
- processData:false,
- cache:false,
- dataType:"json",
- error:function(err){
- console.error(err);
- },
- success: function(data) {
- if (data.files.length > 0) {
- jQuery(node).attr('alt', data.files[0].name);
- jQuery(node).attr('src', data.files[0].url);
- }
- }
- });
- },
- convertSrcDataToBlob = function (src_data) {
- //Split the data by the first comma, then check if the
- //string base64 is in the first part. If so, get the mime type
- //and decode the base64 data of the second part.
- var data_parts = src_data.split(',', 2);
- if (data_parts[0].indexOf('base64') === -1) {
- //We cannot continue.
- return false;
- }
- var mime_type = data_parts[0].match(/data\:([^;]*)\;/)[1];
- if (!mime_type) {
- //We cannot continue.
- return false;
- }
- if ((mime_type != 'image/png') && (mime_type != 'image/jpeg')) {
- //We do not serve such mime types here!
- return false;
- }
- var blob = atob(data_parts[1]);
- if (!blob) {
- //There are no data in blob.
- return false;
- }
- var uint8_blob = new Uint8Array(blob.length);
- if (!uint8_blob) {
- //No uint8 data can be created from the blob.
- return false;
- }
- for (var i = 0; i < blob.length; i++) {
- uint8_blob[i] = blob.charCodeAt(i);
- }
- //Now the binary data is in the correct format.
- return new Blob([uint8_blob], {type: mime_type});
- },
- extractAndConvertSrcAttribute = function (node) {
- var src_attr = jQuery(node).attr('src');
- if (src_attr) {
- var blob = convertSrcDataToBlob(src_attr);
- if (blob === false) {
- //Leave the element as it is.
- return;
- } else {
- var form_data_to_upload = new FormData();
- form_data_to_upload.append("files[]", blob);
- uploadFromBase64(editor.config.studipUpload_url, form_data_to_upload, node);
- }
- }
- },
- handleUploads = function(fileList){
- var errors = [];
- $.each(fileList, function(index, file){
- if (file.url) {
- insertFile(file);
- } else {
- errors.push(file.name + ': ' + file.error);
- }
- });
- if (errors.length) {
- alert(lang.uploadError + '\n\n' + errors.join('\n'));
- }
- };
-
- editor.on('instanceReady', function(event){
- var $container = $(event.editor.container.$);
- // install upload handler
- $('<input>')
- .attr({
- class: 'fileupload',
- type: 'file',
- name: 'files[]',
- multiple: true
- })
- .css('display', 'none')
- .appendTo($container)
- .fileupload({
- dropZone: $container,
- url: editor.config.studipUpload_url,
- singleFileUploads: false,
- dataType: 'json',
- done: function(e, data){
- if (data.result.files) {
- handleUploads(data.result.files);
- } else {
- alert(lang.uploadFailed + '\n\n' + data.result);
- }
- },
- fail: function (e, data) {
- alert(
- lang.uploadFailed + '\n\n'
- + lang.error + ' '
- + data.errorThrown.message
- );
- }
- });
- });
-
- // avoid multiple uploads of the same file via drag and drop
- editor.on('beforeDestroy', function(event){
- $(event.editor.container.$).find('.fileupload').fileupload('destroy');
- });
-
- // ckeditor
- editor.addCommand('upload', { // command handler
- exec: function(editor){
- $(editor.container.$).find('.fileupload').click();
- }
- });
- editor.ui.addButton('upload', { // toolbar button
- label: lang.buttonLabel,
- command: 'upload',
- toolbar: 'insert,80'
- });
-
- //Handle the CKEditor paste event to be able to treat the image
- //uploading different than uploading "usual" HTML.
- editor.on('paste', function(event) {
- //There are two cases, because different browsers behave different
- //when copying data from the clipboard.
- if (event.data.dataValue) {
- var nodes = null;
- try {
- nodes = jQuery(event.data.dataValue);
- } catch (error) {
- //If jQuery cannot build a node from the data that is
- //supposed to be HTML, do nothing.
- return;
- }
- if (nodes.length < 1) {
- //jQuery could not build a node out of the HTML snippet.
- //Do nothing either.
- return;
- }
- jQuery(nodes).each(function(index) {
- if (this.tagName == 'IMG') {
- extractAndConvertSrcAttribute(this);
- } else {
- //Traverse the child nodes and look for img nodes.
- jQuery(this).find('img').each(function (index) {
- extractAndConvertSrcAttribute(this);
- });
- }
- });
- event.data.dataValue = jQuery('<div></div>').append(nodes).html();
- } else {
- if (event.data.dataTransfer._.files.length > 0) {
- for (i = 0; i < event.data.dataTransfer._.files.length; i++) {
- var reader = new FileReader();
- reader.readAsDataURL(event.data.dataTransfer._.files[i]);
- reader.onload = function () {
- var input = reader.result;
- var blob = convertSrcDataToBlob(input);
- if (blob === false) {
- //TODO: Prevent the pasted element from appearing.
- } else {
- var formDataToUpload = new FormData();
- formDataToUpload.append("files[]", blob);
- var node = jQuery('<img>');
- uploadFromBase64(editor.config.studipUpload_url, formDataToUpload, node);
- event.editor.insertHtml(
- jQuery('<div></div>').append(node).html()
- );
- }
- }
- }
- }
- }
- });
- }
-});