소스 검색

#2304 Wiki functionality: menu popup

Alex Trofimov 6 년 전
부모
커밋
7639588612

+ 3 - 2
inc/js/classes/BxDolWiki.js

@@ -14,11 +14,11 @@ function BxDolWiki (sObject, eContainer, oOptions) {
     this._sActionUrl = sUrlRoot + 'r.php?_q=' + this._oOptions.wiki_action_uri + '-action/';
     this._sCurrentLang = this._oOptions['language'];
     this._oTranslations = {};
-    this.bindEvents();    
 }
 
 BxDolWiki.prototype.bindEvents = function () {
     var self = this;
+    var e = $('#bx-popup-ajax-wrapper-bx-wiki-menu-' + this._oOptions.block_id);
     var oEvents = {
         "edit": "onEdit",
         "delete-version": "onDeleteVersion",
@@ -27,7 +27,8 @@ BxDolWiki.prototype.bindEvents = function () {
         "history": "onHistory",
     }
     $.each(oEvents, function (sSel, sFunc) {
-        $(self._eCont).find(".bx-wiki-controls-menu a." + sSel).on('click', {wiki_obj:self}, function() {
+        e.find(".bx-menu-item a." + sSel).on('click', {wiki_obj:self}, function() {
+            $(".bx-popup-active").dolPopupHide(); // close menu popup
             BxDolWiki.prototype[sFunc].apply(self);
             return false;
         });

+ 6 - 6
install/sql/system.sql

@@ -3817,7 +3817,7 @@ INSERT INTO `sys_objects_menu` (`object`, `title`, `set_name`, `module`, `templa
 ('sys_create_post', '_sys_menu_title_create_post', 'sys_add_content_links', 'system', 15, 0, 1, 'BxTemplMenuCreatePost', ''),
 ('sys_add_relation', '_sys_menu_title_add_relation', '', 'system', 6, 0, 1, 'BxTemplMenuAddRelation', ''),
 ('sys_vote_reactions_do', '_sys_menu_title_vote_reactions_do', '', 'system', 3, 0, 1, 'BxTemplVoteReactionsMenuDo', ''),
-('sys_wiki', '_sys_menu_title_wiki', 'sys_wiki', 'system', 9, 0, 1, 'BxTemplMenuWiki', '');
+('sys_wiki', '_sys_menu_title_wiki', 'sys_wiki', 'system', 6, 0, 1, 'BxTemplMenuWiki', '');
 
 CREATE TABLE IF NOT EXISTS `sys_menu_sets` (
   `set_name` varchar(64) NOT NULL,
@@ -3976,11 +3976,11 @@ INSERT INTO `sys_menu_items` (`set_name`, `module`, `name`, `title_system`, `tit
 
 -- wiki menu
 INSERT INTO `sys_menu_items`(`set_name`, `module`, `name`, `title_system`, `title`, `link`, `onclick`, `target`, `icon`, `addon`, `submenu_object`, `submenu_popup`, `visible_for_levels`, `visibility_custom`, `active`, `copyable`, `editable`, `order`) VALUES 
-('sys_wiki', 'system', 'edit', '', '_sys_menu_item_title_wiki_edit', '', '', '', '', '', '', 0, 2147483646, '', 1, 0, 1, 1),
-('sys_wiki', 'system', 'delete-version', '', '_sys_menu_item_title_wiki_delete_version', '', '', '', '', '', '', 0, 2147483646, '', 1, 0, 1, 2),
-('sys_wiki', 'system', 'delete-block', '', '_sys_menu_item_title_wiki_delete_block', '', '', '', '', '', '', 0, 2147483646, '', 1, 0, 1, 3),
-('sys_wiki', 'system', 'translate', '', '_sys_menu_item_title_wiki_translate', '', '', '', '', '', '', 0, 2147483646, '', 1, 0, 1, 4),
-('sys_wiki', 'system', 'history', '', '_sys_menu_item_title_wiki_history', '', '', '', '', '', '', 0, 2147483646, '', 1, 0, 1, 5);
+('sys_wiki', 'system', 'edit', '', '_sys_menu_item_title_wiki_edit', '', '', '', 'edit', '', '', 0, 2147483646, '', 1, 0, 1, 1),
+('sys_wiki', 'system', 'delete-version', '', '_sys_menu_item_title_wiki_delete_version', '', '', '', 'times', '', '', 0, 2147483646, '', 1, 0, 1, 2),
+('sys_wiki', 'system', 'delete-block', '', '_sys_menu_item_title_wiki_delete_block', '', '', '', 'times-circle', '', '', 0, 2147483646, '', 1, 0, 1, 3),
+('sys_wiki', 'system', 'translate', '', '_sys_menu_item_title_wiki_translate', '', '', '', 'language', '', '', 0, 2147483646, '', 1, 0, 1, 4),
+('sys_wiki', 'system', 'history', '', '_sys_menu_item_title_wiki_history', '', '', '', 'history', '', '', 0, 2147483646, '', 1, 0, 1, 5);
 
 -- --------------------------------------------------------
 

+ 13 - 2
template/css/wiki.css

@@ -1,9 +1,20 @@
-.bx-wiki-controls-menu {
+.bx-wiki-controls-info {
     float:left;
 }
-.bx-wiki-controls-info {
+.bx-wiki-controls-menu {
     float:right;
 }
+.bx-wiki-controls-menu i.sys-icon {
+    text-align: center;
+    width: 1.5rem;
+    border-radius: 0.75rem;
+    height: 1.5rem;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    font-size: 0.875rem;
+    font-weight: 400;
+}
 .bx-wiki-form {
     width:37.5rem;
 }

+ 2 - 2
template/menu_vertical.html

@@ -1,7 +1,7 @@
 <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__">
+        <li class="bx-menu-item __name__ bx-def-round-corners bx-def-color-bg-hl-hover __class_add__">
+            <a class="__name__" href="__link__" target="__target__" onclick="__onclick__">
                 <div class="bx-def-padding-sec">
                     <bx_if:icon><i class="sys-icon __icon__"></i></bx_if:icon><bx_if:image><img style="background-image:url(__icon_url__)" src="<bx_icon_url:spacer.gif />" /></bx_if:image><span>__title__</span>
                 </div>

+ 12 - 2
template/scripts/BxBaseMenuWiki.php

@@ -13,15 +13,25 @@
 class BxBaseMenuWiki extends BxTemplMenu
 {
     protected $_oWikiObject;
+    protected $_iBlockId;
 
     public function __construct ($aObject, $oTemplate)
     {
         parent::__construct ($aObject, $oTemplate);
+        if ($sWikiObj = bx_get('wiki_obj')) {
+            $oWiki = BxDolWiki::getObjectInstance($sWikiObj);
+            if ($oWiki) {
+                $this->_oWikiObject = $oWiki;
+                $this->_iBlockId = (int)bx_get('block_id');
+            }
+        }
     }
 
-    public function setMenuObject($o)
+    public function getCode ()
     {
-        $this->_oWikiObject = $o;
+        $s = parent::getCode ();
+        $s .= '<script>window.glBxDolWiki' . $this->_iBlockId . '.bindEvents();</script>';
+        return $s;
     }
 
     /**

+ 0 - 6
template/scripts/BxBaseServiceWiki.php

@@ -128,11 +128,6 @@ class BxBaseServiceWiki extends BxDol
     {
         $this->_addCssJs ();
     
-        if (!($oMenu = BxDolMenu::getObjectInstance('sys_wiki')))
-            return '';
-
-        $oMenu->setMenuObject($oWikiObject);
-
         $sInfo = '';
         if ($aWikiVer && $aWikiVerLatest['revision'] == $aWikiVer['revision']) {
             $sInfo = bx_time_js($aWikiVer['added']);
@@ -146,7 +141,6 @@ class BxBaseServiceWiki extends BxDol
         return $o->parseHtmlByName('wiki_controls.html', array(
             'obj' => $oWikiObject->getObjectName(),
             'block_id' => $sBlockId,
-            'menu' => $oMenu->getCode(),
             'info' => $sInfo,
             'options' => json_encode(array(
                 'block_id' => $sBlockId,

+ 2 - 1
template/wiki_controls.html

@@ -1,9 +1,10 @@
 <div class="bx-wiki-controls bx-clearfix">
-    <div class="bx-wiki-controls-menu">__menu__</div>
+    <div class="bx-wiki-controls-menu"><a bx-popup-id="bx-wiki-menu-__block_id__" href="javascript:void(0);" onclick="bx_menu_popup('sys_wiki', this, {}, {block_id:'__block_id__', wiki_obj:'__obj__'})"><i class="bx-def-label sys-icon sys-colored ellipsis-v"></i></a></div>
     <div class="bx-wiki-controls-info bx-def-font-grayed bx-def-font-small">__info__</div>
 </div>
 <script>
     window.glBxDolWiki__block_id__ = new BxDolWiki('__obj__', $('#bx-page-wiki-container-__block_id__'), __options__);
+
     if (location.hash.length) {
         var e = $('#' + location.hash.substr(1));
         e.css('background-color', 'yellow');