diff --git a/app/assets/images/icon_small/marvinjs.svg b/app/assets/images/icon_small/marvinjs.svg
new file mode 100644
index 000000000..bec9ab199
--- /dev/null
+++ b/app/assets/images/icon_small/marvinjs.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/app/assets/javascripts/my_modules/results.js.erb b/app/assets/javascripts/my_modules/results.js.erb
index 2248a5d52..2652654a2 100644
--- a/app/assets/javascripts/my_modules/results.js.erb
+++ b/app/assets/javascripts/my_modules/results.js.erb
@@ -14,7 +14,7 @@
_expandAllResults();
applyCollapseLinkCallBack();
applyCreateWopiFileCallback();
- Assets.setupAssetsLoading();
+ //Assets.setupAssetsLoading();
diff --git a/app/assets/javascripts/protocols/steps.js.erb b/app/assets/javascripts/protocols/steps.js.erb
index 8f5e1fceb..776f4a933 100644
--- a/app/assets/javascripts/protocols/steps.js.erb
+++ b/app/assets/javascripts/protocols/steps.js.erb
@@ -122,6 +122,7 @@
SmartAnnotation.preventPropagation('.atwho-user-popover');
TinyMCE.destroyAll();
DragNDropSteps.clearFiles();
+ MarvinJsEditor.initNewButton('.new-marvinjs-upload-button');
}, 1000);
})
@@ -375,7 +376,6 @@
function initCallBacks() {
applyCreateWopiFileCallback()
- if (typeof(MarvinJsEditor.initNewButton) == 'function') MarvinJsEditor.initNewButton('.new-marvinjs-upload-button');
applyCheckboxCallBack();
applyStepCompletedCallBack();
applyEditCallBack();
@@ -601,16 +601,12 @@
SmartAnnotation.preventPropagation('.atwho-user-popover');
tinyMCE.editors.step_description_textarea.remove();
-
+ MarvinJsEditor.initNewButton('.new-marvinjs-upload-button');
//Rerender tables
$new_step.find("div.step-result-hot-table").each(function() {
$(this).handsontable("render");
});
animateSpinner(null, false);
-<<<<<<< HEAD
- Assets.setupAssetsLoading();
-=======
->>>>>>> activestorage_migration
DragNDropSteps.clearFiles();
FilePreviewModal.init();
$.initTooltips();
diff --git a/app/assets/javascripts/sitewide/file_preview.js b/app/assets/javascripts/sitewide/file_preview.js
index 1f85992c7..f71203a63 100644
--- a/app/assets/javascripts/sitewide/file_preview.js
+++ b/app/assets/javascripts/sitewide/file_preview.js
@@ -25,10 +25,6 @@ var FilePreviewModal = (function() {
name = $(this).find('.attachment-label').text();
url = $(this).data('preview-url');
downloadUrl = $(this).attr('href');
- if ($(this).data('asset-type') === 'marvin-sketch') {
- openMarvinPrevieModal(name, $(this).find('#description'), this);
- return true;
- }
openPreviewModal(name, url, downloadUrl);
return true;
});
@@ -412,7 +408,7 @@ var FilePreviewModal = (function() {
imageEditor = {};
$('#tui-image-editor').html('');
$('#fileEditModal').modal('hide');
- }
+ });
if (data.mode === 'tinymce') {
$.ajax({
@@ -487,6 +483,8 @@ var FilePreviewModal = (function() {
modal.find('.file-edit-link').css('display', 'none');
}
}
+ } else if (data.type === 'marvinjs') {
+ openMarvinEditModal(data, modal);
} else {
modal.find('.file-edit-link').css('display', 'none');
modal.find('.file-preview-container').html(data['preview-icon']);
@@ -570,41 +568,30 @@ var FilePreviewModal = (function() {
modal.find('.file-edit-link').css('display', 'none');
}
- function openMarvinPrevieModal(name, src, sketch) {
- var modal = $('#filePreviewModal');
- var link = modal.find('.file-download-link');
- var target;
- clearPrevieModal();
-
- modal.modal('show');
+ function openMarvinEditModal(data, modal) {
modal.find('.file-preview-container')
- .append($('
').attr('src', '').attr('alt', ''));
- target = modal.find('.file-preview-container').find('img');
- MarvinJsEditor.create_preview(src, target);
- MarvinJsEditor.create_download_link(src, link, name);
- modal.find('.file-name').text(name);
- $.get(sketch.dataset.updateUrl, function(result) {
- if (!readOnly && result.editable) {
- modal.find('.file-edit-link').css('display', '');
- modal.find('.file-edit-link').off().click(function(ev) {
- ev.preventDefault();
+ .append($('
')
+ .attr('src', data['large-preview-url'])
+ .attr('alt', data.name)
+ .click(function(ev) {
ev.stopPropagation();
- modal.modal('hide');
- MarvinJsEditor.open({
- mode: 'edit',
- data: src.val(),
- name: name,
- marvinUrl: sketch.dataset.updateUrl,
- reloadImage: {
- src: src,
- sketch: sketch
- }
- });
+ }));
+ if (!readOnly && 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');
+ MarvinJsEditor.open({
+ mode: 'edit',
+ data: data.description,
+ name: data.name,
+ marvinUrl: data['update-url']
});
- } else {
- modal.find('.file-edit-link').css('display', 'none');
- }
- });
+ });
+ } else {
+ modal.find('.file-edit-link').css('display', 'none');
+ }
}
return Object.freeze({
diff --git a/app/assets/javascripts/sitewide/marvinjs_editor.js b/app/assets/javascripts/sitewide/marvinjs_editor.js
index 1bc76c119..3fa9442e5 100644
--- a/app/assets/javascripts/sitewide/marvinjs_editor.js
+++ b/app/assets/javascripts/sitewide/marvinjs_editor.js
@@ -1,12 +1,15 @@
/* global TinyMCE, ChemicalizeMarvinJs, MarvinJSUtil, I18n, FilePreviewModal, tinymce */
+/* global Results, Comments */
/* eslint-disable no-param-reassign */
/* eslint-disable wrap-iife */
/* eslint-disable no-use-before-define */
+
+
var marvinJsRemoteLastMrv;
var marvinJsRemoteEditor;
var MarvinJsEditor;
-MarvinJsEditor = (function() {
+var MarvinJsEditorApi = (function() {
var marvinJsModal = $('#MarvinJsModal');
var marvinJsContainer = $('#marvinjs-editor');
var marvinJsObject = $('#marvinjs-sketch');
@@ -15,23 +18,6 @@ MarvinJsEditor = (function() {
var marvinJsMode = marvinJsContainer.data('marvinjsMode');
// Facade api actions
-
- var marvinJsExport = (childFunction, options = {}) => {
- if (marvinJsMode === 'remote') {
- remoteExport(childFunction, options);
- } else {
- localExport(childFunction, options);
- }
- };
-
- var marvinJsImage = (childFunction, source, options = {}) => {
- if (marvinJsMode === 'remote') {
- remoteImage(childFunction, source, options);
- } else {
- localImage(childFunction, source, options);
- }
- };
-
var marvinJsExportImage = (childFuction, options = {}) => {
if (marvinJsMode === 'remote') {
remoteExportImage(childFuction, options);
@@ -53,25 +39,6 @@ MarvinJsEditor = (function() {
// Local marvinJS installation
- var localExport = (childFuction, options = {}) => {
- loadEditor().then(function(sketcherInstance) {
- sketcherInstance.exportStructure('mrv').then(function(source) {
- childFuction(source, options);
- });
- });
- };
-
- var localImage = (childFuction, source, options = {}) => {
- loadPackages().then(function(sketcherInstance) {
- sketcherInstance.onReady(function() {
- var exporter = createExporter(sketcherInstance, 'image/jpeg');
- exporter.render(source).then(function(image) {
- childFuction(source, image, options);
- });
- });
- });
- };
-
var localExportImage = (childFuction, options = {}) => {
loadEditor().then(function(sketcherInstance) {
sketcherInstance.exportStructure('mrv').then(function(source) {
@@ -89,10 +56,6 @@ MarvinJsEditor = (function() {
// Web services installation
- var remoteExport = (childFuction, options = {}) => {
- childFuction(marvinJsRemoteLastMrv, options);
- };
-
var remoteImage = (childFuction, source, options = {}) => {
var params = {
carbonLabelVisible: false,
@@ -105,7 +68,7 @@ MarvinJsEditor = (function() {
setTimeout(() => { remoteImage(childFuction, source, options); }, 100);
return false;
}
- marvinJsRemoteEditor.exportMrvToImageDataUri(source, 'jpeg', params).then(function(image) {
+ marvinJsRemoteEditor.exportMrvToImageDataUri(source, 'image/jpeg', params).then(function(image) {
childFuction(source, image, options);
});
return true;
@@ -120,17 +83,18 @@ MarvinJsEditor = (function() {
if (marvinJsMode === 'remote') {
if (config.mode === 'new' || config.mode === 'new-tinymce') {
marvinJsRemoteEditor.importStructure('mrv', emptySketch);
- sketchName.val(I18n.t('marvinjs.new_sketch'));
+ sketchName.val('');
} else if (config.mode === 'edit') {
+ marvinJsRemoteLastMrv = config.data;
marvinJsRemoteEditor.importStructure('mrv', config.data);
sketchName.val(config.name);
} else if (config.mode === 'edit-tinymce') {
- $.get(config.marvinUrl, function(result) {
+ marvinJsRemoteLastMrv = config.data;
+ $.get(config.marvinUrl, { object_type: 'TinyMceAsset' }, function(result) {
marvinJsRemoteEditor.importStructure('mrv', result.description);
sketchName.val(result.name);
});
}
-
marvinJsRemoteEditor.on('molchange', () => {
marvinJsRemoteEditor.exportStructure('mrv').then(function(source) {
marvinJsRemoteLastMrv = source;
@@ -169,42 +133,16 @@ MarvinJsEditor = (function() {
return new marvin.ImageExporter(params);
}
- function assignImage(source, data, target) {
- target.attr('src', data);
- return data;
- }
-
function TinyMceBuildHTML(json) {
var imgstr = "
";
return imgstr;
}
- function saveFunction(source, config) {
- $.post(config.marvinUrl, {
- description: source,
- object_id: config.objectId,
- object_type: config.objectType,
- name: sketchName.val()
- }, function(result) {
- var newAsset;
- if (config.objectType === 'Step') {
- newAsset = $(result.html);
- newAsset.find('.file-preview-link').css('top', '-300px');
- newAsset.addClass('new').prependTo($(config.container));
- setTimeout(function() {
- newAsset.find('.file-preview-link').css('top', '0px');
- }, 200);
- FilePreviewModal.init();
- }
- $(marvinJsModal).modal('hide');
- });
- }
-
- function saveTinymceFunction(source, image, config) {
+ function saveFunction(source, image, config) {
$.post(config.marvinUrl, {
description: source,
object_id: config.objectId,
@@ -212,48 +150,49 @@ MarvinJsEditor = (function() {
name: sketchName.val(),
image: image
}, function(result) {
- var json = tinymce.util.JSON.parse(result);
- config.editor.execCommand('mceInsertContent', false, TinyMceBuildHTML(json));
- TinyMCE.updateImages(config.editor);
- $(marvinJsModal).modal('hide');
- });
- }
-
- function updateFunction(source, config) {
- $.ajax({
- url: config.marvinUrl,
- data: {
- description: source,
- name: sketchName.val()
- },
- dataType: 'json',
- type: 'PUT',
- success: function(json) {
- $(marvinJsModal).modal('hide');
- config.reloadImage.src.val(json.description);
- $(config.reloadImage.sketch).find('.attachment-label').text(json.name);
- MarvinJsEditor.create_preview(
- config.reloadImage.src,
- $(config.reloadImage.sketch).find('img')
- );
+ var newAsset = $(result.html);
+ var json;
+ if (config.objectType === 'Step') {
+ newAsset.find('.file-preview-link').css('top', '-300px');
+ newAsset.addClass('new').prependTo($(config.container));
+ setTimeout(function() {
+ newAsset.find('.file-preview-link').css('top', '0px');
+ }, 200);
+ } else if (config.objectType === 'Result') {
+ newAsset.prependTo($(config.container));
+ Results.expandResult(newAsset);
+ Comments.init();
+ } else if (config.objectType === 'TinyMceAsset') {
+ json = tinymce.util.JSON.parse(result);
+ config.editor.execCommand('mceInsertContent', false, TinyMceBuildHTML(json));
+ TinyMCE.updateImages(config.editor);
}
+ $(marvinJsModal).modal('hide');
+ FilePreviewModal.init();
});
}
- function updateTinymceFunction(source, image, config) {
+ function updateFunction(source, image, config) {
$.ajax({
url: config.marvinUrl,
data: {
description: source,
name: sketchName.val(),
- object_type: 'TinyMceAsset',
+ object_type: config.objectType,
image: image
},
dataType: 'json',
type: 'PUT',
success: function(json) {
- config.image[0].src = json.url;
- $(marvinJsModal).modal('hide');
+ if (config.objectType === 'TinyMceAsset') {
+ config.image[0].src = json.url;
+ config.image[0].dataset.mceSrc = json.url;
+ $(marvinJsModal).modal('hide');
+ } else {
+ $(marvinJsModal).modal('hide');
+ $('#modal_link' + json.id + ' img').attr('src', json.url);
+ $('#modal_link' + json.id + ' .attachment-label').html(json.file_name);
+ }
}
});
}
@@ -270,7 +209,6 @@ MarvinJsEditor = (function() {
$('#MarvinJsPromoModal').modal('show');
return false;
}
-
if (marvinJsMode === 'remote' && typeof (marvinJsRemoteEditor) === 'undefined') {
setTimeout(() => { MarvinJsEditor.open(config); }, 100);
return false;
@@ -284,12 +222,14 @@ MarvinJsEditor = (function() {
if (config.mode === 'new') {
MarvinJsEditor.save(config);
} else if (config.mode === 'edit') {
+ config.objectType = 'Asset';
MarvinJsEditor.update(config);
} else if (config.mode === 'new-tinymce') {
config.objectType = 'TinyMceAsset';
- MarvinJsEditor.save_with_image(config);
+ MarvinJsEditor.save(config);
} else if (config.mode === 'edit-tinymce') {
- MarvinJsEditor.update_tinymce(config);
+ config.objectType = 'TinyMceAsset';
+ MarvinJsEditor.update(config);
}
});
return true;
@@ -312,42 +252,11 @@ MarvinJsEditor = (function() {
},
save: function(config) {
- marvinJsExport(saveFunction, config);
- },
-
- save_with_image: function(config) {
- marvinJsExportImage(saveTinymceFunction, config);
+ marvinJsExportImage(saveFunction, config);
},
update: function(config) {
- marvinJsExport(updateFunction, config);
- },
-
- update_tinymce: function(config) {
- marvinJsExportImage(updateTinymceFunction, config);
- },
-
- create_preview: function(source, target) {
- marvinJsImage(assignImage, source.val(), target);
- },
-
- create_download_link: function(source, link, filename) {
- var downloadLink = (mrv, image, option) => {
- option.link.attr('href', image);
- option.link.attr('download', option.filename);
- };
- marvinJsImage(downloadLink, source.val(), { link: link, filename: filename });
- },
-
- delete_sketch: function(url, object) {
- $.ajax({
- url: url,
- dataType: 'json',
- type: 'DELETE',
- success: function() {
- $(object).remove();
- }
- });
+ marvinJsExportImage(updateFunction, config);
}
};
});
@@ -366,21 +275,21 @@ MarvinJsEditor = (function() {
function openMarvinJs() {
MarvinJsEditor.open({
mode: 'new-tinymce',
- marvinUrl: '/marvin_js_assets',
+ marvinUrl: '/tiny_mce_assets/marvinjs',
editor: editor
});
}
// Add a button that opens a window
editor.addButton('marvinjsplugin', {
tooltip: I18n.t('marvinjs.new_button'),
- icon: 'file-invoice',
+ icon: 'marvinjs',
onclick: openMarvinJs
});
// Adds a menu item to the tools menu
editor.addMenuItem('marvinjsplugin', {
text: I18n.t('marvinjs.new_button'),
- icon: 'file-invoice',
+ icon: 'marvinjs',
context: 'insert',
onclick: openMarvinJs
});
@@ -397,7 +306,7 @@ MarvinJsEditor = (function() {
$(document).on('turbolinks:load', function() {
- MarvinJsEditor = MarvinJsEditor();
+ MarvinJsEditor = MarvinJsEditorApi();
if (MarvinJsEditor.enabled()) {
if ($('#marvinjs-editor')[0].dataset.marvinjsMode === 'remote') {
ChemicalizeMarvinJs.createEditor('#marvinjs-sketch').then(function(marvin) {
diff --git a/app/assets/javascripts/sitewide/tiny_mce.js b/app/assets/javascripts/sitewide/tiny_mce.js
index cb11dbcb9..d19061c3b 100644
--- a/app/assets/javascripts/sitewide/tiny_mce.js
+++ b/app/assets/javascripts/sitewide/tiny_mce.js
@@ -1,5 +1,5 @@
-/* global _ hljs tinyMCE SmartAnnotation MarvinJsEditor FilePreviewModal globalConstants */
+/* global _ hljs tinyMCE SmartAnnotation MarvinJsEditor globalConstants */
/* global _ I18n */
@@ -30,7 +30,6 @@ var TinyMCE = (function() {
$('
').appendTo(editorToolbar.find('.mce-stack-layout'));
editorIframe.contents().click(function() {
var marvinJsEdit;
@@ -44,20 +43,19 @@ var TinyMCE = (function() {
});
editorContainer.find('.tinymce-active-object-handler').css('display', 'block');
editorContainer.find('.tinymce-active-object-handler .file-download-link')
- .attr('href', image[0].src)
- .attr('download', 'tinymce-image');
+ .attr('href', '/tiny_mce_assets/' + image.data('mceToken') + '/download');
// Edit link
editLink = editorContainer.find('.tinymce-active-object-handler .file-edit-link');
- if (image[0].dataset.sourceId) {
+ if (image[0].dataset.sourceType) {
editLink.css('display', 'inline-block');
- marvinJsEdit = (image[0].dataset.sourceType === 'MarvinJsAsset' && typeof (MarvinJsEditor) !== 'undefined');
+ marvinJsEdit = (image[0].dataset.sourceType === 'marvinjs' && typeof (MarvinJsEditor) !== 'undefined');
if (!marvinJsEdit) editLink.css('display', 'none');
editLink.on('click', function() {
if (marvinJsEdit) {
MarvinJsEditor.open({
mode: 'edit-tinymce',
- marvinUrl: '/marvin_js_assets/' + image[0].dataset.sourceId,
+ marvinUrl: '/tiny_mce_assets/' + image[0].dataset.mceToken + '/marvinjs',
image: image
});
}
@@ -66,26 +64,6 @@ var TinyMCE = (function() {
editLink.css('display', 'none');
editLink.off('click');
}
-
- // imaged editor Link
- imageEditorLink = editorContainer.find('.tinymce-active-object-handler .file-image-editor-link');
- if (image[0].dataset.mceToken && image[0].dataset.sourceId) {
- imageEditorLink.css('display', 'inline-block');
- imageEditorLink.on('click', function() {
- FilePreviewModal.imageEditor({
- 'download-url': image[0].src,
- filename: 'tinymce-image.jpg',
- mode: 'tinymce',
- url: '/tiny_mce_assets/' + image[0].dataset.mceToken,
- quality: 100,
- 'mime-type': 'image/jpeg',
- image: image[0]
- });
- });
- } else {
- imageEditorLink.css('display', 'none');
- imageEditorLink.off('click');
- }
} else {
editorContainer.find('.tinymce-active-object-handler').css('display', 'none');
}
diff --git a/app/assets/javascripts/sitewide/tiny_mce_file_upload_plugin.js b/app/assets/javascripts/sitewide/tiny_mce_file_upload_plugin.js
index 87d32cdb1..0f92445f6 100644
--- a/app/assets/javascripts/sitewide/tiny_mce_file_upload_plugin.js
+++ b/app/assets/javascripts/sitewide/tiny_mce_file_upload_plugin.js
@@ -88,7 +88,7 @@
form = createElement('form', {
action: editor.getParam(
'customimageuploader_form_url',
- '/tinymce_assets'
+ '/tiny_mce_assets'
),
target: iframe._id,
method: 'POST',
diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss
index 929c3e5af..0d2cf38f6 100644
--- a/app/assets/stylesheets/application.scss
+++ b/app/assets/stylesheets/application.scss
@@ -23,5 +23,6 @@
@import "select2.min";
@import "extend/perfect-scrollbar";
@import "my_modules/protocols/*";
+@import "my_modules/results/*";
@import "protocols/*";
@import "hooks/*";
diff --git a/app/assets/stylesheets/marvinjs.scss b/app/assets/stylesheets/marvinjs.scss
index c5078e94f..317061491 100644
--- a/app/assets/stylesheets/marvinjs.scss
+++ b/app/assets/stylesheets/marvinjs.scss
@@ -41,9 +41,17 @@
background: $color-black;
border: 0;
height: 60px;
+ line-height: 40px;
+ padding: 10px 15px;
text-align: center;
+ .file-save-link {
+ margin: 0 20px 0 0;
+ }
+
.file-name {
+ align-items: center;
+ display: flex;
float: left;
input {
@@ -51,10 +59,10 @@
box-shadow: none;
color: $color-black;
height: 40px;
+ margin-left: 5px;
outline: 0;
padding: 5px 10px;
position: relative;
- top: -5px;
width: 350px;
}
}
@@ -131,10 +139,28 @@
}
}
-.mce-i-file-invoice::before {
- content: "\F570";
- font-family: "Font Awesome 5 Free";
- font-weight: 900;
- line-height: 16px;
- position: absolute;
+.new-marvinjs-upload-button {
+
+ .new-marvinjs-upload-icon {
+ display: inline-block;
+ height: 22px;
+ width: 22px;
+
+ img {
+ height: 100%;
+ width: 100%;
+ }
+ }
+}
+
+.mce-i-marvinjs::before {
+ background-image: url("icon_small/marvinjs.svg");
+ content: "";
+ display: block;
+ height: 22px;
+ left: -3px;
+ line-height: 16px;
+ position: relative;
+ top: -3px;
+ width: 22px;
}
diff --git a/app/assets/stylesheets/my_modules/results/index.scss b/app/assets/stylesheets/my_modules/results/index.scss
new file mode 100644
index 000000000..9fe221dc4
--- /dev/null
+++ b/app/assets/stylesheets/my_modules/results/index.scss
@@ -0,0 +1,17 @@
+// scss-lint:disable SelectorDepth
+// scss-lint:disable NestingDepth
+// scss-lint:disable SelectorFormat
+// scss-lint:disable ImportantRule
+
+@import "constants";
+@import "mixins";
+
+#results-toolbar {
+ .help_tooltips {
+ .btn-default {
+ border: 0;
+ color: inherit;
+ margin-left: 10px;
+ }
+ }
+}
diff --git a/app/assets/stylesheets/steps.scss b/app/assets/stylesheets/steps.scss
index 5ed5acd2f..caa76e0e6 100644
--- a/app/assets/stylesheets/steps.scss
+++ b/app/assets/stylesheets/steps.scss
@@ -164,6 +164,10 @@
text-align: center;
width: 220px;
+ .attachment-thumbnail {
+ width: calc(100% - 20px);
+ }
+
a {
color: inherit;
}
diff --git a/app/controllers/assets_controller.rb b/app/controllers/assets_controller.rb
index 4a35d0978..da3bde03f 100644
--- a/app/controllers/assets_controller.rb
+++ b/app/controllers/assets_controller.rb
@@ -20,8 +20,7 @@ class AssetsController < ApplicationController
def file_preview
response_json = {
'id' => @asset.id,
- 'type' => (@asset.image? ? 'image' : 'file'),
-
+ 'type' => @asset.file.metadata[:asset_type] || (@asset.image? ? 'image' : 'file'),
'filename' => truncate(escape_input(@asset.file_name),
length: Constants::FILENAME_TRUNCATION_LENGTH),
'download-url' => download_asset_path(@asset, timestamp: Time.now.to_i)
@@ -34,15 +33,22 @@ class AssetsController < ApplicationController
elsif @assoc.class == RepositoryCell
can_manage_repository_rows?(@repository.team)
end
-
- if @asset.image?
- if ['image/jpeg', 'image/pjpeg'].include? @asset.content_type
+ if response_json['type'] == 'image'
+ if ['image/jpeg', 'image/pjpeg'].include? @asset.file.content_type
response_json['quality'] = @asset.file_image_quality || 90
end
response_json.merge!(
'editable' => @asset.editable_image? && can_edit,
'mime-type' => @asset.file.content_type,
- 'large-preview-url' => @asset.large_preview
+ 'large-preview-url' => rails_representation_url(@asset.large_preview)
+ )
+ elsif response_json['type'] == 'marvinjs'
+ response_json.merge!(
+ 'editable' => can_edit,
+ 'large-preview-url' => rails_representation_url(@asset.large_preview),
+ 'update-url' => marvin_js_asset_path(@asset.id),
+ 'description' => @asset.file.metadata[:description],
+ 'name' => @asset.file.metadata[:name]
)
else
diff --git a/app/controllers/marvin_js_assets_controller.rb b/app/controllers/marvin_js_assets_controller.rb
index 465210ee6..83a7aeb56 100644
--- a/app/controllers/marvin_js_assets_controller.rb
+++ b/app/controllers/marvin_js_assets_controller.rb
@@ -1,82 +1,98 @@
# frozen_string_literal: true
class MarvinJsAssetsController < ApplicationController
+ before_action :load_vars, except: :create
+ before_action :load_create_vars, only: :create
+
+ before_action :check_read_permission
+ before_action :check_edit_permission, only: %i(update create)
+
def create
- new_asset = MarvinJsAsset.add_sketch(marvin_params, current_team)
- if new_asset.object_type == 'Step'
+ result = MarvinJsService.create_sketch(marvin_params, current_user, current_team)
+ if result[:asset] && marvin_params[:object_type] == 'Step'
render json: {
html: render_to_string(
- partial: 'assets/marvinjs/marvin_sketch_card.html.erb',
- locals: { sketch: new_asset, i: 0, assets_count: 0, step: new_asset.object }
+ partial: 'steps/attachments/item.html.erb',
+ locals: { asset: result[:asset],
+ i: 0,
+ assets_count: 0,
+ step: result[:object],
+ order_atoz: 0,
+ order_ztoa: 0 }
)
}
- elsif new_asset.object_type == 'TinyMceAsset'
- tiny_img = TinyMceAsset.find(new_asset.object_id)
+ elsif result[:asset] && marvin_params[:object_type] == 'Result'
+ @my_module = result[:object].my_module
render json: {
- image: {
- url: view_context.image_url(tiny_img.url(:large)),
- token: Base62.encode(tiny_img.id),
- source_id: new_asset.id,
- source_type: new_asset.class.name
- }
- }, content_type: 'text/html'
- elsif new_asset
- render json: new_asset
+ html: render_to_string(
+ partial: 'my_modules/result.html.erb',
+ locals: { result: result[:object] }
+ )
+ }, status: :ok
+ elsif result[:asset]
+ render json: result[:asset]
else
- render json: new_asset.errors, status: :unprocessable_entity
- end
- end
-
- def show
- sketch = current_team.marvin_js_assets.find_by_id(params[:id])
- if sketch
- if sketch.object_type == 'Step'
- editable = can_manage_protocol_in_module?(sketch.object.protocol) ||
- can_manage_protocol_in_repository?(sketch.object.protocol)
- render json: {
- sketch: sketch,
- editable: editable
- }
- else
- render json: sketch
- end
- else
- render json: { error: t('marvinjs.no_sketches_found') }, status: :unprocessable_entity
- end
- end
-
- def destroy
- sketch = current_team.marvin_js_assets.find_by_id(params[:id])
- if sketch.destroy
- render json: sketch
- else
- render json: { error: t('marvinjs.no_sketches_found') }, status: :unprocessable_entity
+ render json: result[:asset].errors, status: :unprocessable_entity
end
end
def update
- sketch = MarvinJsAsset.update_sketch(marvin_params, current_team)
- if sketch
- render json: sketch
+ asset = MarvinJsService.update_sketch(marvin_params, current_user, current_team)
+ if asset
+ render json: { url: rails_representation_url(asset.medium_preview), id: asset.id, file_name: asset.file_name }
else
render json: { error: t('marvinjs.no_sketches_found') }, status: :unprocessable_entity
end
end
- def team_sketches
- result = ''
- sketches = current_team.marvin_js_assets.where.not(object_type: 'TinyMceAsset')
- sketches.each do |sketch|
- result += render_to_string(
- partial: 'shared/marvinjs_modal_sketch.html.erb',
- locals: { sketch: sketch }
- )
- end
+ private
- render json: { html: result, sketches: sketches.pluck(:id) }
+ def load_vars
+ @asset = current_team.assets.find_by_id(params[:id])
+ return render_404 unless @asset
+
+ @assoc ||= @asset.step
+ @assoc ||= @asset.result
+
+ if @assoc.class == Step
+ @protocol = @assoc.protocol
+ elsif @assoc.class == Result
+ @my_module = @assoc.my_module
+ end
end
- private
+ def load_create_vars
+ @assoc = Step.find_by_id(marvin_params[:object_id]) if marvin_params[:object_type] == 'Step'
+ @assoc = MyModule.find_by_id(params[:object_id]) if marvin_params[:object_type] == 'Result'
+
+ if @assoc.class == Step
+ @protocol = @assoc.protocol
+ elsif @assoc.class == MyModule
+ @my_module = @assoc
+ end
+ end
+
+ def check_read_permission
+ if @assoc.class == Step
+ return render_403 unless can_read_protocol_in_module?(@protocol) ||
+ can_read_protocol_in_repository?(@protocol)
+ elsif @assoc.class == Result || @assoc.class == MyModule
+ return render_403 unless can_read_experiment?(@my_module.experiment)
+ else
+ render_403
+ end
+ end
+
+ def check_edit_permission
+ if @assoc.class == Step
+ return render_403 unless can_manage_protocol_in_module?(@protocol) ||
+ can_manage_protocol_in_repository?(@protocol)
+ elsif @assoc.class == Result || @assoc.class == MyModule
+ return render_403 unless can_manage_module?(@my_module)
+ else
+ render_403
+ end
+ end
def marvin_params
params.permit(:id, :description, :object_id, :object_type, :name, :image)
diff --git a/app/controllers/tiny_mce_assets_controller.rb b/app/controllers/tiny_mce_assets_controller.rb
index 2e64a4248..2d3b0d870 100644
--- a/app/controllers/tiny_mce_assets_controller.rb
+++ b/app/controllers/tiny_mce_assets_controller.rb
@@ -1,6 +1,11 @@
# frozen_string_literal: true
class TinyMceAssetsController < ApplicationController
+ before_action :load_vars, only: %i(marvinjs_show marvinjs_update download)
+
+ before_action :check_read_permission, only: %i(marvinjs_show marvinjs_update download)
+ before_action :check_edit_permission, only: %i(marvinjs_update)
+
def create
image = params.fetch(:file) { render_404 }
tiny_img = TinyMceAsset.new(team_id: current_team.id, saved: false)
@@ -23,4 +28,91 @@ class TinyMceAssetsController < ApplicationController
}, status: :unprocessable_entity
end
end
+
+ def download
+ if @asset&.image&.attached?
+ redirect_to rails_blob_path(@asset.image, disposition: 'attachment')
+ else
+ render_404
+ end
+ end
+
+ def marvinjs_show
+ asset = current_team.tiny_mce_assets.find_by_id(Base62.decode(params[:id]))
+ return render_404 unless asset
+
+ render json: {
+ name: asset.image.metadata[:name],
+ description: asset.image.metadata[:description]
+ }
+ end
+
+ def marvinjs_create
+ result = MarvinJsService.create_sketch(marvin_params, current_user, current_team)
+ if result[:asset]
+ render json: {
+ image: {
+ url: rails_representation_url(result[:asset].preview),
+ token: Base62.encode(result[:asset].id),
+ source_type: result[:asset].image.metadata[:asset_type]
+ }
+ }, content_type: 'text/html'
+ else
+ render json: result[:asset].errors, status: :unprocessable_entity
+ end
+ end
+
+ def marvinjs_update
+ asset = MarvinJsService.update_sketch(marvin_params, current_user, current_team)
+ if asset
+ render json: { url: rails_representation_url(asset.preview), id: asset.id }
+ else
+ render json: { error: t('marvinjs.no_sketches_found') }, status: :unprocessable_entity
+ end
+ end
+
+ private
+
+ def load_vars
+ @asset = current_team.tiny_mce_assets.find_by_id(Base62.decode(params[:id]))
+ return render_404 unless @asset
+
+ @assoc = @asset.object
+
+ if @assoc.class == Step
+ @protocol = @assoc.protocol
+ elsif @assoc.class == Protocol
+ @protocol = @assoc
+ elsif @assoc.class == MyModule
+ @my_module = @assoc
+ elsif @assoc.class == ResultText
+ @my_module = @assoc.result.my_module
+ end
+ end
+
+ def check_read_permission
+ if @assoc.class == Step || @assoc.class == Protocol
+ return render_403 unless can_read_protocol_in_module?(@protocol) ||
+ can_read_protocol_in_repository?(@protocol)
+ elsif @assoc.class == ResultText || @assoc.class == MyModule
+ return render_403 unless can_read_experiment?(@my_module.experiment)
+ else
+ render_403
+ end
+ end
+
+ def check_edit_permission
+ if @assoc.class == Step || @assoc.class == Protocol
+ return render_403 unless can_manage_protocol_in_module?(@protocol) ||
+ can_manage_protocol_in_repository?(@protocol)
+ elsif @assoc.class == ResultText || @assoc.class == MyModule
+ return render_403 unless can_manage_module?(@my_module)
+ else
+ render_403
+ end
+ end
+
+ def marvin_params
+ params.permit(:id, :description, :object_id, :object_type, :name, :image)
+ end
end
diff --git a/app/helpers/my_modules_helper.rb b/app/helpers/my_modules_helper.rb
index e578df1ea..698015546 100644
--- a/app/helpers/my_modules_helper.rb
+++ b/app/helpers/my_modules_helper.rb
@@ -10,23 +10,15 @@ module MyModulesHelper
end
def ordered_assets(step)
- assets = []
- assets += step.assets
- assets += step.marvin_js_assets
-
view_state = step.current_view_state(current_user)
- assets.sort! do |a, b|
- case view_state.state.dig('assets', 'sort')
- when 'old'
- b[asset_date_sort_field(b)] <=> a[asset_date_sort_field(a)]
- when 'atoz'
- (a[asset_name_sort_field(a)]).downcase <=> (b[asset_name_sort_field(b)]).downcase
- when 'ztoa'
- (b[asset_name_sort_field(b)]).downcase <=> (a[asset_name_sort_field(a)]).downcase
- else
- a[asset_date_sort_field(a)] <=> b[asset_date_sort_field(b)]
- end
- end
+ sort = case view_state.state.dig('assets', 'sort')
+ when 'old' then { created_at: :asc }
+ when 'atoz' then { file_file_name: :asc }
+ when 'ztoa' then { file_file_name: :desc }
+ else { created_at: :desc }
+ end
+
+ step.assets.order(sort)
end
def az_ordered_assets_index(step, asset_id)
@@ -63,22 +55,4 @@ module MyModulesHelper
def is_results_page?
action_name == 'results'
end
-
- private
-
- def asset_date_sort_field(element)
- result = {
- 'Asset' => :file_updated_at,
- 'MarvinJsAsset' => :updated_at
- }
- result[element.class.name]
- end
-
- def asset_name_sort_field(element)
- result = {
- 'Asset' => :file_file_name,
- 'MarvinJsAsset' => :name
- }
- result[element.class.name] || ''
- end
end
diff --git a/app/models/asset.rb b/app/models/asset.rb
index 65f9a0cf6..5bf4a7675 100644
--- a/app/models/asset.rb
+++ b/app/models/asset.rb
@@ -257,7 +257,7 @@ class Asset < ApplicationRecord
end
def image?
- content_type == %r{^image/#{Regexp.union(Constants::WHITELISTED_IMAGE_TYPES)}}
+ content_type =~ %r{^image/#{Regexp.union(Constants::WHITELISTED_IMAGE_TYPES)}}
end
def text?
@@ -448,21 +448,7 @@ class Asset < ApplicationRecord
!locked? && %r{^image/#{Regexp.union(Constants::WHITELISTED_IMAGE_TYPES_EDITABLE)}} =~ file.content_type
end
-<<<<<<< HEAD
- def generate_base64(style)
- image = if file.options[:storage].to_sym == :s3
- URI.parse(url(style)).open.to_a.join
- else
- File.open(file.path(style)).to_a.join
- end
- encoded_data = Base64.strict_encode64(image)
- "data:#{file_content_type};base64,#{encoded_data}"
- end
-
- protected
-=======
private
->>>>>>> activestorage_migration
def tempdir
Rails.root.join('tmp')
diff --git a/app/models/marvin_js_asset.rb b/app/models/marvin_js_asset.rb
deleted file mode 100644
index 6b38fa6da..000000000
--- a/app/models/marvin_js_asset.rb
+++ /dev/null
@@ -1,44 +0,0 @@
-# frozen_string_literal: true
-
-class MarvinJsAsset < ApplicationRecord
- validates :name, presence: true
- validates :description, presence: true
- validates :object_id, presence: true
- validates :object_type, presence: true
-
- belongs_to :object, polymorphic: true,
- optional: true,
- inverse_of: :marvin_js_assets
-
- belongs_to :team, inverse_of: :marvin_js_assets, optional: true
-
- def self.add_sketch(values, team)
- if values[:object_type] == 'TinyMceAsset'
- tiny_mce_img = TinyMceAsset.create(
- object: nil,
- team_id: team.id,
- saved: false,
- image: values[:image],
- image_file_name: "#{name}.jpg"
- )
- values[:object_id] = tiny_mce_img.id
- end
- values[:name] = I18n.t('marvinjs.new_sketch') if values[:name].empty?
- create(values.merge(team_id: team.id).except(:image))
- end
-
- def self.update_sketch(values, team)
- sketch = team.marvin_js_assets.find(values[:id])
- return false unless sketch
-
- values[:name] = I18n.t('marvinjs.new_sketch') if values[:name].empty?
- sketch.update(values.except(:image, :object_type, :id))
-
- if values[:object_type] == 'TinyMceAsset'
- image = TinyMceAsset.find(sketch.object_id)
- image.update(image: values[:image], image_file_name: "#{name}.jpg")
- return { url: image.url(:large), description: sketch.description }
- end
- sketch
- end
-end
diff --git a/app/models/step.rb b/app/models/step.rb
index 9c7c34c40..be4a269fa 100644
--- a/app/models/step.rb
+++ b/app/models/step.rb
@@ -25,11 +25,6 @@ class Step < ApplicationRecord
has_many :tables, through: :step_tables
has_many :report_elements, inverse_of: :step, dependent: :destroy
- has_many :marvin_js_assets,
- as: :object,
- class_name: :MarvinJsAsset,
- dependent: :destroy
-
accepts_nested_attributes_for :checklists,
reject_if: :all_blank,
allow_destroy: true
@@ -41,9 +36,6 @@ class Step < ApplicationRecord
attributes['contents'].blank?
},
allow_destroy: true
- accepts_nested_attributes_for :marvin_js_assets,
- reject_if: :all_blank,
- allow_destroy: true
after_destroy :cascade_after_destroy
before_save :set_last_modified_by
diff --git a/app/models/team.rb b/app/models/team.rb
index ef328dd6b..9cfa780a7 100644
--- a/app/models/team.rb
+++ b/app/models/team.rb
@@ -41,7 +41,7 @@ class Team < ApplicationRecord
has_many :repositories, dependent: :destroy
has_many :reports, inverse_of: :team, dependent: :destroy
has_many :activities, inverse_of: :team, dependent: :destroy
- has_many :marvin_js_assets, inverse_of: :team, dependent: :destroy
+ has_many :assets, inverse_of: :team, dependent: :destroy
attr_accessor :without_templates
attr_accessor :without_intro_demo
diff --git a/app/models/tiny_mce_asset.rb b/app/models/tiny_mce_asset.rb
index b2dbed96d..6f44bb22f 100644
--- a/app/models/tiny_mce_asset.rb
+++ b/app/models/tiny_mce_asset.rb
@@ -14,11 +14,6 @@ class TinyMceAsset < ApplicationRecord
touch: true,
optional: true
- has_one :marvin_js_asset,
- as: :object,
- class_name: :MarvinJsAsset,
- dependent: :destroy
-
belongs_to :object, polymorphic: true,
optional: true,
inverse_of: :tiny_mce_assets
@@ -41,10 +36,6 @@ class TinyMceAsset < ApplicationRecord
# }
validates :estimated_size, presence: true
- def source
- return marvin_js_asset if marvin_js_asset
- end
-
def self.update_images(object, images)
images = JSON.parse(images)
current_images = object.tiny_mce_assets.pluck(:id)
@@ -75,8 +66,6 @@ class TinyMceAsset < ApplicationRecord
tm_asset.attributes['src'].value = Rails.application.routes.url_helpers.url_for(new_asset.image)
tm_asset['class'] = 'img-responsive'
end
- tm_asset.attributes['src'].value = new_asset_url.url
- tm_asset['class'] = 'img-responsive'
end
description.css('body').inner_html.to_s
end
@@ -107,7 +96,7 @@ class TinyMceAsset < ApplicationRecord
asset = find_by_id(id)
asset.destroy if asset && !asset.saved
end
-
+
def self.update_estimated_size(id)
asset = find_by_id(id)
return unless asset&.image&.attached?
diff --git a/app/services/marvin_js_service.rb b/app/services/marvin_js_service.rb
index 4a395062f..4b337ad86 100644
--- a/app/services/marvin_js_service.rb
+++ b/app/services/marvin_js_service.rb
@@ -1,11 +1,89 @@
# frozen_string_literal: true
class MarvinJsService
- def self.url
- ENV['MARVINJS_URL']
- end
+ class << self
+ def url
+ ENV['MARVINJS_URL']
+ end
- def self.enabled?
- !ENV['MARVINJS_URL'].nil? || !ENV['MARVINJS_API_KEY'].nil?
+ def enabled?
+ !ENV['MARVINJS_URL'].nil? || !ENV['MARVINJS_API_KEY'].nil?
+ end
+
+ def create_sketch(params, current_user, current_team)
+ file = generate_image(params)
+ if params[:object_type] == 'TinyMceAsset'
+ asset = TinyMceAsset.new(team_id: current_team.id)
+ attach_file(asset.image, file, params)
+ asset.save!
+ return { asset: asset }
+ end
+
+ asset = Asset.new(created_by: current_user,
+ last_modified_by: current_user,
+ team_id: current_team.id)
+ attach_file(asset.file, file, params)
+ asset.save!
+ connect_asset(asset, params, current_user)
+ end
+
+ def update_sketch(params, _current_user, current_team)
+ if params[:object_type] == 'TinyMceAsset'
+ asset = current_team.tiny_mce_assets.find(Base62.decode(params[:id]))
+ attachment = asset&.image
+ else
+ asset = current_team.assets.find(params[:id])
+ attachment = asset&.file
+ end
+ return unless attachment
+
+ file = generate_image(params)
+ attach_file(attachment, file, params)
+ asset
+ end
+
+ private
+
+ def connect_asset(asset, params, current_user)
+ if params[:object_type] == 'Step'
+ object = params[:object_type].constantize.find(params[:object_id])
+ object.assets << asset
+ elsif params[:object_type] == 'Result'
+ my_module = MyModule.find_by_id(params[:object_id])
+ return unless my_module
+
+ object = Result.create(user: current_user,
+ my_module: my_module,
+ name: prepare_name(params[:name]),
+ asset: asset,
+ last_modified_by: current_user)
+ end
+ { asset: asset, object: object }
+ end
+
+ def generate_image(params)
+ StringIO.new(Base64.decode64(params[:image].split(',')[1]))
+ end
+
+ def attach_file(asset, file, params)
+ asset.attach(
+ io: file,
+ filename: "#{prepare_name(params[:name])}.jpg",
+ content_type: 'image/jpeg',
+ metadata: {
+ name: prepare_name(params[:name]),
+ description: params[:description],
+ asset_type: 'marvinjs'
+ }
+ )
+ end
+
+ def prepare_name(sketch_name)
+ if !sketch_name.empty?
+ sketch_name
+ else
+ I18n.t('marvinjs.new_sketch')
+ end
+ end
end
end
diff --git a/app/views/assets/marvinjs/_create_marvin_sketch_button.html.erb b/app/views/assets/marvinjs/_create_marvin_sketch_button.html.erb
index 1f70103fb..d4d3c472f 100644
--- a/app/views/assets/marvinjs/_create_marvin_sketch_button.html.erb
+++ b/app/views/assets/marvinjs/_create_marvin_sketch_button.html.erb
@@ -5,6 +5,8 @@
data-marvin-url="<%= marvin_js_assets_path %>"
data-sketch-container="<%= sketch_container %>"
>
-
+
+ <%= image_tag 'icon_small/marvinjs.svg' %>
+
<%= t('marvinjs.new_button') %>
\ No newline at end of file
diff --git a/app/views/assets/marvinjs/_marvin_sketch_card.html.erb b/app/views/assets/marvinjs/_marvin_sketch_card.html.erb
deleted file mode 100644
index 6d128090c..000000000
--- a/app/views/assets/marvinjs/_marvin_sketch_card.html.erb
+++ /dev/null
@@ -1,18 +0,0 @@
-
- <%= link_to '',
- class: 'file-preview-link',
- id: "marvin_js_sketch_#{sketch.id}",
- data: { no_turbolink: true, id: true, status: 'asset-present',
- 'preview-url': '',
- 'order-atoz': az_ordered_assets_index(step, sketch.id),
- 'order-ztoa': assets_count - az_ordered_assets_index(step, sketch.id),
- 'order-old': i,
- 'order-new': assets_count - i,
- 'asset-type': 'marvin-sketch',
- 'asset-id': sketch.id,
- 'update_url': marvin_js_asset_path(sketch.id)
- } do %>
- <%= render partial: 'assets/marvinjs/marvin_sketch_card_placeholder.html.erb',
- locals: { edit_page: false, sketch: sketch } %>
- <% end %>
-
\ No newline at end of file
diff --git a/app/views/assets/marvinjs/_marvin_sketch_card_placeholder.html.erb b/app/views/assets/marvinjs/_marvin_sketch_card_placeholder.html.erb
deleted file mode 100644
index b5d84cd37..000000000
--- a/app/views/assets/marvinjs/_marvin_sketch_card_placeholder.html.erb
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
![]()
- <%= hidden_field_tag :description, sketch.description %>
-
-
<%= truncate(sketch.name,
- length: Constants::FILENAME_TRUNCATION_LENGTH) %>
-
- <%= t('protocols.steps.attachments.modified_label') %> <%= l(sketch.updated_at, format: :full_date) if sketch.updated_at %>
-
- <% if edit_page %>
-
- <%= ff.remove_nested_fields_link do %>
-
- <% end %>
-
- <% end %>
-
\ No newline at end of file
diff --git a/app/views/my_modules/results.html.erb b/app/views/my_modules/results.html.erb
index 48f2d1b7a..3f0e9bb80 100644
--- a/app/views/my_modules/results.html.erb
+++ b/app/views/my_modules/results.html.erb
@@ -41,6 +41,8 @@
<%= t("my_modules.results.new_asset_result") %>
+ <%= render partial: '/assets/marvinjs/create_marvin_sketch_button.html.erb',
+ locals: { element_id: @my_module.id, element_type: 'Result', sketch_container: "#results[data-module-id=#{@my_module.id}]" } %>
<%= render partial: "assets/wopi/create_wopi_file_button",
locals: { element_id: @my_module.id, element_type: 'Result' } %>
diff --git a/app/views/shared/_marvinjs_modal.html.erb b/app/views/shared/_marvinjs_modal.html.erb
index d205fb3ba..1c9ecaecb 100644
--- a/app/views/shared/_marvinjs_modal.html.erb
+++ b/app/views/shared/_marvinjs_modal.html.erb
@@ -11,7 +11,8 @@
diff --git a/app/views/steps/_empty_step.html.erb b/app/views/steps/_empty_step.html.erb
index 954dd9208..15ef82b42 100644
--- a/app/views/steps/_empty_step.html.erb
+++ b/app/views/steps/_empty_step.html.erb
@@ -24,12 +24,6 @@
<%= t("protocols.steps.new.tab_tables") %>
-
-
-
- <%= t('marvinjs.checmical_drawing') %>
-
-
@@ -90,13 +84,4 @@
<%= t("protocols.steps.new.add_table") %>
<% end %>
-
-
- <%= f.nested_fields_for :marvin_js_assets do |ff| %>
- <% next unless ff.object.description %>
- <%= render partial: 'assets/marvinjs/marvin_sketch_card_placeholder.html.erb',
- locals: { sketch: ff.object, edit_page: true, ff: ff} %>
- <% end %>
-
-
diff --git a/app/views/steps/attachments/_list.html.erb b/app/views/steps/attachments/_list.html.erb
index 995678321..0d619d9ce 100644
--- a/app/views/steps/attachments/_list.html.erb
+++ b/app/views/steps/attachments/_list.html.erb
@@ -44,13 +44,8 @@
<% assets.each_with_index do |asset, i| %>
<% order_atoz = az_ordered_assets_index(step, asset.id) %>
<% order_ztoa = assets.length - az_ordered_assets_index(step, asset.id) %>
- <% if asset.class.name == 'Asset' %>
- <%= render partial: 'steps/attachments/item.html.erb',
- locals: { asset: asset, i: i, assets_count: assets.length, step: step, order_atoz: order_atoz, order_ztoa: order_ztoa } %>
- <% elsif asset.class.name == 'MarvinJsAsset' %>
- <%= render partial: 'assets/marvinjs/marvin_sketch_card.html.erb',
- locals: { sketch: asset, i:i, assets_count: assets.count, step: step} %>
- <% end %>
+ <%= render partial: 'steps/attachments/item.html.erb',
+ locals: { asset: asset, i: i, assets_count: assets.length, step: step, order_atoz: order_atoz, order_ztoa: order_ztoa } %>
<% end %>
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 2ffb13b16..a2ee38803 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -1765,10 +1765,11 @@ en:
complete_title: "Complete Step"
uncomplete_title: "Uncomplete Step"
attachments:
- sort_new: "Newest first ↓"
- sort_old: "Oldest first ↑"
- sort_atoz: "Name ↓"
- sort_ztoa: "Name ↑"
+ sort:
+ new_html: "Newest first ↓"
+ old_html: "Oldest first ↑"
+ atoz_html: "Name ↓"
+ ztoa_html: "Name ↑"
new:
add_step_title: "Add new step"
tab_checklists: "Checklists"
@@ -2154,9 +2155,8 @@ en:
visibility: "https://support.scinote.net/hc/en-us/articles/360004627472"
manage_columns: "https://support.scinote.net/hc/en-us/articles/360004695831"
marvinjs:
- new_sketch: "New sketch"
- new_button: "New chemical drawing"
- checmical_drawing: "Chemical drawings"
- team_drawings: "Team drawings"
- task: "Task"
- no_sketches_found: "No sketches found"
\ No newline at end of file
+ new_sketch: "New structure"
+ new_button: "New structure"
+ structure_placeholder: "Click here to enter structure name"
+ modal_name_title: "Structure name:"
+ checmical_drawing: "Chemical drawings"
\ No newline at end of file
diff --git a/config/routes.rb b/config/routes.rb
index 5a8ff048e..420591b80 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -449,8 +449,16 @@ Rails.application.routes.draw do
end
# tinyMCE image uploader endpoint
- resources :tiny_mce_assets, only: [:update]
- post '/tinymce_assets', to: 'tiny_mce_assets#create', as: :tiny_mce_assets
+ resources :tiny_mce_assets, only: [:create] do
+ member do
+ get :download
+ get :marvinjs, to: 'tiny_mce_assets#marvinjs_show'
+ put :marvinjs, to: 'tiny_mce_assets#marvinjs_update'
+ end
+ collection do
+ post :marvinjs, to: 'tiny_mce_assets#marvinjs_create'
+ end
+ end
resources :results, only: [:update, :destroy] do
resources :result_comments,
@@ -580,10 +588,6 @@ Rails.application.routes.draw do
# We cannot use 'resources :assets' because assets is a reserved route
# in Rails (assets pipeline) and causes funky behavior
-<<<<<<< HEAD
- get 'files/:id/present', to: 'assets#file_present', as: 'file_present_asset'
-=======
->>>>>>> activestorage_migration
get 'files/:id/preview',
to: 'assets#file_preview',
as: 'asset_file_preview'
diff --git a/db/migrate/20190426185413_create_marvin_js_assets.rb b/db/migrate/20190426185413_create_marvin_js_assets.rb
deleted file mode 100644
index b519892b6..000000000
--- a/db/migrate/20190426185413_create_marvin_js_assets.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-# frozen_string_literal: true
-
-class CreateMarvinJsAssets < ActiveRecord::Migration[5.1]
- def change
- create_table :marvin_js_assets do |t|
- t.bigint :team_id
- t.string :description
- t.references :object, polymorphic: true
-
- t.timestamps
- end
-
- change_column :marvin_js_assets, :id, :bigint
- end
-end
diff --git a/db/migrate/20190427115413_add_name_to_marvin_js_assets.rb b/db/migrate/20190427115413_add_name_to_marvin_js_assets.rb
deleted file mode 100644
index ae20a897b..000000000
--- a/db/migrate/20190427115413_add_name_to_marvin_js_assets.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-# frozen_string_literal: true
-
-class AddNameToMarvinJsAssets < ActiveRecord::Migration[5.1]
- def change
- add_column :marvin_js_assets, :name, :string
- end
-end
diff --git a/db/schema.rb b/db/schema.rb
index b3d12c558..c69194b9d 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -201,17 +201,6 @@ ActiveRecord::Schema.define(version: 2019_06_13_134100) do
t.index ["restored_by_id"], name: "index_experiments_on_restored_by_id"
end
- create_table "marvin_js_assets", force: :cascade do |t|
- t.bigint "team_id"
- t.string "description"
- t.string "object_type"
- t.bigint "object_id"
- t.datetime "created_at", null: false
- t.datetime "updated_at", null: false
- t.string "name"
- t.index ["object_type", "object_id"], name: "index_marvin_js_assets_on_object_type_and_object_id"
- end
-
create_table "my_module_groups", force: :cascade do |t|
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
diff --git a/spec/factories/marvin_js_assets.rb b/spec/factories/marvin_js_assets.rb
deleted file mode 100644
index 4976e2332..000000000
--- a/spec/factories/marvin_js_assets.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-# frozen_string_literal: true
-
-FactoryBot.define do
- factory :marvin_js_asset do
- team_id 1
- description 'MyString'
- object ''
- end
-end