- unvendor dropzone and upgrade it from 4.2.0 to 5.7.0 - make `csrf` available on window.configtags/v1.12.0-dev
} | } | ||||
} | } | ||||
}, | }, | ||||
"dropzone": { | |||||
"version": "5.7.0", | |||||
"resolved": "https://registry.npmjs.org/dropzone/-/dropzone-5.7.0.tgz", | |||||
"integrity": "sha512-kOltiZXH5cO/72I22JjE+w6BoT6uaVLfWdFMsi1PMKFkU6BZWpqRwjnsRm0o6ANGTBuZar5Piu7m/CbKqRPiYg==" | |||||
}, | |||||
"duplexer2": { | "duplexer2": { | ||||
"version": "0.0.2", | "version": "0.0.2", | ||||
"resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", | "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", |
"dependencies": { | "dependencies": { | ||||
"@primer/octicons": "9.4.0", | "@primer/octicons": "9.4.0", | ||||
"clipboard": "2.0.4", | "clipboard": "2.0.4", | ||||
"dropzone": "5.7.0", | |||||
"fomantic-ui": "2.8.4", | "fomantic-ui": "2.8.4", | ||||
"highlight.js": "9.18.1", | "highlight.js": "9.18.1", | ||||
"jquery": "3.4.1", | "jquery": "3.4.1", |
<td><a href="https://github.com/Ranks/emojify.js/archive/1.1.0.tar.gz">emojify-1.1.0.tar.gz</a></td> | <td><a href="https://github.com/Ranks/emojify.js/archive/1.1.0.tar.gz">emojify-1.1.0.tar.gz</a></td> | ||||
</tr> | </tr> | ||||
<tr> | <tr> | ||||
<td><a href="./plugins/dropzone/dropzone.js">dropzone.js</a></td> | |||||
<td><a href="https://github.com/enyo/dropzone/blob/master/LICENSE">Expat</a></td> | |||||
<td><a href="https://github.com/enyo/dropzone/archive/v4.2.0.tar.gz">dropzone.js-4.2.0.tar.gz</a></td> | |||||
<td><a href="./js/dropzone.js">dropzone.js</a></td> | |||||
<td><a href="https://github.com/enyo/dropzone/blob/master/LICENSE">MIT</a></td> | |||||
<td><a href="https://github.com/enyo/dropzone/archive/master.tar.gz">dropzone-master.tar.gz</a></td> | |||||
</tr> | </tr> | ||||
<tr> | <tr> | ||||
<td><a href="./highlight.js">highlight.js</a></td> | <td><a href="./highlight.js">highlight.js</a></td> |
(c) Copyright 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. |
/* | |||||
* 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: 20px 20px; } | |||||
.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; } |
) | ) | ||||
func renderAttachmentSettings(ctx *context.Context) { | func renderAttachmentSettings(ctx *context.Context) { | ||||
ctx.Data["RequireDropzone"] = true | |||||
ctx.Data["IsAttachmentEnabled"] = setting.AttachmentEnabled | ctx.Data["IsAttachmentEnabled"] = setting.AttachmentEnabled | ||||
ctx.Data["AttachmentAllowedTypes"] = setting.AttachmentAllowedTypes | ctx.Data["AttachmentAllowedTypes"] = setting.AttachmentAllowedTypes | ||||
ctx.Data["AttachmentMaxSize"] = setting.AttachmentMaxSize | ctx.Data["AttachmentMaxSize"] = setting.AttachmentMaxSize |
} | } | ||||
func renderUploadSettings(ctx *context.Context) { | func renderUploadSettings(ctx *context.Context) { | ||||
ctx.Data["RequireDropzone"] = true | |||||
ctx.Data["RequireTribute"] = true | ctx.Data["RequireTribute"] = true | ||||
ctx.Data["RequireSimpleMDE"] = true | ctx.Data["RequireSimpleMDE"] = true | ||||
ctx.Data["UploadAllowedTypes"] = strings.Join(setting.Repository.Upload.AllowedTypes, ",") | ctx.Data["UploadAllowedTypes"] = strings.Join(setting.Repository.Upload.AllowedTypes, ",") |
} | } | ||||
ctx.Data["RequireHighlightJS"] = true | ctx.Data["RequireHighlightJS"] = true | ||||
ctx.Data["RequireDropzone"] = true | |||||
ctx.Data["RequireTribute"] = true | ctx.Data["RequireTribute"] = true | ||||
ctx.Data["RequireSimpleMDE"] = true | ctx.Data["RequireSimpleMDE"] = true | ||||
renderAttachmentSettings(ctx) | renderAttachmentSettings(ctx) |
{{if .RequireDatetimepicker}} | {{if .RequireDatetimepicker}} | ||||
<script src="{{StaticUrlPrefix}}/vendor/plugins/jquery.datetimepicker/jquery.datetimepicker.js"></script> | <script src="{{StaticUrlPrefix}}/vendor/plugins/jquery.datetimepicker/jquery.datetimepicker.js"></script> | ||||
{{end}} | {{end}} | ||||
{{if .RequireDropzone}} | |||||
<script src="{{StaticUrlPrefix}}/vendor/plugins/dropzone/dropzone.js"></script> | |||||
{{end}} | |||||
{{if .RequireU2F}} | {{if .RequireU2F}} | ||||
<script src="{{StaticUrlPrefix}}/vendor/plugins/u2f/index.js"></script> | <script src="{{StaticUrlPrefix}}/vendor/plugins/u2f/index.js"></script> | ||||
{{end}} | {{end}} |
window.config = { | window.config = { | ||||
AppSubUrl: '{{AppSubUrl}}', | AppSubUrl: '{{AppSubUrl}}', | ||||
StaticUrlPrefix: '{{StaticUrlPrefix}}', | StaticUrlPrefix: '{{StaticUrlPrefix}}', | ||||
csrf: '{{.CsrfToken}}', | |||||
Datetimepicker: {{if .RequireDatetimepicker}}true{{else}}false{{end}}, | Datetimepicker: {{if .RequireDatetimepicker}}true{{else}}false{{end}}, | ||||
Dropzone: {{if .RequireDropzone}}true{{else}}false{{end}}, | |||||
HighlightJS: {{if .RequireHighlightJS}}true{{else}}false{{end}}, | HighlightJS: {{if .RequireHighlightJS}}true{{else}}false{{end}}, | ||||
Minicolors: {{if .RequireMinicolors}}true{{else}}false{{end}}, | Minicolors: {{if .RequireMinicolors}}true{{else}}false{{end}}, | ||||
SimpleMDE: {{if .RequireSimpleMDE}}true{{else}}false{{end}}, | SimpleMDE: {{if .RequireSimpleMDE}}true{{else}}false{{end}}, | ||||
{{end}} | {{end}} | ||||
{{if .RequireDatetimepicker}} | {{if .RequireDatetimepicker}} | ||||
<link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/jquery.datetimepicker/jquery.datetimepicker.css"> | <link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/jquery.datetimepicker/jquery.datetimepicker.css"> | ||||
{{end}} | |||||
{{if .RequireDropzone}} | |||||
<link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/dropzone/dropzone.css"> | |||||
{{end}} | {{end}} | ||||
<style class="list-search-style"></style> | <style class="list-search-style"></style> | ||||
{{if .PageIsUserProfile}} | {{if .PageIsUserProfile}} |
'{{StaticUrlPrefix}}/js/jquery.js?v={{MD5 AppVer}}', | '{{StaticUrlPrefix}}/js/jquery.js?v={{MD5 AppVer}}', | ||||
'{{StaticUrlPrefix}}/js/swagger.js?v={{MD5 AppVer}}', | '{{StaticUrlPrefix}}/js/swagger.js?v={{MD5 AppVer}}', | ||||
'{{StaticUrlPrefix}}/js/userheatmap.js', | '{{StaticUrlPrefix}}/js/userheatmap.js', | ||||
'{{StaticUrlPrefix}}/js/dropzone.js', | |||||
'{{StaticUrlPrefix}}/vendor/plugins/codemirror/addon/mode/loadmode.js', | '{{StaticUrlPrefix}}/vendor/plugins/codemirror/addon/mode/loadmode.js', | ||||
'{{StaticUrlPrefix}}/vendor/plugins/codemirror/mode/meta.js', | '{{StaticUrlPrefix}}/vendor/plugins/codemirror/mode/meta.js', | ||||
'{{StaticUrlPrefix}}/vendor/plugins/dropzone/dropzone.js', | '{{StaticUrlPrefix}}/vendor/plugins/dropzone/dropzone.js', | ||||
'{{StaticUrlPrefix}}/css/index.css?v={{MD5 AppVer}}', | '{{StaticUrlPrefix}}/css/index.css?v={{MD5 AppVer}}', | ||||
'{{StaticUrlPrefix}}/css/swagger.css?v={{MD5 AppVer}}', | '{{StaticUrlPrefix}}/css/swagger.css?v={{MD5 AppVer}}', | ||||
'{{StaticUrlPrefix}}/css/userheatmap.css', | '{{StaticUrlPrefix}}/css/userheatmap.css', | ||||
'{{StaticUrlPrefix}}/css/dropzone.css', | |||||
'{{StaticUrlPrefix}}/fomantic/semantic.min.css?v={{MD5 AppVer}}', | '{{StaticUrlPrefix}}/fomantic/semantic.min.css?v={{MD5 AppVer}}', | ||||
'{{StaticUrlPrefix}}/vendor/assets/font-awesome/css/font-awesome.min.css', | '{{StaticUrlPrefix}}/vendor/assets/font-awesome/css/font-awesome.min.css', | ||||
'{{StaticUrlPrefix}}/vendor/plugins/dropzone/dropzone.css', | '{{StaticUrlPrefix}}/vendor/plugins/dropzone/dropzone.css', |
export default async function createDropzone(el, opts) { | |||||
const [{ default: Dropzone }] = await Promise.all([ | |||||
import(/* webpackChunkName: "dropzone" */'dropzone'), | |||||
import(/* webpackChunkName: "dropzone" */'dropzone/dist/dropzone.css'), | |||||
]); | |||||
Dropzone.autoDiscover = false; | |||||
return new Dropzone(el, opts); | |||||
} |
import initGitGraph from './features/gitGraph.js'; | import initGitGraph from './features/gitGraph.js'; | ||||
import initClipboard from './features/clipboard.js'; | import initClipboard from './features/clipboard.js'; | ||||
import initUserHeatmap from './features/userHeatmap.js'; | import initUserHeatmap from './features/userHeatmap.js'; | ||||
import createDropzone from './features/dropzone.js'; | |||||
import ActivityTopAuthors from './components/ActivityTopAuthors.vue'; | import ActivityTopAuthors from './components/ActivityTopAuthors.vue'; | ||||
const { AppSubUrl, StaticUrlPrefix } = window.config; | |||||
const { AppSubUrl, StaticUrlPrefix, csrf } = window.config; | |||||
function htmlEncode(text) { | function htmlEncode(text) { | ||||
return jQuery('<div />').text(text).html(); | return jQuery('<div />').text(text).html(); | ||||
} | } | ||||
let csrf; | |||||
let previewFileModes; | let previewFileModes; | ||||
let simpleMDEditor; | let simpleMDEditor; | ||||
const commentMDEditors = {}; | const commentMDEditors = {}; | ||||
let codeMirrorEditor; | let codeMirrorEditor; | ||||
let hljs; | let hljs; | ||||
// Disable Dropzone auto-discover because it's manually initialized | |||||
if (typeof (Dropzone) !== 'undefined') { | |||||
Dropzone.autoDiscover = false; | |||||
} | |||||
// Silence fomantic's error logging when tabs are used without a target content element | // Silence fomantic's error logging when tabs are used without a target content element | ||||
$.fn.tab.settings.silent = true; | $.fn.tab.settings.silent = true; | ||||
}); | }); | ||||
// Edit issue or comment content | // Edit issue or comment content | ||||
$('.edit-content').click(function (event) { | |||||
$('.edit-content').click(async function (event) { | |||||
$(this).closest('.dropdown').find('.menu').toggle('visible'); | $(this).closest('.dropdown').find('.menu').toggle('visible'); | ||||
const $segment = $(this).closest('.header').next(); | const $segment = $(this).closest('.header').next(); | ||||
const $editContentZone = $segment.find('.edit-content-zone'); | const $editContentZone = $segment.find('.edit-content-zone'); | ||||
issuesTribute.attach($textarea.get()); | issuesTribute.attach($textarea.get()); | ||||
emojiTribute.attach($textarea.get()); | emojiTribute.attach($textarea.get()); | ||||
let dz; | |||||
const $dropzone = $editContentZone.find('.dropzone'); | const $dropzone = $editContentZone.find('.dropzone'); | ||||
$dropzone.data('saved', false); | |||||
const $files = $editContentZone.find('.comment-files'); | const $files = $editContentZone.find('.comment-files'); | ||||
if ($dropzone.length > 0) { | if ($dropzone.length > 0) { | ||||
$dropzone.data('saved', false); | |||||
const filenameDict = {}; | const filenameDict = {}; | ||||
$dropzone.dropzone({ | |||||
dz = await createDropzone($dropzone[0], { | |||||
url: $dropzone.data('upload-url'), | url: $dropzone.data('upload-url'), | ||||
headers: { 'X-Csrf-Token': csrf }, | headers: { 'X-Csrf-Token': csrf }, | ||||
maxFiles: $dropzone.data('max-file'), | maxFiles: $dropzone.data('max-file'), | ||||
}); | }); | ||||
this.on('reload', () => { | this.on('reload', () => { | ||||
$.getJSON($editContentZone.data('attachment-url'), (data) => { | $.getJSON($editContentZone.data('attachment-url'), (data) => { | ||||
const drop = $dropzone.get(0).dropzone; | |||||
drop.removeAllFiles(true); | |||||
dz.removeAllFiles(true); | |||||
$files.empty(); | $files.empty(); | ||||
$.each(data, function () { | $.each(data, function () { | ||||
const imgSrc = `${$dropzone.data('upload-url')}/${this.uuid}`; | const imgSrc = `${$dropzone.data('upload-url')}/${this.uuid}`; | ||||
drop.emit('addedfile', this); | |||||
drop.emit('thumbnail', this, imgSrc); | |||||
drop.emit('complete', this); | |||||
drop.files.push(this); | |||||
dz.emit('addedfile', this); | |||||
dz.emit('thumbnail', this, imgSrc); | |||||
dz.emit('complete', this); | |||||
dz.files.push(this); | |||||
filenameDict[this.name] = { | filenameDict[this.name] = { | ||||
submitted: true, | submitted: true, | ||||
uuid: this.uuid | uuid: this.uuid | ||||
}); | }); | ||||
} | } | ||||
}); | }); | ||||
$dropzone.get(0).dropzone.emit('reload'); | |||||
dz.emit('reload'); | |||||
} | } | ||||
// Give new write/preview data-tab name to distinguish from others | // Give new write/preview data-tab name to distinguish from others | ||||
const $editContentForm = $editContentZone.find('.ui.comment.form'); | const $editContentForm = $editContentZone.find('.ui.comment.form'); | ||||
$editContentZone.find('.cancel.button').click(() => { | $editContentZone.find('.cancel.button').click(() => { | ||||
$renderContent.show(); | $renderContent.show(); | ||||
$editContentZone.hide(); | $editContentZone.hide(); | ||||
$dropzone.get(0).dropzone.emit('reload'); | |||||
dz.emit('reload'); | |||||
}); | }); | ||||
$editContentZone.find('.save.button').click(() => { | $editContentZone.find('.save.button').click(() => { | ||||
$renderContent.show(); | $renderContent.show(); | ||||
} else { | } else { | ||||
$content.find('.ui.small.images').html(data.attachments); | $content.find('.ui.small.images').html(data.attachments); | ||||
} | } | ||||
$dropzone.get(0).dropzone.emit('submit'); | |||||
$dropzone.get(0).dropzone.emit('reload'); | |||||
dz.emit('submit'); | |||||
dz.emit('reload'); | |||||
}); | }); | ||||
}); | }); | ||||
} else { | } else { | ||||
} | } | ||||
$(document).ready(async () => { | $(document).ready(async () => { | ||||
csrf = $('meta[name=_csrf]').attr('content'); | |||||
// Show exact time | // Show exact time | ||||
$('.time-since').each(function () { | $('.time-since').each(function () { | ||||
$(this) | $(this) | ||||
if ($dropzone.length > 0) { | if ($dropzone.length > 0) { | ||||
const filenameDict = {}; | const filenameDict = {}; | ||||
new Dropzone('#dropzone', { | |||||
await createDropzone('#dropzone', { | |||||
url: $dropzone.data('upload-url'), | url: $dropzone.data('upload-url'), | ||||
headers: { 'X-Csrf-Token': csrf }, | headers: { 'X-Csrf-Token': csrf }, | ||||
maxFiles: $dropzone.data('max-file'), | maxFiles: $dropzone.data('max-file'), |