%s %s %s';
    protected $disabledPageWrapper  = '
%s';
    protected $activePageWrapper    = '%s';
    protected $previousButtonText   = '';
    protected $nextButtonText       = '';
    protected $availablePageWrapper = '%s';
    protected $dotsText             = '...';
    protected $paginator;
    protected $window;
    public function run()
    {
        return $this;
    }
    public function create( PaginatorContract $paginator, UrlWindow $window = null )
    {
        $this->paginator = $paginator;
        $this->window    = is_null( $window ) ? UrlWindow::make( $paginator ) : $window->get();
        return $this;
    }
    public function simpleCreate( PaginatorContract $paginator )
    {
        $this->paginator = $paginator;
        return $this;
    }
    public function hasPages()
    {
        return $this->paginator->hasPages();
    }
    public function render()
    {
        if ( $this->hasPages() ) {
            return sprintf(
                $this->getPaginationWrapperHTML(),
                $this->getPreviousButton(),
                $this->getLinks(),
                $this->getNextButton()
            );
        }
        return '';
    }
    protected function getAvailablePageWrapper( $url, $page )
    {
        return sprintf( $this->getAvailablePageWrapperHTML(), $url, $page );
    }
    protected function getDisabledTextWrapper( $text )
    {
        return sprintf( $this->getDisabledPageWrapperHTML(), $text );
    }
    protected function getActivePageWrapper( $text )
    {
        return sprintf( $this->getActivePageWrapperHTML(), $text );
    }
    protected function getDots()
    {
        return $this->getDisabledTextWrapper( $this->getDotsText() );
    }
    protected function currentPage()
    {
        return $this->paginator->currentPage();
    }
    protected function lastPage()
    {
        return $this->paginator->lastPage();
    }
    protected function getPageLinkWrapper( $url, $page )
    {
        if ( $page == $this->paginator->currentPage() ) {
            return $this->getActivePageWrapper( $page );
        }
        return $this->getAvailablePageWrapper( $url, $page );
    }
    protected function getPreviousButton()
    {
        if ( $this->paginator->currentPage() <= 1 ) {
            return $this->getDisabledTextWrapper( $this->getPreviousButtonText() );
        }
        $url = $this->paginator->url(
            $this->paginator->currentPage() - 1
        );
        return $this->getPageLinkWrapper( $url, $this->getPreviousButtonText() );
    }
    protected function getNextButton()
    {
        if ( !$this->paginator->hasMorePages() ) {
            return $this->getDisabledTextWrapper( $this->getNextButtonText() );
        }
        $url = $this->paginator->url( $this->paginator->currentPage() + 1 );
        return $this->getPageLinkWrapper( $url, $this->getNextButtonText() );
    }
    protected function getAvailablePageWrapperHTML()
    {
        return $this->availablePageWrapper;
    }
    protected function getActivePageWrapperHTML()
    {
        return $this->activePageWrapper;
    }
    protected function getDisabledPageWrapperHTML()
    {
        return $this->disabledPageWrapper;
    }
    protected function getPreviousButtonText()
    {
        return $this->previousButtonText;
    }
    protected function getNextButtonText()
    {
        return $this->nextButtonText;
    }
    protected function getDotsText()
    {
        return $this->dotsText;
    }
    protected function getPaginationWrapperHTML()
    {
        return $this->paginationWrapper;
    }
}