Skip to content

Implements drag and drop upload in creating issues #5

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 99 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
99 commits
Select commit Hold shift + click to select a range
f0b3092
Recommend issue name.
maxlazio May 19, 2014
971dc47
Fix typo.
maxlazio May 19, 2014
0660183
Renamed based on suggestion Martijn.
dosire May 20, 2014
114e675
The 4.0 raketask is no longer needed and rebuilding of missing satell…
dosire May 22, 2014
0957f34
Updates for the monthly release document.
maxlazio May 22, 2014
b6a88c7
Update casing of gitlab.com.
maxlazio May 22, 2014
d2e9294
add newsletter to release doc
JobV May 19, 2014
ab126c8
Add proposed email for mailchimp.
maxlazio May 22, 2014
6a85cdf
Implements drag and drop upload in creating issues
May 23, 2014
fc86165
Merge pull request #7011 from erbunao/drag-and-drop_markdown
dzaporozhets May 23, 2014
8ec38c1
Mention changes to protected branches
dzaporozhets May 23, 2014
8ae2d21
Fix branch protection help doc
dzaporozhets May 23, 2014
a5e1624
Redirect to tree view after branch created
dzaporozhets May 23, 2014
b44138a
Branch link on branches page goes to tree view instead of commits
dzaporozhets May 23, 2014
695fd3c
Move protected branches to Project settings
dzaporozhets May 23, 2014
484c097
Fix tests
dzaporozhets May 23, 2014
c5922ca
Don't forget to update the changelog.
dosire May 23, 2014
c1da50c
Merge branch 'remove-features-raketask' into 'master'
dzaporozhets May 23, 2014
66c9fa9
Merge branch 'merge-marshal' into 'master'
dzaporozhets May 23, 2014
8efc80e
Add threaded emails to changelog.
dosire May 23, 2014
6990f8a
Replace jquery deprecated .live with .on
maxlazio May 23, 2014
68942db
Merge branch 'master' of dev.gitlab.org:gitlab/gitlabhq
maxlazio May 23, 2014
7f84ba8
Project visibility setting is missed by people sometimes.
dosire May 23, 2014
d575ee3
Improve branch deletion via API
dzaporozhets May 23, 2014
a56e35e
Merge branch 'api-branch-deletion' into 'master'
dzaporozhets May 23, 2014
245c04c
Change the license to B.V.
dosire May 23, 2014
c8abf22
Merge branch 'license-to-bv' into 'master'
dzaporozhets May 23, 2014
d906f19
Merge branch 'move-protected-branches' into 'master'
dzaporozhets May 23, 2014
de7d93e
Merge branch 'branch-creation-flow' into 'master'
dzaporozhets May 23, 2014
a502a2b
Merge branch 'missing-items-changelog' into 'master'
dzaporozhets May 23, 2014
09fc3df
Merge branch 'explain-setting' into 'master'
dzaporozhets May 23, 2014
3e1853c
More stuff to CHANGELOG
dzaporozhets May 23, 2014
cc28b21
Add drag-n-drop to CHANGELOG
dzaporozhets May 24, 2014
0853eeb
Improve comments css
dzaporozhets May 24, 2014
5cfaf94
Improve notes form UI/UX
dzaporozhets May 24, 2014
50f3280
Remove unused css
dzaporozhets May 24, 2014
7c6a58a
Merge branch 'ui-improvements' into 'master'
dzaporozhets May 24, 2014
1bb9aeb
Fix specs. Fix note form reset after submit
dzaporozhets May 24, 2014
5a1429a
Fix branches tests
dzaporozhets May 24, 2014
bbc4b2b
Fix help tests
dzaporozhets May 24, 2014
ef933ae
Even more tests fixed :)
dzaporozhets May 24, 2014
cc1dd32
Add pkgr.io to readme one-click installation methods
axilleas May 24, 2014
2a8aa74
Merge branch 'monthly_doc_update' into 'master'
maxlazio May 26, 2014
23bcb9c
A regressions issue to improve communication.
dosire May 26, 2014
9f6709d
Have the issue for the entire monthly time.
dosire May 26, 2014
f39d8a8
Add any known bugs.
dosire May 26, 2014
1748073
Correct typo.
dosire May 26, 2014
d4b61a6
Merge branch 'add_pkgrio_to_readme' into 'master'
dosire May 26, 2014
8bec6b0
Make existing tests test something, return correct errors.
maxlazio May 26, 2014
13233d6
Merge branch 'regression-issue' into 'master'
dosire May 26, 2014
3b2b3cf
Move logic to image_service.
maxlazio May 26, 2014
f441436
Add compare branches endpoint to API
dzaporozhets May 26, 2014
75e90cb
Push to all remotes doc.
dosire May 26, 2014
c7a5530
Small layout improvements.
dosire May 26, 2014
f8a6d34
Add image_service spec.
maxlazio May 26, 2014
fe10f37
Add default arguments, name gitlab repo gl, suggest dotfile repo.
dosire May 26, 2014
43e7b8f
Remove empty space
maxlazio May 26, 2014
9b2a134
Need txt file in test.
maxlazio May 26, 2014
040b3be
Give a hint where to find the email settings.
dosire May 26, 2014
2422918
Add some tests to compare api
dzaporozhets May 26, 2014
b2ec09e
Specify what version to test manually.
dosire May 26, 2014
c267d18
Merge branch 'test-ee' into 'master'
dzaporozhets May 26, 2014
e03a2fa
Merge branch 'email-hint' into 'master'
dzaporozhets May 26, 2014
21649ca
Merge branch 'fix/drag_and_drop_image_tests' into 'master'
dzaporozhets May 26, 2014
f486588
Merge branch 'master' of gitlab.com:gitlab-org/gitlab-ce
dzaporozhets May 26, 2014
7ad5fb5
Merge branch 'push-release-doc' into 'master'
dzaporozhets May 26, 2014
52c3179
Do not replace links inside code blocks, less code for the same amoun…
maxlazio May 20, 2014
603e04b
Make sure slashes are handled properly.
maxlazio May 20, 2014
281643a
Add feature spec.
maxlazio May 23, 2014
e426d43
Check return system value for gitlab test rake tasks
dzaporozhets May 26, 2014
c456231
Use css truncation on dashboard
dzaporozhets May 26, 2014
c9020ae
Fix test.rake
dzaporozhets May 26, 2014
1e7fa8d
Fix syntax error
dzaporozhets May 27, 2014
aef2122
Merge branch 'css-truncation' into 'master'
dzaporozhets May 27, 2014
7c5d96c
Merge branch 'improve-gitlab-test' into 'master'
dzaporozhets May 27, 2014
e918ae2
Merge branch 'no_link_inside_code_block' into 'master'
dzaporozhets May 27, 2014
f4889f5
Add entry to changelog.
maxlazio May 27, 2014
10ee137
Expose timeout and same_ref compare fields
dzaporozhets May 27, 2014
c7e00ac
Better specs for Compare API
dzaporozhets May 27, 2014
d7b3bbf
Make MR dicussion and changes tabs more noticable
dzaporozhets May 27, 2014
b60226a
Merge branch 'improve-mr-tabs' into 'master'
dzaporozhets May 27, 2014
3553e36
Merge branch 'review-changelog' into 'master'
maxlazio May 27, 2014
3bdf0e2
Merge branch 'compare-api' into 'master'
dzaporozhets May 27, 2014
f22c709
Add titles to doc pages.
maxlazio May 27, 2014
046647a
Add directions on how to upgrade gitlab-shell in the upgrader guide.
maxlazio May 27, 2014
c8b58f0
Cherry-pick the changelog additions into master.
dosire May 27, 2014
7dfb678
Revert "Actually use the 'user_filter' configuration option"
jacobvosmaer May 27, 2014
cee8850
Fix typo in text.
maxlazio May 27, 2014
cb4b504
Merge branch 'merge-patch-changelog-back-into-master' into 'master'
maxlazio May 27, 2014
2341cef
Move from script to bin directory.
maxlazio May 27, 2014
c862bc6
Merge branch 'ldap_user_filter_fix' into 'master'
dzaporozhets May 27, 2014
19ea362
Merge branch 'add_titles_to_help_pages' into 'master'
dzaporozhets May 27, 2014
d25bc25
Merge branch 'gitlab_shell_in_upgrader_guide' into 'master'
dzaporozhets May 27, 2014
affd376
Dont show remove source branch ckecbox/button if you dont have such
dzaporozhets May 27, 2014
3682e72
Merge branch 'move_script_to_bin' into 'master'
dzaporozhets May 27, 2014
6bd114a
Merge branch 'remove-branch-btn' into 'master'
dzaporozhets May 27, 2014
c53f076
Implements and refactors clipboard feature for markdown.
erbunao May 26, 2014
1df3c9b
minor fix
erbunao May 27, 2014
331c250
wdlakjlds
erbunao May 28, 2014
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,9 @@ gem "haml-rails"
# Files attachments
gem "carrierwave"

