cloudcmd/client/rest.js
2017-02-13 16:11:10 +02:00

210 lines
5.6 KiB
JavaScript

'use strict';
const itype = require('itype/legacy');
/* global CloudFunc, CloudCmd */
module.exports = new RESTful();
const {Images} = require('./dom');
const load = require('./load');
const Dialog = require('./dialog');
function RESTful() {
this.delete = (url, data, callback) => {
const isFunc = itype.function(data);
if (!callback && isFunc) {
callback = data;
data = null;
}
sendRequest({
method : 'DELETE',
url : CloudFunc.FS + url,
data,
callback,
imgPosition : { top: !!data }
});
};
this.patch = function(url, data, callback) {
var isFunc = itype.function(data);
if (!callback && isFunc) {
callback = data;
data = null;
}
sendRequest({
method : 'PATCH',
url : CloudFunc.FS + url,
data : data,
callback : callback,
imgPosition : { top: true }
});
};
this.write = function(url, data, callback) {
var isFunc = itype.function(data);
if (!callback && isFunc) {
callback = data;
data = null;
}
sendRequest({
method : 'PUT',
url : CloudFunc.FS + url,
data : data,
callback : callback,
imgPosition : { top: true }
});
};
this.read = function(url, dataType, callback) {
var isQuery = /\?/.test(url);
var isBeautify = /\?beautify$/.test(url);
var isMinify = /\?minify$/.test(url);
var notLog = !isQuery || isBeautify || isMinify;
var isFunc = itype.function(dataType);
if (!callback && isFunc) {
callback = dataType;
dataType = 'text';
}
sendRequest({
method: 'GET',
url: CloudFunc.FS + url,
callback: callback,
notLog: notLog,
dataType: dataType
});
};
this.cp = function(data, callback) {
sendRequest({
method : 'PUT',
url : '/cp',
data : data,
callback : callback,
imgPosition : { top: true }
});
};
this.pack = function(data, callback) {
sendRequest({
method : 'PUT',
url : '/pack',
data : data,
callback : callback
});
};
this.extract = function(data, callback) {
sendRequest({
method : 'PUT',
url : '/extract',
data : data,
callback : callback
});
};
this.mv = function(data, callback) {
sendRequest({
method : 'PUT',
url : '/mv',
data : data,
callback : callback,
imgPosition : { top: true }
});
};
this.Config = {
read: function(callback) {
sendRequest({
method : 'GET',
url : '/config',
callback : callback,
imgPosition : { top: true },
notLog : true
});
},
write: function(data, callback) {
sendRequest({
method : 'PATCH',
url : '/config',
data : data,
callback : callback,
imgPosition : { top: true }
});
}
};
this.Markdown = {
read : function(url, callback) {
sendRequest({
method : 'GET',
url : '/markdown' + url,
callback : callback,
imgPosition : { top: true },
notLog : true
});
},
render : function(data, callback) {
sendRequest({
method : 'PUT',
url : '/markdown',
data : data,
callback : callback,
imgPosition : { top: true },
notLog : true
});
}
};
function sendRequest(params) {
var p = params,
prefixUrl = CloudCmd.PREFIX_URL;
p.url = prefixUrl + p.url;
p.url = encodeURI(p.url);
/*
* if we send ajax request -
* no need in hash so we escape #
*/
p.url = p.url.replace('#', '%23');
load.ajax({
method : p.method,
url : p.url,
data : p.data,
dataType : p.dataType,
error : function(jqXHR) {
var response = jqXHR.responseText,
statusText = jqXHR.statusText,
status = jqXHR.status,
text = status === 404 ? response : statusText;
Images.show.error(text);
setTimeout(function() {
Dialog.alert(CloudCmd.TITLE, text);
}, 100);
p.callback(Error(text));
},
success : function(data) {
Images.hide();
if (!p.notLog)
CloudCmd.log(data);
p.callback(null, data);
}
});
}
}