Another partial commit.

This commit is contained in:
Lars Jung 2012-10-07 13:48:27 +02:00
parent abb9b7bd0e
commit cb9341451b
15 changed files with 88 additions and 453 deletions

View file

@ -1,125 +0,0 @@
modulejs.define('core/ajax', ['$', 'amplify', 'base64', 'core/resource'], function ($, amplify, base64, resource) {
var reContentType = /^text\/html;h5ai=/,
getStatus = function (href, withContent, callback) {
$.ajax({
url: href,
type: withContent ? 'GET' : 'HEAD',
complete: function (xhr) {
var res = {
status: xhr.status,
content: xhr.responseText
};
if (xhr.status === 200 && reContentType.test(xhr.getResponseHeader('Content-Type'))) {
res.status = 'h5ai';
}
callback(res);
}
});
},
getChecks = function (callback) {
$.ajax({
url: resource.api(),
data: {
action: 'get',
checks: true
},
type: 'POST',
dataType: 'json',
success: function (json) {
callback(json.checks);
},
error: function () {
callback();
}
});
},
getEntries = function (href, what, callback) {
$.ajax({
url: resource.api(),
data: {
action: 'get',
entries: true,
entriesHref: href,
entriesWhat: what
},
type: 'POST',
dataType: 'json',
success: function (json) {
callback(json.entries);
},
error: function () {
callback();
}
});
},
getArchive = function (data, callback) {
$.ajax({
url: resource.api(),
data: {
action: 'archive',
execution: data.execution,
format: data.format,
hrefs: data.hrefs
},
type: 'POST',
dataType: 'json',
beforeSend: function (xhr) {
if (data.user) {
xhr.setRequestHeader('Authorization', 'Basic ' + base64.encode(data.user + ':' + data.password));
}
},
success: function (json) {
callback(json);
},
error: function () {
callback();
}
});
},
getHtml = function (url, callback) {
$.ajax({
url: url,
type: 'POST',
dataType: 'html',
success: function (html) {
callback(html);
},
error: function () {
callback();
}
});
};
return {
getStatus: getStatus,
getChecks: getChecks,
getEntries: getEntries,
getArchive: getArchive,
getHtml: getHtml
};
});

View file

@ -1,12 +0,0 @@
modulejs.define('core/mode', [], function () {
var mode = {
// id: null,
// dataType: null,
// serverName: null,
// serverVersion: null
};
return mode;
});

View file

