mirror of
https://github.com/lrsjng/h5ai.git
synced 2025-10-04 00:11:56 +02:00
116 lines
3.9 KiB
JavaScript
116 lines
3.9 KiB
JavaScript
|
|
(function ($, H5AI) {
|
|
|
|
H5AI.connector = (function () {
|
|
|
|
var cache = {},
|
|
pathnameStatusCache = {},
|
|
contentTypeRegEx = /^text\/html;h5ai=/,
|
|
getPath = function (folder, tableRow) {
|
|
|
|
var absHref = H5AI.util.getAbsHref(folder, tableRow),
|
|
path = cache[absHref];
|
|
|
|
if (!path) {
|
|
path = H5AI.Path(folder, tableRow);
|
|
if (!path.isParentFolder) {
|
|
cache[path.absHref] = path;
|
|
}
|
|
}
|
|
|
|
return path;
|
|
},
|
|
fetchStatus = function (pathname, callback) {
|
|
|
|
if (H5AI.core.settings.folderStatus[pathname]) {
|
|
callback(H5AI.core.settings.folderStatus[pathname]);
|
|
return;
|
|
} else if (pathnameStatusCache[pathname]) {
|
|
callback(pathnameStatusCache[pathname]);
|
|
return;
|
|
}
|
|
|
|
$.ajax({
|
|
url: pathname,
|
|
type: "HEAD",
|
|
complete: function (xhr) {
|
|
|
|
var status = xhr.status;
|
|
|
|
if (status === 200 && contentTypeRegEx.test(xhr.getResponseHeader("Content-Type"))) {
|
|
status = "h5ai";
|
|
}
|
|
pathnameStatusCache[pathname] = status;
|
|
callback(status);
|
|
}
|
|
});
|
|
},
|
|
updatePath = function (path) {
|
|
|
|
if (path.isFolder && !path.isParentFolder && path.status === undefined) {
|
|
fetchStatus(path.absHref, function (status) {
|
|
|
|
if (status !== "h5ai") {
|
|
path.status = status;
|
|
}
|
|
H5AI.html.updateHtml(path);
|
|
H5AI.core.linkHoverStates();
|
|
});
|
|
}
|
|
},
|
|
updatePaths = function () {
|
|
|
|
$.each(cache, function (ref, cached) {
|
|
updatePath(cached);
|
|
});
|
|
},
|
|
fetchStatusAndContent = function (pathname, includeParent, callback) {
|
|
|
|
fetchStatus(pathname, function (status) {
|
|
|
|
if (status !== "h5ai") {
|
|
callback(status, {});
|
|
return;
|
|
}
|
|
|
|
$.ajax({
|
|
url: pathname,
|
|
type: "GET",
|
|
dataType: "html",
|
|
error: function (xhr) {
|
|
|
|
callback(xhr.status, {}); // since it was checked before this should never happen
|
|
},
|
|
success: function (html, status, xhr) {
|
|
|
|
var content = {};
|
|
|
|
if (!contentTypeRegEx.test(xhr.getResponseHeader("Content-Type"))) {
|
|
callback(xhr.status, {}); // since it was checked before this should never happen
|
|
return;
|
|
}
|
|
|
|
$(html).find("#table td").closest("tr").each(function () {
|
|
|
|
var path = getPath(pathname, this);
|
|
|
|
if (path.isFolder && (!path.isParentFolder || includeParent)) {
|
|
content[path.absHref] = path;
|
|
updatePath(path);
|
|
}
|
|
});
|
|
callback("h5ai", content);
|
|
}
|
|
});
|
|
});
|
|
};
|
|
|
|
return {
|
|
getPath: getPath,
|
|
updatePaths: updatePaths,
|
|
fetchStatusAndContent: fetchStatusAndContent
|
|
};
|
|
}());
|
|
|
|
}(jQuery, H5AI));
|