Вход Регистрация
Файл: cobisja/BootHelp/src/Helpers/Vertical.php
Строк: 178
<?php

/**
 * BootHelp - PHP Helpers for Bootstrap
 *
 * (The MIT License)
 *
 * Copyright (c) 2015 Jorge Cobis <jcobis@gmail.com / http://twitter.com/cobisja>.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */

namespace cobisjaBootHelpHelpers;

use 
cobisjaBootHelpBase;
use 
cobisjaBootHelpHelpersContentTag;

/**
 * Class helper to be used with navbar objects.
 */
class Vertical extends Base
{
    
/**
     * Initializes the Vertical instance
     *
     * @param mixed   $content_or_options_with_block possible content of Vertical object.
     * @param mixed   $options possible options of Vertical object.
     * @param closure $block Closure to build the Vertical content.
     */
    
public function __construct($content_or_options_with_block null$options null, callable $block null)
    {
        
$num_args $this->getFunctionNumArgs(func_get_args());
        
$block is_callable(func_get_arg($num_args-1)) ? func_get_arg($num_args-1) : null;

        switch (
$num_args) {
            case 
'1':
                
$content_or_options_with_block null;
                
$options null;
                break;
            case 
'2':
                
$options null;
                break;
        }

        
$html $this->buildVertical($content_or_options_with_block $content_or_options_with_block : [], $block);

        
$this->setHtmlObject($html);
    }

    
/**
     * Build the Vertical object.
     *
     * @param array   $options options to build the Vertical object.
     * @param closure $block Closure to build the Vertical object.
     * 
     * @return ContentTag instance of ContenTag that represents the Vertical object.
     */
    
private function buildVertical($options = [], $block null)
    {
        
Base::setNavbarVertical(true);

        
$this->appendClass($options'navbar-header');
        
$yield is_callable($block) ? call_user_func($block) : $block;

        
$vertical = new ContentTag('div'$options, function () use ($yield) {
            
$content is_array($yield) ?
                
array_merge([$this->toggleButton()], $yield) : [$this->toggleButton(), $yield];

            return 
$content;
        });

        
Base::setNavbarVertical(false);

        return 
$vertical->getHtmlObject();
    }

    
/**
     * Builds the toggle button that shows up when resizing browser.
     *
     * @param arrray $options options to build the toggle button.
     * @return mixed Html that represents the toggle button.
     */
    
private function toggleButton($options = [])
    {
        
$options['type'] = 'button';
        
$options['class'] = 'navbar-toggle';
        
$options['data-toggle'] = 'collapse';
        
$options['data-target'] = '#' Base::getNavbarId();

        return (new 
ContentTag('button'$options, function () {
                    return [
$this->toggleText(), $this->toggleBar(), $this->toggleBar(), $this->toggleBar()];
        })
        )->
getHtmlObject();
    }

    
/**
     * Builds the toggle text.
     *
     * @return ContentTag instance of ContenTag that represents the toggle text object.
     */
    
private function toggleText()
    {
        return (new 
ContentTag('span''Toggle navigation', ['class'=>'sr-only']))->getHtmlObject();
    }

    
/**
     * Builds the toggle bar.
     *
     * @return ContentTag instance of ContenTag that represents the toggle bar object.
     */
    
private function toggleBar()
    {
        return (new 
ContentTag('span'null, ['class'=>'icon-bar']))->getHtmlObject();
    }
}
Онлайн: 2
Реклама