var csrf_token = document .querySelector("meta[name='csrf-token']") .getAttribute("content"); $.ajaxSetup({ headers: { // 'Content-Type': 'multipart/form-data', // 使用 multipart/form-data 在此不需要設定 Content-Type。 'X-Requested-With': 'XMLHttpRequest', 'X-CSRF-Token': csrf_token, } }); function replace_explorer_section(file_manager_section, exclude_upload_section){ var org_file_manager_section = $('#file_manager_section'); if(org_file_manager_section.find(' > .file-input').length != 0 && file_manager_section.find('> .file-uploader-script').length != 0){ org_file_manager_section.find(' > *').each(function(i,v){ if(!($(v).hasClass('file-input') || $(v).hasClass('file-uploader-script'))){ $(v).replaceWith(file_manager_section.find('>*').eq(i).clone()); } }) if(!exclude_upload_section){ $("#file-uploader").fileinput('clear'); var fileinput_data = $("#file-uploader").data('fileinput'); fileinput_data.uploadUrl = "/xhr/file_manager_upload/" + window.current_path + (window.explorer_setting_id ? ('?setting_id='+window.explorer_setting_id) : ''); } }else{ org_file_manager_section.find('#index_table').html(file_manager_section); } } function reload_explorer_section(url, exclude_upload_section, callback,...args){ if(url == undefined){ url = get_path(); } $.get(url).done(function(data){ var $file_manager_section = $(data); replace_explorer_section($file_manager_section, exclude_upload_section); if(window.scroll_top){ $(window).scrollTop(window.scroll_top); } if(typeof(callback) == 'function'){ callback.apply( this, args ); } }).fail(function() { alert('No such file or directory!'); }); } function reload_page(url, is_recycle_bin, extra_params){ var tmp_url = url, request_url; if(url == undefined){ request_url = get_path(undefined,undefined, extra_params); }else{ request_url = get_path(url,is_recycle_bin, extra_params); } $.get(request_url).done(function(data){ var $file_manager_section = $(data); replace_explorer_section($file_manager_section); if(!window.only_select_folder){ push_history_url(request_url); } if(window.scroll_top){ $(window).scrollTop(window.scroll_top); } }).fail(function() { alert('No such file or directory!'); }); } function push_history_url(new_url, state){ if(state == undefined) state = {body: $('body').prop('outerHTML')}; if(history.state == null){ history.replaceState({need_reload: true} ,$('title').text(), window.location.href); } window.history.pushState(state ,$('title').text(), new_url); } function get_current_url(path, override_recycle_bin, extra_params){ if(override_recycle_bin == undefined){ override_recycle_bin = window.is_recycle_bin; } var params = {}; if(override_recycle_bin){ path = ''; params['recycle_bin'] = true } if(extra_params){ Object.keys(extra_params).forEach(function(k){ params[k] = extra_params[k]; }) } var url = ''; if(window.path_mode == 'params'){ params["path"] = path; url = window.location.pathname }else{ url = "/xhr/file_manager/" + path; } if(window.only_select_folder){ params['select_mode'] = true; } return url + params_to_query(params); } function get_path(path, override_recycle_bin, extra_params){ var params = get_params(); if(path == undefined){ path = window.location.pathname; } if(override_recycle_bin == undefined){ override_recycle_bin = window.is_recycle_bin; } if(override_recycle_bin){ path = "" params["recycle_bin"] = true; window.is_recycle_bin = true; }else{ delete params["recycle_bin"]; window.is_recycle_bin = false; } if(window.only_select_folder){ params['select_mode'] = true; }else{ delete params["select_mode"]; } delete params["page"]; delete params["file_id"]; if(window.explorer_setting_id){ params['setting_id'] = window.explorer_setting_id; } if(extra_params){ Object.keys(extra_params).forEach(function(k){ if (extra_params[k] != null) params[k] = extra_params[k]; }) } if(window.use_params_request){ params['path'] = path; path = ''; }else{ delete params['path']; } return path + params_to_query(params); } function get_basename(file){ var tmp = file.split('/'); return tmp[tmp.length - 1] || ''; } function pathJoin(parts, sep){ var separator = sep || '/'; var replace = new RegExp(separator+'{1,}', 'g'); if(parts.length > 1){ parts.forEach(function(p, i){ if(p[0] == '/'){ for(var k=0; k= 2 ){ $(search_split[1].split("&")).each(function(i, s){ var tmp = s.split("="); var k = tmp[0], v = tmp[1]; if(k.search('[]') != -1){ k = k.split('[]')[0]; if(params.hasOwnProperty(k)){ params[k].push(v); }else{ params[k] = [v]; } }else{ params[k] = v; } }) } return params; } function params_to_query(params){ var query_text = ''; var keys = Object.keys(params); if(keys.length != 0){ keys.forEach(function(k, i){ if(i == 0){ query_text += '?'; }else{ query_text += '&'; } var v = params[k]; if(Array.isArray(v)){ v.forEach(function(vv, j){ if(j != 0){ query_text += '&'; } query_text += `${k}[]=${vv}`; }) }else{ query_text += `${k}=${v}`; } }) } return query_text; } $(document).on("click",".delete",function(){ var that = $(this); window.scroll_top = $(window).scrollTop(); if( window.confirm(that.data("tmp-confirm")) ){ if( window.confirm(that.data("tmp-confirm")) ){ $.ajax({ url: that.data("link"), method: 'DELETE', contentType: false, //required processData: false, // required statusCode: { 204: reload_explorer_section, 404: function() { alert( "Delete failed!\nFile not exist!" ); } } }) } } }) $(document).on("click",".delete_file",function(){ var that = $(this); window.scroll_top = $(window).scrollTop(); if( window.confirm(that.data("tmp-confirm")) ){ if( window.confirm(that.data("tmp-confirm")) ){ $.ajax({ url: that.data("link"), method: 'DELETE', contentType: false, //required processData: false, // required dataType: 'json', statusCode: { 200: function(data) { var params = get_params(); var extra_params; if (data.id) { extra_params = {"version": data.version, "file_id": data.id}; } else { extra_params = {}; } var url = get_path(undefined, undefined, extra_params); var callback = push_history_url; reload_explorer_section(url, false, callback, url); }, 404: function() { alert( "Delete failed!\nFile not exist!" ); } } }) } } }) $(document).on("click",".edit",function(){ $(this).hide(); var pre_height = $('#file_manager_section pre').height(); $('#file_manager_section textarea.edit-area').html($('#file_manager_section pre').html()); $('#file_manager_section textarea.edit-area').removeClass('hide'); $('#file_manager_section pre').addClass('hide'); $('#file_manager_section textarea.edit-area').height(pre_height); $(".save").removeClass('hide'); }) $(document).on("click",".save",function(){ $(this).hide(); var data = new FormData(); data.append("content", $('#file_manager_section textarea.edit-area').val()); $.ajax({ url: '/admin/file_managers/' + $(this).data('id') + '/save', method: 'POST', data: data, contentType: false, //required processData: false, // required dataType: 'json', mimeType: 'multipart/form-data', statusCode: { 200: function(data) { console.log(data); var params = get_params(), url; var callback = push_history_url; if(params.version){ var new_version = Number(params.version) + 1; url = get_path(undefined, undefined, {"version": new_version, "file_id": data.id}); params.version = new_version.toString(); } else { url = get_path(undefined, undefined, {"file_id": data.id}); } reload_explorer_section(url, false, callback, url); $(".save").addClass('hide'); $(".edit").removeClass('hide'); }, 400: function() { alert( "Bad Request!\nThere are no content of this file!" ); } } }) }) $(document).on("click",".module-key",function(){ change_folder(null, $(this).data("key")); }) $(document).on("click",".directory, .file",function(){ change_folder($(this).data("id")); }) $(document).on("click",".breadcrumb-index",function(){ var path = window.current_path[0] == '/' ? window.current_path : ('/' + window.current_path); $("#breadcrumb-relative-url").addClass('hide'); $("#breadcrumb-editable").text(path).removeClass("hide").focus(); window.tmp_current_path = path; }) $(document).on("click",'#breadcrumb-relative-url .directory, #breadcrumb-editable',function(e){ e.stopPropagation(); }) $(document).on("blur","#breadcrumb-editable",function(){ if(window.tmp_current_path != $(this).text().trim()){ change_folder($(this).text().trim()); } $("#breadcrumb-relative-url").removeClass('hide'); $(this).addClass('hide'); }) $(document).on("keydown","#breadcrumb-editable",function(evt){ if(evt.keyCode == 13){ evt.preventDefault(); $(this).trigger("blur"); } }) $(document).on("click", ".copyButton", function(){ var link = $(this).data('link'); // Copy the link navigator.clipboard.writeText(link); if (!($(this).data('org-text'))) $(this).data('org-text', $(this).find('.tooltiptext').text()); $(this).find('.tooltiptext').text($(this).data('prompt') + ': ' + link); }) $(document).on("mouseout", ".copyButton", function(){ var org_text = $(this).data('org-text'); if (org_text) $(this).find('.tooltiptext').text(org_text); }) $(document).on("click", ".redirect_recycle_bin", function(){ change_folder(null, null, true); }) $(document).on("click", ".recycle_bin", function(){ change_folder(null, $(this).data('key'), true); }) $(document).on("click", ".recover_all", function(){ var that = $(this); var prompt_message = that.data("prompt"); $.ajax({ url: '/admin/file_managers/' + window.module_key + '/get_trash_count', method: 'POST', contentType: false, //required processData: false, // required dataType: 'json', mimeType: 'multipart/form-data', statusCode: { 200: function(data) { var count = data["count"] + that.data('unit'); prompt_message = prompt_message.replace('${num}', count); if(window.confirm(prompt_message)){ if(window.confirm(prompt_message)){ $.ajax({ url: '/admin/file_managers/' + window.module_key + '/recover_all', method: 'POST', contentType: false, //required processData: false, // required dataType: 'json', mimeType: 'multipart/form-data', statusCode: { 200: function(data) { var thread_id = data["id"]; var thread_title = data["title"]; reload_explorer_section(get_path(), false, function show_modal(thread_id, thread_title){ $("#threadModal").data('id', thread_id); $("#threadModal .modal-header h3").text(thread_title); $("#threadModal").removeClass('hide').modal('show'); }, thread_id, thread_title); } } }) } } } } }) }) $(document).on("click",".clean_up_recycle_bin", function(){ var that = $(this); var prompt_message = that.data("prompt"); $.ajax({ url: '/admin/file_managers/' + window.module_key + '/get_trash_count', method: 'POST', contentType: false, //required processData: false, // required dataType: 'json', mimeType: 'multipart/form-data', statusCode: { 200: function(data) { var count = data["count"] + that.data('unit'); prompt_message = prompt_message.replace('${num}', count); if(window.confirm(prompt_message)){ if(window.confirm(prompt_message)){ $.ajax({ url: '/admin/file_managers/' + window.module_key + '/clean_trashes', method: 'POST', contentType: false, //required processData: false, // required dataType: 'json', mimeType: 'multipart/form-data', statusCode: { 200: function(data) { var thread_id = data["id"]; var thread_title = data["title"]; reload_explorer_section(get_path(), false, function show_modal(thread_id, thread_title){ $("#threadModal").data('id', thread_id); $("#threadModal .modal-header h3").text(thread_title); $("#threadModal").removeClass('hide').modal('show'); }, thread_id, thread_title); } } }) } } } } }) }) $(document).on('hidden.bs.modal', "#threadModal", function(){ window.clearTimeout(window.time_out_id); }) $(document).on('shown.bs.modal', "#threadModal", function(){ var thread_id = $(this).data('id'); window.time_out_id = window.setTimeout(function(){ update_thread(thread_id, reload_page); }, 1000); }) $(document).on('click', ".change_version", function(){ var that = $(this); var version = that.data('version'); var file_id = that.data('id'); reload_page(undefined,undefined,{"version": version, "file_id": file_id}); }) $(document).on('click', ".recover", function(){ var that = $(this); window.scroll_top = $(window).scrollTop(); if( window.confirm(that.data("tmp-confirm")) ){ $.ajax({ url: that.data("link"), method: 'POST', contentType: false, //required processData: false, // required statusCode: { 204: reload_explorer_section, 404: function() { alert( "Recover failed!\nFile not exist!" ); } } }) } }) function update_thread(id, finish_callback, ...args){ var data = new FormData(); data.append('id',id); $.ajax({ url: "/admin/threads/get_status", method: 'POST', data: data, contentType: false, //required processData: false, // required dataType: 'json', mimeType: 'multipart/form-data', statusCode: { 200: function(data){ var finish_percent = data["finish_percent"]; var current_count = data["current_count"]; var all_count = data["all_count"]; var is_finish = (data["status"] == "finish"); if(finish_percent){ $("#threadModal .modal-body .thread-status").text(data["status"]); if(data["status"] != 'Processing'){ $("#threadModal .modal-body .thread-current-count").text(current_count); $("#threadModal .modal-body .thread-all-count").text(all_count); } $("#threadModal .modal-body .thread-finish_percent").text(finish_percent); }else if(is_finish){ $("#threadModal .modal-body .thread-status").text(data["status"]); $("#threadModal .modal-body .thread-finish_percent").text(100); } var that = this; if(!is_finish){ var tmp_arguments = arguments; window.time_out_id = window.setTimeout(function(){ update_thread.apply(that, tmp_arguments); }, 1000); }else{ if(window.time_out_id) window.clearTimeout(window.time_out_id); var wait_time = 3000; if(finish_callback) wait_time = 0; window.setTimeout(function(){ $("#threadModal").modal("hide"); if(finish_callback){ finish_callback.apply(that, args); } alert(data["status"]); }, wait_time); return; } } } }); } window.onpopstate = function(event) { var state = event.state; if(state != null){ if(state.need_reload){ window.location.reload(); }else if(state.body){ var $body = $(state.body); $('.breadcrumb-index').replaceWith($body.find('.breadcrumb-index')); $('#file_manager_section').replaceWith($body.find('#file_manager_section')); } } };