<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: dojox toaster in map div in ArcGIS JavaScript Maps SDK Questions</title>
    <link>https://community.esri.com/t5/arcgis-javascript-maps-sdk-questions/dojox-toaster-in-map-div/m-p/544221#M50672</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I GUESS THERE'S A CHARACTER LIMIT SO THIS IS COMING IN TWO PARTS...&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;It's the default nature of the toaster is to have the window as it's container. It's a modification to the widget time! Here's my modification to 1) set the target to the map (or any other element with an id) and 2) add center down. I started to add center up but never did. The the other positions may or may not work. As I recall there was an issue with right. All I wanted was center down so I didn't go any further or clean it up (probably buried 42 pages deep in my to do list).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Notes:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;The namespace and class are changed to mods.widget.MapToaster. Change to your custom module path. Of course all dojo module naming and path conventions must be followed.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Anything I changed is proceeded with //MODIFY and a brief description of the change.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;This is uncompressed and still contains the author's comments.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The widget code:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="plain" name="code"&gt;define([ &amp;nbsp; "dojo/_base/declare", // declare &amp;nbsp; "dojo/_base/lang", // lang.getObject... &amp;nbsp; "dojo/_base/connect", // connect.connect, connect.subscribe &amp;nbsp; "dojo/_base/fx", // fx.fadeOut &amp;nbsp; "dojo/dom-style", // domStyle.set &amp;nbsp; "dojo/dom-class", // domClass.add &amp;nbsp; "dojo/dom-geometry", // domGeometry.getMarginBox &amp;nbsp; "dijit/registry", // registry.getUniqueId() &amp;nbsp; "dijit/_WidgetBase", &amp;nbsp; "dijit/_TemplatedMixin", &amp;nbsp; "dijit/BackgroundIframe", &amp;nbsp; "dojo/fx", &amp;nbsp; "dojo/has", &amp;nbsp; "dojo/_base/window", &amp;nbsp; "dojo/window" ], function (declare, lang, connect, baseFx, domStyle, domClass, domGeometry, registry, WidgetBase, Templated, BackgroundIframe, coreFx, has, baseWindow, window) {&amp;nbsp; &amp;nbsp; lang.getObject("dojox.widget", true);&amp;nbsp; &amp;nbsp; var capitalize = function ( /* String */ w) { &amp;nbsp;&amp;nbsp;&amp;nbsp; return w.substring(0, 1).toUpperCase() + w.substring(1); &amp;nbsp; }; &amp;nbsp; //MODIFY dojox.widget.Toaster to mods.widget.MapToaster &amp;nbsp; return declare("mods.widget.MapToaster", [WidgetBase, Templated], { &amp;nbsp;&amp;nbsp;&amp;nbsp; // summary: &amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; Message that slides in from the corner of the screen, used for notifications &amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; like "new email". &amp;nbsp;&amp;nbsp;&amp;nbsp; //MODIFY add "Map" to classes &amp;nbsp;&amp;nbsp;&amp;nbsp; templateString: '&amp;lt;div class="dijitMapToasterClip" dojoAttachPoint="clipNode"&amp;gt;&amp;lt;div class="dijitMapToasterContainer" dojoAttachPoint="containerNode" dojoAttachEvent="onclick:onSelect"&amp;gt;&amp;lt;div class="dijitMapToasterContent" dojoAttachPoint="contentNode"&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;',&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // messageTopic: String &amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; Name of topic; anything published to this topic will be displayed as a message. &amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; Message format is either String or an object like &amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; {message: "hello word", type: "error", duration: 500} &amp;nbsp;&amp;nbsp;&amp;nbsp; messageTopic: "",&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // messageTypes: Enumeration &amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; Possible message types. &amp;nbsp;&amp;nbsp;&amp;nbsp; messageTypes: { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MESSAGE: "message", &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WARNING: "warning", &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ERROR: "error", &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FATAL: "fatal" &amp;nbsp;&amp;nbsp;&amp;nbsp; },&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // defaultType: String &amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; If message type isn't specified (see "messageTopic" parameter), &amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; then display message as this type. &amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; Possible values in messageTypes enumeration ("message", "warning", "error", "fatal") &amp;nbsp;&amp;nbsp;&amp;nbsp; defaultType: "message",&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // positionDirection: String &amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; Position from which message slides into screen, one of &amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; ["br-up", "br-left", "bl-up", "bl-right", "tr-down", "tr-left", "tl-down", "tl-right"] &amp;nbsp;&amp;nbsp;&amp;nbsp; //MODIFY default to "tc-down" &amp;nbsp;&amp;nbsp;&amp;nbsp; positionDirection: "tc-down",&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // positionDirectionTypes: Array &amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; Possible values for positionDirection parameter &amp;nbsp;&amp;nbsp;&amp;nbsp; //MODIFY add direction types "bc-up" and "tc-down" &amp;nbsp;&amp;nbsp;&amp;nbsp; positionDirectionTypes: ["br-up", "br-left", "bl-up", "bl-right", "tr-down", "tr-left", "tl-down", "tl-right", "bc-up", "tc-down"],&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // duration: Integer &amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; Number of milliseconds to show message &amp;nbsp;&amp;nbsp;&amp;nbsp; duration: 2000,&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // slideDuration: Integer &amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; Number of milliseconds for the slide animation, increasing will cause the Toaster &amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; to slide in more slowly. &amp;nbsp;&amp;nbsp;&amp;nbsp; slideDuration: 500,&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // separator: String &amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; String used to separate messages if consecutive calls are made to setContent before previous messages go away &amp;nbsp;&amp;nbsp;&amp;nbsp; //MODIFY no need for separator - see _setContent &amp;nbsp;&amp;nbsp;&amp;nbsp; //separator: "&amp;lt;hr&amp;gt;&amp;lt;/hr&amp;gt;",&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //MODIFY map div (or other container) id &amp;nbsp;&amp;nbsp;&amp;nbsp; mapId: 'map',&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; postCreate: function () { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.inherited(arguments); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.hide();&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // place node as a child of body for positioning &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; baseWindow.body().appendChild(this.domNode);&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (this.messageTopic) { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; connect.subscribe(this.messageTopic, this, "_handleMessage"); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &amp;nbsp;&amp;nbsp;&amp;nbsp; },&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _handleMessage: function ( /*String|Object*/ message) { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (lang.isString(message)) { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.setContent(message); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.setContent(message.message, message.type, message.duration); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &amp;nbsp;&amp;nbsp;&amp;nbsp; },&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; setContent: function ( /*String|Function*/ message, /*String*/ messageType, /*int?*/ duration) { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // summary: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; sets and displays the given message and show duration &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // message: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; the message. If this is a function, it will be called with this toaster widget as the only argument. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // messageType: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; type of message; possible values in messageTypes enumeration ("message", "warning", "error", "fatal") &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // duration: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; duration in milliseconds to display message before removing it. Widget has default value. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; duration = duration || this.duration; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // sync animations so there are no ghosted fades and such &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (this.slideAnim) { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (this.slideAnim.status() != "playing") { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.slideAnim.stop(); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (this.slideAnim.status() == "playing" || (this.fadeAnim &amp;amp;&amp;amp; this.fadeAnim.status() == "playing")) { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; setTimeout(lang.hitch(this, function () { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.setContent(message, messageType, duration); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }), 50); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // determine type of content and apply appropriately &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (var type in this.messageTypes) { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //MODIFY add "Map" to classes &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; domClass.remove(this.containerNode, "dijitMapToaster" + capitalize(this.messageTypes[type])); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; domStyle.set(this.containerNode, "opacity", 1);&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this._setContent(message);&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //MODIFY add "Map" to classes &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; domClass.add(this.containerNode, "dijitMapToaster" + capitalize(messageType || this.defaultType));&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // now do funky animation of widget appearing from &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // bottom right of page and up &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.show(); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var nodeSize = domGeometry.getMarginBox(this.containerNode); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this._cancelHideTimer(); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (this.isVisible) { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this._placeClip(); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //update hide timer if no sticky message in stack &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!this._stickyMessage) { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this._setHideTimer(duration); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var style = this.containerNode.style; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var pd = this.positionDirection; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // sets up initial position of container node and slide-out direction &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (pd.indexOf("-up") &amp;gt;= 0) { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; style.left = 0 + "px"; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; style.top = nodeSize.h + 10 + "px"; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else if (pd.indexOf("-left") &amp;gt;= 0) { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; style.left = nodeSize.w + 10 + "px"; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; style.top = 0 + "px"; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else if (pd.indexOf("-right") &amp;gt;= 0) { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; style.left = 0 - nodeSize.w - 10 + "px"; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; style.top = 0 + "px"; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else if (pd.indexOf("-down") &amp;gt;= 0) { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; style.left = 0 + "px"; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; style.top = 0 - nodeSize.h - 10 + "px"; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new Error(this.id + ".positionDirection is invalid: " + pd); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.slideAnim = coreFx.slideTo({ &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; node: this.containerNode, &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; top: 0, &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; left: 0, &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; duration: this.slideDuration &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.connect(this.slideAnim, "onEnd", function (nodes, anim) { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //we build the fadeAnim here so we dont have to duplicate it later &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // can't do a fadeHide because we're fading the &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // inner node rather than the clipping node &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.fadeAnim = baseFx.fadeOut({ &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; node: this.containerNode, &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; duration: 1000 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.connect(this.fadeAnim, "onEnd", function (evt) { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.isVisible = false; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.hide(); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this._setHideTimer(duration); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.connect(this, 'onSelect', function (evt) { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this._cancelHideTimer(); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //force clear sticky message &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this._stickyMessage = false; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.fadeAnim.play(); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.isVisible = true; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.slideAnim.play(); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &amp;nbsp;&amp;nbsp;&amp;nbsp; }, //CONTINUED IN NEXT POST&lt;/PRE&gt;&lt;DIV style="display:none;"&gt; &lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 03 Oct 2013 21:39:31 GMT</pubDate>
    <dc:creator>BenFousek</dc:creator>
    <dc:date>2013-10-03T21:39:31Z</dc:date>
    <item>
      <title>dojox toaster in map div</title>
      <link>https://community.esri.com/t5/arcgis-javascript-maps-sdk-questions/dojox-toaster-in-map-div/m-p/544220#M50671</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I was interested in using the Dojox widget toaster.&amp;nbsp; I am able to get it to show up, but cannot seem to place it in the center map div.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;A google search notes that others were interested as well... &lt;/SPAN&gt;&lt;BR /&gt;&lt;A class="jive-link-external-small" href="http://dojo-toolkit.33424.n3.nabble.com/attaching-dojox-widget-Toaster-to-center-pane-in-BorderContainer-td3100266.html" rel="nofollow" target="_blank"&gt;http://dojo-toolkit.33424.n3.nabble.com/attaching-dojox-widget-Toaster-to-center-pane-in-BorderContainer-td3100266.html&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Anyone got any ideas on how to place a toaster into the center map container???&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;using the chrome console I attempted to place the toaster but with no luck.... dojo.place('mytoaster', 'mapdiv')&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;As a work-around, I could use a dialog or simply populate, show and then fade out a div in the map div, but I'd like to use toaster if I can... &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt;&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 03 Oct 2013 20:45:21 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-javascript-maps-sdk-questions/dojox-toaster-in-map-div/m-p/544220#M50671</guid>
      <dc:creator>JeffreySchmidt</dc:creator>
      <dc:date>2013-10-03T20:45:21Z</dc:date>
    </item>
    <item>
      <title>Re: dojox toaster in map div</title>
      <link>https://community.esri.com/t5/arcgis-javascript-maps-sdk-questions/dojox-toaster-in-map-div/m-p/544221#M50672</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I GUESS THERE'S A CHARACTER LIMIT SO THIS IS COMING IN TWO PARTS...&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;It's the default nature of the toaster is to have the window as it's container. It's a modification to the widget time! Here's my modification to 1) set the target to the map (or any other element with an id) and 2) add center down. I started to add center up but never did. The the other positions may or may not work. As I recall there was an issue with right. All I wanted was center down so I didn't go any further or clean it up (probably buried 42 pages deep in my to do list).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Notes:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;The namespace and class are changed to mods.widget.MapToaster. Change to your custom module path. Of course all dojo module naming and path conventions must be followed.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Anything I changed is proceeded with //MODIFY and a brief description of the change.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;This is uncompressed and still contains the author's comments.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The widget code:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="plain" name="code"&gt;define([ &amp;nbsp; "dojo/_base/declare", // declare &amp;nbsp; "dojo/_base/lang", // lang.getObject... &amp;nbsp; "dojo/_base/connect", // connect.connect, connect.subscribe &amp;nbsp; "dojo/_base/fx", // fx.fadeOut &amp;nbsp; "dojo/dom-style", // domStyle.set &amp;nbsp; "dojo/dom-class", // domClass.add &amp;nbsp; "dojo/dom-geometry", // domGeometry.getMarginBox &amp;nbsp; "dijit/registry", // registry.getUniqueId() &amp;nbsp; "dijit/_WidgetBase", &amp;nbsp; "dijit/_TemplatedMixin", &amp;nbsp; "dijit/BackgroundIframe", &amp;nbsp; "dojo/fx", &amp;nbsp; "dojo/has", &amp;nbsp; "dojo/_base/window", &amp;nbsp; "dojo/window" ], function (declare, lang, connect, baseFx, domStyle, domClass, domGeometry, registry, WidgetBase, Templated, BackgroundIframe, coreFx, has, baseWindow, window) {&amp;nbsp; &amp;nbsp; lang.getObject("dojox.widget", true);&amp;nbsp; &amp;nbsp; var capitalize = function ( /* String */ w) { &amp;nbsp;&amp;nbsp;&amp;nbsp; return w.substring(0, 1).toUpperCase() + w.substring(1); &amp;nbsp; }; &amp;nbsp; //MODIFY dojox.widget.Toaster to mods.widget.MapToaster &amp;nbsp; return declare("mods.widget.MapToaster", [WidgetBase, Templated], { &amp;nbsp;&amp;nbsp;&amp;nbsp; // summary: &amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; Message that slides in from the corner of the screen, used for notifications &amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; like "new email". &amp;nbsp;&amp;nbsp;&amp;nbsp; //MODIFY add "Map" to classes &amp;nbsp;&amp;nbsp;&amp;nbsp; templateString: '&amp;lt;div class="dijitMapToasterClip" dojoAttachPoint="clipNode"&amp;gt;&amp;lt;div class="dijitMapToasterContainer" dojoAttachPoint="containerNode" dojoAttachEvent="onclick:onSelect"&amp;gt;&amp;lt;div class="dijitMapToasterContent" dojoAttachPoint="contentNode"&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;',&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // messageTopic: String &amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; Name of topic; anything published to this topic will be displayed as a message. &amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; Message format is either String or an object like &amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; {message: "hello word", type: "error", duration: 500} &amp;nbsp;&amp;nbsp;&amp;nbsp; messageTopic: "",&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // messageTypes: Enumeration &amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; Possible message types. &amp;nbsp;&amp;nbsp;&amp;nbsp; messageTypes: { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MESSAGE: "message", &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WARNING: "warning", &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ERROR: "error", &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FATAL: "fatal" &amp;nbsp;&amp;nbsp;&amp;nbsp; },&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // defaultType: String &amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; If message type isn't specified (see "messageTopic" parameter), &amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; then display message as this type. &amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; Possible values in messageTypes enumeration ("message", "warning", "error", "fatal") &amp;nbsp;&amp;nbsp;&amp;nbsp; defaultType: "message",&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // positionDirection: String &amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; Position from which message slides into screen, one of &amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; ["br-up", "br-left", "bl-up", "bl-right", "tr-down", "tr-left", "tl-down", "tl-right"] &amp;nbsp;&amp;nbsp;&amp;nbsp; //MODIFY default to "tc-down" &amp;nbsp;&amp;nbsp;&amp;nbsp; positionDirection: "tc-down",&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // positionDirectionTypes: Array &amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; Possible values for positionDirection parameter &amp;nbsp;&amp;nbsp;&amp;nbsp; //MODIFY add direction types "bc-up" and "tc-down" &amp;nbsp;&amp;nbsp;&amp;nbsp; positionDirectionTypes: ["br-up", "br-left", "bl-up", "bl-right", "tr-down", "tr-left", "tl-down", "tl-right", "bc-up", "tc-down"],&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // duration: Integer &amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; Number of milliseconds to show message &amp;nbsp;&amp;nbsp;&amp;nbsp; duration: 2000,&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // slideDuration: Integer &amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; Number of milliseconds for the slide animation, increasing will cause the Toaster &amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; to slide in more slowly. &amp;nbsp;&amp;nbsp;&amp;nbsp; slideDuration: 500,&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // separator: String &amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; String used to separate messages if consecutive calls are made to setContent before previous messages go away &amp;nbsp;&amp;nbsp;&amp;nbsp; //MODIFY no need for separator - see _setContent &amp;nbsp;&amp;nbsp;&amp;nbsp; //separator: "&amp;lt;hr&amp;gt;&amp;lt;/hr&amp;gt;",&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; //MODIFY map div (or other container) id &amp;nbsp;&amp;nbsp;&amp;nbsp; mapId: 'map',&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; postCreate: function () { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.inherited(arguments); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.hide();&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // place node as a child of body for positioning &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; baseWindow.body().appendChild(this.domNode);&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (this.messageTopic) { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; connect.subscribe(this.messageTopic, this, "_handleMessage"); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &amp;nbsp;&amp;nbsp;&amp;nbsp; },&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; _handleMessage: function ( /*String|Object*/ message) { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (lang.isString(message)) { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.setContent(message); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.setContent(message.message, message.type, message.duration); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &amp;nbsp;&amp;nbsp;&amp;nbsp; },&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; setContent: function ( /*String|Function*/ message, /*String*/ messageType, /*int?*/ duration) { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // summary: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; sets and displays the given message and show duration &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // message: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; the message. If this is a function, it will be called with this toaster widget as the only argument. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // messageType: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; type of message; possible values in messageTypes enumeration ("message", "warning", "error", "fatal") &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // duration: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; duration in milliseconds to display message before removing it. Widget has default value. &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; duration = duration || this.duration; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // sync animations so there are no ghosted fades and such &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (this.slideAnim) { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (this.slideAnim.status() != "playing") { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.slideAnim.stop(); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (this.slideAnim.status() == "playing" || (this.fadeAnim &amp;amp;&amp;amp; this.fadeAnim.status() == "playing")) { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; setTimeout(lang.hitch(this, function () { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.setContent(message, messageType, duration); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }), 50); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // determine type of content and apply appropriately &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (var type in this.messageTypes) { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //MODIFY add "Map" to classes &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; domClass.remove(this.containerNode, "dijitMapToaster" + capitalize(this.messageTypes[type])); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; domStyle.set(this.containerNode, "opacity", 1);&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this._setContent(message);&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //MODIFY add "Map" to classes &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; domClass.add(this.containerNode, "dijitMapToaster" + capitalize(messageType || this.defaultType));&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // now do funky animation of widget appearing from &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // bottom right of page and up &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.show(); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var nodeSize = domGeometry.getMarginBox(this.containerNode); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this._cancelHideTimer(); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (this.isVisible) { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this._placeClip(); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //update hide timer if no sticky message in stack &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!this._stickyMessage) { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this._setHideTimer(duration); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var style = this.containerNode.style; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var pd = this.positionDirection; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // sets up initial position of container node and slide-out direction &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (pd.indexOf("-up") &amp;gt;= 0) { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; style.left = 0 + "px"; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; style.top = nodeSize.h + 10 + "px"; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else if (pd.indexOf("-left") &amp;gt;= 0) { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; style.left = nodeSize.w + 10 + "px"; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; style.top = 0 + "px"; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else if (pd.indexOf("-right") &amp;gt;= 0) { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; style.left = 0 - nodeSize.w - 10 + "px"; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; style.top = 0 + "px"; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else if (pd.indexOf("-down") &amp;gt;= 0) { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; style.left = 0 + "px"; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; style.top = 0 - nodeSize.h - 10 + "px"; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new Error(this.id + ".positionDirection is invalid: " + pd); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.slideAnim = coreFx.slideTo({ &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; node: this.containerNode, &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; top: 0, &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; left: 0, &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; duration: this.slideDuration &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.connect(this.slideAnim, "onEnd", function (nodes, anim) { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //we build the fadeAnim here so we dont have to duplicate it later &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // can't do a fadeHide because we're fading the &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // inner node rather than the clipping node &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.fadeAnim = baseFx.fadeOut({ &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; node: this.containerNode, &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; duration: 1000 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.connect(this.fadeAnim, "onEnd", function (evt) { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.isVisible = false; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.hide(); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this._setHideTimer(duration); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.connect(this, 'onSelect', function (evt) { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this._cancelHideTimer(); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //force clear sticky message &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this._stickyMessage = false; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.fadeAnim.play(); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.isVisible = true; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.slideAnim.play(); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &amp;nbsp;&amp;nbsp;&amp;nbsp; }, //CONTINUED IN NEXT POST&lt;/PRE&gt;&lt;DIV style="display:none;"&gt; &lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 03 Oct 2013 21:39:31 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-javascript-maps-sdk-questions/dojox-toaster-in-map-div/m-p/544221#M50672</guid>
      <dc:creator>BenFousek</dc:creator>
      <dc:date>2013-10-03T21:39:31Z</dc:date>
    </item>
    <item>
      <title>Re: dojox toaster in map div</title>
      <link>https://community.esri.com/t5/arcgis-javascript-maps-sdk-questions/dojox-toaster-in-map-div/m-p/544223#M50674</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Thank you Ben, I appreciate the help!&amp;nbsp; I intend to implement this next week.&amp;nbsp; &lt;span class="lia-unicode-emoji" title=":winking_face:"&gt;😉&lt;/span&gt;&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 04 Oct 2013 19:42:18 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-javascript-maps-sdk-questions/dojox-toaster-in-map-div/m-p/544223#M50674</guid>
      <dc:creator>JeffreySchmidt</dc:creator>
      <dc:date>2013-10-04T19:42:18Z</dc:date>
    </item>
    <item>
      <title>Re: dojox toaster in map div</title>
      <link>https://community.esri.com/t5/arcgis-javascript-maps-sdk-questions/dojox-toaster-in-map-div/m-p/544222#M50673</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
