Commit 1dc2a7f1 authored by jplang's avatar jplang
Browse files

Generate markup for uploaded image dropped into wiki-edit textarea (#26071).

Patch by Felix Gliesche.

git-svn-id: https://svn.redmine.org/redmine/trunk@16643 e93f8b46-1217-0410-a6f0-8f06a7374b81
parent c6dd4f6d
......@@ -53,6 +53,11 @@ module Redmine
map
end
# returns all full mime types for a given (top level) type
def self.by_type(type)
MIME_TYPES.keys.select{|m| m.start_with? "#{type}/"}
end
# returns mime type for name or nil if unknown
def self.of(name)
return nil unless name.present?
......
......@@ -35,6 +35,7 @@ module Redmine
javascript_include_tag('jstoolbar/jstoolbar') +
javascript_include_tag('jstoolbar/markdown') +
javascript_include_tag("jstoolbar/lang/jstoolbar-#{current_language.to_s.downcase}") +
javascript_tag("var wikiImageMimeTypes = #{Redmine::MimeType.by_type('image').to_json};") +
stylesheet_link_tag('jstoolbar')
end
@heads_for_wiki_formatter_included = true
......
......@@ -35,6 +35,7 @@ module Redmine
content_for :header_tags do
javascript_include_tag('jstoolbar/jstoolbar-textile.min') +
javascript_include_tag("jstoolbar/lang/jstoolbar-#{current_language.to_s.downcase}") +
javascript_tag("var wikiImageMimeTypes = #{Redmine::MimeType.by_type('image').to_json};") +
stylesheet_link_tag('jstoolbar')
end
@heads_for_wiki_formatter_included = true
......
......@@ -58,6 +58,7 @@ function ajaxUpload(file, attachmentId, fileSpan, inputEl) {
progressEventHandler: onProgress.bind(progressSpan)
})
.done(function(result) {
addInlineAttachmentMarkup(file);
progressSpan.progressbar( 'value', 100 ).remove();
fileSpan.find('input.description, a').css('display', 'inline-block');
})
......@@ -175,9 +176,11 @@ function handleFileDropEvent(e) {
blockEventPropagation(e);
if ($.inArray('Files', e.dataTransfer.types) > -1) {
handleFileDropEvent.target = e.target;
uploadAndAttachFiles(e.dataTransfer.files, $('input:file.filedrop').first());
}
}
handleFileDropEvent.target = '';
function dragOverHandler(e) {
$(this).addClass('fileover');
......@@ -204,6 +207,49 @@ function setupFileDrop() {
}
}
function addInlineAttachmentMarkup(file) {
// insert uploaded image inline if dropped area is currently focused textarea
if($(handleFileDropEvent.target).hasClass('wiki-edit') && $.inArray(file.type, window.wikiImageMimeTypes) > -1) {
var $textarea = $(handleFileDropEvent.target);
var cursorPosition = $textarea.prop('selectionStart');
var description = $textarea.val();
var sanitizedFilename = file.name.replace(/[\/\?\%\*\:\|\"\'<>\n\r]+/, '_');
var inlineFilename = encodeURIComponent(sanitizedFilename);
var newLineBefore = true;
var newLineAfter = true;
if(cursorPosition === 0 || description.substr(cursorPosition-1,1).match(/\r|\n/)) {
newLineBefore = false;
}
if(description.substr(cursorPosition,1).match(/\r|\n/)) {
newLineAfter = false;
}
$textarea.val(
description.substring(0, cursorPosition)
+ (newLineBefore ? '\n' : '')
+ inlineFilename
+ (newLineAfter ? '\n' : '')
+ description.substring(cursorPosition, description.length)
);
$textarea.prop({
'selectionStart': cursorPosition + newLineBefore,
'selectionEnd': cursorPosition + inlineFilename.length + newLineBefore
});
$textarea.closest('.jstEditor')
.siblings('.jstElements')
.find('.jstb_img').click();
// move cursor into next line
cursorPosition = $textarea.prop('selectionStart');
$textarea.prop({
'selectionStart': cursorPosition + 1,
'selectionEnd': cursorPosition + 1
});
}
}
$(document).ready(setupFileDrop);
$(document).ready(function(){
$("input.deleted_attachment").change(function(){
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment