Initial commit
This commit is contained in:
130
templates/woldmap/_leftPannel.html.twig
Normal file
130
templates/woldmap/_leftPannel.html.twig
Normal file
@ -0,0 +1,130 @@
|
||||
{#<div class="sp_panel__header"></div>#}
|
||||
<div class="sp_panel__switch">
|
||||
<img class="sp_panel__open" src="{{ asset(assets.img.ui~'arrow_open.png') }}" alt="-">
|
||||
<img class="sp_panel__close" src="{{ asset(assets.img.ui~'arrow_close.png') }}" alt="-">
|
||||
</div>
|
||||
<div class="sp_panel__content-switch-container">
|
||||
<div class="sp_panel__content-switch sp_panel__switch-active" data-target="worldmap-filters">
|
||||
<img src="{{ asset(assets.img.ui~'content-pins.png') }}" alt="-">
|
||||
</div>
|
||||
<div class="sp_panel__content-switch" data-target="worlmap-settings">
|
||||
<img src="{{ asset(assets.img.ui~'content-settings.png') }}" alt="-">
|
||||
</div>
|
||||
</div>
|
||||
<div id="primogem-counter-container">
|
||||
<div class="sp_primogem__main-container">
|
||||
<div>
|
||||
<div>At least</div>
|
||||
<div id="primogem-counter">0</div>
|
||||
<div class="sp_icon__container sp_header__page-icon">
|
||||
<img src="{{ asset(assets.img.ui ~'primogem.png') }}" alt="Primogem">
|
||||
</div>
|
||||
</div>
|
||||
<div><h2>primogems</h2> left to collect</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sp_panel__content sp_slider">
|
||||
{% set leftIndex = worldmarksData|length %}
|
||||
<div id="worldmap-filters" class="sp_slider__slide sp_slider__slide-open">
|
||||
<section class="sp_panel__section sp_filter__section" style="color:#c31414;font-weight:bold;background-color:rgba(0,0,0,0.1);">
|
||||
<span>This website is used as portfolio and is no longer maintained. While the data it provide is still accurate, it will not be updated anymore.</span>
|
||||
<span style="padding-top: 8px">Credits to HoYoVerse for the icons and images.</span>
|
||||
</section>
|
||||
{% for _worldmarkCategory in worldmarksData %}
|
||||
<section class="sp_panel__section sp_filter__section">
|
||||
<div class="sp_panel__section-title">
|
||||
<h2 data-section-title="{{ _worldmarkCategory._data.name }}">{{ _worldmarkCategory._data.name }}<span>▼</span></h2>
|
||||
<button class="sp_section-filter__switch" type="button" value="show_all">Show all</button>
|
||||
<button class="sp_section-filter__switch" type="button" value="hide_all">Hide all</button>
|
||||
</div>
|
||||
<div class="sp_form-row__radio {{ is_granted('ROLE_CONTRIBUTOR') ? 'sp_radio__layout-grid-c' : 'sp_radio__layout-grid-b' }} sp_radio__style-icon">
|
||||
<div class="sp_worldmap-filter__section sp_radio__container">
|
||||
{% set rightIndex = _worldmarkCategory._worldmarks|length %}
|
||||
|
||||
{% for _worldmark in _worldmarkCategory._worldmarks %}
|
||||
<label class="sp_radio__input-wrapper" title="{{ _worldmark.name }}">
|
||||
<span class="sp_radio__input-icon">
|
||||
<span class="sp_node__item">
|
||||
<span class="sp_node__background">
|
||||
<img {% if _worldmark.icon %}data-src="{{ asset(assets.worldmark.upload_path ~ _worldmark.icon) }}"{% endif%} src="{{ asset(assets.img._blank_xs) }}" alt="{{ _worldmark.name }}">
|
||||
</span>
|
||||
</span>
|
||||
</span>
|
||||
{#<span class="sp_radio__input-mark"></span>#}
|
||||
<span class="sp_radio__input-label">{{ _worldmark.name }}</span>
|
||||
<span class="nodes_count"></span>
|
||||
<input class="sp_worldmap__filter" data-index="{{ (leftIndex * 100) + rightIndex }}" data-can-be-hidden="{{ _worldmark.canBeHidden }}" type="checkbox" value="{{ _worldmark.slug }}">
|
||||
</label>
|
||||
|
||||
{% if is_granted('ROLE_CONTRIBUTOR') %}
|
||||
<button class="sp_button sp_worldmark__init-new-node" data-uri="{{ path('bo_node_new', {'gridId': '%gridId%', 'worldmarkId': _worldmark.id}) }}">
|
||||
<span>+</span>
|
||||
</button>
|
||||
{% endif %}
|
||||
|
||||
{% set rightIndex = rightIndex - 1 %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{% set leftIndex = leftIndex - 1 %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div id="worlmap-settings" class="sp_slider__slide">
|
||||
<section class="sp_panel__section">
|
||||
<div class="sp_panel__section-title">
|
||||
<label>Worldmap settings</label>
|
||||
</div>
|
||||
<div class="sp_form-row__radio sp_radio__layout-grid-a sp_radio__style-text">
|
||||
<label class="sp_radio__main-label">Profile</label>
|
||||
<div id="profiles__profiles-container" class="sp_radio__container">
|
||||
<label class="sp_radio__input-wrapper" title="America">
|
||||
<span class="sp_radio__input-mark"></span>
|
||||
<span class="sp_radio__input-label">Profile A</span>
|
||||
<input name="_profile" type="radio" value="profile-a">
|
||||
</label>
|
||||
<label class="sp_radio__input-wrapper" title="America">
|
||||
<span class="sp_radio__input-mark"></span>
|
||||
<span class="sp_radio__input-label">Profile B</span>
|
||||
<input name="_profile" type="radio" value="profile-b">
|
||||
</label>
|
||||
<label class="sp_radio__input-wrapper" title="America">
|
||||
<span class="sp_radio__input-mark"></span>
|
||||
<span class="sp_radio__input-label">Profile C</span>
|
||||
<input name="_profile" type="radio" value="profile-c">
|
||||
</label>
|
||||
<label class="sp_radio__input-wrapper" title="America">
|
||||
<span class="sp_radio__input-mark"></span>
|
||||
<span class="sp_radio__input-label">Profile D</span>
|
||||
<input name="_profile" type="radio" value="profile-d">
|
||||
</label>
|
||||
<label class="sp_radio__input-wrapper" title="America">
|
||||
<span class="sp_radio__input-mark"></span>
|
||||
<span class="sp_radio__input-label">Profile E</span>
|
||||
<input name="_profile" type="radio" value="profile-e">
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sp_form-row__radio sp_radio__layout-grid-a sp_radio__style-text">
|
||||
<label class="sp_radio__main-label">Profile's server</label>
|
||||
<div id="profiles__servers-container" class="sp_radio__container">
|
||||
<label class="sp_radio__input-wrapper" title="America">
|
||||
<span class="sp_radio__input-mark"></span>
|
||||
<span class="sp_radio__input-label">America</span>
|
||||
<input name="_profile__server" type="radio" value="na">
|
||||
</label>
|
||||
<label class="sp_radio__input-wrapper" title="Europe">
|
||||
<span class="sp_radio__input-mark"></span>
|
||||
<span class="sp_radio__input-label">Europe</span>
|
||||
<input name="_profile__server" type="radio" value="eu">
|
||||
</label>
|
||||
<label class="sp_radio__input-wrapper" title="Asia">
|
||||
<span class="sp_radio__input-mark"></span>
|
||||
<span class="sp_radio__input-label">Asia</span>
|
||||
<input name="_profile__server" type="radio" value="cn">
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
31
templates/woldmap/_node.html.twig
Normal file
31
templates/woldmap/_node.html.twig
Normal file
@ -0,0 +1,31 @@
|
||||
{% set screenshots = [] %}
|
||||
{% set screenshots = screenshots|merge(node.screenshotA ? [asset(assets.screenshot.thumbnail_path ~ node.screenshotA)]: []) %}
|
||||
{% set screenshots = screenshots|merge(node.screenshotB ? [asset(assets.screenshot.thumbnail_path ~ node.screenshotB)]: []) %}
|
||||
{% set screenshots = screenshots|merge(node.screenshotC ? [asset(assets.screenshot.thumbnail_path ~ node.screenshotC)]: []) %}
|
||||
{% set screenshots = screenshots|merge(node.screenshotD ? [asset(assets.screenshot.thumbnail_path ~ node.screenshotD)]: []) %}
|
||||
{% set screenshots = screenshots|merge(node.screenshotE ? [asset(assets.screenshot.thumbnail_path ~ node.screenshotE)]: []) %}
|
||||
|
||||
<label id="{{ 'node-' ~ node.id }}" class="sp_node__item {% if is_granted('ROLE_ADMIN') and node.isDeleted %}sp_node__deleted{% endif %}"
|
||||
data-coordinate="{{ node.coordinate|json_encode }}"
|
||||
data-filter="{{ node.worldmark.slug }}"
|
||||
data-can-be-hidden="{{ node.worldmark.canBeHidden }}"
|
||||
{% if is_granted('ROLE_CONTRIBUTOR') %}data-edit-url="{{ path('bo_node_edit', {'gridId': node.grid.id, 'worldmarkId': node.worldmark.id, 'id': node.id}) }}"{% endif %}
|
||||
{% if is_granted('ROLE_CONTRIBUTOR') %}data-delete-url="{{ path('bo_node_delete', {'gridId': node.grid.id, 'worldmarkId': node.worldmark.id, 'id': node.id}) }}"{% endif %}
|
||||
data-description="{{ node.description }}"
|
||||
{% if node.screenshotA %}data-screenshots="{{ screenshots|json_encode }}"{% endif %}
|
||||
data-quantity="{{ node.quantity }}"
|
||||
data-primogem="{{ node.primogem }}"
|
||||
hidden>
|
||||
<span class="sp_node__background">
|
||||
{% if directRender is defined %}
|
||||
<img src="{{ asset(node.worldmark.icon ? assets.worldmark.upload_path ~ node.worldmark.icon : assets.img._blank_xs) }}" alt="{{ node.worldmark.name }}">
|
||||
{% else %}
|
||||
<img {% if node.worldmark.icon %}data-src="{{ asset(assets.worldmark.upload_path ~ node.worldmark.icon) }}"{% endif %} src="{{ asset(assets.img._blank_xs) }}" alt="{{ node.worldmark.name }}">
|
||||
{% endif %}
|
||||
</span>
|
||||
{% if node.quantity > 1 %}
|
||||
<span class="sp_node__quantity">
|
||||
<span>{{ node.quantity }}</span>
|
||||
</span>
|
||||
{% endif %}
|
||||
</label>
|
||||
115
templates/woldmap/show.html.twig
Normal file
115
templates/woldmap/show.html.twig
Normal file
@ -0,0 +1,115 @@
|
||||
{% extends 'base.html.twig' %}
|
||||
|
||||
{% set metaRegionName = region.name %}
|
||||
{% for _region in region.subRegions|filter(_region => _region.isAlias and _region.parentRegion.id == region.id) %}
|
||||
{% set metaRegionName = metaRegionName ~ ' and ' ~ _region.name %}
|
||||
{% endfor %}
|
||||
|
||||
{% set metaTitle = title is defined ? title : 'Genshin Impact interactive map - Genshin World' %}
|
||||
{#{% set metaDesc = 'Genshin Impact interactive map of ' ~ metaRegionName ~ '. Find every interest points, events, chests, monsters and materials of Teyvat. Up to date with latest patch.' %}#}
|
||||
{% set metaDesc = 'Genshin Impact interactive map of ' ~ metaRegionName ~ '. Find every interest points, events, chests, monsters and materials of Teyvat.' %}
|
||||
|
||||
{% block meta %}
|
||||
<meta name="title" content="{{ metaTitle }}">
|
||||
<meta name="description" content="{{ metaDesc }}">
|
||||
|
||||
{% if not region.isActive %}
|
||||
<meta name="robots" content="noindex, nofollow">
|
||||
<meta name="googlebot" content="noindex, nofollow">
|
||||
{% endif %}
|
||||
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:url" content="{{ url('fo_region_show', { 'slug': regionSlug }) }}">
|
||||
<meta property="og:title" content="{{ metaTitle }}">
|
||||
<meta property="og:description" content="{{ metaDesc }}">
|
||||
<meta property="og:image" content="https://genshin-world.com/og.jpg">
|
||||
|
||||
<meta property="twitter:card" content="summary_large_image">
|
||||
<meta property="twitter:url" content="{{ url('fo_region_show', { 'slug': regionSlug }) }}">
|
||||
<meta property="twitter:title" content="{{ metaTitle }}">
|
||||
<meta property="twitter:description" content="{{ metaDesc }}">
|
||||
<meta property="twitter:image" content="https://genshin-world.com/og.jpg">
|
||||
|
||||
<link rel="canonical" href="{{ url('fo_region_show', { 'slug': region.slug }) }}">
|
||||
{% endblock %}
|
||||
|
||||
{% block leftPanel %}
|
||||
{% include 'woldmap/_leftPannel.html.twig' %}
|
||||
{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<h1 id="map-title">{{ metaTitle }}</h1>
|
||||
<div id="worldmap-container" class="sp_grid__container" data-region-id="{{ region.slug }}" data-region-name="{{ region.name }}" data-region-width="{{ region.gridWidth }}" data-region-height="{{ region.gridHeight }}" {% if anchor %}data-anchor="{{ anchor }}"{% endif %}>
|
||||
{% for row in 1..region.gridHeight %}
|
||||
{% for col in 1..region.gridWidth %}
|
||||
<div id="grid-{{ grid[row][col]['id'] }}" class="sp_grid__cell">
|
||||
{% set idHash = 'map_g' ~ grid[row][col]['id'] ~ '_v' ~ version %}
|
||||
|
||||
<img id="{{ idHash }}" class="sp_grid__map" {% if grid[row][col]['map_data']['map'].id is not null %}data-src="{{ asset(assets.map.upload_path ~ grid[row][col]['map_data']['map'].file) }}"{% endif %} src="{{ asset(assets.map[region.mapBackground]) }}" alt="{{ region.name }}" draggable="false">
|
||||
<div class="sp_grid__node-container">
|
||||
{% if nodes['grid_' ~ grid[row][col]['id']] is defined %}
|
||||
{% for _node in nodes['grid_' ~ grid[row][col]['id']] %}
|
||||
|
||||
{% include 'woldmap/_node.html.twig' with {'node': _node} %}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div id="grid-zoom-container">
|
||||
<span>+</span>
|
||||
<input id="grid-zoom-controller" type="range" min="0" step="2">
|
||||
<span>-</span>
|
||||
</div>
|
||||
<template id="template_tooltip">
|
||||
<div class="sp_tooltip__wrapper" hidden>
|
||||
{% if is_granted('ROLE_CONTRIBUTOR') %}
|
||||
<div class="sp_tooltip__action-left-wrapper">
|
||||
<form action="" class="sp_tooltip__action sp_node__edit-form sp_form__xhr" method="post">
|
||||
<button class="sp_button" type="submit">
|
||||
<span>Edit node</span>
|
||||
</button>
|
||||
</form>
|
||||
<form action="" class="sp_tooltip__action sp_node_delete-form sp_form__xhr" method="post">
|
||||
<button class="sp_button sp_icon__container" data-type="cancel" type="submit">
|
||||
<img src="{{ asset(assets.img.delete) }}" alt="delete node">
|
||||
</button>
|
||||
</form>
|
||||
{% if is_granted('ROLE_ADMIN') %}
|
||||
<button class="sp_button sp_icon__container sp_node__calc-anchor">
|
||||
<img src="{{ asset(assets.img.ui ~ 'location.png') }}" alt="delete node">
|
||||
</button>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="sp_tooltip__action-right-wrapper">
|
||||
<button class="sp_button sp_tooltip__action sp_node__set-display" data-node-id="" data-is-hidden="0">
|
||||
<span>Hide Pin</span>
|
||||
<span>Show Pin</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="sp_tooltip">
|
||||
<h4 class="sp_tooltip__header">
|
||||
<span></span>
|
||||
{% if is_granted('ROLE_CONTRIBUTOR') %}<span></span>{% endif %}
|
||||
</h4>
|
||||
<div class="sp_tooltip__body"></div>
|
||||
<div class="sp_tooltip__footer" hidden>
|
||||
<div>Screenshots :</div>
|
||||
<div class="sp_tooltip__screenshot-container"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sp_tooltip__cursor"></div>
|
||||
</div>
|
||||
</template>
|
||||
{#<template id="template_radio-input">#}
|
||||
{# <label class="sp_radio__input-wrapper">#}
|
||||
{# <span class="sp_radio__input-icon"></span>#}
|
||||
{# <span class="sp_radio__input-mark"></span>#}
|
||||
{# <span class="sp_radio__input-label"></span>#}
|
||||
{# <input name type value>#}
|
||||
{# </label>#}
|
||||
{#</template>#}
|
||||
{% endblock %}
|
||||
109
templates/woldmap/show.html.twig.bak
Normal file
109
templates/woldmap/show.html.twig.bak
Normal file
@ -0,0 +1,109 @@
|
||||
{% extends 'base.html.twig' %}
|
||||
|
||||
{% set metaRegionName = region.name %}
|
||||
{% for _region in region.subRegions|filter(_region => _region.isAlias and _region.parentRegion.id == region.id) %}
|
||||
{% set metaRegionName = metaRegionName ~ ' and ' ~ _region.name %}
|
||||
{% endfor %}
|
||||
|
||||
{% set metaTitle = title is defined ? title ~ ' - Genshin World' : 'Genshin World' %}
|
||||
{#{% set metaDesc = 'Genshin Impact interactive map of ' ~ metaRegionName ~ '. Find every interest points, events, chests, monsters and materials of Teyvat. Up to date with latest patch.' %}#}
|
||||
{% set metaDesc = 'Genshin Impact interactive map of ' ~ metaRegionName ~ '. Find every interest points, events, chests, monsters and materials of Teyvat.' %}
|
||||
|
||||
{% block meta %}
|
||||
<meta name="title" content="{{ metaTitle }}">
|
||||
<meta name="description" content="{{ metaDesc }}">
|
||||
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:url" content="{{ url('fo_region_show', { 'slug': regionSlug }) }}">
|
||||
<meta property="og:title" content="{{ metaTitle }}">
|
||||
<meta property="og:description" content="{{ metaDesc }}">
|
||||
<meta property="og:image" content="https://genshin-world.com/og.jpg">
|
||||
|
||||
<meta property="twitter:card" content="summary_large_image">
|
||||
<meta property="twitter:url" content="{{ url('fo_region_show', { 'slug': regionSlug }) }}">
|
||||
<meta property="twitter:title" content="{{ metaTitle }}">
|
||||
<meta property="twitter:description" content="{{ metaDesc }}">
|
||||
<meta property="twitter:image" content="https://genshin-world.com/og.jpg">
|
||||
|
||||
<link rel="canonical" href="{{ url('fo_region_show', { 'slug': region.slug }) }}">
|
||||
{% endblock %}
|
||||
|
||||
{% block leftPanel %}
|
||||
{% include 'woldmap/_leftPannel.html.twig' %}
|
||||
{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<h1 id="map-title">{{ metaTitle }}</h1>
|
||||
<div id="worldmap-container" data-region-id="{{ region.slug }}" data-region-name="{{ region.name }}" {% if anchor %}data-anchor="{{ anchor }}"{% endif %}>
|
||||
<div class="sp_grid__container">
|
||||
{% for row in 1..region.gridHeight %}
|
||||
<div class="sp_grid__row">
|
||||
{% for col in 1..region.gridWidth %}
|
||||
<div id="grid-{{ grid[row][col]['id'] }}" class="sp_grid__column">
|
||||
{% set idHash = 'map_g' ~ grid[row][col]['id'] ~ '_v' ~ version %}
|
||||
|
||||
<img id="{{ idHash }}" class="sp_grid__map" {% if grid[row][col]['map_data']['map'].id is not null %}data-src="{{ asset(assets.map.upload_path ~ grid[row][col]['map_data']['map'].file) }}"{% endif %} src="{{ asset(assets.map[region.mapBackground]) }}" alt="{{ region.name }}" draggable="false">
|
||||
<div class="sp_grid__node-container">
|
||||
{% if nodes['grid_' ~ grid[row][col]['id']] is defined %}
|
||||
{% for _node in nodes['grid_' ~ grid[row][col]['id']] %}
|
||||
|
||||
{% include 'woldmap/_node.html.twig' with {'node': _node} %}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
<template id="template_tooltip">
|
||||
<div class="sp_tooltip__wrapper" hidden>
|
||||
{% if is_granted('ROLE_CONTRIBUTOR') %}
|
||||
<div class="sp_tooltip__action-left-wrapper">
|
||||
<form action="" class="sp_tooltip__action sp_node__edit-form sp_form__xhr" method="post">
|
||||
<button class="sp_button" type="submit">
|
||||
<span>Edit node</span>
|
||||
</button>
|
||||
</form>
|
||||
<form action="" class="sp_tooltip__action sp_node_delete-form sp_form__xhr" method="post">
|
||||
<button class="sp_button sp_icon__container" data-type="cancel" type="submit">
|
||||
<img src="{{ asset(assets.img.delete) }}" alt="delete node">
|
||||
</button>
|
||||
</form>
|
||||
{% if is_granted('ROLE_ADMIN') %}
|
||||
<button class="sp_button sp_icon__container sp_node__calc-anchor">
|
||||
<img src="{{ asset(assets.img.ui ~ 'location.png') }}" alt="delete node">
|
||||
</button>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="sp_tooltip__action-right-wrapper">
|
||||
<button class="sp_button sp_tooltip__action sp_node__set-display" data-node-id="" data-is-hidden="0">
|
||||
<span>Hide Pin</span>
|
||||
<span>Show Pin</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="sp_tooltip">
|
||||
<h4 class="sp_tooltip__header">
|
||||
<span></span>
|
||||
{% if is_granted('ROLE_CONTRIBUTOR') %}<span></span>{% endif %}
|
||||
</h4>
|
||||
<div class="sp_tooltip__body"></div>
|
||||
<div class="sp_tooltip__footer" hidden>
|
||||
<div>Screenshots :</div>
|
||||
<div class="sp_tooltip__screenshot-container"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sp_tooltip__cursor"></div>
|
||||
</div>
|
||||
</template>
|
||||
{#<template id="template_radio-input">#}
|
||||
{# <label class="sp_radio__input-wrapper">#}
|
||||
{# <span class="sp_radio__input-icon"></span>#}
|
||||
{# <span class="sp_radio__input-mark"></span>#}
|
||||
{# <span class="sp_radio__input-label"></span>#}
|
||||
{# <input name type value>#}
|
||||
{# </label>#}
|
||||
{#</template>#}
|
||||
{% endblock %}
|
||||
Reference in New Issue
Block a user