mirror of https://gitee.com/zhang_1334717033/kiftd
Update to v1.0.8-RE
parent
e33d3da4a9
commit
cd3b9f39f7
15
README.md
15
README.md
|
|
@ -1,6 +1,6 @@
|
|||
# kiftd——青阳网络文件传输系统 #
|
||||
## 一款面向个人、团队、小型组织的网盘应用系统,免费、开源、完善。 ##
|
||||
### 欢迎访问kiftd官方资源站!Welcome to visit kiftd home page! ###
|
||||
### 欢迎访问kiftd官方资源站!Welcome to visit kiftd home page :https://kohgylw.gitee.io/ !###
|
||||
|
||||
-------
|
||||
|
||||
|
|
@ -23,10 +23,12 @@
|
|||
* ### 您需要利用自己的资源搭建起一个网盘系统而苦于没有好的选择?
|
||||
> 使用破解软件同样无法确保安全性,闭源的特性令人担忧。同时,很多已有的网盘服务器软件性能笨重、功能简单、语言的障碍更是使用中不可忽视的问题。
|
||||
|
||||
_注:kift为功能性内核的开发代号,其应用版本被称为kiftd_
|
||||
### 现在,您可以选择kiftd了!
|
||||
|
||||
本软件的作者 kohgylw 相信:除了他本人之外,一定还有其他人也面临着同样的问题。毕竟,作为教师的他需要时常分发资料给学生——在他成功弄丢了几次U盘后,便萌生了利用自己闲暇的时间去开发出一套“基于常见web浏览器的网络文件存储、分发、管理、预览系统”的计划。该系统要比ftp更便捷,要比操作系统自带的文件分享功能适应性更强;要比已有的网盘软件更强大、更高效。不久之后,作为该计划的成果,这款名为kiftd的软件就此诞生了。
|
||||
|
||||
_注:kift为该功能的开发名称,其实际成果命名为kiftd。_
|
||||
|
||||
-------
|
||||
|
||||
## kiftd有哪些优势?
|
||||
|
|
@ -72,6 +74,15 @@ _注:kift为功能性内核的开发代号,其应用版本被称为kiftd_
|
|||
|
||||
> 提示:当您更新版本后,请手动清除浏览器的缓存,之后刷新网盘主页以确保数据文件保持最新!否则可能导致新版页面功能无法使用。
|
||||
|
||||
### 新版本v1.0.8
|
||||
本次更新增加了一些新功能,同时进一步提高了稳定性,推荐所有用户升级体验。
|
||||
+ 修正断点续传存在的问题——经一些使用者反馈,该问题会导致下载速度越来越慢直至降为0。该问题已紧急修复,确保主流下载工具软件能够正确进行多线程下载。
|
||||
+ 图片分页预览——当需要预览超过15张图片时,kiftd能自动将其分页,您可以使用翻页功能查看所有图片。
|
||||
+ 账户配置实时更新——现在,更新账户配置无需要再重启kiftd了。kiftd会在运行中自动加载并更新账户配置文件,只需稍等片刻便会生效。
|
||||
+ 正确识别安装目录——现在,kiftd能够识别自己到底被放置在哪个路径下了,您也可以在任意路径下启动它了(针对命令环境)。
|
||||
+ 查看下载链接——为了进一步方便使用下载工具进行下载,您可以直接在下载提示框中直接查看下载链接了。
|
||||
+ 修正了1MB以下体积文件的显示——它们现在会显示为“<1MB”而不是“0MB”。
|
||||
|
||||
### 新版本v1.0.7
|
||||
本次更新加入了新的功能,并对已有的问题进行修正,推荐所有用户升级体验。
|
||||
+ 断点续传!——现在,kiftd的下载功能已经支持断点续传技术了,这意味着您可以随时暂停并继续您的下载。同时,该功能也为多线程下载技术提供了支持,这意味着您还可以借助一些主流下载工具来进一步提高文件的下载速度。
|
||||
|
|
|
|||
Binary file not shown.
BIN
kiftd说明文档.pdf
BIN
kiftd说明文档.pdf
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 927 B |
|
|
@ -65,4 +65,8 @@ body {
|
|||
-webkit-border-radius: 20px;
|
||||
border-radius: 20px;
|
||||
filter: progid:DXImageTransform.Microsoft.Alpha(opacity=70);
|
||||
}
|
||||
|
||||
.wordbreak{
|
||||
word-break:break-all
|
||||
}
|
||||
|
|
@ -1 +1 @@
|
|||
@charset "UTF-8";.titlebox{height:30px;line-height:30px;padding-top:5px;padding-bottom:5px;padding-left:10px;padding-right:10px;position:relative;bottom:-7px}.titletext{color:#000;font-size:22px}.graytext{color:#8b8b8b}.subtitle{color:#5cacee;text-align:center}.rightbtn{border-right:10px;float:right;margin-left:10px}.heading{margin-top:-10px;margin-bottom:-10px}.centerText{text-align:center}.uploadstatusbox{color:#9c9c9c;height:48px;overflow:auto}html{height:100%}body{height:100%}.loading{line-height:56px;color:#545454;padding-left:60px;font-size:15px;background:#fff url(loading.gif) no-repeat 10px 50%;opacity:.7;-moz-border-radius:20px;-webkit-border-radius:20px;border-radius:20px;filter:alpha(opacity=70)}
|
||||
@charset "UTF-8";.titlebox{height:30px;line-height:30px;padding-top:5px;padding-bottom:5px;padding-left:10px;padding-right:10px;position:relative;bottom:-7px}.titletext{color:#000;font-size:22px}.graytext{color:#8b8b8b}.subtitle{color:#5cacee;text-align:center}.rightbtn{border-right:10px;float:right;margin-left:10px}.heading{margin-top:-10px;margin-bottom:-10px}.centerText{text-align:center}.uploadstatusbox{color:#9c9c9c;height:48px;overflow:auto}html{height:100%}body{height:100%}.loading{line-height:56px;color:#545454;padding-left:60px;font-size:15px;background:#fff url(loading.gif) no-repeat 10px 50%;opacity:.7;-moz-border-radius:20px;-webkit-border-radius:20px;border-radius:20px;filter:alpha(opacity=70)}.wordbreak{word-break:break-all}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 800 B |
File diff suppressed because one or more lines are too long
|
|
@ -56,16 +56,17 @@
|
|||
<div class="panel-heading">
|
||||
<div class="heading">
|
||||
<div class="navbar-header">
|
||||
<a href="javascript:void(0);" class="navbar-text" data-toggle="modal"
|
||||
data-target="#folderInfoModal"><span id="folderIconSpan"
|
||||
class="glyphicon glyphicon-folder-close"></span>  <span
|
||||
<a href="javascript:void(0);" class="navbar-text"
|
||||
data-toggle="modal" data-target="#folderInfoModal"><span
|
||||
id="folderIconSpan" class="glyphicon glyphicon-folder-close"></span>  <span
|
||||
id="currentFolderName"></span></a>
|
||||
</div>
|
||||
<div class="collapse navbar-collapse">
|
||||
<ul class="nav navbar-nav">
|
||||
<li class="dropdown"><a href="javascript:void(0);" class="dropdown-toggle"
|
||||
data-toggle="dropdown" role="button" aria-haspopup="true"
|
||||
aria-expanded="false">上一级 <span class="caret"></span></a>
|
||||
<li class="dropdown"><a href="javascript:void(0);"
|
||||
class="dropdown-toggle" data-toggle="dropdown" role="button"
|
||||
aria-haspopup="true" aria-expanded="false">上一级 <span
|
||||
class="caret"></span></a>
|
||||
<ul class="dropdown-menu" id="parentFolderList"></ul></li>
|
||||
</ul>
|
||||
<form class="navbar-form navbar-left">
|
||||
|
|
@ -73,7 +74,8 @@
|
|||
<input id="sreachKeyWordIn" type="text" class="form-control"
|
||||
placeholder="请输入文件名...">
|
||||
</div>
|
||||
<button type="button" class="btn btn-default" onclick="doSearchFile()">搜索</button>
|
||||
<button type="button" class="btn btn-default"
|
||||
onclick="doSearchFile()">搜索</button>
|
||||
</form>
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
<li id="packageDownloadBox"></li>
|
||||
|
|
@ -134,7 +136,7 @@
|
|||
<form class="form-horizontal">
|
||||
<div class="form-group" id="accountidbox">
|
||||
<label for="accountid" id="accountidtitle"
|
||||
class="col-sm-3 control-label">账户:</label>
|
||||
class="col-sm-3 control-label">账户:</label>
|
||||
<div class="col-sm-9">
|
||||
<input type="text" class="form-control" id="accountid"
|
||||
placeholder="请输入账户……">
|
||||
|
|
@ -142,7 +144,7 @@
|
|||
</div>
|
||||
<div class="form-group" id="accountpwdbox">
|
||||
<label for="accountpwd" id="accountpwdtitle"
|
||||
class="col-sm-3 control-label">密码:</label>
|
||||
class="col-sm-3 control-label">密码:</label>
|
||||
<div class="col-sm-9">
|
||||
<input type="password" class="form-control" id="accountpwd"
|
||||
placeholder="请输入密码……">
|
||||
|
|
@ -359,8 +361,8 @@
|
|||
</div>
|
||||
<!-- end 上传文件 -->
|
||||
<!-- 下载提示框 -->
|
||||
<div class="modal fade bs-example-modal-sm" id="downloadModal"
|
||||
tabindex="-1" role="dialog" aria-labelledby="downloadModelTitle">
|
||||
<div class="modal fade" id="downloadModal" tabindex="-1" role="dialog"
|
||||
aria-labelledby="downloadModelTitle">
|
||||
<div class="modal-dialog modal-sm" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
|
|
@ -373,7 +375,12 @@
|
|||
</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<h5 id="downloadFileName">提示:您确认要下载文件:[]么?</h5>
|
||||
<h5 id="downloadFileName" class="wordbreak">提示:您确认要下载文件:[]么?</h5>
|
||||
<a href="javascript:void(0);"
|
||||
onclick="$('#downloadURLCollapse').collapse('toggle')">下载链接+</a>
|
||||
<div class="collapse" id="downloadURLCollapse">
|
||||
<div id="downloadHrefBox" class="well well-sm wordbreak"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
|
||||
|
|
@ -581,8 +588,9 @@
|
|||
<script type="text/javascript" src="js/jsencrypt.min.js"></script>
|
||||
<!-- 图片查看器 -->
|
||||
<script type="text/javascript" src="js/viewer.min.js"></script>
|
||||
<script type="text/javascript" src="js/jquery-viewer.min.js"></script>
|
||||
<!-- 音乐播放器 -->
|
||||
<script type="text/javascript" src="js/APlayer.min.js"></script>
|
||||
<!-- 页面操作定义 -->
|
||||
<script type="text/javascript" src="js/home.min.js"></script>
|
||||
<script type="text/javascript" src="js/home.js"></script>
|
||||
</html>
|
||||
|
|
@ -2,6 +2,7 @@
|
|||
* home.js kiftd主页面操作定义 by 青阳龙野 该文件为home.html的操作定义文件,包含了kiftd页面上的主要操作实现。
|
||||
*/
|
||||
|
||||
//所用val名称列表,注意不要冲突,其中一些参数能够设定界面行为。
|
||||
var locationpath = "root";// 记录当前文件路径
|
||||
var parentpath = "null";// 记录当前文件路径的父级目录
|
||||
var ap;// 音乐播放器对象
|
||||
|
|
@ -13,7 +14,14 @@ var checkedMovefiles;// 移动文件的存储列表
|
|||
var constraintLevel;// 当前文件夹限制等级
|
||||
var account;// 用户账户
|
||||
var isUpLoading=false;// 是否正在执行其他上传操作
|
||||
var xhr;// 文件上传请求对象
|
||||
var viewerPageSize = 15; // 显示图片页的最大长度,注意最好是奇数
|
||||
var viewer; // viewer对象,用于预览图片功能
|
||||
var viewerPageIndex; // 分页预览图片——已浏览图片页号
|
||||
var viewerTotal; // 分页预览图片——总页码数
|
||||
var pvl;//预览图片列表的JSON格式对象
|
||||
|
||||
//界面功能方法定义
|
||||
// 页面初始化
|
||||
$(function() {
|
||||
getServerOS();// 得到服务器操作系统信息
|
||||
|
|
@ -219,6 +227,10 @@ $(function() {
|
|||
$("#fim_folderCreationDate").text(f.folderCreationDate);
|
||||
$("#fim_statistics").text("共包含 "+folderView.folderList.length+" 个文件夹, "+folderView.fileList.length+" 个文件。");
|
||||
});
|
||||
// 关闭下载提示模态框自动隐藏下载链接
|
||||
$('#downloadModal').on('hidden.bs.modal', function(e) {
|
||||
$('#downloadURLCollapse').collapse('hide');
|
||||
});
|
||||
});
|
||||
|
||||
// 全局请求失败提示
|
||||
|
|
@ -477,7 +489,7 @@ function showAccountView(folderView) {
|
|||
// 说明用户未登录,显示登录按钮
|
||||
$("#tb")
|
||||
.append(
|
||||
"<button class='btn btn-link rightbtn' data-toggle='modal' data-target='#loginModal'>登入<span class='glyphicon glyphicon-user' aria-hidden='true'></span></button>");
|
||||
"<button class='btn btn-link rightbtn' data-toggle='modal' data-target='#loginModal'>登入 <span class='glyphicon glyphicon-user' aria-hidden='true'></span></button>");
|
||||
}
|
||||
var authList = folderView.authList;
|
||||
// 对操作菜单进行初始化,根据权限显示可操作的按钮(并非约束)。
|
||||
|
|
@ -621,9 +633,13 @@ function showFolderTable(folderView) {
|
|||
var fileRow = "<tr onclick='checkfile(" + '"'
|
||||
+ fi.fileId + '"' + ")' id='" + fi.fileId
|
||||
+ "' class='filerow'><td>" + fi.fileName
|
||||
+ "</td><td>" + fi.fileCreationDate
|
||||
+ "</td><td>" + fi.fileSize + "MB</td><td>"
|
||||
+ fi.fileCreator + "</td><td>";
|
||||
+ "</td><td>" + fi.fileCreationDate;
|
||||
if(fi.fileSize=="0"){
|
||||
fileRow=fileRow+"</td><td><1MB</td><td>";
|
||||
}else{
|
||||
fileRow=fileRow+"</td><td>" + fi.fileSize + "MB</td><td>";
|
||||
}
|
||||
fileRow=fileRow + fi.fileCreator + "</td><td>";
|
||||
if (aL) {
|
||||
fileRow = fileRow
|
||||
+ "<button onclick='showDownloadModel("
|
||||
|
|
@ -646,7 +662,7 @@ function showFolderTable(folderView) {
|
|||
fileRow = fileRow
|
||||
+ "<button onclick='pdfView("
|
||||
+ '"'
|
||||
+ fi.fileId
|
||||
+ fi.filePath
|
||||
+ '"'
|
||||
+ ")' class='btn btn-link btn-xs'><span class='glyphicon glyphicon-eye-open'></span> 预览</button>";
|
||||
} else if (getSuffix(fi.fileName) == "jpg"
|
||||
|
|
@ -1002,8 +1018,6 @@ function checkUploadFile() {
|
|||
}
|
||||
}
|
||||
|
||||
var xhr;
|
||||
|
||||
// 执行文件上传并实现上传进度显示
|
||||
function doupload(count) {
|
||||
var fcount = fs.length;
|
||||
|
|
@ -1098,6 +1112,7 @@ function showUploadFileAlert(txt) {
|
|||
function showDownloadModel(fileId, fileName) {
|
||||
$("#downloadModal").modal('toggle');
|
||||
$("#downloadFileName").text("提示:您确认要下载文件:[" + fileName + "]么?");
|
||||
$("#downloadHrefBox").html("<a href='"+window.location.protocol+"//"+window.location.host+"/homeController/downloadFile.do?fileId="+fileId+"'>"+window.location.protocol+"//"+window.location.host+"/homeController/downloadFile.do?fileId="+fileId+"</a>");
|
||||
$("#downloadFileBox")
|
||||
.html(
|
||||
"<button id='dlmbutton' type='button' class='btn btn-primary' onclick='dodownload("
|
||||
|
|
@ -1264,8 +1279,8 @@ function playVideo(fileId) {
|
|||
}
|
||||
|
||||
// 预览PDF文档
|
||||
function pdfView(fileId) {
|
||||
window.open("homeController/pdfView.do?fileId=" + fileId);
|
||||
function pdfView(filePath) {
|
||||
window.open("/pdfview/web/viewer.html?file=/fileblocks/" + filePath);
|
||||
}
|
||||
|
||||
// 查看图片
|
||||
|
|
@ -1279,29 +1294,23 @@ function showPicture(fileId) {
|
|||
dataType : "text",
|
||||
success : function(result) {
|
||||
if (result != "ERROR") {
|
||||
var pvl = eval("(" + result + ")");
|
||||
pvl = eval("(" + result + ")");
|
||||
// TODO 整合viewer.js插件
|
||||
var imageslist = document.createElement("ul");
|
||||
$.each(pvl.pictureViewList, function(n, val) {
|
||||
var image = new Image();
|
||||
// 判断直接显示原图还是请求压缩流
|
||||
if(val.filePath.startsWith("homeController")){
|
||||
image.src = val.filePath;
|
||||
}else{
|
||||
image.src = "fileblocks/"+val.filePath;
|
||||
if(pvl.pictureViewList.length <= viewerPageSize) {
|
||||
createViewList();// 以全列方式显示图片列表
|
||||
} else {
|
||||
// 以分页方式显示图片列表
|
||||
viewerPageIndex = Math.ceil((pvl.index + 1) / viewerPageSize);
|
||||
viewerTotal = Math.ceil(pvl.pictureViewList.length / viewerPageSize);
|
||||
createViewListByPage();
|
||||
var innerIndex = pvl.index - ((viewerPageIndex - 1) * viewerPageSize);
|
||||
if(viewerPageIndex > 1) {
|
||||
innerIndex++;
|
||||
}
|
||||
image.alt = val.fileName;
|
||||
var imagerow = document.createElement("li");
|
||||
imagerow.appendChild(image);
|
||||
imageslist.appendChild(imagerow);
|
||||
});
|
||||
viewer = new Viewer(imageslist, {
|
||||
hidden : function() {
|
||||
viewer.destroy();
|
||||
}
|
||||
});
|
||||
viewer.view(pvl.index);
|
||||
viewer.show();
|
||||
viewer.viewer('view', innerIndex);
|
||||
viewer.viewer('show', true);
|
||||
}
|
||||
// end
|
||||
} else {
|
||||
alert("错误:无法定位要预览的文件或该操作未被授权。");
|
||||
}
|
||||
|
|
@ -1312,6 +1321,83 @@ function showPicture(fileId) {
|
|||
});
|
||||
}
|
||||
|
||||
// 用于创建并显示小于2*limit+1长度的图片列表
|
||||
function createViewList() {
|
||||
if(viewer == null) {
|
||||
var images = document.createElement("ul");
|
||||
for(var i = 0; i < pvl.pictureViewList.length; i++) {
|
||||
if(pvl.pictureViewList[i].filePath.startsWith("homeController")){
|
||||
$(images).append("<li><img src='" + pvl.pictureViewList[i].filePath + "' alt='" + pvl.pictureViewList[i].fileName + "' /></li>");
|
||||
}else{
|
||||
$(images).append("<li><img src='fileblocks/" + pvl.pictureViewList[i].filePath + "' alt='" + pvl.pictureViewList[i].fileName + "' /></li>");
|
||||
}
|
||||
}
|
||||
viewer = $(images);
|
||||
viewer.viewer({
|
||||
loop: false,
|
||||
hidden: function() {
|
||||
viewer.data('viewer').destroy();
|
||||
viewer = null;
|
||||
}
|
||||
});
|
||||
}
|
||||
viewer.viewer('view', pvl.index);
|
||||
viewer.viewer('show', true);
|
||||
}
|
||||
|
||||
// 用于创建长于2*limit+1长度的图片分页列表
|
||||
function createViewListByPage() {
|
||||
// 初始化分页结构
|
||||
if(viewer == null) {
|
||||
var images = document.createElement("ul");
|
||||
var startIndex = (viewerPageIndex - 1) * viewerPageSize;
|
||||
if(viewerPageIndex > 1) {
|
||||
$(images).append("<li><img src='css/left.png' alt='上一页' /></li>");
|
||||
}
|
||||
for(var i = 0; i < viewerPageSize && i < (pvl.pictureViewList.length - (viewerPageIndex - 1) * viewerPageSize); i++) {
|
||||
if(pvl.pictureViewList[i].filePath.startsWith("homeController")){
|
||||
$(images).append("<li><img src='" + pvl.pictureViewList[startIndex+i].filePath + "' alt='" + pvl.pictureViewList[startIndex+i].fileName + "' /></li>");
|
||||
}else{
|
||||
$(images).append("<li><img src='fileblocks/" + pvl.pictureViewList[startIndex+i].filePath + "' alt='" + pvl.pictureViewList[startIndex+i].fileName + "' /></li>");
|
||||
}
|
||||
}
|
||||
if(viewerPageIndex < viewerTotal) {
|
||||
$(images).append("<li><img src='css/right.png' alt='下一页' /></li>");
|
||||
}
|
||||
viewer = $(images);
|
||||
viewer.viewer({
|
||||
loop: false,
|
||||
view: function(event) {
|
||||
// 点击的计数为event.detail.index;
|
||||
if(event.detail.index == 0 && viewerPageIndex != 1) {
|
||||
viewerPageIndex--;
|
||||
viewer.data('viewer').destroy();
|
||||
viewer.empty();
|
||||
viewer = null;
|
||||
createViewListByPage();
|
||||
if(viewerPageIndex > 1){
|
||||
viewer.viewer('view',viewerPageSize);
|
||||
}else{
|
||||
viewer.viewer('view',viewerPageSize - 1);
|
||||
}
|
||||
} else if(event.detail.index == viewerPageSize + 1 || (event.detail.index == viewerPageSize && viewerPageIndex == 1)) {
|
||||
viewerPageIndex++;
|
||||
viewer.data('viewer').destroy();
|
||||
viewer.empty();
|
||||
viewer = null;
|
||||
createViewListByPage();
|
||||
viewer.viewer('view',1);
|
||||
}
|
||||
},
|
||||
hidden: function() {
|
||||
viewer.data('viewer').destroy();
|
||||
viewer.empty();
|
||||
viewer = null;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// 选中某一行文件,如果使用Shift点击则为多选
|
||||
function checkfile(fileId) {
|
||||
if (!window.event.shiftKey) {
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,10 @@
|
|||
/*!
|
||||
* jQuery Viewer v1.0.0
|
||||
* https://github.com/fengyuanchen/jquery-viewer
|
||||
*
|
||||
* Copyright (c) 2018 Chen Fengyuan
|
||||
* Released under the MIT license
|
||||
*
|
||||
* Date: 2018-04-01T05:58:29.617Z
|
||||
*/
|
||||
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(require("jquery"),require("viewerjs")):"function"==typeof define&&define.amd?define(["jquery","viewerjs"],t):t(e.jQuery,e.Viewer)}(this,function(d,v){"use strict";if(d=d&&d.hasOwnProperty("default")?d.default:d,v=v&&v.hasOwnProperty("default")?v.default:v,d.fn){var e=d.fn.viewer,c="viewer";d.fn.viewer=function(o){for(var e=arguments.length,u=Array(1<e?e-1:0),t=1;t<e;t++)u[t-1]=arguments[t];var s=void 0;return this.each(function(e,t){var r=d(t),i="destroy"===o,n=r.data(c);if(!n){if(i)return;var f=d.extend({},r.data(),d.isPlainObject(o)&&o);n=new v(t,f),r.data(c,n)}if("string"==typeof o){var a=n[o];d.isFunction(a)&&((s=a.apply(n,u))===n&&(s=void 0),i&&r.removeData(c))}}),void 0!==s?s:this},d.fn.viewer.Constructor=v,d.fn.viewer.setDefaults=v.setDefaults,d.fn.viewer.noConflict=function(){return d.fn.viewer=e,this}}});
|
||||
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue