Merge pull request #869 from lucas-clemente/rc
allow uploading files by drag and drop (if uploading files is enabled).
This commit is contained in:
+12
-4
@@ -129,8 +129,10 @@ module Precious
|
|||||||
wikip = wiki_page(params[:splat].first)
|
wikip = wiki_page(params[:splat].first)
|
||||||
@name = wikip.name
|
@name = wikip.name
|
||||||
@path = wikip.path
|
@path = wikip.path
|
||||||
|
@upload_dest = find_upload_dest(@path)
|
||||||
|
|
||||||
wiki = wikip.wiki
|
wiki = wikip.wiki
|
||||||
|
@allow_uploads = wiki.allow_uploads
|
||||||
if page = wikip.page
|
if page = wikip.page
|
||||||
if wiki.live_preview && page.format.to_s.include?('markdown') && supported_useragent?(request.user_agent)
|
if wiki.live_preview && page.format.to_s.include?('markdown') && supported_useragent?(request.user_agent)
|
||||||
live_preview_url = '/livepreview/index.html?page=' + encodeURIComponent(@name)
|
live_preview_url = '/livepreview/index.html?page=' + encodeURIComponent(@name)
|
||||||
@@ -266,6 +268,8 @@ module Precious
|
|||||||
wikip = wiki_page(params[:splat].first.gsub('+', '-'))
|
wikip = wiki_page(params[:splat].first.gsub('+', '-'))
|
||||||
@name = wikip.name.to_url
|
@name = wikip.name.to_url
|
||||||
@path = wikip.path
|
@path = wikip.path
|
||||||
|
@allow_uploads = wikip.wiki.allow_uploads
|
||||||
|
@upload_dest = find_upload_dest(@path)
|
||||||
|
|
||||||
page_dir = settings.wiki_options[:page_file_dir].to_s
|
page_dir = settings.wiki_options[:page_file_dir].to_s
|
||||||
unless page_dir.empty?
|
unless page_dir.empty?
|
||||||
@@ -453,10 +457,7 @@ module Precious
|
|||||||
@page = page
|
@page = page
|
||||||
@name = name
|
@name = name
|
||||||
@content = page.formatted_data
|
@content = page.formatted_data
|
||||||
@upload_dest = settings.wiki_options[:allow_uploads] ?
|
@upload_dest = find_upload_dest(path)
|
||||||
(settings.wiki_options[:per_page_uploads] ?
|
|
||||||
"#{path}/#{@name}".sub(/^\/\//, '') : 'uploads'
|
|
||||||
) : ''
|
|
||||||
|
|
||||||
# Extensions and layout data
|
# Extensions and layout data
|
||||||
@editable = true
|
@editable = true
|
||||||
@@ -505,5 +506,12 @@ module Precious
|
|||||||
commit_message.merge! author_parameters unless author_parameters.nil?
|
commit_message.merge! author_parameters unless author_parameters.nil?
|
||||||
commit_message
|
commit_message
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def find_upload_dest(path)
|
||||||
|
settings.wiki_options[:allow_uploads] ?
|
||||||
|
(settings.wiki_options[:per_page_uploads] ?
|
||||||
|
"#{path}/#{@name}".sub(/^\/\//, '') : 'uploads'
|
||||||
|
) : ''
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -338,6 +338,31 @@ a#function-help:hover span { background-position: -402px -25px; }
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* @section uploads */
|
||||||
|
|
||||||
|
#gollum-editor-body.dragging {
|
||||||
|
box-shadow: 0 0 10px #AAE000;
|
||||||
|
}
|
||||||
|
|
||||||
|
#gollum-editor-body.uploading {
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
#gollum-editor-body + div {
|
||||||
|
display: none;
|
||||||
|
font-size: 1.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
#gollum-editor-body + div > i {
|
||||||
|
font-size: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
#gollum-editor-body.uploading + div {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* @section form-fields */
|
/* @section form-fields */
|
||||||
|
|
||||||
#gollum-editor textarea {
|
#gollum-editor textarea {
|
||||||
|
|||||||
@@ -27,6 +27,51 @@
|
|||||||
content: "\f0c1";
|
content: "\f0c1";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.fa-spinner:before {
|
||||||
|
content: "\f110";
|
||||||
|
}
|
||||||
|
|
||||||
|
.fa-spin {
|
||||||
|
-webkit-animation: spin 2s infinite linear;
|
||||||
|
-moz-animation: spin 2s infinite linear;
|
||||||
|
-o-animation: spin 2s infinite linear;
|
||||||
|
animation: spin 2s infinite linear;
|
||||||
|
}
|
||||||
|
@-moz-keyframes spin {
|
||||||
|
0% {
|
||||||
|
-moz-transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
-moz-transform: rotate(359deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@-webkit-keyframes spin {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
-webkit-transform: rotate(359deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@-o-keyframes spin {
|
||||||
|
0% {
|
||||||
|
-o-transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
-o-transform: rotate(359deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@keyframes spin {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
-webkit-transform: rotate(359deg);
|
||||||
|
transform: rotate(359deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* margin & padding reset*/
|
/* margin & padding reset*/
|
||||||
* {
|
* {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
|
|||||||
@@ -98,6 +98,52 @@
|
|||||||
$('#gollum-editor-help').removeClass('jaws');
|
$('#gollum-editor-help').removeClass('jaws');
|
||||||
}
|
}
|
||||||
} // EditorHas.functionBar
|
} // EditorHas.functionBar
|
||||||
|
|
||||||
|
if ( EditorHas.dragDropUpload() ) {
|
||||||
|
var $editorBody = $('#gollum-editor-body');
|
||||||
|
var editorBody = $('#gollum-editor-body')[0];
|
||||||
|
editorBody.ondragover = function(e) {
|
||||||
|
$editorBody.addClass('dragging');
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
editorBody.ondragleave = function() {
|
||||||
|
$editorBody.removeClass('dragging');
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
editorBody.ondrop = function(e) {
|
||||||
|
debug("dropped file");
|
||||||
|
e.preventDefault();
|
||||||
|
$editorBody.removeClass('dragging').addClass('uploading');
|
||||||
|
|
||||||
|
var file = e.dataTransfer.files[0],
|
||||||
|
formData = new FormData();
|
||||||
|
formData.append('upload_dest', uploadDest);
|
||||||
|
formData.append('file', file);
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: '/uploadFile',
|
||||||
|
data: formData,
|
||||||
|
cache: false,
|
||||||
|
contentType: false,
|
||||||
|
processData: false,
|
||||||
|
type: 'POST',
|
||||||
|
success: function(){
|
||||||
|
$editorBody.removeClass('uploading');
|
||||||
|
var text = '[[' + uploadDest + '/' + file.name + ']]';
|
||||||
|
var pos = editorBody.selectionStart || 0;
|
||||||
|
editorBody.value = editorBody.value.substring(0, pos) + text + editorBody.value.substring(pos);
|
||||||
|
editorBody.selectionStart = pos + text.length;
|
||||||
|
editorBody.selectionEnd = pos + text.length;
|
||||||
|
},
|
||||||
|
error: function(r, textStatus) {
|
||||||
|
alert('Error uploading file: ' + textStatus);
|
||||||
|
$editorBody.removeClass('uploading');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
} // EditorHas.dragDropUpload
|
||||||
} // EditorHas.baseEditorMarkup
|
} // EditorHas.baseEditorMarkup
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -444,6 +490,17 @@
|
|||||||
*/
|
*/
|
||||||
titleDisplayed: function() {
|
titleDisplayed: function() {
|
||||||
return ( ActiveOptions.NewFile );
|
return ( ActiveOptions.NewFile );
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* EditorHas.dragDropUpload
|
||||||
|
* True if the editor is supports drag and drop file uploads, false otherwise.
|
||||||
|
*
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
dragDropUpload: function() {
|
||||||
|
return $('#gollum-editor.uploads-allowed').length;
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<div id="gollum-editor" data-escaped-name="{{escaped_name}}" class="{{#is_create_page}}create{{/is_create_page}}{{#is_edit_page}}edit{{/is_edit_page}}">
|
<div id="gollum-editor" data-escaped-name="{{escaped_name}}" class="{{#is_create_page}}create{{/is_create_page}}{{#is_edit_page}}edit{{/is_edit_page}} {{#allow_uploads}}uploads-allowed{{/allow_uploads}}">
|
||||||
{{#is_create_page}}
|
{{#is_create_page}}
|
||||||
<form name="gollum-editor" action="{{base_url}}/create" method="post">
|
<form name="gollum-editor" action="{{base_url}}/create" method="post">
|
||||||
{{/is_create_page}}
|
{{/is_create_page}}
|
||||||
@@ -89,6 +89,10 @@
|
|||||||
</div>
|
</div>
|
||||||
<textarea id="gollum-editor-body"
|
<textarea id="gollum-editor-body"
|
||||||
data-markup-lang="{{format}}" name="content" class="mousetrap">{{content}}</textarea>
|
data-markup-lang="{{format}}" name="content" class="mousetrap">{{content}}</textarea>
|
||||||
|
<div>
|
||||||
|
<i class="fa fa-spinner fa-spin"></i>
|
||||||
|
Uploading file ...
|
||||||
|
</div>
|
||||||
|
|
||||||
{{#header}}
|
{{#header}}
|
||||||
<div id="gollum-editor-edit-header" class="collapsed">
|
<div id="gollum-editor-edit-header" class="collapsed">
|
||||||
|
|||||||
@@ -19,9 +19,9 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
var baseUrl = '{{base_url}}';
|
var baseUrl = '{{base_url}}';
|
||||||
|
var uploadDest = '{{upload_dest}}';
|
||||||
{{#page}}
|
{{#page}}
|
||||||
var pageFullPath = '{{url_path_display}}';
|
var pageFullPath = '{{url_path_display}}';
|
||||||
var uploadDest = '{{upload_dest}}';
|
|
||||||
{{/page}}
|
{{/page}}
|
||||||
</script>
|
</script>
|
||||||
<script type="text/javascript" src="{{base_url}}/javascript/jquery-1.7.2.min.js"></script>
|
<script type="text/javascript" src="{{base_url}}/javascript/jquery-1.7.2.min.js"></script>
|
||||||
|
|||||||
@@ -17,6 +17,14 @@ module Precious
|
|||||||
false
|
false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def allow_uploads
|
||||||
|
@allow_uploads
|
||||||
|
end
|
||||||
|
|
||||||
|
def upload_dest
|
||||||
|
@upload_dest
|
||||||
|
end
|
||||||
|
|
||||||
def format
|
def format
|
||||||
@format = (@page.format || false) if @format.nil? && @page
|
@format = (@page.format || false) if @format.nil? && @page
|
||||||
@format.to_s.downcase
|
@format.to_s.downcase
|
||||||
|
|||||||
@@ -60,6 +60,14 @@ module Precious
|
|||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def allow_uploads
|
||||||
|
@allow_uploads
|
||||||
|
end
|
||||||
|
|
||||||
|
def upload_dest
|
||||||
|
@upload_dest
|
||||||
|
end
|
||||||
|
|
||||||
def format
|
def format
|
||||||
@format = (@page.format || false) if @format.nil?
|
@format = (@page.format || false) if @format.nil?
|
||||||
@format.to_s.downcase
|
@format.to_s.downcase
|
||||||
|
|||||||
Reference in New Issue
Block a user