Răsfoiți Sursa

Partial bootstrap 4.5 support

ahwelp 3 ani în urmă
părinte
comite
62f3a633d7

+ 24 - 6
app/core/template/Output.class.php → app/core/template/Output.php

@@ -11,7 +11,7 @@ class Output {
 
     private $_template = '';
     private $_extension = '';
-    
+
     private function __construct() {
         $this->_template = ( defined('TEMPLATE_DEFAULT') ) ? TEMPLATE_DEFAULT : 'DefaultTemplate';
         $this->_extension = ( defined('TEMPLATE_FILETYPE') ) ? TEMPLATE_FILETYPE : '.mustache';
@@ -43,7 +43,7 @@ class Output {
             array_pop($segments);
             $location = implode('/', $segments) . '/views/';
         }
-        
+
         self::getInstance()->setView($name, $values, $location)->render();
     }
 
@@ -82,7 +82,7 @@ class Output {
         }
 
         include_once __DIR__."/classes/".strtolower($instance->_template)."/".$instance->_template.'.php';
-        
+
         $class = new $instance->_template;
         $class->setView($instance->view)->render();
 
@@ -95,14 +95,32 @@ class Output {
 
     public static function addSubmenu($key, $name, $icon = '', $attributes = [], $weight = 0){
         global $SIDEBAR;
-        $SIDEBAR->create_submenu($key, $name, $icon, $attributes , $weight);        
+        $SIDEBAR->create_submenu($key, $name, $icon, $attributes , $weight);
     }
-    
+
     public static function addOnSubmenu($key, $route, $name, $icon = '', $attributes = [], $weight = 0){
         global $SIDEBAR;
         $SIDEBAR->add_on_new($key, $route, $name, $icon, $attributes, $weight);
     }
-    
+
+    //========
+
+    public static function headAdd($route, $name){
+        global $DROPDOWN;
+        $DROPDOWN[] = ['route' => $route, 'name' => $name];
+    }
+
+    public static function addSubHeader($key, $name, $icon = '', $attributes = [], $weight = 0){
+        global $DROPDOWN;
+        $DROPDOWN->create_submenu($key, $name, $icon, $attributes , $weight);
+    }
+
+    public static function addOnSubHeader($key, $route, $name, $icon = '', $attributes = [], $weight = 0){
+        global $DROPDOWN;
+        $DROPDOWN->add_on_new($key, $route, $name, $icon, $attributes, $weight);
+    }
+
+
     public static function icon($icon){
         return "<i class='$icon' aria-hidden='true'></i>";
     }

+ 7 - 3
app/core/template/Routes.php

@@ -1,15 +1,19 @@
 <?php
 
-use Routes\RouteCollection as RouteCollection;
 use Menus\Menu as Menu;
+use Routes\RouteCollection as RouteCollection;
+// use App\Core\Template\Output as Output;
 
 RouteCollection::get('*', function(){
 
-    include_once 'Output.class.php';
+    // include_once 'Output.class.php';
 
     GLOBAL $SIDEBAR, $DROPDOWN;
 
     $SIDEBAR = new Menu( array('id' => 'side-menu', 'class' => "nav") );
-    $DROPDOWN = new Menu( array("class" => 'dropdown-menu') );
+
+    //HACK
+    //$DROPDOWN = new Menu( array("class" => 'dropdown-menu') );
+    $DROPDOWN = [];
 
 }, -11)->doIgnore();

+ 128 - 0
app/core/template/__Output.php

@@ -0,0 +1,128 @@
+<?php
+
+namespace App\Core\Template;
+
+class Output {
+
+    private static $_instance;
+
+    private $view = false;
+    protected $values = Array();
+
+    private $_template = '';
+    private $_extension = '';
+    
+    private function __construct() {
+        $this->_template = ( defined('TEMPLATE_DEFAULT') ) ? TEMPLATE_DEFAULT : 'DefaultTemplate';
+        $this->_extension = ( defined('TEMPLATE_FILETYPE') ) ? TEMPLATE_FILETYPE : '.mustache';
+    }
+
+    private static function newObj() {
+        if (!isset(self::$_instance)) {
+            self::$_instance = new Output();
+        }
+        return self::$_instance;
+    }
+
+    public function getInstance() {
+        if (!isset(self::$_instance)) {
+            return self::newObj();
+        }
+        return self::$_instance;
+    }
+
+    public function setTemplate($template = 'DefaultTemplate') {
+        self::getInstance()->_template = $template;
+//        self::getInstance()->_template = '';
+        return self::getInstance();
+    }
+
+    public static function renderView($name, $values = null, $location = null) {
+        if (!$location) {
+            $segments = explode('/', debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS)[0]['file']);
+            array_pop($segments);
+            $location = implode('/', $segments) . '/views/';
+        }
+        
+        self::getInstance()->setView($name, $values, $location)->render();
+    }
+
+    public static function setView($name = '', $values = Array(), $location = null) {
+        if($name == ''){ return self::getInstance(); }
+        $instance =  self::getInstance();
+        $folder = '';
+        if (!$location) {
+            $segments = explode('/', debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS)[0]['file']);
+            array_pop($segments);
+            $location = implode('/', $segments) . '/views/';
+        }
+        $folder = $location;
+        $location .= $name;
+
+        if (strpos($instance->_extension, $location) == 0) {
+            $location .= $instance->_extension;
+        }
+
+        $instance->view = Array();
+        $instance->view['location'] = $location;
+        $instance->view['folder'] = $folder;
+        $instance->view['values'] = $values;
+        return self::getInstance();
+    }
+
+    public static function addValue($key, $value){
+        self::getInstance()->view['values'][$key] = $value;
+    }
+
+    public static function render() {
+        $instance = self::getInstance();
+
+        if(!is_file(__DIR__."/classes/".strtolower($instance->_template)."/".$instance->_template.'.php') ){
+            $instance->_template = 'DefaultTemplate';
+        }
+
+        include_once __DIR__."/classes/".strtolower($instance->_template)."/".$instance->_template.'.php';
+        
+        $class = new $instance->_template;
+        $class->setView($instance->view)->render();
+
+    }
+
+    public static function addMenu($route, $name, $icon = '', $attributes = [], $weight = 0){
+        global $SIDEBAR;
+        $SIDEBAR->add($route, $name, $icon, $attributes, $weight);
+    }
+
+    public static function addSubmenu($key, $name, $icon = '', $attributes = [], $weight = 0){
+        global $SIDEBAR;
+        $SIDEBAR->create_submenu($key, $name, $icon, $attributes , $weight);        
+    }
+    
+    public static function addOnSubmenu($key, $route, $name, $icon = '', $attributes = [], $weight = 0){
+        global $SIDEBAR;
+        $SIDEBAR->add_on_new($key, $route, $name, $icon, $attributes, $weight);
+    }
+    
+    //========
+    
+    public static function headAdd($route, $name){
+        global $DROPDOWN;
+        $DROPDOWN[] = ['route' => $route, 'name' => $name];
+    }
+    
+    public static function addSubHeader($key, $name, $icon = '', $attributes = [], $weight = 0){
+        global $DROPDOWN;
+        $DROPDOWN->create_submenu($key, $name, $icon, $attributes , $weight);        
+    }
+    
+    public static function addOnSubHeader($key, $route, $name, $icon = '', $attributes = [], $weight = 0){
+        global $DROPDOWN;
+        $DROPDOWN->add_on_new($key, $route, $name, $icon, $attributes, $weight);
+    }
+    
+    
+    public static function icon($icon){
+        return "<i class='$icon' aria-hidden='true'></i>";
+    }
+
+}

