GraffitiStyle, and assigning them to GraffitiGrid for Web 2.0, is done but currently undocumented:
var gridRowEven as GraffitiStyle = GraffitiStyle.Create( Session, "gridRowEven", "background:rgba(0, 0, 0, 0.2);color:#00f" )
me.StyleRowEven = gridRowEven
GraffitiWebContextMenu is now GraffitiMenu. GraffitiGrid’s events pass X and Y parameters for mouse-related actions.
In the Open event of my Grid, with an instance of GraffitiMenu on the page, I have this code:
var EditMenuItem as new GraffitiMenuItem( "EditMenu" )
EditMenuItem.Children.AddRow( new GraffitiMenuItem( "text", "Plain Text" ) )
EditMenuItem.Children.AddRow( new GraffitiMenuItem( "undo", "Undo", "fa fa-undo", false, "u" ) )
EditMenuItem.Children.AddRow( new GraffitiMenuItem( True ) )
EditMenuItem.Children.AddRow( new GraffitiMenuItem( "cut", "Cut", "fa fa-cut", false, "t" ) )
EditMenuItem.Children.AddRow( new GraffitiMenuItem( "copy", "Copy", "fa fa-copy", false, "c" ) )
EditMenuItem.Children.AddRow( new GraffitiMenuItem( "paste", "Paste", "fa fa-paste", True, "p" ) )
EditMenuItem.Children.AddRow( new GraffitiMenuItem( "delete", "Delete", "fa fa-times", false, "d" ) )
EditMenuItem.Children.AddRow( new GraffitiMenuItem( True ) )
EditMenuItem.Children.AddRow( new GraffitiMenuItem( "selall", "Select All", "fa fa-i-cursor", false, "s" ) )
GraffitiMenu1.AddMenu( EditMenuItem )
Then, in the ContextClick event of my GraffitiGrid for Web 2.0 instance, I have this:
var unattachedMenu as GraffitiMenuItem = GraffitiMenu1.MenuByName( "EditMenu" )
GraffitiMenu1.ShowMenu( unattachedMenu, X, Y )
From there, you just need store the Row and Column in ContextClick, then handle selection in the MenuAction event of the GraffitiMenu instance.
UPDATE: GraffitiStyle is now documented.