BUI logoDWC logoBBjWebManager / BBjBuiManager

Description

In BBj 14.00 and higher, the BBjWebManager/BBjBuiManager object provides an interface to BUI and DWC application runtime settings.

Note:

In BBj 22.03 and higher, BBjWebManager is an alias for BBjBuiManager.

Creation

BBjAPI > BBjBuiManager

BBjAPI > BBjWebManager

The BBjWebManager/BBjBuiManager object is created through the following BBjAPI methods:

Return Value Method
BBjBuiManager getBuiManager()
BBjWebManager getWebManager()

Methods of BBjWebManager

Return Value Method
void

addClass(String className)

addClass(String className, String selector)

BBjBuiAppCloseAction appAction(String app)
void clearCallback(int eventType)
void clearCallback(String eventType)
void clearCallback(String eventType, int callbackID)
BBjBuiDefaultCloseAction defaultAction()
int executeAsyncScript(String script)
Object executeScript(String script)
String getApplicationName()
String

getAttribute(String attribute)

getAttribute(String attribute, String selector)

BBjBusyIndicator getBusyIndicator()
BBjVector

getClassList()

getClassList(String selector)

String

getComputedStyle(String property)

getComputedStyle(String property, String selector)

String getDarkTheme()
BBjBuiCloseAction getEndAction()
BBjBuiCloseAction getErrAction()
String getLightTheme()
boolean getShowConfirmCloseDialog()
String

getStyle(String property)

getStyle(String property, String selector)

String getTheme()
String getTitle()
String getUrl()
void

injectLinkUrl(String url)

injectLinkUrl(String url, boolean top)

injectLinkUrl(String url, boolean top, String attributes)

injectLinkUrl(String url, boolean top, HashMap attributes)

void

injectScript(String script)

injectScript(String script, boolean top)

injectScript(String script, boolean top, String attributes)

injectScript(String script, boolean top, HashMap attributes)

void

injectScriptUrl(String url)

injectScriptUrl(String url, boolean top)

injectScriptUrl(String url, boolean top, String attributes)

injectScriptUrl(String url, boolean top, HashMap attributes)

void

injectStyle(String style)

injectStyle(String style, boolean top)

injectStyle(String style, boolean top, String attributes)

injectStyle(String style, boolean top, HashMap attributes)

void

injectStyleUrl(String url)

injectStyleUrl(String url, boolean top)

injectStyleUrl(String url, boolean top, String attributes)

injectStyleUrl(String url, boolean top, HashMap attributes)

boolean isTouchSupported()
BBjBuiMsgCloseAction msgAction(String msg)
BBjWebEventOptions newEventOptions()
BBjBuiNoneCloseAction noneAction()
void

removeClass(String className)

removeClass(String className, String selector)

void

setAttribute(String attribute, String value)

setAttribute(String attribute, String value, String selector)

void setDarkTheme(String darkTheme)
void setLightTheme(String lightTheme)
void

setMeta(String name, String content)

setMeta(String name, String content, String attributes)

setMeta(String name, String content, HashMap attributes)

void setCallback(int eventType, CustomObject customObject, String method)
void setCallback(int eventType, String callback)
int setCallback(String eventType, String callback)
int setCallback(String eventType, String callback, BBjWebEventOptions options)
int setCallback(String eventType, CustomObject customObject, String methodName)
int setCallback(String eventType, CustomObject customObject, String methodName, BBjWebEventOptions options)
void setEndAction(BBjBuiCloseAction action)
void setErrAction(BBjBuiCloseAction action)
void setShowConfirmCloseDialog(boolean showConfirmCloseDialog)
void setTheme(String theme)
void setTitle(String title)
void

setStyle(String property, String value)

setStyle(String property, String value, String selector)

boolean

