MCPcopy
hub / github.com/hoothin/UserScripts / createSpanMark

Function createSpanMark

Picviewer CE+/Picviewer CE+.user.js:17751–17828  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

17749 }
17750 var self = this;
17751 var createSpanMark = item => {
17752 var spanMark=self._spanMarkPool[item.src];
17753 if(!spanMark){
17754 spanMark = document.createElement("span");
17755 try{
17756 if (item.noActual && item.img && item.img.naturalHeight && item.img.naturalWidth) {
17757 spanMark.dataset.naturalSize = JSON.stringify({
17758 h: item.img.naturalHeight,
17759 w: item.img.naturalWidth,
17760 });
17761 let key = item.img.naturalWidth + "x" + item.img.naturalHeight;
17762 self.sizeMap[key] = (self.sizeMap[key] || 0) + 1;
17763 if (self.sizeMap[key] === 2) {
17764 let option = document.createElement("option");
17765 option.innerText = key;
17766 option.value = item.img.naturalWidth + "-" + item.img.naturalWidth + "x" + item.img.naturalHeight + "-" + item.img.naturalHeight;
17767 self.pinSize.appendChild(option);
17768 }
17769 }
17770 spanMark.className="pv-gallery-sidebar-thumb-container";
17771 spanMark.dataset.index=index;
17772 spanMark.dataset.type=item.type;
17773 spanMark.dataset.src=item.src;
17774 spanMark.dataset.srcs=item.srcs?item.srcs.join(","):"";
17775 //if(item.xhr)spanMark.dataset.xhr=encodeURIComponent(JSON.stringify(item.xhr));
17776 spanMark.dataset.description=encodeURIComponent(item.description || (item.img ? (item.img.title || item.img.alt || "") : ""));
17777 spanMark.dataset.thumbSrc=(item.img && (item.img.currentSrc || item.img.src)) || item.imgSrc;
17778 let title = item.img ? (item.img.title || item.img.alt || "").slice(-200) : "";
17779 if (title) {
17780 if (title.indexOf('http') === 0 || title.indexOf('data') === 0) title = '';
17781 else title += '\n';
17782 }
17783 let itemSrc = item.src.replace(/^blob:.*/, "").replace(/^(data[^;]+).*/, "$1...");
17784 spanMark.title = title + (itemSrc.length > 150 ? itemSrc.slice(0, 110) + " ... " + itemSrc.slice(-30) : itemSrc);
17785 setHTML(spanMark, '<span class="pv-gallery-vertical-align-helper"></span>' +
17786 '<span class="pv-gallery-sidebar-thumb-loading" title="'+i18n("loading")+'......"></span>');
17787 spanMark.addEventListener('contextmenu', function(e) {
17788 e.preventDefault();
17789 e.stopPropagation();
17790 spanMark.classList.toggle("ignore");
17791 if ((e.altKey || e.ctrlKey || e.metaKey || e.shiftKey) && self.lastMark && self.lastMark !== spanMark && self.lastMark.parentNode === spanMark.parentNode) {
17792 const children = Array.from(thumbnails.children);
17793 let current;
17794 if (children.indexOf(self.lastMark) < children.indexOf(spanMark)) {
17795 current = self.lastMark.nextElementSibling;
17796 } else {
17797 current = spanMark.nextElementSibling;
17798 }
17799 while (current !== null && current !== self.lastMark && current !== spanMark) {
17800 current.classList.toggle("ignore");
17801 current = current.nextElementSibling;
17802 }
17803 }
17804 self.lastMark = spanMark;
17805 });
17806 }catch(e){};
17807 self._spanMarkPool[item.src] = spanMark;
17808 }

Callers 1

initFunction · 0.70

Calls 2

setHTMLFunction · 0.70
i18nFunction · 0.70

Tested by

no test coverage detected