浏览代码

#14 - actions menu (implementation in Note view)

Alex Trofimov 13 年之前
父节点
当前提交
6b7c4d6bda

+ 16 - 1
inc/js/functions.js

@@ -246,7 +246,7 @@ function bx_center_content (sSel, sBlockStyle) {
 }
 
 /**
- * Show pointer popup with menu.
+ * Show pointer popup with menu from URL.
  * @param e - element to show popup at
  * @param o - menu object name
  */
@@ -256,6 +256,21 @@ function bx_menu_popup (o, e, options) {
     $(e).dolPopupAjax(o);
 }
 
+/**
+ * Show pointer popup with menu from existing HTML.
+ * @param jSel - jQuery selector for html to show in popup
+ * @param e - element to show popup at
+ * @param options - popup options
+ */
+function bx_menu_popup_inline (jSel, e, options) {
+    var options = options || {};
+    var o = $.extend({}, $.fn.dolPopupDefaultOptions, options, {pointer:{el:$(e)}});
+    if ($(jSel + ':visible').length) 
+        $(jSel).dolPopupHide(); 
+    else 
+        $(jSel).dolPopup(o);
+}
+
 function validateLoginForm(eForm) {
     if (!eForm)
         return false;

+ 8 - 3
install/sql/v70.sql

@@ -2760,7 +2760,8 @@ INSERT INTO `sys_menu_templates` (`id`, `template`, `title`) VALUES
 (5, 'menu_toolbar.html', '_sys_menu_template_title_toolbar'),
 (6, 'menu_vertical.html', '_sys_menu_template_title_ver'),
 (7, 'menu_floating_blocks.html', '_sys_menu_template_title_floating_blocks'),
-(8, 'menu_main_submenu.html', '_sys_menu_template_title_main_submenu');
+(8, 'menu_main_submenu.html', '_sys_menu_template_title_main_submenu'),
+(9, 'menu_action.html', '_sys_menu_template_title_action');
 
 CREATE TABLE IF NOT EXISTS `sys_objects_menu` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
@@ -2781,6 +2782,7 @@ INSERT INTO `sys_objects_menu` (`object`, `title`, `set_name`, `module`, `templa
 ('sys_site', '_sys_menu_title_main', 'sys_site', 'system', 6, 0, 1, '', ''),
 ('sys_site_submenu', '_sys_menu_title_submenu', 'sys_site', 'system', 1, 0, 1, 'BxTemplMenuSubmenu', ''),
 ('sys_site_submenu_main', '_sys_menu_title_submenu_main', 'sys_site', 'system', 8, 0, 1, '', ''),
+('sys_site_action', '_sys_menu_title_action', 'sys_site_action', 'system', 9, 0, 1, 'BxTemplMenuAction', ''),
 ('sys_footer', '_sys_menu_title_footer', 'sys_footer', 'system', 2, 0, 1, '', ''),
 ('sys_toolbar_site', '_sys_menu_title_toolbar_site', 'sys_toolbar_site', 'system', 5, 0, 1, '', ''),
 ('sys_toolbar_member', '_sys_menu_title_toolbar_member', 'sys_toolbar_member', 'system', 5, 0, 1, 'BxTemplMenuToolbar', ''),
@@ -2789,7 +2791,6 @@ INSERT INTO `sys_objects_menu` (`object`, `title`, `set_name`, `module`, `templa
 ('sys_account_settings', '_sys_menu_title_account_settings', 'sys_account_settings', 'system', 6, 0, 1, '', ''),
 ('sys_profiles_create', '_sys_menu_title_profiles_create', 'sys_profiles_create', 'system', 4, 0, 1, '', '');
 
-
 CREATE TABLE IF NOT EXISTS `sys_menu_sets` (
   `set_name` varchar(32) NOT NULL,
   `module` varchar(32) NOT NULL,
@@ -2800,6 +2801,7 @@ CREATE TABLE IF NOT EXISTS `sys_menu_sets` (
 
 INSERT INTO `sys_menu_sets` (`set_name`, `module`, `title`, `deletable`) VALUES
 ('sys_site', 'system', '_sys_menu_set_title_site', 0),
+('sys_site_action', 'system', '_sys_menu_set_title_action', 0),
 ('sys_footer', 'system', '_sys_menu_set_title_footer', 0),
 ('sys_toolbar_site', 'system', '_sys_menu_set_title_toolbar_site', 0),
 ('sys_toolbar_member', 'system', '_sys_menu_set_title_toolbar_member', 0),
@@ -2808,7 +2810,6 @@ INSERT INTO `sys_menu_sets` (`set_name`, `module`, `title`, `deletable`) VALUES
 ('sys_account_settings', 'system', '_sys_menu_set_title_account_settings', 0),
 ('sys_profiles_create', 'system', '_sys_menu_set_title_profile_create_links', 0);
 
-
 CREATE TABLE IF NOT EXISTS `sys_menu_items` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
   `set_name` varchar(32) NOT NULL,
@@ -2833,6 +2834,10 @@ INSERT INTO `sys_menu_items` (`set_name`, `module`, `name`, `title_system`, `tit
 ('sys_site', 'system', 'home', '_sys_menu_item_title_system_home', '_sys_menu_item_title_home', 'index.php', '', '', 'home col-gray-dark', '', 2147483647, 1, 1, 1),
 ('sys_site', 'system', 'about', '_sys_menu_item_title_system_about', '_sys_menu_item_title_about', 'page.php?i=about', '', '', 'info-sign col-blue3-dark', '', 2147483647, 1, 1, 2);
 
+-- action menu
+INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES 
+('sys_site_action', 'system', 'action', '_sys_menu_item_title_system_action', '', 'javascript:void(0);', 'bx_menu_popup_inline(\'#bx-menu-action-popup-sys_site_action\', this);', '', 'collapse', '', 2147483647, 1, 0, 0);
+
 -- footer menu
 INSERT INTO `sys_menu_items` (`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `submenu_object`, `visible_for_levels`, `active`, `copyable`, `order`) VALUES
 ('sys_footer', 'system', 'about', '_sys_menu_item_title_system_about', '_sys_menu_item_title_about', 'page.php?i=about', '', '', '', '', 2147483647, 1, 1, 1);

+ 4 - 0
modules/boonex/english/data/langs/system.xml

@@ -3287,6 +3287,7 @@ More info about URI DNSBL: <br />
     <string name="_sys_menu_title_account_settings"><![CDATA[Account Settings Menu]]></string>
     <string name="_sys_menu_title_add_content"><![CDATA[Add Content Menu]]></string>
     <string name="_sys_menu_title_profiles_create"><![CDATA[Create Profiles]]></string>
+    <string name="_sys_menu_title_action"><![CDATA[Action Menu]]></string>
 
     <string name="_sys_menu_item_title_system_home"><![CDATA[Home]]></string>
     <string name="_sys_menu_item_title_system_about"><![CDATA[About]]></string>
@@ -3330,6 +3331,7 @@ More info about URI DNSBL: <br />
     <string name="_sys_menu_set_title_add_content"><![CDATA[Add Content]]></string>
     <string name="_sys_menu_set_title_account_settings"><![CDATA[Account Settings]]></string>
     <string name="_sys_menu_set_title_profile_create_links"><![CDATA[Create Profile Links]]></string>
+    <string name="_sys_menu_set_title_action"><![CDATA[Action]]></string>
 
 	<string name="_sys_menu_template_title_main"><![CDATA[Site Navigation]]></string>
     <string name="_sys_menu_template_title_main_submenu"><![CDATA[Site Navigation Submenu]]></string>
@@ -3339,6 +3341,8 @@ More info about URI DNSBL: <br />
     <string name="_sys_menu_template_title_ver_lite"><![CDATA[Vertical Links (lite)]]></string>
     <string name="_sys_menu_template_title_toolbar"><![CDATA[Toolbar Buttons]]></string>
     <string name="_sys_menu_template_title_floating_blocks"><![CDATA[Floating Blocks]]></string>
+    <string name="_sys_menu_template_title_action"><![CDATA[Action Menu]]></string>
+
     <string name="_sys_designbox_0"><![CDATA[Content only]]></string>
     <string name="_sys_designbox_1"><![CDATA[Content + title + background]]></string>
     <string name="_sys_designbox_2"><![CDATA[Empty box]]></string>

+ 1 - 0
modules/boonex/notes/classes/BxNotesConfig.php

@@ -16,6 +16,7 @@ class BxNotesConfig extends BxDolModuleConfig {
     public static $FIELD_AUTHOR = 'author';
     public static $FIELD_ADDED = 'added';
     public static $FIELD_CHANGED = 'changed';
+    public static $FIELD_TITLE = 'title';
     public static $FIELD_TEXT = 'text';
     public static $FIELD_TEXT_ID = 'note-text';
     public static $FIELD_SUMMARY = 'summary';

+ 1 - 0
modules/boonex/notes/classes/BxNotesMenuViewNote.php

@@ -24,6 +24,7 @@ class BxNotesMenuViewNote extends BxTemplMenu {
 
         $iContentId = bx_process_input(bx_get('id'), BX_DATA_INT);
 
+        bx_import('BxDolModule');
         $this->_oModule = BxDolModule::getInstance('bx_notes');
         $this->_aContentInfo = $this->_oModule->_oDb->getContentInfoById($iContentId);
         if ($this->_aContentInfo)

+ 3 - 27
modules/boonex/notes/classes/BxNotesModule.php

@@ -68,14 +68,6 @@ class BxNotesModule extends BxDolModule {
         return $oProfileForms->editDataForm((int)$iContentId);
     }
 
-    /**
-     * @return edit note form block
-     */
-    public function serviceEntityEditBlock ($iContentId = 0) {
-        $s = $this->serviceEntityEdit($iContentId);
-        return array('content' => $s, 'menu' => 'bx_notes_view');
-    }
-
     /**
      * @return delete note form string
      */
@@ -90,32 +82,16 @@ class BxNotesModule extends BxDolModule {
     }
 
     /**
-     * @return delete note form block
-     */
-    public function serviceEntityDeleteBlock ($iContentId = 0) {
-        $s = $this->serviceEntityDelete($iContentId);
-        return array('content' => $s, 'menu' => 'bx_notes_view');
-    }
-
-    /**
-     * Just a note's text
+     * A note's text with some additional controls, like menu
      */
-    public function serviceEntityText ($iContentId = 0) {
+    public function serviceEntityTextBlock ($iContentId = 0) {
         if (!$iContentId)
             $iContentId = bx_process_input(bx_get('id'), BX_DATA_INT);
         if (!$iContentId)
             return false;
         bx_import('NoteForms', $this->_aModule);
         $oProfileForms = new BxNotesNoteForms($this);
-        return $oProfileForms->viewDataText((int)$iContentId);
-    }
-
-    /**
-     * A note's text with some additional controls, like menu
-     */
-    public function serviceEntityTextBlock ($iContentId = 0) {
-        $s = $this->serviceEntityText($iContentId);
-        return array('content' => $s, 'menu' => 'bx_notes_view');
+        return $oProfileForms->viewDataEntry((int)$iContentId);
     }
 
     public function serviceEntityInfo ($iContentId = 0) {

+ 16 - 0
modules/boonex/notes/classes/BxNotesNoteForms.php

@@ -210,6 +210,22 @@ class BxNotesNoteForms extends BxDolProfileForms {
         return $aContentInfo[BxNotesConfig::$FIELD_TEXT];
     }
 
+    /**
+     * @return main content text 
+     */
+    public function viewDataEntry ($iContentId) {
+
+        // get content data and profile info
+        list ($oProfile, $aContentInfo) = $this->_getProfileAndContentData($iContentId);
+        if (!$aContentInfo)
+            return MsgBox(_t('_bx_notes_txt_error_note_is_not_defined')); 
+
+        // check access
+        if (CHECK_ACTION_RESULT_ALLOWED !== ($sMsg = $this->_oModule->isAllowedView($aContentInfo)))
+            return MsgBox($sMsg);
+
+        return $this->_oModule->_oTemplate->entryText($aContentInfo);
+    }
 
 
     /**

+ 4 - 0
modules/boonex/notes/classes/BxNotesPageNote.php

@@ -31,6 +31,10 @@ class BxNotesPageNote extends BxTemplPage {
         $oMenuSumbemu = BxDolMenu::getObjectInstance('sys_site_submenu');
         $oMenuSumbemu->setObjectSubmenu('bx_notes_view_submenu', 'notes-home');
 
+        // set actions menu
+        $oMenuAction = BxDolMenu::getObjectInstance('sys_site_action');
+        $oMenuAction->setActionsMenu('bx_notes_view');
+
         $iContentId = bx_process_input(bx_get('id'), BX_DATA_INT);
         if ($iContentId) {
             $oModuleMain = BxDolModule::getInstance('bx_notes');

+ 7 - 0
modules/boonex/notes/classes/BxNotesTemplate.php

@@ -79,6 +79,13 @@ class BxNotesTemplate extends BxDolTwigTemplate {
         return $this->parseHtmlByName($sTemplateName, $aVars);
     }
 
+    function entryText ($aData, $sTemplateName = 'entry-text.html') {
+        $aVars = $aData;
+        $aVars['entry_title'] = $aData[BxNotesConfig::$FIELD_TITLE];
+        $aVars['entry_text'] = $aData[BxNotesConfig::$FIELD_TEXT];
+        return $this->parseHtmlByName($sTemplateName, $aVars);
+    }
+
 }
 
 /** @} */ 

+ 3 - 3
modules/boonex/notes/install/sql/enable.sql

@@ -48,7 +48,7 @@ INSERT INTO `sys_objects_page`(`object`, `title_system`, `title`, `module`, `lay
 ('bx_notes_edit_note', '_bx_notes_page_title_sys_edit_note', '_bx_notes_page_title_edit_note', 'bx_notes', 5, 2147483647, 1, 'edit-note', '', '', '', '', 0, 1, 0, 'BxNotesPageNote', 'modules/boonex/notes/classes/BxNotesPageNote.php');
 
 INSERT INTO `sys_pages_blocks` (`object`, `cell_id`, `module`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES
-('bx_notes_edit_note', 1, 'bx_notes', '_bx_notes_page_block_title_edit_note', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_notes";s:6:"method";s:17:"entity_edit_block";}', 0, 0, 0);
+('bx_notes_edit_note', 1, 'bx_notes', '_bx_notes_page_block_title_edit_note', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_notes";s:6:"method";s:11:"entity_edit";}', 0, 0, 0);
 
 --
 -- Dumping data for 'bx_notes_delete_note' page
@@ -57,7 +57,7 @@ INSERT INTO `sys_objects_page`(`object`, `title_system`, `title`, `module`, `lay
 ('bx_notes_delete_note', '_bx_notes_page_title_sys_delete_note', '_bx_notes_page_title_delete_note', 'bx_notes', 5, 2147483647, 1, 'delete-note', '', '', '', '', 0, 1, 0, 'BxNotesPageNote', 'modules/boonex/notes/classes/BxNotesPageNote.php');
 
 INSERT INTO `sys_pages_blocks` (`object`, `cell_id`, `module`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES
-('bx_notes_delete_note', 1, 'bx_notes', '_bx_notes_page_block_title_delete_note', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_notes";s:6:"method";s:19:"entity_delete_block";}', 0, 0, 0);
+('bx_notes_delete_note', 1, 'bx_notes', '_bx_notes_page_block_title_delete_note', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_notes";s:6:"method";s:13:"entity_delete";}', 0, 0, 0);
 
 --
 -- Dumping data for 'bx_notes_view_note' page
@@ -66,7 +66,7 @@ INSERT INTO `sys_objects_page`(`object`, `title_system`, `title`, `module`, `lay
 ('bx_notes_view_note', '_bx_notes_page_title_sys_view_note', '_bx_notes_page_title_view_note', 'bx_notes', 6, 2147483647, 1, 'view-note', '', '', '', '', 0, 1, 0, 'BxNotesPageNote', 'modules/boonex/notes/classes/BxNotesPageNote.php');
 
 INSERT INTO `sys_pages_blocks` (`object`, `cell_id`, `module`, `title`, `designbox_id`, `visible_for_levels`, `type`, `content`, `deletable`, `copyable`, `order`) VALUES
-('bx_notes_view_note', 1, 'bx_notes', '_bx_notes_page_block_title_note_text', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_notes";s:6:"method";s:17:"entity_text_block";}', 0, 0, 0),
+('bx_notes_view_note', 1, 'bx_notes', '_bx_notes_page_block_title_note_text', 13, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_notes";s:6:"method";s:17:"entity_text_block";}', 0, 0, 0),
 ('bx_notes_view_note', 2, 'bx_notes', '_bx_notes_page_block_title_note_social_sharing', 13, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_notes";s:6:"method";s:21:"entity_social_sharing";}', 0, 0, 1),
 ('bx_notes_view_note', 2, 'bx_notes', '_bx_notes_page_block_title_note_author', 11, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_notes";s:6:"method";s:13:"entity_author";}', 0, 0, 0),
 ('bx_notes_view_note', 3, 'bx_notes', '_bx_notes_page_block_title_note_comments', 13, 2147483647, 'service', 'a:2:{s:6:"module";s:8:"bx_notes";s:6:"method";s:15:"entity_comments";}', 0, 0, 0);

+ 7 - 0
modules/boonex/notes/template/css/main.css

@@ -14,3 +14,10 @@
 .bx-notes-unit-thumb {
     float:right;
 }
+
+/* enity view */
+
+.bx-notes-entity-content * {
+    max-width:100%;
+    overflow:hidden;
+}

+ 8 - 0
modules/boonex/notes/template/entry-text.html

@@ -0,0 +1,8 @@
+
+<div class="bx-notes-entity-content">
+
+    <h1>__title__</h1>
+
+    __text__
+
+</div>

+ 1 - 0
template/_sub_header.html

@@ -52,6 +52,7 @@
 
             <div id="bx-menu-main-container" class="bx-clearfix"> 
                 <bx_menu:sys_site_submenu />
+                <bx_menu:sys_site_action />
             </div>
 
             <bx_injection:injection_top_menu_after />

+ 0 - 2
template/css/general.css

@@ -70,8 +70,6 @@
     background-color:#ffffff;
     border-bottom:1px solid #d0d0d0;
 
-    line-height:39px;
-
 	-webkit-box-shadow: inset 0px -1px 0px rgba(128, 128, 128, 0.1);
 	-moz-box-shadow: inset 0px -1px 0px rgba(128, 128, 128, 0.1);
 	box-shadow: inset 0px -1px 0px rgba(128, 128, 128, 0.1);

+ 33 - 0
template/css/menu.css

@@ -121,6 +121,7 @@ ul.bx-menu-verlit {
 #bx-menu-main-submenu,
 #bx-menu-main {
     float:left;
+    line-height:39px;
 }
 
 #bx-menu-main-container #bx-menu-main-submenu:first-child .bx-menu-main-submenu-div:first-child {
@@ -162,6 +163,37 @@ ul.bx-menu-main {
     color:#000;
 }
 
+
+/* --------------- action menu */
+
+#bx-menu-action {
+    float:right;
+}
+
+ul.bx-menu-action {
+    padding:0;
+    margin:0;
+    list-style:none;
+    line-height:39px;
+}
+.bx-menu-action li {
+    float:left;
+    margin:0;
+}
+.bx-menu-action li a {
+    text-decoration:none;
+    line-height:normal;
+}
+.bx-menu-action li .sys-icon {
+    display:inline-block;
+    width:24px;
+    height:24px;
+    font-size:24px;
+    text-align:center;
+    vertical-align:middle;
+}
+
+
 /* --------------- toolbar menu */
 
 #bx-popup-ajax-wrapper-sys_site .bx-popup-content-wrapped {
@@ -339,3 +371,4 @@ li.bx-menu-inter-pas {}
 li.bx-menu-inter-hidden {
 	display: none;
 }
+

+ 7 - 0
template/menu_action.html

@@ -0,0 +1,7 @@
+<ul id="bx-menu-action" class="bx-menu-action bx-menu-object-__object__ bx-def-font-h3 bx-clearfix">
+    <bx_repeat:menu_items>
+        <li class="bx-def-padding-sec-right bx-def-padding-sec-left __class_add__"><a href="__link__" target="__target__" onclick="__onclick__"><i class="sys-icon __icon__"></i>__title__</a></li>
+    </bx_repeat:menu_items>
+</ul>
+
+<div id="bx-menu-action-popup-__object__" style="display:none">__popup__</div>

+ 1 - 2
template/menu_footer.html

@@ -1,6 +1,5 @@
-<ul id="bx-menu-footer" class="bx-menu-hor">
+<ul id="bx-menu-footer" class="bx-menu-hor bx-menu-object-__object__ bx-clearfix">
     <bx_repeat:menu_items>
         <li class="__class_add__"><a href="__link__" target="__target__" onclick="__onclick__">__title__</a></li>
     </bx_repeat:menu_items>
-    <div class="bx-clear"></div>
 </ul>

+ 1 - 2
template/menu_horizontal.html

@@ -1,6 +1,5 @@
-<ul class="bx-menu-hor">
+<ul class="bx-menu-hor bx-menu-object-__object__ bx-clearfix">
     <bx_repeat:menu_items>
         <li class="__class_add__"><a href="__link__" target="__target__" onclick="__onclick__">__title__</a></li>
     </bx_repeat:menu_items>
-    <div class="bx-clear"></div>
 </ul>

+ 2 - 2
template/menu_interactive.html

@@ -1,4 +1,4 @@
-<ul id="bx-menu-inter-__id__" class="bx-menu-inter bx-clearfix">
+<ul id="bx-menu-inter-__id__" class="bx-menu-inter bx-menu-object-__object__ bx-clearfix">
 	<bx_repeat:menu_items>
 		<li class="bx-menu-inter-div"><span>&#183;</span></li>
 	    <li id="__id__-act" class="bx-menu-inter-act __class_wrp_act__">
@@ -16,4 +16,4 @@
 			$(this).parent().siblings('.bx-menu-inter-act:visible').hide().siblings('.bx-menu-inter-pas:hidden').show().siblings('#' + sId + '-pas:visible').hide().siblings('#' + sId + '-act:hidden').show();
     	});
     });
-</script>
+</script>

+ 1 - 1
template/menu_main.html

@@ -1,3 +1,3 @@
-<ul id="bx-menu-main" class="bx-menu-main bx-def-font-h3 bx-clearfix">
+<ul id="bx-menu-main" class="bx-menu-main bx-menu-object-__object__ bx-def-font-h3 bx-clearfix">
     <li class="bx-def-padding-sec-right bx-def-padding-sec-left bx-def-color-bg-hl-hover"><!-- TODO: maybe will be used later <i class="sys-icon __icon__ bx-def-margin-sec-right"></i> --><a href="__link__">__title__</a></li>
 </ul>

+ 1 - 1
template/menu_main_submenu.html

@@ -1,4 +1,4 @@
-<ul id="bx-menu-main-submenu" class="bx-menu-main-submenu bx-def-font-h3 bx-clearfix">
+<ul id="bx-menu-main-submenu" class="bx-menu-main-submenu bx-menu-object-__object__ bx-def-font-h3 bx-clearfix">
     <li class="bx-menu-main-submenu-div bx-def-padding-sec-left bx-def-padding-sec-right"><i class="sys-icon angle-right"></i></li>
     <bx_repeat:menu_items>
         <li class="bx-def-padding-sec-right bx-def-padding-sec-left bx-def-color-bg-hl-hover __class_add__"><a href="__link__" target="__target__" onclick="__onclick__">__title__</a></li>

+ 1 - 1
template/menu_toolbar.html

@@ -1,4 +1,4 @@
-<ul class="bx-menu-toolbar">
+<ul class="bx-menu-toolbar bx-menu-object-__object__">
     <bx_repeat:menu_items>
         <li class="__class_add__">
             <a href="__link__" target="__target__" onclick="__onclick__" class="bx-def-round-corners bx-def-margin-sec-left"><bx_if:icon><i class="sys-icon __icon__"></i></bx_if:icon><bx_if:image><img class="bx-def-icon bx-def-icon-size" style="background-image:url(__icon_url__)" src="<bx_icon_url:spacer.gif />" /></bx_if:image>__title__</a>

+ 1 - 2
template/menu_vertical.html

@@ -1,4 +1,4 @@
-<ul class="bx-menu-ver">
+<ul class="bx-menu-ver bx-menu-object-__object__ bx-clearfix">
     <bx_repeat:menu_items>
         <li class="bx-def-round-corners bx-def-color-bg-hl-hover __class_add__">
             <a href="__link__" target="__target__" onclick="__onclick__">
@@ -10,7 +10,6 @@
             </a>
         </li>
     </bx_repeat:menu_items>
-    <div class="bx-clear"></div>
 </ul>
 <script language="javascript">
     $(document).ready(function () {

+ 1 - 2
template/menu_vertical_lite.html

@@ -1,4 +1,4 @@
-<ul class="bx-menu-verlit">
+<ul class="bx-menu-verlit bx-menu-object-__object__ bx-clearfix">
     <bx_repeat:menu_items>
         <li class="bx-def-margin-sec-top __class_add__">
             <a href="__link__" target="__target__" onclick="__onclick__">
@@ -8,5 +8,4 @@
             </a>
         </li>
     </bx_repeat:menu_items>
-    <div class="bx-clear"></div>
 </ul>

+ 1 - 1
template/scripts/BxBaseFunctions.php

@@ -566,7 +566,7 @@ EOF;
             if ($sMenu) {
                 $sId = 'bx-menu-db-' . time() . rand(0, PHP_INT_MAX);
                 $sCode .= '<div id="' . $sId . '" style="display:none;">' . BxTemplFunctions::getInstance()->transBox('<div class="bx-def-padding bx-def-color-bg-block">' . $sMenu . '</div>') . '</div>';
-                $aButtonMenu = array ('icon' => 'reorder', 'onclick' => 'if ($(\'#' . $sId . ':visible\').length) $(\'#' . $sId . '\').dolPopupHide(); else $(\'#' . $sId . '\').dolPopup({pointer:{el:$(this)}})');
+                $aButtonMenu = array ('icon' => 'reorder', 'onclick' => "bx_menu_popup_inline('#" . $sId . "', this)");
             }
             
         }

+ 12 - 4
template/scripts/BxBaseMenu.php

@@ -33,10 +33,7 @@ class BxBaseMenu extends BxDolMenu {
      */
     public function getCode () {
 
-        $aVars = array (
-            'object' => $this->_sObject,
-            'bx_repeat:menu_items' => $this->_getMenuItems (),
-        );
+        $aVars = $this->_getTemplateVars ();
 
         if (empty($aVars['bx_repeat:menu_items']))
             return false;
@@ -46,6 +43,17 @@ class BxBaseMenu extends BxDolMenu {
         return $this->_oTemplate->parseHtmlByName($this->_aObject['template'], $aVars);
     }
 
+    /** 
+     * Get template variables array
+     * @return array
+     */
+    protected function _getTemplateVars () {
+        return array (
+            'object' => $this->_sObject,
+            'bx_repeat:menu_items' => $this->_getMenuItems (),
+        );
+    }
+
     /** 
      * Get menu items array, which are ready to pass to template.
      * @return array

+ 51 - 0
template/scripts/BxBaseMenuAction.php

@@ -0,0 +1,51 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) BoonEx Pty Limited - http://www.boonex.com/
+ * CC-BY License - http://creativecommons.org/licenses/by/3.0/
+ *
+ * @defgroup    DolphinCore Dolphin Core
+ * @{
+ */
+
+bx_import('BxTemplMenu');
+
+/**
+ * Actions menu for displaying some contex actions.
+ * @see BxDolMenu
+ */
+class BxBaseMenuAction extends BxTemplMenu 
+{
+    protected $_sMenu = false;
+
+    public function __construct ($aObject, $oTemplate) 
+    {
+        parent::__construct ($aObject, $oTemplate);
+    }
+
+    /**
+     * Set current submenu object
+     * @param $sMenuObject menu object name
+     * @param $sForceMainMenuSelection force main menu item selection by meni item name
+     */
+    public function setActionsMenu ($sMenu)
+    { 
+        $this->_sMenu = $sMenu;
+    }
+
+    protected function _getTemplateVars () {
+        if (!$this->_sMenu)
+            return false;
+
+        $a = parent::_getTemplateVars ();
+
+        $oMenu = BxTemplMenu::getObjectInstance($this->_sMenu);
+        $sMenu = $oMenu ? $oMenu->getCode () : '';
+
+        $a['popup'] = BxTemplFunctions::getInstance()->transBox('<div class="bx-def-padding bx-def-color-bg-block">' . $sMenu . '</div>');
+        
+        return $a;
+    }
+    
+}
+
+/** @} */