Richard, Thanks for your patch, it works like a charm! I just commited your changes.
Simon, can you provide a patch for the target issue? regards Thomas On 11/8/05, Simon Kitching <[EMAIL PROTECTED]> wrote: > I was doing some thinking about this too. The user may wish to open the > URL in a new window (as implemented), or in the same window. > > The normal jscookmenu provides a "target" value for this. However the > JSF JSCookMenu tag is now using this to specify which *form* should be > submitted when the menu item is selected, so this isn't available to > convey the target window info. > > The target window (current window, named window, or new window) > therefore needs to be encoded somewhere else, probably in the action field. > > I was playing around with the idea of having the action field be > something like this: > // open absolute URL in same window > somemenuid:target=self:http://www.yahoo.com > > // open relative URL in new window > somemenuid:target=new:/context/foo/bar.html > > // execute JSF action > somemenuid:action:goto_home_page > > This is only a half-baked proposal, but I think the requirement > (specifying what window to open url in) is needed. > > Regards, > > Simon > > Barbalace, Richard wrote: > > Hi, Thomas. > > > > Below is my final version of the modified cmItemMouseUp() method. It should > > work with any protocol and scripting language. > > > > The method checks the link for the portion right after the JSF tag. If > > this is > > a word followed by "://", it assumes the link is a URL, which is opened in > > a new > > window. Otherwise, if this is a word followed by ":", it assumes the link > > is a > > scripted method. Otherwise, it assumes the link is a JSF action. I think > > this > > is a reasonable and simple approach, but I recommend more testing by others. > > Let me know if you have any questions. > > > > I look forward to seeing this or something similar in the next release of > > MyFaces. > > > > Thanks. > > + Richard > > > > function cmItemMouseUp (obj, index) > > { > > var item = _cmItemList[index]; > > > > var link = null, target = '_self'; > > > > if (item.length > 2) > > link = item[2]; > > if (item.length > 3 && item[3]) > > target = item[3]; > > > > if (link != null) > > { > > // changes by Richard J. Barbalace > > if (link.match(/^\w*:\w*:\/\//) != null ) { > > // Link is a URL > > link = link.replace(/^\w*:/, ""); // Remove JSF ID > > window.open (link, target); > > } else if (link.match(/^\w*:\w*:/) != null ) { > > // Link is a script method > > link = link.replace(/^\w*:/, ""); // Remove JSF ID > > window.open (link, '_self'); > > } else { > > // Link is a JSF action > > var dummyForm = document.forms['linkDummyForm']; > > dummyForm.elements['jscook_action'].value = link; > > dummyForm.submit(); > > } > > } > > > > var prefix = obj.cmPrefix; > > var thisMenu = cmGetThisMenu (obj, prefix); > > > > var hasChild = (item.length > 5); > > if (!hasChild) > > { > > if (cmIsDefaultItem (item)) > > { > > if (obj.cmIsMain) > > obj.className = prefix + 'MainItem'; > > else > > obj.className = prefix + 'MenuItem'; > > } > > cmHideMenu (thisMenu, null, prefix); > > } > > else > > { > > if (cmIsDefaultItem (item)) > > { > > if (obj.cmIsMain) > > obj.className = prefix + 'MainItemHover'; > > else > > obj.className = prefix + 'MenuItemHover'; > > } > > } > > } > > > >> -----Original Message----- > >> From: Thomas Spiegl [mailto:[EMAIL PROTECTED] > >> Sent: Thursday, November 03, 2005 5:57 PM > >> To: MyFaces Development > >> Cc: Simon Kitching; [EMAIL PROTECTED]; Barbalace, Richard > >> Subject: Re: JavaScript in jsCookMenu component? > >> > >> > >> Can you send me a final verion for cmItemMouseUp? I will patch the > >> current version. > >> > >> Thomas > >> > >> On 11/2/05, Barbalace, Richard <[EMAIL PROTECTED]> wrote: > >>> Simon Kitching [mailto:[EMAIL PROTECTED] writes: > >>>> I'd rather see detection of *any* protocol on the front > >> of the URL > >>>> rather than checking just for "http:". The protocols > >>>> "https:", "mail:" > >>>> etc are also useful. > >>>> > >>>> == proposal: == > >>>> The URL *always* has "menu_id:" on the start, so > >> presumably the jscript > >>>> could just strip this ID off then look for a ":" before > >> any occurrence > >>>> of "/" or "?". If that is present, then the URL is > >> "absolute". And if > >>>> that is not present but the URL contains a "/" then it > >> isn't an action > >>>> so treat that as a local URL. > >>> I would have done something similar to that originally, but > >> I was not sure how > >>> consistent the "menu_id:" string was or if that string > >> might change in the > >>> future. The string is actually "id0_menu:" in the version > >> I am using, at least > >>> for the first jsCookMenu element on the page. > >>> > >>> That proposal sounds almost fine to me. The code needs to > >> check for only ":" in > >>> the case of scripting languages. For example, one of my actions is > >>> "id0_menu:javascript:getHelp();", which contains no "/" > >> character. I am not > >>> sure what the ideal regular expression would be, but it > >> would definitely check > >>> for ":", "/", and "?". Perhaps that would be enough; can > >> any of those > >>> characters be used in a JSF action name? > >>> > >>> Thanks. > >>> + Richard > >>> > > > > -- http://www.irian.at Your JSF powerhouse - JSF Consulting, Development and Courses in English and German Professional Support for Apache MyFaces
