local function _sanitize(content) if type(content)=='boolean' then content=content and 'true' or 'false' end if type(content)=='nil' then content='' end if type(content)=='number' then content=tostring(content) end if type(content)~='string' then MES.new('error',"Invalid content type!") MES.traceback() return '' end return content end if SYSTEM~='Web' then local get=love.system.getClipboardText local set=love.system.setClipboardText return { get=function() return get() or '' end, set=function(content) set(_sanitize(content)) end, setFreshInterval=NULL, _update=NULL, } end if WEB_COMPAT_MODE then local _clipboardBuffer='' return { get=function() JS.newPromiseRequest( JS.stringFunc( [[ window.navigator.clipboard .readText() .then((text) => _$_(text)) .catch((e) => { console.warn(e); _$_(''); }); ]] ), function(data) _clipboardBuffer=data end, function() _clipboardBuffer='' end, 3, 'getClipboardText' ) if TASK.lock('clipboard_compat_interval',2.6) then _clipboardBuffer='' MES.new('warn',"Web-Compat mode, paste again to confirm",2.6) end return _clipboardBuffer end, set=function(str) JS.callJS(JS.stringFunc( [[ window.navigator.clipboard .writeText('%s') .then(() => console.log('Copied to clipboard')) .catch((e) => console.warn(e)); ]], _sanitize(str) )) end, setFreshInterval=NULL, _update=NULL, } end local getCHN=love.thread.getChannel('CLIP_get') local setCHN=love.thread.getChannel('CLIP_set') local trigCHN=love.thread.getChannel('CLIP_trig') local clipboard_thread=love.thread.newThread('Zframework/clipboard_thread.lua') local isStarted,errorMessage=clipboard_thread:start() if not isStarted then MES.new("error",errorMessage,26) end local freshInterval=1 local timer=-.626 return { get=function() return getCHN:peek() or '' end, set=function(content) setCHN:push(_sanitize(content)) end, setFreshInterval=function(val) freshInterval=val end, _update=function(dt) timer=timer+dt if timer>freshInterval then if isStarted and not clipboard_thread:isRunning() then MES.new("warn",clipboard_thread:getError(),26) isStarted=false end trigCHN:push(timer) timer=0 end end, }