mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-01-25 01:04:02 +08:00
Refactor file preview modal [SCI-2217]
This commit is contained in:
parent
b7a14215bc
commit
cc5d8550b1
45 changed files with 1048 additions and 7849 deletions
|
@ -25,29 +25,22 @@ function setupAssetsLoading() {
|
|||
$el.next().hide();
|
||||
$el.html("");
|
||||
|
||||
if (data.type === "image") {
|
||||
if (data.type === 'image') {
|
||||
$el.html(
|
||||
"<a class='image-preview-link' id='modal_link" +
|
||||
"<a class='file-preview-link' id='modal_link" +
|
||||
data['asset-id'] + "' data-status='asset-present' " +
|
||||
"href='" + data['download-url'] + "'>" +
|
||||
"<img src='" + data['image-tag-url'] + "' data-preview-url='" +
|
||||
data['preview-url'] + "'><p>" +
|
||||
"href='" + data['download-url'] + "' data-preview-url='" +
|
||||
data['preview-url'] + "'>" +
|
||||
"<img src='" + data['image-tag-url'] + "'><p>" +
|
||||
data.filename + '</p></a>'
|
||||
);
|
||||
} else if (data.type === 'wopi') {
|
||||
if (data['wopi-edit']) {
|
||||
wopiBtns = data['wopi-file-name'] +
|
||||
data['wopi-view'] +
|
||||
data['wopi-edit'];
|
||||
} else {
|
||||
wopiBtns = data['wopi-file-name'] +
|
||||
data['wopi-view'];
|
||||
}
|
||||
$el.html(wopiBtns);
|
||||
} else {
|
||||
$el.html(
|
||||
"<a href='" + data['download-url'] + "'><p>" +
|
||||
data.filename + "</p></a>"
|
||||
"<a class='file-preview-link' id='modal_link" +
|
||||
data['asset-id'] + "' data-status='asset-present' " +
|
||||
"href='" + data['download-url'] + "' data-preview-url='" +
|
||||
data['preview-url'] + "'><p>" +
|
||||
data.filename + '</p></a>'
|
||||
);
|
||||
}
|
||||
animateSpinner(null, false);
|
||||
|
|
58
app/assets/javascripts/sitewide/file_preview.js
Normal file
58
app/assets/javascripts/sitewide/file_preview.js
Normal file
|
@ -0,0 +1,58 @@
|
|||
(function(global) {
|
||||
'use strict';
|
||||
|
||||
global.initPreviewModal = function initPreviewModal() {
|
||||
var name;
|
||||
var url;
|
||||
var downloadUrl;
|
||||
$('.file-preview-link').off();
|
||||
$('.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 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') {
|
||||
modal.find('.file-preview-container')
|
||||
.append($('<img>')
|
||||
.attr('src', data['large-preview-url'])
|
||||
.attr('alt', name)
|
||||
.click(function(ev) {
|
||||
ev.stopPropagation();
|
||||
})
|
||||
);
|
||||
} else {
|
||||
modal.find('.file-preview-container').html(data['preview-icon']);
|
||||
}
|
||||
modal.find('.file-name').text(name);
|
||||
modal.find('.modal-body').click(function() {
|
||||
modal.modal('hide');
|
||||
});
|
||||
modal.modal();
|
||||
$('.modal-backdrop').last().css('z-index', modal.css('z-index') - 1);
|
||||
},
|
||||
error: function(ev) {
|
||||
// TODO
|
||||
}
|
||||
});
|
||||
}
|
||||
})(window);
|
|
@ -1,48 +0,0 @@
|
|||
(function(global) {
|
||||
'use strict';
|
||||
|
||||
global.initPreviewModal = function initPreviewModal() {
|
||||
var name, url, downloadUrl, description;
|
||||
$('.image-preview-link').off();
|
||||
$('.image-preview-link').click(function(e) {
|
||||
e.preventDefault();
|
||||
name = $(this).find('p').text();
|
||||
url = $(this).find('img').data('preview-url');
|
||||
downloadUrl = $(this).attr('href');
|
||||
description = $(this).data('description');
|
||||
openPreviewModal(name, url, downloadUrl, description);
|
||||
});
|
||||
}
|
||||
|
||||
function openPreviewModal(name, url, downloadUrl, description) {
|
||||
var modal = $('#imagePreviewModal');
|
||||
$.ajax({
|
||||
url: url,
|
||||
type: 'GET',
|
||||
dataType: 'json',
|
||||
success: function(data) {
|
||||
modal.find('.modal-body img').remove();
|
||||
modal.find('.image-name').text(name);
|
||||
var link = modal.find('.image-download-link');
|
||||
link.attr('href', downloadUrl);
|
||||
link.attr('data-no-turbolink', true);
|
||||
link.attr('data-status', 'asset-present');
|
||||
modal.find('.modal-body').append($('<img>')
|
||||
.attr('src', data['large-preview-url'])
|
||||
.attr('alt', name)
|
||||
.click(function(ev) {
|
||||
ev.stopPropagation();
|
||||
}));
|
||||
modal.find('.modal-footer .image-description').text(description);
|
||||
modal.find('.modal-body').click(function() {
|
||||
modal.modal('hide');
|
||||
});
|
||||
modal.modal();
|
||||
$('.modal-backdrop').last().css('z-index', modal.css('z-index') - 1);
|
||||
},
|
||||
error: function(ev) {
|
||||
// TODO
|
||||
}
|
||||
});
|
||||
}
|
||||
})(window);
|
|
@ -18,5 +18,4 @@
|
|||
@import "handsontable.full.min";
|
||||
@import "ajax-bootstrap-select.min";
|
||||
@import "extend/bootstrap";
|
||||
@import "font-awesome";
|
||||
@import "themes/scinote";
|
||||
|
|
|
@ -1278,7 +1278,7 @@ table.dataTable {
|
|||
}
|
||||
|
||||
// Image preview modal
|
||||
.modal-image-preview {
|
||||
.modal-file-preview {
|
||||
background: transparent;
|
||||
font-size: 16px;
|
||||
padding-right: 0 !important;
|
||||
|
@ -1292,6 +1292,14 @@ table.dataTable {
|
|||
float: right;
|
||||
}
|
||||
|
||||
.file-wopi-controls {
|
||||
display: inline-block;
|
||||
|
||||
.btn {
|
||||
margin: 0 15px;
|
||||
}
|
||||
}
|
||||
|
||||
.modal-dialog {
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
|
@ -1309,6 +1317,24 @@ table.dataTable {
|
|||
width: auto;
|
||||
}
|
||||
|
||||
.file-preview-container {
|
||||
align-items: center;
|
||||
background-color: $color-white;
|
||||
color: $color-dark-gray;
|
||||
display: -moz-flex;
|
||||
display: -webkit-flex;
|
||||
display: flex;
|
||||
height: 100%;
|
||||
justify-content: center;
|
||||
text-align: center;
|
||||
width: 60%;
|
||||
|
||||
.file-name {
|
||||
color: $color-black;
|
||||
margin: 30px 0;
|
||||
}
|
||||
}
|
||||
|
||||
img {
|
||||
height: auto;
|
||||
max-width: 100%;
|
||||
|
@ -1323,6 +1349,11 @@ table.dataTable {
|
|||
background: $color-black;
|
||||
border: 0;
|
||||
height: 60px;
|
||||
text-align: center;
|
||||
|
||||
.file-name {
|
||||
float: left;
|
||||
}
|
||||
}
|
||||
|
||||
.modal-body {
|
||||
|
@ -1333,6 +1364,7 @@ table.dataTable {
|
|||
height: calc(100% - 120px);
|
||||
justify-content: center;
|
||||
overflow: hidden;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.modal-footer {
|
||||
|
@ -1345,7 +1377,7 @@ table.dataTable {
|
|||
width: 100%;
|
||||
}
|
||||
|
||||
.image-download-link {
|
||||
.file-download-link {
|
||||
color: $color-white;
|
||||
display: inline-block;
|
||||
float: right;
|
||||
|
|
|
@ -7,7 +7,6 @@ class AssetsController < ApplicationController
|
|||
include ActionView::Context
|
||||
include InputSanitizeHelper
|
||||
include FileIconsHelper
|
||||
include WopiHelper
|
||||
|
||||
before_action :load_vars
|
||||
before_action :check_read_permission, except: :file_present
|
||||
|
@ -31,32 +30,55 @@ class AssetsController < ApplicationController
|
|||
render json: {
|
||||
'asset-id' => @asset.id,
|
||||
'image-tag-url' => @asset.url(:medium),
|
||||
'preview-url' => large_image_url_asset_path(@asset),
|
||||
'preview-url' => asset_file_preview_path(@asset),
|
||||
'filename' => truncate(@asset.file_file_name,
|
||||
length:
|
||||
Constants::FILENAME_TRUNCATION_LENGTH),
|
||||
'download-url' => download_asset_path(@asset),
|
||||
'type' => asset_data_type(@asset),
|
||||
'wopi-file-name' => wopi_asset_file_name(@asset, true),
|
||||
'wopi-edit' => (wopi_asset_edit_button(@asset) if wopi_file?(@asset)),
|
||||
'wopi-view' => (wopi_asset_view_button(@asset) if wopi_file?(@asset))
|
||||
'type' => asset_data_type(@asset)
|
||||
}, status: 200
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def large_image_url
|
||||
def file_preview
|
||||
response_json = {
|
||||
'type' => (@asset.is_image? ? 'image' : 'file'),
|
||||
|
||||
'filename' => truncate(@asset.file_file_name,
|
||||
length:
|
||||
Constants::FILENAME_TRUNCATION_LENGTH),
|
||||
'download-url' => download_asset_path(@asset)
|
||||
}
|
||||
|
||||
if @asset.is_image?
|
||||
response_json['large-preview-url'] = @asset.url(:large)
|
||||
else
|
||||
response_json['preview-icon'] = render_to_string(
|
||||
partial: 'shared/file_preview_icon.html.erb',
|
||||
locals: { asset: @asset }
|
||||
)
|
||||
end
|
||||
|
||||
if wopi_file?(@asset)
|
||||
can_edit =
|
||||
if @assoc.class == Step
|
||||
can_manage_protocol_in_module?(@protocol) ||
|
||||
can_manage_protocol_in_repository?(@protocol)
|
||||
elsif @assoc.class == Result
|
||||
can_manage_module?(@my_module)
|
||||
elsif @assoc.class == RepositoryCell
|
||||
# TBD
|
||||
end
|
||||
response_json['wopi-controls'] = render_to_string(
|
||||
partial: 'shared/file_wopi_controlls.html.erb',
|
||||
locals: { asset: @asset, can_edit: can_edit }
|
||||
)
|
||||
end
|
||||
respond_to do |format|
|
||||
format.json do
|
||||
render json: {
|
||||
'large-preview-url' => @asset.url(:large),
|
||||
'filename' => truncate(@asset.file_file_name,
|
||||
length:
|
||||
Constants::FILENAME_TRUNCATION_LENGTH),
|
||||
'download-url' => download_asset_path(@asset),
|
||||
'type' => (@asset.is_image? ? 'image' : 'file')
|
||||
}
|
||||
render json: response_json
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -61,7 +61,7 @@ class ProtocolLinkedChildrenDatatable < CustomDatatable
|
|||
locals: { project: record.my_module.experiment.project }
|
||||
)
|
||||
res += '</li>'
|
||||
res += "<li><i class='fa fa-flask'></i> "
|
||||
res += "<li><i class='far fa-flask'></i> "
|
||||
res += @controller.render_to_string(
|
||||
partial: 'search/results/partials/experiment_text.html.erb',
|
||||
locals: { experiment: record.my_module.experiment }
|
||||
|
|
|
@ -4,6 +4,26 @@ module FileIconsHelper
|
|||
%w(csv ods xls xlsb xlsm xlsx odp pot potm potx pps ppsm ppsx ppt pptm pptx doc docm docx dot dotm dotx odt rtf).include?(file_ext)
|
||||
end
|
||||
|
||||
# For showing next to file
|
||||
def file_fa_icon_class(asset)
|
||||
file_ext = asset.file_file_name.split('.').last
|
||||
if %w(doc docm docx dot dotm dotx odt rtf).include?(file_ext)
|
||||
fa_class = 'fa-file-word'
|
||||
elsif %w(csv ods xls xlsb xlsm xlsx).include?(file_ext)
|
||||
fa_class = 'fa-file-excel'
|
||||
elsif %w(odp pot potm potx pps ppsm ppsx ppt pptm pptx).include?(file_ext)
|
||||
fa_class = 'fa-file-powerpoint'
|
||||
end
|
||||
|
||||
# Now check for custom mappings or possible overrides
|
||||
if Extends::FILE_ICON_MAPPINGS[file_ext]
|
||||
fa_class = Extends::FILE_FA_ICON_MAPPINGS[file_ext]
|
||||
end
|
||||
|
||||
fa_class = 'fa-file' if fa_class.blank?
|
||||
fa_class
|
||||
end
|
||||
|
||||
# For showing next to file
|
||||
def file_extension_icon(asset)
|
||||
file_ext = asset.file_file_name.split('.').last
|
||||
|
|
|
@ -1,75 +0,0 @@
|
|||
module WopiHelper
|
||||
def wopi_result_view_file_button(result)
|
||||
if can_read_experiment?(result.my_module.experiment) &&
|
||||
result.asset.can_perform_action('view')
|
||||
link_to view_asset_url(id: result.asset),
|
||||
class: 'btn btn-default btn-sm',
|
||||
target: '_blank',
|
||||
style: 'display: inline-block' do
|
||||
"#{file_application_icon(
|
||||
result.asset
|
||||
)} #{wopi_button_text(result.asset, 'view')}".html_safe
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def wopi_result_edit_file_button(result)
|
||||
if can_manage_module?(result.my_module) &&
|
||||
result.asset.can_perform_action('edit')
|
||||
link_to edit_asset_url(id: result.asset),
|
||||
class: 'btn btn-default btn-sm',
|
||||
target: '_blank',
|
||||
style: 'display: inline-block' do
|
||||
"#{file_application_icon(
|
||||
result.asset
|
||||
)} #{wopi_button_text(result.asset, 'edit')}".html_safe
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def wopi_asset_view_button(asset)
|
||||
if asset.can_perform_action('view')
|
||||
link_to view_asset_url(id: asset),
|
||||
class: 'btn btn-default btn-sm',
|
||||
target: '_blank',
|
||||
style: 'display: inline-block' do
|
||||
"#{file_application_icon(asset)} #{wopi_button_text(asset, 'view')}"
|
||||
.html_safe
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def wopi_asset_edit_button(asset)
|
||||
if asset.can_perform_action('edit')
|
||||
link_to edit_asset_url(id: asset),
|
||||
class: 'btn btn-default btn-sm',
|
||||
target: '_blank',
|
||||
style: 'display: inline-block' do
|
||||
"#{file_application_icon(
|
||||
asset
|
||||
)} #{wopi_button_text(asset, 'edit')}".html_safe
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def wopi_asset_file_name(asset, link = false)
|
||||
html = '<p style="display: inline-block">'
|
||||
html += "#{file_extension_icon(asset)} "
|
||||
if link
|
||||
html += link_to download_asset_path(asset),
|
||||
data: { no_turbolink: true,
|
||||
id: true,
|
||||
status: 'asset-present' } do
|
||||
truncate(
|
||||
asset.file_file_name,
|
||||
length: Constants::FILENAME_TRUNCATION_LENGTH
|
||||
)
|
||||
end
|
||||
else
|
||||
html += truncate(asset.file_file_name,
|
||||
length: Constants::FILENAME_TRUNCATION_LENGTH)
|
||||
end
|
||||
html += ' </p>'
|
||||
sanitize_input(html, %w(img a))
|
||||
end
|
||||
end
|
4
app/javascript/packs/fontawesome.scss
vendored
Normal file
4
app/javascript/packs/fontawesome.scss
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
$fa-font-path: "~@fortawesome/fontawesome-free-webfonts/webfonts/";
|
||||
|
||||
@import "~@fortawesome/fontawesome-free-webfonts/scss/fontawesome";
|
||||
@import "~@fortawesome/fontawesome-free-webfonts/scss/fa-regular";
|
|
@ -1,8 +1,6 @@
|
|||
$fa-font-path: "~font-awesome/fonts/";
|
||||
$icon-font-path: "~bootstrap-sass/assets/fonts/bootstrap/";
|
||||
|
||||
@import "~bootstrap-sass/assets/stylesheets/bootstrap";
|
||||
@import "~font-awesome/scss/font-awesome";
|
||||
@import "~react-bootstrap-table/dist/react-bootstrap-table.min";
|
||||
@import "react-tagsinput/react-tagsinput.css";
|
||||
@import "react-bootstrap-timezone-picker/dist/react-bootstrap-timezone-picker.min.css";
|
||||
|
|
|
@ -25,12 +25,12 @@ const NotificationImage = ({className, type, avatar}: Props) => {
|
|||
),
|
||||
deliver: (
|
||||
<span className="deliver">
|
||||
<i className="fa fa-truck" />
|
||||
<i className="far fa-truck" />
|
||||
</span>
|
||||
),
|
||||
assignment: (
|
||||
<span className="assignment">
|
||||
<i className="fa fa-newspaper-o" />
|
||||
<i className="far fa-newspaper-o" />
|
||||
</span>
|
||||
)
|
||||
}
|
||||
|
|
|
@ -141,7 +141,7 @@ class NotificationsDropdown extends Component {
|
|||
this.dropdown = el;
|
||||
}}
|
||||
>
|
||||
<i className="fa fa-bell" />
|
||||
<i className="far fa-bell" />
|
||||
<span className="visible-xs-inline visible-sm-inline">
|
||||
<FormattedMessage id="navbar.notifications_label" />
|
||||
</span>
|
||||
|
|
|
@ -80,7 +80,7 @@ class TeamSwitch extends Component<Props, State> {
|
|||
onClick={this.setTeams}
|
||||
title={
|
||||
<span>
|
||||
<i className="fa fa-users" /> {this.props.current_team.name}
|
||||
<i className="far fa-users" /> {this.props.current_team.name}
|
||||
</span>
|
||||
}
|
||||
id="team-switch"
|
||||
|
|
|
@ -107,7 +107,7 @@ class Navigation extends Component {
|
|||
</NavItem>
|
||||
<NavItem eventKey={3}>
|
||||
<i
|
||||
className="fa fa-cubes"
|
||||
className="far fa-cubes"
|
||||
aria-hidden="true"
|
||||
title="Repositories"
|
||||
/>
|
||||
|
|
|
@ -24,7 +24,7 @@ export default (props: { spinner_on: boolean }) => {
|
|||
spinner = (
|
||||
<Wrapper>
|
||||
<div className="center-box">
|
||||
<i className="fa fa-spinner fa-spin fa-3x" aria-hidden="true" />
|
||||
<i className="far fa-spinner fa-spin fa-3x" aria-hidden="true" />
|
||||
</div>
|
||||
</Wrapper>
|
||||
);
|
||||
|
|
|
@ -75,7 +75,7 @@ class SettingsPreferences extends Component<Props, State> {
|
|||
type={ASSIGNMENT_NOTIFICATION}
|
||||
title="settings_page.assignement"
|
||||
subtitle="settings_page.assignement_msg"
|
||||
iconClasses="fa fa-newspaper-o"
|
||||
iconClasses="far fa-newspaper-o"
|
||||
inAppNotification={this.state.assignments_notification}
|
||||
emailNotification={this.state.assignments_email_notification}
|
||||
iconBackground={MAIN_COLOR_BLUE}
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
<%= favicon_link_tag "favicon-16.png", type: "image/png", size: "16x16" %>
|
||||
<%= favicon_link_tag "favicon-32.png", type: "image/png", size: "32x32" %>
|
||||
<%= favicon_link_tag "favicon-48.png", type: "image/png", size: "48x48" %>
|
||||
<%= stylesheet_pack_tag 'fontawesome' %>
|
||||
|
||||
<%= csrf_meta_tags %>
|
||||
</head>
|
||||
|
|
|
@ -3,5 +3,5 @@
|
|||
<% elsif result.is_table %>
|
||||
<%= render partial: "results/result_table.html.erb", locals: {result: result} %>
|
||||
<% elsif result.is_asset %>
|
||||
<%= render partial: "results/result_asset.html.erb", locals: {result: result} %>
|
||||
<%= render partial: "shared/asset_link", locals: { asset: result.asset }, formats: :html %>
|
||||
<% end %>
|
||||
|
|
|
@ -44,7 +44,7 @@
|
|||
<%= render partial: "protocols/import_export/import_elements.html.erb" %>
|
||||
|
||||
<!-- Image preview modal -->
|
||||
<%= render partial: "shared/image_preview_modal.html.erb" %>
|
||||
<%= render partial: "shared/file_preview_modal.html.erb" %>
|
||||
|
||||
<!-- Complete task modal -->
|
||||
<%= render partial: 'my_modules/complete_task_modal.html.erb' %>
|
||||
|
|
|
@ -41,7 +41,7 @@
|
|||
|
||||
<div style="height: 15px;"></div>
|
||||
|
||||
<%= render partial: "shared/image_preview_modal.html.erb" %>
|
||||
<%= render partial: "shared/file_preview_modal.html.erb" %>
|
||||
|
||||
<div id="results" data-module-id="<%= @my_module.id %>">
|
||||
<% ordered_result_of(@my_module).each do |result| %>
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
|
||||
<%= render partial: "protocols/steps.html.erb" %>
|
||||
|
||||
<%= render partial: "shared/image_preview_modal.html.erb" %>
|
||||
<%= render partial: "shared/file_preview_modal.html.erb" %>
|
||||
|
||||
<div class="hidden" data-role="updated-at-label-url" data-url="<%= updated_at_label_protocol_path(@protocol) %>"></div>
|
||||
|
||||
|
|
|
@ -146,7 +146,7 @@
|
|||
<%= render partial: "protocols/index/import_results_modal.html.erb" %>
|
||||
<%= render partial: "protocols/index/linked_children_modal.html.erb" %>
|
||||
<%= render partial: "protocols/index/protocol_preview_modal.html.erb" %>
|
||||
<%= render partial: "shared/image_preview_modal.html.erb" %>
|
||||
<%= render partial: "shared/file_preview_modal.html.erb" %>
|
||||
|
||||
<%= render partial: "protocols/import_export/import_elements.html.erb" %>
|
||||
|
||||
|
|
|
@ -122,11 +122,11 @@
|
|||
<% else %>
|
||||
<% if asset.is_image? %>
|
||||
<%= link_to download_asset_path(asset),
|
||||
class: 'image-preview-link',
|
||||
class: 'file-preview-link',
|
||||
id: "modal_link#{asset.id}",
|
||||
data: {no_turbolink: true, id: true, status: "asset-present",
|
||||
description: "#{step.position + 1}. #{truncate(step.name, length: Constants::FILENAME_TRUNCATION_LENGTH)}"} do %>
|
||||
<%= image_tag asset.url(:medium), data: {'preview-url': large_image_url_asset_path(asset)} %>
|
||||
<%= image_tag asset.url(:medium), data: {'preview-url': asset_file_preview_path(asset)} %>
|
||||
<p><%= truncate(asset.file_file_name,
|
||||
length: Constants::FILENAME_TRUNCATION_LENGTH) %></p>
|
||||
<% end %>
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
data-id='{ "experiment_id": <%= experiment.id %> }'
|
||||
data-scroll-id="<%= experiment.id %>"
|
||||
data-modal-title="<%=t "projects.reports.elements.modals.experiment_contents.head_title",
|
||||
experiment: experiment.name %>" data-name="<%= name %>" data-icon-class="fa fa-flask">
|
||||
experiment: experiment.name %>" data-name="<%= name %>" data-icon-class="far fa-flask">
|
||||
<div class="report-element-header">
|
||||
<div class="row">
|
||||
<div class="pull-left user-time">
|
||||
|
|
|
@ -4,11 +4,11 @@
|
|||
<% if order.blank? and @order.present? then order = @order end %>
|
||||
<% timestamp = Time.current + 1.year - 1.days %>
|
||||
<% rows_json = my_module.repository_json_hot(repository.id, order) %>
|
||||
<div class="report-element report-module-repository-element" data-sort-hot="1" data-ts="<%= timestamp.to_i %>" data-type="my_module_repository" data-id='{ "my_module_id": <%= my_module.id %>, "repository_id": <%= repository.id %> }' data-scroll-id="<%= "#{my_module.id}_#{repository.id}" %>" data-order="<%= order == :asc ? "asc" : "desc" %>" data-name="<%= repository.name %>" data-icon-class="fa fa-cubes">
|
||||
<div class="report-element report-module-repository-element" data-sort-hot="1" data-ts="<%= timestamp.to_i %>" data-type="my_module_repository" data-id='{ "my_module_id": <%= my_module.id %>, "repository_id": <%= repository.id %> }' data-scroll-id="<%= "#{my_module.id}_#{repository.id}" %>" data-order="<%= order == :asc ? "asc" : "desc" %>" data-name="<%= repository.name %>" data-icon-class="far fa-cubes">
|
||||
<div class="report-element-header">
|
||||
<div class="row">
|
||||
<div class="pull-left repository-icon">
|
||||
<span class="fa fa-cubes"></span>
|
||||
<span class="far fa-cubes"></span>
|
||||
</div>
|
||||
<div class="pull-left repository-name">
|
||||
<%=t "projects.reports.elements.module_repository.name", repository: repository.name, my_module: my_module.name %>
|
||||
|
|
|
@ -41,7 +41,7 @@
|
|||
<%= render partial: 'search/results/partials/project_text.html.erb',
|
||||
locals: { project: element.my_module.experiment.project } %>
|
||||
</li>
|
||||
<li><i class='fa fa-flask'></i>
|
||||
<li><i class='far fa-flask'></i>
|
||||
<%= render partial: 'search/results/partials/experiment_text.html.erb',
|
||||
locals: { experiment: element.my_module.experiment } %>
|
||||
</li>
|
||||
|
|
|
@ -1,34 +0,0 @@
|
|||
<% if can_read_experiment?(result.my_module.experiment) %>
|
||||
<% if result.asset.file.processing? %>
|
||||
<span data-status='asset-loading'
|
||||
data-present-url='<%= file_present_asset_path(result.asset) %>'>
|
||||
<%= image_tag 'medium/processing.gif' %>
|
||||
</span>
|
||||
<% else %>
|
||||
<% if result.asset.is_image? %>
|
||||
<%= link_to download_asset_path(result.asset),
|
||||
class: 'image-preview-link',
|
||||
id: "modal_link#{result.asset.id}",
|
||||
data: {no_turbolink: true,
|
||||
description: "#{truncate(result.name, length: Constants::FILENAME_TRUNCATION_LENGTH)}"} do %>
|
||||
<%= image_tag result.asset.url(:medium), data: {'preview-url': large_image_url_asset_path(result.asset)} %>
|
||||
<p><%= truncate(result.asset.file_file_name,
|
||||
length: Constants::FILENAME_TRUNCATION_LENGTH) %></p>
|
||||
<% end %>
|
||||
<% else %>
|
||||
<%= link_to download_asset_path(result.asset), data: {no_turbolink: true} do %>
|
||||
<% if wopi_file?(result.asset) %>
|
||||
<%= wopi_asset_file_name(result.asset) %>
|
||||
<% else %>
|
||||
<p>
|
||||
<%= file_extension_icon(result.asset) %>
|
||||
<%= truncate(result.asset.file_file_name,
|
||||
length: Constants::FILENAME_TRUNCATION_LENGTH) %>
|
||||
</p>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<%= wopi_result_view_file_button(result) %>
|
||||
<%= wopi_result_edit_file_button(result) %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<% end %>
|
|
@ -60,7 +60,7 @@
|
|||
<%= render partial: 'search/results/partials/project_text.html.erb',
|
||||
locals: { project: mod.experiment.project } %>
|
||||
</li>
|
||||
<li><i class='fa fa-flask'></i>
|
||||
<li><i class='far fa-flask'></i>
|
||||
<%= render partial: 'search/results/partials/experiment_text.html.erb',
|
||||
locals: { experiment: mod.experiment } %>
|
||||
</li>
|
||||
|
|
|
@ -217,7 +217,7 @@
|
|||
|
||||
<% @repository_search_count.each do |team, results| %>
|
||||
<li class="repositories-team <%= 'active' if results[:count] > 0 %>">
|
||||
<span class="fa fa-cubes"></span>
|
||||
<span class="far fa-cubes"></span>
|
||||
<%= t('Repositories_team', team: team) %>
|
||||
</li>
|
||||
<% results[:repositories].each do |repository, values| %>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<% results.each do |repository_row| %>
|
||||
<h5>
|
||||
<span class="fa fa-cubes"></span>
|
||||
<span class="far fa-cubes"></span>
|
||||
<%=t "search.index.repositories.repository_row" %>
|
||||
<%= highlight repository_row.name, search_query.strip.split(/\s+/) %>
|
||||
</h5>
|
||||
|
|
21
app/views/shared/_asset_link.html.erb
Normal file
21
app/views/shared/_asset_link.html.erb
Normal file
|
@ -0,0 +1,21 @@
|
|||
<% if asset.file_present %>
|
||||
<% if asset.file.processing? %>
|
||||
<span data-status='asset-loading'
|
||||
data-present-url='<%= file_present_asset_path(asset.id) %>'>
|
||||
<%= image_tag 'medium/processing.gif' %>
|
||||
</span>
|
||||
<% else %>
|
||||
<%= link_to download_asset_path(asset),
|
||||
class: 'file-preview-link',
|
||||
id: "modal_link#{asset.id}",
|
||||
data: { no_turbolink: true, id: true, status: 'asset-present', 'preview-url': asset_file_preview_path(asset) } do %>
|
||||
<% if asset.is_image? %>
|
||||
<%= image_tag asset.url(:medium) %>
|
||||
<% end %>
|
||||
<p><%= truncate(asset.file_file_name,
|
||||
length: Constants::FILENAME_TRUNCATION_LENGTH) %></p>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<% else %>
|
||||
<%= image_tag 'medium/processing.gif' %>
|
||||
<% end %>
|
4
app/views/shared/_file_preview_icon.html.erb
Normal file
4
app/views/shared/_file_preview_icon.html.erb
Normal file
|
@ -0,0 +1,4 @@
|
|||
<div>
|
||||
<i class="far fa-10x <%= file_fa_icon_class(asset) %>"></i>
|
||||
<h3 class="file-name"></h3>
|
||||
</div>
|
|
@ -1,18 +1,19 @@
|
|||
<div id="imagePreviewModal" class="modal modal-image-preview" role="dialog" tabindex="-1" aria-labelledby="imagePreviewModal" aria-hidden="true">
|
||||
<div id="filePreviewModal" class="modal modal-file-preview" role="dialog" tabindex="-1" aria-labelledby="filePreviewModal" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="preview-close" data-dismiss="modal"><span class="glyphicon glyphicon-remove"></span></button>
|
||||
<span class="image-name"></span>
|
||||
<a class="image-download-link" href='#'>
|
||||
<span class="file-name"></span>
|
||||
<span class="file-wopi-controls"></span>
|
||||
<a class="file-download-link" href='#'>
|
||||
<p><span class="glyphicon glyphicon-download-alt"></span> <%= t('Download')%></p>
|
||||
</a>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<img>
|
||||
<div class="file-preview-container">
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<span class="image-description"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
16
app/views/shared/_file_wopi_controlls.html.erb
Normal file
16
app/views/shared/_file_wopi_controlls.html.erb
Normal file
|
@ -0,0 +1,16 @@
|
|||
<%= link_to view_asset_url(id: asset),
|
||||
class: 'btn btn-default btn-sm',
|
||||
target: '_blank',
|
||||
style: 'display: inline-block' do %>
|
||||
<%= file_application_icon(asset) %>
|
||||
<%= wopi_button_text(asset, 'view') %>
|
||||
<% end %>
|
||||
<% if can_edit %>
|
||||
<%= link_to edit_asset_url(id: asset),
|
||||
class: 'btn btn-default btn-sm',
|
||||
target: '_blank',
|
||||
style: 'display: inline-block' do %>
|
||||
<%= file_application_icon(asset) %>
|
||||
<%= wopi_button_text(asset, 'edit') %>
|
||||
<% end %>
|
||||
<% end %>
|
|
@ -8,7 +8,7 @@
|
|||
</li>
|
||||
<li class="<%= "active" if repositories_are_selected? %>">
|
||||
<%= link_to team_repositories_path(current_team), id: "repositories-link", title: t('left_menu_bar.repositories') do %>
|
||||
<span class="fa fa-cubes" aria-hidden="true"></span>
|
||||
<span class="far fa-cubes" aria-hidden="true"></span>
|
||||
<span><%= t('left_menu_bar.repositories') %></span>
|
||||
<% end %>
|
||||
</li>
|
||||
|
|
|
@ -11,45 +11,6 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<% if ff.object.file.exists? %>
|
||||
<% if can_read_protocol_in_module?(@protocol) || can_read_protocol_in_repository?(@protocol) %>
|
||||
<% if ff.object.is_image? %>
|
||||
<%= link_to download_asset_path(ff.object),
|
||||
class: 'image-preview-link',
|
||||
id: "modal_link#{ff.object.id}",
|
||||
data: {no_turbolink: true, id: true, status: "asset-present",
|
||||
description: "#{step.position + 1}. #{truncate(step.name, length: Constants::FILENAME_TRUNCATION_LENGTH)}"} do %>
|
||||
<% if ff.object.is_image? %>
|
||||
<%= image_tag ff.object.url(:medium), data: {'preview-url': large_image_url_asset_path(ff.object)} %>
|
||||
<p><%= truncate(ff.object.file_file_name,
|
||||
length: Constants::FILENAME_TRUNCATION_LENGTH) %></p>
|
||||
<% else %>
|
||||
<p>
|
||||
<%= file_extension_icon(ff.object) %>
|
||||
<%= ff.object.file_file_name %>
|
||||
</p>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<% else %>
|
||||
<%= link_to download_asset_path(ff.object), data: {no_turbolink: true} do %>
|
||||
<% if ff.object.is_image? %>
|
||||
<%= image_tag ff.object.url(:medium) %>
|
||||
<p><%= truncate(ff.object.file_file_name,
|
||||
length: Constants::FILENAME_TRUNCATION_LENGTH) %></p>
|
||||
<% else %>
|
||||
<p>
|
||||
<%= file_extension_icon(ff.object) %>
|
||||
<%= ff.object.file_file_name %>
|
||||
</p>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<% else %>
|
||||
<%= image_tag image_tag ff.object.url(:medium) if ff.object.is_image? %>
|
||||
<p><%= ff.object.file_file_name %></p>
|
||||
<% end %>
|
||||
<% else %>
|
||||
<%= ff.file_field :file %>
|
||||
<% end %>
|
||||
<%= render partial: "shared/asset_link", locals: { asset: ff.object }, formats: :html %>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -83,50 +83,7 @@
|
|||
<ul>
|
||||
<% assets.each do |asset| %>
|
||||
<li>
|
||||
<% if can_read_protocol_in_module?(@protocol) ||
|
||||
can_read_protocol_in_repository?(@protocol) %>
|
||||
<% if asset.file_present %>
|
||||
<% if asset.file.processing? %>
|
||||
<span data-status='asset-loading'
|
||||
data-present-url='<%= file_present_asset_path(asset) %>'>
|
||||
<%= image_tag 'medium/processing.gif' %>
|
||||
</span>
|
||||
<% else %>
|
||||
<% if asset.is_image? %>
|
||||
<%= link_to download_asset_path(asset),
|
||||
class: 'image-preview-link',
|
||||
id: "modal_link#{asset.id}",
|
||||
data: {no_turbolink: true, id: true, status: "asset-present",
|
||||
description: "#{step.position + 1}. #{truncate(step.name, length: Constants::FILENAME_TRUNCATION_LENGTH)}"} do %>
|
||||
<%= image_tag asset.url(:medium), data: {'preview-url': large_image_url_asset_path(asset)} %>
|
||||
<p><%= truncate(asset.file_file_name,
|
||||
length: Constants::FILENAME_TRUNCATION_LENGTH) %></p>
|
||||
<% end %>
|
||||
<% else %>
|
||||
<%= render partial: 'steps/wopi_controlls.html.erb', locals: { asset: asset } %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<% else %>
|
||||
<span data-status='asset-loading'
|
||||
data-present-url='<%= file_present_asset_path(asset) %>'>
|
||||
<%= image_tag 'medium/processing.gif' %>
|
||||
</span>
|
||||
<% end %>
|
||||
<% else %>
|
||||
<% if asset.file.processing? %>
|
||||
<span data-status='asset-loading'
|
||||
data-present-url='<%= file_present_asset_path(asset) %>'>
|
||||
<%= image_tag 'medium/processing.gif' %>
|
||||
</span>
|
||||
<% else %>
|
||||
<%= image_tag asset.url(:medium) if asset.is_image? %>
|
||||
<% end %>
|
||||
<p>
|
||||
<%= file_extension_icon(asset) %>
|
||||
<%= truncate(asset.file_file_name,
|
||||
length: Constants::FILENAME_TRUNCATION_LENGTH) %>
|
||||
</p>
|
||||
<% end %>
|
||||
<%= render partial: "shared/asset_link", locals: { asset: asset }, formats: :html %>
|
||||
</li>
|
||||
<% end %>
|
||||
</ul>
|
||||
|
|
|
@ -1,24 +0,0 @@
|
|||
<%= link_to download_asset_path(asset),
|
||||
data: { no_turbolink: true,
|
||||
id: true,
|
||||
status: 'asset-present' } do %>
|
||||
<%= image_tag preview_asset_path(asset) if asset.is_image? %>
|
||||
|
||||
<% if wopi_file?(asset) %>
|
||||
<%= wopi_asset_file_name(asset) %>
|
||||
<% else %>
|
||||
<p>
|
||||
<%= file_extension_icon(asset) %>
|
||||
<%= truncate(asset.file_file_name,
|
||||
length: Constants::FILENAME_TRUNCATION_LENGTH) %>
|
||||
</p>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<%= wopi_asset_view_button(asset) %>
|
||||
<% view_only ||= false %>
|
||||
<% if !view_only %>
|
||||
<% if can_manage_protocol_in_module?(@protocol) ||
|
||||
can_manage_protocol_in_repository?(@protocol) %>
|
||||
<%= wopi_asset_edit_button(asset) %>
|
||||
<% end %>
|
||||
<% end %>
|
|
@ -71,4 +71,8 @@ class Extends
|
|||
# Hash used for mapping file extensions to custom icons,
|
||||
# 'extension' => 'path_to_the_icon'
|
||||
FILE_ICON_MAPPINGS = {}
|
||||
|
||||
# Hash used for mapping file extensions to custom font awesome icon classes,
|
||||
# 'extension' => 'fa class'
|
||||
FILE_FA_ICON_MAPPINGS = {}
|
||||
end
|
||||
|
|
|
@ -1730,7 +1730,7 @@ en:
|
|||
next: "Next"
|
||||
skip_tutorial: "Skip tutorial"
|
||||
finish_tutorial: "Start using sciNote"
|
||||
tutorial_welcome_title_html: "Welcome to <em>sciNote</em>, your electronic lab notebook. <em>sciNote</em> organizes your work in Projects. Click <strong>Team icon</strong> <span class='fa fa-users'></span> to choose Projects from which Team you want to view on your Dashboard. You can also reorder them by clicking the <strong>Sort by</strong> button. <strong>(Step 1/26)</strong>"
|
||||
tutorial_welcome_title_html: "Welcome to <em>sciNote</em>, your electronic lab notebook. <em>sciNote</em> organizes your work in Projects. Click <strong>Team icon</strong> <span class='far fa-users'></span> to choose Projects from which Team you want to view on your Dashboard. You can also reorder them by clicking the <strong>Sort by</strong> button. <strong>(Step 1/26)</strong>"
|
||||
create_project_html: "Click here to create a Project and it will appear under the Team you've chosen. Choose public <span class='glyphicon glyphicon-eye-open'></span> if you want everyone from the Team to view the Project or choose private <span class='glyphicon glyphicon-eye-close'></span> so only the people who you invite to the Project can see it. <strong>(Step 2/26)</strong>"
|
||||
project_options_html: "In the bottom row of the Project card you can check the latest activity <span class='glyphicon glyphicon-equalizer'></span>, invite collaborators <span class='glyphicon glyphicon-user'></span>, see the notifications <span class='glyphicon glyphicon-bell'></span> and write comments <span class='glyphicon glyphicon-comment'></span>. You can also edit the Project's name and visibility or archive it. You can recall the Project from the Archive <span class='glyphicon glyphicon-briefcase'></span> in the top right side of the Dashboard at any time. <strong>(Step 3/26)</strong>"
|
||||
create_experiment_html: "Inside of a Project you can create Experiments. To create one click on this button and edit Experiment’s name and description. <strong>(Step 4/26)</strong>"
|
||||
|
|
|
@ -493,9 +493,9 @@ Rails.application.routes.draw do
|
|||
# We cannot use 'resources :assets' because assets is a reserved route
|
||||
# in Rails (assets pipeline) and causes funky behavior
|
||||
get 'files/:id/present', to: 'assets#file_present', as: 'file_present_asset'
|
||||
get 'files/:id/large_url',
|
||||
to: 'assets#large_image_url',
|
||||
as: 'large_image_url_asset'
|
||||
get 'files/:id/preview',
|
||||
to: 'assets#file_preview',
|
||||
as: 'asset_file_preview'
|
||||
get 'files/:id/download', to: 'assets#download', as: 'download_asset'
|
||||
get 'files/:id/preview', to: 'assets#preview', as: 'preview_asset'
|
||||
get 'files/:id/view', to: 'assets#view', as: 'view_asset'
|
||||
|
|
808
package-lock.json
generated
808
package-lock.json
generated
|
@ -4,6 +4,11 @@
|
|||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
"@fortawesome/fontawesome-free-webfonts": {
|
||||
"version": "1.0.5",
|
||||
"resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free-webfonts/-/fontawesome-free-webfonts-1.0.5.tgz",
|
||||
"integrity": "sha512-9JL80WJkSiTdR0AtIz7J2qGIkJxgOB1LAcESYP26cpl2Dfs8iy06NbAGM+e6BINpCT8XO1+fDKjU/LwCsOy8XA=="
|
||||
},
|
||||
"abbrev": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz",
|
||||
|
@ -1613,6 +1618,7 @@
|
|||
"requires": {
|
||||
"anymatch": "1.3.0",
|
||||
"async-each": "1.0.1",
|
||||
"fsevents": "1.1.3",
|
||||
"glob-parent": "2.0.0",
|
||||
"inherits": "2.0.3",
|
||||
"is-binary-path": "1.0.1",
|
||||
|
@ -3667,11 +3673,6 @@
|
|||
"debug": "2.6.8"
|
||||
}
|
||||
},
|
||||
"font-awesome": {
|
||||
"version": "4.7.0",
|
||||
"resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz",
|
||||
"integrity": "sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM="
|
||||
},
|
||||
"for-in": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
|
||||
|
@ -3740,6 +3741,795 @@
|
|||
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
|
||||
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
|
||||
},
|
||||
"fsevents": {
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz",
|
||||
"integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==",
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"nan": "2.6.2",
|
||||
"node-pre-gyp": "0.6.39"
|
||||
},
|
||||
"dependencies": {
|
||||
"abbrev": {
|
||||
"version": "1.1.0",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"ajv": {
|
||||
"version": "4.11.8",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"co": "4.6.0",
|
||||
"json-stable-stringify": "1.0.1"
|
||||
}
|
||||
},
|
||||
"ansi-regex": {
|
||||
"version": "2.1.1",
|
||||
"bundled": true
|
||||
},
|
||||
"aproba": {
|
||||
"version": "1.1.1",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"are-we-there-yet": {
|
||||
"version": "1.1.4",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"delegates": "1.0.0",
|
||||
"readable-stream": "2.2.9"
|
||||
}
|
||||
},
|
||||
"asn1": {
|
||||
"version": "0.2.3",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"assert-plus": {
|
||||
"version": "0.2.0",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"asynckit": {
|
||||
"version": "0.4.0",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"aws-sign2": {
|
||||
"version": "0.6.0",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"aws4": {
|
||||
"version": "1.6.0",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"balanced-match": {
|
||||
"version": "0.4.2",
|
||||
"bundled": true
|
||||
},
|
||||
"bcrypt-pbkdf": {
|
||||
"version": "1.0.1",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"tweetnacl": "0.14.5"
|
||||
}
|
||||
},
|
||||
"block-stream": {
|
||||
"version": "0.0.9",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"inherits": "2.0.3"
|
||||
}
|
||||
},
|
||||
"boom": {
|
||||
"version": "2.10.1",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"hoek": "2.16.3"
|
||||
}
|
||||
},
|
||||
"brace-expansion": {
|
||||
"version": "1.1.7",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"balanced-match": "0.4.2",
|
||||
"concat-map": "0.0.1"
|
||||
}
|
||||
},
|
||||
"buffer-shims": {
|
||||
"version": "1.0.0",
|
||||
"bundled": true
|
||||
},
|
||||
"caseless": {
|
||||
"version": "0.12.0",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"co": {
|
||||
"version": "4.6.0",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"code-point-at": {
|
||||
"version": "1.1.0",
|
||||
"bundled": true
|
||||
},
|
||||
"combined-stream": {
|
||||
"version": "1.0.5",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"delayed-stream": "1.0.0"
|
||||
}
|
||||
},
|
||||
"concat-map": {
|
||||
"version": "0.0.1",
|
||||
"bundled": true
|
||||
},
|
||||
"console-control-strings": {
|
||||
"version": "1.1.0",
|
||||
"bundled": true
|
||||
},
|
||||
"core-util-is": {
|
||||
"version": "1.0.2",
|
||||
"bundled": true
|
||||
},
|
||||
"cryptiles": {
|
||||
"version": "2.0.5",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"boom": "2.10.1"
|
||||
}
|
||||
},
|
||||
"dashdash": {
|
||||
"version": "1.14.1",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"assert-plus": "1.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"assert-plus": {
|
||||
"version": "1.0.0",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"debug": {
|
||||
"version": "2.6.8",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"ms": "2.0.0"
|
||||
}
|
||||
},
|
||||
"deep-extend": {
|
||||
"version": "0.4.2",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"delayed-stream": {
|
||||
"version": "1.0.0",
|
||||
"bundled": true
|
||||
},
|
||||
"delegates": {
|
||||
"version": "1.0.0",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"detect-libc": {
|
||||
"version": "1.0.2",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"ecc-jsbn": {
|
||||
"version": "0.1.1",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"jsbn": "0.1.1"
|
||||
}
|
||||
},
|
||||
"extend": {
|
||||
"version": "3.0.1",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"extsprintf": {
|
||||
"version": "1.0.2",
|
||||
"bundled": true
|
||||
},
|
||||
"forever-agent": {
|
||||
"version": "0.6.1",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"form-data": {
|
||||
"version": "2.1.4",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"asynckit": "0.4.0",
|
||||
"combined-stream": "1.0.5",
|
||||
"mime-types": "2.1.15"
|
||||
}
|
||||
},
|
||||
"fs.realpath": {
|
||||
"version": "1.0.0",
|
||||
"bundled": true
|
||||
},
|
||||
"fstream": {
|
||||
"version": "1.0.11",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"graceful-fs": "4.1.11",
|
||||
"inherits": "2.0.3",
|
||||
"mkdirp": "0.5.1",
|
||||
"rimraf": "2.6.1"
|
||||
}
|
||||
},
|
||||
"fstream-ignore": {
|
||||
"version": "1.0.5",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"fstream": "1.0.11",
|
||||
"inherits": "2.0.3",
|
||||
"minimatch": "3.0.4"
|
||||
}
|
||||
},
|
||||
"gauge": {
|
||||
"version": "2.7.4",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"aproba": "1.1.1",
|
||||
"console-control-strings": "1.1.0",
|
||||
"has-unicode": "2.0.1",
|
||||
"object-assign": "4.1.1",
|
||||
"signal-exit": "3.0.2",
|
||||
"string-width": "1.0.2",
|
||||
"strip-ansi": "3.0.1",
|
||||
"wide-align": "1.1.2"
|
||||
}
|
||||
},
|
||||
"getpass": {
|
||||
"version": "0.1.7",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"assert-plus": "1.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"assert-plus": {
|
||||
"version": "1.0.0",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"glob": {
|
||||
"version": "7.1.2",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"fs.realpath": "1.0.0",
|
||||
"inflight": "1.0.6",
|
||||
"inherits": "2.0.3",
|
||||
"minimatch": "3.0.4",
|
||||
"once": "1.4.0",
|
||||
"path-is-absolute": "1.0.1"
|
||||
}
|
||||
},
|
||||
"graceful-fs": {
|
||||
"version": "4.1.11",
|
||||
"bundled": true
|
||||
},
|
||||
"har-schema": {
|
||||
"version": "1.0.5",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"har-validator": {
|
||||
"version": "4.2.1",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"ajv": "4.11.8",
|
||||
"har-schema": "1.0.5"
|
||||
}
|
||||
},
|
||||
"has-unicode": {
|
||||
"version": "2.0.1",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"hawk": {
|
||||
"version": "3.1.3",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"boom": "2.10.1",
|
||||
"cryptiles": "2.0.5",
|
||||
"hoek": "2.16.3",
|
||||
"sntp": "1.0.9"
|
||||
}
|
||||
},
|
||||
"hoek": {
|
||||
"version": "2.16.3",
|
||||
"bundled": true
|
||||
},
|
||||
"http-signature": {
|
||||
"version": "1.1.1",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"assert-plus": "0.2.0",
|
||||
"jsprim": "1.4.0",
|
||||
"sshpk": "1.13.0"
|
||||
}
|
||||
},
|
||||
"inflight": {
|
||||
"version": "1.0.6",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"once": "1.4.0",
|
||||
"wrappy": "1.0.2"
|
||||
}
|
||||
},
|
||||
"inherits": {
|
||||
"version": "2.0.3",
|
||||
"bundled": true
|
||||
},
|
||||
"ini": {
|
||||
"version": "1.3.4",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"is-fullwidth-code-point": {
|
||||
"version": "1.0.0",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"number-is-nan": "1.0.1"
|
||||
}
|
||||
},
|
||||
"is-typedarray": {
|
||||
"version": "1.0.0",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"isarray": {
|
||||
"version": "1.0.0",
|
||||
"bundled": true
|
||||
},
|
||||
"isstream": {
|
||||
"version": "0.1.2",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"jodid25519": {
|
||||
"version": "1.0.2",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"jsbn": "0.1.1"
|
||||
}
|
||||
},
|
||||
"jsbn": {
|
||||
"version": "0.1.1",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"json-schema": {
|
||||
"version": "0.2.3",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"json-stable-stringify": {
|
||||
"version": "1.0.1",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"jsonify": "0.0.0"
|
||||
}
|
||||
},
|
||||
"json-stringify-safe": {
|
||||
"version": "5.0.1",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"jsonify": {
|
||||
"version": "0.0.0",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"jsprim": {
|
||||
"version": "1.4.0",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"assert-plus": "1.0.0",
|
||||
"extsprintf": "1.0.2",
|
||||
"json-schema": "0.2.3",
|
||||
"verror": "1.3.6"
|
||||
},
|
||||
"dependencies": {
|
||||
"assert-plus": {
|
||||
"version": "1.0.0",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"mime-db": {
|
||||
"version": "1.27.0",
|
||||
"bundled": true
|
||||
},
|
||||
"mime-types": {
|
||||
"version": "2.1.15",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"mime-db": "1.27.0"
|
||||
}
|
||||
},
|
||||
"minimatch": {
|
||||
"version": "3.0.4",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"brace-expansion": "1.1.7"
|
||||
}
|
||||
},
|
||||
"minimist": {
|
||||
"version": "0.0.8",
|
||||
"bundled": true
|
||||
},
|
||||
"mkdirp": {
|
||||
"version": "0.5.1",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"minimist": "0.0.8"
|
||||
}
|
||||
},
|
||||
"ms": {
|
||||
"version": "2.0.0",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"node-pre-gyp": {
|
||||
"version": "0.6.39",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"detect-libc": "1.0.2",
|
||||
"hawk": "3.1.3",
|
||||
"mkdirp": "0.5.1",
|
||||
"nopt": "4.0.1",
|
||||
"npmlog": "4.1.0",
|
||||
"rc": "1.2.1",
|
||||
"request": "2.81.0",
|
||||
"rimraf": "2.6.1",
|
||||
"semver": "5.3.0",
|
||||
"tar": "2.2.1",
|
||||
"tar-pack": "3.4.0"
|
||||
}
|
||||
},
|
||||
"nopt": {
|
||||
"version": "4.0.1",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"abbrev": "1.1.0",
|
||||
"osenv": "0.1.4"
|
||||
}
|
||||
},
|
||||
"npmlog": {
|
||||
"version": "4.1.0",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"are-we-there-yet": "1.1.4",
|
||||
"console-control-strings": "1.1.0",
|
||||
"gauge": "2.7.4",
|
||||
"set-blocking": "2.0.0"
|
||||
}
|
||||
},
|
||||
"number-is-nan": {
|
||||
"version": "1.0.1",
|
||||
"bundled": true
|
||||
},
|
||||
"oauth-sign": {
|
||||
"version": "0.8.2",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"object-assign": {
|
||||
"version": "4.1.1",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"once": {
|
||||
"version": "1.4.0",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"wrappy": "1.0.2"
|
||||
}
|
||||
},
|
||||
"os-homedir": {
|
||||
"version": "1.0.2",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"os-tmpdir": {
|
||||
"version": "1.0.2",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"osenv": {
|
||||
"version": "0.1.4",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"os-homedir": "1.0.2",
|
||||
"os-tmpdir": "1.0.2"
|
||||
}
|
||||
},
|
||||
"path-is-absolute": {
|
||||
"version": "1.0.1",
|
||||
"bundled": true
|
||||
},
|
||||
"performance-now": {
|
||||
"version": "0.2.0",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"process-nextick-args": {
|
||||
"version": "1.0.7",
|
||||
"bundled": true
|
||||
},
|
||||
"punycode": {
|
||||
"version": "1.4.1",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"qs": {
|
||||
"version": "6.4.0",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"rc": {
|
||||
"version": "1.2.1",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"deep-extend": "0.4.2",
|
||||
"ini": "1.3.4",
|
||||
"minimist": "1.2.0",
|
||||
"strip-json-comments": "2.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"minimist": {
|
||||
"version": "1.2.0",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"readable-stream": {
|
||||
"version": "2.2.9",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"buffer-shims": "1.0.0",
|
||||
"core-util-is": "1.0.2",
|
||||
"inherits": "2.0.3",
|
||||
"isarray": "1.0.0",
|
||||
"process-nextick-args": "1.0.7",
|
||||
"string_decoder": "1.0.1",
|
||||
"util-deprecate": "1.0.2"
|
||||
}
|
||||
},
|
||||
"request": {
|
||||
"version": "2.81.0",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"aws-sign2": "0.6.0",
|
||||
"aws4": "1.6.0",
|
||||
"caseless": "0.12.0",
|
||||
"combined-stream": "1.0.5",
|
||||
"extend": "3.0.1",
|
||||
"forever-agent": "0.6.1",
|
||||
"form-data": "2.1.4",
|
||||
"har-validator": "4.2.1",
|
||||
"hawk": "3.1.3",
|
||||
"http-signature": "1.1.1",
|
||||
"is-typedarray": "1.0.0",
|
||||
"isstream": "0.1.2",
|
||||
"json-stringify-safe": "5.0.1",
|
||||
"mime-types": "2.1.15",
|
||||
"oauth-sign": "0.8.2",
|
||||
"performance-now": "0.2.0",
|
||||
"qs": "6.4.0",
|
||||
"safe-buffer": "5.0.1",
|
||||
"stringstream": "0.0.5",
|
||||
"tough-cookie": "2.3.2",
|
||||
"tunnel-agent": "0.6.0",
|
||||
"uuid": "3.0.1"
|
||||
}
|
||||
},
|
||||
"rimraf": {
|
||||
"version": "2.6.1",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"glob": "7.1.2"
|
||||
}
|
||||
},
|
||||
"safe-buffer": {
|
||||
"version": "5.0.1",
|
||||
"bundled": true
|
||||
},
|
||||
"semver": {
|
||||
"version": "5.3.0",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"set-blocking": {
|
||||
"version": "2.0.0",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"signal-exit": {
|
||||
"version": "3.0.2",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"sntp": {
|
||||
"version": "1.0.9",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"hoek": "2.16.3"
|
||||
}
|
||||
},
|
||||
"sshpk": {
|
||||
"version": "1.13.0",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"asn1": "0.2.3",
|
||||
"assert-plus": "1.0.0",
|
||||
"bcrypt-pbkdf": "1.0.1",
|
||||
"dashdash": "1.14.1",
|
||||
"ecc-jsbn": "0.1.1",
|
||||
"getpass": "0.1.7",
|
||||
"jodid25519": "1.0.2",
|
||||
"jsbn": "0.1.1",
|
||||
"tweetnacl": "0.14.5"
|
||||
},
|
||||
"dependencies": {
|
||||
"assert-plus": {
|
||||
"version": "1.0.0",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"string-width": {
|
||||
"version": "1.0.2",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"code-point-at": "1.1.0",
|
||||
"is-fullwidth-code-point": "1.0.0",
|
||||
"strip-ansi": "3.0.1"
|
||||
}
|
||||
},
|
||||
"string_decoder": {
|
||||
"version": "1.0.1",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"safe-buffer": "5.0.1"
|
||||
}
|
||||
},
|
||||
"stringstream": {
|
||||
"version": "0.0.5",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"strip-ansi": {
|
||||
"version": "3.0.1",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"ansi-regex": "2.1.1"
|
||||
}
|
||||
},
|
||||
"strip-json-comments": {
|
||||
"version": "2.0.1",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"tar": {
|
||||
"version": "2.2.1",
|
||||
"bundled": true,
|
||||
"requires": {
|
||||
"block-stream": "0.0.9",
|
||||
"fstream": "1.0.11",
|
||||
"inherits": "2.0.3"
|
||||
}
|
||||
},
|
||||
"tar-pack": {
|
||||
"version": "3.4.0",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"debug": "2.6.8",
|
||||
"fstream": "1.0.11",
|
||||
"fstream-ignore": "1.0.5",
|
||||
"once": "1.4.0",
|
||||
"readable-stream": "2.2.9",
|
||||
"rimraf": "2.6.1",
|
||||
"tar": "2.2.1",
|
||||
"uid-number": "0.0.6"
|
||||
}
|
||||
},
|
||||
"tough-cookie": {
|
||||
"version": "2.3.2",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"punycode": "1.4.1"
|
||||
}
|
||||
},
|
||||
"tunnel-agent": {
|
||||
"version": "0.6.0",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"safe-buffer": "5.0.1"
|
||||
}
|
||||
},
|
||||
"tweetnacl": {
|
||||
"version": "0.14.5",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"uid-number": {
|
||||
"version": "0.0.6",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"util-deprecate": {
|
||||
"version": "1.0.2",
|
||||
"bundled": true
|
||||
},
|
||||
"uuid": {
|
||||
"version": "3.0.1",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
},
|
||||
"verror": {
|
||||
"version": "1.3.6",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"extsprintf": "1.0.2"
|
||||
}
|
||||
},
|
||||
"wide-align": {
|
||||
"version": "1.1.2",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"string-width": "1.0.2"
|
||||
}
|
||||
},
|
||||
"wrappy": {
|
||||
"version": "1.0.2",
|
||||
"bundled": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"fstream": {
|
||||
"version": "1.0.11",
|
||||
"resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
|
||||
|
@ -5299,6 +6089,14 @@
|
|||
"resolved": "https://registry.npmjs.org/moment/-/moment-2.19.1.tgz",
|
||||
"integrity": "sha1-VtoaLRy/AdOLfhr8McELz6GSkWc="
|
||||
},
|
||||
"moment-timezone": {
|
||||
"version": "0.5.14",
|
||||
"resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.14.tgz",
|
||||
"integrity": "sha1-TrOP+VOLgBCLpGekWPPtQmjM/LE=",
|
||||
"requires": {
|
||||
"moment": "2.19.1"
|
||||
}
|
||||
},
|
||||
"ms": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
||||
|
|
|
@ -39,6 +39,7 @@
|
|||
"webpack-dev-server": "^2.5.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@fortawesome/fontawesome-free-webfonts": "^1.0.5",
|
||||
"autoprefixer": "^7.1.2",
|
||||
"axios": "^0.16.2",
|
||||
"babel-core": "^6.25.0",
|
||||
|
@ -57,7 +58,6 @@
|
|||
"css-loader": "^0.28.4",
|
||||
"extract-text-webpack-plugin": "^3.0.0",
|
||||
"file-loader": "^0.11.2",
|
||||
"font-awesome": "^4.7.0",
|
||||
"glob": "^7.1.2",
|
||||
"immutability-helper": "^2.3.0",
|
||||
"intl": "^1.2.5",
|
||||
|
|
Loading…
Reference in a new issue