forked from phcode-dev/staging.phcode.dev
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathLiveDevProtocolRemote.js
More file actions
1 lines (1 loc) · 8.16 KB
/
LiveDevProtocolRemote.js
File metadata and controls
1 lines (1 loc) · 8.16 KB
1
!function(global){var transport=global._Brackets_LiveDev_Transport,MessageBroker={handlers:{},trigger:function(msg){var msgHandlers;msg.method?(msgHandlers=this.handlers[msg.method])&&msgHandlers.length>0?msgHandlers.forEach(function(handler){try{return void handler(msg)}catch(e){return void console.error("[Brackets LiveDev] Error executing a handler for "+msg.method,e.stack)}}):console.warn("[Brackets LiveDev] No subscribers for message "+msg.method):console.error("[Brackets LiveDev] Received message without method.")},respond:function(orig,response){orig.id?(response.id=orig.id,this.send(response)):console.error("[Brackets LiveDev] Trying to send a response for a message with no ID")},on:function(method,handler){method&&handler&&(this.handlers[method]||(this.handlers[method]=[]),this.handlers[method].push(handler))},send:function(msgStr){transport.send(JSON.stringify(msgStr))}};global._Brackets_MessageBroker=MessageBroker;var Runtime={evaluate:function(msg){var result=eval(msg.params.expression);MessageBroker.respond(msg,{result:JSON.stringify(result)})}};MessageBroker.on("Runtime.evaluate",Runtime.evaluate);var CSS={setStylesheetText:function(msg){if(msg&&msg.params&&msg.params.text&&msg.params.url){var i,node,head=window.document.getElementsByTagName("head")[0],s=window.document.createElement("style");for(s.type="text/css",s.appendChild(window.document.createTextNode(msg.params.text)),i=0;i<window.document.styleSheets.length;i++)(node=window.document.styleSheets[i]).ownerNode.id===msg.params.url?(head.insertBefore(s,node.ownerNode),node.ownerNode.parentNode.removeChild(node.ownerNode)):node.href!==msg.params.url||node.disabled||(head.insertBefore(s,node.ownerNode),node.disabled=!0,i++);s.id=msg.params.url,window._LD&&window._LD.redrawEverything&&window._LD.redrawEverything()}},getStylesheetText:function(msg){var i,sheet,text="";for(i=0;i<window.document.styleSheets.length;i++)if((sheet=window.document.styleSheets[i]).ownerNode.id===msg.params.url)text=sheet.ownerNode.textContent;else if(sheet.href===msg.params.url&&!sheet.disabled){var j,rules;try{rules=window.document.styleSheets[i].cssRules}catch(e){if("SecurityError"!==e.name)throw e}if(!rules)return;for(j=0;j<rules.length;j++)text+=rules[j].cssText+"\n"}MessageBroker.respond(msg,{text:text})}};MessageBroker.on("CSS.setStylesheetText",CSS.setStylesheetText),MessageBroker.on("CSS.getStylesheetText",CSS.getStylesheetText);var Page={reload:function(msg){window.location.reload(msg.params.ignoreCache)}};if(MessageBroker.on("Page.reload",Page.reload),MessageBroker.on("ConnectionClose",Page.close),!transport)return void console.error("[Brackets LiveDev] No transport set");var ProtocolManager={_documentObserver:{},_protocolHandler:{},enable:function(){transport.setCallbacks(this._protocolHandler),transport.enable()},onConnect:function(){this._documentObserver.start(window.document,transport)},onClose:function(){var body=window.document.getElementsByTagName("body")[0],overlay=window.document.createElement("div"),background=window.document.createElement("div"),status=window.document.createElement("div");overlay.style.width="100%",overlay.style.height="100%",overlay.style.zIndex=2227,overlay.style.position="fixed",overlay.style.top=0,overlay.style.left=0,background.style.backgroundColor="#fff",background.style.opacity=.5,background.style.width="100%",background.style.height="100%",background.style.position="fixed",background.style.top=0,background.style.left=0,status.textContent="Live Development Session has Ended",status.style.width="100%",status.style.color="#fff",status.style.backgroundColor="#666",status.style.position="fixed",status.style.top=0,status.style.left=0,status.style.padding="0.2em",status.style.verticalAlign="top",status.style.textAlign="center",overlay.appendChild(background),overlay.appendChild(status),body.appendChild(overlay),window.document.title="(Brackets Live Preview: closed) "+window.document.title},setDocumentObserver:function(documentOberver){documentOberver&&(this._documentObserver=documentOberver)},setProtocolHandler:function(protocolHandler){protocolHandler&&(this._protocolHandler=protocolHandler)}};global._Brackets_LiveDev_ProtocolManager=ProtocolManager;var ProtocolHandler={message:function(msgStr){const msg=JSON.parse(msgStr);_setPCommReady(),msg&&"object"==typeof msg&&"PhoenixComm.execLPFn"===msg.method?_onLPFnTrigger(msg.fnName,msg.params):msg&&"object"==typeof msg&&"phoenixFnResponse"===msg.method?_onPhoenixExecResponse(msg.fnName,msg.fnExecID,msg.resolveWith,msg.rejectWith):MessageBroker.trigger(msg)},close:function(evt){ProtocolManager.onClose()},connect:function(evt){ProtocolManager.onConnect()}};ProtocolManager.setProtocolHandler(ProtocolHandler);const registeredPhoenixCommFns={};function _onLPFnTrigger(fnName,paramObj){const lpFn=registeredPhoenixCommFns[fnName];lpFn||console.error(`PhoenixComm: No such LP function ${fnName}`);try{const response=lpFn(paramObj);response instanceof Promise&&response.catch(err=>{console.error(`PhoenixComm: Error executing LP function ${fnName}`,err)})}catch(e){console.error(`PhoenixComm: Error executing LP function ${fnName}`,e)}}let currentFnExecID=1,lpCommReady=!1;const pendingExecPromises=new Map;let queuedExecRequests=[];function _sendOrQueueExec(payload){lpCommReady?MessageBroker.send(payload):queuedExecRequests.push(payload)}function _flushQueuedExecRequests(){if(lpCommReady&&0!==queuedExecRequests.length){for(let i=0;i<queuedExecRequests.length;i++)MessageBroker.send(queuedExecRequests[i]);queuedExecRequests=[]}}const PhoenixComm={registerLpFn:function(fnName,fn){if(registeredPhoenixCommFns[fnName])throw new Error(`Function "${fnName}" already registered with PhoenixComm`);registeredPhoenixCommFns[fnName]=fn},execPhoenixFn:function(fnName,paramObj){return new Promise((resolve,reject)=>{const fnExecID=currentFnExecID++;pendingExecPromises.set(fnExecID,{resolve:resolve,reject:reject}),_sendOrQueueExec({execFnName:fnName,paramObj:paramObj,fnExecID:fnExecID})})}};function _setPCommReady(){lpCommReady=!0,_flushQueuedExecRequests()}function _onPhoenixExecResponse(fnName,fnExecID,resolveWith,rejectWith){const pendingPromise=pendingExecPromises.get(fnExecID);pendingPromise||console.error(`execPhoenixFn: No response promise found! for ${fnName}: ${fnExecID}`),pendingExecPromises.delete(fnExecID),rejectWith?pendingPromise.reject(rejectWith):pendingPromise.resolve(resolveWith)}function getAllInheritedSelectorsInOrder(element){let selectorsFound=new Map;const selectorsList=[];for(;element;)element.id&&selectorsList.push(`#${element.id}`),element.classList&&element.classList.forEach(cls=>{selectorsFound.get(cls)||(selectorsFound.set(cls,!0),selectorsList.push(`.${cls}`))}),element=element.parentElement;return selectorsList}function onDocumentClick(event){const selection=window.getSelection();var element=event.target;if(element&&(element.closest(".phcode-dismiss-lp-edit")||element.classList.contains("phcode-dismiss-lp-edit-this")))return window._LD&&window._LD.dismissUIAndCleanupState&&window._LD.dismissUIAndCleanupState(),event.preventDefault(),void event.stopPropagation();if((!element||!element.closest(".phcode-no-lp-edit")&&!element.classList.contains("phcode-no-lp-edit-this"))&&element&&element.hasAttribute("data-brackets-id"))if(2!==event.detail||["INPUT","TEXTAREA","SELECT"].includes(element.tagName)){if(selection.toString().length>0)return;MessageBroker.send({tagId:element.getAttribute("data-brackets-id"),nodeID:element.id,nodeClassList:element.classList,nodeName:element.nodeName,allSelectors:getAllInheritedSelectorsInOrder(element),contentEditable:"true"===element.contentEditable,clicked:!0})}else window._LD&&window._LD.DOMEditHandler?window._LD.startEditing(element):MessageBroker.send({tagId:element.getAttribute("data-brackets-id"),nodeID:element.id,nodeClassList:element.classList,nodeName:element.nodeName,allSelectors:getAllInheritedSelectorsInOrder(element),contentEditable:"true"===element.contentEditable,clicked:!0,edit:!0}),event.preventDefault(),event.stopPropagation()}PhoenixComm.registerLpFn("PH_LP_COMM_READY",_setPCommReady),global._Brackets_LiveDev_PhoenixComm=PhoenixComm,window.addEventListener("load",function(){ProtocolManager.enable()}),global.getAllInheritedSelectorsInOrder=getAllInheritedSelectorsInOrder,window.document.addEventListener("click",onDocumentClick)}(this);