관리-도구
편집 파일: ve-A69B.tmp
// jQuery File Tree Plugin - Customized version for CrushFTP // Customized by Vipul Limbachiya http://vipullimbachiya.com for CrushFTP // // Version 1.01 // // Cory S.N. LaViska // A Beautiful Site (http://abeautifulsite.net/) // 24 March 2008 // // Visit http://abeautifulsite.net/notebook.php?article=58 for more information // // Usage: $('.fileTreeDemo').fileTree( options, callback ) // // History: // // 1.01 - updated to work with foreign characters in directory/file names (12 // April 2008) // 1.00 - released (24 March 2008) // // TERMS OF USE // // This plugin is dual-licensed under the GNU General Public License and the MIT // License and // is copyright 2008 A Beautiful Site, LLC. // // Customized by Vipul Limbachiya(http://vipullimbachiya.com) for CrushFTP // if (jQuery) (function($) { $.extend($.fn, { fileTree: function(o, h) { // Defaults if (!o) var o = {}; if (o.root == undefined) o.root = '/'; if (o.script == undefined) o.script = 'jqueryFileTree.php'; if (o.folderEvent == undefined) o.folderEvent = 'click'; if (o.expandSpeed == undefined) o.expandSpeed = 500; if (o.collapseSpeed == undefined) o.collapseSpeed = 500; if (o.expandEasing == undefined) o.expandEasing = null; if (o.collapseEasing == undefined) o.collapseEasing = null; if (o.multiFolder == undefined) o.multiFolder = true; if (o.loadMessage == undefined) o.loadMessage = 'Loading...'; //All options below this added by Vipul for CrushFTP //Static Values o.ajaxCallURL = "/WebInterface/function/"; o.ImageFilePath = "/WebInterface/jQuery/images/"; o.FilePath = "/WebInterface/jQuery/"; o.fileLarge = o.ImageFilePath + "fileLarge.png"; o.fileFolder = o.ImageFilePath + "folderLarge.png"; o.spinerImage = o.ImageFilePath + "spinner.gif"; o.PreviewIconThumbnailStyle = "height:35px;border:0px"; o.ViewCookieName = "__CRUSHFTP_FILE_LIST_VIEW"; o.CookieHideItemStartingWithDot = "__CRUSHFTP_SHOW_ITEMS_STARTING_WITH_DOT"; o.CookieCopiedFiles = "__CRUSHFTP_FILES_COPIED"; o.MaximumLengthAllowedForKeywordsString = 25; o.thumbnailTextCharsLimit = 14; o.FileListingElement = $("#filesListing"); o.FilesNotAvailableMessage = "No files available"; o.CopyNoFilesSelectedMessage = "Please select files/folders to copy"; o.DeleteNoFilesSelectedMessage = "Please select files/folders to delete"; o.CutNoFilesSelectedMessage = "Please select files/folders to cut"; o.ZipNoFilesSelectedMessage = "Please select files/folders to zip"; o.CookieLimitReachedMessage = "Cookie limit reached, copied to the document. Refreshing the page will remove items from clipboard"; o.MaxSimultaneousUploadAllowed = 1; //Column model for files XML o.colModel = [ { name: 'type', index: 'type', sorttype: "text" }, { name: 'dateFormatted', index: 'dateFormatted', sorttype: "date" }, { name: 'sizeFormatted', index: 'sizeFormatted', sorttype: "text" }, { name: 'name', index: 'name', sorttype: "text" }, { name: 'base64path', index: 'base64path', sorttype: "text" }, { name: 'keywords', index: 'keywords', sorttype: "text" }, { name: 'root_dir', index: 'root_dir', sorttype: "text" }, { name: 'preview', index: 'preview', sorttype: "text" }, { name: 'privs', index: 'privs', sorttype: "text"}]; if (o.customData == undefined) o.customData = false; if (o.overrideFromHash == undefined) //It will load items for particular folder as on hash location o.overrideFromHash = true; if (o.setHashLocation == undefined) //Enable or disable to set hash location on folder change o.setHashLocation = true; if (o.expandedImageURL == undefined) //Path to expanded image - displayed against expanded folder in a grid o.expandedImageURL = o.ImageFilePath + "expanded.png"; if (o.collapsedImageURL == undefined) //Path to collapsed image - displayed against expanded folder in a grid o.collapsedImageURL = o.ImageFilePath + "collapsed.png"; if (o.refreshImageURL == undefined) //Path to refresj image - displayed against current folder name in a breadcrumbs o.refreshImageURL = o.ImageFilePath + "refresh.png"; $(this).each(function() { //Template for a header for Grid view var headerTemplate = "<thead><tr><th class='thSelect'><input type='checkBox' class='chkBoxAll' /></th><th class='thName'>Name</th><th class='thSize'>Size</th><th class='thModified'>Modified</th><th class='thKeywords'>Keywords</th></tr></thead>"; //Template for thumbnail view item var thumbnailItemTemplate = '<li class="vtip fileBox #CLASS#" name="#NAME#" title="#TITLE#" privs="#PRIVS#" size="#SIZE#" Date="#DATE#" Keywords="#KEYWORDS#" preview="#PREVIEW#"><div>' + ' <div class="imgBox">' + ' <table cellspacing="0" cellpadding="0" align="center">' + ' <tbody>' + ' <tr>' + ' <td valign="middle" align="center">' + ' <a class="imgLink" rel="#REL#" href="#HREF#">' + ' <img alt="#NAME#" title="#NAME#" style="border: 0px none;" src="#SRC#">' + ' </a>' + ' </td>' + ' </tr>' + ' </tbody>' + ' </table>' + ' </div>' + ' </div>' + ' <div class="imgTitle">' + ' <a rel="#PATHREL#" href="#HREF#">#NAME#</a>' + ' </div>' + '</li>' /* * Shows tree to particular elemenet. First parameter is * parent element, t is a path. Locatefolder in treeview * replaces all content with items in the folder specified. * Usehash is a boolean, which overrides any path supplied * and uses hash from location as a path */ function showTree(parentElement, path, locateFolder, useHash) { /*Shows spinner*/ var c = parentElement; var t = path; $(c).addClass('wait'); /* Remove initial element */ $("#searchResultNotification").hide(); $(".jqueryFileTree.start").remove(); /* If to use custom data - Specific to CrushFTP */ if (o.customData) { /* Conditions if overrid location to use from location hash*/ if ((!$(this).data("initialized") && o.overrideFromHash) || useHash) { $(this).data("initialized", true); var hashLocation = getHash().replace("#", ""); if (hashLocation) { t = hashLocation; } else { t = "/"; } } if (locateFolder) { blockFileListingUI(true); } /* If nothing specified use root directory */ if (t.length == 0 || t == 'null') t = "/"; /* Data to POST to receive file listing */ var obj = { command: "getXMLListing", path: escape(unescape(t)), random: Math.random() }; /* Basic POST setup */ $.ajaxSetup({ scriptCharset: "utf-8", contentType: "application/x-www-form-urlencoded; charset=UTF-8" }); /* Make a call and receive list */ $.ajax({ type: "POST", url: o.ajaxCallURL, data: obj, success: function(msg) { renderListing(c, t, locateFolder, useHash, msg); } }); } else { $.post(o.script, { dir: t }, function(data) { $(c).find('.start').html(''); $(c).removeClass('wait').append(data); blockFileListingUI(false); $(c).find('TR:hidden').show(); bindTree(c); }); } } function renderListing(c, t, locateFolder, useHash, msg, searchResult) { if (searchResult) { $("#searchResultNotification").show(); } //If current view is thumbnail if (currentView() == "Thumbnail") { //This will provide HTML for thumbnails var data = mapXmlToTable(msg, true); $(c).html(data); //Bind various events prepareDataRow($(c).find("li")); bindTree(elems); bindAllEventsForThumbnailView($(c), data); } else { /* If its tree view */ if (searchResult) { //Get the html after XML parsing for treeview var data = mapXmlToTable(msg, true); //Remove old items $(c).find(".headerSortDown").removeClass("headerSortDown"); $(c).find(".headerSortUp").removeClass("headerSortUp"); $(c).find("tbody").html(''); //Remove spinner and add HTML $(c).find("tbody").append(data); //Display new items blockFileListingUI(false); var elems = $(c).find('TR:hidden:not(.hiddenFile)').show().addClass("subdirectory"); /* Bind various events */ bindTree(elems); //Apply proper padding and make it look like Tree var nameColumns = $(elems).find('.columnName'); nameColumns.addClass("subdirectory"); nameColumns.last().parent().addClass("subdirectoryLast"); var relLink = $("a[rel='" + $(nameColumns).first().parent().attr("rel") + "']"); var dirCheckBox = $(relLink).closest("tr").find(".chkBox:visible"); /* Handle checkboxes */ checkUnCheckDirectory(dirCheckBox.parent(), dirCheckBox.is(":checked")); toggleMainCheckbox(dirCheckBox.closest("table")); var padLeft = 0; if (relLink.parent().css("padding-left")) { try { padLeft = parseInt(relLink.parent().css("padding-left").replace("px", "")); } catch (ex) { $.growlUI("Error", ex, 2000, "growlError"); } } if (padLeft != NaN) { if (padLeft >= 20) { padLeft += 20; var padicon = padLeft; var padTree = padicon - 20; nameColumns.attr("style", "padding-left:" + padLeft + "px !important; background-position:" + padicon + "px !important;"); nameColumns.parent().attr("style", "padding-left:" + padicon + "px !important; background-position:" + padLeft + "px !important;"); } } bindAllEventsForTreeviewGrid($(c), false); } else if (!locateFolder && $(c).hasClass('directory')) { //If to show folder items under tree //Get the html after XML parsing for treeview var data = mapXmlToTable(msg, true); //Remove old items $(c).find('.start').html(''); //Remove spinner and add HTML $(c).removeClass('wait').parent().after(data); //Display new items blockFileListingUI(false); var elems = $(c).closest("table").find('TR:hidden:not(.hiddenFile)').show().addClass("subdirectory"); /* Bind various events */ bindTree(elems); //Apply proper padding and make it look like Tree var nameColumns = $(elems).find('.columnName'); nameColumns.addClass("subdirectory"); nameColumns.last().parent().addClass("subdirectoryLast"); var relLink = $("a[rel='" + $(nameColumns).first().parent().attr("rel") + "']"); var dirCheckBox = $(relLink).closest("tr").find(".chkBox:visible"); /* Handle checkboxes */ checkUnCheckDirectory(dirCheckBox.parent(), dirCheckBox.is(":checked")); toggleMainCheckbox(dirCheckBox.closest("table")); var padLeft = 0; if (relLink.parent().css("padding-left")) { try { padLeft = parseInt(relLink.parent().css("padding-left").replace("px", "")); } catch (ex) { $.growlUI("Error", ex, 2000, "growlError"); } } if (padLeft != NaN) { if (padLeft >= 20) { padLeft += 20; var padicon = padLeft; var padTree = padicon - 20; nameColumns.attr("style", "padding-left:" + padLeft + "px !important; background-position:" + padicon + "px !important;"); nameColumns.parent().attr("style", "padding-left:" + padicon + "px !important; background-position:" + padLeft + "px !important;"); } } bindAllEventsForTreeviewGrid($(c).closest('table'), false); } else if (locateFolder) { //If to show folder items only //Get the html after XML parsing for treeview var data = mapXmlToTable(msg); //Replace all existing items with new items and show them var $parent = $(c).closest('table') || $parent; $parent.find(".headerSortDown").removeClass("headerSortDown"); $parent.find(".headerSortUp").removeClass("headerSortUp"); $parent.find("tbody").empty().append(data).find('TR:hidden').show(); bindTree($parent); bindAllEventsForTreeviewGrid($(c).closest('table'), true, data); } else { //If its called for first time. Get the html after XML parsing for treeview var data = mapXmlToTable(msg); //Replace all existing items with new items and show them $(c).find('.start').html(''); $(c).removeClass('wait').append("<tbody>" + data + "</tbody>").prepend(headerTemplate); blockFileListingUI(false); $(c).find('TR:hidden').show(); bindTree(c); var currentViewType = $.cookie(o.ViewCookieName); if (currentViewType && currentViewType == "Thumbnail") { changeView(currentViewType, true); } $("a.clearFilterLink").unbind("click").click( function() { if ($("#filter").val().length > 0) { $("#filter").val("").keyup(); } return false; }); $("#filter").unbind("keyup").keyup( function() { if (currentView() == "Thumbnail") { $.uiItemFilter( $('#filesContainerDiv'), this.value); } else { $.uiTableFilter( $('table#filesContainer'), this.value); } }); bindAllEventsForTreeviewGrid($(c).closest('table'), true, data); } } if ($("#filter").val().length > 0) { $("#filter").keyup(); } } function bindAllEventsForThumbnailView(parentElement, data) { bindBreadcrumbs(); bindGoToFolderEvents($(parentElement), o); //Enable context menu $(".fileBox").contextMenu({ menu: 'myMenu' }, function(action, el, pos) { handleContextMenuEvents(action, el, pos); }); //Remove spinner $('.wait').removeClass('wait'); blockFileListingUI(false); // Set item title text to fit width setTitleText(); // Set icons to proper zoom as selection zoomInOutView(zoomSlider.slider("value")); checkFilesAvailable(data); refreshView(); } function refreshView() { var hideItemsStartingWithDot = $.cookie(o.CookieHideItemStartingWithDot); hideItemsStartingWithDot = hideItemsStartingWithDot == "true"; if (currentView() == "Thumbnail") { if (hideItemsStartingWithDot) { $("div.imgTitle").find("a").each( function() { if ($.trim($(this).text()).charAt(0) == ".") { $(this).closest("li").hide().addClass("hiddenFile"); } }); } else { $("div.imgTitle").find("a").each( function() { if ($.trim($(this).text()).charAt(0) == ".") { $(this).closest("li").show().removeClass("hiddenFile"); } }); } } else { if (hideItemsStartingWithDot) { $(".jqueryFileTree").find("a").each( function() { if ($.trim($(this).text()).charAt(0) == ".") { var el = $(this).closest("td"); if ($(el).hasClass("directory")) { hideDirectoryFromTree($(el).closest("table").find('TR[rel="' + escape($(el).find("a").attr('rel')) + '"]'), true); } $(this).closest("tr").hide().addClass("hiddenFile"); } }); } else { $(".jqueryFileTree").find("a").each( function() { if ($.trim($(this).text()).charAt(0) == ".") { var el = $(this).closest("td"); if ($(el).hasClass("directory")) { hideDirectoryFromTree($(el).closest("table").find('TR[rel="' + escape($(el).find("a").attr('rel')) + '"]'), false); } $(this).closest("tr").show().removeClass("hiddenFile"); } }); } } } function bindAllEventsForTreeviewGrid(element, checkForFiles, data) { howerEffect(); bindCheckboxEvents(); bindBreadcrumbs(); bindGoToFolderEvents(element, o); blockFileListingUI(false); if (checkForFiles) { checkFilesAvailable(data); } bindContextMenu(); bindSortingToTreeviewGrid(); refreshView(); toggleCheckBoxesAll(element, $(".chkBoxAll").is(":checked")); } function bindSortingToTreeviewGrid() { if (!$("#filesContainer").data("sortingAdded")) { $(".chkBoxAll").click(function(event) { var chkBox = $(this); toggleCheckBoxesAll($(this).closest("table"), chkBox.is(":checked")); }); var th = jQuery('#filesContainer').find('th').addClass("header"), inverse = true; $(".thName").addClass("headerSortUp"); th.click(function() { if ($(this).hasClass("thSelect")) { return; } $(th).parent().find(".headerSortDown").removeClass("headerSortDown"); $(th).parent().find(".headerSortUp").removeClass("headerSortUp"); var header = $(this), index = header.index(); header.closest('table').find('td').filter( function() { return $(this).index() === index; }).sort(function(a, b) { a = $(a).text().toLowerCase(); b = $(b).text().toLowerCase(); if (header.hasClass("thModified")) { return sortDate(a, b, inverse); } else { return (isNaN(a) || isNaN(b) ? a > b : +a > +b) ? inverse ? -1 : 1 : inverse ? 1 : -1; } }, function() { return this.parentNode; }); moveElementOnTreeAfterSorting($(this).closest("table").find("td.directory")); inverse = !inverse; if (inverse) { $(this).removeClass("headerSortDown").addClass("headerSortUp"); } else { $(this).removeClass("headerSortUp").addClass("headerSortDown"); } }); function sortDate(a, b, inverse) { var dateRE = /^(\d{2})[\/\- ](\d{2})[\/\- ](\d{4})/; a = a.replace(dateRE, "$3$1$2"); b = b.replace(dateRE, "$3$1$2"); if (inverse) { if (a > b) return -1; if (a < b) return 1; } else { if (a > b) return 1; if (a < b) return -1; } return 0; } $("#filesContainer").data("sortingAdded", true); } } function bindContextMenu() { $("#filesContainer td.directory,#filesContainer td.file,#filesContainer td.fileTR").contextMenu({ menu: 'myMenu' }, function(action, el, pos) { handleContextMenuEvents(action, el, pos); }); $(".chkBoxAll").contextMenu({ menu: 'checkBoxMenu' }, function(action, el, pos) { handleContextMenuEvents(action, el, pos); }); } function checkFilesAvailable(fileList) { if (fileList.length == 0) { o.FileListingElement.block({ message: o.FilesNotAvailableMessage, css: { border: 'none', padding: '5px', backgroundColor: '#fff', color: '#000', width: '200px', 'margin-left': '-100px', top: '40px', left: '50%', '-webkit-border-radius': '10px', '-moz-border-radius': '10px', 'text-align': 'center', 'font-size': '11px' } }); } else { o.FileListingElement.unblock(); } } function prepareDataRow(elems) { $(elems).each(function() { var data = { name: $(this).attr("name"), size: $(this).attr("size"), date: $(this).attr("date"), keywords: $(this).attr("keywords"), preview: $(this).attr("preview"), privs: $(this).attr("privs") }; $(this).data("dataRow", data); $(this).removeAttr("name").removeAttr("size").removeAttr("date").removeAttr("keywords").removeAttr("preview").removeAttr("privs"); }); } var regexpCache = {}; function wbr(str, num) { if (!regexpCache[num]) { regexpCache[num] = RegExp("(\[^\s-].{" + num + "})(?=\[^\s-].)", "g"); } return str.replace(regexpCache[num], "$1<br>"); } function setTitleText(elem) { elem = elem || $(".imgTitle").find("a"); elem.each(function() { $(this).html(wbr($(this).text(), o.thumbnailTextCharsLimit)); }); } function loadIconPreview(size, force, elem) { size = size || 1; if (currentView() == "Thumbnail") { var opt = false; if (force) { if (elem) { opt = $(elem).data("dataRow"); elem = elem.closest("li") || elem; elem.removeData("previewAdded"); if (elem.hasClass("vtip")) { elem.attr("title", "<strong>Name : </strong>" + elem.find("div.imgTitle>a").text() + "<br /><strong>Size : </strong>" + opt.size + "<br /><strong>Modified : </strong>" + opt.date + "<br /><strong>Keywords : </strong>" + opt.keywords); } elem = elem.find("a.imgLink").find("img"); elem.removeClass("loadedPreview").attr("src", o.spinerImage).removeData("triedOnce"); } else { $("img.loadedPreview").removeClass("loadedPreview").attr("src", o.spinerImage); } } elem = elem || $("img[src='" + o.spinerImage + "']"); elem.each(function() { var $curElem = $(this); opt = $curElem.closest("li").data("dataRow"); if (opt && opt.preview == "true") { $curElem.attr("src", o.ajaxCallURL + "?command=getPreview&size=" + size + "&path=" + $curElem.parent().attr("href")).attr("style", o.PreviewIconThumbnailStyle); var parentElem = $curElem.closest("li") || $curElem; var relLink = parentElem.find("a:first"); var title = $(parentElem).attr("title") || $(parentElem).attr("original-title"); if(title.indexOf("getPreview")<0) { $(parentElem).attr("title", "<img src=\"" + o.ajaxCallURL + "?command=getPreview&size=2&path=" + relLink.attr("href") + "\" border=\"0\" /> <br />" + $(parentElem).attr("title")); } } else { $(this).attr("src", o.ImageFilePath + getFileExtension($(this).parent().attr("href")) + ".png").css("height", "16px"); $(this).data("triedOnce", true); } $curElem.addClass("loadedPreview"); $curElem.bind("error", function() { $(this).removeClass("loadedPreview"); if (!$(this).data("triedOnce")) { $(this).attr("src", o.ImageFilePath + getFileExtension($(this).parent().attr("href")) + ".png").css("height", "16px"); $(this).data("triedOnce", true); } else { $(this).unbind("error"); $(this).attr("src", o.fileLarge).attr("style", o.PreviewIconThumbnailStyle); } }); $curElem.bind("load", function(e) { var parentElem = $(this).closest("li") || parentElem; var relLink = parentElem.find("a:first"); if (!$(this).data("triedOnce") && !parentElem.data("previewAdded")) { if (parentElem.hasClass("vtip")) { parentElem.data("previewAdded", true); } } }); }); } else { if (force) { if (elem) { elem.find(".previewIcon").remove(); elem.removeData("recognized"); } } elem = elem || $("td.fileTR"); elem.each(function() { var $curElem = $(this); if (!$curElem.data("recognized")) { var newImg = $("<img />"); $curElem.prepend("<span class=\"previewIcon\"></span>"); $curElem.find(".previewIcon").append(newImg); if ($curElem.attr("preview") == "true") { newImg = $curElem.find("img"); newImg.attr("src", o.ajaxCallURL + "?command=getPreview&size=" + size + "&path=" + $curElem.find("a").attr("href")); var relLink = $curElem.find("a").addClass("iconPreviewLink"); $curElem.addClass("vtip").removeClass("file"); $curElem.attr("title", "<img src=\"" + o.ajaxCallURL + "?command=getPreview&size=2&path=" + relLink.attr("href") + "\" border=\"0\" />"); vtip($curElem); newImg.bind("error", function() { if (!$(this).data("triedOnce")) { $(this).attr("src", o.ImageFilePath + getFileExtension($(this).attr("src")) + ".png"); $(this).data("triedOnce", true); } else { $(this).unbind("error"); $(this).attr("src", o.fileLarge).attr("style", o.PreviewIconThumbnailStyle); } }); } else { newImg = $curElem.find("img"); newImg.attr("src", o.ImageFilePath + getFileExtension($(newImg).attr("src")) + ".png"); newImg.attr("src", o.ImageFilePath + getFileExtension($(newImg).parent().next().attr("rel")) + ".png").css("height", "16px"); $(newImg).data("triedOnce", true); newImg.bind("error", function() { if (!$(this).data("triedOnce")) { $(this).attr("src", o.ImageFilePath + getFileExtension($(this).parent().attr("href")) + ".png").css("height", "16px"); $(this).data("triedOnce", true); } else { $(this).unbind("error"); $(this).attr("src", o.fileLarge).attr("style", o.PreviewIconThumbnailStyle); } }); } } $curElem.data("recognized", true); }); } } function bindEventsToViewChanger() { $(".thumbnailViewLink,.treeViewLink").unbind("click"); $(".thumbnailViewLink,.treeViewLink").click( function(evt) { if ($(this).attr("rel") != currentView()) { $(this).parent().find("a").animate({ opacity: 1 }, 0); $(this).animate({ opacity: 0.3 }, 500); changeView($(this).attr("rel"), true); } $(this).blur(); evt.preventDefault(); return false; }); if (!$("#slider").attr("added")) { window.zoomSlider = $("#slider").slider({ min: 0, max: 3, slide: function(event, ui) { zoomInOutView(ui.value); } }); } } bindEventsToViewChanger(); function zoomInOutView(val) { $(".fileBox").removeClass("zoom1").removeClass("zoom2").removeClass("zoom3"); if (val > 0) { $(".fileBox").addClass("zoom" + val); if (val >= 2) { loadIconPreview(2, true); } else { loadIconPreview(1, true); } } } function openNewWindow(path) { window.open(path); } function bindGoToFolderEvents(t, o) { if (currentView() == "Thumbnail") { $(t).find('LI.fileBox').unbind(o.folderEvent); $(t).find('LI.fileBox').bind(o.folderEvent, function() { if ($(this).hasClass("directoryThumb")) { var loc = escape($(this).find("a").attr('rel').match(/.*\//)); if (loc) { // $(this).addClass('wait'); blockFileListingUI(true); setHashLocation(loc); $("div.tipsy").fadeOut("slow").remove(); } } else { download($(this)); } $(this).blur(); return false; }); } else { $(t).find('TD A').unbind(o.folderEvent); $(t).find('TD A').bind(o.folderEvent, function() { if ($(this).parent().hasClass("directory")) { var loc = escape($(this).prev().attr('rel').match(/.*\//)); if (loc) { setHashLocation(loc); } } else { download($(this).closest("td")); } $(this).blur(); return false; }); } } function bindCheckboxEvents() { $("tr.jqueryFileTree").not(".file").find(".chkBox").unbind("click"); $("tr.jqueryFileTree").not(".file").find(".chkBox").click(function() { checkUnCheckDirectory($(this).parent(), $(this).is(":checked")); toggleMainCheckbox($(this).closest("table")); }); } function bindTree(t) { if (currentView() != "Thumbnail") { $(t).find('span.expandButton').bind(o.folderEvent, function() { if ($(this).parent().hasClass('directory')) { if ($(this).parent().hasClass('collapsed')) { // Expand // $(this).parent().find('TR').remove(); // // cleanup showTree($(this).parent(), escape($(this).attr('rel').match(/.*\//))); $(this).parent().removeClass('collapsed').addClass('expanded'); $(this).parent().find("span.expandButton").find("img").attr("src", o.expandedImageURL); } else { // Collapse removeDirectoryFromTree($(this).closest("table").find('TR[rel="' + $(this).attr('rel') + '"]')); $(this).parent().removeClass('expanded').addClass('collapsed'); $(this).parent().find("span.expandButton").find("img").attr("src", o.collapsedImageURL); } } else { h(escape($(this).attr('rel'))); } $(this).blur(); return false; }); bindGoToFolderEvents(t, o); } // Prevent A from triggering the # on non-click events if (o.folderEvent.toLowerCase != 'click') $(t).find('TD A').bind('click', function() { return false; }); $("div.tipsy").remove(); /* Load icon previews for images if available */ loadIconPreview(); /* Enable tooltips */ vtip(); } function removeDirectoryFromTree(trElems) { $(trElems).each(function() { $(this).find("td.directory").each(function() { removeDirectoryFromTree($(this).closest("table").find('TR[rel="' + escape($(this).find('a').attr('rel')) + '"]')); }); $(this).remove(); }); } function hideDirectoryFromTree(trElems, flag) { $(trElems).each(function() { $(this).find("td.directory").each(function() { hideDirectoryFromTree($(this).closest("table").find('TR[rel="' + escape($(this).find('a').attr('rel')) + '"]')); }); if (flag) { $(this).hide(); } else { $(this).show(); } }); } function moveElementOnTreeAfterSorting(trElems) { $(trElems).each(function() { var parentTR = $(this); $(this).closest("table").find("tr[rel='" + $(this).find("a").attr("rel") + "']").each(function() { if ($(this).find("td.directory").length > 0) { $(parentTR).closest("tr").after($(this)); moveElementOnTreeAfterSorting($(this).find("td.directory")); } else { $(parentTR).closest("tr").after($(this)); } }); }); } function handleContextMenuEvents(action, el, pos) { switch (action) { case "rename": performRenameAction(el); break; case "delete": var itemName = $(el).find("a:first").attr("href"); var confirmDelete = confirm("Are you sure you wish to delete " + itemName + "?"); if (confirmDelete) { performDeleteAction(el); return false; } break; case "cut": doCut(el); break; case "copy": doCopy(el); break; case "paste": doPaste(el); break; case "zip": downloadAsZip(el); break; case "download": download(el); break; case "toggle": toggleCheckBoxes(el); break; case "checkall": toggleCheckBoxes(el, 1); break; case "uncheckall": toggleCheckBoxes(el, 0); break; default: break; } } function downloadAsZip(el) { var $curElem = $(el); var fileName = escape($curElem.find("a:first").attr("href")); submitAction({ '#command': "downloadAsZip", '#path': escape($curElem.closest("tr").attr("rel")), '#paths': escape(fileName) }); } function submitAction(opt) { $("#iFrameToSubmit").remove(); var iFrameToSubmit = $("<iframe id=\"iFrameToSubmit\" name=\"iFrameToSubmit\" src=\"javascript:false;\" style=\"display:none;\"></iframe>"); $("body").append(iFrameToSubmit); $("#crushftp_action").remove(); $("body").append('<form id="crushftp_action" style=\"display:none;\" name="crushftp_action" enctype="multipart/form-data" method="post">' + '<input type="text" id="command" name="command" value="">' + '<input type="text" id="path" name="path" value="">' + '<input type="text" id="paths" name="paths" value="">' + '<input type="text" id="random" name="random" value="">' + '</form>'); var formToSubmit = $("#crushftp_action"); formToSubmit.attr("action", o.ajaxCallURL) .attr("target", "iFrameToSubmit"); formToSubmit.find("input").val(""); for (var key in opt) { if (opt.hasOwnProperty(key)) { formToSubmit.find(key).attr("value", opt[key]); } } formToSubmit.submit(); } function download(el) { var $curElem = $(el); var fileName = escape($curElem.find("a:first").attr("href")); submitAction({ '#command': "download", '#path': escape($(el).find("a:first").attr("href")) }); } function performRenameAction(el) { if (currentView() != "Thumbnail") { var $curElem = $(el); var $clone = $(el).clone(true); var renameTemplate = "<div class='renamePanel'><input type='text' class='renameField' /><div class='saveButton'>Save</div> <div class='cancelButton'>Cancel</div></div>"; $curElem.disableContextMenu(); $curElem.html(renameTemplate); $curElem.find(".renameField").val($clone.text())[0].select(); $curElem.find(".renameField")[0].focus(); $curElem.removeAttr("title"); $curElem.find(".cancelButton").click(function() { $curElem.replaceWith($clone); $curElem.enableContextMenu(); }); $curElem.find(".renameField").keyup(function(evt) { var evt = (evt) ? evt : ((event) ? event : null); if (evt.keyCode == 13) { $curElem.find(".saveButton").click(); return false; } else if (evt.keyCode == 27) { $curElem.find(".cancelButton").click(); return false; } }); $curElem.find(".saveButton").click(function() { var newName = $curElem.find(".renameField").val(); var oldName = $clone.find("a").text(); var pathName = $(el).parent().attr("rel"); var obj = { command: "rename", path: pathName, name1: escape(oldName), name2: escape(newName), random: Math.random() }; $.ajaxSetup({ scriptCharset: "utf-8", contentType: "application/x-www-form-urlencoded; charset=UTF-8" }); $curElem.addClass("wait"); $.ajax({ type: "POST", url: o.ajaxCallURL, data: obj, success: function(response) { var responseText = getActionResponseText(LoadXMLString(response)); var loadPreview = false; if (responseText.length > 0) { $.growlUI("Problem while renaming", "There was a problem while renaming. Error : " + responseText, 2000, "growlError"); } else { if ($curElem.hasClass("directory")) { var link = $clone.find("a"); link.text(newName).attr("href", link.attr("rel") + newName); $curElem.replaceWith($clone); } else if ($curElem.hasClass("file") || $curElem.hasClass("fileTR")) { var FileExtension = getFileExtension($clone.find("a").text()); var link = $clone.find("a").text(newName); var oldHREF = link.attr("href"); link.attr("href", $curElem.closest("tr").attr("rel") + newName); FileExtension = getFileExtension(newName); $clone.removeAttr("title"); $curElem.replaceWith($clone); loadPreview = true; } $curElem.enableContextMenu(); $($clone).closest("TR").animate({ "background-color": "#FFFFCC" }, 500, function() { $($clone).closest("TR").animate({ "background-color": "#FFFFFF" }, 500, function() { if (loadPreview) { loadIconPreview( 1, true, $($clone)); } }); }); } }, complete: function() { $curElem.removeClass("wait"); }, error: function() { $.growlUI("Problem while renaming", "There was a problem while renaming. Please retry", 2000, "growlError"); } }); }); } else { if ($("#thumbRenamePanel").length == 0) { var renameTemplate = "<div class='renamePanel'><h2>Rename</h2><input type='text' class='renameField' /><div class='saveButton'>Save</div> <div class='cancelButton'>Cancel</div></div>"; $("body").append("<div id='thumbRenamePanel'>" + renameTemplate + "</div>"); $("#thumbRenamePanel").hide(); } var $renameBox = $('#thumbRenamePanel'); var toTop = (window.screen.availHeight / 2) - ($renameBox.height() * 2); $.blockUI({ message: $renameBox, css: { border: 'none', padding: '10px 10px 20px 30px', backgroundColor: '#fff', '-webkit-border-radius': '10px', '-moz-border-radius': '10px', color: '#000', opacity: 0.9, top: toTop + 'px', left: '40%', width: '305px' } }); $renameBox.find(".renameField").val($(el).find("div.imgTitle").find("a").text()).focus(); $renameBox.find(".cancelButton").unbind().click( function() { $.unblockUI(); $("#thumbRenamePanel").remove(); $renameBox.find("input").removeClass("wait"); }); $renameBox.find(".renameField").unbind().keyup( function(evt) { var evt = (evt) ? evt : ((event) ? event : null); if (evt.keyCode == 13) { $renameBox.find(".saveButton").click(); return false; } else if (evt.keyCode == 27) { $renameBox.find(".cancelButton").click(); return false; } }); $renameBox.find(".saveButton").unbind().click( function() { var newName = $renameBox.find(".renameField").val(); var oldName = $(el).find("div.imgTitle").find("a").text(); var pathName = $(el).find("div.imgTitle").find("a").attr("rel"); var obj = { command: "rename", path: pathName, name1: oldName, name2: newName, random: Math.random() }; $.ajaxSetup({ scriptCharset: "utf-8", contentType: "application/x-www-form-urlencoded; charset=UTF-8" }); $renameBox.find("input").addClass("wait"); $.ajax({ type: "POST", url: o.ajaxCallURL, data: obj, success: function(response) { var responseText = getActionResponseText(LoadXMLString(response)); if (responseText.length > 0) { $.growlUI("Problem while renaming", "There was a problem while renaming. Error : " + responseText, 2000, "growlError"); } else { var link = $(el).find("div.imgTitle").find("a"); link.text(newName).attr("href", link.attr("rel") + newName); setTitleText(link); link = $(el).find("a.imgLink"); link.attr("href", link.attr("rel") + newName); $renameBox.find(".cancelButton").click(); $(el).removeAttr("title"); $(el).find(".vtip").removeAttr("title"); $($(el)).animate({ "background-color": "#FFFFCC" }, 500, function() { $($(el)).animate({ "background-color": "#FFFFFF" }, 500, function() { loadIconPreview(1, true, $(el)); }); }); } }, complete: function() { $renameBox.find("input").removeClass("wait"); }, error: function() { $.growlUI("Problem while renaming", "There was a problem while renaming. Please retry.", 2000, "growlError"); } }); }); } } function getActionResponseText(msg) { var responseText = ''; try { var msgs = msg.getElementsByTagName("commandResult"); for (var x = 0; x < msgs.length; x++) { responseText += IE(msgs[x].getElementsByTagName("response")[0]).textContent; } } catch (ex) { } return responseText; } function LoadXMLString(xmlString) { if (xmlString) { var xDoc; try { if (window.DOMParser) { var dp = new DOMParser(); xDoc = dp.parseFromString(xmlString, "text/xml"); } else if (ActiveXObject) { xDoc = new ActiveXObject("Microsoft.XMLDOM"); xDoc.async = "false"; xDoc.loadXML(xmlString); } } catch (ex) { } return xDoc; } else return null; } function bindBackToTop() { $(".backToTop").click(function() { $('html,body').animate({ scrollTop: 0 }, 500, false); }); } function bindMenuButtons() { /* Data to POST to receive file listing */ var obj = { command: "getButtons", random: Math.random() }; /* Basic POST setup */ $.ajaxSetup({ scriptCharset: "utf-8", contentType: "application/x-www-form-urlencoded; charset=UTF-8" }); /* Make a call and receive list */ $.ajax({ type: "POST", url: o.ajaxCallURL, data: obj, success: function(msg) { var responseText = LoadXMLString(msg); var rows = msg.getElementsByTagName("item"); var menuList = []; for (var x = 0; x < rows.length; x++) { var opt = {}; opt["name"] = $(rows[x]).attr("name"); opt["text"] = IE(rows[x]).textContent; menuList.push(opt); } var mainMenu = $(".mainNavigation").find("ul"); mainMenu.empty(); for (var i = 0; i < menuList.length; i++) { var text = menuList[i].name.toString(); text = text.substring(text.indexOf(":") + 1, text.length); mainMenu.append("<li><a href=\"" + menuList[i].text + "\">" + text + "</a></li>"); } highlightPasteButton(); } }); } function bindMainMenuEvents() { window.showPopup = function(elem) { elem = $("#" + elem); if (elem.length > 0) { if (elem.attr("id") == "searchDiv") { $.blockUI({ message: elem, css: { border: 'none', width: '600px', padding: '15px', 'margin-left': '-300px', left: '50%', position: 'fixed', top: '27%', '-webkit-border-radius': '10px', '-moz-border-radius': '10px', opacity: 1 } }); } else { $.blockUI({ message: elem, css: { border: 'none', width: '300px', padding: '15px', 'margin-left': '-150px', left: '50%', position: 'fixed', top: '35%', '-webkit-border-radius': '10px', '-moz-border-radius': '10px', opacity: 1 } }); } try { $(".blockUI ").find("input[type='text']")[0].focus(); $(".blockUI ").find("input[type='text']")[0].select(); } catch (ex) { } } } window.hideItemsStartingWithDot = function(flag) { var options = { path: '/', expires: 365 }; $.cookie(o.CookieHideItemStartingWithDot, flag, options); refreshView(); } window.doLogout = function(elem) { submitAction({ '#command': "logout" }); location = "/WebInterface/login.html" } window.startSearch = function() { $("#searchDiv").block({ message: 'Processing.. <a id="cancelAjax" href="#" style="color:#FFF;font-size:10px;">Cancel</a>', css: { border: 'none', padding: '15px', backgroundColor: '#000', '-webkit-border-radius': '10px', '-moz-border-radius': '10px', color: '#fff', top: '40%' } }); $.ajaxSetup({ scriptCharset: "utf-8", contentType: "application/x-www-form-urlencoded; charset=UTF-8" }); var destinationPath = escape(hashListener.getHash().toString().replace("#", "")); destinationPath = destinationPath || "/"; var $_Request = $.ajax({ type: "POST", url: o.ajaxCallURL, data: "path=" + destinationPath + "&" + $("#searchForm").serialize().toString().replace(/=on/g, '=true'), success: function(response) { $(document).data("searchData", response); $("#searchDiv").unblock(); if (currentView() == "Thumbnail") { renderListing($("#filesContainerDiv"), "", false, false, response, true); } else { renderListing($("#filesContainer"), "", false, false, response, true); } $.unblockUI(); } }); $("#cancelAjax").unbind().click( function() { $("#searchDiv").unblock(); $_Request.abort(); return false; }); return false; } window.getUploadForm = function() { $.ajaxSetup({ scriptCharset: "utf-8", contentType: "application/x-www-form-urlencoded; charset=UTF-8" }); var $_Request = $.ajax({ type: "POST", url: o.ajaxCallURL, data: "command=getUploadForm", success: function(response) { console.log(response); } }); return false; } window.doCut = function(elem) { window.doCopy(elem, true); } var browserTemplate = '<div class="uploadFormPanel" id="uploadDiv##">' + '<form id="uploadForm##" action="/WebInterface/function/" enctype="multipart/form-data" method="post" target="iframeUploadSingle##">' + '<input id="uploadPath##" type="hidden" name="uploadPath" value="#DEST_PATH#" />' + '<input id="theName##" type="hidden" name="the_action" value="STOR" />' + '<input id="file_##_SINGLE_FILE_POST" type="file" name="file_##_SINGLE_FILE_POST" />' + '</form>' + '<iframe name="iframeUploadSingle##" id="iframeUploadSingle##" src="javascript:false;" style="display: none">' + '</iframe>' + '</div>'; function showHideUploadBtn() { if (!$("#chkAutoUpload").is(":checked")) { var uploadPopup = $("div#browserFileUpload"); var forms = uploadPopup.find("form[rel!='processed']"); if (forms.length > 0) { $("div#browserFileUpload").find("#submitAction").show(); } else { $("div#browserFileUpload").find("#submitAction").hide(); } } } function performAutoUpload() { if ($("#chkAutoUpload").is(":checked")) { startUploading(true); $("div#browserFileUpload").find("#submitAction").fadeOut(1000); } else { $("div#browserFileUpload").find("#submitAction").fadeIn(1000); return; } } function startUploading(auto) { var uploadPopup = $("div#browserFileUpload"); var forms = uploadPopup.find("form[rel!='processed']"); if (forms.length > 0) { $(forms).each(function() { var filelist = uploadPopup.find("li[rel='" + $(this).attr("id") + "']"); if (filelist) { filelist.find(".uploadCancel,.progressBar").remove(); filelist.find("span") .replaceWith("<div class='progressBar'></div><span class='waiting'>[Waiting..]</span>"); filelist.find("span").after("<a href='javascript:void(0);' class='uploadCancel'>Cancel</a>").show(); var $form = $(this); var progressBar = filelist.find("div.progressBar"); filelist.find(".uploadCancel").click(function() { $form.attr("rel", "processed"); filelist.find(".waiting").remove(); reportFileCompleted(progressBar, filelist.find("label").text(), function() { }, true, true); }); } }); if (auto) { if (!$(document).data("filesInProgress")) { $(document).data("filesInProgress", 0); } var filesInProgress = $(document).data("filesInProgress"); var remainedFiles = o.MaxSimultaneousUploadAllowed - filesInProgress; if (remainedFiles > 0) { for (var i = 0; i < remainedFiles; i++) { submitForm(uploadPopup, forms, i, auto); } } } else { submitForm(uploadPopup, forms, 0); } } } function submitForm(uploadPopup, forms, i, auto) { if (forms.length > i) { var filelist = uploadPopup.find("li[rel='" + $(forms[i]).attr("id") + "']"); if (filelist.length > 0) { filelist.find(".uploadCancel,.progressBar").remove(); filelist.find("span").replaceWith("<div class='progressBar'></div>"); var progressBar = filelist.find("div.progressBar"); var $form = $(forms[i]); var destinationPath = $form.find("input[name='uploadPath']").val(); progressBar.progressbar({ value: 0 }).after("<a href='javascript:void(0);' class='uploadCancel'>Cancel</a>"); progressBar.after("<div class='uploadPath'>Uploading to : " + decodeURIComponent(unescape(destinationPath)) + "</div>"); filelist.find(".uploadCancel").unbind().click(function() { $("#" + $form.attr("target")).attr("src", "javascript:false;"); reportFileCompleted(progressBar, filelist.find("label").text(), function() { }, true); }); $form.submit(); $form.attr("rel", "processed"); if (!$(document).data("filesInProgress")) { $(document).data("filesInProgress", 0); } var filesInProgress = $(document).data("filesInProgress"); $(document).data("filesInProgress", filesInProgress + 1); $("#browserFileUpload").find("h2").addClass("spinner"); setTimeout(function() { if (auto) { checkProgress(filelist.find("label").text(), $form, filelist.find("div.progressBar"), function() { startUploading(true); }); } else { checkProgress(filelist.find("label").text(), $form, filelist.find("div.progressBar"), function() { submitForm(uploadPopup, forms, i + 1); }); } }, 500); } else { submitForm(uploadPopup, forms, i + 1); } } else { /*if (!auto) { uploadPopup.find(".closeButton").show(); $.unblockUI(); $.growlUI("Upload", "File upload completed", 1000, undefined, function() { $(".refreshButton").click(); }); }*/ return false; } } function checkProgress(fileName, elem, progressBar, callback) { $.ajaxSetup({ scriptCharset: "utf-8", contentType: "application/x-www-form-urlencoded; charset=UTF-8" }); $.ajax({ type: "POST", url: o.ajaxCallURL, data: "command=getUploadStatus&itemName=" + encodeURIComponent(fileName), success: function(response) { var now = new Date().getTime(); var responseData = response; if (responseData == null) responseData = ""; responseData = getActionResponseText(LoadXMLString(responseData)); if (responseData.indexOf("PROGRESS:") >= 0) { part1 = responseData.substring("PROGRESS:".length, responseData.indexOf("/")); part2 = responseData.substring(responseData.indexOf("/") + 1, responseData.indexOf(";")); part1 = part1 * 1; part2 = part2 * 1; xmlhttp = null; var lastTime = $(progressBar).data("lastTime") || 0; var lastBytes = $(progressBar).data("lastBytes") || 0; //calculate speeds if (lastTime != 0) { var elapsed = now - lastTime; var bytes = part1 - lastBytes var speed = (bytes / elapsed) + ""; speed = speed.substring(0, speed.indexOf(".") + 2); var kbps = Math.round(speed / 1024 * 100000) / 100000; var remaining = ""; var secs = ((((part2 - part1) / (bytes / elapsed)) / 1000) + 1) + ""; remaining = formatTime(secs); var percentDone = (part1 / part2) * 100.0; $(progressBar).parent().find(".time,.speed").remove(); $(progressBar).after("<div class='time'> Time Remaining : " + remaining + "</div>"); $(progressBar).after("<div class='speed'> Speed : " + kbps + "(KB/s)</div>"); $(progressBar).progressbar("option", "value", percentDone); } lastTime = now; lastBytes = part1; $(progressBar).data("lastTime", lastTime); $(progressBar).data("lastBytes", lastBytes); if (part1 < part2) setTimeout(function() { checkProgress(fileName, elem, progressBar, callback); }, 1000); else { reportFileCompleted(progressBar, fileName, callback); } } else if (responseData.indexOf("DONE:") >= 0) { reportFileCompleted(progressBar, fileName, callback); } /* else if (responseData.length== 0) { $(progressBar).parent().find(".time,.speed").remove(); progressBar.replaceWith("[<span class='error'>Problem while uploading</span>]"); callback(); }*/ else { setTimeout(function() { checkProgress(fileName, elem, progressBar, callback); }, 1000); } }, complete: function(responseData) { }, error: function() { setTimeout(function() { checkProgress(fileName, elem, progressBar, callback); }, 1000); } }); } function reportFileCompleted(progressBar, fileName, callback, cancelled, wasInWaiting) { var wasNotInWaiting = (!wasInWaiting); if (!$(document).data("filesInProgress")) { $(document).data("filesInProgress", 0); } var filesInProgress = $(document).data("filesInProgress"); if (filesInProgress > 0 && wasNotInWaiting) { $(document).data("filesInProgress", filesInProgress - 1); } if (filesInProgress == 1) { $("#browserFileUpload").find("h2").removeClass("spinner"); $(".refreshButton").click(); } var parentElm = $(progressBar).parent(); parentElm.find(".uploadPath").each(function() { if (cancelled) { $(this).text($(this).text().replace(/Uploading/g, "Cancelled uploading")); } else { $(this).text($(this).text().replace(/Uploading/g, "Uploaded")); } }); parentElm.find(".uploadCancel").remove(); if (cancelled) { $(progressBar).replaceWith("[Cancelled] <a class='uploadCancel' href='javascript:void(0);'>Dismiss</a>"); } else { $(progressBar).replaceWith("[Done] <a class='uploadCancel' href='javascript:void(0);'>Dismiss</a>"); } parentElm.find(".uploadCancel").click(function() { $(this).closest("li").remove(); showHideUploadBtn(); }); parentElm.find(".time,.speed").remove(); callback(); showHideUploadBtn(); performAutoUpload(); } function formatTime(secs) { var remaining = ""; secs = secs.substring(0, secs.indexOf(".")) * 1; var mins = (secs / 60) + ""; mins = mins.substring(0, mins.indexOf(".")) * 1; if (mins > 0) { secs -= (mins * 60); remaining = mins + " min, " + secs + " secs"; } else { if (secs < 0) { remaining = "calculating"; } else { remaining = secs + " secs"; } } return remaining; } window.onbeforeunload = confirmExit; window.browserUploader = function() { var $elem = $("div#browserFileUpload"); if (!$elem.find("#FileUploadSummary").is(":hidden")) { $elem.find(".toggleView").attr("src", "/WebInterface/jQuery/images/collapsed_r.png") } else { $elem.find(".toggleView").attr("src", "/WebInterface/jQuery/images/expanded.png") } $elem.find(".toggleView").unbind().click(function() { if ($("#FileUploadSummary").is(":hidden")) { $("#FileUploadSummary").slideDown(500); $elem.find(".toggleView").attr("src", "/WebInterface/jQuery/images/expanded.png"); } else { $("#FileUploadSummary").slideUp(500); $elem.find(".toggleView").attr("src", "/WebInterface/jQuery/images/collapsed_r.png"); } }); if (!$("#lblAutoUpload").data("tipUpdated")) { $("#lblAutoUpload").attr("title", $("#lblAutoUpload").attr("title").replace(/###/g, o.MaxSimultaneousUploadAllowed)); $("#lblAutoUpload").data("tipUpdated", true); $("#chkAutoUpload").unbind().click(function() { performAutoUpload(); }); } $("div#browserFileUpload").find("#submitAction").unbind().click(function(){ startUploading(); return false; }); var htmlForm = browserTemplate.replace(/##/g, "1"); var destinationPath = escape(hashListener.getHash().toString().replace("#", "")); destinationPath = destinationPath || "/"; var htmlForm = htmlForm.replace(/#DEST_PATH#/g, destinationPath); $elem.find("ul.filesSelected").html(""); $elem.find("div#uploadPanel").html("").append(htmlForm).find("input[type='file']").unbind().change(function() { performFileSelect($(this)); }); $.blockUI({ message: $elem, showOverlay: false, centerY: false, css: { border: 'none', width: '320px', padding: '15px', color: '#fff', 'border': '1px solid #fff', backgroundColor: '#000', 'margin-left': '-370px', left: '100%', position: 'fixed', top: '5px', '-webkit-border-radius': '10px', '-moz-border-radius': '10px', opacity: 0.8 } }); showHideUploadBtn(); } function confirmExit() { if (!$(document).data("filesInProgress")) { $(document).data("filesInProgress", 0); } var filesInProgress = $(document).data("filesInProgress"); if (filesInProgress > 0) { if (filesInProgress > 1) return "Your " + filesInProgress + " files are currently uploading. If you navigate away from this page you will lose them. Are you sure you want to exit this page?"; else return filesInProgress + " file is currently uploading. If you navigate away from this page you will lose it. Are you sure you want to exit this page?"; } } function performFileSelect(obj) { var parentElem = $(obj).closest("div"); var nextCount = $("div#browserFileUpload").find("div.uploadFormPanel").length + 1; var htmlForm = browserTemplate.replace(/##/g, nextCount); var destinationPath = escape(hashListener.getHash().toString().replace("#", "")); destinationPath = destinationPath || "/"; var htmlForm = htmlForm.replace(/#DEST_PATH#/g, destinationPath); parentElem.after(htmlForm); $("#uploadDiv" + nextCount).find("input[type='file']").unbind().change(function() { performFileSelect($(this)); }); parentElem.hide(); var v = $(obj).val(); v = v.match(/[^\/\\]+$/gi); if (v != '') { if(checkFileAvailalble(v.toString())) { $("ul.filesSelected").prepend('<li rel="' + parentElem.find("form").attr("id") + '"><label>' + v + '</label> <span><span> | File exist : <a class="errorOverwrite" href="javascript:void(0);">Overwrite?</a></span> [<a class="error" href="javascript:void(0);">Remove</a>]</span></li>').find("a.error").unbind().click(function() { $(this).parent().parent().remove(); parentElem.hide(); showHideUploadBtn(); return true; }); $("#"+parentElem.find("form").attr("id")).attr("rel", "processed"); $("ul.filesSelected").find(".errorOverwrite").unbind().click(function(){ $("#"+$(this).closest("li").attr("rel")).removeAttr("rel"); $(this).parent().replaceWith("<span class='popupNote'>Will be overwritten</span>"); performAutoUpload(); }); } else { $("ul.filesSelected").prepend('<li rel="' + parentElem.find("form").attr("id") + '"><label>' + v + '</label> <span>[<a class="error" href="javascript:void(0);">Remove</a>]</span></li>').find("a.error").unbind().click(function() { $(this).parent().parent().remove(); parentElem.hide(); showHideUploadBtn(); return true; }); } } showHideUploadBtn(); performAutoUpload(); }; function checkFileAvailalble(name, isFolder) { name = name.toLowerCase(); var fileData = $(document).data("filesList"); for(var file in fileData) { if(isFolder) { if(fileData[file][0] =="DIR" && fileData[file][1].toLowerCase() == name) return true; } else { if(fileData[file][0]=="FILE" && fileData[file][1].toLowerCase()==name) return true; } } return false; } window.doPaste = function(elem) { var action = "Paste"; var destinationPath = undefined; if (elem) { if (currentView() != "Thumbnail") { destinationPath = escape($(elem).find("a:first").attr("rel")); } else { destinationPath = $(elem).find("a:first").attr("rel"); } } else { destinationPath = escape(hashListener.getHash().toString().replace("#", "")); destinationPath = destinationPath || "/"; } if (destinationPath) { var copiedItems = $(document).data(o.CookieCopiedFiles); if (copiedItems) { var items = copiedItems.split("\r\n"); var curAction = items[0].toLowerCase(); action = items[0].toLowerCase() + "_paste"; var fileNames = ""; for (var i = 1; i < items.length; i++) { if (fileNames.length > 0) { fileNames += "\r\n"; } fileNames += escape(items[i]); } var obj = { command: action, names: fileNames, destPath: destinationPath, random: Math.random() }; $.ajaxSetup({ scriptCharset: "utf-8", contentType: "application/x-www-form-urlencoded; charset=UTF-8" }); if (currentView() != "Thumbnail") { $("#filesListing").find("table").addClass("wait"); } else { $("#filesListing").find("ul").addClass("wait"); } $.ajax({ type: "POST", url: o.ajaxCallURL, data: obj, success: function(response) { var responseText = getActionResponseText(LoadXMLString(response)); if (responseText.length > 0) { if (responseText.toString().toLowerCase() == "ok") { if (curAction == "cut") { $(document).removeData(o.CookieCopiedFiles); } highlightPasteButton(); $(".refreshButton").click(); } else { $.growlUI("Problem while pasting","There was a problem while pasting. Error : " + responseText, 2000, "growlError"); } } else { if (curAction == "cut") { $(document).removeData(o.CookieCopiedFiles); } highlightPasteButton(); $(".refreshButton").click(); } if (currentView() != "Thumbnail") { $("#filesListing").find("table").removeClass("wait"); } else { $("#filesListing").find("ul").removeClass("wait"); } }, error: function() { $.growlUI("Problem while pasting","There was a problem while pasting file(s). Please retry", 2000, "growlError"); if (currentView() != "Thumbnail") { $("#filesListing").find("table").removeClass("wait"); } else { $("#filesListing").find("ul").removeClass("wait"); } } }); } else { $.growlUI(action, "There is nothing to paste", 2000, "growlError"); } } } window.zip_items = function(elem) { var action = "Zip"; if (!elem) { if (currentView() == "Thumbnail") { $.growlUI(action, "Not yet supported in thumbnail view", 2000, "growlError"); } else { var checkedFiles = $("#filesListing").find("input.chkBox:visible:checked"); if (checkedFiles.length == 0) { $.growlUI("Nothing Selected",o.ZipNoFilesSelectedMessage, 2000, "growlError"); return; } var stringToCopy = ""; checkedFiles.each(function() { var parentElem = $(this).closest("tr"); var filePath = parentElem.find("a").attr("href"); filePath = filePath.replace("//", "/"); stringToCopy += ":" + filePath; }); submitAction({ '#command': "downloadAsZip", '#path': escape("/"), '#paths': escape(stringToCopy) }); } } } window.delete_items = function(elem) { var action = "delete"; if (!elem) { if (currentView() == "Thumbnail") { $.growlUI(action, "Not yet supported in thumbnail view", 2000, "growlError"); } else { var checkedFiles = $("#filesListing").find("input.chkBox:visible:checked"); if (checkedFiles.length == 0) { $.growlUI("Nothing Selected",o.DeleteNoFilesSelectedMessage, 2000, "growlError"); return; } var stringToCopy = ""; var filesCopied = 0; var directoriesCopied = 0; checkedFiles.each(function() { var parentElem = $(this).closest("tr"); var filePath = parentElem.find("a").attr("href"); filePath = filePath.replace("//", "/"); if (stringToCopy.length > 0) { stringToCopy += "\r\n"; } stringToCopy += filePath; if (parentElem.find(".directory").length > 0) { directoriesCopied += 1; } else { filesCopied += 1; } }); var msgToShow = ""; if (filesCopied > 0 && directoriesCopied > 0) { msgToShow = "Total " + directoriesCopied + " folder(s) and " + filesCopied + " file(s) will be deleted.\r\nItems:" + stringToCopy; } else if (filesCopied > 0) { msgToShow = "Total " + filesCopied + " file(s) will be deleted.\r\nItems:" + stringToCopy; } else { msgToShow = "Total " + directoriesCopied + " folder(s) will be deleted.\r\nItems:" + stringToCopy; } if (confirm(msgToShow + "\n" + "Once deleted it can not revert back")) { var fileName = stringToCopy; var obj = { command: "delete", names: escape(fileName), random: Math.random() }; $.ajaxSetup({ scriptCharset: "utf-8", contentType: "application/x-www-form-urlencoded; charset=UTF-8" }); //$("#filesListing").addClass("wait"); $.ajax({ type: "POST", url: o.ajaxCallURL, data: obj, success: function(response) { var responseText = getActionResponseText(LoadXMLString(response)); //$("#filesListing").removeClass("wait"); if (responseText.length > 0) { $.growlUI("Problem while deleting","There was a problem while deleting. Error : " + responseText, 2000, "growlError"); } else { $(".refreshButton").click(); } }, error: function() { $.growlUI("Problem while deleting","There was a problem while deleting. Please retry",2000, "growlError"); } }); } } } } window.makedir = function(fileName) { fileName = fileName || $("#txtNewFolder").val(); if (fileName.toString().length == 0) { return; } else { fileName = escape(fileName); } var filePath = hashListener.getHash().toString().replace("#", ""); if (filePath.length == 0) { filePath = "/"; } var obj = { command: "makedir", path: filePath + fileName + "/", random: Math.random() }; $.ajaxSetup({ scriptCharset: "utf-8", contentType: "application/x-www-form-urlencoded; charset=UTF-8" }); $.ajax({ type: "POST", url: o.ajaxCallURL, data: obj, success: function(response) { var responseText = getActionResponseText(LoadXMLString(response)); if (responseText.length > 0) { if (responseText.toString().toLowerCase() == "ok") { $(".refreshButton").click(); } else { $.growlUI("Problem while creating new folder","There was a problem while creating new folder. Error : " + responseText, 2000, "growlError"); } } else { $.unblockUI(); $(".refreshButton").click(); } }, error: function() { $.growlUI("Problem while creating new folder","There was a problem while trying to create new folder. Please retry", 2000, "growlError"); } }); } window.doCopy = function(elem, flag) { var action = "Copy"; if (flag) action = "Cut"; if (!elem) { if (currentView() == "Thumbnail") { $.growlUI(action, "Not yet supported in thumbnail view", 2000, "growlError"); } else { var checkedFiles = $("#filesListing").find("input.chkBox:visible:checked"); if (checkedFiles.length == 0) { if (flag) { $.growlUI("Nothing selected",o.CutNoFilesSelectedMessage, 2000, "growlError"); } else { $.growlUI("Nothing selected",o.CopyNoFilesSelectedMessage, 2000, "growlError"); } return; } var stringToCopy = action.toLowerCase(); var filesCopied = 0; var directoriesCopied = 0; checkedFiles.each(function() { var parentElem = $(this).closest("tr"); var filePath = parentElem.find("a").attr("href"); filePath = filePath.replace("//", "/"); stringToCopy += "\r\n" + filePath; if (parentElem.find(".directory").length > 0) { directoriesCopied += 1; } else { filesCopied += 1; } }); var options = { path: '/', expires: 365 }; $(document).data(o.CookieCopiedFiles, stringToCopy); var msgToShow = ""; if (filesCopied > 0 && directoriesCopied > 0) { if (flag) msgToShow = "Total " + directoriesCopied + " folder(s) and " + filesCopied + " file(s) cut"; else msgToShow = "Total " + directoriesCopied + " folder(s) and " + filesCopied + " file(s) copied"; } else if (filesCopied > 0) { if (flag) msgToShow = "Total " + filesCopied + " file(s) cut"; else msgToShow = "Total " + filesCopied + " file(s) copied"; } else { if (flag) msgToShow = "Total " + directoriesCopied + " folder(s) cut"; else msgToShow = "Total " + directoriesCopied + " folder(s) copied"; } $.growlUI(action, msgToShow); highlightPasteButton(); } } else { if (currentView() == "Thumbnail") { var stringToCopy = action.toLowerCase(); var filesCopied = 0; var directoriesCopied = 0; var parentElem = $(elem); var filePath = parentElem.find("a").attr("href"); filePath = filePath.replace("//", "/"); stringToCopy += "\r\n" + filePath; var options = { path: '/', expires: 365 }; $(document).data(o.CookieCopiedFiles, stringToCopy); var msgToShow = ""; if (flag) msgToShow = "\"" + parentElem.find("a").text() + "\" cut"; else msgToShow = "\"" + parentElem.find("a").text() + "\" copied"; $.growlUI(action, msgToShow); highlightPasteButton(); } else { var stringToCopy = action.toLowerCase(); var filesCopied = 0; var directoriesCopied = 0; var parentElem = $(elem); var filePath = parentElem.find("a").attr("href"); filePath = filePath.replace("//", "/"); stringToCopy += "\r\n" + filePath; var options = { path: '/', expires: 365 }; $(document).data(o.CookieCopiedFiles, stringToCopy); var msgToShow = ""; if (flag) msgToShow = "\"" + parentElem.find("a").text() + "\" cut"; else msgToShow = "\"" + parentElem.find("a").text() + "\" copied"; $.growlUI(action, msgToShow); highlightPasteButton(); } } } } function highlightPasteButton() { if (($(document).data(o.CookieCopiedFiles) && $(document).data(o.CookieCopiedFiles).length > 0)) { $("div.mainNavigation").find("a:contains('Paste')").addClass("starredMenu"); } else { $("div.mainNavigation").find("a:contains('Paste')").removeClass("starredMenu"); } } function loadPopupContent() { /* Data to POST to receive file listing */ var obj = { random: Math.random() }; /* Basic POST setup */ $.ajaxSetup({ scriptCharset: "utf-8", contentType: "application/x-www-form-urlencoded; charset=UTF-8" }); /* Make a call and receive list */ $.ajax({ type: "GET", url: o.FilePath + "_popups.htm", data: obj, success: function(msg) { $("body").append("<div id='popupContent'></div>"); $("#popupContent").append(msg); $("#popupContent").find("input#txtNewFolder").keyup(function(evt) { var evt = (evt) ? evt : ((event) ? event : null); if (evt.keyCode == 13) { makedir(); return false; } else if (evt.keyCode == 27) { $.unblockUI(); return false; } }); } }); } function performDeleteAction(el) { if (currentView() == "Thumbnail") { var $curElem = $(el); var fileName = escape($curElem.find("a:first").attr("href")); var obj = { command: "delete", names: escape(fileName), random: Math.random() }; $.ajaxSetup({ scriptCharset: "utf-8", contentType: "application/x-www-form-urlencoded; charset=UTF-8" }); $curElem.addClass("wait"); $.ajax({ type: "POST", url: o.ajaxCallURL, data: obj, success: function(response) { var responseText = getActionResponseText(LoadXMLString(response)); if (responseText.length > 0) { $.growlUI("Problem while deleting","There was a problem while deleting. Error : " + responseText, 2000, "growlError"); } else { $curElem.remove(); } }, complete: function() { $curElem.removeClass("wait"); }, error: function() { $.growlUI("Problem while deleting","There was a problem while trying to delete this file. Please retry", 2000, "growlError"); } }); } else { var $curElem = $(el); var fileName = escape($curElem.find("a").attr("href")); var obj = { command: "delete", names: escape(fileName), random: Math.random() }; $.ajaxSetup({ scriptCharset: "utf-8", contentType: "application/x-www-form-urlencoded; charset=UTF-8" }); $curElem.addClass("wait"); $.ajax({ type: "POST", url: o.ajaxCallURL, data: obj, success: function(response) { var responseText = getActionResponseText(LoadXMLString(response)); if (responseText.length > 0) { $.growlUI("Problem while deleting","There was a problem while deleting. Error : " + responseText, 2000, "growlError"); } else { if ($curElem.hasClass("directory")) { removeDirectoryFromTree($curElem.closest("tr")); } else if ($curElem.hasClass("file") || $curElem.hasClass("fileTR")) { $curElem.closest("tr").remove(); } } }, complete: function() { $curElem.removeClass("wait"); }, error: function() { $.growlUI("Problem while deleting","There was a problem while trying to delete this file. Please retry", 2000, "growlError"); } }); } } function blockFileListingUI(flag) { if (flag) { /* o.FileListingElement.block({ message: 'Processing..', css: { border: 'none', padding: '15px', backgroundColor: '#000', '-webkit-border-radius': '10px', '-moz-border-radius': '10px', color: '#fff' } });*/ $(".mainProcessIndicator").show(); } else { //o.FileListingElement.unblock(); $(".mainProcessIndicator").fadeOut(500); } } function toggleCheckBoxes(el, val) { if (val == 1) { var chkBox = $(el); chkBox.attr("checked", "checked"); toggleCheckBoxesAll($(el).closest("table"), chkBox.is(":checked")); toggleMainCheckbox(chkBox.closest("table")); } else if (val == 0) { var chkBox = $(el); chkBox.removeAttr("checked"); toggleCheckBoxesAll($(el).closest("table"), chkBox.is(":checked")); toggleMainCheckbox(chkBox.closest("table")); } else { var chkBox = $(el); chkBox.removeAttr("checked"); toggleCheckBoxesAll($(el).closest("table"), chkBox.is(":checked"), true); toggleMainCheckbox(chkBox.closest("table")); } } function toggleCheckBoxesAll(elem, status, toggle) { checkUnCheckDirectory( $(elem).find("TR.jqueryFileTree"), status, true, toggle); } function toggleMainCheckbox(elem, status) { status = status || isChecked(elem); if (status) { $(elem).find("input.chkBoxAll").attr("checked", "checked"); } else { $(elem).find("input.chkBoxAll").removeAttr("checked"); } function isChecked(elem) { var allChecked = true; $(elem).find("TR.jqueryFileTree").each(function() { if (!$(this).find("input.chkBox:visible").is(":checked")) allChecked = false; }); return allChecked; } } function checkUnCheckDirectory(trElems, check, rootDir, toggle) { $(trElems).each(function() { if (rootDir) { $(this).find("td.directory").each(function() { checkUnCheckDirectory( $(this).closest("table").find('TR[rel="' + $(this).find('a').attr('rel') + '"]').find(".chkBox:visible").parent(), check, undefined, toggle); }); } else { $(this).parent().find("td.directory").each( function() { checkUnCheckDirectory( $(this).closest("table").find('TR[rel="' + $(this).find('a').attr('rel') + '"]').find(".chkBox:visible").parent(), check, undefined, toggle); }); } if (toggle) { var checkedElems = $(this).find(".chkBox:visible:checked"); var unCheckedElems = $(this).find(".chkBox:visible").not(":checked"); checkedElems.removeAttr("checked"); unCheckedElems.attr("checked", "checked"); } else { if (check) { $(this).find(".chkBox:visible").attr("checked", "checked"); } else { $(this).find(".chkBox:visible").removeAttr("checked"); } } }); } function currentView() { return $("body").data("currentView"); } function changeView(type, refresh) { $("body").data("currentView", type); var options = { path: '/', expires: 10 }; $.cookie(o.ViewCookieName, type, options); if (type == "Thumbnail") { $("#filesContainer").hide(); $("#filesContainerDiv").show(); $("#slider").show(); } else { $("#filesContainerDiv").hide(); $("#filesContainer").show(); $("#slider").hide(); } if (refresh) { blockFileListingUI(true); if ($(document).data("searchData")) { if (currentView() == "Thumbnail") { renderListing($("#filesContainerDiv"), "", false, false, $(document).data("searchData"), true); } else { renderListing($("#filesContainer"), "", false, false, $(document).data("searchData"), true); } } else { if (type == "Thumbnail") { showTree($("#filesContainerDiv"), "", true, true); } else { showTree($(".jqueryFileTree:first"), "", true, true); } } } } function mapXmlToTable(msg, table) { var rows = msg.getElementsByTagName("listing_subitem"); var fileList = ''; var fileData = []; for (var x = 0; x < rows.length; x++) { var opt = {}; for (var xx = 0; xx < o.colModel.length; xx++) { try { opt[o.colModel[xx].name] = IE(rows[x].getElementsByTagName(o.colModel[xx].name)[0]).textContent; } catch (e) { } } fileData.push([opt.type,opt.name]); /* * { name: 'type', index: 'type', sorttype: "text" }, { * name: 'dateFormatted', index: 'dateFormatted', * sorttype: "date" }, { name: 'sizeFormatted', * index: 'sizeFormatted', sorttype: "text" }, { * name: 'name', index: 'name', sorttype: "text" }, { * name: 'base64path', index: 'base64path', * sorttype: "text" }, { name: 'keywords', index: * 'keywords', sorttype: "text" }, { name: * 'root_dir', index: 'root_dir', sorttype: "text" } */ if (currentView() == "Thumbnail") { if (opt.type === 'DIR') { var dirTemplate = thumbnailItemTemplate.replace(/#REL#/g, escape(opt.base64path) + "/"); dirTemplate = dirTemplate.replace(/#NAME#/g, opt.name); dirTemplate = dirTemplate.replace(/#PATHREL#/g, opt.root_dir); dirTemplate = dirTemplate.replace(/#HREF#/g, opt.base64path); dirTemplate = dirTemplate.replace(/#CLASS#/g, "directoryThumb"); dirTemplate = dirTemplate.replace(/#TITLE#/g, "<strong>Name : </strong>" + opt.name + "<br /><strong>Modified : </strong>" + opt.dateFormatted + "<br /><strong>Keywords : </strong>" + opt.keywords); dirTemplate = dirTemplate.replace(/#NAME#/g, opt.name); dirTemplate = dirTemplate.replace(/#SIZE#/g, opt.sizeFormatted); dirTemplate = dirTemplate.replace(/#PRIVS#/g, opt.privs); dirTemplate = dirTemplate.replace(/#DATE#/g, opt.dateFormatted); dirTemplate = dirTemplate.replace(/#KEYWORDS#/g, opt.keywords); dirTemplate = dirTemplate.replace(/#PREVIEW#/g, opt.preview); dirTemplate = dirTemplate.replace(/#SRC#/g, o.fileFolder); fileList += dirTemplate; } else if (opt.type === 'FILE') { var fileTemplate = thumbnailItemTemplate.replace(/#NAME#/g, opt.name); fileTemplate = fileTemplate.replace(/#REL#/g, escape(opt.root_dir)); fileTemplate = fileTemplate.replace(/#PATHREL#/g, opt.root_dir); fileTemplate = fileTemplate.replace(/#HREF#/g, opt.base64path); fileTemplate = fileTemplate.replace(/#CLASS#/g, "fileThumb"); fileTemplate = fileTemplate.replace(/#TITLE#/g, "<strong>Name : </strong>" + opt.name + "<br /><strong>Size : </strong>" + opt.sizeFormatted + "<br /><strong>Modified : </strong>" + opt.dateFormatted + "<br /><strong>Keywords : </strong>" + opt.keywords); fileTemplate = fileTemplate.replace(/#NAME#/g, opt.name); fileTemplate = fileTemplate.replace(/#SIZE#/g, opt.sizeFormatted); fileTemplate = fileTemplate.replace(/#PRIVS#/g, opt.privs); fileTemplate = fileTemplate.replace(/#DATE#/g, opt.dateFormatted); fileTemplate = fileTemplate.replace(/#KEYWORDS#/g, opt.keywords); fileTemplate = fileTemplate.replace(/#PREVIEW#/g, opt.preview); fileTemplate = fileTemplate.replace(/#SRC#/g, o.spinerImage); fileList += fileTemplate; } } else { if (opt.type === 'DIR') { var keywords = opt.keywords; var vtip = " vtip "; if (keywords.length >= o.MaximumLengthAllowedForKeywordsString) { keywords = keywords.substr( 0, o.MaximumLengthAllowedForKeywordsString) + "..."; } else { vtip = ""; } fileList += '<tr privs="' + opt.privs + '" rel="' + opt.root_dir + '" class="jqueryFileTree" style="display: none;"><td class="columnSelect"><input class="chkBox" type="checkbox" /></td><td preview="' + opt.preview + '" class="directory collapsed columnName"><span class="expandButton" rel="' + opt.base64path + '/"><img src="' + o.collapsedImageURL + '" /></span><a href="' + opt.base64path + '" rel="' + opt.base64path + '/">' + opt.name + '</a></td><td class="columnSize"></td><td class="columnModified">' + opt.dateFormatted + '</td><td class="columnKeywords ' + vtip + '" title="' + opt.keywords + '">' + keywords + '</td></tr>'; } else if (opt.type === 'FILE') { var fileExt = getFileExtension(opt.name).toLowerCase(); var keywords = opt.keywords; var vtip = " vtip "; if (keywords.length >= o.MaximumLengthAllowedForKeywordsString) { keywords = keywords.substr( 0, o.MaximumLengthAllowedForKeywordsString) + "..."; } else { vtip = ""; } fileList += '<tr privs="' + opt.privs + '" rel="' + opt.root_dir + '" class="jqueryFileTree" style="display: none;"><td class="columnSelect"><input class="chkBox" type="checkbox" /></td><td preview="' + opt.preview + '" class="fileTR columnName file"><a href="' + opt.base64path + '" rel="' + opt.base64path + '">' + opt.name + '</a></td><td class="columnSize">' + opt.sizeFormatted + '</td><td class="columnModified">' + opt.dateFormatted + '</td><td class="columnKeywords ' + vtip + '" title="' + opt.keywords + '">' + keywords + '</td></tr>'; } } } $(document).data("filesList",fileData); return fileList; } function getFileExtension(filename) { var ext = /^.+\.([^.]+)$/.exec(filename); return ext == null ? "" : ext[1]; } function IE(obj) { var obj2 = {}; if (window.ActiveXObject) obj2.textContent = obj.text; else obj2.textContent = obj.textContent; return obj2; } function howerEffect() { $(".jqueryFileTree").hover(function() { $(this).addClass("rowHover"); }, function() { $(this).removeClass("rowHover"); }); } function setHashLocation(s) { if (o.setHashLocation) { if (s.toString().length > 0) { hashListener.setHash(unescape(s)); } } } function getHash() { return document.location.hash; } function bindBreadcrumbs() { var hashLoc = hashListener.getHash().toString().replace("#", ""); var dirs = hashLoc.split("/"); var crumbs = ""; crumbs += "<li class='home'><a href='#/'>Home</a></li>"; var items = 0; for (var i = 1; i < dirs.length - 1; i++) { if (i < dirs.length - 2) { var newLoc = hashLoc.substr(0, hashLoc.indexOf(dirs[i + 1])); crumbs += "<li><a href='#" + newLoc + "'>" + unescape(dirs[i]) + "</a></li>"; } else { crumbs += "<li>" + dirs[i] + "<span class='refreshButton' rel='" + hashLoc + "'><img src='" + o.refreshImageURL + "' /></span></li>"; } items += 1; } if (items == 0) { crumbs += "<li><span class='refreshButton' rel='" + hashLoc + "'><img src='" + o.refreshImageURL + "' /></span></li>"; } $("#crumbs").html(crumbs); $(".refreshButton").click(function() { if (currentView() == "Thumbnail") { showTree($("#filesContainerDiv"), escape($(this).attr("rel")), true, true); } else { showTree($("#filesContainer"), escape($(this).attr("rel")), true, true); } }); } /** * Vertigo Tip by www.vertigo-project.com Requires jQuery */ var border_right = $(window).width(); var vtip = function(el) { el = el || $(".vtip"); $(el).tipsy({ live: true, gravity: $.fn.tipsy.autoNS, html: true }); }; var hashListener = { ie: /MSIE/.test(navigator.userAgent), ieSupportBack: true, hash: document.location.hash, check: function() { var h = document.location.hash; if (h != this.hash) { this.hash = h; this.onHashChanged(); } }, init: function() { if (this.ie && this.ieSupportBack) { var frame = document.createElement("iframe"); frame.id = "state-frame"; frame.style.display = "none"; if (document.body) { document.body.appendChild(frame); this.writeFrame(""); } } var self = this; if ("onpropertychange" in document && "attachEvent" in document) { document.attachEvent("onpropertychange", function() { if (event.propertyName == "location") { self.check(); } }); } window.setInterval(function() { self.check() }, 50); }, setHash: function(s) { if (this.ie && this.ieSupportBack) { this.writeFrame(s); } document.location.hash = s; }, getHash: function() { return document.location.hash; }, writeFrame: function(s) { /*var f = document.getElementById("state-frame"); if (f) { var d = f.contentDocument || f.contentWindow.document; d.open(); d.write("<script>window._hash = '" + s + "'; window.onload = parent.hashListener.syncHash;<\/script>"); d.close(); }*/ }, syncHash: function() { var s = this._hash; if (s != document.location.hash) { document.location.hash = s; } }, onHashChanged: function() { var t = escape(this.getHash().replace("#", "").match(/.*\//)); if (currentView() == "Thumbnail") { showTree($("#filesContainerDiv"), t, true); } else { showTree($("#filesContainer"), t, true); } } }; hashListener.init(); function initDropdownMenu() { $("ul.subnav").parent().append("<span></span>"); //Only shows drop down trigger when js is enabled (Adds empty span tag after ul.subnav*) $("ul.topnav li span").hover(function() { //When trigger is clicked... //Following events are applied to the subnav itself (moving subnav up and down) $(this).parent().find("ul.subnav").slideDown('fast').show(); //Drop down the subnav on click $(this).parent().hover(function() { }, function() { $(this).parent().find("ul.subnav").slideUp('slow'); //When the mouse hovers out of the subnav, move it back up }); //Following events are applied to the trigger (Hover events for the trigger) }).hover(function() { $(this).addClass("subhover"); //On hover over, add class "subhover" }, function() { //On Hover Out $(this).removeClass("subhover"); //On hover out, remove class "subhover" }); } // Loading message $(this).html('<table cellpadding="0" cellspacing="0" class="jqueryFileTree start"><tr><td class="wait">' + o.loadMessage + '</td></tr></table>'); blockFileListingUI(true); // Get the initial file list showTree($(this), escape(o.root)); var currentViewType = $.cookie(o.ViewCookieName); if (currentViewType && currentViewType == "Thumbnail") { $(".thumbnailViewLink").animate({ opacity: 0.3 }, 500); } else { $(".treeViewLink").animate({ opacity: 0.3 }, 500); } bindMenuButtons(); loadPopupContent(); bindMainMenuEvents(); $("#searchForm").attr("action", o.ajaxCallURL); bindBackToTop(); $("#searchResultNotification").find("a").click(function() { $(document).removeData("searchData"); $(".refreshButton").click(); }); initDropdownMenu(); }); } }); })(jQuery); /* jslint browser: true */ /* global jQuery: true */ /** * jQuery Cookie plugin * * Copyright (c) 2010 Klaus Hartl (stilbuero.de) Dual licensed under the MIT and * GPL licenses: http://www.opensource.org/licenses/mit-license.php * http://www.gnu.org/licenses/gpl.html * */ jQuery.cookie = function(key, value, options) { // key and value given, set cookie... if (arguments.length > 1 && (value === null || typeof value !== "object")) { options = jQuery.extend({}, options); if (value === null) { options.expires = -1; } if (typeof options.expires === 'number') { var days = options.expires, t = options.expires = new Date(); t.setDate(t.getDate() + days); } return (document.cookie = [ encodeURIComponent(key), '=', options.raw ? String(value) : encodeURIComponent(String(value)), options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE options.path ? '; path=' + options.path : '', options.domain ? '; domain=' + options.domain : '', options.secure ? '; secure' : ''].join('')); } // key and possibly options given, get cookie... options = value || {}; var result, decode = options.raw ? function(s) { return s; } : decodeURIComponent; return (result = new RegExp('(?:^|; )' + encodeURIComponent(key) + '=([^;]*)').exec(document.cookie)) ? decode(result[1]) : null; }; /* * Copyright (c) 2008 Greg Weber greg at gregweber.info Dual licensed under the * MIT and GPL licenses: http://www.opensource.org/licenses/mit-license.php * http://www.gnu.org/licenses/gpl.html * * documentation at http://gregweber.info/projects/uitablefilter * * allows table rows to be filtered (made invisible) <code> t = $('table') * $.uiTableFilter( t, phrase ) </code> arguments: jQuery object containing * table rows phrase to search for optional arguments: column to limit search * too (the column title in the table header) ifHidden - callback to execute if * one or more elements was hidden */ jQuery.uiTableFilter = function(jq, phrase, column, ifHidden) { var new_hidden = false; if (this.last_phrase === phrase) return false; var phrase_length = phrase.length; var words = phrase.toLowerCase().split(" "); // these function pointers may change var matches = function(elem) { elem.show(); $(elem).each(function() { showParentElem($(this).attr("rel"), $(this)); }); } var showParentElem = function(rel, elem) { elem.closest("table").find("a[rel='" + rel + "']").closest("tr").each( function() { $(this).show(); showParentElem($(this).attr("rel"), elem); }); } var noMatch = function(elem) { elem.hide(); new_hidden = true } var getText = function(elem) { return elem.text() } if (column) { var index = null; jq.find("thead > tr:last > th").each(function(i) { if ($(this).text() == column) { index = i; return false; } }); if (index == null) throw ("given column: " + column + " not found") getText = function(elem) { return jQuery(elem.find(("td:eq(" + index + ")"))).text() } } // if added one letter to last time, // just check newest word and only need to hide if ((words.size > 1) && (phrase.substr(0, phrase_length - 1) === this.last_phrase)) { if (phrase[-1] === " ") { this.last_phrase = phrase; return false; } var words = words[-1]; // just search for the newest word // only hide visible rows matches = function(elem) { ; } var elems = jq.find("tbody > tr:visible") } else { new_hidden = true; var elems = jq.find("tbody > tr") } elems.each(function() { var elem = jQuery(this); jQuery.uiTableFilter.has_words(getText(elem), words, false) ? matches(elem) : noMatch(elem); }); last_phrase = phrase; if (ifHidden && new_hidden) ifHidden(); return jq; }; // caching for speedup jQuery.uiTableFilter.last_phrase = "" // not jQuery dependent // "" [""] -> Boolean // "" [""] Boolean -> Boolean jQuery.uiTableFilter.has_words = function(str, words, caseSensitive) { var text = caseSensitive ? str : str.toLowerCase(); for (var i = 0; i < words.length; i++) { if (text.indexOf(words[i]) === -1) return false; } return true; } /*--------------------------------------------*/ jQuery.uiItemFilter = function(jq, phrase, column, ifHidden) { var new_hidden = false; if (this.last_phrase === phrase) return false; var phrase_length = phrase.length; var words = phrase.toLowerCase().split(" "); // these function pointers may change var matches = function(elem) { elem.show() } var noMatch = function(elem) { elem.hide(); new_hidden = true } var getText = function(elem) { return elem.text() } if (column) { var index = null; jq.find("li:last >").each(function(i) { if ($(this).text() == column) { index = i; return false; } }); if (index == null) throw ("given column: " + column + " not found") getText = function(elem) { return jQuery(elem.find(("li:eq(" + index + ")"))).text() } } // if added one letter to last time, // just check newest word and only need to hide if ((words.size > 1) && (phrase.substr(0, phrase_length - 1) === this.last_phrase)) { if (phrase[-1] === " ") { this.last_phrase = phrase; return false; } var words = words[-1]; // just search for the newest word // only hide visible rows matches = function(elem) { ; } var elems = jq.find("li:visible") } else { new_hidden = true; var elems = jq.find("li") } elems.each(function() { var elem = jQuery(this); jQuery.uiItemFilter.has_words(getText(elem), words, false) ? matches(elem) : noMatch(elem); }); last_phrase = phrase; if (ifHidden && new_hidden) ifHidden(); return jq; }; // caching for speedup jQuery.uiItemFilter.last_phrase = "" // not jQuery dependent // "" [""] -> Boolean // "" [""] Boolean -> Boolean jQuery.uiItemFilter.has_words = function(str, words, caseSensitive) { var text = caseSensitive ? str : str.toLowerCase(); for (var i = 0; i < words.length; i++) { if (text.indexOf(words[i]) === -1) return false; } return true; } /** * jQuery.fn.sort * -------------- * @author James Padolsey (http://james.padolsey.com) * @version 0.1 * @updated 18-MAR-2010 * -------------- * @param Function comparator: * Exactly the same behaviour as [1,2,3].sort(comparator) * * @param Function getSortable * A function that should return the element that is * to be sorted. The comparator will run on the * current collection, but you may want the actual * resulting sort to occur on a parent or another * associated element. * * E.g. $('td').sort(comparator, function(){ * return this.parentNode; * }) * * The <td>'s parent (<tr>) will be sorted instead * of the <td> itself. */ jQuery.fn.sort = (function() { var sort = [].sort; return function(comparator, getSortable) { getSortable = getSortable || function() { return this; }; var placements = this.map(function() { var sortElement = getSortable.call(this), parentNode = sortElement.parentNode, // Since the element itself will change position, we have // to have some way of storing it's original position in // the DOM. The easiest way is to have a 'flag' node: nextSibling = parentNode.insertBefore( document.createTextNode(''), sortElement.nextSibling); return function() { if (parentNode === this) { throw new Error("You can't sort elements if any one is a descendant of another."); } // Insert before flag: parentNode.insertBefore(this, nextSibling); // Remove flag: parentNode.removeChild(nextSibling); }; }); return sort.call(this, comparator).each(function(i) { placements[i].call(getSortable.call(this)); }); }; })();