Merge pull request #321 from ThemeBoy/feature-OpenStreetMap
Feature OpenStreetMap
126
assets/css/Control.Geocoder.css
Normal file
@@ -0,0 +1,126 @@
|
|||||||
|
.leaflet-control-geocoder {
|
||||||
|
border-radius: 4px;
|
||||||
|
background: white;
|
||||||
|
min-width: 26px;
|
||||||
|
min-height: 26px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.leaflet-touch .leaflet-control-geocoder {
|
||||||
|
min-width: 30px;
|
||||||
|
min-height: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.leaflet-control-geocoder a,
|
||||||
|
.leaflet-control-geocoder .leaflet-control-geocoder-icon {
|
||||||
|
border-bottom: none;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.leaflet-control-geocoder .leaflet-control-geocoder-alternatives a {
|
||||||
|
width: inherit;
|
||||||
|
height: inherit;
|
||||||
|
line-height: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
.leaflet-control-geocoder a:hover,
|
||||||
|
.leaflet-control-geocoder .leaflet-control-geocoder-icon:hover {
|
||||||
|
border-bottom: none;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.leaflet-control-geocoder-form {
|
||||||
|
display: none;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
.leaflet-control-geocoder-expanded .leaflet-control-geocoder-form {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
.leaflet-control-geocoder-form input {
|
||||||
|
font-size: 120%;
|
||||||
|
border: 0;
|
||||||
|
background-color: transparent;
|
||||||
|
width: 246px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.leaflet-control-geocoder-icon {
|
||||||
|
border-radius: 4px;
|
||||||
|
width: 26px;
|
||||||
|
height: 26px;
|
||||||
|
border: none;
|
||||||
|
background-color: white;
|
||||||
|
background-image: url(images/geocoder.png);
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: center;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.leaflet-touch .leaflet-control-geocoder-icon {
|
||||||
|
width: 30px;
|
||||||
|
height: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.leaflet-control-geocoder-throbber .leaflet-control-geocoder-icon {
|
||||||
|
background-image: url(images/throbber.gif);
|
||||||
|
}
|
||||||
|
|
||||||
|
.leaflet-control-geocoder-form-no-error {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.leaflet-control-geocoder-form input:focus {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.leaflet-control-geocoder-form button {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.leaflet-control-geocoder-error {
|
||||||
|
margin-top: 8px;
|
||||||
|
margin-left: 8px;
|
||||||
|
display: block;
|
||||||
|
color: #444;
|
||||||
|
}
|
||||||
|
.leaflet-control-geocoder-alternatives {
|
||||||
|
display: block;
|
||||||
|
width: 272px;
|
||||||
|
list-style: none;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.leaflet-control-geocoder-alternatives-minimized {
|
||||||
|
display: none;
|
||||||
|
height: 0;
|
||||||
|
}
|
||||||
|
.leaflet-control-geocoder-alternatives li {
|
||||||
|
white-space: nowrap;
|
||||||
|
display: block;
|
||||||
|
overflow: hidden;
|
||||||
|
padding: 5px 8px;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
border-bottom: 1px solid #ccc;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.leaflet-control-geocoder-alternatives li a,
|
||||||
|
.leaflet-control-geocoder-alternatives li a:hover {
|
||||||
|
width: inherit;
|
||||||
|
height: inherit;
|
||||||
|
line-height: inherit;
|
||||||
|
background: inherit;
|
||||||
|
border-radius: inherit;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.leaflet-control-geocoder-alternatives li:last-child {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
.leaflet-control-geocoder-alternatives li:hover,
|
||||||
|
.leaflet-control-geocoder-selected {
|
||||||
|
background-color: #f5f5f5;
|
||||||
|
}
|
||||||
|
.leaflet-control-geocoder-address-detail {
|
||||||
|
}
|
||||||
|
.leaflet-control-geocoder-address-context {
|
||||||
|
color: #666;
|
||||||
|
}
|
||||||
BIN
assets/css/images/geocoder.png
Normal file
|
After Width: | Height: | Size: 490 B |
BIN
assets/css/images/layers-2x.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
assets/css/images/layers.png
Normal file
|
After Width: | Height: | Size: 696 B |
BIN
assets/css/images/marker-icon-2x.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
assets/css/images/marker-icon.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
assets/css/images/marker-shadow.png
Normal file
|
After Width: | Height: | Size: 618 B |
BIN
assets/css/images/throbber.gif
Normal file
|
After Width: | Height: | Size: 4.7 KiB |
635
assets/css/leaflet.css
Normal file
@@ -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(images/layers.png);
|
||||||
|
width: 36px;
|
||||||
|
height: 36px;
|
||||||
|
}
|
||||||
|
.leaflet-retina .leaflet-control-layers-toggle {
|
||||||
|
background-image: url(images/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(images/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;
|
||||||
|
}
|
||||||
1348
assets/js/Control.Geocoder.js
Normal file
@@ -1,16 +0,0 @@
|
|||||||
jQuery(document).ready(function($){
|
|
||||||
$(".sp-location-picker").locationpicker({
|
|
||||||
location: {
|
|
||||||
latitude: Number($(".sp-latitude").val()),
|
|
||||||
longitude: Number($(".sp-longitude").val())
|
|
||||||
},
|
|
||||||
radius: 0,
|
|
||||||
inputBinding: {
|
|
||||||
latitudeInput: $(".sp-latitude"),
|
|
||||||
longitudeInput: $(".sp-longitude"),
|
|
||||||
locationNameInput: $(".sp-address")
|
|
||||||
},
|
|
||||||
addressFormat: null,
|
|
||||||
enableAutocomplete: true
|
|
||||||
});
|
|
||||||
});
|
|
||||||
54
assets/js/admin/sp-geocoder.js
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
//Get variables form input values
|
||||||
|
latitude = document.getElementById('term_meta[sp_latitude]').value;
|
||||||
|
longitude = document.getElementById('term_meta[sp_longitude]').value;
|
||||||
|
|
||||||
|
//Initialize the map and add the Search control box
|
||||||
|
var map = L.map('sp-location-picker').setView([latitude, longitude], 15),
|
||||||
|
geocoder = L.Control.Geocoder.nominatim(),
|
||||||
|
control = L.Control.geocoder({
|
||||||
|
geocoder: geocoder,
|
||||||
|
collapsed: false,
|
||||||
|
defaultMarkGeocode: false
|
||||||
|
}).addTo(map),
|
||||||
|
//Add a marker to use from the begining
|
||||||
|
marker = L.marker([latitude, longitude],{draggable: true, autoPan: true}).addTo(map);
|
||||||
|
|
||||||
|
L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
|
||||||
|
attribution: '© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
|
||||||
|
}).addTo(map);
|
||||||
|
|
||||||
|
//Pass the values to the fields after dragging
|
||||||
|
marker.on('dragend', function (e) {
|
||||||
|
document.getElementById('term_meta[sp_latitude]').value = marker.getLatLng().lat;
|
||||||
|
document.getElementById('term_meta[sp_longitude]').value = marker.getLatLng().lng;
|
||||||
|
geocoder.reverse(marker.getLatLng(), map.options.crs.scale(map.getZoom()), function(results) {
|
||||||
|
var r = results[0];
|
||||||
|
if (r) {
|
||||||
|
document.getElementById('term_meta[sp_address]').value = r.name;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
//After searching
|
||||||
|
control.on('markgeocode', function(e) {
|
||||||
|
var center = e.geocode.center;
|
||||||
|
var address = e.geocode.name;
|
||||||
|
map.setView([center.lat, center.lng], 15); //Center map to the new place
|
||||||
|
map.removeLayer(marker); //Remove previous marker
|
||||||
|
marker = L.marker([center.lat, center.lng],{draggable: true, autoPan: true}).addTo(map); //Add new marker to use
|
||||||
|
//Pass the values to the fields after searching
|
||||||
|
document.getElementById('term_meta[sp_latitude]').value = center.lat;
|
||||||
|
document.getElementById('term_meta[sp_longitude]').value = center.lng;
|
||||||
|
document.getElementById('term_meta[sp_address]').value = address;
|
||||||
|
//Pass the values to the fields after dragging
|
||||||
|
marker.on('dragend', function (e) {
|
||||||
|
document.getElementById('term_meta[sp_latitude]').value = marker.getLatLng().lat;
|
||||||
|
document.getElementById('term_meta[sp_longitude]').value = marker.getLatLng().lng;
|
||||||
|
geocoder.reverse(marker.getLatLng(), map.options.crs.scale(map.getZoom()), function(results) {
|
||||||
|
var r = results[0];
|
||||||
|
if (r) {
|
||||||
|
document.getElementById('term_meta[sp_address]').value = r.name;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
});
|
||||||
|
}).addTo(map);
|
||||||
54
assets/js/admin/sp-setup-geocoder.js
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
//Get variables form input values
|
||||||
|
latitude = document.getElementById('sp_latitude').value;
|
||||||
|
longitude = document.getElementById('sp_longitude').value;
|
||||||
|
|
||||||
|
//Initialize the map and add the Search control box
|
||||||
|
var map = L.map('sp-location-picker').setView([latitude, longitude], 15),
|
||||||
|
geocoder = L.Control.Geocoder.nominatim(),
|
||||||
|
control = L.Control.geocoder({
|
||||||
|
geocoder: geocoder,
|
||||||
|
collapsed: false,
|
||||||
|
defaultMarkGeocode: false
|
||||||
|
}).addTo(map),
|
||||||
|
//Add a marker to use from the begining
|
||||||
|
marker = L.marker([latitude, longitude],{draggable: true, autoPan: true}).addTo(map);
|
||||||
|
|
||||||
|
L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
|
||||||
|
attribution: '© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
|
||||||
|
}).addTo(map);
|
||||||
|
|
||||||
|
//Pass the values to the fields after dragging
|
||||||
|
marker.on('dragend', function (e) {
|
||||||
|
document.getElementById('sp_latitude').value = marker.getLatLng().lat;
|
||||||
|
document.getElementById('sp_longitude').value = marker.getLatLng().lng;
|
||||||
|
geocoder.reverse(marker.getLatLng(), map.options.crs.scale(map.getZoom()), function(results) {
|
||||||
|
var r = results[0];
|
||||||
|
if (r) {
|
||||||
|
document.getElementById('sp_address').value = r.name;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
//After searching
|
||||||
|
control.on('markgeocode', function(e) {
|
||||||
|
var center = e.geocode.center;
|
||||||
|
var address = e.geocode.name;
|
||||||
|
map.setView([center.lat, center.lng], 15); //Center map to the new place
|
||||||
|
map.removeLayer(marker); //Remove previous marker
|
||||||
|
marker = L.marker([center.lat, center.lng],{draggable: true, autoPan: true}).addTo(map); //Add new marker to use
|
||||||
|
//Pass the values to the fields after searching
|
||||||
|
document.getElementById('sp_latitude').value = center.lat;
|
||||||
|
document.getElementById('sp_longitude').value = center.lng;
|
||||||
|
document.getElementById('sp_address').value = address;
|
||||||
|
//Pass the values to the fields after dragging
|
||||||
|
marker.on('dragend', function (e) {
|
||||||
|
document.getElementById('sp_latitude').value = marker.getLatLng().lat;
|
||||||
|
document.getElementById('sp_longitude').value = marker.getLatLng().lng;
|
||||||
|
geocoder.reverse(marker.getLatLng(), map.options.crs.scale(map.getZoom()), function(results) {
|
||||||
|
var r = results[0];
|
||||||
|
if (r) {
|
||||||
|
document.getElementById('sp_address').value = r.name;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
});
|
||||||
|
}).addTo(map);
|
||||||
5
assets/js/leaflet.js
Normal file
@@ -1,400 +0,0 @@
|
|||||||
/*! jquery-locationpicker - v0.1.16 - 2017-10-02 */
|
|
||||||
(function($) {
|
|
||||||
function GMapContext(domElement, options) {
|
|
||||||
var _map = new google.maps.Map(domElement, options);
|
|
||||||
var _marker = new google.maps.Marker({
|
|
||||||
position: new google.maps.LatLng(54.19335, -3.92695),
|
|
||||||
map: _map,
|
|
||||||
title: "Drag Me",
|
|
||||||
visible: options.markerVisible,
|
|
||||||
draggable: options.markerDraggable,
|
|
||||||
icon: options.markerIcon !== undefined ? options.markerIcon : undefined
|
|
||||||
});
|
|
||||||
return {
|
|
||||||
map: _map,
|
|
||||||
marker: _marker,
|
|
||||||
circle: null,
|
|
||||||
location: _marker.position,
|
|
||||||
radius: options.radius,
|
|
||||||
locationName: options.locationName,
|
|
||||||
addressComponents: {
|
|
||||||
formatted_address: null,
|
|
||||||
addressLine1: null,
|
|
||||||
addressLine2: null,
|
|
||||||
streetName: null,
|
|
||||||
streetNumber: null,
|
|
||||||
city: null,
|
|
||||||
district: null,
|
|
||||||
state: null,
|
|
||||||
stateOrProvince: null
|
|
||||||
},
|
|
||||||
settings: options.settings,
|
|
||||||
domContainer: domElement,
|
|
||||||
geodecoder: new google.maps.Geocoder()
|
|
||||||
};
|
|
||||||
}
|
|
||||||
var GmUtility = {
|
|
||||||
drawCircle: function(gmapContext, center, radius, options) {
|
|
||||||
if (gmapContext.circle != null) {
|
|
||||||
gmapContext.circle.setMap(null);
|
|
||||||
}
|
|
||||||
if (radius > 0) {
|
|
||||||
radius *= 1;
|
|
||||||
options = $.extend({
|
|
||||||
strokeColor: "#0000FF",
|
|
||||||
strokeOpacity: .35,
|
|
||||||
strokeWeight: 2,
|
|
||||||
fillColor: "#0000FF",
|
|
||||||
fillOpacity: .2
|
|
||||||
}, options);
|
|
||||||
options.map = gmapContext.map;
|
|
||||||
options.radius = radius;
|
|
||||||
options.center = center;
|
|
||||||
gmapContext.circle = new google.maps.Circle(options);
|
|
||||||
return gmapContext.circle;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
},
|
|
||||||
setPosition: function(gMapContext, location, callback) {
|
|
||||||
gMapContext.location = location;
|
|
||||||
gMapContext.marker.setPosition(location);
|
|
||||||
gMapContext.map.panTo(location);
|
|
||||||
this.drawCircle(gMapContext, location, gMapContext.radius, {});
|
|
||||||
if (gMapContext.settings.enableReverseGeocode) {
|
|
||||||
this.updateLocationName(gMapContext, callback);
|
|
||||||
} else {
|
|
||||||
if (callback) {
|
|
||||||
callback.call(this, gMapContext);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
locationFromLatLng: function(lnlg) {
|
|
||||||
return {
|
|
||||||
latitude: lnlg.lat(),
|
|
||||||
longitude: lnlg.lng()
|
|
||||||
};
|
|
||||||
},
|
|
||||||
addressByFormat: function(addresses, format) {
|
|
||||||
var result = null;
|
|
||||||
for (var i = addresses.length - 1; i >= 0; i--) {
|
|
||||||
if (addresses[i].types.indexOf(format) >= 0) {
|
|
||||||
result = addresses[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result || addresses[0];
|
|
||||||
},
|
|
||||||
updateLocationName: function(gmapContext, callback) {
|
|
||||||
gmapContext.geodecoder.geocode({
|
|
||||||
latLng: gmapContext.marker.position
|
|
||||||
}, function(results, status) {
|
|
||||||
if (status == google.maps.GeocoderStatus.OK && results.length > 0) {
|
|
||||||
var address = GmUtility.addressByFormat(results, gmapContext.settings.addressFormat);
|
|
||||||
gmapContext.locationName = address.formatted_address;
|
|
||||||
gmapContext.addressComponents = GmUtility.address_component_from_google_geocode(address.address_components);
|
|
||||||
} else if (status == google.maps.GeocoderStatus.OVER_QUERY_LIMIT) {
|
|
||||||
return setTimeout(function() {
|
|
||||||
GmUtility.updateLocationName(gmapContext, callback);
|
|
||||||
}, 1e3);
|
|
||||||
}
|
|
||||||
if (callback) {
|
|
||||||
callback.call(this, gmapContext);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
address_component_from_google_geocode: function(address_components) {
|
|
||||||
var result = {};
|
|
||||||
for (var i = address_components.length - 1; i >= 0; i--) {
|
|
||||||
var component = address_components[i];
|
|
||||||
if (component.types.indexOf("postal_code") >= 0) {
|
|
||||||
result.postalCode = component.short_name;
|
|
||||||
} else if (component.types.indexOf("street_number") >= 0) {
|
|
||||||
result.streetNumber = component.short_name;
|
|
||||||
} else if (component.types.indexOf("route") >= 0) {
|
|
||||||
result.streetName = component.short_name;
|
|
||||||
} else if (component.types.indexOf("locality") >= 0) {
|
|
||||||
result.city = component.short_name;
|
|
||||||
} else if (component.types.indexOf("sublocality") >= 0) {
|
|
||||||
result.district = component.short_name;
|
|
||||||
} else if (component.types.indexOf("administrative_area_level_1") >= 0) {
|
|
||||||
result.stateOrProvince = component.short_name;
|
|
||||||
} else if (component.types.indexOf("country") >= 0) {
|
|
||||||
result.country = component.short_name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
result.addressLine1 = [ result.streetNumber, result.streetName ].join(" ").trim();
|
|
||||||
result.addressLine2 = "";
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
function isPluginApplied(domObj) {
|
|
||||||
return getContextForElement(domObj) != undefined;
|
|
||||||
}
|
|
||||||
function getContextForElement(domObj) {
|
|
||||||
return $(domObj).data("locationpicker");
|
|
||||||
}
|
|
||||||
function updateInputValues(inputBinding, gmapContext) {
|
|
||||||
if (!inputBinding) return;
|
|
||||||
var currentLocation = GmUtility.locationFromLatLng(gmapContext.marker.position);
|
|
||||||
if (inputBinding.latitudeInput) {
|
|
||||||
inputBinding.latitudeInput.val(currentLocation.latitude).change();
|
|
||||||
}
|
|
||||||
if (inputBinding.longitudeInput) {
|
|
||||||
inputBinding.longitudeInput.val(currentLocation.longitude).change();
|
|
||||||
}
|
|
||||||
if (inputBinding.radiusInput) {
|
|
||||||
inputBinding.radiusInput.val(gmapContext.radius).change();
|
|
||||||
}
|
|
||||||
if (inputBinding.locationNameInput) {
|
|
||||||
inputBinding.locationNameInput.val(gmapContext.locationName).change();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function setupInputListenersInput(inputBinding, gmapContext) {
|
|
||||||
if (inputBinding) {
|
|
||||||
if (inputBinding.radiusInput) {
|
|
||||||
inputBinding.radiusInput.on("change", function(e) {
|
|
||||||
var radiusInputValue = $(this).val();
|
|
||||||
if (!e.originalEvent || isNaN(radiusInputValue)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
gmapContext.radius = radiusInputValue;
|
|
||||||
GmUtility.setPosition(gmapContext, gmapContext.location, function(context) {
|
|
||||||
context.settings.onchanged.apply(gmapContext.domContainer, [ GmUtility.locationFromLatLng(context.location), context.radius, false ]);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (inputBinding.locationNameInput && gmapContext.settings.enableAutocomplete) {
|
|
||||||
var blur = false;
|
|
||||||
gmapContext.autocomplete = new google.maps.places.Autocomplete(inputBinding.locationNameInput.get(0), gmapContext.settings.autocompleteOptions);
|
|
||||||
google.maps.event.addListener(gmapContext.autocomplete, "place_changed", function() {
|
|
||||||
blur = false;
|
|
||||||
var place = gmapContext.autocomplete.getPlace();
|
|
||||||
if (!place.geometry) {
|
|
||||||
gmapContext.settings.onlocationnotfound(place.name);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
GmUtility.setPosition(gmapContext, place.geometry.location, function(context) {
|
|
||||||
updateInputValues(inputBinding, context);
|
|
||||||
context.settings.onchanged.apply(gmapContext.domContainer, [ GmUtility.locationFromLatLng(context.location), context.radius, false ]);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
if (gmapContext.settings.enableAutocompleteBlur) {
|
|
||||||
inputBinding.locationNameInput.on("change", function(e) {
|
|
||||||
if (!e.originalEvent) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
blur = true;
|
|
||||||
});
|
|
||||||
inputBinding.locationNameInput.on("blur", function(e) {
|
|
||||||
if (!e.originalEvent) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
setTimeout(function() {
|
|
||||||
var address = $(inputBinding.locationNameInput).val();
|
|
||||||
if (address.length > 5 && blur) {
|
|
||||||
blur = false;
|
|
||||||
gmapContext.geodecoder.geocode({
|
|
||||||
address: address
|
|
||||||
}, function(results, status) {
|
|
||||||
if (status == google.maps.GeocoderStatus.OK && results && results.length) {
|
|
||||||
GmUtility.setPosition(gmapContext, results[0].geometry.location, function(context) {
|
|
||||||
updateInputValues(inputBinding, context);
|
|
||||||
context.settings.onchanged.apply(gmapContext.domContainer, [ GmUtility.locationFromLatLng(context.location), context.radius, false ]);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}, 1e3);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (inputBinding.latitudeInput) {
|
|
||||||
inputBinding.latitudeInput.on("change", function(e) {
|
|
||||||
var latitudeInputValue = $(this).val();
|
|
||||||
if (!e.originalEvent || isNaN(latitudeInputValue)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
GmUtility.setPosition(gmapContext, new google.maps.LatLng(latitudeInputValue, gmapContext.location.lng()), function(context) {
|
|
||||||
context.settings.onchanged.apply(gmapContext.domContainer, [ GmUtility.locationFromLatLng(context.location), context.radius, false ]);
|
|
||||||
updateInputValues(gmapContext.settings.inputBinding, gmapContext);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (inputBinding.longitudeInput) {
|
|
||||||
inputBinding.longitudeInput.on("change", function(e) {
|
|
||||||
var longitudeInputValue = $(this).val();
|
|
||||||
if (!e.originalEvent || isNaN(longitudeInputValue)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
GmUtility.setPosition(gmapContext, new google.maps.LatLng(gmapContext.location.lat(), longitudeInputValue), function(context) {
|
|
||||||
context.settings.onchanged.apply(gmapContext.domContainer, [ GmUtility.locationFromLatLng(context.location), context.radius, false ]);
|
|
||||||
updateInputValues(gmapContext.settings.inputBinding, gmapContext);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function autosize(gmapContext) {
|
|
||||||
google.maps.event.trigger(gmapContext.map, "resize");
|
|
||||||
setTimeout(function() {
|
|
||||||
gmapContext.map.setCenter(gmapContext.marker.position);
|
|
||||||
}, 300);
|
|
||||||
}
|
|
||||||
function updateMap(gmapContext, $target, options) {
|
|
||||||
var settings = $.extend({}, $.fn.locationpicker.defaults, options), latNew = settings.location.latitude, lngNew = settings.location.longitude, radiusNew = settings.radius, latOld = gmapContext.settings.location.latitude, lngOld = gmapContext.settings.location.longitude, radiusOld = gmapContext.settings.radius;
|
|
||||||
if (latNew == latOld && lngNew == lngOld && radiusNew == radiusOld) return;
|
|
||||||
gmapContext.settings.location.latitude = latNew;
|
|
||||||
gmapContext.settings.location.longitude = lngNew;
|
|
||||||
gmapContext.radius = radiusNew;
|
|
||||||
GmUtility.setPosition(gmapContext, new google.maps.LatLng(gmapContext.settings.location.latitude, gmapContext.settings.location.longitude), function(context) {
|
|
||||||
setupInputListenersInput(gmapContext.settings.inputBinding, gmapContext);
|
|
||||||
context.settings.oninitialized($target);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
$.fn.locationpicker = function(options, params) {
|
|
||||||
if (typeof options == "string") {
|
|
||||||
var _targetDomElement = this.get(0);
|
|
||||||
if (!isPluginApplied(_targetDomElement)) return;
|
|
||||||
var gmapContext = getContextForElement(_targetDomElement);
|
|
||||||
switch (options) {
|
|
||||||
case "location":
|
|
||||||
if (params == undefined) {
|
|
||||||
var location = GmUtility.locationFromLatLng(gmapContext.location);
|
|
||||||
location.radius = gmapContext.radius;
|
|
||||||
location.name = gmapContext.locationName;
|
|
||||||
return location;
|
|
||||||
} else {
|
|
||||||
if (params.radius) {
|
|
||||||
gmapContext.radius = params.radius;
|
|
||||||
}
|
|
||||||
GmUtility.setPosition(gmapContext, new google.maps.LatLng(params.latitude, params.longitude), function(gmapContext) {
|
|
||||||
updateInputValues(gmapContext.settings.inputBinding, gmapContext);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "subscribe":
|
|
||||||
if (params == undefined) {
|
|
||||||
return null;
|
|
||||||
} else {
|
|
||||||
var event = params.event;
|
|
||||||
var callback = params.callback;
|
|
||||||
if (!event || !callback) {
|
|
||||||
console.error('LocationPicker: Invalid arguments for method "subscribe"');
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
google.maps.event.addListener(gmapContext.map, event, callback);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "map":
|
|
||||||
if (params == undefined) {
|
|
||||||
var locationObj = GmUtility.locationFromLatLng(gmapContext.location);
|
|
||||||
locationObj.formattedAddress = gmapContext.locationName;
|
|
||||||
locationObj.addressComponents = gmapContext.addressComponents;
|
|
||||||
return {
|
|
||||||
map: gmapContext.map,
|
|
||||||
marker: gmapContext.marker,
|
|
||||||
location: locationObj
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
case "autosize":
|
|
||||||
autosize(gmapContext);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return this.each(function() {
|
|
||||||
var $target = $(this);
|
|
||||||
if (isPluginApplied(this)) {
|
|
||||||
updateMap(getContextForElement(this), $(this), options);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var settings = $.extend({}, $.fn.locationpicker.defaults, options);
|
|
||||||
var gmapContext = new GMapContext(this, $.extend({}, {
|
|
||||||
zoom: settings.zoom,
|
|
||||||
center: new google.maps.LatLng(settings.location.latitude, settings.location.longitude),
|
|
||||||
mapTypeId: settings.mapTypeId,
|
|
||||||
mapTypeControl: false,
|
|
||||||
styles: settings.styles,
|
|
||||||
disableDoubleClickZoom: false,
|
|
||||||
scrollwheel: settings.scrollwheel,
|
|
||||||
streetViewControl: false,
|
|
||||||
radius: settings.radius,
|
|
||||||
locationName: settings.locationName,
|
|
||||||
settings: settings,
|
|
||||||
autocompleteOptions: settings.autocompleteOptions,
|
|
||||||
addressFormat: settings.addressFormat,
|
|
||||||
draggable: settings.draggable,
|
|
||||||
markerIcon: settings.markerIcon,
|
|
||||||
markerDraggable: settings.markerDraggable,
|
|
||||||
markerVisible: settings.markerVisible
|
|
||||||
}, settings.mapOptions));
|
|
||||||
$target.data("locationpicker", gmapContext);
|
|
||||||
function displayMarkerWithSelectedArea() {
|
|
||||||
GmUtility.setPosition(gmapContext, gmapContext.marker.position, function(context) {
|
|
||||||
var currentLocation = GmUtility.locationFromLatLng(gmapContext.location);
|
|
||||||
updateInputValues(gmapContext.settings.inputBinding, gmapContext);
|
|
||||||
context.settings.onchanged.apply(gmapContext.domContainer, [ currentLocation, context.radius, true ]);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if (settings.markerInCenter) {
|
|
||||||
gmapContext.map.addListener("bounds_changed", function() {
|
|
||||||
if (!gmapContext.marker.dragging) {
|
|
||||||
gmapContext.marker.setPosition(gmapContext.map.center);
|
|
||||||
updateInputValues(gmapContext.settings.inputBinding, gmapContext);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
gmapContext.map.addListener("idle", function() {
|
|
||||||
if (!gmapContext.marker.dragging) {
|
|
||||||
displayMarkerWithSelectedArea();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
google.maps.event.addListener(gmapContext.marker, "drag", function(event) {
|
|
||||||
updateInputValues(gmapContext.settings.inputBinding, gmapContext);
|
|
||||||
});
|
|
||||||
google.maps.event.addListener(gmapContext.marker, "dragend", function(event) {
|
|
||||||
displayMarkerWithSelectedArea();
|
|
||||||
});
|
|
||||||
GmUtility.setPosition(gmapContext, new google.maps.LatLng(settings.location.latitude, settings.location.longitude), function(context) {
|
|
||||||
updateInputValues(settings.inputBinding, gmapContext);
|
|
||||||
setupInputListenersInput(settings.inputBinding, gmapContext);
|
|
||||||
context.settings.oninitialized($target);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
};
|
|
||||||
$.fn.locationpicker.defaults = {
|
|
||||||
location: {
|
|
||||||
latitude: 40.7324319,
|
|
||||||
longitude: -73.82480777777776
|
|
||||||
},
|
|
||||||
locationName: "",
|
|
||||||
radius: 500,
|
|
||||||
zoom: 15,
|
|
||||||
mapTypeId: google.maps.MapTypeId.ROADMAP,
|
|
||||||
styles: [],
|
|
||||||
mapOptions: {},
|
|
||||||
scrollwheel: true,
|
|
||||||
inputBinding: {
|
|
||||||
latitudeInput: null,
|
|
||||||
longitudeInput: null,
|
|
||||||
radiusInput: null,
|
|
||||||
locationNameInput: null
|
|
||||||
},
|
|
||||||
enableAutocomplete: false,
|
|
||||||
enableAutocompleteBlur: false,
|
|
||||||
autocompleteOptions: null,
|
|
||||||
addressFormat: "postal_code",
|
|
||||||
enableReverseGeocode: true,
|
|
||||||
draggable: true,
|
|
||||||
onchanged: function(currentLocation, radius, isMarkerDropped) {},
|
|
||||||
onlocationnotfound: function(locationName) {},
|
|
||||||
oninitialized: function(component) {},
|
|
||||||
markerIcon: undefined,
|
|
||||||
markerDraggable: true,
|
|
||||||
markerVisible: true
|
|
||||||
};
|
|
||||||
})(jQuery);
|
|
||||||
@@ -84,12 +84,6 @@ class SP_Admin_Assets {
|
|||||||
|
|
||||||
wp_register_script( 'jquery-fitvids', SP()->plugin_url() . '/assets/js/jquery.fitvids.js', array( 'jquery' ), '1.1', true );
|
wp_register_script( 'jquery-fitvids', SP()->plugin_url() . '/assets/js/jquery.fitvids.js', array( 'jquery' ), '1.1', true );
|
||||||
|
|
||||||
wp_register_script( 'google-maps', '//tboy.co/maps_js' );
|
|
||||||
|
|
||||||
wp_register_script( 'jquery-locationpicker', SP()->plugin_url() . '/assets/js/locationpicker.jquery.js', array( 'jquery', 'google-maps' ), '0.1.6', true );
|
|
||||||
|
|
||||||
wp_register_script( 'sportspress-admin-locationpicker', SP()->plugin_url() . '/assets/js/admin/locationpicker.js', array( 'jquery', 'google-maps', 'jquery-locationpicker' ), SP_VERSION, true );
|
|
||||||
|
|
||||||
wp_register_script( 'sportspress-admin-equationbuilder', SP()->plugin_url() . '/assets/js/admin/equationbuilder.js', array( 'jquery', 'jquery-ui-core', 'jquery-ui-draggable', 'jquery-ui-droppable' ), SP_VERSION, true );
|
wp_register_script( 'sportspress-admin-equationbuilder', SP()->plugin_url() . '/assets/js/admin/equationbuilder.js', array( 'jquery', 'jquery-ui-core', 'jquery-ui-draggable', 'jquery-ui-droppable' ), SP_VERSION, true );
|
||||||
|
|
||||||
wp_register_script( 'sportspress-admin-colorpicker', SP()->plugin_url() . '/assets/js/admin/colorpicker.js', array( 'jquery', 'wp-color-picker', 'iris' ), SP_VERSION, true );
|
wp_register_script( 'sportspress-admin-colorpicker', SP()->plugin_url() . '/assets/js/admin/colorpicker.js', array( 'jquery', 'wp-color-picker', 'iris' ), SP_VERSION, true );
|
||||||
@@ -130,13 +124,6 @@ class SP_Admin_Assets {
|
|||||||
wp_enqueue_script( 'sportspress-admin-widgets' );
|
wp_enqueue_script( 'sportspress-admin-widgets' );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Edit venue pages
|
|
||||||
if ( in_array( $screen->id, array( 'edit-sp_venue' ) ) ) {
|
|
||||||
wp_enqueue_script( 'google-maps' );
|
|
||||||
wp_enqueue_script( 'jquery-locationpicker' );
|
|
||||||
wp_enqueue_script( 'sportspress-admin-locationpicker' );
|
|
||||||
}
|
|
||||||
|
|
||||||
// Edit color
|
// Edit color
|
||||||
if ( in_array( $screen->id, array( 'sp_outcome' ) ) ) {
|
if ( in_array( $screen->id, array( 'sp_outcome' ) ) ) {
|
||||||
wp_enqueue_script( 'sportspress-admin-colorpicker' );
|
wp_enqueue_script( 'sportspress-admin-colorpicker' );
|
||||||
|
|||||||
@@ -101,11 +101,19 @@ class SP_Admin_Setup_Wizard {
|
|||||||
|
|
||||||
wp_register_script( 'chosen', SP()->plugin_url() . '/assets/js/chosen.jquery.min.js', array( 'jquery' ), '1.1.0', true );
|
wp_register_script( 'chosen', SP()->plugin_url() . '/assets/js/chosen.jquery.min.js', array( 'jquery' ), '1.1.0', true );
|
||||||
wp_register_script( 'jquery-tiptip', SP()->plugin_url() . '/assets/js/jquery.tipTip.min.js', array( 'jquery' ), '1.3', true );
|
wp_register_script( 'jquery-tiptip', SP()->plugin_url() . '/assets/js/jquery.tipTip.min.js', array( 'jquery' ), '1.3', true );
|
||||||
wp_register_script( 'google-maps', '//tboy.co/maps_js' );
|
|
||||||
wp_register_script( 'sportspress-setup', SP()->plugin_url() . '/assets/js/admin/sportspress-setup.js', array( 'jquery', 'chosen', 'jquery-tiptip' ), SP_VERSION, true );
|
wp_register_script( 'sportspress-setup', SP()->plugin_url() . '/assets/js/admin/sportspress-setup.js', array( 'jquery', 'chosen', 'jquery-tiptip' ), SP_VERSION, true );
|
||||||
|
|
||||||
wp_register_script( 'jquery-locationpicker', SP()->plugin_url() . '/assets/js/locationpicker.jquery.js', array( 'jquery', 'google-maps' ), '0.1.6', true );
|
if ( get_option( 'sportspress_load_googlemaps_module', 'no' ) == 'yes' ) {
|
||||||
wp_register_script( 'sportspress-admin-locationpicker', SP()->plugin_url() . '/assets/js/admin/locationpicker.js', array( 'jquery', 'jquery-locationpicker' ), SP_VERSION, true );
|
wp_register_script( 'google-maps', '//tboy.co/maps_js' );
|
||||||
|
wp_register_script( 'jquery-locationpicker', SP_GOOGLEMAPS_URL . 'js/locationpicker.jquery.js', array( 'jquery', 'google-maps' ), '0.1.6', true );
|
||||||
|
wp_register_script( 'sportspress-admin-locationpicker', SP_GOOGLEMAPS_URL . 'js/admin/locationpicker.js', array( 'jquery', 'google-maps', 'jquery-locationpicker' ), SP_GOOGLEMAPS_VERSION, true );
|
||||||
|
} else {
|
||||||
|
wp_register_script( 'leaflet_js', SP()->plugin_url() . '/assets/js/leaflet.js', array(), '1.4.0' );
|
||||||
|
wp_register_script( 'control-geocoder', SP()->plugin_url() . '/assets/js/Control.Geocoder.js', array( 'leaflet_js' ) );
|
||||||
|
wp_register_script( 'sportspress-admin-setup-geocoder', SP()->plugin_url() . '/assets/js/admin/sp-setup-geocoder.js', array( 'leaflet_js', 'control-geocoder' ), SP_VERSION, true );
|
||||||
|
wp_enqueue_style( 'control-geocoder', SP()->plugin_url() . '/assets/css/Control.Geocoder.css', array() );
|
||||||
|
wp_enqueue_style( 'leaflet_stylesheet', SP()->plugin_url() . '/assets/css/leaflet.css', array(), '1.4.0' );
|
||||||
|
}
|
||||||
|
|
||||||
$strings = apply_filters( 'sportspress_localized_strings', array(
|
$strings = apply_filters( 'sportspress_localized_strings', array(
|
||||||
'none' => __( 'None', 'sportspress' ),
|
'none' => __( 'None', 'sportspress' ),
|
||||||
@@ -115,8 +123,6 @@ class SP_Admin_Setup_Wizard {
|
|||||||
// Localize scripts
|
// Localize scripts
|
||||||
wp_localize_script( 'sportspress-setup', 'localized_strings', $strings );
|
wp_localize_script( 'sportspress-setup', 'localized_strings', $strings );
|
||||||
|
|
||||||
wp_enqueue_script( 'google-maps' );
|
|
||||||
|
|
||||||
if ( ! empty( $_POST['save_step'] ) && isset( $this->steps[ $this->step ]['handler'] ) ) {
|
if ( ! empty( $_POST['save_step'] ) && isset( $this->steps[ $this->step ]['handler'] ) ) {
|
||||||
call_user_func( $this->steps[ $this->step ]['handler'] );
|
call_user_func( $this->steps[ $this->step ]['handler'] );
|
||||||
}
|
}
|
||||||
@@ -517,6 +523,12 @@ class SP_Admin_Setup_Wizard {
|
|||||||
* Venue Step.
|
* Venue Step.
|
||||||
*/
|
*/
|
||||||
public function sp_setup_venue() {
|
public function sp_setup_venue() {
|
||||||
|
if ( get_option( 'sportspress_load_googlemaps_module', 'no' ) == 'yes' ) {
|
||||||
|
wp_print_scripts( 'google-maps' );
|
||||||
|
}else{
|
||||||
|
wp_print_scripts( 'leaflet_js' );
|
||||||
|
wp_print_scripts( 'control-geocoder' );
|
||||||
|
}
|
||||||
?>
|
?>
|
||||||
<h1><?php _e( 'Venue Setup', 'sportspress' ); ?></h1>
|
<h1><?php _e( 'Venue Setup', 'sportspress' ); ?></h1>
|
||||||
<form method="post">
|
<form method="post">
|
||||||
@@ -531,11 +543,11 @@ class SP_Admin_Setup_Wizard {
|
|||||||
<tr>
|
<tr>
|
||||||
<th scope="row"><?php _e( 'Address', 'sportspress' ); ?></th>
|
<th scope="row"><?php _e( 'Address', 'sportspress' ); ?></th>
|
||||||
<td>
|
<td>
|
||||||
<input name="address" class="sp-address" type="text">
|
<input name="address" id="sp_address" class="sp-address" type="text" value="Marvel Stadium, Melbourne">
|
||||||
<div class="sp-location-picker"></div>
|
<div id="sp-location-picker" class="sp-location-picker" style="width: 95%; height: 320px"></div>
|
||||||
<p class="description"><?php _e( "Drag the marker to the venue's location.", 'sportspress' ); ?></p>
|
<p class="description"><?php _e( "Drag the marker to the venue's location.", 'sportspress' ); ?></p>
|
||||||
<input name="latitude" class="sp-latitude" type="hidden" value="40.7324319">
|
<input name="latitude" id="sp_latitude" class="sp-latitude" type="hidden" value="-37.8165647">
|
||||||
<input name="longitude" class="sp-longitude" type="hidden" value="-73.82480799999996">
|
<input name="longitude" id="sp_longitude" class="sp-longitude" type="hidden" value="144.9475055">
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
@@ -546,7 +558,12 @@ class SP_Admin_Setup_Wizard {
|
|||||||
<?php wp_nonce_field( 'sp-setup' ); ?>
|
<?php wp_nonce_field( 'sp-setup' ); ?>
|
||||||
</p>
|
</p>
|
||||||
</form>
|
</form>
|
||||||
<?php wp_print_scripts( 'sportspress-admin-locationpicker' ); ?>
|
<?php
|
||||||
|
if ( get_option( 'sportspress_load_googlemaps_module', 'no' ) == 'yes' ) {
|
||||||
|
wp_print_scripts( 'sportspress-admin-locationpicker' );
|
||||||
|
} else {
|
||||||
|
wp_print_scripts( 'sportspress-admin-setup-geocoder' );
|
||||||
|
}?>
|
||||||
<?php
|
<?php
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -103,21 +103,24 @@ class SP_Admin_Taxonomies {
|
|||||||
$term = reset( $terms );
|
$term = reset( $terms );
|
||||||
$t_id = $term->term_id;
|
$t_id = $term->term_id;
|
||||||
$term_meta = get_option( "taxonomy_$t_id" );
|
$term_meta = get_option( "taxonomy_$t_id" );
|
||||||
$latitude = sp_array_value( $term_meta, 'sp_latitude', '40.7324319' );
|
$latitude = sp_array_value( $term_meta, 'sp_latitude', '-37.8165647' );
|
||||||
$longitude = sp_array_value( $term_meta, 'sp_longitude', '-73.82480799999996' );
|
$longitude = sp_array_value( $term_meta, 'sp_longitude', '144.9475055' );
|
||||||
|
$address = sp_array_value( $term_meta, 'sp_address', '' );
|
||||||
endif;
|
endif;
|
||||||
// Sanitize latitude and longitude, fallback to default.
|
// Sanitize latitude and longitude, fallback to default.
|
||||||
if( ! is_numeric( $latitude) || ! is_numeric( $longitude) ):
|
if( ! is_numeric( $latitude) || ! is_numeric( $longitude) ):
|
||||||
$latitude = '40.7324319';
|
$latitude = '-37.8165647';
|
||||||
$longitude = '-73.82480799999996';
|
$longitude = '144.9475055';
|
||||||
endif;
|
endif;
|
||||||
?>
|
?>
|
||||||
<div class="form-field">
|
<div class="form-field">
|
||||||
<label for="term_meta[sp_address]"><?php _e( 'Address', 'sportspress' ); ?></label>
|
<div id="sp-location-picker" class="sp-location-picker" style="width: 95%; height: 320px"></div>
|
||||||
<input type="text" class="sp-address" name="term_meta[sp_address]" id="term_meta[sp_address]" value="">
|
|
||||||
<p><div class="sp-location-picker"></div></p>
|
|
||||||
<p><?php _e( "Drag the marker to the venue's location.", 'sportspress' ); ?></p>
|
<p><?php _e( "Drag the marker to the venue's location.", 'sportspress' ); ?></p>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="form-field">
|
||||||
|
<label for="term_meta[sp_address]"><?php _e( 'Address', 'sportspress' ); ?></label>
|
||||||
|
<input type="text" class="sp-address" name="term_meta[sp_address]" id="term_meta[sp_address]" value="<?php echo esc_attr( $address ); ?>">
|
||||||
|
</div>
|
||||||
<div class="form-field">
|
<div class="form-field">
|
||||||
<label for="term_meta[sp_latitude]"><?php _e( 'Latitude', 'sportspress' ); ?></label>
|
<label for="term_meta[sp_latitude]"><?php _e( 'Latitude', 'sportspress' ); ?></label>
|
||||||
<input type="text" class="sp-latitude" name="term_meta[sp_latitude]" id="term_meta[sp_latitude]" value="<?php echo esc_attr( $latitude ); ?>">
|
<input type="text" class="sp-latitude" name="term_meta[sp_latitude]" id="term_meta[sp_latitude]" value="<?php echo esc_attr( $latitude ); ?>">
|
||||||
@@ -127,6 +130,11 @@ class SP_Admin_Taxonomies {
|
|||||||
<input type="text" class="sp-longitude" name="term_meta[sp_longitude]" id="term_meta[sp_longitude]" value="<?php echo esc_attr( $longitude ); ?>">
|
<input type="text" class="sp-longitude" name="term_meta[sp_longitude]" id="term_meta[sp_longitude]" value="<?php echo esc_attr( $longitude ); ?>">
|
||||||
</div>
|
</div>
|
||||||
<?php
|
<?php
|
||||||
|
if ( get_option( 'sportspress_load_googlemaps_module', 'no' ) == 'yes' ) {
|
||||||
|
wp_print_scripts( 'sportspress-admin-locationpicker' );
|
||||||
|
} else {
|
||||||
|
wp_print_scripts( 'sportspress-admin-geocoder' );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -137,28 +145,41 @@ class SP_Admin_Taxonomies {
|
|||||||
*/
|
*/
|
||||||
public function edit_venue_fields( $term ) {
|
public function edit_venue_fields( $term ) {
|
||||||
$t_id = $term->term_id;
|
$t_id = $term->term_id;
|
||||||
$term_meta = get_option( "taxonomy_$t_id" ); ?>
|
$term_meta = get_option( "taxonomy_$t_id" );
|
||||||
|
$latitude = is_numeric( esc_attr( $term_meta['sp_latitude'] ) ) ? esc_attr( $term_meta['sp_latitude'] ) : '';
|
||||||
|
$longitude = is_numeric( esc_attr( $term_meta['sp_longitude'] ) ) ? esc_attr( $term_meta['sp_longitude'] ) : '';
|
||||||
|
$address = esc_attr( $term_meta['sp_address'] ) ? esc_attr( $term_meta['sp_address'] ) : '';
|
||||||
|
?>
|
||||||
|
<tr class="form-field">
|
||||||
|
<td colspan="2">
|
||||||
|
<p><div id="sp-location-picker" class="sp-location-picker" style="width: 95%; height: 320px"></div></p>
|
||||||
|
<p class="description"><?php _e( "Drag the marker to the venue's location.", 'sportspress' ); ?></p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
<tr class="form-field">
|
<tr class="form-field">
|
||||||
<th scope="row" valign="top"><label for="term_meta[sp_address]"><?php _e( 'Address', 'sportspress' ); ?></label></th>
|
<th scope="row" valign="top"><label for="term_meta[sp_address]"><?php _e( 'Address', 'sportspress' ); ?></label></th>
|
||||||
<td>
|
<td>
|
||||||
<input type="text" class="sp-address" name="term_meta[sp_address]" id="term_meta[sp_address]" value="<?php echo esc_attr( $term_meta['sp_address'] ) ? esc_attr( $term_meta['sp_address'] ) : ''; ?>">
|
<input type="text" class="sp-address" name="term_meta[sp_address]" id="term_meta[sp_address]" value="<?php echo $address; ?>">
|
||||||
<p><div class="sp-location-picker"></div></p>
|
|
||||||
<p class="description"><?php _e( "Drag the marker to the venue's location.", 'sportspress' ); ?></p>
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="form-field">
|
<tr class="form-field">
|
||||||
<th scope="row" valign="top"><label for="term_meta[sp_latitude]"><?php _e( 'Latitude', 'sportspress' ); ?></label></th>
|
<th scope="row" valign="top"><label for="term_meta[sp_latitude]"><?php _e( 'Latitude', 'sportspress' ); ?></label></th>
|
||||||
<td>
|
<td>
|
||||||
<input type="text" class="sp-latitude" name="term_meta[sp_latitude]" id="term_meta[sp_latitude]" value="<?php echo is_numeric( esc_attr( $term_meta['sp_latitude'] ) ) ? esc_attr( $term_meta['sp_latitude'] ) : ''; ?>">
|
<input type="text" class="sp-latitude" name="term_meta[sp_latitude]" id="term_meta[sp_latitude]" value="<?php echo $latitude; ?>">
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="form-field">
|
<tr class="form-field">
|
||||||
<th scope="row" valign="top"><label for="term_meta[sp_longitude]"><?php _e( 'Longitude', 'sportspress' ); ?></label></th>
|
<th scope="row" valign="top"><label for="term_meta[sp_longitude]"><?php _e( 'Longitude', 'sportspress' ); ?></label></th>
|
||||||
<td>
|
<td>
|
||||||
<input type="text" class="sp-longitude" name="term_meta[sp_longitude]" id="term_meta[sp_longitude]" value="<?php echo is_numeric( esc_attr( $term_meta['sp_longitude'] ) ) ? esc_attr( $term_meta['sp_longitude'] ) : ''; ?>">
|
<input type="text" class="sp-longitude" name="term_meta[sp_longitude]" id="term_meta[sp_longitude]" value="<?php echo $longitude; ?>">
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<?php
|
<?php
|
||||||
|
if ( get_option( 'sportspress_load_googlemaps_module', 'no' ) == 'yes' ) {
|
||||||
|
wp_print_scripts( 'sportspress-admin-locationpicker' );
|
||||||
|
} else {
|
||||||
|
wp_print_scripts( 'sportspress-admin-geocoder' );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -181,8 +181,8 @@ class SP_Settings_Events extends SP_Settings_Page {
|
|||||||
),
|
),
|
||||||
|
|
||||||
array(
|
array(
|
||||||
'title' => __( 'Google Maps', 'sportspress' ),
|
'title' => __( 'Venue Map', 'sportspress' ),
|
||||||
'desc' => __( 'Display maps', 'sportspress' ),
|
'desc' => __( 'Display venue map', 'sportspress' ),
|
||||||
'id' => 'sportspress_event_show_maps',
|
'id' => 'sportspress_event_show_maps',
|
||||||
'default' => 'yes',
|
'default' => 'yes',
|
||||||
'type' => 'checkbox',
|
'type' => 'checkbox',
|
||||||
|
|||||||
@@ -78,6 +78,13 @@ class SP_Modules {
|
|||||||
'link' => 'https://www.themeboy.com/sportspress-extensions/tournaments/',
|
'link' => 'https://www.themeboy.com/sportspress-extensions/tournaments/',
|
||||||
'desc' => __( 'Schedule tournaments and create interactive playoff brackets.', 'sportspress' ),
|
'desc' => __( 'Schedule tournaments and create interactive playoff brackets.', 'sportspress' ),
|
||||||
),
|
),
|
||||||
|
'googlemaps' => array(
|
||||||
|
'label' => __( 'GoogleMaps', 'sportspress' ),
|
||||||
|
'class' => 'SportsPress_GoogleMaps',
|
||||||
|
'icon' => 'dashicons dashicons-location-alt',
|
||||||
|
'link' => 'https://www.themeboy.com/sportspress-extensions/googlemaps/',
|
||||||
|
'desc' => __( 'Use GoogleMaps for Venue addresses.', 'sportspress' ),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
'team' => array(
|
'team' => array(
|
||||||
'league_tables' => array(
|
'league_tables' => array(
|
||||||
|
|||||||
136
modules/sportspress-openstreetmap.php
Normal file
@@ -0,0 +1,136 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
Plugin Name: SportsPress OpenStreetMap Integration
|
||||||
|
Plugin URI: http://themeboy.com/
|
||||||
|
Description: Integrate OpenStreetMap to SportsPress.
|
||||||
|
Author: ThemeBoy
|
||||||
|
Author URI: http://themeboy.com/
|
||||||
|
Version: 2.7
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Exit if accessed directly
|
||||||
|
if ( ! defined( 'ABSPATH' ) ) exit;
|
||||||
|
|
||||||
|
if ( ! class_exists( 'SportsPress_OpenStreetMap' ) && get_option( 'sportspress_load_googlemaps_module', 'no' ) == 'no' ) :
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Main SportsPress OpenStreetMap Class
|
||||||
|
*
|
||||||
|
* @class SportsPress_OpenStreetMap
|
||||||
|
* @version 2.7
|
||||||
|
*/
|
||||||
|
|
||||||
|
class SportsPress_OpenStreetMap {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*/
|
||||||
|
public function __construct() {
|
||||||
|
// Define constants
|
||||||
|
$this->define_constants();
|
||||||
|
|
||||||
|
// Actions
|
||||||
|
add_action( 'admin_enqueue_scripts', array( $this, 'admin_styles' ) );
|
||||||
|
add_action( 'admin_enqueue_scripts', array( $this, 'admin_scripts' ) );
|
||||||
|
add_action( 'wp_enqueue_scripts', array( $this, 'frontend_scripts' ) );
|
||||||
|
add_action( 'sp_venue_show_openstreetmap', array( $this, 'show_venue_openstreetmap' ), 10, 4 );
|
||||||
|
|
||||||
|
// Filters
|
||||||
|
//add_filter( 'sportspress_openstreetmap', array( $this, 'add_options' ) );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define constants.
|
||||||
|
*/
|
||||||
|
private function define_constants() {
|
||||||
|
if ( !defined( 'SP_OPENSTREETMAP_VERSION' ) )
|
||||||
|
define( 'SP_OPENSTREETMAP_VERSION', '2.7' );
|
||||||
|
|
||||||
|
if ( !defined( 'SP_OPENSTREETMAP_URL' ) )
|
||||||
|
define( 'SP_OPENSTREETMAP_URL', plugin_dir_url( __FILE__ ) );
|
||||||
|
|
||||||
|
if ( !defined( 'SP_OPENSTREETMAP_DIR' ) )
|
||||||
|
define( 'SP_OPENSTREETMAP_DIR', plugin_dir_path( __FILE__ ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enqueue admin styles
|
||||||
|
*/
|
||||||
|
public function admin_styles( $hook ) {
|
||||||
|
$screen = get_current_screen();
|
||||||
|
if ( in_array( $screen->id, sp_get_screen_ids() ) ) {
|
||||||
|
wp_enqueue_style( 'leaflet_stylesheet', SP()->plugin_url() . '/assets/css/leaflet.css', array(), '1.4.0' );
|
||||||
|
wp_enqueue_style( 'control-geocoder', SP()->plugin_url() . '/assets/css/Control.Geocoder.css', array() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enqueue admin scripts
|
||||||
|
*/
|
||||||
|
public function admin_scripts( $hook ) {
|
||||||
|
$screen = get_current_screen();
|
||||||
|
if ( in_array( $screen->id, sp_get_screen_ids() ) ) {
|
||||||
|
wp_register_script( 'leaflet_js', SP()->plugin_url() . '/assets/js/leaflet.js', array(), '1.4.0' );
|
||||||
|
wp_register_script( 'control-geocoder', SP()->plugin_url() . '/assets/js/Control.Geocoder.js', array( 'leaflet_js' ) );
|
||||||
|
wp_register_script( 'sportspress-admin-geocoder', SP()->plugin_url() . '/assets/js/admin/sp-geocoder.js', array( 'leaflet_js', 'control-geocoder' ), SP_VERSION, true );
|
||||||
|
}
|
||||||
|
// Edit venue pages
|
||||||
|
if ( in_array( $screen->id, array( 'edit-sp_venue' ) ) ) {
|
||||||
|
wp_enqueue_script( 'leaflet_js' );
|
||||||
|
wp_enqueue_script( 'control-geocoder' );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enqueue frontend scripts
|
||||||
|
*/
|
||||||
|
public function frontend_scripts() {
|
||||||
|
if( is_single() && get_post_type()=='sp_event' ){
|
||||||
|
wp_enqueue_style( 'leaflet_stylesheet', SP()->plugin_url() . '/assets/css/leaflet.css', array(), '1.4.0' );
|
||||||
|
wp_enqueue_script( 'leaflet_js', SP()->plugin_url() . '/assets/js/leaflet.js', array(), '1.4.0' );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Integrate OpenStreetMap (Show Venue)
|
||||||
|
*
|
||||||
|
* @return mix
|
||||||
|
*/
|
||||||
|
public function show_venue_openstreetmap( $latitude, $longitude, $zoom, $maptype ) {
|
||||||
|
?>
|
||||||
|
<a href="https://www.openstreetmap.org/?mlat=<?php echo $latitude; ?>&mlon=<?php echo $longitude; ?>#map=<?php echo $zoom; ?>/<?php echo $latitude; ?>/<?php echo $longitude; ?>" target="_blank"><div id="sp_openstreetmaps_container" style="width: 100%; height: 320px"></div></a>
|
||||||
|
<script>
|
||||||
|
// position we will use later
|
||||||
|
var lat = <?php echo $latitude; ?>;
|
||||||
|
var lon = <?php echo $longitude; ?>;
|
||||||
|
// initialize map
|
||||||
|
map = L.map('sp_openstreetmaps_container', { zoomControl:false }).setView([lat, lon], <?php echo $zoom; ?>);
|
||||||
|
// set map tiles source
|
||||||
|
<?php if ( 'satellite' === $maptype ) { ?>
|
||||||
|
L.tileLayer('https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', {
|
||||||
|
attribution: 'Tiles © Esri — Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community',
|
||||||
|
maxZoom: 18,
|
||||||
|
}).addTo(map);
|
||||||
|
<?php }else{ ?>
|
||||||
|
L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
|
||||||
|
attribution: 'Map data © <a href="https://www.openstreetmap.org/">OpenStreetMap</a> contributors',
|
||||||
|
maxZoom: 18,
|
||||||
|
}).addTo(map);
|
||||||
|
<?php } ?>
|
||||||
|
// add marker to the map
|
||||||
|
marker = L.marker([lat, lon]).addTo(map);
|
||||||
|
map.dragging.disable();
|
||||||
|
map.touchZoom.disable();
|
||||||
|
map.doubleClickZoom.disable();
|
||||||
|
map.scrollWheelZoom.disable();
|
||||||
|
</script>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
endif;
|
||||||
|
if ( get_option( 'sportspress_load_googlemaps_module', 'no' ) == 'no' ) {
|
||||||
|
new SportsPress_OpenStreetMap();
|
||||||
|
}
|
||||||
@@ -23,17 +23,10 @@ $maptype = strtolower( $maptype );
|
|||||||
if ( '' === $address ) $address = '+';
|
if ( '' === $address ) $address = '+';
|
||||||
if ( 'satellite' !== $maptype ) $maptype = 'roadmap';
|
if ( 'satellite' !== $maptype ) $maptype = 'roadmap';
|
||||||
|
|
||||||
if ( $latitude != null && $longitude != null ):
|
if ( $latitude != null && $longitude != null ){
|
||||||
?>
|
if ( get_option( 'sportspress_load_googlemaps_module', 'no' ) == 'yes' ) {
|
||||||
<div class="sp-google-map-container">
|
do_action ( 'sp_venue_show_googlemaps', $latitude, $longitude, $address, $zoom, $maptype );
|
||||||
<iframe
|
}else{
|
||||||
class="sp-google-map<?php if ( is_tax( 'sp_venue' ) ): ?> sp-venue-map<?php endif; ?>"
|
do_action ( 'sp_venue_show_openstreetmap', $latitude, $longitude, $zoom, $maptype );
|
||||||
width="600"
|
}
|
||||||
height="320"
|
}
|
||||||
frameborder="0" style="border:0"
|
|
||||||
src="//tboy.co/maps_embed?q=<?php echo $address; ?>&center=<?php echo $latitude; ?>,<?php echo $longitude; ?>&zoom=<?php echo $zoom; ?>&maptype=<?php echo $maptype; ?>" allowfullscreen>
|
|
||||||
</iframe>
|
|
||||||
<a href="https://www.google.com.au/maps/place/<?php echo $address; ?>/@<?php echo $latitude; ?>,<?php echo $longitude; ?>,<?php echo $zoom; ?>z" target="_blank" class="sp-google-map-link"></a>
|
|
||||||
</div>
|
|
||||||
<?php
|
|
||||||
endif;
|
|
||||||
|
|||||||