+ 30 - 21
app/core/template/classes/dashboard/Dashboard.php

@@ -1,22 +1,29 @@
-<?php
+ <?php
 
 use Template\RenderableTemplate as RenderableTemplate;
 
 class Dashboard extends RenderableTemplate {
-    
+
     public $content;
-    
+
     public function render() {
+        global $DROPDOWN, $SIDEBAR;
+
         if (is_ajax_request()) {
-            $this->content = file_get_contents($this->getView()['location']);
-            $this->implate();
+            if(is_file($this->getView()['location'])){
+                $this->content = file_get_contents($this->getView()['location']);
+                $this->implate();
+            }else{
+                $this->content = '';
+                $this->implate();
+            }
             return;
         }
 
-        global $DROPDOWN, $SIDEBAR;
-        
+        //global $DROPDOWN, $SIDEBAR;
+
         $head = '';
-        
+
         $head .=  '<script src="/plugins/jquery/jquery.min.js"></script>';
 
         $head .=  '<script src="/plugins/mousetrap/mousetrap.min.js"></script>';
@@ -24,7 +31,7 @@ class Dashboard extends RenderableTemplate {
         $head .=  '<script src="/plugins/jquery-mask-plugin/jquery.mask.min.js"></script>';
 
         $head .=  '<link href="/plugins/bootstrap/bootstrap.min.css" rel="stylesheet" />';
-        $head .=  '<script src="/plugins/bootstrap/bootstrap.min.js"></script>';
+        $head .=  '<script src="/plugins/bootstrap/bootstrap.bundle.min.js"></script>';
 
         $head .=  '<link href="/plugins/font-awesome/css/font-awesome.min.css" rel="stylesheet" />';
 
@@ -36,35 +43,37 @@ class Dashboard extends RenderableTemplate {
         $head .=  '<link href="/plugins/metisMenu/metisMenu.min.css" rel="stylesheet">';
         $head .=  '<script src="/plugins/metisMenu/metisMenu.min.js"></script>';
 
-        $head .=  '<link href="/plugins/select2/select2.min.css" rel="stylesheet">';
-        $head .=  '<script src="/plugins/select2/select2.min.js"></script>';
-
         $head .=  '<link rel="stylesheet" href="/plugins/datatables/dataTables.css">';
         $head .=  '<script src="/plugins/datatables/dataTables.js"></script>';
 
-        $head .=  '<link rel="stylesheet" href="/plugins/trumbowyg/ui/trumbowyg.min.css">';
-        $head .=  '<script src="/plugins/trumbowyg/trumbowyg.min.js"></script>';
-        
         $foot = '';
         $foot .= '<script src="/dist/script.js"></script>';
-        
+
         $this->content = file_get_contents(__DIR__ . '/template.html');
 
         $this->content = str_replace("{{usermenu}}", "", $this->content);
         $this->content = str_replace("{{elements}}", $SIDEBAR->render(), $this->content);
 
+        $header = '';
+
+        //HACK
+        foreach ($DROPDOWN as $item){
+            $header .= "<a class='dropdown-item' href='".$item['route']."'>".$item['name']."</a>";
+        }
+        $this->content = str_replace("{{dropdown}}", $header, $this->content);
+
         $this->content = str_replace("{{head}}", $head, $this->content);
-        
-        if(is_file($this->getView()['location'])){
+
+        if(isset($this->getView()['location']) && is_file($this->getView()['location'])){
             $this->content = str_replace('{{>content}}', $this->replaceSections(file_get_contents($this->getView()['location']), $this->_view['values']), $this->content);
         }else{
             $this->content = str_replace('{{>content}}', '', $this->content);
         }
-        
+
         $this->content = str_replace("{{footer}}", $foot, $this->content);
-        
+
         $this->implate();
-        
+
     }
 
 }

+ 7 - 11
app/core/template/classes/dashboard/template.html

@@ -9,17 +9,18 @@
         <div id="wrapper">
             <!-- Sidebar -->
             <nav id="sidebar-wrapper">
+                <button class="form-control btn-danger menu-toggle menu-small">Fechar</button>
                 <div class="logo" style="">
                     <img src='/media/logo_white.png' alt="logo" />
                 </div>
+                
                 <div class="search-nav" style="">
                     <input class="form-control" type="text" placeholder="Busca"/>
                 </div>
 
                 {{elements}}
 
-                <ul id="side-second-menu" class="hidden nav">
-                </ul>
+                <ul id="side-second-menu" class="hidden nav"></ul>
             </nav>
             <!-- /#sidebar-wrapper -->
             <!-- /#sidebar-wrapper -->
@@ -31,24 +32,19 @@
 
                     <ul class="nav navbar-nav navbar-left">
                         <li class="tooltip-sidebar-toggle">
-                            <a href="" id="menu-toggle">
+                            <a href="" class="menu-toggle">
                                 <i class="fa fa-th-list" aria-hidden="true"></i>
                             </a>
                         </li>
                     </ul>
-                    
+
                     <ul class="nav navbar-top-links navbar-right">
-                        <!--{{usermenu}}-->
                         <li class="nav-item dropdown no-arrow">
                             <a class="nav-link dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
-                                <i class="fa fa-user fa-fw"></i>
+                                <i class="fa fa-cog fa-fw"></i>
                             </a>
                             <div class="dropdown-menu dropdown-menu-right" >
-                                <a class="dropdown-item" href="#">Profile</a>
-                                <a class="dropdown-item" href="#"><i class=""></i>Settings</a>
-                                <a class="dropdown-item" href="#"><i class=""></i>Activity Log</a>
-                                <div class="dropdown-divider"></div>
-                                <a class="dropdown-item" href="#" ><i class=""></i>Logout</a>
+                                {{dropdown}}
                             </div>
                         </li>
                     </ul>

+ 0 - 11
app/core/welcome/WellcomeController.php

@@ -1,11 +0,0 @@
-<?php
-
-use RR\Response as R;
-
-class WellcomeController{
-
-    function welcome(){
-        R::json(Array('message' => Lang::getString('welcome', 'welcome')))->send()->done();
-    }
-
-}

+ 17 - 4
public/dist/script.js

@@ -45,7 +45,7 @@ function revalidate_screen() {
         $(this).mask($(this).data('format'), {});
     });
 
-    $('[data-toggle="popover"]').popover();
+    //$('[data-toggle="popover"]').popover();
 
     $('select').each(function () {
         if (typeof $(this).data('value') !== "undefined" && $(this).data('value') !== '') {
@@ -68,6 +68,19 @@ function revalidate_screen() {
             liveSearch: true
         });
     });
+    
+    $(".wysiwyg").each(function () {
+        $(this).trumbowyg();
+    });
+    
+    $(".form-control-range").each(function(i, item){
+        $(item).on('change', function(item, i){
+            $(item.currentTarget)
+                    .parent()
+                    .find('.range-monitor')
+                    .html(item.currentTarget.value + "%");
+        })
+    });
 
     $('.popup-toggle').each(() => {
         var template = '<div class="modal-dialog"> <div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal"> X </button><h4 class="modal-title">Modal Header</h4></div><div class="modal-body">{{aaa}}</div><div class="modal-footer"><button type="button" class="btn btn-default" data-dismiss="modal">Close</button></div></div>';
@@ -436,7 +449,7 @@ $('.remote-element').each(function () {
 //============================== Template Boot
 
 /* Função de aparecer ou desaparecer o menu lateral */
-$("#menu-toggle").on('click', function (e) {
+$(".menu-toggle").on('click', function (e) {
     e.preventDefault();
     //e.preventPropagation();
     $("#wrapper").toggleClass("toggled");
@@ -449,7 +462,7 @@ if (user_config.menu_default) {
 }
 
 /* Função de aparecer ou desaparecer o menu lateral Secundário*/
-$("#menu-toggle").on('contextmenu', function (e) {
+$(".menu-toggle").on('contextmenu', function (e) {
     e.preventDefault();
     //e.preventPropagation();
     alert("Configs maluquinhas");
@@ -597,4 +610,4 @@ function open_popup(source) {
         $('#modal').html(template).modal('show');
         revalidate_screen();
     });
-}
+}

+ 82 - 59
public/dist/style.css

@@ -10,9 +10,24 @@ table tr .selected{
     overflow: hidden;
 }
 
-/*
-* Bootstrap Overwrite
-*/
+body a, body a:visited  {
+    text-decoration: none;
+    color: #000;
+}
+
+.dropdown-toggle{
+    color: #fff;
+}
+
+.dropdown-toggle:hover{
+    color: #666;
+}
+
+/* Bootstrap Overwrite */
+
+.card{
+    border-radius: 0px !important;
+}
 
 .form-group div{
     padding: 0px;
@@ -31,9 +46,13 @@ body{
     font-size: 1pc;
 }
 
-/*
--------------------------------------------------------
-*/
+/* Prevent bootstrap to interfere with metis menu */
+.nav .active .collapse{
+   display: block !important;
+}
+
+
+/*-------------------------------------------------------*/
 
 textarea{
     resize: vertical;
@@ -59,18 +78,17 @@ textarea{
 /* BreadCrumbs -------------------------------- */
 
 .breadcrumb{
-    width:100%; 
+    width:100%;
     background-color:#ddd;
 }
 
 /*
-   _____ _____ _____  ______ ____          _____   
-  / ____|_   _|  __ \|  ____|  _ \   /\   |  __ \  
- | (___   | | | |  | | |__  | |_) | /  \  | |__) | 
-  \___ \  | | | |  | |  __| |  _ < / /\ \ |  _  /  
-  ____) |_| |_| |__| | |____| |_) / ____ \| | \ \  
- |_____/|_____|_____/|______|____/_/    \_\_|  \_\ 
-
+   _____ _____ _____  ______ ____          _____
+  / ____|_   _|  __ \|  ____|  _ \   /\   |  __ \
+ | (___   | | | |  | | |__  | |_) | /  \  | |__) |
+  \___ \  | | | |  | |  __| |  _ < / /\ \ |  _  /
+  ____) |_| |_| |__| | |____| |_) / ____ \| | \ \
+ |_____/|_____|_____/|______|____/_/    \_\_|  \_\
 */
 
 #wrapper {
@@ -79,17 +97,22 @@ textarea{
 
 #sidebar-wrapper {
     background-color: #000 !important;
+    height: 1000px;
+    width: 200px;
+    background-color: #fff;
+    position: fixed!important;
+    z-index: 10000;
 }
 
 #wrapper.toggled {
-    padding-left: 250px;
+    /*padding-left: 250px;*/
 }
 
 #sidebar-wrapper {
     position: fixed;
     left: 250px;
     width: 0;
-    height: 100%;	
+    height: 100%;
     margin-left: -250px;
     overflow-y: auto;
 }
@@ -106,7 +129,7 @@ textarea{
 #page-content-wrapper {
     width: 100%;
     position: absolute;
-    padding: 15px;
+    padding: 0px !important;
 }
 
 #wrapper .toggled #page-content-wrapper {
@@ -118,10 +141,41 @@ textarea{
     display: block !important;
 }
 
+/* Sidebar responsiveness */
+@media(min-width:768px) {
+    #wrapper {
+        padding-left: 250px;
+    }
+
+    #wrapper.toggled {
+        padding-left: 0;
+    }
+
+    #sidebar-wrapper {
+        width: 250px;
+    }
+
+    #wrapper.toggled #sidebar-wrapper {
+        width: 0;
+    }
+
+    #page-content-wrapper {
+        padding: 20px;
+        position: relative;
+    }
+
+    #wrapper.toggled #page-content-wrapper {
+        position: relative;
+        margin-right: 0;
+    }
+
+    .menu-small{
+        display: none;
+    }
+}
 
-/* ------------------------------------------------------- */
 .logo{
-    text-align: center; 
+    text-align: center;
     margin-top: 15px;
 }
 
@@ -129,15 +183,13 @@ textarea{
     width:50%;
 }
 
-/*-------------------------------------------------------*/
-
 .search-nav{
     text-align: center;
     margin-bottom:15px;
 }
 
 .search-nav > input{
-    margin: 0 auto;    
+    margin: 0 auto;
     border-radius: 0px;
 }
 
@@ -158,36 +210,7 @@ textarea{
 }
 
 .nav-dropdown{
-    margin-right: 20px !important;    
-}
-
-/* Sidebar responsiveness */
-@media(min-width:768px) {
-    #wrapper {
-        padding-left: 250px;
-    }
-
-    #wrapper.toggled {
-        padding-left: 0;
-    }
-
-    #sidebar-wrapper {
-        width: 250px;
-    }
-
-    #wrapper.toggled #sidebar-wrapper {
-        width: 0;
-    }
-
-    #page-content-wrapper {
-        padding: 20px;
-        position: relative;
-    }
-
-    #wrapper.toggled #page-content-wrapper {
-        position: relative;
-        margin-right: 0;
-    }
+    margin-right: 20px !important;
 }
 
 /* Header ---------------------------*/
