vendor/uvdesk/core-framework/Resources/views/Templates/header.html.twig line 1

Open in your IDE?
  1. <!-- Navbar -->
  2. <head>
  3.  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css">
  4.   
  5. </head>
  6. <style>
  7.     #darkModeButton {
  8.       background-color: #333;
  9.       color: #fff;
  10.       padding: 10px 20px;
  11.       border: none;
  12.       border-radius: 4px;
  13.       cursor: pointer;
  14.     }
  15.     #darkModeButton:hover {
  16.       background-color: #555;
  17.     }
  18.     .uv-navbar .uv-notification-list li {
  19.         cursor: default;
  20.         font-size: 15px !important;
  21.     }
  22.     .uv-navbar .uv-notification-list li * {
  23.         display: inline-block !important;
  24.     }
  25.     .uv-navbar .uv-notification-list li a {
  26.          color: #2750C4 !important;
  27.     }
  28.     .uv-navbar .uv-notification-list ul {
  29.         max-height: 320px !important;
  30.     }
  31.     .uv-navbar .uv-notification-list .timeago {
  32.         color: #9E9E9E;
  33.         margin-top: 5px;
  34.         font-size: 13px;
  35.     }
  36.     .uv-navbar .uv-dropdown-container.load-more {
  37.         border-top: solid 1px #D3D3D3;
  38.         text-align: center;
  39.     }
  40.     .uv-navbar .uv-dropdown-container.load-more a {
  41.         color: #333;
  42.         text-transform: capitalize;
  43.         font-size: 15px;
  44.         font-weight: 500;
  45.     }
  46.     .uv-navbar .uv-icon-load-more {
  47.         margin-right: 5px;
  48.     }
  49.     .uv-plan-list-item .uv-text-light-color {
  50.         color: #9E9E9E;
  51.     }
  52.     .uv-plan-list-item .uv-plan-badge {
  53.         color: #FFFFFF;
  54.         font-size: 12px;
  55.         padding: 1px 5px;
  56.         border-radius: 3px;
  57.         margin-left: 5px;
  58.         display: inline-block;
  59.         text-transform: uppercase;
  60.     }
  61.     .uv-plan-list-item .uv-plan-badge-color-free {
  62.         background: #4486ee;
  63.     }
  64.     .uv-plan-list-item .uv-plan-badge-color-pro {
  65.         background: #f5d02a;
  66.     }
  67.     .uv-plan-list-item .uv-plan-badge-color-enterprise {
  68.         background: #fd9a9a;
  69.     }
  70.     .uv-plan-list-item .uv-plan-badge-color-customized {
  71.         background: #b77af5;
  72.     }
  73.     .uv-onboard-navigator {
  74.         cursor: pointer;
  75.     }
  76.     .uv-margin-icon-srch {
  77.         margin: 5px 0px 0px 5px;
  78.     }
  79.     .uv-mob-aside{
  80.         position: fixed;
  81.         z-index: 999;
  82.         top: 105px;
  83.         left: 288px;
  84.         transition: 0.35s cubic-bezier(0.4, 0, 0.2, 1);
  85.     }
  86.     .uv-sidebar.uv-sidebar-active ~ .uv-paper .uv-mob-aside{
  87.         left: 320px;
  88.     }
  89.     .uv-mob-aside.uv-mob-aside-collapsed{
  90.         left: 286px;
  91.     }
  92.     .uv-sidebar.uv-sidebar-active ~ .uv-paper .uv-mob-aside.uv-mob-aside-collapsed{
  93.         left: 45px;
  94.     }
  95.     .uv-view.uv-aside-view{
  96.         padding: 25px 0px 25px 25px;
  97.     }
  98.     .uv-inner-section .uv-view.uv-aside-view .uv-ticket-scroll-region.uv-aside-view-tv{
  99.         left: 20px;
  100.     }
  101.     .uv-mob-aside .uv-icon-aside-menu,.uv-mob-aside .uv-icon-aside-menu:hover {
  102.         background-position: 1px -497px;
  103.     }
  104.     .uv-mob-aside-collapsed .uv-icon-aside-menu, .uv-mob-aside-collapsed .uv-icon-aside-menu:hover {
  105.         background-position: 5px -497px;
  106.     }
  107.     .uv-mob-aside:not(.uv-mob-aside-collapsed) .uv-icon-aside-menu,.uv-mob-aside:not(.uv-mob-aside-collapsed) .uv-icon-aside-menu:hover {
  108.         -ms-transform: rotate(180deg);
  109.         -webkit-transform: rotate(180deg);
  110.         transform: rotate(180deg);
  111.     }
  112.     .uv-mob-aside:not(.uv-mob-aside-collapsed) .uv-icon-aside-menu:hover,.uv-rtl .uv-mob-aside.uv-mob-aside-collapsed .uv-icon-aside-menu:hover {
  113.         box-shadow: 0px -8px 15px 3px rgba(0, 0, 0, 0.15), 0px -2px 3px 0px rgba(0, 0, 0, 0.2);
  114.     }
  115.     .uv-rtl .uv-mob-aside:not(.uv-mob-aside-collapsed) .uv-icon-aside-menu,.uv-rtl .uv-mob-aside:not(.uv-mob-aside-collapsed) .uv-icon-aside-menu:hover {
  116.         -ms-transform: unset;
  117.         -webkit-transform: unset;
  118.         transform: unset;
  119.     }
  120.     .uv-rtl .uv-mob-aside.uv-mob-aside-collapsed .uv-icon-aside-menu,.uv-rtl .uv-mob-aside.uv-mob-aside-collapsed .uv-icon-aside-menu:hover {
  121.         -ms-transform: rotate(180deg)!important;
  122.         -webkit-transform: rotate(180deg)!important;
  123.         transform: rotate(180deg)!important;
  124.     }
  125.     .uv-rtl .uv-sidebar.uv-sidebar-active ~ .uv-paper .uv-mob-aside{
  126.         right: 320px;
  127.         left: unset;
  128.     }
  129.     .uv-rtl .uv-mob-aside.uv-mob-aside-collapsed{
  130.         right: 286px;
  131.     }
  132.     .uv-rtl .uv-sidebar.uv-sidebar-active ~ .uv-paper .uv-mob-aside.uv-mob-aside-collapsed{
  133.         right: 45px;
  134.     }
  135.     .uv-rtl .uv-inner-section .uv-view.uv-aside-view .uv-ticket-scroll-region.uv-aside-view-tv{
  136.         right: 20px;
  137.     }
  138.     .uv-rtl .uv-sidebar:not(.uv-sidebar-active) ~ .uv-paper .uv-mob-aside:not(.uv-mob-aside-collapsed) {
  139.         right: 560px
  140.     }
  141.     .uv-rtl .uv-mob-aside{
  142.         left: unset;
  143.     }
  144.     .uv-menubar.uv-language .uv-dropdown-list {
  145.         z-index: 19999;
  146.     }
  147.     .user-name {
  148.         font-weight: 800;
  149.         margin-top: 2px;
  150.         font-size: medium;
  151.     }
  152.     @media screen and (min-width: 901px) and (max-width: 1400px) {
  153.         .uv-sidebar.uv-sidebar-active ~ .uv-paper .uv-mob-aside{
  154.             left: 290px;
  155.         }
  156.         .uv-mob-aside.uv-mob-aside-collapsed{
  157.             left: 40px;
  158.         }
  159.         .uv-rtl .uv-sidebar.uv-sidebar-active ~ .uv-paper .uv-mob-aside{
  160.             right: 290px;
  161.         }
  162.         .uv-rtl  .uv-mob-aside.uv-mob-aside-collapsed{
  163.             right: 52px;
  164.         }
  165.     }
  166.     @media screen and (max-width: 1024px) {
  167.         .uv-mob-aside{
  168.             top: 48px;
  169.             left: 80px!important;
  170.         }
  171.         .uv-mob-aside-collapsed .uv-icon-aside-menu, .uv-mob-aside-collapsed .uv-icon-aside-menu:hover {
  172.             background-position: 1px -497px;
  173.         }
  174.         .uv-sidebar ul.uv-menubar li a {
  175.             max-width: 60px !important;
  176.         }
  177.         .uv-sidebar .uv-soft-top .uv-company-logo {
  178.             width: unset;
  179.         }
  180.         #google_translate_element .goog-te-gadget-simple {
  181.             width: 26px;
  182.             overflow: hidden;
  183.             font-size: 0px;
  184.             padding: 3px 2px 2px 2px;
  185.         }
  186.     }
  187.     @media screen and (max-width: 400px) {
  188.         #google_translate_element {
  189.             display: none;
  190.         }
  191.     }
  192.     .uv-rtl .uv-mob-aside{
  193.         right: 320px;
  194.     }
  195.     .uv-pop-up-body .uv-mob-aside {
  196.         display: none;
  197.         transition: none;
  198.     }
  199.     .uv-rtl .uv-view.uv-aside-view{
  200.         padding: 25px 25px 25px 0px;
  201.     }
  202.     .uv-rtl .uv-inner-section .uv-view.uv-aside-view .uv-ticket-scroll-region.uv-aside-view-tv{
  203.         left: 0px;
  204.         right: 20px;
  205.     }
  206.     .uv-filter-view .uv-filter-head .uv-filter-toggle span{
  207.         background-position: -21px -245px;
  208.     }
  209.     .uv-view.uv-aside-view{
  210.         padding: 25px 0px 25px 25px;
  211.     }
  212.     .uv-inner-section .uv-view.uv-aside-view .uv-ticket-scroll-region.uv-aside-view-tv{
  213.         left: 20px;
  214.     }
  215.     .uv-rtl .uv-view.uv-aside-view{
  216.         padding: 25px 25px 25px 0px;
  217.     }
  218.     .uv-rtl .uv-inner-section .uv-view.uv-aside-view .uv-ticket-scroll-region.uv-aside-view-tv{
  219.         left: 0px;
  220.         right: 20px;
  221.     }
  222.     .uv-filter-view .uv-filter-head .uv-filter-toggle span{
  223.         background-position: -21px -245px;
  224.     }
  225.     .uv-inner-section .uv-view.uv-aside-view .uv-ticket-fixed-region{
  226.         left: 20px;
  227.     }
  228.     .uv-rtl .uv-inner-section .uv-view.uv-aside-view .uv-ticket-fixed-region {
  229.         left: 0px;
  230.         right: 20px;
  231.     }
  232.     div.mce-edit-area {
  233.         margin-right: 1px!important;
  234.     }
  235.     .uv-whats-newlist li img {
  236.         width: 40px;
  237.     }
  238.     .uv-got-whats-new {
  239.         background-color: #7C70F4;
  240.         border-radius: 50%;
  241.         padding: 4px;
  242.         border: 2px solid white;
  243.         position: absolute;
  244.         top: -3px;
  245.         right: -3px;
  246.     }
  247.     .uv-feature-title {
  248.         vertical-align: top;
  249.         font-size: 18px;
  250.         margin: 5px 0 0 5px;
  251.         word-wrap: break-word;
  252.         display: inline-block;
  253.     }
  254.     .uv-feature-content {
  255.         margin: 2px 0 0 0;
  256.     }
  257.     .uv-dropdown-list ul .uv-feature-link, .uv-dropdown-list ul .uv-feature-link:link, .uv-dropdown-list ul .uv-feature-link:active, .uv-dropdown-list ul .uv-feature-link:visited, .uv-dropdown-list ul .uv-feature-link:focus {
  258.         color: #2750C4;
  259.         font-size: 15px;
  260.         margin-top: 10px;
  261.     }
  262.     .uv-dropdown-list ul.uv-search-list li.uv-whats-li {
  263.         border-top: none;
  264.         padding-top: 5px;
  265.     }
  266.     .uv-whats-newlist + .uv-notification-list {
  267.         margin-left: 15px;
  268.     }
  269.     .uv-search-result-wrapper a:focus > .uv-search-result-row {
  270.         background-color: #f0f0f0;
  271.     }
  272.     .uv-loader-view ~ .uv-notifications-wrapper {
  273.         z-index: 9999;
  274.     }
  275.     .mce-notification-error {
  276.         display: none;
  277.     }
  278.     ul.uv-flag-notice-list {
  279.         color: #333333;
  280.         border-top: solid 1px #D3D3D3;
  281.         border-bottom: solid 1px #D3D3D3;
  282.         padding: 15px 20px;
  283.         background: #FAFAFA;
  284.     }
  285.     .uv-dropdown-list ul.uv-search-list.flags-active li:first-child {
  286.         border-top: unset;
  287.     }
  288.     {# .uv-main-logo {
  289.         position: absolute;
  290.         padding: 10px 0 0px 30px;
  291.     } #}
  292.     .dropdown-divider {
  293.         border-top: 1px solid #e1e4e8;
  294.         display: block;
  295.         height: 0;
  296.         margin: 10px 0 10px -19px;
  297.         width: 195px;
  298.     }
  299. </style>
  300. <!-- Navigation -->
  301. <div class="uv-navbar">
  302.     <!-- Banner -->
  303.     <div class="uv-mob-aside {% if app.request.cookies and app.request.cookies.get('uv-asideView') %}uv-mob-aside-collapsed{% endif %}">
  304.         <span class="uv-icon-aside-menu"></span>
  305.     </div>
  306.     <!-- Search Box -->
  307.     {{ uvdesk_extensibles.getRegisteredComponent('Webkul\\UVDesk\\CoreFrameworkBundle\\Dashboard\\SearchTemplate').render() | raw }}
  308.     <div class="uv-actions">
  309.         <!-- Profile Navigations -->
  310.         <span style="position: relative" class="">
  311.           <button id="darkModeButton"><i class="fas fa-moon"></i> Modo Oscuro</button>
  312.             <div class="uv-profile uv-dropdown-other">
  313.                 {% if currentUserDetails is defined and currentUserDetails.thumbnail is defined and currentUserDetails.thumbnail is not empty %}
  314.                     <img class='uv-avatar' src="{{ app.request.scheme ~'://' ~ app.request.httpHost ~ asset('') }}{{ currentUserDetails.thumbnail }}"/>
  315.                 {% else %}
  316.                     <img class='uv-avatar' src="{{ asset('bundles/uvdeskcoreframework/images/uv-avatar-batman.png') }}"/>
  317.                 {% endif %}
  318.             </div>
  319.             <div class="uv-dropdown-list uv-bottom-right uv-text-left">
  320.                 <div class="uv-dropdown-container">
  321.                     <label>Signed in as </label>
  322.                         <p class="user-name">{{ currentUser.firstName }} {{ currentUser.lastName }}</p>
  323.                     <div role="none" class="dropdown-divider"></div>
  324.                     <ul>
  325.                         <li><a href="{{ path('edit_profile') }}" class='profiler'>Your Profile</a></li>
  326.                     </ul>
  327.                     <ul>
  328.                         {% if user_service.isAccessAuthorized('ROLE_AGENT_CREATE_TICKET') %}
  329.                             <li data-action="create" class="uv-open-popup" data-target="create-ticket-modal">Create Ticket</li>
  330.                         {% endif %}
  331.                         {% if user_service.isAccessAuthorized('ROLE_AGENT_MANAGE_AGENT') %}
  332.                             <li><a href="{{ path('helpdesk_member_create_account') }}">Create Agent</a></li>
  333.                         {% endif %}
  334.             
  335.                         
  336.                         
  337.                         <div role="none" class="dropdown-divider"></div>
  338.                         <li><a class="uv-text-danger" href="{{ path('helpdesk_member_handle_logout') }}">Sign Out</a></li>
  339.                     </ul>
  340.                 </div>
  341.             </div>
  342.         </span>
  343.     </div>
  344. </div>
  345. <script type="text/template" id="notification_flags_temp">
  346.     <% if (typeof undeliveredMessages != 'undefined') { %>
  347.         <li>
  348.             <span class="uv-notification-message">
  349.                 <%= undeliveredMessages %>
  350.             </span>
  351.         </li>
  352.         <span class="timeago">{{ 'Learn more about %deliveryStatus%.'|trans({'%deliveryStatus%': '<a href="https://support.uvdesk.com/en/blog/uvdesk-ticket-delivery-status" target="_blank">' ~ 'ticket delivery status'|trans ~ '</a>'})|raw }}</span>
  353.     <% } %>
  354. </script>
  355. <script type="text/javascript">
  356.     $(function () {
  357.         var FeatureSearch = Backbone.View.extend({
  358.             el: $('.uv-search-wrapper'),
  359.             events: {
  360.                 'keyup .uv-search-bar': 'searchFeature',
  361.                 'click .uv-search-bar': 'openFeatureSearch',
  362.             },
  363.             searchFeature: function(e) {
  364.                 var currentElement = Backbone.$(e.currentTarget);
  365.                 if(currentElement.val().trim() != '') {
  366.                     var flag = 0;
  367.                     $('.uv-search-wrapper').find('.uv-search-result-row').each(function() {
  368.                         if(!$(this).hasClass('uv-no-results')) {
  369.                             var text = $(this).text().trim().toLowerCase();
  370.                             var isTextContained = text.search(currentElement.val().trim().toLowerCase());
  371.                             if(isTextContained < 0) {
  372.                                 $(this).parent().hide();
  373.                                 $(this).parent().attr('tabIndex', -1);
  374.                             } else {
  375.                                 $(this).parent().show();
  376.                                 $(this).parent().removeAttr('tabIndex');
  377.                                 flag = 1;
  378.                             }
  379.                         }
  380.                     });
  381.                     if(flag == 0)
  382.                         $('.uv-search-wrapper').find(".uv-no-results").show();
  383.                     else
  384.                         $('.uv-search-wrapper').find(".uv-no-results").hide();
  385.                     this.$el.find('.uv-search-result-wrapper').addClass('uv-search-result-active').addClass('uv-search-flap-up')
  386.                 } else {
  387.                     this.$el.find('.uv-search-result-wrapper').removeClass('uv-search-result-active').removeClass('uv-search-flap-up')
  388.                 }
  389.             },
  390.             openFeatureSearch: function(e) {
  391.                 var currentElement = Backbone.$(e.currentTarget);
  392.                 if(currentElement.val().trim() != '') {
  393.                     this.$el.find('.uv-search-result-wrapper').addClass('uv-search-result-active').addClass('uv-search-flap-up')
  394.                 }
  395.             }
  396.         });
  397.         var SidePanelUV = Backbone.View.extend({
  398.             el: $('.uv-paper'),
  399.             events: {
  400.                 'click .uv-mob-aside span': 'toggleAsideBar'
  401.             },
  402.             initialize : function() {
  403.                 var ele = $('.uv-paper');
  404.                 if(ele.css('padding-left') == '60px'){
  405.                     $('.uv-mob-aside').removeClass('uv-mob-aside-left');
  406.                 }else{
  407.                     $('.uv-mob-aside').addClass('uv-mob-aside-left');
  408.                 }
  409.                 var asideView = '{{ app.request.cookies.get("uv-asideView") }}';
  410.                 if(asideView == 'true')
  411.                     this.toggleAsideBar();
  412.             },
  413.             toggleAsideBar: function(){
  414.                 var asideView = true;
  415.                 var ele = $('.uv-inner-section .uv-aside');
  416.                 var eleSidePanel = $('.uv-inner-section .uv-view');
  417.                 var eleTicketView = $('.uv-inner-section .uv-view .uv-ticket-scroll-region');
  418.                 var mobAside = $('.uv-mob-aside');
  419.                 if(ele.css('display') == 'none'){
  420.                     asideView = false;
  421.                     ele.css('display', 'block');
  422.                     eleSidePanel.removeClass('uv-aside-view');
  423.                     eleTicketView.removeClass('uv-aside-view-tv');
  424.                     mobAside.removeClass('uv-mob-aside-collapsed')
  425.                 }else{
  426.                     ele.css('display', 'none');
  427.                     eleSidePanel.addClass('uv-aside-view');
  428.                     eleTicketView.addClass('uv-aside-view-tv');
  429.                     mobAside.addClass('uv-mob-aside-collapsed')
  430.                 }
  431.                 if(asideView) {
  432.                     document.cookie = ("uv-asideView=1; expires=Wed, 01 Jan 2020 00:00:00 GMT;path=/");
  433.                 } else {
  434.                     document.cookie = ("uv-asideView=0; expires=Wed, 01 Jan 2020 00:00:00 GMT;path=/");
  435.                 }
  436.             }
  437.         });
  438.         var featureSearch =  new FeatureSearch();
  439.         var sidePanelUV =  new SidePanelUV();
  440.         
  441.         
  442.     });
  443.     
  444.      // Obtener el botón de modo oscuro
  445. const darkModeButton = document.getElementById('darkModeButton');
  446. // Agregar un evento de clic al botón
  447. darkModeButton.addEventListener('click', function() {
  448.   // Obtener el estado actual del modo oscuro del localStorage
  449.   const darkModeEnabled = localStorage.getItem('darkMode') === 'true';
  450.   // Actualizar el estado del modo oscuro
  451.   const newDarkModeState = !darkModeEnabled;
  452.   localStorage.setItem('darkMode', newDarkModeState);
  453.   // Aplicar los estilos según el estado del modo oscuro
  454.   applyDarkModeStyles(newDarkModeState);
  455.   location.reload()
  456. });
  457. // Función para aplicar los estilos del modo oscuro a todos los elementos del HTML
  458. function applyDarkModeStyles(darkModeEnabled) {
  459.   const elements = document.getElementsByTagName('*');
  460.   for (let i = 0; i < elements.length; i++) {
  461.     const element = elements[i];
  462.     if (element.tagName !== 'SCRIPT' && element.tagName !== 'STYLE') {
  463.       if (!darkModeEnabled) {
  464.         // Restaurar los estilos originales
  465.         const originalBackgroundColor = element.dataset.originalBackgroundColor;
  466.         const originalColor = element.dataset.originalColor;
  467.         element.style.backgroundColor = originalBackgroundColor;
  468.         element.style.color = originalColor;
  469.         element.classList.remove('dark-mode');
  470.       } else {
  471.         // Guardar los estilos actuales si no se han guardado previamente
  472.         if (!element.dataset.originalBackgroundColor) {
  473.           element.dataset.originalBackgroundColor = getComputedStyle(element).backgroundColor;
  474.         }
  475.         if (!element.dataset.originalColor) {
  476.           element.dataset.originalColor = getComputedStyle(element).color;
  477.         }
  478.         // Aplicar los estilos del modo oscuro
  479.         element.style.backgroundColor = '#333333';
  480.         element.style.color = '#FFFAF0';
  481.         element.classList.add('dark-mode');
  482.       }
  483.     }
  484.   }
  485. }
  486. // Verificar y aplicar los estilos al cargar la página
  487. document.addEventListener('DOMContentLoaded', function() {
  488.   const darkModeEnabled = localStorage.getItem('darkMode') === 'true';
  489.   // Si el modo oscuro está habilitado, pero no se han guardado los estilos originales,
  490.   // se deben aplicar los estilos del modo oscuro por primera vez y guardar los estilos originales
  491.   if (darkModeEnabled) {
  492.     applyDarkModeStyles(true);
  493.   } else {
  494.     applyDarkModeStyles(false);
  495.   }
  496. });
  497. </script>
  498. {# Ticket Create Popup #}
  499. {% if user_service.isAccessAuthorized('ROLE_AGENT_CREATE_TICKET') %}
  500.     {{ ticket_service.appendTwigSnippet('createMemberTicket')|raw }}
  501.     {# {% include('UVDeskCoreFrameworkBundle:Snippets:createMemberTicketSnippet.html.twig') only %} #}
  502. {% endif %}