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.

126 lines
3.4 KiB

const app = getApp();
import {triggerApi, Session} from "../../../js/api"
const session = new Session("testAccount");
// to trigger api using a new session
function api(name){
return function({success, fail, complete, ...data}={}){
return triggerApi({
session, name, data, success, fail, complete
})
}
}
Page({
data: {
github_url:"https://github.com/educoder-weapp/educoder_weapp.git",
gitee_url:"https://gitee.com/educoder_weapp/educoder_weapp.git",
identifier:"mkgya7vu",
file_content:"",
routes:[],
base:"https://forge.educoder.net/projects/6295/repository/revisions/master/raw",
eduImgDir: global.config.eduImgDir
},
onShareAppMessage(){
return app.shareApp({
title:"EduCoder教学-版本库"
})
},
api(name){
return ({success, fail, complete, ...data}={})=>{
return api(name)({success, fail, complete, identifier:this.data.identifier, ...data})
}
},
copyGitUrl(){
wx.setClipboardData({
data: this.data.gitee_url
})
},
navTo({name, type}){
console.log({name, type})
let routes = JSON.parse(JSON.stringify(this.data.routes));
routes.push({name, type});
let api_name = type=='tree'?"repository":"file_content";
let path = this.getCurrentPath(routes);
if(type=='blob'){
let match = name.match(/.*(\.[^\.]*$)/)
if(match&&[".jpg", ".jpeg", ".png", ".bmp", ".gif", ".svg"].indexOf(match[1])!=-1){
let content = `![${name}](${this.data.base}/${path})`;
this.setData({content, routes})
return;
}
}
this.api("shixuns."+api_name)({path})
.then(res=>{
if(type!='tree'){
if(!name.endsWith(".md")){
res.content = "```\n"+res.content+"\n```"
}
wx.showLoading({
title: '加载中'
})
}
console.log(res);
this.setData({...res, routes},wx.hideLoading);
}).catch(e=>{
app.showError(e);
})
},
getCurrentPath(routes){
routes = routes?routes:this.data.routes;
return routes.map(i=>i.name).join("/")
},
navBack({level, delta}){
if(delta)
level = this.data.routes.length - delta;
let routes = this.data.routes.slice(0, level);
if(level>0&&routes[routes.length-1].type!="tree")//点击的是当前文件的路径,不执行
return;
let api_name = "repository";
let path = this.getCurrentPath(routes);
this.api("shixuns."+api_name)({path})
.then(res=>{
this.setData({...res, routes, content:""});
}).catch(e=>{
app.showError(e);
})
},
onTapNavBack(){
this.navBack({delta:1})
},
onTapFile(e){
console.log(e);
let {currentTarget:{dataset:{name, type}}} = e;
this.navTo({name, type});
},
onTapRoute(e){
let {currentTarget:{dataset:{level}}} = e;
this.navBack({level});
},
onLoad(){
wx.showLoading({title:"加载中"});
app.cloudapi("reportPageHistory")({
page: this.route,
options: this.options,
status: 200,
scene: app.globalData.scene
})
let testAccount = global.accountManager.testAccount;
api("accounts.login")(testAccount).then(res=>{
this.api("shixuns.repository")().then(res=>{
console.log(res);
this.setData(res);
}).finally(()=>{
wx.hideLoading();
})
}).catch(e=>{
wx.showToast({
title: '获取失败',icon:"none"
});
wx.hideLoading();
})
},
})