mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-08 10:22:46 +00:00
[repo, repo_history]redesign ui
This commit is contained in:
@@ -175,7 +175,7 @@ ul.with-bg li {
|
|||||||
line-height:20px;
|
line-height:20px;
|
||||||
background: #fff url('../img/li.gif') no-repeat scroll left 6px;
|
background: #fff url('../img/li.gif') no-repeat scroll left 6px;
|
||||||
}
|
}
|
||||||
#paginator { margin-top:10px; }
|
#paginator { margin:10px; }
|
||||||
.tri-bg { /*triangle bg, <span>*/
|
.tri-bg { /*triangle bg, <span>*/
|
||||||
display:inline-block;
|
display:inline-block;
|
||||||
font-size:0;
|
font-size:0;
|
||||||
@@ -634,15 +634,35 @@ ul.with-bg li {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*repo page*/
|
/*repo page*/
|
||||||
|
#repo-basic-info {
|
||||||
|
color:#333;
|
||||||
|
background:#fafafa;
|
||||||
|
border:1px solid #ddd;
|
||||||
|
border-radius:3px;
|
||||||
|
-webkit-border-radius: 3px;
|
||||||
|
-moz-border-radius: 3px;
|
||||||
|
margin: 10px 0;
|
||||||
|
}
|
||||||
|
#repo-basic-info .desc,
|
||||||
|
#repo-basic-info .size {
|
||||||
|
padding:5px 10px;
|
||||||
|
margin:0;
|
||||||
|
}
|
||||||
|
#repo-basic-info .desc {
|
||||||
|
border-bottom:1px solid #ddd;
|
||||||
|
}
|
||||||
.path, .access-notice { margin: 0.8em 0 0.4em; }
|
.path, .access-notice { margin: 0.8em 0 0.4em; }
|
||||||
.repo-op button {
|
.repo-op {
|
||||||
|
text-align:right;
|
||||||
|
}
|
||||||
|
.repo-op button,
|
||||||
|
#repo-download-btn {
|
||||||
height:25px;
|
height:25px;
|
||||||
background:#f5f5f5 scroll no-repeat 3px 48%;
|
background:#f5f5f5 scroll no-repeat 3px 48%;
|
||||||
}
|
}
|
||||||
#upload-file {
|
#upload-file {
|
||||||
padding-left:19px;
|
padding-left:19px;
|
||||||
background-image:url('../img/upload.png');
|
background-image:url('../img/upload.png');
|
||||||
margin-right:5px;
|
|
||||||
}
|
}
|
||||||
#add-new-dir {
|
#add-new-dir {
|
||||||
padding-left:23px;
|
padding-left:23px;
|
||||||
@@ -652,20 +672,51 @@ ul.with-bg li {
|
|||||||
padding-left:23px;
|
padding-left:23px;
|
||||||
background-image:url('../img/new-file-icon.png');
|
background-image:url('../img/new-file-icon.png');
|
||||||
}
|
}
|
||||||
.more-op {
|
.repo-file-list-outer-container,
|
||||||
|
.commit-list-outer-container {
|
||||||
|
padding:3px;
|
||||||
|
background:#eee;
|
||||||
|
border-radius:3px;
|
||||||
|
margin:20px 0 25px;
|
||||||
|
}
|
||||||
|
.repo-file-list-inner-container,
|
||||||
|
.commit-list-inner-container {
|
||||||
|
min-height:250px;
|
||||||
|
background:#fff;
|
||||||
|
border:1px solid #ddd;
|
||||||
|
border-radius:3px;
|
||||||
|
}
|
||||||
|
.repo-file-list-not-show {
|
||||||
|
padding-left:10px;
|
||||||
|
}
|
||||||
|
.repo-file-list-topbar {
|
||||||
|
padding:8px 10px;
|
||||||
|
border-bottom:1px solid #ddd;
|
||||||
|
}
|
||||||
|
.repo-file-list-topbar .path {
|
||||||
|
line-height:25px;
|
||||||
|
margin:0;
|
||||||
|
}
|
||||||
|
.repo-file-list {
|
||||||
|
margin:15px 0 0;
|
||||||
|
}
|
||||||
|
.displayed-op {
|
||||||
|
display:inline;
|
||||||
|
margin-right:8px;
|
||||||
|
}
|
||||||
|
.repo-file-list .more-op-icon {
|
||||||
cursor:pointer;
|
cursor:pointer;
|
||||||
}
|
}
|
||||||
.op-list {
|
.repo-file-list .hidden-op {
|
||||||
position:absolute;
|
position:absolute;
|
||||||
left:18px;
|
left:18px;
|
||||||
background:#fff;
|
background:#fff;
|
||||||
padding:6px 1px;
|
padding:6px 1px;
|
||||||
border:1px solid #eee;
|
border:1px solid #eee;
|
||||||
border-radius:5px;
|
border-radius:5px;
|
||||||
-moz-border-radius:5px;
|
|
||||||
z-index:10;
|
z-index:10;
|
||||||
}
|
}
|
||||||
.op-list li a {
|
.hidden-op li a {
|
||||||
display:block;
|
display:block;
|
||||||
padding:0 12px;
|
padding:0 12px;
|
||||||
}
|
}
|
||||||
@@ -694,33 +745,51 @@ ul.with-bg li {
|
|||||||
border-top-color:#333;
|
border-top-color:#333;
|
||||||
}
|
}
|
||||||
#rename-form .new-name {
|
#rename-form .new-name {
|
||||||
margin-top:8px;
|
min-width:180px;
|
||||||
}
|
margin-top:6px;
|
||||||
.latest-commit .more:hover {
|
|
||||||
text-decoration:none;
|
|
||||||
}
|
}
|
||||||
.icon-container {
|
.icon-container {
|
||||||
text-align:center;
|
text-align:center;
|
||||||
}
|
}
|
||||||
.latest-commit-time-author {
|
#repo-download-btn {
|
||||||
color:#333;
|
font-size:14px;
|
||||||
font-size:13px;
|
height:26px;
|
||||||
font-weight:normal;
|
padding:0 5px 0 27px;
|
||||||
|
background-image: url('../img/sync-20.png');
|
||||||
}
|
}
|
||||||
.latest-commit {
|
.latest-commit {
|
||||||
word-wrap:break-word;
|
word-wrap:break-word;
|
||||||
|
border: 1px solid #C5D5DD;
|
||||||
|
border-radius: 4px;
|
||||||
|
margin-top:10px;
|
||||||
}
|
}
|
||||||
.latest-commit .author {
|
.latest-commit .commit-msg,
|
||||||
font-style:italic;
|
.latest-commit .meta-info {
|
||||||
|
padding:4px 10px;
|
||||||
|
margin:0;
|
||||||
|
}
|
||||||
|
.latest-commit .commit-msg {
|
||||||
|
width:928px;
|
||||||
|
padding:8px 10px;
|
||||||
|
background: #E6F1F6;
|
||||||
|
border-bottom: 1px solid #D8E6EC;
|
||||||
|
border-top-left-radius:3px;
|
||||||
|
border-top-right-radius:3px;
|
||||||
|
}
|
||||||
|
.latest-commit .commit-msg .more {
|
||||||
|
margin-left:10px;
|
||||||
|
}
|
||||||
|
.latest-commit .author .avatar {
|
||||||
|
border-radius:3px;
|
||||||
|
}
|
||||||
|
.latest-commit .author .avatar,
|
||||||
|
.latest-commit .author .name,
|
||||||
|
.latest-commit .time {
|
||||||
|
vertical-align:middle;
|
||||||
}
|
}
|
||||||
.latest-commit .time {
|
.latest-commit .time {
|
||||||
color:#666;
|
color:#666;
|
||||||
margin-left:2px;
|
margin-left:5px;
|
||||||
}
|
|
||||||
.repo-history {
|
|
||||||
font-weight:normal;
|
|
||||||
font-size:16px;
|
|
||||||
margin: 4px 0 12px 0;
|
|
||||||
}
|
}
|
||||||
.lsch {
|
.lsch {
|
||||||
font-size:12px;
|
font-size:12px;
|
||||||
@@ -735,12 +804,30 @@ ul.with-bg li {
|
|||||||
max-height:550px;
|
max-height:550px;
|
||||||
overflow:auto;
|
overflow:auto;
|
||||||
}
|
}
|
||||||
|
#ls-ch .latest-commit-time-author {
|
||||||
|
color:#333;
|
||||||
|
font-size:13px;
|
||||||
|
font-weight:normal;
|
||||||
|
}
|
||||||
#ls-ch ul {
|
#ls-ch ul {
|
||||||
padding:0 0 6px 0;
|
padding:0 0 6px 0;
|
||||||
}
|
}
|
||||||
#dirs { /* file mv */
|
#dirs { /* file mv */
|
||||||
margin-top:8px;
|
margin-top:8px;
|
||||||
}
|
}
|
||||||
|
/* repo-history */
|
||||||
|
#history-back-to-repo {
|
||||||
|
margin-top:5px;
|
||||||
|
}
|
||||||
|
.commit-list {
|
||||||
|
margin:0 0 20px;
|
||||||
|
}
|
||||||
|
.commit-list .time {
|
||||||
|
padding-left:10px;
|
||||||
|
}
|
||||||
|
.commit-list .avatar {
|
||||||
|
border-radius:2px;
|
||||||
|
}
|
||||||
/*repo-share-form*/
|
/*repo-share-form*/
|
||||||
#email,
|
#email,
|
||||||
#email_or_group,
|
#email_or_group,
|
||||||
|
@@ -18,10 +18,6 @@ $('#yes-btn').click(function() {
|
|||||||
location.href = Op_url;
|
location.href = Op_url;
|
||||||
});
|
});
|
||||||
|
|
||||||
//handle table
|
|
||||||
$("table tr:nth-child(even)").addClass("even");
|
|
||||||
$("table tr:nth-child(odd)").addClass("odd");
|
|
||||||
|
|
||||||
//highlight the tr when mouse hover on it
|
//highlight the tr when mouse hover on it
|
||||||
$("table tr:gt(0)").hover(
|
$("table tr:gt(0)").hover(
|
||||||
function() {
|
function() {
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
{% extends base_template %}
|
{% extends base_template %}
|
||||||
|
|
||||||
{% load seahub_tags %}
|
{% load seahub_tags avatar_tags %}
|
||||||
{% load url from future %}
|
{% load url from future %}
|
||||||
|
|
||||||
{% block info_bar_message %}
|
{% block info_bar_message %}
|
||||||
@@ -14,133 +14,159 @@
|
|||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block main_panel %}
|
{% block main_panel %}
|
||||||
<h2>{{repo.props.name}}</h2>
|
<div class="w100 ovhd">
|
||||||
<div class="side fright">
|
<h2 class="fleft">{{repo.props.name}}</h2>
|
||||||
<h3>基本信息</h3>
|
{% if not repo.props.encrypted or password_set %}
|
||||||
<p>{{repo.props.desc}}</p>
|
{% if can_access %}
|
||||||
<p>大小:{{ repo_size|filesizeformat }}</p>
|
<button id="repo-download-btn" class="fright">同步到本地</button>
|
||||||
|
{% endif %}
|
||||||
{% if not repo.props.encrypted or password_set %}
|
{% endif %}
|
||||||
{% if can_access %}
|
|
||||||
<div class="latest-commit">
|
|
||||||
<h3>最新修改
|
|
||||||
{% if request.user.is_authenticated %}
|
|
||||||
<a href="{% url 'seahub.views.repo_history' repo.id %}" class="more">(更多)</a>
|
|
||||||
{% endif %}
|
|
||||||
</h3>
|
|
||||||
<p>{{ current_commit.props.desc|translate_commit_desc }}</p>
|
|
||||||
<p class="al-rt">
|
|
||||||
<span class="author">by
|
|
||||||
{% if current_commit.props.creator_name %}
|
|
||||||
{{ current_commit.props.creator_name|short_email }}
|
|
||||||
{% else %}
|
|
||||||
未知
|
|
||||||
{% endif %}
|
|
||||||
</span>
|
|
||||||
<span class="time">{{ current_commit.props.ctime|translate_commit_time }}</span>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
</div>
|
||||||
|
<div id="repo-basic-info">
|
||||||
<div class="main fleft">
|
<p class="desc">{{repo.props.desc}}</p>
|
||||||
{% if repo.props.encrypted and not password_set %}
|
<p class="size">大小:{{ repo_size|filesizeformat }}</p>
|
||||||
<p class="access-notice">该目录已加密。如需在线查看里面的内容,请输入解密密码。密码只会在服务器上暂存1小时。</p>
|
</div>
|
||||||
<form action="{{ SITE_ROOT }}repo/{{ repo.id }}/" method="post">
|
|
||||||
<label>密码:</label>
|
{% if not repo.props.encrypted or password_set %}
|
||||||
<input type="hidden" name="repo_id" value="{{ repo.id }}" />
|
{% if can_access %}
|
||||||
<input type="hidden" name="username" value="{{ request.user.username }}" />
|
<div class="latest-commit">
|
||||||
<input id="id_password" type="password" name="password" maxlength="64" /><br />
|
<p class="commit-msg ovhd">
|
||||||
{% for error in form.errors.values %}
|
<span class="fleft">
|
||||||
<p class="error">{{ error|escape }}</p>
|
{{ current_commit.props.desc|translate_commit_desc }}
|
||||||
{% endfor %}
|
<a class="lsch" href="{{ SITE_ROOT }}repo/history/changes/{{ repo.id }}/?commit_id={{ current_commit.id }}" data="{{ current_commit.props.ctime|tsstr_sec }}">详情</a>
|
||||||
<input type="submit" value="提交" />
|
</span>
|
||||||
</form>
|
{% if request.user.is_authenticated %}
|
||||||
|
<a href="{% url 'seahub.views.repo_history' repo.id %}" class="more fright">更多历史</a>
|
||||||
|
{% endif %}
|
||||||
|
</p>
|
||||||
|
<p class="meta-info">
|
||||||
|
<span class="author">
|
||||||
|
{% if current_commit.props.creator_name %}
|
||||||
|
{% avatar current_commit.props.creator_name 20 %}
|
||||||
|
<a class="name" href="{% url 'profile.views.user_profile' current_commit.props.creator_name %}">{{ current_commit.props.creator_name|short_email }}</a>
|
||||||
|
{% else %}
|
||||||
|
未知
|
||||||
|
{% endif %}
|
||||||
|
</span>
|
||||||
|
<span class="time">{{ current_commit.props.ctime|translate_commit_time }}</span>
|
||||||
|
</p>
|
||||||
|
<div id="ls-ch" class="hide"></div><!--list modification details of a commit-->
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% else %}
|
<div class="repo-file-list-outer-container">
|
||||||
{% if not can_access %}
|
<div class="repo-file-list-inner-container">
|
||||||
<p class="access-notice">无法在线查看该同步目录。</p>
|
{% if repo.props.encrypted and not password_set %}
|
||||||
{% else %}
|
<div class="repo-file-list-not-show">
|
||||||
<p class="path">
|
<p class="access-notice">该目录已加密。如需在线查看里面的内容,请输入解密密码。密码只会在服务器上暂存1小时。</p>
|
||||||
当前路径:
|
<form action="{{ SITE_ROOT }}repo/{{ repo.id }}/" method="post">
|
||||||
{% for name, link in zipped %}
|
<label>密码:</label>
|
||||||
{% if not forloop.last %}
|
<input type="hidden" name="repo_id" value="{{ repo.id }}" />
|
||||||
|
<input type="hidden" name="username" value="{{ request.user.username }}" />
|
||||||
|
<input id="id_password" type="password" name="password" maxlength="64" />
|
||||||
|
{% for error in form.errors.values %}
|
||||||
|
<p class="error">{{ error|escape }}</p>
|
||||||
|
{% endfor %}
|
||||||
|
<input type="submit" value="提交" />
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% else %}
|
||||||
|
{% if not can_access %}
|
||||||
|
<div class="repo-file-list-not-show">
|
||||||
|
<p class="access-notice">无法在线查看该同步目录。</p>
|
||||||
|
</div>
|
||||||
|
{% else %}
|
||||||
|
<div class="repo-file-list-topbar ovhd">
|
||||||
|
<p class="path fleft">
|
||||||
|
当前路径:
|
||||||
|
{% for name, link in zipped %}
|
||||||
|
{% if not forloop.last %}
|
||||||
<a href="{{ SITE_ROOT }}repo/{{ repo.id }}/?p={{ link|urlencode }}">{{ name }}</a> /
|
<a href="{{ SITE_ROOT }}repo/{{ repo.id }}/?p={{ link|urlencode }}">{{ name }}</a> /
|
||||||
{% else %}
|
{% else %}
|
||||||
{{ name }}
|
{{ name }}
|
||||||
{% endif %}
|
|
||||||
{% endfor %}
|
|
||||||
</p>
|
|
||||||
{% if request.user.is_authenticated %}
|
|
||||||
<div class="repo-op">
|
|
||||||
<button data="{{ SITE_ROOT }}repo/upload_file/{{repo.id}}/?p={{ path|urlencode }}" id="upload-file" class="op-btn">上传</button>
|
|
||||||
<button id="add-new-dir" class="op-btn">新建目录</button>
|
|
||||||
<button id="add-new-file" class="op-btn">新建文件</button>
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
<table>
|
|
||||||
<tr>
|
|
||||||
<th width="5%"></th>
|
|
||||||
<th width="67%">名字</th>
|
|
||||||
<th width="13%">大小</th>
|
|
||||||
<th width="15%">操作</th>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
{% for dirent in dir_list %}
|
|
||||||
<tr>
|
|
||||||
<td class="icon-container"><img src="{{ MEDIA_URL }}img/folder-icon-24.png" alt="目录" /></td>
|
|
||||||
<td>
|
|
||||||
<a href="{{ SITE_ROOT }}repo/{{ repo.id }}/?p={{ path|urlencode }}{{ dirent.obj_name|urlencode }}">{{ dirent.obj_name }}</a>
|
|
||||||
</td>
|
|
||||||
|
|
||||||
<td></td>
|
|
||||||
<td>
|
|
||||||
{% if request.user.is_authenticated %}
|
|
||||||
<div>
|
|
||||||
<img src="{{ MEDIA_URL }}img/dropdown-arrow.png" alt="更多操作" class="more-op vh" data="no-popup" />
|
|
||||||
<ul class="op-list hide">
|
|
||||||
<li><a class="op" href="{{ SITE_ROOT }}repo/{{ repo.props.id }}/{{ dirent.props.obj_id }}/?p={{ path|urlencode }}&file_name={{ dirent.props.obj_name|urlencode }}&op=del">删除</a></li>
|
|
||||||
<li><a class="op dir-rename" href="#" data="{{ dirent.obj_name }}">重命名</a></li>
|
|
||||||
<li><a class="op dir-mv" href="#" data="{{ dirent.obj_name }}">移动</a></li>
|
|
||||||
<li><a class="op dir-cp" href="#" data="{{ dirent.obj_name }}">复制</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
{% endfor %}
|
||||||
</tr>
|
</p>
|
||||||
{% endfor %}
|
{% if request.user.is_authenticated %}
|
||||||
|
<div class="repo-op fright">
|
||||||
|
<button data="{{ SITE_ROOT }}repo/upload_file/{{repo.id}}/?p={{ path|urlencode }}" id="upload-file" class="op-btn">上传</button>
|
||||||
|
<button id="add-new-dir" class="op-btn">新建目录</button>
|
||||||
|
<button id="add-new-file" class="op-btn">新建文件</button>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
<table class="repo-file-list">
|
||||||
|
<tr>
|
||||||
|
<th width="5%"></th>
|
||||||
|
<th width="60%">名字</th>
|
||||||
|
<th width="10%">大小</th>
|
||||||
|
<th width="30%">操作</th>
|
||||||
|
</tr>
|
||||||
|
|
||||||
{% for dirent in file_list %}
|
{% for dirent in dir_list %}
|
||||||
<tr>
|
<tr>
|
||||||
<td class="icon-container"><img src="{{ MEDIA_URL }}img/file/{{ dirent.obj_name|file_icon_filter }}" alt="文件" /></td>
|
<td class="icon-container"><img src="{{ MEDIA_URL }}img/folder-icon-24.png" alt="目录" /></td>
|
||||||
<td>
|
<td>
|
||||||
<a class="op" href="{{ SITE_ROOT }}repo/{{ repo.props.id }}/files/?p={{ path|urlencode }}{{ dirent.obj_name|urlencode }}">{{ dirent.props.obj_name }}</a>
|
<a href="{{ SITE_ROOT }}repo/{{ repo.id }}/?p={{ path|urlencode }}{{ dirent.obj_name|urlencode }}">{{ dirent.obj_name }}</a>
|
||||||
</td>
|
</td>
|
||||||
|
|
||||||
<td>{{ dirent.file_size|filesizeformat }}</td>
|
<td></td>
|
||||||
<td>
|
<td>
|
||||||
<div>
|
{% if request.user.is_authenticated %}
|
||||||
<img src="{{ MEDIA_URL }}img/dropdown-arrow.png" alt="更多操作" class="more-op vh" data="no-popup" />
|
<div>
|
||||||
<ul class="op-list hide">
|
<div class="displayed-op vh">
|
||||||
<li><a class="op" href="{{ SITE_ROOT }}repo/{{ repo.props.id }}/{{ dirent.props.obj_id }}/?file_name={{ dirent.props.obj_name }}&op=download">下载</a></li>
|
<a class="op dir-rename" href="#" data="{{ dirent.obj_name }}">重命名</a>
|
||||||
{% if request.user.is_authenticated %}
|
</div>
|
||||||
<li><a class="op" href="{{ SITE_ROOT }}repo/{{ repo.props.id }}/{{ dirent.props.obj_id }}/?p={{ path|urlencode }}&file_name={{ dirent.props.obj_name|urlencode }}&op=del">删除</a></li>
|
<img src="{{ MEDIA_URL }}img/dropdown-arrow.png" title="更多操作" alt="更多操作" class="more-op-icon vh" data="no-popup" />
|
||||||
<li><a class="op file-rename" href="#" data="{{ dirent.obj_name }}">重命名</a></li>
|
<ul class="hidden-op hide">
|
||||||
<li><a class="op file-mv" href="#" data="{{ dirent.obj_name }}">移动</a></li>
|
<li><a class="op" href="{{ SITE_ROOT }}repo/{{ repo.props.id }}/{{ dirent.props.obj_id }}/?p={{ path|urlencode }}&file_name={{ dirent.props.obj_name|urlencode }}&op=del">删除</a></li>
|
||||||
<li><a class="op file-cp" href="#" data="{{ dirent.obj_name }}">复制</a></li>
|
<!--li><a class="op dir-rename" href="#" data="{{ dirent.obj_name }}">重命名</a></li-->
|
||||||
<li><a class="op file-update" href="{{ SITE_ROOT }}repo/update_file/{{repo.id}}/?p={{ path|urlencode }}{{dirent.obj_name|urlencode}}">更新</a></li>
|
<li><a class="op dir-mv" href="#" data="{{ dirent.obj_name }}">移动</a></li>
|
||||||
<li><a href="{{ SITE_ROOT }}repo/revert_file/{{ repo.id }}/?commit={{ current_commit.id }}&p={{path|urlencode}}{{ dirent.obj_name|urlencode }}&from=repo_history" class="op file-revert">还原</a></li>
|
<li><a class="op dir-cp" href="#" data="{{ dirent.obj_name }}">复制</a></li>
|
||||||
{% endif %}
|
</ul>
|
||||||
</ul>
|
</div>
|
||||||
</div>
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</table>
|
|
||||||
{% endif %}
|
{% for dirent in file_list %}
|
||||||
{% endif %}
|
<tr>
|
||||||
|
<td class="icon-container"><img src="{{ MEDIA_URL }}img/file/{{ dirent.obj_name|file_icon_filter }}" alt="文件" /></td>
|
||||||
|
<td>
|
||||||
|
<a class="op" href="{{ SITE_ROOT }}repo/{{ repo.props.id }}/files/?p={{ path|urlencode }}{{ dirent.obj_name|urlencode }}">{{ dirent.props.obj_name }}</a>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td>{{ dirent.file_size|filesizeformat }}</td>
|
||||||
|
<td>
|
||||||
|
<div>
|
||||||
|
<div class="displayed-op vh">
|
||||||
|
<a class="op" href="{{ SITE_ROOT }}repo/{{ repo.props.id }}/{{ dirent.props.obj_id }}/?file_name={{ dirent.props.obj_name }}&op=download">下载</a>
|
||||||
|
<a class="op file-rename" href="#" data="{{ dirent.obj_name }}">重命名</a>
|
||||||
|
<a class="op file-update" href="{{ SITE_ROOT }}repo/update_file/{{repo.id}}/?p={{ path|urlencode }}{{dirent.obj_name|urlencode}}">更新</a>
|
||||||
|
</div>
|
||||||
|
<img src="{{ MEDIA_URL }}img/dropdown-arrow.png" title="更多操作" alt="更多操作" class="more-op-icon vh" data="no-popup" />
|
||||||
|
<ul class="hidden-op hide">
|
||||||
|
<!--li><a class="op" href="{{ SITE_ROOT }}repo/{{ repo.props.id }}/{{ dirent.props.obj_id }}/?file_name={{ dirent.props.obj_name }}&op=download">下载</a></li-->
|
||||||
|
{% if request.user.is_authenticated %}
|
||||||
|
<li><a class="op" href="{{ SITE_ROOT }}repo/{{ repo.props.id }}/{{ dirent.props.obj_id }}/?p={{ path|urlencode }}&file_name={{ dirent.props.obj_name|urlencode }}&op=del">删除</a></li>
|
||||||
|
<!--li><a class="op file-rename" href="#" data="{{ dirent.obj_name }}">重命名</a></li-->
|
||||||
|
<li><a class="op file-mv" href="#" data="{{ dirent.obj_name }}">移动</a></li>
|
||||||
|
<li><a class="op file-cp" href="#" data="{{ dirent.obj_name }}">复制</a></li>
|
||||||
|
<!--li><a class="op file-update" href="{{ SITE_ROOT }}repo/update_file/{{repo.id}}/?p={{ path|urlencode }}{{dirent.obj_name|urlencode}}">更新</a></li-->
|
||||||
|
<li><a href="{{ SITE_ROOT }}repo/revert_file/{{ repo.id }}/?commit={{ current_commit.id }}&p={{path|urlencode}}{{ dirent.obj_name|urlencode }}&from=repo_history" class="op file-revert">还原</a></li>
|
||||||
|
{% endif %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<form id="add-new-dir-form" action="" method="post" class="hide">{% csrf_token %}
|
<form id="add-new-dir-form" action="" method="post" class="hide">{% csrf_token %}
|
||||||
@@ -204,26 +230,27 @@
|
|||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
$("table tr:gt(0)").hover(
|
$("table tr:gt(0)").hover(
|
||||||
function() {
|
function() {
|
||||||
$(this).find('.more-op').removeClass('vh');
|
$(this).find('.displayed-op, .more-op-icon').removeClass('vh');
|
||||||
},
|
},
|
||||||
function() {
|
function() {
|
||||||
$(this).find('.more-op').addClass('vh');
|
$(this).find('.displayed-op, .more-op-icon').addClass('vh');
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
$('#main-panel').removeClass('ovhd');
|
$('#main-panel').removeClass('ovhd');
|
||||||
var clicked_more_op;
|
var clicked_more_op;
|
||||||
$('.more-op').click(function(e) {
|
$('.more-op-icon').click(function(e) {
|
||||||
var its_op_list = $(this).next();
|
var its_op_list = $(this).next();
|
||||||
if ($(this).attr('data')) { // no popup
|
if ($(this).attr('data')) { // no popup
|
||||||
clicked_more_op = $(this);
|
clicked_more_op = $(this);
|
||||||
$(this).parent().css('position','relative');
|
$(this).parent().css('position','relative');
|
||||||
|
its_op_list.css('left', $(this).position().left + $(this).width() + 5);
|
||||||
if ($(this).offset().top + its_op_list.height() <= $('#main').offset().top + $('#main').height()) {
|
if ($(this).offset().top + its_op_list.height() <= $('#main').offset().top + $('#main').height()) {
|
||||||
its_op_list.css('top', 6);
|
its_op_list.css('top', 6);
|
||||||
} else {
|
} else {
|
||||||
its_op_list.css('bottom', 2);
|
its_op_list.css('bottom', 2);
|
||||||
}
|
}
|
||||||
$('.op-list').addClass('hide');
|
$('.hidden-op').addClass('hide');
|
||||||
its_op_list.removeClass('hide');
|
its_op_list.removeClass('hide');
|
||||||
$(this).attr('data','');
|
$(this).attr('data','');
|
||||||
} else {
|
} else {
|
||||||
@@ -238,7 +265,7 @@ $(document).click(function(e) {
|
|||||||
clicked_more_op.attr('data','no-popup');
|
clicked_more_op.attr('data','no-popup');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
$('.op-list li').hover(
|
$('.hidden-op li').hover(
|
||||||
function() {
|
function() {
|
||||||
$(this).css('background', '#eee');
|
$(this).css('background', '#eee');
|
||||||
},
|
},
|
||||||
@@ -250,10 +277,13 @@ $('.op-list li').hover(
|
|||||||
$('.file-rename, .dir-rename').click(function () {
|
$('.file-rename, .dir-rename').click(function () {
|
||||||
var type = $(this).hasClass('file-rename') ? '文件 ' : '目录 ',
|
var type = $(this).hasClass('file-rename') ? '文件 ' : '目录 ',
|
||||||
name = $(this).attr('data');
|
name = $(this).attr('data');
|
||||||
|
newname = $('#rename-form input[name="newname"]');
|
||||||
$('#rename-target').html(type + name);
|
$('#rename-target').html(type + name);
|
||||||
$('input[name="oldname"]').val(name);
|
$('#rename-form input[name="oldname"]').val(name);
|
||||||
$('input[name="newname"]').val(name);
|
|
||||||
$('#rename-form').modal({appendTo:'#main'});
|
$('#rename-form').modal({appendTo:'#main'});
|
||||||
|
newname.before('<p class="hide">' + name + '</p>');
|
||||||
|
newname.val(name).css('width', newname.prev().width() + 3);
|
||||||
|
newname.prev().remove();
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -489,7 +519,7 @@ $('#add-new-file').click(function () {
|
|||||||
$('#add-new-file-form').modal({appendTo:'#main'});
|
$('#add-new-file-form').modal({appendTo:'#main'});
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#upload-file, #add-new-dir, #add-new-file').hover(
|
$('#upload-file, #add-new-dir, #add-new-file, #repo-download-btn').hover(
|
||||||
function() {
|
function() {
|
||||||
$(this).css({'background-color': '#fff', 'cursor': 'pointer'});
|
$(this).css({'background-color': '#fff', 'cursor': 'pointer'});
|
||||||
},
|
},
|
||||||
@@ -498,6 +528,10 @@ $('#upload-file, #add-new-dir, #add-new-file').hover(
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
$('#repo-download-btn').click(function() {
|
||||||
|
window.open('{{ SITE_ROOT }}seafile_access_check/?repo_id={{repo.props.id}}');
|
||||||
|
});
|
||||||
|
{% include "snippets/list_commit_detail.html" %}
|
||||||
{% include "snippets/bottom_bar.html" %}
|
{% include "snippets/bottom_bar.html" %}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
@@ -2,137 +2,87 @@
|
|||||||
{% load seahub_tags avatar_tags %}
|
{% load seahub_tags avatar_tags %}
|
||||||
{% load url from future %}
|
{% load url from future %}
|
||||||
|
|
||||||
{% block left_panel %}
|
{% block main_panel %}
|
||||||
<h3>操作</h3>
|
<div class="w100 ovhd">
|
||||||
<ul class="with-bg">
|
<h2 class="fleft">{{repo.props.name}} 修改历史</h2>
|
||||||
<li><a href="{{ SITE_ROOT }}repo/{{ repo.props.id }}/">返回同步目录</a></li>
|
<button data="{{ SITE_ROOT }}repo/{{ repo.props.id }}/" class="fright" id="history-back-to-repo">返回同步目录</button>
|
||||||
</ul>
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block right_panel %}
|
|
||||||
<h2 class="repo-history">{{repo.props.name}} 修改历史</h2>
|
|
||||||
<table>
|
|
||||||
<tr>
|
|
||||||
<th width="12%">修改时间</th>
|
|
||||||
<th width="13%">修改者</th>
|
|
||||||
<th width="62%">描述</th>
|
|
||||||
<th width="13%">操作</th>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
{% for commit in commits %}
|
|
||||||
<tr>
|
|
||||||
<td>{{ commit.ctime|translate_commit_time }}</td>
|
|
||||||
|
|
||||||
{% if commit.creator_name %}
|
|
||||||
<td>
|
|
||||||
<a href="{{ SITE_ROOT }}profile/{{ commit.creator_name }}/">{% avatar commit.creator_name 16 %}</a>
|
|
||||||
<a href="{{ SITE_ROOT }}profile/{{ commit.creator_name }}/">{{ commit.creator_name|email2nickname }}</a>
|
|
||||||
</td>
|
|
||||||
{% else %}
|
|
||||||
<td>未知</td>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
<td>
|
|
||||||
{{ commit.props.desc|translate_commit_desc }}
|
|
||||||
{% if not forloop.last %}
|
|
||||||
<a class="lsch" href="{{ SITE_ROOT }}repo/history/changes/{{ repo.id }}/?commit_id={{ commit.id }}" data="{{ commit.props.ctime|tsstr_sec }}">详情</a>
|
|
||||||
{% endif %}
|
|
||||||
</td>
|
|
||||||
|
|
||||||
{% if not forloop.last %}
|
|
||||||
<td>
|
|
||||||
<a href="{% url 'repo_history_view' repo.id %}?commit_id={{ commit.id }}" class="op">浏览</a>
|
|
||||||
<a href="#" data="{{ SITE_ROOT }}repo/history/revert/{{ repo.id }}/?commit_id={{ commit.id }}" class="repo-revert op">还原</a>
|
|
||||||
</td>
|
|
||||||
{% else %}
|
|
||||||
<td></td>
|
|
||||||
{% endif %}
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
</table>
|
|
||||||
<div id="paginator">
|
|
||||||
{% if current_page != 1 %}
|
|
||||||
<a href="?page={{ prev_page }}&per_page={{ per_page }}">上一页</a>
|
|
||||||
{% endif %}
|
|
||||||
{% if page_next %}
|
|
||||||
<a href="?page={{ next_page }}&per_page={{ per_page }}">下一页</a>
|
|
||||||
{% endif %}
|
|
||||||
<span>每页:</span>
|
|
||||||
{% if per_page == 25 %}
|
|
||||||
<span> 25 </span>
|
|
||||||
{% else %}
|
|
||||||
<a href="?per_page=25" class="per-page">25</a>
|
|
||||||
{% endif %}
|
|
||||||
{% if per_page == 50 %}
|
|
||||||
<span> 50 </span>
|
|
||||||
{% else %}
|
|
||||||
<a href="?per_page=50" class="per-page">50</a>
|
|
||||||
{% endif %}
|
|
||||||
{% if per_page == 100 %}
|
|
||||||
<span> 100 </span>
|
|
||||||
{% else %}
|
|
||||||
<a href="?per_page=100" class="per-page">100</a>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
</div>
|
||||||
|
<div class="commit-list-outer-container">
|
||||||
|
<div class="commit-list-inner-container">
|
||||||
|
<table class="commit-list">
|
||||||
|
<tr>
|
||||||
|
<th width="13%" class="time">修改时间</th>
|
||||||
|
<th width="15%">修改者</th>
|
||||||
|
<th width="57%">描述</th>
|
||||||
|
<th width="15%">操作</th>
|
||||||
|
</tr>
|
||||||
|
|
||||||
<div id="ls-ch" class="hide"></div><!--list modification details of a commit-->
|
{% for commit in commits %}
|
||||||
|
<tr>
|
||||||
|
<td class="time">{{ commit.ctime|translate_commit_time }}</td>
|
||||||
|
|
||||||
|
{% if commit.creator_name %}
|
||||||
|
<td>
|
||||||
|
<a href="{{ SITE_ROOT }}profile/{{ commit.creator_name }}/">{% avatar commit.creator_name 16 %}</a>
|
||||||
|
<a href="{{ SITE_ROOT }}profile/{{ commit.creator_name }}/">{{ commit.creator_name|email2nickname }}</a>
|
||||||
|
</td>
|
||||||
|
{% else %}
|
||||||
|
<td>未知</td>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<td>
|
||||||
|
{{ commit.props.desc|translate_commit_desc }}
|
||||||
|
{% if not forloop.last %}
|
||||||
|
<a class="lsch" href="{{ SITE_ROOT }}repo/history/changes/{{ repo.id }}/?commit_id={{ commit.id }}" data="{{ commit.props.ctime|tsstr_sec }}">详情</a>
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
|
||||||
|
{% if not forloop.last %}
|
||||||
|
<td>
|
||||||
|
<a href="{% url 'repo_history_view' repo.id %}?commit_id={{ commit.id }}" class="op">浏览</a>
|
||||||
|
<a href="#" data="{{ SITE_ROOT }}repo/history/revert/{{ repo.id }}/?commit_id={{ commit.id }}" class="repo-revert op">还原</a>
|
||||||
|
</td>
|
||||||
|
{% else %}
|
||||||
|
<td></td>
|
||||||
|
{% endif %}
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
<div id="paginator">
|
||||||
|
{% if current_page != 1 %}
|
||||||
|
<a href="?page={{ prev_page }}&per_page={{ per_page }}">上一页</a>
|
||||||
|
{% endif %}
|
||||||
|
{% if page_next %}
|
||||||
|
<a href="?page={{ next_page }}&per_page={{ per_page }}">下一页</a>
|
||||||
|
{% endif %}
|
||||||
|
<span>每页:</span>
|
||||||
|
{% if per_page == 25 %}
|
||||||
|
<span> 25 </span>
|
||||||
|
{% else %}
|
||||||
|
<a href="?per_page=25" class="per-page">25</a>
|
||||||
|
{% endif %}
|
||||||
|
{% if per_page == 50 %}
|
||||||
|
<span> 50 </span>
|
||||||
|
{% else %}
|
||||||
|
<a href="?per_page=50" class="per-page">50</a>
|
||||||
|
{% endif %}
|
||||||
|
{% if per_page == 100 %}
|
||||||
|
<span> 100 </span>
|
||||||
|
{% else %}
|
||||||
|
<a href="?per_page=100" class="per-page">100</a>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
<div id="ls-ch" class="hide"></div><!--list modification details of a commit-->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block extra_script %}
|
{% block extra_script %}
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
//list modification made by a commit
|
{% include 'snippets/list_commit_detail.html' %}
|
||||||
$('.lsch').each(function() {
|
$('#history-back-to-repo').click(function() {
|
||||||
$(this).click(function() {
|
location.href = $(this).attr('data');
|
||||||
var time = '<span class="latest-commit-time-author">(' + $(this).attr('data') + ')</span>';
|
|
||||||
$.ajax({
|
|
||||||
url: $(this).attr('href'),
|
|
||||||
dataType: 'json',
|
|
||||||
cache: false,
|
|
||||||
contentType: 'application/json; charset=utf-8',
|
|
||||||
success: function(data) {
|
|
||||||
var title = '<h3>修改详情' + time + '</h3>',
|
|
||||||
con = '';
|
|
||||||
var show = function(data_) {
|
|
||||||
con += '<ul>';
|
|
||||||
for (var i = 0, len = data_.length; i < len; i++) {
|
|
||||||
con += '<li>' + data_[i] + '</li>';
|
|
||||||
}
|
|
||||||
con += '</ul>';
|
|
||||||
};
|
|
||||||
if (data['new'].length > 0) {
|
|
||||||
con += '<h4 id="ls-ch-new">新文件</h4>';
|
|
||||||
show(data['new']);
|
|
||||||
}
|
|
||||||
if (data['removed'].length > 0) {
|
|
||||||
con += '<h4 id="ls-ch-rm">删除的文件</h4>';
|
|
||||||
show(data['removed']);
|
|
||||||
}
|
|
||||||
if (data['renamed'].length > 0) {
|
|
||||||
con += '<h4 id="ls-ch-rn">重命名或移动的文件</h4>';
|
|
||||||
show(data['renamed']);
|
|
||||||
}
|
|
||||||
if (data['modified'].length > 0) {
|
|
||||||
con += '<h4 id="ls-ch-modi">修改的文件</h4>';
|
|
||||||
show(data['modified']);
|
|
||||||
}
|
|
||||||
if (data['newdir'].length > 0) {
|
|
||||||
con += '<h4 id="ls-ch-newdir">新目录</h4>';
|
|
||||||
show(data['newdir']);
|
|
||||||
}
|
|
||||||
if (data['deldir'].length > 0) {
|
|
||||||
con += '<h4 id="ls-ch-deldir">删除的目录</h4>';
|
|
||||||
show(data['deldir']);
|
|
||||||
}
|
|
||||||
if (!con) {
|
|
||||||
con = '<p>没有文件被改动</p>';
|
|
||||||
}
|
|
||||||
$('#ls-ch').html(title + con).modal({appendTo:'#main', maxHeight: window.innerHeight - 57, autoResize:true});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
addConfirmTo($(".repo-revert"), '确定要还原该目录?');
|
addConfirmTo($(".repo-revert"), '确定要还原该目录?');
|
||||||
</script>
|
</script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
49
templates/snippets/list_commit_detail.html
Normal file
49
templates/snippets/list_commit_detail.html
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
$('.lsch').click(function() {
|
||||||
|
var time = '<span class="latest-commit-time-author">(' + $(this).attr('data') + ')</span>';
|
||||||
|
$.ajax({
|
||||||
|
url: $(this).attr('href'),
|
||||||
|
dataType: 'json',
|
||||||
|
cache: false,
|
||||||
|
contentType: 'application/json; charset=utf-8',
|
||||||
|
success: function(data) {
|
||||||
|
var title = '<h3>修改详情' + time + '</h3>',
|
||||||
|
con = '';
|
||||||
|
var show = function(data_) {
|
||||||
|
con += '<ul>';
|
||||||
|
for (var i = 0, len = data_.length; i < len; i++) {
|
||||||
|
con += '<li>' + data_[i] + '</li>';
|
||||||
|
}
|
||||||
|
con += '</ul>';
|
||||||
|
};
|
||||||
|
if (data['new'].length > 0) {
|
||||||
|
con += '<h4 id="ls-ch-new">新文件</h4>';
|
||||||
|
show(data['new']);
|
||||||
|
}
|
||||||
|
if (data['removed'].length > 0) {
|
||||||
|
con += '<h4 id="ls-ch-rm">删除的文件</h4>';
|
||||||
|
show(data['removed']);
|
||||||
|
}
|
||||||
|
if (data['renamed'].length > 0) {
|
||||||
|
con += '<h4 id="ls-ch-rn">重命名或移动的文件</h4>';
|
||||||
|
show(data['renamed']);
|
||||||
|
}
|
||||||
|
if (data['modified'].length > 0) {
|
||||||
|
con += '<h4 id="ls-ch-modi">修改的文件</h4>';
|
||||||
|
show(data['modified']);
|
||||||
|
}
|
||||||
|
if (data['newdir'].length > 0) {
|
||||||
|
con += '<h4 id="ls-ch-newdir">新目录</h4>';
|
||||||
|
show(data['newdir']);
|
||||||
|
}
|
||||||
|
if (data['deldir'].length > 0) {
|
||||||
|
con += '<h4 id="ls-ch-deldir">删除的目录</h4>';
|
||||||
|
show(data['deldir']);
|
||||||
|
}
|
||||||
|
if (!con) {
|
||||||
|
con = '<p>没有文件被改动</p>';
|
||||||
|
}
|
||||||
|
$('#ls-ch').html(title + con).modal({appendTo:'#main', maxHeight: window.innerHeight - 57, autoResize:true});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return false;
|
||||||
|
});
|
Reference in New Issue
Block a user