Move dropzone.js to npm/webpack (#10645)
- unvendor dropzone and upgrade it from 4.2.0 to 5.7.0 - make `csrf` available on window.config
This commit is contained in:
		
							parent
							
								
									0c2148c037
								
							
						
					
					
						commit
						9d3e69e867
					
				
					 14 changed files with 38 additions and 2196 deletions
				
			
		
							
								
								
									
										5
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										5
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							|  | @ -3927,6 +3927,11 @@ | |||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "dropzone": { | ||||
|       "version": "5.7.0", | ||||
|       "resolved": "https://registry.npmjs.org/dropzone/-/dropzone-5.7.0.tgz", | ||||
|       "integrity": "sha512-kOltiZXH5cO/72I22JjE+w6BoT6uaVLfWdFMsi1PMKFkU6BZWpqRwjnsRm0o6ANGTBuZar5Piu7m/CbKqRPiYg==" | ||||
|     }, | ||||
|     "duplexer2": { | ||||
|       "version": "0.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", | ||||
|  |  | |||
|  | @ -7,6 +7,7 @@ | |||
|   "dependencies": { | ||||
|     "@primer/octicons": "9.4.0", | ||||
|     "clipboard": "2.0.4", | ||||
|     "dropzone": "5.7.0", | ||||
|     "fomantic-ui": "2.8.4", | ||||
|     "highlight.js": "9.18.1", | ||||
|     "jquery": "3.4.1", | ||||
|  |  | |||
							
								
								
									
										6
									
								
								public/vendor/librejs.html
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								public/vendor/librejs.html
									
									
									
									
										vendored
									
									
								
							|  | @ -61,9 +61,9 @@ | |||
|           <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> | ||||
|           <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> | ||||
|           <td><a href="./highlight.js">highlight.js</a></td> | ||||
|  |  | |||
							
								
								
									
										20
									
								
								public/vendor/plugins/dropzone/LICENSE
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										20
									
								
								public/vendor/plugins/dropzone/LICENSE
									
									
									
									
										vendored
									
									
								
							|  | @ -1,20 +0,0 @@ | |||
| (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. | ||||
							
								
								
									
										388
									
								
								public/vendor/plugins/dropzone/dropzone.css
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										388
									
								
								public/vendor/plugins/dropzone/dropzone.css
									
									
									
									
										vendored
									
									
								
							|  | @ -1,388 +0,0 @@ | |||
| /* | ||||
|  * 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; } | ||||
							
								
								
									
										1752
									
								
								public/vendor/plugins/dropzone/dropzone.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1752
									
								
								public/vendor/plugins/dropzone/dropzone.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							|  | @ -18,7 +18,6 @@ import ( | |||
| ) | ||||
| 
 | ||||
| func renderAttachmentSettings(ctx *context.Context) { | ||||
| 	ctx.Data["RequireDropzone"] = true | ||||
| 	ctx.Data["IsAttachmentEnabled"] = setting.AttachmentEnabled | ||||
| 	ctx.Data["AttachmentAllowedTypes"] = setting.AttachmentAllowedTypes | ||||
| 	ctx.Data["AttachmentMaxSize"] = setting.AttachmentMaxSize | ||||
|  |  | |||
|  | @ -474,7 +474,6 @@ func DeleteFilePost(ctx *context.Context, form auth.DeleteRepoFileForm) { | |||
| } | ||||
| 
 | ||||
| func renderUploadSettings(ctx *context.Context) { | ||||
| 	ctx.Data["RequireDropzone"] = true | ||||
| 	ctx.Data["RequireTribute"] = true | ||||
| 	ctx.Data["RequireSimpleMDE"] = true | ||||
| 	ctx.Data["UploadAllowedTypes"] = strings.Join(setting.Repository.Upload.AllowedTypes, ",") | ||||
|  |  | |||
|  | @ -697,7 +697,6 @@ func ViewIssue(ctx *context.Context) { | |||
| 	} | ||||
| 
 | ||||
| 	ctx.Data["RequireHighlightJS"] = true | ||||
| 	ctx.Data["RequireDropzone"] = true | ||||
| 	ctx.Data["RequireTribute"] = true | ||||
| 	ctx.Data["RequireSimpleMDE"] = true | ||||
| 	renderAttachmentSettings(ctx) | ||||
|  |  | |||
|  | @ -29,9 +29,6 @@ | |||
| {{if .RequireDatetimepicker}} | ||||
| 	<script src="{{StaticUrlPrefix}}/vendor/plugins/jquery.datetimepicker/jquery.datetimepicker.js"></script> | ||||
| {{end}} | ||||
| {{if .RequireDropzone}} | ||||
| 	<script src="{{StaticUrlPrefix}}/vendor/plugins/dropzone/dropzone.js"></script> | ||||
| {{end}} | ||||
| {{if .RequireU2F}} | ||||
| 	<script src="{{StaticUrlPrefix}}/vendor/plugins/u2f/index.js"></script> | ||||
| {{end}} | ||||
|  |  | |||
|  | @ -86,8 +86,8 @@ | |||
| 		window.config = { | ||||
| 			AppSubUrl: '{{AppSubUrl}}', | ||||
| 			StaticUrlPrefix: '{{StaticUrlPrefix}}', | ||||
| 			csrf: '{{.CsrfToken}}', | ||||
| 			Datetimepicker: {{if .RequireDatetimepicker}}true{{else}}false{{end}}, | ||||
| 			Dropzone: {{if .RequireDropzone}}true{{else}}false{{end}}, | ||||
| 			HighlightJS: {{if .RequireHighlightJS}}true{{else}}false{{end}}, | ||||
| 			Minicolors: {{if .RequireMinicolors}}true{{else}}false{{end}}, | ||||
| 			SimpleMDE: {{if .RequireSimpleMDE}}true{{else}}false{{end}}, | ||||
|  | @ -124,9 +124,6 @@ | |||
| {{end}} | ||||
| {{if .RequireDatetimepicker}} | ||||
| 	<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}} | ||||
| 	<style class="list-search-style"></style> | ||||
| {{if .PageIsUserProfile}} | ||||
|  |  | |||
|  | @ -9,6 +9,7 @@ var urlsToCache = [ | |||
|   '{{StaticUrlPrefix}}/js/jquery.js?v={{MD5 AppVer}}', | ||||
|   '{{StaticUrlPrefix}}/js/swagger.js?v={{MD5 AppVer}}', | ||||
|   '{{StaticUrlPrefix}}/js/userheatmap.js', | ||||
|   '{{StaticUrlPrefix}}/js/dropzone.js', | ||||
|   '{{StaticUrlPrefix}}/vendor/plugins/codemirror/addon/mode/loadmode.js', | ||||
|   '{{StaticUrlPrefix}}/vendor/plugins/codemirror/mode/meta.js', | ||||
|   '{{StaticUrlPrefix}}/vendor/plugins/dropzone/dropzone.js', | ||||
|  | @ -21,6 +22,7 @@ var urlsToCache = [ | |||
|   '{{StaticUrlPrefix}}/css/index.css?v={{MD5 AppVer}}', | ||||
|   '{{StaticUrlPrefix}}/css/swagger.css?v={{MD5 AppVer}}', | ||||
|   '{{StaticUrlPrefix}}/css/userheatmap.css', | ||||
|   '{{StaticUrlPrefix}}/css/dropzone.css', | ||||
|   '{{StaticUrlPrefix}}/fomantic/semantic.min.css?v={{MD5 AppVer}}', | ||||
|   '{{StaticUrlPrefix}}/vendor/assets/font-awesome/css/font-awesome.min.css', | ||||
|   '{{StaticUrlPrefix}}/vendor/plugins/dropzone/dropzone.css', | ||||
|  |  | |||
							
								
								
									
										9
									
								
								web_src/js/features/dropzone.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								web_src/js/features/dropzone.js
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,9 @@ | |||
| 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); | ||||
| } | ||||
|  | @ -15,27 +15,22 @@ import initHighlight from './features/highlight.js'; | |||
| import initGitGraph from './features/gitGraph.js'; | ||||
| import initClipboard from './features/clipboard.js'; | ||||
| import initUserHeatmap from './features/userHeatmap.js'; | ||||
| import createDropzone from './features/dropzone.js'; | ||||
| 
 | ||||
| import ActivityTopAuthors from './components/ActivityTopAuthors.vue'; | ||||
| 
 | ||||
| const { AppSubUrl, StaticUrlPrefix } = window.config; | ||||
| const { AppSubUrl, StaticUrlPrefix, csrf } = window.config; | ||||
| 
 | ||||
| function htmlEncode(text) { | ||||
|   return jQuery('<div />').text(text).html(); | ||||
| } | ||||
| 
 | ||||
| let csrf; | ||||
| let previewFileModes; | ||||
| let simpleMDEditor; | ||||
| const commentMDEditors = {}; | ||||
| let codeMirrorEditor; | ||||
| 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
 | ||||
| $.fn.tab.settings.silent = true; | ||||
| 
 | ||||
|  | @ -867,7 +862,7 @@ function initRepository() { | |||
|     }); | ||||
| 
 | ||||
|     // Edit issue or comment content
 | ||||
|     $('.edit-content').click(function (event) { | ||||
|     $('.edit-content').click(async function (event) { | ||||
|       $(this).closest('.dropdown').find('.menu').toggle('visible'); | ||||
|       const $segment = $(this).closest('.header').next(); | ||||
|       const $editContentZone = $segment.find('.edit-content-zone'); | ||||
|  | @ -883,12 +878,14 @@ function initRepository() { | |||
|         issuesTribute.attach($textarea.get()); | ||||
|         emojiTribute.attach($textarea.get()); | ||||
| 
 | ||||
|         let dz; | ||||
|         const $dropzone = $editContentZone.find('.dropzone'); | ||||
|         $dropzone.data('saved', false); | ||||
|         const $files = $editContentZone.find('.comment-files'); | ||||
|         if ($dropzone.length > 0) { | ||||
|           $dropzone.data('saved', false); | ||||
| 
 | ||||
|           const filenameDict = {}; | ||||
|           $dropzone.dropzone({ | ||||
|           dz = await createDropzone($dropzone[0], { | ||||
|             url: $dropzone.data('upload-url'), | ||||
|             headers: { 'X-Csrf-Token': csrf }, | ||||
|             maxFiles: $dropzone.data('max-file'), | ||||
|  | @ -927,15 +924,14 @@ function initRepository() { | |||
|               }); | ||||
|               this.on('reload', () => { | ||||
|                 $.getJSON($editContentZone.data('attachment-url'), (data) => { | ||||
|                   const drop = $dropzone.get(0).dropzone; | ||||
|                   drop.removeAllFiles(true); | ||||
|                   dz.removeAllFiles(true); | ||||
|                   $files.empty(); | ||||
|                   $.each(data, function () { | ||||
|                     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] = { | ||||
|                       submitted: true, | ||||
|                       uuid: this.uuid | ||||
|  | @ -948,7 +944,7 @@ function initRepository() { | |||
|               }); | ||||
|             } | ||||
|           }); | ||||
|           $dropzone.get(0).dropzone.emit('reload'); | ||||
|           dz.emit('reload'); | ||||
|         } | ||||
|         // Give new write/preview data-tab name to distinguish from others
 | ||||
|         const $editContentForm = $editContentZone.find('.ui.comment.form'); | ||||
|  | @ -967,7 +963,7 @@ function initRepository() { | |||
|         $editContentZone.find('.cancel.button').click(() => { | ||||
|           $renderContent.show(); | ||||
|           $editContentZone.hide(); | ||||
|           $dropzone.get(0).dropzone.emit('reload'); | ||||
|           dz.emit('reload'); | ||||
|         }); | ||||
|         $editContentZone.find('.save.button').click(() => { | ||||
|           $renderContent.show(); | ||||
|  | @ -1003,8 +999,8 @@ function initRepository() { | |||
|             } else { | ||||
|               $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 { | ||||
|  | @ -2366,8 +2362,6 @@ function initTemplateSearch() { | |||
| } | ||||
| 
 | ||||
| $(document).ready(async () => { | ||||
|   csrf = $('meta[name=_csrf]').attr('content'); | ||||
| 
 | ||||
|   // Show exact time
 | ||||
|   $('.time-since').each(function () { | ||||
|     $(this) | ||||
|  | @ -2421,7 +2415,7 @@ $(document).ready(async () => { | |||
|   if ($dropzone.length > 0) { | ||||
|     const filenameDict = {}; | ||||
| 
 | ||||
|     new Dropzone('#dropzone', { | ||||
|     await createDropzone('#dropzone', { | ||||
|       url: $dropzone.data('upload-url'), | ||||
|       headers: { 'X-Csrf-Token': csrf }, | ||||
|       maxFiles: $dropzone.data('max-file'), | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue