UNPKG

ebt-vue3

Version:

Vue3 Library for SuttaCentral Voice EBT-Sites

798 lines (742 loc) • 28.5 kB
import { SuttaRef } from 'scv-esm/main.mjs'; import { default as EbtCard } from "../src/ebt-card.mjs"; import { default as EbtConfig } from "../ebt-config.mjs"; import { logger } from "log-instance/index.mjs"; import should from "should"; logger.logLevel = 'warn'; (typeof describe === 'function') && describe("ebt-card.mjs", function () { it("default ctor", async () => { let card1 = new EbtCard(); let card2 = new EbtCard(); let defaultProps = { context: EbtCard.CONTEXT_WIKI, location: [], isOpen: false, data: undefined, } should(card1.id.length).equal(12); should(card1.tab1Id.length).equal(17); should(card1.autofocusId.length).equal(22); should(card1).properties(defaultProps); // there is only one wiki card should(card2.id).equal(card1.id); should(card2.autofocusId).equal(card1.autofocusId); should(card2.tab1Id).equal(card1.tab1Id); should(card2).properties(defaultProps); }); it("constants", ()=>{ should(EbtCard.CONTEXT_PALI).equal('pali'); should(EbtCard.CONTEXT_DEBUG).equal('debug'); should(EbtCard.CONTEXT_WIKI).equal('wiki'); should(EbtCard.CONTEXT_SEARCH).equal('search'); should(EbtCard.CONTEXT_SUTTA).equal('sutta'); should(EbtCard.CONTEXT_PLAY).equal('play'); }); it("custom ctor", async () => { let id = 'test-id'; let context = 'search'; let location = 'test-location'; let data = "test-data"; let langTrans = "test-lang"; let card1 = new EbtCard({id, context, location, data, langTrans}); should(card1).properties({id, context, location: [location,langTrans], data}); let card2 = new EbtCard(Object.assign({}, card1)); should(card2).properties(card1); }); it("debugString", ()=>{ let id = 'test-id'; let context = 'search'; let location = ['a','b']; let data = "test-data"; let langTrans = "test-lang"; let card = new EbtCard({id, context, location, data, langTrans}); should(card.debugString).equal(`${id}+${context}`); card.isOpen = false; should(card.debugString).equal(`${id}-${context}`); }); it("custom ctor sutta/thig1.1/pt", ()=>{ let id = 'test-id'; let context = 'sutta'; let location = ['thig1.1', 'pt']; let data = "test-data"; let author = 'laera-quaresma'; let langTrans = 'en'; let card1 = new EbtCard({id, context, location, data, langTrans}); should(card1).properties({id, context, location, data}); let card2 = new EbtCard(Object.assign({}, card1)); should(card2).properties(card1); }); it("icon", async() => { let card = new EbtCard(); should(card.icon).equal("mdi-wikipedia"); let cardWiki = new EbtCard({ context: EbtCard.CONTEXT_WIKI}); should(cardWiki.icon).equal("mdi-wikipedia"); }); it("stringify", async() => { let card1 = new EbtCard(); let json = JSON.stringify(card1); let card2 = new EbtCard(JSON.parse(json)); should(card2).properties(card1); }); it("matchPath() wiki context", async() => { let context = EbtCard.CONTEXT_WIKI; let card0 = new EbtCard({ context: "" }); let card1 = new EbtCard({ context, }); let card2 = new EbtCard({ context, location:["a","b c"], }); let noPaths = [ "/", "/search/a", "#/search/a", ]; noPaths.forEach(path=>{ //TODO should(card0.matchPath(path)).equal(false); //TODO should(card1.matchPath(path)).equal(false); //TODO should(card2.matchPath(path)).equal(false); }); let cardPaths = [ "/wiki/a", "#/wiki/a", "/wiki/a/b c", "/Wiki/a/b%20c", "/WIKI/A/B%20C", "#/WIKI/A/B%20C", "/WIKI/A/B%20C/", "#/WIKI/A/B%20C/", ]; cardPaths.forEach(path => { should(card0.matchPath(path)).equal(true); should(card1.matchPath(path)).equal(true); should(card2.matchPath(path)).equal(true); }); }); it("matchPath() search context", async() => { let langTrans = 'test-lang'; let card1 = new EbtCard({ context: "search", langTrans}); let card2 = new EbtCard({ context: "SEARCH", location: ["A b"], langTrans}); should.deepEqual(card2.location, ['A b', langTrans]); let noPaths = [ "/", "#/", "/search/nothing", "#/search/nothing", "/asdf", "search", "search/a", `search/x/${langTrans}`, ]; noPaths.forEach(path=>{ should(card1.matchPath(path)).equal(false); should(card2.matchPath(path)).equal(false); }); let card1Paths = [ {path: '/search//', defaultLang: langTrans}, {path: '#/search//', defaultLang: langTrans}, `/search//${langTrans}`, `#/search//${langTrans}`, ]; card1Paths.forEach(path=>{ should(card1.matchPath(path)).equal(true); should(card2.matchPath(path)).equal(false); }); let card2Paths = [ {path: '/search/a%20b', defaultLang: langTrans}, `/search/a%20b`, `/search/a%20b/${langTrans}`, `#/search/a%20b/${langTrans}/`, `#/search/a%20b`, `/SEARCH/A%20B/${langTrans.toUpperCase()}`, `#/SEARCH/A%20B/${langTrans.toUpperCase()}/`, ]; card2Paths.forEach(path=>{ should(card1.matchPath(path)).equal(false); should(card2.matchPath(path)).equal(true); }); }); it("matchPath() sutta context", async() => { let locSutta = "sn35.1"; let locSegA = `${locSutta}:1.10`; let locSegB = `${locSutta}:2.3`; let langTrans = 'de'; let context = 'sutta'; let author = 'sabbamitta'; let notSutta = "thig1.1"; let notLang = 'en'; let notAuthor = 'sujato'; // create fully specified cards let cardSutta = new EbtCard({ context, location: [locSutta, langTrans, author]}); let cardSegA = new EbtCard({ context, location: [locSegA, langTrans, author]}); let cardSegB = new EbtCard({ context, location: [locSegB, langTrans, author]}); let dbg = 0; if (dbg) { //let path = `/sutta/${locSutta}`; //should(cardSegA.matchPath(path)).equal(false); } // not matches let noPaths = [ `sutta/thig1.1`, `/wiki`, `/search/${locSutta}`, `/search/${locSutta}/${langTrans}`, `/search/${locSutta}/${langTrans}/${author}`, `/sutta/${notSutta}`, `/sutta/${notSutta}/${langTrans}`, `/sutta/${notSutta}/${langTrans}/${author}`, `/sutta/${locSutta}`, // defaultLang is pli `/sutta/${locSegA}`, // defaultLang is pli `/sutta/${locSegB}`, // defaultLang is pli `/sutta/${locSutta}/${notLang}`, `/sutta/${locSutta}/${notLang}/${notAuthor}`, `/sutta/${locSutta}/${notLang}/${author}`, `/sutta/${locSutta}/${langTrans}/${notAuthor}`, `/sutta/${locSegA}/${notLang}`, `/sutta/${locSegA}/${notLang}/${notAuthor}`, `/sutta/${locSegA}/${notLang}/${author}`, `/sutta/${locSegA}/${langTrans}/${notAuthor}`, `sutta/mn1`, `/sutta`, ]; noPaths.forEach(path=>{ should(cardSutta.matchPath(path)).equal(false); should(cardSegA.matchPath(path)).equal(false); should(cardSegB.matchPath(path)).equal(false); }); // match without segment number let suttaPaths = [ { path: `/sutta/${locSutta}`, defaultLang: langTrans }, { path: `#/sutta/${locSutta}`, defaultLang: langTrans }, `/sutta/${locSutta}/${langTrans}`, `#/sutta/${locSutta}/${langTrans}`, `/sutta/${locSutta}/${langTrans}/${author}`, `#/sutta/${locSutta}/${langTrans}/${author}`, ]; suttaPaths.forEach(path => { should(cardSutta.matchPath(path)).equal(true); should(cardSegA.matchPath(path)).equal(true); should(cardSegB.matchPath(path)).equal(true); }); // match with segment number let segPaths = [ { path: `#/sutta/${locSegA}`, defaultLang: langTrans}, { path: `/sutta/${locSegA}`, defaultLang: langTrans}, { path: `/sutta/${locSegB}`, defaultLang: langTrans}, `/sutta/${locSegA}/${langTrans}`, `#/sutta/${locSegA}/${langTrans}`, `/sutta/${locSegA}/${langTrans}/${author}`, `#/sutta/${locSegA}/${langTrans}/${author}`, ]; segPaths.forEach(path => { should(cardSutta.matchPath(path)).equal(true); should(cardSegA.matchPath(path)).equal(true); should(cardSegB.matchPath(path)).equal(true); }); }); it("pathToCard() content", ()=>{ let cards = []; let { homePath } = EbtConfig; let nAdd = 0; let langTrans = "test-lang"; let addCard = (opts) => { let card = new EbtCard(Object.assign({langTrans},opts)); //console.trace(`added card`, card); cards.push(card); nAdd++ return card; } let cardHome = EbtCard.pathToCard({path:homePath, cards, addCard}); should(cardHome.context).equal(EbtCard.CONTEXT_WIKI); should.deepEqual(cards, [cardHome]); let cardHome2 = EbtCard.pathToCard({path:homePath, cards, addCard}); should.deepEqual(cards, [cardHome]); should.deepEqual(cardHome.location, homePath.split('/').slice(2)); // since the home card is a singleton, the location must be updated let childPath = `#/${EbtCard.CONTEXT_WIKI}/x/y/z`; let cardHome3 = EbtCard.pathToCard({path:childPath, cards, addCard}); should.deepEqual(cards, [cardHome]); should.deepEqual(cardHome.location, childPath.split('/').slice(2)); }); it("pathToCard() search", ()=>{ let cards = []; let nAdd = 0; let langTrans = "test-lang"; let addCard = (opts) => { let card = new EbtCard(Object.assign({langTrans},opts)); //console.trace(`added card`, card); cards.push(card); nAdd++ return card; } let cardEmpty = EbtCard.pathToCard({path:'/', cards, addCard}); should.deepEqual(cards, []); let cardEmpty2 = EbtCard.pathToCard({path:'/', cards, addCard}); should.deepEqual(cards, []); let cardHome = EbtCard.pathToCard({path:'/wiki', cards, addCard}); should.deepEqual(cards, [cardHome]); let cardHome2 = EbtCard.pathToCard({path:'/wiki', cards, addCard}); should.deepEqual(cards, [cardHome]); let cardSearch = EbtCard.pathToCard( {path:'/search', cards, addCard}); should.deepEqual(cards, [cardHome, cardSearch]); let cardSearch2 = EbtCard.pathToCard({ path:'/search', cards, addCard}); should.deepEqual(cards, [cardHome, cardSearch]); let cardSearchAB = EbtCard.pathToCard( {path:'/search/a%20b', cards, addCard}); should.deepEqual(cards, [cardHome, cardSearch, cardSearchAB]); let cardSearchAB2 = EbtCard.pathToCard( {path:'/search/a%20b', cards, addCard}); should.deepEqual(cards, [cardHome, cardSearch, cardSearchAB]); let cardSearchABC = EbtCard.pathToCard( {path:'/search/a%20b/c', cards, addCard}); should.deepEqual(cards, [cardHome, cardSearch, cardSearchAB, cardSearchABC]); let cardSearchAB3 = EbtCard.pathToCard( {path:'/search/a%20b/c', cards, addCard}); should.deepEqual(cards, [cardHome, cardSearch, cardSearchAB, cardSearchABC]); let cardSearchABC2 = EbtCard.pathToCard( {path:'/search/a%20b/c', cards, addCard}); should.deepEqual(cards, [cardHome, cardSearch, cardSearchAB, cardSearchABC]); should(nAdd).equal(4); }); it("pathToCard() sutta", ()=>{ let cards = []; let nAdd = 0; let langTrans = "test-lang"; let defaultLang = langTrans; let author = "test-author"; let addCard = (opts) => { let card = new EbtCard(Object.assign({langTrans, author},opts)); //console.trace(`added card`, card); cards.push(card); nAdd++ return card; } let cardSN42_11 = EbtCard.pathToCard({ path:'/sutta/sn42.11', cards, addCard, defaultLang}); should.deepEqual(cards, [cardSN42_11]); let cardSN42_11$2 = EbtCard.pathToCard({ path:'/sutta/sn42.11', cards, addCard, defaultLang}); should.deepEqual(cards, [cardSN42_11]); let cardSN42_11_1_10 = EbtCard.pathToCard({ path:'/sutta/sn42.11:1.10', cards, addCard, defaultLang}); should.deepEqual(cards, [cardSN42_11]); should(nAdd).equal(1); }); it("pathToCard() /#", ()=>{ let cards = []; let nAdd = 0; let langTrans = "test-lang"; let defaultLang = langTrans; let author = "test-author"; let addCard = (opts) => { let card = new EbtCard(Object.assign({langTrans, author},opts)); //console.trace(`added card`, card); cards.push(card); nAdd++ return card; } let cardSN42_11 = EbtCard.pathToCard({ path:'/sutta/sn42.11', cards, addCard, defaultLang}); should.deepEqual(cards, [cardSN42_11]); let card = EbtCard.pathToCard({ path:'/#/sutta/sn42.11', cards, addCard, defaultLang}); should.deepEqual(cards, [cardSN42_11]); }); it("routeHash() sutta", ()=>{ let context = 'sutta'; let suid = 'sn34.1'; let suidSeg = `${suid}:2.3`; let suidSeg2 = `${suid}:4.1`; let langTrans = "de"; let author = "sabbamitta"; let cardSuid = new EbtCard({context, location:[suid, langTrans, author]}); let cardSuidSeg = new EbtCard({context, location:[suidSeg, langTrans, author]}); // no arguments uses existing card location should(cardSuid.routeHash()).equal(`#/${context}/${suid}/${langTrans}/${author}`); should(cardSuidSeg.routeHash()) .equal(`#/${context}/${suidSeg}/${langTrans}/${author}`); // update location segment id should(cardSuid.routeHash(`/${context}/${suidSeg2}`)) .equal(`#/${context}/${suidSeg2}/${langTrans}/${author}`); should.deepEqual(cardSuid.location, [suidSeg2, langTrans, author]); should(cardSuidSeg.routeHash(`/${context}/${suidSeg2}`)) .equal(`#/${context}/${suidSeg2}/${langTrans}/${author}`); should.deepEqual(cardSuidSeg.location, [suidSeg2, langTrans, author]); // remove segment id should(cardSuidSeg.routeHash(`/${context}/${suid}`)) .equal(`#/${context}/${suid}/${langTrans}/${author}`); should.deepEqual(cardSuidSeg.location, [suid, langTrans, author]); }); it('incrementLocation() sutta', ()=>{ let context = 'sutta'; let suid = 'sn34.1'; let scids = [ '1.0', '1.1', '2.1'].map(id=>`${suid}:${id}`); let segments = scids.map(scid => ({scid})); let langTrans = "de"; let author = "sabbamitta"; let location = [ segments[0].scid, langTrans, author ]; let card = new EbtCard({context, location}); // forward should.deepEqual(card.location, [ scids[0], langTrans, author, ]); should.deepEqual(card.incrementLocation({segments, delta:1}), { location: [ scids[1], langTrans, author, ], iSegment: 1, }); should.deepEqual(card.location, [ scids[1], langTrans, author, ]); should.deepEqual(card.incrementLocation({segments}), { location: [ scids[2], langTrans, author, ], iSegment: 2, }); should.deepEqual(card.incrementLocation({segments}), null); should.deepEqual(card.location, [ scids[2], langTrans, author, ]); // backward should.deepEqual(card.incrementLocation({segments, delta:-1}), { location: [ scids[1], langTrans, author, ], iSegment: 1, }); should.deepEqual(card.location, [ scids[1], langTrans, author, ]); should.deepEqual(card.incrementLocation({segments, delta:-1}), { location: [ scids[0], langTrans, author, ], iSegment: 0, }); should.deepEqual(card.location, [ scids[0], langTrans, author, ]); should.deepEqual(card.incrementLocation({segments, delta:-1}), null); should.deepEqual(card.location, [ scids[0], langTrans, author, ]); }); it('incrementLocation() ranged sutta', ()=>{ let context = 'sutta'; let suid = 'sn34.1'; let scids = [ 'dhp1:1.0', 'dhp1:1.1', 'dhp2:1.0', 'dhp2:1.1', ]; let segments = scids.map(scid => ({scid})); let langTrans = "en"; let author = "sujato"; let location = [ segments[0].scid, langTrans, author ]; let card = new EbtCard({context, location}); // forward should.deepEqual(card.location, [ scids[0], langTrans, author, ]); should.deepEqual(card.incrementLocation({segments, delta:1}), { location: [ scids[1], langTrans, author, ], iSegment: 1, }); should.deepEqual(card.location, [ scids[1], langTrans, author, ]); should.deepEqual(card.incrementLocation({segments}), { location: [ scids[2], langTrans, author, ], iSegment: 2, }); should.deepEqual(card.location, [ scids[2], langTrans, author, ]); should.deepEqual(card.incrementLocation({segments}), { location: [ scids[3], langTrans, author, ], iSegment: 3, }); should.deepEqual(card.incrementLocation({segments}), null); should.deepEqual(card.location, [ scids[3], langTrans, author, ]); // backward should.deepEqual(card.incrementLocation({segments, delta:-1}), { location: [ scids[2], langTrans, author, ], iSegment: 2, }); should.deepEqual(card.incrementLocation({segments, delta:-1}), { location: [ scids[1], langTrans, author, ], iSegment: 1, }); should.deepEqual(card.location, [ scids[1], langTrans, author, ]); should.deepEqual(card.incrementLocation({segments, delta:-1}), { location: [ scids[0], langTrans, author, ], iSegment: 0, }); should.deepEqual(card.location, [ scids[0], langTrans, author, ]); should.deepEqual(card.incrementLocation({segments, delta:-1}), null); should.deepEqual(card.location, [ scids[0], langTrans, author, ]); }); it("setLocation() sutta", ()=>{ let segments = [ {scid:"test:1"}, {scid:"test:2"}, {scid:"test:3"}, ]; let location = ['test:1', 'test-lang', 'test-author']; let context = EbtCard.CONTEXT_SUTTA; let card = new EbtCard({context, location}); // already at first location should(card.setLocation({segments, delta:0})).equal(null); // last location should.deepEqual(card.setLocation({segments, delta:-1}), { iSegment: 2, location: [ 'test:3', 'test-lang', 'test-author'], }); // first location should.deepEqual(card.setLocation({segments, delta:0}), { iSegment: 0, location: [ 'test:1', 'test-lang', 'test-author'], }); // second segment from start should.deepEqual(card.setLocation({segments, delta:1}), { iSegment: 1, location: [ 'test:2', 'test-lang', 'test-author'], }); // third segment from end should.deepEqual(card.setLocation({segments, delta:-3}), { iSegment: 0, location: [ 'test:1', 'test-lang', 'test-author'], }); // same location card.setLocation({segments, delta:0}); should(card.setLocation({segments, delta:0})).equal(null); card.setLocation({segments, delta:1}); should(card.setLocation({segments, delta:1})).equal(null); card.setLocation({segments, delta:-1}); should(card.setLocation({segments, delta:-1})).equal(null); }); it("setLocation() play", ()=>{ let segments = [ {scid:"test:1"}, {scid:"test:2"}, {scid:"test:3"}, ]; let locSuffix = [ 'test-lang', 'test-author', 'test-pat' ]; let location = ['test:1', ...locSuffix ]; let context = EbtCard.CONTEXT_PLAY; let card = new EbtCard({context, location}); // already at first location should(card.setLocation({segments, delta:0})).equal(null); // last location let iSegment = 2; should.deepEqual(card.setLocation({segments, delta:-1}), { iSegment, location: [ `test:${iSegment+1}`, ...locSuffix ], }); // first location iSegment = 0; should.deepEqual(card.setLocation({segments, delta:0}), { iSegment, location: [ `test:${iSegment+1}`, ...locSuffix ], }); // second segment from start iSegment = 1; should.deepEqual(card.setLocation({segments, delta:1}), { iSegment, location: [ `test:${iSegment+1}`, ...locSuffix ], }); // third segment from end should.deepEqual(card.setLocation({segments, delta:-3}), { iSegment: 0, location, }); // same location card.setLocation({segments, delta:0}); should(card.setLocation({segments, delta:0})).equal(null); card.setLocation({segments, delta:1}); should(card.setLocation({segments, delta:1})).equal(null); card.setLocation({segments, delta:-1}); should(card.setLocation({segments, delta:-1})).equal(null); }); it("groupStartIndex() play", ()=>{ let segments = [ 'test:1.1', 'test:1.2', 'test:2.1', 'test:2.2' ].map(scid=>({scid})); let locationSuffix = ['test-lang', 'test-author', 'test-pat']; let location = [ segments[0].scid, ...locationSuffix ]; let context = EbtCard.CONTEXT_PLAY; let card = new EbtCard({context, location}); should(card.groupStartIndex({segments, iSegCur:0})).equal(0); should(card.groupStartIndex({segments, iSegCur:1})).equal(0); should(card.groupStartIndex({segments, iSegCur:2})).equal(2); should(card.groupStartIndex({segments, iSegCur:3})).equal(2); }); it("groupStartIndex() sutta", ()=>{ let segments = [ 'test:1.1', 'test:1.2', 'test:2.1', 'test:2.2' ].map(scid=>({scid})); let locationSuffix = ['test-lang', 'test-author']; let location = [ segments[0].scid, ...locationSuffix ]; let context = EbtCard.CONTEXT_SUTTA; let card = new EbtCard({context, location}); should(card.groupStartIndex({segments, iSegCur:0})).equal(0); should(card.groupStartIndex({segments, iSegCur:1})).equal(0); should(card.groupStartIndex({segments, iSegCur:2})).equal(2); should(card.groupStartIndex({segments, iSegCur:3})).equal(2); }); it("incrementGroup() play", ()=>{ let segments = [ 'test:1.1', 'test10.12:1.2', 'test10.12:2.1', 'test10.12:2.2' ].map(scid=>({scid})); let locationSuffix = ['test-lang', 'test-author', 'test-pat']; let location = [ segments[0].scid, ...locationSuffix ]; let context = EbtCard.CONTEXT_PLAY; let card = new EbtCard({context, location}); // Backward card.location[0] = segments[3].scid; should.deepEqual(card.incrementGroup({segments, delta:-1}), { iSegment: 2, location: [segments[2].scid, ...locationSuffix], }); should(card.location[0]).equal(segments[2].scid); should.deepEqual(card.incrementGroup({segments, delta:-1}), { iSegment: 0, location: [segments[0].scid, ...locationSuffix], }); should(card.location[0]).equal(segments[0].scid); should(card.incrementGroup({segments, delta:-1})).equal(null); // Forward card.location[0] = segments[0].scid; should.deepEqual(card.incrementGroup({segments, delta:1}), { iSegment: 2, location: [segments[2].scid, ...locationSuffix], }); should(card.location[0]).equal(segments[2].scid); should.deepEqual(card.incrementGroup({segments, delta:1}), null); should(card.location[0]).equal(segments[2].scid); }); it("incrementGroup() sutta", ()=>{ let segments = [ 'test:1.1', 'test10.12:1.2', 'test10.12:2.1', 'test10.12:2.2' ].map(scid=>({scid})); let locationSuffix = ['test-lang', 'test-author']; let location = [ segments[0].scid, ...locationSuffix ]; let context = EbtCard.CONTEXT_SUTTA; let card = new EbtCard({context, location}); // Backward card.location[0] = segments[3].scid; should.deepEqual(card.incrementGroup({segments, delta:-1}), { iSegment: 2, location: [segments[2].scid, ...locationSuffix], }); should(card.location[0]).equal(segments[2].scid); should.deepEqual(card.incrementGroup({segments, delta:-1}), { iSegment: 0, location: [segments[0].scid, ...locationSuffix], }); should(card.location[0]).equal(segments[0].scid); should(card.incrementGroup({segments, delta:-1})).equal(null); // Forward card.location[0] = segments[0].scid; should.deepEqual(card.incrementGroup({segments, delta:1}), { iSegment: 2, location: [segments[2].scid, ...locationSuffix], }); should(card.location[0]).equal(segments[2].scid); should.deepEqual(card.incrementGroup({segments, delta:1}), null); should(card.location[0]).equal(segments[2].scid); }); it("scidToDocUrl() thig1.1:1.2/en/soma", ()=>{ let context = EbtCard.CONTEXT_SUTTA; let segnum = "1.2" let sref = SuttaRef.create(`thig1.1:${segnum}/en/soma`); let { sutta_uid, lang, author, scid } = sref; let card = new EbtCard({ context, location: [scid, lang, author], }); let origin = 'test-origin'; global.window = { location: { origin }, }; should(card.scidToDocUrl(scid)) .equal(`${origin}/#/sutta/${sutta_uid}/${lang}/${author}`); }); it("scidToApiUrl() thig1.1:1.2/en/soma", ()=>{ let segnum = "1.2" let sref = SuttaRef.create(`thig1.1:${segnum}/en/soma`); let { sutta_uid, lang, author, scid } = sref; const API_URL = "https://www.api.sc-voice.net/scv/ebt-site"; let suttaCard = new EbtCard({ context: EbtCard.CONTEXT_SUTTA, location: [scid, lang, author], }); should(suttaCard.scidToApiUrl(scid)) .equal(`${API_URL}/${scid}/${lang}/${author}`); let playCard = new EbtCard({ context: EbtCard.CONTEXT_PLAY, location: [scid, lang, author, 'test-pat'], }); should(playCard.scidToApiUrl(scid)) .equal(`${API_URL}/${scid}/${lang}/${author}`); }); it("scidToSCUrl() thig1.1:1.2/en/soma", ()=>{ let context = EbtCard.CONTEXT_SUTTA; let segnum = "1.2" let sref = SuttaRef.create(`thig1.1:${segnum}/en/soma`); let { sutta_uid, lang, author, scid } = sref; const SC_URL = "https://suttacentral.net"; let card = new EbtCard({ context, location: [scid, lang, author], }); should(card.scidToSCUrl(scid)) .equal(`${SC_URL}/${sutta_uid}/${lang}/${author}#1.2`); }); it("segmentElementId()", ()=>{ let scid = 'test-scid'; let lang = 'test-lang'; let author = 'test-author'; let pat = 'test-pat'; let card1 = new EbtCard({ context: EbtCard.CONTEXT_SUTTA, location: [scid, lang, author], }); should(card1.segmentElementId(scid)) .equal(`seg-${scid}/${lang}/${author}`); let card2 = new EbtCard({ context: EbtCard.CONTEXT_PLAY, location: [scid, lang, author, pat], }); should(card2.segmentElementId(scid)) .equal(`seg-${scid}/${lang}/${author}`); }); it("routeSuttaRef() sutta", ()=>{ const scid = 'mn44:1.2'; const lang = 'en'; const author = 'sujato'; const sutta = [scid, lang, author].join('/'); const vueRoute = `#/sutta/${sutta}`; const nuxtRoute = `/ebt-nuxt3/#/sutta/${sutta}`; const suttaRef = SuttaRef.create(sutta); const suttaRefNoAuthor = SuttaRef.create([scid, lang].join('/')); // valid routes should.deepEqual(suttaRef, EbtCard.routeSuttaRef(`/ebt-nuxt3/#/sutta/${sutta}`)); should.deepEqual(suttaRef, EbtCard.routeSuttaRef(`#/sutta/${sutta}`)); should.deepEqual(suttaRefNoAuthor, EbtCard.routeSuttaRef(`/ebt-nuxt3/#/sutta/${scid}`)); should.deepEqual(suttaRefNoAuthor, EbtCard.routeSuttaRef(`#/sutta/${scid}`)); //invalid routes should(EbtCard.routeSuttaRef('#/search/to%20kill/en')).equal(null); should(EbtCard.routeSuttaRef(EbtConfig.homePath)).equal(null); should(EbtCard.routeSuttaRef('#/')).equal(null); should(EbtCard.routeSuttaRef('/')).equal(null); }); it("routeSuttaRef() play", ()=>{ const scid = 'mn44:1.2'; const lang = 'en'; const author = 'sujato'; const sutta = [scid, lang, author].join('/'); const vueRoute = `#/play/${sutta}`; const nuxtRoute = `/ebt-nuxt3/#/play/${sutta}`; const suttaRef = SuttaRef.create(sutta); const suttaRefNoAuthor = SuttaRef.create([scid, lang].join('/')); // valid routes should.deepEqual(suttaRef, EbtCard.routeSuttaRef(`/ebt-nuxt3/#/play/${sutta}`)); should.deepEqual(suttaRef, EbtCard.routeSuttaRef(`#/play/${sutta}`)); should.deepEqual(suttaRefNoAuthor, EbtCard.routeSuttaRef(`/ebt-nuxt3/#/play/${scid}`)); should.deepEqual(suttaRefNoAuthor, EbtCard.routeSuttaRef(`#/play/${scid}`)); //invalid routes should(EbtCard.routeSuttaRef('#/search/to%20kill/en')).equal(null); should(EbtCard.routeSuttaRef(EbtConfig.homePath)).equal(null); should(EbtCard.routeSuttaRef('#/')).equal(null); should(EbtCard.routeSuttaRef('/')).equal(null); }); });