[Laszlo-checkins] r10662 - in openlaszlo/trunk/WEB-INF/lps/lfc: kernel/dhtml kernel/swf kernel/swf9 services
bargull@openlaszlo.org
bargull at openlaszlo.org
Tue Aug 12 09:15:12 PDT 2008
Author: bargull
Date: 2008-08-12 09:15:05 -0700 (Tue, 12 Aug 2008)
New Revision: 10662
Modified:
openlaszlo/trunk/WEB-INF/lps/lfc/kernel/dhtml/LzContextMenuKernel.lzs
openlaszlo/trunk/WEB-INF/lps/lfc/kernel/dhtml/LzSprite.js
openlaszlo/trunk/WEB-INF/lps/lfc/kernel/swf/LzContextMenuKernel.lzs
openlaszlo/trunk/WEB-INF/lps/lfc/kernel/swf9/LzContextMenuKernel.lzs
openlaszlo/trunk/WEB-INF/lps/lfc/services/LzContextMenu.lzs
Log:
Change 20080805-bargull-iDO by bargull at dell--p4--2-53 on 2008-08-05 00:12:17
in /home/Admin/src/svn/openlaszlo/trunk
for http://svn.openlaszlo.org/openlaszlo/trunk
Summary: various contextmenu fixes
New Features: LPP-4887
Bugs Fixed: LPP-5404, LPP-5405, LPP-6671, LPP-6725, LPP-6749, LPP-6752
Technical Reviewer: hminsky
QA Reviewer: max
Doc Reviewer: (pending)
Documentation:
Release Notes:
Details:
LzContextMenu:
- added typing
- added "showBuiltInItems()" as the counterpart to "hideBuiltInItems()" (LPP-5405)
- added kernel-call at "clearItems()" (LPP-6752)
- added tagname, because LzContextMenu is a subclass of LzNode
LzContextMenuItem:
- added typing
- added tagname, because LzContextMenuItem is a subclass of LzNode
LzContextMenuKernel (dhtml):
- implemented "showBuiltInItems()" (LPP-5405)
- adjusted "addItem(..)" and "clearItems()" (LPP-6749)
- simplified swf-compat mode in "__show()"
- added href to workaround IE-'curiosities' in "__show()" (LPP-6725)
- don't show empty menu in "__show()" (LPP-5404)
- execute delegate with proper argument in "__show()" (LPP-6671)
LzContextMenuItemKernel (dhtml):
- first execute delegate, then fire onselect-event (parity with swf) in "__select()"
- execute delegate with proper argument in "__select()" (LPP-6671)
LzSprite (dhtml):
- added css-cursor style for contextmenu-item (LPP-4887)
LzContextMenuKernel (swf8):
- implemented "showBuiltInItems()" (LPP-5405)
LzContextMenuKernel (swf9):
- implemented "showBuiltInItems()" (LPP-5405)
- added even more typing
Tests:
Modified: openlaszlo/trunk/WEB-INF/lps/lfc/kernel/dhtml/LzContextMenuKernel.lzs
===================================================================
--- openlaszlo/trunk/WEB-INF/lps/lfc/kernel/dhtml/LzContextMenuKernel.lzs 2008-08-12 16:05:43 UTC (rev 10661)
+++ openlaszlo/trunk/WEB-INF/lps/lfc/kernel/dhtml/LzContextMenuKernel.lzs 2008-08-12 16:15:05 UTC (rev 10662)
@@ -14,12 +14,10 @@
*/
class LzContextMenuKernel {
-function LzContextMenuKernel (newowner:LzContextMenu)
-{
+function LzContextMenuKernel (newowner:LzContextMenu) {
this.owner = newowner;
- // set callback for "oncontextmenu" event
- this.__LZmousedowndel = new LzDelegate( this , "__hide");
+ this.__LZmousedowndel = new LzDelegate(this, "__hide");
}
var owner:LzContextMenu = null;
@@ -40,7 +38,6 @@
this._delegate = delegate;
}
-
/**
* LzContextMenu.addItem
* Adds a menu items into a menu
@@ -48,6 +45,10 @@
* @access private
*/
function addItem (item) {
+ if (LzMouseKernel.__showncontextmenu === this) {
+ this.__hide();
+ this.__show(false);
+ }
}
/**
@@ -59,15 +60,27 @@
}
/**
+ * LzContextMenu.showBuiltInItems
+ * @access private
+ */
+function showBuiltInItems () {
+ this.showbuiltins = true;
+}
+
+/**
* LzContextMenu.clearItems
* Remove all custom items from a menu
* @access private
*/
function clearItems () {
+ if (LzMouseKernel.__showncontextmenu === this) {
+ this.__hide();
+ this.__show(false);
+ }
}
/** @access private */
-function __show () {
+function __show (send=true) {
var s = document.getElementById('lzcontextmenu')
if (! s) {
s = document.createElement('div');
@@ -75,62 +88,69 @@
lz.embed.__setAttr(s, 'style', 'display: none');
document.body.appendChild(s);
}
- if (this.owner.onmenuopen.ready) this.owner.onmenuopen.sendEvent(this.owner);
+ var owner = this.owner;
+ if (send && owner.onmenuopen.ready) owner.onmenuopen.sendEvent(owner);
var o = '';
- var items = this.owner.getItems();
+ var shownItems = 0;
+ var items = owner.getItems();
+ var _items = {};
for (var i = 0; i < items.length; i++) {
var cm = items[i].kernel;
var v = cm.cmenuitem;
if (v.visible != true) continue;
if (v.separatorBefore) o += '<br/>';
+ var caption = v.caption;
// Don't display the same item twice (matches swf behavior)
- var duplicate = false;
- for (var j=0; j<i; j++) {
- if (cm._equals(items[j].kernel)) {
- duplicate = true;
- break;
- }
- }
- if (duplicate)
- continue;
+ if (caption in _items) continue;
+ // Mark as displayed
+ _items[caption] = true;
+ shownItems += 1;
if (v.enabled) {
- o += '<a onmousedown="javascript:LzMouseKernel.__showncontextmenu.__select(' + i + ');return false;"'
- o +='>' + v.caption + '</a>';
+ o += '<a href="" onmousedown="javascript:LzMouseKernel.__showncontextmenu.__select(' + i + ');return false;">'
+ + caption + '</a>';
} else {
- o += v.caption;
+ o += caption;
}
}
+
LzMouseKernel.__showncontextmenu = this;
s.innerHTML = o;
- s.style.left = LzMouseKernel.__x + 'px';
- s.style.top = LzMouseKernel.__y + 'px';
- s.style.display = 'block';
+ if (send) {
+ s.style.left = LzMouseKernel.__x + 'px';
+ s.style.top = LzMouseKernel.__y + 'px';
+ }
+
+ // Only show menu if there are any visible items
+ if (shownItems) {
+ s.style.display = 'block';
+ }
this.__LZmousedowndel.register(lz.GlobalMouse, 'onmousedown');
- if (this._delegate != null) this._delegate.execute(this);
+ var del = this._delegate;
+ if (send && del != null) del.execute(owner);
}
/** @access private */
-function __hide(ignore) {
+function __hide (ignore) {
var s = document.getElementById('lzcontextmenu')
if (! s) return;
s.style.display = 'none';
this.__LZmousedowndel.unregisterAll();
+ LzMouseKernel.__showncontextmenu = null;
}
/** @access private */
-function __select(i) {
+function __select (i) {
this.__hide();
var items = this.owner.getItems();
if (items[i]) items[i].kernel.__select();
}
-
}; // End of LzContextMenuKernel
@@ -140,11 +160,10 @@
*/
class LzContextMenuItemKernel {
-function LzContextMenuItemKernel (newowner:LzContextMenuItem, title, del)
-{
+function LzContextMenuItemKernel (newowner:LzContextMenuItem, title, del) {
this.owner = newowner;
this.cmenuitem = {visible: true, enabled: true, separatorBefore: false, caption: title};
- this.setDelegate (del);
+ this.setDelegate(del);
}
var owner:LzContextMenuItem = null;
@@ -214,26 +233,19 @@
}
/** @access private */
-function __select() {
- if (this.owner.onselect.ready) this.owner.onselect.sendEvent(this.owner);
- if (this._delegate != null) {
- if (this._delegate instanceof LzDelegate) {
- this._delegate.execute(this);
- } else if (typeof this._delegate == 'function') {
- this._delegate(this);
- } else {
- if ($debug) {
- Debug.error("LzContextMenuItem.setDelegate must be passed a delegate", this, this._delegate);
- }
+function __select () {
+ var owner = this.owner;
+ var delegate = this._delegate;
+ if (delegate != null) {
+ if (delegate instanceof LzDelegate) {
+ delegate.execute(owner);
+ } else if (typeof delegate == 'function') {
+ delegate();
+ } else if ($debug) {
+ Debug.error("LzContextMenuItem.setDelegate must be passed a delegate", owner, delegate);
}
}
+ if (owner.onselect.ready) owner.onselect.sendEvent(owner);
}
-/** @access private */
-// Must match the behavior of swf (only the caption is matched)
-function _equals (cm) {
- return (cm != null) && (this.cmenuitem.caption == cm.cmenuitem.caption);
-}
-
-
}; // End of LzContextMenuItemKernel
Modified: openlaszlo/trunk/WEB-INF/lps/lfc/kernel/dhtml/LzSprite.js
===================================================================
--- openlaszlo/trunk/WEB-INF/lps/lfc/kernel/dhtml/LzSprite.js 2008-08-12 16:05:43 UTC (rev 10661)
+++ openlaszlo/trunk/WEB-INF/lps/lfc/kernel/dhtml/LzSprite.js 2008-08-12 16:15:05 UTC (rev 10662)
@@ -246,7 +246,8 @@
LzSprite.prototype.__defaultStyles['#lzcontextmenu a'] = {
color: '#000',
display: 'block',
- textDecoration: 'none'
+ textDecoration: 'none',
+ cursor: 'default'
};
LzSprite.prototype.__defaultStyles['#lzcontextmenu a:hover'] = {
color: '#FFF',
Modified: openlaszlo/trunk/WEB-INF/lps/lfc/kernel/swf/LzContextMenuKernel.lzs
===================================================================
--- openlaszlo/trunk/WEB-INF/lps/lfc/kernel/swf/LzContextMenuKernel.lzs 2008-08-12 16:05:43 UTC (rev 10661)
+++ openlaszlo/trunk/WEB-INF/lps/lfc/kernel/swf/LzContextMenuKernel.lzs 2008-08-12 16:15:05 UTC (rev 10662)
@@ -14,11 +14,9 @@
*/
class LzContextMenuKernel {
-function LzContextMenuKernel (newowner:LzContextMenu)
-{
+function LzContextMenuKernel (newowner:LzContextMenu) {
this.owner = newowner;
- // set callback for Flash "onSelect" event
this.cm = new ContextMenu();
this.cm.hideBuiltInItems();
}
@@ -37,14 +35,13 @@
*/
function setDelegate (delegate) {
var __litem__ = this.owner;
- var callback = function (mc,cmitem) {
+ var callback = function (mc, cmitem) {
if (delegate != null) delegate.execute(__litem__);
if (__litem__.onmenuopen.ready) __litem__.onmenuopen.sendEvent(__litem__);
};
this.cm.onSelect = callback;
}
-
/**
* LzContextMenu.addItem
* Adds a menu items into a menu
@@ -64,6 +61,18 @@
}
/**
+ * LzContextMenu.showBuiltInItems
+ * @access private
+ */
+function showBuiltInItems () :void {
+ var builtins:Object = this.cm.builtInItems;
+ // display only 'useful' items in respect of a RIA!
+ builtins.print = true;
+ builtins.quality = true;
+ builtins.zoom = true;
+}
+
+/**
* LzContextMenu.clearItems
* Remove all custom items from a menu
* @access private
@@ -90,11 +99,10 @@
*/
class LzContextMenuItemKernel {
-function LzContextMenuItemKernel (newowner:LzContextMenuItem, title, del)
-{
+function LzContextMenuItemKernel (newowner:LzContextMenuItem, title, del) {
this.owner = newowner;
this.cmenuitem = new ContextMenuItem(title);
- this.setDelegate (del);
+ this.setDelegate(del);
}
var owner:LzContextMenuItem = null;
@@ -111,14 +119,14 @@
*/
function setDelegate (delegate) {
var __litem__ = this.owner;
- var callback = function (mc,cmitem) {
+ var callback = function (mc, cmitem) {
if (delegate != null) {
if (typeof(delegate) == 'function') {
delegate();
} else if (delegate instanceof LzDelegate) {
delegate.execute(__litem__);
- } else {
- Debug.error("LzContextMenuItem.setDelegate must be passed a delegate or function", this, delegate);
+ } else if ($debug) {
+ Debug.error("LzContextMenuItem.setDelegate must be passed a delegate or function", __litem__, delegate);
}
}
if (__litem__.onselect.ready) __litem__.onselect.sendEvent(__litem__);
Modified: openlaszlo/trunk/WEB-INF/lps/lfc/kernel/swf9/LzContextMenuKernel.lzs
===================================================================
--- openlaszlo/trunk/WEB-INF/lps/lfc/kernel/swf9/LzContextMenuKernel.lzs 2008-08-12 16:05:43 UTC (rev 10661)
+++ openlaszlo/trunk/WEB-INF/lps/lfc/kernel/swf9/LzContextMenuKernel.lzs 2008-08-12 16:15:05 UTC (rev 10662)
@@ -23,11 +23,9 @@
import flash.ui.*;
}#
-function LzContextMenuKernel (newowner:LzContextMenu)
-{
+function LzContextMenuKernel (newowner:LzContextMenu) {
this.owner = newowner;
- // set callback for Flash "onSelect" event
this.cm = new ContextMenu();
this.cm.hideBuiltInItems();
}
@@ -44,23 +42,22 @@
*
* @access private
*/
-function setDelegate (delegate) {
+function setDelegate (delegate) :void {
var __litem__ = this.owner;
- var callback = function (mc,cmitem) {
+ var callback = function (mc, cmitem) {
if (delegate != null) delegate.execute(__litem__);
if (__litem__.onmenuopen.ready) __litem__.onmenuopen.sendEvent(__litem__);
};
- this.cm.addEventListener(ContextMenuEvent.MENU_SELECT , callback);
+ this.cm.addEventListener(ContextMenuEvent.MENU_SELECT, callback);
}
-
/**
* LzContextMenu.addItem
* Adds a menu items into a menu
* @param LzContextMenuItem item: LzContextMenuItem to install on this menu
* @access private
*/
-function addItem (item) {
+function addItem (item) :void {
this.cm.customItems.push(item.kernel.cmenuitem);
}
@@ -68,16 +65,28 @@
* LzContextMenu.hideBuiltInItems
* @access private
*/
-function hideBuiltInItems () {
+function hideBuiltInItems () :void {
this.cm.hideBuiltInItems();
}
/**
+ * LzContextMenu.showBuiltInItems
+ * @access private
+ */
+function showBuiltInItems () :void {
+ var builtins:ContextMenuBuiltInItems = this.cm.builtInItems;
+ // display only 'useful' items in respect of a RIA!
+ builtins.print = true;
+ builtins.quality = true;
+ builtins.zoom = true;
+}
+
+/**
* LzContextMenu.clearItems
* Remove all custom items from a menu
* @access private
*/
-function clearItems () {
+function clearItems () :void {
this.cm.customItems = [];
}
@@ -87,7 +96,7 @@
* Returns Flash ContextMenu object
* @access private
*/
-function __LZcontextMenu () {
+function __LZcontextMenu () :ContextMenu {
return this.cm;
}
@@ -109,11 +118,10 @@
import flash.ui.*;
}#
-function LzContextMenuItemKernel (newowner:LzContextMenuItem, title, del)
-{
+function LzContextMenuItemKernel (newowner:LzContextMenuItem, title, del) {
this.owner = newowner;
this.cmenuitem = new ContextMenuItem(title);
- this.setDelegate (del);
+ this.setDelegate(del);
}
var owner:LzContextMenuItem = null;
@@ -128,21 +136,22 @@
*
* @access private
*/
-function setDelegate (delegate) {
+function setDelegate (delegate:*) :void {
var __litem__ = this.owner;
- var callback = function (mc,cmitem) {
+ var callback = function (mc, cmitem) {
if (delegate != null) {
- if (typeof(delegate) == 'function') {
+ if (delegate is Function) {
delegate();
- } else if (delegate instanceof LzDelegate) {
+ } else if (delegate is LzDelegate) {
delegate.execute(__litem__);
- } else {
- Debug.error("LzContextMenuItem.setDelegate must be passed a delegate or function", this, delegate);
+ } else if ($debug) {
+ Debug.error("LzContextMenuItem.setDelegate must be passed a delegate or function", __litem__, delegate);
}
}
if (__litem__.onselect.ready) __litem__.onselect.sendEvent(__litem__);
};
- this.cmenuitem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT , callback);}
+ this.cmenuitem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, callback);
+}
/**
* LzContextMenuItem.setCaption
@@ -150,7 +159,7 @@
* @param String caption: text string to display
* @access public
*/
-function setCaption (caption) {
+function setCaption (caption:String) :void {
this.cmenuitem.caption = caption;
}
@@ -159,17 +168,16 @@
* Gets the text string which is displayed for the menu item
* @access public
*/
-function getCaption () {
+function getCaption () :String {
return this.cmenuitem.caption;
}
-
/**
* LzContextMenuItem.setEnabled
* @param boolean val: if false, menu item is grayed out and will not respond to clicks
* @access public
*/
-function setEnabled (val) {
+function setEnabled (val:Boolean) :void {
this.cmenuitem.enabled = val;
}
@@ -180,7 +188,7 @@
* @access public
*/
-function setSeparatorBefore (val) {
+function setSeparatorBefore (val:Boolean) :void {
this.cmenuitem.separatorBefore = val;
}
@@ -190,7 +198,7 @@
* @param boolean val: sets visibility
* @access public
*/
-function setVisible (val) {
+function setVisible (val:Boolean) :void {
this.cmenuitem.visible = val;
}
Modified: openlaszlo/trunk/WEB-INF/lps/lfc/services/LzContextMenu.lzs
===================================================================
--- openlaszlo/trunk/WEB-INF/lps/lfc/services/LzContextMenu.lzs 2008-08-12 16:05:43 UTC (rev 10661)
+++ openlaszlo/trunk/WEB-INF/lps/lfc/services/LzContextMenu.lzs 2008-08-12 16:15:05 UTC (rev 10662)
@@ -19,18 +19,23 @@
*/
class LzContextMenu extends LzNode {
-function LzContextMenu (del=null) {
+function LzContextMenu (del:LzDelegate = null) {
this.kernel = new LzContextMenuKernel(this);
this.items = [];
+ // set callback
this.setDelegate(del);
}
-//var onselect = LzDeclaredEvent;
+/** @access private
+ * @modifiers override
+ */
+static var tagname = 'contextmenu';
+
/**
* @lzxtype event
*/
-var onmenuopen = LzDeclaredEvent;
+var onmenuopen:LzDeclaredEventClass = LzDeclaredEvent;
var kernel:LzContextMenuKernel = null;
var items:Array = null;
@@ -43,8 +48,8 @@
*
* @access public
*/
-function setDelegate (delegate) {
- this.kernel.setDelegate (delegate);
+function setDelegate (delegate:LzDelegate) :void {
+ this.kernel.setDelegate(delegate);
}
/**
@@ -52,32 +57,41 @@
* @param LzContextMenuItem item: LzContextMenuItem to install on this menu
* @access public
*/
-function addItem (item) {
+function addItem (item:LzContextMenuItem) :void {
this.items.push(item);
- this.kernel.addItem (item);
+ this.kernel.addItem(item);
}
/**
* Removes Flash-installed default menu items
* @access public
*/
-function hideBuiltInItems () {
- this.kernel.hideBuiltInItems ();
+function hideBuiltInItems () :void {
+ this.kernel.hideBuiltInItems();
}
/**
+ * Shows Flash-installed default menu items
+ * @access public
+ */
+function showBuiltInItems () :void {
+ this.kernel.showBuiltInItems();
+}
+
+/**
* Remove all custom items from a menu
* @access public
*/
-function clearItems () {
+function clearItems () :void {
this.items = [];
+ this.kernel.clearItems();
}
/**
* Return list of custom items
* @access public
*/
-function getItems () {
+function getItems () :Array {
return this.items;
}
@@ -87,13 +101,13 @@
* @param function callback: delegate to execute when item is selected
* @access public
*/
-function makeMenuItem (title, callback) {
- var item = new LzContextMenuItem(title, callback);
+function makeMenuItem (title:String, callback:*) :LzContextMenuItem {
+ var item:LzContextMenuItem = new LzContextMenuItem(title, callback);
return item;
}
}; // End of LzContextMenu
-lz.ContextMenu = LzContextMenu; // publish
+lz[LzContextMenu.tagname] = LzContextMenu; // publish
@@ -106,12 +120,17 @@
*/
class LzContextMenuItem extends LzNode {
-function LzContextMenuItem (title, del) {
+function LzContextMenuItem (title:String, del:*) {
this.kernel = new LzContextMenuItemKernel(this, title, del);
};
-var onselect = LzDeclaredEvent;
+/** @access private
+ * @modifiers override
+ */
+static var tagname = 'contextmenuitem';
+var onselect:LzDeclaredEventClass = LzDeclaredEvent;
+
var kernel:LzContextMenuItemKernel = null;
@@ -123,8 +142,8 @@
*
* @access public
*/
-function setDelegate (delegate) {
- this.kernel.setDelegate (delegate);
+function setDelegate (delegate:*) :void {
+ this.kernel.setDelegate(delegate);
}
/**
@@ -133,8 +152,8 @@
* @param String caption: text string to display
* @access public
*/
-function setCaption (caption) {
- this.kernel.setCaption (caption);
+function setCaption (caption:String) :void {
+ this.kernel.setCaption(caption);
}
/**
@@ -142,18 +161,17 @@
* Gets the text string which is displayed for the menu item
* @access public
*/
-function getCaption () {
+function getCaption () :String {
return this.kernel.getCaption();
}
-
/**
* LzContextMenuItem.setEnabled
* @param boolean val: if false, menu item is grayed out and will not respond to clicks
* @access public
*/
-function setEnabled (val) {
- this.kernel.setEnabled (val);
+function setEnabled (val:Boolean) :void {
+ this.kernel.setEnabled(val);
}
/**
@@ -163,8 +181,8 @@
* @access public
*/
-function setSeparatorBefore (val) {
- this.kernel.setSeparatorBefore (val);
+function setSeparatorBefore (val:Boolean) :void {
+ this.kernel.setSeparatorBefore(val);
}
/**
@@ -173,9 +191,9 @@
* @param boolean val: sets visibility
* @access public
*/
-function setVisible (val) {
- this.kernel.setVisible (val);
+function setVisible (val:Boolean) :void {
+ this.kernel.setVisible(val);
}
}; // End of LzContextMenuItem
-lz.ContextMenuItem = LzContextMenuItem; // publish
+lz[LzContextMenuItem.tagname] = LzContextMenuItem; // publish
More information about the Laszlo-checkins
mailing list