# Drag and Drop UI
gem 'dropzonejs-rails'

# for aws storage
gem "fog", "~> 1.14", group: :aws
gem "unf", group: :aws
Expand Down
3 changes: 3 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,8 @@ GEM
diffy (3.0.3)
docile (1.1.1)
dotenv (0.9.0)
dropzonejs-rails (0.4.14)
rails (> 3.1)
email_spec (1.5.0)
launchy (~> 2.1)
mail (~> 2.2)
Expand Down Expand Up @@ -579,6 +581,7 @@ DEPENDENCIES
devise (= 3.0.4)
devise-async (= 0.8.0)
diffy (~> 3.0.3)
dropzonejs-rails
email_spec
email_validator (~> 1.4.0)
enumerize
Expand Down
1 change: 1 addition & 0 deletions app/assets/javascripts/application.js.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
#= require underscore
#= require nprogress
#= require nprogress-turbolinks
#= require dropzone
#= require_tree .

window.slugify = (text) ->
Expand Down
2 changes: 1 addition & 1 deletion app/assets/javascripts/behaviors/toggler_behavior.coffee
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
$ ->
$("body").on "click", ".js-toggler-target", ->
container = $(@).closest(".js-toggler-container")
container = $(".notes-container")
container.toggleClass("on")

# Toggle button. Show/hide content inside parent container.
Expand Down
85 changes: 85 additions & 0 deletions app/assets/javascripts/markdown_area.js.coffee
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
formatLink = (str) ->
"![" + str.alt + "](" + str.url + ")"

