"use strict"; /* * @copyright Leyun internet Technology(Shanghai)Co.,Ltd * @license http://www.dzzoffice.com/licenses/license.txt * @package DzzOffice * @link http://www.dzzoffice.com * @author zyx(zyx@dzz.cc) */ var _explorer = {}; _explorer = function (json) { _explorer.space = json.space; //用户信息 _explorer.myuid = json.myuid; _explorer.formhash = json.formhash; //FORMHASH _explorer.extopen = json.extopen || {}; //打开方式信息 _explorer.sourcedata = json.sourcedata || []; //所有文件信息 _explorer.type = json.fileselectiontype || 0;//文件选择类型,0为选择文件,1为保存文件,2选择位置 _explorer.defaultselect = json.defaultselect; _explorer.allowcreate = json.allowcreate; _explorer.mulitype = json.mulitype || 0;//是否允许多选,默认不允许 _explorer.permfilter = json.permfilter || '';//文件检索写入权限过滤 //如果是保存文件并且未带入权限过滤参数,强制过滤写入权限 if(_explorer.type == 1){ _explorer.permfilter = (json.permfilter) ? json.permfilter:'write'; } //如果是选择位置 if (_explorer.type == 2) { _explorer.allowselecttype = {'folder': ['文件夹', ['folder'], 'selected']}; } else { _explorer.allowselecttype = json.allowselecttype || '';//允许筛选文件类型 } //默认筛选文件类型 if (json.allowselecttype) { for (var o in json.allowselecttype) { if (json.allowselecttype[o][2] == 'selected') { _explorer.defaultexttype = json.allowselecttype[o][1].join(',').toLowerCase(); } } } else { _explorer.defaultexttype = ''; } _explorer.defaultfilename = json.defaultfilename || ''; _explorer.thame = json.thame || {}; _explorer.infoRequest = 0; _explorer.deletefinally = json.deletefinally || 0; _explorer.cut = json.cut || { iscut: 0, icos: [] }; }; _explorer.appUrl = 'index.php?mod=system&op=fileselection'; _explorer.hash = ''; _explorer.getConfig = function (url, callback) { $.getJSON(url + '&t=' + new Date().getTime(), function (json) { new _explorer(json); _explorer.hashHandler(); _explorer.initEvents(); if (typeof callback === "function") { callback(json); } }); }; _explorer.initEvents = function () { //初始化页面事件 //hashchange事件 $(window).on('hashchange', function () { _explorer.hashHandler(); }); //左侧列表页事件 $(document).off('click.document-data').on('click.document-data', '.document-data', function () { //var el=$(this); location.hash = jQuery(this).data('hash'); }); //右侧加载完成事件 $(document).off('ajaxLoad.middleContent').on('ajaxLoad.middleContent', function () { var hash = location.hash.replace(/^#/i, ''); var op = hash.replace(/&(.+?)$/ig, ''); //(hash,'op'); _explorer.topNav_init(); _explorer.address_resize(); _explorer.setHeight($('.height-100')); if ($('.scroll-100').length) { _explorer.scroll_100 = new PerfectScrollbar('.scroll-100'); } }); }; _explorer.createMenuSwidth = function (fid) { //判断新建和上传图标显示 var folderperm = false;//文件夹权限 var uploadperm = false;//上传权限 if(_explorer.allowcreate){ //文件夹权限(判断是否有文件夹权限如果没有隐藏文件夹相关新建上传),如果是选择位置隐藏新建文件 if (!_explorer.Permission_Container('upload', fid) || _explorer.type == 2) { $('#createmenu').find('li').not('.folderPermMust').addClass('hide'); } else { $('#createmenu').find('li').not('.folderPermMust').removeClass('hide'); folderperm = true; } if (!_explorer.Permission_Container('folder', fid)) { //其它类型新建权限,如果无权限,隐藏文件相关权限 jQuery('#createmenu').find('li.folderPermMust').addClass('hide'); } else { jQuery('#createmenu').find('li.folderPermMust').removeClass('hide'); uploadperm = true; } if (folderperm || uploadperm) { //如果没有文件夹权限和文件权限,隐藏新建上传菜单 $('#createmenu').removeClass('hide'); $('#exampleColorDropdown2').removeClass('hide'); } else { $('#createmenu').addClass('hide'); $('#exampleColorDropdown2').addClass('hide'); } //去掉多余的分割线 $('.divider').each(function(){ if($(this).prev('li:visible').length < 1){ $(this).remove(); } }) } } _explorer.set_address = function (path) { var pathstr = path; $('.select-address input.inputaddress').val(pathstr); var patharr = pathstr.split('\\'); var address_html = ''; for (var o in patharr) { address_html += '
  • ' + patharr[o] + '
  • '; } $('.select-address div.address-field').html(address_html); } _explorer.address_resize = function (dir) { var container = jQuery('.address-container'); var address = jQuery('.address-field'); var cwidth = container.width(); var speed = cwidth; var awidth = 0; address.find('li').each(function () { awidth += jQuery(this).outerWidth(true); }); var left = isNaN(parseInt(address.css('left'))) ? (cwidth - awidth) : parseInt(address.css('left')); if (dir === 'left') { left += speed; if (left >= 0) { left = 0; container.removeClass('arrow-left'); } if (left > (cwidth - awidth)) { container.addClass('arrow-right'); } else { container.removeClass('arrow-right'); } if (left < 0) { container.addClass('arrow-left'); } else { container.removeClass('arrow-left'); } address.animate({ 'left': left, 'right': 'auto' }, 500); } else if (dir === 'right') { left -= speed; if (left <= (cwidth - awidth)) { left = (cwidth - awidth); container.removeClass('arrow-right'); } if (left > (cwidth - awidth)) { container.addClass('arrow-right'); } else { container.removeClass('arrow-right'); } if (left < 0) { container.addClass('arrow-left'); } else { container.removeClass('arrow-left'); } address.animate({ 'left': left, 'right': 'auto' }, 500); } else { if (awidth > cwidth + 21) { container.removeClass('arrow-right').addClass('arrow-left'); } else { container.removeClass('arrow-right').removeClass('arrow-left'); } address.css({ 'left': 'auto', 'right': 0 }); } }; _explorer.topNav_init = function () { /*页面地址栏相关事件*/ $(document).off('click.address-left-arrow').on('click.address-left-arrow', '.address-left-arrow', function () { _explorer.address_resize('left'); return false; }); $(document).off('click.address-right-arrow').on('click.address-right-arrow', '.address-right-arrow', function () { _explorer.address_resize('right'); return false; }); //点击路径切栏切换位置 $(document).off('click.routes').on('click.routes', '.address-container .routes', function () { var path = ''; var text = $(this).text().replace(/(^\s*)|(\s*$)/g, ''); var textprefix = /[::]/; var prefix = ''; var textarr = []; if (textprefix.test(text)) { textarr = text.split(/[::]/); prefix = textarr[0]; text = textarr[1]; } $(this).closest('li').prevAll().find('a').each(function () { path += $(this).text().replace(/(^\s*)|(\s*$)/g, '') + '/'; }); path += text; //path = path.replace(/>/g,'/'); if (path.charAt(path.length - 1) !== '/') { path = path + '/'; } _explorer.routerule(path, prefix); return false; }); //输入地址栏实现切换 $(document).off('keyup.referer_path').on('keyup.referer_path', '.address-container .referer_path', function (e) { if (e.keyCode === 13) { var path = $(this).val(); path = path.replace(/\\/g, '/', path); var hash = false; switch (path) { case '我的网盘': _explorer.routerule(path); break; case '动态': hash = 'dynamic'; break; case '回收站': hash = 'recycle'; break; case '分享': hash = 'share'; break; case '收藏': hash = 'collection'; break; case '最近使用': hash = 'recent'; break; case '文件夹权限': hash = 'perm'; break; case '功能管理': hash = 'app'; break; case '图片': case '文档': path = '类型:' + path; break; } var textprefix = /[::]/; var patharr = []; var prefix = ''; if (textprefix.test(path)) { patharr = path.split(/[::]/); prefix = patharr[0]; path = patharr[1]; if (path.charAt(path.length - 1) !== '/') { path = path + '/'; } _explorer.routerule(path, prefix); return false; } if (hash) { location.hash = hash; return false; } if (path.charAt(path.length - 1) !== '/') { path = path + '/'; } _explorer.routerule(path); return false; } }); }; _explorer.routerule = function (path, prefix) { var queryobj = { 'name': path }; //获取前缀 if (prefix) { switch (prefix) { case '群组': queryobj.prefix = 'g'; break; case '机构': queryobj.prefix = 'o'; break; case '类型': queryobj.prefix = 'c'; break; } } $.post(_explorer.appUrl + '&do=ajax&operation=getfid', queryobj, function (data) { if (data.success) { var hash = ''; if (!isNaN(parseInt(data.success['gid']))) { hash = 'group&gid=' + data.success['gid'] + (data.success['fid'] ? '&fid=' + data.success['fid'] : ''); } else { hash = 'home&fid=' + data.success['fid']; } location.hash = hash; } }, 'json'); return false; }; _explorer.hashHandler = function () { //处理页面hash变化 var hash = location.hash; hash = hash.replace(/^#/i, ''); if (!hash) { hash = _explorer.defaultselect; _explorer.jstree_select(hash); } if (hash === _explorer.hash) { return false; } if (hash !== _explorer.hash) { _explorer.getRightContent(hash, $('#middleconMenu')); _explorer.hash = hash; } else { _explorer.hash = hash; } //_explorer.topMenu(hash); return false; }; _explorer.loading = function (container, flag) { //右侧加载效果 if (flag === 'hide') { container.find('.rightLoading').remove(); } else { container.append('
    '); } }; _explorer.getRightContent = function (hash, container) { //处理右侧页面加载 _explorer.loading(container); _explorer.rightLoading = 1; $('.document-data').removeClass('actives'); $('[data-hash="' + hash + '"]').addClass('actives'); var url = _explorer.appUrl + '&do=file&' + hash; jQuery('#middleconMenu').load(url, function () { $(document).trigger('ajaxLoad.middleContent', [hash]); }); }; //通过hash值来设置左侧树的选择指示 _explorer.jstree_select = function (hash) { if (!hash) { hash = location.hash.replace('#', ''); } if (!hash) { hash = $('#position').find("li[flag='home']").attr('hashs'); } var op = hash.replace(/&(.+?)$/ig, ''); //(hash,'op'); var fid = _explorer.getUrlParam(hash, 'fid'); if (op === 'group') { var gid = _explorer.getUrlParam(hash, 'gid'); _explorer.open_node_by_id(fid, gid); } else if (op === 'home') { _explorer.open_node_by_id(fid); } /*else if (op === 'mygroup') { $('#position').jstree(true).select_node('#group'); }*/ else { if ($('#position').length > 0) { $('#position').jstree(true).deselect_all(); } } }; _explorer.open_node_by_id = function (fid, gid) { var inst = $('#position').jstree(true); var node = null; if (fid) { node = inst.get_node('#f_' + fid) || inst.get_node('#u_' + fid); } else if (gid) { node = inst.get_node('#g_' + gid) || inst.get_node('#gid_' + gid); } else { inst.deselect_all(); return; } if (node) { inst.deselect_all(); var selects = inst.get_selected(); for (var i = 0; i < selects.length; i++) { if (selects[i] === node.id) { continue; } inst.deselect_node('#' + selects[i]); } inst.select_node(node); } else { $.post(_explorer.appUrl + '&op=filelist&do=getParentsArr', { 'fid': fid, 'gid': gid }, function (data) { var node = inst.get_node('#' + data[0]); _explorer.open_node_bg(inst, node, data); }, 'json'); } }; _explorer.open_node_bg = function (inst, node, arr) { inst.open_node(node, function (node) { var i = jQuery.inArray(node.id, arr); if (i < arr.length && i > -1 && document.getElementById(arr[i + 1])) { _explorer.open_node_bg(inst, document.getElementById(arr[i + 1]), arr); } else { inst.deselect_all(); inst.select_node(node); } }); }; _explorer.getUrlParam = function (url, name) { if (!name) { return url; } var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); if (!url) { return ''; } var r = url.match(reg); if (r !== null) { return decodeURIComponent(r[2]); } }; //设定层高度 _explorer.setHeight = function (els) { var clientHeight = document.documentElement.clientHeight; els.each(function () { var el = $(this); var pos = el.offset(); var height = clientHeight - pos.top; el.css('height', height); }); }; //带有.scroll-y的层设置滚动条 _explorer.Scroll = function (els) { var clientHeight = document.documentElement.clientHeight; if (!els) { els = $('.scroll-y'); } els.each(function () { var el = $(this); var pos = el.offset(); var height = clientHeight - pos.top; if (el.data('subtractor')) { height = height - el.data('subtractor'); } el.css({ 'overflow': 'auto', 'height': height, 'position': 'relative' }); new PerfectScrollbar(this); }); }; _explorer.image_resize = function (img, width, height) { width = !width ? jQuery(img).parent().width() : width; height = !height ? jQuery(img).parents('.icoimgContainer').parent().height() : height; imgReady(img.src, function () { var w = this.width; var h = this.height; var realw = 0, realh = 0; if (w > 0 && h > 0) { if ((w / h) > 1) { realw = (w > width) ? parseInt(width) : w; realh = (w > width) ? parseInt(height) : (realw * h / w); img.style.width = realw + 'px'; img.style.height = realh + 'px'; } else { realh = (h > height) ? parseInt(height) : h; realw = (h > height) ? parseInt(width) : (realh * w / h); img.style.width = realw + 'px'; img.style.height = 'auto'; } if (realw < 32 && realh < 32) { jQuery(img).addClass('image_tosmall').css({ padding: ((height - realh) / 2 - 1) + 'px ' + ((width - realw) / 2 - 1) + 'px' }); } } jQuery(img).show(); }); }; _explorer.icoimgError = function (img, width, height) { width = !width ? jQuery(img).parent().width() : width; height = !height ? jQuery(img).parent().height() : height; if (jQuery(img).attr('error')) { imgReady(jQuery(img).attr('error'), function () { var w = this.width; var h = this.height; var realw = 0, realh = 0; if (w > 0 && h > 0) { if ((w / h) > 1) { realw = (w > width) ? parseInt(width) : w; realh = realw * h / w; } else { realh = (h > height) ? parseInt(height) : h; realw = realh * w / h; } if (realw < 32 && realh < 32) { jQuery(img).addClass('image_tosmall').css({ padding: ((height - realh) / 2 - 1) + 'px ' + ((width - realw) / 2 - 1) + 'px' }); } try { img.style.width = realw + 'px'; img.style.height = realh + 'px'; } catch (e) { } img.src = jQuery(img).attr('error'); jQuery(img).show(); } }, function () { }, function () { img.onerror = null; img.src = 'dzz/images/default/icodefault.png'; jQuery(img).show(); } ); } }; jQuery(window).resize(function () { _explorer.Scroll(); }); function checkAll(type, form, value, checkall, changestyle) { checkall = checkall ? checkall : 'chkall'; for (var i = 0; i < form.elements.length; i++) { var e = form.elements[i]; if (type === 'option' && e.type === 'radio' && e.value === value && e.disabled !== true) { e.checked = true; } else if (type === 'value' && e.type === 'checkbox' && e.getAttribute('chkvalue') === value) { e.checked = form.elements[checkall].checked; } else if (type === 'prefix' && e.name && e.name !== checkall && (!value || (value && e.name.match(value)))) { e.checked = form.elements[checkall].checked; if (changestyle) { if (e.parentNode && e.parentNode.tagName.toLowerCase() === 'li') { e.parentNode.className = e.checked ? 'checked' : ''; } if (e.parentNode.parentNode && e.parentNode.parentNode.tagName.toLowerCase() === 'div') { e.parentNode.parentNode.className = e.checked ? 'item checked' : 'item'; } } } } } function dfire(e) { jQuery(document).trigger(e); }