diff --git a/js/api.js b/js/api.js index bce36ff..faafe34 100644 --- a/js/api.js +++ b/js/api.js @@ -8,6 +8,21 @@ async function unknownResponse(resp) { return new Error(`Server sent unknown error: ${await resp.text()} (${resp.status})`); } } +function buildQuery(options) { + let query; + options.forEach(element => { + if (element[1] !== undefined) { + if (element[1] instanceof Date) { + element[1] = element[1].getSeconds(); + } + else if (element[1] instanceof Array) { + element[1] = JSON.stringify(element[1]); + } + query.push(`${element[0]}&${element[1]}`); + } + }); + return query.join("="); +} async function login(username, password) { let result = await fetch(`${prefix}/api/login`, { method: "POST", @@ -23,7 +38,8 @@ async function login(username, password) { } } async function authors(name, limit) { - let result = await fetch(`${prefix}/api/authors?name=${name}&limit=${limit}`); + let query = [["name", name], ["limit", limit]]; + let result = await fetch(`${prefix}/api/authors?${buildQuery(query)}`); if (result.status == 200) { return await result.json(); } @@ -32,7 +48,8 @@ async function authors(name, limit) { } } async function tags(name, limit) { - let result = await fetch(`${prefix}/api/tags?name=${name}&limit=${limit}`); + let query = [["name", name], ["limit", limit]]; + let result = await fetch(`${prefix}/api/tags?${buildQuery(query)}`); if (result.status == 200) { return await result.json(); } @@ -41,7 +58,8 @@ async function tags(name, limit) { } } async function recent(limit = 20) { - let result = await fetch(`${prefix}/api/recent?limit=${limit}`); + let query = [["limit", limit]]; + let result = await fetch(`${prefix}/api/recent?limit=${buildQuery(query)}`); if (result.status == 200) { return await result.json(); } @@ -49,8 +67,9 @@ async function recent(limit = 20) { throw await unknownResponse(result); } } -async function search(query) { - let result = await fetch(`${prefix}/api/search?q=${query.query}&from=${query.from.getSeconds()}&to=${query.to.getSeconds()}&authors=${JSON.stringify(query.authors)}&tags=${JSON.stringify(query.tags)}&limit=${query.limit}`); +async function search(q) { + let query = [["q", q.query], ["from", q.from], ["to", q.to], ["authors", q.authors], ["tags", q.tags], ["limit", q.limit]]; + let result = await fetch(`${prefix}/api/search?${buildQuery(query)}`); if (result.status == 200) { return await result.json(); } @@ -110,7 +129,8 @@ async function deleteArticle(id) { } } async function getAssets(name, limit = 20) { - let result = await fetch(`${prefix}/api/assets?q=${name}&limit=${limit}`, { + let query = [["q", name], ["limit", limit]]; + let result = await fetch(`${prefix}/api/assets?${buildQuery(query)}`, { method: "GET", }); switch (result.status) { diff --git a/js/api.js.map b/js/api.js.map index b4cc400..2f49499 100644 --- a/js/api.js.map +++ b/js/api.js.map @@ -1 +1 @@ -{"version":3,"file":"api.js","sourceRoot":"","sources":["api.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"api.js","sourceRoot":"","sources":["api.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,GAAG,EAAE,CAAA;AAGjB,KAAK,UAAU,eAAe,CAAC,IAAc;IACzC,IAAI,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAA;IAC5B,IAAI;QACA,OAAO,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;KAC1D;IAAC,OAAO,KAAK,EAAE;QACZ,OAAO,IAAI,KAAK,CAAC,8BAA8B,MAAM,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;KACvF;AACL,CAAC;AAED,SAAS,UAAU,CAAC,OAAgB;IAChC,IAAI,KAAe,CAAA;IACnB,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;QACtB,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;YAC1B,IAAI,OAAO,CAAC,CAAC,CAAC,YAAY,IAAI,EAAE;gBAC5B,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAA;aACvC;iBAAM,IAAI,OAAO,CAAC,CAAC,CAAC,YAAY,KAAK,EAAE;gBACpC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;aAC1C;YACD,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;SAC5C;IACL,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC1B,CAAC;AA0BD,KAAK,UAAU,KAAK,CAAC,QAAgB,EAAE,QAAgB;IACnD,IAAI,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,YAAY,EAAE;QAC5C,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAC,CAAC;KACrE,CAAC,CAAA;IACF,QAAQ,MAAM,CAAC,MAAM,EAAE;QACnB,KAAK,GAAG;YACJ,OAAM;QACV,KAAK,GAAG;YACJ,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;QACrD;YACI,MAAM,MAAM,eAAe,CAAC,MAAM,CAAC,CAAA;KAC1C;AACL,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,IAAa,EAAE,KAAc;IAChD,IAAI,KAAK,GAAG,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAA;IAE9C,IAAI,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,gBAAgB,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IACtE,IAAI,MAAM,CAAC,MAAM,IAAI,GAAG,EAAE;QACtB,OAAO,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;KAC7B;SAAM;QACH,MAAM,MAAM,eAAe,CAAC,MAAM,CAAC,CAAA;KACtC;AACL,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,IAAa,EAAE,KAAc;IAC7C,IAAI,KAAK,GAAG,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAA;IAE9C,IAAI,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,aAAa,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IACnE,IAAI,MAAM,CAAC,MAAM,IAAI,GAAG,EAAE;QACtB,OAAO,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;KAC7B;SAAM;QACH,MAAM,MAAM,eAAe,CAAC,MAAM,CAAC,CAAA;KACtC;AACL,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,QAAgB,EAAE;IACpC,IAAI,KAAK,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAA;IAE9B,IAAI,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,qBAAqB,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAC3E,IAAI,MAAM,CAAC,MAAM,IAAI,GAAG,EAAE;QACtB,OAAO,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;KAC7B;SAAM;QACH,MAAM,MAAM,eAAe,CAAC,MAAM,CAAC,CAAA;KACtC;AACL,CAAC;AAWD,KAAK,UAAU,MAAM,CAAC,CAAc;IAChC,IAAI,KAAK,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;IAE1H,IAAI,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,eAAe,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IACrE,IAAI,MAAM,CAAC,MAAM,IAAI,GAAG,EAAE;QACtB,OAAO,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;KAC7B;SAAM;QACH,MAAM,eAAe,CAAC,MAAM,CAAC,CAAA;KAChC;AACL,CAAC;AAYD,KAAK,UAAU,aAAa,CAAC,OAA6B;IACtD,IAAI,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,cAAc,EAAE;QAC9C,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;KAChC,CAAC,CAAA;IACF,QAAQ,MAAM,CAAC,MAAM,EAAE;QACnB,KAAK,GAAG;YACJ,OAAO,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;QAC9B,KAAK,GAAG;YACJ,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA;QACrC,KAAK,GAAG;YACJ,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAA;QACpE;YACI,MAAM,MAAM,eAAe,CAAC,MAAM,CAAC,CAAA;KAC1C;AACL,CAAC;AAaD,KAAK,UAAU,WAAW,CAAC,OAA2B;IAClD,IAAI,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,cAAc,EAAE;QAC9C,MAAM,EAAE,OAAO;QACf,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;KAChC,CAAC,CAAA;IACF,IAAI,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;IAE9B,QAAQ,MAAM,CAAC,MAAM,EAAE;QACnB,KAAK,GAAG;YACJ,OAAO,IAAI,CAAA;QACf,KAAK,GAAG;YACJ,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA;QACrC,KAAK,GAAG;YACJ,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;QAC7C,KAAK,GAAG;YACJ,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAA;QACpE;YACI,MAAM,MAAM,eAAe,CAAC,MAAM,CAAC,CAAA;KAC1C;AACL,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,EAAU;IACnC,IAAI,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,cAAc,EAAE;QAC9C,MAAM,EAAE,QAAQ;QAChB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAC,IAAI,EAAE,EAAE,EAAC,CAAC;KACnC,CAAC,CAAA;IACF,QAAQ,MAAM,CAAC,MAAM,EAAE;QACnB,KAAK,GAAG;YACJ,OAAM;QACV,KAAK,GAAG;YACJ,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA;QACrC,KAAK,GAAG;YACJ,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;QAC7C;YACI,MAAM,MAAM,eAAe,CAAC,MAAM,CAAC,CAAA;KAC1C;AACL,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,IAAa,EAAE,QAAgB,EAAE;IACtD,IAAI,KAAK,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAA;IAE3C,IAAI,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,eAAe,UAAU,CAAC,KAAK,CAAC,EAAE,EAAE;QAClE,MAAM,EAAE,KAAK;KAChB,CAAC,CAAA;IACF,QAAQ,MAAM,CAAC,MAAM,EAAE;QACnB,KAAK,GAAG;YACJ,OAAO,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;QAC9B,KAAK,GAAG;YACJ,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA;QACrC;YACI,MAAM,MAAM,eAAe,CAAC,MAAM,CAAC,CAAA;KAC1C;AACL,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,IAAY,EAAE,OAAe;IACjD,IAAI,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,aAAa,EAAE;QAC7C,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACjB,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,OAAO;SACrB,CAAC;KACL,CAAC,CAAA;IACF,QAAQ,MAAM,CAAC,MAAM,EAAE;QACnB,KAAK,GAAG;YACJ,OAAO,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;QAC9B,KAAK,GAAG;YACJ,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA;QACrC,KAAK,GAAG;YACJ,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAA;QACjE;YACI,MAAM,MAAM,eAAe,CAAC,MAAM,CAAC,CAAA;KAC1C;AACL,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,EAAU;IACjC,IAAI,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,aAAa,EAAE;QAC7C,MAAM,EAAE,QAAQ;QAChB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAC,IAAI,EAAE,EAAE,EAAC,CAAC;KACnC,CAAC,CAAA;IACF,QAAQ,MAAM,CAAC,MAAM,EAAE;QACnB,KAAK,GAAG;YACJ,OAAM;QACV,KAAK,GAAG;YACJ,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA;QACrC,KAAK,GAAG;YACJ,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;QAC3D;YACI,MAAM,MAAM,eAAe,CAAC,MAAM,CAAC,CAAA;KAC1C;AACL,CAAC"} \ No newline at end of file diff --git a/js/api.ts b/js/api.ts index bbe1821..e6beb00 100644 --- a/js/api.ts +++ b/js/api.ts @@ -10,6 +10,21 @@ async function unknownResponse(resp: Response): Promise { } } +function buildQuery(options: any[][]): string { + let query: string[] + options.forEach(element => { + if (element[1] !== undefined) { + if (element[1] instanceof Date) { + element[1] = element[1].getSeconds() + } else if (element[1] instanceof Array) { + element[1] = JSON.stringify(element[1]) + } + query.push(`${element[0]}&${element[1]}`) + } + }); + return query.join("=") +} + interface Author { id: number, name: string, @@ -50,7 +65,9 @@ async function login(username: string, password: string): Promise { } async function authors(name?: string, limit?: number): Promise { - let result = await fetch(`${prefix}/api/authors?name=${name}&limit=${limit}`) + let query = [["name", name], ["limit", limit]] + + let result = await fetch(`${prefix}/api/authors?${buildQuery(query)}`) if (result.status == 200) { return await result.json() } else { @@ -59,7 +76,9 @@ async function authors(name?: string, limit?: number): Promise { } async function tags(name?: string, limit?: number): Promise { - let result = await fetch(`${prefix}/api/tags?name=${name}&limit=${limit}`) + let query = [["name", name], ["limit", limit]] + + let result = await fetch(`${prefix}/api/tags?${buildQuery(query)}`) if (result.status == 200) { return await result.json() } else { @@ -68,7 +87,9 @@ async function tags(name?: string, limit?: number): Promise { } async function recent(limit: number = 20): Promise { - let result = await fetch(`${prefix}/api/recent?limit=${limit}`) + let query = [["limit", limit]] + + let result = await fetch(`${prefix}/api/recent?limit=${buildQuery(query)}`) if (result.status == 200) { return await result.json() } else { @@ -85,8 +106,10 @@ interface SearchQuery { limit?: number } -async function search(query: SearchQuery): Promise { - let result = await fetch(`${prefix}/api/search?q=${query.query}&from=${query.from.getSeconds()}&to=${query.to.getSeconds()}&authors=${JSON.stringify(query.authors)}&tags=${JSON.stringify(query.tags)}&limit=${query.limit}`) +async function search(q: SearchQuery): Promise { + let query = [["q", q.query], ["from", q.from], ["to", q.to], ["authors", q.authors], ["tags", q.tags], ["limit", q.limit]] + + let result = await fetch(`${prefix}/api/search?${buildQuery(query)}`) if (result.status == 200) { return await result.json() } else { @@ -171,7 +194,9 @@ async function deleteArticle(id: number): Promise { } async function getAssets(name?: string, limit: number = 20): Promise { - let result = await fetch(`${prefix}/api/assets?q=${name}&limit=${limit}`, { + let query = [["q", name], ["limit", limit]] + + let result = await fetch(`${prefix}/api/assets?${buildQuery(query)}`, { method: "GET", }) switch (result.status) {