Applies To: | HTMLRenderer |
Description
This event is triggered when the HTMLRenderer client attempts to open a new window. This could be fired by an HTML <a> tag with the target attribute set to open a URL in a new window or by a JavaScript window.open() call. Note that this does not apply to JavaScript Popup Boxes.
By default the HTMLRenderer ignores a request for a new window, but if the DoPoup event, is enabled, it provides the information needed to process the request in the workspace.
The event message reported as the result of ⎕DQ, or supplied as the right argument to your callback function, is a 4-element vector as follows:
[1] | Object | ref or character vector |
[2] | Event | 'DoPopup' or 846 |
[3] | URL | the requested url |
[4] | Attributes | requested window attributes (see below) |
Attributes is a 7-element nested vector that specifies the requested attributes for the new window. The HTMLRenderer currently provides no mechanism to use this information.
[1] | 2-element vector of top, left positions – positions not specified are ⍬ |
[2] | 2-element vector of height, width – sizes not specified are ⍬ |
[3] | Integer "WindowDisposition". See https://magpcss.org/ceforum/apidocs3/projects/(default)/cef_window_open_disposition_t.html. |
[4] | Boolean menubar (default=1) |
[5] | Boolean scrollbar (default=1 |
[6] | Boolean statusbar (default=1) |
[7] | Boolean location/toolbar (default=1) |
To respond to the request for a new window, the callback function should open the requested URL as appropriate, for example, in a newly created HTMLRenderer object.
For example:
'h'⎕WC 'HTMLRenderer' 'h'⎕WS ('Event' 'DoPopUp' 'DoPopUpCB')
html← '<a href="https://www.dyalog.com"' html,← target="_blank">Dyalog Website</a>' h.HTML←html
∇ DoPopUpCB msg;props;posn [1] props←⊂'URL'(3⊃msg) [2] (posn size)←2↑4⊃msg [3] props,←('Posn'posn)('Size'size) [4] 'popup'⎕WC'HTMLRenderer'props ∇
Extended Example
∇ {r}←DoPopupDemo args;html;h;c;s;e;p;d [1] →EndHTML [2] StartHTML: [3] ⍝<html> [4] ⍝ <head><title>DoPopupDemo</title></head> [5] ⍝<body> [6] ⍝ {} [7] ⍝ <button type="button" onclick="window.open('callback','_blank','width=400,height=200')">Click me!</button> [8] ⍝</body> [9] ⍝</html> [10] EndHTML: [11] html←∊'⍝'(⍳⍨↓⊢)¨(1+StartHTML)↓EndHTML↑⎕NR⊃⎕SI [12] :If 0∊⍴args [13] renderers←⍬ [14] html←'{}'⎕R'This is the original window'⊢html [15] s←'Size'(⍬ ⍬) [16] p←'Posn'(⍬ ⍬) [17] d←'Data' 0 [18] →Create [19] :Else [20] :Select 2⊃args [21] :Case 'DoPopup' [22] d←'Data'(1+⌈/renderers.Data) [23] html←'{}'⎕R('This is window ',⍕2⊃d)⊢html [24] s←'Size'(2⊃4⊃args) [25] p←'Posn'(100+(⊃args).Posn) [26] →Create [27] :Case 'Close' [28] renderers~←⊃args [29] :EndSelect [30] :EndIf [31] →0 [32] Create: [33] h←'HTML'html [34] c←'Coord' 'Pixel' [35] e←'Event'('onAll' 'DoPopupDemo') [36] renderers,←⎕NEW'HTMLRenderer'(h c s p e d) ∇
The example funtion show above will display a new window when the button labelled is pressed. To start, type:
DoPopupDemo ''