You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
178 lines
5.3 KiB
178 lines
5.3 KiB
var GV = {};
|
|
var isBrowser = false;
|
|
var Promise;
|
|
var GoUseCallback;
|
|
var GoUse = function (cb) {
|
|
GoUseCallback = "with(this){(" + cb.toString() + ")()}";
|
|
}
|
|
var net = {
|
|
request: function (c) {
|
|
var url = c["url"];
|
|
var data = c["data"];
|
|
var header = c["header"];
|
|
var method = c["method"];
|
|
var dataType = c["dataType"];
|
|
var timeout = c["timeout"];
|
|
var success = c["success"];
|
|
var fail = c["fail"];
|
|
var complete = c["complete"];
|
|
|
|
|
|
var isHost = url.indexOf("http://") > -1 || url.indexOf("https://") > -1;
|
|
var isAbs = (url[0] == '/');
|
|
if (!isHost) {
|
|
if (!isAbs) {
|
|
url = location.pathname + "/" + url
|
|
}
|
|
url = location.host + "/" + url;
|
|
|
|
for (; url.indexOf("//") > -1;) {
|
|
url = url.replace("//", "/")
|
|
}
|
|
url = location.protocol + "//" + url
|
|
|
|
}
|
|
|
|
if (data) {
|
|
if (method == "GET") {
|
|
url = $.param.querystring(url, data);
|
|
data = ""
|
|
} else {
|
|
if (typeof (data) == "object") {
|
|
if (header["Content-Type"].indexOf("application/json") > -1 || header["content-type"].indexOf("application/json") > -1) {
|
|
data = JSON.stringify(data);
|
|
} else {
|
|
data = $.param(data);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
var resp = GoRequest({
|
|
url: url,
|
|
data: data,
|
|
method: method,
|
|
header: header,
|
|
timeout: timeout
|
|
});
|
|
|
|
resp = JSON.parse(resp);
|
|
var statusCode = resp["statusCode"];
|
|
var result = resp["data"];
|
|
|
|
if (dataType == "json") {
|
|
result = JSON.parse(result)
|
|
}
|
|
|
|
if (statusCode == 200) {
|
|
success && success({
|
|
data: result,
|
|
statusCode: statusCode + "",
|
|
});
|
|
} else {
|
|
fail && fail({
|
|
data: result,
|
|
statusCode: statusCode + "",
|
|
})
|
|
}
|
|
}
|
|
};
|
|
|
|
var axiosUse = function (ctx) {
|
|
var buildURL = ctx.require('axios/lib/helpers/buildURL');
|
|
var buildFullPath = ctx.require('axios/lib/core/buildFullPath');
|
|
var settle = ctx.require('axios/lib/core/settle');
|
|
var createError = ctx.require('axios/lib/core/createError');
|
|
|
|
function transformResponse(mpResponse, config, mpRequestOption) {
|
|
var headers = mpResponse.header || mpResponse.headers;
|
|
var status = mpResponse.statusCode || mpResponse.status;
|
|
var statusText = '';
|
|
if (status === 200) {
|
|
statusText = 'OK';
|
|
} else if (status === 400) {
|
|
statusText = 'Bad Request';
|
|
}
|
|
var response = {
|
|
data: mpResponse.data,
|
|
status: status,
|
|
statusText: statusText,
|
|
headers: headers,
|
|
config: config,
|
|
request: mpRequestOption
|
|
};
|
|
return response;
|
|
}
|
|
|
|
ctx.axios.defaults.adapter = function (config) {
|
|
return new Promise(function (resolve, reject) {
|
|
var mpRequestOption = {
|
|
url: buildURL(buildFullPath(config.baseURL, config.url), config.params, config.paramsSerializer),
|
|
method: config["method"] ? config["method"].toUpperCase() : "get",
|
|
data: config["data"],
|
|
header: config["headers"],
|
|
timeout: config["timeout"],
|
|
success: function (mpResponse) {
|
|
var response = transformResponse(mpResponse, config, mpRequestOption);
|
|
settle(resolve, reject, response);
|
|
},
|
|
fail: function (error) {
|
|
reject(createError(error.data));
|
|
},
|
|
};
|
|
net.request(mpRequestOption)
|
|
})
|
|
};
|
|
}
|
|
|
|
var GetGoVueTemplate = function (raw) {
|
|
var tagStart = "<!--gv-start-->";
|
|
var tagEnd = "<!--gv-end-->";
|
|
var start = raw.indexOf(tagStart)
|
|
if (start < 0) {
|
|
return
|
|
}
|
|
var end = raw.indexOf(tagEnd)
|
|
if (end < 0) {
|
|
throw "注释未闭合"
|
|
return
|
|
}
|
|
var content = raw.substring(start + tagStart.length, end);
|
|
var template = raw.substring(0, start) + "<!--vue-ssr-outlet-->\n{{{GoVueTemplate}}}\n{{{GoVueData}}}" + raw.substr(end + tagEnd.length);
|
|
return {
|
|
template: template,
|
|
content: content,
|
|
}
|
|
}
|
|
|
|
|
|
var GetGoVueJsCode = function (htmlparser2, raw) {
|
|
var codes = [];
|
|
var flag = false;
|
|
var parser = new htmlparser2.Parser(
|
|
{
|
|
onopentag: function (name, attribs) {
|
|
flag = (name === "script" && (attribs["gv-src"] || attribs["gv-src"] === ""))
|
|
if (flag) {
|
|
if (attribs.src) {
|
|
codes.push(GoReadFile(attribs.src))
|
|
}else{
|
|
codes.push("")
|
|
}
|
|
}
|
|
// console.log("name", name, attribs["gv-src"]);
|
|
},
|
|
ontext: function (text) {
|
|
if (flag && text && text !== "") {
|
|
codes[codes.length - 1] += text
|
|
}
|
|
// console.log("-->", text);
|
|
},
|
|
},
|
|
{decodeEntities: true}
|
|
);
|
|
parser.write(raw)
|
|
parser.end();
|
|
return codes;
|
|
}
|