Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
T
taskonsite-архив-перенесен
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Packages
Packages
Container Registry
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Dmitry Korolev
taskonsite-архив-перенесен
Commits
341ee21a
Commit
341ee21a
authored
Feb 21, 2016
by
Виталий Мурашко
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Drag and Drop
parent
33d72d12
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
2253 additions
and
16 deletions
+2253
-16
common/modules/bids/controllers/BidController.php
common/modules/bids/controllers/BidController.php
+19
-4
common/modules/bids/models/Bid.php
common/modules/bids/models/Bid.php
+1
-1
common/modules/content/controllers/PageController.php
common/modules/content/controllers/PageController.php
+4
-1
frontend/assets/FileUploadBundle.php
frontend/assets/FileUploadBundle.php
+27
-0
frontend/views/layouts/footer-index.php
frontend/views/layouts/footer-index.php
+11
-5
frontend/views/site/contacts.php
frontend/views/site/contacts.php
+10
-5
frontend/web/css/dropzone.css
frontend/web/css/dropzone.css
+397
-0
frontend/web/js/dropzone.js
frontend/web/js/dropzone.js
+1767
-0
frontend/web/js/upload-files.js
frontend/web/js/upload-files.js
+17
-0
No files found.
common/modules/bids/controllers/BidController.php
View file @
341ee21a
...
...
@@ -20,6 +20,7 @@ class BidController extends \common\components\BaseController
{
return
[
'Add'
=>
'Добавление заявки'
,
'Upload-files'
=>
'Загрузка файлов'
,
];
}
...
...
@@ -31,21 +32,20 @@ class BidController extends \common\components\BaseController
{
$model
=
new
Bid
;
$model
->
scenario
=
Yii
::
$app
->
request
->
post
(
'scenario'
);
if
(
Yii
::
$app
->
request
->
isAjax
)
{
$model
->
load
(
Yii
::
$app
->
request
->
post
());
$model
->
file
=
UploadedFile
::
getInstance
(
$model
,
'file'
);
Yii
::
$app
->
response
->
format
=
Response
::
FORMAT_JSON
;
$model
->
filename
=
$_POST
[
'file_name'
];
if
(
$model
->
validate
())
{
if
(
$model
->
file
)
/*
if($model->file)
{
$model->upload();
$model->file = null;
}
}
*/
$model
->
save
();
$model
->
send
();
...
...
@@ -63,4 +63,19 @@ class BidController extends \common\components\BaseController
}
}
public
function
actionUploadFiles
()
{
$model
=
new
Bid
();
if
(
!
empty
(
$_FILES
))
{
$tempFile
=
$_FILES
[
'file'
][
'tmp_name'
];
$targetPath
=
$model
->
getPath
();
$targetFile
=
$targetPath
.
$_FILES
[
'file'
][
'name'
];
move_uploaded_file
(
$tempFile
,
$targetFile
);
return
$_FILES
[
'file'
][
'name'
];
}
}
}
common/modules/bids/models/Bid.php
View file @
341ee21a
...
...
@@ -114,7 +114,7 @@ class Bid extends \common\components\ActiveRecordModel
return
Yii
::
$app
->
params
[
'frontUrl'
]
.
self
::
FILE_FOLDER
.
$this
->
filename
;
}
p
rivate
function
getPath
()
p
ublic
function
getPath
()
{
return
Yii
::
getAlias
(
'@frontend/web'
)
.
self
::
FILE_FOLDER
;
}
...
...
common/modules/content/controllers/PageController.php
View file @
341ee21a
<?php
namespace
common\modules\content\controllers
;
use
Yii
;
use
yii\web\BadRequestHttpException
;
use
common\modules\content\models\CoContent
;
use
common\modules\school\models\Lessons
;
class
PageController
extends
\common\components\BaseController
{
...
...
@@ -32,7 +35,7 @@ class PageController extends \common\components\BaseController
{
$model
=
CoContent
::
findOne
([
'url'
=>
$page
]);
}
$content
=
$model
->
lang
->
getFinishedContent
();
$this
->
meta_title
=
$model
->
metaTag
->
title
.
' - '
.
\Yii
::
$app
->
params
[
'name'
];
$this
->
meta_description
=
$model
->
metaTag
->
description
;
...
...
frontend/assets/FileUploadBundle.php
0 → 100644
View file @
341ee21a
<?php
/**
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
namespace
frontend\assets
;
use
yii\web\AssetBundle
;
/**
* @author Qiang Xue <qiang.xue@gmail.com>
* @since 2.0
*/
class
FileUploadBundle
extends
AssetBundle
{
public
$basePath
=
'@webroot'
;
public
$baseUrl
=
'@web'
;
public
$css
=
[
'css/dropzone.css'
,
];
public
$js
=
[
'js/dropzone.js'
,
'js/upload-files.js'
];
}
frontend/views/layouts/footer-index.php
View file @
341ee21a
...
...
@@ -4,6 +4,10 @@ use yii\helpers\Html;
use
yii\helpers\Url
;
use
common\modules\bids\models\Bid
;
use
frontend\assets\FileUploadBundle
;
FileUploadBundle
::
register
(
$this
);
?>
<footer>
...
...
@@ -23,11 +27,13 @@ use common\modules\bids\models\Bid;
$form
=
ActiveForm
::
begin
([
'id'
=>
'form_foot'
,
'action'
=>
'/'
,
'enableClientValidation'
=>
false
,
'options'
=>
[
'class'
=>
'footer_form bids-form'
,
'data-title'
=>
'Рассчитать проект'
,
'data-form'
=>
'Рассчитать проект'
,
'enctype'
=>
'multipart/form-data'
,
'data-tag'
=>
Bid
::
TAG_TREATMENT
],
]);
?>
...
...
@@ -65,21 +71,21 @@ use common\modules\bids\models\Bid;
'class'
=>
'footer_form__textarea'
])
->
label
(
false
);
?>
<div
class=
"file-upload_block"
>
<div
class=
"file-upload_block
dropzone"
id=
"block_upload
"
>
<div
class=
"file_upload_bt"
>
<div
class=
"file-upload"
>
<label>
<?php
echo
$form
->
field
(
$model
,
'file'
,
[
<?php
/*
echo $form->field($model, 'file', [
'template' => '<div class="row"><div class="col-sm-4">{input}</div></div>'
])
->
fileInput
();
?>
])->fileInput();
*/
?>
<span>
Выбрать файл
</span>
</label>
</div>
<
input
type=
"text"
id=
"filename"
class=
"filename"
disabled
>
<
!--<input type="text" id="filename" class="filename" disabled>--
>
<div
class=
"file_drop"
>
Перетащите файл в данную область
<br/>
или выберите файл с компьютера
</div>
</div>
</div>
<input
type=
"hidden"
name=
"file_name"
id=
'file_name'
value=
""
/>
<?php
echo
Html
::
submitButton
(
'Рассчитать проект'
,
[
'class'
=>
'btn-default save-button'
]);
?>
<?php
ActiveForm
::
end
();
?>
...
...
frontend/views/site/contacts.php
View file @
341ee21a
...
...
@@ -4,6 +4,10 @@ use yii\helpers\Html;
use
\common\models\Settings
;
use
\common\modules\bids\models\Bid
;
use
frontend\assets\FileUploadBundle
;
FileUploadBundle
::
register
(
$this
);
?>
<script
type=
"text/javascript"
>
...
...
@@ -121,21 +125,22 @@ use \common\modules\bids\models\Bid;
'class'
=>
'sect_cont_form__textarea'
])
->
label
(
false
);
?>
<div
class=
"file-upload_block_cs"
>
<div
class=
"file-upload_block_cs
dropzone"
id=
"block_upload
"
>
<div
class=
"file_upload_bt_cs"
>
<div
class=
"file-upload_cs"
>
<label>
<?php
echo
$form
->
field
(
$model
,
'file'
,
[
<?php
/*
echo $form->field($model, 'file', [
'template' => '<div class="row"><div class="col-sm-4">{input}</div></div>'
])
->
fileInput
();
?>
])->fileInput();
*/
?>
<span>
Выбрать файл
</span>
</label>
</div>
<
input
type=
"text"
id=
"filename"
class=
"filename_cs"
disabled
>
<
!--<input type="text" id="filename" class="filename_cs" disabled>--
>
<div
class=
"file_drop_cs"
>
Перетащите файл в данную область
<br/>
или выберите файл с компьютера
</div>
</div>
</div>
<input
type=
"hidden"
name=
"file_name"
id=
'file_name'
value=
""
/>
<?php
echo
Html
::
submitButton
(
'Отправить'
,
[
'class'
=>
'btn-default save-button'
]);
?>
<?php
ActiveForm
::
end
();
?>
...
...
frontend/web/css/dropzone.css
0 → 100644
View file @
341ee21a
/*
* The MIT License
* Copyright (c) 2012 Matias Meno <m@tias.me>
*/
@-webkit-keyframes
passing-through
{
0
%
{
opacity
:
0
;
-webkit-transform
:
translateY
(
40px
);
-moz-transform
:
translateY
(
40px
);
-ms-transform
:
translateY
(
40px
);
-o-transform
:
translateY
(
40px
);
transform
:
translateY
(
40px
);
}
30
%,
70
%
{
opacity
:
1
;
-webkit-transform
:
translateY
(
0px
);
-moz-transform
:
translateY
(
0px
);
-ms-transform
:
translateY
(
0px
);
-o-transform
:
translateY
(
0px
);
transform
:
translateY
(
0px
);
}
100
%
{
opacity
:
0
;
-webkit-transform
:
translateY
(
-40px
);
-moz-transform
:
translateY
(
-40px
);
-ms-transform
:
translateY
(
-40px
);
-o-transform
:
translateY
(
-40px
);
transform
:
translateY
(
-40px
);
}
}
@-moz-keyframes
passing-through
{
0
%
{
opacity
:
0
;
-webkit-transform
:
translateY
(
40px
);
-moz-transform
:
translateY
(
40px
);
-ms-transform
:
translateY
(
40px
);
-o-transform
:
translateY
(
40px
);
transform
:
translateY
(
40px
);
}
30
%,
70
%
{
opacity
:
1
;
-webkit-transform
:
translateY
(
0px
);
-moz-transform
:
translateY
(
0px
);
-ms-transform
:
translateY
(
0px
);
-o-transform
:
translateY
(
0px
);
transform
:
translateY
(
0px
);
}
100
%
{
opacity
:
0
;
-webkit-transform
:
translateY
(
-40px
);
-moz-transform
:
translateY
(
-40px
);
-ms-transform
:
translateY
(
-40px
);
-o-transform
:
translateY
(
-40px
);
transform
:
translateY
(
-40px
);
}
}
@keyframes
passing-through
{
0
%
{
opacity
:
0
;
-webkit-transform
:
translateY
(
40px
);
-moz-transform
:
translateY
(
40px
);
-ms-transform
:
translateY
(
40px
);
-o-transform
:
translateY
(
40px
);
transform
:
translateY
(
40px
);
}
30
%,
70
%
{
opacity
:
1
;
-webkit-transform
:
translateY
(
0px
);
-moz-transform
:
translateY
(
0px
);
-ms-transform
:
translateY
(
0px
);
-o-transform
:
translateY
(
0px
);
transform
:
translateY
(
0px
);
}
100
%
{
opacity
:
0
;
-webkit-transform
:
translateY
(
-40px
);
-moz-transform
:
translateY
(
-40px
);
-ms-transform
:
translateY
(
-40px
);
-o-transform
:
translateY
(
-40px
);
transform
:
translateY
(
-40px
);
}
}
@-webkit-keyframes
slide-in
{
0
%
{
opacity
:
0
;
-webkit-transform
:
translateY
(
40px
);
-moz-transform
:
translateY
(
40px
);
-ms-transform
:
translateY
(
40px
);
-o-transform
:
translateY
(
40px
);
transform
:
translateY
(
40px
);
}
30
%
{
opacity
:
1
;
-webkit-transform
:
translateY
(
0px
);
-moz-transform
:
translateY
(
0px
);
-ms-transform
:
translateY
(
0px
);
-o-transform
:
translateY
(
0px
);
transform
:
translateY
(
0px
);
}
}
@-moz-keyframes
slide-in
{
0
%
{
opacity
:
0
;
-webkit-transform
:
translateY
(
40px
);
-moz-transform
:
translateY
(
40px
);
-ms-transform
:
translateY
(
40px
);
-o-transform
:
translateY
(
40px
);
transform
:
translateY
(
40px
);
}
30
%
{
opacity
:
1
;
-webkit-transform
:
translateY
(
0px
);
-moz-transform
:
translateY
(
0px
);
-ms-transform
:
translateY
(
0px
);
-o-transform
:
translateY
(
0px
);
transform
:
translateY
(
0px
);
}
}
@keyframes
slide-in
{
0
%
{
opacity
:
0
;
-webkit-transform
:
translateY
(
40px
);
-moz-transform
:
translateY
(
40px
);
-ms-transform
:
translateY
(
40px
);
-o-transform
:
translateY
(
40px
);
transform
:
translateY
(
40px
);
}
30
%
{
opacity
:
1
;
-webkit-transform
:
translateY
(
0px
);
-moz-transform
:
translateY
(
0px
);
-ms-transform
:
translateY
(
0px
);
-o-transform
:
translateY
(
0px
);
transform
:
translateY
(
0px
);
}
}
@-webkit-keyframes
pulse
{
0
%
{
-webkit-transform
:
scale
(
1
);
-moz-transform
:
scale
(
1
);
-ms-transform
:
scale
(
1
);
-o-transform
:
scale
(
1
);
transform
:
scale
(
1
);
}
10
%
{
-webkit-transform
:
scale
(
1.1
);
-moz-transform
:
scale
(
1.1
);
-ms-transform
:
scale
(
1.1
);
-o-transform
:
scale
(
1.1
);
transform
:
scale
(
1.1
);
}
20
%
{
-webkit-transform
:
scale
(
1
);
-moz-transform
:
scale
(
1
);
-ms-transform
:
scale
(
1
);
-o-transform
:
scale
(
1
);
transform
:
scale
(
1
);
}
}
@-moz-keyframes
pulse
{
0
%
{
-webkit-transform
:
scale
(
1
);
-moz-transform
:
scale
(
1
);
-ms-transform
:
scale
(
1
);
-o-transform
:
scale
(
1
);
transform
:
scale
(
1
);
}
10
%
{
-webkit-transform
:
scale
(
1.1
);
-moz-transform
:
scale
(
1.1
);
-ms-transform
:
scale
(
1.1
);
-o-transform
:
scale
(
1.1
);
transform
:
scale
(
1.1
);
}
20
%
{
-webkit-transform
:
scale
(
1
);
-moz-transform
:
scale
(
1
);
-ms-transform
:
scale
(
1
);
-o-transform
:
scale
(
1
);
transform
:
scale
(
1
);
}
}
@keyframes
pulse
{
0
%
{
-webkit-transform
:
scale
(
1
);
-moz-transform
:
scale
(
1
);
-ms-transform
:
scale
(
1
);
-o-transform
:
scale
(
1
);
transform
:
scale
(
1
);
}
10
%
{
-webkit-transform
:
scale
(
1.1
);
-moz-transform
:
scale
(
1.1
);
-ms-transform
:
scale
(
1.1
);
-o-transform
:
scale
(
1.1
);
transform
:
scale
(
1.1
);
}
20
%
{
-webkit-transform
:
scale
(
1
);
-moz-transform
:
scale
(
1
);
-ms-transform
:
scale
(
1
);
-o-transform
:
scale
(
1
);
transform
:
scale
(
1
);
}
}
.dropzone
,
.dropzone
*
{
box-sizing
:
border-box
;
}
.dropzone
{
min-height
:
150px
;
border
:
2px
solid
rgba
(
0
,
0
,
0
,
0.3
);
background
:
white
;
padding
:
50px
10px
10px
10px
;
}
.dropzone.dz-clickable
{
cursor
:
pointer
;
}
.dropzone.dz-clickable
*
{
cursor
:
default
;
}
.dropzone.dz-clickable
.dz-message
,
.dropzone.dz-clickable
.dz-message
*
{
cursor
:
pointer
;
}
.dropzone.dz-started
.dz-message
{
display
:
none
;
}
.dropzone.dz-drag-hover
{
border-style
:
solid
;
}
.dropzone.dz-drag-hover
.dz-message
{
opacity
:
0.5
;
}
.dropzone
.dz-message
{
text-align
:
center
;
margin
:
2em
0
;
}
.dropzone
.dz-preview
{
position
:
relative
;
display
:
inline-block
;
vertical-align
:
top
;
margin
:
16px
;
min-height
:
100px
;
}
.dropzone
.dz-preview
:hover
{
z-index
:
1000
;
}
.dropzone
.dz-preview
:hover
.dz-details
{
opacity
:
1
;
}
.dropzone
.dz-preview.dz-file-preview
.dz-image
{
border-radius
:
20px
;
background
:
#999
;
background
:
linear-gradient
(
to
bottom
,
#eee
,
#ddd
);
}
.dropzone
.dz-preview.dz-file-preview
.dz-details
{
opacity
:
1
;
}
.dropzone
.dz-preview.dz-image-preview
{
background
:
white
;
}
.dropzone
.dz-preview.dz-image-preview
.dz-details
{
-webkit-transition
:
opacity
0.2s
linear
;
-moz-transition
:
opacity
0.2s
linear
;
-ms-transition
:
opacity
0.2s
linear
;
-o-transition
:
opacity
0.2s
linear
;
transition
:
opacity
0.2s
linear
;
}
.dropzone
.dz-preview
.dz-remove
{
font-size
:
14px
;
text-align
:
center
;
display
:
block
;
cursor
:
pointer
;
border
:
none
;
}
.dropzone
.dz-preview
.dz-remove
:hover
{
text-decoration
:
underline
;
}
.dropzone
.dz-preview
:hover
.dz-details
{
opacity
:
1
;
}
.dropzone
.dz-preview
.dz-details
{
z-index
:
20
;
position
:
absolute
;
top
:
0
;
left
:
0
;
opacity
:
0
;
font-size
:
13px
;
min-width
:
100%
;
max-width
:
100%
;
padding
:
2em
1em
;
text-align
:
center
;
color
:
rgba
(
0
,
0
,
0
,
0.9
);
line-height
:
150%
;
}
.dropzone
.dz-preview
.dz-details
.dz-size
{
margin-bottom
:
1em
;
font-size
:
16px
;
}
.dropzone
.dz-preview
.dz-details
.dz-filename
{
white-space
:
nowrap
;
}
.dropzone
.dz-preview
.dz-details
.dz-filename
:hover
span
{
border
:
1px
solid
rgba
(
200
,
200
,
200
,
0.8
);
background-color
:
rgba
(
255
,
255
,
255
,
0.8
);
}
.dropzone
.dz-preview
.dz-details
.dz-filename
:not
(
:hover
)
{
overflow
:
hidden
;
text-overflow
:
ellipsis
;
}
.dropzone
.dz-preview
.dz-details
.dz-filename
:not
(
:hover
)
span
{
border
:
1px
solid
transparent
;
}
.dropzone
.dz-preview
.dz-details
.dz-filename
span
,
.dropzone
.dz-preview
.dz-details
.dz-size
span
{
background-color
:
rgba
(
255
,
255
,
255
,
0.4
);
padding
:
0
0.4em
;
border-radius
:
3px
;
}
.dropzone
.dz-preview
:hover
.dz-image
img
{
-webkit-transform
:
scale
(
1.05
,
1.05
);
-moz-transform
:
scale
(
1.05
,
1.05
);
-ms-transform
:
scale
(
1.05
,
1.05
);
-o-transform
:
scale
(
1.05
,
1.05
);
transform
:
scale
(
1.05
,
1.05
);
-webkit-filter
:
blur
(
8px
);
filter
:
blur
(
8px
);
}
.dropzone
.dz-preview
.dz-image
{
border-radius
:
20px
;
overflow
:
hidden
;
width
:
120px
;
height
:
120px
;
position
:
relative
;
display
:
block
;
z-index
:
10
;
}
.dropzone
.dz-preview
.dz-image
img
{
display
:
block
;
}
.dropzone
.dz-preview.dz-success
.dz-success-mark
{
-webkit-animation
:
passing-through
3s
cubic-bezier
(
0.77
,
0
,
0.175
,
1
);
-moz-animation
:
passing-through
3s
cubic-bezier
(
0.77
,
0
,
0.175
,
1
);
-ms-animation
:
passing-through
3s
cubic-bezier
(
0.77
,
0
,
0.175
,
1
);
-o-animation
:
passing-through
3s
cubic-bezier
(
0.77
,
0
,
0.175
,
1
);
animation
:
passing-through
3s
cubic-bezier
(
0.77
,
0
,
0.175
,
1
);
}
.dropzone
.dz-preview.dz-error
.dz-error-mark
{
opacity
:
1
;
-webkit-animation
:
slide-in
3s
cubic-bezier
(
0.77
,
0
,
0.175
,
1
);
-moz-animation
:
slide-in
3s
cubic-bezier
(
0.77
,
0
,
0.175
,
1
);
-ms-animation
:
slide-in
3s
cubic-bezier
(
0.77
,
0
,
0.175
,
1
);
-o-animation
:
slide-in
3s
cubic-bezier
(
0.77
,
0
,
0.175
,
1
);
animation
:
slide-in
3s
cubic-bezier
(
0.77
,
0
,
0.175
,
1
);
}
.dropzone
.dz-preview
.dz-success-mark
,
.dropzone
.dz-preview
.dz-error-mark
{
pointer-events
:
none
;
opacity
:
0
;
z-index
:
500
;
position
:
absolute
;
display
:
block
;
top
:
50%
;
left
:
50%
;
margin-left
:
-27px
;
margin-top
:
-27px
;
}
.dropzone
.dz-preview
.dz-success-mark
svg
,
.dropzone
.dz-preview
.dz-error-mark
svg
{
display
:
block
;
width
:
54px
;
height
:
54px
;
}
.dropzone
.dz-preview.dz-processing
.dz-progress
{
opacity
:
1
;
-webkit-transition
:
all
0.2s
linear
;
-moz-transition
:
all
0.2s
linear
;
-ms-transition
:
all
0.2s
linear
;
-o-transition
:
all
0.2s
linear
;
transition
:
all
0.2s
linear
;
}
.dropzone
.dz-preview.dz-complete
.dz-progress
{
opacity
:
0
;
-webkit-transition
:
opacity
0.4s
ease-in
;
-moz-transition
:
opacity
0.4s
ease-in
;
-ms-transition
:
opacity
0.4s
ease-in
;
-o-transition
:
opacity
0.4s
ease-in
;
transition
:
opacity
0.4s
ease-in
;
}
.dropzone
.dz-preview
:not
(
.dz-processing
)
.dz-progress
{
-webkit-animation
:
pulse
6s
ease
infinite
;
-moz-animation
:
pulse
6s
ease
infinite
;
-ms-animation
:
pulse
6s
ease
infinite
;
-o-animation
:
pulse
6s
ease
infinite
;
animation
:
pulse
6s
ease
infinite
;
}
.dropzone
.dz-preview
.dz-progress
{
opacity
:
1
;
z-index
:
1000
;
pointer-events
:
none
;
position
:
absolute
;
height
:
16px
;
left
:
50%
;
top
:
50%
;
margin-top
:
-8px
;
width
:
80px
;
margin-left
:
-40px
;
background
:
rgba
(
255
,
255
,
255
,
0.9
);
-webkit-transform
:
scale
(
1
);
border-radius
:
8px
;
overflow
:
hidden
;
}
.dropzone
.dz-preview
.dz-progress
.dz-upload
{
background
:
#333
;
background
:
linear-gradient
(
to
bottom
,
#666
,
#444
);
position
:
absolute
;
top
:
0
;
left
:
0
;
bottom
:
0
;
width
:
0
;
-webkit-transition
:
width
300ms
ease-in-out
;
-moz-transition
:
width
300ms
ease-in-out
;
-ms-transition
:
width
300ms
ease-in-out
;
-o-transition
:
width
300ms
ease-in-out
;
transition
:
width
300ms
ease-in-out
;
}
.dropzone
.dz-preview.dz-error
.dz-error-message
{
display
:
block
;
}
.dropzone
.dz-preview.dz-error
:hover
.dz-error-message
{
opacity
:
1
;
pointer-events
:
auto
;
}
.dropzone
.dz-preview
.dz-error-message
{
pointer-events
:
none
;
z-index
:
1000
;
position
:
absolute
;
display
:
block
;
display
:
none
;
opacity
:
0
;
-webkit-transition
:
opacity
0.3s
ease
;
-moz-transition
:
opacity
0.3s
ease
;
-ms-transition
:
opacity
0.3s
ease
;
-o-transition
:
opacity
0.3s
ease
;
transition
:
opacity
0.3s
ease
;
border-radius
:
8px
;
font-size
:
13px
;
top
:
130px
;
left
:
-10px
;
width
:
140px
;
background
:
#be2626
;
background
:
linear-gradient
(
to
bottom
,
#be2626
,
#a92222
);
padding
:
0.5em
1.2em
;
color
:
white
;
}
.dropzone
.dz-preview
.dz-error-message
:after
{
content
:
''
;
position
:
absolute
;
top
:
-6px
;
left
:
64px
;
width
:
0
;
height
:
0
;
border-left
:
6px
solid
transparent
;
border-right
:
6px
solid
transparent
;
border-bottom
:
6px
solid
#be2626
;
}
.dropzone
.file-upload
{
margin-bottom
:
15px
;
}
.dropzone
{
z-index
:
100
;
}
.file_upload_bt
,
.file_upload_bt_cs
{
bottom
:
140px
;
}
\ No newline at end of file
frontend/web/js/dropzone.js
0 → 100644
View file @
341ee21a
/*
*
* More info at [www.dropzonejs.com](http://www.dropzonejs.com)
*
* Copyright (c) 2012, Matias Meno
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
*/
(
function
()
{
var
Dropzone
,
Emitter
,
camelize
,
contentLoaded
,
detectVerticalSquash
,
drawImageIOSFix
,
noop
,
without
,
__slice
=
[].
slice
,
__hasProp
=
{}.
hasOwnProperty
,
__extends
=
function
(
child
,
parent
)
{
for
(
var
key
in
parent
)
{
if
(
__hasProp
.
call
(
parent
,
key
))
child
[
key
]
=
parent
[
key
];
}
function
ctor
()
{
this
.
constructor
=
child
;
}
ctor
.
prototype
=
parent
.
prototype
;
child
.
prototype
=
new
ctor
();
child
.
__super__
=
parent
.
prototype
;
return
child
;
};
noop
=
function
()
{};
Emitter
=
(
function
()
{
function
Emitter
()
{}
Emitter
.
prototype
.
addEventListener
=
Emitter
.
prototype
.
on
;
Emitter
.
prototype
.
on
=
function
(
event
,
fn
)
{
this
.
_callbacks
=
this
.
_callbacks
||
{};
if
(
!
this
.
_callbacks
[
event
])
{
this
.
_callbacks
[
event
]
=
[];
}
this
.
_callbacks
[
event
].
push
(
fn
);
return
this
;
};
Emitter
.
prototype
.
emit
=
function
()
{
var
args
,
callback
,
callbacks
,
event
,
_i
,
_len
;
event
=
arguments
[
0
],
args
=
2
<=
arguments
.
length
?
__slice
.
call
(
arguments
,
1
)
:
[];
this
.
_callbacks
=
this
.
_callbacks
||
{};
callbacks
=
this
.
_callbacks
[
event
];
if
(
callbacks
)
{
for
(
_i
=
0
,
_len
=
callbacks
.
length
;
_i
<
_len
;
_i
++
)
{
callback
=
callbacks
[
_i
];
callback
.
apply
(
this
,
args
);
}
}
return
this
;
};
Emitter
.
prototype
.
removeListener
=
Emitter
.
prototype
.
off
;
Emitter
.
prototype
.
removeAllListeners
=
Emitter
.
prototype
.
off
;
Emitter
.
prototype
.
removeEventListener
=
Emitter
.
prototype
.
off
;
Emitter
.
prototype
.
off
=
function
(
event
,
fn
)
{
var
callback
,
callbacks
,
i
,
_i
,
_len
;
if
(
!
this
.
_callbacks
||
arguments
.
length
===
0
)
{
this
.
_callbacks
=
{};
return
this
;
}
callbacks
=
this
.
_callbacks
[
event
];
if
(
!
callbacks
)
{
return
this
;
}
if
(
arguments
.
length
===
1
)
{
delete
this
.
_callbacks
[
event
];
return
this
;
}
for
(
i
=
_i
=
0
,
_len
=
callbacks
.
length
;
_i
<
_len
;
i
=
++
_i
)
{
callback
=
callbacks
[
i
];
if
(
callback
===
fn
)
{
callbacks
.
splice
(
i
,
1
);
break
;
}
}
return
this
;
};
return
Emitter
;
})();
Dropzone
=
(
function
(
_super
)
{
var
extend
,
resolveOption
;
__extends
(
Dropzone
,
_super
);
Dropzone
.
prototype
.
Emitter
=
Emitter
;
/*
This is a list of all available events you can register on a dropzone object.
You can register an event handler like this:
dropzone.on("dragEnter", function() { });
*/
Dropzone
.
prototype
.
events
=
[
"
drop
"
,
"
dragstart
"
,
"
dragend
"
,
"
dragenter
"
,
"
dragover
"
,
"
dragleave
"
,
"
addedfile
"
,
"
addedfiles
"
,
"
removedfile
"
,
"
thumbnail
"
,
"
error
"
,
"
errormultiple
"
,
"
processing
"
,
"
processingmultiple
"
,
"
uploadprogress
"
,
"
totaluploadprogress
"
,
"
sending
"
,
"
sendingmultiple
"
,
"
success
"
,
"
successmultiple
"
,
"
canceled
"
,
"
canceledmultiple
"
,
"
complete
"
,
"
completemultiple
"
,
"
reset
"
,
"
maxfilesexceeded
"
,
"
maxfilesreached
"
,
"
queuecomplete
"
];
Dropzone
.
prototype
.
defaultOptions
=
{
url
:
null
,
method
:
"
post
"
,
withCredentials
:
false
,
parallelUploads
:
2
,
uploadMultiple
:
false
,
maxFilesize
:
256
,
paramName
:
"
file
"
,
createImageThumbnails
:
true
,
maxThumbnailFilesize
:
10
,
thumbnailWidth
:
120
,
thumbnailHeight
:
120
,
filesizeBase
:
1000
,
maxFiles
:
null
,
params
:
{},
clickable
:
true
,
ignoreHiddenFiles
:
true
,
acceptedFiles
:
null
,
acceptedMimeTypes
:
null
,
autoProcessQueue
:
true
,
autoQueue
:
true
,
addRemoveLinks
:
false
,
previewsContainer
:
null
,
hiddenInputContainer
:
"
body
"
,
capture
:
null
,
renameFilename
:
null
,
dictDefaultMessage
:
"
Drop files here to upload
"
,
dictFallbackMessage
:
"
Your browser does not support drag'n'drop file uploads.
"
,
dictFallbackText
:
"
Please use the fallback form below to upload your files like in the olden days.
"
,
dictFileTooBig
:
"
File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.
"
,
dictInvalidFileType
:
"
You can't upload files of this type.
"
,
dictResponseError
:
"
Server responded with {{statusCode}} code.
"
,
dictCancelUpload
:
"
Cancel upload
"
,
dictCancelUploadConfirmation
:
"
Are you sure you want to cancel this upload?
"
,
dictRemoveFile
:
"
Remove file
"
,
dictRemoveFileConfirmation
:
null
,
dictMaxFilesExceeded
:
"
You can not upload any more files.
"
,
accept
:
function
(
file
,
done
)
{
return
done
();
},
init
:
function
()
{
return
noop
;
},
forceFallback
:
false
,
fallback
:
function
()
{
var
child
,
messageElement
,
span
,
_i
,
_len
,
_ref
;
this
.
element
.
className
=
""
+
this
.
element
.
className
+
"
dz-browser-not-supported
"
;
_ref
=
this
.
element
.
getElementsByTagName
(
"
div
"
);
for
(
_i
=
0
,
_len
=
_ref
.
length
;
_i
<
_len
;
_i
++
)
{
child
=
_ref
[
_i
];
if
(
/
(
^|
)
dz-message
(
$|
)
/
.
test
(
child
.
className
))
{
messageElement
=
child
;
child
.
className
=
"
dz-message
"
;
continue
;
}
}
if
(
!
messageElement
)
{
messageElement
=
Dropzone
.
createElement
(
"
<div class=
\"
dz-message
\"
><span></span></div>
"
);
this
.
element
.
appendChild
(
messageElement
);
}
span
=
messageElement
.
getElementsByTagName
(
"
span
"
)[
0
];
if
(
span
)
{
if
(
span
.
textContent
!=
null
)
{
span
.
textContent
=
this
.
options
.
dictFallbackMessage
;
}
else
if
(
span
.
innerText
!=
null
)
{
span
.
innerText
=
this
.
options
.
dictFallbackMessage
;
}
}
return
this
.
element
.
appendChild
(
this
.
getFallbackForm
());
},
resize
:
function
(
file
)
{
var
info
,
srcRatio
,
trgRatio
;
info
=
{
srcX
:
0
,
srcY
:
0
,
srcWidth
:
file
.
width
,
srcHeight
:
file
.
height
};
srcRatio
=
file
.
width
/
file
.
height
;
info
.
optWidth
=
this
.
options
.
thumbnailWidth
;
info
.
optHeight
=
this
.
options
.
thumbnailHeight
;
if
((
info
.
optWidth
==
null
)
&&
(
info
.
optHeight
==
null
))
{
info
.
optWidth
=
info
.
srcWidth
;
info
.
optHeight
=
info
.
srcHeight
;
}
else
if
(
info
.
optWidth
==
null
)
{
info
.
optWidth
=
srcRatio
*
info
.
optHeight
;
}
else
if
(
info
.
optHeight
==
null
)
{
info
.
optHeight
=
(
1
/
srcRatio
)
*
info
.
optWidth
;
}
trgRatio
=
info
.
optWidth
/
info
.
optHeight
;
if
(
file
.
height
<
info
.
optHeight
||
file
.
width
<
info
.
optWidth
)
{
info
.
trgHeight
=
info
.
srcHeight
;
info
.
trgWidth
=
info
.
srcWidth
;
}
else
{
if
(
srcRatio
>
trgRatio
)
{
info
.
srcHeight
=
file
.
height
;
info
.
srcWidth
=
info
.
srcHeight
*
trgRatio
;
}
else
{
info
.
srcWidth
=
file
.
width
;
info
.
srcHeight
=
info
.
srcWidth
/
trgRatio
;
}
}
info
.
srcX
=
(
file
.
width
-
info
.
srcWidth
)
/
2
;
info
.
srcY
=
(
file
.
height
-
info
.
srcHeight
)
/
2
;
return
info
;
},
/*
Those functions register themselves to the events on init and handle all
the user interface specific stuff. Overwriting them won't break the upload
but can break the way it's displayed.
You can overwrite them if you don't like the default behavior. If you just
want to add an additional event handler, register it on the dropzone object
and don't overwrite those options.
*/
drop
:
function
(
e
)
{
return
this
.
element
.
classList
.
remove
(
"
dz-drag-hover
"
);
},
dragstart
:
noop
,
dragend
:
function
(
e
)
{
return
this
.
element
.
classList
.
remove
(
"
dz-drag-hover
"
);
},
dragenter
:
function
(
e
)
{
return
this
.
element
.
classList
.
add
(
"
dz-drag-hover
"
);
},
dragover
:
function
(
e
)
{
return
this
.
element
.
classList
.
add
(
"
dz-drag-hover
"
);
},
dragleave
:
function
(
e
)
{
return
this
.
element
.
classList
.
remove
(
"
dz-drag-hover
"
);
},
paste
:
noop
,
reset
:
function
()
{
return
this
.
element
.
classList
.
remove
(
"
dz-started
"
);
},
addedfile
:
function
(
file
)
{
var
node
,
removeFileEvent
,
removeLink
,
_i
,
_j
,
_k
,
_len
,
_len1
,
_len2
,
_ref
,
_ref1
,
_ref2
,
_results
;
if
(
this
.
element
===
this
.
previewsContainer
)
{
this
.
element
.
classList
.
add
(
"
dz-started
"
);
}
if
(
this
.
previewsContainer
)
{
file
.
previewElement
=
Dropzone
.
createElement
(
this
.
options
.
previewTemplate
.
trim
());
file
.
previewTemplate
=
file
.
previewElement
;
this
.
previewsContainer
.
appendChild
(
file
.
previewElement
);
_ref
=
file
.
previewElement
.
querySelectorAll
(
"
[data-dz-name]
"
);
for
(
_i
=
0
,
_len
=
_ref
.
length
;
_i
<
_len
;
_i
++
)
{
node
=
_ref
[
_i
];
node
.
textContent
=
this
.
_renameFilename
(
file
.
name
);
}
_ref1
=
file
.
previewElement
.
querySelectorAll
(
"
[data-dz-size]
"
);
for
(
_j
=
0
,
_len1
=
_ref1
.
length
;
_j
<
_len1
;
_j
++
)
{
node
=
_ref1
[
_j
];
node
.
innerHTML
=
this
.
filesize
(
file
.
size
);
}
if
(
this
.
options
.
addRemoveLinks
)
{
file
.
_removeLink
=
Dropzone
.
createElement
(
"
<a class=
\"
dz-remove
\"
href=
\"
javascript:undefined;
\"
data-dz-remove>
"
+
this
.
options
.
dictRemoveFile
+
"
</a>
"
);
file
.
previewElement
.
appendChild
(
file
.
_removeLink
);
}
removeFileEvent
=
(
function
(
_this
)
{
return
function
(
e
)
{
e
.
preventDefault
();
e
.
stopPropagation
();
if
(
file
.
status
===
Dropzone
.
UPLOADING
)
{
return
Dropzone
.
confirm
(
_this
.
options
.
dictCancelUploadConfirmation
,
function
()
{
return
_this
.
removeFile
(
file
);
});
}
else
{
if
(
_this
.
options
.
dictRemoveFileConfirmation
)
{
return
Dropzone
.
confirm
(
_this
.
options
.
dictRemoveFileConfirmation
,
function
()
{
return
_this
.
removeFile
(
file
);
});
}
else
{
return
_this
.
removeFile
(
file
);
}
}
};
})(
this
);
_ref2
=
file
.
previewElement
.
querySelectorAll
(
"
[data-dz-remove]
"
);
_results
=
[];
for
(
_k
=
0
,
_len2
=
_ref2
.
length
;
_k
<
_len2
;
_k
++
)
{
removeLink
=
_ref2
[
_k
];
_results
.
push
(
removeLink
.
addEventListener
(
"
click
"
,
removeFileEvent
));
}
return
_results
;
}
},
removedfile
:
function
(
file
)
{
var
_ref
;
if
(
file
.
previewElement
)
{
if
((
_ref
=
file
.
previewElement
)
!=
null
)
{
_ref
.
parentNode
.
removeChild
(
file
.
previewElement
);
}
}
return
this
.
_updateMaxFilesReachedClass
();
},
thumbnail
:
function
(
file
,
dataUrl
)
{
var
thumbnailElement
,
_i
,
_len
,
_ref
;
if
(
file
.
previewElement
)
{
file
.
previewElement
.
classList
.
remove
(
"
dz-file-preview
"
);
_ref
=
file
.
previewElement
.
querySelectorAll
(
"
[data-dz-thumbnail]
"
);
for
(
_i
=
0
,
_len
=
_ref
.
length
;
_i
<
_len
;
_i
++
)
{
thumbnailElement
=
_ref
[
_i
];
thumbnailElement
.
alt
=
file
.
name
;
thumbnailElement
.
src
=
dataUrl
;
}
return
setTimeout
(((
function
(
_this
)
{
return
function
()
{
return
file
.
previewElement
.
classList
.
add
(
"
dz-image-preview
"
);
};
})(
this
)),
1
);
}
},
error
:
function
(
file
,
message
)
{
var
node
,
_i
,
_len
,
_ref
,
_results
;
if
(
file
.
previewElement
)
{
file
.
previewElement
.
classList
.
add
(
"
dz-error
"
);
if
(
typeof
message
!==
"
String
"
&&
message
.
error
)
{
message
=
message
.
error
;
}
_ref
=
file
.
previewElement
.
querySelectorAll
(
"
[data-dz-errormessage]
"
);
_results
=
[];
for
(
_i
=
0
,
_len
=
_ref
.
length
;
_i
<
_len
;
_i
++
)
{
node
=
_ref
[
_i
];
_results
.
push
(
node
.
textContent
=
message
);
}
return
_results
;
}
},
errormultiple
:
noop
,
processing
:
function
(
file
)
{
if
(
file
.
previewElement
)
{
file
.
previewElement
.
classList
.
add
(
"
dz-processing
"
);
if
(
file
.
_removeLink
)
{
return
file
.
_removeLink
.
textContent
=
this
.
options
.
dictCancelUpload
;
}
}
},
processingmultiple
:
noop
,
uploadprogress
:
function
(
file
,
progress
,
bytesSent
)
{
var
node
,
_i
,
_len
,
_ref
,
_results
;
if
(
file
.
previewElement
)
{
_ref
=
file
.
previewElement
.
querySelectorAll
(
"
[data-dz-uploadprogress]
"
);
_results
=
[];
for
(
_i
=
0
,
_len
=
_ref
.
length
;
_i
<
_len
;
_i
++
)
{
node
=
_ref
[
_i
];
if
(
node
.
nodeName
===
'
PROGRESS
'
)
{
_results
.
push
(
node
.
value
=
progress
);
}
else
{
_results
.
push
(
node
.
style
.
width
=
""
+
progress
+
"
%
"
);
}
}
return
_results
;
}
},
totaluploadprogress
:
noop
,
sending
:
noop
,
sendingmultiple
:
noop
,
success
:
function
(
file
)
{
if
(
file
.
previewElement
)
{
return
file
.
previewElement
.
classList
.
add
(
"
dz-success
"
);
}
},
successmultiple
:
noop
,
canceled
:
function
(
file
)
{
return
this
.
emit
(
"
error
"
,
file
,
"
Upload canceled.
"
);
},
canceledmultiple
:
noop
,
complete
:
function
(
file
)
{
if
(
file
.
_removeLink
)
{
file
.
_removeLink
.
textContent
=
this
.
options
.
dictRemoveFile
;
}
if
(
file
.
previewElement
)
{
return
file
.
previewElement
.
classList
.
add
(
"
dz-complete
"
);
}
},
completemultiple
:
noop
,
maxfilesexceeded
:
noop
,
maxfilesreached
:
noop
,
queuecomplete
:
noop
,
addedfiles
:
noop
,
previewTemplate
:
"
<div class=
\"
dz-preview dz-file-preview
\"
>
\n
<div class=
\"
dz-image
\"
><img data-dz-thumbnail /></div>
\n
<div class=
\"
dz-details
\"
>
\n
<div class=
\"
dz-size
\"
><span data-dz-size></span></div>
\n
<div class=
\"
dz-filename
\"
><span data-dz-name></span></div>
\n
</div>
\n
<div class=
\"
dz-progress
\"
><span class=
\"
dz-upload
\"
data-dz-uploadprogress></span></div>
\n
<div class=
\"
dz-error-message
\"
><span data-dz-errormessage></span></div>
\n
<div class=
\"
dz-success-mark
\"
>
\n
<svg width=
\"
54px
\"
height=
\"
54px
\"
viewBox=
\"
0 0 54 54
\"
version=
\"
1.1
\"
xmlns=
\"
http://www.w3.org/2000/svg
\"
xmlns:xlink=
\"
http://www.w3.org/1999/xlink
\"
xmlns:sketch=
\"
http://www.bohemiancoding.com/sketch/ns
\"
>
\n
<title>Check</title>
\n
<defs></defs>
\n
<g id=
\"
Page-1
\"
stroke=
\"
none
\"
stroke-width=
\"
1
\"
fill=
\"
none
\"
fill-rule=
\"
evenodd
\"
sketch:type=
\"
MSPage
\"
>
\n
<path d=
\"
M23.5,31.8431458 L17.5852419,25.9283877 C16.0248253,24.3679711 13.4910294,24.366835 11.9289322,25.9289322 C10.3700136,27.4878508 10.3665912,30.0234455 11.9283877,31.5852419 L20.4147581,40.0716123 C20.5133999,40.1702541 20.6159315,40.2626649 20.7218615,40.3488435 C22.2835669,41.8725651 24.794234,41.8626202 26.3461564,40.3106978 L43.3106978,23.3461564 C44.8771021,21.7797521 44.8758057,19.2483887 43.3137085,17.6862915 C41.7547899,16.1273729 39.2176035,16.1255422 37.6538436,17.6893022 L23.5,31.8431458 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z
\"
id=
\"
Oval-2
\"
stroke-opacity=
\"
0.198794158
\"
stroke=
\"
#747474
\"
fill-opacity=
\"
0.816519475
\"
fill=
\"
#FFFFFF
\"
sketch:type=
\"
MSShapeGroup
\"
></path>
\n
</g>
\n
</svg>
\n
</div>
\n
<div class=
\"
dz-error-mark
\"
>
\n
<svg width=
\"
54px
\"
height=
\"
54px
\"
viewBox=
\"
0 0 54 54
\"
version=
\"
1.1
\"
xmlns=
\"
http://www.w3.org/2000/svg
\"
xmlns:xlink=
\"
http://www.w3.org/1999/xlink
\"
xmlns:sketch=
\"
http://www.bohemiancoding.com/sketch/ns
\"
>
\n
<title>Error</title>
\n
<defs></defs>
\n
<g id=
\"
Page-1
\"
stroke=
\"
none
\"
stroke-width=
\"
1
\"
fill=
\"
none
\"
fill-rule=
\"
evenodd
\"
sketch:type=
\"
MSPage
\"
>
\n
<g id=
\"
Check-+-Oval-2
\"
sketch:type=
\"
MSLayerGroup
\"
stroke=
\"
#747474
\"
stroke-opacity=
\"
0.198794158
\"
fill=
\"
#FFFFFF
\"
fill-opacity=
\"
0.816519475
\"
>
\n
<path d=
\"
M32.6568542,29 L38.3106978,23.3461564 C39.8771021,21.7797521 39.8758057,19.2483887 38.3137085,17.6862915 C36.7547899,16.1273729 34.2176035,16.1255422 32.6538436,17.6893022 L27,23.3431458 L21.3461564,17.6893022 C19.7823965,16.1255422 17.2452101,16.1273729 15.6862915,17.6862915 C14.1241943,19.2483887 14.1228979,21.7797521 15.6893022,23.3461564 L21.3431458,29 L15.6893022,34.6538436 C14.1228979,36.2202479 14.1241943,38.7516113 15.6862915,40.3137085 C17.2452101,41.8726271 19.7823965,41.8744578 21.3461564,40.3106978 L27,34.6568542 L32.6538436,40.3106978 C34.2176035,41.8744578 36.7547899,41.8726271 38.3137085,40.3137085 C39.8758057,38.7516113 39.8771021,36.2202479 38.3106978,34.6538436 L32.6568542,29 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z
\"
id=
\"
Oval-2
\"
sketch:type=
\"
MSShapeGroup
\"
></path>
\n
</g>
\n
</g>
\n
</svg>
\n
</div>
\n
</div>
"
};
extend
=
function
()
{
var
key
,
object
,
objects
,
target
,
val
,
_i
,
_len
;
target
=
arguments
[
0
],
objects
=
2
<=
arguments
.
length
?
__slice
.
call
(
arguments
,
1
)
:
[];
for
(
_i
=
0
,
_len
=
objects
.
length
;
_i
<
_len
;
_i
++
)
{
object
=
objects
[
_i
];
for
(
key
in
object
)
{
val
=
object
[
key
];
target
[
key
]
=
val
;
}
}
return
target
;
};
function
Dropzone
(
element
,
options
)
{
var
elementOptions
,
fallback
,
_ref
;
this
.
element
=
element
;
this
.
version
=
Dropzone
.
version
;
this
.
defaultOptions
.
previewTemplate
=
this
.
defaultOptions
.
previewTemplate
.
replace
(
/
\n
*/g
,
""
);
this
.
clickableElements
=
[];
this
.
listeners
=
[];
this
.
files
=
[];
if
(
typeof
this
.
element
===
"
string
"
)
{
this
.
element
=
document
.
querySelector
(
this
.
element
);
}
if
(
!
(
this
.
element
&&
(
this
.
element
.
nodeType
!=
null
)))
{
throw
new
Error
(
"
Invalid dropzone element.
"
);
}
if
(
this
.
element
.
dropzone
)
{
throw
new
Error
(
"
Dropzone already attached.
"
);
}
Dropzone
.
instances
.
push
(
this
);
this
.
element
.
dropzone
=
this
;
elementOptions
=
(
_ref
=
Dropzone
.
optionsForElement
(
this
.
element
))
!=
null
?
_ref
:
{};
this
.
options
=
extend
({},
this
.
defaultOptions
,
elementOptions
,
options
!=
null
?
options
:
{});
if
(
this
.
options
.
forceFallback
||
!
Dropzone
.
isBrowserSupported
())
{
return
this
.
options
.
fallback
.
call
(
this
);
}
if
(
this
.
options
.
url
==
null
)
{
this
.
options
.
url
=
this
.
element
.
getAttribute
(
"
action
"
);
}
if
(
!
this
.
options
.
url
)
{
throw
new
Error
(
"
No URL provided.
"
);
}
if
(
this
.
options
.
acceptedFiles
&&
this
.
options
.
acceptedMimeTypes
)
{
throw
new
Error
(
"
You can't provide both 'acceptedFiles' and 'acceptedMimeTypes'. 'acceptedMimeTypes' is deprecated.
"
);
}
if
(
this
.
options
.
acceptedMimeTypes
)
{
this
.
options
.
acceptedFiles
=
this
.
options
.
acceptedMimeTypes
;
delete
this
.
options
.
acceptedMimeTypes
;
}
this
.
options
.
method
=
this
.
options
.
method
.
toUpperCase
();
if
((
fallback
=
this
.
getExistingFallback
())
&&
fallback
.
parentNode
)
{
fallback
.
parentNode
.
removeChild
(
fallback
);
}
if
(
this
.
options
.
previewsContainer
!==
false
)
{
if
(
this
.
options
.
previewsContainer
)
{
this
.
previewsContainer
=
Dropzone
.
getElement
(
this
.
options
.
previewsContainer
,
"
previewsContainer
"
);
}
else
{
this
.
previewsContainer
=
this
.
element
;
}
}
if
(
this
.
options
.
clickable
)
{
if
(
this
.
options
.
clickable
===
true
)
{
this
.
clickableElements
=
[
this
.
element
];
}
else
{
this
.
clickableElements
=
Dropzone
.
getElements
(
this
.
options
.
clickable
,
"
clickable
"
);
}
}
this
.
init
();
}
Dropzone
.
prototype
.
getAcceptedFiles
=
function
()
{
var
file
,
_i
,
_len
,
_ref
,
_results
;
_ref
=
this
.
files
;
_results
=
[];
for
(
_i
=
0
,
_len
=
_ref
.
length
;
_i
<
_len
;
_i
++
)
{
file
=
_ref
[
_i
];
if
(
file
.
accepted
)
{
_results
.
push
(
file
);
}
}
return
_results
;
};
Dropzone
.
prototype
.
getRejectedFiles
=
function
()
{
var
file
,
_i
,
_len
,
_ref
,
_results
;
_ref
=
this
.
files
;
_results
=
[];
for
(
_i
=
0
,
_len
=
_ref
.
length
;
_i
<
_len
;
_i
++
)
{
file
=
_ref
[
_i
];
if
(
!
file
.
accepted
)
{
_results
.
push
(
file
);
}
}
return
_results
;
};
Dropzone
.
prototype
.
getFilesWithStatus
=
function
(
status
)
{
var
file
,
_i
,
_len
,
_ref
,
_results
;
_ref
=
this
.
files
;
_results
=
[];
for
(
_i
=
0
,
_len
=
_ref
.
length
;
_i
<
_len
;
_i
++
)
{
file
=
_ref
[
_i
];
if
(
file
.
status
===
status
)
{
_results
.
push
(
file
);
}
}
return
_results
;
};
Dropzone
.
prototype
.
getQueuedFiles
=
function
()
{
return
this
.
getFilesWithStatus
(
Dropzone
.
QUEUED
);
};
Dropzone
.
prototype
.
getUploadingFiles
=
function
()
{
return
this
.
getFilesWithStatus
(
Dropzone
.
UPLOADING
);
};
Dropzone
.
prototype
.
getAddedFiles
=
function
()
{
return
this
.
getFilesWithStatus
(
Dropzone
.
ADDED
);
};
Dropzone
.
prototype
.
getActiveFiles
=
function
()
{
var
file
,
_i
,
_len
,
_ref
,
_results
;
_ref
=
this
.
files
;
_results
=
[];
for
(
_i
=
0
,
_len
=
_ref
.
length
;
_i
<
_len
;
_i
++
)
{
file
=
_ref
[
_i
];
if
(
file
.
status
===
Dropzone
.
UPLOADING
||
file
.
status
===
Dropzone
.
QUEUED
)
{
_results
.
push
(
file
);
}
}
return
_results
;
};
Dropzone
.
prototype
.
init
=
function
()
{
var
eventName
,
noPropagation
,
setupHiddenFileInput
,
_i
,
_len
,
_ref
,
_ref1
;
if
(
this
.
element
.
tagName
===
"
form
"
)
{
this
.
element
.
setAttribute
(
"
enctype
"
,
"
multipart/form-data
"
);
}
if
(
this
.
element
.
classList
.
contains
(
"
dropzone
"
)
&&
!
this
.
element
.
querySelector
(
"
.dz-message
"
))
{
this
.
element
.
appendChild
(
Dropzone
.
createElement
(
"
<div class=
\"
dz-default dz-message
\"
><span>
"
+
this
.
options
.
dictDefaultMessage
+
"
</span></div>
"
));
}
if
(
this
.
clickableElements
.
length
)
{
setupHiddenFileInput
=
(
function
(
_this
)
{
return
function
()
{
if
(
_this
.
hiddenFileInput
)
{
_this
.
hiddenFileInput
.
parentNode
.
removeChild
(
_this
.
hiddenFileInput
);
}
_this
.
hiddenFileInput
=
document
.
createElement
(
"
input
"
);
_this
.
hiddenFileInput
.
setAttribute
(
"
type
"
,
"
file
"
);
if
((
_this
.
options
.
maxFiles
==
null
)
||
_this
.
options
.
maxFiles
>
1
)
{
_this
.
hiddenFileInput
.
setAttribute
(
"
multiple
"
,
"
multiple
"
);
}
_this
.
hiddenFileInput
.
className
=
"
dz-hidden-input
"
;
if
(
_this
.
options
.
acceptedFiles
!=
null
)
{
_this
.
hiddenFileInput
.
setAttribute
(
"
accept
"
,
_this
.
options
.
acceptedFiles
);
}
if
(
_this
.
options
.
capture
!=
null
)
{
_this
.
hiddenFileInput
.
setAttribute
(
"
capture
"
,
_this
.
options
.
capture
);
}
_this
.
hiddenFileInput
.
style
.
visibility
=
"
hidden
"
;
_this
.
hiddenFileInput
.
style
.
position
=
"
absolute
"
;
_this
.
hiddenFileInput
.
style
.
top
=
"
0
"
;
_this
.
hiddenFileInput
.
style
.
left
=
"
0
"
;
_this
.
hiddenFileInput
.
style
.
height
=
"
0
"
;
_this
.
hiddenFileInput
.
style
.
width
=
"
0
"
;
document
.
querySelector
(
_this
.
options
.
hiddenInputContainer
).
appendChild
(
_this
.
hiddenFileInput
);
return
_this
.
hiddenFileInput
.
addEventListener
(
"
change
"
,
function
()
{
var
file
,
files
,
_i
,
_len
;
files
=
_this
.
hiddenFileInput
.
files
;
if
(
files
.
length
)
{
for
(
_i
=
0
,
_len
=
files
.
length
;
_i
<
_len
;
_i
++
)
{
file
=
files
[
_i
];
_this
.
addFile
(
file
);
}
}
_this
.
emit
(
"
addedfiles
"
,
files
);
return
setupHiddenFileInput
();
});
};
})(
this
);
setupHiddenFileInput
();
}
this
.
URL
=
(
_ref
=
window
.
URL
)
!=
null
?
_ref
:
window
.
webkitURL
;
_ref1
=
this
.
events
;
for
(
_i
=
0
,
_len
=
_ref1
.
length
;
_i
<
_len
;
_i
++
)
{
eventName
=
_ref1
[
_i
];
this
.
on
(
eventName
,
this
.
options
[
eventName
]);
}
this
.
on
(
"
uploadprogress
"
,
(
function
(
_this
)
{
return
function
()
{
return
_this
.
updateTotalUploadProgress
();
};
})(
this
));
this
.
on
(
"
removedfile
"
,
(
function
(
_this
)
{
return
function
()
{
return
_this
.
updateTotalUploadProgress
();
};
})(
this
));
this
.
on
(
"
canceled
"
,
(
function
(
_this
)
{
return
function
(
file
)
{
return
_this
.
emit
(
"
complete
"
,
file
);
};
})(
this
));
this
.
on
(
"
complete
"
,
(
function
(
_this
)
{
return
function
(
file
)
{
if
(
_this
.
getAddedFiles
().
length
===
0
&&
_this
.
getUploadingFiles
().
length
===
0
&&
_this
.
getQueuedFiles
().
length
===
0
)
{
return
setTimeout
((
function
()
{
return
_this
.
emit
(
"
queuecomplete
"
);
}),
0
);
}
};
})(
this
));
noPropagation
=
function
(
e
)
{
e
.
stopPropagation
();
if
(
e
.
preventDefault
)
{
return
e
.
preventDefault
();
}
else
{
return
e
.
returnValue
=
false
;
}
};
this
.
listeners
=
[
{
element
:
this
.
element
,
events
:
{
"
dragstart
"
:
(
function
(
_this
)
{
return
function
(
e
)
{
return
_this
.
emit
(
"
dragstart
"
,
e
);
};
})(
this
),
"
dragenter
"
:
(
function
(
_this
)
{
return
function
(
e
)
{
noPropagation
(
e
);
return
_this
.
emit
(
"
dragenter
"
,
e
);
};
})(
this
),
"
dragover
"
:
(
function
(
_this
)
{
return
function
(
e
)
{
var
efct
;
try
{
efct
=
e
.
dataTransfer
.
effectAllowed
;
}
catch
(
_error
)
{}
e
.
dataTransfer
.
dropEffect
=
'
move
'
===
efct
||
'
linkMove
'
===
efct
?
'
move
'
:
'
copy
'
;
noPropagation
(
e
);
return
_this
.
emit
(
"
dragover
"
,
e
);
};
})(
this
),
"
dragleave
"
:
(
function
(
_this
)
{
return
function
(
e
)
{
return
_this
.
emit
(
"
dragleave
"
,
e
);
};
})(
this
),
"
drop
"
:
(
function
(
_this
)
{
return
function
(
e
)
{
noPropagation
(
e
);
return
_this
.
drop
(
e
);
};
})(
this
),
"
dragend
"
:
(
function
(
_this
)
{
return
function
(
e
)
{
return
_this
.
emit
(
"
dragend
"
,
e
);
};
})(
this
)
}
}
];
this
.
clickableElements
.
forEach
((
function
(
_this
)
{
return
function
(
clickableElement
)
{
return
_this
.
listeners
.
push
({
element
:
clickableElement
,
events
:
{
"
click
"
:
function
(
evt
)
{
if
((
clickableElement
!==
_this
.
element
)
||
(
evt
.
target
===
_this
.
element
||
Dropzone
.
elementInside
(
evt
.
target
,
_this
.
element
.
querySelector
(
"
.dz-message
"
))))
{
_this
.
hiddenFileInput
.
click
();
}
return
true
;
}
}
});
};
})(
this
));
this
.
enable
();
return
this
.
options
.
init
.
call
(
this
);
};
Dropzone
.
prototype
.
destroy
=
function
()
{
var
_ref
;
this
.
disable
();
this
.
removeAllFiles
(
true
);
if
((
_ref
=
this
.
hiddenFileInput
)
!=
null
?
_ref
.
parentNode
:
void
0
)
{
this
.
hiddenFileInput
.
parentNode
.
removeChild
(
this
.
hiddenFileInput
);
this
.
hiddenFileInput
=
null
;
}
delete
this
.
element
.
dropzone
;
return
Dropzone
.
instances
.
splice
(
Dropzone
.
instances
.
indexOf
(
this
),
1
);
};
Dropzone
.
prototype
.
updateTotalUploadProgress
=
function
()
{
var
activeFiles
,
file
,
totalBytes
,
totalBytesSent
,
totalUploadProgress
,
_i
,
_len
,
_ref
;
totalBytesSent
=
0
;
totalBytes
=
0
;
activeFiles
=
this
.
getActiveFiles
();
if
(
activeFiles
.
length
)
{
_ref
=
this
.
getActiveFiles
();
for
(
_i
=
0
,
_len
=
_ref
.
length
;
_i
<
_len
;
_i
++
)
{
file
=
_ref
[
_i
];
totalBytesSent
+=
file
.
upload
.
bytesSent
;
totalBytes
+=
file
.
upload
.
total
;
}
totalUploadProgress
=
100
*
totalBytesSent
/
totalBytes
;
}
else
{
totalUploadProgress
=
100
;
}
return
this
.
emit
(
"
totaluploadprogress
"
,
totalUploadProgress
,
totalBytes
,
totalBytesSent
);
};
Dropzone
.
prototype
.
_getParamName
=
function
(
n
)
{
if
(
typeof
this
.
options
.
paramName
===
"
function
"
)
{
return
this
.
options
.
paramName
(
n
);
}
else
{
return
""
+
this
.
options
.
paramName
+
(
this
.
options
.
uploadMultiple
?
"
[
"
+
n
+
"
]
"
:
""
);
}
};
Dropzone
.
prototype
.
_renameFilename
=
function
(
name
)
{
if
(
typeof
this
.
options
.
renameFilename
!==
"
function
"
)
{
return
name
;
}
return
this
.
options
.
renameFilename
(
name
);
};
Dropzone
.
prototype
.
getFallbackForm
=
function
()
{
var
existingFallback
,
fields
,
fieldsString
,
form
;
if
(
existingFallback
=
this
.
getExistingFallback
())
{
return
existingFallback
;
}
fieldsString
=
"
<div class=
\"
dz-fallback
\"
>
"
;
if
(
this
.
options
.
dictFallbackText
)
{
fieldsString
+=
"
<p>
"
+
this
.
options
.
dictFallbackText
+
"
</p>
"
;
}
fieldsString
+=
"
<input type=
\"
file
\"
name=
\"
"
+
(
this
.
_getParamName
(
0
))
+
"
\"
"
+
(
this
.
options
.
uploadMultiple
?
'
multiple="multiple"
'
:
void
0
)
+
"
/><input type=
\"
submit
\"
value=
\"
Upload!
\"
></div>
"
;
fields
=
Dropzone
.
createElement
(
fieldsString
);
if
(
this
.
element
.
tagName
!==
"
FORM
"
)
{
form
=
Dropzone
.
createElement
(
"
<form action=
\"
"
+
this
.
options
.
url
+
"
\"
enctype=
\"
multipart/form-data
\"
method=
\"
"
+
this
.
options
.
method
+
"
\"
></form>
"
);
form
.
appendChild
(
fields
);
}
else
{
this
.
element
.
setAttribute
(
"
enctype
"
,
"
multipart/form-data
"
);
this
.
element
.
setAttribute
(
"
method
"
,
this
.
options
.
method
);
}
return
form
!=
null
?
form
:
fields
;
};
Dropzone
.
prototype
.
getExistingFallback
=
function
()
{
var
fallback
,
getFallback
,
tagName
,
_i
,
_len
,
_ref
;
getFallback
=
function
(
elements
)
{
var
el
,
_i
,
_len
;
for
(
_i
=
0
,
_len
=
elements
.
length
;
_i
<
_len
;
_i
++
)
{
el
=
elements
[
_i
];
if
(
/
(
^|
)
fallback
(
$|
)
/
.
test
(
el
.
className
))
{
return
el
;
}
}
};
_ref
=
[
"
div
"
,
"
form
"
];
for
(
_i
=
0
,
_len
=
_ref
.
length
;
_i
<
_len
;
_i
++
)
{
tagName
=
_ref
[
_i
];
if
(
fallback
=
getFallback
(
this
.
element
.
getElementsByTagName
(
tagName
)))
{
return
fallback
;
}
}
};
Dropzone
.
prototype
.
setupEventListeners
=
function
()
{
var
elementListeners
,
event
,
listener
,
_i
,
_len
,
_ref
,
_results
;
_ref
=
this
.
listeners
;
_results
=
[];
for
(
_i
=
0
,
_len
=
_ref
.
length
;
_i
<
_len
;
_i
++
)
{
elementListeners
=
_ref
[
_i
];
_results
.
push
((
function
()
{
var
_ref1
,
_results1
;
_ref1
=
elementListeners
.
events
;
_results1
=
[];
for
(
event
in
_ref1
)
{
listener
=
_ref1
[
event
];
_results1
.
push
(
elementListeners
.
element
.
addEventListener
(
event
,
listener
,
false
));
}
return
_results1
;
})());
}
return
_results
;
};
Dropzone
.
prototype
.
removeEventListeners
=
function
()
{
var
elementListeners
,
event
,
listener
,
_i
,
_len
,
_ref
,
_results
;
_ref
=
this
.
listeners
;
_results
=
[];
for
(
_i
=
0
,
_len
=
_ref
.
length
;
_i
<
_len
;
_i
++
)
{
elementListeners
=
_ref
[
_i
];
_results
.
push
((
function
()
{
var
_ref1
,
_results1
;
_ref1
=
elementListeners
.
events
;
_results1
=
[];
for
(
event
in
_ref1
)
{
listener
=
_ref1
[
event
];
_results1
.
push
(
elementListeners
.
element
.
removeEventListener
(
event
,
listener
,
false
));
}
return
_results1
;
})());
}
return
_results
;
};
Dropzone
.
prototype
.
disable
=
function
()
{
var
file
,
_i
,
_len
,
_ref
,
_results
;
this
.
clickableElements
.
forEach
(
function
(
element
)
{
return
element
.
classList
.
remove
(
"
dz-clickable
"
);
});
this
.
removeEventListeners
();
_ref
=
this
.
files
;
_results
=
[];
for
(
_i
=
0
,
_len
=
_ref
.
length
;
_i
<
_len
;
_i
++
)
{
file
=
_ref
[
_i
];
_results
.
push
(
this
.
cancelUpload
(
file
));
}
return
_results
;
};
Dropzone
.
prototype
.
enable
=
function
()
{
this
.
clickableElements
.
forEach
(
function
(
element
)
{
return
element
.
classList
.
add
(
"
dz-clickable
"
);
});
return
this
.
setupEventListeners
();
};
Dropzone
.
prototype
.
filesize
=
function
(
size
)
{
var
cutoff
,
i
,
selectedSize
,
selectedUnit
,
unit
,
units
,
_i
,
_len
;
selectedSize
=
0
;
selectedUnit
=
"
b
"
;
if
(
size
>
0
)
{
units
=
[
'
TB
'
,
'
GB
'
,
'
MB
'
,
'
KB
'
,
'
b
'
];
for
(
i
=
_i
=
0
,
_len
=
units
.
length
;
_i
<
_len
;
i
=
++
_i
)
{
unit
=
units
[
i
];
cutoff
=
Math
.
pow
(
this
.
options
.
filesizeBase
,
4
-
i
)
/
10
;
if
(
size
>=
cutoff
)
{
selectedSize
=
size
/
Math
.
pow
(
this
.
options
.
filesizeBase
,
4
-
i
);
selectedUnit
=
unit
;
break
;
}
}
selectedSize
=
Math
.
round
(
10
*
selectedSize
)
/
10
;
}
return
"
<strong>
"
+
selectedSize
+
"
</strong>
"
+
selectedUnit
;
};
Dropzone
.
prototype
.
_updateMaxFilesReachedClass
=
function
()
{
if
((
this
.
options
.
maxFiles
!=
null
)
&&
this
.
getAcceptedFiles
().
length
>=
this
.
options
.
maxFiles
)
{
if
(
this
.
getAcceptedFiles
().
length
===
this
.
options
.
maxFiles
)
{
this
.
emit
(
'
maxfilesreached
'
,
this
.
files
);
}
return
this
.
element
.
classList
.
add
(
"
dz-max-files-reached
"
);
}
else
{
return
this
.
element
.
classList
.
remove
(
"
dz-max-files-reached
"
);
}
};
Dropzone
.
prototype
.
drop
=
function
(
e
)
{
var
files
,
items
;
if
(
!
e
.
dataTransfer
)
{
return
;
}
this
.
emit
(
"
drop
"
,
e
);
files
=
e
.
dataTransfer
.
files
;
this
.
emit
(
"
addedfiles
"
,
files
);
if
(
files
.
length
)
{
items
=
e
.
dataTransfer
.
items
;
if
(
items
&&
items
.
length
&&
(
items
[
0
].
webkitGetAsEntry
!=
null
))
{
this
.
_addFilesFromItems
(
items
);
}
else
{
this
.
handleFiles
(
files
);
}
}
};
Dropzone
.
prototype
.
paste
=
function
(
e
)
{
var
items
,
_ref
;
if
((
e
!=
null
?
(
_ref
=
e
.
clipboardData
)
!=
null
?
_ref
.
items
:
void
0
:
void
0
)
==
null
)
{
return
;
}
this
.
emit
(
"
paste
"
,
e
);
items
=
e
.
clipboardData
.
items
;
if
(
items
.
length
)
{
return
this
.
_addFilesFromItems
(
items
);
}
};
Dropzone
.
prototype
.
handleFiles
=
function
(
files
)
{
var
file
,
_i
,
_len
,
_results
;
_results
=
[];
for
(
_i
=
0
,
_len
=
files
.
length
;
_i
<
_len
;
_i
++
)
{
file
=
files
[
_i
];
_results
.
push
(
this
.
addFile
(
file
));
}
return
_results
;
};
Dropzone
.
prototype
.
_addFilesFromItems
=
function
(
items
)
{
var
entry
,
item
,
_i
,
_len
,
_results
;
_results
=
[];
for
(
_i
=
0
,
_len
=
items
.
length
;
_i
<
_len
;
_i
++
)
{
item
=
items
[
_i
];
if
((
item
.
webkitGetAsEntry
!=
null
)
&&
(
entry
=
item
.
webkitGetAsEntry
()))
{
if
(
entry
.
isFile
)
{
_results
.
push
(
this
.
addFile
(
item
.
getAsFile
()));
}
else
if
(
entry
.
isDirectory
)
{
_results
.
push
(
this
.
_addFilesFromDirectory
(
entry
,
entry
.
name
));
}
else
{
_results
.
push
(
void
0
);
}
}
else
if
(
item
.
getAsFile
!=
null
)
{
if
((
item
.
kind
==
null
)
||
item
.
kind
===
"
file
"
)
{
_results
.
push
(
this
.
addFile
(
item
.
getAsFile
()));
}
else
{
_results
.
push
(
void
0
);
}
}
else
{
_results
.
push
(
void
0
);
}
}
return
_results
;
};
Dropzone
.
prototype
.
_addFilesFromDirectory
=
function
(
directory
,
path
)
{
var
dirReader
,
errorHandler
,
readEntries
;
dirReader
=
directory
.
createReader
();
errorHandler
=
function
(
error
)
{
return
typeof
console
!==
"
undefined
"
&&
console
!==
null
?
typeof
console
.
log
===
"
function
"
?
console
.
log
(
error
)
:
void
0
:
void
0
;
};
readEntries
=
(
function
(
_this
)
{
return
function
()
{
return
dirReader
.
readEntries
(
function
(
entries
)
{
var
entry
,
_i
,
_len
;
if
(
entries
.
length
>
0
)
{
for
(
_i
=
0
,
_len
=
entries
.
length
;
_i
<
_len
;
_i
++
)
{
entry
=
entries
[
_i
];
if
(
entry
.
isFile
)
{
entry
.
file
(
function
(
file
)
{
if
(
_this
.
options
.
ignoreHiddenFiles
&&
file
.
name
.
substring
(
0
,
1
)
===
'
.
'
)
{
return
;
}
file
.
fullPath
=
""
+
path
+
"
/
"
+
file
.
name
;
return
_this
.
addFile
(
file
);
});
}
else
if
(
entry
.
isDirectory
)
{
_this
.
_addFilesFromDirectory
(
entry
,
""
+
path
+
"
/
"
+
entry
.
name
);
}
}
readEntries
();
}
return
null
;
},
errorHandler
);
};
})(
this
);
return
readEntries
();
};
Dropzone
.
prototype
.
accept
=
function
(
file
,
done
)
{
if
(
file
.
size
>
this
.
options
.
maxFilesize
*
1024
*
1024
)
{
return
done
(
this
.
options
.
dictFileTooBig
.
replace
(
"
{{filesize}}
"
,
Math
.
round
(
file
.
size
/
1024
/
10.24
)
/
100
).
replace
(
"
{{maxFilesize}}
"
,
this
.
options
.
maxFilesize
));
}
else
if
(
!
Dropzone
.
isValidFile
(
file
,
this
.
options
.
acceptedFiles
))
{
return
done
(
this
.
options
.
dictInvalidFileType
);
}
else
if
((
this
.
options
.
maxFiles
!=
null
)
&&
this
.
getAcceptedFiles
().
length
>=
this
.
options
.
maxFiles
)
{
done
(
this
.
options
.
dictMaxFilesExceeded
.
replace
(
"
{{maxFiles}}
"
,
this
.
options
.
maxFiles
));
return
this
.
emit
(
"
maxfilesexceeded
"
,
file
);
}
else
{
return
this
.
options
.
accept
.
call
(
this
,
file
,
done
);
}
};
Dropzone
.
prototype
.
addFile
=
function
(
file
)
{
file
.
upload
=
{
progress
:
0
,
total
:
file
.
size
,
bytesSent
:
0
};
this
.
files
.
push
(
file
);
file
.
status
=
Dropzone
.
ADDED
;
this
.
emit
(
"
addedfile
"
,
file
);
this
.
_enqueueThumbnail
(
file
);
return
this
.
accept
(
file
,
(
function
(
_this
)
{
return
function
(
error
)
{
if
(
error
)
{
file
.
accepted
=
false
;
_this
.
_errorProcessing
([
file
],
error
);
}
else
{
file
.
accepted
=
true
;
if
(
_this
.
options
.
autoQueue
)
{
_this
.
enqueueFile
(
file
);
}
}
return
_this
.
_updateMaxFilesReachedClass
();
};
})(
this
));
};
Dropzone
.
prototype
.
enqueueFiles
=
function
(
files
)
{
var
file
,
_i
,
_len
;
for
(
_i
=
0
,
_len
=
files
.
length
;
_i
<
_len
;
_i
++
)
{
file
=
files
[
_i
];
this
.
enqueueFile
(
file
);
}
return
null
;
};
Dropzone
.
prototype
.
enqueueFile
=
function
(
file
)
{
if
(
file
.
status
===
Dropzone
.
ADDED
&&
file
.
accepted
===
true
)
{
file
.
status
=
Dropzone
.
QUEUED
;
if
(
this
.
options
.
autoProcessQueue
)
{
return
setTimeout
(((
function
(
_this
)
{
return
function
()
{
return
_this
.
processQueue
();
};
})(
this
)),
0
);
}
}
else
{
throw
new
Error
(
"
This file can't be queued because it has already been processed or was rejected.
"
);
}
};
Dropzone
.
prototype
.
_thumbnailQueue
=
[];
Dropzone
.
prototype
.
_processingThumbnail
=
false
;
Dropzone
.
prototype
.
_enqueueThumbnail
=
function
(
file
)
{
if
(
this
.
options
.
createImageThumbnails
&&
file
.
type
.
match
(
/image.*/
)
&&
file
.
size
<=
this
.
options
.
maxThumbnailFilesize
*
1024
*
1024
)
{
this
.
_thumbnailQueue
.
push
(
file
);
return
setTimeout
(((
function
(
_this
)
{
return
function
()
{
return
_this
.
_processThumbnailQueue
();
};
})(
this
)),
0
);
}
};
Dropzone
.
prototype
.
_processThumbnailQueue
=
function
()
{
if
(
this
.
_processingThumbnail
||
this
.
_thumbnailQueue
.
length
===
0
)
{
return
;
}
this
.
_processingThumbnail
=
true
;
return
this
.
createThumbnail
(
this
.
_thumbnailQueue
.
shift
(),
(
function
(
_this
)
{
return
function
()
{
_this
.
_processingThumbnail
=
false
;
return
_this
.
_processThumbnailQueue
();
};
})(
this
));
};
Dropzone
.
prototype
.
removeFile
=
function
(
file
)
{
if
(
file
.
status
===
Dropzone
.
UPLOADING
)
{
this
.
cancelUpload
(
file
);
}
this
.
files
=
without
(
this
.
files
,
file
);
this
.
emit
(
"
removedfile
"
,
file
);
if
(
this
.
files
.
length
===
0
)
{
return
this
.
emit
(
"
reset
"
);
}
};
Dropzone
.
prototype
.
removeAllFiles
=
function
(
cancelIfNecessary
)
{
var
file
,
_i
,
_len
,
_ref
;
if
(
cancelIfNecessary
==
null
)
{
cancelIfNecessary
=
false
;
}
_ref
=
this
.
files
.
slice
();
for
(
_i
=
0
,
_len
=
_ref
.
length
;
_i
<
_len
;
_i
++
)
{
file
=
_ref
[
_i
];
if
(
file
.
status
!==
Dropzone
.
UPLOADING
||
cancelIfNecessary
)
{
this
.
removeFile
(
file
);
}
}
return
null
;
};
Dropzone
.
prototype
.
createThumbnail
=
function
(
file
,
callback
)
{
var
fileReader
;
fileReader
=
new
FileReader
;
fileReader
.
onload
=
(
function
(
_this
)
{
return
function
()
{
if
(
file
.
type
===
"
image/svg+xml
"
)
{
_this
.
emit
(
"
thumbnail
"
,
file
,
fileReader
.
result
);
if
(
callback
!=
null
)
{
callback
();
}
return
;
}
return
_this
.
createThumbnailFromUrl
(
file
,
fileReader
.
result
,
callback
);
};
})(
this
);
return
fileReader
.
readAsDataURL
(
file
);
};
Dropzone
.
prototype
.
createThumbnailFromUrl
=
function
(
file
,
imageUrl
,
callback
,
crossOrigin
)
{
var
img
;
img
=
document
.
createElement
(
"
img
"
);
if
(
crossOrigin
)
{
img
.
crossOrigin
=
crossOrigin
;
}
img
.
onload
=
(
function
(
_this
)
{
return
function
()
{
var
canvas
,
ctx
,
resizeInfo
,
thumbnail
,
_ref
,
_ref1
,
_ref2
,
_ref3
;
file
.
width
=
img
.
width
;
file
.
height
=
img
.
height
;
resizeInfo
=
_this
.
options
.
resize
.
call
(
_this
,
file
);
if
(
resizeInfo
.
trgWidth
==
null
)
{
resizeInfo
.
trgWidth
=
resizeInfo
.
optWidth
;
}
if
(
resizeInfo
.
trgHeight
==
null
)
{
resizeInfo
.
trgHeight
=
resizeInfo
.
optHeight
;
}
canvas
=
document
.
createElement
(
"
canvas
"
);
ctx
=
canvas
.
getContext
(
"
2d
"
);
canvas
.
width
=
resizeInfo
.
trgWidth
;
canvas
.
height
=
resizeInfo
.
trgHeight
;
drawImageIOSFix
(
ctx
,
img
,
(
_ref
=
resizeInfo
.
srcX
)
!=
null
?
_ref
:
0
,
(
_ref1
=
resizeInfo
.
srcY
)
!=
null
?
_ref1
:
0
,
resizeInfo
.
srcWidth
,
resizeInfo
.
srcHeight
,
(
_ref2
=
resizeInfo
.
trgX
)
!=
null
?
_ref2
:
0
,
(
_ref3
=
resizeInfo
.
trgY
)
!=
null
?
_ref3
:
0
,
resizeInfo
.
trgWidth
,
resizeInfo
.
trgHeight
);
thumbnail
=
canvas
.
toDataURL
(
"
image/png
"
);
_this
.
emit
(
"
thumbnail
"
,
file
,
thumbnail
);
if
(
callback
!=
null
)
{
return
callback
();
}
};
})(
this
);
if
(
callback
!=
null
)
{
img
.
onerror
=
callback
;
}
return
img
.
src
=
imageUrl
;
};
Dropzone
.
prototype
.
processQueue
=
function
()
{
var
i
,
parallelUploads
,
processingLength
,
queuedFiles
;
parallelUploads
=
this
.
options
.
parallelUploads
;
processingLength
=
this
.
getUploadingFiles
().
length
;
i
=
processingLength
;
if
(
processingLength
>=
parallelUploads
)
{
return
;
}
queuedFiles
=
this
.
getQueuedFiles
();
if
(
!
(
queuedFiles
.
length
>
0
))
{
return
;
}
if
(
this
.
options
.
uploadMultiple
)
{
return
this
.
processFiles
(
queuedFiles
.
slice
(
0
,
parallelUploads
-
processingLength
));
}
else
{
while
(
i
<
parallelUploads
)
{
if
(
!
queuedFiles
.
length
)
{
return
;
}
this
.
processFile
(
queuedFiles
.
shift
());
i
++
;
}
}
};
Dropzone
.
prototype
.
processFile
=
function
(
file
)
{
return
this
.
processFiles
([
file
]);
};
Dropzone
.
prototype
.
processFiles
=
function
(
files
)
{
var
file
,
_i
,
_len
;
for
(
_i
=
0
,
_len
=
files
.
length
;
_i
<
_len
;
_i
++
)
{
file
=
files
[
_i
];
file
.
processing
=
true
;
file
.
status
=
Dropzone
.
UPLOADING
;
this
.
emit
(
"
processing
"
,
file
);
}
if
(
this
.
options
.
uploadMultiple
)
{
this
.
emit
(
"
processingmultiple
"
,
files
);
}
return
this
.
uploadFiles
(
files
);
};
Dropzone
.
prototype
.
_getFilesWithXhr
=
function
(
xhr
)
{
var
file
,
files
;
return
files
=
(
function
()
{
var
_i
,
_len
,
_ref
,
_results
;
_ref
=
this
.
files
;
_results
=
[];
for
(
_i
=
0
,
_len
=
_ref
.
length
;
_i
<
_len
;
_i
++
)
{
file
=
_ref
[
_i
];
if
(
file
.
xhr
===
xhr
)
{
_results
.
push
(
file
);
}
}
return
_results
;
}).
call
(
this
);
};
Dropzone
.
prototype
.
cancelUpload
=
function
(
file
)
{
var
groupedFile
,
groupedFiles
,
_i
,
_j
,
_len
,
_len1
,
_ref
;
if
(
file
.
status
===
Dropzone
.
UPLOADING
)
{
groupedFiles
=
this
.
_getFilesWithXhr
(
file
.
xhr
);
for
(
_i
=
0
,
_len
=
groupedFiles
.
length
;
_i
<
_len
;
_i
++
)
{
groupedFile
=
groupedFiles
[
_i
];
groupedFile
.
status
=
Dropzone
.
CANCELED
;
}
file
.
xhr
.
abort
();
for
(
_j
=
0
,
_len1
=
groupedFiles
.
length
;
_j
<
_len1
;
_j
++
)
{
groupedFile
=
groupedFiles
[
_j
];
this
.
emit
(
"
canceled
"
,
groupedFile
);
}
if
(
this
.
options
.
uploadMultiple
)
{
this
.
emit
(
"
canceledmultiple
"
,
groupedFiles
);
}
}
else
if
((
_ref
=
file
.
status
)
===
Dropzone
.
ADDED
||
_ref
===
Dropzone
.
QUEUED
)
{
file
.
status
=
Dropzone
.
CANCELED
;
this
.
emit
(
"
canceled
"
,
file
);
if
(
this
.
options
.
uploadMultiple
)
{
this
.
emit
(
"
canceledmultiple
"
,
[
file
]);
}
}
if
(
this
.
options
.
autoProcessQueue
)
{
return
this
.
processQueue
();
}
};
resolveOption
=
function
()
{
var
args
,
option
;
option
=
arguments
[
0
],
args
=
2
<=
arguments
.
length
?
__slice
.
call
(
arguments
,
1
)
:
[];
if
(
typeof
option
===
'
function
'
)
{
return
option
.
apply
(
this
,
args
);
}
return
option
;
};
Dropzone
.
prototype
.
uploadFile
=
function
(
file
)
{
return
this
.
uploadFiles
([
file
]);
};
Dropzone
.
prototype
.
uploadFiles
=
function
(
files
)
{
var
file
,
formData
,
handleError
,
headerName
,
headerValue
,
headers
,
i
,
input
,
inputName
,
inputType
,
key
,
method
,
option
,
progressObj
,
response
,
updateProgress
,
url
,
value
,
xhr
,
_i
,
_j
,
_k
,
_l
,
_len
,
_len1
,
_len2
,
_len3
,
_m
,
_ref
,
_ref1
,
_ref2
,
_ref3
,
_ref4
,
_ref5
;
xhr
=
new
XMLHttpRequest
();
for
(
_i
=
0
,
_len
=
files
.
length
;
_i
<
_len
;
_i
++
)
{
file
=
files
[
_i
];
file
.
xhr
=
xhr
;
}
method
=
resolveOption
(
this
.
options
.
method
,
files
);
url
=
resolveOption
(
this
.
options
.
url
,
files
);
xhr
.
open
(
method
,
url
,
true
);
xhr
.
withCredentials
=
!!
this
.
options
.
withCredentials
;
response
=
null
;
handleError
=
(
function
(
_this
)
{
return
function
()
{
var
_j
,
_len1
,
_results
;
_results
=
[];
for
(
_j
=
0
,
_len1
=
files
.
length
;
_j
<
_len1
;
_j
++
)
{
file
=
files
[
_j
];
_results
.
push
(
_this
.
_errorProcessing
(
files
,
response
||
_this
.
options
.
dictResponseError
.
replace
(
"
{{statusCode}}
"
,
xhr
.
status
),
xhr
));
}
return
_results
;
};
})(
this
);
updateProgress
=
(
function
(
_this
)
{
return
function
(
e
)
{
var
allFilesFinished
,
progress
,
_j
,
_k
,
_l
,
_len1
,
_len2
,
_len3
,
_results
;
if
(
e
!=
null
)
{
progress
=
100
*
e
.
loaded
/
e
.
total
;
for
(
_j
=
0
,
_len1
=
files
.
length
;
_j
<
_len1
;
_j
++
)
{
file
=
files
[
_j
];
file
.
upload
=
{
progress
:
progress
,
total
:
e
.
total
,
bytesSent
:
e
.
loaded
};
}
}
else
{
allFilesFinished
=
true
;
progress
=
100
;
for
(
_k
=
0
,
_len2
=
files
.
length
;
_k
<
_len2
;
_k
++
)
{
file
=
files
[
_k
];
if
(
!
(
file
.
upload
.
progress
===
100
&&
file
.
upload
.
bytesSent
===
file
.
upload
.
total
))
{
allFilesFinished
=
false
;
}
file
.
upload
.
progress
=
progress
;
file
.
upload
.
bytesSent
=
file
.
upload
.
total
;
}
if
(
allFilesFinished
)
{
return
;
}
}
_results
=
[];
for
(
_l
=
0
,
_len3
=
files
.
length
;
_l
<
_len3
;
_l
++
)
{
file
=
files
[
_l
];
_results
.
push
(
_this
.
emit
(
"
uploadprogress
"
,
file
,
progress
,
file
.
upload
.
bytesSent
));
}
return
_results
;
};
})(
this
);
xhr
.
onload
=
(
function
(
_this
)
{
return
function
(
e
)
{
var
_ref
;
if
(
files
[
0
].
status
===
Dropzone
.
CANCELED
)
{
return
;
}
if
(
xhr
.
readyState
!==
4
)
{
return
;
}
response
=
xhr
.
responseText
;
if
(
xhr
.
getResponseHeader
(
"
content-type
"
)
&&
~
xhr
.
getResponseHeader
(
"
content-type
"
).
indexOf
(
"
application/json
"
))
{
try
{
response
=
JSON
.
parse
(
response
);
}
catch
(
_error
)
{
e
=
_error
;
response
=
"
Invalid JSON response from server.
"
;
}
}
updateProgress
();
if
(
!
((
200
<=
(
_ref
=
xhr
.
status
)
&&
_ref
<
300
)))
{
return
handleError
();
}
else
{
return
_this
.
_finished
(
files
,
response
,
e
);
}
};
})(
this
);
xhr
.
onerror
=
(
function
(
_this
)
{
return
function
()
{
if
(
files
[
0
].
status
===
Dropzone
.
CANCELED
)
{
return
;
}
return
handleError
();
};
})(
this
);
progressObj
=
(
_ref
=
xhr
.
upload
)
!=
null
?
_ref
:
xhr
;
progressObj
.
onprogress
=
updateProgress
;
headers
=
{
"
Accept
"
:
"
application/json
"
,
"
Cache-Control
"
:
"
no-cache
"
,
"
X-Requested-With
"
:
"
XMLHttpRequest
"
};
if
(
this
.
options
.
headers
)
{
extend
(
headers
,
this
.
options
.
headers
);
}
for
(
headerName
in
headers
)
{
headerValue
=
headers
[
headerName
];
if
(
headerValue
)
{
xhr
.
setRequestHeader
(
headerName
,
headerValue
);
}
}
formData
=
new
FormData
();
if
(
this
.
options
.
params
)
{
_ref1
=
this
.
options
.
params
;
for
(
key
in
_ref1
)
{
value
=
_ref1
[
key
];
formData
.
append
(
key
,
value
);
}
}
for
(
_j
=
0
,
_len1
=
files
.
length
;
_j
<
_len1
;
_j
++
)
{
file
=
files
[
_j
];
this
.
emit
(
"
sending
"
,
file
,
xhr
,
formData
);
}
if
(
this
.
options
.
uploadMultiple
)
{
this
.
emit
(
"
sendingmultiple
"
,
files
,
xhr
,
formData
);
}
if
(
this
.
element
.
tagName
===
"
FORM
"
)
{
_ref2
=
this
.
element
.
querySelectorAll
(
"
input, textarea, select, button
"
);
for
(
_k
=
0
,
_len2
=
_ref2
.
length
;
_k
<
_len2
;
_k
++
)
{
input
=
_ref2
[
_k
];
inputName
=
input
.
getAttribute
(
"
name
"
);
inputType
=
input
.
getAttribute
(
"
type
"
);
if
(
input
.
tagName
===
"
SELECT
"
&&
input
.
hasAttribute
(
"
multiple
"
))
{
_ref3
=
input
.
options
;
for
(
_l
=
0
,
_len3
=
_ref3
.
length
;
_l
<
_len3
;
_l
++
)
{
option
=
_ref3
[
_l
];
if
(
option
.
selected
)
{
formData
.
append
(
inputName
,
option
.
value
);
}
}
}
else
if
(
!
inputType
||
((
_ref4
=
inputType
.
toLowerCase
())
!==
"
checkbox
"
&&
_ref4
!==
"
radio
"
)
||
input
.
checked
)
{
formData
.
append
(
inputName
,
input
.
value
);
}
}
}
for
(
i
=
_m
=
0
,
_ref5
=
files
.
length
-
1
;
0
<=
_ref5
?
_m
<=
_ref5
:
_m
>=
_ref5
;
i
=
0
<=
_ref5
?
++
_m
:
--
_m
)
{
formData
.
append
(
this
.
_getParamName
(
i
),
files
[
i
],
this
.
_renameFilename
(
files
[
i
].
name
));
}
return
this
.
submitRequest
(
xhr
,
formData
,
files
);
};
Dropzone
.
prototype
.
submitRequest
=
function
(
xhr
,
formData
,
files
)
{
return
xhr
.
send
(
formData
);
};
Dropzone
.
prototype
.
_finished
=
function
(
files
,
responseText
,
e
)
{
var
file
,
_i
,
_len
;
for
(
_i
=
0
,
_len
=
files
.
length
;
_i
<
_len
;
_i
++
)
{
file
=
files
[
_i
];
file
.
status
=
Dropzone
.
SUCCESS
;
this
.
emit
(
"
success
"
,
file
,
responseText
,
e
);
this
.
emit
(
"
complete
"
,
file
);
}
if
(
this
.
options
.
uploadMultiple
)
{
this
.
emit
(
"
successmultiple
"
,
files
,
responseText
,
e
);
this
.
emit
(
"
completemultiple
"
,
files
);
}
if
(
this
.
options
.
autoProcessQueue
)
{
return
this
.
processQueue
();
}
};
Dropzone
.
prototype
.
_errorProcessing
=
function
(
files
,
message
,
xhr
)
{
var
file
,
_i
,
_len
;
for
(
_i
=
0
,
_len
=
files
.
length
;
_i
<
_len
;
_i
++
)
{
file
=
files
[
_i
];
file
.
status
=
Dropzone
.
ERROR
;
this
.
emit
(
"
error
"
,
file
,
message
,
xhr
);
this
.
emit
(
"
complete
"
,
file
);
}
if
(
this
.
options
.
uploadMultiple
)
{
this
.
emit
(
"
errormultiple
"
,
files
,
message
,
xhr
);
this
.
emit
(
"
completemultiple
"
,
files
);
}
if
(
this
.
options
.
autoProcessQueue
)
{
return
this
.
processQueue
();
}
};
return
Dropzone
;
})(
Emitter
);
Dropzone
.
version
=
"
4.3.0
"
;
Dropzone
.
options
=
{};
Dropzone
.
optionsForElement
=
function
(
element
)
{
if
(
element
.
getAttribute
(
"
id
"
))
{
return
Dropzone
.
options
[
camelize
(
element
.
getAttribute
(
"
id
"
))];
}
else
{
return
void
0
;
}
};
Dropzone
.
instances
=
[];
Dropzone
.
forElement
=
function
(
element
)
{
if
(
typeof
element
===
"
string
"
)
{
element
=
document
.
querySelector
(
element
);
}
if
((
element
!=
null
?
element
.
dropzone
:
void
0
)
==
null
)
{
throw
new
Error
(
"
No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone.
"
);
}
return
element
.
dropzone
;
};
Dropzone
.
autoDiscover
=
true
;
Dropzone
.
discover
=
function
()
{
var
checkElements
,
dropzone
,
dropzones
,
_i
,
_len
,
_results
;
if
(
document
.
querySelectorAll
)
{
dropzones
=
document
.
querySelectorAll
(
"
.dropzone
"
);
}
else
{
dropzones
=
[];
checkElements
=
function
(
elements
)
{
var
el
,
_i
,
_len
,
_results
;
_results
=
[];
for
(
_i
=
0
,
_len
=
elements
.
length
;
_i
<
_len
;
_i
++
)
{
el
=
elements
[
_i
];
if
(
/
(
^|
)
dropzone
(
$|
)
/
.
test
(
el
.
className
))
{
_results
.
push
(
dropzones
.
push
(
el
));
}
else
{
_results
.
push
(
void
0
);
}
}
return
_results
;
};
checkElements
(
document
.
getElementsByTagName
(
"
div
"
));
checkElements
(
document
.
getElementsByTagName
(
"
form
"
));
}
_results
=
[];
for
(
_i
=
0
,
_len
=
dropzones
.
length
;
_i
<
_len
;
_i
++
)
{
dropzone
=
dropzones
[
_i
];
if
(
Dropzone
.
optionsForElement
(
dropzone
)
!==
false
)
{
_results
.
push
(
new
Dropzone
(
dropzone
));
}
else
{
_results
.
push
(
void
0
);
}
}
return
_results
;
};
Dropzone
.
blacklistedBrowsers
=
[
/opera.*Macintosh.*version
\/
12/i
];
Dropzone
.
isBrowserSupported
=
function
()
{
var
capableBrowser
,
regex
,
_i
,
_len
,
_ref
;
capableBrowser
=
true
;
if
(
window
.
File
&&
window
.
FileReader
&&
window
.
FileList
&&
window
.
Blob
&&
window
.
FormData
&&
document
.
querySelector
)
{
if
(
!
(
"
classList
"
in
document
.
createElement
(
"
a
"
)))
{
capableBrowser
=
false
;
}
else
{
_ref
=
Dropzone
.
blacklistedBrowsers
;
for
(
_i
=
0
,
_len
=
_ref
.
length
;
_i
<
_len
;
_i
++
)
{
regex
=
_ref
[
_i
];
if
(
regex
.
test
(
navigator
.
userAgent
))
{
capableBrowser
=
false
;
continue
;
}
}
}
}
else
{
capableBrowser
=
false
;
}
return
capableBrowser
;
};
without
=
function
(
list
,
rejectedItem
)
{
var
item
,
_i
,
_len
,
_results
;
_results
=
[];
for
(
_i
=
0
,
_len
=
list
.
length
;
_i
<
_len
;
_i
++
)
{
item
=
list
[
_i
];
if
(
item
!==
rejectedItem
)
{
_results
.
push
(
item
);
}
}
return
_results
;
};
camelize
=
function
(
str
)
{
return
str
.
replace
(
/
[\-
_
](\w)
/g
,
function
(
match
)
{
return
match
.
charAt
(
1
).
toUpperCase
();
});
};
Dropzone
.
createElement
=
function
(
string
)
{
var
div
;
div
=
document
.
createElement
(
"
div
"
);
div
.
innerHTML
=
string
;
return
div
.
childNodes
[
0
];
};
Dropzone
.
elementInside
=
function
(
element
,
container
)
{
if
(
element
===
container
)
{
return
true
;
}
while
(
element
=
element
.
parentNode
)
{
if
(
element
===
container
)
{
return
true
;
}
}
return
false
;
};
Dropzone
.
getElement
=
function
(
el
,
name
)
{
var
element
;
if
(
typeof
el
===
"
string
"
)
{
element
=
document
.
querySelector
(
el
);
}
else
if
(
el
.
nodeType
!=
null
)
{
element
=
el
;
}
if
(
element
==
null
)
{
throw
new
Error
(
"
Invalid `
"
+
name
+
"
` option provided. Please provide a CSS selector or a plain HTML element.
"
);
}
return
element
;
};
Dropzone
.
getElements
=
function
(
els
,
name
)
{
var
e
,
el
,
elements
,
_i
,
_j
,
_len
,
_len1
,
_ref
;
if
(
els
instanceof
Array
)
{
elements
=
[];
try
{
for
(
_i
=
0
,
_len
=
els
.
length
;
_i
<
_len
;
_i
++
)
{
el
=
els
[
_i
];
elements
.
push
(
this
.
getElement
(
el
,
name
));
}
}
catch
(
_error
)
{
e
=
_error
;
elements
=
null
;
}
}
else
if
(
typeof
els
===
"
string
"
)
{
elements
=
[];
_ref
=
document
.
querySelectorAll
(
els
);
for
(
_j
=
0
,
_len1
=
_ref
.
length
;
_j
<
_len1
;
_j
++
)
{
el
=
_ref
[
_j
];
elements
.
push
(
el
);
}
}
else
if
(
els
.
nodeType
!=
null
)
{
elements
=
[
els
];
}
if
(
!
((
elements
!=
null
)
&&
elements
.
length
))
{
throw
new
Error
(
"
Invalid `
"
+
name
+
"
` option provided. Please provide a CSS selector, a plain HTML element or a list of those.
"
);
}
return
elements
;
};
Dropzone
.
confirm
=
function
(
question
,
accepted
,
rejected
)
{
if
(
window
.
confirm
(
question
))
{
return
accepted
();
}
else
if
(
rejected
!=
null
)
{
return
rejected
();
}
};
Dropzone
.
isValidFile
=
function
(
file
,
acceptedFiles
)
{
var
baseMimeType
,
mimeType
,
validType
,
_i
,
_len
;
if
(
!
acceptedFiles
)
{
return
true
;
}
acceptedFiles
=
acceptedFiles
.
split
(
"
,
"
);
mimeType
=
file
.
type
;
baseMimeType
=
mimeType
.
replace
(
/
\/
.*$/
,
""
);
for
(
_i
=
0
,
_len
=
acceptedFiles
.
length
;
_i
<
_len
;
_i
++
)
{
validType
=
acceptedFiles
[
_i
];
validType
=
validType
.
trim
();
if
(
validType
.
charAt
(
0
)
===
"
.
"
)
{
if
(
file
.
name
.
toLowerCase
().
indexOf
(
validType
.
toLowerCase
(),
file
.
name
.
length
-
validType
.
length
)
!==
-
1
)
{
return
true
;
}
}
else
if
(
/
\/\*
$/
.
test
(
validType
))
{
if
(
baseMimeType
===
validType
.
replace
(
/
\/
.*$/
,
""
))
{
return
true
;
}
}
else
{
if
(
mimeType
===
validType
)
{
return
true
;
}
}
}
return
false
;
};
if
(
typeof
jQuery
!==
"
undefined
"
&&
jQuery
!==
null
)
{
jQuery
.
fn
.
dropzone
=
function
(
options
)
{
return
this
.
each
(
function
()
{
return
new
Dropzone
(
this
,
options
);
});
};
}
if
(
typeof
module
!==
"
undefined
"
&&
module
!==
null
)
{
module
.
exports
=
Dropzone
;
}
else
{
window
.
Dropzone
=
Dropzone
;
}
Dropzone
.
ADDED
=
"
added
"
;
Dropzone
.
QUEUED
=
"
queued
"
;
Dropzone
.
ACCEPTED
=
Dropzone
.
QUEUED
;
Dropzone
.
UPLOADING
=
"
uploading
"
;
Dropzone
.
PROCESSING
=
Dropzone
.
UPLOADING
;
Dropzone
.
CANCELED
=
"
canceled
"
;
Dropzone
.
ERROR
=
"
error
"
;
Dropzone
.
SUCCESS
=
"
success
"
;
/*
Bugfix for iOS 6 and 7
Source: http://stackoverflow.com/questions/11929099/html5-canvas-drawimage-ratio-bug-ios
based on the work of https://github.com/stomita/ios-imagefile-megapixel
*/
detectVerticalSquash
=
function
(
img
)
{
var
alpha
,
canvas
,
ctx
,
data
,
ey
,
ih
,
iw
,
py
,
ratio
,
sy
;
iw
=
img
.
naturalWidth
;
ih
=
img
.
naturalHeight
;
canvas
=
document
.
createElement
(
"
canvas
"
);
canvas
.
width
=
1
;
canvas
.
height
=
ih
;
ctx
=
canvas
.
getContext
(
"
2d
"
);
ctx
.
drawImage
(
img
,
0
,
0
);
data
=
ctx
.
getImageData
(
0
,
0
,
1
,
ih
).
data
;
sy
=
0
;
ey
=
ih
;
py
=
ih
;
while
(
py
>
sy
)
{
alpha
=
data
[(
py
-
1
)
*
4
+
3
];
if
(
alpha
===
0
)
{
ey
=
py
;
}
else
{
sy
=
py
;
}
py
=
(
ey
+
sy
)
>>
1
;
}
ratio
=
py
/
ih
;
if
(
ratio
===
0
)
{
return
1
;
}
else
{
return
ratio
;
}
};
drawImageIOSFix
=
function
(
ctx
,
img
,
sx
,
sy
,
sw
,
sh
,
dx
,
dy
,
dw
,
dh
)
{
var
vertSquashRatio
;
vertSquashRatio
=
detectVerticalSquash
(
img
);
return
ctx
.
drawImage
(
img
,
sx
,
sy
,
sw
,
sh
,
dx
,
dy
,
dw
,
dh
/
vertSquashRatio
);
};
/*
* contentloaded.js
*
* Author: Diego Perini (diego.perini at gmail.com)
* Summary: cross-browser wrapper for DOMContentLoaded
* Updated: 20101020
* License: MIT
* Version: 1.2
*
* URL:
* http://javascript.nwbox.com/ContentLoaded/
* http://javascript.nwbox.com/ContentLoaded/MIT-LICENSE
*/
contentLoaded
=
function
(
win
,
fn
)
{
var
add
,
doc
,
done
,
init
,
poll
,
pre
,
rem
,
root
,
top
;
done
=
false
;
top
=
true
;
doc
=
win
.
document
;
root
=
doc
.
documentElement
;
add
=
(
doc
.
addEventListener
?
"
addEventListener
"
:
"
attachEvent
"
);
rem
=
(
doc
.
addEventListener
?
"
removeEventListener
"
:
"
detachEvent
"
);
pre
=
(
doc
.
addEventListener
?
""
:
"
on
"
);
init
=
function
(
e
)
{
if
(
e
.
type
===
"
readystatechange
"
&&
doc
.
readyState
!==
"
complete
"
)
{
return
;
}
(
e
.
type
===
"
load
"
?
win
:
doc
)[
rem
](
pre
+
e
.
type
,
init
,
false
);
if
(
!
done
&&
(
done
=
true
))
{
return
fn
.
call
(
win
,
e
.
type
||
e
);
}
};
poll
=
function
()
{
var
e
;
try
{
root
.
doScroll
(
"
left
"
);
}
catch
(
_error
)
{
e
=
_error
;
setTimeout
(
poll
,
50
);
return
;
}
return
init
(
"
poll
"
);
};
if
(
doc
.
readyState
!==
"
complete
"
)
{
if
(
doc
.
createEventObject
&&
root
.
doScroll
)
{
try
{
top
=
!
win
.
frameElement
;
}
catch
(
_error
)
{}
if
(
top
)
{
poll
();
}
}
doc
[
add
](
pre
+
"
DOMContentLoaded
"
,
init
,
false
);
doc
[
add
](
pre
+
"
readystatechange
"
,
init
,
false
);
return
win
[
add
](
pre
+
"
load
"
,
init
,
false
);
}
};
Dropzone
.
_autoDiscoverFunction
=
function
()
{
if
(
Dropzone
.
autoDiscover
)
{
return
Dropzone
.
discover
();
}
};
contentLoaded
(
window
,
Dropzone
.
_autoDiscoverFunction
);
}).
call
(
this
);
\ No newline at end of file
frontend/web/js/upload-files.js
0 → 100644
View file @
341ee21a
$
(
document
).
ready
(
function
()
{
// Dropzone class:
// var myDropzone = new Dropzone("div#block_upload", {url: "/bids/bid/upload-files", maxFiles: 1});
Dropzone
.
options
.
blockUpload
=
{
url
:
"
/bids/bid/upload-files
"
,
maxFiles
:
1
,
addRemoveLinks
:
true
,
dictRemoveFile
:
'
Удалить
'
,
/*accept: function(file, done) {
$('#file_name').val(file.name);
done();
},*/
success
:
function
(
first
,
response
)
{
$
(
'
#file_name
'
).
val
(
response
);
}
};
});
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment