1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-08-17 14:37:58 +00:00
seahub/templates/file_edit.html

403 lines
15 KiB
HTML
Raw Normal View History

2012-08-06 12:29:14 +00:00
{% extends base_template %}
2012-11-04 05:29:20 +00:00
{% load seahub_tags i18n %}
{% load url from future %}
2012-08-06 12:29:14 +00:00
{% block extra_style %}
{% if filetype == 'Sf' %}
<link rel="stylesheet" type="text/css" href="{{ MEDIA_URL }}aloha-0.22.7/css/aloha.css" />
{% endif %}
{% if filetype == 'Text' %}
<link rel="stylesheet" type="text/css" href="{{ MEDIA_URL }}codemirror/codemirror.css" />
<style type="text/css">
.CodeMirror-focused pre.CodeMirror-cursor { visibility: visible; }
.CodeMirror-scroll { height:auto; min-height:700px; }
</style>
<link rel="stylesheet" type="text/css" href="{{ MEDIA_URL }}codemirror/monokai.css" />
{% endif %}
{% if filetype == 'Markdown' %}
<link rel="stylesheet" type="text/css" href="{{ MEDIA_URL }}css/pagedown.css" />
<style type="text/css">
#top-bar, #header, #edit-hd { display:none; }
#main { min-height:0; }
.withpd { padding:40px 96px; }
</style>
{% endif %}
<style type="text/css">
#main {
width:100%;
}
#footer {
display:none;
}
#edit-hd, #path-op {
width:950px;
margin:0 auto;
}
#path-op {
padding-bottom:6px;
}
#path-op .path {
margin-top:1.2em
}
#file-edit {
2012-12-03 03:34:32 +00:00
min-height:700px;
padding:30px 0 60px;
background:#f4f4f4;
border-top:1px solid #ededed;
}
#sf, #md-edit, #edit-tip {
box-shadow:0 0 6px #ccc;
border:1px solid #ccc;
margin:0 auto;
}
#sf {
min-height:620px;
}
#edit-tip {
min-height:200px;
padding:10px;
width:928px;
background:#fff;
margin:0 auto;
}
.fixed-path-op {
position:fixed;
background:#fff;
border-bottom:1px solid #ededed;/*for ie*/
box-shadow:0 1px 3px #777;
z-index:1010;/*make seaf image show below path-op*/
}
.CodeMirror {
width:950px;
margin:0 auto;
box-shadow:0 0 6px #272822;
}
</style>
{% endblock %}
2012-08-06 12:29:14 +00:00
{% block main_panel %}
<h2 id="edit-hd">{% trans "Edit" %} <span class="op-target">{{ u_filename }}</span></h2>
<div id="path-op" class="ovhd">
<p class="path fleft">
2012-11-04 05:29:20 +00:00
{% trans "Current path: " %}
2012-08-06 12:29:14 +00:00
{% for name, link in zipped %}
{% if not forloop.last %}
<a href="{{ SITE_ROOT }}repo/{{ repo.id }}/?p={{ link|urlencode }}">{{ name }}</a> /
{% else %}
2012-08-17 09:24:15 +00:00
<a href="{{ SITE_ROOT }}repo/{{ repo.id }}/files/?p={{ path }}">{{ name }}</a>
2012-08-06 12:29:14 +00:00
{% endif %}
{% endfor %}
2012-12-03 03:34:32 +00:00
</p>
<div id="op-after-edit" class="fright vh">
2012-12-03 03:34:32 +00:00
{% if filetype == 'Markdown' %}
<button id="source-code-btn" class="hide">{% trans "Continue editing" %}</button>
<button id="preview-btn">{% trans "Preview" %}</button>
{% endif %}
<button id="file-edit-submit">{% trans "Submit" %}</button>
{% if from == 'wiki_page_edit' %}
<a href="{% url 'group_wiki' gid wiki_name %}" id="file-edit-cancel">{% trans "Cancel" %}</a>
{% else %}
2012-12-03 03:34:32 +00:00
<a href="{{ SITE_ROOT }}repo/{{ repo.id }}/files/?p={{ path }}" id="file-edit-cancel">{% trans "Cancel" %}</a>
{% endif %}
2012-12-03 03:34:32 +00:00
</div>
</div>
<div id="file-edit"{% if filetype == 'Markdown' %} class="hide"{% endif %}>
{% include 'snippets/file_encoding.html' %}
{% if err %}
<div id="edit-tip" class="article">
<p class="error">{{ err }}</p>
</div>
{% else %}
{% if file_content != None %}
{% if filetype == 'Text' %}
<textarea id="docu-view" class="hide">{{ file_content|escape }}</textarea>
{% endif %}
{% if filetype == 'Markdown' %}
<div id="md-edit">
<div id="wmd-button-bar"></div>
<textarea class="wmd-input" id="wmd-input">{{ file_content|escape }}</textarea>
<div id="wmd-preview" class="article hide"></div>
</div>
<table id="md-edit-help" class="hide">
<tbody>
<tr>
<th>{% trans "Enter this" %}</th>
<th>{% trans "To see this" %}</th>
</tr>
<tr>
<td><pre>**{% trans "bold" %}** {% trans "text" %}</pre></td>
<td><strong class="bold">{% trans "bold" %}</strong> {% trans "text" %}</td>
</tr>
<tr>
<td><pre>*{% trans "italics" %}* {% trans "text" %}</pre></td>
<td><span class="italic">{% trans "italics" %}</span> {% trans "text" %}</td>
</tr>
<tr>
<td><pre>{% trans "Header" %}
====== </pre></td>
<td>
<h3>{% trans "Header" %}</h3>
</td>
</tr>
<tr>
<td><pre>{% trans "Smaller header" %}
--------- </pre></td>
<td><h4>{% trans "Smaller header" %}</h4></td>
</tr>
<tr>
<td><pre>[{% trans "Link something" %}](http://cloud.seafile.com/)</pre></td>
<td><a href="http://cloud.seafile.com/">{% trans "Link something" %}</a></td>
</tr>
<tr>
<td><pre>![{% trans "alt text" %}](http://cloud.seafile.com/media/img/logo.png)</pre></td>
<td><img src="http://cloud.seafile.com/media/img/logo.png" alt="" /></td>
</tr>
<tr>
<td><pre>* {% trans "unordered list" %}
* {% trans "leave empty lines around the list" %}</pre></td>
<td>
<ul>
<li>{% trans "unordered list" %}</li>
<li>{% trans "leave empty lines around the list" %}</li>
</ul>
</td>
</tr>
<tr>
<td><pre>1. {% trans "ordered list" %}
2. {% trans "leave empty lines" %}</pre></td>
<td>
<ol>
<li>{% trans "ordered list" %}</li>
<li>{% trans "leave empty lines" %}</li>
</ol>
</td>
</tr>
</tbody></table>
{% endif %}
{% if filetype == 'Sf' %}
<div id="sf" class="article">{{ file_content|safe }}</div>
{% endif %}
{% endif %}
{% endif %}
2012-08-06 12:29:14 +00:00
</div>
{% if not err and repo.encrypted %}
<form id="repo-decrypt-form" class="simple-input-popup hide">
<h3>{% trans 'Library' %} <span class="op-target">{{repo.name}}</span> {% trans 'is encrypted' %}</h3>
<label>{% trans 'Password' %}</label><br />
<input type="password" name="password" maxlength="15" class="long-input" />
<p class="tip">{% trans "The password will be kept in the server for only 1 hour." %}</p>
<p class="error"></p>
<input type="submit" class="submit" value="{% trans 'Submit' %}" />
<button class="simplemodal-close">{% trans 'Cancel' %}</button>
</form>
{% endif %}
2012-08-06 12:29:14 +00:00
{% endblock %}
{% block extra_script %}
{% if not err and file_content != None %}
{% if filetype == 'Sf' %}
<script type="text/javascript" src="{{MEDIA_URL}}aloha-0.22.7/lib/require.js"></script>
<script type="text/javascript">
//settings must be before aloha.js
Aloha = window.Aloha || {};
Aloha.settings = Aloha.settings || {};
switch($('#lang-context').data('lang')) {
case 'zh-cn': Aloha.settings.locale = "zh-hans";break;
case 'ru': Aloha.settings.locale = "ru";break;
}
</script>
<script type="text/javascript" src="{{MEDIA_URL}}aloha-0.22.7/lib/aloha.js" data-aloha-plugins="common/format, common/abbr, common/align, common/characterpicker, common/dom-to-xhtml, common/image, common/link, common/list, common/table, common/undo, common/ui, extra/textcolor"></script>
{% endif %}
{% if filetype == 'Text' %}
<script type="text/javascript" src="{{MEDIA_URL}}codemirror/codemirror-2.36.js"></script>
{% endif %}
{% if filetype == 'Markdown' %}
<script type="text/javascript" src="{{MEDIA_URL}}js/Markdown.Converter.js"></script>
<script type="text/javascript" src="{{MEDIA_URL}}js/Markdown.Sanitizer.js"></script>
<script type="text/javascript" src="{{MEDIA_URL}}js/Markdown.Editor.js"></script>
<script type="text/javascript" src="{{MEDIA_URL}}js/Markdown.Extra.js"></script>
{% endif %}
{% endif %}
2012-08-06 12:29:14 +00:00
<script type="text/javascript">
{% if not err and file_content != None %}
$(window).scroll(function() {
var offset = $('#edit-hd').offset();
if ($(window).scrollTop() > offset.top + $('#edit-hd').height()) {
$('#edit-hd').css('margin-bottom', $('#path-op').outerHeight(true));
$('#path-op').addClass('fixed-path-op').css({'left':0, 'top':0, 'padding-left':offset.left, 'padding-right':offset.left});
} else {
2012-12-03 03:34:32 +00:00
$('#path-op').removeClass('fixed-path-op').removeAttr('style');
$('#edit-hd').css('margin-bottom', 0);
}
});
{% if filetype == 'Sf' %}
Aloha.ready(function() {
if ($.browser.msie) {
$('#sf').aloha();
} else {
$('#sf').aloha().focus();
}
});
{% endif %}
{% if filetype == 'Text' %}
var editor = CodeMirror.fromTextArea($('#docu-view')[0], {
{% include "snippets/editor_set_mode.html" %}
theme: 'monokai',
indentUnit: 4,
lineNumbers: true,
2012-12-03 03:34:32 +00:00
lineWrapping: true,
onCursorActivity: function() {
var cursor = editor.cursorCoords(true, 'page');
if (cursor.yBot >= $(window).height() + $(window).scrollTop() - 60) {
$(window).scrollTop($(window).scrollTop() + parseInt($('#file-edit').css('padding-bottom')));
}
// keep the cursor visible when path-op fixed and moving the cursor upward
if (cursor.y - $(window).scrollTop() < $('#path-op').outerHeight() && !editor.somethingSelected()) {
$(window).scrollTop(cursor.y - $('#path-op').outerHeight());
}
2012-12-03 03:34:32 +00:00
},
autofocus: true
});
{% endif %}
2012-08-22 06:41:36 +00:00
{% if filetype == 'Markdown' %}
var converter = Markdown.getSanitizingConverter();
converter.hooks.chain("preBlockGamut", function (text, rbg) {
return text.replace(/^ {0,3}""" *\n((?:.*?\n)+?) {0,3}""" *$/gm, function (whole, inner) {
return "<blockquote>" + rbg(inner) + "</blockquote>\n";
});
});
Markdown.Extra.init(converter, {extensions: ["fenced_code_gfm"]});
var editor = new Markdown.Editor(converter,'',{handler:mdEditHelp, title:'{% trans "Editing Help" %}'});
editor.run();
var file_edit = $('#file-edit');
var file_edit_styles = {'min-height':0, 'padding-bottom':50, 'height':$(window).height() - $('#path-op').outerHeight() - parseInt(file_edit.css('padding-top')) - 51};
file_edit.css(file_edit_styles).removeClass('hide');
$('#wmd-input').css({'height':file_edit.height() - $('#file-enc-conf').outerHeight(true) - $('#wmd-button-bar').outerHeight() - parseInt($('#wmd-input').css('padding-top'))*2});
$('#preview-btn, #source-code-btn').click(function() {
$('#wmd-button-bar, #wmd-input, #wmd-preview, #source-code-btn, #preview-btn').toggleClass('hide');
$('#md-edit').toggleClass('withpd');
if (!$('#wmd-input').hasClass('hide')) {
file_edit.css(file_edit_styles);
} else {
file_edit.removeAttr('style');
}
});
$('#wmd-preview').children(':first').css('margin-top', '0');
function mdEditHelp() {
$('#md-edit-help').modal();
}
{% endif %}
2012-08-22 06:41:36 +00:00
$('#op-after-edit').removeClass('vh');
$('#file-edit-submit').click(function () {
disable($(this));
editSubmit();
});
function editSubmit() {
{% if filetype == 'Sf' %}
var content = $('#sf').html();
{% endif %}
{% if filetype == 'Text' %}
var content = editor.getValue();
{% endif %}
{% if filetype == 'Markdown' %}
var content = $('#wmd-input').val();
{% endif %}
$.ajax({
type: "POST",
url: '{{ SITE_ROOT }}repo/{{repo.id}}/file/edit/?p={{path|urlencode}}&head={{head_id}}&from={{from}}&gid={{gid}}',
dataType: 'json',
cache: false,
contentType: 'application/json; charset=utf-8',
beforeSend: prepareCSRFToken,
data: {content: content, encoding: $('#file-enc').val()},
success: function(data) {
location.href = data['href'];
},
2013-01-05 04:16:12 +00:00
error: function(xhr, textStatus, errorThrown) {
if (xhr.responseText) {
var resp = jQuery.parseJSON(xhr.responseText);
feedback(resp['error'], 'error');
if (resp['op'] == 'decrypt') {
$('#repo-decrypt-form').modal();
$('#simplemodal-container').css({'height':'auto'});
}
} else if (xhr.readyState == 0) {
feedback('{% trans "Submit failed. Please check the network." %}', 'error');
} else {
feedback('{% trans "Submit failed." %}', 'error');
}
enable($('#file-edit-submit'));
}
});
}
{% endif %}
{% if op == 'decrypt' %}
$('#repo-decrypt-form').modal();
$('#simplemodal-container').css({'height':'auto'});
{% endif %}
$('#repo-decrypt-form').submit(function() {
var pwd_input = $(this).find('input[name="password"]');
var pwd = $.trim(pwd_input.val());
var err = $(this).find('.error');
if (!pwd) {
err.html('{% trans "Password is required." %}');
} else if (pwd.length < 3 || pwd.length > 15) {
err.html('{% trans "Password should be 3 to 15 characters." %}');
} else {
$.ajax({
url: '{% url 'repo_set_password' %}',
type: 'POST',
dataType: 'json',
cache: 'false',
beforeSend: prepareCSRFToken,
data: {
repo_id: '{{repo.id}}',
password: pwd,
username: '{{request.user.username}}'
},
success: function(data) {
if (data['success']) {
$.modal.close();
{% if file_content != None %}
editSubmit();
{% endif %}
{% if op == 'decrypt' %}
location.reload(true);
{% endif %}
}
},
error: function(jqXHR, textStatus, errorThrown) {
var err_str = '';
if (jqXHR.responseText) {
err_str = $.parseJSON(jqXHR.responseText).error;
} else {
2013-01-12 08:33:32 +00:00
err_str = '{% trans "Failed. Please check the network." %}';
}
err.html(err_str);
pwd_input.val('');
}
});
}
return false;
2012-08-06 12:29:14 +00:00
});
</script>
{% endblock %}