123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846 |
- if (!dojo._hasResource["dojox.widget.FisheyeList"]) { // _hasResource checks
- // added by build. Do
- // not use _hasResource
- // directly in your
- // code.
- dojo._hasResource["dojox.widget.FisheyeList"] = true;
- dojo.provide("dojox.widget.FisheyeList");
- dojo.require("dijit._Widget");
- dojo.require("dijit._Templated");
- dojo.require("dijit._Container");
- dojo.declare("dojox.widget.FisheyeList", [dijit._Widget, dijit._Templated,
- dijit._Container], {
- // summary:
- // Menu similar to the fish eye menu on the Mac OS
- // example:
- // | <div dojoType="FisheyeList"
- // | itemWidth="40" itemHeight="40"
- // | itemMaxWidth="150" itemMaxHeight="150"
- // | orientation="horizontal"
- // | effectUnits="2"
- // | itemPadding="10"
- // | attachEdge="center"
- // | labelEdge="bottom">
- // |
- // | <div dojoType="FisheyeListItem"
- // | id="item1"
- // | onclick="alert('click on' + this.label + '(from widget id '
- // + this.widgetId + ')!');"
- // | label="Item 1"
- // | iconSrc="images/fisheye_1.png">
- // | </div>
- // | ...
- // | </div>
- //
- constructor : function() {
- //
- // TODO
- // fix really long labels in vertical mode
- //
- this.pos = {
- 'x' : -1,
- 'y' : -1
- }; // current cursor position, relative to the grid
- // for conservative trigger mode, when triggered, timerScale
- // is gradually increased from 0 to 1
- this.timerScale = 1.0;
- },
- EDGE : {
- CENTER : 0,
- LEFT : 1,
- RIGHT : 2,
- TOP : 3,
- BOTTOM : 4
- },
- templateString : '<div class="dojoxFisheyeListBar" dojoAttachPoint="containerNode"></div>',
- snarfChildDomOutput : true,
- // itemWidth: Integer
- // width of menu item (in pixels) in it's dormant state (when
- // the mouse is far away)
- itemWidth : 40,
- // itemHeight: Integer
- // height of menu item (in pixels) in it's dormant state (when
- // the mouse is far away)
- itemHeight : 40,
- // itemMaxWidth: Integer
- // width of menu item (in pixels) in it's fully enlarged state
- // (when the mouse is directly over it)
- itemMaxWidth : 150,
- // itemMaxHeight: Integer
- // height of menu item (in pixels) in it's fully enlarged state
- // (when the mouse is directly over it)
- itemMaxHeight : 150,
- imgNode : null,
- // orientation: String
- // orientation of the menu, either "horizontal" or "vertical"
- orientation : 'horizontal',
- // isFixed: Boolean
- // toggle to enable additional listener (window scroll) if
- // FisheyeList is in a fixed postion
- isFixed : false,
- // conservativeTrigger: Boolean
- // if true, don't start enlarging menu items until mouse is over
- // an image;
- // if false, start enlarging menu items as the mouse moves near
- // them.
- conservativeTrigger : false,
- // effectUnits: Number
- // controls how much reaction the menu makes, relative to the
- // distance of the mouse from the menu
- effectUnits : 2,
- // itemPadding: Integer
- // padding (in pixels) betweeen each menu item
- itemPadding : 10,
- // attachEdge: String
- // controls the border that the menu items don't expand past;
- // for example, if set to "top", then the menu items will drop
- // downwards as they expand.
- // values
- // "center", "left", "right", "top", "bottom".
- attachEdge : 'center',
- // labelEdge: String
- // controls were the labels show up in relation to the menu item
- // icons
- // values
- // "center", "left", "right", "top", "bottom".
- labelEdge : 'bottom',
- postCreate : function() {
- var e = this.EDGE;
- dojo.setSelectable(this.domNode, false);
- var isHorizontal = this.isHorizontal = (this.orientation == 'horizontal');
- this.selectedNode = -1;
- this.isOver = false;
- this.hitX1 = -1;
- this.hitY1 = -1;
- this.hitX2 = -1;
- this.hitY2 = -1;
- //
- // only some edges make sense...
- //
- this.anchorEdge = this._toEdge(this.attachEdge, e.CENTER);
- this.labelEdge = this._toEdge(this.labelEdge, e.TOP);
- if (this.labelEdge == e.CENTER) {
- this.labelEdge = e.TOP;
- }
- if (isHorizontal) {
- if (this.anchorEdge == e.LEFT) {
- this.anchorEdge = e.CENTER;
- }
- if (this.anchorEdge == e.RIGHT) {
- this.anchorEdge = e.CENTER;
- }
- if (this.labelEdge == e.LEFT) {
- this.labelEdge = e.TOP;
- }
- if (this.labelEdge == e.RIGHT) {
- this.labelEdge = e.TOP;
- }
- } else {
- if (this.anchorEdge == e.TOP) {
- this.anchorEdge = e.CENTER;
- }
- if (this.anchorEdge == e.BOTTOM) {
- this.anchorEdge = e.CENTER;
- }
- if (this.labelEdge == e.TOP) {
- this.labelEdge = e.LEFT;
- }
- if (this.labelEdge == e.BOTTOM) {
- this.labelEdge = e.LEFT;
- }
- }
- //
- // figure out the proximity size
- //
- var effectUnits = this.effectUnits;
- this.proximityLeft = this.itemWidth * (effectUnits - 0.5);
- this.proximityRight = this.itemWidth * (effectUnits - 0.5);
- this.proximityTop = this.itemHeight * (effectUnits - 0.5);
- this.proximityBottom = this.itemHeight
- * (effectUnits - 0.5);
- if (this.anchorEdge == e.LEFT) {
- this.proximityLeft = 0;
- }
- if (this.anchorEdge == e.RIGHT) {
- this.proximityRight = 0;
- }
- if (this.anchorEdge == e.TOP) {
- this.proximityTop = 0;
- }
- if (this.anchorEdge == e.BOTTOM) {
- this.proximityBottom = 0;
- }
- if (this.anchorEdge == e.CENTER) {
- this.proximityLeft /= 2;
- this.proximityRight /= 2;
- this.proximityTop /= 2;
- this.proximityBottom /= 2;
- }
- },
- startup : function() {
- // summary: create our connections and setup our FisheyeList
- this.children = this.getChildren();
- // original postCreate() --tk
- this._initializePositioning();
- //
- // in liberal trigger mode, activate menu whenever mouse is
- // close
- //
- if (!this.conservativeTrigger) {
- this._onMouseMoveHandle = dojo.connect(
- document.documentElement, "onmousemove", this,
- "_onMouseMove");
- }
- if (this.isFixed) {
- this._onScrollHandle = dojo.connect(document,
- "onscroll", this, "_onScroll");
- }
- // Deactivate the menu if mouse is moved off screen (doesn't
- // work for FF?)
- this._onMouseOutHandle = dojo.connect(
- document.documentElement, "onmouseout", this,
- "_onBodyOut");
- this._addChildHandle = dojo.connect(this, "addChild", this,
- "_initializePositioning");
- this._onResizeHandle = dojo.connect(window, "onresize",
- this, "_initializePositioning");
- },
- _initializePositioning : function() {
- this.itemCount = this.children.length;
- this.barWidth = (this.isHorizontal ? this.itemCount : 1)
- * this.itemWidth;
- this.barHeight = (this.isHorizontal ? 1 : this.itemCount)
- * this.itemHeight;
- this.totalWidth = this.proximityLeft + this.proximityRight
- + this.barWidth;
- this.totalHeight = this.proximityTop + this.proximityBottom
- + this.barHeight;
- //
- // calculate effect ranges for each item
- //
- for (var i = 0; i < this.children.length; i++) {
- this.children[i].posX = this.itemWidth
- * (this.isHorizontal ? i : 0);
- this.children[i].posY = this.itemHeight
- * (this.isHorizontal ? 0 : i);
- this.children[i].cenX = this.children[i].posX
- + (this.itemWidth / 2);
- this.children[i].cenY = this.children[i].posY
- + (this.itemHeight / 2);
- var isz = this.isHorizontal
- ? this.itemWidth
- : this.itemHeight;
- var r = this.effectUnits * isz;
- var c = this.isHorizontal
- ? this.children[i].cenX
- : this.children[i].cenY;
- var lhs = this.isHorizontal
- ? this.proximityLeft
- : this.proximityTop;
- var rhs = this.isHorizontal
- ? this.proximityRight
- : this.proximityBottom;
- var siz = this.isHorizontal
- ? this.barWidth
- : this.barHeight;
- var range_lhs = r;
- var range_rhs = r;
- if (range_lhs > c + lhs) {
- range_lhs = c + lhs;
- }
- if (range_rhs > (siz - c + rhs)) {
- range_rhs = siz - c + rhs;
- }
- this.children[i].effectRangeLeft = range_lhs / isz;
- this.children[i].effectRangeRght = range_rhs / isz;
- // dojo.debug('effect range for '+i+' is
- // '+range_lhs+'/'+range_rhs);
- }
- //
- // create the bar
- //
- this.domNode.style.width = this.barWidth + 'px';
- this.domNode.style.height = this.barHeight + 'px';
- //
- // position the items
- //
- for (var i = 0; i < this.children.length; i++) {
- var itm = this.children[i];
- var elm = itm.domNode;
- elm.style.left = itm.posX + 'px';
- elm.style.top = itm.posY + 'px';
- elm.style.width = this.itemWidth + 'px';
- elm.style.height = this.itemHeight + 'px';
- itm.imgNode.style.left = this.itemPadding + '%';
- itm.imgNode.style.top = this.itemPadding + '%';
- itm.imgNode.style.width = (100 - 2 * this.itemPadding)
- + '%';
- itm.imgNode.style.height = (100 - 2 * this.itemPadding)
- + '%';
- }
- //
- // calc the grid
- //
- this._calcHitGrid();
- },
- _overElement : function(/* DomNode|String */node, /* Event */
- e) {
- // summary:
- // Returns whether the mouse is over the passed element.
- // Node: Must must be display:block (ie, not a <span>)
- node = dojo.byId(node);
- var mouse = {
- x : e.pageX,
- y : e.pageY
- };
- var bb = dojo._getBorderBox(node);
- var absolute = dojo.coords(node, true);
- var top = absolute.y;
- var bottom = top + bb.h;
- var left = absolute.x;
- var right = left + bb.w;
- return (mouse.x >= left && mouse.x <= right
- && mouse.y >= top && mouse.y <= bottom); // boolean
- },
- _onBodyOut : function(/* Event */e) {
- // clicking over an object inside of body causes this event
- // to fire; ignore that case
- if (this._overElement(dojo.body(), e)) {
- return;
- }
- this._setDormant(e);
- },
- _setDormant : function(/* Event */e) {
- // summary: called when mouse moves out of menu's range
- if (!this.isOver) {
- return;
- } // already dormant?
- this.isOver = false;
- if (this.conservativeTrigger) {
- // user can't re-trigger the menu expansion
- // until he mouses over a icon again
- dojo.disconnect(this._onMouseMoveHandle);
- }
- this._onGridMouseMove(-1, -1);
- },
- _setActive : function(/* Event */e) {
- // summary: called when mouse is moved into menu's range
- if (this.isOver) {
- return;
- } // already activated?
- this.isOver = true;
- if (this.conservativeTrigger) {
- // switch event handlers so that we handle mouse events
- // from anywhere near
- // the menu
- this._onMouseMoveHandle = dojo.connect(
- document.documentElement, "onmousemove", this,
- "_onMouseMove");
- this.timerScale = 0.0;
- // call mouse handler to do some initial necessary
- // calculations/positioning
- this._onMouseMove(e);
- // slowly expand the icon size so it isn't jumpy
- this._expandSlowly();
- }
- },
- _onMouseMove : function(/* Event */e) {
- // summary: called when mouse is moved
- if ((e.pageX >= this.hitX1) && (e.pageX <= this.hitX2)
- && (e.pageY >= this.hitY1)
- && (e.pageY <= this.hitY2)) {
- if (!this.isOver) {
- this._setActive(e);
- }
- this._onGridMouseMove(e.pageX - this.hitX1, e.pageY
- - this.hitY1);
- } else {
- if (this.isOver) {
- this._setDormant(e);
- }
- }
- },
- _onScroll : function() {
- this._calcHitGrid();
- },
- onResized : function() {
- this._calcHitGrid();
- },
- _onGridMouseMove : function(x, y) {
- // summary: called when mouse is moved in the vicinity of
- // the menu
- this.pos = {
- x : x,
- y : y
- };
- this._paint();
- },
- _paint : function() {
- var x = this.pos.x;
- var y = this.pos.y;
- if (this.itemCount <= 0) {
- return;
- }
- //
- // figure out our main index
- //
- var pos = this.isHorizontal ? x : y;
- var prx = this.isHorizontal
- ? this.proximityLeft
- : this.proximityTop;
- var siz = this.isHorizontal
- ? this.itemWidth
- : this.itemHeight;
- var sim = this.isHorizontal ? (1.0 - this.timerScale)
- * this.itemWidth + this.timerScale
- * this.itemMaxWidth : (1.0 - this.timerScale)
- * this.itemHeight + this.timerScale
- * this.itemMaxHeight;
- var cen = ((pos - prx) / siz) - 0.5;
- var max_off_cen = (sim / siz) - 0.5;
- if (max_off_cen > this.effectUnits) {
- max_off_cen = this.effectUnits;
- }
- //
- // figure out our off-axis weighting
- //
- var off_weight = 0;
- if (this.anchorEdge == this.EDGE.BOTTOM) {
- var cen2 = (y - this.proximityTop) / this.itemHeight;
- off_weight = (cen2 > 0.5) ? 1 : y
- / (this.proximityTop + (this.itemHeight / 2));
- }
- if (this.anchorEdge == this.EDGE.TOP) {
- var cen2 = (y - this.proximityTop) / this.itemHeight;
- off_weight = (cen2 < 0.5)
- ? 1
- : (this.totalHeight - y)
- / (this.proximityBottom + (this.itemHeight / 2));
- }
- if (this.anchorEdge == this.EDGE.RIGHT) {
- var cen2 = (x - this.proximityLeft) / this.itemWidth;
- off_weight = (cen2 > 0.5) ? 1 : x
- / (this.proximityLeft + (this.itemWidth / 2));
- }
- if (this.anchorEdge == this.EDGE.LEFT) {
- var cen2 = (x - this.proximityLeft) / this.itemWidth;
- off_weight = (cen2 < 0.5) ? 1 : (this.totalWidth - x)
- / (this.proximityRight + (this.itemWidth / 2));
- }
- if (this.anchorEdge == this.EDGE.CENTER) {
- if (this.isHorizontal) {
- off_weight = y / (this.totalHeight);
- } else {
- off_weight = x / (this.totalWidth);
- }
- if (off_weight > 0.5) {
- off_weight = 1 - off_weight;
- }
- off_weight *= 2;
- }
- //
- // set the sizes
- //
- for (var i = 0; i < this.itemCount; i++) {
- var weight = this._weighAt(cen, i);
- if (weight < 0) {
- weight = 0;
- }
- this._setItemSize(i, weight * off_weight);
- }
- //
- // set the positions
- //
- var main_p = Math.round(cen);
- var offset = 0;
- if (cen < 0) {
- main_p = 0;
- } else if (cen > this.itemCount - 1) {
- main_p = this.itemCount - 1;
- } else {
- offset = (cen - main_p)
- * ((this.isHorizontal
- ? this.itemWidth
- : this.itemHeight) - this.children[main_p].sizeMain);
- }
- this._positionElementsFrom(main_p, offset);
- },
- _weighAt : function(/* Integer */cen, /* Integer */i) {
- var dist = Math.abs(cen - i);
- var limit = ((cen - i) > 0)
- ? this.children[i].effectRangeRght
- : this.children[i].effectRangeLeft;
- return (dist > limit) ? 0 : (1 - dist / limit); // Integer
- },
- _setItemSize : function(p, scale) {
- scale *= this.timerScale;
- var w = Math.round(this.itemWidth
- + ((this.itemMaxWidth - this.itemWidth) * scale));
- var h = Math.round(this.itemHeight
- + ((this.itemMaxHeight - this.itemHeight) * scale));
- if (this.isHorizontal) {
- this.children[p].sizeW = w;
- this.children[p].sizeH = h;
- this.children[p].sizeMain = w;
- this.children[p].sizeOff = h;
- var y = 0;
- if (this.anchorEdge == this.EDGE.TOP) {
- y = (this.children[p].cenY - (this.itemHeight / 2));
- } else if (this.anchorEdge == this.EDGE.BOTTOM) {
- y = (this.children[p].cenY - (h - (this.itemHeight / 2)));
- } else {
- y = (this.children[p].cenY - (h / 2));
- }
- this.children[p].usualX = Math
- .round(this.children[p].cenX - (w / 2));
- this.children[p].domNode.style.top = y + 'px';
- this.children[p].domNode.style.left = this.children[p].usualX
- + 'px';
- } else {
- this.children[p].sizeW = w;
- this.children[p].sizeH = h;
- this.children[p].sizeOff = w;
- this.children[p].sizeMain = h;
- var x = 0;
- if (this.anchorEdge == this.EDGE.LEFT) {
- x = this.children[p].cenX - (this.itemWidth / 2);
- } else if (this.anchorEdge == this.EDGE.RIGHT) {
- x = this.children[p].cenX
- - (w - (this.itemWidth / 2));
- } else {
- x = this.children[p].cenX - (w / 2);
- }
- this.children[p].domNode.style.left = x + 'px';
- this.children[p].usualY = Math
- .round(this.children[p].cenY - (h / 2));
- this.children[p].domNode.style.top = this.children[p].usualY
- + 'px';
- }
- this.children[p].domNode.style.width = w + 'px';
- this.children[p].domNode.style.height = h + 'px';
- if (this.children[p].svgNode) {
- this.children[p].svgNode.setSize(w, h);
- }
- },
- _positionElementsFrom : function(p, offset) {
- var pos = 0;
- if (this.isHorizontal) {
- pos = Math.round(this.children[p].usualX + offset);
- this.children[p].domNode.style.left = pos + 'px';
- } else {
- pos = Math.round(this.children[p].usualY + offset);
- this.children[p].domNode.style.top = pos + 'px';
- }
- this._positionLabel(this.children[p]);
- // position before
- var bpos = pos;
- for (var i = p - 1; i >= 0; i--) {
- bpos -= this.children[i].sizeMain;
- if (this.isHorizontal) {
- this.children[i].domNode.style.left = bpos + 'px';
- } else {
- this.children[i].domNode.style.top = bpos + 'px';
- }
- this._positionLabel(this.children[i]);
- }
- // position after
- var apos = pos;
- for (var i = p + 1; i < this.itemCount; i++) {
- apos += this.children[i - 1].sizeMain;
- if (this.isHorizontal) {
- this.children[i].domNode.style.left = apos + 'px';
- } else {
- this.children[i].domNode.style.top = apos + 'px';
- }
- this._positionLabel(this.children[i]);
- }
- },
- _positionLabel : function(itm) {
- var x = 0;
- var y = 0;
- var mb = dojo.marginBox(itm.lblNode);
- if (this.labelEdge == this.EDGE.TOP) {
- x = Math.round((itm.sizeW / 2) - (mb.w / 2));
- y = -mb.h;
- }
- if (this.labelEdge == this.EDGE.BOTTOM) {
- x = Math.round((itm.sizeW / 2) - (mb.w / 2));
- y = itm.sizeH;
- }
- if (this.labelEdge == this.EDGE.LEFT) {
- x = -mb.w;
- y = Math.round((itm.sizeH / 2) - (mb.h / 2));
- }
- if (this.labelEdge == this.EDGE.RIGHT) {
- x = itm.sizeW;
- y = Math.round((itm.sizeH / 2) - (mb.h / 2));
- }
- itm.lblNode.style.left = x + 'px';
- itm.lblNode.style.top = y + 'px';
- },
- _calcHitGrid : function() {
- var pos = dojo.coords(this.domNode, true);
- this.hitX1 = pos.x - this.proximityLeft;
- this.hitY1 = pos.y - this.proximityTop;
- this.hitX2 = this.hitX1 + this.totalWidth;
- this.hitY2 = this.hitY1 + this.totalHeight;
- },
- _toEdge : function(inp, def) {
- return this.EDGE[inp.toUpperCase()] || def;
- },
- _expandSlowly : function() {
- // summary: slowly expand the image to user specified max
- // size
- if (!this.isOver) {
- return;
- }
- this.timerScale += 0.2;
- this._paint();
- if (this.timerScale < 1.0) {
- setTimeout(dojo.hitch(this, "_expandSlowly"), 10);
- }
- },
- destroyRecursive : function() {
- // need to disconnect when we destroy
- dojo.disconnect(this._onMouseOutHandle);
- dojo.disconnect(this._onMouseMoveHandle);
- dojo.disconnect(this._addChildHandle);
- if (this.isFixed) {
- dojo.disconnect(this._onScrollHandle);
- }
- dojo.disconnect(this._onResizeHandle);
- this.inherited("destroyRecursive", arguments);
- }
- });
- dojo.declare("dojox.widget.FisheyeListItem", [dijit._Widget,
- dijit._Templated, dijit._Contained], {
- /*
- * summary Menu item inside of a FisheyeList. See FisheyeList
- * documentation for details on usage.
- */
- // iconSrc: String
- // pathname to image file (jpg, gif, png, etc.) of icon for this
- // menu item
- iconSrc : "",
- // label: String
- // label to print next to the icon, when it is moused-over
- label : "",
- // id: String
- // will be set to the id of the orginal div element
- id : "",
- _blankImgPath : dojo.moduleUrl("dojox.widget",
- "FisheyeList/blank.gif"),
- templateString : '<div class="dojoxFisheyeListItem">'
- + ' <img class="dojoxFisheyeListItemImage" dojoAttachPoint="imgNode" dojoAttachEvent="onmouseover:onMouseOver,onmouseout:onMouseOut,onclick:onClick">'
- + ' <div class="dojoxFisheyeListItemLabel" dojoAttachPoint="lblNode"></div>'
- + '</div>',
- _isNode : function(/* object */wh) {
- // summary:
- // checks to see if wh is actually a node.
- if (typeof Element == "function") {
- try {
- return wh instanceof Element; // boolean
- } catch (e) {
- }
- } else {
- // best-guess
- return wh && !isNaN(wh.nodeType); // boolean
- }
- },
- _hasParent : function(/* Node */node) {
- // summary:
- // returns whether or not node is a child of another node.
- return Boolean(node && node.parentNode
- && this._isNode(node.parentNode)); // boolean
- },
- postCreate : function() {
- // set image
- if ((this.iconSrc.toLowerCase()
- .substring(this.iconSrc.length - 4) == ".png")
- && (dojo.isIE) && (dojo.isIE < 7)) {
- /*
- * we set the id of the new fisheyeListItem to the id of
- * the div defined in the HTML
- */
- if (this._hasParent(this.imgNode) && this.id != "") {
- var parent = this.imgNode.parentNode;
- parent.setAttribute("id", this.id);
- }
- this.imgNode.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"
- + this.iconSrc + "', sizingMethod='scale')";
- this.imgNode.src = this._blankImgPath.toString();
- } else {
- if (this._hasParent(this.imgNode) && this.id != "") {
- var parent = this.imgNode.parentNode;
- parent.setAttribute("id", this.id);
- }
- this.imgNode.src = this.iconSrc;
- }
- // Label
- if (this.lblNode) {
- this.lblNode.appendChild(document
- .createTextNode(this.label));
- }
- dojo.setSelectable(this.domNode, false);
- this.startup();
- },
- startup : function() {
- this.parent = this.getParent();
- },
- onMouseOver : function(/* Event */e) {
- // summary: callback when user moves mouse over this menu
- // item
- // in conservative mode, don't activate the menu until user
- // mouses over an icon
- if (!this.parent.isOver) {
- this.parent._setActive(e);
- }
- if (this.label != "") {
- dojo.addClass(this.lblNode, "dojoxFishSelected");
- this.parent._positionLabel(this);
- }
- },
- onMouseOut : function(/* Event */e) {
- // summary: callback when user moves mouse off of this menu
- // item
- dojo.removeClass(this.lblNode, "dojoxFishSelected");
- },
- onClick : function(/* Event */e) {
- // summary: user overridable callback when user clicks this
- // menu item
- }
- });
- }
|