$(document).ready ->
alertClass = "alert alert-danger alert-dismissable div-dropzone-alert"
alertAttr = "class=\"close\" data-dismiss=\"alert\"" + "aria-hidden=\"true\""
divHover = "<div class=\"div-dropzone-hover\"></div>"
divSpinner = "<div class=\"div-dropzone-spinner\"></div>"
divAlert = "<div class=\"" + alertClass + "\"></div>"
iconPicture = "<i class=\"icon-picture div-dropzone-icon\"></i>"
iconSpinner = "<i class=\"icon-spinner icon-spin div-dropzone-icon\"></i>"
btnAlert = "<button type=\"button\"" + alertAttr + ">&times;</button>"
project_image_path_upload = window.project_image_path_upload or null

$("textarea.markdown-area").wrap "<div class=\"div-dropzone\"></div>"

$(".div-dropzone").parent().addClass "div-dropzone-wrapper"

$(".div-dropzone").append divHover
$(".div-dropzone-hover").append iconPicture
$(".div-dropzone").append divSpinner
$(".div-dropzone-spinner").append iconSpinner


dropzone = $(".div-dropzone").dropzone(
url: project_image_path_upload
dictDefaultMessage: ""
clickable: true
paramName: "markdown_img"
maxFilesize: 10
uploadMultiple: false
acceptedFiles: "image/jpg,image/jpeg,image/gif,image/png"
headers:
"X-CSRF-Token": $("meta[name=\"csrf-token\"]").attr("content")

previewContainer: false

processing: ->
$(".div-dropzone-alert").alert "close"

dragover: ->
$(".div-dropzone > textarea").addClass "div-dropzone-focus"
$(".div-dropzone-hover").css "opacity", 0.7
return

dragleave: ->
$(".div-dropzone > textarea").removeClass "div-dropzone-focus"
$(".div-dropzone-hover").css "opacity", 0
return

drop: ->
$(".div-dropzone > textarea").removeClass "div-dropzone-focus"
$(".div-dropzone-hover").css "opacity", 0
$(".div-dropzone > textarea").focus()
return

success: (header, response) ->
child = $(dropzone[0]).children("textarea")
$(child).val $(child).val() + formatLink(response.link) + "\n"
return

error: (temp, errorMessage) ->
checkIfMsgExists = $(".error-alert").children().length
if checkIfMsgExists is 0
$(".error-alert").append divAlert
$(".div-dropzone-alert").append btnAlert + errorMessage
return

sending: ->
$(".div-dropzone-spinner").css "opacity", 0.7
return

complete: ->
$(".dz-preview").remove()
$(".markdown-area").trigger "input"
$(".div-dropzone-spinner").css "opacity", 0
return
)

