简单菜单的客户机端框架

您可以在客户机中启用包含 4 个模块的简单菜单。

要在主题中使用简单菜单,您必须向当前页面上的主题概要文件添加主要模块 wp_simple_contextmenu_main。该页面上提供了所有必需资源。

简单菜单框架包含 4 个模块:

  • wp_simple_contextmenu_main
    • wp_simple_contextmenu_js
    • wp_simple_contextmenu_css
    • wp_simple_contextmenu_template

使用 JavaScript 函数 wptheme.contextMenu.init 打开菜单。有关更多信息,请参阅 JsDoc

要注册简单菜单,以便它在用户单击 HTML 元素时打开,请使用以下示例。

<span role="button" aria-haspopup="true" class="wpthemeMenuFocus"
          onclick="if (typeof wptheme != 'undefined') wptheme.contextMenu.init({ 'node': this, menuId: 'pageAction', jsonQuery: {'navID':ibmCfg.portalConfig.currentPageOID}, params: {'alignment':'right'}});"
          <span class="wpthemeUnderlineText" id="wpContextMenu">My Menu</span>
      </span>

此示例包含 pageAction 标识,该标识用于向服务器触发装入具有同一标识的 JSON 文件的请求。有关更多信息,请参阅“服务器端框架”。

您可以在定制主题中根据需要创建多个菜单。

要强制重新生成菜单,请使用以下 JavaScript 命令:i$.fireEvent('wptheme/contextMenu/invalidate/all');

如果发生会话超时,那么页面刷新将返回到登录页面。

模块详细信息

简单菜单框架中的 4 个模块提供了呈示菜单所需的所有信息。为了提高灵活性,除 JavaScript 模块以外的模块将配置为主题模块。它们分别包含在每个主题中。创建或克隆您自己的主题时,您必须将所有必需资源复制到主题中。

复制缺省主题时,该主题包含所有必需资源。

以下列表描述了主题中各个模块需要的所有资源。

  • wp_simple_contextmenu_js(系统模块)
  • wp_simple_contextmenu_main(主题模块)
    • 元模块,未引用任何资源
  • wp_simple_contextmenu_css(主题模块)
    • static resources/css/wp_simple_contextmenu.css 的主题根目录
    • static resources/css/wp_simple_contextmenu.css.uncompressed.css 的主题根目录
    • static resources/css/wp_simple_contextmenuRTL.css 的主题根目录
    • static resources/css/wp_simple_contextmenuRTL.css.uncompressed.css 的主题根目录
    • static resources/css/default/contextmenu.css 的主题根目录
    • static resources/css/default/contextmenu.css.uncompressed.css 的主题根目录
    • static resources/css/default/contextmenuCommon.css 的主题根目录
    • static resources/css/default/contextmenuCommon.css.uncompressed.css 的主题根目录
    • static resources/css/default/contextmenuRTL.css 的主题根目录
    • static resources/css/default/contextmenuRTL.css.uncompressed.css 的主题根目录
  • wp_simple_contextmenu_template(主题模块)
    • static resources/menuDefinitions/templates/simpleMenuTemplate.html 的主题根目录

Templates

菜单提供了嵌入在页面标记中并通过模块 wp_simple_contextmenu_template 提供的缺省模板。如果初始化菜单时未传递内联模板或 templateID,那么框架将还原为缺省模板。

您可以定义含有通过菜单标记嵌入的内联模板的模板。

<span role="button" aria-haspopup="true" class="wpthemeMenuFocus"
          onclick="if (typeof wptheme != 'undefined') wptheme.contextMenu.init({ 'node': this, menuId: 'pageAction', jsonQuery: {'navID':ibmCfg.portalConfig.currentPageOID}, params: {'alignment':'right'}});"
          <span class="wpthemeUnderlineText" id="wpContextMenu">My Menu</span>
          ... <your template markup appears here> ...
      </span>