@@ -201,15 +224,15 @@ textarea{
 
 }
 
-#menu-toggle:hover, 
+#menu-toggle:hover,
 #menu-toggle:focus{
     background-color:transparent;
 }
 
 #progress{
-    margin-bottom:0px; 
+    margin-bottom:0px;
     height:10px;
-    border-radius: 0px !important;  
+    border-radius: 0px !important;
 }
 
 /* HELPER ---------------------------- */
@@ -227,7 +250,7 @@ textarea{
     right: 20px;
 }
 
-@media print {    
-   #sidebar-wrapper, #header{ display: none !important; }
-   #wrapper { padding-left: 0px; }
-}
+@media print {
+    #sidebar-wrapper, #header{ display: none !important; }
+    #wrapper { padding-left: 0px; }
+}

+ 1 - 1
public/dist/themes/black_and_white.css

@@ -10,7 +10,7 @@
     color: #000000 !important;
     background-color: #fff !important;
 }
-
+ 
 .nav-dropdown .dropdown-toggle{
     color: #ffffff !important;
 }

Fișier diff suprimat deoarece este prea mare
+ 5 - 0
public/plugins/bootstrap/bootstrap.bundle.min.js


Fișier diff suprimat deoarece este prea mare
+ 0 - 5
public/plugins/bootstrap/bootstrap.min.css


+ 0 - 0
public/plugins/bootstrap/.bower.json → public/plugins/bootstrap4.5/.bower.json


+ 0 - 0
public/plugins/bootstrap/bootstrap-theme.min.css → public/plugins/bootstrap4.5/bootstrap-theme.min.css


Fișier diff suprimat deoarece este prea mare
+ 5 - 0
public/plugins/bootstrap4.5/bootstrap.min.css


+ 0 - 0
public/plugins/bootstrap/bootstrap.min.js → public/plugins/bootstrap4.5/bootstrap.min.js


Unele fișiere nu au fost afișate deoarece prea multe fișiere au fost modificate în acest diff