Initial commit - Typo3 11.5.41
10
typo3conf/ext/tt_address/Resources/Private/.htaccess
Normal file
@@ -0,0 +1,10 @@
|
||||
# Apache < 2.3
|
||||
<IfModule !mod_authz_core.c>
|
||||
Order allow,deny
|
||||
Deny from all
|
||||
</IfModule>
|
||||
|
||||
# Apache >= 2.3
|
||||
<IfModule mod_authz_core.c>
|
||||
Require all denied
|
||||
</IfModule>
|
||||
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<xliff version="1.0">
|
||||
<file source-language="en" datatype="plaintext" original="messages" date="2017-04-04T12:30:37Z" product-name="tt_address">
|
||||
<header/>
|
||||
<body>
|
||||
<trans-unit id="extbase_title" xml:space="preserve">
|
||||
<source>Addresses</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="extbase_description" xml:space="preserve">
|
||||
<source>Displays one or more addresses.</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
@@ -0,0 +1,89 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<xliff version="1.0">
|
||||
<file source-language="en" datatype="plaintext" original="messages" date="2017-04-05T08:11:35Z" product-name="tt_address">
|
||||
<header/>
|
||||
<body>
|
||||
<trans-unit id="pi1_flexform.sheet_selection" xml:space="preserve">
|
||||
<source>Selection</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="pi1_flexform.single_records" xml:space="preserve">
|
||||
<source>Single addresses</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="pi1_flexform.group_selection" xml:space="preserve">
|
||||
<source>Categories</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="pi1_flexform.includeSubcategories" xml:space="preserve">
|
||||
<source>Include subcategories</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="pi1_flexform.combination" xml:space="preserve">
|
||||
<source>Combination</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="pi1_flexform.combination.and" xml:space="preserve">
|
||||
<source>AND</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="pi1_flexform.combination.or" xml:space="preserve">
|
||||
<source>OR</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="pi1_flexform.sortBy" xml:space="preserve">
|
||||
<source>Sort By</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="pi1_flexform.sortBy.singleSelection" xml:space="preserve">
|
||||
<source>Order of single addresses</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="pi1_flexform.sortBy.sorting" xml:space="preserve" approved="yes">
|
||||
<source>Order of addresses</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="pi1_flexform.sortBy.sorting.default" xml:space="preserve" approved="yes">
|
||||
<source>Default</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="pi1_flexform.sortBy.sorting.sorting" xml:space="preserve" approved="yes">
|
||||
<source>Manual sorting</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="pi1_flexform.sortOrder" xml:space="preserve">
|
||||
<source>Sort Order</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="pi1_flexform.sortOrder.ascending" xml:space="preserve">
|
||||
<source>Ascending</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="pi1_flexform.sortOrder.descending" xml:space="preserve">
|
||||
<source>Descending</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="pi1_flexform.ignoreWithoutCoordinates" xml:space="preserve">
|
||||
<source>Ignore records with no latitude/longitude</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="pi1_flexform.allowOverride" xml:space="preserve">
|
||||
<source>Allow override configuration by GET/POST</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="pi1_flexform.sheet_display" xml:space="preserve">
|
||||
<source>Display</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="pi1_flexform.templateFile" xml:space="preserve">
|
||||
<source>Template</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="pi1_flexform.templateFile.I.0" xml:space="preserve">
|
||||
<source>Default</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="pi1_flexform.displayMode" xml:space="preserve">
|
||||
<source>Select display mode</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="pi1_flexform.displayMode.listView" xml:space="preserve">
|
||||
<source>List view</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="pi1_flexform.displayMode.singleView" xml:space="preserve">
|
||||
<source>Single view</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="pi1_flexform.displayMode.map" xml:space="preserve">
|
||||
<source>Map view</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="pi1_flexform.hidePagination" xml:space="preserve">
|
||||
<source>Do not display pagebrowser (listview)</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="pi1_flexform.itemsPerPage" xml:space="preserve">
|
||||
<source>Number of items to be displayed (listview)</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="pi1_flexform.singlePid" xml:space="preserve">
|
||||
<source>Page for single view</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
@@ -0,0 +1,81 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<xliff version="1.0">
|
||||
<file source-language="en" datatype="plaintext" original="messages" date="2017-04-13T10:24:37Z" product-name="tt_address">
|
||||
<header/>
|
||||
<body>
|
||||
<trans-unit id="label.address" xml:space="preserve">
|
||||
<source>Address</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="label.building" xml:space="preserve">
|
||||
<source>Building</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="label.room" xml:space="preserve">
|
||||
<source>Room</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="label.position" xml:space="preserve">
|
||||
<source>Position</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="label.zip" xml:space="preserve">
|
||||
<source>Postal code</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="label.city" xml:space="preserve">
|
||||
<source>City</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="label.telephone" xml:space="preserve">
|
||||
<source>Telephone</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="label.fax" xml:space="preserve">
|
||||
<source>Fax</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="label.mobile" xml:space="preserve">
|
||||
<source>Mobile phone</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="label.email" xml:space="preserve">
|
||||
<source>E-mail</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="label.www" xml:space="preserve">
|
||||
<source>Go to website</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="label.socialmedia" xml:space="preserve">
|
||||
<source>Social media contacts</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="label.twitter" xml:space="preserve" translate="no">
|
||||
<source>Twitter</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="label.facebook" xml:space="preserve" translate="no">
|
||||
<source>Facebook</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="label.linkedin" xml:space="preserve" translate="no">
|
||||
<source>LinkedIn</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="label.skype" xml:space="preserve" translate="no">
|
||||
<source>Skype</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="label.birthday" xml:space="preserve">
|
||||
<source>Birthday</source>
|
||||
</trans-unit>
|
||||
|
||||
<trans-unit id="paginate_overall" xml:space="preserve">
|
||||
<source>Page %s of %s</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="paginate_next">
|
||||
<source>Next</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="paginate_previous">
|
||||
<source>Previous</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="backToList">
|
||||
<target>Back to list</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="more">
|
||||
<source>More</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="show_on_map">
|
||||
<source>Show on map</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="no_google_maps_key">
|
||||
<source>No Google Maps key provided with TypoScript</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
@@ -0,0 +1,122 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xliff version="1.0" xmlns:t3="http://typo3.org/schemas/xliff">
|
||||
<file t3:id="1502483828" source-language="en" datatype="plaintext" original="messages" date="2017-08-11T20:37:40Z" product-name="tt_address">
|
||||
<header/>
|
||||
<body>
|
||||
<trans-unit id="tt_address">
|
||||
<source>Address</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="tt_address.gender">
|
||||
<source>Gender</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="tt_address.gender.m">
|
||||
<source>Male (Mr)</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="tt_address.gender.f">
|
||||
<source>Female (Mrs)</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="tt_address.gender.v">
|
||||
<source>Various</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="tt_address.gender.undefined">
|
||||
<source>Undefined</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="tt_address.first_name">
|
||||
<source>First Name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="tt_address.middle_name">
|
||||
<source>Middle Name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="tt_address.last_name">
|
||||
<source>Last Name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="tt_address.birthday">
|
||||
<source>Birthday</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="tt_address.building">
|
||||
<source>Building</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="tt_address.room">
|
||||
<source>Room</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="tt_address.organization">
|
||||
<source>Organization</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="tt_address.position">
|
||||
<source>Position</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="tt_address.region">
|
||||
<source>Region / State</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="tt_address.mobile">
|
||||
<source>Mobile</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="tt_address.skype">
|
||||
<source>Skype</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="tt_address.twitter">
|
||||
<source>Twitter</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="tt_address.facebook">
|
||||
<source>Facebook</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="tt_address.instagram">
|
||||
<source>Instagram</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="tt_address.tiktok">
|
||||
<source>TikTok</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="tt_address.linkedin">
|
||||
<source>LinkedIn</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="tt_address.latitude">
|
||||
<source>Latitude</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="tt_address.longitude">
|
||||
<source>Longitude</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="tt_address.title_suffix">
|
||||
<source>Title suffix</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="tt_address.locationMapWizard">
|
||||
<source>Map wizard for visual selection of coordinates</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="tt_address.locationMapWizard.close">
|
||||
<source>Close Map Wizard</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="tt_address.locationMapWizard.import">
|
||||
<source>Import marker-coordinates</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="tt_address_tab.contact">
|
||||
<source>Contact</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="tt_address_tab.address">
|
||||
<source>Address</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="tt_address_palette.name">
|
||||
<source>Name</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="tt_address_palette.organization">
|
||||
<source>Organisation</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="tt_address_palette.address">
|
||||
<source>Address</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="tt_address_palette.building">
|
||||
<source>Building</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="tt_address_palette.contact">
|
||||
<source>Contact</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="tt_address_palette.social">
|
||||
<source>Social Networks</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="tt_address_palette.coordinates">
|
||||
<source>Coordinates</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="pi_tt_address">
|
||||
<source>Addresses</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
@@ -0,0 +1,3 @@
|
||||
<div class="tx-ttaddress">
|
||||
<f:render section="main"/>
|
||||
</div>
|
||||
112
typo3conf/ext/tt_address/Resources/Private/Partials/Address.html
Normal file
@@ -0,0 +1,112 @@
|
||||
{namespace ttaddr=FriendsOfTYPO3\TtAddress\ViewHelpers}
|
||||
|
||||
<f:section name="address">
|
||||
<f:if condition="{address.address}">
|
||||
<div class="address" itemprop="address" itemscope itemtype="http://schema.org/PostalAddress">
|
||||
<address>
|
||||
<span itemprop="streetAddress">{address.address}</span><br>
|
||||
<span itemprop="postalCode">{address.zip}</span> <span
|
||||
itemprop="addressLocality">{address.city}</span><br>
|
||||
<span itemprop="addressCountry">{address.country}</span>
|
||||
</address>
|
||||
</div>
|
||||
</f:if>
|
||||
</f:section>
|
||||
|
||||
<f:section name="position">
|
||||
<f:if condition="{address.position}">
|
||||
<p class="jobTitle" itemprop="jobTitle"><em>{address.position}</em></p>
|
||||
</f:if>
|
||||
</f:section>
|
||||
|
||||
<f:section name="contact">
|
||||
<ul class="list-unstyled">
|
||||
<f:if condition="{address.phone}">
|
||||
<li>
|
||||
<i class="fas fa-phone"></i>
|
||||
{f:translate(key:'label.telephone')}: <a href="tel:{address.cleanedPhone}">
|
||||
<span itemprop="telephone">{address.phone}</span>
|
||||
</a>
|
||||
</li>
|
||||
</f:if>
|
||||
|
||||
<f:if condition="{address.mobile}">
|
||||
<li>
|
||||
<i class="fas fa-mobile-alt"></i>
|
||||
{f:translate(key:'label.mobile')}: <a href="tel:{address.cleanedMobile}">
|
||||
<span itemprop="telephone">{address.mobile}</span>
|
||||
</a>
|
||||
</li>
|
||||
</f:if>
|
||||
|
||||
<f:if condition="{address.fax}">
|
||||
<li>
|
||||
<i class="fas fa-fax"></i>
|
||||
{f:translate(key:'label.fax')}: <span itemprop="faxNumber">{address.fax}</span>
|
||||
</li>
|
||||
</f:if>
|
||||
|
||||
<f:if condition="{address.email}">
|
||||
<li>
|
||||
<i class="fas fa-envelope"></i>
|
||||
{f:translate(key:'label.email')}:
|
||||
<span><f:link.email email="{address.email}" /></span>
|
||||
</li>
|
||||
</f:if>
|
||||
|
||||
<f:if condition="{address.www}">
|
||||
<meta itemprop="url" content="{f:uri.typolink(parameter:address.www)}"/>
|
||||
<li>
|
||||
<i class="fas fa-link"></i>
|
||||
{f:translate(key:'label.www')}:
|
||||
<f:link.typolink parameter="{address.www}">{address.wwwSimplified}</f:link.typolink>
|
||||
</li>
|
||||
</f:if>
|
||||
<f:if condition="{address.birthday}">
|
||||
<meta itemprop="birthDate" content="{address.birthday -> f:format.date(format:'%Y-%m-%d')}">
|
||||
<li>
|
||||
<i class="fas fa-birthday-cake"></i>
|
||||
{f:translate(key:'label.birthday')}: {address.birthday -> f:format.date(format:'%d.%m.%Y')}
|
||||
</li>
|
||||
</f:if>
|
||||
</ul>
|
||||
</f:section>
|
||||
|
||||
<f:section name="social">
|
||||
<f:if condition="{address.skype} || {address.twitter} || {address.facebook} || {address.linkedin}">
|
||||
<ul class="list-inline">
|
||||
<f:if condition="{address.skype}">
|
||||
<li class="list-inline-item">
|
||||
<i class="fab fa-skype" aria-hidden title="{f:translate(key:'label.skype')}"></i>
|
||||
<span class="sr-only">{f:translate(key:'label.skype')}:</span>
|
||||
<a href="skype:{address.skype}?call">{address.skype}</a>
|
||||
<meta itemprop="sameAs" content="skype:{address.skype}?call"/>
|
||||
</li>
|
||||
</f:if>
|
||||
<f:if condition="{address.twitter}">
|
||||
<li class="list-inline-item">
|
||||
<i class="fab fa-twitter" aria-hidden title="{f:translate(key:'label.twitter')}"></i>
|
||||
<span class="sr-only">{f:translate(key:'label.twitter')}:</span>
|
||||
<a href="https://twitter.com/{address.twitter}" target="_blank">{address.twitter}</a>
|
||||
<meta itemprop="sameAs" content="https://twitter.com/{address.twitter}"/>
|
||||
</li>
|
||||
</f:if>
|
||||
<f:if condition="{address.facebook}">
|
||||
<li class="list-inline-item">
|
||||
<i class="fab fa-facebook" aria-hidden title="{f:translate(key:'label.facebook')}"></i>
|
||||
<span class="sr-only">{f:translate(key:'label.facebook')}:</span>
|
||||
<a href="https://www.facebook.com/{address.facebook}" target="_blank">{address.facebook}</a>
|
||||
<meta itemprop="sameAs" content="https://www.facebook.com/{address.facebook}"/>
|
||||
</li>
|
||||
</f:if>
|
||||
<f:if condition="{address.linkedin}">
|
||||
<li class="list-inline-item">
|
||||
<i class="fab fa-linkedin" aria-hidden title="{f:translate(key:'label.linkedin')}"></i>
|
||||
<span class="sr-only">{f:translate(key:'label.linkedin')}:</span>
|
||||
<a href="https://www.linkedin.com/in/{address.linkedin}" target="_blank">{address.linkedin}</a>
|
||||
<meta itemprop="sameAs" content="https://www.linkedin.com/in/{address.linkedin}"/>
|
||||
</li>
|
||||
</f:if>
|
||||
</ul>
|
||||
</f:if>
|
||||
</f:section>
|
||||
109
typo3conf/ext/tt_address/Resources/Private/Partials/Full.html
Normal file
@@ -0,0 +1,109 @@
|
||||
<div class="vcard tt_address_detail" itemscope itemtype="http://schema.org/Person">
|
||||
<h4 itemprop="name">{address.fullName}</h4>
|
||||
<f:render section="position" partial="Address" arguments="{_all}"/>
|
||||
|
||||
<f:if condition="{address.image}">
|
||||
<f:then>
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
<figure class="figure">
|
||||
<f:image image="{address.firstImage}" width="600"
|
||||
class="figure-img img-fluid img-thumbnail rounded"
|
||||
alt="{address.firstImage.originalResource.alt}"
|
||||
title="{address.firstImage.originalResource.title}"
|
||||
additionalAttributes="{itemprop:'image'}"/>
|
||||
<f:if condition="{address.firstImage.originalResource.description}">
|
||||
<figcaption class="figure-caption">
|
||||
{address.firstImage.originalResource.description ->
|
||||
f:format.nl2br()}
|
||||
</figcaption>
|
||||
</f:if>
|
||||
</figure>
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<f:render section="content" arguments="{_all}"/>
|
||||
</div>
|
||||
</div>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:render section="content" arguments="{_all}"/>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</div>
|
||||
|
||||
<f:section name="content">
|
||||
<f:if condition="{address.description}">
|
||||
<div class="description" itemprop="description">
|
||||
{address.description -> f:format.html()}
|
||||
</div>
|
||||
</f:if>
|
||||
|
||||
<f:render section="address" partial="Address" arguments="{_all}"/>
|
||||
|
||||
<f:if condition="{address.building} || {address.room}">
|
||||
<ul class="list-inline">
|
||||
<f:if condition="{address.building}">
|
||||
<li class="list-inline-item">
|
||||
{f:translate(key:'label.building')}: {address.building}
|
||||
</li>
|
||||
</f:if>
|
||||
|
||||
<f:if condition="{address.room}">
|
||||
<li class="list-inline-item">
|
||||
{f:translate(key:'label.room')}: {address.room}
|
||||
</li>
|
||||
</f:if>
|
||||
</ul>
|
||||
</f:if>
|
||||
|
||||
<f:render section="contact" partial="Address" arguments="{_all}"/>
|
||||
<f:render section="social" partial="Address" arguments="{_all}"/>
|
||||
|
||||
<f:if condition="{address.image -> f:count()} > 1">
|
||||
<div class="address-image-rows">
|
||||
<div class="row">
|
||||
<f:for each="{address.image}" as="img" iteration="iterator">
|
||||
<f:if condition="{iterator.cycle}>1">
|
||||
<div class="col-md-4">
|
||||
<figure class="figure">
|
||||
<f:if condition="{img.originalResource.link}">
|
||||
<f:then>
|
||||
<f:link.typolink
|
||||
parameter="{img.originalResource.link}"
|
||||
class="media-object {settings.detail.imageClass}"
|
||||
additionalAttributes="{title:img.originalResource.title}">
|
||||
<f:image image="{img}" width="400"
|
||||
alt="{img.originalResource.alt}"
|
||||
title="{img.originalResource.title}"
|
||||
class="figure-img img-fluid img-thumbnail rounded"
|
||||
additionalAttributes="{itemprop:'image'}"/>
|
||||
</f:link.typolink>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<a href="{f:uri.image(src:img.originalResource.publicUrl, maxWidth:1000)}"
|
||||
class="media-object {settings.detail.imageClass}"
|
||||
rel="images_tt_address_{address.uid}"
|
||||
title="{img.originalResource.title}"
|
||||
target="_blank">
|
||||
<f:image image="{img}" width="400"
|
||||
alt="{img.originalResource.alt}"
|
||||
title="{img.originalResource.title}"
|
||||
class="figure-img img-fluid img-thumbnail rounded"
|
||||
additionalAttributes="{itemprop:'image'}"/>
|
||||
</a>
|
||||
</f:else>
|
||||
</f:if>
|
||||
<f:if condition="{img.originalResource.description}">
|
||||
<figcaption class="figure-caption">
|
||||
{img.originalResource.description -> f:format.nl2br()}
|
||||
</figcaption>
|
||||
</f:if>
|
||||
</figure>
|
||||
</div>
|
||||
</f:if>
|
||||
</f:for>
|
||||
</div>
|
||||
</div>
|
||||
</f:if>
|
||||
|
||||
</f:section>
|
||||
@@ -0,0 +1,32 @@
|
||||
<div class="vcard" itemscope itemtype="http://schema.org/Person">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-2 addressImage">
|
||||
<f:link.action action="show" arguments="{address : address}"
|
||||
title="{address.fullName}"
|
||||
pageUid="{settings.singlePid}">
|
||||
<f:if condition="{address.image}">
|
||||
<f:media file="{address.firstImage}" width="400" class="img-fluid img-thumbnail rounded"
|
||||
alt="{address.firstImage.originalResource.alt}"
|
||||
title="{address.fullName}"/>
|
||||
</f:if>
|
||||
</f:link.action>
|
||||
</div>
|
||||
<div class="col-md-10">
|
||||
<h3>{address.fullName}</h3>
|
||||
<f:if condition="{address.position}">
|
||||
<p class="position"><em>{address.position}</em></p>
|
||||
</f:if>
|
||||
|
||||
<f:render section="address" partial="Address" arguments="{_all}"/>
|
||||
<f:render section="social" partial="Address" arguments="{_all}"/>
|
||||
|
||||
<f:if condition="{settings.singlePid}">
|
||||
<f:link.action action="show" arguments="{address : address}"
|
||||
title="{address.fullName}"
|
||||
pageUid="{settings.singlePid}" class="btn btn-default">{f:translate(key:'more')}
|
||||
</f:link.action>
|
||||
</f:if>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,6 @@
|
||||
<f:widget.paginate objects="{addresses}" as="paginatedAdresses" configuration="{settings.paginate}">
|
||||
<f:for each="{paginatedAdresses}" as="address" iteration="iterator">
|
||||
<f:render partial="ListItem" arguments="{_all}"/>
|
||||
</f:for>
|
||||
</f:widget.paginate>
|
||||
<f:comment><!-- todo: remove with version 8 --></f:comment>
|
||||
@@ -0,0 +1,74 @@
|
||||
{namespace ttaddr=FriendsOfTYPO3\TtAddress\ViewHelpers}
|
||||
|
||||
<f:section name="leaflet">
|
||||
|
||||
<f:render section="rendering" arguments="{_all}"/>
|
||||
|
||||
<f:asset.css identifier="ttaddress-leaflet" href="EXT:tt_address/Resources/Public/Contrib/leaflet-core-1.4.0.css" />
|
||||
<f:asset.css identifier="ttaddress" href="EXT:tt_address/Resources/Public/Styles/basic.css" />
|
||||
<f:asset.script identifier="ttaddress-leaflet-core" src="EXT:tt_address/Resources/Public/JavaScript/leaflet-core-1.4.0.js" />
|
||||
<f:asset.script identifier="ttaddress-leaflet" src="EXT:tt_address/Resources/Public/JavaScript/Frontend/Leaflet.js" />
|
||||
</f:section>
|
||||
|
||||
<f:section name="googleMaps">
|
||||
<f:if condition="{settings.map.googleMaps.key}">
|
||||
<f:then>
|
||||
<f:render section="rendering" arguments="{_all}"/>
|
||||
|
||||
<script src="https://maps.googleapis.com/maps/api/js?key={settings.map.googleMaps.key}"
|
||||
type="text/javascript"></script>
|
||||
<script type="text/javascript" src="{f:uri.resource(path:'JavaScript/Frontend/GoogleMaps.js')}"></script>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<div class="alert alert-danger">{f:translate(key:'no_google_maps_key')}</div>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</f:section>
|
||||
|
||||
<f:section name="staticGoogleMaps">
|
||||
<f:if condition="{settings.map.staticGoogleMaps.parameters.key}">
|
||||
<f:then>
|
||||
<img src="{ttaddr:staticGoogleMaps(parameters:settings.map.staticGoogleMaps.parameters,addresses:addresses)}" />
|
||||
</f:then>
|
||||
<f:else>
|
||||
<div class="alert alert-danger">{f:translate(key:'no_google_maps_key')}</div>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</f:section>
|
||||
|
||||
<f:section name="rendering">
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
<ul class="list-group">
|
||||
<f:for each="{addresses}" as="address" iteration="i">
|
||||
<li id="ttaddress__label-{address.uid}" class="ttaddress__label list-group-item">
|
||||
<strong>{address.fullName}</strong><br>
|
||||
<f:render partial="Address" section="address" arguments="{_all}"/>
|
||||
<a href="#" data-iteration-id="{i.index}" class="ttaddress__markerlink">{f:translate(key:'show_on_map')}</a>
|
||||
</li>
|
||||
</f:for>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-md-9">
|
||||
<div id="ttaddress__map" data-default-lat="{settings.map.defaultPosition.lat}"
|
||||
data-default-lng="{settings.map.defaultPosition.lng}"></div>
|
||||
<ul id="ttaddress__records">
|
||||
<f:for each="{addresses}" as="address">
|
||||
<div id="ttaddress__record-{address.uid}" data-id="{address.uid}" data-lat="{address.latitude}"
|
||||
data-lng="{address.longitude}" data-icon="icon">
|
||||
<h6>{address.fullName}</h6>
|
||||
<div>
|
||||
<f:render partial="Address" section="address" arguments="{_all}"/>
|
||||
<f:render partial="Address" section="contact" arguments="{_all}"/>
|
||||
<f:if condition="{settings.singlePid}">
|
||||
<f:link.action action="show" arguments="{address : address}" title="{address.fullName}" class="btn"
|
||||
pageUid="{settings.singlePid}">{f:translate(key:'more')}
|
||||
</f:link.action>
|
||||
</f:if>
|
||||
</div>
|
||||
</div>
|
||||
</f:for>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</f:section>
|
||||
@@ -0,0 +1,9 @@
|
||||
<html
|
||||
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
xmlns:ttaddr="http://typo3.org/ns/FriendsOfTYPO3/TtAddress/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true">
|
||||
|
||||
<f:variable name="address">{address.fullName} {f:if(condition: address.phone,then:'☎ {address.phone}')} {f:if(condition: address.addressInOneLine,then:'➤ {address.addressInOneLine}')}</f:variable>
|
||||
<ttaddr:metaTag property="description">{address}</ttaddr:metaTag>
|
||||
<ttaddr:metaTag property="og:description">{address}</ttaddr:metaTag>
|
||||
</html>
|
||||
@@ -0,0 +1,52 @@
|
||||
<ul class="f3-widget-paginator">
|
||||
<f:if condition="{pagination.previousPageNumber} && {pagination.previousPageNumber} >= {pagination.firstPageNumber}">
|
||||
<f:then>
|
||||
<f:comment>
|
||||
<li class="first">
|
||||
<a href="{f:uri.action(action:actionName, arguments:{currentPage: 1})}" title="{f:translate(key:'pagination.first')}">
|
||||
<i class="material-icons">first_page</i>
|
||||
</a>
|
||||
</li>
|
||||
</f:comment>
|
||||
<li class="previous">
|
||||
<a href="{f:uri.action(action:actionName, arguments:{currentPage: pagination.previousPageNumber})}" title="{f:translate(key:'widget.pagination.previous', extensionName: 'fluid')}">
|
||||
{f:translate(key:'widget.pagination.previous', extensionName: 'fluid')}
|
||||
</a>
|
||||
</li>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:comment>
|
||||
<li class="disabled"><span><i class="material-icons">first_page</i></span></li>
|
||||
<li class="disabled"><span>{f:translate(key:'widget.pagination.previous', extensionName: 'fluid')}</span></li>
|
||||
</f:comment>
|
||||
</f:else>
|
||||
</f:if>
|
||||
<f:for each="{pagination.allPageNumbers}" as="page">
|
||||
<li class="{f:if(condition: '{page} == {paginator.currentPageNumber}', then:'current')}">
|
||||
<a href="{f:uri.action(action:actionName, arguments:{currentPage: page})}">{page}</a>
|
||||
</li>
|
||||
</f:for>
|
||||
|
||||
<f:if condition="{pagination.nextPageNumber} && {pagination.nextPageNumber} <= {pagination.lastPageNumber}">
|
||||
<f:then>
|
||||
<li class="next">
|
||||
<a href="{f:uri.action(action:actionName, arguments:{currentPage: pagination.nextPageNumber})}" title="{f:translate(key:'widget.pagination.next', extensionName: 'fluid')}">
|
||||
{f:translate(key:'widget.pagination.next', extensionName: 'fluid')}
|
||||
</a>
|
||||
</li>
|
||||
<f:comment>
|
||||
<li class="last">
|
||||
<a href="{f:uri.action(action:actionName, arguments:{currentPage: pagination.lastPageNumber})}" title="{f:translate(key:'pagination.last')}">
|
||||
last
|
||||
</a>
|
||||
</li>
|
||||
</f:comment>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:comment>
|
||||
<li class="disabled"><span>{f:translate(key:'widget.pagination.previous', extensionName: 'fluid')}</span></li>
|
||||
<li class="disabled"><span>last page</span></li>
|
||||
</f:comment>
|
||||
</f:else>
|
||||
</f:if>
|
||||
</ul>
|
||||
@@ -0,0 +1,40 @@
|
||||
<f:layout name="Default"/>
|
||||
|
||||
<f:section name="main">
|
||||
<div class="tt_address_list">
|
||||
<f:render section="displayMode_{settings.displayMode}" arguments="{_all}" />
|
||||
</div>
|
||||
</f:section>
|
||||
|
||||
<f:section name="displayMode_list">
|
||||
<!--TYPO3SEARCH_end-->
|
||||
<f:if condition="{settings.hidePagination}">
|
||||
<f:then>
|
||||
<f:for each="{addresses}" as="address" iteration="iterator">
|
||||
<f:render partial="ListItem" arguments="{_all}"/>
|
||||
</f:for>
|
||||
</f:then>
|
||||
<f:else>
|
||||
<f:if condition="{settings.paginate.insertAbove}">
|
||||
<f:render partial="Pagination" arguments="{pagination: pagination.pagination, pages: pagination.pages, paginator: pagination.paginator}" />
|
||||
</f:if>
|
||||
<f:for each="{pagination.paginator.paginatedItems}" as="address" iteration="iterator">
|
||||
<f:render partial="ListItem" arguments="{_all}"/>
|
||||
</f:for>
|
||||
<f:if condition="{settings.paginate.insertBelow}">
|
||||
<f:render partial="Pagination" arguments="{pagination: pagination.pagination, pages: pagination.pages, paginator: pagination.paginator}" />
|
||||
</f:if>
|
||||
</f:else>
|
||||
</f:if>
|
||||
<!--TYPO3SEARCH_begin-->
|
||||
</f:section>
|
||||
|
||||
<f:section name="displayMode_single">
|
||||
<f:for each="{addresses}" as="address">
|
||||
<f:render partial="Full" arguments="{_all}"/>
|
||||
</f:for>
|
||||
</f:section>
|
||||
|
||||
<f:section name="displayMode_map">
|
||||
<f:render partial="Maps" section="{settings.map.rendering}" arguments="{_all}"/>
|
||||
</f:section>
|
||||
@@ -0,0 +1,6 @@
|
||||
<f:layout name="Default"/>
|
||||
|
||||
<f:section name="main">
|
||||
<f:render partial="MetaTags" arguments="{_all}" />
|
||||
<f:render partial="Full" arguments="{_all}"/>
|
||||
</f:section>
|
||||
@@ -0,0 +1,95 @@
|
||||
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
|
||||
xmlns:core="http://typo3.org/ns/TYPO3/CMS/Core/ViewHelpers"
|
||||
data-namespace-typo3-fluid="true">
|
||||
|
||||
<f:variable name="flex">{pi_flexform_transformed.settings}</f:variable>
|
||||
<table class="table table-condensed table-triped">
|
||||
<thead>
|
||||
<tr>
|
||||
<td colspan="2"><strong>{f:translate(key:'LLL:EXT:tt_address/Resources/Private/Language/db/locallang.xlf:extbase_title')}</strong>
|
||||
</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<f:if condition="{flex.displayMode}">
|
||||
<tr>
|
||||
<th>{f:translate(key:'{_computed.lll}displayMode')}</th>
|
||||
<td>
|
||||
<f:switch expression="{flex.displayMode}">
|
||||
<f:case value="list">{f:translate(key:'{_computed.lll}displayMode.listView')}</f:case>
|
||||
<f:case value="single">{f:translate(key:'{_computed.lll}displayMode.singleView')}
|
||||
</f:case>
|
||||
<f:case value="map">{f:translate(key:'{_computed.lll}displayMode.map')}</f:case>
|
||||
<f:defaultCase>{flex.displayMode}</f:defaultCase>
|
||||
</f:switch>
|
||||
</td>
|
||||
</tr>
|
||||
</f:if>
|
||||
<f:if condition="{_computed.singleRecords}">
|
||||
<tr>
|
||||
<th>{f:translate(key:'{_computed.lll}single_records')}</th>
|
||||
<td>
|
||||
<f:for each="{_computed.singleRecords}" as="row">
|
||||
<f:render section="rowElement" arguments="{table:'tt_address', row:row}"/>
|
||||
</f:for>
|
||||
</td>
|
||||
</tr>
|
||||
</f:if>
|
||||
<f:if condition="{_computed.pages}">
|
||||
<tr>
|
||||
<th>{f:translate(key:'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.startingpoint')}
|
||||
</th>
|
||||
<td>
|
||||
<f:for each="{_computed.pages}" as="row">
|
||||
<f:render section="rowElement" arguments="{table:'pages', row:row}"/>
|
||||
</f:for>
|
||||
<f:if condition="{flex.recursive}">
|
||||
{f:translate(key:'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.recursive')}:
|
||||
{f:translate(key:'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:recursive.I.{flex.recursive}')}
|
||||
</f:if>
|
||||
</td>
|
||||
</tr>
|
||||
</f:if>
|
||||
<f:if condition="{_computed.singlePid}">
|
||||
<tr>
|
||||
<th>{f:translate(key:'{_computed.lll}singlePid')}</th>
|
||||
<td>
|
||||
<f:render section="rowElement" arguments="{table:'pages', row:_computed.singlePid}"/>
|
||||
</td>
|
||||
</tr>
|
||||
</f:if>
|
||||
<f:if condition="{_computed.groups}">
|
||||
<tr>
|
||||
<th>{f:translate(key:'{_computed.lll}group_selection')}</th>
|
||||
<td>
|
||||
<f:for each="{_computed.groups}" as="row">
|
||||
<f:render section="rowElement" arguments="{table:'sys_category', row:row}"/>
|
||||
</f:for>
|
||||
<hr style="margin:5px"/>
|
||||
{f:translate(key:'{_computed.lll}combination')}:
|
||||
<f:if condition="{flex.groupsCombination}">
|
||||
<f:then>
|
||||
{f:translate(key:'{_computed.lll}combination.or')}
|
||||
</f:then>
|
||||
<f:else>
|
||||
{f:translate(key:'{_computed.lll}combination.and')}
|
||||
</f:else>
|
||||
</f:if>
|
||||
<br>
|
||||
<f:if condition="{flex.includeSubcategories}">
|
||||
<core:icon identifier="actions-check" size="small"/>
|
||||
{f:translate(key:'{_computed.lll}includeSubcategories')}
|
||||
</f:if>
|
||||
</td>
|
||||
</tr>
|
||||
</f:if>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<f:section name="rowElement">
|
||||
<a href="#" class="t3js-contextmenutrigger" data-table="{table}" data-uid="{row.uid}" title="id={row.uid}">
|
||||
<core:iconForRecord row="{row}" table="{table}"/>
|
||||
</a>
|
||||
{row._computed.title}<br>
|
||||
</f:section>
|
||||
</html>
|
||||
@@ -0,0 +1,39 @@
|
||||
#t3js-location-map-wrap {
|
||||
position: absolute;
|
||||
width: 80vw;
|
||||
height: 80vh;
|
||||
top: 6vh;
|
||||
left: 10vw;
|
||||
opacity: 0;
|
||||
box-shadow: 0 2px 15px #000;
|
||||
transition: opacity 1500ms;
|
||||
z-index: -1;
|
||||
}
|
||||
|
||||
#t3js-location-map-wrap.active {
|
||||
opacity: 1;
|
||||
z-index: 999;
|
||||
}
|
||||
|
||||
.t3js-location-map-container {
|
||||
width: 100%;
|
||||
height: calc(100% - 40px);
|
||||
border: 1px solid #CCC;
|
||||
}
|
||||
|
||||
.t3js-location-map-title>div.btn-group {
|
||||
position: absolute;
|
||||
left: 15px;
|
||||
}
|
||||
|
||||
.t3js-location-map-title a {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.t3js-location-map-title {
|
||||
background: rgb(237, 237, 237);
|
||||
font-family: Share, Verdana, Arial, Helvetica, sans-serif;
|
||||
font-size: 20px;
|
||||
padding: 5px 15px;
|
||||
text-align: center;
|
||||
}
|
||||
BIN
typo3conf/ext/tt_address/Resources/Public/Contrib/layers-2x.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
typo3conf/ext/tt_address/Resources/Public/Contrib/layers.png
Normal file
|
After Width: | Height: | Size: 696 B |
@@ -0,0 +1,635 @@
|
||||
/* required styles */
|
||||
|
||||
.leaflet-pane,
|
||||
.leaflet-tile,
|
||||
.leaflet-marker-icon,
|
||||
.leaflet-marker-shadow,
|
||||
.leaflet-tile-container,
|
||||
.leaflet-pane > svg,
|
||||
.leaflet-pane > canvas,
|
||||
.leaflet-zoom-box,
|
||||
.leaflet-image-layer,
|
||||
.leaflet-layer {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
}
|
||||
.leaflet-container {
|
||||
overflow: hidden;
|
||||
}
|
||||
.leaflet-tile,
|
||||
.leaflet-marker-icon,
|
||||
.leaflet-marker-shadow {
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
user-select: none;
|
||||
-webkit-user-drag: none;
|
||||
}
|
||||
/* Safari renders non-retina tile on retina better with this, but Chrome is worse */
|
||||
.leaflet-safari .leaflet-tile {
|
||||
image-rendering: -webkit-optimize-contrast;
|
||||
}
|
||||
/* hack that prevents hw layers "stretching" when loading new tiles */
|
||||
.leaflet-safari .leaflet-tile-container {
|
||||
width: 1600px;
|
||||
height: 1600px;
|
||||
-webkit-transform-origin: 0 0;
|
||||
}
|
||||
.leaflet-marker-icon,
|
||||
.leaflet-marker-shadow {
|
||||
display: block;
|
||||
}
|
||||
/* .leaflet-container svg: reset svg max-width decleration shipped in Joomla! (joomla.org) 3.x */
|
||||
/* .leaflet-container img: map is broken in FF if you have max-width: 100% on tiles */
|
||||
.leaflet-container .leaflet-overlay-pane svg,
|
||||
.leaflet-container .leaflet-marker-pane img,
|
||||
.leaflet-container .leaflet-shadow-pane img,
|
||||
.leaflet-container .leaflet-tile-pane img,
|
||||
.leaflet-container img.leaflet-image-layer,
|
||||
.leaflet-container .leaflet-tile {
|
||||
max-width: none !important;
|
||||
max-height: none !important;
|
||||
}
|
||||
|
||||
.leaflet-container.leaflet-touch-zoom {
|
||||
-ms-touch-action: pan-x pan-y;
|
||||
touch-action: pan-x pan-y;
|
||||
}
|
||||
.leaflet-container.leaflet-touch-drag {
|
||||
-ms-touch-action: pinch-zoom;
|
||||
/* Fallback for FF which doesn't support pinch-zoom */
|
||||
touch-action: none;
|
||||
touch-action: pinch-zoom;
|
||||
}
|
||||
.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom {
|
||||
-ms-touch-action: none;
|
||||
touch-action: none;
|
||||
}
|
||||
.leaflet-container {
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
}
|
||||
.leaflet-container a {
|
||||
-webkit-tap-highlight-color: rgba(51, 181, 229, 0.4);
|
||||
}
|
||||
.leaflet-tile {
|
||||
filter: inherit;
|
||||
visibility: hidden;
|
||||
}
|
||||
.leaflet-tile-loaded {
|
||||
visibility: inherit;
|
||||
}
|
||||
.leaflet-zoom-box {
|
||||
width: 0;
|
||||
height: 0;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
z-index: 800;
|
||||
}
|
||||
/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */
|
||||
.leaflet-overlay-pane svg {
|
||||
-moz-user-select: none;
|
||||
}
|
||||
|
||||
.leaflet-pane { z-index: 400; }
|
||||
|
||||
.leaflet-tile-pane { z-index: 200; }
|
||||
.leaflet-overlay-pane { z-index: 400; }
|
||||
.leaflet-shadow-pane { z-index: 500; }
|
||||
.leaflet-marker-pane { z-index: 600; }
|
||||
.leaflet-tooltip-pane { z-index: 650; }
|
||||
.leaflet-popup-pane { z-index: 700; }
|
||||
|
||||
.leaflet-map-pane canvas { z-index: 100; }
|
||||
.leaflet-map-pane svg { z-index: 200; }
|
||||
|
||||
.leaflet-vml-shape {
|
||||
width: 1px;
|
||||
height: 1px;
|
||||
}
|
||||
.lvml {
|
||||
behavior: url(#default#VML);
|
||||
display: inline-block;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
|
||||
/* control positioning */
|
||||
|
||||
.leaflet-control {
|
||||
position: relative;
|
||||
z-index: 800;
|
||||
pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
|
||||
pointer-events: auto;
|
||||
}
|
||||
.leaflet-top,
|
||||
.leaflet-bottom {
|
||||
position: absolute;
|
||||
z-index: 1000;
|
||||
pointer-events: none;
|
||||
}
|
||||
.leaflet-top {
|
||||
top: 0;
|
||||
}
|
||||
.leaflet-right {
|
||||
right: 0;
|
||||
}
|
||||
.leaflet-bottom {
|
||||
bottom: 0;
|
||||
}
|
||||
.leaflet-left {
|
||||
left: 0;
|
||||
}
|
||||
.leaflet-control {
|
||||
float: left;
|
||||
clear: both;
|
||||
}
|
||||
.leaflet-right .leaflet-control {
|
||||
float: right;
|
||||
}
|
||||
.leaflet-top .leaflet-control {
|
||||
margin-top: 10px;
|
||||
}
|
||||
.leaflet-bottom .leaflet-control {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.leaflet-left .leaflet-control {
|
||||
margin-left: 10px;
|
||||
}
|
||||
.leaflet-right .leaflet-control {
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
|
||||
/* zoom and fade animations */
|
||||
|
||||
.leaflet-fade-anim .leaflet-tile {
|
||||
will-change: opacity;
|
||||
}
|
||||
.leaflet-fade-anim .leaflet-popup {
|
||||
opacity: 0;
|
||||
-webkit-transition: opacity 0.2s linear;
|
||||
-moz-transition: opacity 0.2s linear;
|
||||
transition: opacity 0.2s linear;
|
||||
}
|
||||
.leaflet-fade-anim .leaflet-map-pane .leaflet-popup {
|
||||
opacity: 1;
|
||||
}
|
||||
.leaflet-zoom-animated {
|
||||
-webkit-transform-origin: 0 0;
|
||||
-ms-transform-origin: 0 0;
|
||||
transform-origin: 0 0;
|
||||
}
|
||||
.leaflet-zoom-anim .leaflet-zoom-animated {
|
||||
will-change: transform;
|
||||
}
|
||||
.leaflet-zoom-anim .leaflet-zoom-animated {
|
||||
-webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1);
|
||||
-moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1);
|
||||
transition: transform 0.25s cubic-bezier(0,0,0.25,1);
|
||||
}
|
||||
.leaflet-zoom-anim .leaflet-tile,
|
||||
.leaflet-pan-anim .leaflet-tile {
|
||||
-webkit-transition: none;
|
||||
-moz-transition: none;
|
||||
transition: none;
|
||||
}
|
||||
|
||||
.leaflet-zoom-anim .leaflet-zoom-hide {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
|
||||
/* cursors */
|
||||
|
||||
.leaflet-interactive {
|
||||
cursor: pointer;
|
||||
}
|
||||
.leaflet-grab {
|
||||
cursor: -webkit-grab;
|
||||
cursor: -moz-grab;
|
||||
cursor: grab;
|
||||
}
|
||||
.leaflet-crosshair,
|
||||
.leaflet-crosshair .leaflet-interactive {
|
||||
cursor: crosshair;
|
||||
}
|
||||
.leaflet-popup-pane,
|
||||
.leaflet-control {
|
||||
cursor: auto;
|
||||
}
|
||||
.leaflet-dragging .leaflet-grab,
|
||||
.leaflet-dragging .leaflet-grab .leaflet-interactive,
|
||||
.leaflet-dragging .leaflet-marker-draggable {
|
||||
cursor: move;
|
||||
cursor: -webkit-grabbing;
|
||||
cursor: -moz-grabbing;
|
||||
cursor: grabbing;
|
||||
}
|
||||
|
||||
/* marker & overlays interactivity */
|
||||
.leaflet-marker-icon,
|
||||
.leaflet-marker-shadow,
|
||||
.leaflet-image-layer,
|
||||
.leaflet-pane > svg path,
|
||||
.leaflet-tile-container {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.leaflet-marker-icon.leaflet-interactive,
|
||||
.leaflet-image-layer.leaflet-interactive,
|
||||
.leaflet-pane > svg path.leaflet-interactive {
|
||||
pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
|
||||
pointer-events: auto;
|
||||
}
|
||||
|
||||
/* visual tweaks */
|
||||
|
||||
.leaflet-container {
|
||||
background: #ddd;
|
||||
outline: 0;
|
||||
}
|
||||
.leaflet-container a {
|
||||
color: #0078A8;
|
||||
}
|
||||
.leaflet-container a.leaflet-active {
|
||||
outline: 2px solid orange;
|
||||
}
|
||||
.leaflet-zoom-box {
|
||||
border: 2px dotted #38f;
|
||||
background: rgba(255,255,255,0.5);
|
||||
}
|
||||
|
||||
|
||||
/* general typography */
|
||||
.leaflet-container {
|
||||
font: 12px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif;
|
||||
}
|
||||
|
||||
|
||||
/* general toolbar styles */
|
||||
|
||||
.leaflet-bar {
|
||||
box-shadow: 0 1px 5px rgba(0,0,0,0.65);
|
||||
border-radius: 4px;
|
||||
}
|
||||
.leaflet-bar a,
|
||||
.leaflet-bar a:hover {
|
||||
background-color: #fff;
|
||||
border-bottom: 1px solid #ccc;
|
||||
width: 26px;
|
||||
height: 26px;
|
||||
line-height: 26px;
|
||||
display: block;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
color: black;
|
||||
}
|
||||
.leaflet-bar a,
|
||||
.leaflet-control-layers-toggle {
|
||||
background-position: 50% 50%;
|
||||
background-repeat: no-repeat;
|
||||
display: block;
|
||||
}
|
||||
.leaflet-bar a:hover {
|
||||
background-color: #f4f4f4;
|
||||
}
|
||||
.leaflet-bar a:first-child {
|
||||
border-top-left-radius: 4px;
|
||||
border-top-right-radius: 4px;
|
||||
}
|
||||
.leaflet-bar a:last-child {
|
||||
border-bottom-left-radius: 4px;
|
||||
border-bottom-right-radius: 4px;
|
||||
border-bottom: none;
|
||||
}
|
||||
.leaflet-bar a.leaflet-disabled {
|
||||
cursor: default;
|
||||
background-color: #f4f4f4;
|
||||
color: #bbb;
|
||||
}
|
||||
|
||||
.leaflet-touch .leaflet-bar a {
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
}
|
||||
.leaflet-touch .leaflet-bar a:first-child {
|
||||
border-top-left-radius: 2px;
|
||||
border-top-right-radius: 2px;
|
||||
}
|
||||
.leaflet-touch .leaflet-bar a:last-child {
|
||||
border-bottom-left-radius: 2px;
|
||||
border-bottom-right-radius: 2px;
|
||||
}
|
||||
|
||||
/* zoom control */
|
||||
|
||||
.leaflet-control-zoom-in,
|
||||
.leaflet-control-zoom-out {
|
||||
font: bold 18px 'Lucida Console', Monaco, monospace;
|
||||
text-indent: 1px;
|
||||
}
|
||||
|
||||
.leaflet-touch .leaflet-control-zoom-in, .leaflet-touch .leaflet-control-zoom-out {
|
||||
font-size: 22px;
|
||||
}
|
||||
|
||||
|
||||
/* layers control */
|
||||
|
||||
.leaflet-control-layers {
|
||||
box-shadow: 0 1px 5px rgba(0,0,0,0.4);
|
||||
background: #fff;
|
||||
border-radius: 5px;
|
||||
}
|
||||
.leaflet-control-layers-toggle {
|
||||
background-image: url(./layers.png);
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
}
|
||||
.leaflet-retina .leaflet-control-layers-toggle {
|
||||
background-image: url(./layers-2x.png);
|
||||
background-size: 26px 26px;
|
||||
}
|
||||
.leaflet-touch .leaflet-control-layers-toggle {
|
||||
width: 44px;
|
||||
height: 44px;
|
||||
}
|
||||
.leaflet-control-layers .leaflet-control-layers-list,
|
||||
.leaflet-control-layers-expanded .leaflet-control-layers-toggle {
|
||||
display: none;
|
||||
}
|
||||
.leaflet-control-layers-expanded .leaflet-control-layers-list {
|
||||
display: block;
|
||||
position: relative;
|
||||
}
|
||||
.leaflet-control-layers-expanded {
|
||||
padding: 6px 10px 6px 6px;
|
||||
color: #333;
|
||||
background: #fff;
|
||||
}
|
||||
.leaflet-control-layers-scrollbar {
|
||||
overflow-y: scroll;
|
||||
overflow-x: hidden;
|
||||
padding-right: 5px;
|
||||
}
|
||||
.leaflet-control-layers-selector {
|
||||
margin-top: 2px;
|
||||
position: relative;
|
||||
top: 1px;
|
||||
}
|
||||
.leaflet-control-layers label {
|
||||
display: block;
|
||||
}
|
||||
.leaflet-control-layers-separator {
|
||||
height: 0;
|
||||
border-top: 1px solid #ddd;
|
||||
margin: 5px -10px 5px -6px;
|
||||
}
|
||||
|
||||
/* Default icon URLs */
|
||||
.leaflet-default-icon-path {
|
||||
background-image: url(./marker-icon.png);
|
||||
}
|
||||
|
||||
|
||||
/* attribution and scale controls */
|
||||
|
||||
.leaflet-container .leaflet-control-attribution {
|
||||
background: #fff;
|
||||
background: rgba(255, 255, 255, 0.7);
|
||||
margin: 0;
|
||||
}
|
||||
.leaflet-control-attribution,
|
||||
.leaflet-control-scale-line {
|
||||
padding: 0 5px;
|
||||
color: #333;
|
||||
}
|
||||
.leaflet-control-attribution a {
|
||||
text-decoration: none;
|
||||
}
|
||||
.leaflet-control-attribution a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
.leaflet-container .leaflet-control-attribution,
|
||||
.leaflet-container .leaflet-control-scale {
|
||||
font-size: 11px;
|
||||
}
|
||||
.leaflet-left .leaflet-control-scale {
|
||||
margin-left: 5px;
|
||||
}
|
||||
.leaflet-bottom .leaflet-control-scale {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
.leaflet-control-scale-line {
|
||||
border: 2px solid #777;
|
||||
border-top: none;
|
||||
line-height: 1.1;
|
||||
padding: 2px 5px 1px;
|
||||
font-size: 11px;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
|
||||
background: #fff;
|
||||
background: rgba(255, 255, 255, 0.5);
|
||||
}
|
||||
.leaflet-control-scale-line:not(:first-child) {
|
||||
border-top: 2px solid #777;
|
||||
border-bottom: none;
|
||||
margin-top: -2px;
|
||||
}
|
||||
.leaflet-control-scale-line:not(:first-child):not(:last-child) {
|
||||
border-bottom: 2px solid #777;
|
||||
}
|
||||
|
||||
.leaflet-touch .leaflet-control-attribution,
|
||||
.leaflet-touch .leaflet-control-layers,
|
||||
.leaflet-touch .leaflet-bar {
|
||||
box-shadow: none;
|
||||
}
|
||||
.leaflet-touch .leaflet-control-layers,
|
||||
.leaflet-touch .leaflet-bar {
|
||||
border: 2px solid rgba(0,0,0,0.2);
|
||||
background-clip: padding-box;
|
||||
}
|
||||
|
||||
|
||||
/* popup */
|
||||
|
||||
.leaflet-popup {
|
||||
position: absolute;
|
||||
text-align: center;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.leaflet-popup-content-wrapper {
|
||||
padding: 1px;
|
||||
text-align: left;
|
||||
border-radius: 12px;
|
||||
}
|
||||
.leaflet-popup-content {
|
||||
margin: 13px 19px;
|
||||
line-height: 1.4;
|
||||
}
|
||||
.leaflet-popup-content p {
|
||||
margin: 18px 0;
|
||||
}
|
||||
.leaflet-popup-tip-container {
|
||||
width: 40px;
|
||||
height: 20px;
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
margin-left: -20px;
|
||||
overflow: hidden;
|
||||
pointer-events: none;
|
||||
}
|
||||
.leaflet-popup-tip {
|
||||
width: 17px;
|
||||
height: 17px;
|
||||
padding: 1px;
|
||||
|
||||
margin: -10px auto 0;
|
||||
|
||||
-webkit-transform: rotate(45deg);
|
||||
-moz-transform: rotate(45deg);
|
||||
-ms-transform: rotate(45deg);
|
||||
transform: rotate(45deg);
|
||||
}
|
||||
.leaflet-popup-content-wrapper,
|
||||
.leaflet-popup-tip {
|
||||
background: white;
|
||||
color: #333;
|
||||
box-shadow: 0 3px 14px rgba(0,0,0,0.4);
|
||||
}
|
||||
.leaflet-container a.leaflet-popup-close-button {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
padding: 4px 4px 0 0;
|
||||
border: none;
|
||||
text-align: center;
|
||||
width: 18px;
|
||||
height: 14px;
|
||||
font: 16px/14px Tahoma, Verdana, sans-serif;
|
||||
color: #c3c3c3;
|
||||
text-decoration: none;
|
||||
font-weight: bold;
|
||||
background: transparent;
|
||||
}
|
||||
.leaflet-container a.leaflet-popup-close-button:hover {
|
||||
color: #999;
|
||||
}
|
||||
.leaflet-popup-scrolled {
|
||||
overflow: auto;
|
||||
border-bottom: 1px solid #ddd;
|
||||
border-top: 1px solid #ddd;
|
||||
}
|
||||
|
||||
.leaflet-oldie .leaflet-popup-content-wrapper {
|
||||
zoom: 1;
|
||||
}
|
||||
.leaflet-oldie .leaflet-popup-tip {
|
||||
width: 24px;
|
||||
margin: 0 auto;
|
||||
|
||||
-ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)";
|
||||
filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678);
|
||||
}
|
||||
.leaflet-oldie .leaflet-popup-tip-container {
|
||||
margin-top: -1px;
|
||||
}
|
||||
|
||||
.leaflet-oldie .leaflet-control-zoom,
|
||||
.leaflet-oldie .leaflet-control-layers,
|
||||
.leaflet-oldie .leaflet-popup-content-wrapper,
|
||||
.leaflet-oldie .leaflet-popup-tip {
|
||||
border: 1px solid #999;
|
||||
}
|
||||
|
||||
|
||||
/* div icon */
|
||||
|
||||
.leaflet-div-icon {
|
||||
background: #fff;
|
||||
border: 1px solid #666;
|
||||
}
|
||||
|
||||
|
||||
/* Tooltip */
|
||||
/* Base styles for the element that has a tooltip */
|
||||
.leaflet-tooltip {
|
||||
position: absolute;
|
||||
padding: 6px;
|
||||
background-color: #fff;
|
||||
border: 1px solid #fff;
|
||||
border-radius: 3px;
|
||||
color: #222;
|
||||
white-space: nowrap;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
pointer-events: none;
|
||||
box-shadow: 0 1px 3px rgba(0,0,0,0.4);
|
||||
}
|
||||
.leaflet-tooltip.leaflet-clickable {
|
||||
cursor: pointer;
|
||||
pointer-events: auto;
|
||||
}
|
||||
.leaflet-tooltip-top:before,
|
||||
.leaflet-tooltip-bottom:before,
|
||||
.leaflet-tooltip-left:before,
|
||||
.leaflet-tooltip-right:before {
|
||||
position: absolute;
|
||||
pointer-events: none;
|
||||
border: 6px solid transparent;
|
||||
background: transparent;
|
||||
content: "";
|
||||
}
|
||||
|
||||
/* Directions */
|
||||
|
||||
.leaflet-tooltip-bottom {
|
||||
margin-top: 6px;
|
||||
}
|
||||
.leaflet-tooltip-top {
|
||||
margin-top: -6px;
|
||||
}
|
||||
.leaflet-tooltip-bottom:before,
|
||||
.leaflet-tooltip-top:before {
|
||||
left: 50%;
|
||||
margin-left: -6px;
|
||||
}
|
||||
.leaflet-tooltip-top:before {
|
||||
bottom: 0;
|
||||
margin-bottom: -12px;
|
||||
border-top-color: #fff;
|
||||
}
|
||||
.leaflet-tooltip-bottom:before {
|
||||
top: 0;
|
||||
margin-top: -12px;
|
||||
margin-left: -6px;
|
||||
border-bottom-color: #fff;
|
||||
}
|
||||
.leaflet-tooltip-left {
|
||||
margin-left: -6px;
|
||||
}
|
||||
.leaflet-tooltip-right {
|
||||
margin-left: 6px;
|
||||
}
|
||||
.leaflet-tooltip-left:before,
|
||||
.leaflet-tooltip-right:before {
|
||||
top: 50%;
|
||||
margin-top: -6px;
|
||||
}
|
||||
.leaflet-tooltip-left:before {
|
||||
right: 0;
|
||||
margin-right: -12px;
|
||||
border-left-color: #fff;
|
||||
}
|
||||
.leaflet-tooltip-right:before {
|
||||
left: 0;
|
||||
margin-left: -12px;
|
||||
border-right-color: #fff;
|
||||
}
|
||||
|
After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 618 B |
@@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
|
||||
<rect width="16" height="12" y="2" fill="#151515" color="#000" overflow="visible" rx="1.4" ry="1.4" style="isolation:auto;mix-blend-mode:normal"/>
|
||||
<path fill="#fff" d="M1.7 3c-.389 0-.7.311-.7.7v8.6c0 .389.311.7.7.7h1.728a1.15 1.15 0 0 1-.028-.25 1.15 1.15 0 0 1 1.15-1.15 1.15 1.15 0 0 1 1.15 1.15 1.15 1.15 0 0 1-.028.25h4.656a1.15 1.15 0 0 1-.027-.25 1.15 1.15 0 0 1 1.148-1.15 1.15 1.15 0 0 1 1.15 1.15 1.15 1.15 0 0 1-.029.25h1.73c.389 0 .7-.311.7-.7V3.7c0-.389-.311-.7-.7-.7H1.7zm4.015 1.05A2.294 2.294 0 0 1 8 6.337c0 .612-.248 1.168-.645 1.58 1.06.585 1.788 1.7 1.788 2.99H8a2.276 2.276 0 0 0-2.285-2.285 2.277 2.277 0 0 0-2.287 2.285H2.285c0-1.29.73-2.405 1.79-2.99a2.274 2.274 0 0 1-.647-1.58A2.295 2.295 0 0 1 5.715 4.05zm0 1.143c-.638 0-1.143.505-1.143 1.143s.505 1.143 1.143 1.143 1.142-.505 1.142-1.143-.504-1.143-1.142-1.143zm4.57 1.143h3.43v1.143h-3.43V6.336zm0 2.285h3.43v1.143h-3.43V8.62z" color="#000" overflow="visible" style="isolation:auto;mix-blend-mode:normal"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
|
||||
<path fill="#eee" d="M0 0h16v16H0z" color="#333" overflow="visible" style="isolation:auto;mix-blend-mode:normal"/>
|
||||
<path fill="#000" d="M3.05 3.5C2.47 3.5 2 3.969 2 4.55v6.9c0 .581.469 1.05 1.05 1.05h9.9c.581 0 1.05-.469 1.05-1.05v-6.9c0-.581-.469-1.05-1.05-1.05h-9.9zm.224.75h9.452c.29 0 .524.234.524.524v6.452c0 .29-.234.524-.524.524h-1.298a.862.862 0 0 0 .022-.188.862.862 0 0 0-.863-.862.862.862 0 0 0-.861.862.862.862 0 0 0 .02.188H6.254a.862.862 0 0 0 .02-.188.862.862 0 0 0-.86-.862.862.862 0 0 0-.864.862.862.862 0 0 0 .02.188H3.275a.523.523 0 0 1-.524-.524V4.774c0-.29.234-.524.524-.524zm3.012.788c-.942 0-1.715.772-1.715 1.714 0 .46.187.876.485 1.185a2.567 2.567 0 0 0-1.342 2.243h.857c0-.952.763-1.714 1.715-1.714.952 0 1.714.762 1.714 1.714h.857c0-.968-.546-1.804-1.34-2.243.297-.309.483-.726.483-1.185a1.72 1.72 0 0 0-1.714-1.714zm0 .857a.85.85 0 0 1 .857.857.85.85 0 0 1-.857.857.85.85 0 0 1-.857-.857.85.85 0 0 1 .857-.857zm3.428.857v.857h2.572v-.857H9.714zm0 1.714v.857h2.572v-.857H9.714z" color="#ccc" overflow="visible" style="isolation:auto;mix-blend-mode:normal"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
id="svg4"
|
||||
version="1.1"
|
||||
viewBox="0 0 16 16">
|
||||
<metadata
|
||||
id="metadata10">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs8" />
|
||||
<path
|
||||
id="path817"
|
||||
d="m 7.9998157,0.9592584 c -2.2900552,0 -4.1467179,1.9491077 -4.1467179,4.3542424 0,2.5466592 0.8574979,5.5847192 4.0146568,9.7272412 C 11.205675,10.82248 12.168579,7.86016 12.146534,5.3135008 12.125714,2.9084655 10.289872,0.9592583 7.9998157,0.9592584 Z m 0,2.4789751 A 1.9332866,1.9332866 0 0 1 9.933567,5.371985 1.9332866,1.9332866 0 0 1 7.9998157,7.3057364 1.9332866,1.9332866 0 0 1 6.0660642,5.371985 1.9332866,1.9332866 0 0 1 7.9998157,3.4382335 Z"
|
||||
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.09425406;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -0,0 +1,6 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
|
||||
<path fill="#888" d="M0 2v12h12.69V3.81H5.08L3.95 2H0z"/>
|
||||
<path fill="#151515" d="M3.058 0c3.33.004 6.661-.006 9.991.006.617.043 1.02.668.94 1.253-.003 2.263.008 4.527-.004 6.79-.043.617-.668 1.021-1.253.94-3.26-.003-6.521.008-9.781-.005-.617-.042-1.02-.668-.94-1.253.003-2.263-.008-4.526.004-6.789A1.05 1.05 0 0 1 3.058.001z"/>
|
||||
<path fill="#fff" d="M3.275.75a.527.527 0 0 0-.523.47c-.006 2.1 0 4.198-.002 6.298-.046.318.105.705.47.73h1.37c-.054-.229-.035-.475.111-.672.298-.473 1.056-.5 1.387-.049a.861.861 0 0 1 .168.721l3.51.002c-.054-.23-.037-.476.109-.674.298-.473 1.058-.5 1.389-.049a.86.86 0 0 1 .185.535.74.74 0 0 1-.017.188h1.086c.318.046.705-.105.73-.47.006-2.1 0-4.198.002-6.298.046-.318-.105-.705-.47-.73C9.61.746 6.442.752 3.274.75zm3.01.787C7.227 1.537 8 2.31 8 3.252c0 .46-.187.877-.484 1.186A2.566 2.566 0 0 1 8.857 6.68H8c0-.952-.763-1.713-1.715-1.713-.952 0-1.713.76-1.713 1.713h-.857c0-.968.545-1.804 1.34-2.242a1.705 1.705 0 0 1-.483-1.186 1.72 1.72 0 0 1 1.713-1.715zm0 .858a.851.851 0 0 0-.857.857c0 .478.379.857.857.857a.851.851 0 0 0 .858-.857.851.851 0 0 0-.858-.857zm3.43.857h2.57v.857h-2.57v-.857zm0 1.715h2.57v.855h-2.57v-.855z"/>
|
||||
<path fill="#aaa" d="M16 6.08L12.96 14H0l2.53-6.6h4.02l1.71-1.32z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
|
||||
<rect width="16" height="12" y="2" fill="#151515" color="#000" overflow="visible" rx="1.4" ry="1.4" style="isolation:auto;mix-blend-mode:normal"/>
|
||||
<path fill="#fff" d="M1.7 3c-.389 0-.7.311-.7.7v8.6c0 .389.311.7.7.7h1.728a1.15 1.15 0 0 1-.028-.25 1.15 1.15 0 0 1 1.15-1.15 1.15 1.15 0 0 1 1.15 1.15 1.15 1.15 0 0 1-.028.25h4.656a1.15 1.15 0 0 1-.027-.25 1.15 1.15 0 0 1 1.148-1.15 1.15 1.15 0 0 1 1.15 1.15 1.15 1.15 0 0 1-.029.25h1.73c.389 0 .7-.311.7-.7V3.7c0-.389-.311-.7-.7-.7H1.7zm4.015 1.05A2.294 2.294 0 0 1 8 6.337c0 .612-.248 1.168-.645 1.58 1.06.585 1.788 1.7 1.788 2.99H8a2.276 2.276 0 0 0-2.285-2.285 2.277 2.277 0 0 0-2.287 2.285H2.285c0-1.29.73-2.405 1.79-2.99a2.274 2.274 0 0 1-.647-1.58A2.295 2.295 0 0 1 5.715 4.05zm0 1.143c-.638 0-1.143.505-1.143 1.143s.505 1.143 1.143 1.143 1.142-.505 1.142-1.143-.504-1.143-1.142-1.143zm4.57 1.143h3.43v1.143h-3.43V6.336zm0 2.285h3.43v1.143h-3.43V8.62z" color="#000" overflow="visible" style="isolation:auto;mix-blend-mode:normal"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1,68 @@
|
||||
function ttAddressGoogleMaps() {
|
||||
var obj = {};
|
||||
|
||||
obj.map = null;
|
||||
obj.markers = [];
|
||||
|
||||
obj.run = function () {
|
||||
const mapOptions = {
|
||||
center: new google.maps.LatLng(48.3057664, 14.2873126),
|
||||
zoom: 11,
|
||||
maxZoom: 15,
|
||||
streetViewControl: false,
|
||||
fullscreenControl: false
|
||||
};
|
||||
obj.map = new google.maps.Map(document.getElementById('ttaddress__map'), mapOptions);
|
||||
infoWindow = new google.maps.InfoWindow();
|
||||
|
||||
var bounds = new google.maps.LatLngBounds();
|
||||
|
||||
var records = document.getElementById("ttaddress__records");
|
||||
for (var i = 0; i < records.childNodes.length; i++) {
|
||||
var item = records.childNodes[i];
|
||||
|
||||
var marker = new google.maps.Marker({
|
||||
map: obj.map,
|
||||
position: new google.maps.LatLng(item.getAttribute('data-lat'), item.getAttribute('data-lng')),
|
||||
infowindow: infoWindow,
|
||||
recordId: item.getAttribute('data-id')
|
||||
});
|
||||
|
||||
google.maps.event.addListener(marker, 'click', function (e) {
|
||||
infoWindow.setContent(document.getElementById('ttaddress__record-' + this.recordId).innerHTML);
|
||||
infoWindow.open(obj.map, this);
|
||||
|
||||
var allLabels = document.querySelectorAll('.ttaddress__label');
|
||||
for (var i = 0; i < allLabels.length; i++) {
|
||||
allLabels[i].classList.remove('active')
|
||||
}
|
||||
document.getElementById('ttaddress__label-' + this.recordId).classList.add('active');
|
||||
|
||||
});
|
||||
bounds.extend(marker.getPosition());
|
||||
obj.markers.push(marker);
|
||||
}
|
||||
obj.map.fitBounds(bounds);
|
||||
};
|
||||
|
||||
obj.openMarker = function (markerId) {
|
||||
google.maps.event.trigger(obj.markers[markerId], 'click');
|
||||
};
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
var ttAddressMapInstance = ttAddressGoogleMaps();
|
||||
ttAddressMapInstance.run();
|
||||
|
||||
document.addEventListener('click', function (event) {
|
||||
if (!event.target.matches('.ttaddress__markerlink')) {
|
||||
return;
|
||||
}
|
||||
event.preventDefault();
|
||||
var element = event.target;
|
||||
ttAddressMapInstance.openMarker(element.getAttribute('data-iteration-id'));
|
||||
}, false);
|
||||
|
||||
});
|
||||
@@ -0,0 +1,68 @@
|
||||
function ttAddressLeaflet() {
|
||||
var obj = {};
|
||||
|
||||
obj.map = null;
|
||||
obj.markers = [];
|
||||
|
||||
obj.run = function () {
|
||||
obj.map = L.map('ttaddress__map').setView([51.505, -0.09], 13);
|
||||
obj.map.scrollWheelZoom.disable();
|
||||
var mapBounds = L.latLngBounds();
|
||||
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
|
||||
maxZoom: 18,
|
||||
attribution: 'Map data © <a href="https://www.openstreetmap.org/">OpenStreetMap</a> contributors, ' +
|
||||
'<a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, ' +
|
||||
'Imagery © <a href="https://www.mapbox.com/">Mapbox</a>',
|
||||
id: 'mapbox.streets'
|
||||
}).addTo(obj.map);
|
||||
|
||||
var records = document.getElementById("ttaddress__records").children;
|
||||
for (var i = 0; i < records.length; i++) {
|
||||
var item = records[i];
|
||||
|
||||
var marker = L.marker([item.getAttribute('data-lat'), item.getAttribute('data-lng')]).addTo(obj.map)
|
||||
.bindPopup(document.getElementById('ttaddress__record-' + item.getAttribute('data-id')).innerHTML);
|
||||
obj.markers.push(marker);
|
||||
}
|
||||
var group = new L.featureGroup(obj.markers);
|
||||
obj.map.fitBounds(group.getBounds());
|
||||
|
||||
// Zoom out if zoom level is too high
|
||||
// var zoomLevel = obj.map.getZoom();
|
||||
// if (zoomLevel >= 10) {
|
||||
// obj.map.setZoom(8);
|
||||
// }
|
||||
};
|
||||
|
||||
obj.openMarker = function (markerId) {
|
||||
obj.markers[markerId].openPopup();
|
||||
};
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
function ttAddressOnload() {
|
||||
var ttAddressMapInstance = ttAddressLeaflet();
|
||||
ttAddressMapInstance.run();
|
||||
|
||||
document.addEventListener('click', function (event) {
|
||||
if (!event.target.matches('.ttaddress__markerlink')) {
|
||||
return;
|
||||
}
|
||||
event.preventDefault();
|
||||
var element = event.target;
|
||||
ttAddressMapInstance.openMarker(parseInt(element.getAttribute('data-iteration-id')));
|
||||
}, false);
|
||||
}
|
||||
|
||||
/** event listener on DOMContentLoaded does not work with scripts which are loaded async.
|
||||
* With TYPO3 this could e.g. happen with EXT:scriptmerger
|
||||
* Thus we listen only if document.readyState is loading, otherwise we can already fire as DOM is loaded already.
|
||||
**/
|
||||
if (document.readyState === 'loading') {
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
ttAddressOnload();
|
||||
});
|
||||
} else {
|
||||
ttAddressOnload();
|
||||
}
|
||||
@@ -0,0 +1,195 @@
|
||||
define(['jquery', 'TYPO3/CMS/Backend/Icons', 'TYPO3/CMS/Backend/FormEngine', 'TYPO3/CMS/TtAddress/leaflet-core-1.4.0'], function ($, Icons, FormEngine) {
|
||||
'use strict';
|
||||
|
||||
let LeafBE = {
|
||||
$element: null,
|
||||
$gLatitude: null,
|
||||
$gLongitude: null,
|
||||
$latitude: null,
|
||||
$longitude: null,
|
||||
$fieldLat: null,
|
||||
$fieldLon: null,
|
||||
$fieldLatActive: null,
|
||||
$geoCodeUrl: null,
|
||||
$geoCodeUrlShort: null,
|
||||
$tilesUrl: null,
|
||||
$tilesCopy: null,
|
||||
$zoomLevel: 13,
|
||||
$marker: null,
|
||||
$map: null,
|
||||
$iconClose: null
|
||||
};
|
||||
|
||||
// Load icon via TYPO3 Icon-API and requireJS
|
||||
Icons.getIcon('actions-close', Icons.sizes.small, null, null).then(function(markup) {
|
||||
LeafBE['$iconClose']= markup;
|
||||
});
|
||||
|
||||
LeafBE.init = function (element) {
|
||||
// basic variable initialisation, uses data vars on the trigger button
|
||||
LeafBE.$element = element;
|
||||
LeafBE.$labelTitle = LeafBE.$element.attr('data-label-title');
|
||||
LeafBE.$labelClose = LeafBE.$element.attr('data-label-close');
|
||||
LeafBE.$labelImport = LeafBE.$element.attr('data-label-import');
|
||||
LeafBE.$latitude = LeafBE.$element.attr('data-lat');
|
||||
LeafBE.$longitude = LeafBE.$element.attr('data-lon');
|
||||
LeafBE.$gLatitude = LeafBE.$element.attr('data-glat');
|
||||
LeafBE.$gLongitude = LeafBE.$element.attr('data-glon');
|
||||
LeafBE.$tilesUrl = LeafBE.$element.attr('data-tiles');
|
||||
LeafBE.$tilesCopy = LeafBE.$element.attr('data-copy');
|
||||
LeafBE.$geoCodeUrl = LeafBE.$element.attr('data-geocodeurl');
|
||||
LeafBE.$geoCodeUrlShort = LeafBE.$element.attr('data-geocodeurlshort');
|
||||
LeafBE.$fieldLat = LeafBE.$element.attr('data-namelat');
|
||||
LeafBE.$fieldLon = LeafBE.$element.attr('data-namelon');
|
||||
LeafBE.$fieldLatActive = LeafBE.$element.attr('data-namelat-active');
|
||||
|
||||
// add the container to display the map as a nice overlay
|
||||
if (!$('#t3js-location-map-wrap').length) {
|
||||
LeafBE.addMapMarkup();
|
||||
}
|
||||
};
|
||||
|
||||
LeafBE.addMapMarkup = function () {
|
||||
$('body').append(
|
||||
'<div id="t3js-location-map-wrap">' +
|
||||
'<div class="t3js-location-map-title">' +
|
||||
'<div class="btn-group"><a href="#" class="btn btn-icon btn-default" title="' + LeafBE.$labelClose + '" id="t3js-ttaddress-close-map">' +
|
||||
LeafBE.$iconClose +
|
||||
'</a>' +
|
||||
'<a class="btn btn-default" href="#" title="Import marker position to form" id="t3js-ttaddress-import-position">' +
|
||||
LeafBE.$labelImport +
|
||||
'</a></div>' +
|
||||
LeafBE.$labelTitle +
|
||||
'</div>' +
|
||||
'<div class="t3js-location-map-container" id="t3js-location-map-container">' +
|
||||
'</div>' +
|
||||
'</div>'
|
||||
);
|
||||
};
|
||||
|
||||
LeafBE.createMap = function () {
|
||||
|
||||
if (((!LeafBE.$latitude || !LeafBE.$longitude) || (LeafBE.$latitude == 0 && LeafBE.$longitude == 0)) && LeafBE.$geoCodeUrl != null) {
|
||||
LeafBE.geocode();
|
||||
}
|
||||
|
||||
// The ultimate fallback: if one of the coordinates is empty, fallback to Kopenhagen.
|
||||
// Thank you Kaspar for TYPO3 and its great community! ;)
|
||||
if (LeafBE.$latitude == null || LeafBE.$longitude == null) {
|
||||
LeafBE.$latitude = LeafBE.$gLatitude;
|
||||
LeafBE.$longitude = LeafBE.$gLongitude;
|
||||
// set zoomlevel lower for faster navigation
|
||||
LeafBE.$zoomLevel = 4;
|
||||
}
|
||||
LeafBE.$map = L.map('t3js-location-map-container', {
|
||||
center: [LeafBE.$latitude, LeafBE.$longitude],
|
||||
zoom: LeafBE.$zoomLevel
|
||||
});
|
||||
L.tileLayer(LeafBE.$tilesUrl, {
|
||||
attribution: LeafBE.$tilesCopy
|
||||
}).addTo(LeafBE.$map);
|
||||
|
||||
LeafBE.$marker = L.marker([LeafBE.$latitude, LeafBE.$longitude], {
|
||||
draggable: true
|
||||
}).addTo(LeafBE.$map);
|
||||
|
||||
let position = LeafBE.$marker.getLatLng();
|
||||
|
||||
LeafBE.$marker.on('dragend', function (event) {
|
||||
LeafBE.$marker = event.target;
|
||||
position = LeafBE.$marker.getLatLng();
|
||||
});
|
||||
LeafBE.$map.on('click', function (event) {
|
||||
LeafBE.$marker.setLatLng(event.latlng);
|
||||
});
|
||||
// import coordinates and close overlay
|
||||
$('#t3js-ttaddress-import-position').on('click', function () {
|
||||
// set visual coordinates
|
||||
$('input[data-formengine-input-name="' + LeafBE.$fieldLat + '"]').val(LeafBE.$marker.getLatLng().lat);
|
||||
$('input[data-formengine-input-name="' + LeafBE.$fieldLon + '"]').val(LeafBE.$marker.getLatLng().lng);
|
||||
// set hidden fields values
|
||||
$('input[name="' + LeafBE.$fieldLat + '"]').val(LeafBE.$marker.getLatLng().lat);
|
||||
$('input[name="' + LeafBE.$fieldLon + '"]').val(LeafBE.$marker.getLatLng().lng);
|
||||
// enable also latitude, if not already done by user.
|
||||
$('input[id="' + LeafBE.$fieldLatActive + '"]').parentsUntil('.form-group').removeClass('disabled');
|
||||
$('input[id="' + LeafBE.$fieldLatActive + '"]').prop('checked', true);
|
||||
|
||||
// mark fields as changed for re-evaluation and revalidate the form,
|
||||
// this is e.g. needed when this wizard is used on inline elements
|
||||
FormEngine.Validation.markFieldAsChanged($('input[name="' + LeafBE.$fieldLat + '"]'));
|
||||
FormEngine.Validation.markFieldAsChanged($('input[name="' + LeafBE.$fieldLon + '"]'));
|
||||
FormEngine.Validation.validate();
|
||||
|
||||
// close map after import of coordinates.
|
||||
$('#t3js-location-map-wrap').removeClass('active');
|
||||
});
|
||||
// close overlay without any further action
|
||||
$('#t3js-ttaddress-close-map').on('click', function () {
|
||||
$('#t3js-location-map-wrap').removeClass('active');
|
||||
});
|
||||
};
|
||||
|
||||
LeafBE.geocode = function () {
|
||||
$.ajax({
|
||||
type: 'GET',
|
||||
url: LeafBE.$geoCodeUrl,
|
||||
async: false,
|
||||
dataType: 'json',
|
||||
success: function (data) {
|
||||
if (data.length == 0) {
|
||||
$.ajax({
|
||||
type: 'GET',
|
||||
url: LeafBE.$geoCodeUrlShort,
|
||||
async: false,
|
||||
dataType: 'json',
|
||||
success: function (data) {
|
||||
if (data.length != 0) {
|
||||
$.each(data[0], function (key, value) {
|
||||
if (key == "lat") {
|
||||
LeafBE.$latitude = value;
|
||||
}
|
||||
if (key == "lon") {
|
||||
LeafBE.$longitude = value;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
} else {
|
||||
$.each(data[0], function (key, value) {
|
||||
if (key == "lat") {
|
||||
LeafBE.$latitude = value;
|
||||
}
|
||||
if (key == "lon") {
|
||||
LeafBE.$longitude = value;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
LeafBE.initializeEvents = function (element) {
|
||||
$(element).on('click', function () {
|
||||
if (LeafBE.$map !== null) {
|
||||
LeafBE.$map.remove();
|
||||
LeafBE.$map = null;
|
||||
}
|
||||
LeafBE.init($(this));
|
||||
LeafBE.createMap();
|
||||
$('#t3js-location-map-wrap').addClass('active');
|
||||
});
|
||||
};
|
||||
|
||||
// reinit when form has changes, e.g. inline relations loaded using ajax
|
||||
LeafBE.reinitialize = FormEngine.reinitialize;
|
||||
FormEngine.reinitialize = function () {
|
||||
LeafBE.reinitialize();
|
||||
if ($('.locationMapWizard').length) {
|
||||
LeafBE.initializeEvents('.locationMapWizard');
|
||||
}
|
||||
};
|
||||
//LeafBE.addMapMarkup();
|
||||
LeafBE.initializeEvents('.locationMapWizard');
|
||||
return LeafBE;
|
||||
});
|
||||
@@ -0,0 +1,17 @@
|
||||
import FormEngineValidation from '@typo3/backend/form-engine-validation.js';
|
||||
|
||||
export class TelephoneEvaluation {
|
||||
static registerCustomEvaluation(name) {
|
||||
FormEngineValidation.registerCustomEvaluation(name, TelephoneEvaluation.applyTelephoneValidationPattern);
|
||||
}
|
||||
|
||||
static applyTelephoneValidationPattern(value) {
|
||||
const items = TYPO3.settings.TtAddress.Evaluation.telephoneValidationPattern.split('/');
|
||||
// fetch RegExp modifier and remove it
|
||||
const modifier = items.pop();
|
||||
// remove first item
|
||||
items.shift();
|
||||
const expression = new RegExp(items.join('/'), modifier);
|
||||
return value.replace(expression, '');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>Address Example Template</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!--
|
||||
Markers you can use:
|
||||
|
||||
###UID###
|
||||
###GENDER###
|
||||
###FIRSTNAME###
|
||||
###MIDDLENAME###
|
||||
###LASTNAME###
|
||||
###TITLE###
|
||||
###EMAIL###
|
||||
###PHONE###
|
||||
###MOBILE###
|
||||
###WWW###
|
||||
###ADDRESS###
|
||||
###BUILDING###
|
||||
###ROOM###
|
||||
###BIRTHDAY###
|
||||
###ORGANIZATION###
|
||||
###COMPANY### (only here for backwards compatibility, this is an alias for ORGANIZATION)
|
||||
###CITY###
|
||||
###ZIP###
|
||||
###REGION###
|
||||
###COUNTRY###
|
||||
###IMAGE### (###IMAGE1-5### are available, too if multiple images are added to the address record)
|
||||
###FAX###
|
||||
###DESCRIPTION###
|
||||
###MAINGROUP###
|
||||
###GROUPLIST###
|
||||
|
||||
|
||||
-->
|
||||
|
||||
<!-- ###TEMPLATE_ADDRESS### beginn -->
|
||||
<div class="vcard" itemscope itemtype="http://schema.org/Person">
|
||||
###IMAGE###
|
||||
<!-- ###SUBPART_URL### begin -->
|
||||
###FIRSTNAME### ###MIDDLENAME### ###LASTNAME###
|
||||
<!-- ###SUBPART_URL### end -->
|
||||
###ORGANIZATION###
|
||||
###EMAIL###
|
||||
<!-- ###SUBPART_ADR### begin -->
|
||||
<div class="adr" itemprop="address" itemscope itemtype="http://schema.org/PostalAddress">
|
||||
###ADDRESS###
|
||||
###CITY### ###REGION### ###ZIP### ###COUNTRY###
|
||||
</div>
|
||||
<!-- ###SUBPART_ADR### end -->
|
||||
###PHONE###
|
||||
</div>
|
||||
<!-- ###TEMPLATE_ADDRESS### end -->
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,8 @@
|
||||
#ttaddress__records {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#ttaddress__map {
|
||||
width: 100%;
|
||||
min-height: 300px;
|
||||
}
|
||||