$(".markdown-selector").click (e) ->
e.preventDefault()
$(".div-dropzone").click()
return

return
1 change: 1 addition & 0 deletions app/assets/stylesheets/application.scss
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
*= require_self
*= require nprogress
*= require nprogress-bootstrap
*= require dropzone/basic
*/

@import "main/*";
Expand Down
13 changes: 11 additions & 2 deletions app/assets/stylesheets/behaviors.scss
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,19 @@
.js-details-container.open .content { display: block; }
.js-details-container.open .content.hide { display: none; }


// Toggler
//--------
.js-toggler-container .turn-on { display: inherit; }
.write-preview-btn .turn-on { display: inherit; }
.write-preview-btn .turn-off { display: none; }

.js-toggler-container .turn-off { display: none; }
.js-toggler-container.on .turn-on { display: none; }
.js-toggler-container.on .turn-off { display: inherit; }

.js-toggler-container.on ~ .note-form-actions {
.write-preview-btn .turn-on { display: none; }
}

.js-toggler-container.on ~ .note-form-actions {
.write-preview-btn .turn-off { display: inherit; }
}
58 changes: 58 additions & 0 deletions app/assets/stylesheets/generic/markdown_area.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
.div-dropzone-wrapper {
.div-dropzone {
position: relative;
padding: 0;
border: 0;
margin-bottom: 5px;

.div-dropzone-focus {
border-color: #66afe9 !important;
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6) !important;
outline: 0 !important;
}

.div-dropzone-hover {
position: absolute;
top: 50%;
left: 50%;
margin-top: -0.5em;
margin-left: -0.6em;
opacity: 0;
font-size: 50px;
transition: opacity 200ms ease-in-out;
}

.div-dropzone-spinner {
position: absolute;
top: 100%;
left: 100%;
margin-top: -1.1em;
margin-left: -1.1em;
opacity: 0;
font-size: 30px;
transition: opacity 200ms ease-in-out;
}

.div-dropzone-icon {
display: block;
text-align: center;
font-size: inherit;
}

.dz-preview {
display: none;
}
}

.hint {
float: left;
padding: 0;
margin: 0;
}
}