另外,也可以通过标识使用所引用的模板。调用菜单的 init 方法时,可以传递 templateID 作为其中一个参数。此标识在 DOM 中解析为 HTML 元素标识,并且必须指向有效的模板。

<span id="exampleTemplateId" class="wpthemeMenuLeft">
    <div class="wpthemeMenuBorder">
        <div class="wpthemeMenuNotchBorder"></div>
        <!-- define the menu item template inside the "ul" element.  only "css-class", "description", and "title" are handled by the theme's sample javascript. -->
        <ul class="wpthemeMenuDropDown wpthemeTemplateMenu" role="menu">
            <li class="${css-class}" role="menuitem" tabindex="-1"  ><span class="wpthemeMenuText" >${title}</span></li>
        </ul>
    </div>
    <!-- Template for loading -->
    <div class="wpthemeMenuLoading wpthemeTemplateLoading">${loading}</div>
    <!-- Template for submenu -->
    <div class="wpthemeAnchorSubmenu wpthemeTemplateSubmenu">
        <div class="wpthemeMenuBorder wpthemeMenuSubmenu">
            <ul id="${submenu-id}" class="wpthemeMenuDropDown" role="menu"><li role="menuitem" tabindex="-1"></li></ul>
        </div>
    </div>
</span>

模板包含 3 个通过类标识的子模板。

菜单项模板
通过类 wpthemeTemplateMenu 进行定义。为了生成各个菜单项,此 DOM 节点包含的项将用作模板。
装入模板
通过类 wpthemeTemplateLoading 进行定义。用于在装入菜单内容时显示。
子菜单模板
通过类 wpthemeTemplateSubmenu 进行定义。

模板还可以包含一些替换变量。菜单项模板中有三个变量。

${css-class}
替换为用于此条目的类。
${description}
菜单项的本地化描述。
${title}
菜单项的本地化标题。

装入模板中有一个变量。

${loading}
装入从服务器访存数据时要显示的文本。

子菜单模板中有一个变量。

${submenu-id}
必需项,用于为新生成的子菜单定义唯一标识。

示例

此示例显示关闭处理程序、另一个 templateId 和对齐方式。

addClass(control.parentNode, VALUE_SELECTED);
            args = {
                "node": control.parentNode,
                "menuId": menuID,
                "jsonQuery": menuQuery,
                "params": {
                    "templateId": "exampleTemplate",
                    "alignment": "right"
                },
                "onClose": function() {
                    removeClass(control.parentNode, VALUE_SELECTED);
                }
            };
            wptheme.contextMenu.init(args);

简单菜单扩展

框架支持额外的扩展作为模块 wp_simple_contextmenu_ext 的组成部分。以下是可用的扩展。

actionUrlTarget
您可以在浏览器 DOM 中定义在其中运行菜单操作的目标窗口。例如,可以使用此扩展在页面的另一个 iframe 中运行菜单操作。将在工具栏主题中使用此模块。
badge
此扩展支持显示 contextmenu 的每个 menuitem 的徽章。徽章是在图形框中显示的彩色数字。通过在 menuitem 的元数据上设置元数据 badgeUrlbadgeData,可以轻松启用徽章。从 badgeUrl 返回的订阅源必须是 JSON 类型的订阅源,并且必须在根对象上具有两个 JSON 元素。
count
要显示的数字。
级别
字符串,可以是 errorwarninfo

作为 badgeURL 的替代项,menuitem 还可以包含 badgeData 元素。badgeData 元素必须是与 badgeURL 中返回的订阅源具有相同元素的 JSON 对象。以下是 badgeURL 示例。

{
  "type": "StaticMenuitem",
  "id": "myEditFct",
  ...
  "metadata": {
    ...
    "badgeUrl": "?uri=theme-validation:count"
  }
}

以下是 badgeData 示例。

{
  "type": "StaticMenuitem",
  "id": "myEditFct",
  ...
  "metadata": {
    ...
    "badgeData": {
      "count": "10",
      "level": "error"
    }
  }
}