From 723024202e08267c61b703654b200a1b9b3f549a Mon Sep 17 00:00:00 2001
From: aignatov-bio <47317017+aignatov-bio@users.noreply.github.com>
Date: Fri, 22 Mar 2019 09:27:50 +0100
Subject: [PATCH] Image editor improvements [SCI - 3158, 3160, 3156, 3154]
(#1563)
* Improvments SCI - 3158, 3160, 3156, 3154
---
.../javascripts/sitewide/file_preview.js | 413 ++++++++++++++++++
.../javascripts/sitewide/file_preview.js.erb | 262 -----------
package.json | 6 +-
3 files changed, 416 insertions(+), 265 deletions(-)
create mode 100644 app/assets/javascripts/sitewide/file_preview.js
delete mode 100644 app/assets/javascripts/sitewide/file_preview.js.erb
diff --git a/app/assets/javascripts/sitewide/file_preview.js b/app/assets/javascripts/sitewide/file_preview.js
new file mode 100644
index 000000000..2305061eb
--- /dev/null
+++ b/app/assets/javascripts/sitewide/file_preview.js
@@ -0,0 +1,413 @@
+/* eslint no-underscore-dangle: ["error", { "allowAfterThis": true }]*/
+/* eslint no-use-before-define: ["error", { "functions": false }]*/
+/* global fabric tui animateSpinner setupAssetsLoading I18n*/
+//= require assets
+
+(function(global) {
+ 'use strict';
+
+ global.initPreviewModal = function initPreviewModal() {
+ var name;
+ var url;
+ var downloadUrl;
+ $('.file-preview-link').off('click');
+ $('.file-preview-link').click(function(e) {
+ e.preventDefault();
+ name = $(this).find('p').text();
+ url = $(this).data('preview-url');
+ downloadUrl = $(this).attr('href');
+ openPreviewModal(name, url, downloadUrl);
+ });
+ };
+
+ // Adding rotation icon
+ function updateFabricControls() {
+ fabric.Object.prototype.drawBorders = function(ctx, styleOverride = {}) {
+ var wh = this._calculateCurrentDimensions();
+ var strokeWidth = 1 / this.borderScaleFactor;
+ var width = wh.x + strokeWidth;
+ var height = wh.y + strokeWidth;
+ var drawRotatingPoint = typeof styleOverride.hasRotatingPoint !== 'undefined'
+ ? styleOverride.hasRotatingPoint : this.hasRotatingPoint;
+ var hasControls = typeof styleOverride.hasControls !== 'undefined'
+ ? styleOverride.hasControls : this.hasControls;
+ var rotatingPointOffset = typeof styleOverride.rotatingPointOffset !== 'undefined'
+ ? styleOverride.rotatingPointOffset : this.rotatingPointOffset;
+ var rotateHeight = -height / 2;
+ ctx.save();
+ ctx.strokeStyle = styleOverride.borderColor || this.borderColor;
+ this._setLineDash(ctx, styleOverride.borderDashArray || this.borderDashArray, null);
+ ctx.strokeRect(
+ -width / 2,
+ -height / 2,
+ width,
+ height
+ );
+ if (drawRotatingPoint && this.isControlVisible('mtr') && hasControls) {
+ ctx.beginPath();
+ ctx.moveTo(0, rotateHeight);
+ ctx.lineTo(0, rotateHeight - rotatingPointOffset + 10);
+ ctx.stroke();
+ }
+ ctx.restore();
+ return this;
+ };
+
+ fabric.Object.prototype.drawControls = function(ctx) {
+ var rotationImage = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAHEklEQVRoge2bYYgdVxXHf/8lhGUJYQ1hKSFIiDXUEoq+e1lClLgfRLSGfNGSVvxgVIyiIqGWEhfpp6IBayiSBJQiQo3YKEQqsQSpmkopYWYJIUSIEkrYhhiWEEIoyxLe3w8zb53Mm/fezNvdlhf7h8feeTv3zvnPPffcc885T8b8P2Hs/RbgvcYHhB90rFurgWOIY8A4sNN2S9JHbG+VtBEYt70E3AFuSvoXcDH/3E7SpL1WcqnKaMUQ1wFjSZosNRkshrgR2A60gKdsR0mTALaRxID2InBR0ingHHA1SZOFIblVootwDHEn8ITtDZJ+naTJxUGDxBAngN2290uaAbaxMu1p274u6S3gN8DfkjS5vYLxltFFOLTCG5KmyQT+h+1n0rn0fFXnXG132n4mJ7qFVbYLtm9KOg8cJSO+InW/j3AMcQr4T+meS8DTSZqc7XwRWmFM0hbbX5U0S7ZW1xpt4DhwwvaVdC69N8wg5dmoUsOdwNEY4nTnC0m7gBNNyNpeaXsM+BbwS0n76jyzCuUZ3gK8UxY0NyrnbT8taQx4yfb2vP1+4AbwLHAySZNGMz1Q4I4FBaYl/QH4M/BwsW+dWVplPAT8HPhhaIWNTTo2taRTnUbhRdRpt4EFYD7/e8/2OmBS0pacQFNZNgKHJC0BP6nbaaBKrwCLwHXgNeBV4Jrtd4EloJ2/jPXABBnhL9h+XNJ2mhnBO7YPSDpdx4J3Ebb9jqTltdvLSRggwAXgmKTXkjS5U1fyGOI4sAf4PjANbK7Tz/ZVSV8Hzg0i3aVGHULlv+V2nwcfk/RKkibzdYQtIkmTReBsDDEB9gHfAeIgL03SNuAQ8G+yZdMTPY1WQ4PTBi5LegI4PgzZIpI0uQW8DOwHzkjqa4ltjwGfBb40aOyh1nDFW75r+2A6l54c1LcpYoibbf8I+BqwobPMAIrt/PqW7U+kc+m1XuPV2kfLW02Fmm+QNBtDbDWjMxhJmixI+rGkl4vLrNzOrzcBB0Mr9OQ1kHC/9VO8B3gUOBFaYXfuY68akjS5YXsWqPTpS7Luk7Sz1z1dgpXXbsP9dlrSMWCmn2DDIJ1Lb9k+BLxd/l9RxYEdwN78iNuFoYzWAM/q42S+d8+3PCwkXQBO5ufm4vdFOdYDn6TgJBXRRbhqO+p1T5/2Y8ALMcStg0g0QZIm7wK/I9t+llGx1HaTncm7UCa8SLbFDEQN//kR2zvqjNUESZpclHSm+F2F5Z4kI92F+wjbvg0kgx5aM1wzD1xpyKcuftt5XgcVmvbpqo73Lex0Lm3HEA8AB4CHbY/12/f6tBckvUjmS68FLgJXc7+7Fyq3yMog3igghvgSmTPSz8B+KJ1L74uFjXJc+p9Fzav6AB8udxplwm+XnSDb97U7IeIiRpaw7eVjZ/EYWzrSbij3G1nCRTQJK40s4Txl02lT1QbulvuNLGHb22rc05WtGFnCkj5WMlDLRqvgL3Sdi9cse7iWyI+fM/3CUcD18h4MI0qY7HCy7GX18ATnqjqOqko/VbyoMlqS/l7VceQIh1Z4DHi83z2SbgNvVv1vpAjHECck7Sc72PTcc22/RYXBghEjTLZ2nwTGywGKwvWSpDfIEm5dGMpo5Xnk7wEztr8t6fJa1mXkz9xk+0VJ23u4kR1cAc70yio2nuG8vOE54AfAp/Kg3aNDcGjyzIeA5/PKhL7ZENt/IjsvV6IR4RjiBtuHbX+D/yW8dtk+Elph1cM5+TM3A4dtfwWq/ebCer4l6UQ/basdAMgfPAt8E5gohXPaki6TRUou5TmiFSEPs24lywN/jsHLbxGYTdLkZ/1uqjXDeVbvObKSgwnoUqsxstKIU7a/G1qh6+DdBKEVNtn+MnAK2Mtgsm3bfwFeGTR2rRkOrfAZSa9SL297F7hANjNnm5QbhVZYL2mP7UP5eq2VLgWuArXSpbUIxxB3AH8lK0uqhbzSbh44C/wRuCZpOSGe39ZJiE8Bnwf22t4OTPTLTZfadyQdAJonxPshhvgkcIQ8TlRTmM7W0Za0YHs+z/AtkS2nSWXlT1vI1bZXlLRH+7akI0ma1C55aLIPn3ZWnfe87am6ZHMBx4ApSVMdgYvod92nfYesWO14Aw7NwrT5sWyP7V+RzXTtba3JCxqUsZR0A3jW9smmBWpDxaVjiDPAYTLy44MEXS3YvicpAV5I0uT3w4wxlC9t+xxwEPipCuUI/TygvN9K2m1JvyCzxqeHkRtWmHnIVXyarKBkD1n50WrP9E3biaSjtl9P59LVKy4dFrnLOaOsqGUPPdZ3gzXbJjvtvEmWOHt9zcqHV4IY4iRZWeIu4ItAy3aT0sBF4JKkU7bPSbqapMnNVROQNUym5eq+EXiErCrgo2QqP0n2E4B7+dZyEyj+BODWe/4TgAcZoxbxWDE+IPyg47+vLtaj5o1LZgAAAABJRU5ErkJggg==';
+ var rotate = new Image();
+ var rotateLeft;
+ var rotateTop;
+ var wh = this._calculateCurrentDimensions();
+ var width = wh.x;
+ var height = wh.y;
+ var scaleOffset = this.cornerSize;
+ var left = -(width + scaleOffset) / 2;
+ var top = -(height + scaleOffset) / 2;
+ var methodName = this.transparentCorners ? 'stroke' : 'fill';
+
+ if (!this.hasControls) {
+ return this;
+ }
+ ctx.save();
+ ctx.strokeStyle = this.cornerColor;
+ ctx.fillStyle = this.cornerColor;
+ if (!this.transparentCorners) {
+ ctx.strokeStyle = this.cornerStrokeColor;
+ }
+ this._setLineDash(ctx, this.cornerDashArray, null);
+
+ // top-left
+ this._drawControl(
+ 'tl',
+ ctx,
+ methodName,
+ left,
+ top
+ );
+
+ // top-right
+ this._drawControl(
+ 'tr',
+ ctx,
+ methodName,
+ left + width,
+ top
+ );
+
+ // bottom-left
+ this._drawControl(
+ 'bl',
+ ctx,
+ methodName,
+ left,
+ top + height
+ );
+
+ // bottom-right
+ this._drawControl(
+ 'br',
+ ctx,
+ methodName,
+ left + width,
+ top + height
+ );
+
+ if (!this.get('lockUniScaling')) {
+ // middle-top
+ this._drawControl(
+ 'mt',
+ ctx,
+ methodName,
+ left + width / 2,
+ top
+ );
+
+ // middle-bottom
+ this._drawControl(
+ 'mb',
+ ctx,
+ methodName,
+ left + width / 2,
+ top + height
+ );
+
+ // middle-right
+ this._drawControl(
+ 'mr',
+ ctx,
+ methodName,
+ left + width,
+ top + height / 2
+ );
+
+ // middle-left
+ this._drawControl(
+ 'ml',
+ ctx,
+ methodName,
+ left,
+ top + height / 2
+ );
+ }
+ // middle-top-rotate
+ if (this.hasRotatingPoint) {
+ rotate.src = rotationImage;
+ rotateLeft = left + width / 2 - 6;
+ rotateTop = top - this.rotatingPointOffset - 6;
+ ctx.drawImage(rotate, rotateLeft, rotateTop, 32, 32);
+ }
+ ctx.restore();
+
+ return this;
+ };
+ }
+
+ function initImageEditor(data) {
+ var imageEditor;
+ var blackTheme = {
+ 'common.bi.image': '',
+ 'common.bisize.width': '0',
+ 'common.bisize.height': '0',
+ 'common.backgroundImage': 'none',
+ 'common.backgroundColor': '#1e1e1e',
+ 'common.border': '0px',
+
+ // header
+ 'header.backgroundImage': 'none',
+ 'header.backgroundColor': 'transparent',
+ 'header.border': '0px',
+
+ // load button
+ 'loadButton.backgroundColor': '#fff',
+ 'loadButton.border': '1px solid #ddd',
+ 'loadButton.color': '#222',
+ 'loadButton.fontFamily': '\'Noto Sans\', sans-serif',
+ 'loadButton.fontSize': '12px',
+
+ // download button
+ 'downloadButton.backgroundColor': '#fdba3b',
+ 'downloadButton.border': '1px solid #fdba3b',
+ 'downloadButton.color': '#fff',
+ 'downloadButton.fontFamily': '\'Noto Sans\', sans-serif',
+ 'downloadButton.fontSize': '12px',
+
+ // main icons
+ 'menu.normalIcon.path': '/images/icon-d.svg',
+ 'menu.normalIcon.name': 'icon-d',
+ 'menu.activeIcon.path': '/images/icon-b.svg',
+ 'menu.activeIcon.name': 'icon-b',
+ 'menu.disabledIcon.path': '/images/icon-a.svg',
+ 'menu.disabledIcon.name': 'icon-a',
+ 'menu.hoverIcon.path': '/images/icon-c.svg',
+ 'menu.hoverIcon.name': 'icon-c',
+ 'menu.iconSize.width': '24px',
+ 'menu.iconSize.height': '24px',
+
+ // submenu primary color
+ 'submenu.backgroundColor': '#1e1e1e',
+ 'submenu.partition.color': '#3c3c3c',
+
+ // submenu icons
+ 'submenu.normalIcon.path': '/images/icon-d.svg',
+ 'submenu.normalIcon.name': 'icon-d',
+ 'submenu.activeIcon.path': '/images/icon-c.svg',
+ 'submenu.activeIcon.name': 'icon-c',
+ 'submenu.iconSize.width': '32px',
+ 'submenu.iconSize.height': '32px',
+
+ // submenu labels
+ 'submenu.normalLabel.color': '#8a8a8a',
+ 'submenu.normalLabel.fontWeight': 'lighter',
+ 'submenu.activeLabel.color': '#fff',
+ 'submenu.activeLabel.fontWeight': 'lighter',
+
+ // checkbox style
+ 'checkbox.border': '0px',
+ 'checkbox.backgroundColor': '#fff',
+
+ // range style
+ 'range.pointer.color': '#fff',
+ 'range.bar.color': '#666',
+ 'range.subbar.color': '#d1d1d1',
+
+ 'range.disabledPointer.color': '#414141',
+ 'range.disabledBar.color': '#282828',
+ 'range.disabledSubbar.color': '#414141',
+
+ 'range.value.color': '#fff',
+ 'range.value.fontWeight': 'lighter',
+ 'range.value.fontSize': '11px',
+ 'range.value.border': '1px solid #353535',
+ 'range.value.backgroundColor': '#151515',
+ 'range.title.color': '#fff',
+ 'range.title.fontWeight': 'lighter',
+
+ // colorpicker style
+ 'colorpicker.button.border': '1px solid #1e1e1e',
+ 'colorpicker.title.color': '#fff'
+ };
+
+ imageEditor = new tui.ImageEditor('#tui-image-editor', {
+ includeUI: {
+ loadImage: {
+ path: data['download-url'],
+ name: data.filename
+ },
+ theme: blackTheme,
+ initMenu: 'draw',
+ menuBarPosition: 'bottom'
+ },
+ cssMaxWidth: 700,
+ cssMaxHeight: 500,
+ selectionStyle: {
+ cornerSize: 20,
+ rotatingPointOffset: 70,
+ borderColor: '#333',
+ cornerColor: '#333',
+ cornerStyle: 'circle',
+ borderScaleFactor: 3
+
+ },
+ usageStatistics: false
+ });
+
+ $('#fileEditModal').find('.file-name').text('Editing: ' + data.filename);
+ $('#fileEditModal').modal('show');
+
+ $('.tui-image-editor-header').hide();
+
+ $('.file-save-link').off().click(function(ev) {
+ var dataUpload = new FormData();
+ ev.preventDefault();
+ ev.stopPropagation();
+ dataUpload.append('image', imageEditor.toDataURL());
+ animateSpinner(null, true);
+ $.ajax({
+ type: 'POST',
+ url: '/files/' + data.id + '/update_image',
+ data: dataUpload,
+ contentType: false,
+ processData: false,
+ success: function(res) {
+ $('#modal_link' + data.id).parent().html(res.html);
+ setupAssetsLoading();
+ }
+ }).done(function() {
+ animateSpinner(null, false);
+ imageEditor.destroy();
+ imageEditor = {};
+ $('#tui-image-editor').html('');
+ $('#fileEditModal').modal('hide');
+ });
+ });
+
+ window.onresize = function() {
+ imageEditor.ui.resizeEditor();
+ };
+ }
+
+ function openPreviewModal(name, url, downloadUrl) {
+ var modal = $('#filePreviewModal');
+ updateFabricControls();
+ $.ajax({
+ url: url,
+ type: 'GET',
+ dataType: 'json',
+ success: function(data) {
+ var link = modal.find('.file-download-link');
+ modal.find('.file-preview-container').empty();
+ modal.find('.file-wopi-controls').empty();
+ if (Object.prototype.hasOwnProperty.call(data, 'wopi-controls')) {
+ modal.find('.file-wopi-controls').html(data['wopi-controls']);
+ }
+ link.attr('href', downloadUrl);
+ link.attr('data-no-turbolink', true);
+ link.attr('data-status', 'asset-present');
+ if (data.type === 'image') {
+ if (data.processing) {
+ animateSpinner('.file-preview-container', true);
+ } else {
+ animateSpinner('.file-preview-container', false);
+ modal.find('.file-preview-container')
+ .append($('')
+ .attr('src', data['large-preview-url'])
+ .attr('alt', name)
+ .click(function(ev) {
+ ev.stopPropagation();
+ }));
+ if (data.editable) {
+ modal.find('.file-edit-link').css('display', '');
+ modal.find('.file-edit-link').off().click(function(ev) {
+ ev.preventDefault();
+ ev.stopPropagation();
+ modal.modal('hide');
+ initImageEditor(data);
+ });
+ } else {
+ modal.find('.file-edit-link').css('display', 'none');
+ }
+ }
+ } else {
+ modal.find('.file-preview-container').html(data['preview-icon']);
+ }
+ if (data.processing) {
+ checkFileReady(url, modal);
+ }
+ modal.find('.file-name').text(name);
+ modal.find('.preview-close').click(function() {
+ modal.modal('hide');
+ });
+ modal.modal();
+ modal.find('a[disabled=disabled]').click(function(ev) {
+ ev.preventDefault();
+ });
+ $('.modal-backdrop').last().css('z-index', modal.css('z-index') - 1);
+ },
+ error: function() {
+ // TODO
+ }
+ });
+ }
+
+ function checkFileReady(url, modal) {
+ $.get(url, function(data) {
+ if (data.processing) {
+ $('.file-download-link')
+ .addClass('disabled-with-click-events')
+ .attr(
+ 'title',
+ I18n.t('general.file.processing')
+ )
+ .click(function(ev) {
+ ev.preventDefault();
+ ev.stopPropagation();
+ });
+ setTimeout(function() {
+ checkFileReady(url, modal);
+ }, 10000);
+ } else {
+ if (data.type === 'image') {
+ modal.find('.file-preview-container').empty();
+ modal.find('.file-preview-container')
+ .append($('')
+ .attr('src', data['large-preview-url'])
+ .attr('alt', data.filename)
+ .click(function(ev) {
+ ev.stopPropagation();
+ }));
+ modal.find('.file-name').text(data.filename);
+ modal.find('.modal-body').click(function() {
+ modal.modal('hide');
+ });
+ modal.modal();
+ $('.modal-backdrop').last().css('z-index', modal.css('z-index') - 1);
+ }
+ $('.file-download-link')
+ .removeClass('disabled-with-click-events')
+ .removeAttr('title')
+ .off();
+ }
+ });
+ }
+}(window));
diff --git a/app/assets/javascripts/sitewide/file_preview.js.erb b/app/assets/javascripts/sitewide/file_preview.js.erb
deleted file mode 100644
index f6dcbafb5..000000000
--- a/app/assets/javascripts/sitewide/file_preview.js.erb
+++ /dev/null
@@ -1,262 +0,0 @@
-
-//= require assets
-
-(function(global) {
- 'use strict';
-
- global.initPreviewModal = function initPreviewModal() {
- var name;
- var url;
- var downloadUrl;
- $('.file-preview-link').off('click');
- $('.file-preview-link').click(function(e) {
- e.preventDefault();
- name = $(this).find('p').text();
- url = $(this).data('preview-url');
- downloadUrl = $(this).attr('href');
- openPreviewModal(name, url, downloadUrl);
- });
- }
-
- function initImageEditor(data) {
- var imageEditor;
- var blackTheme = {
- 'common.bi.image': '',
- 'common.bisize.width': '0',
- 'common.bisize.height': '0',
- 'common.backgroundImage': 'none',
- 'common.backgroundColor': '#1e1e1e',
- 'common.border': '0px',
-
- // header
- 'header.backgroundImage': 'none',
- 'header.backgroundColor': 'transparent',
- 'header.border': '0px',
-
- // load button
- 'loadButton.backgroundColor': '#fff',
- 'loadButton.border': '1px solid #ddd',
- 'loadButton.color': '#222',
- 'loadButton.fontFamily': '\'Noto Sans\', sans-serif',
- 'loadButton.fontSize': '12px',
-
- // download button
- 'downloadButton.backgroundColor': '#fdba3b',
- 'downloadButton.border': '1px solid #fdba3b',
- 'downloadButton.color': '#fff',
- 'downloadButton.fontFamily': '\'Noto Sans\', sans-serif',
- 'downloadButton.fontSize': '12px',
-
- // main icons
- 'menu.normalIcon.path': '/images/icon-d.svg',
- 'menu.normalIcon.name': 'icon-d',
- 'menu.activeIcon.path': '/images/icon-b.svg',
- 'menu.activeIcon.name': 'icon-b',
- 'menu.disabledIcon.path': '/images/icon-a.svg',
- 'menu.disabledIcon.name': 'icon-a',
- 'menu.hoverIcon.path': '/images/icon-c.svg',
- 'menu.hoverIcon.name': 'icon-c',
- 'menu.iconSize.width': '24px',
- 'menu.iconSize.height': '24px',
-
- // submenu primary color
- 'submenu.backgroundColor': '#1e1e1e',
- 'submenu.partition.color': '#3c3c3c',
-
- // submenu icons
- 'submenu.normalIcon.path': '/images/icon-d.svg',
- 'submenu.normalIcon.name': 'icon-d',
- 'submenu.activeIcon.path': '/images/icon-c.svg',
- 'submenu.activeIcon.name': 'icon-c',
- 'submenu.iconSize.width': '32px',
- 'submenu.iconSize.height': '32px',
-
- // submenu labels
- 'submenu.normalLabel.color': '#8a8a8a',
- 'submenu.normalLabel.fontWeight': 'lighter',
- 'submenu.activeLabel.color': '#fff',
- 'submenu.activeLabel.fontWeight': 'lighter',
-
- // checkbox style
- 'checkbox.border': '0px',
- 'checkbox.backgroundColor': '#fff',
-
- // range style
- 'range.pointer.color': '#fff',
- 'range.bar.color': '#666',
- 'range.subbar.color': '#d1d1d1',
-
- 'range.disabledPointer.color': '#414141',
- 'range.disabledBar.color': '#282828',
- 'range.disabledSubbar.color': '#414141',
-
- 'range.value.color': '#fff',
- 'range.value.fontWeight': 'lighter',
- 'range.value.fontSize': '11px',
- 'range.value.border': '1px solid #353535',
- 'range.value.backgroundColor': '#151515',
- 'range.title.color': '#fff',
- 'range.title.fontWeight': 'lighter',
-
- // colorpicker style
- 'colorpicker.button.border': '1px solid #1e1e1e',
- 'colorpicker.title.color': '#fff'
- };
-
- imageEditor = new tui.ImageEditor('#tui-image-editor', {
- includeUI: {
- loadImage: {
- path: data['download-url'],
- name: data.filename
- },
- theme: blackTheme, // or whiteTheme
- menu: ['draw', 'text', 'shape', 'crop', 'flip', 'icon', 'filter'],
- initMenu: 'draw',
- menuBarPosition: 'bottom'
- },
- cssMaxWidth: 700,
- cssMaxHeight: 500,
- selectionStyle: {
- cornerSize: 20,
- rotatingPointOffset: 70
- },
- usageStatistics: false
- });
-
- $('#fileEditModal').find('.file-name').text('Editing: ' + data.filename);
- $('#fileEditModal').modal('show');
-
- $('.tui-image-editor-header').hide();
-
- $('.file-save-link').off().click(function(ev) {
- var dataUpload = new FormData();
- ev.preventDefault();
- ev.stopPropagation();
- dataUpload.append('image', imageEditor.toDataURL());
- animateSpinner(null, true);
- $.ajax({
- type: 'POST',
- url: '/files/' + data.id + '/update_image',
- data: dataUpload,
- contentType: false,
- processData: false,
- success: function(res) {
- $('#modal_link' + data.id).parent().html(res.html);
- setupAssetsLoading();
- }
- }).done(function() {
- animateSpinner(null, false);
- imageEditor.destroy();
- imageEditor = {};
- $('#tui-image-editor').html('');
- $('#fileEditModal').modal('hide');
- });
- });
-
- window.onresize = function() {
- imageEditor.ui.resizeEditor();
- };
- }
-
- function openPreviewModal(name, url, downloadUrl) {
- var modal = $('#filePreviewModal');
- $.ajax({
- url: url,
- type: 'GET',
- dataType: 'json',
- success: function(data) {
- modal.find('.file-preview-container').empty();
- modal.find('.file-wopi-controls').empty();
- if (data.hasOwnProperty('wopi-controls')) {
- modal.find('.file-wopi-controls').html(data['wopi-controls']);
- }
- var link = modal.find('.file-download-link');
- link.attr('href', downloadUrl);
- link.attr('data-no-turbolink', true);
- link.attr('data-status', 'asset-present');
- if (data['type'] === 'image') {
- if(data['processing']) {
- animateSpinner('.file-preview-container', true);
- } else {
- animateSpinner('.file-preview-container', false);
- modal.find('.file-preview-container')
- .append($('')
- .attr('src', data['large-preview-url'])
- .attr('alt', name)
- .click(function(ev) {
- ev.stopPropagation();
- }));
- if (data['editable']){
- modal.find('.file-edit-link').css('display','');
- modal.find('.file-edit-link').off().click(function(ev) {
- ev.preventDefault();
- ev.stopPropagation();
- modal.modal('hide');
- initImageEditor(data);
- });
- }else{
- modal.find('.file-edit-link').css('display','none');
- }
- }
- } else {
- modal.find('.file-preview-container').html(data['preview-icon']);
- }
- if(data['processing']) {
- checkFileReady(url, modal);
- }
- modal.find('.file-name').text(name);
- modal.find('.preview-close').click(function() {
- modal.modal('hide');
- });
- modal.modal();
- modal.find('a[disabled=disabled]').click(function(ev){
- ev.preventDefault();
- });
- $('.modal-backdrop').last().css('z-index', modal.css('z-index') - 1);
- },
- error: function(ev) {
- // TODO
- }
- });
- }
-
- function checkFileReady(url, modal) {
- $.get(url, function(data) {
- if(data['processing']) {
- $('.file-download-link')
- .addClass('disabled-with-click-events')
- .attr('title',
- '<%= I18n.t('general.file.processing')%>')
- .click(function(ev) {
- ev.preventDefault();
- ev.stopPropagation();
- });
- setTimeout(function() {
- checkFileReady(url, modal);
- }, 10000);
- } else {
- if(data['type'] === 'image') {
- modal.find('.file-preview-container').empty();
- modal.find('.file-preview-container')
- .append($('')
- .attr('src', data['large-preview-url'])
- .attr('alt', data['filename'])
- .click(function(ev) {
- ev.stopPropagation();
- })
- );
- modal.find('.file-name').text(data['filename']);
- modal.find('.modal-body').click(function() {
- modal.modal('hide');
- });
- modal.modal();
- $('.modal-backdrop').last().css('z-index', modal.css('z-index') - 1);
- }
- $('.file-download-link')
- .removeClass('disabled-with-click-events')
- .removeAttr('title')
- .off();
- }
- })
- }
-})(window);
diff --git a/package.json b/package.json
index 3fada9c7b..6f6838c6a 100644
--- a/package.json
+++ b/package.json
@@ -60,7 +60,7 @@
"compression-webpack-plugin": "^1.1.11",
"css-loader": "^0.28.11",
"extract-text-webpack-plugin": "^3.0.2",
- "fabric": "^1.6.7",
+ "fabric": "1.6.7",
"file-loader": "^0.11.2",
"glob": "^7.1.2",
"immutability-helper": "^2.7.1",
@@ -101,9 +101,9 @@
"shortid": "^2.2.12",
"style-loader": "^0.18.2",
"styled-components": "^2.4.1",
- "tui-code-snippet": "^1.4.0",
+ "tui-code-snippet": "^1.5.0",
"tui-color-picker": "^2.2.0",
- "tui-image-editor": "^3.2.2",
+ "tui-image-editor": "git://github.com/biosistemika/tui.image-editor",
"webpack": "^3.12.0",
"webpack-manifest-plugin": "^1.3.2",
"webpack-merge": "^4.1.3"