Version 5.0.0 beta 8

This commit is contained in:
Neo committed 2025-12-19 17:30:12 -08:00
1 parent 54d5dcd0a0
commit 214f649f1d
483 files changed
+35354 -33568

No files matched your search

+15 -1
View File
@@ -809,7 +809,21 @@ buildIro();wrap?.addEventListener('pointerdown',e=>{if(e.target.closest('[data-r
e.stopPropagation();if(unlimited){const sel=document.getSelection();const activeElement=document.activeElement;const wasFocused=controller==='label'&&((activeElement===label)||(activeElement.parentElement?.closest?.('.ipsInput__color-label')===label));const ranges=[];for(let i=0;i<sel.rangeCount;i++){ranges.push(sel.getRangeAt(i));}
let currentText=label.innerText;unlimited.checked=false;updateColor(e);if(label.innerText!==currentText){e.preventDefault();let sel=document.getSelection();if(!wasFocused||(e instanceof PointerEvent&&e.detail>=2)){sel.removeAllRanges();const range=document.createRange();range.selectNodeContents(label);if(!(e instanceof PointerEvent&&e.detail>2)&&label.innerText.startsWith('#')){const st=document.createTextNode('#');const textNode=document.createTextNode(label.innerText.slice(1));label.innerHTML="";label.appendChild(st);label.appendChild(textNode);range.selectNodeContents(textNode);}else{const text=document.createTextNode(label.innerText);label.innerHTML="";label.append(text);range.selectNodeContents(text);}
sel.addRange(range);}else if(wasFocused){sel.removeAllRanges();ranges.forEach(range=>{sel.addRange(range);})}}}
iroWrap.classList.add('ipsInput__color-iro-container--open');});label.addEventListener('input',e=>{controller='label';const text=label.innerText;try{input.value=(new ips.utils.iro.Color(text)).hexString;buildIro();updateColor({target:input},true);}catch(e){}});document.addEventListener('pointerdown',e=>{if(e.target.closest('.ipsInput__color-wrap-inner')!==wrap&&iroWrap.classList.contains('ipsInput__color-iro-container--open')){iroWrap.classList.remove('ipsInput__color-iro-container--open');}});});const updateColor=(e,skipLabel=false)=>{if(unlimited&&e?.target===input){unlimited.checked=false;}
iroWrap.classList.add('ipsInput__color-iro-container--open');});label.addEventListener('input',e=>{controller='label';const text=label.innerText;try{input.value=(new ips.utils.iro.Color(text)).hexString;buildIro();updateColor({target:input},true);}catch(e){Debug.error(e);}});function handleDataTransfer(e){const dt=e instanceof ClipboardEvent?e.clipboardData:e.dataTransfer;if(dt instanceof DataTransfer){e.preventDefault();e.stopPropagation();const allTypes=[...dt.types];let textFound;if(allTypes.includes('text/plain')){Debug.log("Using plain text from paste or drop event");textFound=dt.getData('text/plain');}else if(allTypes.includes('text/html')){Debug.log("Using html from paste or drop event");const cleanText=(new DOMParser()).parseFromString(dt.getData('text/html'),'text/html').body.innerText;if(cleanText){textFound=cleanText;}}
if(textFound){textFound=textFound.replaceAll(/\s+/g,' ').trim().slice(0,30).trim();const selection=document.getSelection();const text=document.createTextNode(textFound);let usingExistingRange=false;for(let i=0;i<selection.rangeCount;i++){const existingRange=selection.getRangeAt(i);if(existingRange.intersectsNode(label)){const isDescendant=(descendant,ancestor)=>{while(descendant){if(descendant===ancestor){return true;}
descendant=descendant.parentNode;}
return false;}
if(!isDescendant(existingRange.startContainer,label)){existingRange.setStart(label,0);}
if(!isDescendant(existingRange.endContainer,label)){existingRange.setEnd(label,label.childNodes.length);}
usingExistingRange=true;existingRange.deleteContents();existingRange.insertNode(text);existingRange.collapse(false);break;}}
selection.removeAllRanges();const newRange=document.createRange();if(!usingExistingRange){label.innerHTML="";label.appendChild(text);}
newRange.setStartAfter(text);newRange.setEndAfter(text);selection.addRange(newRange);if(label.innerText.trim().length>30){let precedingTextLength=0;for(let node of label.childNodes){if(node===text){break;}
if(node instanceof Text){precedingTextLength+=node.wholeText.length;}else if(node instanceof Element){precedingTextLength+=node.innerText.length;}}
const replacementTextNode=document.createTextNode(label.innerText.trim().slice(0,30));label.innerHTML="";label.appendChild(replacementTextNode);if(precedingTextLength){const correctedRange=document.createRange();correctedRange.setStart(replacementTextNode,Math.min(30,precedingTextLength));correctedRange.setEnd(replacementTextNode,Math.min(30,precedingTextLength));selection.removeAllRanges();selection.addRange(correctedRange);}}
controller='label';try{input.value=(new ips.utils.iro.Color(label.innerText)).hexString;buildIro();updateColor({target:input},true);}catch(e){Debug.error(e);}
return;}
ips.ui.flashMsg.show(ips.getString('form_color_datatransfer_fail'));}}
label.addEventListener('drop',handleDataTransfer);label.addEventListener('paste',handleDataTransfer);document.addEventListener('pointerdown',e=>{if(e.target.closest('.ipsInput__color-wrap-inner')!==wrap&&iroWrap.classList.contains('ipsInput__color-iro-container--open')){iroWrap.classList.remove('ipsInput__color-iro-container--open');}});});const updateColor=(e,skipLabel=false)=>{if(unlimited&&e?.target===input){unlimited.checked=false;}
if(unlimited?.checked){wrap?.classList.add('ipsInput--color-disabled');if(label){label.innerHTML="";}
return;}
wrap?.classList.remove('ipsInput--color-disabled');let textColor;if(ips.utils.iro?.colorPackage){const color=new ips.utils.iro.colorPackage(input.value);if(color.to('oklab').toGamut().l<0.71){textColor="#fff";}else{textColor="#000";}}else{const[_,__,l]=input.value.match(/#[0-9a-f]{3,8}/i)?ips.utils.color.RGBtoHSL(...ips.utils.color.hexToRGB(input.value.match(/#([0-9a-f]{3,8})/i)[1])):[null,null,null];textColor=typeof l==="number"?(l<0.6?"#fff":"#000"):initialColor;}