//CONTINUED FROM LAST POST
&amp;nbsp;&amp;nbsp;&amp;nbsp; _setContent: function (message) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (lang.isFunction(message)) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; message(this);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //MODIFY if the toaster is visible simply switch out the current message with new message
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*if(message &amp;amp;&amp;amp; this.isVisible){
&amp;nbsp;&amp;nbsp;&amp;nbsp; message = this.contentNode.innerHTML + this.separator + message;
&amp;nbsp;&amp;nbsp; }*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.contentNode.innerHTML = message;
&amp;nbsp;&amp;nbsp;&amp;nbsp; },
&amp;nbsp;&amp;nbsp;&amp;nbsp; _cancelHideTimer: function () {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (this._hideTimer) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; clearTimeout(this._hideTimer);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this._hideTimer = null;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; },

&amp;nbsp;&amp;nbsp;&amp;nbsp; _setHideTimer: function (duration) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this._cancelHideTimer();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //if duration == 0 we keep the message displayed until clicked
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (duration &amp;gt; 0) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this._cancelHideTimer();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this._hideTimer = setTimeout(lang.hitch(this, function (evt) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // we must hide the iframe in order to fade
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // TODO: figure out how to fade with a BackgroundIframe
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (this.bgIframe &amp;amp;&amp;amp; this.bgIframe.iframe) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.bgIframe.iframe.style.display = "none";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this._hideTimer = null;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //force clear sticky message
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this._stickyMessage = false;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.fadeAnim.play();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }), duration);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this._stickyMessage = true;
&amp;nbsp;&amp;nbsp;&amp;nbsp; },

