Просмотр исходного кода

Merge branch 'master' of https://github.com/boonex/dolphin

AntonLV 12 лет назад
Родитель
Сommit
15f6bc05ff

+ 3 - 0
inc/classes/BxDolTemplate.php

@@ -1030,6 +1030,9 @@ class BxDolTemplate extends BxDol implements iBxDolSingleton
                     'results' => $oSearch->getResultsContainer(),
                 ));
                 $sRet .= BxTemplFunctions::getInstance()->transBox('bx-popup-search', $s, true);
+
+                $sRet .= $this->getMenu ('sys_site');
+                $sRet .= isLogged() ? $this->getMenu ('sys_add_content') : '';
                 break;
             case 'lang':
                 $sRet = bx_lang_name();

+ 58 - 13
inc/js/functions.js

@@ -300,44 +300,89 @@ function bx_menu_popup_inline (jSel, e, options) {
  * Show pointer popup with menu from existing HTML.
  * @param jSel - jQuery selector for html to show in popup
  * @param e - element to click to open/close slider
- * @param options - popup options
+ * @param sPosition - 'block' for sliding menu in blocks, 'site' - for sliding main menu
  */
-function bx_menu_slide (jSel, e) {
+function bx_menu_slide (jSel, e, sPosition) {
     var options = options || {};
-    var eSlider = $(jSel);
-    var eBlock = eSlider.parents('.bx-page-block-container');
-    var eIcon = $(e).find('.sys-icon-a');
+    var eSlider = $(jSel);    
+
+    if ('undefined' == typeof(e))
+        e = eSlider.data('data-control-btn');
+
+    var eIcon = $(e).find('.sys-icon-a');    
+
+    var fPositionBlock = function () {
+        var eBlock = eSlider.parents('.bx-page-block-container');
+        eSlider.css({
+            position: 'absolute',
+            top: eBlock.find('.bx-db-header').outerHeight(true),
+            left: 0,
+            width: eBlock.width()
+        });
+    };
+
+    var fPositionSite = function () {
+        var eToolbar = $('#bx-toolbar');
+        eSlider.css({
+            position: 'fixed',
+            top: eToolbar.outerHeight(true),
+            left: 0,
+            width: eToolbar.width()
+        });        
+    };
 
     var fClose = function () {
-        if (eIcon)
+        if (eIcon.length)
             (new Marka(eIcon[0])).set(eIcon.attr('data-icon-orig'));
         eSlider.slideUp()
     };
 
+    var fCloseAllOpened = function () {
+        $('.bx-sliding-menu-main:visible, .bx-popup-slide-wrapper:visible').each(function () {
+            bx_menu_slide('#' + this.id);
+        });
+    }
+
     var fOpen = function () {
-        if (eIcon) {
+        if (eIcon.length) {
             eIcon.attr('data-icon-orig', eIcon.attr('data-icon'));
             (new Marka(eIcon[0])).set('times');
         }
-        eSlider.css({
-            position: 'absolute',
-            top: eBlock.find('.bx-db-header').outerHeight(true),
-            left: 0,
-            width: eBlock.width()
-        });
+
+        if ('block' == sPosition)
+            fPositionBlock();
+        else
+            fPositionSite();
+
         eSlider.slideDown();
+
+        eSlider.data('data-control-btn', e);
     };    
     
+    if ('undefined' == typeof(sPosition))
+        sPosition = 'block';
+
     if ($(jSel + ':visible').length) {
         fClose();
+        $(document).off('click.bx-sliding-menu');
     } 
     else {
+        fCloseAllOpened();
         fOpen();
         eSlider.find('a').each(function () {
             $(this).on('click', function () {
                 fClose();
             });
         });
+
+        setTimeout(function () {
+            $(document).on('click.bx-sliding-menu', function (event) {            
+                if ($(event.target).parents('.bx-sliding-menu-main, .bx-popup-slide-wrapper').length || $(event.target).filter('.bx-sliding-menu-main, .bx-popup-slide-wrapper').length || e.isSameNode(event.target))
+                    event.stopPropagation();
+                else
+                    fCloseAllOpened();
+            });
+        }, 10);
     }
 }
 

+ 3 - 3
install/sql/system.sql

@@ -2601,7 +2601,7 @@ INSERT INTO `sys_objects_menu` (`object`, `title`, `set_name`, `module`, `templa
 ('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', ''),
 ('sys_account', '_sys_menu_title_account', 'sys_account_links', 'system', 7, 0, 1, '', ''),
-('sys_add_content', '_sys_menu_title_add_content', 'sys_add_content_links', 'system', 14, 0, 1, '', ''),
+('sys_add_content', '_sys_menu_title_add_content', 'sys_add_content_links', 'system', 14, 0, 1, 'BxTemplMenuSite', ''),
 ('sys_add_profile', '_sys_menu_title_add_profile', 'sys_add_profile_links', 'system', 4, 0, 1, '', ''),
 ('sys_account_dashboard_manage_tools', '_sys_menu_title_account_dashboard_manage_tools', 'sys_account_dashboard_manage_tools', 'system', 4, 0, 1, '', ''),
 ('sys_account_settings_submenu', '_sys_menu_title_account_settings', 'sys_account_settings', 'system', 8, 0, 1, '', ''),
@@ -2677,12 +2677,12 @@ INSERT INTO `sys_menu_items` (`set_name`, `module`, `name`, `title_system`, `tit
 
 -- site toolbar 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_toolbar_site', 'system', 'main-menu', '_sys_menu_item_title_system_main_menu', '', 'javascript:void(0);', 'bx_menu_popup(\'sys_site\');', '', 'reorder', '', 2147483647, 1, 1, 1),
+('sys_toolbar_site', 'system', 'main-menu', '_sys_menu_item_title_system_main_menu', '', 'javascript:void(0);', 'bx_menu_slide(\'#bx-sliding-menu-sys_site\', this, \'site\');', '', 'a:bars', '', 2147483647, 1, 1, 1),
 ('sys_toolbar_site', 'system', 'search', '_sys_menu_item_title_system_search', '', 'javascript:void(0);', '$(\'#bx-popup-search\').dolPopup();', '', 'search', '', 2147483647, 1, 1, 2);
 
 -- member toolbar 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_toolbar_member', 'system', 'add-content', '_sys_menu_item_title_system_add_content', '', 'javascript:void(0);', 'bx_menu_popup(\'sys_add_content\');', '', 'plus', '', 510, 1, 1, 0),
+('sys_toolbar_member', 'system', 'add-content', '_sys_menu_item_title_system_add_content', '', 'javascript:void(0);', 'bx_menu_slide(\'#bx-sliding-menu-sys_add_content\', this, \'site\');', '', 'a:plus', '', 510, 1, 1, 0),
 ('sys_toolbar_member', 'system', 'account', '_sys_menu_item_title_system_account_menu', '_sys_menu_item_title_account_menu', 'javascript:void(0);', 'bx_menu_popup(\'sys_account_popup\');', '', 'user', 'sys_account_popup', 510, 1, 0, 1),
 ('sys_toolbar_member', 'system', 'login', '_sys_menu_item_title_system_login', '', 'page.php?i=login', '', '', 'user', '', 1, 1, 0, 2);
 

+ 5 - 1
modules/boonex/ocean/data/template/system/css/menu.css

@@ -28,7 +28,11 @@ ul.bx-menu-toolbar li a img {
 	background-color: #008fb8;
 }
 
+ul.bx-menu-toolbar li a .sys-icon-a {
+    margin-top:1rem;
+}
+
 /* --------------- account popup menu */
 .bx-menu-account-popup-profile {
 	font-weight: bold;
-}
+}

+ 1 - 1
template/css/common.css

@@ -69,7 +69,7 @@ blockquote {
 
 .sys-icon-a {
     width:1.5rem;
-    height:1.5rem;    
+    height:1.5rem;
 }
 
 .bx-search-site {

+ 19 - 2
template/css/menu.css

@@ -230,11 +230,15 @@ ul.bx-menu-toolbar li a {
     text-decoration:none;
 }
 
-ul.bx-menu-toolbar li a .sys-icon, 
+ul.bx-menu-toolbar li a .sys-icon,
+ul.bx-menu-toolbar li a .sys-icon-a,
 ul.bx-menu-toolbar li a img,
 ul.bx-menu-toolbar li a span {
     vertical-align:top;
 }
+ul.bx-menu-toolbar li a .sys-icon-a {
+    margin-top:0.5rem;
+}
 ul.bx-menu-toolbar li a span {
     margin-right:0;
 }
@@ -248,17 +252,30 @@ ul.bx-menu-toolbar li img {
     background-repeat:no-repeat;
 }
 
+ul.bx-menu-toolbar li .sys-icon-a,
 ul.bx-menu-toolbar li .sys-icon {
     display:inline-block;
     vertical-align:middle;
     font-size:32px;
     font-size:2rem;
     text-align:center;
+    width:2rem;
+    height:2rem;
 }
 
 
 /* --------------- floating blocks menu */
 
+.bx-sliding-menu-main {
+    overflow-x:scroll;
+    opacity:0.9
+}
+.bx-sliding-menu-main ul.bx-menu-floating-blocks-big {
+    display:table;
+    margin:0 auto;
+    white-space:nowrap;
+}
+
 .bx-popup-content .bx-menu-floating-blocks {
     width:256px;
     width:16rem;
@@ -271,7 +288,7 @@ ul.bx-menu-floating-blocks-big,
 ul.bx-menu-floating-blocks {
     padding:0;
     margin:0;
-    list-style:none;    
+    list-style:none;
 }
 
 .bx-menu-floating-blocks-big li,

+ 1 - 1
template/menu_toolbar.html

@@ -1,7 +1,7 @@
 <ul class="bx-menu-toolbar bx-menu-object-__object__">
     <bx_repeat:menu_items>
         <li class="bx-menu-toolbar-item bx-def-color-bg-hl-hover __class_add__">
-            <a href="__link__" target="__target__" onclick="__onclick__" class="bx-def-font-contrasted"><bx_if:title><span class="bx-menu-toolbar-item-title bx-def-margin-sec-leftright">__title__</span></bx_if:title><bx_if:icon><i class="sys-icon __icon__ bx-def-margin-sec-leftright"></i></bx_if:icon><bx_if:image><img class="bx-def-thumb bx-def-thumb-size bx-def-margin-sec-leftright" src="__icon_url__" /></bx_if:image></a>
+            <a href="__link__" target="__target__" onclick="__onclick__" class="bx-def-font-contrasted"><bx_if:title><span class="bx-menu-toolbar-item-title bx-def-margin-sec-leftright">__title__</span></bx_if:title><bx_if:icon><i class="sys-icon __icon__ bx-def-margin-sec-leftright"></i></bx_if:icon><bx_if:icon-a><i class="sys-icon-a" data-rotate="down" data-icon="__icon-a__" data-color="#fff"></i></bx_if:icon-a><bx_if:image><img class="bx-def-thumb bx-def-thumb-size bx-def-margin-sec-leftright" src="__icon_url__" /></bx_if:image></a>
             <bx_if:addon><span class="bx-menu-toolbar-item-addon bx-def-unit-alert-middle bg-col-blue2-dark">__addon__</span></bx_if:addon>
         </li>
     </bx_repeat:menu_items>

+ 14 - 5
template/scripts/BxBaseMenu.php

@@ -100,7 +100,7 @@ class BxBaseMenu extends BxDolMenu
 
 		$a = $this->_replaceMarkers($a);
 
-		list ($sIcon, $sIconUrl) = $this->_getMenuIcon($a);
+		list ($sIcon, $sIconUrl, $sIconA) = $this->_getMenuIcon($a);
 
 		$a['class_add'] = $this->_isSelected($a) ? 'bx-menu-tab-active' : '';
 		$a['link'] = isset($a['link']) ? $this->_oPermalinks->permalink($a['link']) : 'javascript:void(0);';
@@ -112,6 +112,10 @@ class BxBaseMenu extends BxDolMenu
 		$a['bx_if:icon'] = array (
         	'condition' => (bool)$sIcon,
             'content' => array('icon' => $sIcon),
+		);
+		$a['bx_if:icon-a'] = array (
+        	'condition' => (bool)$sIconA,
+            'content' => array('icon-a' => $sIconA),
 		);
 		$a['bx_if:title'] = array (
 			'condition' => (bool)$a['title'],
@@ -132,6 +136,7 @@ class BxBaseMenu extends BxDolMenu
     protected function _getMenuIcon ($a)
     {
         $sIcon = false;
+        $sIconA = false;
         $sIconUrl = false;
         if (!empty($a['icon'])) {
             if ((int)$a['icon'] > 0 ) {
@@ -139,13 +144,17 @@ class BxBaseMenu extends BxDolMenu
                 $oStorage = BxDolStorage::getObjectInstance(BX_DOL_STORAGE_OBJ_IMAGES);
                 $sIconUrl = $oStorage ? $oStorage->getFileUrlById((int)$a['icon']) : false;
             } else {
-                if (false === strpos($a['icon'], '.')) // font icons
-                    $sIcon = $a['icon'];
-                else
+                if (false === strpos($a['icon'], '.')) { 
+                    if (0 === strncmp($a['icon'], 'a:', 2))
+                        $sIconA = substr($a['icon'], 2); // animated icon
+                    else
+                        $sIcon = $a['icon']; // font icons
+                } else {
                     $sIconUrl = $this->_oTemplate->getIconUrl($a['icon']);
+                }
             }
         }
-        return array ($sIcon, $sIconUrl);
+        return array ($sIcon, $sIconUrl, $sIconA);
     }
 
     protected function _getMenuAddon ($aMenuItem)

+ 6 - 0
template/scripts/BxBaseMenuSite.php

@@ -18,6 +18,12 @@ class BxBaseMenuSite extends BxTemplMenu
     {
         parent::__construct ($aObject, $oTemplate);
     }
+
+    public function getCode ()
+    {
+        $s = parent::getCode ();
+        return '<div id="bx-sliding-menu-' . $this->_sObject . '" class="bx-sliding-menu-main bx-def-z-index-nav bx-def-color-bg-block bx-def-border-bottom" style="display:none;">' . $s . '</div>';
+    }
 }
 
 /** @} */