mirror of
https://github.com/redmine/redmine.git
synced 2025-11-15 17:56:03 +01:00
Generate markup for uploaded image dropped into wiki-edit textarea (#26071).
Patch by Felix Gliesche. git-svn-id: http://svn.redmine.org/redmine/trunk@16643 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
@@ -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(){
|
||||
|
||||
Reference in New Issue
Block a user