toggleClass(String className

toggleClass(String className, String selector)

BBjBuiUrlCloseAction urlAction(String url)

Events

Callback Code Object-Oriented Event Read Record Event Code
ON_BROWSER_BACK BBjBrowserBackEvent N/A Z
ON_BROWSER_CLOSE BBjBrowserCloseEvent N/A Z
ON_EXECUTE_SCRIPT BBjExecuteScriptEvent N/A x
ON_LINK_FAILED BBjLinkFailedEvent N/A x
ON_LINK_LOADED BBjLinkLoadedEvent N/A x
ON_SCRIPT_FAILED BBjScriptFailedEvent N/A x
ON_SCRIPT_LOADED BBjScriptLoadedEvent N/A x
ON_WEB_EVENT BBjWebEvent Web Event x

Note:

The ON_WEB_EVENT callback code is only a placeholder. In BBj 24.11 and higher, Web Events are registered for String eventType codes using BBjWebManager::setCallback.

The BBjBrowserBackEvent is available when the BUI app is configured to manage the browser history.

ClosedVersion History

Constants

None.

Example

rem ' BBjWebManager/BBjBuiManager

declare BBjSysGui sysgui!
declare BBjWebManager bui!
declare BBjBusyIndicator busy!

sysgui = unt
open (sysgui)"X0"
sysgui! = bbjapi().getSysGui()

bui! = bbjapi().getWebManager()
bui!.setCallback(bui!.ON_BROWSER_CLOSE,"ON_BROWSER_CLOSE",err=*next)
bbjapi().getConfig().releaseOnLostConnection(0)
setesc ON_LOST_CONNECTION

url$ = "(Not BUI)"
url$ = bui!.getUrl(err=*next)

appName$ = " (Not BUI)"
appName$ = bui!.getApplicationName(err=*next)

title$ = "BBjWebManager: " + appName$
touch = 0
touch = bui!.isTouchSupported(err=*next)
if touch then title$ = title$ + " (Touch)" else title$ = title$ + " (Not Touch)"
window! = sysgui!.addWindow(25,25,450,600,title$,$00090083$)
window!.setCallback(window!.ON_CLOSE,"eoj")

status! = window!.addStatusBar(999)

window!.addStaticText(99,25,25,400,25,"URL: "+url$,$$)

window!.addGroupBox(100,25,75,400,125,"End Actions")
endApp! = window!.addRadioButton(101,30,100,75,25,"App",$0020$)
endUrl! = window!.addRadioButton(102,105,100,75,25,"URL",$0020$)
endMsg! = window!.addRadioButton(103,180,100,75,25,"Msg",$0020$)
endNone! = window!.addRadioButton(104,255,100,75,25,"None",$0020$)
endDefault! = window!.addRadioButton(105,330,100,75,25,"Default",$0020$)
endGroup! = window!.addRadioGroup()
endGroup!.add(endApp!)
endGroup!.add(endUrl!)
endGroup!.add(endMsg!)
endGroup!.add(endNone!)
endGroup!.add(endDefault!)
window!.addStaticText(106,30,150,60,25,"Value:",$8000$)
endValue! = window!.addEditBox(107,100,150,225,25,$$)
setEndAction! = window!.addButton(108,340,150,75,25,"Set",$$)
setEndAction!.setCallback(setEndAction!.ON_BUTTON_PUSH,"setEndAction")

window!.addGroupBox(200,25,225,400,125,"Err Actions")
errApp! = window!.addRadioButton(201,30,250,75,25,"App",$0020$)
errUrl! = window!.addRadioButton(202,105,250,75,25,"URL",$0020$)
errMsg! = window!.addRadioButton(203,180,250,75,25,"Msg",$0020$)
errNone! = window!.addRadioButton(204,255,250,75,25,"None",$0020$)
errDefault! = window!.addRadioButton(205,330,250,75,25,"Default",$0020$)
errGroup! = window!.addRadioGroup()
errGroup!.add(errApp!)
errGroup!.add(errUrl!)
errGroup!.add(errMsg!)
errGroup!.add(errNone!)
errGroup!.add(errDefault!)
window!.addStaticText(206,30,300,60,25,"Value:",$8000$)
errValue! = window!.addEditBox(207,100,300,225,25,$$)
setErrAction! = window!.addButton(208,340,300,75,25,"Set",$$)
setErrAction!.setCallback(setEndAction!.ON_BUTTON_PUSH,"setErrAction")

title$ = "Show Confirm Close Dialog"
confirm = 0
confirm = bui!.getShowConfirmCloseDialog(err=*next)
flags$ = iff(confirm,$0004$,$0000$)
setShowConfirmDialog! = window!.addCheckBox(209,25,375,300,25,title$,flags$)
setShowConfirmDialog!.setCallback(setShowConfirmDialog!.ON_CHECK_ON,"showConfirmDialogOn")
setShowConfirmDialog!.setCallback(setShowConfirmDialog!.ON_CHECK_OFF,"showConfirmDialogOff")

showBusy! = window!.addButton(1,25,425,100,25,"Busy",$$)
showBusy!.setCallback(showBusy!.ON_BUTTON_PUSH,"showBusy")
busyMessage! = window!.addEditBox(300,150,425,275,25,"Working...",$$)

gosub fetch

rem ' https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/Date
js$ = "function toISOString(date){try{return new Date(date).toISOString()}catch(e){return new String(e)}}"
sysgui!.injectScript(js$)
toISOString! = window!.addButton(2,25,475,100,25,"toISOString",$$)
toISOString!.setCallback(toISOString!.ON_BUTTON_PUSH,"toISOString")

text$ = "December 25, " + date(0:"%Yl")
text! = window!.addEditBox(400,150,475,275,25,text$,$$)

bui!.setCallback(bui!.ON_EXECUTE_SCRIPT,"executeScript",err=*next)

executeAsyncScript! = window!.addButton(3,150,525,275,25,"executeAsyncScript",$$)
executeAsyncScript!.setCallback(executeAsyncScript!.ON_BUTTON_PUSH,"samples")

process_events

eoj:
release

toISOString:
    text$ = text!.getText()
    js$ = "toISOString('"+text$+"')"
    t = tim
    if (info(3,6)="5" or info(3,6)="6") then
        ISOString! = bui!.executeScript(js$)
    else
        ISOString! = sysgui!.executeScript(js$)
    endif
    t = tim - t, t = t * 3600 * 1000
    msg$ = "executeScript " + js$ + " = " + str(ISOString!) + ": " + str(t) + " milliseconds."
    status!.setText(msg$)
return

samples:
    if web then body$ = "" else body$ = "document.body."
    js$ = "console.log('executeAsyncScript')"; gosub executeAsyncScript; rem ' undefined
    js$ = "Math.sqrt(100)"; gosub executeAsyncScript; rem ' Double or Integer 10
    js$ = "Math.sqrt(-1)"; gosub executeAsyncScript; rem ' Double NaN
    js$ = "null"; gosub executeAsyncScript; rem ' null
    js$ = "undefined"; gosub executeAsyncScript; rem ' null
    js$ = "document.hasFocus()"; gosub executeAsyncScript; rem ' Boolean false
    js$ = body$ + "style.backgroundColor"; gosub executeAsyncScript; rem ' String #ffff00
    js$ = "Math.PI"; gosub executeAsyncScript; rem ' Double 3.141592653589793
    js$ = "1/0"; gosub executeAsyncScript; rem ' Double Infinity
    js$ = "-1/0"; gosub executeAsyncScript; rem ' Double -Infinity
    js$ = "Number.MIN_SAFE_INTEGER"; gosub executeAsyncScript; rem '
    js$ = "Number.MAX_SAFE_INTEGER"; gosub executeAsyncScript; rem '
    js$ = "Number.MAX_VALUE"; gosub executeAsyncScript; rem '
    js$ = "0"; gosub executeAsyncScript; rem ' Integer
    js$ = "42"; gosub executeAsyncScript; rem ' Integer
    js$ = "2147483647"; gosub executeAsyncScript; rem ' Integer
    js$ = "2147483648"; gosub executeAsyncScript; rem ' Long
    js$ = """true"""; gosub executeAsyncScript; rem ' String
    js$ = """false"""; gosub executeAsyncScript; rem ' String
    js$ = """0"""; gosub executeAsyncScript; rem ' String
    js$ = """1"""; gosub executeAsyncScript; rem ' String
    js$ = """null"""; gosub executeAsyncScript; rem ' String
    js$ = "null"; gosub executeAsyncScript; rem ' null
    js$ = "undefined"; gosub executeAsyncScript; rem ' null
return

executeAsyncScript:
    t = tim
    if (info(3,6)="5" or info(3,6)="6") then
        index! = bui!.executeAsyncScript(js$)
    else
        index! = sysgui!.executeAsyncScript(js$)
    endif
    index = 0; if index!<>null() then index = num(index!)
    t = tim - t, t = t * 3600 * 1000
    System.err.println("executeAsyncScript " + str(index) + " " + js$ + ": " + str(t) + " milliseconds.")
return

executeScript:
    event! = sysgui!.getLastEvent()
    index = 0, index = event!.getIndex(err=*next)
    result! = event!.getResult()
    if result! = null() then result$ = "null" else result$ = result!.getClass().getName()+" "+result!.toString()
    msg$ = event!.getEventName()+" "+str(index)+" "+date(0:"%Hz:%mz:%sz.%tz %p")
    msg$ = msg$ + " result = " + result$ + " script = " + event!.getScript()
    print msg$
    System.err.println(msg$)
    i = msgbox(msg$,0,event!.getEventName())
return

fetch:
    endAction! = bui!.getEndAction(err=*return)
    switch endAction!.getActionType()
        case endAction!.ACTION_APP
            endApp!.setSelected(1)
            endValue!.setText(endAction!.getAppName())
            break
        case endAction!.ACTION_URL
            endUrl!.setSelected(1)
            endValue!.setText(endAction!.getUrl())
            break
        case endAction!.ACTION_MSG
            endMsg!.setSelected(1)
            endValue!.setText(endAction!.getMessage())
            break
        case endAction!.ACTION_NONE
            endNone!.setSelected(1)
            endValue!.setText("")
            break
        case endAction!.ACTION_DEFAULT
            endDefault!.setSelected(1)
            endValue!.setText("")
            break
    swend
    errAction! = bui!.getErrAction(err=*return)
    switch errAction!.getActionType()
        case errAction!.ACTION_APP
            errApp!.setSelected(1)
            errValue!.setText(errAction!.getAppName())
            break
        case errAction!.ACTION_URL
            errUrl!.setSelected(1)
            errValue!.setText(errAction!.getUrl())
            break
        case errAction!.ACTION_MSG
            errMsg!.setSelected(1)
            errValue!.setText(errAction!.getMessage())
            break
        case errAction!.ACTION_NONE
            errNone!.setSelected(1)
            errValue!.setText("")
            break
        case errAction!.ACTION_DEFAULT
            errDefault!.setSelected(1)
            errValue!.setText("")
            break
    swend
return

setEndAction:
    if endApp!.isSelected() then action! = bui!.appAction(endValue!.getText())
    if endUrl!.isSelected() then action! = bui!.urlAction(endValue!.getText())
    if endMsg!.isSelected() then action! = bui!.msgAction(endValue!.getText())
    if endNone!.isSelected() then action! = bui!.noneAction()
    if endDefault!.isSelected() then action! = bui!.defaultAction()
    bui!.setEndAction(action!,err=*return)
return

setErrAction:
    if errApp!.isSelected() then action! = bui!.appAction(errValue!.getText())
    if errUrl!.isSelected() then action! = bui!.urlAction(errValue!.getText())
    if errMsg!.isSelected() then action! = bui!.msgAction(errValue!.getText())
    if errNone!.isSelected() then action! = bui!.noneAction()
    if errDefault!.isSelected() then action! = bui!.defaultAction()
    bui!.setErrAction(action!,err=*return)
return

showConfirmDialogOn:
    bui!.setShowConfirmCloseDialog(1,err=*next)
return

showConfirmDialogOff:
    bui!.setShowConfirmCloseDialog(0,err=*next)
return

showBusy:
    busy! = bui!.getBusyIndicator(err=*return)

    rem ' BBjBusyIndicator::setAttribute BBj 22.02+ DWC
    busy!.setAttribute("spinner-clockwise","false",err=*next)
    busy!.setAttribute("spinner-speed","2000",err=*next)
    busy!.setAttribute("spinner-expanse","3xl",err=*next)
    busy!.setAttribute("spinner-theme","info",err=*next)
    busy!.setText(busyMessage!.getText())
    busy!.setVisible(1)
    wait 3
    busy!.setVisible(0)
return

on_lost_connection:
    event$ = "ON_LOST_CONNECTION"
    goto terminate

on_browser_close:
    event$ = "ON_BROWSER_CLOSE"
    goto terminate

terminate:
    seterr release
    System.err.println(pgm(-2)+" "+event$+" "+str(tcb(19)))
    filename$ = System.getProperty("user.home") + "/Desktop/" + event$ + ".txt"
    u = unt
    open (u,mode="o_create,o_trunk")filename$
    print (u)date(0:"%Hz:%mz:%sz.%tz ")+event$+" "+str(tcb(19))
    close (u)

release:
release -1

See Also

BBjAPI

BBjConfig::releaseOnLostConnection

See the BBj Object Diagram for an illustration of the relationship between BBj Objects.