mirror of
https://github.com/kevinveenbirkenbach/infinito.git
synced 2025-09-13 05:47:11 +02:00
Optimized for SPA
This commit is contained in:
18
application/symfony/templates/base.html.twig
Normal file
18
application/symfony/templates/base.html.twig
Normal file
@@ -0,0 +1,18 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>
|
||||
{% block title %}infinito{% endblock %}
|
||||
</title>
|
||||
<!--bootstrap and animation components-->
|
||||
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.2/css/bootstrap.min.css" integrity="sha384-Smlep5jCw/wG7hdkwQ/Z5nLIefveQRIY9nfy6xoR1uRYBtpZgI6339F5dgvm/e9B" crossorigin="anonymous">
|
||||
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
|
||||
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.2/js/bootstrap.min.js" integrity="sha384-o+RDsa0aLu++PJvFqy8fFScvbHFLtbvScb8AjopnFD+iEQ7wo/CG0xlczd+2O/em" crossorigin="anonymous"></script>
|
||||
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
|
||||
<!-- mobile friendly -->
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
</head>
|
||||
<body>
|
||||
{% block body %}{% endblock %}
|
||||
</body>
|
||||
</html>
|
14
application/symfony/templates/frames/default.html.twig
Normal file
14
application/symfony/templates/frames/default.html.twig
Normal file
@@ -0,0 +1,14 @@
|
||||
{% extends "base.html.twig" %}
|
||||
{% block body %}
|
||||
{% include 'frames/structure/navbar/navbar_top.html.twig'%}
|
||||
{% block sub_navigation %}
|
||||
{% endblock %}
|
||||
<br />
|
||||
<main role="main" class="container">
|
||||
{% block container_navigation %}
|
||||
{% endblock %}
|
||||
{% include 'frames/structure/message/flash_messages.html.twig'%}
|
||||
{% block content %}
|
||||
{% endblock %}
|
||||
</main>
|
||||
{% endblock %}
|
6
application/symfony/templates/frames/exception.html.twig
Normal file
6
application/symfony/templates/frames/exception.html.twig
Normal file
@@ -0,0 +1,6 @@
|
||||
{% extends "frames/default.html.twig" %}
|
||||
{% set menu_items = [] %}
|
||||
{% block content %}
|
||||
<h1>Error!</h1>
|
||||
<p>{{ message }}</p>
|
||||
{% endblock %}
|
@@ -0,0 +1,5 @@
|
||||
{% for label,messages in app.flashes %}
|
||||
{% for message in messages %}
|
||||
{% include "frames/structure/message/message.html.twig" with {'message':message,'label':label} %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
@@ -0,0 +1,4 @@
|
||||
{% set icons = {'success':'fas fa-check-circle','danger':'fas fa-times','warning':'fas fa-exclamation-triangle','info':'fas fa-info'} %}
|
||||
<div class="alert alert-{{ label }}">
|
||||
<i class="{{ icons[label] }}"></i> {{ message }}
|
||||
</div>
|
@@ -0,0 +1,200 @@
|
||||
{# @see https://gist.github.com/lsv/24a9e9d7d961d22226f8e220d2c4a7d0 #}
|
||||
{% extends 'knp_menu.html.twig' %}
|
||||
|
||||
{% macro setCssClassAttribute(item, type, add) %}
|
||||
{% set getter = 'get' ~ type %}
|
||||
{% set setter = 'set' ~ type %}
|
||||
{% set value = attribute(item, getter, ['class']) %}
|
||||
{% if value is iterable %}
|
||||
{% set value = value|join(' ') %}
|
||||
{% endif %}
|
||||
{% do attribute(item, setter, ['class', value ~ ' ' ~ add]) %}
|
||||
{% endmacro %}
|
||||
|
||||
{% block item %}
|
||||
{% import "knp_menu.html.twig" as macros %}
|
||||
{#
|
||||
As multiple level is not currently supported by bootstrap 4
|
||||
This requires you to install
|
||||
https://github.com/bootstrapthemesco/bootstrap-4-multi-dropdown-navbar
|
||||
And set the the use_multilevel = true
|
||||
#}
|
||||
{% set use_multilevel = false %}
|
||||
|
||||
{% if item.displayed %}
|
||||
{%- set attributes = item.attributes %}
|
||||
{%- set is_dropdown = attributes.dropdown|default(false) %}
|
||||
{%- set divider_prepend = attributes.divider_prepend|default(false) %}
|
||||
{%- set divider_append = attributes.divider_append|default(false) %}
|
||||
|
||||
{# unset bootstrap specific attributes #}
|
||||
{%- set attributes = attributes|merge({'dropdown': null, 'divider_prepend': null, 'divider_append': null }) %}
|
||||
|
||||
{%- if divider_prepend %}
|
||||
{{ block('dividerElement') }}
|
||||
{%- endif %}
|
||||
|
||||
{# building the class of the item #}
|
||||
{%- set classes = item.attribute('class') is not empty ? [item.attribute('class'), 'nav-item'] : ['nav-item'] %}
|
||||
{%- if matcher.isCurrent(item) %}
|
||||
{%- set classes = classes|merge([options.currentClass]) %}
|
||||
{%- elseif matcher.isAncestor(item, options.depth) %}
|
||||
{%- set classes = classes|merge([options.ancestorClass]) %}
|
||||
{%- endif %}
|
||||
{%- if item.actsLikeFirst %}
|
||||
{%- set classes = classes|merge([options.firstClass]) %}
|
||||
{%- endif %}
|
||||
{%- if item.actsLikeLast %}
|
||||
{%- set classes = classes|merge([options.lastClass]) %}
|
||||
{%- endif %}
|
||||
|
||||
{# building the class of the children #}
|
||||
{%- set childrenClasses = item.childrenAttribute('class') is not empty ? [item.childrenAttribute('class')] : [] %}
|
||||
{%- set childrenClasses = childrenClasses|merge(['menu_level_' ~ item.level]) %}
|
||||
|
||||
{# adding classes for dropdown #}
|
||||
{%- if is_dropdown %}
|
||||
{%- set classes = classes|merge(['dropdown']) %}
|
||||
{%- set childrenClasses = childrenClasses|merge(['dropdown-menu']) %}
|
||||
{%- endif %}
|
||||
|
||||
{# putting classes together #}
|
||||
{%- if classes is not empty %}
|
||||
{%- set attributes = attributes|merge({'class': classes|join(' ')}) %}
|
||||
{%- endif %}
|
||||
{%- set listAttributes = item.childrenAttributes|merge({'class': childrenClasses|join(' ') }) %}
|
||||
|
||||
<li{{ macros.attributes(attributes) }}>
|
||||
{# displaying the item #}
|
||||
{%- if is_dropdown %}
|
||||
{{ block('dropdownElement') }}
|
||||
{%- elseif item.uri is not empty and (not item.current or options.currentAsLink) %}
|
||||
{{ block('linkElement') }}
|
||||
{%- else %}
|
||||
{{ block('spanElement') }}
|
||||
{%- endif %}
|
||||
{%- if divider_append %}
|
||||
{{ block('dividerElement') }}
|
||||
{%- endif %}
|
||||
{% if item.hasChildren and options.depth is not same as(0) and item.displayChildren %}
|
||||
{{ block('dropdownlinks') }}
|
||||
{% endif %}
|
||||
</li>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block dropdownlinks %}
|
||||
{% if use_multilevel %}
|
||||
<ul class="dropdown-menu">
|
||||
{% else %}
|
||||
<div class="dropdown-menu">
|
||||
{% endif %}
|
||||
{% for item in item.children %}
|
||||
{{ block('renderDropdownlink') }}
|
||||
|
||||
{% if use_multilevel and item.hasChildren and options.depth is not same as(0) and item.displayChildren %}
|
||||
{{ block('dropdownlinks') }}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% if not use_multilevel %}
|
||||
</div>
|
||||
{% else %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block renderDropdownlink %}
|
||||
{% import _self as ownmacro %}
|
||||
{%- set divider_prepend = item.attributes.divider_prepend|default(false) %}
|
||||
{%- set divider_append = item.attributes.divider_append|default(false) %}
|
||||
{%- set attributes = item.attributes|merge({'dropdown': null, 'divider_prepend': null, 'divider_append': null }) %}
|
||||
|
||||
{% if use_multilevel %}
|
||||
<li>
|
||||
{% endif %}
|
||||
|
||||
{%- if divider_prepend %}
|
||||
{{ block('dividerElementDropdown') }}
|
||||
{%- endif %}
|
||||
|
||||
{%- if item.uri is not empty and (not item.current or options.currentAsLink) %}
|
||||
{{ ownmacro.setCssClassAttribute(item, 'LinkAttribute', 'dropdown-item') }}
|
||||
{{ block('linkElement') }}
|
||||
{%- else %}
|
||||
{{ block('spanElementDropdown') }}
|
||||
{%- endif %}
|
||||
|
||||
{%- if divider_append %}
|
||||
{{ block('dividerElementDropdown') }}
|
||||
{%- endif %}
|
||||
|
||||
{% if use_multilevel %}
|
||||
</li>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block spanElementDropdown %}
|
||||
{% import "knp_menu.html.twig" as macros %}
|
||||
{% import _self as ownmacro %}
|
||||
{{ ownmacro.setCssClassAttribute(item, 'LabelAttribute', 'dropdown-header') }}
|
||||
<div {{ macros.attributes(item.labelAttributes) }}>
|
||||
{% if item.attribute('icon') is not empty %}
|
||||
<i class="{{ item.attribute('icon') }}"></i>
|
||||
{% endif %}
|
||||
{{ block('label') }}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block dividerElementDropdown %}
|
||||
<div class="dropdown-divider"></div>
|
||||
{% endblock %}
|
||||
|
||||
{% block dividerElement %}
|
||||
{% if item.level == 1 %}
|
||||
<li class="divider-vertical"></li>
|
||||
{% else %}
|
||||
<li class="divider"></li>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block linkElement %}
|
||||
{% import "knp_menu.html.twig" as macros %}
|
||||
{% import _self as ownmacro %}
|
||||
{{ ownmacro.setCssClassAttribute(item, 'LinkAttribute', 'nav-link') }}
|
||||
<a href="{{ item.uri }}"{{ macros.attributes(item.linkAttributes) }}>
|
||||
{% if item.attribute('icon') is not empty %}
|
||||
<i class="{{ item.attribute('icon') }}"></i>
|
||||
{% endif %}
|
||||
{{ block('label') }}
|
||||
</a>
|
||||
{% endblock %}
|
||||
|
||||
{% block spanElement %}
|
||||
{% import "knp_menu.html.twig" as macros %}
|
||||
{% import _self as ownmacro %}
|
||||
{{ ownmacro.setCssClassAttribute(item, 'LabelAttribute', 'navbar-text') }}
|
||||
<span {{ macros.attributes(item.labelAttributes) }}>
|
||||
{% if item.attribute('icon') is not empty %}
|
||||
<i class="{{ item.attribute('icon') }}"></i>
|
||||
{% endif %}
|
||||
{{ block('label') }}
|
||||
</span>
|
||||
{% endblock %}
|
||||
|
||||
{% block dropdownElement %}
|
||||
{% import "knp_menu.html.twig" as macros %}
|
||||
{%- set classes = item.linkAttribute('class') is not empty ? [item.linkAttribute('class')] : [] %}
|
||||
{%- set classes = classes|merge(['dropdown-toggle', 'nav-link']) %}
|
||||
{%- set attributes = item.linkAttributes %}
|
||||
{%- set attributes = attributes|merge({'class': classes|join(' ')}) %}
|
||||
{%- set attributes = attributes|merge({'data-toggle': 'dropdown'}) %}
|
||||
<a href="#"{{ macros.attributes(attributes) }}>
|
||||
{% if item.attribute('icon') is not empty %}
|
||||
<i class="{{ item.attribute('icon') }}"></i>
|
||||
{% endif %}
|
||||
{{ block('label') }}
|
||||
<b class="caret"></b>
|
||||
</a>
|
||||
{% endblock %}
|
||||
|
||||
{% block label %}{{ item.label|trans }}{% endblock %}
|
@@ -0,0 +1,12 @@
|
||||
<nav class="navbar navbar-expand-lg navbar-light bg-light">
|
||||
<a class="navbar-brand" href="/"><i class="fas fa-infinity"></i> infinito</a>
|
||||
<button class="navbar-toggler" type="button" data-toggle="collapse"
|
||||
data-target="#navbarSupportedContent"
|
||||
aria-controls="navbarSupportedContent" aria-expanded="false"
|
||||
aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarSupportedContent">
|
||||
{{ knp_menu_render('userTopbar', {'currentClass': 'active', 'template': 'frames/structure/navbar/knp_menu.html.twig'}) }}
|
||||
</div>
|
||||
</nav>
|
@@ -0,0 +1,11 @@
|
||||
<nav class="navbar navbar-expand-lg navbar-light bg-light">
|
||||
<button class="navbar-toggler" type="button" data-toggle="collapse"
|
||||
data-target="#navbarSupportedContent"
|
||||
aria-controls="navbarSupportedContent" aria-expanded="false"
|
||||
aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarSupportedContent">
|
||||
{{ knp_menu_render('nodeSubbar', {'currentClass': 'active', 'template': 'frames/structure/navbar/knp_menu.html.twig'}) }}
|
||||
</div>
|
||||
</nav>
|
@@ -0,0 +1,11 @@
|
||||
<nav class="navbar navbar-expand-lg navbar-light bg-light">
|
||||
<button class="navbar-toggler" type="button" data-toggle="collapse"
|
||||
data-target="#navbarSupportedContent"
|
||||
aria-controls="navbarSupportedContent" aria-expanded="false"
|
||||
aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarSupportedContent">
|
||||
{{ knp_menu_render('sourceNavbar', {'currentClass': 'active', 'template': 'frames/structure/navbar/knp_menu.html.twig'}) }}
|
||||
</div>
|
||||
</nav>
|
6
application/symfony/templates/law/law.html.twig
Normal file
6
application/symfony/templates/law/law.html.twig
Normal file
@@ -0,0 +1,6 @@
|
||||
{% extends "frames/default.html.twig" %}
|
||||
{% block title %}
|
||||
{% trans %}
|
||||
Law
|
||||
{% endtrans %}
|
||||
{% endblock %}
|
17
application/symfony/templates/law/view/standard.html.twig
Normal file
17
application/symfony/templates/law/view/standard.html.twig
Normal file
@@ -0,0 +1,17 @@
|
||||
{% extends "law/law.html.twig" %}
|
||||
{% block content %}
|
||||
<h1>
|
||||
{% trans %}
|
||||
Law
|
||||
{% endtrans %}
|
||||
#
|
||||
{{ law.id }}
|
||||
</h1>
|
||||
{% trans %}
|
||||
Responsible for:
|
||||
{% endtrans %}
|
||||
<a href="{{ path('app_node_show',{'id':law.node.id})}}"> {% trans with {'%law.node.id%':law.node.id}%}
|
||||
node #%law.node.id% {% endtrans %}
|
||||
</a>
|
||||
.
|
||||
{% endblock %}
|
@@ -0,0 +1,3 @@
|
||||
{{ form_start(form) }}
|
||||
{{ form_widget(form) }}
|
||||
{{ form_end(form) }}
|
5
application/symfony/templates/source/form/name.html.twig
Normal file
5
application/symfony/templates/source/form/name.html.twig
Normal file
@@ -0,0 +1,5 @@
|
||||
{% extends "source/form/source.html.twig" %}
|
||||
{% block content %}
|
||||
<h1>{% trans %} Name {% endtrans %}</h1>
|
||||
{% include "source/form/content/name." ~ app.request.requestFormat ~ ".twig" %}
|
||||
{% endblock %}
|
@@ -0,0 +1,6 @@
|
||||
{% extends "source/source.html.twig" %}
|
||||
{% block title %}
|
||||
{% trans %}
|
||||
Source edit
|
||||
{% endtrans %}
|
||||
{% endblock %}
|
9
application/symfony/templates/source/source.html.twig
Normal file
9
application/symfony/templates/source/source.html.twig
Normal file
@@ -0,0 +1,9 @@
|
||||
{% extends "frames/default.html.twig" %}
|
||||
{% block title %}
|
||||
{% trans %}
|
||||
Source
|
||||
{% endtrans %}
|
||||
{% endblock %}
|
||||
{% block sub_navigation %}
|
||||
{% include 'frames/structure/navbar/source_sub.html.twig'%}
|
||||
{% endblock %}
|
@@ -0,0 +1 @@
|
||||
{{ source.name }}
|
@@ -0,0 +1 @@
|
||||
{% include "source/view/content/name." ~ app.request.requestFormat ~ ".twig" with {'source':source.nameSource}%}
|
5
application/symfony/templates/source/view/name.html.twig
Normal file
5
application/symfony/templates/source/view/name.html.twig
Normal file
@@ -0,0 +1,5 @@
|
||||
{% extends "source/view/source.html.twig" %}
|
||||
{% block content %}
|
||||
<h1>{% trans %} Name {% endtrans %}</h1>
|
||||
{% include "source/view/content/name." ~ app.request.requestFormat ~ ".twig" %}
|
||||
{% endblock %}
|
@@ -0,0 +1,7 @@
|
||||
{% extends "source/source.html.twig" %}
|
||||
{% block title %}
|
||||
{% trans %}
|
||||
Source
|
||||
{% endtrans %}
|
||||
#{{ source.id }}
|
||||
{% endblock %}
|
5
application/symfony/templates/source/view/user.html.twig
Normal file
5
application/symfony/templates/source/view/user.html.twig
Normal file
@@ -0,0 +1,5 @@
|
||||
{% extends "source/view/source.html.twig" %}
|
||||
{% block content %}
|
||||
<h1>{% trans %} User {% endtrans %}</h1>
|
||||
{% include "source/view/content/user." ~ app.request.requestFormat ~ ".twig" %}
|
||||
{% endblock %}
|
11
application/symfony/templates/standard/homepage.html.twig
Normal file
11
application/symfony/templates/standard/homepage.html.twig
Normal file
@@ -0,0 +1,11 @@
|
||||
{% extends "frames/default.html.twig" %}
|
||||
{% block title %}
|
||||
Homepage
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
<h2>
|
||||
{% trans %}
|
||||
Welcome to infinito!
|
||||
{% endtrans %}
|
||||
</h2>
|
||||
{% endblock %}
|
Reference in New Issue
Block a user