+
+ +

Source code for pyOpenRPA.Orchestrator.Web.Basic

+import json, copy
+from .. import __Orchestrator__
+from .. import Processor
+# Escape JS to the safe JS for the inline JS in HTML tags ATTENTION! Use it only if want to paste JS into HTML tag - not in <script>
+# USAGE: JSEscapeForHTMLInline(inJSStr="lTest=\"Hello World\"; alert(\"lTest\")")
+def JSEscapeForHTMLInline(inJSStr):
+    lResult = inJSStr.replace("\"","&quot;")
+    return lResult
+
+
[docs]def JSProcessorActivityListAdd(inActivityList, inGUIDRemoveBool = True): + """ + # Create JS for send activity list/ activity to the processor + # USAGE: Orchestrator.Web.Basic.JSProcessorActivityListAdd(inActivityList) + + :param inActivityList: List of the activities (See __Orchestrator__.ProcessorActivityItemCreate) + :param inGUIDRemoveBool: True - remove GUID before generate JS (if GUID is not important) + :return: JavaScript string for the front end + """ + Processor.__ActivityListVerify__(inActivityList=inActivityList) # DO VERIFICATION FOR THE inActivityList + inActivityList = copy.deepcopy(inActivityList) + # Check if no def function is here - if exist - replace to alias + for lActivityItem in inActivityList: + if "GUIDStr" in lActivityItem and inGUIDRemoveBool == True: del lActivityItem["GUIDStr"] # Remove GUID from activity items if exists + lDef = lActivityItem["Def"] + if callable(lDef): raise Exception(f"pyOpenRPA Exception: You can't send ActivityList with def to JS. Use Def Alias (see Orchestrator.ProcessorAliasDefUpdate)") + lJSStr = f"""mGlobal.pyOpenRPA.ProcessorQueueAdd({json.dumps(inActivityList)});""" + return lJSStr
+ + +
[docs]def JSActivityListExecute(inActivityList, inGUIDRemoveBool = True): + """ + Create JS for execute activity list/ activity permanent + USAGE: Orchestrator.Web.Basic.JSActivityListExecute(inActivityList, inGUIDRemoveBool = True) + + :param inActivityList: List of the activities (See __Orchestrator__.ProcessorActivityItemCreate) + :param inGUIDRemoveBool: True - remove GUID before generate JS (if GUID is not important) + :return: JavaScript string for the front end + """ + Processor.__ActivityListVerify__(inActivityList=inActivityList) # DO VERIFICATION FOR THE inActivityList + inActivityList = copy.deepcopy(inActivityList) + # Check if no def function is here - if exist - replace to alias + for lActivityItem in inActivityList: + if "GUIDStr" in lActivityItem and inGUIDRemoveBool == True: del lActivityItem["GUIDStr"] # Remove GUID from activity items if exists + lDef = lActivityItem["Def"] + if callable(lDef): raise Exception(f"pyOpenRPA Exception: You can't send ActivityList with def to JS. Use Def Alias (see Orchestrator.ProcessorAliasDefUpdate)") + lJSStr = f"""mGlobal.pyOpenRPA.ActivityListExecute({json.dumps(inActivityList)});""" + return lJSStr
+ +# Generate HTML code of the simple URL link by the URL +# USAGE: Orchestrator.Web.Basic.HTMLLinkURL(inURLStr="test",inColorStr="orange") +# USAGE: Basic.HTMLLinkURL(inURLStr="test",inColorStr="orange") +def HTMLLinkURL(inURLStr, inTitleStr=None, inColorStr=None): + lCSSStyleStr = "" + if not inTitleStr: inTitleStr = inURLStr + if inColorStr: lCSSStyleStr=f"style=\"color:{inColorStr}\"" + lResult=f"<a {lCSSStyleStr} href=\"{inURLStr}\">{inTitleStr}</a>" + return lResult + +# Generate HTML code of the simple URL link by the JS when onclick +# USAGE: Orchestrator.Web.Basic.HTMLLinkJSOnClick(inJSOnClickStr="",inColorStr="orange") +# USAGE: Basic.HTMLLinkJSOnClick(inJSOnClickStr="test",inColorStr="orange") +def HTMLLinkJSOnClick(inJSOnClickStr, inTitleStr, inColorStr=None): + lCSSStyleStr = "" + if inColorStr: lCSSStyleStr=f"style=\"color:{inColorStr}\"" + inJSOnClickStr= JSEscapeForHTMLInline(inJSStr=inJSOnClickStr) # Escape some symbols for the inline JS + lResult=f"<a {lCSSStyleStr} onclick=\"{inJSOnClickStr}\">{inTitleStr}</a>" + return lResult + +# Create HTMLLink by the def, argdict, arglist, gsettingsStr, logger Str titleStr, color, (add in processor queue) +def HTMLLinkDefProcessor(inGSettings, inDef, inArgDict=None, inArgList=None, inArgGSettingsStr=None, inArgLoggerStr=None, inLinkTitleStr=None, inLinkColorStr=""): + lDefAliasStr = inDef + if callable(inDef): + lDefAliasStr = str(inDef) + lDefAliasStr = __Orchestrator__.ProcessorAliasDefUpdate(inGSettings=inGSettings, inDef=inDef, inAliasStr=lDefAliasStr) + if inLinkTitleStr is None: inLinkTitleStr = lDefAliasStr + lActivityList = [__Orchestrator__.ProcessorActivityItemCreate(inDef=lDefAliasStr,inArgList=inArgList,inArgDict=inArgDict,inArgGSettingsStr=inArgGSettingsStr,inArgLoggerStr=inArgLoggerStr)] + lJSStr = JSProcessorActivityListAdd(lActivityList) + lHTMLStr = HTMLLinkJSOnClick(inJSOnClickStr=lJSStr,inTitleStr=inLinkTitleStr, inColorStr=inLinkColorStr) + return lHTMLStr + +# Create HTMLLink by the def, argdict, arglist, gsettingsStr, logger Str titleStr, color, (execute permanently) +def HTMLLinkDefExecute(inGSettings, inDef, inArgDict=None, inArgList=None, inArgGSettingsStr=None, inArgLoggerStr=None, inLinkTitleStr=None, inLinkColorStr=""): + lDefAliasStr = inDef + if callable(inDef): + lDefAliasStr = str(inDef) + lDefAliasStr = __Orchestrator__.ProcessorAliasDefUpdate(inGSettings=inGSettings, inDef=inDef, inAliasStr=lDefAliasStr) + if inLinkTitleStr is None: inLinkTitleStr = lDefAliasStr + lActivityList = [__Orchestrator__.ProcessorActivityItemCreate(inDef=lDefAliasStr,inArgList=inArgList,inArgDict=inArgDict,inArgGSettingsStr=inArgGSettingsStr,inArgLoggerStr=inArgLoggerStr)] + lJSStr = JSActivityListExecute(lActivityList) + lHTMLStr = HTMLLinkJSOnClick(inJSOnClickStr=lJSStr,inTitleStr=inLinkTitleStr, inColorStr=inLinkColorStr) + return lHTMLStr + +# HTML Generator for the CP up to v.1.2.0 +def HTMLControlPanelBC(inCPDict): + # FooterButtonX2List generation + lFooterButtonX2Str = "" + for lItem in inCPDict["FooterButtonX2List"]: + lFooterButtonX2Str+=f'<div class="ui basic {lItem.get("Color","")} button" onclick="{JSEscapeForHTMLInline(lItem.get("OnClick",""))}">{lItem.get("Text","")}</div>' + # FooterButtonX1List generation + lFooterButtonX1Str = "" + for lItem in inCPDict["FooterButtonX1List"]: + lFooterButtonX1Str+=f'<div class="ui basic {lItem.get("Color","")} button" onclick="{JSEscapeForHTMLInline(lItem.get("OnClick",""))}">{lItem.get("Text","")}</div>' + # BodyKeyValue generation + lBodyKeyValueStr = "" + for lItem in inCPDict["BodyKeyValueList"]: + lBodyKeyValueStr+=f"<li>{lItem['Key']}: {lItem['Value']}</li>" + # Generate consolidated string + lResultHTMLStr = f""" + <div class="card"> + <div class="content"> + <div class="right floated mini ui "> + {inCPDict['HeaderRightText']} + </div> + <div class="header"> + {inCPDict['HeaderLeftText']} + + </div> + <div class="meta"> + {inCPDict['SubheaderText']} + </div> + <div class="description"> + <ul style="padding-inline-start:16px;margin:0px"> + {lBodyKeyValueStr} + </ul> + </div> + </div> + <div class="extra content"> + {inCPDict['FooterText']} + </div> + <div class="extra content"> + <div class="ui two buttons"> + {lFooterButtonX2Str} + </div> + <div class="ui horizontal divider">Add. controls</div> + <div class="ui one buttons"> + {lFooterButtonX1Str} + </div> + </div> + </div> + """ + + return lResultHTMLStr +
+ +
+ +