EGL Development User Group

EGL Development User Group

EGL Development User Group

The EGL Development User Group is dedicated to sharing news, knowledge, and insights regarding the EGL language and Business Developer product. Consisting of IBMers, HCL, and users, this community collaborates to advance the EGL ecosystem.

 View Only
Expand all | Collapse all

window.addeventlistener in egl rui

  • 1.  window.addeventlistener in egl rui

    Posted Wed September 11, 2019 05:38 PM

    I have a java script that execute on resize (window.addEventListener("resize", onresize, false);).

    What would be the best way to add this logic to my rui program?

    nick_tn


  • 2.  Re: window.addeventlistener in egl rui

    Posted Thu September 12, 2019 03:29 AM

    Do you want to call javascript code from rui, or have rui code be called from javascript?

    Both are possible with externaltypes. Below is an example for a document-keydown-eventhandler:

     

    EGL start function in rui:

            BrowserLib.addDocumentKeyDownEventHandler(Doc_Keydown, uiAlles);

     

    Egl rui Doc_Keydown function:

     

            private function Doc_Keydown(e Event in)                case (currentScherm)                        when (SCHERM_BASE)                                case (e.ch)                                        when(KeyLib.KEY_F1)                                                dlgFuncties.showDialog();                                        when(KeyLib.KEY_F3)                                                sectieZoeken.expand();                                                artikelzoeker.setFocus();                                end                        when (SCHERM_STOCKPLANNING, SCHERM_STOCKPLANNINGVOORSTEL)                                case (e.ch)                                        when (KeyLib.KEY_ESC)                                                displayScherm(SCHERM_BASE, schermBasis);                                 end                end        end     

     

    Library BrowserLib:

    library BrowserLib type BasicLibrary        private browser _BrowserFunctions { };        function addDocumentKeyDownEventHandler(eventHandler EventHandler in, targetWidget Widget in)                browser.addDocumentKeyDownEventHandler(eventHandler, targetWidget);        endend

     

    Externaltype:

    private externalType _BrowserFunctions extends Widget type JavaScriptObject {                relativePath = "customJavaScript/widgets",                javaScriptName = "BrowserFuncts"         }        function addDocumentKeyDownEventHandler(event EventHandler in, targetWidget Widget in);end

     

     

    Javascript:

     

    egl.defineClass(        'customJavaScript.widgets', 'BrowserFuncts',                                            {                     "eze$$initializeDOMElement": function(){                                        },                "constructor": function(){                },                "addDocumentKeyDownEventHandler": function(eventHandler, targetElement){                        addEventHandler(document, 'keydown', function(e) {                                var keyCode = 'which' in e ? e.which : e.keyCode;                                if(keyCode >= 112 && keyCode <= 123) e.preventDefault();                                e.ch = keyCode;                                eventHandler(e);                        }, targetElement);                },    });

     

    Bram_Callewaert


  • 3.  Re: window.addeventlistener in egl rui

    Posted Thu September 12, 2019 09:52 AM

    Hi Bram,

    nice idea with the document-keydown-eventhandler.

    But we've got an error while starting the program with the event handler.

     

    Kind Regards!

    Marcel-D

    Attachments



  • 4.  Re: window.addeventlistener in egl rui

    Posted Thu September 12, 2019 09:56 AM

    Sorry, forgot some code.

     

    The following goes in the javascript source, above the egl.defineclass{...

     

    function getDomElement(e) {        return 'eze$$DOMElement' in e ? e.eze$$DOMElement : e;}function isElementVisibleInDOM(e) {        return getDomElement(e).offsetParent != null;}function addEventHandler(element, eventName, eventHandler, targetElement) {        if(targetElement) {                targetElement = getDomElement(targetElement);                element.addEventListener(eventName, function(e) {                        if(isElementVisibleInDOM(targetElement)) eventHandler(e);                }, false);        } else element.addEventListener(eventName, eventHandler, false);}

     

    Bram_Callewaert


  • 5.  Re: window.addeventlistener in egl rui

    Posted Thu September 12, 2019 10:02 AM

    Now it works Yes

    Thanks for sharing.

     

    Marcel-D