&amp;nbsp;&amp;nbsp;&amp;nbsp; _placeClip: function () {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //MODIFY view is the map (or other container) and border is its border
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //var view = window.getBox();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var pos = domGeometry.position(this.mapId);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var view = {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; w: pos.w,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; h: pos.h,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t: pos.y,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; l: pos.x
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; };

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var border = domGeometry.getBorderExtents(this.mapId);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var nodeSize = domGeometry.getMarginBox(this.containerNode);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var style = this.clipNode.style;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // sets up the size of the clipping node
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; style.height = nodeSize.h + "px";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; style.width = nodeSize.w + "px";

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // sets up the position of the clipping node
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var pd = this.positionDirection;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (pd.match(/^t/)) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //MODIFY + border top
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //style.top = view.t+"px";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; style.top = (view.t + border.t) + "px";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else if (pd.match(/^b/)) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //MODIFY + border top
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //style.top = (view.h - nodeSize.h - 2 + view.t)+"px";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; style.top = (view.h - nodeSize.h - 2 + view.t + border.t) + "px";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (pd.match(/^[tb]r-/)) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; style.left = (view.w - nodeSize.w - 1 - view.l) + "px";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else if (pd.match(/^[tb]l-/)) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //MODIFY [top/bottom]-left set to view left + left border width
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //style.left = 0 + "px";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; style.left = (view.l + border.l) + "px";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else if (pd.match(/^[tb]c-/)) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //MODIFY [top/bottom]-center is view/2 + view left + border left - node/2
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //style.left = Math.round((view.w - nodeSize.w - 1 - view.l)/2)+"px";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; style.left = (Math.round(view.w / 2) + view.l + border.l - (nodeSize.w / 2)) + "px";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; style.clip = "rect(0px, " + nodeSize.w + "px, " + nodeSize.h + "px, 0px)";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (has("ie")) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!this.bgIframe) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //MODIFY registry.getUniqueId
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //this.clipNode.id = registry.getUniqueId("dojox_widget_Toaster_clipNode");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.clipNode.id = registry.getUniqueId("mods_widget_MapToaster_clipNode");
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.bgIframe = new BackgroundIframe(this.clipNode);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var iframe = this.bgIframe.iframe;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (iframe) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; iframe.style.display = "block";
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; },