@ -1,5 +1,5 @@
modulejs.define('core/server', ['$', '_', 'config', 'base64'], function ($, _, config, base64) {
modulejs.define('core/server', ['$', '_', 'config'], function ($, _, config) {
var server = _.extend({}, config.server, {
@ -26,81 +26,20 @@ modulejs.define('core/server', ['$', '_', 'config', 'base64'], function ($, _, c
});
},
requestArchive: function (data, callback) {
requestThumbSmall: function (type, href, callback) {
if (!server.apiHref) {
callback();
return;
}
$.ajax({
url: server.apiHref,
data: {
action: 'archive',
execution: data.execution,
format: data.format,
hrefs: data.hrefs
},
type: 'POST',
dataType: 'json',
beforeSend: function (xhr) {
if (data.user) {
xhr.setRequestHeader('Authorization', 'Basic ' + base64.encode(data.user + ':' + data.password));
}
},
success: function (json) {
callback(json);
},
error: function () {
callback();
}
});
},
requestThumb: function (data, callback) {
server.request({
action: 'getthumbsrc',
type: data.type,
href: data.href,
mode: data.mode,
width: data.width,
height: data.height
}, function (json) {
server.request({action: 'getthumbsrc', type: type, href: href, mode: 'square', width: 16, height: 16}, function (json) {
callback(json && json.code === 0 ? json.absHref : null);
});
},
requestThumbSmall: function (type, href, callback) {
server.requestThumb(
{
type: type,
href: href,
mode: 'square',
width: 16,
height: 16
},
callback
);
},
requestThumbBig: function (type, href, callback) {
server.requestThumb(
{
type: type,
href: href,
mode: 'rational',
width: 100,
height: 48
},
callback
);
server.request({action: 'getthumbsrc', type: type, href: href, mode: 'rational', width: 100, height: 48}, function (json) {
callback(json && json.code === 0 ? json.absHref : null);
});
}
});

View file

@ -1,5 +1,5 @@
modulejs.define('ext/custom', ['_', '$', 'core/settings', 'core/ajax'], function (_, $, allsettings, ajax) {
modulejs.define('ext/custom', ['_', '$', 'core/settings'], function (_, $, allsettings) {
var settings = _.extend({
enabled: false,
@ -7,6 +7,23 @@ modulejs.define('ext/custom', ['_', '$', 'core/settings', 'core/ajax'], function
footer: '_h5ai.footer.html'
}, allsettings.custom),
getHtml = function (url, callback) {
$.ajax({
url: url,
type: 'POST',
dataType: 'html',
success: function (html) {
callback(html);
},
error: function () {
callback();
}
});
},
init = function () {
if (!settings.enabled) {
@ -14,7 +31,7 @@ modulejs.define('ext/custom', ['_', '$', 'core/settings', 'core/ajax'], function
}
if (_.isString(settings.header)) {
ajax.getHtml(settings.header, function (html) {
getHtml(settings.header, function (html) {
if (html) {
$('<div id="content-header">' + html + '</div>').prependTo('#content');
@ -23,7 +40,7 @@ modulejs.define('ext/custom', ['_', '$', 'core/settings', 'core/ajax'], function
}
if (_.isString(settings.footer)) {
ajax.getHtml(settings.footer, function (html) {
getHtml(settings.footer, function (html) {
if (html) {
$('<div id="content-footer">' + html + '</div>').appendTo('#content');

View file

@ -1,5 +1,5 @@
modulejs.define('ext/delete', ['_', '$', 'core/settings', 'core/entry', 'core/event', 'core/resource', 'core/refresh'], function (_, $, allsettings, entry, event, resource, refresh) {
modulejs.define('ext/delete', ['_', '$', 'core/settings', 'core/event', 'core/resource', 'core/refresh', 'core/server'], function (_, $, allsettings, event, resource, refresh, server) {
var settings = _.extend({
enabled: false
@ -8,16 +8,12 @@ modulejs.define('ext/delete', ['_', '$', 'core/settings', 'core/entry', 'core/ev
deleteBtnTemplate = '<li id="delete">' +
'<a href="#">' +
'<img src="' + resource.image('delete') + '" alt="delete"/>' +
'<span class="l10n-delete">delete</span>' +
'<span class="l10n-delete"/>' +
'</a>' +
'</li>',
authTemplate = '<div id="delete-auth">' +
'<input id="delete-auth-user" type="text" value="" placeholder="user"/>' +
'<input id="delete-auth-password" type="text" value="" placeholder="password"/>' +
'</div>',
selectedHrefsStr = '',
$delete, $img, $deleteAuth, $deleteUser, $deletePassword,
$delete, $img,
failed = function () {
@ -33,15 +29,6 @@ modulejs.define('ext/delete', ['_', '$', 'core/settings', 'core/entry', 'core/ev
$img.attr('src', resource.image('delete'));
if (!json || json.code) {
if (json && json.code === 401) {
$deleteAuth
.css({
left: $delete.offset().left,
top: $delete.offset().top + $delete.outerHeight()
})
.show();
$deleteUser.focus();
}
failed();
}
refresh();
@ -51,17 +38,7 @@ modulejs.define('ext/delete', ['_', '$', 'core/settings', 'core/entry', 'core/ev
$delete.addClass('current');
$img.attr('src', resource.image('loading.gif', true));
$.ajax({
url: resource.api(),
data: {
action: 'delete',
hrefs: hrefsStr,
user: $deleteUser.val(),
password: $deletePassword.val()
},
dataType: 'json',
success: handleResponse
});
server.request({action: 'delete', hrefs: hrefsStr}, handleResponse);
},
onSelection = function (entries) {
@ -75,13 +52,12 @@ modulejs.define('ext/delete', ['_', '$', 'core/settings', 'core/entry', 'core/ev
$delete.appendTo('#navbar').show();
} else {
$delete.hide();
$deleteAuth.hide();
}
},
init = function () {
if (!settings.enabled) {
if (!settings.enabled || !server.apiHref) {
return;
}
@ -89,16 +65,11 @@ modulejs.define('ext/delete', ['_', '$', 'core/settings', 'core/entry', 'core/ev
.find('a').on('click', function (event) {
event.preventDefault();
$deleteAuth.hide();
requestDeletion(selectedHrefsStr);
}).end()
.appendTo('#navbar');
$img = $delete.find('img');
$deleteAuth = $(authTemplate).appendTo('body');
$deleteUser = $deleteAuth.find('#delete-auth-user');
$deletePassword = $deleteAuth.find('#delete-auth-password');
event.sub('selection', onSelection);
};

View file

@ -1,5 +1,5 @@
modulejs.define('ext/download', ['_', '$', 'core/settings', 'core/resource', 'core/event', 'core/ajax'], function (_, $, allsettings, resource, event, ajax) {
modulejs.define('ext/download', ['_', '$', 'core/settings', 'core/resource', 'core/event', 'core/server'], function (_, $, allsettings, resource, event, server) {
var settings = _.extend({
enabled: false,
@ -12,16 +12,12 @@ modulejs.define('ext/download', ['_', '$', 'core/settings', 'core/resource', 'co
downloadBtnTemplate = '<li id="download">' +
'<a href="#">' +
'<img src="' + resource.image('download') + '" alt="download"/>' +
'<span class="l10n-download">download</span>' +
'<span class="l10n-download"/>' +
'</a>' +
'</li>',
authTemplate = '<div id="download-auth">' +
'<input id="download-auth-user" type="text" value="" placeholder="user"/>' +
'<input id="download-auth-password" type="text" value="" placeholder="password"/>' +
'</div>',
selectedHrefsStr = '',
$download, $img, $downloadAuth, $downloadUser, $downloadPassword,
$download, $img,
failed = function () {
@ -36,24 +32,11 @@ modulejs.define('ext/download', ['_', '$', 'core/settings', 'core/resource', 'co
$download.removeClass('current');
$img.attr('src', resource.image('download'));
if (json) {
if (json.code === 0) {
setTimeout(function () { // wait here so the img above can be updated in time
if (json && json.code === 0) {
setTimeout(function () { // wait here so the img above can be updated in time
window.location = resource.api() + '?action=getarchive&id=' + json.id + '&as=h5ai-selection.' + settings.format;
}, 200);
} else {
if (json.code === 401) {
$downloadAuth
.css({
left: $download.offset().left,
top: $download.offset().top + $download.outerHeight()
})
.show();
$downloadUser.focus();
}
failed();
}
window.location = server.apiHref + '?action=getarchive&id=' + json.id + '&as=h5ai-selection.' + settings.format;
}, 200);
} else {
failed();
}
@ -63,12 +46,12 @@ modulejs.define('ext/download', ['_', '$', 'core/settings', 'core/resource', 'co
$download.addClass('current');
$img.attr('src', resource.image('loading.gif', true));
ajax.getArchive({
server.request({
action: 'archive',
execution: settings.execution,
format: settings.format,
hrefs: hrefsStr,
user: $downloadUser.val(),
password: $downloadPassword.val()
hrefs: hrefsStr
}, handleResponse);
},
@ -83,13 +66,12 @@ modulejs.define('ext/download', ['_', '$', 'core/settings', 'core/resource', 'co
$download.appendTo('#navbar').show();
} else {
$download.hide();
$downloadAuth.hide();
}
},
init = function () {
if (!settings.enabled) {
if (!settings.enabled || !server.apiHref) {
return;
}
@ -97,16 +79,11 @@ modulejs.define('ext/download', ['_', '$', 'core/settings', 'core/resource', 'co
.find('a').on('click', function (event) {
event.preventDefault();
$downloadAuth.hide();
requestArchive(selectedHrefsStr);
}).end()
.appendTo('#navbar');
$img = $download.find('img');
$downloadAuth = $(authTemplate).appendTo('body');
$downloadUser = $downloadAuth.find('#download-auth-user');
$downloadPassword = $downloadAuth.find('#download-auth-password');
event.sub('selection', onSelection);
};

View file

@ -1,5 +1,5 @@
modulejs.define('model/entry', ['_', 'core/types', 'core/ajax', 'core/event', 'core/settings'], function (_, types, ajax, event, settings) {
modulejs.define('model/entry', ['$', '_', 'core/types', 'core/event', 'core/settings'], function ($, _, types, event, settings) {
var doc = document,
domain = doc.domain,
@ -93,9 +93,30 @@ modulejs.define('model/entry', ['_', 'core/types', 'core/ajax', 'core/event', 'c
},
reContentType = /^text\/html;h5ai=/,
getStatus = function (href, withContent, callback) {
$.ajax({
url: href,
type: withContent ? 'GET' : 'HEAD',
complete: function (xhr) {
var res = {
status: xhr.status,
content: xhr.responseText
};
if (xhr.status === 200 && reContentType.test(xhr.getResponseHeader('Content-Type'))) {
res.status = 'h5ai';
}
callback(res);
}
});
},
ajaxRequest = function (self, parser, callback) {
ajax.getStatus(self.absHref, parser, function (response) {
getStatus(self.absHref, parser, function (response) {
self.status = response.status;
if (parser && response.status === 'h5ai') {

View file

@ -1,5 +1,5 @@
modulejs.define('parser/apache-autoindex', ['_', '$', 'core/mode', 'core/settings', 'core/format', 'model/entry'], function (_, $, mode, settings, format, Entry) {
modulejs.define('parser/apache-autoindex', ['_', '$', 'core/settings', 'core/format', 'model/entry'], function (_, $, settings, format, Entry) {
var parseTableRow = function (absHref, tr) {
@ -35,11 +35,6 @@ modulejs.define('parser/apache-autoindex', ['_', '$', 'core/mode', 'core/setting
return parseTable(absHref, $id.find('table'));
};
mode.id = 'aai';
mode.dataType = 'apache-autoindex';
mode.serverName = 'apache';
mode.serverVersion = null;
return {
dataType: 'apache-autoindex',
parse: parse

View file

@ -1,12 +1,8 @@
modulejs.define('parser/generic-json', ['_', '$', 'core/mode', 'core/settings', 'model/entry'], function (_, $, mode, settings, Entry) {
modulejs.define('parser/generic-json', ['_', '$', 'core/settings', 'model/entry'], function (_, $, settings, Entry) {
var parseJson = function (absHref, json) {
mode.id = json.id;
mode.serverName = json.serverName;
mode.serverVersion = json.serverVersion;
if (!settings.custom) {
settings.custom = {};
}
@ -40,8 +36,6 @@ modulejs.define('parser/generic-json', ['_', '$', 'core/mode', 'core/settings',
return parseJsonStr(absHref, $id.text());
};
mode.dataType = 'generic-json';
return {
dataType: 'generic-json',
parse: parse