.div-dropzone-alert {
margin-top: 5px;
margin-bottom: 0;
transition: opacity 200ms ease-in-out;
}
32 changes: 21 additions & 11 deletions app/assets/stylesheets/sections/notes.scss
Original file line number Diff line number Diff line change
Expand Up @@ -272,21 +272,16 @@ ul.notes {
margin-bottom: 0;
}
.note_text_and_preview {
// makes the "absolute" position for links relative to this
position: relative;

// preview/edit buttons
> a {
position: absolute;
right: 5px;
bottom: -60px;
}
.note_preview {
background: #f5f5f5;
border: 1px solid #ddd;
@include border-radius(4px);
min-height: 80px;
padding: 4px 6px;

> p {
overflow-x: auto;
}
}
.note_text {
border: 1px solid #DDD;
Expand All @@ -310,15 +305,13 @@ ul.notes {
float: none;
}


.common-note-form {
margin: 0;
background: #F9F9F9;
padding: 3px;
border: 1px solid #DDD;
}


.note-form-actions {
background: #F9F9F9;
height: 45px;
Expand All @@ -333,6 +326,18 @@ ul.notes {
.js-notify-commit-author {
float: left;
}

.write-preview-btn {
// makes the "absolute" position for links relative to this
position: relative;

// preview/edit buttons
> a {
position: absolute;
right: 5px;
top: 8px;
}
}
}

.note-edit-form {
Expand Down Expand Up @@ -367,3 +372,8 @@ ul.notes {
.parallel-comment {
padding: 6px;
}

.error-alert > .alert {
margin-top: 5px;
margin-bottom: 5px;
}
1 change: 0 additions & 1 deletion app/controllers/files_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,3 @@ def download
end
end
end

4 changes: 3 additions & 1 deletion app/controllers/projects/issues_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,9 @@ def create
render :new
end
end
format.js
format.js do |format|
@link = @issue.attachment.url.to_js
end
end
end

Expand Down
20 changes: 20 additions & 0 deletions app/controllers/projects_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -162,8 +162,28 @@ def unarchive
end
end

def upload_image
uploader = FileUploader.new('uploads', upload_path, accepted_images)
alt = params['markdown_img'].original_filename
uploader.store!(params['markdown_img'])
link = { 'alt' => File.basename(alt, '.*'),
'url' => File.join(root_url, uploader.url) }
respond_to do |format|
format.json { render json: { link: link } }
end
end

private

def upload_path
base_dir = FileUploader.generate_dir
File.join(repository.path_with_namespace, base_dir)
end

def accepted_images
%w(png jpg jpeg gif)
end

def set_title
@title = 'New Project'
end
Expand Down
4 changes: 4 additions & 0 deletions app/models/issue.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,12 @@
# milestone_id :integer
# state :string(255)
# iid :integer
# attachment :string(255)
#

require 'carrierwave/orm/activerecord'
require 'file_size_validator'

class Issue < ActiveRecord::Base
include Issuable
include InternalId
Expand Down
41 changes: 41 additions & 0 deletions app/uploaders/file_uploader.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# encoding: utf-8
class FileUploader < CarrierWave::Uploader::Base
storage :file

def initialize(base_dir, path = '', allowed_extensions = nil)
@base_dir = base_dir
@path = path
@allowed_extensions = allowed_extensions
end

def base_dir
@base_dir
end

def store_dir
File.join(@base_dir, @path)
end

def cache_dir
File.join(@base_dir, 'tmp', @path)
end

def extension_white_list
@allowed_extensions
end

def store!(file)
file.original_filename = self.class.generate_filename(file)
super
end

def self.generate_filename(file)
original_filename = File.basename(file.original_filename, '.*')
extension = File.extname(file.original_filename)
new_filename = Digest::MD5.hexdigest(original_filename) + extension
end

def self.generate_dir
SecureRandom.hex(5)
end
end
1 change: 1 addition & 0 deletions app/views/layouts/admin.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,4 @@

.container
.content= yield
= yield :embedded_scripts
Loading