&amp;nbsp;&amp;nbsp;&amp;nbsp; onSelect: function ( /*Event*/ e) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // summary:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; callback for when user clicks the message
&amp;nbsp;&amp;nbsp;&amp;nbsp; },

&amp;nbsp;&amp;nbsp;&amp;nbsp; show: function () {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // summary:'
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; show the Toaster
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; domStyle.set(this.domNode, 'display', 'block');

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this._placeClip();

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!this._scrollConnected) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this._scrollConnected = connect.connect(window, "onscroll", this, this._placeClip);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; },

&amp;nbsp;&amp;nbsp;&amp;nbsp; hide: function () {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // summary:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp; hide the Toaster

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; domStyle.set(this.domNode, 'display', 'none');

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (this._scrollConnected) {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; connect.disconnect(this._scrollConnected);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this._scrollConnected = false;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; domStyle.set(this.containerNode, "opacity", 1);
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp; });

});&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;The css:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;/* map toaster */
.dijitMapToasterContent {
 padding:0.75em;
 background:#B5BCC7;
 /*background-color:rgb(181,188,199);
 background-color:rgba(181,188,199,0.9);*/
 text-align:center;
 -webkit-border-radius:0px 0px 10px 10px;
 border-radius:0px 0px 10px 10px;
}
.dijitMapToasterMessage{ 
 /*color:#fff;*/
}
.dijitMapToasterWarning,
.dijitMapToasterError,
.dijitMapToasterFatal{
 font-weight:bold;
 color:#fff;
}
.dijitMapToasterWarning .dijitMapToasterContent{
 background:#900;
} 
.dijitMapToasterError .dijitMapToasterContent{
 background:#990;
}
.dijitMapToasterClip {
 position: absolute;
 z-index: 5000;
 overflow: hidden;
}
.dijitMapToasterContainer {
 display: block;
 position: absolute;
 width: 200px;
 margin: 0px;
 /*font:0.75em;*/
}&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Create it with the added parameter mapId for the id of the map div, not the map object itself.&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;app.map.toaster = new mods.widget.MapToaster({ mapId: 'center-map', defaultType: 'message', duration: 3500, positionDirection: 'tc-down' });&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Call for it:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;app.map.toaster.setContent('Click map to draw point.');&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Not generally this forthcoming with stuff like this, but guess what: I clicked on the link in your post and saw myself asking a question that never got answered. Forgot about that. Mine didn't get answered but yours will.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 23:33:10 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-javascript-maps-sdk-questions/dojox-toaster-in-map-div/m-p/544222#M50673</guid>
      <dc:creator>BenFousek</dc:creator>
      <dc:date>2021-12-11T23:33:10Z</dc:date>
    </item>
  </channel>
</rss>

