Converted asset context menus to YUI menus
This commit is contained in:
parent
8ef9e3e39e
commit
cb21f13d9f
5 changed files with 160 additions and 226 deletions
|
|
@ -21,6 +21,9 @@
|
|||
- fixed: Cash available as a payment option to everyone
|
||||
- fixed: Web::Form::Asset can now accept assets with '|" in their names.
|
||||
- fixed: Shop: remove an item and Apache segfaults
|
||||
- Converted asset context menus to YUI menus
|
||||
- fixed: asset context menu is positioned incorrectly on RTL pages
|
||||
- fixed: asset context menu broken if the only asset is a navigation included by AssetProxy
|
||||
|
||||
7.5.17
|
||||
- fixed: Payment Methods Hover Help Incomplete
|
||||
|
|
|
|||
|
|
@ -1271,76 +1271,107 @@ Returns a toolbar with a set of icons that hyperlink to functions that delete, e
|
|||
=cut
|
||||
|
||||
sub getToolbar {
|
||||
my $self = shift;
|
||||
return undef unless $self->canEdit;
|
||||
return $self->{_toolbar} if (exists $self->{_toolbar});
|
||||
my $userUiLevel = $self->session->user->profileField("uiLevel");
|
||||
my $uiLevels = $self->session->config->get("assetToolbarUiLevel");
|
||||
my $i18n = WebGUI::International->new($self->session, "Asset");
|
||||
my $toolbar = "";
|
||||
my $commit;
|
||||
if ($self->canEditIfLocked) {
|
||||
$toolbar .= $self->session->icon->delete('func=delete',$self->get("url"),$i18n->get(43)) if ($userUiLevel >= $uiLevels->{"delete"});
|
||||
$toolbar .= $self->session->icon->edit('func=edit',$self->get("url")) if ($userUiLevel >= $uiLevels->{"edit"});
|
||||
} else {
|
||||
$toolbar .= $self->session->icon->locked('func=manageRevisions',$self->get("url")) if ($userUiLevel >= $uiLevels->{"revisions"});
|
||||
}
|
||||
$toolbar .= $self->session->icon->cut('func=cut',$self->get("url")) if ($userUiLevel >= $uiLevels->{"cut"});
|
||||
my $self = shift;
|
||||
return undef unless $self->canEdit;
|
||||
return $self->{_toolbar}
|
||||
if (exists $self->{_toolbar});
|
||||
my $userUiLevel = $self->session->user->profileField("uiLevel");
|
||||
my $uiLevels = $self->session->config->get("assetToolbarUiLevel");
|
||||
my $i18n = WebGUI::International->new($self->session, "Asset");
|
||||
my $toolbar = "";
|
||||
my $commit;
|
||||
if ($self->canEditIfLocked) {
|
||||
$toolbar .= $self->session->icon->delete('func=delete',$self->get("url"),$i18n->get(43))
|
||||
if ($userUiLevel >= $uiLevels->{"delete"});
|
||||
$toolbar .= $self->session->icon->edit('func=edit',$self->get("url"))
|
||||
if ($userUiLevel >= $uiLevels->{"edit"});
|
||||
}
|
||||
else {
|
||||
$toolbar .= $self->session->icon->locked('func=manageRevisions',$self->get("url"))
|
||||
if ($userUiLevel >= $uiLevels->{"revisions"});
|
||||
}
|
||||
$toolbar .= $self->session->icon->cut('func=cut',$self->get("url"))
|
||||
if ($userUiLevel >= $uiLevels->{"cut"});
|
||||
|
||||
if ($userUiLevel >= $uiLevels->{"copy"}) {
|
||||
$toolbar .= $self->session->icon->copy('func=copy',$self->get("url"));
|
||||
# if this asset has children, create a more full-featured menu for copying
|
||||
if ($self->getChildCount) {
|
||||
my $copy = '<script type="text/javascript">
|
||||
//<![CDATA[
|
||||
var contextMenu = new contextMenu_createWithImage("'.$self->session->icon->getBaseURL().'copy.gif","'.$self->getId.'_2","'.$i18n->get('copy').'",true);';
|
||||
$copy .= 'contextMenu.addLink("'.$self->getUrl("func=copy").'","'.$i18n->get("this asset only").'");';
|
||||
$copy .= 'contextMenu.addLink("'.$self->getUrl("func=copy;with=children").'","'.$i18n->get("with children").'");';
|
||||
$copy .= 'contextMenu.addLink("'.$self->getUrl("func=copy;with=descendants").'","'.$i18n->get("with descendants").'");';
|
||||
$copy .= 'contextMenu.print();
|
||||
//]]>
|
||||
</script>';
|
||||
$toolbar .= $copy;
|
||||
$toolbar
|
||||
.= '<div class="yuimenu wg-contextmenu">'
|
||||
. '<div class="bd">'
|
||||
. '<ul class="first-of-type">'
|
||||
. '<li class="yuimenuitem"><a class="yuimenuitemlabel" href="'
|
||||
. $self->getUrl("func=copy") . '">' . $i18n->get("this asset only") . '</a></li>'
|
||||
. '<li class="yuimenuitem"><a class="yuimenuitemlabel" href="'
|
||||
. $self->getUrl("func=copy;with=children") . '">' . $i18n->get("with children") . '</a></li>'
|
||||
. '<li class="yuimenuitem"><a class="yuimenuitemlabel" href="'
|
||||
. $self->getUrl("func=copy;with=descendants") . '">' . $i18n->get("with descendants") . '</a></li>'
|
||||
. '</ul></div></div>';
|
||||
}
|
||||
else {
|
||||
$toolbar .= $self->session->icon->copy('func=copy',$self->get("url")) if ($userUiLevel >= $uiLevels->{"copy"});
|
||||
}
|
||||
|
||||
$toolbar .= $self->session->icon->shortcut('func=createShortcut',$self->get("url")) if ($userUiLevel >= $uiLevels->{"shortcut"} && !($self->get("className") =~ /Shortcut/));
|
||||
$self->session->style->setLink($self->session->url->extras('contextMenu/contextMenu.css'), {rel=>"stylesheet",type=>"text/css"});
|
||||
$self->session->style->setScript($self->session->url->extras('contextMenu/contextMenu.js'), {type=>"text/javascript"});
|
||||
my $output = '<script type="text/javascript">
|
||||
//<![CDATA[
|
||||
var contextMenu = new contextMenu_createWithImage("'.$self->getIcon(1).'","'.$self->getId.'","'.$self->getName.'");';
|
||||
if ($userUiLevel >= $uiLevels->{"changeUrl"}) {
|
||||
$output .= 'contextMenu.addLink("'.$self->getUrl("func=changeUrl").'","'.$i18n->get("change url").'");';
|
||||
}
|
||||
if ($userUiLevel >= $uiLevels->{"editBranch"}) {
|
||||
$output .= 'contextMenu.addLink("'.$self->getUrl("func=editBranch").'","'.$i18n->get("edit branch").'");';
|
||||
}
|
||||
if ($userUiLevel >= $uiLevels->{"revisions"}) {
|
||||
$output .= 'contextMenu.addLink("'.$self->getUrl("func=manageRevisions").'","'.$i18n->get("revisions").'");';
|
||||
}
|
||||
if ($userUiLevel >= $uiLevels->{"view"}) {
|
||||
$output .= 'contextMenu.addLink("'.$self->getUrl.'","'.$i18n->get("view").'");';
|
||||
}
|
||||
if ($userUiLevel >= $uiLevels->{"lock"} && !$self->isLocked) {
|
||||
$output .= 'contextMenu.addLink("'.$self->getUrl("func=lock").'","'.$i18n->get("lock").'");';
|
||||
}
|
||||
if ($userUiLevel >= $uiLevels->{"export"} && defined $self->session->config->get("exportPath")) {
|
||||
$output .= 'contextMenu.addLink("'.$self->getUrl("func=export").'","'.$i18n->get("Export","Icon").'");';
|
||||
}
|
||||
if ($userUiLevel >= $uiLevels->{"promote"}) {
|
||||
$output .= 'contextMenu.addLink("'.$self->getUrl("func=promote").'","'.$i18n->get("promote").'");';
|
||||
}
|
||||
if ($userUiLevel >= $uiLevels->{"demote"}) {
|
||||
$output .= 'contextMenu.addLink("'.$self->getUrl("func=demote").'","'.$i18n->get("demote").'");';
|
||||
}
|
||||
if ($userUiLevel >= $uiLevels->{"manage"}) {
|
||||
$output .= 'contextMenu.addLink("'.$self->getUrl("op=assetManager").'","'.$i18n->get("manage").'");';
|
||||
}
|
||||
$output .= 'contextMenu.print();
|
||||
//]]>
|
||||
</script>'.$toolbar;
|
||||
return $output;
|
||||
}
|
||||
$toolbar .= $self->session->icon->shortcut('func=createShortcut',$self->get("url"))
|
||||
if ($userUiLevel >= $uiLevels->{"shortcut"} && !$self->isa('WebGUI::Asset::Shortcut'));
|
||||
|
||||
$self->session->style->setLink($self->session->url->extras('contextMenu/contextMenu.css'), {rel=>"stylesheet",type=>"text/css"});
|
||||
$self->session->style->setLink($self->session->url->extras('yui/build/menu/assets/skins/sam/menu.css'), {rel=>"stylesheet",type=>"text/css"});
|
||||
$self->session->style->setScript($self->session->url->extras('yui/build/yahoo-dom-event/yahoo-dom-event.js'), {type=>"text/javascript"});
|
||||
$self->session->style->setScript($self->session->url->extras('yui/build/container/container_core-min.js'), {type=>"text/javascript"});
|
||||
$self->session->style->setScript($self->session->url->extras('yui/build/menu/menu-min.js'), {type=>"text/javascript"});
|
||||
$self->session->style->setScript($self->session->url->extras('contextMenu/contextMenu.js'), {type=>"text/javascript"});
|
||||
my $output
|
||||
= '<div class="yui-skin-sam">'
|
||||
. '<img src="' . $self->getIcon(1) . '" title="' . $self->getName . '" alt="' . $self->getName . '" style="vertical-align: middle" />'
|
||||
. '<div class="yuimenu wg-contextmenu">'
|
||||
. '<div class="bd">'
|
||||
. '<ul class="first-of-type">';
|
||||
if ($userUiLevel >= $uiLevels->{"changeUrl"}) {
|
||||
$output
|
||||
.= '<li class="yuimenuitem"><a class="yuimenuitemlabel" href="'
|
||||
. $self->getUrl("func=changeUrl") . '">' . $i18n->get("change url") . '</a></li>';
|
||||
}
|
||||
if ($userUiLevel >= $uiLevels->{"editBranch"}) {
|
||||
$output
|
||||
.= '<li class="yuimenuitem"><a class="yuimenuitemlabel" href="'
|
||||
. $self->getUrl("func=editBranch") . '">' . $i18n->get("edit branch") . '</a></li>';
|
||||
}
|
||||
if ($userUiLevel >= $uiLevels->{"revisions"}) {
|
||||
$output
|
||||
.= '<li class="yuimenuitem"><a class="yuimenuitemlabel" href="'
|
||||
. $self->getUrl("func=manageRevisions") . '">' . $i18n->get("revisions") . '</a></li>';
|
||||
}
|
||||
if ($userUiLevel >= $uiLevels->{"view"}) {
|
||||
$output
|
||||
.= '<li class="yuimenuitem"><a class="yuimenuitemlabel" href="'
|
||||
. $self->getUrl . '">' . $i18n->get("view") . '</a></li>';
|
||||
}
|
||||
if ($userUiLevel >= $uiLevels->{"lock"} && !$self->isLocked) {
|
||||
$output
|
||||
.= '<li class="yuimenuitem"><a class="yuimenuitemlabel" href="'
|
||||
. $self->getUrl('func=lock') . '">' . $i18n->get("lock") . '</a></li>';
|
||||
}
|
||||
if ($userUiLevel >= $uiLevels->{"export"} && $self->session->config->get("exportPath")) {
|
||||
$output
|
||||
.= '<li class="yuimenuitem"><a class="yuimenuitemlabel" href="'
|
||||
. $self->getUrl('func=export') . '">' . $i18n->get("export") . '</a></li>';
|
||||
}
|
||||
if ($userUiLevel >= $uiLevels->{"promote"}) {
|
||||
$output
|
||||
.= '<li class="yuimenuitem"><a class="yuimenuitemlabel" href="'
|
||||
. $self->getUrl("func=promote") . '">' . $i18n->get("promote") . '</a></li>';
|
||||
}
|
||||
if ($userUiLevel >= $uiLevels->{"demote"}) {
|
||||
$output
|
||||
.= '<li class="yuimenuitem"><a class="yuimenuitemlabel" href="'
|
||||
. $self->getUrl("func=promote") . '">' . $i18n->get("demote") . '</a></li>';
|
||||
}
|
||||
if ($userUiLevel >= $uiLevels->{"manage"}) {
|
||||
$output
|
||||
.= '<li class="yuimenuitem"><a class="yuimenuitemlabel" href="'
|
||||
. $self->getUrl("op=assetManager") . '">' . $i18n->get("manage") . '</a></li>';
|
||||
}
|
||||
$output .= '</ul></div></div>' . $toolbar . '</div>';
|
||||
return $output;
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -300,24 +300,38 @@ sub getToolbar {
|
|||
return
|
||||
unless $self->canEdit;
|
||||
if ($self->getToolbarState) {
|
||||
my $returnUrl;
|
||||
if ($self->session->asset) {
|
||||
$returnUrl = ";proceed=goBackToPage;returnUrl=".$self->session->url->escape($self->session->asset->getUrl);
|
||||
}
|
||||
my $toolbar;
|
||||
if (!$self->isLocked || $self->get("isLockedBy") eq $self->session->user->userId) {
|
||||
$toolbar = $self->session->icon->edit('func=edit'.$returnUrl,$self->get("url"));
|
||||
}
|
||||
my $i18n = WebGUI::International->new($self->session, "Asset");
|
||||
return '<script type="text/javascript">
|
||||
var contextMenu = new contextMenu_createWithImage("'.$self->getIcon(1).'","'.$self->getId.'","'.$self->getName.'");
|
||||
contextMenu.addLink("'.$self->getUrl("func=copy").'","'.$i18n->get("copy").'");
|
||||
contextMenu.addLink("'.$self->getUrl("op=assetManager").'","'.$i18n->get("manage").'");
|
||||
contextMenu.addLink("'.$self->getUrl.'","'.$i18n->get("view").'");
|
||||
contextMenu.print();
|
||||
</script>'.$toolbar;
|
||||
}
|
||||
return $self->SUPER::getToolbar();
|
||||
my $toolbar = '';
|
||||
if ($self->canEditIfLocked) {
|
||||
my $userUiLevel = $self->session->user->profileField("uiLevel");
|
||||
my $uiLevels = $self->session->config->get("assetToolbarUiLevel");
|
||||
my $returnUrl = '';
|
||||
if ($self->session->asset) {
|
||||
$returnUrl = ";proceed=goBackToPage;returnUrl=".$self->session->url->escape($self->session->asset->getUrl);
|
||||
}
|
||||
$toolbar = $self->session->icon->edit('func=edit'.$returnUrl,$self->get("url"))
|
||||
if ($userUiLevel >= $uiLevels->{"edit"});
|
||||
}
|
||||
$self->session->style->setLink($self->session->url->extras('contextMenu/contextMenu.css'), {rel=>"stylesheet",type=>"text/css"});
|
||||
$self->session->style->setLink($self->session->url->extras('yui/build/menu/assets/skins/sam/menu.css'), {rel=>"stylesheet",type=>"text/css"});
|
||||
$self->session->style->setScript($self->session->url->extras('yui/build/yahoo-dom-event/yahoo-dom-event.js'), {type=>"text/javascript"});
|
||||
$self->session->style->setScript($self->session->url->extras('yui/build/container/container_core-min.js'), {type=>"text/javascript"});
|
||||
$self->session->style->setScript($self->session->url->extras('yui/build/menu/menu-min.js'), {type=>"text/javascript"});
|
||||
$self->session->style->setScript($self->session->url->extras('contextMenu/contextMenu.js'), {type=>"text/javascript"});
|
||||
my $i18n = WebGUI::International->new($self->session, "Asset");
|
||||
return '<div class="yui-skin-sam">'
|
||||
. '<img src="' . $self->getIcon(1) . '" title="' . $self->getName . '" alt="' . $self->getName . '" style="vertical-align: middle" />'
|
||||
. '<div class="yuimenu wg-contextmenu">'
|
||||
. '<div class="bd">'
|
||||
. '<ul class="first-of-type">'
|
||||
. '<li class="yuimenuitem"><a class="yuimenuitemlabel" href="'
|
||||
. $self->getUrl("func=copy") . '">' . $i18n->get("copy") . '</a></li>'
|
||||
. '<li class="yuimenuitem"><a class="yuimenuitemlabel" href="'
|
||||
. $self->getUrl("op=assetManager") . '">' . $i18n->get("manage") . '</a></li>'
|
||||
. '<li class="yuimenuitem"><a class="yuimenuitemlabel" href="'
|
||||
. $self->getUrl . '">' . $i18n->get("view") . '</a></li>'
|
||||
. "</ul></div></div>$toolbar</div>";
|
||||
}
|
||||
return $self->SUPER::getToolbar;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,37 +1,9 @@
|
|||
.contextMenu_skin {
|
||||
position:absolute;
|
||||
border:2px outset #eeeeee;
|
||||
font-family: helvetica, arial, sans-serif;
|
||||
line-height:18px;
|
||||
width: 100px;
|
||||
cursor: default;
|
||||
font-size:10px;
|
||||
z-index:100;
|
||||
visibility:hidden;
|
||||
padding: 4px;
|
||||
font-weight: normal;
|
||||
text-align: left;
|
||||
background-color:#F0F0F0;
|
||||
border-bottom: 3px groove #999999;
|
||||
border-top: 0px groove #999999;
|
||||
border-right: 3px groove #999999;
|
||||
border-left: 0px groove #999999;
|
||||
}
|
||||
.contextMenu_skin A, .contextMenu_skin A:link, .contextMenu_skin A:visited {
|
||||
font-weight: normal;
|
||||
width: 100%;
|
||||
color: black;
|
||||
text-decoration: none;
|
||||
margin: 1px;
|
||||
font-size: 10px;
|
||||
}
|
||||
.contextMenu_skin A:hover {
|
||||
text-decoration: none;
|
||||
font-weight: normal;
|
||||
color: #154c66;
|
||||
margin: 0px;
|
||||
background-color: #c3cfd4;
|
||||
border: 1px solid #F0F0F0;
|
||||
width: 100%;
|
||||
.wg-contextmenu {
|
||||
position: absolute;
|
||||
visibility: hidden;
|
||||
font-family: helvetica, arial, sans-serif;
|
||||
}
|
||||
|
||||
.wg-contextmenu .yuimenuitemlabel {
|
||||
font-size: 10px
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,107 +1,21 @@
|
|||
var ie5=document.all&&document.getElementById
|
||||
var contextMenu_items = new Array();
|
||||
|
||||
if (contextMenu_old == undefined)
|
||||
{
|
||||
var contextMenu_old = (document.onclick) ? document.onclick : function () {};
|
||||
document.onclick= function () {contextMenu_old();contextMenu_hide();};
|
||||
}
|
||||
|
||||
function contextMenu_renderLeftClick(menuId,e) {
|
||||
contextMenu_hide(e);
|
||||
contextMenu_show(menuId,e);
|
||||
e.cancelBubble=true;
|
||||
e.returnValue=false;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
function contextMenu_show(menuId,e){
|
||||
var menuobj=document.getElementById(menuId)
|
||||
var posx = 0;
|
||||
var posy = 0;
|
||||
var yoffset = 0;
|
||||
var xoffset = 0;
|
||||
var firedobj = ie5?e.srcElement:e.target;
|
||||
while (firedobj!=null && firedobj.tagName!="HTML"){
|
||||
//this is a hack, need to revisit
|
||||
if (firedobj.tagName == "DIV") {
|
||||
xoffset+=firedobj.offsetLeft;
|
||||
yoffset+=firedobj.offsetTop;}
|
||||
firedobj=firedobj.offsetParent;
|
||||
}
|
||||
var el = (document.documentElement && document.documentElement.scrollTop)
|
||||
? document.documentElement : document.body;
|
||||
posx = e.clientX - xoffset + (ie5? el.scrollLeft : window.pageXOffset);
|
||||
posy = e.clientY - yoffset + (ie5? el.scrollTop : window.pageYOffset);
|
||||
menuobj.style.left=posx + "px";
|
||||
menuobj.style.top=posy + "px";
|
||||
menuobj.style.visibility="visible"
|
||||
return false
|
||||
}
|
||||
|
||||
function contextMenu_hide(){
|
||||
for (i=0;i<contextMenu_items.length;i++) {
|
||||
document.getElementById("contextMenu_"+contextMenu_items[i]+"_menu").style.visibility="hidden"
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function contextMenu_createWithImage(imagePath, id, name, addContext){
|
||||
contextMenu_items.push(id);
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
this.addContext = addContext;
|
||||
this.type = "image";
|
||||
this.imagePath=imagePath;
|
||||
this.linkLabels = new Array();
|
||||
this.linkUrls = new Array();
|
||||
this.draw = contextMenu_draw;
|
||||
this.print = contextMenu_print;
|
||||
this.addLink = contextMenu_addLink;
|
||||
}
|
||||
|
||||
function contextMenu_createWithLink(id, name){
|
||||
contextMenu_items.push(id);
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
this.type = "link";
|
||||
this.linkLabels = new Array();
|
||||
this.linkUrls = new Array();
|
||||
this.draw = contextMenu_draw;
|
||||
this.print = contextMenu_print;
|
||||
this.addLink = contextMenu_addLink;
|
||||
}
|
||||
|
||||
function contextMenu_draw(){
|
||||
var output = "";
|
||||
output += '<div id="contextMenu_' + this.id + '_menu" class="contextMenu_skin">';
|
||||
for (i=0;i<this.linkUrls.length;i++) {
|
||||
output += "<a style=\"color: black;\" href=\"" + this.linkUrls[i] + "\">" + this.linkLabels[i] + "</a><br />";
|
||||
}
|
||||
output += '</div>';
|
||||
if (this.type == "image") {
|
||||
if (this.addContext)
|
||||
output += '<p class="toolbarIcon" style="display: inline; vertical-align: middle;"><a href="javascript:void(0)">';
|
||||
output += '<img src="' + this.imagePath + '" id="contextMenu_' + this.id + '_2" onclick="return contextMenu_renderLeftClick(\'contextMenu_' + this.id + '_menu\',event)" alt="' + this.name + '" title="' + this.name + '" align="absmiddle" ';
|
||||
if (this.addContext)
|
||||
output += 'style="border: 0px none; vertical-align: middle;"';
|
||||
output += ' />';
|
||||
if (this.addContext)
|
||||
output += '</a></p>';
|
||||
} else {
|
||||
output += '<a href="#" id="contextMenu_' + this.id + '" onclick="return contextMenu_renderLeftClick(\'contextMenu_' + this.id + '_menu\',event)">' + this.name + '</a>';
|
||||
}
|
||||
return output;
|
||||
}
|
||||
|
||||
function contextMenu_print(){
|
||||
document.write(this.draw());
|
||||
}
|
||||
|
||||
function contextMenu_addLink(linkUrl,linkLabel){
|
||||
this.linkUrls.push(linkUrl);
|
||||
this.linkLabels.push(linkLabel);
|
||||
}
|
||||
|
||||
|
||||
function initWGContextMenus() {
|
||||
var menus = YAHOO.util.Dom.getElementsByClassName('wg-contextmenu');
|
||||
for (var i = menus.length; i--; ) {
|
||||
var menu = menus[i];
|
||||
if (menu.initialized) {
|
||||
continue;
|
||||
}
|
||||
var ctx = menu.previousSibling;
|
||||
var myMenu = new YAHOO.widget.Menu(menu, {
|
||||
context : [ctx, "tl", "bl"]
|
||||
});
|
||||
myMenu.render();
|
||||
YAHOO.util.Event.addListener(ctx, "click", function (e, menu) {
|
||||
YAHOO.util.Event.preventDefault(e);
|
||||
menu.align("tl", "bl");
|
||||
menu.show();
|
||||
}, myMenu);
|
||||
}
|
||||
}
|
||||
YAHOO.util.Event.onDOMReady(initWGContextMenus);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue