finish create issue attachment UI
This commit is contained in:
		
							parent
							
								
									17f3e840ec
								
							
						
					
					
						commit
						89c2bd4a0d
					
				
					 12 changed files with 2198 additions and 7 deletions
				
			
		| 
						 | 
				
			
			@ -325,7 +325,10 @@ func runWeb(ctx *cli.Context) {
 | 
			
		|||
		})
 | 
			
		||||
	}, adminReq)
 | 
			
		||||
 | 
			
		||||
	m.Get("/:username", ignSignIn, user.Profile)
 | 
			
		||||
	m.Group("", func() {
 | 
			
		||||
		m.Get("/:username", user.Profile)
 | 
			
		||||
		m.Post("/attachments", repo.UploadAttachment)
 | 
			
		||||
	}, ignSignIn)
 | 
			
		||||
 | 
			
		||||
	if macaron.Env == macaron.DEV {
 | 
			
		||||
		m.Get("/template/*", dev.TemplatePreview)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -854,3 +854,9 @@ months = %d months %s
 | 
			
		|||
years = %d years %s
 | 
			
		||||
raw_seconds = seconds
 | 
			
		||||
raw_minutes = minutes
 | 
			
		||||
 | 
			
		||||
[dropzone]
 | 
			
		||||
default_message = Drop files here or click to upload.
 | 
			
		||||
invalid_input_type = You can't upload files of this type.
 | 
			
		||||
file_too_big = File size({{filesize}} MB) exceeds maximum size({{maxFilesize}} MB).
 | 
			
		||||
remove_file = Remove file
 | 
			
		||||
| 
						 | 
				
			
			@ -95,6 +95,15 @@
 | 
			
		|||
		"outputPathIsOutsideProject": 0,
 | 
			
		||||
		"outputPathIsSetByUser": 0
 | 
			
		||||
		},
 | 
			
		||||
	"\/public\/css\/dropzone.css": {
 | 
			
		||||
		"fileType": 16,
 | 
			
		||||
		"ignore": 0,
 | 
			
		||||
		"ignoreWasSetByUser": 0,
 | 
			
		||||
		"inputAbbreviatedPath": "\/public\/css\/dropzone.css",
 | 
			
		||||
		"outputAbbreviatedPath": "No Output Path",
 | 
			
		||||
		"outputPathIsOutsideProject": 0,
 | 
			
		||||
		"outputPathIsSetByUser": 0
 | 
			
		||||
		},
 | 
			
		||||
	"\/public\/css\/font-awesome.min.css": {
 | 
			
		||||
		"fileType": 16,
 | 
			
		||||
		"ignore": 0,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										388
									
								
								public/css/dropzone.css
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										388
									
								
								public/css/dropzone.css
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,388 @@
 | 
			
		|||
/*
 | 
			
		||||
 * 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; }
 | 
			
		||||
							
								
								
									
										2
									
								
								public/css/gogs.min.css
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								public/css/gogs.min.css
									
										
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| 
						 | 
				
			
			@ -244,6 +244,35 @@ $(document).ready(function () {
 | 
			
		|||
        }
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    // Dropzone
 | 
			
		||||
    if ($('#dropzone').length > 0) {
 | 
			
		||||
        // Disable auto discover for all elements:
 | 
			
		||||
        Dropzone.autoDiscover = false;
 | 
			
		||||
 | 
			
		||||
        var filenameDict = {};
 | 
			
		||||
        var $dropz = $('#dropzone');
 | 
			
		||||
        $dropz.dropzone({
 | 
			
		||||
            url: $dropz.data('upload-url'),
 | 
			
		||||
            headers: {"X-Csrf-Token": csrf},
 | 
			
		||||
            maxFiles: 5,
 | 
			
		||||
            maxFilesize: $dropz.data('max-size'),
 | 
			
		||||
            acceptedFiles: $dropz.data('accepts'),
 | 
			
		||||
            addRemoveLinks: true,
 | 
			
		||||
            dictDefaultMessage: $dropz.data('default-message'),
 | 
			
		||||
            dictInvalidFileType: $dropz.data('invalid-input-type'),
 | 
			
		||||
            dictFileTooBig: $dropz.data('file-too-big'),
 | 
			
		||||
            dictRemoveFile: $dropz.data('remove-file'),
 | 
			
		||||
            init: function () {
 | 
			
		||||
                this.on("success", function (file, data) {
 | 
			
		||||
                    filenameDict[file.name] = data.uuid;
 | 
			
		||||
                    console.log(data)
 | 
			
		||||
                })
 | 
			
		||||
                this.on("removedfile", function (file) {
 | 
			
		||||
                    console.log(filenameDict[file.name]);
 | 
			
		||||
                })
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Helpers.
 | 
			
		||||
    $('.delete-button').click(function () {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										1728
									
								
								public/js/libs/dropzone.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1728
									
								
								public/js/libs/dropzone.js
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							| 
						 | 
				
			
			@ -147,6 +147,12 @@
 | 
			
		|||
				height: 200px;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		.dropzone {
 | 
			
		||||
			width: 100%; 
 | 
			
		||||
			margin-bottom: 10px;
 | 
			
		||||
			border: 2px dashed #0087F7;
 | 
			
		||||
			box-shadow: none;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	.label.list {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -178,6 +178,7 @@ func Issues(ctx *middleware.Context) {
 | 
			
		|||
func NewIssue(ctx *middleware.Context) {
 | 
			
		||||
	ctx.Data["Title"] = ctx.Tr("repo.issues.new")
 | 
			
		||||
	ctx.Data["PageIsIssueList"] = true
 | 
			
		||||
	ctx.Data["RequireDropzone"] = true
 | 
			
		||||
	ctx.Data["IsAttachmentEnabled"] = setting.AttachmentEnabled
 | 
			
		||||
	ctx.Data["AttachmentAllowedTypes"] = setting.AttachmentAllowedTypes
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -214,8 +215,10 @@ func NewIssue(ctx *middleware.Context) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
func NewIssuePost(ctx *middleware.Context, form auth.CreateIssueForm) {
 | 
			
		||||
	fmt.Println(ctx.QueryStrings("uuids"))
 | 
			
		||||
	ctx.Data["Title"] = ctx.Tr("repo.issues.new")
 | 
			
		||||
	ctx.Data["PageIsIssueList"] = true
 | 
			
		||||
	ctx.Data["RequireDropzone"] = true
 | 
			
		||||
	ctx.Data["IsAttachmentEnabled"] = setting.AttachmentEnabled
 | 
			
		||||
	ctx.Data["AttachmentAllowedTypes"] = setting.AttachmentAllowedTypes
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -344,6 +347,12 @@ func NewIssuePost(ctx *middleware.Context, form auth.CreateIssueForm) {
 | 
			
		|||
	ctx.Redirect(ctx.Repo.RepoLink + "/issues/" + com.ToStr(issue.Index))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func UploadAttachment(ctx *middleware.Context) {
 | 
			
		||||
	ctx.JSON(200, map[string]string{
 | 
			
		||||
		"uuid": "fuck",
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func checkLabels(labels, allLabels []*models.Label) {
 | 
			
		||||
	for _, l := range labels {
 | 
			
		||||
		for _, l2 := range allLabels {
 | 
			
		||||
| 
						 | 
				
			
			@ -926,6 +935,7 @@ func Comment(ctx *middleware.Context) {
 | 
			
		|||
func Labels(ctx *middleware.Context) {
 | 
			
		||||
	ctx.Data["Title"] = ctx.Tr("repo.labels")
 | 
			
		||||
	ctx.Data["PageIsLabels"] = true
 | 
			
		||||
	ctx.Data["RequireMinicolors"] = true
 | 
			
		||||
	ctx.HTML(200, LABELS)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1031,6 +1041,7 @@ func Milestones(ctx *middleware.Context) {
 | 
			
		|||
func NewMilestone(ctx *middleware.Context) {
 | 
			
		||||
	ctx.Data["Title"] = ctx.Tr("repo.milestones.new")
 | 
			
		||||
	ctx.Data["PageIsMilestones"] = true
 | 
			
		||||
	ctx.Data["RequireDatetimepicker"] = true
 | 
			
		||||
	ctx.Data["DateLang"] = setting.DateLang(ctx.Locale.Language())
 | 
			
		||||
	ctx.HTML(200, MILESTONE_NEW)
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1038,6 +1049,7 @@ func NewMilestone(ctx *middleware.Context) {
 | 
			
		|||
func NewMilestonePost(ctx *middleware.Context, form auth.CreateMilestoneForm) {
 | 
			
		||||
	ctx.Data["Title"] = ctx.Tr("repo.milestones.new")
 | 
			
		||||
	ctx.Data["PageIsMilestones"] = true
 | 
			
		||||
	ctx.Data["RequireDatetimepicker"] = true
 | 
			
		||||
	ctx.Data["DateLang"] = setting.DateLang(ctx.Locale.Language())
 | 
			
		||||
 | 
			
		||||
	if ctx.HasError() {
 | 
			
		||||
| 
						 | 
				
			
			@ -1073,6 +1085,7 @@ func EditMilestone(ctx *middleware.Context) {
 | 
			
		|||
	ctx.Data["Title"] = ctx.Tr("repo.milestones.edit")
 | 
			
		||||
	ctx.Data["PageIsMilestones"] = true
 | 
			
		||||
	ctx.Data["PageIsEditMilestone"] = true
 | 
			
		||||
	ctx.Data["RequireDatetimepicker"] = true
 | 
			
		||||
	ctx.Data["DateLang"] = setting.DateLang(ctx.Locale.Language())
 | 
			
		||||
 | 
			
		||||
	m, err := models.GetMilestoneByID(ctx.ParamsInt64(":id"))
 | 
			
		||||
| 
						 | 
				
			
			@ -1096,6 +1109,7 @@ func EditMilestonePost(ctx *middleware.Context, form auth.CreateMilestoneForm) {
 | 
			
		|||
	ctx.Data["Title"] = ctx.Tr("repo.milestones.edit")
 | 
			
		||||
	ctx.Data["PageIsMilestones"] = true
 | 
			
		||||
	ctx.Data["PageIsEditMilestone"] = true
 | 
			
		||||
	ctx.Data["RequireDatetimepicker"] = true
 | 
			
		||||
	ctx.Data["DateLang"] = setting.DateLang(ctx.Locale.Language())
 | 
			
		||||
 | 
			
		||||
	if ctx.HasError() {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -31,13 +31,18 @@
 | 
			
		|||
	<script src="{{AppSubUrl}}/js/gogs.js?v={{AppVer}}"></script>
 | 
			
		||||
 | 
			
		||||
	<!-- Third-party libraries -->
 | 
			
		||||
	{{if .PageIsLabels}}
 | 
			
		||||
	{{if .RequireMinicolors}}
 | 
			
		||||
	<link rel="stylesheet" href="{{AppSubUrl}}/css/jquery.minicolors.css?v={{AppVer}}">
 | 
			
		||||
	<script src="{{AppSubUrl}}/js/libs/jquery.minicolors.min.js?v={{AppVer}}"></script>
 | 
			
		||||
	{{else if .PageIsMilestones}}
 | 
			
		||||
	{{end}}
 | 
			
		||||
	{{if .RequireDatetimepicker}}
 | 
			
		||||
	<link rel="stylesheet" href="{{AppSubUrl}}/css/jquery.datetimepicker.css?v={{AppVer}}">
 | 
			
		||||
	<script src="{{AppSubUrl}}/js/libs/jquery.datetimepicker.js?v={{AppVer}}"></script>
 | 
			
		||||
	{{end}}
 | 
			
		||||
	{{if .RequireDropzone}}
 | 
			
		||||
	<link rel="stylesheet" href="{{AppSubUrl}}/css/dropzone.css?v={{AppVer}}">
 | 
			
		||||
	<script src="{{AppSubUrl}}/js/libs/dropzone.js?v={{AppVer}}"></script>
 | 
			
		||||
	{{end}}
 | 
			
		||||
 | 
			
		||||
	<title>{{if .Title}}{{.Title}} - {{end}}{{AppName}}</title>
 | 
			
		||||
</head>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -27,6 +27,9 @@
 | 
			
		|||
			         {{.i18n.Tr "repo.release.loading"}}
 | 
			
		||||
			      </div>
 | 
			
		||||
		      </div>
 | 
			
		||||
		      {{if .IsAttachmentEnabled}}
 | 
			
		||||
		      <div class="ui basic button dropzone" id="dropzone" data-upload-url="/attachments" data-accepts="{{.AttachmentAllowedTypes}}" data-max-size="1" data-default-message="{{.i18n.Tr "dropzone.default_message"}}" data-invalid-input-type="{{.i18n.Tr "dropzone.invalid_input_type"}}" data-file-too-big="{{.i18n.Tr "dropzone.file_too_big"}}" data-remove-file="{{.i18n.Tr "dropzone.remove_file"}}"></div>
 | 
			
		||||
		      {{end}}
 | 
			
		||||
		      <div class="text right">
 | 
			
		||||
						<button class="ui green button">
 | 
			
		||||
							{{.i18n.Tr "repo.issues.create"}}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue