mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-09-20 14:45:56 +08:00
Merge branch 'master' into features/global-activities
This commit is contained in:
commit
4a87216a3d
41
.babelrc
41
.babelrc
|
@ -1,35 +1,18 @@
|
|||
{
|
||||
"presets": [
|
||||
[
|
||||
"env",
|
||||
{
|
||||
"modules": false,
|
||||
"targets": {
|
||||
"browsers": ["last 2 versions", "ie 10"],
|
||||
"uglify": true
|
||||
},
|
||||
"useBuiltIns": true
|
||||
}
|
||||
],
|
||||
"react",
|
||||
"es2015",
|
||||
"flow"
|
||||
["env", {
|
||||
"modules": false,
|
||||
"targets": {
|
||||
"browsers": "> 1%",
|
||||
"uglify": true
|
||||
},
|
||||
"useBuiltIns": true
|
||||
}]
|
||||
],
|
||||
|
||||
"plugins": [
|
||||
"transform-flow-strip-types",
|
||||
"transform-object-rest-spread",
|
||||
"syntax-dynamic-import",
|
||||
"transform-react-jsx-source",
|
||||
[
|
||||
"transform-class-properties",
|
||||
{
|
||||
"spec": true
|
||||
}
|
||||
]
|
||||
],
|
||||
"env": {
|
||||
"test": {
|
||||
"plugins": ["transform-es2015-modules-commonjs"]
|
||||
}
|
||||
}
|
||||
"transform-object-rest-spread",
|
||||
["transform-class-properties", { "spec": true }]
|
||||
]
|
||||
}
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
plugins:
|
||||
postcss-smart-import: {}
|
||||
precss: {}
|
||||
autoprefixer: {}
|
||||
postcss-import: {}
|
||||
postcss-cssnext: {}
|
||||
|
|
|
@ -363,7 +363,7 @@ Metrics/CyclomaticComplexity:
|
|||
Enabled: false
|
||||
|
||||
Metrics/LineLength:
|
||||
Max: 80
|
||||
Max: 120
|
||||
AllowHeredoc: true
|
||||
AllowURI: true
|
||||
URISchemes:
|
||||
|
|
5
Gemfile
5
Gemfile
|
@ -4,6 +4,8 @@ source 'http://rubygems.org'
|
|||
|
||||
ruby '2.4.5'
|
||||
|
||||
|
||||
gem 'webpacker', '~> 3.5'
|
||||
gem 'bootstrap-sass', '~> 3.3.7'
|
||||
gem 'bootstrap_form'
|
||||
gem 'devise', '~> 4.3.0'
|
||||
|
@ -11,12 +13,11 @@ gem 'devise_invitable'
|
|||
gem 'figaro'
|
||||
gem 'pg', '~> 0.18'
|
||||
gem 'pg_search' # PostgreSQL full text search
|
||||
gem 'rails', '5.1.6'
|
||||
gem 'rails', '~> 5.1.6.2'
|
||||
gem 'recaptcha', require: 'recaptcha/rails'
|
||||
gem 'sanitize', '~> 4.4'
|
||||
gem 'sass-rails', '~> 5.0.6'
|
||||
gem 'simple_token_authentication', '~> 1.15.1' # Token authentication for Devise
|
||||
gem 'webpacker', '~> 2.0'
|
||||
gem 'yomu'
|
||||
|
||||
# Gems for OAuth2 subsystem
|
||||
|
|
78
Gemfile.lock
78
Gemfile.lock
|
@ -51,25 +51,25 @@ GIT
|
|||
GEM
|
||||
remote: http://rubygems.org/
|
||||
specs:
|
||||
actioncable (5.1.6)
|
||||
actionpack (= 5.1.6)
|
||||
actioncable (5.1.6.2)
|
||||
actionpack (= 5.1.6.2)
|
||||
nio4r (~> 2.0)
|
||||
websocket-driver (~> 0.6.1)
|
||||
actionmailer (5.1.6)
|
||||
actionpack (= 5.1.6)
|
||||
actionview (= 5.1.6)
|
||||
activejob (= 5.1.6)
|
||||
actionmailer (5.1.6.2)
|
||||
actionpack (= 5.1.6.2)
|
||||
actionview (= 5.1.6.2)
|
||||
activejob (= 5.1.6.2)
|
||||
mail (~> 2.5, >= 2.5.4)
|
||||
rails-dom-testing (~> 2.0)
|
||||
actionpack (5.1.6)
|
||||
actionview (= 5.1.6)
|
||||
activesupport (= 5.1.6)
|
||||
actionpack (5.1.6.2)
|
||||
actionview (= 5.1.6.2)
|
||||
activesupport (= 5.1.6.2)
|
||||
rack (~> 2.0)
|
||||
rack-test (>= 0.6.3)
|
||||
rails-dom-testing (~> 2.0)
|
||||
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
||||
actionview (5.1.6)
|
||||
activesupport (= 5.1.6)
|
||||
actionview (5.1.6.2)
|
||||
activesupport (= 5.1.6.2)
|
||||
builder (~> 3.1)
|
||||
erubi (~> 1.4)
|
||||
rails-dom-testing (~> 2.0)
|
||||
|
@ -79,18 +79,18 @@ GEM
|
|||
activemodel (>= 4.1, < 6)
|
||||
case_transform (>= 0.2)
|
||||
jsonapi-renderer (>= 0.1.1.beta1, < 0.3)
|
||||
activejob (5.1.6)
|
||||
activesupport (= 5.1.6)
|
||||
activejob (5.1.6.2)
|
||||
activesupport (= 5.1.6.2)
|
||||
globalid (>= 0.3.6)
|
||||
activemodel (5.1.6)
|
||||
activesupport (= 5.1.6)
|
||||
activerecord (5.1.6)
|
||||
activemodel (= 5.1.6)
|
||||
activesupport (= 5.1.6)
|
||||
activemodel (5.1.6.2)
|
||||
activesupport (= 5.1.6.2)
|
||||
activerecord (5.1.6.2)
|
||||
activemodel (= 5.1.6.2)
|
||||
activesupport (= 5.1.6.2)
|
||||
arel (~> 8.0)
|
||||
activerecord-import (0.23.0)
|
||||
activerecord (>= 3.2)
|
||||
activesupport (5.1.6)
|
||||
activesupport (5.1.6.2)
|
||||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||
i18n (>= 0.7, < 2)
|
||||
minitest (~> 5.1)
|
||||
|
@ -300,7 +300,7 @@ GEM
|
|||
logging (2.0.0)
|
||||
little-plugger (~> 1.1)
|
||||
multi_json (~> 1.10)
|
||||
loofah (2.2.2)
|
||||
loofah (2.2.3)
|
||||
crass (~> 1.0.2)
|
||||
nokogiri (>= 1.5.9)
|
||||
mail (2.7.0)
|
||||
|
@ -381,19 +381,21 @@ GEM
|
|||
rack (2.0.6)
|
||||
rack-attack (5.4.1)
|
||||
rack (>= 1.0, < 3)
|
||||
rack-proxy (0.6.5)
|
||||
rack
|
||||
rack-test (1.1.0)
|
||||
rack (>= 1.0, < 3)
|
||||
rails (5.1.6)
|
||||
actioncable (= 5.1.6)
|
||||
actionmailer (= 5.1.6)
|
||||
actionpack (= 5.1.6)
|
||||
actionview (= 5.1.6)
|
||||
activejob (= 5.1.6)
|
||||
activemodel (= 5.1.6)
|
||||
activerecord (= 5.1.6)
|
||||
activesupport (= 5.1.6)
|
||||
rails (5.1.6.2)
|
||||
actioncable (= 5.1.6.2)
|
||||
actionmailer (= 5.1.6.2)
|
||||
actionpack (= 5.1.6.2)
|
||||
actionview (= 5.1.6.2)
|
||||
activejob (= 5.1.6.2)
|
||||
activemodel (= 5.1.6.2)
|
||||
activerecord (= 5.1.6.2)
|
||||
activesupport (= 5.1.6.2)
|
||||
bundler (>= 1.3.0)
|
||||
railties (= 5.1.6)
|
||||
railties (= 5.1.6.2)
|
||||
sprockets-rails (>= 2.0.0)
|
||||
rails-controller-testing (1.0.2)
|
||||
actionpack (~> 5.x, >= 5.0.1)
|
||||
|
@ -411,14 +413,14 @@ GEM
|
|||
rails (> 3.1)
|
||||
rails_serve_static_assets (0.0.5)
|
||||
rails_stdout_logging (0.0.5)
|
||||
railties (5.1.6)
|
||||
actionpack (= 5.1.6)
|
||||
activesupport (= 5.1.6)
|
||||
railties (5.1.6.2)
|
||||
actionpack (= 5.1.6.2)
|
||||
activesupport (= 5.1.6.2)
|
||||
method_source
|
||||
rake (>= 0.8.7)
|
||||
thor (>= 0.18.1, < 2.0)
|
||||
rainbow (3.0.0)
|
||||
rake (12.3.1)
|
||||
rake (12.3.2)
|
||||
rb-fsevent (0.10.2)
|
||||
rb-inotify (0.9.10)
|
||||
ffi (>= 0.5.0, < 2)
|
||||
|
@ -544,9 +546,9 @@ GEM
|
|||
addressable (>= 2.3.6)
|
||||
crack (>= 0.3.2)
|
||||
hashdiff
|
||||
webpacker (2.0)
|
||||
webpacker (3.5.5)
|
||||
activesupport (>= 4.2)
|
||||
multi_json (~> 1.2)
|
||||
rack-proxy (>= 0.6.1)
|
||||
railties (>= 4.2)
|
||||
websocket-driver (0.6.5)
|
||||
websocket-extensions (>= 0.1.0)
|
||||
|
@ -631,7 +633,7 @@ DEPENDENCIES
|
|||
pry-rails
|
||||
puma
|
||||
rack-attack
|
||||
rails (= 5.1.6)
|
||||
rails (~> 5.1.6.2)
|
||||
rails-controller-testing
|
||||
rails_12factor
|
||||
rails_autolink (~> 1.1, >= 1.1.6)
|
||||
|
@ -662,7 +664,7 @@ DEPENDENCIES
|
|||
uglifier (>= 1.3.0)
|
||||
underscore-rails
|
||||
webmock
|
||||
webpacker (~> 2.0)
|
||||
webpacker (~> 3.5)
|
||||
whacamole
|
||||
wicked_pdf (~> 1.1.0)
|
||||
wkhtmltopdf-heroku
|
||||
|
|
|
@ -119,27 +119,25 @@
|
|||
});
|
||||
}
|
||||
|
||||
$(document).on('turbolinks:load', function() {
|
||||
// Bind modal to new-experiment action
|
||||
initializeModal($('#new-experiment'), '#new-experiment-modal');
|
||||
// Bind modal to new-experiment action
|
||||
initializeModal($('#new-experiment'), '#new-experiment-modal');
|
||||
|
||||
// Bind modal to big-plus new experiment actions
|
||||
initializeModal('.big-plus', '#new-experiment-modal');
|
||||
// Bind modal to big-plus new experiment actions
|
||||
initializeModal('.big-plus', '#new-experiment-modal');
|
||||
|
||||
// Bind modal to new-exp-title action
|
||||
initializeModal('.new-exp-title', '#new-experiment-modal');
|
||||
// Bind modal to new-exp-title action
|
||||
initializeModal('.new-exp-title', '#new-experiment-modal');
|
||||
|
||||
// Bind modals to all clone-experiment actions
|
||||
$.each($('.clone-experiment'), function() {
|
||||
var id = $(this).closest('.experiment-panel').data('id');
|
||||
initializeModal($(this), '#clone-experiment-modal-' + id);
|
||||
});
|
||||
|
||||
// Bind modal to all actions listed on dropdown accesible from experiment
|
||||
// panel
|
||||
initializeDropdownActions();
|
||||
|
||||
// init
|
||||
initEditNoDescription();
|
||||
// Bind modals to all clone-experiment actions
|
||||
$.each($('.clone-experiment'), function() {
|
||||
var id = $(this).closest('.experiment-panel').data('id');
|
||||
initializeModal($(this), '#clone-experiment-modal-' + id);
|
||||
});
|
||||
|
||||
// Bind modal to all actions listed on dropdown accesible from experiment
|
||||
// panel
|
||||
initializeDropdownActions();
|
||||
|
||||
// init
|
||||
initEditNoDescription();
|
||||
})();
|
||||
|
|
|
@ -142,11 +142,13 @@ function initCopyToRepository() {
|
|||
});
|
||||
|
||||
modal.modal("show");
|
||||
submitBtn[0].disabled=false
|
||||
})
|
||||
.on("ajax:error", function() {} );
|
||||
|
||||
submitBtn.on("click", function() {
|
||||
// Submit the embedded form
|
||||
submitBtn[0].disabled=true
|
||||
modalBody.find("form").submit();
|
||||
});
|
||||
|
||||
|
|
413
app/assets/javascripts/sitewide/file_preview.js
Normal file
413
app/assets/javascripts/sitewide/file_preview.js
Normal file
|
@ -0,0 +1,413 @@
|
|||
/* eslint no-underscore-dangle: ["error", { "allowAfterThis": true }]*/
|
||||
/* eslint no-use-before-define: ["error", { "functions": false }]*/
|
||||
/* global fabric tui animateSpinner setupAssetsLoading I18n*/
|
||||
//= require assets
|
||||
|
||||
(function(global) {
|
||||
'use strict';
|
||||
|
||||
global.initPreviewModal = function initPreviewModal() {
|
||||
var name;
|
||||
var url;
|
||||
var downloadUrl;
|
||||
$('.file-preview-link').off('click');
|
||||
$('.file-preview-link').click(function(e) {
|
||||
e.preventDefault();
|
||||
name = $(this).find('p').text();
|
||||
url = $(this).data('preview-url');
|
||||
downloadUrl = $(this).attr('href');
|
||||
openPreviewModal(name, url, downloadUrl);
|
||||
});
|
||||
};
|
||||
|
||||
// Adding rotation icon
|
||||
function updateFabricControls() {
|
||||
fabric.Object.prototype.drawBorders = function(ctx, styleOverride = {}) {
|
||||
var wh = this._calculateCurrentDimensions();
|
||||
var strokeWidth = 1 / this.borderScaleFactor;
|
||||
var width = wh.x + strokeWidth;
|
||||
var height = wh.y + strokeWidth;
|
||||
var drawRotatingPoint = typeof styleOverride.hasRotatingPoint !== 'undefined'
|
||||
? styleOverride.hasRotatingPoint : this.hasRotatingPoint;
|
||||
var hasControls = typeof styleOverride.hasControls !== 'undefined'
|
||||
? styleOverride.hasControls : this.hasControls;
|
||||
var rotatingPointOffset = typeof styleOverride.rotatingPointOffset !== 'undefined'
|
||||
? styleOverride.rotatingPointOffset : this.rotatingPointOffset;
|
||||
var rotateHeight = -height / 2;
|
||||
ctx.save();
|
||||
ctx.strokeStyle = styleOverride.borderColor || this.borderColor;
|
||||
this._setLineDash(ctx, styleOverride.borderDashArray || this.borderDashArray, null);
|
||||
ctx.strokeRect(
|
||||
-width / 2,
|
||||
-height / 2,
|
||||
width,
|
||||
height
|
||||
);
|
||||
if (drawRotatingPoint && this.isControlVisible('mtr') && hasControls) {
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(0, rotateHeight);
|
||||
ctx.lineTo(0, rotateHeight - rotatingPointOffset + 10);
|
||||
ctx.stroke();
|
||||
}
|
||||
ctx.restore();
|
||||
return this;
|
||||
};
|
||||
|
||||
fabric.Object.prototype.drawControls = function(ctx) {
|
||||
var rotationImage = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAHEklEQVRoge2bYYgdVxXHf/8lhGUJYQ1hKSFIiDXUEoq+e1lClLgfRLSGfNGSVvxgVIyiIqGWEhfpp6IBayiSBJQiQo3YKEQqsQSpmkopYWYJIUSIEkrYhhiWEEIoyxLe3w8zb53Mm/fezNvdlhf7h8feeTv3zvnPPffcc885T8b8P2Hs/RbgvcYHhB90rFurgWOIY8A4sNN2S9JHbG+VtBEYt70E3AFuSvoXcDH/3E7SpL1WcqnKaMUQ1wFjSZosNRkshrgR2A60gKdsR0mTALaRxID2InBR0ingHHA1SZOFIblVootwDHEn8ITtDZJ+naTJxUGDxBAngN2290uaAbaxMu1p274u6S3gN8DfkjS5vYLxltFFOLTCG5KmyQT+h+1n0rn0fFXnXG132n4mJ7qFVbYLtm9KOg8cJSO+InW/j3AMcQr4T+meS8DTSZqc7XwRWmFM0hbbX5U0S7ZW1xpt4DhwwvaVdC69N8wg5dmoUsOdwNEY4nTnC0m7gBNNyNpeaXsM+BbwS0n76jyzCuUZ3gK8UxY0NyrnbT8taQx4yfb2vP1+4AbwLHAySZNGMz1Q4I4FBaYl/QH4M/BwsW+dWVplPAT8HPhhaIWNTTo2taRTnUbhRdRpt4EFYD7/e8/2OmBS0pacQFNZNgKHJC0BP6nbaaBKrwCLwHXgNeBV4Jrtd4EloJ2/jPXABBnhL9h+XNJ2mhnBO7YPSDpdx4J3Ebb9jqTltdvLSRggwAXgmKTXkjS5U1fyGOI4sAf4PjANbK7Tz/ZVSV8Hzg0i3aVGHULlv+V2nwcfk/RKkibzdYQtIkmTReBsDDEB9gHfAeIgL03SNuAQ8G+yZdMTPY1WQ4PTBi5LegI4PgzZIpI0uQW8DOwHzkjqa4ltjwGfBb40aOyh1nDFW75r+2A6l54c1LcpYoibbf8I+BqwobPMAIrt/PqW7U+kc+m1XuPV2kfLW02Fmm+QNBtDbDWjMxhJmixI+rGkl4vLrNzOrzcBB0Mr9OQ1kHC/9VO8B3gUOBFaYXfuY68akjS5YXsWqPTpS7Luk7Sz1z1dgpXXbsP9dlrSMWCmn2DDIJ1Lb9k+BLxd/l9RxYEdwN78iNuFoYzWAM/q42S+d8+3PCwkXQBO5ufm4vdFOdYDn6TgJBXRRbhqO+p1T5/2Y8ALMcStg0g0QZIm7wK/I9t+llGx1HaTncm7UCa8SLbFDEQN//kR2zvqjNUESZpclHSm+F2F5Z4kI92F+wjbvg0kgx5aM1wzD1xpyKcuftt5XgcVmvbpqo73Lex0Lm3HEA8AB4CHbY/12/f6tBckvUjmS68FLgJXc7+7Fyq3yMog3igghvgSmTPSz8B+KJ1L74uFjXJc+p9Fzav6AB8udxplwm+XnSDb97U7IeIiRpaw7eVjZ/EYWzrSbij3G1nCRTQJK40s4Txl02lT1QbulvuNLGHb22rc05WtGFnCkj5WMlDLRqvgL3Sdi9cse7iWyI+fM/3CUcD18h4MI0qY7HCy7GX18ATnqjqOqko/VbyoMlqS/l7VceQIh1Z4DHi83z2SbgNvVv1vpAjHECck7Sc72PTcc22/RYXBghEjTLZ2nwTGywGKwvWSpDfIEm5dGMpo5Xnk7wEztr8t6fJa1mXkz9xk+0VJ23u4kR1cAc70yio2nuG8vOE54AfAp/Kg3aNDcGjyzIeA5/PKhL7ZENt/IjsvV6IR4RjiBtuHbX+D/yW8dtk+Elph1cM5+TM3A4dtfwWq/ebCer4l6UQ/basdAMgfPAt8E5gohXPaki6TRUou5TmiFSEPs24lywN/jsHLbxGYTdLkZ/1uqjXDeVbvObKSgwnoUqsxstKIU7a/G1qh6+DdBKEVNtn+MnAK2Mtgsm3bfwFeGTR2rRkOrfAZSa9SL297F7hANjNnm5QbhVZYL2mP7UP5eq2VLgWuArXSpbUIxxB3AH8lK0uqhbzSbh44C/wRuCZpOSGe39ZJiE8Bnwf22t4OTPTLTZfadyQdAJonxPshhvgkcIQ8TlRTmM7W0Za0YHs+z/AtkS2nSWXlT1vI1bZXlLRH+7akI0ma1C55aLIPn3ZWnfe87am6ZHMBx4ApSVMdgYvod92nfYesWO14Aw7NwrT5sWyP7V+RzXTtba3JCxqUsZR0A3jW9smmBWpDxaVjiDPAYTLy44MEXS3YvicpAV5I0uT3w4wxlC9t+xxwEPipCuUI/TygvN9K2m1JvyCzxqeHkRtWmHnIVXyarKBkD1n50WrP9E3biaSjtl9P59LVKy4dFrnLOaOsqGUPPdZ3gzXbJjvtvEmWOHt9zcqHV4IY4iRZWeIu4ItAy3aT0sBF4JKkU7bPSbqapMnNVROQNUym5eq+EXiErCrgo2QqP0n2E4B7+dZyEyj+BODWe/4TgAcZoxbxWDE+IPyg47+vLtaj5o1LZgAAAABJRU5ErkJggg==';
|
||||
var rotate = new Image();
|
||||
var rotateLeft;
|
||||
var rotateTop;
|
||||
var wh = this._calculateCurrentDimensions();
|
||||
var width = wh.x;
|
||||
var height = wh.y;
|
||||
var scaleOffset = this.cornerSize;
|
||||
var left = -(width + scaleOffset) / 2;
|
||||
var top = -(height + scaleOffset) / 2;
|
||||
var methodName = this.transparentCorners ? 'stroke' : 'fill';
|
||||
|
||||
if (!this.hasControls) {
|
||||
return this;
|
||||
}
|
||||
ctx.save();
|
||||
ctx.strokeStyle = this.cornerColor;
|
||||
ctx.fillStyle = this.cornerColor;
|
||||
if (!this.transparentCorners) {
|
||||
ctx.strokeStyle = this.cornerStrokeColor;
|
||||
}
|
||||
this._setLineDash(ctx, this.cornerDashArray, null);
|
||||
|
||||
// top-left
|
||||
this._drawControl(
|
||||
'tl',
|
||||
ctx,
|
||||
methodName,
|
||||
left,
|
||||
top
|
||||
);
|
||||
|
||||
// top-right
|
||||
this._drawControl(
|
||||
'tr',
|
||||
ctx,
|
||||
methodName,
|
||||
left + width,
|
||||
top
|
||||
);
|
||||
|
||||
// bottom-left
|
||||
this._drawControl(
|
||||
'bl',
|
||||
ctx,
|
||||
methodName,
|
||||
left,
|
||||
top + height
|
||||
);
|
||||
|
||||
// bottom-right
|
||||
this._drawControl(
|
||||
'br',
|
||||
ctx,
|
||||
methodName,
|
||||
left + width,
|
||||
top + height
|
||||
);
|
||||
|
||||
if (!this.get('lockUniScaling')) {
|
||||
// middle-top
|
||||
this._drawControl(
|
||||
'mt',
|
||||
ctx,
|
||||
methodName,
|
||||
left + width / 2,
|
||||
top
|
||||
);
|
||||
|
||||
// middle-bottom
|
||||
this._drawControl(
|
||||
'mb',
|
||||
ctx,
|
||||
methodName,
|
||||
left + width / 2,
|
||||
top + height
|
||||
);
|
||||
|
||||
// middle-right
|
||||
this._drawControl(
|
||||
'mr',
|
||||
ctx,
|
||||
methodName,
|
||||
left + width,
|
||||
top + height / 2
|
||||
);
|
||||
|
||||
// middle-left
|
||||
this._drawControl(
|
||||
'ml',
|
||||
ctx,
|
||||
methodName,
|
||||
left,
|
||||
top + height / 2
|
||||
);
|
||||
}
|
||||
// middle-top-rotate
|
||||
if (this.hasRotatingPoint) {
|
||||
rotate.src = rotationImage;
|
||||
rotateLeft = left + width / 2 - 6;
|
||||
rotateTop = top - this.rotatingPointOffset - 6;
|
||||
ctx.drawImage(rotate, rotateLeft, rotateTop, 32, 32);
|
||||
}
|
||||
ctx.restore();
|
||||
|
||||
return this;
|
||||
};
|
||||
}
|
||||
|
||||
function initImageEditor(data) {
|
||||
var imageEditor;
|
||||
var blackTheme = {
|
||||
'common.bi.image': '',
|
||||
'common.bisize.width': '0',
|
||||
'common.bisize.height': '0',
|
||||
'common.backgroundImage': 'none',
|
||||
'common.backgroundColor': '#1e1e1e',
|
||||
'common.border': '0px',
|
||||
|
||||
// header
|
||||
'header.backgroundImage': 'none',
|
||||
'header.backgroundColor': 'transparent',
|
||||
'header.border': '0px',
|
||||
|
||||
// load button
|
||||
'loadButton.backgroundColor': '#fff',
|
||||
'loadButton.border': '1px solid #ddd',
|
||||
'loadButton.color': '#222',
|
||||
'loadButton.fontFamily': '\'Noto Sans\', sans-serif',
|
||||
'loadButton.fontSize': '12px',
|
||||
|
||||
// download button
|
||||
'downloadButton.backgroundColor': '#fdba3b',
|
||||
'downloadButton.border': '1px solid #fdba3b',
|
||||
'downloadButton.color': '#fff',
|
||||
'downloadButton.fontFamily': '\'Noto Sans\', sans-serif',
|
||||
'downloadButton.fontSize': '12px',
|
||||
|
||||
// main icons
|
||||
'menu.normalIcon.path': '/images/icon-d.svg',
|
||||
'menu.normalIcon.name': 'icon-d',
|
||||
'menu.activeIcon.path': '/images/icon-b.svg',
|
||||
'menu.activeIcon.name': 'icon-b',
|
||||
'menu.disabledIcon.path': '/images/icon-a.svg',
|
||||
'menu.disabledIcon.name': 'icon-a',
|
||||
'menu.hoverIcon.path': '/images/icon-c.svg',
|
||||
'menu.hoverIcon.name': 'icon-c',
|
||||
'menu.iconSize.width': '24px',
|
||||
'menu.iconSize.height': '24px',
|
||||
|
||||
// submenu primary color
|
||||
'submenu.backgroundColor': '#1e1e1e',
|
||||
'submenu.partition.color': '#3c3c3c',
|
||||
|
||||
// submenu icons
|
||||
'submenu.normalIcon.path': '/images/icon-d.svg',
|
||||
'submenu.normalIcon.name': 'icon-d',
|
||||
'submenu.activeIcon.path': '/images/icon-c.svg',
|
||||
'submenu.activeIcon.name': 'icon-c',
|
||||
'submenu.iconSize.width': '32px',
|
||||
'submenu.iconSize.height': '32px',
|
||||
|
||||
// submenu labels
|
||||
'submenu.normalLabel.color': '#8a8a8a',
|
||||
'submenu.normalLabel.fontWeight': 'lighter',
|
||||
'submenu.activeLabel.color': '#fff',
|
||||
'submenu.activeLabel.fontWeight': 'lighter',
|
||||
|
||||
// checkbox style
|
||||
'checkbox.border': '0px',
|
||||
'checkbox.backgroundColor': '#fff',
|
||||
|
||||
// range style
|
||||
'range.pointer.color': '#fff',
|
||||
'range.bar.color': '#666',
|
||||
'range.subbar.color': '#d1d1d1',
|
||||
|
||||
'range.disabledPointer.color': '#414141',
|
||||
'range.disabledBar.color': '#282828',
|
||||
'range.disabledSubbar.color': '#414141',
|
||||
|
||||
'range.value.color': '#fff',
|
||||
'range.value.fontWeight': 'lighter',
|
||||
'range.value.fontSize': '11px',
|
||||
'range.value.border': '1px solid #353535',
|
||||
'range.value.backgroundColor': '#151515',
|
||||
'range.title.color': '#fff',
|
||||
'range.title.fontWeight': 'lighter',
|
||||
|
||||
// colorpicker style
|
||||
'colorpicker.button.border': '1px solid #1e1e1e',
|
||||
'colorpicker.title.color': '#fff'
|
||||
};
|
||||
|
||||
imageEditor = new tui.ImageEditor('#tui-image-editor', {
|
||||
includeUI: {
|
||||
loadImage: {
|
||||
path: data['download-url'],
|
||||
name: data.filename
|
||||
},
|
||||
theme: blackTheme,
|
||||
initMenu: 'draw',
|
||||
menuBarPosition: 'bottom'
|
||||
},
|
||||
cssMaxWidth: 700,
|
||||
cssMaxHeight: 500,
|
||||
selectionStyle: {
|
||||
cornerSize: 20,
|
||||
rotatingPointOffset: 70,
|
||||
borderColor: '#333',
|
||||
cornerColor: '#333',
|
||||
cornerStyle: 'circle',
|
||||
borderScaleFactor: 3
|
||||
|
||||
},
|
||||
usageStatistics: false
|
||||
});
|
||||
|
||||
$('#fileEditModal').find('.file-name').text('Editing: ' + data.filename);
|
||||
$('#fileEditModal').modal('show');
|
||||
|
||||
$('.tui-image-editor-header').hide();
|
||||
|
||||
$('.file-save-link').off().click(function(ev) {
|
||||
var dataUpload = new FormData();
|
||||
ev.preventDefault();
|
||||
ev.stopPropagation();
|
||||
dataUpload.append('image', imageEditor.toDataURL());
|
||||
animateSpinner(null, true);
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: '/files/' + data.id + '/update_image',
|
||||
data: dataUpload,
|
||||
contentType: false,
|
||||
processData: false,
|
||||
success: function(res) {
|
||||
$('#modal_link' + data.id).parent().html(res.html);
|
||||
setupAssetsLoading();
|
||||
}
|
||||
}).done(function() {
|
||||
animateSpinner(null, false);
|
||||
imageEditor.destroy();
|
||||
imageEditor = {};
|
||||
$('#tui-image-editor').html('');
|
||||
$('#fileEditModal').modal('hide');
|
||||
});
|
||||
});
|
||||
|
||||
window.onresize = function() {
|
||||
imageEditor.ui.resizeEditor();
|
||||
};
|
||||
}
|
||||
|
||||
function openPreviewModal(name, url, downloadUrl) {
|
||||
var modal = $('#filePreviewModal');
|
||||
updateFabricControls();
|
||||
$.ajax({
|
||||
url: url,
|
||||
type: 'GET',
|
||||
dataType: 'json',
|
||||
success: function(data) {
|
||||
var link = modal.find('.file-download-link');
|
||||
modal.find('.file-preview-container').empty();
|
||||
modal.find('.file-wopi-controls').empty();
|
||||
if (Object.prototype.hasOwnProperty.call(data, 'wopi-controls')) {
|
||||
modal.find('.file-wopi-controls').html(data['wopi-controls']);
|
||||
}
|
||||
link.attr('href', downloadUrl);
|
||||
link.attr('data-no-turbolink', true);
|
||||
link.attr('data-status', 'asset-present');
|
||||
if (data.type === 'image') {
|
||||
if (data.processing) {
|
||||
animateSpinner('.file-preview-container', true);
|
||||
} else {
|
||||
animateSpinner('.file-preview-container', false);
|
||||
modal.find('.file-preview-container')
|
||||
.append($('<img>')
|
||||
.attr('src', data['large-preview-url'])
|
||||
.attr('alt', name)
|
||||
.click(function(ev) {
|
||||
ev.stopPropagation();
|
||||
}));
|
||||
if (data.editable) {
|
||||
modal.find('.file-edit-link').css('display', '');
|
||||
modal.find('.file-edit-link').off().click(function(ev) {
|
||||
ev.preventDefault();
|
||||
ev.stopPropagation();
|
||||
modal.modal('hide');
|
||||
initImageEditor(data);
|
||||
});
|
||||
} else {
|
||||
modal.find('.file-edit-link').css('display', 'none');
|
||||
}
|
||||
}
|
||||
} else {
|
||||
modal.find('.file-preview-container').html(data['preview-icon']);
|
||||
}
|
||||
if (data.processing) {
|
||||
checkFileReady(url, modal);
|
||||
}
|
||||
modal.find('.file-name').text(name);
|
||||
modal.find('.preview-close').click(function() {
|
||||
modal.modal('hide');
|
||||
});
|
||||
modal.modal();
|
||||
modal.find('a[disabled=disabled]').click(function(ev) {
|
||||
ev.preventDefault();
|
||||
});
|
||||
$('.modal-backdrop').last().css('z-index', modal.css('z-index') - 1);
|
||||
},
|
||||
error: function() {
|
||||
// TODO
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function checkFileReady(url, modal) {
|
||||
$.get(url, function(data) {
|
||||
if (data.processing) {
|
||||
$('.file-download-link')
|
||||
.addClass('disabled-with-click-events')
|
||||
.attr(
|
||||
'title',
|
||||
I18n.t('general.file.processing')
|
||||
)
|
||||
.click(function(ev) {
|
||||
ev.preventDefault();
|
||||
ev.stopPropagation();
|
||||
});
|
||||
setTimeout(function() {
|
||||
checkFileReady(url, modal);
|
||||
}, 10000);
|
||||
} else {
|
||||
if (data.type === 'image') {
|
||||
modal.find('.file-preview-container').empty();
|
||||
modal.find('.file-preview-container')
|
||||
.append($('<img>')
|
||||
.attr('src', data['large-preview-url'])
|
||||
.attr('alt', data.filename)
|
||||
.click(function(ev) {
|
||||
ev.stopPropagation();
|
||||
}));
|
||||
modal.find('.file-name').text(data.filename);
|
||||
modal.find('.modal-body').click(function() {
|
||||
modal.modal('hide');
|
||||
});
|
||||
modal.modal();
|
||||
$('.modal-backdrop').last().css('z-index', modal.css('z-index') - 1);
|
||||
}
|
||||
$('.file-download-link')
|
||||
.removeClass('disabled-with-click-events')
|
||||
.removeAttr('title')
|
||||
.off();
|
||||
}
|
||||
});
|
||||
}
|
||||
}(window));
|
|
@ -1,109 +0,0 @@
|
|||
(function(global) {
|
||||
'use strict';
|
||||
|
||||
global.initPreviewModal = function initPreviewModal() {
|
||||
var name;
|
||||
var url;
|
||||
var downloadUrl;
|
||||
$('.file-preview-link').off('click');
|
||||
$('.file-preview-link').click(function(e) {
|
||||
e.preventDefault();
|
||||
name = $(this).find('p').text();
|
||||
url = $(this).data('preview-url');
|
||||
downloadUrl = $(this).attr('href');
|
||||
openPreviewModal(name, url, downloadUrl);
|
||||
});
|
||||
}
|
||||
|
||||
function openPreviewModal(name, url, downloadUrl) {
|
||||
var modal = $('#filePreviewModal');
|
||||
$.ajax({
|
||||
url: url,
|
||||
type: 'GET',
|
||||
dataType: 'json',
|
||||
success: function(data) {
|
||||
modal.find('.file-preview-container').empty();
|
||||
modal.find('.file-wopi-controls').empty();
|
||||
if (data.hasOwnProperty('wopi-controls')) {
|
||||
modal.find('.file-wopi-controls').html(data['wopi-controls']);
|
||||
}
|
||||
var link = modal.find('.file-download-link');
|
||||
link.attr('href', downloadUrl);
|
||||
link.attr('data-no-turbolink', true);
|
||||
link.attr('data-status', 'asset-present');
|
||||
if (data['type'] === 'image') {
|
||||
if(data['processing']) {
|
||||
animateSpinner('.file-preview-container', true);
|
||||
} else {
|
||||
animateSpinner('.file-preview-container', false);
|
||||
modal.find('.file-preview-container')
|
||||
.append($('<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']);
|
||||
}
|
||||
if(data['processing']) {
|
||||
checkFileReady(url, modal);
|
||||
}
|
||||
modal.find('.file-name').text(name);
|
||||
modal.find('.preview-close').click(function() {
|
||||
modal.modal('hide');
|
||||
});
|
||||
modal.modal();
|
||||
modal.find('a[disabled=disabled]').click(function(ev){
|
||||
ev.preventDefault();
|
||||
});
|
||||
$('.modal-backdrop').last().css('z-index', modal.css('z-index') - 1);
|
||||
},
|
||||
error: function(ev) {
|
||||
// TODO
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function checkFileReady(url, modal) {
|
||||
$.get(url, function(data) {
|
||||
if(data['processing']) {
|
||||
$('.file-download-link')
|
||||
.addClass('disabled-with-click-events')
|
||||
.attr('title',
|
||||
'<%= I18n.t('general.file.processing')%>')
|
||||
.click(function(ev) {
|
||||
ev.preventDefault();
|
||||
ev.stopPropagation();
|
||||
});
|
||||
setTimeout(function() {
|
||||
checkFileReady(url, modal);
|
||||
}, 10000);
|
||||
} else {
|
||||
if(data['type'] === 'image') {
|
||||
modal.find('.file-preview-container').empty();
|
||||
modal.find('.file-preview-container')
|
||||
.append($('<img>')
|
||||
.attr('src', data['large-preview-url'])
|
||||
.attr('alt', data['filename'])
|
||||
.click(function(ev) {
|
||||
ev.stopPropagation();
|
||||
})
|
||||
);
|
||||
modal.find('.file-name').text(data['filename']);
|
||||
modal.find('.modal-body').click(function() {
|
||||
modal.modal('hide');
|
||||
});
|
||||
modal.modal();
|
||||
$('.modal-backdrop').last().css('z-index', modal.css('z-index') - 1);
|
||||
}
|
||||
$('.file-download-link')
|
||||
.removeClass('disabled-with-click-events')
|
||||
.removeAttr('title')
|
||||
.off();
|
||||
}
|
||||
})
|
||||
}
|
||||
})(window);
|
|
@ -158,8 +158,12 @@
|
|||
});
|
||||
});
|
||||
}).on('shown.bs.modal', function() {
|
||||
var script = document.createElement('script');
|
||||
tagsInput.tagsinput('focus');
|
||||
recaptchaErrorMsgDiv.addClass('hidden');
|
||||
script.type = 'text/javascript';
|
||||
script.src = 'https://www.google.com/recaptcha/api.js?hl=en';
|
||||
$(script).insertAfter('#recaptcha-service');
|
||||
// Remove 'data-invited="true"' status
|
||||
modal.removeAttr('data-invited');
|
||||
}).on('hide.bs.modal', function() {
|
||||
|
@ -171,6 +175,7 @@
|
|||
teamSelectorDropdown2.addClass('disabled');
|
||||
animateSpinner(modalDialog, false);
|
||||
recaptchaErrorMsgDiv.addClass('hidden');
|
||||
$('#recaptcha-service').next().remove();
|
||||
|
||||
// Unbind event listeners
|
||||
teamSelectorCheckbox.off('change');
|
||||
|
|
|
@ -13,16 +13,6 @@
|
|||
position: relative;
|
||||
width: 100%;
|
||||
|
||||
&[data-unread="0"] {
|
||||
|
||||
.body-block {
|
||||
|
||||
.title {
|
||||
font-weight: normal;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: $color-concrete;
|
||||
color: $color-emperor;
|
||||
|
|
|
@ -176,7 +176,7 @@ mark,.mark {
|
|||
color: $color-emperor;
|
||||
}
|
||||
|
||||
.circle {
|
||||
.circle-icon {
|
||||
@extend .badge;
|
||||
background-color: $brand-primary;
|
||||
border-radius: 1em;
|
||||
|
@ -1518,6 +1518,68 @@ table.dataTable {
|
|||
float: right;
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
.file-edit-link {
|
||||
color: $color-white;
|
||||
display: inline-block;
|
||||
float: right;
|
||||
margin-right: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
// Image edit modal
|
||||
.modal-file-edit {
|
||||
background: transparent;
|
||||
font-size: $font-size-large;
|
||||
padding: 0 !important;
|
||||
|
||||
.preview-close {
|
||||
background: transparent;
|
||||
border: 0;
|
||||
color: $color-white;
|
||||
display: inline-block;
|
||||
float: right;
|
||||
}
|
||||
|
||||
.modal-dialog {
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.modal-content {
|
||||
background: transparent;
|
||||
border: 0;
|
||||
-webkit-box-shadow: none;
|
||||
box-shadow: none;
|
||||
color: $color-white;
|
||||
height: 100%;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.modal-header {
|
||||
background: $color-black;
|
||||
border: 0;
|
||||
height: 60px;
|
||||
text-align: center;
|
||||
|
||||
.file-name {
|
||||
float: left;
|
||||
}
|
||||
}
|
||||
|
||||
.modal-body {
|
||||
height: calc(100% - 60px);
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.file-save-link {
|
||||
color: $color-white;
|
||||
display: inline-block;
|
||||
float: right;
|
||||
margin-right: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
// Disable textarea resizing throughout application
|
||||
|
|
|
@ -44,12 +44,14 @@ class AssetsController < ApplicationController
|
|||
|
||||
def file_preview
|
||||
response_json = {
|
||||
'id' => @asset.id,
|
||||
'type' => (@asset.is_image? ? 'image' : 'file'),
|
||||
|
||||
'filename' => truncate(@asset.file_file_name,
|
||||
length:
|
||||
Constants::FILENAME_TRUNCATION_LENGTH),
|
||||
'download-url' => download_asset_path(@asset)
|
||||
'download-url' => download_asset_path(@asset, timestamp: Time.now.to_i),
|
||||
'editable' => @asset.editable?(current_user)
|
||||
}
|
||||
|
||||
if @asset.is_image?
|
||||
|
@ -78,20 +80,7 @@ class AssetsController < ApplicationController
|
|||
elsif @assoc.class == RepositoryCell
|
||||
can_manage_repository_rows?(@repository.team)
|
||||
end
|
||||
file_ext = @asset.file_file_name.split('.').last
|
||||
if Constants::WOPI_EDITABLE_FORMATS.include?(file_ext)
|
||||
edit_supported = true
|
||||
title = ''
|
||||
else
|
||||
edit_supported = false
|
||||
title = if Constants::FILE_TEXT_FORMATS.include?(file_ext)
|
||||
I18n.t('assets.wopi_supported_text_formats_title')
|
||||
elsif Constants::FILE_TABLE_FORMATS.include?(file_ext)
|
||||
I18n.t('assets.wopi_supported_table_formats_title')
|
||||
else
|
||||
I18n.t('assets.wopi_supported_presentation_formats_title')
|
||||
end
|
||||
end
|
||||
edit_supported, title = wopi_file_edit_button_status
|
||||
response_json['wopi-controls'] = render_to_string(
|
||||
partial: 'shared/file_wopi_controlls.html.erb',
|
||||
locals: {
|
||||
|
@ -109,6 +98,25 @@ class AssetsController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
# Check whether the wopi file can be edited and return appropriate response
|
||||
def wopi_file_edit_button_status
|
||||
file_ext = @asset.file_file_name.split('.').last
|
||||
if Constants::WOPI_EDITABLE_FORMATS.include?(file_ext)
|
||||
edit_supported = true
|
||||
title = ''
|
||||
else
|
||||
edit_supported = false
|
||||
title = if Constants::FILE_TEXT_FORMATS.include?(file_ext)
|
||||
I18n.t('assets.wopi_supported_text_formats_title')
|
||||
elsif Constants::FILE_TABLE_FORMATS.include?(file_ext)
|
||||
I18n.t('assets.wopi_supported_table_formats_title')
|
||||
else
|
||||
I18n.t('assets.wopi_supported_presentation_formats_title')
|
||||
end
|
||||
end
|
||||
return edit_supported, title
|
||||
end
|
||||
|
||||
def download
|
||||
if !@asset.file_present
|
||||
render_404 and return
|
||||
|
@ -143,6 +151,30 @@ class AssetsController < ApplicationController
|
|||
render layout: false
|
||||
end
|
||||
|
||||
def update_image
|
||||
@asset = Asset.find(params[:id])
|
||||
return render_403 unless can_read_team?(@asset.team)
|
||||
image_file = Paperclip.io_adapters.for(params[:image])
|
||||
image_format = image_file.content_type.split('/')[1]
|
||||
image_file.original_filename = @asset.file_file_name.ext(image_format)
|
||||
@asset.file = image_file
|
||||
@asset.save!
|
||||
# Post process file here
|
||||
@asset.post_process_file(@asset.team)
|
||||
|
||||
respond_to do |format|
|
||||
format.json do
|
||||
render json: {
|
||||
html: render_to_string(
|
||||
partial: 'shared/asset_link',
|
||||
locals: { asset: @asset, display_image_tag: true },
|
||||
formats: :html
|
||||
)
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def load_vars
|
||||
|
|
|
@ -11,9 +11,20 @@ class Users::SessionsController < Devise::SessionsController
|
|||
end
|
||||
|
||||
# POST /resource/sign_in
|
||||
# def create
|
||||
# super
|
||||
# end
|
||||
def create
|
||||
super
|
||||
|
||||
# Schedule templates creation for user
|
||||
TemplatesService.new.schedule_creation_for_user(current_user)
|
||||
|
||||
# Schedule demo project creation for user
|
||||
current_user.created_teams.each do |team|
|
||||
FirstTimeDataGenerator.delay(
|
||||
queue: :new_demo_project,
|
||||
priority: 10
|
||||
).seed_demo_data_with_id(current_user.id, team.id)
|
||||
end
|
||||
end
|
||||
|
||||
# DELETE /resource/sign_out
|
||||
# def destroy
|
||||
|
|
|
@ -53,9 +53,9 @@ module RepositoryDatatableHelper
|
|||
|
||||
def assigned_row(record, assigned_rows)
|
||||
if assigned_rows&.include?(record)
|
||||
"<span class='circle'> </span>"
|
||||
"<span class='circle-icon'> </span>"
|
||||
else
|
||||
"<span class='circle disabled'> </span>"
|
||||
"<span class='circle-icon disabled'> </span>"
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -80,4 +80,4 @@ module RepositoryDatatableHelper
|
|||
col.slice(:visible, :searchable)
|
||||
end.to_json
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
7
app/javascript/packs/tui_image_editor.js
Normal file
7
app/javascript/packs/tui_image_editor.js
Normal file
|
@ -0,0 +1,7 @@
|
|||
global.tui = {};
|
||||
global.tui.usageStatistics = false;
|
||||
require('tui-code-snippet');
|
||||
|
||||
require('tui-color-picker');
|
||||
|
||||
global.tui.ImageEditor = require('tui-image-editor');
|
2
app/javascript/packs/tui_image_editor_styles.scss
Normal file
2
app/javascript/packs/tui_image_editor_styles.scss
Normal file
|
@ -0,0 +1,2 @@
|
|||
@import "~tui-color-picker/dist/tui-color-picker";
|
||||
@import "~tui-image-editor/dist/tui-image-editor";
|
|
@ -10,8 +10,10 @@ class Asset < ApplicationRecord
|
|||
|
||||
# Paperclip validation
|
||||
has_attached_file :file,
|
||||
styles: { large: [Constants::LARGE_PIC_FORMAT, :jpg],
|
||||
medium: [Constants::MEDIUM_PIC_FORMAT, :jpg] },
|
||||
styles: {
|
||||
large: [Constants::LARGE_PIC_FORMAT, :jpg],
|
||||
medium: [Constants::MEDIUM_PIC_FORMAT, :jpg]
|
||||
},
|
||||
convert_options: {
|
||||
medium: '-quality 70 -strip',
|
||||
all: '-background "#d2d2d2" -flatten +matte'
|
||||
|
@ -463,6 +465,15 @@ class Asset < ApplicationRecord
|
|||
save
|
||||
end
|
||||
|
||||
def editable?(user)
|
||||
objects = %w(step result)
|
||||
my_module = send(objects.find { |object| send(object) }).my_module
|
||||
Canaid::PermissionsHolder.instance.eval(:manage_experiment, user, my_module.experiment) &&
|
||||
!locked? &&
|
||||
%r{^image/#{Regexp.union(Constants::WHITELISTED_IMAGE_TYPES_EDITABLE)}} ===
|
||||
file.content_type
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
# Checks if attachments is an image (in post processing imagemagick will
|
||||
|
|
|
@ -317,7 +317,7 @@ class Team < ApplicationRecord
|
|||
|
||||
def generate_template_project
|
||||
return if without_templates
|
||||
TemplatesService.new.update_team(self)
|
||||
TemplatesService.new.delay(queue: :templates).update_team(self)
|
||||
end
|
||||
|
||||
include FirstTimeDataGenerator
|
||||
|
|
|
@ -129,22 +129,10 @@ class TeamZipExport < ZipExport
|
|||
)
|
||||
file = FileUtils.touch("#{project_path}/#{html_name}").first
|
||||
File.open(file, 'wb') { |f| f.write(project_report_pdf) }
|
||||
|
||||
# Add Handsontable and dependent JS files (mimick frontend formula
|
||||
# processing).
|
||||
required_js = %w(handsontable.full.min.js lodash.js numeral.js numeric.js
|
||||
md5.js jstat.js formula.js parser.js ruleJS.js
|
||||
handsontable.formula.js big.min.js)
|
||||
required_js.each do |filename|
|
||||
filepath = File.join(Rails.root,
|
||||
"vendor/assets/javascripts/#{filename}/")
|
||||
dest_folder = "#{project_path}/"
|
||||
FileUtils.cp(filepath, dest_folder)
|
||||
end
|
||||
end
|
||||
|
||||
ensure
|
||||
# Change current dir outside tmp_dir, since tmp_dir will be deleted
|
||||
Dir.chdir(File.join(Rails.root, 'tmp'))
|
||||
Dir.chdir(Rails.root)
|
||||
end
|
||||
|
||||
def generate_notification(user)
|
||||
|
@ -152,6 +140,7 @@ class TeamZipExport < ZipExport
|
|||
type_of: :deliver,
|
||||
title: I18n.t('zip_export.notification_title'),
|
||||
message: "<a data-id='#{id}' " \
|
||||
"data-turbolinks='false' " \
|
||||
"href='#{Rails.application
|
||||
.routes
|
||||
.url_helpers
|
||||
|
|
|
@ -488,7 +488,8 @@ class User < ApplicationRecord
|
|||
|
||||
# This method must be overwriten for addons that will be installed
|
||||
def show_login_system_notification?
|
||||
user_system_notifications.show_on_login.present?
|
||||
user_system_notifications.show_on_login.present? &&
|
||||
(ENV['ENABLE_TUTORIAL'] != 'true' || settings['tutorial_completed'])
|
||||
end
|
||||
|
||||
# json friendly attributes
|
||||
|
|
|
@ -13,6 +13,7 @@ class UserProject < ApplicationRecord
|
|||
belongs_to :project, inverse_of: :user_projects, touch: true, optional: true
|
||||
|
||||
before_destroy :destroy_associations
|
||||
validates_uniqueness_of :user_id, scope: :project_id
|
||||
|
||||
def role_str
|
||||
I18n.t("user_projects.enums.role.#{role.to_s}")
|
||||
|
|
|
@ -14,6 +14,7 @@ class UserTeam < ApplicationRecord
|
|||
|
||||
before_destroy :destroy_associations
|
||||
after_create :create_samples_table_state
|
||||
validates_uniqueness_of :user_id, scope: :team_id
|
||||
|
||||
def role_str
|
||||
I18n.t("user_teams.enums.role.#{role}")
|
||||
|
|
|
@ -90,6 +90,7 @@ class ZipExport < ApplicationRecord
|
|||
type_of: :deliver,
|
||||
title: I18n.t('zip_export.notification_title'),
|
||||
message: "<a data-id='#{id}' " \
|
||||
"data-turbolinks='false' " \
|
||||
"href='#{Rails.application
|
||||
.routes
|
||||
.url_helpers
|
||||
|
|
|
@ -82,6 +82,7 @@ module Experiments
|
|||
message_items: { experiment: @exp.id,
|
||||
project_new: @project.id,
|
||||
project_original: @original_project.id })
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -72,6 +72,7 @@ class ProjectsOverviewService
|
|||
.joins('LEFT OUTER JOIN user_projects ON '\
|
||||
'user_projects.project_id = projects.id')
|
||||
.left_outer_joins(:user_my_modules)
|
||||
.where('projects.id': @team.projects)
|
||||
.where('user_my_modules.user_id = :user_id '\
|
||||
'OR (user_projects.role = 0 '\
|
||||
'AND user_projects.user_id = :user_id)', user_id: @user.id)
|
||||
|
|
|
@ -32,13 +32,16 @@ class TemplatesService
|
|||
return unless owner.present?
|
||||
updated = false
|
||||
exp_tmplt_dir_prefix = "#{@base_dir}/experiment_"
|
||||
existing = tmpl_project.experiments.where.not(uuid: nil).pluck(:uuid)
|
||||
@experiment_templates.except(*existing).each_value do |id|
|
||||
importer_service = TeamImporter.new
|
||||
importer_service.import_experiment_template_from_dir(
|
||||
exp_tmplt_dir_prefix + id.to_s, tmpl_project.id, owner.id
|
||||
)
|
||||
updated = true
|
||||
# Create lock in case another worker starts to update same team
|
||||
tmpl_project.with_lock do
|
||||
existing = tmpl_project.experiments.where.not(uuid: nil).pluck(:uuid)
|
||||
@experiment_templates.except(*existing).each_value do |id|
|
||||
importer_service = TeamImporter.new
|
||||
importer_service.import_experiment_template_from_dir(
|
||||
exp_tmplt_dir_prefix + id.to_s, tmpl_project.id, owner.id
|
||||
)
|
||||
updated = true
|
||||
end
|
||||
end
|
||||
updated
|
||||
end
|
||||
|
@ -52,4 +55,14 @@ class TemplatesService
|
|||
end
|
||||
[updated_counter, processed_counter]
|
||||
end
|
||||
|
||||
def schedule_creation_for_user(user)
|
||||
user.teams.each do |team|
|
||||
next if team.projects.where(template: true).any?
|
||||
|
||||
TemplatesService.new.delay(
|
||||
queue: :templates
|
||||
).update_team(team)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -19,7 +19,8 @@ module DelayedUploaderDemo
|
|||
current_team:,
|
||||
result_name:,
|
||||
created_at: Time.now,
|
||||
file_name:
|
||||
file_name:,
|
||||
comment: nil
|
||||
)
|
||||
temp_asset = get_asset(current_user, current_team, file_name)
|
||||
temp_result = Result.new(
|
||||
|
@ -32,6 +33,10 @@ module DelayedUploaderDemo
|
|||
|
||||
temp_result.save
|
||||
temp_asset.save
|
||||
|
||||
# Generate comment if it exists
|
||||
generate_result_comment(temp_result, current_user, comment) if comment
|
||||
|
||||
temp_asset.post_process_file(my_module.experiment.project.team)
|
||||
end
|
||||
|
||||
|
@ -42,4 +47,25 @@ module DelayedUploaderDemo
|
|||
step.assets << temp_asset
|
||||
temp_asset.post_process_file(step.my_module.experiment.project.team)
|
||||
end
|
||||
|
||||
def self.generate_result_comment(result, user, message, created_at = nil)
|
||||
created_at ||= result.created_at
|
||||
ResultComment.create(
|
||||
user: user,
|
||||
message: message,
|
||||
created_at: created_at,
|
||||
result: result
|
||||
)
|
||||
Activity.new(
|
||||
type_of: :add_comment_to_result,
|
||||
user: user,
|
||||
project: result.my_module.experiment.project,
|
||||
my_module: result.my_module,
|
||||
created_at: created_at,
|
||||
updated_at: created_at,
|
||||
message: I18n.t('activities.add_comment_to_result',
|
||||
user: user.full_name,
|
||||
result: result.name)
|
||||
).sneaky_save
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
module FirstTimeDataGenerator
|
||||
# Default inventory repository
|
||||
REPO_SAMPLES_NAME = 'Samples'.freeze
|
||||
|
||||
# Create data for demo for new users
|
||||
def seed_demo_data(user, team)
|
||||
def seed_demo_data(user, team, asset_queue = :demo)
|
||||
@user = user
|
||||
|
||||
# If private private team does not exist,
|
||||
|
@ -8,28 +11,80 @@ module FirstTimeDataGenerator
|
|||
# Do nothing
|
||||
return unless team
|
||||
|
||||
# create custom repository samples
|
||||
repository = Repository.create(
|
||||
name: 'Samples',
|
||||
# Skip this team if user already has a demo project
|
||||
return if team.projects.where(demo: true).any?
|
||||
|
||||
name = '[NEW] Demo project by SciNote'
|
||||
exp_name = 'Polymerase chain reaction'
|
||||
# If there is an existing demo project, archive and rename it
|
||||
if team.projects.where(name: name).present?
|
||||
# TODO: check if we still need this code
|
||||
# old = team.projects.where(name: 'Demo project - qPCR')[0]
|
||||
# old.archive! user
|
||||
i = 1
|
||||
while team.projects.where(
|
||||
name: name = "#{name} (#{i})"
|
||||
).present?
|
||||
i += 1
|
||||
end
|
||||
end
|
||||
|
||||
project = Project.create(
|
||||
visibility: 0,
|
||||
name: name,
|
||||
due_date: nil,
|
||||
team: team,
|
||||
created_by: user
|
||||
created_by: user,
|
||||
created_at: generate_random_time(1.week.ago),
|
||||
last_modified_by: user,
|
||||
archived: false,
|
||||
template: false,
|
||||
demo: true
|
||||
)
|
||||
|
||||
# check if samples repo already exist, then create custom repository samples
|
||||
repository = Repository.where(team: team).where(name: REPO_SAMPLES_NAME)
|
||||
repository =
|
||||
if repository.blank?
|
||||
if team.repositories.count < Rails.configuration.x.repositories_limit
|
||||
Repository.create(
|
||||
name: REPO_SAMPLES_NAME,
|
||||
team: team,
|
||||
created_by: user
|
||||
)
|
||||
else
|
||||
# User first repo just as a placeholder, this call will fail anyhow
|
||||
Repository.create(
|
||||
name: team.repositories.first.name,
|
||||
team: team,
|
||||
created_by: user
|
||||
)
|
||||
end
|
||||
else
|
||||
repository.first
|
||||
end
|
||||
|
||||
# create list value column for sample types
|
||||
repository_column_sample_types = RepositoryColumn.create(
|
||||
repository: repository,
|
||||
created_by: user,
|
||||
data_type: :RepositoryListValue,
|
||||
name: 'Sample Types'
|
||||
)
|
||||
repo_columns = []
|
||||
['Sample Types', 'Sample Groups'].each do |repo_name|
|
||||
repo_column = repository.repository_columns.where(name: repo_name)
|
||||
|
||||
# create list value column for sample groups
|
||||
repository_column_sample_groups = RepositoryColumn.create(
|
||||
repository: repository,
|
||||
created_by: user,
|
||||
data_type: :RepositoryListValue,
|
||||
name: 'Sample Groups'
|
||||
)
|
||||
repo_columns <<
|
||||
if repo_column.blank?
|
||||
RepositoryColumn.create(
|
||||
repository: repository,
|
||||
created_by: user,
|
||||
data_type: :RepositoryListValue,
|
||||
name: repo_name
|
||||
)
|
||||
else
|
||||
repo_column.first
|
||||
end
|
||||
end
|
||||
|
||||
# Maintain old names
|
||||
repository_column_sample_types, repository_column_sample_groups =
|
||||
repo_columns
|
||||
|
||||
# create few list items for sample types
|
||||
repository_items_sample_types = []
|
||||
|
@ -41,7 +96,15 @@ module FirstTimeDataGenerator
|
|||
repository_column: repository_column_sample_types,
|
||||
repository: repository
|
||||
)
|
||||
repository_items_sample_types << item
|
||||
|
||||
# Check if it already exists
|
||||
if item.persisted?
|
||||
repository_items_sample_types << item
|
||||
else
|
||||
repository_items_sample_types << repository_column_sample_types
|
||||
.repository_list_items
|
||||
.where(data: name).first
|
||||
end
|
||||
end
|
||||
|
||||
# create few list items for sample groups
|
||||
|
@ -54,7 +117,15 @@ module FirstTimeDataGenerator
|
|||
repository_column: repository_column_sample_groups,
|
||||
repository: repository
|
||||
)
|
||||
repository_items_sample_groups << item
|
||||
|
||||
# Check if it already exists
|
||||
if item.persisted?
|
||||
repository_items_sample_groups << item
|
||||
else
|
||||
repository_items_sample_groups << repository_column_sample_groups
|
||||
.repository_list_items
|
||||
.where(data: name).first
|
||||
end
|
||||
end
|
||||
|
||||
repository_rows_to_assign = []
|
||||
|
@ -152,32 +223,6 @@ module FirstTimeDataGenerator
|
|||
)
|
||||
end
|
||||
|
||||
name = 'Demo project'
|
||||
exp_name = 'qPCR Experiment Version 01'
|
||||
# If there is an existing demo project, archive and rename it
|
||||
if team.projects.where(name: name).present?
|
||||
# TODO: check if we still need this code
|
||||
# old = team.projects.where(name: 'Demo project - qPCR')[0]
|
||||
# old.archive! user
|
||||
i = 1
|
||||
while team.projects.where(
|
||||
name: name = "#{name} (#{i})"
|
||||
).present?
|
||||
i += 1
|
||||
end
|
||||
end
|
||||
|
||||
project = Project.create(
|
||||
visibility: 0,
|
||||
name: name,
|
||||
due_date: nil,
|
||||
team: team,
|
||||
created_by: user,
|
||||
created_at: generate_random_time(1.week.ago),
|
||||
last_modified_by: user,
|
||||
archived: false
|
||||
)
|
||||
|
||||
experiment_description =
|
||||
'Polymerase chain reaction (PCR) monitors the amplification of DNA ' \
|
||||
'in real time (qPCR cyclers constantly scan qPCR plates). It is, in ' \
|
||||
|
@ -498,19 +543,22 @@ module FirstTimeDataGenerator
|
|||
'Collection of potatoes'
|
||||
]
|
||||
|
||||
second_rep_item = smart_annotate_rep_item(repository_rows_to_assign.second)
|
||||
third_rep_item = smart_annotate_rep_item(repository_rows_to_assign.third)
|
||||
fifth_rep_item = smart_annotate_rep_item(repository_rows_to_assign.fifth)
|
||||
module_step_descriptions = [
|
||||
'<html>
|
||||
<body>
|
||||
<p>50% of samples should be mock inoculated
|
||||
<span class=\"atwho-inserted\"contenteditable=\"false\"
|
||||
data-atwho-at-query=\"#\">[#' + sample_name + '3~rep_item~3]</span>
|
||||
data-atwho-at-query=\"#\">[#' + third_rep_item + ']</span>
|
||||
<span class=\"atwho-inserted\" contenteditable=\"false\"
|
||||
data-atwho-at-query=\"#\">[#' + sample_name + '5~rep_item~5]</span>
|
||||
data-atwho-at-query=\"#\">[#' + fifth_rep_item + ']</span>
|
||||
while other 50% with PVY NTN virus
|
||||
<span class=\"atwho-inserted\" contenteditable=\"false\"
|
||||
data-atwho-at-query=\"#\">[#' + sample_name + '3~rep_item~3]</span>
|
||||
data-atwho-at-query=\"#\">[#' + third_rep_item + ']</span>
|
||||
<span class=\"atwho-inserted\" contenteditable=\"false\"
|
||||
data-atwho-at-query=\"#\">[#' + sample_name + '5~rep_item~5]</span>.
|
||||
data-atwho-at-query=\"#\">[#' + fifth_rep_item + ']</span>.
|
||||
</p>
|
||||
</body>
|
||||
</html>',
|
||||
|
@ -524,6 +572,9 @@ module FirstTimeDataGenerator
|
|||
module_step_names,
|
||||
module_step_descriptions)
|
||||
|
||||
# Delete repository items, if we went over the limit
|
||||
repository_rows_to_assign.map(&:destroy) unless repository.id
|
||||
|
||||
# Add table to existig step
|
||||
step = my_modules[1].protocol.steps.where('position = 0').take
|
||||
Table.create(
|
||||
|
@ -533,19 +584,18 @@ module FirstTimeDataGenerator
|
|||
contents: tab_content['module2']['samples_table']
|
||||
)
|
||||
# Add file to existig step
|
||||
DelayedUploaderDemo.delay(queue: :demo).add_step_asset(
|
||||
DelayedUploaderDemo.delay(queue: asset_queue).add_step_asset(
|
||||
step: my_modules[1].protocol.steps.where('position = 0').take,
|
||||
current_user: user,
|
||||
current_team: team,
|
||||
file_name: 'PVY-inoculated_plant_symptoms.JPG'
|
||||
)
|
||||
# Add comment to step 1
|
||||
user_annotation = '[@' + user.name + '~' + user.id.to_s + ']'
|
||||
user_annotation = user.name
|
||||
generate_step_comment(
|
||||
step,
|
||||
user,
|
||||
user_annotation + ' I have used different sample [#' + sample_name +
|
||||
'2~rep_item~2]'
|
||||
"#{user_annotation} I have used different sample [##{second_rep_item}]"
|
||||
)
|
||||
# Add comment to step 3
|
||||
step = my_modules[1].protocol.steps.where('position = 2').take
|
||||
|
@ -555,7 +605,7 @@ module FirstTimeDataGenerator
|
|||
user_annotation + ' Please complete this by Monday.'
|
||||
)
|
||||
# Results
|
||||
DelayedUploaderDemo.delay(queue: :demo).generate_result_asset(
|
||||
DelayedUploaderDemo.delay(queue: asset_queue).generate_result_asset(
|
||||
my_module: my_modules[1],
|
||||
current_user: user,
|
||||
current_team: team,
|
||||
|
@ -564,7 +614,7 @@ module FirstTimeDataGenerator
|
|||
file_name: 'mock-inoculated-plant.JPG'
|
||||
)
|
||||
|
||||
DelayedUploaderDemo.delay(queue: :demo).generate_result_asset(
|
||||
DelayedUploaderDemo.delay(queue: asset_queue).generate_result_asset(
|
||||
my_module: my_modules[1],
|
||||
current_user: user,
|
||||
current_team: team,
|
||||
|
@ -651,11 +701,12 @@ module FirstTimeDataGenerator
|
|||
user: user
|
||||
)
|
||||
qpcr_id = MyModule.where(name: 'qPCR').last.id.base62_encode
|
||||
generate_result_comment(
|
||||
DelayedUploaderDemo.generate_result_comment(
|
||||
temp_result,
|
||||
user,
|
||||
user_annotation + ' Please check if results match results in ' \
|
||||
'[#qPCR~tsk~' + qpcr_id + ']'
|
||||
'[#qPCR~tsk~' + qpcr_id + ']',
|
||||
generate_random_time(temp_result.created_at, 1.days)
|
||||
)
|
||||
temp_result.table = Table.new(
|
||||
created_by: user,
|
||||
|
@ -665,13 +716,14 @@ module FirstTimeDataGenerator
|
|||
temp_result.save
|
||||
|
||||
# Second result
|
||||
DelayedUploaderDemo.delay(queue: :demo).generate_result_asset(
|
||||
DelayedUploaderDemo.delay(queue: asset_queue).generate_result_asset(
|
||||
my_module: my_modules[2],
|
||||
current_user: user,
|
||||
current_team: team,
|
||||
result_name: 'Agarose gel electrophoresis of totRNA samples',
|
||||
created_at: generate_random_time(my_modules[2].created_at, 3.days),
|
||||
file_name: 'totRNA_gel.jpg'
|
||||
file_name: 'totRNA_gel.jpg',
|
||||
comment: user_annotation + ' Could you check if this is okay?'
|
||||
)
|
||||
|
||||
# ----------------- Module 4 ------------------
|
||||
|
@ -762,7 +814,7 @@ module FirstTimeDataGenerator
|
|||
generate_module_steps(my_modules[3], module_step_names, module_step_descriptions)
|
||||
|
||||
# Add file to existig step 1
|
||||
DelayedUploaderDemo.delay(queue: :demo).add_step_asset(
|
||||
DelayedUploaderDemo.delay(queue: asset_queue).add_step_asset(
|
||||
step: my_modules[3].protocol.steps.where('position = 0').take,
|
||||
current_user: user,
|
||||
current_team: team,
|
||||
|
@ -793,8 +845,8 @@ module FirstTimeDataGenerator
|
|||
'If desired, more than 30 mg tissue can be disrupted and homogenized ' \
|
||||
'at the start of the procedure (increase the volume of Buffer RLT ' \
|
||||
'proportionately). Use a portion of the homogenate corresponding to no ' \
|
||||
'more than 30 mg tissue for RNA purification, and store the rest at –80',
|
||||
'°C. Buffer RLT may form a precipitate upon storage. If necessary, ' \
|
||||
'more than 30 mg tissue for RNA purification, and store the rest at –80°C.',
|
||||
'Buffer RLT may form a precipitate upon storage. If necessary, ' \
|
||||
'redissolve by warming, and then place at room temperature (15–25°C).',
|
||||
'Buffer RLT and Buffer RW1 contain a guanidine salt and are therefore ' \
|
||||
'not compatible with disinfecting reagents containing bleach. See page ' \
|
||||
|
@ -804,8 +856,8 @@ module FirstTimeDataGenerator
|
|||
'Perform all centrifugation steps at 20–25°C in a standard ' \
|
||||
'microcentrifuge. Ensure that the centrifuge does not cool below 20°C.'
|
||||
]
|
||||
module_checklist_items.each do |item|
|
||||
checklist.checklist_items << ChecklistItem.new(text: item)
|
||||
module_checklist_items.each_with_index do |item, ind|
|
||||
checklist.checklist_items << ChecklistItem.new(text: item, position: ind)
|
||||
end
|
||||
checklist.save
|
||||
|
||||
|
@ -829,8 +881,8 @@ module FirstTimeDataGenerator
|
|||
'If performing optional on-column DNase digestion, prepare DNase I ' \
|
||||
'stock solution as described in Appendix D (page 67).'
|
||||
]
|
||||
module_checklist_items.each do |item|
|
||||
checklist.checklist_items << ChecklistItem.new(text: item)
|
||||
module_checklist_items.each_with_index do |item, ind|
|
||||
checklist.checklist_items << ChecklistItem.new(text: item, position: ind)
|
||||
end
|
||||
checklist.save
|
||||
|
||||
|
@ -855,13 +907,13 @@ module FirstTimeDataGenerator
|
|||
'genomic DNA contamination”, page 21), follow steps D1–D4 (page 67) ' \
|
||||
'after performing this step.'
|
||||
]
|
||||
module_checklist_items.each do |item|
|
||||
checklist.checklist_items << ChecklistItem.new(text: item)
|
||||
module_checklist_items.each_with_index do |item, ind|
|
||||
checklist.checklist_items << ChecklistItem.new(text: item, position: ind)
|
||||
end
|
||||
checklist.save
|
||||
|
||||
# Results
|
||||
DelayedUploaderDemo.delay(queue: :demo).generate_result_asset(
|
||||
DelayedUploaderDemo.delay(queue: asset_queue).generate_result_asset(
|
||||
my_module: my_modules[3],
|
||||
current_user: user,
|
||||
current_team: team,
|
||||
|
@ -914,8 +966,8 @@ module FirstTimeDataGenerator
|
|||
step: step
|
||||
)
|
||||
|
||||
module_checklist_items.each do |item|
|
||||
checklist.checklist_items << ChecklistItem.new(text: item)
|
||||
module_checklist_items.each_with_index do |item, ind|
|
||||
checklist.checklist_items << ChecklistItem.new(text: item, position: ind)
|
||||
end
|
||||
checklist.save
|
||||
|
||||
|
@ -977,41 +1029,41 @@ module FirstTimeDataGenerator
|
|||
'Clean surfaces with 70% ethanol or RNA remover',
|
||||
'Turn on the UV light'
|
||||
]
|
||||
module_checklist_items.each do |item|
|
||||
checklist.checklist_items << ChecklistItem.new(text: item)
|
||||
module_checklist_items.each_with_index do |item, ind|
|
||||
checklist.checklist_items << ChecklistItem.new(text: item, position: ind)
|
||||
end
|
||||
checklist.save
|
||||
|
||||
# Add file to existig steps
|
||||
DelayedUploaderDemo.delay(queue: :demo).add_step_asset(
|
||||
DelayedUploaderDemo.delay(queue: asset_queue).add_step_asset(
|
||||
step: my_modules[5].protocol.steps.where('position = 0').take,
|
||||
current_user: user,
|
||||
current_team: team,
|
||||
file_name: 'Mixes_Templats.xlsx'
|
||||
)
|
||||
|
||||
DelayedUploaderDemo.delay(queue: :demo).add_step_asset(
|
||||
DelayedUploaderDemo.delay(queue: asset_queue).add_step_asset(
|
||||
step: my_modules[5].protocol.steps.where('position = 1').take,
|
||||
current_user: user,
|
||||
current_team: team,
|
||||
file_name: 'qPCR_template.jpg'
|
||||
)
|
||||
|
||||
DelayedUploaderDemo.delay(queue: :demo).add_step_asset(
|
||||
DelayedUploaderDemo.delay(queue: asset_queue).add_step_asset(
|
||||
step: my_modules[5].protocol.steps.where('position = 1').take,
|
||||
current_user: user,
|
||||
current_team: team,
|
||||
file_name: '96plate.docx'
|
||||
)
|
||||
|
||||
DelayedUploaderDemo.delay(queue: :demo).add_step_asset(
|
||||
DelayedUploaderDemo.delay(queue: asset_queue).add_step_asset(
|
||||
step: my_modules[5].protocol.steps.where('position = 2').take,
|
||||
current_user: user,
|
||||
current_team: team,
|
||||
file_name: 'cycling_conditions.JPG'
|
||||
)
|
||||
|
||||
DelayedUploaderDemo.delay(queue: :demo).add_step_asset(
|
||||
DelayedUploaderDemo.delay(queue: asset_queue).add_step_asset(
|
||||
step: my_modules[5].protocol.steps.where('position = 2').take,
|
||||
current_user: user,
|
||||
current_team: team,
|
||||
|
@ -1039,7 +1091,7 @@ module FirstTimeDataGenerator
|
|||
temp_result.save
|
||||
|
||||
# Results
|
||||
DelayedUploaderDemo.delay(queue: :demo).generate_result_asset(
|
||||
DelayedUploaderDemo.delay(queue: asset_queue).generate_result_asset(
|
||||
my_module: my_modules[5],
|
||||
current_user: user,
|
||||
current_team: team,
|
||||
|
@ -1048,7 +1100,7 @@ module FirstTimeDataGenerator
|
|||
file_name: '1505745387970-1058053257.jpg'
|
||||
)
|
||||
|
||||
DelayedUploaderDemo.delay(queue: :demo).generate_result_asset(
|
||||
DelayedUploaderDemo.delay(queue: asset_queue).generate_result_asset(
|
||||
my_module: my_modules[5],
|
||||
current_user: user,
|
||||
current_team: team,
|
||||
|
@ -1057,7 +1109,7 @@ module FirstTimeDataGenerator
|
|||
file_name: 'chromatogram.png'
|
||||
)
|
||||
|
||||
DelayedUploaderDemo.delay(queue: :demo).generate_result_asset(
|
||||
DelayedUploaderDemo.delay(queue: asset_queue).generate_result_asset(
|
||||
my_module: my_modules[5],
|
||||
current_user: user,
|
||||
current_team: team,
|
||||
|
@ -1066,16 +1118,20 @@ module FirstTimeDataGenerator
|
|||
file_name: 'curves.JPG'
|
||||
)
|
||||
|
||||
DelayedUploaderDemo.delay(queue: :demo).generate_result_asset(
|
||||
DelayedUploaderDemo.delay(queue: asset_queue).generate_result_asset(
|
||||
my_module: my_modules[5],
|
||||
current_user: user,
|
||||
current_team: team,
|
||||
result_name: 'Bacteria plates YPGA',
|
||||
created_at: generate_random_time(my_modules[5].created_at, 2.days),
|
||||
file_name: 'Bacterial_colonies.jpg'
|
||||
file_name: 'Bacterial_colonies.jpg',
|
||||
comment: user_annotation + ' please check the results again. ' \
|
||||
'<span class=\"atwho-inserted\" contenteditable=\"false\"' \
|
||||
'data-atwho-at-query=\"#\">[#' + fifth_rep_item + ']</span>' \
|
||||
' seems to be acting strange?'
|
||||
)
|
||||
|
||||
DelayedUploaderDemo.delay(queue: :demo).generate_result_asset(
|
||||
DelayedUploaderDemo.delay(queue: asset_queue).generate_result_asset(
|
||||
my_module: my_modules[5],
|
||||
current_user: user,
|
||||
current_team: team,
|
||||
|
@ -1226,21 +1282,21 @@ module FirstTimeDataGenerator
|
|||
module_step_descriptions)
|
||||
|
||||
# Add file to existig steps
|
||||
DelayedUploaderDemo.delay(queue: :demo).add_step_asset(
|
||||
DelayedUploaderDemo.delay(queue: asset_queue).add_step_asset(
|
||||
step: my_modules[6].protocol.steps.where('position = 0').take,
|
||||
current_user: user,
|
||||
current_team: team,
|
||||
file_name: 'Native_SDS-PAGE_for_complex_analysis.jpg'
|
||||
)
|
||||
|
||||
DelayedUploaderDemo.delay(queue: :demo).add_step_asset(
|
||||
DelayedUploaderDemo.delay(queue: asset_queue).add_step_asset(
|
||||
step: my_modules[6].protocol.steps.where('position = 4').take,
|
||||
current_user: user,
|
||||
current_team: team,
|
||||
file_name: 'Native-PAGE-Nature_protocols.pdf'
|
||||
)
|
||||
|
||||
DelayedUploaderDemo.delay(queue: :demo).add_step_asset(
|
||||
DelayedUploaderDemo.delay(queue: asset_queue).add_step_asset(
|
||||
step: my_modules[6].protocol.steps.where('position = 5').take,
|
||||
current_user: user,
|
||||
current_team: team,
|
||||
|
@ -1258,8 +1314,8 @@ module FirstTimeDataGenerator
|
|||
'Check stock of reagents & order new stock if needed',
|
||||
'Use gloves at all times'
|
||||
]
|
||||
module_checklist_items.each do |item|
|
||||
checklist.checklist_items << ChecklistItem.new(text: item)
|
||||
module_checklist_items.each_with_index do |item, ind|
|
||||
checklist.checklist_items << ChecklistItem.new(text: item, position: ind)
|
||||
end
|
||||
checklist.save
|
||||
|
||||
|
@ -1291,14 +1347,14 @@ module FirstTimeDataGenerator
|
|||
module_step_descriptions)
|
||||
|
||||
# Add file to existig step
|
||||
DelayedUploaderDemo.delay(queue: :demo).add_step_asset(
|
||||
DelayedUploaderDemo.delay(queue: asset_queue).add_step_asset(
|
||||
step: my_modules[7].protocol.steps.where('position = 0').take,
|
||||
current_user: user,
|
||||
current_team: team,
|
||||
file_name: 'ddCq-quantification_diagnostics-template.xls'
|
||||
)
|
||||
|
||||
DelayedUploaderDemo.delay(queue: :demo).add_step_asset(
|
||||
DelayedUploaderDemo.delay(queue: asset_queue).add_step_asset(
|
||||
step: my_modules[7].protocol.steps.where('position = 0').take,
|
||||
current_user: user,
|
||||
current_team: team,
|
||||
|
@ -1314,7 +1370,7 @@ module FirstTimeDataGenerator
|
|||
)
|
||||
|
||||
# Add result
|
||||
DelayedUploaderDemo.delay(queue: :demo).generate_result_asset(
|
||||
DelayedUploaderDemo.delay(queue: asset_queue).generate_result_asset(
|
||||
my_module: my_modules[7],
|
||||
current_user: user,
|
||||
current_team: team,
|
||||
|
@ -1323,7 +1379,7 @@ module FirstTimeDataGenerator
|
|||
file_name: 'ddCq-quantification_diagnostics-results.xls'
|
||||
)
|
||||
|
||||
DelayedUploaderDemo.delay(queue: :demo).generate_result_asset(
|
||||
DelayedUploaderDemo.delay(queue: asset_queue).generate_result_asset(
|
||||
my_module: my_modules[7],
|
||||
current_user: user,
|
||||
current_team: team,
|
||||
|
@ -1332,7 +1388,7 @@ module FirstTimeDataGenerator
|
|||
file_name: 'dilution_curve-efficiency.JPG'
|
||||
)
|
||||
|
||||
DelayedUploaderDemo.delay(queue: :demo).generate_result_asset(
|
||||
DelayedUploaderDemo.delay(queue: asset_queue).generate_result_asset(
|
||||
my_module: my_modules[7],
|
||||
current_user: user,
|
||||
current_team: team,
|
||||
|
@ -1345,6 +1401,23 @@ module FirstTimeDataGenerator
|
|||
experiment.delay.generate_workflow_img
|
||||
end
|
||||
|
||||
# Used for delayed jobs
|
||||
def self.seed_demo_data_with_id(user_id, team_id)
|
||||
extend self
|
||||
user = User.find(user_id)
|
||||
team = Team.find(team_id)
|
||||
|
||||
unless user || team
|
||||
Rails.logger.warning("Could not retrieve user or team in " \
|
||||
"seed_demo_data_with_id. " \
|
||||
"User #{user_id} was mapped to #{user.inspect}." \
|
||||
"Team #{team_id} was mapped to #{team.inspect}.")
|
||||
return
|
||||
end
|
||||
|
||||
seed_demo_data(user, team, :new_demo_project)
|
||||
end
|
||||
|
||||
# WARNING: This only works on PostgreSQL
|
||||
def pluck_random(scope)
|
||||
scope.order('RANDOM()').first
|
||||
|
@ -1385,9 +1458,9 @@ module FirstTimeDataGenerator
|
|||
if rand < 0.3
|
||||
polite_comment = 'This looks well.'
|
||||
elsif rand < 0.4
|
||||
polite_comment = 'Seems satisfactory.'
|
||||
polite_comment = 'Great job!'
|
||||
elsif rand < 0.4
|
||||
polite_comment = 'Try a bit harder next time.'
|
||||
polite_comment = 'Thanks for getting this done.'
|
||||
end
|
||||
if polite_comment
|
||||
commented_on = generate_random_time(completed_on)
|
||||
|
@ -1422,6 +1495,7 @@ module FirstTimeDataGenerator
|
|||
)
|
||||
end
|
||||
|
||||
|
||||
def generate_result_comment(result, user, message, created_at = nil)
|
||||
created_at ||= generate_random_time(result.created_at, 1.days)
|
||||
ResultComment.create(
|
||||
|
@ -1441,4 +1515,8 @@ module FirstTimeDataGenerator
|
|||
step: step
|
||||
)
|
||||
end
|
||||
|
||||
def smart_annotate_rep_item(item)
|
||||
"#{item.name}~rep_item~#{Base62.encode(item.id)}"
|
||||
end
|
||||
end
|
||||
|
|
|
@ -17,6 +17,10 @@
|
|||
<% if content_for?(:head) %>
|
||||
<%= yield(:head) %>
|
||||
<% end %>
|
||||
|
||||
<%= javascript_pack_tag 'tui_image_editor' %>
|
||||
<%= stylesheet_pack_tag 'tui_image_editor_styles' %>
|
||||
|
||||
</head>
|
||||
<body
|
||||
class="<%= yield :body_class %>"
|
||||
|
@ -39,6 +43,7 @@
|
|||
<!-- About us modal -->
|
||||
<%= render "shared/about_modal" %>
|
||||
<%= render "shared/file_preview_modal.html.erb" %>
|
||||
<%= render "shared/file_edit_modal.html.erb" %>
|
||||
<%= render "shared/navigation" %>
|
||||
|
||||
<% if user_signed_in? && flash[:system_notification_modal] && current_user.show_login_system_notification? %>
|
||||
|
|
23
app/views/shared/_file_edit_modal.html.erb
Normal file
23
app/views/shared/_file_edit_modal.html.erb
Normal file
|
@ -0,0 +1,23 @@
|
|||
<div id="fileEditModal"
|
||||
class="modal modal-file-edit"
|
||||
role="dialog"
|
||||
aria-labelledby="fileEditModal"
|
||||
aria-hidden="true"
|
||||
data-backdrop="static"
|
||||
data-keyboard="false">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="preview-close" data-dismiss="modal"><span class="fas fa-times"></span></button>
|
||||
<span class="file-name"></span>
|
||||
<a class="file-save-link" href='#'>
|
||||
<p><span class="fas fa-save"></span> <%= t('SaveClose')%></p>
|
||||
</a>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div id="tui-image-editor">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -12,9 +12,12 @@
|
|||
<button type="button" class="preview-close" data-dismiss="modal"><span class="fas fa-times"></span></button>
|
||||
<span class="file-name"></span>
|
||||
<span class="file-wopi-controls"></span>
|
||||
<a class="file-download-link" href='#'>
|
||||
<a class="file-download-link" href="#" data-turbolinks="false">
|
||||
<p><span class="fas fa-download"></span> <%= t('Download')%></p>
|
||||
</a>
|
||||
<a class="file-edit-link" style="display:none" href='#'>
|
||||
<p><span class="fas fa-pencil-alt"></span> <%= t('Edit')%></p>
|
||||
</a>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="file-preview-container">
|
||||
|
|
|
@ -103,7 +103,6 @@ invite_to_team = type.in?(%w(invite_to_team invite_to_team_with_role))
|
|||
<div id="recaptcha-service" class="g-recaptcha"
|
||||
data-callback="recaptchaCallback"
|
||||
data-sitekey=<%= ENV['RECAPTCHA_SITE_KEY'] %>></div>
|
||||
<script type="text/javascript" src="https://www.google.com/recaptcha/api.js?hl=en"></script>
|
||||
<input type="hidden" id="recaptcha-invite-modal" value="">
|
||||
<div class="form-group has-error hidden" id="recaptcha-error-msg" >
|
||||
<span class="has-error help-block"></span>
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
<a href="#"
|
||||
id="system-notifications-dropdown"
|
||||
class="dropdown-toggle"
|
||||
title="System notifications"
|
||||
title="<%= t('system_notifications.navbar.tooltip') %>"
|
||||
data-toggle="dropdown"
|
||||
role="button"
|
||||
aria-haspopup="true"
|
||||
|
|
|
@ -11,19 +11,20 @@
|
|||
.html_safe %>
|
||||
</style>
|
||||
|
||||
<script src="handsontable.full.min.js"></script>
|
||||
|
||||
<!-- Libraries for formulas -->
|
||||
<script src="lodash.js"></script>
|
||||
<script src="numeral.js"></script>
|
||||
<script src="numeric.js"></script>
|
||||
<script src="md5.js"></script>
|
||||
<script src="jstat.js"></script>
|
||||
<script src="formula.js"></script>
|
||||
<script src="parser.js"></script>
|
||||
<script src="ruleJS.js"></script>
|
||||
<script src="handsontable.formula.js"></script>
|
||||
<script src="big.min.js"></script>
|
||||
<!-- Libraries for tables and formulas -->
|
||||
<% ['handsontable.full.min.js', 'lodash.js', 'numeral.js', 'numeric.js',
|
||||
'md5.js', 'jstat.js', 'formula.js', 'parser.js', 'ruleJS.js',
|
||||
'handsontable.formula.js', 'big.min.js' ].each do |js_asset| %>
|
||||
<script type="text/javascript">
|
||||
<%= Rails.application
|
||||
.assets_manifest
|
||||
.find_sources(js_asset)
|
||||
.first
|
||||
.to_s
|
||||
.force_encoding(Encoding::UTF_8)
|
||||
.html_safe %>
|
||||
</script>
|
||||
<% end %>
|
||||
|
||||
<!-- Init Handsontables -->
|
||||
<script>
|
||||
|
|
33
bin/webpack
33
bin/webpack
|
@ -1,28 +1,15 @@
|
|||
#!/usr/bin/env ruby
|
||||
$stdout.sync = true
|
||||
|
||||
require "shellwords"
|
||||
require "yaml"
|
||||
ENV["RAILS_ENV"] ||= ENV["RACK_ENV"] || "development"
|
||||
ENV["NODE_ENV"] ||= "development"
|
||||
|
||||
ENV["RAILS_ENV"] ||= "development"
|
||||
RAILS_ENV = ENV["RAILS_ENV"]
|
||||
require "pathname"
|
||||
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
||||
Pathname.new(__FILE__).realpath)
|
||||
|
||||
ENV["NODE_ENV"] ||= RAILS_ENV
|
||||
NODE_ENV = ENV["NODE_ENV"]
|
||||
require "rubygems"
|
||||
require "bundler/setup"
|
||||
|
||||
APP_PATH = File.expand_path("../", __dir__)
|
||||
NODE_MODULES_PATH = File.join(APP_PATH, "node_modules")
|
||||
WEBPACK_CONFIG = File.join(APP_PATH, "config/webpack/#{NODE_ENV}.js")
|
||||
|
||||
unless File.exist?(WEBPACK_CONFIG)
|
||||
puts "Webpack configuration not found."
|
||||
puts "Please run bundle exec rails webpacker:install to install webpacker"
|
||||
exit!
|
||||
end
|
||||
|
||||
newenv = { "NODE_PATH" => NODE_MODULES_PATH.shellescape }
|
||||
cmdline = ["yarn", "run", "webpack", "--", "--config", WEBPACK_CONFIG] + ARGV
|
||||
|
||||
Dir.chdir(APP_PATH) do
|
||||
exec newenv, *cmdline
|
||||
end
|
||||
require "webpacker"
|
||||
require "webpacker/webpack_runner"
|
||||
Webpacker::WebpackRunner.run(ARGV)
|
||||
|
|
|
@ -1,43 +1,15 @@
|
|||
#!/usr/bin/env ruby
|
||||
$stdout.sync = true
|
||||
|
||||
require "shellwords"
|
||||
require "yaml"
|
||||
ENV["RAILS_ENV"] ||= ENV["RACK_ENV"] || "development"
|
||||
ENV["NODE_ENV"] ||= "development"
|
||||
|
||||
ENV["RAILS_ENV"] ||= "development"
|
||||
RAILS_ENV = ENV["RAILS_ENV"]
|
||||
require "pathname"
|
||||
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
||||
Pathname.new(__FILE__).realpath)
|
||||
|
||||
ENV["NODE_ENV"] ||= RAILS_ENV
|
||||
NODE_ENV = ENV["NODE_ENV"]
|
||||
require "rubygems"
|
||||
require "bundler/setup"
|
||||
|
||||
APP_PATH = File.expand_path("../", __dir__)
|
||||
CONFIG_FILE = File.join(APP_PATH, "config/webpacker.yml")
|
||||
NODE_MODULES_PATH = File.join(APP_PATH, "node_modules")
|
||||
WEBPACK_CONFIG = File.join(APP_PATH, "config/webpack/development.js")
|
||||
|
||||
def args(key)
|
||||
index = ARGV.index(key)
|
||||
index ? ARGV[index + 1] : nil
|
||||
end
|
||||
|
||||
begin
|
||||
dev_server = YAML.load_file(CONFIG_FILE)["development"]["dev_server"]
|
||||
|
||||
DEV_SERVER_HOST = "http#{"s" if args('--https') || dev_server["https"]}://#{args('--host') || dev_server["host"]}:#{args('--port') || dev_server["port"]}"
|
||||
|
||||
rescue Errno::ENOENT, NoMethodError
|
||||
puts "Webpack dev_server configuration not found in #{CONFIG_FILE}."
|
||||
puts "Please run bundle exec rails webpacker:install to install webpacker"
|
||||
exit!
|
||||
end
|
||||
|
||||
newenv = {
|
||||
"NODE_PATH" => NODE_MODULES_PATH.shellescape,
|
||||
"ASSET_HOST" => DEV_SERVER_HOST.shellescape
|
||||
}.freeze
|
||||
|
||||
cmdline = ["yarn", "run", "webpack-dev-server", "--", "--progress", "--color", "--config", WEBPACK_CONFIG] + ARGV
|
||||
|
||||
Dir.chdir(APP_PATH) do
|
||||
exec newenv, *cmdline
|
||||
end
|
||||
require "webpacker"
|
||||
require "webpacker/dev_server_runner"
|
||||
Webpacker::DevServerRunner.run(ARGV)
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
Rails.application.configure do
|
||||
# Verifies that versions and hashed value of the package contents in the project's package.json
|
||||
config.webpacker.check_yarn_integrity = true
|
||||
|
||||
# Settings specified here will take precedence over those in config/application.rb.
|
||||
|
||||
# In the development environment your application's code is reloaded on
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
Rails.application.configure do
|
||||
# Verifies that versions and hashed value of the package contents in the project's package.json
|
||||
config.webpacker.check_yarn_integrity = false
|
||||
|
||||
# Settings specified here will take precedence over those in config/application.rb.
|
||||
|
||||
# Code is not reloaded between requests.
|
||||
|
|
|
@ -3,5 +3,11 @@
|
|||
# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.
|
||||
# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }
|
||||
|
||||
# Silence the WOPI method override to prevent "trapping" of stack/backtrace
|
||||
# See https://stackoverflow.com/questions/29498145
|
||||
Rails.backtrace_cleaner.add_silencer do |line|
|
||||
line =~ %r{app/middlewares/wopi_method_override}
|
||||
end
|
||||
|
||||
# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code.
|
||||
# Rails.backtrace_cleaner.remove_silencers!
|
||||
|
|
|
@ -219,15 +219,19 @@ class Constants
|
|||
'gif', 'jpeg', 'pjpeg', 'png', 'x-png', 'svg+xml', 'bmp', 'tiff'
|
||||
].freeze
|
||||
|
||||
WHITELISTED_IMAGE_TYPES_EDITABLE = %w(
|
||||
gif jpeg pjpeg png
|
||||
).freeze
|
||||
|
||||
WHITELISTED_TAGS = %w(
|
||||
a b strong i em li ul ol h1 del ins h2 h3 h4 h5 h6 br sub sup p code hr div
|
||||
span u s blockquote pre col colgroup table thead tbody th tr td
|
||||
).freeze
|
||||
|
||||
WHITELISTED_ATTRIBUTES = %w(
|
||||
href src width height alt cite datetime title class name xml:lang abbr style
|
||||
target data-*
|
||||
).freeze
|
||||
WHITELISTED_ATTRIBUTES = [
|
||||
'href', 'src', 'width', 'height', 'alt', 'cite', 'datetime', 'title',
|
||||
'class', 'name', 'xml:lang', 'abbr', 'style', 'target', :data
|
||||
].freeze
|
||||
|
||||
WHITELISTED_CSS_ATTRIBUTES = {
|
||||
allow_comments: false,
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Be sure to restart your server when you modify this file.
|
||||
|
||||
# Configure sensitive parameters which will be filtered from the log file.
|
||||
Rails.application.config.filter_parameters += [:password]
|
||||
Rails.application.config.filter_parameters += %i(password image)
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
Paperclip::DataUriAdapter.register
|
||||
|
||||
if ENV['PAPERCLIP_HASH_SECRET'].nil?
|
||||
puts "WARNING! Environment variable PAPERCLIP_HASH_SECRET must be set."
|
||||
|
|
|
@ -1292,6 +1292,8 @@ en:
|
|||
create:
|
||||
success_flash: "Successfully added sample group <strong>%{sample_group}</strong> to team <strong>%{team}</strong>."
|
||||
system_notifications:
|
||||
navbar:
|
||||
tooltip: 'What’s new notifications'
|
||||
emails:
|
||||
subject: "You've received a What's new notification"
|
||||
intro_paragraph: "Hi %{user_name}, you've received What's new notification in SciNote:"
|
||||
|
@ -2010,6 +2012,9 @@ en:
|
|||
Asset: "File"
|
||||
Assets: "Files"
|
||||
Download: "Download"
|
||||
Edit: "Edit"
|
||||
Save: "Save"
|
||||
SaveClose: "Save & Close"
|
||||
Module: "Task"
|
||||
Modules: "Tasks"
|
||||
Project: "Project"
|
||||
|
|
|
@ -572,6 +572,8 @@ Rails.application.routes.draw do
|
|||
get 'files/:id/preview', to: 'assets#preview', as: 'preview_asset'
|
||||
get 'files/:id/view', to: 'assets#view', as: 'view_asset'
|
||||
get 'files/:id/edit', to: 'assets#edit', as: 'edit_asset'
|
||||
post 'files/:id/update_image', to: 'assets#update_image',
|
||||
as: 'update_asset_image'
|
||||
|
||||
devise_scope :user do
|
||||
get 'avatar/:id/:style' => 'users/registrations#avatar', as: 'avatar'
|
||||
|
|
|
@ -1,35 +0,0 @@
|
|||
// Common configuration for webpacker loaded from config/webpacker.yml
|
||||
|
||||
const { join, resolve } = require('path')
|
||||
const { env } = require('process')
|
||||
const { safeLoad } = require('js-yaml')
|
||||
const { readFileSync } = require('fs')
|
||||
|
||||
const configPath = resolve('config', 'webpacker.yml')
|
||||
const loadersDir = join(__dirname, 'loaders')
|
||||
const settings = safeLoad(readFileSync(configPath), 'utf8')[env.NODE_ENV]
|
||||
|
||||
function removeOuterSlashes(string) {
|
||||
return string.replace(/^\/*/, '').replace(/\/*$/, '')
|
||||
}
|
||||
|
||||
function formatPublicPath(host = '', path = '') {
|
||||
let formattedHost = removeOuterSlashes(host)
|
||||
if (formattedHost && !/^http/i.test(formattedHost)) {
|
||||
formattedHost = `//${formattedHost}`
|
||||
}
|
||||
const formattedPath = removeOuterSlashes(path)
|
||||
return `${formattedHost}/${formattedPath}/`
|
||||
}
|
||||
|
||||
const output = {
|
||||
path: resolve('public', settings.public_output_path),
|
||||
publicPath: formatPublicPath(env.ASSET_HOST, settings.public_output_path)
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
settings,
|
||||
env,
|
||||
loadersDir,
|
||||
output
|
||||
}
|
|
@ -1,32 +1,5 @@
|
|||
// Note: You must restart bin/webpack-dev-server for changes to take effect
|
||||
process.env.NODE_ENV = process.env.NODE_ENV || 'development'
|
||||
|
||||
const merge = require('webpack-merge')
|
||||
const sharedConfig = require('./shared.js')
|
||||
const { settings, output } = require('./configuration.js')
|
||||
const environment = require('./environment')
|
||||
|
||||
module.exports = merge(sharedConfig, {
|
||||
devtool: 'cheap-eval-source-map',
|
||||
|
||||
stats: {
|
||||
errorDetails: true
|
||||
},
|
||||
|
||||
output: {
|
||||
pathinfo: true
|
||||
},
|
||||
|
||||
devServer: {
|
||||
clientLogLevel: 'none',
|
||||
https: settings.dev_server.https,
|
||||
host: settings.dev_server.host,
|
||||
port: settings.dev_server.port,
|
||||
contentBase: output.path,
|
||||
publicPath: output.publicPath,
|
||||
compress: true,
|
||||
headers: { 'Access-Control-Allow-Origin': '*' },
|
||||
historyApiFallback: true,
|
||||
watchOptions: {
|
||||
ignored: /node_modules/
|
||||
}
|
||||
}
|
||||
})
|
||||
module.exports = environment.toWebpackConfig()
|
||||
|
|
3
config/webpack/environment.js
Normal file
3
config/webpack/environment.js
Normal file
|
@ -0,0 +1,3 @@
|
|||
const { environment } = require('@rails/webpacker')
|
||||
|
||||
module.exports = environment
|
|
@ -1,12 +0,0 @@
|
|||
const { env, publicPath } = require('../configuration.js')
|
||||
|
||||
module.exports = {
|
||||
test: /\.(jpg|jpeg|png|gif|svg|eot|ttf|woff|woff2)$/i,
|
||||
use: [{
|
||||
loader: 'file-loader',
|
||||
options: {
|
||||
publicPath,
|
||||
name: env.NODE_ENV === 'production' ? '[name]-[hash].[ext]' : '[name].[ext]'
|
||||
}
|
||||
}]
|
||||
}
|
|
@ -1,5 +0,0 @@
|
|||
module.exports = {
|
||||
test: /\.js(\.erb)?$/,
|
||||
exclude: /node_modules/,
|
||||
loader: 'babel-loader'
|
||||
}
|
|
@ -1,4 +0,0 @@
|
|||
module.exports = {
|
||||
test: /\.coffee(\.erb)?$/,
|
||||
loader: 'coffee-loader'
|
||||
}
|
|
@ -1,9 +0,0 @@
|
|||
module.exports = {
|
||||
test: /\.erb$/,
|
||||
enforce: 'pre',
|
||||
exclude: /node_modules/,
|
||||
loader: 'rails-erb-loader',
|
||||
options: {
|
||||
runner: 'bin/rails runner'
|
||||
}
|
||||
}
|
5
config/webpack/loaders/react.js
vendored
5
config/webpack/loaders/react.js
vendored
|
@ -1,5 +0,0 @@
|
|||
module.exports = {
|
||||
test: /\.(js|jsx)?(\.erb)?$/,
|
||||
exclude: /node_modules/,
|
||||
loader: 'babel-loader'
|
||||
}
|
|
@ -1,15 +0,0 @@
|
|||
const ExtractTextPlugin = require('extract-text-webpack-plugin')
|
||||
const { env } = require('../configuration.js')
|
||||
|
||||
module.exports = {
|
||||
test: /\.(scss|sass|css)$/i,
|
||||
use: ExtractTextPlugin.extract({
|
||||
fallback: 'style-loader',
|
||||
use: [
|
||||
{ loader: 'css-loader', options: { minimize: env.NODE_ENV === 'production' } },
|
||||
{ loader: 'postcss-loader', options: { sourceMap: true } },
|
||||
'resolve-url-loader',
|
||||
{ loader: 'sass-loader', options: { sourceMap: true } }
|
||||
]
|
||||
})
|
||||
}
|
|
@ -1,35 +1,5 @@
|
|||
// Note: You must restart bin/webpack-dev-server for changes to take effect
|
||||
process.env.NODE_ENV = process.env.NODE_ENV || 'production'
|
||||
|
||||
/* eslint global-require: 0 */
|
||||
const environment = require('./environment')
|
||||
|
||||
const webpack = require('webpack')
|
||||
const merge = require('webpack-merge')
|
||||
const CompressionPlugin = require('compression-webpack-plugin')
|
||||
const sharedConfig = require('./shared.js')
|
||||
|
||||
module.exports = merge(sharedConfig, {
|
||||
output: { filename: '[name]-[chunkhash].js' },
|
||||
devtool: 'source-map',
|
||||
stats: 'normal',
|
||||
|
||||
plugins: [
|
||||
new webpack.optimize.UglifyJsPlugin({
|
||||
minimize: true,
|
||||
sourceMap: true,
|
||||
|
||||
compress: {
|
||||
warnings: false
|
||||
},
|
||||
|
||||
output: {
|
||||
comments: false
|
||||
}
|
||||
}),
|
||||
|
||||
new CompressionPlugin({
|
||||
asset: '[path].gz[query]',
|
||||
algorithm: 'gzip',
|
||||
test: /\.(js|css|html|json|ico|svg|eot|otf|ttf)$/
|
||||
})
|
||||
]
|
||||
})
|
||||
module.exports = environment.toWebpackConfig()
|
||||
|
|
|
@ -1,58 +0,0 @@
|
|||
// Note: You must restart bin/webpack-dev-server for changes to take effect
|
||||
|
||||
/* eslint global-require: 0 */
|
||||
/* eslint import/no-dynamic-require: 0 */
|
||||
|
||||
const webpack = require('webpack')
|
||||
const { basename, dirname, join, relative, resolve } = require('path')
|
||||
const { sync } = require('glob')
|
||||
const ExtractTextPlugin = require('extract-text-webpack-plugin')
|
||||
const ManifestPlugin = require('webpack-manifest-plugin')
|
||||
const extname = require('path-complete-extname')
|
||||
const { env, settings, output, loadersDir } = require('./configuration.js')
|
||||
|
||||
const extensionGlob = `**/*{${settings.extensions.join(',')}}*`
|
||||
const entryPath = join(settings.source_path, settings.source_entry_path)
|
||||
const packPaths = sync(join(entryPath, extensionGlob))
|
||||
|
||||
module.exports = {
|
||||
entry: packPaths.reduce(
|
||||
(map, entry) => {
|
||||
const localMap = map
|
||||
const namespace = relative(join(entryPath), dirname(entry))
|
||||
localMap[join(namespace, basename(entry, extname(entry)))] = resolve(entry)
|
||||
return localMap
|
||||
}, {}
|
||||
),
|
||||
|
||||
output: {
|
||||
filename: '[name].js',
|
||||
path: output.path,
|
||||
publicPath: output.publicPath
|
||||
},
|
||||
|
||||
module: {
|
||||
rules: sync(join(loadersDir, '*.js')).map(loader => require(loader))
|
||||
},
|
||||
|
||||
plugins: [
|
||||
new webpack.EnvironmentPlugin(JSON.parse(JSON.stringify(env))),
|
||||
new ExtractTextPlugin(env.NODE_ENV === 'production' ? '[name]-[hash].css' : '[name].css'),
|
||||
new ManifestPlugin({
|
||||
publicPath: output.publicPath,
|
||||
writeToFileEmit: true
|
||||
})
|
||||
],
|
||||
|
||||
resolve: {
|
||||
extensions: settings.extensions,
|
||||
modules: [
|
||||
resolve(settings.source_path),
|
||||
'node_modules'
|
||||
]
|
||||
},
|
||||
|
||||
resolveLoader: {
|
||||
modules: ['node_modules']
|
||||
}
|
||||
}
|
|
@ -1,6 +1,5 @@
|
|||
// Note: You must restart bin/webpack-dev-server for changes to take effect
|
||||
process.env.NODE_ENV = process.env.NODE_ENV || 'development'
|
||||
|
||||
const merge = require('webpack-merge')
|
||||
const sharedConfig = require('./shared.js')
|
||||
const environment = require('./environment')
|
||||
|
||||
module.exports = merge(sharedConfig, {})
|
||||
module.exports = environment.toWebpackConfig()
|
||||
|
|
|
@ -4,17 +4,23 @@ default: &default
|
|||
source_path: app/javascript
|
||||
source_entry_path: packs
|
||||
public_output_path: packs
|
||||
cache_path: tmp/cache/webpacker
|
||||
|
||||
# Additional paths webpack should lookup modules
|
||||
# ['app/assets', 'engine/foo/app/assets']
|
||||
resolved_paths: []
|
||||
|
||||
# Reload manifest.json on all requests so we reload latest compiled packs
|
||||
cache_manifest: false
|
||||
|
||||
extensions:
|
||||
- .coffee
|
||||
- .erb
|
||||
- .js
|
||||
- .jsx
|
||||
- .ts
|
||||
- .vue
|
||||
- .sass
|
||||
- .scss
|
||||
- .css
|
||||
- .module.sass
|
||||
- .module.scss
|
||||
- .module.css
|
||||
- .png
|
||||
- .svg
|
||||
- .gif
|
||||
|
@ -23,16 +29,40 @@ default: &default
|
|||
|
||||
development:
|
||||
<<: *default
|
||||
compile: true
|
||||
|
||||
# Reference: https://webpack.js.org/configuration/dev-server/
|
||||
dev_server:
|
||||
host: 0.0.0.0
|
||||
port: 8080
|
||||
https: false
|
||||
host: 0.0.0.0
|
||||
port: 3035
|
||||
public: 0.0.0.0:3035
|
||||
hmr: false
|
||||
# Inline should be set to true if using HMR
|
||||
inline: true
|
||||
overlay: true
|
||||
compress: true
|
||||
disable_host_check: true
|
||||
use_local_ip: false
|
||||
quiet: false
|
||||
headers:
|
||||
'Access-Control-Allow-Origin': '*'
|
||||
watch_options:
|
||||
ignored: /node_modules/
|
||||
|
||||
|
||||
test:
|
||||
<<: *default
|
||||
compile: true
|
||||
|
||||
# Compile test packs to a separate directory
|
||||
public_output_path: packs-test
|
||||
|
||||
production:
|
||||
<<: *default
|
||||
|
||||
# Production depends on precompilation of packs prior to booting for performance.
|
||||
compile: false
|
||||
|
||||
# Cache manifest.json for performance
|
||||
cache_manifest: true
|
||||
|
|
16
db/migrate/20190227125306_add_unique_index_on_user_teams.rb
Normal file
16
db/migrate/20190227125306_add_unique_index_on_user_teams.rb
Normal file
|
@ -0,0 +1,16 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddUniqueIndexOnUserTeams < ActiveRecord::Migration[5.1]
|
||||
def up
|
||||
# firstly delete the duplicates
|
||||
execute 'WITH uniq AS
|
||||
(SELECT DISTINCT ON (user_id, team_id) * FROM user_teams)
|
||||
DELETE FROM user_teams WHERE user_teams.id NOT IN
|
||||
(SELECT id FROM uniq)'
|
||||
add_index :user_teams, %i(user_id team_id), unique: true
|
||||
end
|
||||
|
||||
def down
|
||||
remove_index :user_teams, column: %i(user_id team_id)
|
||||
end
|
||||
end
|
|
@ -0,0 +1,16 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddUniqueIndexOnUserProjects < ActiveRecord::Migration[5.1]
|
||||
def up
|
||||
# firstly delete the duplicates
|
||||
execute 'WITH uniq AS
|
||||
(SELECT DISTINCT ON (user_id, project_id) * FROM user_projects)
|
||||
DELETE FROM user_projects WHERE user_projects.id NOT IN
|
||||
(SELECT id FROM uniq)'
|
||||
add_index :user_projects, %i(user_id project_id), unique: true
|
||||
end
|
||||
|
||||
def down
|
||||
remove_index :user_projects, columns: %i(user_id project_id)
|
||||
end
|
||||
end
|
6
db/migrate/20190304153544_add_demo_flag_to_project.rb
Normal file
6
db/migrate/20190304153544_add_demo_flag_to_project.rb
Normal file
|
@ -0,0 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
class AddDemoFlagToProject < ActiveRecord::Migration[5.1]
|
||||
def change
|
||||
add_column :projects, :demo, :boolean, null: false, default: false
|
||||
end
|
||||
end
|
|
@ -10,7 +10,7 @@
|
|||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(version: 20190227110801) do
|
||||
ActiveRecord::Schema.define(version: 20190304153544) do
|
||||
|
||||
# These are extensions that must be enabled in order to support this database
|
||||
enable_extension "plpgsql"
|
||||
|
@ -305,6 +305,7 @@ ActiveRecord::Schema.define(version: 20190227110801) do
|
|||
t.datetime "restored_on"
|
||||
t.string "experiments_order"
|
||||
t.boolean "template"
|
||||
t.boolean "demo", default: false, null: false
|
||||
t.index "trim_html_tags((name)::text) gin_trgm_ops", name: "index_projects_on_name", using: :gin
|
||||
t.index ["archived_by_id"], name: "index_projects_on_archived_by_id"
|
||||
t.index ["created_by_id"], name: "index_projects_on_created_by_id"
|
||||
|
@ -803,6 +804,7 @@ ActiveRecord::Schema.define(version: 20190227110801) do
|
|||
t.bigint "assigned_by_id"
|
||||
t.index ["assigned_by_id"], name: "index_user_projects_on_assigned_by_id"
|
||||
t.index ["project_id"], name: "index_user_projects_on_project_id"
|
||||
t.index ["user_id", "project_id"], name: "index_user_projects_on_user_id_and_project_id", unique: true
|
||||
t.index ["user_id"], name: "index_user_projects_on_user_id"
|
||||
end
|
||||
|
||||
|
@ -828,6 +830,7 @@ ActiveRecord::Schema.define(version: 20190227110801) do
|
|||
t.bigint "assigned_by_id"
|
||||
t.index ["assigned_by_id"], name: "index_user_teams_on_assigned_by_id"
|
||||
t.index ["team_id"], name: "index_user_teams_on_team_id"
|
||||
t.index ["user_id", "team_id"], name: "index_user_teams_on_user_id_and_team_id", unique: true
|
||||
t.index ["user_id"], name: "index_user_teams_on_user_id"
|
||||
end
|
||||
|
||||
|
|
|
@ -24,6 +24,7 @@ services:
|
|||
bundle exec rails s -b 0.0.0.0"
|
||||
environment:
|
||||
- RAILS_ENV=development
|
||||
- WEBPACKER_DEV_SERVER_HOST=webpack
|
||||
volumes:
|
||||
- .:/usr/src/app
|
||||
- scinote_development_bundler:/usr/local/bundle/
|
||||
|
@ -38,13 +39,15 @@ services:
|
|||
stdin_open: true
|
||||
tty: true
|
||||
ports:
|
||||
- "8080:8080"
|
||||
- "3035:3035"
|
||||
command: >
|
||||
bash -c "./bin/webpack-dev-server"
|
||||
environment:
|
||||
- RAILS_ENV=development
|
||||
volumes:
|
||||
- .:/usr/src/app
|
||||
- scinote_development_bundler:/usr/local/bundle/
|
||||
- scinote_development_files:/usr/src/app/public/system
|
||||
|
||||
volumes:
|
||||
scinote_development_postgres:
|
||||
|
|
|
@ -131,23 +131,53 @@ namespace :data do
|
|||
end
|
||||
|
||||
desc 'Update all templates projects'
|
||||
task update_all_templates: :environment do
|
||||
task :update_all_templates,
|
||||
%i(slice_size) => [:environment] do |_, args|
|
||||
args.with_defaults(slice_size: 800)
|
||||
|
||||
Rails.logger.info('Templates, syncing all templates projects')
|
||||
updated, total = TemplatesService.new.update_all_templates
|
||||
Rails.logger.info(
|
||||
"Templates, total number of updated projects: #{updated} out of #{total}}"
|
||||
)
|
||||
Team.all.order(updated_at: :desc)
|
||||
.each_slice(args[:slice_size].to_i).with_index do |teams, i|
|
||||
Rails.logger.info("Processing slice with index #{i}. " \
|
||||
"First team: #{teams.first.id}, " \
|
||||
"Last team: #{teams.last.id}.")
|
||||
|
||||
teams.each do |team|
|
||||
TemplatesService.new.delay(
|
||||
run_at: i.hours.from_now,
|
||||
queue: :templates,
|
||||
priority: 5
|
||||
).update_team(team)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
desc 'Create demo project on existing users'
|
||||
task create_demo_project_on_existing_users: :environment do
|
||||
task :create_demo_project_on_existing_users,
|
||||
%i(slice_size) => [:environment] do |_, args|
|
||||
args.with_defaults(slice_size: 800)
|
||||
|
||||
require "#{Rails.root}/app/utilities/first_time_data_generator"
|
||||
include FirstTimeDataGenerator
|
||||
|
||||
Rails.logger.info('Creating demo project on existing users')
|
||||
|
||||
User.find_each do |user|
|
||||
seed_demo_data(user, user.teams.first)
|
||||
Team.all.order(updated_at: :desc)
|
||||
.each_slice(args[:slice_size]).with_index do |teams, i|
|
||||
Rails.logger.info("Processing slice with index #{i}. " \
|
||||
"First team: #{teams.first.id}, " \
|
||||
"Last team: #{teams.last.id}.")
|
||||
|
||||
teams.each do |team|
|
||||
owner_ut = team.user_teams.where(role: 2).first
|
||||
next unless owner_ut
|
||||
|
||||
FirstTimeDataGenerator.delay(
|
||||
run_at: i.hours.from_now,
|
||||
queue: :new_demo_project,
|
||||
priority: 10
|
||||
).seed_demo_data_with_id(owner_ut.user.id, team.id)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
74
lib/tasks/rename_duplicates_protocols.rake
Normal file
74
lib/tasks/rename_duplicates_protocols.rake
Normal file
|
@ -0,0 +1,74 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
# rubocop:disable Metrics/BlockLength
|
||||
namespace :protocols do
|
||||
desc 'Rename dupluicates protocols '
|
||||
task rename_duplicates_team_protocols: :environment do
|
||||
# checking for public protocols
|
||||
public_protocols = Protocol.select(:name, :team_id)
|
||||
.where.not(name: nil).where(protocol_type: 3)
|
||||
.group(:name, :team_id, :protocol_type)
|
||||
.having('COUNT(*) > 1')
|
||||
public_protocols.each do |dup_name|
|
||||
protocols_to_update = Protocol.where(
|
||||
name: dup_name.name,
|
||||
team_id: dup_name.team_id,
|
||||
protocol_type: 3
|
||||
).order(created_at: :asc)
|
||||
protocols_to_update.each_with_index do |protocol, index|
|
||||
next if index.zero?
|
||||
|
||||
protocol.update(name: "#{protocol.name} (#{index})")
|
||||
end
|
||||
end
|
||||
|
||||
# checking for private protocols
|
||||
private_protocols = Protocol.select(:name, :team_id, :added_by_id)
|
||||
.where.not(name: nil).where(protocol_type: 2)
|
||||
.group(
|
||||
:name,
|
||||
:team_id,
|
||||
:protocol_type,
|
||||
:added_by_id
|
||||
)
|
||||
.having('COUNT(*) > 1')
|
||||
private_protocols.each do |dup_name|
|
||||
protocols_to_update = Protocol.where(
|
||||
name: dup_name.name,
|
||||
team_id: dup_name.team_id,
|
||||
protocol_type: 2,
|
||||
added_by_id: dup_name.added_by_id
|
||||
).order(created_at: :asc)
|
||||
protocols_to_update.each_with_index do |protocol, index|
|
||||
next if index.zero?
|
||||
|
||||
protocol.update(name: "#{protocol.name} (#{index})")
|
||||
end
|
||||
end
|
||||
|
||||
# checking for archived protocols
|
||||
archived_protocols = Protocol.select(:name, :team_id, :added_by_id)
|
||||
.where.not(name: nil).where(protocol_type: 4)
|
||||
.group(
|
||||
:name,
|
||||
:team_id,
|
||||
:protocol_type,
|
||||
:added_by_id
|
||||
)
|
||||
.having('COUNT(*) > 1')
|
||||
archived_protocols.each do |dup_name|
|
||||
protocols_to_update = Protocol.where(
|
||||
name: dup_name.name,
|
||||
team_id: dup_name.team_id,
|
||||
protocol_type: 4,
|
||||
added_by_id: dup_name.added_by_id
|
||||
).order(created_at: :asc)
|
||||
protocols_to_update.each_with_index do |protocol, index|
|
||||
next if index.zero?
|
||||
|
||||
protocol.update(name: "#{protocol.name} (#{index})")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
# rubocop:enable Metrics/BlockLength
|
6823
package-lock.json
generated
6823
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
@ -42,6 +42,7 @@
|
|||
"webpack-dev-server": "^2.11.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"@rails/webpacker": "^3.5.5",
|
||||
"autoprefixer": "^7.2.6",
|
||||
"axios": "^0.16.2",
|
||||
"babel-core": "^6.26.3",
|
||||
|
@ -59,6 +60,7 @@
|
|||
"compression-webpack-plugin": "^1.1.11",
|
||||
"css-loader": "^0.28.11",
|
||||
"extract-text-webpack-plugin": "^3.0.2",
|
||||
"fabric": "1.6.7",
|
||||
"file-loader": "^0.11.2",
|
||||
"glob": "^7.1.2",
|
||||
"immutability-helper": "^2.7.1",
|
||||
|
@ -67,6 +69,7 @@
|
|||
"lodash": "^4.17.10",
|
||||
"moment": "^2.22.2",
|
||||
"moment-timezone": "^0.5.21",
|
||||
"node-gyp": "^3.8.0",
|
||||
"node-sass": "^4.9.2",
|
||||
"path-complete-extname": "^0.1.0",
|
||||
"postcss-loader": "^2.1.6",
|
||||
|
@ -93,10 +96,14 @@
|
|||
"redux": "^3.7.2",
|
||||
"redux-thunk": "^2.3.0",
|
||||
"resolve-url-loader": "^2.3.0",
|
||||
"safe-umd-webpack-plugin": "^4.0.0",
|
||||
"sass-loader": "^6.0.7",
|
||||
"shortid": "^2.2.12",
|
||||
"style-loader": "^0.18.2",
|
||||
"styled-components": "^2.4.1",
|
||||
"tui-code-snippet": "^1.5.0",
|
||||
"tui-color-picker": "^2.2.0",
|
||||
"tui-image-editor": "git://github.com/biosistemika/tui.image-editor",
|
||||
"webpack": "^3.12.0",
|
||||
"webpack-manifest-plugin": "^1.3.2",
|
||||
"webpack-merge": "^4.1.3"
|
||||
|
|
235
public/images/icon-a.svg
Normal file
235
public/images/icon-a.svg
Normal file
|
@ -0,0 +1,235 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs>
|
||||
<circle id="a" cx="16" cy="16" r="16"/>
|
||||
</defs><symbol id="icon-a-ic-apply" viewBox="0 0 24 24">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h24v24H0z"/>
|
||||
<path stroke="#434343" d="M4 12.011l5 5L20.011 6"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-a-ic-cancel" viewBox="0 0 24 24">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h24v24H0z"/>
|
||||
<path stroke="#434343" d="M6 6l12 12M18 6L6 18"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-a-ic-color-transparent-w" viewBox="0 0 32 32">
|
||||
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<g>
|
||||
<use fill="#FFF" xlink:href="#a"/>
|
||||
<circle cx="16" cy="16" r="15.5" stroke="#D5D5D5"/>
|
||||
</g>
|
||||
<path stroke="#FF4040" stroke-width="1.5" d="M27 5L5 27"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-a-ic-crop" viewBox="0 0 24 24">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h24v24H0z"/>
|
||||
<path fill="#434343" d="M4 0h1v20a1 1 0 0 1-1-1V0zM20 17h-1V5h1v12zm0 2v5h-1v-5h1z"/>
|
||||
<path fill="#434343" d="M5 19h19v1H5zM4.762 4v1H0V4h4.762zM7 4h12a1 1 0 0 1 1 1H7V4z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-a-ic-delete-all" viewBox="0 0 24 24">
|
||||
<g fill="#434343" fill-rule="evenodd">
|
||||
<path d="M5 23H3a1 1 0 0 1-1-1V6h1v16h2v1zm16-10h-1V6h1v7zM9 13H8v-3h1v3zm3 0h-1v-3h1v3zm3 0h-1v-3h1v3zM14.794 3.794L13 2h-3L8.206 3.794A.963.963 0 0 1 8 2.5l.703-1.055A1 1 0 0 1 9.535 1h3.93a1 1 0 0 1 .832.445L15 2.5a.965.965 0 0 1-.206 1.294zM14.197 4H8.803h5.394z"/>
|
||||
<path d="M0 3h23v1H0zM11.286 21H8.714L8 23H7l1-2.8V20h.071L9.5 16h1l1.429 4H12v.2l1 2.8h-1l-.714-2zm-.357-1L10 17.4 9.071 20h1.858zM20 22h3v1h-4v-7h1v6zm-5 0h3v1h-4v-7h1v6z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-a-ic-delete" viewBox="0 0 24 24">
|
||||
<g fill="#434343" fill-rule="evenodd">
|
||||
<path d="M3 6v16h17V6h1v16a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V6h1zM14.794 3.794L13 2h-3L8.206 3.794A.963.963 0 0 1 8 2.5l.703-1.055A1 1 0 0 1 9.535 1h3.93a1 1 0 0 1 .832.445L15 2.5a.965.965 0 0 1-.206 1.294zM14.197 4H8.803h5.394z"/>
|
||||
<path d="M0 3h23v1H0zM8 10h1v6H8v-6zm3 0h1v6h-1v-6zm3 0h1v6h-1v-6z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-a-ic-draw-free" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path stroke="#434343" d="M2.5 20.929C2.594 10.976 4.323 6 7.686 6c5.872 0 2.524 19 7.697 19s1.89-14.929 6.414-14.929 1.357 10.858 5.13 10.858c1.802 0 2.657-2.262 2.566-6.786"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-a-ic-draw-line" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path stroke="#434343" d="M2 15.5h28"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-a-ic-draw" viewBox="0 0 24 24">
|
||||
<g fill="none">
|
||||
<path stroke="#434343" d="M2.5 21.5H5c.245 0 .48-.058.691-.168l.124-.065.14.01c.429.028.85-.127 1.16-.437L22.55 5.405a.5.5 0 0 0 0-.707l-3.246-3.245a.5.5 0 0 0-.707 0L3.162 16.888a1.495 1.495 0 0 0-.437 1.155l.01.14-.065.123c-.111.212-.17.448-.17.694v2.5z"/>
|
||||
<path fill="#434343" d="M16.414 3.707l3.89 3.89-.708.706-3.889-3.889z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-a-ic-filter" viewBox="0 0 24 24">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h24v24H0z"/>
|
||||
<path fill="#434343" d="M12 7v1H2V7h10zm6 0h4v1h-4V7zM12 16v1h10v-1H12zm-6 0H2v1h4v-1z"/>
|
||||
<path fill="#434343" d="M8.5 20a3.5 3.5 0 1 1 0-7 3.5 3.5 0 0 1 0 7zm0-1a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5zM15.5 11a3.5 3.5 0 1 1 0-7 3.5 3.5 0 0 1 0 7zm0-1a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-a-ic-flip-reset" viewBox="0 0 31 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M31 0H0v32h31z"/>
|
||||
<path fill="#434343" d="M28 16a8 8 0 0 1-8 8H3v-1h1v-7H3a8 8 0 0 1 8-8h17v1h-1v7h1zM11 9a7 7 0 0 0-7 7v7h16a7 7 0 0 0 7-7V9H11z"/>
|
||||
<path stroke="#434343" stroke-linecap="square" d="M24 5l3.5 3.5L24 12M7 20l-3.5 3.5L7 27"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-a-ic-flip-x" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M32 32H0V0h32z"/>
|
||||
<path fill="#434343" d="M17 32h-1V0h1zM27.167 11l.5 3h-1.03l-.546-3h1.076zm-.5-3h-1.122L25 5h-5V4h5.153a1 1 0 0 1 .986.836L26.667 8zm1.5 9l.5 3h-.94l-.545-3h.985zm1 6l.639 3.836A1 1 0 0 1 28.819 28H26v-1h3l-.726-4h.894zM23 28h-3v-1h3v1zM13 4v1H7L3 27h10v1H3.18a1 1 0 0 1-.986-1.164l3.666-22A1 1 0 0 1 6.847 4H13z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-a-ic-flip-y" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0v32h32V0z"/>
|
||||
<path fill="#434343" d="M0 16v1h32v-1zM11 27.167l3 .5v-1.03l-3-.546v1.076zm-3-.5v-1.122L5 25v-5H4v5.153a1 1 0 0 0 .836.986L8 26.667zm9 1.5l3 .5v-.94l-3-.545v.985zm6 1l3.836.639A1 1 0 0 0 28 28.82V26h-1v3l-4-.727v.894zM28 23v-3h-1v3h1zM4 13h1V7l22-4v10h1V3.18a1 1 0 0 0-1.164-.986l-22 3.667A1 1 0 0 0 4 6.847V13z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-a-ic-flip" viewBox="0 0 24 24">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h24v24H0z"/>
|
||||
<path fill="#434343" d="M11 0h1v24h-1zM19 21v-1h2v-2h1v2a1 1 0 0 1-1 1h-2zm-2 0h-3v-1h3v1zm5-5h-1v-3h1v3zm0-5h-1V8h1v3zm0-5h-1V4h-2V3h2a1 1 0 0 1 1 1v2zm-5-3v1h-3V3h3zM9 3v1H2v16h7v1H2a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h7z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-a-ic-icon-arrow-2" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path stroke="#434343" stroke-linecap="round" stroke-linejoin="round" d="M21.793 18.5H2.5v-5h18.935l-7.6-8h5.872l10.5 10.5-10.5 10.5h-5.914l8-8z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-a-ic-icon-arrow-3" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path stroke="#434343" stroke-linecap="round" stroke-linejoin="round" d="M25.288 16.42L14.208 27.5H6.792l11.291-11.291L6.826 4.5h7.381l11.661 11.661-.58.258z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-a-ic-icon-arrow" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path stroke="#434343" d="M2.5 11.5v9h18v5.293L30.293 16 20.5 6.207V11.5h-18z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-a-ic-icon-bubble" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path stroke="#434343" stroke-linecap="round" stroke-linejoin="round" d="M22.207 24.5L16.5 30.207V24.5H8A6.5 6.5 0 0 1 1.5 18V9A6.5 6.5 0 0 1 8 2.5h16A6.5 6.5 0 0 1 30.5 9v9a6.5 6.5 0 0 1-6.5 6.5h-1.793z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-a-ic-icon-heart" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path fill-rule="nonzero" stroke="#434343" d="M15.996 30.675l1.981-1.79c7.898-7.177 10.365-9.718 12.135-13.012.922-1.716 1.377-3.37 1.377-5.076 0-4.65-3.647-8.297-8.297-8.297-2.33 0-4.86 1.527-6.817 3.824l-.38.447-.381-.447C13.658 4.027 11.126 2.5 8.797 2.5 4.147 2.5.5 6.147.5 10.797c0 1.714.46 3.375 1.389 5.098 1.775 3.288 4.26 5.843 12.123 12.974l1.984 1.806z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-a-ic-icon-load" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path stroke="#434343" stroke-linecap="round" stroke-linejoin="round" d="M17.314 18.867l1.951-2.53 4 5.184h-17l6.5-8.84 4.549 6.186z"/>
|
||||
<path fill="#434343" d="M18.01 4a11.798 11.798 0 0 0 0 1H3v24h24V14.986a8.738 8.738 0 0 0 1 0V29a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h15.01z"/>
|
||||
<path fill="#434343" d="M25 3h1v9h-1z"/>
|
||||
<path stroke="#434343" d="M22 6l3.5-3.5L29 6"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-a-ic-icon-location" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<g stroke="#434343">
|
||||
<path d="M16 31.28C23.675 23.302 27.5 17.181 27.5 13c0-6.351-5.149-11.5-11.5-11.5S4.5 6.649 4.5 13c0 4.181 3.825 10.302 11.5 18.28z"/>
|
||||
<circle cx="16" cy="13" r="4.5"/>
|
||||
</g>
|
||||
</g>
|
||||
</symbol><symbol id="icon-a-ic-icon-polygon" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path stroke="#434343" d="M.576 16L8.29 29.5h15.42L31.424 16 23.71 2.5H8.29L.576 16z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-a-ic-icon-star-2" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path stroke="#434343" d="M19.446 31.592l2.265-3.272 3.946.25.636-3.94 3.665-1.505-1.12-3.832 2.655-2.962-2.656-2.962 1.12-3.832-3.664-1.505-.636-3.941-3.946.25-2.265-3.271L16 3.024 12.554 1.07 10.289 4.34l-3.946-.25-.636 3.941-3.665 1.505 1.12 3.832L.508 16.33l2.656 2.962-1.12 3.832 3.664 1.504.636 3.942 3.946-.25 2.265 3.27L16 29.638l3.446 1.955z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-a-ic-icon-star" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path stroke="#434343" d="M25.292 29.878l-1.775-10.346 7.517-7.327-10.388-1.51L16 1.282l-4.646 9.413-10.388 1.51 7.517 7.327-1.775 10.346L16 24.993l9.292 4.885z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-a-ic-icon" viewBox="0 0 24 24">
|
||||
<g fill="none">
|
||||
<path stroke="#434343" stroke-linecap="round" stroke-linejoin="round" d="M11.923 19.136L5.424 22l.715-7.065-4.731-5.296 6.94-1.503L11.923 2l3.574 6.136 6.94 1.503-4.731 5.296L18.42 22z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-a-ic-mask-load" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h32v32H0z"/>
|
||||
<path fill="#434343" d="M18.01 4a11.798 11.798 0 0 0 0 1H3v24h24V14.986a8.738 8.738 0 0 0 1 0V29a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h15.01zM15 23a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm0-1a5 5 0 1 0 0-10 5 5 0 0 0 0 10z"/>
|
||||
<path fill="#434343" d="M25 3h1v9h-1z"/>
|
||||
<path stroke="#434343" d="M22 6l3.5-3.5L29 6"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-a-ic-mask" viewBox="0 0 24 24">
|
||||
<g fill="none">
|
||||
<circle cx="12" cy="12" r="4.5" stroke="#434343"/>
|
||||
<path fill="#434343" d="M2 1h20a1 1 0 0 1 1 1v20a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1zm0 1v20h20V2H2z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-a-ic-redo" viewBox="0 0 24 24">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h24v24H0z" opacity=".5"/>
|
||||
<path fill="#434343" d="M21 6H9a6 6 0 1 0 0 12h12v1H9A7 7 0 0 1 9 5h12v1z"/>
|
||||
<path stroke="#434343" stroke-linecap="square" d="M19 3l2.5 2.5L19 8"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-a-ic-reset" viewBox="0 0 24 24">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h24v24H0z" opacity=".5"/>
|
||||
<path fill="#434343" d="M2 13v-1a7 7 0 0 1 7-7h13v1h-1v5h1v1a7 7 0 0 1-7 7H2v-1h1v-5H2zm7-7a6 6 0 0 0-6 6v6h12a6 6 0 0 0 6-6V6H9z"/>
|
||||
<path stroke="#434343" stroke-linecap="square" d="M19 3l2.5 2.5L19 8M5 16l-2.5 2.5L5 21"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-a-ic-rotate-clockwise" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path fill="#434343" d="M29 17h-.924c0 6.627-5.373 12-12 12-6.628 0-12-5.373-12-12C4.076 10.398 9.407 5.041 16 5V4C8.82 4 3 9.82 3 17s5.82 13 13 13 13-5.82 13-13z"/>
|
||||
<path stroke="#434343" stroke-linecap="square" d="M16 1.5l4 3-4 3"/>
|
||||
<path fill="#434343" fill-rule="nonzero" d="M16 4h4v1h-4z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-a-ic-rotate-counterclockwise" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path fill="#434343" d="M3 17h.924c0 6.627 5.373 12 12 12 6.628 0 12-5.373 12-12 0-6.602-5.331-11.96-11.924-12V4c7.18 0 13 5.82 13 13s-5.82 13-13 13S3 24.18 3 17z"/>
|
||||
<path fill="#434343" fill-rule="nonzero" d="M12 4h4v1h-4z"/>
|
||||
<path stroke="#434343" stroke-linecap="square" d="M16 1.5l-4 3 4 3"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-a-ic-rotate" viewBox="0 0 24 24">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h24v24H0z"/>
|
||||
<path fill="#434343" d="M8.349 22.254a10.002 10.002 0 0 1-2.778-1.719l.65-.76a9.002 9.002 0 0 0 2.495 1.548l-.367.931zm2.873.704l.078-.997a9 9 0 1 0-.557-17.852l-.14-.99A10.076 10.076 0 0 1 12.145 3c5.523 0 10 4.477 10 10s-4.477 10-10 10c-.312 0-.62-.014-.924-.042zm-7.556-4.655a9.942 9.942 0 0 1-1.253-2.996l.973-.234a8.948 8.948 0 0 0 1.124 2.693l-.844.537zm-1.502-5.91A9.949 9.949 0 0 1 2.88 9.23l.925.382a8.954 8.954 0 0 0-.644 2.844l-.998-.062zm2.21-5.686c.687-.848 1.51-1.58 2.436-2.166l.523.852a9.048 9.048 0 0 0-2.188 1.95l-.771-.636z"/>
|
||||
<path stroke="#434343" stroke-linecap="square" d="M13 1l-2.5 2.5L13 6"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-a-ic-shape-circle" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<circle cx="16" cy="16" r="14.5" stroke="#434343"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-a-ic-shape-rectangle" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<rect width="27" height="27" x="2.5" y="2.5" stroke="#434343" rx="1"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-a-ic-shape-triangle" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path stroke="#434343" stroke-linecap="round" stroke-linejoin="round" d="M16 2.5l15.5 27H.5z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-a-ic-shape" viewBox="0 0 24 24">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path fill="#434343" d="M14.706 8H21a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H9a1 1 0 0 1-1-1v-4h1v4h12V9h-5.706l-.588-1z"/>
|
||||
<path stroke="#434343" stroke-linecap="round" stroke-linejoin="round" d="M8.5 1.5l7.5 13H1z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-a-ic-text-align-center" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h32v32H0z"/>
|
||||
<path fill="#434343" d="M2 5h28v1H2zM8 12h16v1H8zM2 19h28v1H2zM8 26h16v1H8z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-a-ic-text-align-left" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h32v32H0z"/>
|
||||
<path fill="#434343" d="M2 5h28v1H2zM2 12h16v1H2zM2 19h28v1H2zM2 26h16v1H2z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-a-ic-text-align-right" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h32v32H0z"/>
|
||||
<path fill="#434343" d="M2 5h28v1H2zM14 12h16v1H14zM2 19h28v1H2zM14 26h16v1H14z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-a-ic-text-bold" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h32v32H0z"/>
|
||||
<path fill="#434343" d="M7 2h2v2H7zM7 28h2v2H7z"/>
|
||||
<path stroke="#434343" stroke-width="2" d="M9 3v12h9a6 6 0 1 0 0-12H9zM9 15v14h10a7 7 0 0 0 0-14H9z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-a-ic-text-italic" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h32v32H0z"/>
|
||||
<path fill="#434343" d="M15 2h5v1h-5zM11 29h5v1h-5zM17 3h1l-4 26h-1z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-a-ic-text-underline" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h32v32H0z"/>
|
||||
<path fill="#434343" d="M8 2v14a8 8 0 1 0 16 0V2h1v14a9 9 0 0 1-18 0V2h1zM3 29h26v1H3z"/>
|
||||
<path fill="#434343" d="M5 2h5v1H5zM22 2h5v1h-5z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-a-ic-text" viewBox="0 0 24 24">
|
||||
<g fill="#434343" fill-rule="evenodd">
|
||||
<path d="M4 3h15a1 1 0 0 1 1 1H3a1 1 0 0 1 1-1zM3 4h1v1H3zM19 4h1v1h-1z"/>
|
||||
<path d="M11 3h1v18h-1z"/>
|
||||
<path d="M10 20h3v1h-3z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-a-ic-undo" viewBox="0 0 24 24">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M24 0H0v24h24z" opacity=".5"/>
|
||||
<path fill="#434343" d="M3 6h12a6 6 0 1 1 0 12H3v1h12a7 7 0 0 0 0-14H3v1z"/>
|
||||
<path stroke="#434343" stroke-linecap="square" d="M5 3L2.5 5.5 5 8"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-a-img-bi" viewBox="0 0 257 26">
|
||||
<g fill="#FDBA3B">
|
||||
<path d="M26 5a8.001 8.001 0 0 0 0 16 8.001 8.001 0 0 0 0-16M51.893 19.812L43.676 5.396A.78.78 0 0 0 43 5a.78.78 0 0 0-.677.396l-8.218 14.418a.787.787 0 0 0 0 .792c.14.244.396.394.676.394h16.436c.28 0 .539-.15.678-.396a.796.796 0 0 0-.002-.792M15.767 5.231A.79.79 0 0 0 15.21 5H.791A.791.791 0 0 0 0 5.79v6.42a.793.793 0 0 0 .791.79h3.21v7.21c.001.21.082.408.234.56.147.148.347.23.558.23h6.416a.788.788 0 0 0 .792-.79V13h3.006c.413 0 .611-.082.762-.232.15-.149.23-.35.231-.559V5.791a.787.787 0 0 0-.233-.56M85.767 5.231A.79.79 0 0 0 85.21 5H70.791a.791.791 0 0 0-.791.79v6.42a.793.793 0 0 0 .791.79h3.21v7.21c.001.21.082.408.234.56.147.148.347.23.558.23h6.416a.788.788 0 0 0 .792-.79V13h3.006c.413 0 .611-.082.762-.232.15-.149.23-.35.231-.559V5.791a.787.787 0 0 0-.233-.56M65.942 9.948l2.17-3.76a.78.78 0 0 0 0-.792.791.791 0 0 0-.684-.396h-8.54A5.889 5.889 0 0 0 53 10.86a5.887 5.887 0 0 0 3.07 5.17l-2.184 3.782A.792.792 0 0 0 54.571 21h8.54a5.89 5.89 0 0 0 2.831-11.052M105.7 21h2.3V5h-2.3zM91 5h2.4v10.286c0 1.893 1.612 3.429 3.6 3.429s3.6-1.536 3.6-3.429V5h2.4v10.286c0 3.156-2.686 5.714-6 5.714-3.313 0-6-2.558-6-5.714V5zM252.148 21.128h-2.377V9.659h2.27v1.64c.69-1.299 1.792-1.938 3.304-1.938.497 0 .95.065 1.382.192l-.215 2.277a3.734 3.734 0 0 0-1.275-.213c-1.814 0-3.089 1.234-3.089 3.638v5.873zm-7.095-5.744a3.734 3.734 0 0 0-1.101-2.703c-.714-.766-1.6-1.149-2.658-1.149-1.058 0-1.944.383-2.679 1.149a3.803 3.803 0 0 0-1.08 2.703c0 1.063.368 1.978 1.08 2.722.735.746 1.62 1.128 2.68 1.128 1.058 0 1.943-.382 2.657-1.128.734-.744 1.101-1.659 1.101-2.722zm-9.916 0c0-1.682.583-3.086 1.729-4.256 1.166-1.17 2.635-1.767 4.428-1.767 1.793 0 3.262.597 4.407 1.767 1.167 1.17 1.75 2.574 1.75 4.256 0 1.7-.583 3.127-1.75 4.297-1.145 1.17-2.614 1.745-4.407 1.745-1.793 0-3.262-.575-4.428-1.745-1.146-1.17-1.729-2.596-1.729-4.297zm-1.5 3.233l.821 1.83c-.864.638-1.944.958-3.22.958-2.526 0-3.822-1.554-3.822-4.383V11.66h-2.01v-2h2.031V5.595h2.355v4.063h4.018v2h-4.018v5.405c0 1.469.605 2.191 1.793 2.191.626 0 1.318-.212 2.052-.638zm-12.43 2.51h2.375V9.66h-2.376v11.469zm1.23-12.977c-.929 0-1.642-.682-1.642-1.596 0-.873.713-1.554 1.643-1.554.885 0 1.576.681 1.576 1.554 0 .914-.69 1.596-1.576 1.596zm-6.49 7.234c0-1.086-.346-1.98-1.037-2.724-.692-.745-1.599-1.128-2.7-1.128-1.102 0-2.01.383-2.7 1.128-.692.744-1.037 1.638-1.037 2.724 0 1.084.345 2.02 1.036 2.766.691.744 1.6 1.105 2.7 1.105 1.102 0 2.01-.361 2.7-1.105.692-.746 1.038-1.682 1.038-2.766zm-.173-4.129V5h2.397v16.128h-2.354v-1.596c-1.015 1.255-2.333 1.873-3.91 1.873-1.663 0-3.068-.575-4.169-1.724-1.102-1.17-1.663-2.596-1.663-4.297 0-1.682.561-3.107 1.663-4.256 1.101-1.17 2.485-1.745 4.148-1.745 1.534 0 2.83.617 3.888 1.872zm-11.48 9.873h-10.218V5.405h10.195v2.318h-7.711V12h7.15v2.32h-7.15v4.489h7.733v2.319zm-23.891-9.724c-1.793 0-3.132 1.192-3.478 2.979h6.783c-.194-1.808-1.555-2.979-3.305-2.979zm5.703 3.766c0 .32-.021.703-.086 1.128h-9.095c.346 1.787 1.62 3 3.867 3 1.318 0 2.916-.49 3.953-1.234l.994 1.724c-1.189.872-3.067 1.595-5.033 1.595-4.364 0-6.243-3-6.243-6.021 0-1.724.54-3.15 1.642-4.277 1.101-1.127 2.548-1.702 4.298-1.702 1.664 0 3.046.511 4.105 1.553 1.058 1.043 1.598 2.447 1.598 4.234zm-19.949 3.894c1.08 0 1.966-.362 2.68-1.085.712-.724 1.058-1.617 1.058-2.703 0-1.084-.346-2-1.059-2.701-.713-.702-1.599-1.064-2.679-1.064-1.058 0-1.944.362-2.656 1.085-.714.702-1.059 1.596-1.059 2.68 0 1.086.345 2 1.059 2.724.712.702 1.598 1.064 2.656 1.064zm3.673-7.936V9.66h2.29v10.299c0 1.85-.584 3.32-1.728 4.404-1.146 1.085-2.68 1.638-4.58 1.638-1.945 0-3.672-.553-5.206-1.638l1.037-1.808c1.296.915 2.679 1.36 4.126 1.36 2.484 0 3.996-1.51 3.996-3.637v-.83c-1.015 1.127-2.311 1.702-3.91 1.702-1.684 0-3.089-.554-4.19-1.68-1.102-1.128-1.642-2.532-1.642-4.214 0-1.68.561-3.085 1.706-4.191 1.145-1.128 2.571-1.681 4.234-1.681 1.534 0 2.83.575 3.867 1.745zm-18.07 8.127c1.102 0 1.988-.382 2.7-1.128.714-.744 1.06-1.659 1.06-2.743 0-1.065-.346-1.98-1.06-2.724-.712-.745-1.598-1.128-2.7-1.128-1.101 0-2.008.383-2.7 1.128-.691.744-1.036 1.66-1.036 2.745 0 1.084.345 2 1.037 2.745.691.744 1.598 1.105 2.7 1.105zm3.652-8V9.66h2.29v11.469h-2.29v-1.575c-1.059 1.234-2.399 1.852-3.976 1.852-1.663 0-3.067-.575-4.168-1.745-1.102-1.17-1.642-2.617-1.642-4.34 0-1.724.54-3.128 1.642-4.256 1.1-1.128 2.505-1.681 4.168-1.681 1.577 0 2.917.617 3.976 1.872zM138.79 9.34c1.404 0 2.527.448 3.37 1.34.863.873 1.295 2.086 1.295 3.596v6.852h-2.376V14.66c0-2.021-1.036-3.128-2.657-3.128-1.727 0-2.915 1.255-2.915 3.192v6.404h-2.377v-6.426c0-1.978-1.037-3.17-2.679-3.17-1.728 0-2.937 1.277-2.937 3.234v6.362h-2.377V9.659h2.333v1.66c.692-1.212 1.988-1.979 3.522-1.979 1.533.021 2.958.767 3.586 2.107.798-1.277 2.419-2.107 4.212-2.107zm-19.517 11.788h2.484V5.405h-2.484v15.723z"/>
|
||||
</g>
|
||||
</symbol></svg>
|
After Width: | Height: | Size: 20 KiB |
224
public/images/icon-b.svg
Normal file
224
public/images/icon-b.svg
Normal file
|
@ -0,0 +1,224 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs/><symbol id="icon-b-ic-apply" viewBox="0 0 24 24">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h24v24H0z"/>
|
||||
<path stroke="#555555" d="M4 12.011l5 5L20.011 6"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-b-ic-cancel" viewBox="0 0 24 24">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h24v24H0z"/>
|
||||
<path stroke="#555555" d="M6 6l12 12M18 6L6 18"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-b-ic-crop" viewBox="0 0 24 24">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h24v24H0z"/>
|
||||
<path fill="#555555" d="M4 0h1v20a1 1 0 0 1-1-1V0zM20 17h-1V5h1v12zm0 2v5h-1v-5h1z"/>
|
||||
<path fill="#555555" d="M5 19h19v1H5zM4.762 4v1H0V4h4.762zM7 4h12a1 1 0 0 1 1 1H7V4z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-b-ic-delete-all" viewBox="0 0 24 24">
|
||||
<g fill="#555555" fill-rule="evenodd">
|
||||
<path d="M5 23H3a1 1 0 0 1-1-1V6h1v16h2v1zm16-10h-1V6h1v7zM9 13H8v-3h1v3zm3 0h-1v-3h1v3zm3 0h-1v-3h1v3zM14.794 3.794L13 2h-3L8.206 3.794A.963.963 0 0 1 8 2.5l.703-1.055A1 1 0 0 1 9.535 1h3.93a1 1 0 0 1 .832.445L15 2.5a.965.965 0 0 1-.206 1.294zM14.197 4H8.803h5.394z"/>
|
||||
<path d="M0 3h23v1H0zM11.286 21H8.714L8 23H7l1-2.8V20h.071L9.5 16h1l1.429 4H12v.2l1 2.8h-1l-.714-2zm-.357-1L10 17.4 9.071 20h1.858zM20 22h3v1h-4v-7h1v6zm-5 0h3v1h-4v-7h1v6z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-b-ic-delete" viewBox="0 0 24 24">
|
||||
<g fill="#555555" fill-rule="evenodd">
|
||||
<path d="M3 6v16h17V6h1v16a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V6h1zM14.794 3.794L13 2h-3L8.206 3.794A.963.963 0 0 1 8 2.5l.703-1.055A1 1 0 0 1 9.535 1h3.93a1 1 0 0 1 .832.445L15 2.5a.965.965 0 0 1-.206 1.294zM14.197 4H8.803h5.394z"/>
|
||||
<path d="M0 3h23v1H0zM8 10h1v6H8v-6zm3 0h1v6h-1v-6zm3 0h1v6h-1v-6z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-b-ic-draw-free" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path stroke="#555555" d="M2.5 20.929C2.594 10.976 4.323 6 7.686 6c5.872 0 2.524 19 7.697 19s1.89-14.929 6.414-14.929 1.357 10.858 5.13 10.858c1.802 0 2.657-2.262 2.566-6.786"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-b-ic-draw-line" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path stroke="#555555" d="M2 15.5h28"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-b-ic-draw" viewBox="0 0 24 24">
|
||||
<g fill="none">
|
||||
<path stroke="#555555" d="M2.5 21.5H5c.245 0 .48-.058.691-.168l.124-.065.14.01c.429.028.85-.127 1.16-.437L22.55 5.405a.5.5 0 0 0 0-.707l-3.246-3.245a.5.5 0 0 0-.707 0L3.162 16.888a1.495 1.495 0 0 0-.437 1.155l.01.14-.065.123c-.111.212-.17.448-.17.694v2.5z"/>
|
||||
<path fill="#555555" d="M16.414 3.707l3.89 3.89-.708.706-3.889-3.889z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-b-ic-filter" viewBox="0 0 24 24">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h24v24H0z"/>
|
||||
<path fill="#555555" d="M12 7v1H2V7h10zm6 0h4v1h-4V7zM12 16v1h10v-1H12zm-6 0H2v1h4v-1z"/>
|
||||
<path fill="#555555" d="M8.5 20a3.5 3.5 0 1 1 0-7 3.5 3.5 0 0 1 0 7zm0-1a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5zM15.5 11a3.5 3.5 0 1 1 0-7 3.5 3.5 0 0 1 0 7zm0-1a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-b-ic-flip-reset" viewBox="0 0 31 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M31 0H0v32h31z"/>
|
||||
<path fill="#555555" d="M28 16a8 8 0 0 1-8 8H3v-1h1v-7H3a8 8 0 0 1 8-8h17v1h-1v7h1zM11 9a7 7 0 0 0-7 7v7h16a7 7 0 0 0 7-7V9H11z"/>
|
||||
<path stroke="#555555" stroke-linecap="square" d="M24 5l3.5 3.5L24 12M7 20l-3.5 3.5L7 27"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-b-ic-flip-x" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M32 32H0V0h32z"/>
|
||||
<path fill="#555555" d="M17 32h-1V0h1zM27.167 11l.5 3h-1.03l-.546-3h1.076zm-.5-3h-1.122L25 5h-5V4h5.153a1 1 0 0 1 .986.836L26.667 8zm1.5 9l.5 3h-.94l-.545-3h.985zm1 6l.639 3.836A1 1 0 0 1 28.819 28H26v-1h3l-.726-4h.894zM23 28h-3v-1h3v1zM13 4v1H7L3 27h10v1H3.18a1 1 0 0 1-.986-1.164l3.666-22A1 1 0 0 1 6.847 4H13z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-b-ic-flip-y" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0v32h32V0z"/>
|
||||
<path fill="#555555" d="M0 16v1h32v-1zM11 27.167l3 .5v-1.03l-3-.546v1.076zm-3-.5v-1.122L5 25v-5H4v5.153a1 1 0 0 0 .836.986L8 26.667zm9 1.5l3 .5v-.94l-3-.545v.985zm6 1l3.836.639A1 1 0 0 0 28 28.82V26h-1v3l-4-.727v.894zM28 23v-3h-1v3h1zM4 13h1V7l22-4v10h1V3.18a1 1 0 0 0-1.164-.986l-22 3.667A1 1 0 0 0 4 6.847V13z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-b-ic-flip" viewBox="0 0 24 24">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h24v24H0z"/>
|
||||
<path fill="#555555" d="M11 0h1v24h-1zM19 21v-1h2v-2h1v2a1 1 0 0 1-1 1h-2zm-2 0h-3v-1h3v1zm5-5h-1v-3h1v3zm0-5h-1V8h1v3zm0-5h-1V4h-2V3h2a1 1 0 0 1 1 1v2zm-5-3v1h-3V3h3zM9 3v1H2v16h7v1H2a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h7z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-b-ic-icon-arrow-2" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path stroke="#555555" stroke-linecap="round" stroke-linejoin="round" d="M21.793 18.5H2.5v-5h18.935l-7.6-8h5.872l10.5 10.5-10.5 10.5h-5.914l8-8z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-b-ic-icon-arrow-3" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path stroke="#555555" stroke-linecap="round" stroke-linejoin="round" d="M25.288 16.42L14.208 27.5H6.792l11.291-11.291L6.826 4.5h7.381l11.661 11.661-.58.258z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-b-ic-icon-arrow" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path stroke="#555555" d="M2.5 11.5v9h18v5.293L30.293 16 20.5 6.207V11.5h-18z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-b-ic-icon-bubble" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path stroke="#555555" stroke-linecap="round" stroke-linejoin="round" d="M22.207 24.5L16.5 30.207V24.5H8A6.5 6.5 0 0 1 1.5 18V9A6.5 6.5 0 0 1 8 2.5h16A6.5 6.5 0 0 1 30.5 9v9a6.5 6.5 0 0 1-6.5 6.5h-1.793z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-b-ic-icon-heart" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path fill-rule="nonzero" stroke="#555555" d="M15.996 30.675l1.981-1.79c7.898-7.177 10.365-9.718 12.135-13.012.922-1.716 1.377-3.37 1.377-5.076 0-4.65-3.647-8.297-8.297-8.297-2.33 0-4.86 1.527-6.817 3.824l-.38.447-.381-.447C13.658 4.027 11.126 2.5 8.797 2.5 4.147 2.5.5 6.147.5 10.797c0 1.714.46 3.375 1.389 5.098 1.775 3.288 4.26 5.843 12.123 12.974l1.984 1.806z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-b-ic-icon-load" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path stroke="#555555" stroke-linecap="round" stroke-linejoin="round" d="M17.314 18.867l1.951-2.53 4 5.184h-17l6.5-8.84 4.549 6.186z"/>
|
||||
<path fill="#555555" d="M18.01 4a11.798 11.798 0 0 0 0 1H3v24h24V14.986a8.738 8.738 0 0 0 1 0V29a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h15.01z"/>
|
||||
<path fill="#555555" d="M25 3h1v9h-1z"/>
|
||||
<path stroke="#555555" d="M22 6l3.5-3.5L29 6"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-b-ic-icon-location" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<g stroke="#555555">
|
||||
<path d="M16 31.28C23.675 23.302 27.5 17.181 27.5 13c0-6.351-5.149-11.5-11.5-11.5S4.5 6.649 4.5 13c0 4.181 3.825 10.302 11.5 18.28z"/>
|
||||
<circle cx="16" cy="13" r="4.5"/>
|
||||
</g>
|
||||
</g>
|
||||
</symbol><symbol id="icon-b-ic-icon-polygon" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path stroke="#555555" d="M.576 16L8.29 29.5h15.42L31.424 16 23.71 2.5H8.29L.576 16z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-b-ic-icon-star-2" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path stroke="#555555" d="M19.446 31.592l2.265-3.272 3.946.25.636-3.94 3.665-1.505-1.12-3.832 2.655-2.962-2.656-2.962 1.12-3.832-3.664-1.505-.636-3.941-3.946.25-2.265-3.271L16 3.024 12.554 1.07 10.289 4.34l-3.946-.25-.636 3.941-3.665 1.505 1.12 3.832L.508 16.33l2.656 2.962-1.12 3.832 3.664 1.504.636 3.942 3.946-.25 2.265 3.27L16 29.638l3.446 1.955z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-b-ic-icon-star" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path stroke="#555555" d="M25.292 29.878l-1.775-10.346 7.517-7.327-10.388-1.51L16 1.282l-4.646 9.413-10.388 1.51 7.517 7.327-1.775 10.346L16 24.993l9.292 4.885z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-b-ic-icon" viewBox="0 0 24 24">
|
||||
<g fill="none">
|
||||
<path stroke="#555555" stroke-linecap="round" stroke-linejoin="round" d="M11.923 19.136L5.424 22l.715-7.065-4.731-5.296 6.94-1.503L11.923 2l3.574 6.136 6.94 1.503-4.731 5.296L18.42 22z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-b-ic-mask-load" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h32v32H0z"/>
|
||||
<path fill="#555555" d="M18.01 4a11.798 11.798 0 0 0 0 1H3v24h24V14.986a8.738 8.738 0 0 0 1 0V29a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h15.01zM15 23a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm0-1a5 5 0 1 0 0-10 5 5 0 0 0 0 10z"/>
|
||||
<path fill="#555555" d="M25 3h1v9h-1z"/>
|
||||
<path stroke="#555555" d="M22 6l3.5-3.5L29 6"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-b-ic-mask" viewBox="0 0 24 24">
|
||||
<g fill="none">
|
||||
<circle cx="12" cy="12" r="4.5" stroke="#555555"/>
|
||||
<path fill="#555555" d="M2 1h20a1 1 0 0 1 1 1v20a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1zm0 1v20h20V2H2z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-b-ic-redo" viewBox="0 0 24 24">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h24v24H0z" opacity=".5"/>
|
||||
<path fill="#555555" d="M21 6H9a6 6 0 1 0 0 12h12v1H9A7 7 0 0 1 9 5h12v1z"/>
|
||||
<path stroke="#555555" stroke-linecap="square" d="M19 3l2.5 2.5L19 8"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-b-ic-reset" viewBox="0 0 24 24">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h24v24H0z" opacity=".5"/>
|
||||
<path fill="#555555" d="M2 13v-1a7 7 0 0 1 7-7h13v1h-1v5h1v1a7 7 0 0 1-7 7H2v-1h1v-5H2zm7-7a6 6 0 0 0-6 6v6h12a6 6 0 0 0 6-6V6H9z"/>
|
||||
<path stroke="#555555" stroke-linecap="square" d="M19 3l2.5 2.5L19 8M5 16l-2.5 2.5L5 21"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-b-ic-rotate-clockwise" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path fill="#555555" d="M29 17h-.924c0 6.627-5.373 12-12 12-6.628 0-12-5.373-12-12C4.076 10.398 9.407 5.041 16 5V4C8.82 4 3 9.82 3 17s5.82 13 13 13 13-5.82 13-13z"/>
|
||||
<path stroke="#555555" stroke-linecap="square" d="M16 1.5l4 3-4 3"/>
|
||||
<path fill="#555555" fill-rule="nonzero" d="M16 4h4v1h-4z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-b-ic-rotate-counterclockwise" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path fill="#555555" d="M3 17h.924c0 6.627 5.373 12 12 12 6.628 0 12-5.373 12-12 0-6.602-5.331-11.96-11.924-12V4c7.18 0 13 5.82 13 13s-5.82 13-13 13S3 24.18 3 17z"/>
|
||||
<path fill="#555555" fill-rule="nonzero" d="M12 4h4v1h-4z"/>
|
||||
<path stroke="#555555" stroke-linecap="square" d="M16 1.5l-4 3 4 3"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-b-ic-rotate" viewBox="0 0 24 24">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h24v24H0z"/>
|
||||
<path fill="#555555" d="M8.349 22.254a10.002 10.002 0 0 1-2.778-1.719l.65-.76a9.002 9.002 0 0 0 2.495 1.548l-.367.931zm2.873.704l.078-.997a9 9 0 1 0-.557-17.852l-.14-.99A10.076 10.076 0 0 1 12.145 3c5.523 0 10 4.477 10 10s-4.477 10-10 10c-.312 0-.62-.014-.924-.042zm-7.556-4.655a9.942 9.942 0 0 1-1.253-2.996l.973-.234a8.948 8.948 0 0 0 1.124 2.693l-.844.537zm-1.502-5.91A9.949 9.949 0 0 1 2.88 9.23l.925.382a8.954 8.954 0 0 0-.644 2.844l-.998-.062zm2.21-5.686c.687-.848 1.51-1.58 2.436-2.166l.523.852a9.048 9.048 0 0 0-2.188 1.95l-.771-.636z"/>
|
||||
<path stroke="#555555" stroke-linecap="square" d="M13 1l-2.5 2.5L13 6"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-b-ic-shape-circle" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<circle cx="16" cy="16" r="14.5" stroke="#555555"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-b-ic-shape-rectangle" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<rect width="27" height="27" x="2.5" y="2.5" stroke="#555555" rx="1"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-b-ic-shape-triangle" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path stroke="#555555" stroke-linecap="round" stroke-linejoin="round" d="M16 2.5l15.5 27H.5z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-b-ic-shape" viewBox="0 0 24 24">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path fill="#555555" d="M14.706 8H21a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H9a1 1 0 0 1-1-1v-4h1v4h12V9h-5.706l-.588-1z"/>
|
||||
<path stroke="#555555" stroke-linecap="round" stroke-linejoin="round" d="M8.5 1.5l7.5 13H1z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-b-ic-text-align-center" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h32v32H0z"/>
|
||||
<path fill="#555555" d="M2 5h28v1H2zM8 12h16v1H8zM2 19h28v1H2zM8 26h16v1H8z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-b-ic-text-align-left" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h32v32H0z"/>
|
||||
<path fill="#555555" d="M2 5h28v1H2zM2 12h16v1H2zM2 19h28v1H2zM2 26h16v1H2z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-b-ic-text-align-right" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h32v32H0z"/>
|
||||
<path fill="#555555" d="M2 5h28v1H2zM14 12h16v1H14zM2 19h28v1H2zM14 26h16v1H14z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-b-ic-text-bold" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h32v32H0z"/>
|
||||
<path fill="#555555" d="M7 2h2v2H7zM7 28h2v2H7z"/>
|
||||
<path stroke="#555555" stroke-width="2" d="M9 3v12h9a6 6 0 1 0 0-12H9zM9 15v14h10a7 7 0 0 0 0-14H9z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-b-ic-text-italic" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h32v32H0z"/>
|
||||
<path fill="#555555" d="M15 2h5v1h-5zM11 29h5v1h-5zM17 3h1l-4 26h-1z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-b-ic-text-underline" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h32v32H0z"/>
|
||||
<path fill="#555555" d="M8 2v14a8 8 0 1 0 16 0V2h1v14a9 9 0 0 1-18 0V2h1zM3 29h26v1H3z"/>
|
||||
<path fill="#555555" d="M5 2h5v1H5zM22 2h5v1h-5z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-b-ic-text" viewBox="0 0 24 24">
|
||||
<g fill="#555555" fill-rule="evenodd">
|
||||
<path d="M4 3h15a1 1 0 0 1 1 1H3a1 1 0 0 1 1-1zM3 4h1v1H3zM19 4h1v1h-1z"/>
|
||||
<path d="M11 3h1v18h-1z"/>
|
||||
<path d="M10 20h3v1h-3z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-b-ic-undo" viewBox="0 0 24 24">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M24 0H0v24h24z" opacity=".5"/>
|
||||
<path fill="#555555" d="M3 6h12a6 6 0 1 1 0 12H3v1h12a7 7 0 0 0 0-14H3v1z"/>
|
||||
<path stroke="#555555" stroke-linecap="square" d="M5 3L2.5 5.5 5 8"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-b-img-bi" viewBox="0 0 257 26">
|
||||
<g fill="#FDBA3B">
|
||||
<path d="M26 5a8.001 8.001 0 0 0 0 16 8.001 8.001 0 0 0 0-16M51.893 19.812L43.676 5.396A.78.78 0 0 0 43 5a.78.78 0 0 0-.677.396l-8.218 14.418a.787.787 0 0 0 0 .792c.14.244.396.394.676.394h16.436c.28 0 .539-.15.678-.396a.796.796 0 0 0-.002-.792M15.767 5.231A.79.79 0 0 0 15.21 5H.791A.791.791 0 0 0 0 5.79v6.42a.793.793 0 0 0 .791.79h3.21v7.21c.001.21.082.408.234.56.147.148.347.23.558.23h6.416a.788.788 0 0 0 .792-.79V13h3.006c.413 0 .611-.082.762-.232.15-.149.23-.35.231-.559V5.791a.787.787 0 0 0-.233-.56M85.767 5.231A.79.79 0 0 0 85.21 5H70.791a.791.791 0 0 0-.791.79v6.42a.793.793 0 0 0 .791.79h3.21v7.21c.001.21.082.408.234.56.147.148.347.23.558.23h6.416a.788.788 0 0 0 .792-.79V13h3.006c.413 0 .611-.082.762-.232.15-.149.23-.35.231-.559V5.791a.787.787 0 0 0-.233-.56M65.942 9.948l2.17-3.76a.78.78 0 0 0 0-.792.791.791 0 0 0-.684-.396h-8.54A5.889 5.889 0 0 0 53 10.86a5.887 5.887 0 0 0 3.07 5.17l-2.184 3.782A.792.792 0 0 0 54.571 21h8.54a5.89 5.89 0 0 0 2.831-11.052M105.7 21h2.3V5h-2.3zM91 5h2.4v10.286c0 1.893 1.612 3.429 3.6 3.429s3.6-1.536 3.6-3.429V5h2.4v10.286c0 3.156-2.686 5.714-6 5.714-3.313 0-6-2.558-6-5.714V5zM252.148 21.128h-2.377V9.659h2.27v1.64c.69-1.299 1.792-1.938 3.304-1.938.497 0 .95.065 1.382.192l-.215 2.277a3.734 3.734 0 0 0-1.275-.213c-1.814 0-3.089 1.234-3.089 3.638v5.873zm-7.095-5.744a3.734 3.734 0 0 0-1.101-2.703c-.714-.766-1.6-1.149-2.658-1.149-1.058 0-1.944.383-2.679 1.149a3.803 3.803 0 0 0-1.08 2.703c0 1.063.368 1.978 1.08 2.722.735.746 1.62 1.128 2.68 1.128 1.058 0 1.943-.382 2.657-1.128.734-.744 1.101-1.659 1.101-2.722zm-9.916 0c0-1.682.583-3.086 1.729-4.256 1.166-1.17 2.635-1.767 4.428-1.767 1.793 0 3.262.597 4.407 1.767 1.167 1.17 1.75 2.574 1.75 4.256 0 1.7-.583 3.127-1.75 4.297-1.145 1.17-2.614 1.745-4.407 1.745-1.793 0-3.262-.575-4.428-1.745-1.146-1.17-1.729-2.596-1.729-4.297zm-1.5 3.233l.821 1.83c-.864.638-1.944.958-3.22.958-2.526 0-3.822-1.554-3.822-4.383V11.66h-2.01v-2h2.031V5.595h2.355v4.063h4.018v2h-4.018v5.405c0 1.469.605 2.191 1.793 2.191.626 0 1.318-.212 2.052-.638zm-12.43 2.51h2.375V9.66h-2.376v11.469zm1.23-12.977c-.929 0-1.642-.682-1.642-1.596 0-.873.713-1.554 1.643-1.554.885 0 1.576.681 1.576 1.554 0 .914-.69 1.596-1.576 1.596zm-6.49 7.234c0-1.086-.346-1.98-1.037-2.724-.692-.745-1.599-1.128-2.7-1.128-1.102 0-2.01.383-2.7 1.128-.692.744-1.037 1.638-1.037 2.724 0 1.084.345 2.02 1.036 2.766.691.744 1.6 1.105 2.7 1.105 1.102 0 2.01-.361 2.7-1.105.692-.746 1.038-1.682 1.038-2.766zm-.173-4.129V5h2.397v16.128h-2.354v-1.596c-1.015 1.255-2.333 1.873-3.91 1.873-1.663 0-3.068-.575-4.169-1.724-1.102-1.17-1.663-2.596-1.663-4.297 0-1.682.561-3.107 1.663-4.256 1.101-1.17 2.485-1.745 4.148-1.745 1.534 0 2.83.617 3.888 1.872zm-11.48 9.873h-10.218V5.405h10.195v2.318h-7.711V12h7.15v2.32h-7.15v4.489h7.733v2.319zm-23.891-9.724c-1.793 0-3.132 1.192-3.478 2.979h6.783c-.194-1.808-1.555-2.979-3.305-2.979zm5.703 3.766c0 .32-.021.703-.086 1.128h-9.095c.346 1.787 1.62 3 3.867 3 1.318 0 2.916-.49 3.953-1.234l.994 1.724c-1.189.872-3.067 1.595-5.033 1.595-4.364 0-6.243-3-6.243-6.021 0-1.724.54-3.15 1.642-4.277 1.101-1.127 2.548-1.702 4.298-1.702 1.664 0 3.046.511 4.105 1.553 1.058 1.043 1.598 2.447 1.598 4.234zm-19.949 3.894c1.08 0 1.966-.362 2.68-1.085.712-.724 1.058-1.617 1.058-2.703 0-1.084-.346-2-1.059-2.701-.713-.702-1.599-1.064-2.679-1.064-1.058 0-1.944.362-2.656 1.085-.714.702-1.059 1.596-1.059 2.68 0 1.086.345 2 1.059 2.724.712.702 1.598 1.064 2.656 1.064zm3.673-7.936V9.66h2.29v10.299c0 1.85-.584 3.32-1.728 4.404-1.146 1.085-2.68 1.638-4.58 1.638-1.945 0-3.672-.553-5.206-1.638l1.037-1.808c1.296.915 2.679 1.36 4.126 1.36 2.484 0 3.996-1.51 3.996-3.637v-.83c-1.015 1.127-2.311 1.702-3.91 1.702-1.684 0-3.089-.554-4.19-1.68-1.102-1.128-1.642-2.532-1.642-4.214 0-1.68.561-3.085 1.706-4.191 1.145-1.128 2.571-1.681 4.234-1.681 1.534 0 2.83.575 3.867 1.745zm-18.07 8.127c1.102 0 1.988-.382 2.7-1.128.714-.744 1.06-1.659 1.06-2.743 0-1.065-.346-1.98-1.06-2.724-.712-.745-1.598-1.128-2.7-1.128-1.101 0-2.008.383-2.7 1.128-.691.744-1.036 1.66-1.036 2.745 0 1.084.345 2 1.037 2.745.691.744 1.598 1.105 2.7 1.105zm3.652-8V9.66h2.29v11.469h-2.29v-1.575c-1.059 1.234-2.399 1.852-3.976 1.852-1.663 0-3.067-.575-4.168-1.745-1.102-1.17-1.642-2.617-1.642-4.34 0-1.724.54-3.128 1.642-4.256 1.1-1.128 2.505-1.681 4.168-1.681 1.577 0 2.917.617 3.976 1.872zM138.79 9.34c1.404 0 2.527.448 3.37 1.34.863.873 1.295 2.086 1.295 3.596v6.852h-2.376V14.66c0-2.021-1.036-3.128-2.657-3.128-1.727 0-2.915 1.255-2.915 3.192v6.404h-2.377v-6.426c0-1.978-1.037-3.17-2.679-3.17-1.728 0-2.937 1.277-2.937 3.234v6.362h-2.377V9.659h2.333v1.66c.692-1.212 1.988-1.979 3.522-1.979 1.533.021 2.958.767 3.586 2.107.798-1.277 2.419-2.107 4.212-2.107zm-19.517 11.788h2.484V5.405h-2.484v15.723z"/>
|
||||
</g>
|
||||
</symbol></svg>
|
After Width: | Height: | Size: 19 KiB |
224
public/images/icon-c.svg
Normal file
224
public/images/icon-c.svg
Normal file
|
@ -0,0 +1,224 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs/><symbol id="icon-c-ic-apply" viewBox="0 0 24 24">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h24v24H0z"/>
|
||||
<path stroke="#e9e9e9" d="M4 12.011l5 5L20.011 6"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-c-ic-cancel" viewBox="0 0 24 24">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h24v24H0z"/>
|
||||
<path stroke="#e9e9e9" d="M6 6l12 12M18 6L6 18"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-c-ic-crop" viewBox="0 0 24 24">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h24v24H0z"/>
|
||||
<path fill="#e9e9e9" d="M4 0h1v20a1 1 0 0 1-1-1V0zM20 17h-1V5h1v12zm0 2v5h-1v-5h1z"/>
|
||||
<path fill="#e9e9e9" d="M5 19h19v1H5zM4.762 4v1H0V4h4.762zM7 4h12a1 1 0 0 1 1 1H7V4z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-c-ic-delete-all" viewBox="0 0 24 24">
|
||||
<g fill="#e9e9e9" fill-rule="evenodd">
|
||||
<path d="M5 23H3a1 1 0 0 1-1-1V6h1v16h2v1zm16-10h-1V6h1v7zM9 13H8v-3h1v3zm3 0h-1v-3h1v3zm3 0h-1v-3h1v3zM14.794 3.794L13 2h-3L8.206 3.794A.963.963 0 0 1 8 2.5l.703-1.055A1 1 0 0 1 9.535 1h3.93a1 1 0 0 1 .832.445L15 2.5a.965.965 0 0 1-.206 1.294zM14.197 4H8.803h5.394z"/>
|
||||
<path d="M0 3h23v1H0zM11.286 21H8.714L8 23H7l1-2.8V20h.071L9.5 16h1l1.429 4H12v.2l1 2.8h-1l-.714-2zm-.357-1L10 17.4 9.071 20h1.858zM20 22h3v1h-4v-7h1v6zm-5 0h3v1h-4v-7h1v6z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-c-ic-delete" viewBox="0 0 24 24">
|
||||
<g fill="#e9e9e9" fill-rule="evenodd">
|
||||
<path d="M3 6v16h17V6h1v16a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V6h1zM14.794 3.794L13 2h-3L8.206 3.794A.963.963 0 0 1 8 2.5l.703-1.055A1 1 0 0 1 9.535 1h3.93a1 1 0 0 1 .832.445L15 2.5a.965.965 0 0 1-.206 1.294zM14.197 4H8.803h5.394z"/>
|
||||
<path d="M0 3h23v1H0zM8 10h1v6H8v-6zm3 0h1v6h-1v-6zm3 0h1v6h-1v-6z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-c-ic-draw-free" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path stroke="#e9e9e9" d="M2.5 20.929C2.594 10.976 4.323 6 7.686 6c5.872 0 2.524 19 7.697 19s1.89-14.929 6.414-14.929 1.357 10.858 5.13 10.858c1.802 0 2.657-2.262 2.566-6.786"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-c-ic-draw-line" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path stroke="#e9e9e9" d="M2 15.5h28"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-c-ic-draw" viewBox="0 0 24 24">
|
||||
<g fill="none">
|
||||
<path stroke="#e9e9e9" d="M2.5 21.5H5c.245 0 .48-.058.691-.168l.124-.065.14.01c.429.028.85-.127 1.16-.437L22.55 5.405a.5.5 0 0 0 0-.707l-3.246-3.245a.5.5 0 0 0-.707 0L3.162 16.888a1.495 1.495 0 0 0-.437 1.155l.01.14-.065.123c-.111.212-.17.448-.17.694v2.5z"/>
|
||||
<path fill="#e9e9e9" d="M16.414 3.707l3.89 3.89-.708.706-3.889-3.889z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-c-ic-filter" viewBox="0 0 24 24">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h24v24H0z"/>
|
||||
<path fill="#e9e9e9" d="M12 7v1H2V7h10zm6 0h4v1h-4V7zM12 16v1h10v-1H12zm-6 0H2v1h4v-1z"/>
|
||||
<path fill="#e9e9e9" d="M8.5 20a3.5 3.5 0 1 1 0-7 3.5 3.5 0 0 1 0 7zm0-1a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5zM15.5 11a3.5 3.5 0 1 1 0-7 3.5 3.5 0 0 1 0 7zm0-1a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-c-ic-flip-reset" viewBox="0 0 31 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M31 0H0v32h31z"/>
|
||||
<path fill="#e9e9e9" d="M28 16a8 8 0 0 1-8 8H3v-1h1v-7H3a8 8 0 0 1 8-8h17v1h-1v7h1zM11 9a7 7 0 0 0-7 7v7h16a7 7 0 0 0 7-7V9H11z"/>
|
||||
<path stroke="#e9e9e9" stroke-linecap="square" d="M24 5l3.5 3.5L24 12M7 20l-3.5 3.5L7 27"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-c-ic-flip-x" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M32 32H0V0h32z"/>
|
||||
<path fill="#e9e9e9" d="M17 32h-1V0h1zM27.167 11l.5 3h-1.03l-.546-3h1.076zm-.5-3h-1.122L25 5h-5V4h5.153a1 1 0 0 1 .986.836L26.667 8zm1.5 9l.5 3h-.94l-.545-3h.985zm1 6l.639 3.836A1 1 0 0 1 28.819 28H26v-1h3l-.726-4h.894zM23 28h-3v-1h3v1zM13 4v1H7L3 27h10v1H3.18a1 1 0 0 1-.986-1.164l3.666-22A1 1 0 0 1 6.847 4H13z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-c-ic-flip-y" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0v32h32V0z"/>
|
||||
<path fill="#e9e9e9" d="M0 16v1h32v-1zM11 27.167l3 .5v-1.03l-3-.546v1.076zm-3-.5v-1.122L5 25v-5H4v5.153a1 1 0 0 0 .836.986L8 26.667zm9 1.5l3 .5v-.94l-3-.545v.985zm6 1l3.836.639A1 1 0 0 0 28 28.82V26h-1v3l-4-.727v.894zM28 23v-3h-1v3h1zM4 13h1V7l22-4v10h1V3.18a1 1 0 0 0-1.164-.986l-22 3.667A1 1 0 0 0 4 6.847V13z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-c-ic-flip" viewBox="0 0 24 24">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h24v24H0z"/>
|
||||
<path fill="#e9e9e9" d="M11 0h1v24h-1zM19 21v-1h2v-2h1v2a1 1 0 0 1-1 1h-2zm-2 0h-3v-1h3v1zm5-5h-1v-3h1v3zm0-5h-1V8h1v3zm0-5h-1V4h-2V3h2a1 1 0 0 1 1 1v2zm-5-3v1h-3V3h3zM9 3v1H2v16h7v1H2a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h7z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-c-ic-icon-arrow-2" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path stroke="#e9e9e9" stroke-linecap="round" stroke-linejoin="round" d="M21.793 18.5H2.5v-5h18.935l-7.6-8h5.872l10.5 10.5-10.5 10.5h-5.914l8-8z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-c-ic-icon-arrow-3" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path stroke="#e9e9e9" stroke-linecap="round" stroke-linejoin="round" d="M25.288 16.42L14.208 27.5H6.792l11.291-11.291L6.826 4.5h7.381l11.661 11.661-.58.258z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-c-ic-icon-arrow" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path stroke="#e9e9e9" d="M2.5 11.5v9h18v5.293L30.293 16 20.5 6.207V11.5h-18z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-c-ic-icon-bubble" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path stroke="#e9e9e9" stroke-linecap="round" stroke-linejoin="round" d="M22.207 24.5L16.5 30.207V24.5H8A6.5 6.5 0 0 1 1.5 18V9A6.5 6.5 0 0 1 8 2.5h16A6.5 6.5 0 0 1 30.5 9v9a6.5 6.5 0 0 1-6.5 6.5h-1.793z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-c-ic-icon-heart" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path fill-rule="nonzero" stroke="#e9e9e9" d="M15.996 30.675l1.981-1.79c7.898-7.177 10.365-9.718 12.135-13.012.922-1.716 1.377-3.37 1.377-5.076 0-4.65-3.647-8.297-8.297-8.297-2.33 0-4.86 1.527-6.817 3.824l-.38.447-.381-.447C13.658 4.027 11.126 2.5 8.797 2.5 4.147 2.5.5 6.147.5 10.797c0 1.714.46 3.375 1.389 5.098 1.775 3.288 4.26 5.843 12.123 12.974l1.984 1.806z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-c-ic-icon-load" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path stroke="#e9e9e9" stroke-linecap="round" stroke-linejoin="round" d="M17.314 18.867l1.951-2.53 4 5.184h-17l6.5-8.84 4.549 6.186z"/>
|
||||
<path fill="#e9e9e9" d="M18.01 4a11.798 11.798 0 0 0 0 1H3v24h24V14.986a8.738 8.738 0 0 0 1 0V29a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h15.01z"/>
|
||||
<path fill="#e9e9e9" d="M25 3h1v9h-1z"/>
|
||||
<path stroke="#e9e9e9" d="M22 6l3.5-3.5L29 6"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-c-ic-icon-location" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<g stroke="#e9e9e9">
|
||||
<path d="M16 31.28C23.675 23.302 27.5 17.181 27.5 13c0-6.351-5.149-11.5-11.5-11.5S4.5 6.649 4.5 13c0 4.181 3.825 10.302 11.5 18.28z"/>
|
||||
<circle cx="16" cy="13" r="4.5"/>
|
||||
</g>
|
||||
</g>
|
||||
</symbol><symbol id="icon-c-ic-icon-polygon" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path stroke="#e9e9e9" d="M.576 16L8.29 29.5h15.42L31.424 16 23.71 2.5H8.29L.576 16z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-c-ic-icon-star-2" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path stroke="#e9e9e9" d="M19.446 31.592l2.265-3.272 3.946.25.636-3.94 3.665-1.505-1.12-3.832 2.655-2.962-2.656-2.962 1.12-3.832-3.664-1.505-.636-3.941-3.946.25-2.265-3.271L16 3.024 12.554 1.07 10.289 4.34l-3.946-.25-.636 3.941-3.665 1.505 1.12 3.832L.508 16.33l2.656 2.962-1.12 3.832 3.664 1.504.636 3.942 3.946-.25 2.265 3.27L16 29.638l3.446 1.955z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-c-ic-icon-star" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path stroke="#e9e9e9" d="M25.292 29.878l-1.775-10.346 7.517-7.327-10.388-1.51L16 1.282l-4.646 9.413-10.388 1.51 7.517 7.327-1.775 10.346L16 24.993l9.292 4.885z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-c-ic-icon" viewBox="0 0 24 24">
|
||||
<g fill="none">
|
||||
<path stroke="#e9e9e9" stroke-linecap="round" stroke-linejoin="round" d="M11.923 19.136L5.424 22l.715-7.065-4.731-5.296 6.94-1.503L11.923 2l3.574 6.136 6.94 1.503-4.731 5.296L18.42 22z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-c-ic-mask-load" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h32v32H0z"/>
|
||||
<path fill="#e9e9e9" d="M18.01 4a11.798 11.798 0 0 0 0 1H3v24h24V14.986a8.738 8.738 0 0 0 1 0V29a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h15.01zM15 23a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm0-1a5 5 0 1 0 0-10 5 5 0 0 0 0 10z"/>
|
||||
<path fill="#e9e9e9" d="M25 3h1v9h-1z"/>
|
||||
<path stroke="#e9e9e9" d="M22 6l3.5-3.5L29 6"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-c-ic-mask" viewBox="0 0 24 24">
|
||||
<g fill="none">
|
||||
<circle cx="12" cy="12" r="4.5" stroke="#e9e9e9"/>
|
||||
<path fill="#e9e9e9" d="M2 1h20a1 1 0 0 1 1 1v20a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1zm0 1v20h20V2H2z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-c-ic-redo" viewBox="0 0 24 24">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h24v24H0z" opacity=".5"/>
|
||||
<path fill="#e9e9e9" d="M21 6H9a6 6 0 1 0 0 12h12v1H9A7 7 0 0 1 9 5h12v1z"/>
|
||||
<path stroke="#e9e9e9" stroke-linecap="square" d="M19 3l2.5 2.5L19 8"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-c-ic-reset" viewBox="0 0 24 24">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h24v24H0z" opacity=".5"/>
|
||||
<path fill="#e9e9e9" d="M2 13v-1a7 7 0 0 1 7-7h13v1h-1v5h1v1a7 7 0 0 1-7 7H2v-1h1v-5H2zm7-7a6 6 0 0 0-6 6v6h12a6 6 0 0 0 6-6V6H9z"/>
|
||||
<path stroke="#e9e9e9" stroke-linecap="square" d="M19 3l2.5 2.5L19 8M5 16l-2.5 2.5L5 21"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-c-ic-rotate-clockwise" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path fill="#e9e9e9" d="M29 17h-.924c0 6.627-5.373 12-12 12-6.628 0-12-5.373-12-12C4.076 10.398 9.407 5.041 16 5V4C8.82 4 3 9.82 3 17s5.82 13 13 13 13-5.82 13-13z"/>
|
||||
<path stroke="#e9e9e9" stroke-linecap="square" d="M16 1.5l4 3-4 3"/>
|
||||
<path fill="#e9e9e9" fill-rule="nonzero" d="M16 4h4v1h-4z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-c-ic-rotate-counterclockwise" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path fill="#e9e9e9" d="M3 17h.924c0 6.627 5.373 12 12 12 6.628 0 12-5.373 12-12 0-6.602-5.331-11.96-11.924-12V4c7.18 0 13 5.82 13 13s-5.82 13-13 13S3 24.18 3 17z"/>
|
||||
<path fill="#e9e9e9" fill-rule="nonzero" d="M12 4h4v1h-4z"/>
|
||||
<path stroke="#e9e9e9" stroke-linecap="square" d="M16 1.5l-4 3 4 3"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-c-ic-rotate" viewBox="0 0 24 24">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h24v24H0z"/>
|
||||
<path fill="#e9e9e9" d="M8.349 22.254a10.002 10.002 0 0 1-2.778-1.719l.65-.76a9.002 9.002 0 0 0 2.495 1.548l-.367.931zm2.873.704l.078-.997a9 9 0 1 0-.557-17.852l-.14-.99A10.076 10.076 0 0 1 12.145 3c5.523 0 10 4.477 10 10s-4.477 10-10 10c-.312 0-.62-.014-.924-.042zm-7.556-4.655a9.942 9.942 0 0 1-1.253-2.996l.973-.234a8.948 8.948 0 0 0 1.124 2.693l-.844.537zm-1.502-5.91A9.949 9.949 0 0 1 2.88 9.23l.925.382a8.954 8.954 0 0 0-.644 2.844l-.998-.062zm2.21-5.686c.687-.848 1.51-1.58 2.436-2.166l.523.852a9.048 9.048 0 0 0-2.188 1.95l-.771-.636z"/>
|
||||
<path stroke="#e9e9e9" stroke-linecap="square" d="M13 1l-2.5 2.5L13 6"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-c-ic-shape-circle" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<circle cx="16" cy="16" r="14.5" stroke="#e9e9e9"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-c-ic-shape-rectangle" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<rect width="27" height="27" x="2.5" y="2.5" stroke="#e9e9e9" rx="1"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-c-ic-shape-triangle" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path stroke="#e9e9e9" stroke-linecap="round" stroke-linejoin="round" d="M16 2.5l15.5 27H.5z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-c-ic-shape" viewBox="0 0 24 24">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path fill="#e9e9e9" d="M14.706 8H21a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H9a1 1 0 0 1-1-1v-4h1v4h12V9h-5.706l-.588-1z"/>
|
||||
<path stroke="#e9e9e9" stroke-linecap="round" stroke-linejoin="round" d="M8.5 1.5l7.5 13H1z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-c-ic-text-align-center" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h32v32H0z"/>
|
||||
<path fill="#e9e9e9" d="M2 5h28v1H2zM8 12h16v1H8zM2 19h28v1H2zM8 26h16v1H8z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-c-ic-text-align-left" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h32v32H0z"/>
|
||||
<path fill="#e9e9e9" d="M2 5h28v1H2zM2 12h16v1H2zM2 19h28v1H2zM2 26h16v1H2z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-c-ic-text-align-right" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h32v32H0z"/>
|
||||
<path fill="#e9e9e9" d="M2 5h28v1H2zM14 12h16v1H14zM2 19h28v1H2zM14 26h16v1H14z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-c-ic-text-bold" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h32v32H0z"/>
|
||||
<path fill="#e9e9e9" d="M7 2h2v2H7zM7 28h2v2H7z"/>
|
||||
<path stroke="#e9e9e9" stroke-width="2" d="M9 3v12h9a6 6 0 1 0 0-12H9zM9 15v14h10a7 7 0 0 0 0-14H9z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-c-ic-text-italic" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h32v32H0z"/>
|
||||
<path fill="#e9e9e9" d="M15 2h5v1h-5zM11 29h5v1h-5zM17 3h1l-4 26h-1z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-c-ic-text-underline" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h32v32H0z"/>
|
||||
<path fill="#e9e9e9" d="M8 2v14a8 8 0 1 0 16 0V2h1v14a9 9 0 0 1-18 0V2h1zM3 29h26v1H3z"/>
|
||||
<path fill="#e9e9e9" d="M5 2h5v1H5zM22 2h5v1h-5z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-c-ic-text" viewBox="0 0 24 24">
|
||||
<g fill="#e9e9e9" fill-rule="evenodd">
|
||||
<path d="M4 3h15a1 1 0 0 1 1 1H3a1 1 0 0 1 1-1zM3 4h1v1H3zM19 4h1v1h-1z"/>
|
||||
<path d="M11 3h1v18h-1z"/>
|
||||
<path d="M10 20h3v1h-3z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-c-ic-undo" viewBox="0 0 24 24">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M24 0H0v24h24z" opacity=".5"/>
|
||||
<path fill="#e9e9e9" d="M3 6h12a6 6 0 1 1 0 12H3v1h12a7 7 0 0 0 0-14H3v1z"/>
|
||||
<path stroke="#e9e9e9" stroke-linecap="square" d="M5 3L2.5 5.5 5 8"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-c-img-bi" viewBox="0 0 257 26">
|
||||
<g fill="#FDBA3B">
|
||||
<path d="M26 5a8.001 8.001 0 0 0 0 16 8.001 8.001 0 0 0 0-16M51.893 19.812L43.676 5.396A.78.78 0 0 0 43 5a.78.78 0 0 0-.677.396l-8.218 14.418a.787.787 0 0 0 0 .792c.14.244.396.394.676.394h16.436c.28 0 .539-.15.678-.396a.796.796 0 0 0-.002-.792M15.767 5.231A.79.79 0 0 0 15.21 5H.791A.791.791 0 0 0 0 5.79v6.42a.793.793 0 0 0 .791.79h3.21v7.21c.001.21.082.408.234.56.147.148.347.23.558.23h6.416a.788.788 0 0 0 .792-.79V13h3.006c.413 0 .611-.082.762-.232.15-.149.23-.35.231-.559V5.791a.787.787 0 0 0-.233-.56M85.767 5.231A.79.79 0 0 0 85.21 5H70.791a.791.791 0 0 0-.791.79v6.42a.793.793 0 0 0 .791.79h3.21v7.21c.001.21.082.408.234.56.147.148.347.23.558.23h6.416a.788.788 0 0 0 .792-.79V13h3.006c.413 0 .611-.082.762-.232.15-.149.23-.35.231-.559V5.791a.787.787 0 0 0-.233-.56M65.942 9.948l2.17-3.76a.78.78 0 0 0 0-.792.791.791 0 0 0-.684-.396h-8.54A5.889 5.889 0 0 0 53 10.86a5.887 5.887 0 0 0 3.07 5.17l-2.184 3.782A.792.792 0 0 0 54.571 21h8.54a5.89 5.89 0 0 0 2.831-11.052M105.7 21h2.3V5h-2.3zM91 5h2.4v10.286c0 1.893 1.612 3.429 3.6 3.429s3.6-1.536 3.6-3.429V5h2.4v10.286c0 3.156-2.686 5.714-6 5.714-3.313 0-6-2.558-6-5.714V5zM252.148 21.128h-2.377V9.659h2.27v1.64c.69-1.299 1.792-1.938 3.304-1.938.497 0 .95.065 1.382.192l-.215 2.277a3.734 3.734 0 0 0-1.275-.213c-1.814 0-3.089 1.234-3.089 3.638v5.873zm-7.095-5.744a3.734 3.734 0 0 0-1.101-2.703c-.714-.766-1.6-1.149-2.658-1.149-1.058 0-1.944.383-2.679 1.149a3.803 3.803 0 0 0-1.08 2.703c0 1.063.368 1.978 1.08 2.722.735.746 1.62 1.128 2.68 1.128 1.058 0 1.943-.382 2.657-1.128.734-.744 1.101-1.659 1.101-2.722zm-9.916 0c0-1.682.583-3.086 1.729-4.256 1.166-1.17 2.635-1.767 4.428-1.767 1.793 0 3.262.597 4.407 1.767 1.167 1.17 1.75 2.574 1.75 4.256 0 1.7-.583 3.127-1.75 4.297-1.145 1.17-2.614 1.745-4.407 1.745-1.793 0-3.262-.575-4.428-1.745-1.146-1.17-1.729-2.596-1.729-4.297zm-1.5 3.233l.821 1.83c-.864.638-1.944.958-3.22.958-2.526 0-3.822-1.554-3.822-4.383V11.66h-2.01v-2h2.031V5.595h2.355v4.063h4.018v2h-4.018v5.405c0 1.469.605 2.191 1.793 2.191.626 0 1.318-.212 2.052-.638zm-12.43 2.51h2.375V9.66h-2.376v11.469zm1.23-12.977c-.929 0-1.642-.682-1.642-1.596 0-.873.713-1.554 1.643-1.554.885 0 1.576.681 1.576 1.554 0 .914-.69 1.596-1.576 1.596zm-6.49 7.234c0-1.086-.346-1.98-1.037-2.724-.692-.745-1.599-1.128-2.7-1.128-1.102 0-2.01.383-2.7 1.128-.692.744-1.037 1.638-1.037 2.724 0 1.084.345 2.02 1.036 2.766.691.744 1.6 1.105 2.7 1.105 1.102 0 2.01-.361 2.7-1.105.692-.746 1.038-1.682 1.038-2.766zm-.173-4.129V5h2.397v16.128h-2.354v-1.596c-1.015 1.255-2.333 1.873-3.91 1.873-1.663 0-3.068-.575-4.169-1.724-1.102-1.17-1.663-2.596-1.663-4.297 0-1.682.561-3.107 1.663-4.256 1.101-1.17 2.485-1.745 4.148-1.745 1.534 0 2.83.617 3.888 1.872zm-11.48 9.873h-10.218V5.405h10.195v2.318h-7.711V12h7.15v2.32h-7.15v4.489h7.733v2.319zm-23.891-9.724c-1.793 0-3.132 1.192-3.478 2.979h6.783c-.194-1.808-1.555-2.979-3.305-2.979zm5.703 3.766c0 .32-.021.703-.086 1.128h-9.095c.346 1.787 1.62 3 3.867 3 1.318 0 2.916-.49 3.953-1.234l.994 1.724c-1.189.872-3.067 1.595-5.033 1.595-4.364 0-6.243-3-6.243-6.021 0-1.724.54-3.15 1.642-4.277 1.101-1.127 2.548-1.702 4.298-1.702 1.664 0 3.046.511 4.105 1.553 1.058 1.043 1.598 2.447 1.598 4.234zm-19.949 3.894c1.08 0 1.966-.362 2.68-1.085.712-.724 1.058-1.617 1.058-2.703 0-1.084-.346-2-1.059-2.701-.713-.702-1.599-1.064-2.679-1.064-1.058 0-1.944.362-2.656 1.085-.714.702-1.059 1.596-1.059 2.68 0 1.086.345 2 1.059 2.724.712.702 1.598 1.064 2.656 1.064zm3.673-7.936V9.66h2.29v10.299c0 1.85-.584 3.32-1.728 4.404-1.146 1.085-2.68 1.638-4.58 1.638-1.945 0-3.672-.553-5.206-1.638l1.037-1.808c1.296.915 2.679 1.36 4.126 1.36 2.484 0 3.996-1.51 3.996-3.637v-.83c-1.015 1.127-2.311 1.702-3.91 1.702-1.684 0-3.089-.554-4.19-1.68-1.102-1.128-1.642-2.532-1.642-4.214 0-1.68.561-3.085 1.706-4.191 1.145-1.128 2.571-1.681 4.234-1.681 1.534 0 2.83.575 3.867 1.745zm-18.07 8.127c1.102 0 1.988-.382 2.7-1.128.714-.744 1.06-1.659 1.06-2.743 0-1.065-.346-1.98-1.06-2.724-.712-.745-1.598-1.128-2.7-1.128-1.101 0-2.008.383-2.7 1.128-.691.744-1.036 1.66-1.036 2.745 0 1.084.345 2 1.037 2.745.691.744 1.598 1.105 2.7 1.105zm3.652-8V9.66h2.29v11.469h-2.29v-1.575c-1.059 1.234-2.399 1.852-3.976 1.852-1.663 0-3.067-.575-4.168-1.745-1.102-1.17-1.642-2.617-1.642-4.34 0-1.724.54-3.128 1.642-4.256 1.1-1.128 2.505-1.681 4.168-1.681 1.577 0 2.917.617 3.976 1.872zM138.79 9.34c1.404 0 2.527.448 3.37 1.34.863.873 1.295 2.086 1.295 3.596v6.852h-2.376V14.66c0-2.021-1.036-3.128-2.657-3.128-1.727 0-2.915 1.255-2.915 3.192v6.404h-2.377v-6.426c0-1.978-1.037-3.17-2.679-3.17-1.728 0-2.937 1.277-2.937 3.234v6.362h-2.377V9.659h2.333v1.66c.692-1.212 1.988-1.979 3.522-1.979 1.533.021 2.958.767 3.586 2.107.798-1.277 2.419-2.107 4.212-2.107zm-19.517 11.788h2.484V5.405h-2.484v15.723z"/>
|
||||
</g>
|
||||
</symbol></svg>
|
After Width: | Height: | Size: 19 KiB |
224
public/images/icon-d.svg
Normal file
224
public/images/icon-d.svg
Normal file
|
@ -0,0 +1,224 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs/><symbol id="icon-d-ic-apply" viewBox="0 0 24 24">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h24v24H0z"/>
|
||||
<path stroke="#8a8a8a" d="M4 12.011l5 5L20.011 6"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-d-ic-cancel" viewBox="0 0 24 24">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h24v24H0z"/>
|
||||
<path stroke="#8a8a8a" d="M6 6l12 12M18 6L6 18"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-d-ic-crop" viewBox="0 0 24 24">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h24v24H0z"/>
|
||||
<path fill="#8a8a8a" d="M4 0h1v20a1 1 0 0 1-1-1V0zM20 17h-1V5h1v12zm0 2v5h-1v-5h1z"/>
|
||||
<path fill="#8a8a8a" d="M5 19h19v1H5zM4.762 4v1H0V4h4.762zM7 4h12a1 1 0 0 1 1 1H7V4z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-d-ic-delete-all" viewBox="0 0 24 24">
|
||||
<g fill="#8a8a8a" fill-rule="evenodd">
|
||||
<path d="M5 23H3a1 1 0 0 1-1-1V6h1v16h2v1zm16-10h-1V6h1v7zM9 13H8v-3h1v3zm3 0h-1v-3h1v3zm3 0h-1v-3h1v3zM14.794 3.794L13 2h-3L8.206 3.794A.963.963 0 0 1 8 2.5l.703-1.055A1 1 0 0 1 9.535 1h3.93a1 1 0 0 1 .832.445L15 2.5a.965.965 0 0 1-.206 1.294zM14.197 4H8.803h5.394z"/>
|
||||
<path d="M0 3h23v1H0zM11.286 21H8.714L8 23H7l1-2.8V20h.071L9.5 16h1l1.429 4H12v.2l1 2.8h-1l-.714-2zm-.357-1L10 17.4 9.071 20h1.858zM20 22h3v1h-4v-7h1v6zm-5 0h3v1h-4v-7h1v6z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-d-ic-delete" viewBox="0 0 24 24">
|
||||
<g fill="#8a8a8a" fill-rule="evenodd">
|
||||
<path d="M3 6v16h17V6h1v16a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V6h1zM14.794 3.794L13 2h-3L8.206 3.794A.963.963 0 0 1 8 2.5l.703-1.055A1 1 0 0 1 9.535 1h3.93a1 1 0 0 1 .832.445L15 2.5a.965.965 0 0 1-.206 1.294zM14.197 4H8.803h5.394z"/>
|
||||
<path d="M0 3h23v1H0zM8 10h1v6H8v-6zm3 0h1v6h-1v-6zm3 0h1v6h-1v-6z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-d-ic-draw-free" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path stroke="#8a8a8a" d="M2.5 20.929C2.594 10.976 4.323 6 7.686 6c5.872 0 2.524 19 7.697 19s1.89-14.929 6.414-14.929 1.357 10.858 5.13 10.858c1.802 0 2.657-2.262 2.566-6.786"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-d-ic-draw-line" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path stroke="#8a8a8a" d="M2 15.5h28"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-d-ic-draw" viewBox="0 0 24 24">
|
||||
<g fill="none">
|
||||
<path stroke="#8a8a8a" d="M2.5 21.5H5c.245 0 .48-.058.691-.168l.124-.065.14.01c.429.028.85-.127 1.16-.437L22.55 5.405a.5.5 0 0 0 0-.707l-3.246-3.245a.5.5 0 0 0-.707 0L3.162 16.888a1.495 1.495 0 0 0-.437 1.155l.01.14-.065.123c-.111.212-.17.448-.17.694v2.5z"/>
|
||||
<path fill="#8a8a8a" d="M16.414 3.707l3.89 3.89-.708.706-3.889-3.889z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-d-ic-filter" viewBox="0 0 24 24">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h24v24H0z"/>
|
||||
<path fill="#8a8a8a" d="M12 7v1H2V7h10zm6 0h4v1h-4V7zM12 16v1h10v-1H12zm-6 0H2v1h4v-1z"/>
|
||||
<path fill="#8a8a8a" d="M8.5 20a3.5 3.5 0 1 1 0-7 3.5 3.5 0 0 1 0 7zm0-1a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5zM15.5 11a3.5 3.5 0 1 1 0-7 3.5 3.5 0 0 1 0 7zm0-1a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-d-ic-flip-reset" viewBox="0 0 31 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M31 0H0v32h31z"/>
|
||||
<path fill="#8a8a8a" d="M28 16a8 8 0 0 1-8 8H3v-1h1v-7H3a8 8 0 0 1 8-8h17v1h-1v7h1zM11 9a7 7 0 0 0-7 7v7h16a7 7 0 0 0 7-7V9H11z"/>
|
||||
<path stroke="#8a8a8a" stroke-linecap="square" d="M24 5l3.5 3.5L24 12M7 20l-3.5 3.5L7 27"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-d-ic-flip-x" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M32 32H0V0h32z"/>
|
||||
<path fill="#8a8a8a" d="M17 32h-1V0h1zM27.167 11l.5 3h-1.03l-.546-3h1.076zm-.5-3h-1.122L25 5h-5V4h5.153a1 1 0 0 1 .986.836L26.667 8zm1.5 9l.5 3h-.94l-.545-3h.985zm1 6l.639 3.836A1 1 0 0 1 28.819 28H26v-1h3l-.726-4h.894zM23 28h-3v-1h3v1zM13 4v1H7L3 27h10v1H3.18a1 1 0 0 1-.986-1.164l3.666-22A1 1 0 0 1 6.847 4H13z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-d-ic-flip-y" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0v32h32V0z"/>
|
||||
<path fill="#8a8a8a" d="M0 16v1h32v-1zM11 27.167l3 .5v-1.03l-3-.546v1.076zm-3-.5v-1.122L5 25v-5H4v5.153a1 1 0 0 0 .836.986L8 26.667zm9 1.5l3 .5v-.94l-3-.545v.985zm6 1l3.836.639A1 1 0 0 0 28 28.82V26h-1v3l-4-.727v.894zM28 23v-3h-1v3h1zM4 13h1V7l22-4v10h1V3.18a1 1 0 0 0-1.164-.986l-22 3.667A1 1 0 0 0 4 6.847V13z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-d-ic-flip" viewBox="0 0 24 24">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h24v24H0z"/>
|
||||
<path fill="#8a8a8a" d="M11 0h1v24h-1zM19 21v-1h2v-2h1v2a1 1 0 0 1-1 1h-2zm-2 0h-3v-1h3v1zm5-5h-1v-3h1v3zm0-5h-1V8h1v3zm0-5h-1V4h-2V3h2a1 1 0 0 1 1 1v2zm-5-3v1h-3V3h3zM9 3v1H2v16h7v1H2a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h7z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-d-ic-icon-arrow-2" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path stroke="#8a8a8a" stroke-linecap="round" stroke-linejoin="round" d="M21.793 18.5H2.5v-5h18.935l-7.6-8h5.872l10.5 10.5-10.5 10.5h-5.914l8-8z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-d-ic-icon-arrow-3" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path stroke="#8a8a8a" stroke-linecap="round" stroke-linejoin="round" d="M25.288 16.42L14.208 27.5H6.792l11.291-11.291L6.826 4.5h7.381l11.661 11.661-.58.258z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-d-ic-icon-arrow" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path stroke="#8a8a8a" d="M2.5 11.5v9h18v5.293L30.293 16 20.5 6.207V11.5h-18z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-d-ic-icon-bubble" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path stroke="#8a8a8a" stroke-linecap="round" stroke-linejoin="round" d="M22.207 24.5L16.5 30.207V24.5H8A6.5 6.5 0 0 1 1.5 18V9A6.5 6.5 0 0 1 8 2.5h16A6.5 6.5 0 0 1 30.5 9v9a6.5 6.5 0 0 1-6.5 6.5h-1.793z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-d-ic-icon-heart" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path fill-rule="nonzero" stroke="#8a8a8a" d="M15.996 30.675l1.981-1.79c7.898-7.177 10.365-9.718 12.135-13.012.922-1.716 1.377-3.37 1.377-5.076 0-4.65-3.647-8.297-8.297-8.297-2.33 0-4.86 1.527-6.817 3.824l-.38.447-.381-.447C13.658 4.027 11.126 2.5 8.797 2.5 4.147 2.5.5 6.147.5 10.797c0 1.714.46 3.375 1.389 5.098 1.775 3.288 4.26 5.843 12.123 12.974l1.984 1.806z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-d-ic-icon-load" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path stroke="#8a8a8a" stroke-linecap="round" stroke-linejoin="round" d="M17.314 18.867l1.951-2.53 4 5.184h-17l6.5-8.84 4.549 6.186z"/>
|
||||
<path fill="#8a8a8a" d="M18.01 4a11.798 11.798 0 0 0 0 1H3v24h24V14.986a8.738 8.738 0 0 0 1 0V29a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h15.01z"/>
|
||||
<path fill="#8a8a8a" d="M25 3h1v9h-1z"/>
|
||||
<path stroke="#8a8a8a" d="M22 6l3.5-3.5L29 6"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-d-ic-icon-location" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<g stroke="#8a8a8a">
|
||||
<path d="M16 31.28C23.675 23.302 27.5 17.181 27.5 13c0-6.351-5.149-11.5-11.5-11.5S4.5 6.649 4.5 13c0 4.181 3.825 10.302 11.5 18.28z"/>
|
||||
<circle cx="16" cy="13" r="4.5"/>
|
||||
</g>
|
||||
</g>
|
||||
</symbol><symbol id="icon-d-ic-icon-polygon" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path stroke="#8a8a8a" d="M.576 16L8.29 29.5h15.42L31.424 16 23.71 2.5H8.29L.576 16z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-d-ic-icon-star-2" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path stroke="#8a8a8a" d="M19.446 31.592l2.265-3.272 3.946.25.636-3.94 3.665-1.505-1.12-3.832 2.655-2.962-2.656-2.962 1.12-3.832-3.664-1.505-.636-3.941-3.946.25-2.265-3.271L16 3.024 12.554 1.07 10.289 4.34l-3.946-.25-.636 3.941-3.665 1.505 1.12 3.832L.508 16.33l2.656 2.962-1.12 3.832 3.664 1.504.636 3.942 3.946-.25 2.265 3.27L16 29.638l3.446 1.955z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-d-ic-icon-star" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path stroke="#8a8a8a" d="M25.292 29.878l-1.775-10.346 7.517-7.327-10.388-1.51L16 1.282l-4.646 9.413-10.388 1.51 7.517 7.327-1.775 10.346L16 24.993l9.292 4.885z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-d-ic-icon" viewBox="0 0 24 24">
|
||||
<g fill="none">
|
||||
<path stroke="#8a8a8a" stroke-linecap="round" stroke-linejoin="round" d="M11.923 19.136L5.424 22l.715-7.065-4.731-5.296 6.94-1.503L11.923 2l3.574 6.136 6.94 1.503-4.731 5.296L18.42 22z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-d-ic-mask-load" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h32v32H0z"/>
|
||||
<path fill="#8a8a8a" d="M18.01 4a11.798 11.798 0 0 0 0 1H3v24h24V14.986a8.738 8.738 0 0 0 1 0V29a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h15.01zM15 23a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm0-1a5 5 0 1 0 0-10 5 5 0 0 0 0 10z"/>
|
||||
<path fill="#8a8a8a" d="M25 3h1v9h-1z"/>
|
||||
<path stroke="#8a8a8a" d="M22 6l3.5-3.5L29 6"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-d-ic-mask" viewBox="0 0 24 24">
|
||||
<g fill="none">
|
||||
<circle cx="12" cy="12" r="4.5" stroke="#8a8a8a"/>
|
||||
<path fill="#8a8a8a" d="M2 1h20a1 1 0 0 1 1 1v20a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1zm0 1v20h20V2H2z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-d-ic-redo" viewBox="0 0 24 24">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h24v24H0z" opacity=".5"/>
|
||||
<path fill="#8a8a8a" d="M21 6H9a6 6 0 1 0 0 12h12v1H9A7 7 0 0 1 9 5h12v1z"/>
|
||||
<path stroke="#8a8a8a" stroke-linecap="square" d="M19 3l2.5 2.5L19 8"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-d-ic-reset" viewBox="0 0 24 24">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h24v24H0z" opacity=".5"/>
|
||||
<path fill="#8a8a8a" d="M2 13v-1a7 7 0 0 1 7-7h13v1h-1v5h1v1a7 7 0 0 1-7 7H2v-1h1v-5H2zm7-7a6 6 0 0 0-6 6v6h12a6 6 0 0 0 6-6V6H9z"/>
|
||||
<path stroke="#8a8a8a" stroke-linecap="square" d="M19 3l2.5 2.5L19 8M5 16l-2.5 2.5L5 21"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-d-ic-rotate-clockwise" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path fill="#8a8a8a" d="M29 17h-.924c0 6.627-5.373 12-12 12-6.628 0-12-5.373-12-12C4.076 10.398 9.407 5.041 16 5V4C8.82 4 3 9.82 3 17s5.82 13 13 13 13-5.82 13-13z"/>
|
||||
<path stroke="#8a8a8a" stroke-linecap="square" d="M16 1.5l4 3-4 3"/>
|
||||
<path fill="#8a8a8a" fill-rule="nonzero" d="M16 4h4v1h-4z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-d-ic-rotate-counterclockwise" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path fill="#8a8a8a" d="M3 17h.924c0 6.627 5.373 12 12 12 6.628 0 12-5.373 12-12 0-6.602-5.331-11.96-11.924-12V4c7.18 0 13 5.82 13 13s-5.82 13-13 13S3 24.18 3 17z"/>
|
||||
<path fill="#8a8a8a" fill-rule="nonzero" d="M12 4h4v1h-4z"/>
|
||||
<path stroke="#8a8a8a" stroke-linecap="square" d="M16 1.5l-4 3 4 3"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-d-ic-rotate" viewBox="0 0 24 24">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h24v24H0z"/>
|
||||
<path fill="#8a8a8a" d="M8.349 22.254a10.002 10.002 0 0 1-2.778-1.719l.65-.76a9.002 9.002 0 0 0 2.495 1.548l-.367.931zm2.873.704l.078-.997a9 9 0 1 0-.557-17.852l-.14-.99A10.076 10.076 0 0 1 12.145 3c5.523 0 10 4.477 10 10s-4.477 10-10 10c-.312 0-.62-.014-.924-.042zm-7.556-4.655a9.942 9.942 0 0 1-1.253-2.996l.973-.234a8.948 8.948 0 0 0 1.124 2.693l-.844.537zm-1.502-5.91A9.949 9.949 0 0 1 2.88 9.23l.925.382a8.954 8.954 0 0 0-.644 2.844l-.998-.062zm2.21-5.686c.687-.848 1.51-1.58 2.436-2.166l.523.852a9.048 9.048 0 0 0-2.188 1.95l-.771-.636z"/>
|
||||
<path stroke="#8a8a8a" stroke-linecap="square" d="M13 1l-2.5 2.5L13 6"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-d-ic-shape-circle" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<circle cx="16" cy="16" r="14.5" stroke="#8a8a8a"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-d-ic-shape-rectangle" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<rect width="27" height="27" x="2.5" y="2.5" stroke="#8a8a8a" rx="1"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-d-ic-shape-triangle" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path stroke="#8a8a8a" stroke-linecap="round" stroke-linejoin="round" d="M16 2.5l15.5 27H.5z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-d-ic-shape" viewBox="0 0 24 24">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path fill="#8a8a8a" d="M14.706 8H21a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H9a1 1 0 0 1-1-1v-4h1v4h12V9h-5.706l-.588-1z"/>
|
||||
<path stroke="#8a8a8a" stroke-linecap="round" stroke-linejoin="round" d="M8.5 1.5l7.5 13H1z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-d-ic-text-align-center" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h32v32H0z"/>
|
||||
<path fill="#8a8a8a" d="M2 5h28v1H2zM8 12h16v1H8zM2 19h28v1H2zM8 26h16v1H8z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-d-ic-text-align-left" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h32v32H0z"/>
|
||||
<path fill="#8a8a8a" d="M2 5h28v1H2zM2 12h16v1H2zM2 19h28v1H2zM2 26h16v1H2z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-d-ic-text-align-right" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h32v32H0z"/>
|
||||
<path fill="#8a8a8a" d="M2 5h28v1H2zM14 12h16v1H14zM2 19h28v1H2zM14 26h16v1H14z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-d-ic-text-bold" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h32v32H0z"/>
|
||||
<path fill="#8a8a8a" d="M7 2h2v2H7zM7 28h2v2H7z"/>
|
||||
<path stroke="#8a8a8a" stroke-width="2" d="M9 3v12h9a6 6 0 1 0 0-12H9zM9 15v14h10a7 7 0 0 0 0-14H9z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-d-ic-text-italic" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h32v32H0z"/>
|
||||
<path fill="#8a8a8a" d="M15 2h5v1h-5zM11 29h5v1h-5zM17 3h1l-4 26h-1z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-d-ic-text-underline" viewBox="0 0 32 32">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M0 0h32v32H0z"/>
|
||||
<path fill="#8a8a8a" d="M8 2v14a8 8 0 1 0 16 0V2h1v14a9 9 0 0 1-18 0V2h1zM3 29h26v1H3z"/>
|
||||
<path fill="#8a8a8a" d="M5 2h5v1H5zM22 2h5v1h-5z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-d-ic-text" viewBox="0 0 24 24">
|
||||
<g fill="#8a8a8a" fill-rule="evenodd">
|
||||
<path d="M4 3h15a1 1 0 0 1 1 1H3a1 1 0 0 1 1-1zM3 4h1v1H3zM19 4h1v1h-1z"/>
|
||||
<path d="M11 3h1v18h-1z"/>
|
||||
<path d="M10 20h3v1h-3z"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-d-ic-undo" viewBox="0 0 24 24">
|
||||
<g fill="none" fill-rule="evenodd">
|
||||
<path d="M24 0H0v24h24z" opacity=".5"/>
|
||||
<path fill="#8a8a8a" d="M3 6h12a6 6 0 1 1 0 12H3v1h12a7 7 0 0 0 0-14H3v1z"/>
|
||||
<path stroke="#8a8a8a" stroke-linecap="square" d="M5 3L2.5 5.5 5 8"/>
|
||||
</g>
|
||||
</symbol><symbol id="icon-d-img-bi" viewBox="0 0 257 26">
|
||||
<g fill="#FDBA3B">
|
||||
<path d="M26 5a8.001 8.001 0 0 0 0 16 8.001 8.001 0 0 0 0-16M51.893 19.812L43.676 5.396A.78.78 0 0 0 43 5a.78.78 0 0 0-.677.396l-8.218 14.418a.787.787 0 0 0 0 .792c.14.244.396.394.676.394h16.436c.28 0 .539-.15.678-.396a.796.796 0 0 0-.002-.792M15.767 5.231A.79.79 0 0 0 15.21 5H.791A.791.791 0 0 0 0 5.79v6.42a.793.793 0 0 0 .791.79h3.21v7.21c.001.21.082.408.234.56.147.148.347.23.558.23h6.416a.788.788 0 0 0 .792-.79V13h3.006c.413 0 .611-.082.762-.232.15-.149.23-.35.231-.559V5.791a.787.787 0 0 0-.233-.56M85.767 5.231A.79.79 0 0 0 85.21 5H70.791a.791.791 0 0 0-.791.79v6.42a.793.793 0 0 0 .791.79h3.21v7.21c.001.21.082.408.234.56.147.148.347.23.558.23h6.416a.788.788 0 0 0 .792-.79V13h3.006c.413 0 .611-.082.762-.232.15-.149.23-.35.231-.559V5.791a.787.787 0 0 0-.233-.56M65.942 9.948l2.17-3.76a.78.78 0 0 0 0-.792.791.791 0 0 0-.684-.396h-8.54A5.889 5.889 0 0 0 53 10.86a5.887 5.887 0 0 0 3.07 5.17l-2.184 3.782A.792.792 0 0 0 54.571 21h8.54a5.89 5.89 0 0 0 2.831-11.052M105.7 21h2.3V5h-2.3zM91 5h2.4v10.286c0 1.893 1.612 3.429 3.6 3.429s3.6-1.536 3.6-3.429V5h2.4v10.286c0 3.156-2.686 5.714-6 5.714-3.313 0-6-2.558-6-5.714V5zM252.148 21.128h-2.377V9.659h2.27v1.64c.69-1.299 1.792-1.938 3.304-1.938.497 0 .95.065 1.382.192l-.215 2.277a3.734 3.734 0 0 0-1.275-.213c-1.814 0-3.089 1.234-3.089 3.638v5.873zm-7.095-5.744a3.734 3.734 0 0 0-1.101-2.703c-.714-.766-1.6-1.149-2.658-1.149-1.058 0-1.944.383-2.679 1.149a3.803 3.803 0 0 0-1.08 2.703c0 1.063.368 1.978 1.08 2.722.735.746 1.62 1.128 2.68 1.128 1.058 0 1.943-.382 2.657-1.128.734-.744 1.101-1.659 1.101-2.722zm-9.916 0c0-1.682.583-3.086 1.729-4.256 1.166-1.17 2.635-1.767 4.428-1.767 1.793 0 3.262.597 4.407 1.767 1.167 1.17 1.75 2.574 1.75 4.256 0 1.7-.583 3.127-1.75 4.297-1.145 1.17-2.614 1.745-4.407 1.745-1.793 0-3.262-.575-4.428-1.745-1.146-1.17-1.729-2.596-1.729-4.297zm-1.5 3.233l.821 1.83c-.864.638-1.944.958-3.22.958-2.526 0-3.822-1.554-3.822-4.383V11.66h-2.01v-2h2.031V5.595h2.355v4.063h4.018v2h-4.018v5.405c0 1.469.605 2.191 1.793 2.191.626 0 1.318-.212 2.052-.638zm-12.43 2.51h2.375V9.66h-2.376v11.469zm1.23-12.977c-.929 0-1.642-.682-1.642-1.596 0-.873.713-1.554 1.643-1.554.885 0 1.576.681 1.576 1.554 0 .914-.69 1.596-1.576 1.596zm-6.49 7.234c0-1.086-.346-1.98-1.037-2.724-.692-.745-1.599-1.128-2.7-1.128-1.102 0-2.01.383-2.7 1.128-.692.744-1.037 1.638-1.037 2.724 0 1.084.345 2.02 1.036 2.766.691.744 1.6 1.105 2.7 1.105 1.102 0 2.01-.361 2.7-1.105.692-.746 1.038-1.682 1.038-2.766zm-.173-4.129V5h2.397v16.128h-2.354v-1.596c-1.015 1.255-2.333 1.873-3.91 1.873-1.663 0-3.068-.575-4.169-1.724-1.102-1.17-1.663-2.596-1.663-4.297 0-1.682.561-3.107 1.663-4.256 1.101-1.17 2.485-1.745 4.148-1.745 1.534 0 2.83.617 3.888 1.872zm-11.48 9.873h-10.218V5.405h10.195v2.318h-7.711V12h7.15v2.32h-7.15v4.489h7.733v2.319zm-23.891-9.724c-1.793 0-3.132 1.192-3.478 2.979h6.783c-.194-1.808-1.555-2.979-3.305-2.979zm5.703 3.766c0 .32-.021.703-.086 1.128h-9.095c.346 1.787 1.62 3 3.867 3 1.318 0 2.916-.49 3.953-1.234l.994 1.724c-1.189.872-3.067 1.595-5.033 1.595-4.364 0-6.243-3-6.243-6.021 0-1.724.54-3.15 1.642-4.277 1.101-1.127 2.548-1.702 4.298-1.702 1.664 0 3.046.511 4.105 1.553 1.058 1.043 1.598 2.447 1.598 4.234zm-19.949 3.894c1.08 0 1.966-.362 2.68-1.085.712-.724 1.058-1.617 1.058-2.703 0-1.084-.346-2-1.059-2.701-.713-.702-1.599-1.064-2.679-1.064-1.058 0-1.944.362-2.656 1.085-.714.702-1.059 1.596-1.059 2.68 0 1.086.345 2 1.059 2.724.712.702 1.598 1.064 2.656 1.064zm3.673-7.936V9.66h2.29v10.299c0 1.85-.584 3.32-1.728 4.404-1.146 1.085-2.68 1.638-4.58 1.638-1.945 0-3.672-.553-5.206-1.638l1.037-1.808c1.296.915 2.679 1.36 4.126 1.36 2.484 0 3.996-1.51 3.996-3.637v-.83c-1.015 1.127-2.311 1.702-3.91 1.702-1.684 0-3.089-.554-4.19-1.68-1.102-1.128-1.642-2.532-1.642-4.214 0-1.68.561-3.085 1.706-4.191 1.145-1.128 2.571-1.681 4.234-1.681 1.534 0 2.83.575 3.867 1.745zm-18.07 8.127c1.102 0 1.988-.382 2.7-1.128.714-.744 1.06-1.659 1.06-2.743 0-1.065-.346-1.98-1.06-2.724-.712-.745-1.598-1.128-2.7-1.128-1.101 0-2.008.383-2.7 1.128-.691.744-1.036 1.66-1.036 2.745 0 1.084.345 2 1.037 2.745.691.744 1.598 1.105 2.7 1.105zm3.652-8V9.66h2.29v11.469h-2.29v-1.575c-1.059 1.234-2.399 1.852-3.976 1.852-1.663 0-3.067-.575-4.168-1.745-1.102-1.17-1.642-2.617-1.642-4.34 0-1.724.54-3.128 1.642-4.256 1.1-1.128 2.505-1.681 4.168-1.681 1.577 0 2.917.617 3.976 1.872zM138.79 9.34c1.404 0 2.527.448 3.37 1.34.863.873 1.295 2.086 1.295 3.596v6.852h-2.376V14.66c0-2.021-1.036-3.128-2.657-3.128-1.727 0-2.915 1.255-2.915 3.192v6.404h-2.377v-6.426c0-1.978-1.037-3.17-2.679-3.17-1.728 0-2.937 1.277-2.937 3.234v6.362h-2.377V9.659h2.333v1.66c.692-1.212 1.988-1.979 3.522-1.979 1.533.021 2.958.767 3.586 2.107.798-1.277 2.419-2.107 4.212-2.107zm-19.517 11.788h2.484V5.405h-2.484v15.723z"/>
|
||||
</g>
|
||||
</symbol></svg>
|
After Width: | Height: | Size: 19 KiB |
|
@ -68,7 +68,6 @@ describe ClientApi::UserTeamService do
|
|||
|
||||
describe '#update_role!' do
|
||||
it 'should raise ClientApi::CustomUserTeamError if no role is set' do
|
||||
create :user_team, team: team_one, user: user_one
|
||||
ut_service = ClientApi::UserTeamService.new(
|
||||
user: user_one,
|
||||
team_id: team_one.id,
|
||||
|
|
Loading…
Reference in a new issue