Version Description
(19-08-2022) = * New: WPVR - Divi 360 Panorama & Virtual Tour Builder Module.
Download this release
Release Info
Developer | rextheme |
Plugin | ![]() |
Version | 8.1.2 |
Comparing to | |
See all releases |
Code changes from version 8.1.0 to 8.1.2
- README.txt +10 -2
- admin/classes/class-wpvr-meta-field.php +24 -0
- admin/classes/class-wpvr-scene.php +106 -52
- admin/icon/explainer-vedio.png +0 -0
- includes/class-wpvr.php +13 -1
- includes/wpvr-divi-modules/asset-manifest.json +4 -0
- includes/wpvr-divi-modules/includes/DiviModules.php +45 -0
- includes/wpvr-divi-modules/includes/loader.js +11 -0
- includes/wpvr-divi-modules/includes/loader.php +14 -0
- includes/wpvr-divi-modules/includes/modules/index.js +4 -0
- includes/wpvr-divi-modules/includes/modules/wpvr_modules/VR.svg +14 -0
- includes/wpvr-divi-modules/includes/modules/wpvr_modules/WpvrTour.php +185 -0
- includes/wpvr-divi-modules/includes/modules/wpvr_modules/icon.png +0 -0
- includes/wpvr-divi-modules/includes/modules/wpvr_modules/wpvr_tour.jsx +26 -0
- includes/wpvr-divi-modules/languages/.gitignore +0 -0
- includes/wpvr-divi-modules/package.json +33 -0
- includes/wpvr-divi-modules/scripts/builder-bundle.min.js +1 -0
- includes/wpvr-divi-modules/scripts/frontend-bundle.min.js +1 -0
- includes/wpvr-divi-modules/scripts/frontend.js +3 -0
- includes/wpvr-divi-modules/styles/.gitignore +0 -0
- includes/wpvr-divi-modules/styles/style-dbp.min.css +1 -0
- includes/wpvr-divi-modules/styles/style.min.css +1 -0
- includes/wpvr-divi-modules/wpvr_divi_modules.php +44 -0
- includes/wpvr-divi-modules/yarn.lock +8385 -0
- public/class-wpvr-public.php +3 -0
- public/css/wpvr-public.css +34 -1
- public/lib/pannellum/src/css/pannellum.css +23 -0
- uninstall.php +31 -0
- vendor/composer/autoload_classmap.php +1 -0
- vendor/composer/autoload_static.php +1 -0
- wpvr.php +98 -77
README.txt
CHANGED
@@ -5,7 +5,7 @@ Donate link: https://rextheme.com/wp-vr-360-panorama-and-virtual-tour-creator-fo
|
|
5 |
Requires at least: 5.0
|
6 |
Tested up to: 6.0
|
7 |
Requires PHP: 7.0.0
|
8 |
-
Stable tag: 8.1.
|
9 |
License: GPLv2 or later
|
10 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
11 |
|
@@ -309,7 +309,15 @@ Admins can remove the access from Authors and Editors at any time.
|
|
309 |
|
310 |
== Changelog ==
|
311 |
|
312 |
-
= 8.1.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
313 |
* New: VR Glass Support for virtual tours.
|
314 |
|
315 |
|
5 |
Requires at least: 5.0
|
6 |
Tested up to: 6.0
|
7 |
Requires PHP: 7.0.0
|
8 |
+
Stable tag: 8.1.2
|
9 |
License: GPLv2 or later
|
10 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
11 |
|
309 |
|
310 |
== Changelog ==
|
311 |
|
312 |
+
= 8.1.2 (19-08-2022) =
|
313 |
+
* New: WPVR - Divi 360 Panorama & Virtual Tour Builder Module.
|
314 |
+
|
315 |
+
= 8.1.1 (03-08-2022) =
|
316 |
+
* New: Custom Color Support for Individual Hotspots.
|
317 |
+
* Fix: Custom Hotspot Icon Class is not working.
|
318 |
+
* Tweak: Explainer Video & Global Zoom Settings not shown.
|
319 |
+
|
320 |
+
= 8.1.0 (25-07-2022) =
|
321 |
* New: VR Glass Support for virtual tours.
|
322 |
|
323 |
|
admin/classes/class-wpvr-meta-field.php
CHANGED
@@ -450,6 +450,22 @@ class WPVR_Meta_Field {
|
|
450 |
'have_tooltip' => false,
|
451 |
'tooltip_text' => ''
|
452 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
453 |
'cpLogoSwitch' => array(
|
454 |
'class' => 'single-settings company-info',
|
455 |
'title' => 'Add Company Information',
|
@@ -458,6 +474,7 @@ class WPVR_Meta_Field {
|
|
458 |
'have_tooltip' => false,
|
459 |
'tooltip_text' => ''
|
460 |
)
|
|
|
461 |
);
|
462 |
return apply_filters( 'modify_advanced_control_right_fields', $fields, $postdata );
|
463 |
}
|
@@ -536,6 +553,13 @@ class WPVR_Meta_Field {
|
|
536 |
'icon' => 'home.jpg',
|
537 |
'id' => 'wpvr_backToHome',
|
538 |
'type' => 'checkbox'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
539 |
)
|
540 |
);
|
541 |
return apply_filters( 'modify_control_button_right_fields', $fields, $postdata );
|
450 |
'have_tooltip' => false,
|
451 |
'tooltip_text' => ''
|
452 |
),
|
453 |
+
'explainerSwitch' => array(
|
454 |
+
'class' => 'single-settings company-info',
|
455 |
+
'title' => 'Enable explainer video',
|
456 |
+
'id' => 'wpvr_explainerSwitch',
|
457 |
+
'have_tooltip' => false,
|
458 |
+
'tooltip_text' => '',
|
459 |
+
'type' => 'checkbox',
|
460 |
+
),
|
461 |
+
'globalzoom' => array(
|
462 |
+
'class' => 'single-settings',
|
463 |
+
'title' => 'Set Zoom Preferences',
|
464 |
+
'id' => 'wpvr_globalzoom',
|
465 |
+
'have_tooltip' => true,
|
466 |
+
'tooltip_text' => 'Zoom interval is 50 to 120 degree. You can put any value between 50 to 120. As an example, if you set 100, the scene will display with zoom in 100 degree on each load.',
|
467 |
+
'type' => 'checkbox',
|
468 |
+
),
|
469 |
'cpLogoSwitch' => array(
|
470 |
'class' => 'single-settings company-info',
|
471 |
'title' => 'Add Company Information',
|
474 |
'have_tooltip' => false,
|
475 |
'tooltip_text' => ''
|
476 |
)
|
477 |
+
|
478 |
);
|
479 |
return apply_filters( 'modify_advanced_control_right_fields', $fields, $postdata );
|
480 |
}
|
553 |
'icon' => 'home.jpg',
|
554 |
'id' => 'wpvr_backToHome',
|
555 |
'type' => 'checkbox'
|
556 |
+
),
|
557 |
+
|
558 |
+
'explainer' => array(
|
559 |
+
'title' => 'Explainer',
|
560 |
+
'icon' => 'explainer-vedio.png',
|
561 |
+
'id' => 'wpvr_explainer',
|
562 |
+
'type' => 'checkbox',
|
563 |
)
|
564 |
);
|
565 |
return apply_filters( 'modify_control_button_right_fields', $fields, $postdata );
|
admin/classes/class-wpvr-scene.php
CHANGED
@@ -820,8 +820,7 @@ class WPVR_Scene {
|
|
820 |
$status = get_option('wpvr_edd_license_status');
|
821 |
if ($status !== false && $status == 'valid') {
|
822 |
if (isset($hotspot_data["hotspot-customclass-pro"]) && $hotspot_data["hotspot-customclass-pro"] != 'none') {
|
823 |
-
$hotspot_data[
|
824 |
-
$hotspoticoncolor = $hotspot_data["hotspot-customclass-color-icon-value"];
|
825 |
}
|
826 |
if (isset($hotspot_data['hotspot-blink'])) {
|
827 |
$hotspotblink = $hotspot_data['hotspot-blink'];
|
@@ -1049,49 +1048,90 @@ class WPVR_Scene {
|
|
1049 |
overflow: hidden;
|
1050 |
}';
|
1051 |
}
|
1052 |
-
|
1053 |
-
$html .= '#' . $panoid . ' div.pnlm-hotspot-base.fas,
|
1054 |
-
#' . $panoid . ' div.pnlm-hotspot-base.fab,
|
1055 |
-
#' . $panoid . ' div.pnlm-hotspot-base.fa,
|
1056 |
-
#' . $panoid . ' div.pnlm-hotspot-base.far {
|
1057 |
-
display: block !important;
|
1058 |
-
background-color: ' . $hotspoticoncolor . ';
|
1059 |
-
color: ' . $foreground_color . ';
|
1060 |
-
border-radius: 100%;
|
1061 |
-
width: 30px;
|
1062 |
-
height: 30px;
|
1063 |
-
animation: icon-pulse' . $panoid . ' 1.5s infinite cubic-bezier(.25, 0, 0, 1);
|
1064 |
-
}';
|
1065 |
$panoid2 = 'pano2'.$id;
|
1066 |
-
$
|
1067 |
-
|
1068 |
-
|
1069 |
-
|
1070 |
-
|
1071 |
-
|
1072 |
-
|
1073 |
-
|
1074 |
-
|
1075 |
-
|
1076 |
-
|
1077 |
-
|
1078 |
-
|
1079 |
-
|
1080 |
-
|
1081 |
-
|
1082 |
-
|
1083 |
-
|
1084 |
-
|
1085 |
-
|
1086 |
-
|
1087 |
-
|
1088 |
-
|
1089 |
-
|
1090 |
-
|
1091 |
-
|
1092 |
-
|
1093 |
-
|
1094 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1095 |
}
|
1096 |
|
1097 |
$status = get_option('wpvr_edd_license_status');
|
@@ -1134,7 +1174,6 @@ class WPVR_Scene {
|
|
1134 |
<input type="checkbox" class="vr_mode_change' . $id . '" name="vr_mode_change" value="off">
|
1135 |
<span class="switcher-box">
|
1136 |
<span class="normal-mode-tooltip">Normal VR Mode</span>
|
1137 |
-
<span class="cardbord-mode-tooltip">Cardboard VR Mode</span>
|
1138 |
<svg width="78" height="60" viewBox="0 0 78 60" fill="none" xmlns="http://www.w3.org/2000/svg">
|
1139 |
<path d="M42.25 21.4286C42.25 22.2811 41.9076 23.0986 41.2981 23.7014C40.6886 24.3042 39.862 24.6429 39 24.6429C38.138 24.6429 37.3114 24.3042 36.7019 23.7014C36.0924 23.0986 35.75 22.2811 35.75 21.4286C35.75 20.5761 36.0924 19.7585 36.7019 19.1557C37.3114 18.5529 38.138 18.2143 39 18.2143C39.862 18.2143 40.6886 18.5529 41.2981 19.1557C41.9076 19.7585 42.25 20.5761 42.25 21.4286ZM19.5 30C18.9254 30 18.3743 30.2258 17.9679 30.6276C17.5616 31.0295 17.3333 31.5745 17.3333 32.1429C17.3333 32.7112 17.5616 33.2562 17.9679 33.6581C18.3743 34.06 18.9254 34.2857 19.5 34.2857H28.1667C28.7413 34.2857 29.2924 34.06 29.6987 33.6581C30.1051 33.2562 30.3333 32.7112 30.3333 32.1429C30.3333 31.5745 30.1051 31.0295 29.6987 30.6276C29.2924 30.2258 28.7413 30 28.1667 30H19.5ZM47.6667 32.1429C47.6667 31.5745 47.8949 31.0295 48.3013 30.6276C48.7076 30.2258 49.2587 30 49.8333 30H58.5C59.0746 30 59.6257 30.2258 60.0321 30.6276C60.4384 31.0295 60.6667 31.5745 60.6667 32.1429C60.6667 32.7112 60.4384 33.2562 60.0321 33.6581C59.6257 34.06 59.0746 34.2857 58.5 34.2857H49.8333C49.2587 34.2857 48.7076 34.06 48.3013 33.6581C47.8949 33.2562 47.6667 32.7112 47.6667 32.1429ZM32.5 0C31.9254 0 31.3743 0.225765 30.9679 0.627629C30.5616 1.02949 30.3333 1.57454 30.3333 2.14286V8.57143H18.4167C14.8693 8.57183 11.4528 9.89617 8.84994 12.2798C6.24706 14.6634 4.64954 17.9306 4.37667 21.4286H2.16667C1.59203 21.4286 1.04093 21.6543 0.634602 22.0562C0.228273 22.4581 0 23.0031 0 23.5714V36.4286C0 36.9969 0.228273 37.5419 0.634602 37.9438C1.04093 38.3457 1.59203 38.5714 2.16667 38.5714H4.33333V46.0714C4.33333 49.7655 5.81711 53.3083 8.45825 55.9204C11.0994 58.5325 14.6815 60 18.4167 60H25.3933C29.1269 59.9986 32.7071 58.5311 35.347 55.92L37.921 53.3786C38.0618 53.2393 38.229 53.1288 38.4131 53.0534C38.5971 52.978 38.7943 52.9392 38.9935 52.9392C39.1927 52.9392 39.3899 52.978 39.5739 53.0534C39.758 53.1288 39.9252 53.2393 40.066 53.3786L42.6357 55.92C45.2766 58.5322 48.8586 59.9998 52.5937 60H59.5833C63.3185 60 66.9006 58.5325 69.5418 55.9204C72.1829 53.3083 73.6667 49.7655 73.6667 46.0714V38.5714H75.8333C76.408 38.5714 76.9591 38.3457 77.3654 37.9438C77.7717 37.5419 78 36.9969 78 36.4286V23.5714C78 23.0031 77.7717 22.4581 77.3654 22.0562C76.9591 21.6543 76.408 21.4286 75.8333 21.4286H73.6233C73.3505 17.9306 71.753 14.6634 69.1501 12.2798C66.5472 9.89617 63.1307 8.57183 59.5833 8.57143H47.6667V2.14286C47.6667 1.57454 47.4384 1.02949 47.0321 0.627629C46.6257 0.225765 46.0746 0 45.5 0H32.5ZM69.3333 22.5V46.0714C69.3333 48.6289 68.3061 51.0816 66.4776 52.89C64.6491 54.6983 62.1692 55.7143 59.5833 55.7143H52.5937C50.0093 55.7132 47.5311 54.6973 45.7037 52.89L43.1297 50.3486C42.5864 49.8108 41.9413 49.3842 41.2312 49.0931C40.5211 48.8021 39.76 48.6522 38.9913 48.6522C38.2227 48.6522 37.4616 48.8021 36.7515 49.0931C36.0414 49.3842 35.3963 49.8108 34.853 50.3486L32.2833 52.89C30.4559 54.6973 27.9777 55.7132 25.3933 55.7143H18.4167C15.8308 55.7143 13.3509 54.6983 11.5224 52.89C9.6939 51.0816 8.66667 48.6289 8.66667 46.0714V22.5C8.66667 19.9426 9.6939 17.4899 11.5224 15.6815C13.3509 13.8731 15.8308 12.8571 18.4167 12.8571H59.5833C62.1692 12.8571 64.6491 13.8731 66.4776 15.6815C68.3061 17.4899 69.3333 19.9426 69.3333 22.5Z" fill="#216DF0"/>
|
1140 |
</svg>
|
@@ -1583,6 +1622,15 @@ class WPVR_Scene {
|
|
1583 |
}
|
1584 |
}
|
1585 |
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1586 |
';
|
1587 |
|
1588 |
$html .= '
|
@@ -1660,6 +1708,11 @@ class WPVR_Scene {
|
|
1660 |
});
|
1661 |
panoshow' . $id . '.startOrientation();
|
1662 |
panoshow2' . $id . '.startOrientation();
|
|
|
|
|
|
|
|
|
|
|
1663 |
getParent.find("#pano' .$id. ' #zoom-in-out-controls'.$id.'").hide();
|
1664 |
getParent.find("#pano' .$id. ' #controls'.$id.'").hide();
|
1665 |
getParent.find("#pano' .$id. ' #explainer_button_'.$id.'").hide();
|
@@ -1682,13 +1735,7 @@ class WPVR_Scene {
|
|
1682 |
getParent.find(".fullscreen-button").hide();
|
1683 |
|
1684 |
if (window.DeviceOrientationEvent) {
|
1685 |
-
window.addEventListener("deviceorientation",
|
1686 |
-
var data = {
|
1687 |
-
pitch: panoshow' . $id . '.getPitch(),
|
1688 |
-
yaw: panoshow' . $id . '.getYaw(),
|
1689 |
-
};
|
1690 |
-
panoShowCardBoardOnTrigger(data);
|
1691 |
-
});
|
1692 |
}
|
1693 |
|
1694 |
panoshow' . $id . '.on("zoomchange", function (data){
|
@@ -1754,6 +1801,8 @@ class WPVR_Scene {
|
|
1754 |
"visibility": "hidden",
|
1755 |
"position": "absolute",
|
1756 |
});
|
|
|
|
|
1757 |
getParent.find("#pano' .$id. ' #zoom-in-out-controls'.$id.'").show();
|
1758 |
getParent.find("#pano' .$id. ' #controls'.$id.'").show();
|
1759 |
getParent.find("#pano' .$id. ' #explainer_button_'.$id.'").show();
|
@@ -1778,7 +1827,12 @@ class WPVR_Scene {
|
|
1778 |
getParent.find("#center-pointer' . $id . '").hide();
|
1779 |
getParent.find(".fullscreen-button").hide();
|
1780 |
panoshow' . $id . '.off("mousemove");
|
|
|
1781 |
panoshow2' . $id . '.off("mousemove");
|
|
|
|
|
|
|
|
|
1782 |
}
|
1783 |
});';
|
1784 |
|
820 |
$status = get_option('wpvr_edd_license_status');
|
821 |
if ($status !== false && $status == 'valid') {
|
822 |
if (isset($hotspot_data["hotspot-customclass-pro"]) && $hotspot_data["hotspot-customclass-pro"] != 'none') {
|
823 |
+
$hotspot_data['hotspot-customclass'] = $hotspot_data["hotspot-customclass-pro"] . ' custom-' . $id.'-' . $panoscenes['scene-id'] .'-'. $hotspot_data['hotspot-title'];
|
|
|
824 |
}
|
825 |
if (isset($hotspot_data['hotspot-blink'])) {
|
826 |
$hotspotblink = $hotspot_data['hotspot-blink'];
|
1048 |
overflow: hidden;
|
1049 |
}';
|
1050 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1051 |
$panoid2 = 'pano2'.$id;
|
1052 |
+
$status = get_option('wpvr_edd_license_status');
|
1053 |
+
if ($status !== false && $status == 'valid') {
|
1054 |
+
foreach ($panodata['scene-list'] as $panoscenes){
|
1055 |
+
|
1056 |
+
foreach($panoscenes['hotspot-list'] as $hotspot){
|
1057 |
+
if (isset($hotspot['hotspot-customclass-color-icon-value']) && !empty($hotspot['hotspot-customclass-color-icon-value'])){
|
1058 |
+
$hotspoticoncolor = $hotspot['hotspot-customclass-color-icon-value'];
|
1059 |
+
}else{
|
1060 |
+
$hotspoticoncolor = "#00b4ff";
|
1061 |
+
}
|
1062 |
+
$pulse_color = wpvr_hex2rgb($hotspoticoncolor);
|
1063 |
+
if (isset($hotspot["hotspot-customclass-pro"]) && $hotspot["hotspot-customclass-pro"] != 'none') {
|
1064 |
+
$html .= '#' . $panoid . ' div.pnlm-hotspot-base.fas.custom-' . $id.'-' . $panoscenes['scene-id'] .'-'. $hotspot['hotspot-title'].',
|
1065 |
+
#' . $panoid . ' div.pnlm-hotspot-base.fab.custom-' . $id.'-' . $panoscenes['scene-id'] .'-'. $hotspot['hotspot-title'].',
|
1066 |
+
#' . $panoid . ' div.pnlm-hotspot-base.fa.custom-' . $id.'-' . $panoscenes['scene-id'] .'-'. $hotspot['hotspot-title'].',
|
1067 |
+
#' . $panoid . ' div.pnlm-hotspot-base.far.custom-' . $id.'-' . $panoscenes['scene-id'] .'-'. $hotspot['hotspot-title'].' {
|
1068 |
+
display: block !important;
|
1069 |
+
background-color: ' .$hotspoticoncolor.';
|
1070 |
+
color: ' . $foreground_color . ';
|
1071 |
+
border-radius: 100%;
|
1072 |
+
width: 30px;
|
1073 |
+
height: 30px;
|
1074 |
+
font-size: 16px;
|
1075 |
+
line-height: 30px;
|
1076 |
+
animation: icon-pulse' . $panoid .'-'. $panoscenes['scene-id'] .'-'. $hotspot['hotspot-title'].' 1.5s infinite cubic-bezier(.25, 0, 0, 1);
|
1077 |
+
}';
|
1078 |
+
$html .= '#' . $panoid2 . ' div.pnlm-hotspot-base.fas.custom-' . $id.'-' . $panoscenes['scene-id'] .'-'. $hotspot['hotspot-title'].',
|
1079 |
+
#' . $panoid2 . ' div.pnlm-hotspot-base.fab.custom-' . $id.'-' . $panoscenes['scene-id'] .'-'. $hotspot['hotspot-title'].',
|
1080 |
+
#' . $panoid2 . ' div.pnlm-hotspot-base.fa.custom-' . $id.'-' . $panoscenes['scene-id'] .'-'. $hotspot['hotspot-title'].',
|
1081 |
+
#' . $panoid2 . ' div.pnlm-hotspot-base.far.custom-' . $id.'-' . $panoscenes['scene-id'] .'-'. $hotspot['hotspot-title'].' {
|
1082 |
+
display: block !important;
|
1083 |
+
background-color: ' . $hotspoticoncolor. ';
|
1084 |
+
color: ' . $foreground_color . ';
|
1085 |
+
border-radius: 100%;
|
1086 |
+
width: 30px;
|
1087 |
+
height: 30px;
|
1088 |
+
font-size: 16px;
|
1089 |
+
line-height: 30px;
|
1090 |
+
animation: icon-pulse' . $panoid2 .'-'. $panoscenes['scene-id'] .'-'. $hotspot['hotspot-title']. ' 1.5s infinite cubic-bezier(.25, 0, 0, 1);
|
1091 |
+
}';
|
1092 |
+
}
|
1093 |
+
if (isset($hotspot['hotspot-blink'])) {
|
1094 |
+
$hotspotblink = $hotspot['hotspot-blink'];
|
1095 |
+
if ($hotspotblink == 'on') {
|
1096 |
+
$html .= '@-webkit-keyframes icon-pulse' .$panoid .'-'. $panoscenes['scene-id'] .'-'. $hotspot['hotspot-title'] .' {
|
1097 |
+
0% {
|
1098 |
+
box-shadow: 0 0 0 0px rgba(' . $pulse_color[0] . ', 1);
|
1099 |
+
}
|
1100 |
+
100% {
|
1101 |
+
box-shadow: 0 0 0 10px rgba(' . $pulse_color[0] . ', 0);
|
1102 |
+
}
|
1103 |
+
}
|
1104 |
+
@keyframes icon-pulse' . $panoid . ' {
|
1105 |
+
0% {
|
1106 |
+
box-shadow: 0 0 0 0px rgba(' . $pulse_color[0] . ', 1);
|
1107 |
+
}
|
1108 |
+
100% {
|
1109 |
+
box-shadow: 0 0 0 10px rgba(' . $pulse_color[0] . ', 0);
|
1110 |
+
}
|
1111 |
+
}';
|
1112 |
+
$html .= '@-webkit-keyframes icon-pulse' .$panoid2 .'-'. $panoscenes['scene-id'] .'-'. $hotspot['hotspot-title'] .' {
|
1113 |
+
0% {
|
1114 |
+
box-shadow: 0 0 0 0px rgba(' . $pulse_color[0] . ', 1);
|
1115 |
+
}
|
1116 |
+
100% {
|
1117 |
+
box-shadow: 0 0 0 10px rgba(' . $pulse_color[0] . ', 0);
|
1118 |
+
}
|
1119 |
+
}
|
1120 |
+
@keyframes icon-pulse' . $panoid . ' {
|
1121 |
+
0% {
|
1122 |
+
box-shadow: 0 0 0 0px rgba(' . $pulse_color[0] . ', 1);
|
1123 |
+
}
|
1124 |
+
100% {
|
1125 |
+
box-shadow: 0 0 0 10px rgba(' . $pulse_color[0] . ', 0);
|
1126 |
+
}
|
1127 |
+
}';
|
1128 |
+
}
|
1129 |
+
}
|
1130 |
+
|
1131 |
+
}
|
1132 |
+
|
1133 |
+
}
|
1134 |
+
|
1135 |
}
|
1136 |
|
1137 |
$status = get_option('wpvr_edd_license_status');
|
1174 |
<input type="checkbox" class="vr_mode_change' . $id . '" name="vr_mode_change" value="off">
|
1175 |
<span class="switcher-box">
|
1176 |
<span class="normal-mode-tooltip">Normal VR Mode</span>
|
|
|
1177 |
<svg width="78" height="60" viewBox="0 0 78 60" fill="none" xmlns="http://www.w3.org/2000/svg">
|
1178 |
<path d="M42.25 21.4286C42.25 22.2811 41.9076 23.0986 41.2981 23.7014C40.6886 24.3042 39.862 24.6429 39 24.6429C38.138 24.6429 37.3114 24.3042 36.7019 23.7014C36.0924 23.0986 35.75 22.2811 35.75 21.4286C35.75 20.5761 36.0924 19.7585 36.7019 19.1557C37.3114 18.5529 38.138 18.2143 39 18.2143C39.862 18.2143 40.6886 18.5529 41.2981 19.1557C41.9076 19.7585 42.25 20.5761 42.25 21.4286ZM19.5 30C18.9254 30 18.3743 30.2258 17.9679 30.6276C17.5616 31.0295 17.3333 31.5745 17.3333 32.1429C17.3333 32.7112 17.5616 33.2562 17.9679 33.6581C18.3743 34.06 18.9254 34.2857 19.5 34.2857H28.1667C28.7413 34.2857 29.2924 34.06 29.6987 33.6581C30.1051 33.2562 30.3333 32.7112 30.3333 32.1429C30.3333 31.5745 30.1051 31.0295 29.6987 30.6276C29.2924 30.2258 28.7413 30 28.1667 30H19.5ZM47.6667 32.1429C47.6667 31.5745 47.8949 31.0295 48.3013 30.6276C48.7076 30.2258 49.2587 30 49.8333 30H58.5C59.0746 30 59.6257 30.2258 60.0321 30.6276C60.4384 31.0295 60.6667 31.5745 60.6667 32.1429C60.6667 32.7112 60.4384 33.2562 60.0321 33.6581C59.6257 34.06 59.0746 34.2857 58.5 34.2857H49.8333C49.2587 34.2857 48.7076 34.06 48.3013 33.6581C47.8949 33.2562 47.6667 32.7112 47.6667 32.1429ZM32.5 0C31.9254 0 31.3743 0.225765 30.9679 0.627629C30.5616 1.02949 30.3333 1.57454 30.3333 2.14286V8.57143H18.4167C14.8693 8.57183 11.4528 9.89617 8.84994 12.2798C6.24706 14.6634 4.64954 17.9306 4.37667 21.4286H2.16667C1.59203 21.4286 1.04093 21.6543 0.634602 22.0562C0.228273 22.4581 0 23.0031 0 23.5714V36.4286C0 36.9969 0.228273 37.5419 0.634602 37.9438C1.04093 38.3457 1.59203 38.5714 2.16667 38.5714H4.33333V46.0714C4.33333 49.7655 5.81711 53.3083 8.45825 55.9204C11.0994 58.5325 14.6815 60 18.4167 60H25.3933C29.1269 59.9986 32.7071 58.5311 35.347 55.92L37.921 53.3786C38.0618 53.2393 38.229 53.1288 38.4131 53.0534C38.5971 52.978 38.7943 52.9392 38.9935 52.9392C39.1927 52.9392 39.3899 52.978 39.5739 53.0534C39.758 53.1288 39.9252 53.2393 40.066 53.3786L42.6357 55.92C45.2766 58.5322 48.8586 59.9998 52.5937 60H59.5833C63.3185 60 66.9006 58.5325 69.5418 55.9204C72.1829 53.3083 73.6667 49.7655 73.6667 46.0714V38.5714H75.8333C76.408 38.5714 76.9591 38.3457 77.3654 37.9438C77.7717 37.5419 78 36.9969 78 36.4286V23.5714C78 23.0031 77.7717 22.4581 77.3654 22.0562C76.9591 21.6543 76.408 21.4286 75.8333 21.4286H73.6233C73.3505 17.9306 71.753 14.6634 69.1501 12.2798C66.5472 9.89617 63.1307 8.57183 59.5833 8.57143H47.6667V2.14286C47.6667 1.57454 47.4384 1.02949 47.0321 0.627629C46.6257 0.225765 46.0746 0 45.5 0H32.5ZM69.3333 22.5V46.0714C69.3333 48.6289 68.3061 51.0816 66.4776 52.89C64.6491 54.6983 62.1692 55.7143 59.5833 55.7143H52.5937C50.0093 55.7132 47.5311 54.6973 45.7037 52.89L43.1297 50.3486C42.5864 49.8108 41.9413 49.3842 41.2312 49.0931C40.5211 48.8021 39.76 48.6522 38.9913 48.6522C38.2227 48.6522 37.4616 48.8021 36.7515 49.0931C36.0414 49.3842 35.3963 49.8108 34.853 50.3486L32.2833 52.89C30.4559 54.6973 27.9777 55.7132 25.3933 55.7143H18.4167C15.8308 55.7143 13.3509 54.6983 11.5224 52.89C9.6939 51.0816 8.66667 48.6289 8.66667 46.0714V22.5C8.66667 19.9426 9.6939 17.4899 11.5224 15.6815C13.3509 13.8731 15.8308 12.8571 18.4167 12.8571H59.5833C62.1692 12.8571 64.6491 13.8731 66.4776 15.6815C68.3061 17.4899 69.3333 19.9426 69.3333 22.5Z" fill="#216DF0"/>
|
1179 |
</svg>
|
1622 |
}
|
1623 |
}
|
1624 |
};
|
1625 |
+
|
1626 |
+
function vrDeviseOrientation(){
|
1627 |
+
var data = {
|
1628 |
+
pitch: panoshow' . $id . '.getPitch(),
|
1629 |
+
yaw: panoshow' . $id . '.getYaw(),
|
1630 |
+
};
|
1631 |
+
console.log("click orientation")
|
1632 |
+
panoShowCardBoardOnTrigger(data);
|
1633 |
+
}
|
1634 |
';
|
1635 |
|
1636 |
$html .= '
|
1708 |
});
|
1709 |
panoshow' . $id . '.startOrientation();
|
1710 |
panoshow2' . $id . '.startOrientation();
|
1711 |
+
|
1712 |
+
panoshow2' . $id . '.setPitch(panoshow' . $id . '.getPitch(), 0);
|
1713 |
+
panoshow2' . $id . '.setYaw(panoshow' . $id . '.getYaw(), 0);
|
1714 |
+
|
1715 |
+
getParent.find(".pano-wrap").addClass("wpvr-cardboard-disable-event");
|
1716 |
getParent.find("#pano' .$id. ' #zoom-in-out-controls'.$id.'").hide();
|
1717 |
getParent.find("#pano' .$id. ' #controls'.$id.'").hide();
|
1718 |
getParent.find("#pano' .$id. ' #explainer_button_'.$id.'").hide();
|
1735 |
getParent.find(".fullscreen-button").hide();
|
1736 |
|
1737 |
if (window.DeviceOrientationEvent) {
|
1738 |
+
window.addEventListener("deviceorientation", vrDeviseOrientation);
|
|
|
|
|
|
|
|
|
|
|
|
|
1739 |
}
|
1740 |
|
1741 |
panoshow' . $id . '.on("zoomchange", function (data){
|
1801 |
"visibility": "hidden",
|
1802 |
"position": "absolute",
|
1803 |
});
|
1804 |
+
getParent.find(".pano-wrap").removeClass("wpvr-cardboard-disable-event");
|
1805 |
+
|
1806 |
getParent.find("#pano' .$id. ' #zoom-in-out-controls'.$id.'").show();
|
1807 |
getParent.find("#pano' .$id. ' #controls'.$id.'").show();
|
1808 |
getParent.find("#pano' .$id. ' #explainer_button_'.$id.'").show();
|
1827 |
getParent.find("#center-pointer' . $id . '").hide();
|
1828 |
getParent.find(".fullscreen-button").hide();
|
1829 |
panoshow' . $id . '.off("mousemove");
|
1830 |
+
panoshow' . $id . '.off("touchmove");
|
1831 |
panoshow2' . $id . '.off("mousemove");
|
1832 |
+
panoshow2' . $id . '.off("touchmove");
|
1833 |
+
if (window.DeviceOrientationEvent) {
|
1834 |
+
window.removeEventListener("deviceorientation", vrDeviseOrientation);
|
1835 |
+
}
|
1836 |
}
|
1837 |
});';
|
1838 |
|
admin/icon/explainer-vedio.png
ADDED
Binary file
|
includes/class-wpvr.php
CHANGED
@@ -13,6 +13,8 @@
|
|
13 |
* @subpackage Wpvr/includes
|
14 |
*/
|
15 |
|
|
|
|
|
16 |
/**
|
17 |
* The core plugin class.
|
18 |
*
|
@@ -80,6 +82,10 @@ class Wpvr {
|
|
80 |
*/
|
81 |
protected $plugin_admin;
|
82 |
|
|
|
|
|
|
|
|
|
83 |
|
84 |
/**
|
85 |
* Define the core functionality of the plugin.
|
@@ -103,8 +109,14 @@ class Wpvr {
|
|
103 |
$this->set_locale();
|
104 |
$this->define_admin_hooks();
|
105 |
$this->define_public_hooks();
|
|
|
106 |
|
107 |
-
|
|
|
|
|
|
|
|
|
|
|
108 |
|
109 |
|
110 |
/**
|
13 |
* @subpackage Wpvr/includes
|
14 |
*/
|
15 |
|
16 |
+
use WPVR\Builder\DIVI\WPVR_Divi_modules;
|
17 |
+
|
18 |
/**
|
19 |
* The core plugin class.
|
20 |
*
|
82 |
*/
|
83 |
protected $plugin_admin;
|
84 |
|
85 |
+
/**
|
86 |
+
* DIVI modules
|
87 |
+
*/
|
88 |
+
protected $divi_modules;
|
89 |
|
90 |
/**
|
91 |
* Define the core functionality of the plugin.
|
109 |
$this->set_locale();
|
110 |
$this->define_admin_hooks();
|
111 |
$this->define_public_hooks();
|
112 |
+
add_action( 'plugins_loaded', array($this, 'load_plugin'), 99 );
|
113 |
|
114 |
+
}
|
115 |
+
|
116 |
+
public function load_plugin()
|
117 |
+
{
|
118 |
+
$this->divi_modules = WPVR_Divi_modules::instance();
|
119 |
+
}
|
120 |
|
121 |
|
122 |
/**
|
includes/wpvr-divi-modules/asset-manifest.json
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"builder.js": "/scripts/builder-bundle.min.js",
|
3 |
+
"frontend.js": "/scripts/frontend-bundle.min.js"
|
4 |
+
}
|
includes/wpvr-divi-modules/includes/DiviModules.php
ADDED
@@ -0,0 +1,45 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
namespace WPVR\Builder\DIVI\Modules;
|
3 |
+
use DiviExtension;
|
4 |
+
|
5 |
+
class WPVR_Modules extends DiviExtension {
|
6 |
+
|
7 |
+
/**
|
8 |
+
* The gettext domain for the extension's translations.
|
9 |
+
*
|
10 |
+
* @since 1.0.0
|
11 |
+
*
|
12 |
+
* @var string
|
13 |
+
*/
|
14 |
+
public $gettext_domain = 'wpvr';
|
15 |
+
|
16 |
+
/**
|
17 |
+
* The extension's WP Plugin name.
|
18 |
+
*
|
19 |
+
* @since 1.0.0
|
20 |
+
*
|
21 |
+
* @var string
|
22 |
+
*/
|
23 |
+
public $name = 'wpvr-divi-modules';
|
24 |
+
|
25 |
+
/**
|
26 |
+
* The extension's version
|
27 |
+
*
|
28 |
+
* @since 1.0.0
|
29 |
+
*
|
30 |
+
* @var string
|
31 |
+
*/
|
32 |
+
public $version = '1.0.0';
|
33 |
+
|
34 |
+
/**
|
35 |
+
* DiviCustomModules constructor.
|
36 |
+
*
|
37 |
+
* @param string $name
|
38 |
+
* @param array $args
|
39 |
+
*/
|
40 |
+
public function __construct( $name = 'wpvr-divi-modules', $args = array() ) {
|
41 |
+
$this->plugin_dir = plugin_dir_path( __FILE__ );
|
42 |
+
$this->plugin_dir_url = plugin_dir_url( $this->plugin_dir );
|
43 |
+
parent::__construct( $name, $args );
|
44 |
+
}
|
45 |
+
}
|
includes/wpvr-divi-modules/includes/loader.js
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
// External Dependencies
|
2 |
+
import $ from 'jquery';
|
3 |
+
|
4 |
+
// Internal Dependencies
|
5 |
+
import modules from './modules';
|
6 |
+
|
7 |
+
|
8 |
+
$(window).on('et_builder_api_ready', (event, API) => {
|
9 |
+
// Register custom modules
|
10 |
+
API.registerModules(modules);
|
11 |
+
});
|
includes/wpvr-divi-modules/includes/loader.php
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if ( ! class_exists( 'ET_Builder_Element' ) ) {
|
4 |
+
return;
|
5 |
+
}
|
6 |
+
|
7 |
+
$module_files = glob( __DIR__ . '/modules/*/*.php' );
|
8 |
+
|
9 |
+
// Load custom Divi Builder modules
|
10 |
+
foreach ( (array) $module_files as $module_file ) {
|
11 |
+
if ( $module_file ) {
|
12 |
+
require_once $module_file;
|
13 |
+
}
|
14 |
+
}
|
includes/wpvr-divi-modules/includes/modules/index.js
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
// Internal Dependencies
|
2 |
+
import WpvrTour from './wpvr_modules/wpvr_tour';
|
3 |
+
|
4 |
+
export default [WpvrTour];
|
includes/wpvr-divi-modules/includes/modules/wpvr_modules/VR.svg
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
2 |
+
<g clip-path="url(#clip0_46_26)">
|
3 |
+
<path d="M12.88 13.28H10.88C10.08 13.28 9.36 12.8 8.96 12.08L8.8 11.6C8.64 11.28 8.4 11.12 8.08 11.12C7.76 11.12 7.44 11.28 7.36 11.6L7.12 12.08C6.8 12.8 6.08 13.28 5.2 13.28H3.12C1.36 13.28 0 11.84 0 10.16V5.84C0 4.08 1.44 2.72 3.12 2.72H12.88C14.64 2.72 16 4.16 16 5.84V7.04C16 7.36 15.76 7.68 15.36 7.68C15.04 7.68 14.72 7.44 14.72 7.04V5.84C14.72 4.8 13.84 4 12.88 4H3.12C2.08 3.92 1.28 4.8 1.28 5.84V10.16C1.28 11.2 2.16 12 3.12 12H5.2C5.52 12 5.84 11.84 5.92 11.52L6.16 11.04C6.48 10.32 7.2 9.84 8.08 9.84C8.88 9.84 9.6 10.32 10 11.04L10.24 11.52C10.4 11.84 10.64 12 10.96 12H12.96C14 12 14.8 11.12 14.8 10.16C14.8 9.84 15.04 9.52 15.44 9.52C15.76 9.52 16.08 9.76 16.08 10.16C16 11.92 14.56 13.28 12.88 13.28ZM13.36 7.52C13.36 6.48 12.48 5.68 11.52 5.68C10.4 5.68 9.6 6.48 9.6 7.52C9.6 8.56 10.48 9.36 11.44 9.36C12.48 9.36 13.36 8.56 13.36 7.52ZM12.08 7.52C12.08 7.84 11.76 8.16 11.44 8.16C11.12 8.16 10.8 7.84 10.8 7.52C10.8 7.2 11.12 6.88 11.44 6.88C11.84 6.88 12.08 7.2 12.08 7.52ZM6.4 7.52C6.4 6.48 5.6 5.68 4.56 5.68C3.52 5.68 2.64 6.48 2.64 7.52C2.64 8.56 3.52 9.36 4.48 9.36C5.44 9.36 6.4 8.56 6.4 7.52ZM5.12 7.52C5.12 7.84 4.8 8.16 4.48 8.16C4.16 8.16 3.84 7.84 3.84 7.52C3.84 7.2 4.16 6.88 4.48 6.88C4.88 6.88 5.12 7.2 5.12 7.52Z" fill="url(#paint0_linear_46_26)"/>
|
4 |
+
</g>
|
5 |
+
<defs>
|
6 |
+
<linearGradient id="paint0_linear_46_26" x1="0" y1="8" x2="16" y2="8" gradientUnits="userSpaceOnUse">
|
7 |
+
<stop offset="0.00262957" stop-color="#00B4FF"/>
|
8 |
+
<stop offset="0.9984" stop-color="#3F04FE"/>
|
9 |
+
</linearGradient>
|
10 |
+
<clipPath id="clip0_46_26">
|
11 |
+
<rect width="16" height="16" fill="white"/>
|
12 |
+
</clipPath>
|
13 |
+
</defs>
|
14 |
+
</svg>
|
includes/wpvr-divi-modules/includes/modules/wpvr_modules/WpvrTour.php
ADDED
@@ -0,0 +1,185 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace WPVR\Builder\DIVI\Modules;
|
4 |
+
|
5 |
+
use ET_Builder_Module;
|
6 |
+
|
7 |
+
class WPVR_Tour extends ET_Builder_Module {
|
8 |
+
|
9 |
+
public $slug = 'wpvr_divi';
|
10 |
+
public $vb_support = 'on';
|
11 |
+
|
12 |
+
protected $module_credits = array(
|
13 |
+
'module_uri' => '',
|
14 |
+
'author' => '',
|
15 |
+
'author_uri' => '',
|
16 |
+
);
|
17 |
+
/**
|
18 |
+
* Module properties initialization
|
19 |
+
*/
|
20 |
+
public function init() {
|
21 |
+
$this->name = esc_html__( 'WPVR', 'wpvr' );
|
22 |
+
$this->icon_path = plugin_dir_path( __FILE__ ) . 'VR.svg';
|
23 |
+
|
24 |
+
$this->settings_modal_toggles = array(
|
25 |
+
'general' => array(
|
26 |
+
'toggles' => array(
|
27 |
+
'main_content' => __( 'WPVR', 'wpfnl' ),
|
28 |
+
),
|
29 |
+
),
|
30 |
+
);
|
31 |
+
$this->main_css_element = '%%order_class%%';
|
32 |
+
|
33 |
+
}
|
34 |
+
|
35 |
+
function get_advanced_fields_config() {
|
36 |
+
|
37 |
+
$advanced_fields = array();
|
38 |
+
|
39 |
+
|
40 |
+
return $advanced_fields;
|
41 |
+
}
|
42 |
+
/**
|
43 |
+
* Module's specific fields
|
44 |
+
*
|
45 |
+
*
|
46 |
+
* The following modules are automatically added regardless being defined or not:
|
47 |
+
* Tabs | Toggles | Fields
|
48 |
+
* --------- ------------------ -------------
|
49 |
+
* Content | Admin Label | Admin Label
|
50 |
+
* Advanced | CSS ID & Classes | CSS ID
|
51 |
+
* Advanced | CSS ID & Classes | CSS Class
|
52 |
+
* Advanced | Custom CSS | Before
|
53 |
+
* Advanced | Custom CSS | Main Element
|
54 |
+
* Advanced | Custom CSS | After
|
55 |
+
* Advanced | Visibility | Disable On
|
56 |
+
* @return array
|
57 |
+
*/
|
58 |
+
|
59 |
+
/**
|
60 |
+
* Get all active tour
|
61 |
+
* @return array
|
62 |
+
*/
|
63 |
+
public function get_all_tour()
|
64 |
+
{
|
65 |
+
$the_posts = get_posts(array('post_type' => 'wpvr_item',
|
66 |
+
'posts_per_page' => -1));
|
67 |
+
|
68 |
+
$wpvr_post = array(
|
69 |
+
'0' => 'none'
|
70 |
+
);
|
71 |
+
|
72 |
+
foreach($the_posts as $post){
|
73 |
+
if($post->post_title){
|
74 |
+
$wpvr_post[$post->ID] = $post->post_title.' : '.$post->ID;
|
75 |
+
}else{
|
76 |
+
$wpvr_post[$post->ID] = 'No title' .' : '.$post->ID;
|
77 |
+
}
|
78 |
+
}
|
79 |
+
return $wpvr_post;
|
80 |
+
}
|
81 |
+
|
82 |
+
public function get_fields() {
|
83 |
+
return array(
|
84 |
+
'vr_id' => array(
|
85 |
+
'label' => esc_html__( 'ID', 'wpvr' ),
|
86 |
+
'description' => esc_html__( 'WPVR Tour ID', 'wpfnl' ),
|
87 |
+
'type' => 'select',
|
88 |
+
'options' => $this->get_all_tour(),
|
89 |
+
'priority' => 80,
|
90 |
+
'default' => '0',
|
91 |
+
'default_on_front' => '0',
|
92 |
+
'toggle_slug' => 'main_content',
|
93 |
+
'sub_toggle' => 'ul',
|
94 |
+
'mobile_options' => true,
|
95 |
+
),
|
96 |
+
'vr_width' => array(
|
97 |
+
'label' => __( 'Width', 'wpfnl' ),
|
98 |
+
'description' => __( 'WPVR Width', 'wpfnl' ),
|
99 |
+
'type' => 'text',
|
100 |
+
'default' => '600',
|
101 |
+
'default_on_front' => '600',
|
102 |
+
'toggle_slug' => 'main_content',
|
103 |
+
),
|
104 |
+
'vr_height' => array(
|
105 |
+
'label' => __( 'Height', 'wpfnl' ),
|
106 |
+
'description' => __( 'WPVR Height', 'wpfnl' ),
|
107 |
+
'type' => 'text',
|
108 |
+
'default' => '400',
|
109 |
+
'default_on_front' => '400',
|
110 |
+
'toggle_slug' => 'main_content',
|
111 |
+
),
|
112 |
+
'vr_radius' => array(
|
113 |
+
'label' => __( 'Radius', 'wpfnl' ),
|
114 |
+
'description' => __( 'WPVR Radius', 'wpfnl' ),
|
115 |
+
'type' => 'text',
|
116 |
+
'default' => '0',
|
117 |
+
'default_on_front' => '0',
|
118 |
+
'toggle_slug' => 'main_content',
|
119 |
+
),
|
120 |
+
'vr_mobile_height' => array(
|
121 |
+
'label' => __( 'Mobile Height', 'wpfnl' ),
|
122 |
+
'description' => __( 'WPVR Mobile Height', 'wpfnl' ),
|
123 |
+
'type' => 'text',
|
124 |
+
'default' => '300',
|
125 |
+
'default_on_front' => '300',
|
126 |
+
'toggle_slug' => 'main_content',
|
127 |
+
),
|
128 |
+
);
|
129 |
+
}
|
130 |
+
|
131 |
+
|
132 |
+
/**
|
133 |
+
* Computed checkout form
|
134 |
+
* @param $props
|
135 |
+
* @return string
|
136 |
+
*/
|
137 |
+
|
138 |
+
|
139 |
+
public static function wpvr_render($props) {
|
140 |
+
$id = 0;
|
141 |
+
$width = "600px";
|
142 |
+
$height = "400px";
|
143 |
+
$radius = "0px";
|
144 |
+
$id = $props['vr_id'];
|
145 |
+
$width = $props['vr_width']."px";
|
146 |
+
$height = $props['vr_height']."px";
|
147 |
+
$radius = $props['vr_radius']."px";
|
148 |
+
$vr_mobile_height = $props['vr_mobile_height']."px";
|
149 |
+
if (empty($width)) {
|
150 |
+
$width = "600px";
|
151 |
+
}
|
152 |
+
if (empty($height)) {
|
153 |
+
$height = "400px";
|
154 |
+
}
|
155 |
+
if (empty($radius)) {
|
156 |
+
$radius = "0px";
|
157 |
+
}
|
158 |
+
if (empty($vr_mobile_height)) {
|
159 |
+
$vr_mobile_height = "0px";
|
160 |
+
}
|
161 |
+
if ($id) {
|
162 |
+
ob_start();
|
163 |
+
echo do_shortcode( '[wpvr id="'.$id.'" width="'.$width.'" height="'.$height.'" radius="'.$radius.'"]' );
|
164 |
+
|
165 |
+
return ob_get_clean();
|
166 |
+
}
|
167 |
+
|
168 |
+
}
|
169 |
+
|
170 |
+
/**
|
171 |
+
* Render Optin form
|
172 |
+
* @param array $attrs
|
173 |
+
* @param null $content
|
174 |
+
* @param string $render_slug
|
175 |
+
* @return bool|string|null
|
176 |
+
*/
|
177 |
+
|
178 |
+
public function render( $attrs, $content = null, $render_slug )
|
179 |
+
{
|
180 |
+
$output = self::wpvr_render($this->props);
|
181 |
+
return $output;
|
182 |
+
}
|
183 |
+
}
|
184 |
+
|
185 |
+
new WPVR_Tour();
|
includes/wpvr-divi-modules/includes/modules/wpvr_modules/icon.png
ADDED
Binary file
|
includes/wpvr-divi-modules/includes/modules/wpvr_modules/wpvr_tour.jsx
ADDED
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
// External Dependencies
|
2 |
+
import React, { Component, Fragment} from 'react';
|
3 |
+
|
4 |
+
// Internal Dependencies
|
5 |
+
// import './style.css';
|
6 |
+
|
7 |
+
|
8 |
+
class WpvrDivi extends Component {
|
9 |
+
|
10 |
+
static slug = 'wpvr_divi';
|
11 |
+
|
12 |
+
render() {
|
13 |
+
return (
|
14 |
+
<Fragment>
|
15 |
+
<div>
|
16 |
+
<p className="wpvr-block-content">
|
17 |
+
WPVR id={this.props.vr_id}, Width={this.props.vr_width}px, Height={this.props.vr_height}px, Mobile Height={this.props.vr_mobile_height}px, Radius={this.props.vr_radius}px
|
18 |
+
</p>
|
19 |
+
</div>
|
20 |
+
|
21 |
+
</Fragment>
|
22 |
+
);
|
23 |
+
}
|
24 |
+
}
|
25 |
+
|
26 |
+
export default WpvrDivi;
|
includes/wpvr-divi-modules/languages/.gitignore
ADDED
File without changes
|
includes/wpvr-divi-modules/package.json
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"name": "divi-custom-modules",
|
3 |
+
"version": "0.1.0",
|
4 |
+
"private": true,
|
5 |
+
"dependencies": {
|
6 |
+
"divi-scripts": "1.0.0",
|
7 |
+
"react": "^16.3.2",
|
8 |
+
"react-dom": "^16.3.2"
|
9 |
+
},
|
10 |
+
"scripts": {
|
11 |
+
"start": "divi-scripts start",
|
12 |
+
"build": "divi-scripts build",
|
13 |
+
"zip": "divi-scripts build && divi-scripts zip",
|
14 |
+
"eject": "divi-scripts eject"
|
15 |
+
},
|
16 |
+
"browserslist": {
|
17 |
+
"development": [
|
18 |
+
"last 2 chrome versions",
|
19 |
+
"last 2 firefox versions",
|
20 |
+
"last 2 edge versions"
|
21 |
+
],
|
22 |
+
"production": [
|
23 |
+
">1%",
|
24 |
+
"last 4 versions",
|
25 |
+
"Firefox ESR",
|
26 |
+
"not ie < 11"
|
27 |
+
]
|
28 |
+
},
|
29 |
+
"cde": {
|
30 |
+
"gettext": "dicm-divi-custom-modules",
|
31 |
+
"prefix": "dicm"
|
32 |
+
}
|
33 |
+
}
|
includes/wpvr-divi-modules/scripts/builder-bundle.min.js
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="/",r(r.s=0)}([function(e,t,r){r(1),e.exports=r(2)},function(e,t,r){"use strict"},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(3),o=r.n(n),i=r(4);o()(window).on("et_builder_api_ready",function(e,t){t.registerModules(i.a)})},function(e,t){e.exports=jQuery},function(e,t,r){"use strict";var n=r(5);t.a=[n.a]},function(e,t,r){"use strict";var n=r(6),o=r.n(n);function i(e){return(i="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function u(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function c(e,t){return!t||"object"!==i(t)&&"function"!==typeof t?function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e):t}var a=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),c(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}var r,i,a;return function(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,n["Component"]),r=t,(i=[{key:"render",value:function(){return o.a.createElement(n.Fragment,null,o.a.createElement("div",null,o.a.createElement("p",{className:"wpvr-block-content"},"WPVR id=",this.props.vr_id,", Width=",this.props.vr_width,"px, Height=",this.props.vr_height,"px, Mobile Height=",this.props.vr_mobile_height,"px, Radius=",this.props.vr_radius,"px")))}}])&&u(r.prototype,i),a&&u(r,a),t}();Object.defineProperty(a,"slug",{configurable:!0,enumerable:!0,writable:!0,value:"wpvr_divi"}),t.a=a},function(e,t){e.exports=React}]);
|
includes/wpvr-divi-modules/scripts/frontend-bundle.min.js
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
!function(n){var t={};function r(e){if(t[e])return t[e].exports;var o=t[e]={i:e,l:!1,exports:{}};return n[e].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=n,r.c=t,r.d=function(n,t,e){r.o(n,t)||Object.defineProperty(n,t,{configurable:!1,enumerable:!0,get:e})},r.n=function(n){var t=n&&n.__esModule?function(){return n.default}:function(){return n};return r.d(t,"a",t),t},r.o=function(n,t){return Object.prototype.hasOwnProperty.call(n,t)},r.p="/",r(r.s=7)}({7:function(n,t,r){n.exports=r(8)},8:function(n,t){jQuery(function(n){})}});
|
includes/wpvr-divi-modules/scripts/frontend.js
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
1 |
+
// This script is loaded both on the frontend page and in the Visual Builder.
|
2 |
+
|
3 |
+
jQuery(function($) {});
|
includes/wpvr-divi-modules/styles/.gitignore
ADDED
File without changes
|
includes/wpvr-divi-modules/styles/style-dbp.min.css
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
.et_divi_builder #et_builder_outer_content .dicm_cta_vb .et_pb_button_wrapper{margin-top:20px}.et_divi_builder #et_builder_outer_content .dicm_cta_all_options .et_pb_button_wrapper{margin:20px 0 0}.et_divi_builder #et_builder_outer_content .dicm_cta_all_options .fields-group{background:#f1f1f1;padding:30px;margin-bottom:30px;line-height:1.7em}.et_divi_builder #et_builder_outer_content .dicm_cta_all_options .basic-fields{margin-top:20px}.et_divi_builder #et_builder_outer_content .dicm_cta_all_options .fields-group h4{margin-top:30px}.et_divi_builder #et_builder_outer_content .dicm_cta_all_options .fields-group h4:first-child{margin-top:0}.et_divi_builder #et_builder_outer_content .dicm_cta_all_options .colorpicker-preview{display:block;width:250px;height:35px;border-radius:5px}.et_divi_builder #et_builder_outer_content .dicm_cta_all_options pre{white-space:pre-wrap}.et_divi_builder #et_builder_outer_content .dicm_cta_child{margin-bottom:20px}.et_divi_builder #et_builder_outer_content .dicm_cta_child .et_pb_button_wrapper{margin-top:20px}
|
includes/wpvr-divi-modules/styles/style.min.css
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
.dicm_cta_vb .et_pb_button_wrapper{margin-top:20px}.dicm_cta_all_options .et_pb_button_wrapper{margin:20px 0 0}.dicm_cta_all_options .fields-group{background:#f1f1f1;padding:30px;margin-bottom:30px;line-height:1.7em}.dicm_cta_all_options .basic-fields{margin-top:20px}.dicm_cta_all_options .fields-group h4{margin-top:30px}.dicm_cta_all_options .fields-group h4:first-child{margin-top:0}.dicm_cta_all_options .colorpicker-preview{display:block;width:250px;height:35px;border-radius:5px}.dicm_cta_all_options pre{white-space:pre-wrap}.dicm_cta_child{margin-bottom:20px}.dicm_cta_child .et_pb_button_wrapper{margin-top:20px}
|
includes/wpvr-divi-modules/wpvr_divi_modules.php
ADDED
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace WPVR\Builder\DIVI;
|
4 |
+
|
5 |
+
use WPVR\Builder\DIVI\Modules\WPVR_Modules;
|
6 |
+
|
7 |
+
Class WPVR_Divi_modules {
|
8 |
+
|
9 |
+
private static $_instance = null;
|
10 |
+
|
11 |
+
public static function instance()
|
12 |
+
{
|
13 |
+
if (is_null(self::$_instance)) {
|
14 |
+
self::$_instance = new self();
|
15 |
+
}
|
16 |
+
return self::$_instance;
|
17 |
+
}
|
18 |
+
|
19 |
+
|
20 |
+
private function __construct()
|
21 |
+
{
|
22 |
+
$this->init();
|
23 |
+
}
|
24 |
+
|
25 |
+
/**
|
26 |
+
* initialize divi modules
|
27 |
+
*/
|
28 |
+
private function init() {
|
29 |
+
add_action( 'divi_extensions_init', array( $this,'wpvr_initialize_extension' ) );
|
30 |
+
}
|
31 |
+
|
32 |
+
/**
|
33 |
+
* Creates the extension's main class instance.
|
34 |
+
*
|
35 |
+
* @since 8.1.2
|
36 |
+
*/
|
37 |
+
|
38 |
+
function wpvr_initialize_extension() {
|
39 |
+
new WPVR_Modules;
|
40 |
+
}
|
41 |
+
}
|
42 |
+
|
43 |
+
|
44 |
+
|
includes/wpvr-divi-modules/yarn.lock
ADDED
@@ -0,0 +1,8385 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|