From e968338d2cc549f7798322cae4054a52024fae2b Mon Sep 17 00:00:00 2001 From: Alexandre Bobkov Date: Sat, 21 Jun 2025 14:22:13 -0400 Subject: [PATCH] . --- docs/build/doctrees/environment.pickle | Bin 50617 -> 21943 bytes docs/build/doctrees/errata.doctree | Bin 2461 -> 2460 bytes docs/build/doctrees/index.doctree | Bin 4388 -> 4404 bytes docs/build/doctrees/introduction.doctree | Bin 7431 -> 7430 bytes .../build/doctrees/payroll_accounting.doctree | Bin 2719 -> 6400 bytes docs/build/doctrees/references.doctree | Bin 2437 -> 2436 bytes docs/build/doctrees/review_questions.doctree | Bin 12151 -> 3202 bytes docs/build/html/.buildinfo | 4 +- docs/build/html/.buildinfo.bak | 4 +- .../html/_sources/payroll_accounting.rst.txt | 14 +- .../html/_sources/review_questions.rst.txt | 70 +- docs/build/html/_static/basic.css | 23 +- docs/build/html/_static/classic.css | 7 - docs/build/html/_static/doctools.js | 7 - docs/build/html/_static/language_data.js | 9 +- docs/build/html/_static/pygments.css | 66 +- docs/build/html/_static/searchtools.js | 223 +++-- docs/build/html/_static/sidebar.js | 6 - docs/build/html/errata.html | 36 +- docs/build/html/genindex.html | 20 +- docs/build/html/index.html | 29 +- docs/build/html/introduction.html | 20 +- docs/build/html/payroll_accounting.html | 46 +- docs/build/html/references.html | 44 +- docs/build/html/review_questions.html | 95 +- docs/build/html/search.html | 26 +- docs/build/html/searchindex.js | 2 +- docs/build/latex/Makefile | 3 +- .../latex/canadianpayrolladministration.aux | 26 +- .../canadianpayrolladministration.fdb_latexmk | 55 +- .../latex/canadianpayrolladministration.fls | 27 +- .../latex/canadianpayrolladministration.log | 296 +++--- .../latex/canadianpayrolladministration.out | 8 +- .../latex/canadianpayrolladministration.pdf | Bin 105470 -> 111059 bytes .../latex/canadianpayrolladministration.tex | 37 +- .../latex/canadianpayrolladministration.toc | 8 +- docs/build/latex/sphinx.sty | 911 +++++++++++------- docs/build/latex/sphinx.xdy | 2 +- docs/build/latex/sphinxlatexadmonitions.sty | 301 ++++-- docs/build/latex/sphinxlatexcontainers.sty | 2 +- docs/build/latex/sphinxlatexgraphics.sty | 5 +- docs/build/latex/sphinxlatexindbibtoc.sty | 2 +- docs/build/latex/sphinxlatexlists.sty | 2 +- docs/build/latex/sphinxlatexliterals.sty | 28 +- docs/build/latex/sphinxlatexnumfig.sty | 31 +- docs/build/latex/sphinxlatexobjects.sty | 39 +- docs/build/latex/sphinxlatexshadowbox.sty | 82 +- docs/build/latex/sphinxlatexstyleheadings.sty | 9 +- docs/build/latex/sphinxlatexstylepage.sty | 10 +- docs/build/latex/sphinxlatexstyletext.sty | 46 +- docs/build/latex/sphinxlatextables.sty | 27 +- docs/build/latex/sphinxoptionsgeometry.sty | 2 +- docs/build/latex/sphinxoptionshyperref.sty | 2 +- docs/build/latex/sphinxpackageboxes.sty | 57 +- docs/build/latex/sphinxpackagefootnote.sty | 7 +- docs/source/conf.py | 8 +- docs/source/payroll_accounting.rst | 14 +- docs/source/review_questions.rst | 70 +- 58 files changed, 1572 insertions(+), 1296 deletions(-) diff --git a/docs/build/doctrees/environment.pickle b/docs/build/doctrees/environment.pickle index dc0d4da552c2771bde031b5adc5723c57a3a885b..b368bb0f3b461b8158e6585b9408c126798539c4 100644 GIT binary patch literal 21943 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 aW5w+0V{GE*C9=$5v7OPXKo=*avHu5G*NJ)n literal 50617 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 diff --git a/docs/build/doctrees/errata.doctree b/docs/build/doctrees/errata.doctree index 39955def2df2cf516083a9e7f30bf75f22d96239..1834ba5c63c12ec80c8823040662fb78b5d7acc6 100644 GIT binary patch delta 330 zcmbO$JV#ipfpzLcP6jaO;Y-O+E-lH-Db|}PZpxIwFfmq|kzrz`Hjr4V$0#uIN;x-Q zhExW3hI9sVhRozJMh7ifZ|2gZ#0XZ!a${aS%Hx;ZnF=I5hJ7a=6coxjEo(V9ob*Y8D{7e p_i*MV=BAcZ7NizWshyHx*jb#R0HpOYxHo%o_%gBqL!vZE4*-&_Z0`U7 delta 331 zcmZ9H&q~8U5XPOvR%5H7R8(lK77_oXO(CG?q9AB&-yoE2vpNBjlx%|aQ1mM7C1!im zcM$Rd9=!V?zJ!bQ1-7!1atcOvrVQ$O zpKG@?pz=)^3Awl=rYt7@SoE_m piVazJ>APWJhjA?+K8+v7GXGSd^~|s-X9vsq<#G>-GI}yJe*lv=YnK23 diff --git a/docs/build/doctrees/index.doctree b/docs/build/doctrees/index.doctree index d07c611a7e8649f045a2c790b812ddc3931ae27e..bc775006470419f80d2b8d0c590642240021847e 100644 GIT binary patch delta 1040 zcmah|-)qxQ6wY1OByDxAO19Z`vy8g78_N{t^htyX1BHP;+jVK0dID{3$q%fER3C(j z7jfLH$PlFHe-NL15}$k#@!dbbKfymUMA(W!~Q&ubi3jIB$F9}3)4Ba)c#V9L3XHQuP;vj-l z;SYh{kL{ogJ&fJJ3S5E95QCLnDD8SR4Q2!Ae1$=lM~=r5k9>uBPyiJaSR2Bj2&KD{ zR|A2_I&QVGXVp(ok+jnW)9R>Ny>8*U;V^o2dLcWB0u;Y7okb4{a2r+z1iT%%6;(yj zF4kS!FxDU0TDxu7Op6M=d0Z%O%s6U{{)unK2dz;>-0X&$EAyIIq`B3obsM7uk$0Nd zaWwle3rvMfDDi>~4OigFDcMpOUkK{!G7f2AEG{wO{Ev*y>0;xkESxm(eEashr7Z;;5Vm% zUx&c20^uhMy5m(OV$Ewd4VMwLI@rsXq4I%+<9SyYksppGrHz*QSS~b!=nn81j235+ z^G8mChz|B_-C$6p2Z=3Ipg$5-q|#DyF=J!wR@=7GFgsl42BX`_JLh}kY;cv9*Q$0J t*lw|&-%sWdiu>PF*AOcD|IU0vsONv3Ng;VYI7A!P{GaK2NE~>g{s&nJS}y^$>4^UUYvkIRV%kypuhXz-Aj z)55yhDQLCY3w0+>W^0!2w(AY2U|Kc9VZ9Q7^5Gf)oS@gkrVvGyehurV6e2l>-mY6F zqb&cB-Df$BpomhLe<<{_unTeeM7U5V%K z+tS;%VQk#7wN}fpnHC)E;^DzK5#xXe{T11c45-j~al7jyv&#Pw0%X>LQk@+oh`igd z97nV7GEYQ|`x1}XP+%4B9iwH&hwq8m@!`*VV$wh25-3!b3jBRu+JF!>q)b{NV%==i zO~Wtoo8cg|C(Wf)>`j8EKcsXau*mlu`(04yv8XgD?{%~I_FyXsUj2G<_0Sv4SN#0A z;%B_$(=qq|8L#`#c|@$bjfT-?1Xc$&eC&f7C^%ksnGyN+Xi?h8!-sOd6$CB7S1|HT zIep{;i0D|Zts4w;^rf-`S^7<>z$VQ{7wOID)ssaaGv3jeZnM(ax9lb>LjO}V10eK& jPM-tF^_7_~5a!wMv(q3ay-Txkz5hFQ14Mp=Znf|i-3L-= diff --git a/docs/build/doctrees/introduction.doctree b/docs/build/doctrees/introduction.doctree index 6d46a7544d35cdffa982befef4328e3e8e94660e..4fe50d0450601e87863cfdf1704b13184e26f8ba 100644 GIT binary patch delta 1440 zcmb7^&ui0Q7{~Lbwq0FqN4Iuc)^25v{dAk6n=nzCponGNmDnQURC)H=ojQ%ZyhQ(EoC+q(hMRQkHq=mQQKp#vNcrc>ljTO{UC zlW=z6x&Bn|2Pe3|oxle_-6nk`NPm#-TO5p54#Xi6SCc$+np>j@9lCM#;OfQIpU_np z1e1TEvK@vX5_2P+F|M+0ED0JjXPoR^4sOv|;|9L&`()%5&<&2t}me#0oa zZ?mr8+!dB#==X*eYv_M zX1<>IODy8n>&IDQLl)LdKaB^v91KKgJ}{0NR|9?YTc9Dq!JGQQ5zUnm(}JkzF$URN zHp%U1LqA!-@S0w3zKFK2HJ>+at#PpZAGY9qj71|KY(}_$6+S(w3LC{LRBVp5Q#!>w zV2?byQ9YsgA4{q%^4Vc@Sfl4w&``@II}u*DQ7Pwg-XR;P*PDqsjwf(}FUVQ`!b z(yie9h%c^r76nm|c}0?Sd`a_)P*C_>9$y+|NmAzXvapa@)-^J!)27h9z@~PtAfyyg z&CM?_NODf!G{jJp5V!HNb&QZ9<4fCTLN@6J_iOSH4qz6hVITHj7j{(5Bl0;xS;=Dt q%&B)+gxMnO7h$)kLe%_nfTLy_N8TPb{|+d|r;aJ&!uhHuNB#nrQGdJ21iRV&L2aMJy|YfhbtEw2gZ^+oZG!ZlKIv zY*L6w{W3wl@=n1EA(w(EA`Esj*v()!{s4c1pl{k`&C0+U_(Bff_q@-0c%H54XVYCz zJ=?#7uF9qRi+RY%tK(uiUFIj-_13hK($q}0I4&z`sc4kvgTz~2xrn!NgtV7GKWg!V z06qwU8~W%~a^qFyZNUGIU*liRytEgkoA!gnn!5 zV8Vc5To-VKaYYh_1|wkMk5#wBD1@R-i0(DROgBS#bM}mfxh24C<8U+3SAp@`uv$_& zicg=jAy0(?{ltbYJ2;%J<#^2Dlnno{Lrc8Q#l^LPlFbgxrBaF}s~LIO*fgr;5a3?p zRISYKI5Ka=%&(anO*a^pzk7vox#+j%fceuKVHN~fZXDMxL7R<#dcW@b`mtY+eZAPP z)yB~+)|!KLpu+mV_tNUuLw}h;xUI(FY_hx!Yqg)waQ$vCgy<4Cg&bG7F#W{kxTJs4yA@tEk8b2iifmMJz!|GGLU(I;Y48-RxWp`eV9xS(2rKs44{mU(%u~6;&~pH)53IZwI18KUb7e zs;uP}S05;aoDn6a%nuO4nlHL02^lqibblpGl+dl-Uvr0W01FU@eb|Ft*wJ*aEaoJ2 sEsrI)Z0@iG3nkbu!EQ-|LF>x_`ez(HZV%PI1Da_H^Mpl1)so|X0n^~$egFUf diff --git a/docs/build/doctrees/payroll_accounting.doctree b/docs/build/doctrees/payroll_accounting.doctree index 510db794faaf611f725da8f419c6275c5fa0371b..f18402cba25093b1c08e6da5cd89cc2b17d62d69 100644 GIT binary patch literal 6400 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 Q_huswUq&{d_e+!X0Po;u-T(jq delta 321 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 { - const [docname, title, anchor, descr, score, filename] = result + const [docname, title, anchor, descr, score, filename, kind] = result return score }, */ @@ -47,6 +40,14 @@ if (typeof Scorer === "undefined") { }; } +// Global search result kind enum, used by themes to style search results. +class SearchResultKind { + static get index() { return "index"; } + static get object() { return "object"; } + static get text() { return "text"; } + static get title() { return "title"; } +} + const _removeChildren = (element) => { while (element && element.lastChild) element.removeChild(element.lastChild); }; @@ -62,12 +63,15 @@ const _displayItem = (item, searchTerms, highlightTerms) => { const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; - const contentRoot = document.documentElement.dataset.content_root - ?? DOCUMENTATION_OPTIONS.URL_ROOT; + const contentRoot = document.documentElement.dataset.content_root; - const [docName, title, anchor, descr, score, _filename] = item; + const [docName, title, anchor, descr, score, _filename, kind] = item; let listItem = document.createElement("li"); + // Add a class representing the item's type: + // can be used by a theme's CSS selector for styling + // See SearchResultKind for the class names. + listItem.classList.add(`kind-${kind}`); let requestUrl; let linkUrl; if (docBuilder === "dirhtml") { @@ -100,7 +104,7 @@ const _displayItem = (item, searchTerms, highlightTerms) => { .then((data) => { if (data) listItem.appendChild( - Search.makeSearchSummary(data, searchTerms) + Search.makeSearchSummary(data, searchTerms, anchor) ); // highlight search terms in the summary if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js @@ -116,9 +120,11 @@ const _finishSearch = (resultCount) => { "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." ); else - Search.status.innerText = _( - `Search finished, found ${resultCount} page(s) matching the search query.` - ); + Search.status.innerText = Documentation.ngettext( + "Search finished, found one page matching the search query.", + "Search finished, found ${resultCount} pages matching the search query.", + resultCount, + ).replace('${resultCount}', resultCount); }; const _displayNextItem = ( results, @@ -138,6 +144,22 @@ const _displayNextItem = ( // search finished, update title and status message else _finishSearch(resultCount); }; +// Helper function used by query() to order search results. +// Each input is an array of [docname, title, anchor, descr, score, filename, kind]. +// Order the results by score (in opposite order of appearance, since the +// `_displayNextItem` function uses pop() to retrieve items) and then alphabetically. +const _orderResultsByScoreThenName = (a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; +}; /** * Default splitQuery function. Can be overridden in ``sphinx.search`` with a @@ -161,13 +183,26 @@ const Search = { _queued_query: null, _pulse_status: -1, - htmlToText: (htmlString) => { + htmlToText: (htmlString, anchor) => { const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); - htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() }); + for (const removalQuery of [".headerlink", "script", "style"]) { + htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() }); + } + if (anchor) { + const anchorContent = htmlElement.querySelector(`[role="main"] ${anchor}`); + if (anchorContent) return anchorContent.textContent; + + console.warn( + `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.` + ); + } + + // if anchor not specified or not found, fall back to main content const docContent = htmlElement.querySelector('[role="main"]'); - if (docContent !== undefined) return docContent.textContent; + if (docContent) return docContent.textContent; + console.warn( - "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template." + "Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template." ); return ""; }, @@ -220,6 +255,7 @@ const Search = { searchSummary.classList.add("search-summary"); searchSummary.innerText = ""; const searchList = document.createElement("ul"); + searchList.setAttribute("role", "list"); searchList.classList.add("search"); const out = document.getElementById("search-results"); @@ -240,16 +276,7 @@ const Search = { else Search.deferQuery(query); }, - /** - * execute search (requires search index to be loaded) - */ - query: (query) => { - const filenames = Search._index.filenames; - const docNames = Search._index.docnames; - const titles = Search._index.titles; - const allTitles = Search._index.alltitles; - const indexEntries = Search._index.indexentries; - + _parseQuery: (query) => { // stem the search terms and add them to the correct list const stemmer = new Stemmer(); const searchTerms = new Set(); @@ -285,22 +312,40 @@ const Search = { // console.info("required: ", [...searchTerms]); // console.info("excluded: ", [...excludedTerms]); - // array of [docname, title, anchor, descr, score, filename] - let results = []; + return [query, searchTerms, excludedTerms, highlightTerms, objectTerms]; + }, + + /** + * execute search (requires search index to be loaded) + */ + _performSearch: (query, searchTerms, excludedTerms, highlightTerms, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // Collect multiple result groups to be sorted separately and then ordered. + // Each is an array of [docname, title, anchor, descr, score, filename, kind]. + const normalResults = []; + const nonMainIndexResults = []; + _removeChildren(document.getElementById("search-progress")); - const queryLower = query.toLowerCase(); + const queryLower = query.toLowerCase().trim(); for (const [title, foundTitles] of Object.entries(allTitles)) { - if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) { + if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) { for (const [file, id] of foundTitles) { - let score = Math.round(100 * queryLower.length / title.length) - results.push([ + const score = Math.round(Scorer.title * queryLower.length / title.length); + const boost = titles[file] === title ? 1 : 0; // add a boost for document titles + normalResults.push([ docNames[file], titles[file] !== title ? `${titles[file]} > ${title}` : title, id !== null ? "#" + id : "", null, - score, + score + boost, filenames[file], + SearchResultKind.title, ]); } } @@ -309,46 +354,48 @@ const Search = { // search for explicit entries in index directives for (const [entry, foundEntries] of Object.entries(indexEntries)) { if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { - for (const [file, id] of foundEntries) { - let score = Math.round(100 * queryLower.length / entry.length) - results.push([ + for (const [file, id, isMain] of foundEntries) { + const score = Math.round(100 * queryLower.length / entry.length); + const result = [ docNames[file], titles[file], id ? "#" + id : "", null, score, filenames[file], - ]); + SearchResultKind.index, + ]; + if (isMain) { + normalResults.push(result); + } else { + nonMainIndexResults.push(result); + } } } } // lookup as object objectTerms.forEach((term) => - results.push(...Search.performObjectSearch(term, objectTerms)) + normalResults.push(...Search.performObjectSearch(term, objectTerms)) ); // lookup as search terms in fulltext - results.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + normalResults.push(...Search.performTermsSearch(searchTerms, excludedTerms)); // let the scorer override scores with a custom scoring function - if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item))); + if (Scorer.score) { + normalResults.forEach((item) => (item[4] = Scorer.score(item))); + nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item))); + } - // now sort the results by score (in opposite order of appearance, since the - // display function below uses pop() to retrieve items) and then - // alphabetically - results.sort((a, b) => { - const leftScore = a[4]; - const rightScore = b[4]; - if (leftScore === rightScore) { - // same score: sort alphabetically - const leftTitle = a[1].toLowerCase(); - const rightTitle = b[1].toLowerCase(); - if (leftTitle === rightTitle) return 0; - return leftTitle > rightTitle ? -1 : 1; // inverted is intentional - } - return leftScore > rightScore ? 1 : -1; - }); + // Sort each group of results by score and then alphabetically by name. + normalResults.sort(_orderResultsByScoreThenName); + nonMainIndexResults.sort(_orderResultsByScoreThenName); + + // Combine the result groups in (reverse) order. + // Non-main index entries are typically arbitrary cross-references, + // so display them after other results. + let results = [...nonMainIndexResults, ...normalResults]; // remove duplicate search results // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept @@ -362,7 +409,12 @@ const Search = { return acc; }, []); - results = results.reverse(); + return results.reverse(); + }, + + query: (query) => { + const [searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms] = Search._parseQuery(query); + const results = Search._performSearch(searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms); // for debugging //Search.lastresults = results.slice(); // a copy @@ -433,16 +485,14 @@ const Search = { descr, score, filenames[match[0]], + SearchResultKind.object, ]); }; - Object.keys(objects).forEach((prefix) => { - if (!(objects[prefix] instanceof Array)) { - objects[prefix] = Object.entries(objects[prefix]).map(([name, match]) => [...match, name]); - } + Object.keys(objects).forEach((prefix) => objects[prefix].forEach((array) => objectSearchCallback(prefix, array) - ); - }); + ) + ); return results; }, @@ -463,21 +513,27 @@ const Search = { // perform the search on the required terms searchTerms.forEach((word) => { const files = []; + // find documents, if any, containing the query word in their text/title term indices + // use Object.hasOwnProperty to avoid mismatching against prototype properties const arr = [ - { files: terms[word], score: Scorer.term }, - { files: titleTerms[word], score: Scorer.title }, + { files: terms.hasOwnProperty(word) ? terms[word] : undefined, score: Scorer.term }, + { files: titleTerms.hasOwnProperty(word) ? titleTerms[word] : undefined, score: Scorer.title }, ]; // add support for partial matches if (word.length > 2) { const escapedWord = _escapeRegExp(word); - Object.keys(terms).forEach((term) => { - if (term.match(escapedWord) && !terms[word]) - arr.push({ files: terms[term], score: Scorer.partialTerm }); - }); - Object.keys(titleTerms).forEach((term) => { - if (term.match(escapedWord) && !titleTerms[word]) - arr.push({ files: titleTerms[word], score: Scorer.partialTitle }); - }); + if (!terms.hasOwnProperty(word)) { + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + } + if (!titleTerms.hasOwnProperty(word)) { + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: titleTerms[term], score: Scorer.partialTitle }); + }); + } } // no match but word was a required one @@ -493,16 +549,16 @@ const Search = { // set score for the word in each file recordFiles.forEach((file) => { - if (!scoreMap.has(file)) scoreMap.set(file, {}); - scoreMap.get(file)[word] = record.score; + if (!scoreMap.has(file)) scoreMap.set(file, new Map()); + const fileScores = scoreMap.get(file); + fileScores.set(word, record.score); }); }); // create the mapping files.forEach((file) => { - if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1) - fileMap.get(file).push(word); - else fileMap.set(file, [word]); + if (!fileMap.has(file)) fileMap.set(file, [word]); + else if (fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(word); }); }); @@ -534,7 +590,7 @@ const Search = { break; // select one (max) score for the file. - const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); + const score = Math.max(...wordList.map((w) => scoreMap.get(file).get(w))); // add result to the result list results.push([ docNames[file], @@ -543,6 +599,7 @@ const Search = { null, score, filenames[file], + SearchResultKind.text, ]); } return results; @@ -553,8 +610,8 @@ const Search = { * search summary for a given text. keywords is a list * of stemmed words. */ - makeSearchSummary: (htmlText, keywords) => { - const text = Search.htmlToText(htmlText); + makeSearchSummary: (htmlText, keywords, anchor) => { + const text = Search.htmlToText(htmlText, anchor); if (text === "") return null; const textLower = text.toLowerCase(); diff --git a/docs/build/html/_static/sidebar.js b/docs/build/html/_static/sidebar.js index c5e2692..ac7b39e 100644 --- a/docs/build/html/_static/sidebar.js +++ b/docs/build/html/_static/sidebar.js @@ -1,7 +1,4 @@ /* - * sidebar.js - * ~~~~~~~~~~ - * * This script makes the Sphinx sidebar collapsible. * * .sphinxsidebar contains .sphinxsidebarwrapper. This script adds @@ -16,9 +13,6 @@ * Once the browser is closed the cookie is deleted and the position * reset to the default (expanded). * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * */ const initialiseSidebar = () => { diff --git a/docs/build/html/errata.html b/docs/build/html/errata.html index 9c52691..de6df79 100644 --- a/docs/build/html/errata.html +++ b/docs/build/html/errata.html @@ -5,29 +5,29 @@ - 3. Errors and Errata — Canadian Payroll Administration HR documentation - - + 5. Errors and Errata — Canadian Payroll Administration HR documentation + + - + - + - - - - - - - - - -