Spaces:
Configuration error
Configuration error
| export function sleep(ms = 100, value) { | |
| return new Promise((resolve) => { | |
| setTimeout(() => { | |
| resolve(value); | |
| }, ms); | |
| }); | |
| } | |
| export function addPreconnect(href, crossorigin=false){ | |
| const preconnect = document.createElement("link"); | |
| preconnect.rel = 'preconnect' | |
| preconnect.href = href | |
| if(crossorigin) preconnect.crossorigin = '' | |
| document.head.appendChild(preconnect); | |
| } | |
| export function addCss(href, base=true) { | |
| const link = document.createElement("link"); | |
| link.rel = "stylesheet"; | |
| link.type = "text/css"; | |
| link.href = base ? "extensions/ComfyUI-Easy-Use/"+href : href; | |
| document.head.appendChild(link); | |
| } | |
| export function addMeta(name, content) { | |
| const meta = document.createElement("meta"); | |
| meta.setAttribute("name", name); | |
| meta.setAttribute('content', content); | |
| document.head.appendChild(meta); | |
| } | |
| export function deepEqual(obj1, obj2) { | |
| if (typeof obj1 !== typeof obj2) { | |
| return false | |
| } | |
| if (typeof obj1 !== 'object' || obj1 === null || obj2 === null) { | |
| return obj1 === obj2 | |
| } | |
| const keys1 = Object.keys(obj1) | |
| const keys2 = Object.keys(obj2) | |
| if (keys1.length !== keys2.length) { | |
| return false | |
| } | |
| for (let key of keys1) { | |
| if (!deepEqual(obj1[key], obj2[key])) { | |
| return false | |
| } | |
| } | |
| return true | |
| } | |
| export function getLocale(){ | |
| const locale = localStorage['AGL.Locale'] || localStorage['Comfy.Settings.AGL.Locale'] || 'en-US' | |
| return locale | |
| } | |
| export function spliceExtension(fileName){ | |
| return fileName.substring(0,fileName.lastIndexOf('.')) | |
| } | |
| export function getExtension(fileName){ | |
| return fileName.substring(fileName.lastIndexOf('.') + 1) | |
| } | |
| export function formatTime(time, format) { | |
| time = typeof (time) === "number" ? time : (time instanceof Date ? time.getTime() : parseInt(time)); | |
| if (isNaN(time)) return null; | |
| if (typeof (format) !== 'string' || !format) format = 'yyyy-MM-dd hh:mm:ss'; | |
| let _time = new Date(time); | |
| time = _time.toString().split(/[\s\:]/g).slice(0, -2); | |
| time[1] = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'][_time.getMonth()]; | |
| let _mapping = { | |
| MM: 1, | |
| dd: 2, | |
| yyyy: 3, | |
| hh: 4, | |
| mm: 5, | |
| ss: 6 | |
| }; | |
| return format.replace(/([Mmdhs]|y{2})\1/g, (key) => time[_mapping[key]]); | |
| } | |
| let origProps = {}; | |
| export const findWidgetByName = (node, name) => node.widgets.find((w) => w.name === name); | |
| export const doesInputWithNameExist = (node, name) => node.inputs ? node.inputs.some((input) => input.name === name) : false; | |
| export function updateNodeHeight(node) {node.setSize([node.size[0], node.computeSize()[1]]);} | |
| export function toggleWidget(node, widget, show = false, suffix = "") { | |
| if (!widget || doesInputWithNameExist(node, widget.name)) return; | |
| if (!origProps[widget.name]) { | |
| origProps[widget.name] = { origType: widget.type, origComputeSize: widget.computeSize }; | |
| } | |
| const origSize = node.size; | |
| widget.type = show ? origProps[widget.name].origType : "easyHidden" + suffix; | |
| widget.computeSize = show ? origProps[widget.name].origComputeSize : () => [0, -4]; | |
| widget.linkedWidgets?.forEach(w => toggleWidget(node, w, ":" + widget.name, show)); | |
| const height = show ? Math.max(node.computeSize()[1], origSize[1]) : node.size[1]; | |
| node.setSize([node.size[0], height]); | |
| } | |
| export function isLocalNetwork(ip) { | |
| const localNetworkRanges = [ | |
| '192.168.', | |
| '10.', | |
| '127.', | |
| /^172\.((1[6-9]|2[0-9]|3[0-1])\.)/ | |
| ]; | |
| return localNetworkRanges.some(range => { | |
| if (typeof range === 'string') { | |
| return ip.startsWith(range); | |
| } else { | |
| return range.test(ip); | |
| } | |
| }); | |
| } | |
| /** | |
| * accAdd 高精度加法 | |
| * @since 1.0.10 | |
| * @param {Number} arg1 | |
| * @param {Number} arg2 | |
| * @return {Number} | |
| */ | |
| export function accAdd(arg1, arg2) { | |
| let r1, r2, s1, s2,max; | |
| s1 = typeof arg1 == 'string' ? arg1 : arg1.toString() | |
| s2 = typeof arg2 == 'string' ? arg2 : arg2.toString() | |
| try { r1 = s1.split(".")[1].length } catch (e) { r1 = 0 } | |
| try { r2 = s2.split(".")[1].length } catch (e) { r2 = 0 } | |
| max = Math.pow(10, Math.max(r1, r2)) | |
| return (arg1 * max + arg2 * max) / max | |
| } | |
| /** | |
| * accSub 高精度减法 | |
| * @since 1.0.10 | |
| * @param {Number} arg1 | |
| * @param {Number} arg2 | |
| * @return {Number} | |
| */ | |
| export function accSub(arg1, arg2) { | |
| let r1, r2, max, min,s1,s2; | |
| s1 = typeof arg1 == 'string' ? arg1 : arg1.toString() | |
| s2 = typeof arg2 == 'string' ? arg2 : arg2.toString() | |
| try { r1 = s1.split(".")[1].length } catch (e) { r1 = 0 } | |
| try { r2 = s2.split(".")[1].length } catch (e) { r2 = 0 } | |
| max = Math.pow(10, Math.max(r1, r2)); | |
| //动态控制精度长度 | |
| min = (r1 >= r2) ? r1 : r2; | |
| return ((arg1 * max - arg2 * max) / max).toFixed(min) | |
| } | |
| /** | |
| * accMul 高精度乘法 | |
| * @since 1.0.10 | |
| * @param {Number} arg1 | |
| * @param {Number} arg2 | |
| * @return {Number} | |
| */ | |
| export function accMul(arg1, arg2) { | |
| let max = 0, s1 = typeof arg1 == 'string' ? arg1 : arg1.toString(), s2 = typeof arg2 == 'string' ? arg2 : arg2.toString(); | |
| try { max += s1.split(".")[1].length } catch (e) { } | |
| try { max += s2.split(".")[1].length } catch (e) { } | |
| return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, max) | |
| } | |
| /** | |
| * accDiv 高精度除法 | |
| * @since 1.0.10 | |
| * @param {Number} arg1 | |
| * @param {Number} arg2 | |
| * @return {Number} | |
| */ | |
| export function accDiv(arg1, arg2) { | |
| let t1 = 0, t2 = 0, r1, r2,s1 = typeof arg1 == 'string' ? arg1 : arg1.toString(), s2 = typeof arg2 == 'string' ? arg2 : arg2.toString(); | |
| try { t1 = s1.toString().split(".")[1].length } catch (e) { } | |
| try { t2 = s2.toString().split(".")[1].length } catch (e) { } | |
| r1 = Number(s1.toString().replace(".", "")) | |
| r2 = Number(s2.toString().replace(".", "")) | |
| return (r1 / r2) * Math.pow(10, t2 - t1) | |
| } | |
| Number.prototype.div = function (arg) { | |
| return accDiv(this, arg); | |
| } |