Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
gitlab-ce
Commits
80e784ed
Commit
80e784ed
authored
Jan 14, 2015
by
Dmitriy Zaporozhets
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix image drag-n-drop to diff comments
parent
8bc65f6d
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
244 additions
and
241 deletions
+244
-241
app/assets/javascripts/dropzone_input.js.coffee
app/assets/javascripts/dropzone_input.js.coffee
+242
-0
app/assets/javascripts/markdown_area.js.coffee
app/assets/javascripts/markdown_area.js.coffee
+0
-241
app/assets/javascripts/notes.js.coffee
app/assets/javascripts/notes.js.coffee
+2
-0
No files found.
app/assets/javascripts/dropzone_input.js.coffee
0 → 100644
View file @
80e784ed
class
@
DropzoneInput
constructor
:
(
form
)
->
Dropzone
.
autoDiscover
=
false
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=
\"
fa fa-picture-o div-dropzone-icon
\"
></i>"
iconSpinner
=
"<i class=
\"
fa fa-spinner fa-spin div-dropzone-icon
\"
></i>"
btnAlert
=
"<button type=
\"
button
\"
"
+
alertAttr
+
">×</button>"
project_image_path_upload
=
window
.
project_image_path_upload
or
null
form_textarea
=
$
(
form
).
find
(
"textarea.markdown-area"
)
form_textarea
.
wrap
"<div class=
\"
div-dropzone
\"
></div>"
form_dropzone
=
$
(
form
).
find
(
'.div-dropzone'
)
form_dropzone
.
parent
().
addClass
"div-dropzone-wrapper"
form_dropzone
.
append
divHover
$
(
".div-dropzone-hover"
).
append
iconPicture
form_dropzone
.
append
divSpinner
$
(
".div-dropzone-spinner"
).
append
iconSpinner
$
(
".div-dropzone-spinner"
).
css
"opacity"
:
0
"display"
:
"none"
# Preview button
$
(
document
).
off
"click"
,
".js-md-preview-button"
$
(
document
).
on
"click"
,
".js-md-preview-button"
,
(
e
)
->
###
Shows the Markdown preview.
Lets the server render GFM into Html and displays it.
###
e
.
preventDefault
()
form
=
$
(
this
).
closest
(
"form"
)
# toggle tabs
form
.
find
(
".js-md-write-button"
).
parent
().
removeClass
"active"
form
.
find
(
".js-md-preview-button"
).
parent
().
addClass
"active"
# toggle content
form
.
find
(
".md-write-holder"
).
hide
()
form
.
find
(
".md-preview-holder"
).
show
()
preview
=
form
.
find
(
".js-md-preview"
)
mdText
=
form
.
find
(
".markdown-area"
).
val
()
if
mdText
.
trim
().
length
is
0
preview
.
text
"Nothing to preview."
else
preview
.
text
"Loading..."
$
.
get
(
$
(
this
).
data
(
"url"
),
md_text
:
mdText
).
success
(
previewData
)
->
preview
.
html
previewData
# Write button
$
(
document
).
off
"click"
,
".js-md-write-button"
$
(
document
).
on
"click"
,
".js-md-write-button"
,
(
e
)
->
###
Shows the Markdown textarea.
###
e
.
preventDefault
()
form
=
$
(
this
).
closest
(
"form"
)
# toggle tabs
form
.
find
(
".js-md-write-button"
).
parent
().
addClass
"active"
form
.
find
(
".js-md-preview-button"
).
parent
().
removeClass
"active"
# toggle content
form
.
find
(
".md-write-holder"
).
show
()
form
.
find
(
".md-preview-holder"
).
hide
()
dropzone
=
form_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
:
->
form_textarea
.
addClass
"div-dropzone-focus"
form
.
find
(
".div-dropzone-hover"
).
css
"opacity"
,
0.7
return
dragleave
:
->
form_textarea
.
removeClass
"div-dropzone-focus"
form
.
find
(
".div-dropzone-hover"
).
css
"opacity"
,
0
return
drop
:
->
form_textarea
.
removeClass
"div-dropzone-focus"
form
.
find
(
".div-dropzone-hover"
).
css
"opacity"
,
0
form_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
:
->
form_dropzone
.
find
(
".div-dropzone-spinner"
).
css
"opacity"
:
0.7
"display"
:
"inherit"
return
complete
:
->
$
(
".dz-preview"
).
remove
()
$
(
".markdown-area"
).
trigger
"input"
$
(
".div-dropzone-spinner"
).
css
"opacity"
:
0
"display"
:
"none"
return
)
child
=
$
(
dropzone
[
0
]).
children
(
"textarea"
)
formatLink
=
(
str
)
->
"!["
+
str
.
alt
+
"]("
+
str
.
url
+
")"
handlePaste
=
(
e
)
->
e
.
preventDefault
()
my_event
=
e
.
originalEvent
if
my_event
.
clipboardData
and
my_event
.
clipboardData
.
items
processItem
(
my_event
)
processItem
=
(
e
)
->
image
=
isImage
(
e
)
if
image
filename
=
getFilename
(
e
)
or
"image.png"
text
=
"{{"
+
filename
+
"}}"
pasteText
(
text
)
uploadFile
image
.
getAsFile
(),
filename
else
text
=
e
.
clipboardData
.
getData
(
"text/plain"
)
pasteText
(
text
)
isImage
=
(
data
)
->
i
=
0
while
i
<
data
.
clipboardData
.
items
.
length
item
=
data
.
clipboardData
.
items
[
i
]
if
item
.
type
.
indexOf
(
"image"
)
isnt
-
1
return
item
i
++
return
false
pasteText
=
(
text
)
->
caretStart
=
$
(
child
)[
0
].
selectionStart
caretEnd
=
$
(
child
)[
0
].
selectionEnd
textEnd
=
$
(
child
).
val
().
length
beforeSelection
=
$
(
child
).
val
().
substring
0
,
caretStart
afterSelection
=
$
(
child
).
val
().
substring
caretEnd
,
textEnd
$
(
child
).
val
beforeSelection
+
text
+
afterSelection
form_textarea
.
trigger
"input"
getFilename
=
(
e
)
->
if
window
.
clipboardData
and
window
.
clipboardData
.
getData
value
=
window
.
clipboardData
.
getData
(
"Text"
)
else
if
e
.
clipboardData
and
e
.
clipboardData
.
getData
value
=
e
.
clipboardData
.
getData
(
"text/plain"
)
value
=
value
.
split
(
"
\r
"
)
value
.
first
()
uploadFile
=
(
item
,
filename
)
->
formData
=
new
FormData
()
formData
.
append
"markdown_img"
,
item
,
filename
$
.
ajax
url
:
project_image_path_upload
type
:
"POST"
data
:
formData
dataType
:
"json"
processData
:
false
contentType
:
false
headers
:
"X-CSRF-Token"
:
$
(
"meta[name=
\"
csrf-token
\"
]"
).
attr
(
"content"
)
beforeSend
:
->
showSpinner
()
closeAlertMessage
()
success
:
(
e
,
textStatus
,
response
)
->
insertToTextArea
(
filename
,
formatLink
(
response
.
responseJSON
.
link
))
error
:
(
response
)
->
showError
(
response
.
responseJSON
.
message
)
complete
:
->
closeSpinner
()
insertToTextArea
=
(
filename
,
url
)
->
$
(
child
).
val
(
index
,
val
)
->
val
.
replace
(
"{{"
+
filename
+
"}}"
,
url
+
"
\n
"
)
appendToTextArea
=
(
url
)
->
$
(
child
).
val
(
index
,
val
)
->
val
+
url
+
"
\n
"
showSpinner
=
(
e
)
->
form
.
find
(
".div-dropzone-spinner"
).
css
"opacity"
:
0.7
"display"
:
"inherit"
closeSpinner
=
->
form
.
find
(
".div-dropzone-spinner"
).
css
"opacity"
:
0
"display"
:
"none"
showError
=
(
message
)
->
checkIfMsgExists
=
$
(
".error-alert"
).
children
().
length
if
checkIfMsgExists
is
0
$
(
".error-alert"
).
append
divAlert
$
(
".div-dropzone-alert"
).
append
btnAlert
+
message
closeAlertMessage
=
->
form
.
find
(
".div-dropzone-alert"
).
alert
"close"
form
.
find
(
".markdown-selector"
).
click
(
e
)
->
e
.
preventDefault
()
$
(
@
).
closest
(
'.gfm-form'
).
find
(
'.div-dropzone'
).
click
()
return
formatLink
:
(
str
)
->
"!["
+
str
.
alt
+
"]("
+
str
.
url
+
")"
app/assets/javascripts/markdown_area.js.coffee
deleted
100644 → 0
View file @
8bc65f6d
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=
\"
fa fa-picture-o div-dropzone-icon
\"
></i>"
iconSpinner
=
"<i class=
\"
fa fa-spinner fa-spin div-dropzone-icon
\"
></i>"
btnAlert
=
"<button type=
\"
button
\"
"
+
alertAttr
+
">×</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
$
(
".div-dropzone-spinner"
).
css
"opacity"
:
0
"display"
:
"none"
# Preview button
$
(
document
).
off
"click"
,
".js-md-preview-button"
$
(
document
).
on
"click"
,
".js-md-preview-button"
,
(
e
)
->
###
Shows the Markdown preview.
Lets the server render GFM into Html and displays it.
###
e
.
preventDefault
()
form
=
$
(
this
).
closest
(
"form"
)
# toggle tabs
form
.
find
(
".js-md-write-button"
).
parent
().
removeClass
"active"
form
.
find
(
".js-md-preview-button"
).
parent
().
addClass
"active"
# toggle content
form
.
find
(
".md-write-holder"
).
hide
()
form
.
find
(
".md-preview-holder"
).
show
()
preview
=
form
.
find
(
".js-md-preview"
)
mdText
=
form
.
find
(
".markdown-area"
).
val
()
if
mdText
.
trim
().
length
is
0
preview
.
text
"Nothing to preview."
else
preview
.
text
"Loading..."
$
.
get
(
$
(
this
).
data
(
"url"
),
md_text
:
mdText
).
success
(
previewData
)
->
preview
.
html
previewData
# Write button
$
(
document
).
off
"click"
,
".js-md-write-button"
$
(
document
).
on
"click"
,
".js-md-write-button"
,
(
e
)
->
###
Shows the Markdown textarea.
###
e
.
preventDefault
()
form
=
$
(
this
).
closest
(
"form"
)
# toggle tabs
form
.
find
(
".js-md-write-button"
).
parent
().
addClass
"active"
form
.
find
(
".js-md-preview-button"
).
parent
().
removeClass
"active"
# toggle content
form
.
find
(
".md-write-holder"
).
show
()
form
.
find
(
".md-preview-holder"
).
hide
()
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
"display"
:
"inherit"
return
complete
:
->
$
(
".dz-preview"
).
remove
()
$
(
".markdown-area"
).
trigger
"input"
$
(
".div-dropzone-spinner"
).
css
"opacity"
:
0
"display"
:
"none"
return
)
child
=
$
(
dropzone
[
0
]).
children
(
"textarea"
)
formatLink
=
(
str
)
->
"!["
+
str
.
alt
+
"]("
+
str
.
url
+
")"
handlePaste
=
(
e
)
->
e
.
preventDefault
()
my_event
=
e
.
originalEvent
if
my_event
.
clipboardData
and
my_event
.
clipboardData
.
items
processItem
(
my_event
)
processItem
=
(
e
)
->
image
=
isImage
(
e
)
if
image
filename
=
getFilename
(
e
)
or
"image.png"
text
=
"{{"
+
filename
+
"}}"
pasteText
(
text
)
uploadFile
image
.
getAsFile
(),
filename
else
text
=
e
.
clipboardData
.
getData
(
"text/plain"
)
pasteText
(
text
)
isImage
=
(
data
)
->
i
=
0
while
i
<
data
.
clipboardData
.
items
.
length
item
=
data
.
clipboardData
.
items
[
i
]
if
item
.
type
.
indexOf
(
"image"
)
isnt
-
1
return
item
i
++
return
false
pasteText
=
(
text
)
->
caretStart
=
$
(
child
)[
0
].
selectionStart
caretEnd
=
$
(
child
)[
0
].
selectionEnd
textEnd
=
$
(
child
).
val
().
length
beforeSelection
=
$
(
child
).
val
().
substring
0
,
caretStart
afterSelection
=
$
(
child
).
val
().
substring
caretEnd
,
textEnd
$
(
child
).
val
beforeSelection
+
text
+
afterSelection
$
(
".markdown-area"
).
trigger
"input"
getFilename
=
(
e
)
->
if
window
.
clipboardData
and
window
.
clipboardData
.
getData
value
=
window
.
clipboardData
.
getData
(
"Text"
)
else
if
e
.
clipboardData
and
e
.
clipboardData
.
getData
value
=
e
.
clipboardData
.
getData
(
"text/plain"
)
value
=
value
.
split
(
"
\r
"
)
value
.
first
()
uploadFile
=
(
item
,
filename
)
->
formData
=
new
FormData
()
formData
.
append
"markdown_img"
,
item
,
filename
$
.
ajax
url
:
project_image_path_upload
type
:
"POST"
data
:
formData
dataType
:
"json"
processData
:
false
contentType
:
false
headers
:
"X-CSRF-Token"
:
$
(
"meta[name=
\"
csrf-token
\"
]"
).
attr
(
"content"
)
beforeSend
:
->
showSpinner
()
closeAlertMessage
()
success
:
(
e
,
textStatus
,
response
)
->
insertToTextArea
(
filename
,
formatLink
(
response
.
responseJSON
.
link
))
error
:
(
response
)
->
showError
(
response
.
responseJSON
.
message
)
complete
:
->
closeSpinner
()
insertToTextArea
=
(
filename
,
url
)
->
$
(
child
).
val
(
index
,
val
)
->
val
.
replace
(
"{{"
+
filename
+
"}}"
,
url
+
"
\n
"
)
appendToTextArea
=
(
url
)
->
$
(
child
).
val
(
index
,
val
)
->
val
+
url
+
"
\n
"
showSpinner
=
(
e
)
->
$
(
".div-dropzone-spinner"
).
css
"opacity"
:
0.7
"display"
:
"inherit"
closeSpinner
=
->
$
(
".div-dropzone-spinner"
).
css
"opacity"
:
0
"display"
:
"none"
showError
=
(
message
)
->
checkIfMsgExists
=
$
(
".error-alert"
).
children
().
length
if
checkIfMsgExists
is
0
$
(
".error-alert"
).
append
divAlert
$
(
".div-dropzone-alert"
).
append
btnAlert
+
message
closeAlertMessage
=
->
$
(
".div-dropzone-alert"
).
alert
"close"
$
(
".markdown-selector"
).
click
(
e
)
->
e
.
preventDefault
()
$
(
@
).
closest
(
'.gfm-form'
).
find
(
'.div-dropzone'
).
click
()
return
return
app/assets/javascripts/notes.js.coffee
View file @
80e784ed
...
...
@@ -219,6 +219,7 @@ class @Notes
setupNoteForm
:
(
form
)
->
disableButtonIfEmptyField
form
.
find
(
".js-note-text"
),
form
.
find
(
".js-comment-button"
)
form
.
removeClass
"js-new-note-form"
form
.
find
(
'.div-dropzone'
).
remove
()
# setup preview buttons
form
.
find
(
".js-md-write-button, .js-md-preview-button"
).
tooltip
placement
:
"left"
...
...
@@ -233,6 +234,7 @@ class @Notes
# remove notify commit author checkbox for non-commit notes
form
.
find
(
".js-notify-commit-author"
).
remove
()
if
form
.
find
(
"#note_noteable_type"
).
val
()
isnt
"Commit"
GitLab
.
GfmAutoComplete
.
setup
()
new
DropzoneInput
(
form
)
form
.
show
()
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment