UNPKG

@xiee/utils

Version:

Miscellaneous tools and utilities to manipulate HTML pages

2 lines 10.4 kB
(t=>{"use strict";if(t.LT?.buildHtml)return;const o=t=>String(t).replace(/&/g,"&amp;").replace(/[<]/g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;"),n=t=>Array.isArray(t)?String(t[0]??""):o(t),e=(t,n)=>t?String(n??""):o(n),s=(t,o)=>!0===t||Array.isArray(t)&&t.includes(o),l=t=>`<sup class="lt-fnref">${t}</sup>`,r=t=>t===1/0?"∞":t===-1/0?"-∞":String(t??""),c=t=>"number"==typeof t&&isFinite(t),i=t=>c(t)||Math.abs(t)===1/0,a=t=>t?.length&&"number"==typeof t.find(t=>null!=t),u=t=>(t.columns||Object.keys(t.data||{})).filter(o=>o in(t.data||{})),f=(t,o)=>{let n=o;for(const e of t)"label"===e.type&&null!=e.labels?.[o]&&(n=e.labels[o]);return n};function p(t,o,n){if(t===1/0)return"∞";if(t===-1/0)return"−∞";if(!c(t))return null;let e=null!=o?t.toFixed(o):String(t);if(/^-0(\.0+)?$/.test(e)&&(e=e.slice(1)),n){const t=e.split(".");t[0]=t[0].replace(/\B(?=(\d{3})+(?!\d))/g,n),e=t.join(".")}return"-"===e[0]&&(e="−"+e.slice(1)),null!=o||n?e:null}function h(t,o){if(!o)return t.filter(t=>""!==t).join(" ");let n=o,e="";for(;n;){const o=n.match(/<<(.*?)>>/);if(!o){e+=d(n,t);break}o.index>0&&(e+=d(n.slice(0,o.index),t));const s=o[1],l=[...s.matchAll(/\{(\d+)\}/g)].map(t=>+t[1]);l.length&&!l.every(o=>""!==t[o-1])||(e+=d(s,t)),n=n.slice(o.index+o[0].length)}return e}function d(t,o){for(let n=0;n<o.length;n++)t=t.split("{"+(n+1)+"}").join(o[n]);return t}function g(t){const o=t.data||{},n=t.ops||[],e=u(t),s=e.length?o[e[0]].length:0,l={};for(const t of e)l[t]=o[t].map(r);!function(t,o,n){if(!1===t.auto_format)return;const e=t.data||{},s=t.ops||[],l=u(t),r=new Set;for(const t of s)if("fmt_number"===t.type)for(const o of t.columns||l)r.add(o);for(const t of l){if(r.has(t))continue;const l=e[t];if(!a(l))continue;const u=f(s,t),h=/%|[ _](pct|percent)$/i.test(u);if(/year/i.test(u)&&l.every(t=>null==t||/^\d{4}$/.test(String(t))))continue;let d=0,g=0;for(const t of l){if(!c(t))continue;const o=Math.abs(h?100*t:t),n=o<1?0:Math.floor(Math.log10(o))+1;n>d&&(d=n);const e=String(t).match(/\.(\d+)/);if(!e)continue;const s=e[1].replace(/0+$/,"").length-(h?2:0);s>g&&(g=s)}g=Math.min(g,Math.max(4-d,0));for(let e=0;e<n;e++){const n=l[e];if(!i(n))continue;const s=p(h?100*n:n,g," ");null!=s&&(o[t][e]=s+(h?"%":""))}}}(t,l,s);const d=(t,n)=>{for(const e of t)if(o[e])for(let t=0;t<s;t++)n(e,t,o[e][t])};for(const t of n){const o=t.columns||e;switch(t.type){case"fmt_number":d(o,(o,n,e)=>{if(!i(e))return;const s=!0===t.percent?100*e:e,r=t.percent?"%":"",c=p(s,t.decimals,t.big_mark??""),a=t.prefix||"",u=(t.suffix||"")+r;null!=c?l[o][n]=a+c+u:(a||u)&&(l[o][n]=a+String(s)+u)});break;case"fmt_date":d(o,(o,n,e)=>{if(null==e)return;const s=e instanceof Date?e:new Date(e);isNaN(s)||(l[o][n]=t.method?s[t.method]():t.options?s.toLocaleDateString(t.locale,t.options):s.toLocaleDateString(t.locale))});break;case"sub":d(o,(o,n,e)=>{null!=t.small&&c(e)&&0!==e&&Math.abs(e)<t.small?l[o][n]=t.small_text??"<"+t.small:null!=t.zero&&0===e?l[o][n]=t.zero:null!=t.missing&&null==e&&(l[o][n]=t.missing)});break;case"merge":{const o=t.columns;if(!o||o.length<2)break;const n=o[0];for(let e=0;e<s;e++){const s=o.map(t=>l[t]?.[e]??"");l[n][e]=h(s,t.pattern)}break}}}return{display:l,nRow:s}}function m(t){!function(t){if(!1===t.sort||!t.row_group)return;const o=t.data||{},n=[].concat(t.row_group),e=u(t),s=e.length?o[e[0]].length:0;if(!s)return;const l=Array.from({length:s},(t,o)=>o);l.sort((t,e)=>{for(const s of n){const n=o[s]?.[t],l=o[s]?.[e];if(n!=l){if(null==n)return 1;if(null==l)return-1;if(n<l)return-1;if(n>l)return 1}}return 0});for(const t of e)o[t]=l.map(n=>o[t][n]);const r=new Array(s);for(let t=0;t<s;t++)r[l[t]]=t+1;for(const o of t.ops||[])o.rows&&(o.rows=o.rows.map(t=>r[t-1]))}(t);const c=t.data||{},{display:i,nRow:p}=g(t),{visible:h,align:d,colLabels:m,colWidths:b,tableWidth:w,indent:$,groups:y,rowSpans:_,styles:x,spanners:S,footnotes:v,notes:A,header:k}=function(t){const o=t.data||{},n=t.ops||[],e=u(t),l=e.length?o[e[0]].length:0,c=(t,o)=>{for(const e of n)e.type===t&&o(e)};let i="string"==typeof t.row_group;const p=Array.isArray(t.row_group)?t.row_group:t.row_group?[t.row_group]:[];i||1!==p.length||!1===t.auto_sep||a(o[p[0]])||!o[p[0]]?.some(t=>(t+"").length>20)||(i=!0);const h=new Set;for(const t of p)h.add(t);c("merge",t=>{!1!==t.hide&&t.columns&&t.columns.slice(1).forEach(t=>h.add(t))});let d=e.filter(t=>!h.has(t));c("move",t=>{const o=(t.columns||[]).filter(t=>d.includes(t));if(!o.length)return;const n=d.filter(t=>!o.includes(t));if(null==t.after)d=[...o,...n];else{const e=n.indexOf(t.after);e>=0&&(d=[...n.slice(0,e+1),...o,...n.slice(e+1)])}});const g=(t,o,n)=>{const e=d.indexOf(o);e>=0&&(t[e]=n)},m=d.map(t=>a(o[t])?"right":"left");c("align",t=>{for(const o of t.columns||[])g(m,o,t.align)});const b=o=>!1===t.auto_label?o:o.replace(/[._]/g," "),w=d.map(b);let $,y;c("label",t=>{for(const[o,n]of Object.entries(t.labels||{}))g(w,o,n)}),c("width",t=>{if(t.table&&(y=t.table),t.widths){$||($=d.map(()=>""));for(const[o,n]of Object.entries(t.widths))g($,o,n)}});const _=new Array(l).fill(0);c("indent",t=>{if(t.rows)for(const o of t.rows)_[o-1]=t.level??1});const x=t=>{const o=[];for(let n=0;n<l;){const e=r(t[n]),s=[n+1];for(;++n<l&&r(t[n])===e;)s.push(n+1);o.push({label:e,rows:s})}return o};let S=[];if(i&&p.length&&o[p[0]]){const n=s(t.html_cols,p[0]);S.push(...x(o[p[0]]).map(t=>({...t,raw:n})))}c("row_group",t=>S.push({label:t.label,rows:t.rows})),c("group_order",t=>{if(!S.length)return;const o=[],n=[];for(const n of t.order||[]){const t=S.find(t=>t.label===n);t&&o.push(t)}for(const t of S)o.includes(t)||n.push(t);S=[...o,...n]});const v=[];if(!i&&p.length)for(const t of p){const e=new Array(l).fill(0);for(const n of x(o[t]||[]))e[n.rows[0]-1]=n.rows.length;v.push({col:t,label:f(n,t),spans:e})}const A=n.filter(t=>"style"===t.type);let k=t.spanners||[];if(t.auto_span){const o="string"==typeof t.auto_span?new RegExp(t.auto_span):/[._]/;k=[...k];for(let t=0;t<d.length;){const n=d[t].match(o);if(!n){t++;continue}const e=d[t].slice(0,n.index);let s=t+1;for(;s<d.length;){const t=d[s].match(o);if(!t||d[s].slice(0,t.index)!==e)break;s++}if(s-t>=2){k.push({label:e,columns:d.slice(t,s)});for(let n=t;n<s;n++){const t=d[n].match(o);t&&(w[n]=b(d[n].slice(t.index+t[0].length)))}}t=s}}return{visible:d,align:m,colLabels:w,colWidths:$,tableWidth:y,indent:_,groups:S,rowSpans:v,styles:A,spanners:k,footnotes:t.footnotes||[],notes:t.notes||[],header:t.header||{},nRow:l}}(t),j=function(t){const o=[],n={};return t.forEach(t=>{null==n[t.text]&&(n[t.text]=o.length+1,o.push(t.text))}),{order:o,idx:n}}(v),L=((t,o)=>(n,e)=>{for(const s of t){const t=s.location;if(t.type!==n)continue;const l=o[s.text];if("title"===n&&t.group===e)return l;if("column_labels"===n&&t.columns.includes(e))return l;if("column_spanners"===n&&t.spanners.includes(e))return l;if("row_groups"===n){if("all"===t.match)return l;if("exact"===t.match&&t.values.includes(e))return l;if("starts_with"===t.match&&e.startsWith(t.value))return l}}return 0})(v,j.idx),E=_.length,M=h.length+E,O=o=>s(t.html_cols,o),D=[`<table class="lt-table"${w?` style="width:${w}"`:""}>`],W=(t,o)=>{const n=L(t,o);return n?l(n):""},q=(t,o)=>i[t]?.[o-1]??"",R=(t,o)=>o?` ${t}="${o}"`:"",T=h.map((t,o)=>((0===o&&y.length?"lt-indent ":"")+({right:"al-r",center:"al-c"}[d[o]]||"")).trimEnd()),H=(t,o,n)=>{for(let e=1;e<=p;e++)if(!t||t.includes(e))for(const t of o||h){const o=h.indexOf(t);o>=0&&n(`${e},${o}`,t,e)}},z={},B={},F=(t,o,n,e)=>{t[o]=t[o]?t[o]+e+n:n};for(const t of x)H(t.rows,t.columns?[].concat(t.columns):null,(o,n,e)=>{t.test&&!t.test(c[n][e-1])||(t.css&&F(z,o,t.css,";"),t.class&&F(B,o,t.class," "))});if(b&&b.some(t=>t)){D.push("<colgroup>");for(let t=0;t<E;t++)D.push("<col>");for(let t=0;t<h.length;t++)D.push(`<col${R("style",b[t]?"width:"+b[t]:"")}>`);D.push("</colgroup>")}const N=[["title","lt-title"],["subtitle","lt-subtitle"]].filter(([t])=>null!=k[t]&&""!==k[t]).map(([t,o])=>`<div class="${o}">${n(k[t])}${W("title",t)}</div>`);if(N.length&&D.push('<caption class="lt-caption">',...N,"</caption>"),D.push("<thead>"),S.length){const t='<th class="lt-spanner-empty"></th>';D.push('<tr class="lt-spanner-row">'),D.push(t.repeat(E));for(let o=0;o<h.length;){const e=S.find(t=>t.columns[0]===h[o]);e?(D.push(`<th colspan="${e.columns.length}" scope="colgroup" class="lt-spanner">${n(e.label)}${W("column_spanners",e.label)}</th>`),o+=e.columns.length):(D.push(t),o++)}D.push("</tr>")}D.push("<tr>");for(const t of _)D.push(`<th scope="col">${n(t.label)}</th>`);for(let t=0;t<h.length;t++)D.push(`<th scope="col"${R("class",T[t])}>${n(m[t])}${W("column_labels",h[t])}</th>`);D.push("</tr></thead>");const K={};for(const t of v){if("body"!==t.location.type)continue;const o=j.idx[t.text];H(t.location.rows,t.location.columns||[],t=>{K[t]=o})}const C=t=>{D.push("<tr>");for(const o of _){const n=o.spans[t-1],s=(o.spans[t-2]||0)-1;n>0?D.push(`<th scope="row" class="lt-row-group${n>1?" lt-row-open":""}">${e(O(o.col),q(o.col,t))}</th>`):s>0&&D.push(`<th class="lt-row-group"${R("rowspan",s>1?s:0)}></th>`)}const n=$[t-1]||0;for(let s=0;s<h.length;s++){const a=`${t},${s}`,u=h[s],f=K[a],p=B[a],d=[T[s],p].filter(Boolean).join(" ");let g=z[a]||"";0===s&&n&&(g=(g?g+";":"")+`padding-left:${n+1}em`);const m=r(c[u][t-1]),b=i[u][t-1],w=m!==b?` title="${o(m)}"`:"";D.push(`<td${R("class",d)}${R("style",g)}${w}>${e(O(u),b)}${f?l(f):""}</td>`)}D.push("</tr>")};if(D.push("<tbody>"),y.length){const t={};for(const o of y){D.push(`<tr class="lt-row-group"><th colspan="${M}" scope="colgroup">${e(o.raw,o.label)}${W("row_groups",o.label)}</th></tr>`);for(const n of o.rows)t[n]=1,C(n)}for(let o=1;o<=p;o++)t[o]||C(o)}else for(let t=1;t<=p;t++)C(t);if(D.push("</tbody>"),j.order.length||A.length){const t=(t,o)=>`<tr class="${t}"><td colspan="${M}">${o}</td></tr>`;D.push('<tfoot class="lt-footer">'),j.order.forEach((o,e)=>D.push(t("lt-footnote",`${l(e+1)} ${n(o)}`)));for(const o of A)D.push(t("lt-source-note",n(o)));D.push("</tfoot>")}return D.push("</table>"),`<div class="lt-wrap">${D.join("")}</div>`}const b=(t,o)=>{t.insertAdjacentHTML("afterend",m(o));const n=t.nextElementSibling.querySelector("table"),e=(t,o)=>t.altKey&&o.classList.toggle("lt-raw");n.onclick=t=>1===t.detail&&e(t,n),n.ondblclick=t=>e(t,n.ownerDocument.documentElement)},w={push:t=>b(t.s,t.d)};(t.LT?.q||[]).forEach(w.push),t.LT={build:t=>b(document.currentScript,t),buildHtml:m,q:w}})(window); //# sourceMappingURL=lt.min.js.map