Browse Source

Theme Update

master
30117125 4 years ago
parent
commit
89f0f3ff3e
100 changed files with 6963 additions and 2363 deletions
  1. 93
    69
      package-lock.json
  2. 3
    0
      package.json
  3. 1520
    0
      public/css/newStyle.css
  4. 1084
    1129
      public/css/style.css
  5. BIN
      public/img/intro-carousel/16.jpg
  6. BIN
      public/img/intro-carousel/18.jpg
  7. BIN
      public/img/intro-carousel/2.jpg
  8. BIN
      public/img/intro-carousel/21.jpg
  9. BIN
      public/img/intro-carousel/23.jpg
  10. BIN
      public/img/intro-carousel/3.jpg
  11. BIN
      public/img/intro-carousel/4.jpg
  12. BIN
      public/img/intro-carousel/6.jpg
  13. BIN
      public/img/intro-carousel/8.jpg
  14. BIN
      public/img/intro-carousel/9.jpg
  15. BIN
      public/img/intro-carousel/Thumbs.db
  16. BIN
      public/img/intro-carousel/_DS_Store
  17. BIN
      public/img/intro-carousel/comm-1.jpg
  18. BIN
      public/img/intro-carousel/comm-2.jpg
  19. BIN
      public/img/intro-carousel/comm-3.jpg
  20. BIN
      public/img/intro-carousel/comm-4.jpg
  21. BIN
      public/img/intro-carousel/comm-5.jpg
  22. BIN
      public/img/intro-carousel/comm-6.jpg
  23. BIN
      public/img/intro-carousel/home-1.jpg
  24. BIN
      public/img/intro-carousel/home-2.jpg
  25. BIN
      public/img/intro-carousel/home-3.jpg
  26. BIN
      public/img/intro-carousel/home-4.jpg
  27. BIN
      public/img/intro-carousel/home-5.jpg
  28. BIN
      public/img/intro-carousel/home-6.jpg
  29. BIN
      public/img/intro-carousel/residential-1.jpg
  30. BIN
      public/img/intro-carousel/residential-2.jpg
  31. BIN
      public/img/intro-carousel/residential-3.jpg
  32. BIN
      public/img/intro-carousel/residential-4.jpg
  33. BIN
      public/img/intro-carousel/residential-5.jpg
  34. BIN
      public/img/intro-carousel/residential-6.jpg
  35. BIN
      public/img/intro-carousel/timeshare-1.jpg
  36. BIN
      public/img/intro-carousel/timeshare-2.jpg
  37. BIN
      public/img/intro-carousel/timeshare-3.jpg
  38. BIN
      public/img/intro-carousel/timeshare-4.jpg
  39. BIN
      public/img/intro-carousel/timeshare-5.jpg
  40. BIN
      public/img/intro-carousel/timeshare-6.jpg
  41. BIN
      public/img/logos.jpg
  42. BIN
      public/img/logos/daeNew.png
  43. BIN
      public/img/logos/gomeloNew.png
  44. BIN
      public/img/logos/rciNew.png
  45. BIN
      public/img/logos/voasaNew.png
  46. BIN
      public/img/quote.png
  47. BIN
      public/img/strip.png
  48. BIN
      public/img/timeshare-pic.png
  49. 182
    68
      public/js/main.js
  50. 542
    0
      public/lib/wow/wow.js
  51. 3
    0
      public/lib/wow/wow.min.js
  52. BIN
      public/webfonts/Playlist-Script.ttf.eot
  53. 1102
    0
      public/webfonts/Playlist-Script.ttf.svg
  54. BIN
      public/webfonts/Playlist-Script.ttf.woff
  55. BIN
      public/webfonts/_DS_Store
  56. 24
    0
      public/webfonts/install-a-webfont.txt
  57. 6
    6
      src/App.vue
  58. 30
    70
      src/components/about/aboutTimeshare.vue
  59. 50
    0
      src/components/about/aboutTimeshareCarouselSection.vue
  60. 75
    0
      src/components/about/aboutTimeshareContentSection.vue
  61. 164
    0
      src/components/about/aboutTimeshareTestimonialSection.vue
  62. 52
    0
      src/components/about/aboutUsCarouselSection.vue
  63. 68
    0
      src/components/about/aboutUsContentSection.vue
  64. 14
    102
      src/components/about/aboutUsPage.vue
  65. 21
    22
      src/components/admin/logs/SearchLogs.vue
  66. 36
    38
      src/components/admin/misc/carousel.vue
  67. 16
    17
      src/components/admin/misc/carouselList.vue
  68. 15
    16
      src/components/admin/property/propertyTypeList.vue
  69. 14
    17
      src/components/admin/property/userDefinedGroupsPage.vue
  70. 20
    28
      src/components/admin/status/changeLogPage.vue
  71. 12
    13
      src/components/admin/status/statusPage.vue
  72. 22
    30
      src/components/admin/status/tenderWeekAdminPage.vue
  73. 44
    33
      src/components/admin/status/timeshareAdminPage.vue
  74. 54
    60
      src/components/admin/status/userManagementPage.vue
  75. 12
    20
      src/components/admin/unitConfiguration/unitConfigurationPage.vue
  76. 38
    33
      src/components/communication/templatePage.vue
  77. 14
    14
      src/components/financial/payments.vue
  78. 246
    67
      src/components/home/carouselSection.vue
  79. 20
    18
      src/components/home/homePage.vue
  80. 28
    22
      src/components/home/propertySection.vue
  81. 26
    35
      src/components/marketing/landingPage.vue
  82. 4
    4
      src/components/marketing/landingPages.vue
  83. 101
    105
      src/components/misc/address.vue
  84. 68
    117
      src/components/processFlow/makeOffer.vue
  85. 16
    17
      src/components/processFlow/offers.vue
  86. 158
    0
      src/components/property/commercial/commercialCarouselSection.vue
  87. 19
    0
      src/components/property/commercial/commercialContentSection.vue
  88. 34
    0
      src/components/property/commercial/commercialPage.vue
  89. 109
    0
      src/components/property/commercial/commercialSearchResults.vue
  90. 49
    0
      src/components/property/commercial/latestListings.vue
  91. 46
    0
      src/components/property/commercial/singleView/carouselSection.vue
  92. 146
    0
      src/components/property/commercial/singleView/contentSection.vue
  93. 65
    0
      src/components/property/commercial/singleView/singleCommercialPage.vue
  94. 46
    129
      src/components/property/propertyCard.vue
  95. 40
    64
      src/components/property/propertySearchResults.vue
  96. 49
    0
      src/components/property/residential/latestListings.vue
  97. 310
    0
      src/components/property/residential/residentialCarouselSection.vue
  98. 19
    0
      src/components/property/residential/residentialContentSection.vue
  99. 34
    0
      src/components/property/residential/residentialPage.vue
  100. 0
    0
      src/components/property/residential/residentialSearchResults.vue

+ 93
- 69
package-lock.json View File

@@ -1809,14 +1809,12 @@
1809 1809
     "ajv-errors": {
1810 1810
       "version": "1.0.1",
1811 1811
       "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
1812
-      "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==",
1813
-      "dev": true
1812
+      "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ=="
1814 1813
     },
1815 1814
     "ajv-keywords": {
1816 1815
       "version": "3.4.1",
1817 1816
       "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz",
1818
-      "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==",
1819
-      "dev": true
1817
+      "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ=="
1820 1818
     },
1821 1819
     "alphanum-sort": {
1822 1820
       "version": "1.0.2",
@@ -1862,7 +1860,6 @@
1862 1860
       "version": "3.2.1",
1863 1861
       "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
1864 1862
       "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
1865
-      "dev": true,
1866 1863
       "requires": {
1867 1864
         "color-convert": "^1.9.0"
1868 1865
       }
@@ -1894,6 +1891,16 @@
1894 1891
         }
1895 1892
       }
1896 1893
     },
1894
+    "aos": {
1895
+      "version": "3.0.0-beta.6",
1896
+      "resolved": "https://registry.npmjs.org/aos/-/aos-3.0.0-beta.6.tgz",
1897
+      "integrity": "sha512-VLWrpq8bfAWcetynVHMMrqdC+89Qq/Ym6UBJbHB4crIwp3RR8uq1dNGgsFzoDl03S43rlVMK+na3r5+oUCZsYw==",
1898
+      "requires": {
1899
+        "classlist-polyfill": "^1.2.0",
1900
+        "lodash.debounce": "^4.0.8",
1901
+        "lodash.throttle": "^4.1.1"
1902
+      }
1903
+    },
1897 1904
     "aproba": {
1898 1905
       "version": "1.2.0",
1899 1906
       "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
@@ -2170,7 +2177,6 @@
2170 2177
       "version": "6.26.0",
2171 2178
       "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
2172 2179
       "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
2173
-      "dev": true,
2174 2180
       "requires": {
2175 2181
         "chalk": "^1.1.3",
2176 2182
         "esutils": "^2.0.2",
@@ -2180,20 +2186,17 @@
2180 2186
         "ansi-regex": {
2181 2187
           "version": "2.1.1",
2182 2188
           "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
2183
-          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
2184
-          "dev": true
2189
+          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
2185 2190
         },
2186 2191
         "ansi-styles": {
2187 2192
           "version": "2.2.1",
2188 2193
           "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
2189
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
2190
-          "dev": true
2194
+          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
2191 2195
         },
2192 2196
         "chalk": {
2193 2197
           "version": "1.1.3",
2194 2198
           "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
2195 2199
           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
2196
-          "dev": true,
2197 2200
           "requires": {
2198 2201
             "ansi-styles": "^2.2.1",
2199 2202
             "escape-string-regexp": "^1.0.2",
@@ -2205,14 +2208,12 @@
2205 2208
         "js-tokens": {
2206 2209
           "version": "3.0.2",
2207 2210
           "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
2208
-          "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
2209
-          "dev": true
2211
+          "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls="
2210 2212
         },
2211 2213
         "strip-ansi": {
2212 2214
           "version": "3.0.1",
2213 2215
           "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
2214 2216
           "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
2215
-          "dev": true,
2216 2217
           "requires": {
2217 2218
             "ansi-regex": "^2.0.0"
2218 2219
           }
@@ -2220,8 +2221,7 @@
2220 2221
         "supports-color": {
2221 2222
           "version": "2.0.0",
2222 2223
           "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
2223
-          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
2224
-          "dev": true
2224
+          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
2225 2225
         }
2226 2226
       }
2227 2227
     },
@@ -2792,7 +2792,6 @@
2792 2792
       "version": "2.4.2",
2793 2793
       "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
2794 2794
       "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
2795
-      "dev": true,
2796 2795
       "requires": {
2797 2796
         "ansi-styles": "^3.2.1",
2798 2797
         "escape-string-regexp": "^1.0.5",
@@ -2891,6 +2890,11 @@
2891 2890
         }
2892 2891
       }
2893 2892
     },
2893
+    "classlist-polyfill": {
2894
+      "version": "1.2.0",
2895
+      "resolved": "https://registry.npmjs.org/classlist-polyfill/-/classlist-polyfill-1.2.0.tgz",
2896
+      "integrity": "sha1-k1vC39lFiodrJ5YXUUY4vKqWSi4="
2897
+    },
2894 2898
     "clean-css": {
2895 2899
       "version": "4.2.1",
2896 2900
       "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz",
@@ -3102,7 +3106,6 @@
3102 3106
       "version": "1.9.3",
3103 3107
       "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
3104 3108
       "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
3105
-      "dev": true,
3106 3109
       "requires": {
3107 3110
         "color-name": "1.1.3"
3108 3111
       }
@@ -3110,8 +3113,7 @@
3110 3113
     "color-name": {
3111 3114
       "version": "1.1.3",
3112 3115
       "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
3113
-      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
3114
-      "dev": true
3116
+      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
3115 3117
     },
3116 3118
     "color-string": {
3117 3119
       "version": "1.5.3",
@@ -3580,7 +3582,6 @@
3580 3582
       "version": "1.0.1",
3581 3583
       "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-1.0.1.tgz",
3582 3584
       "integrity": "sha512-+ZHAZm/yqvJ2kDtPne3uX0C+Vr3Zn5jFn2N4HywtS5ujwvsVkyg0VArEXpl3BgczDA8anieki1FIzhchX4yrDw==",
3583
-      "dev": true,
3584 3585
       "requires": {
3585 3586
         "babel-code-frame": "^6.26.0",
3586 3587
         "css-selector-tokenizer": "^0.7.0",
@@ -3600,7 +3601,6 @@
3600 3601
           "version": "6.0.23",
3601 3602
           "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
3602 3603
           "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
3603
-          "dev": true,
3604 3604
           "requires": {
3605 3605
             "chalk": "^2.4.1",
3606 3606
             "source-map": "^0.6.1",
@@ -3610,8 +3610,7 @@
3610 3610
         "source-map": {
3611 3611
           "version": "0.6.1",
3612 3612
           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
3613
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
3614
-          "dev": true
3613
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
3615 3614
         }
3616 3615
       }
3617 3616
     },
@@ -3637,7 +3636,6 @@
3637 3636
       "version": "0.7.1",
3638 3637
       "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz",
3639 3638
       "integrity": "sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA==",
3640
-      "dev": true,
3641 3639
       "requires": {
3642 3640
         "cssesc": "^0.1.0",
3643 3641
         "fastparse": "^1.1.1",
@@ -3647,20 +3645,17 @@
3647 3645
         "cssesc": {
3648 3646
           "version": "0.1.0",
3649 3647
           "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz",
3650
-          "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=",
3651
-          "dev": true
3648
+          "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q="
3652 3649
         },
3653 3650
         "jsesc": {
3654 3651
           "version": "0.5.0",
3655 3652
           "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
3656
-          "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
3657
-          "dev": true
3653
+          "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0="
3658 3654
         },
3659 3655
         "regexpu-core": {
3660 3656
           "version": "1.0.0",
3661 3657
           "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz",
3662 3658
           "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=",
3663
-          "dev": true,
3664 3659
           "requires": {
3665 3660
             "regenerate": "^1.2.1",
3666 3661
             "regjsgen": "^0.2.0",
@@ -3670,14 +3665,12 @@
3670 3665
         "regjsgen": {
3671 3666
           "version": "0.2.0",
3672 3667
           "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz",
3673
-          "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=",
3674
-          "dev": true
3668
+          "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc="
3675 3669
         },
3676 3670
         "regjsparser": {
3677 3671
           "version": "0.1.5",
3678 3672
           "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz",
3679 3673
           "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
3680
-          "dev": true,
3681 3674
           "requires": {
3682 3675
             "jsesc": "~0.5.0"
3683 3676
           }
@@ -5025,8 +5018,7 @@
5025 5018
     "esutils": {
5026 5019
       "version": "2.0.2",
5027 5020
       "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
5028
-      "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
5029
-      "dev": true
5021
+      "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs="
5030 5022
     },
5031 5023
     "etag": {
5032 5024
       "version": "1.8.1",
@@ -5334,8 +5326,7 @@
5334 5326
     "fastparse": {
5335 5327
       "version": "1.1.2",
5336 5328
       "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz",
5337
-      "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==",
5338
-      "dev": true
5329
+      "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ=="
5339 5330
     },
5340 5331
     "faye-websocket": {
5341 5332
       "version": "0.10.0",
@@ -6444,8 +6435,7 @@
6444 6435
     "has-flag": {
6445 6436
       "version": "3.0.0",
6446 6437
       "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
6447
-      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
6448
-      "dev": true
6438
+      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
6449 6439
     },
6450 6440
     "has-symbols": {
6451 6441
       "version": "1.0.1",
@@ -6782,14 +6772,12 @@
6782 6772
     "icss-replace-symbols": {
6783 6773
       "version": "1.1.0",
6784 6774
       "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz",
6785
-      "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=",
6786
-      "dev": true
6775
+      "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0="
6787 6776
     },
6788 6777
     "icss-utils": {
6789 6778
       "version": "2.1.0",
6790 6779
       "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz",
6791 6780
       "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=",
6792
-      "dev": true,
6793 6781
       "requires": {
6794 6782
         "postcss": "^6.0.1"
6795 6783
       },
@@ -6798,7 +6786,6 @@
6798 6786
           "version": "6.0.23",
6799 6787
           "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
6800 6788
           "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
6801
-          "dev": true,
6802 6789
           "requires": {
6803 6790
             "chalk": "^2.4.1",
6804 6791
             "source-map": "^0.6.1",
@@ -6808,8 +6795,7 @@
6808 6795
         "source-map": {
6809 6796
           "version": "0.6.1",
6810 6797
           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
6811
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
6812
-          "dev": true
6798
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
6813 6799
         }
6814 6800
       }
6815 6801
     },
@@ -7658,6 +7644,11 @@
7658 7644
       "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
7659 7645
       "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8="
7660 7646
     },
7647
+    "lodash.debounce": {
7648
+      "version": "4.0.8",
7649
+      "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
7650
+      "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168="
7651
+    },
7661 7652
     "lodash.defaultsdeep": {
7662 7653
       "version": "4.6.1",
7663 7654
       "resolved": "https://registry.npmjs.org/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz",
@@ -7682,6 +7673,11 @@
7682 7673
       "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
7683 7674
       "dev": true
7684 7675
     },
7676
+    "lodash.throttle": {
7677
+      "version": "4.1.1",
7678
+      "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz",
7679
+      "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ="
7680
+    },
7685 7681
     "lodash.transform": {
7686 7682
       "version": "4.6.0",
7687 7683
       "resolved": "https://registry.npmjs.org/lodash.transform/-/lodash.transform-4.6.0.tgz",
@@ -8772,6 +8768,14 @@
8772 8768
         "os-tmpdir": "^1.0.0"
8773 8769
       }
8774 8770
     },
8771
+    "owl.carousel": {
8772
+      "version": "2.3.4",
8773
+      "resolved": "https://registry.npmjs.org/owl.carousel/-/owl.carousel-2.3.4.tgz",
8774
+      "integrity": "sha512-JaDss9+feAvEW8KZppPSpllfposEzQiW+Ytt/Xm5t/3CTJ7YVmkh6RkWixoA2yXk2boIwedYxOvrrppIGzru9A==",
8775
+      "requires": {
8776
+        "jquery": ">=1.8.3"
8777
+      }
8778
+    },
8775 8779
     "p-defer": {
8776 8780
       "version": "1.0.0",
8777 8781
       "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
@@ -9348,7 +9352,6 @@
9348 9352
       "version": "1.2.1",
9349 9353
       "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz",
9350 9354
       "integrity": "sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==",
9351
-      "dev": true,
9352 9355
       "requires": {
9353 9356
         "postcss": "^6.0.1"
9354 9357
       },
@@ -9357,7 +9360,6 @@
9357 9360
           "version": "6.0.23",
9358 9361
           "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
9359 9362
           "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
9360
-          "dev": true,
9361 9363
           "requires": {
9362 9364
             "chalk": "^2.4.1",
9363 9365
             "source-map": "^0.6.1",
@@ -9367,8 +9369,7 @@
9367 9369
         "source-map": {
9368 9370
           "version": "0.6.1",
9369 9371
           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
9370
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
9371
-          "dev": true
9372
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
9372 9373
         }
9373 9374
       }
9374 9375
     },
@@ -9376,7 +9377,6 @@
9376 9377
       "version": "1.2.0",
9377 9378
       "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz",
9378 9379
       "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=",
9379
-      "dev": true,
9380 9380
       "requires": {
9381 9381
         "css-selector-tokenizer": "^0.7.0",
9382 9382
         "postcss": "^6.0.1"
@@ -9386,7 +9386,6 @@
9386 9386
           "version": "6.0.23",
9387 9387
           "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
9388 9388
           "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
9389
-          "dev": true,
9390 9389
           "requires": {
9391 9390
             "chalk": "^2.4.1",
9392 9391
             "source-map": "^0.6.1",
@@ -9396,8 +9395,7 @@
9396 9395
         "source-map": {
9397 9396
           "version": "0.6.1",
9398 9397
           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
9399
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
9400
-          "dev": true
9398
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
9401 9399
         }
9402 9400
       }
9403 9401
     },
@@ -9405,7 +9403,6 @@
9405 9403
       "version": "1.1.0",
9406 9404
       "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz",
9407 9405
       "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=",
9408
-      "dev": true,
9409 9406
       "requires": {
9410 9407
         "css-selector-tokenizer": "^0.7.0",
9411 9408
         "postcss": "^6.0.1"
@@ -9415,7 +9412,6 @@
9415 9412
           "version": "6.0.23",
9416 9413
           "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
9417 9414
           "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
9418
-          "dev": true,
9419 9415
           "requires": {
9420 9416
             "chalk": "^2.4.1",
9421 9417
             "source-map": "^0.6.1",
@@ -9425,8 +9421,7 @@
9425 9421
         "source-map": {
9426 9422
           "version": "0.6.1",
9427 9423
           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
9428
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
9429
-          "dev": true
9424
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
9430 9425
         }
9431 9426
       }
9432 9427
     },
@@ -9434,7 +9429,6 @@
9434 9429
       "version": "1.3.0",
9435 9430
       "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz",
9436 9431
       "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=",
9437
-      "dev": true,
9438 9432
       "requires": {
9439 9433
         "icss-replace-symbols": "^1.1.0",
9440 9434
         "postcss": "^6.0.1"
@@ -9444,7 +9438,6 @@
9444 9438
           "version": "6.0.23",
9445 9439
           "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
9446 9440
           "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
9447
-          "dev": true,
9448 9441
           "requires": {
9449 9442
             "chalk": "^2.4.1",
9450 9443
             "source-map": "^0.6.1",
@@ -9454,8 +9447,7 @@
9454 9447
         "source-map": {
9455 9448
           "version": "0.6.1",
9456 9449
           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
9457
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
9458
-          "dev": true
9450
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
9459 9451
         }
9460 9452
       }
9461 9453
     },
@@ -9630,8 +9622,7 @@
9630 9622
     "postcss-value-parser": {
9631 9623
       "version": "3.3.1",
9632 9624
       "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
9633
-      "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
9634
-      "dev": true
9625
+      "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ=="
9635 9626
     },
9636 9627
     "prelude-ls": {
9637 9628
       "version": "1.1.2",
@@ -9989,8 +9980,7 @@
9989 9980
     "regenerate": {
9990 9981
       "version": "1.4.0",
9991 9982
       "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
9992
-      "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==",
9993
-      "dev": true
9983
+      "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg=="
9994 9984
     },
9995 9985
     "regenerate-unicode-properties": {
9996 9986
       "version": "8.1.0",
@@ -10637,7 +10627,6 @@
10637 10627
       "version": "1.0.0",
10638 10628
       "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
10639 10629
       "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
10640
-      "dev": true,
10641 10630
       "requires": {
10642 10631
         "ajv": "^6.1.0",
10643 10632
         "ajv-errors": "^1.0.0",
@@ -11084,8 +11073,7 @@
11084 11073
     "source-list-map": {
11085 11074
       "version": "2.0.1",
11086 11075
       "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
11087
-      "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==",
11088
-      "dev": true
11076
+      "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw=="
11089 11077
     },
11090 11078
     "source-map": {
11091 11079
       "version": "0.5.7",
@@ -11441,6 +11429,15 @@
11441 11429
       "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
11442 11430
       "dev": true
11443 11431
     },
11432
+    "style-loader": {
11433
+      "version": "0.23.1",
11434
+      "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz",
11435
+      "integrity": "sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==",
11436
+      "requires": {
11437
+        "loader-utils": "^1.1.0",
11438
+        "schema-utils": "^1.0.0"
11439
+      }
11440
+    },
11444 11441
     "stylehacks": {
11445 11442
       "version": "4.0.3",
11446 11443
       "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz",
@@ -11479,7 +11476,6 @@
11479 11476
       "version": "5.5.0",
11480 11477
       "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
11481 11478
       "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
11482
-      "dev": true,
11483 11479
       "requires": {
11484 11480
         "has-flag": "^3.0.0"
11485 11481
       }
@@ -12190,6 +12186,11 @@
12190 12186
       "integrity": "sha512-TigfiZUs7SN3Z6uxKilqJUtYxte8vp0F4QxabCli6hkKPqU97JzAZc3P7AL6omkRAd2DMI26fOrIGjuALTvXww==",
12191 12187
       "dev": true
12192 12188
     },
12189
+    "vue-disable-autocomplete": {
12190
+      "version": "0.0.4",
12191
+      "resolved": "https://registry.npmjs.org/vue-disable-autocomplete/-/vue-disable-autocomplete-0.0.4.tgz",
12192
+      "integrity": "sha512-NtEMoepVfFScR6f7d37g3tQh3F5VU75ai+5+GHoQ0pt3ftrLUeOWXi0ozQDExTwPFgLK3Yk86NeyokSZMlXvFg=="
12193
+    },
12193 12194
     "vue-eslint-parser": {
12194 12195
       "version": "2.0.3",
12195 12196
       "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz",
@@ -12269,6 +12270,29 @@
12269 12270
         "vue-style-loader": "^4.1.0"
12270 12271
       }
12271 12272
     },
12273
+    "vue-owl-carousel": {
12274
+      "version": "2.0.3",
12275
+      "resolved": "https://registry.npmjs.org/vue-owl-carousel/-/vue-owl-carousel-2.0.3.tgz",
12276
+      "integrity": "sha512-TRl6pnbL0HqlebOpEzbGbXL4KxJwlDGxAWeCREjNumvsjB5MXg875y+fkko/M3ML1nxJXIRHw1XWmXgxaQbang==",
12277
+      "requires": {
12278
+        "css-loader": "^1.0.0",
12279
+        "file-loader": "^2.0.0",
12280
+        "jquery": "^3.3.1",
12281
+        "owl.carousel": "^2.3.4",
12282
+        "style-loader": "^0.23.0"
12283
+      },
12284
+      "dependencies": {
12285
+        "file-loader": {
12286
+          "version": "2.0.0",
12287
+          "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-2.0.0.tgz",
12288
+          "integrity": "sha512-YCsBfd1ZGCyonOKLxPiKPdu+8ld9HAaMEvJewzz+b2eTF7uL5Zm/HdBF6FjCrpCMRq25Mi0U1gl4pwn2TlH7hQ==",
12289
+          "requires": {
12290
+            "loader-utils": "^1.0.2",
12291
+            "schema-utils": "^1.0.0"
12292
+          }
12293
+        }
12294
+      }
12295
+    },
12272 12296
     "vue-router": {
12273 12297
       "version": "3.1.5",
12274 12298
       "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.1.5.tgz",

+ 3
- 0
package.json View File

@@ -11,6 +11,7 @@
11 11
   "dependencies": {
12 12
     "@nuxtjs/axios": "^5.9.3",
13 13
     "animate.css": "^3.7.2",
14
+    "aos": "^3.0.0-beta.6",
14 15
     "axios": "^0.19.2",
15 16
     "core-js": "^2.6.11",
16 17
     "datatables.net": "^1.10.20",
@@ -25,9 +26,11 @@
25 26
     "v-file-upload": "^3.1.7",
26 27
     "vue": "^2.6.11",
27 28
     "vue-carousel": "^0.18.0",
29
+    "vue-disable-autocomplete": "0.0.4",
28 30
     "vue-eva-icons": "^1.1.1",
29 31
     "vue-js-modal": "^1.3.33",
30 32
     "vue-json-excel": "^0.2.98",
33
+    "vue-owl-carousel": "^2.0.3",
31 34
     "vue-router": "^3.1.5",
32 35
     "vue-trix": "^1.1.7",
33 36
     "vue2-editor": "^2.10.2",

+ 1520
- 0
public/css/newStyle.css
File diff suppressed because it is too large
View File


+ 1084
- 1129
public/css/style.css
File diff suppressed because it is too large
View File


BIN
public/img/intro-carousel/16.jpg View File


BIN
public/img/intro-carousel/18.jpg View File


BIN
public/img/intro-carousel/2.jpg View File


BIN
public/img/intro-carousel/21.jpg View File


BIN
public/img/intro-carousel/23.jpg View File


BIN
public/img/intro-carousel/3.jpg View File


BIN
public/img/intro-carousel/4.jpg View File


BIN
public/img/intro-carousel/6.jpg View File


BIN
public/img/intro-carousel/8.jpg View File


BIN
public/img/intro-carousel/9.jpg View File


BIN
public/img/intro-carousel/Thumbs.db View File


BIN
public/img/intro-carousel/_DS_Store View File


BIN
public/img/intro-carousel/comm-1.jpg View File


BIN
public/img/intro-carousel/comm-2.jpg View File


BIN
public/img/intro-carousel/comm-3.jpg View File


BIN
public/img/intro-carousel/comm-4.jpg View File


BIN
public/img/intro-carousel/comm-5.jpg View File


BIN
public/img/intro-carousel/comm-6.jpg View File


BIN
public/img/intro-carousel/home-1.jpg View File


BIN
public/img/intro-carousel/home-2.jpg View File


BIN
public/img/intro-carousel/home-3.jpg View File


BIN
public/img/intro-carousel/home-4.jpg View File


BIN
public/img/intro-carousel/home-5.jpg View File


BIN
public/img/intro-carousel/home-6.jpg View File


BIN
public/img/intro-carousel/residential-1.jpg View File


BIN
public/img/intro-carousel/residential-2.jpg View File


BIN
public/img/intro-carousel/residential-3.jpg View File


BIN
public/img/intro-carousel/residential-4.jpg View File


BIN
public/img/intro-carousel/residential-5.jpg View File


BIN
public/img/intro-carousel/residential-6.jpg View File


BIN
public/img/intro-carousel/timeshare-1.jpg View File


BIN
public/img/intro-carousel/timeshare-2.jpg View File


BIN
public/img/intro-carousel/timeshare-3.jpg View File


BIN
public/img/intro-carousel/timeshare-4.jpg View File


BIN
public/img/intro-carousel/timeshare-5.jpg View File


BIN
public/img/intro-carousel/timeshare-6.jpg View File


BIN
public/img/logos.jpg View File


BIN
public/img/logos/daeNew.png View File


BIN
public/img/logos/gomeloNew.png View File


BIN
public/img/logos/rciNew.png View File


BIN
public/img/logos/voasaNew.png View File


BIN
public/img/quote.png View File


BIN
public/img/strip.png View File


BIN
public/img/timeshare-pic.png View File


+ 182
- 68
public/js/main.js View File

@@ -1,162 +1,276 @@
1
-(function ($) {
1
+/* eslint-disable */
2
+(function($) {
2 3
   // Preloader
3
-  $(window).on('load', () => {
4
-    if ($('#preloader')) {
5
-      $('#preloader').fadeOut('slow', function () {
4
+  $(window).on("load", () => {
5
+    if ($("#preloader")) {
6
+      $("#preloader").fadeOut("slow", function() {
6 7
         $(this).remove();
7 8
       });
8 9
     }
9 10
   });
10 11
 
11 12
   // Back to top button
12
-  $(window).scroll(function () {
13
+  $(window).scroll(function() {
13 14
     if ($(this).scrollTop() > 100) {
14
-      $('.back-to-top').fadeIn('slow');
15
+      $(".back-to-top").fadeIn("slow");
15 16
     } else {
16
-      $('.back-to-top').fadeOut('slow');
17
+      $(".back-to-top").fadeOut("slow");
17 18
     }
18 19
   });
19
-  $('.back-to-top').click(() => {
20
-    $('html, body').animate({
21
-      scrollTop: 0,
22
-    }, 1500, 'easeInOutExpo');
20
+  $(".back-to-top").click(() => {
21
+    $("html, body").animate(
22
+      {
23
+        scrollTop: 0
24
+      },
25
+      1500,
26
+      "easeInOutExpo"
27
+    );
23 28
     return false;
24 29
   });
25 30
 
26
-  const nav = $('nav');
31
+  const nav = $("nav");
27 32
   const navHeight = nav.outerHeight();
28 33
 
29 34
   /* --/ ScrollReveal /Easy scroll animations for web and mobile browsers /--*/
30 35
   window.sr = ScrollReveal();
31
-  sr.reveal('.foo', {
36
+  sr.reveal(".foo", {
32 37
     duration: 1000,
33
-    delay: 15,
38
+    delay: 15
39
+  });
40
+
41
+  // Smooth scroll for the menu and links with .scrollto classes
42
+  $(".nav-menu a, #mobile-nav a, .scrollto").on("click", function() {
43
+    if (
44
+      location.pathname.replace(/^\//, "") == this.pathname.replace(/^\//, "") &&
45
+      location.hostname == this.hostname
46
+    ) {
47
+      var target = $(this.hash);
48
+      if (target.length) {
49
+        var top_space = 0;
50
+
51
+        if ($("#header").length) {
52
+          top_space = $("#header").outerHeight();
53
+
54
+          if (!$("#header").hasClass("header-fixed")) {
55
+            top_space = top_space - 20;
56
+          }
57
+        }
58
+
59
+        $("html, body").animate(
60
+          {
61
+            scrollTop: target.offset().top - top_space
62
+          },
63
+          1500,
64
+          "easeInOutExpo"
65
+        );
66
+
67
+        if ($(this).parents(".nav-menu").length) {
68
+          $(".nav-menu .menu-active").removeClass("menu-active");
69
+          $(this)
70
+            .closest("li")
71
+            .addClass("menu-active");
72
+        }
73
+
74
+        if ($("body").hasClass("mobile-nav-active")) {
75
+          $("body").removeClass("mobile-nav-active");
76
+          $("#mobile-nav-toggle i").toggleClass("fa-times fa-bars");
77
+          $("#mobile-body-overly").fadeOut();
78
+        }
79
+        return false;
80
+      }
81
+    }
34 82
   });
35 83
 
84
+  // Mobile Navigation
85
+  if ($("#nav-menu-container").length) {
86
+    var $mobile_nav = $("#nav-menu-container")
87
+      .clone()
88
+      .prop({
89
+        id: "mobile-nav"
90
+      });
91
+    $mobile_nav.find("> ul").attr({
92
+      class: "",
93
+      id: ""
94
+    });
95
+    $("body").append($mobile_nav);
96
+    $("body").prepend(
97
+      '<button type="button" id="mobile-nav-toggle"><i class="fa fa-bars"></i></button>'
98
+    );
99
+    $("body").append('<div id="mobile-body-overly"></div>');
100
+    $("#mobile-nav")
101
+      .find(".menu-has-children")
102
+      .prepend('<i class="fa fa-chevron-down"></i>');
103
+
104
+    $(document).on("click", ".menu-has-children i", function(e) {
105
+      $(this)
106
+        .next()
107
+        .toggleClass("menu-item-active");
108
+      $(this)
109
+        .nextAll("ul")
110
+        .eq(0)
111
+        .slideToggle();
112
+      $(this).toggleClass("fa-chevron-left fa-chevron-down");
113
+    });
114
+
115
+    $(document).on("click", "#mobile-nav-toggle", function(e) {
116
+      $("body").toggleClass("mobile-nav-active");
117
+      $("#mobile-nav-toggle i").toggleClass("fa-times fa-bars");
118
+      $("#mobile-body-overly").toggle();
119
+    });
120
+
121
+    $(document).click(function(e) {
122
+      var container = $("#mobile-nav, #mobile-nav-toggle");
123
+      if (!container.is(e.target) && container.has(e.target).length === 0) {
124
+        if ($("body").hasClass("mobile-nav-active")) {
125
+          $("body").removeClass("mobile-nav-active");
126
+          $("#mobile-nav-toggle i").toggleClass("fa-times fa-bars");
127
+          $("#mobile-body-overly").fadeOut();
128
+        }
129
+      }
130
+    });
131
+  } else if ($("#mobile-nav, #mobile-nav-toggle").length) {
132
+    $("#mobile-nav, #mobile-nav-toggle").hide();
133
+  }
134
+
36 135
   /* --/ Carousel owl /--*/
37
-  $('#carousel').owlCarousel({
136
+  $("#carousel").owlCarousel({
38 137
     loop: true,
39 138
     margin: -1,
40 139
     items: 1,
41 140
     nav: true,
42
-    navText: ['<i class="ion-ios-arrow-back" aria-hidden="true"></i>',
43
-      '<i class="ion-ios-arrow-forward" aria-hidden="true"></i>',
141
+    navText: [
142
+      '<i class="ion-ios-arrow-back" aria-hidden="true"></i>',
143
+      '<i class="ion-ios-arrow-forward" aria-hidden="true"></i>'
44 144
     ],
45 145
     autoplay: true,
46 146
     autoplayTimeout: 3000,
47
-    autoplayHoverPause: true,
147
+    autoplayHoverPause: true
48 148
   });
49 149
 
50 150
   /* --/ Animate Carousel /--*/
51
-  $('.intro-carousel').on('translate.owl.carousel', () => {
52
-    $('.intro-content .intro-title').removeClass('zoomIn animated').hide();
53
-    $('.intro-content .intro-price').removeClass('fadeInUp animated').hide();
54
-    $('.intro-content .intro-title-top, .intro-content .spacial').removeClass(
55
-      'fadeIn animated',
56
-    )
151
+  $(".intro-carousel").on("translate.owl.carousel", () => {
152
+    $(".intro-content .intro-title")
153
+      .removeClass("zoomIn animated")
154
+      .hide();
155
+    $(".intro-content .intro-price")
156
+      .removeClass("fadeInUp animated")
157
+      .hide();
158
+    $(".intro-content .intro-title-top, .intro-content .spacial")
159
+      .removeClass("fadeIn animated")
57 160
       .hide();
58 161
   });
59 162
 
60
-  $('.intro-carousel').on('translated.owl.carousel', () => {
61
-    $('.intro-content .intro-title').addClass('zoomIn animated').show();
62
-    $('.intro-content .intro-price').addClass('fadeInUp animated').show();
63
-    $('.intro-content .intro-title-top, .intro-content .spacial').addClass('fadeIn animated')
163
+  $(".intro-carousel").on("translated.owl.carousel", () => {
164
+    $(".intro-content .intro-title")
165
+      .addClass("zoomIn animated")
166
+      .show();
167
+    $(".intro-content .intro-price")
168
+      .addClass("fadeInUp animated")
169
+      .show();
170
+    $(".intro-content .intro-title-top, .intro-content .spacial")
171
+      .addClass("fadeIn animated")
64 172
       .show();
65 173
   });
66 174
 
67 175
   /* --/ Navbar Collapse /--*/
68
-  $('.navbar-toggle-box-collapse').on('click', () => {
69
-    $('body').removeClass('box-collapse-closed').addClass('box-collapse-open');
176
+  $(".navbar-toggle-box-collapse").on("click", () => {
177
+    $("body")
178
+      .removeClass("box-collapse-closed")
179
+      .addClass("box-collapse-open");
70 180
   });
71
-  $('.close-box-collapse, .click-closed').on('click', () => {
72
-    $('body').removeClass('box-collapse-open').addClass('box-collapse-closed');
73
-    $('.menu-list ul').slideUp(700);
181
+  $(".close-box-collapse, .click-closed").on("click", () => {
182
+    $("body")
183
+      .removeClass("box-collapse-open")
184
+      .addClass("box-collapse-closed");
185
+    $(".menu-list ul").slideUp(700);
74 186
   });
75 187
 
76 188
   /* --/ Navbar Menu Reduce /--*/
77
-  $(window).trigger('scroll');
78
-  $(window).bind('scroll', () => {
189
+  $(window).trigger("scroll");
190
+  $(window).bind("scroll", () => {
79 191
     const pixels = 50;
80 192
     const top = 1200;
81 193
     if ($(window).scrollTop() > pixels) {
82
-      $('.navbar-default').addClass('navbar-reduce');
83
-      $('.navbar-default').removeClass('navbar-trans');
194
+      $(".navbar-default").addClass("navbar-reduce");
195
+      $(".navbar-default").removeClass("navbar-trans");
84 196
     } else {
85
-      $('.navbar-default').addClass('navbar-trans');
86
-      $('.navbar-default').removeClass('navbar-reduce');
197
+      $(".navbar-default").addClass("navbar-trans");
198
+      $(".navbar-default").removeClass("navbar-reduce");
87 199
     }
88 200
     if ($(window).scrollTop() > top) {
89
-      $('.scrolltop-mf').fadeIn(1000, 'easeInOutExpo');
201
+      $(".scrolltop-mf").fadeIn(1000, "easeInOutExpo");
90 202
     } else {
91
-      $('.scrolltop-mf').fadeOut(1000, 'easeInOutExpo');
203
+      $(".scrolltop-mf").fadeOut(1000, "easeInOutExpo");
92 204
     }
93 205
   });
94 206
 
95 207
   /* --/ Property owl /--*/
96
-  $('#property-carousel').owlCarousel({
208
+  $("#property-carousel").owlCarousel({
97 209
     loop: true,
98 210
     margin: 30,
99 211
     responsive: {
100 212
       0: {
101
-        items: 1,
213
+        items: 1
102 214
       },
103 215
       769: {
104
-        items: 2,
216
+        items: 2
105 217
       },
106 218
       992: {
107
-        items: 3,
108
-      },
109
-    },
219
+        items: 3
220
+      }
221
+    }
110 222
   });
111 223
 
112 224
   /* --/ Property owl owl /--*/
113
-  $('#property-single-carousel').owlCarousel({
225
+  $("#property-single-carousel").owlCarousel({
114 226
     loop: true,
115 227
     margin: 0,
116 228
     nav: true,
117
-    navText: ['<i class="ion-ios-arrow-back" aria-hidden="true"></i>',
118
-      '<i class="ion-ios-arrow-forward" aria-hidden="true"></i>',
229
+    navText: [
230
+      '<i class="ion-ios-arrow-back" aria-hidden="true"></i>',
231
+      '<i class="ion-ios-arrow-forward" aria-hidden="true"></i>'
119 232
     ],
120 233
     responsive: {
121 234
       0: {
122
-        items: 1,
123
-      },
124
-    },
235
+        items: 1
236
+      }
237
+    }
125 238
   });
126 239
 
127 240
   /* --/ News owl /--*/
128
-  $('#new-carousel').owlCarousel({
241
+  $("#new-carousel").owlCarousel({
129 242
     loop: true,
130 243
     margin: 30,
131 244
     responsive: {
132 245
       0: {
133
-        items: 1,
246
+        items: 1
134 247
       },
135 248
       769: {
136
-        items: 2,
249
+        items: 2
137 250
       },
138 251
       992: {
139
-        items: 3,
140
-      },
141
-    },
252
+        items: 3
253
+      }
254
+    }
142 255
   });
143 256
 
144 257
   /* --/ Testimonials owl /--*/
145
-  $('#testimonial-carousel').owlCarousel({
258
+  $("#testimonial-carousel").owlCarousel({
146 259
     margin: 0,
147 260
     autoplay: true,
148 261
     nav: true,
149
-    animateOut: 'fadeOut',
150
-    animateIn: 'fadeInUp',
151
-    navText: ['<i class="ion-ios-arrow-back" aria-hidden="true"></i>',
152
-      '<i class="ion-ios-arrow-forward" aria-hidden="true"></i>',
262
+    animateOut: "fadeOut",
263
+    animateIn: "fadeInUp",
264
+    navText: [
265
+      '<i class="ion-ios-arrow-back" aria-hidden="true"></i>',
266
+      '<i class="ion-ios-arrow-forward" aria-hidden="true"></i>'
153 267
     ],
154 268
     autoplayTimeout: 4000,
155 269
     autoplayHoverPause: true,
156 270
     responsive: {
157 271
       0: {
158
-        items: 1,
159
-      },
160
-    },
272
+        items: 1
273
+      }
274
+    }
161 275
   });
162
-}(jQuery));
276
+})(jQuery);

+ 542
- 0
public/lib/wow/wow.js View File

@@ -0,0 +1,542 @@
1
+/*
2
+* WOW wow.js - v1.3.0 - 2016-10-04
3
+* https://wowjs.uk
4
+* Copyright (c) 2016 Thomas Grainger; Licensed MIT
5
+*/
6
+
7
+(function (global, factory) {
8
+  if (typeof define === "function" && define.amd) {
9
+    define(['module', 'exports'], factory);
10
+  } else if (typeof exports !== "undefined") {
11
+    factory(module, exports);
12
+  } else {
13
+    var mod = {
14
+      exports: {}
15
+    };
16
+    factory(mod, mod.exports);
17
+    global.WOW = mod.exports;
18
+  }
19
+})(this, function (module, exports) {
20
+  'use strict';
21
+
22
+  Object.defineProperty(exports, "__esModule", {
23
+    value: true
24
+  });
25
+
26
+  var _class, _temp;
27
+
28
+  function _classCallCheck(instance, Constructor) {
29
+    if (!(instance instanceof Constructor)) {
30
+      throw new TypeError("Cannot call a class as a function");
31
+    }
32
+  }
33
+
34
+  var _createClass = function () {
35
+    function defineProperties(target, props) {
36
+      for (var i = 0; i < props.length; i++) {
37
+        var descriptor = props[i];
38
+        descriptor.enumerable = descriptor.enumerable || false;
39
+        descriptor.configurable = true;
40
+        if ("value" in descriptor) descriptor.writable = true;
41
+        Object.defineProperty(target, descriptor.key, descriptor);
42
+      }
43
+    }
44
+
45
+    return function (Constructor, protoProps, staticProps) {
46
+      if (protoProps) defineProperties(Constructor.prototype, protoProps);
47
+      if (staticProps) defineProperties(Constructor, staticProps);
48
+      return Constructor;
49
+    };
50
+  }();
51
+
52
+  function isIn(needle, haystack) {
53
+    return haystack.indexOf(needle) >= 0;
54
+  }
55
+
56
+  function extend(custom, defaults) {
57
+    for (var key in defaults) {
58
+      if (custom[key] == null) {
59
+        var value = defaults[key];
60
+        custom[key] = value;
61
+      }
62
+    }
63
+    return custom;
64
+  }
65
+
66
+  function isMobile(agent) {
67
+    return (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(agent)
68
+    );
69
+  }
70
+
71
+  function createEvent(event) {
72
+    var bubble = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1];
73
+    var cancel = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2];
74
+    var detail = arguments.length <= 3 || arguments[3] === undefined ? null : arguments[3];
75
+
76
+    var customEvent = void 0;
77
+    if (document.createEvent != null) {
78
+      // W3C DOM
79
+      customEvent = document.createEvent('CustomEvent');
80
+      customEvent.initCustomEvent(event, bubble, cancel, detail);
81
+    } else if (document.createEventObject != null) {
82
+      // IE DOM < 9
83
+      customEvent = document.createEventObject();
84
+      customEvent.eventType = event;
85
+    } else {
86
+      customEvent.eventName = event;
87
+    }
88
+
89
+    return customEvent;
90
+  }
91
+
92
+  function emitEvent(elem, event) {
93
+    if (elem.dispatchEvent != null) {
94
+      // W3C DOM
95
+      elem.dispatchEvent(event);
96
+    } else if (event in (elem != null)) {
97
+      elem[event]();
98
+    } else if ('on' + event in (elem != null)) {
99
+      elem['on' + event]();
100
+    }
101
+  }
102
+
103
+  function addEvent(elem, event, fn) {
104
+    if (elem.addEventListener != null) {
105
+      // W3C DOM
106
+      elem.addEventListener(event, fn, false);
107
+    } else if (elem.attachEvent != null) {
108
+      // IE DOM
109
+      elem.attachEvent('on' + event, fn);
110
+    } else {
111
+      // fallback
112
+      elem[event] = fn;
113
+    }
114
+  }
115
+
116
+  function removeEvent(elem, event, fn) {
117
+    if (elem.removeEventListener != null) {
118
+      // W3C DOM
119
+      elem.removeEventListener(event, fn, false);
120
+    } else if (elem.detachEvent != null) {
121
+      // IE DOM
122
+      elem.detachEvent('on' + event, fn);
123
+    } else {
124
+      // fallback
125
+      delete elem[event];
126
+    }
127
+  }
128
+
129
+  function getInnerHeight() {
130
+    if ('innerHeight' in window) {
131
+      return window.innerHeight;
132
+    }
133
+
134
+    return document.documentElement.clientHeight;
135
+  }
136
+
137
+  // Minimalistic WeakMap shim, just in case.
138
+  var WeakMap = window.WeakMap || window.MozWeakMap || function () {
139
+    function WeakMap() {
140
+      _classCallCheck(this, WeakMap);
141
+
142
+      this.keys = [];
143
+      this.values = [];
144
+    }
145
+
146
+    _createClass(WeakMap, [{
147
+      key: 'get',
148
+      value: function get(key) {
149
+        for (var i = 0; i < this.keys.length; i++) {
150
+          var item = this.keys[i];
151
+          if (item === key) {
152
+            return this.values[i];
153
+          }
154
+        }
155
+        return undefined;
156
+      }
157
+    }, {
158
+      key: 'set',
159
+      value: function set(key, value) {
160
+        for (var i = 0; i < this.keys.length; i++) {
161
+          var item = this.keys[i];
162
+          if (item === key) {
163
+            this.values[i] = value;
164
+            return this;
165
+          }
166
+        }
167
+        this.keys.push(key);
168
+        this.values.push(value);
169
+        return this;
170
+      }
171
+    }]);
172
+
173
+    return WeakMap;
174
+  }();
175
+
176
+  // Dummy MutationObserver, to avoid raising exceptions.
177
+  var MutationObserver = window.MutationObserver || window.WebkitMutationObserver || window.MozMutationObserver || (_temp = _class = function () {
178
+    function MutationObserver() {
179
+      _classCallCheck(this, MutationObserver);
180
+
181
+      if (typeof console !== 'undefined' && console !== null) {
182
+        console.warn('MutationObserver is not supported by your browser.');
183
+        console.warn('WOW.js cannot detect dom mutations, please call .sync() after loading new content.');
184
+      }
185
+    }
186
+
187
+    _createClass(MutationObserver, [{
188
+      key: 'observe',
189
+      value: function observe() {}
190
+    }]);
191
+
192
+    return MutationObserver;
193
+  }(), _class.notSupported = true, _temp);
194
+
195
+  // getComputedStyle shim, from http://stackoverflow.com/a/21797294
196
+  var getComputedStyle = window.getComputedStyle || function getComputedStyle(el) {
197
+    var getComputedStyleRX = /(\-([a-z]){1})/g;
198
+    return {
199
+      getPropertyValue: function getPropertyValue(prop) {
200
+        if (prop === 'float') {
201
+          prop = 'styleFloat';
202
+        }
203
+        if (getComputedStyleRX.test(prop)) {
204
+          prop.replace(getComputedStyleRX, function (_, _char) {
205
+            return _char.toUpperCase();
206
+          });
207
+        }
208
+        var currentStyle = el.currentStyle;
209
+
210
+        return (currentStyle != null ? currentStyle[prop] : void 0) || null;
211
+      }
212
+    };
213
+  };
214
+
215
+  var WOW = function () {
216
+    function WOW() {
217
+      var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
218
+
219
+      _classCallCheck(this, WOW);
220
+
221
+      this.defaults = {
222
+        boxClass: 'wow',
223
+        animateClass: 'animated',
224
+        offset: 0,
225
+        mobile: true,
226
+        live: true,
227
+        callback: null,
228
+        scrollContainer: null,
229
+        resetAnimation: true
230
+      };
231
+
232
+      this.animate = function animateFactory() {
233
+        if ('requestAnimationFrame' in window) {
234
+          return function (callback) {
235
+            return window.requestAnimationFrame(callback);
236
+          };
237
+        }
238
+        return function (callback) {
239
+          return callback();
240
+        };
241
+      }();
242
+
243
+      this.vendors = ['moz', 'webkit'];
244
+
245
+      this.start = this.start.bind(this);
246
+      this.resetAnimation = this.resetAnimation.bind(this);
247
+      this.scrollHandler = this.scrollHandler.bind(this);
248
+      this.scrollCallback = this.scrollCallback.bind(this);
249
+      this.scrolled = true;
250
+      this.config = extend(options, this.defaults);
251
+      if (options.scrollContainer != null) {
252
+        this.config.scrollContainer = document.querySelector(options.scrollContainer);
253
+      }
254
+      // Map of elements to animation names:
255
+      this.animationNameCache = new WeakMap();
256
+      this.wowEvent = createEvent(this.config.boxClass);
257
+    }
258
+
259
+    _createClass(WOW, [{
260
+      key: 'init',
261
+      value: function init() {
262
+        this.element = window.document.documentElement;
263
+        if (isIn(document.readyState, ['interactive', 'complete'])) {
264
+          this.start();
265
+        } else {
266
+          addEvent(document, 'DOMContentLoaded', this.start);
267
+        }
268
+        this.finished = [];
269
+      }
270
+    }, {
271
+      key: 'start',
272
+      value: function start() {
273
+        var _this = this;
274
+
275
+        this.stopped = false;
276
+        this.boxes = [].slice.call(this.element.querySelectorAll('.' + this.config.boxClass));
277
+        this.all = this.boxes.slice(0);
278
+        if (this.boxes.length) {
279
+          if (this.disabled()) {
280
+            this.resetStyle();
281
+          } else {
282
+            for (var i = 0; i < this.boxes.length; i++) {
283
+              var box = this.boxes[i];
284
+              this.applyStyle(box, true);
285
+            }
286
+          }
287
+        }
288
+        if (!this.disabled()) {
289
+          addEvent(this.config.scrollContainer || window, 'scroll', this.scrollHandler);
290
+          addEvent(window, 'resize', this.scrollHandler);
291
+          this.interval = setInterval(this.scrollCallback, 50);
292
+        }
293
+        if (this.config.live) {
294
+          var mut = new MutationObserver(function (records) {
295
+            for (var j = 0; j < records.length; j++) {
296
+              var record = records[j];
297
+              for (var k = 0; k < record.addedNodes.length; k++) {
298
+                var node = record.addedNodes[k];
299
+                _this.doSync(node);
300
+              }
301
+            }
302
+            return undefined;
303
+          });
304
+          mut.observe(document.body, {
305
+            childList: true,
306
+            subtree: true
307
+          });
308
+        }
309
+      }
310
+    }, {
311
+      key: 'stop',
312
+      value: function stop() {
313
+        this.stopped = true;
314
+        removeEvent(this.config.scrollContainer || window, 'scroll', this.scrollHandler);
315
+        removeEvent(window, 'resize', this.scrollHandler);
316
+        if (this.interval != null) {
317
+          clearInterval(this.interval);
318
+        }
319
+      }
320
+    }, {
321
+      key: 'sync',
322
+      value: function sync() {
323
+        if (MutationObserver.notSupported) {
324
+          this.doSync(this.element);
325
+        }
326
+      }
327
+    }, {
328
+      key: 'doSync',
329
+      value: function doSync(element) {
330
+        if (typeof element === 'undefined' || element === null) {
331
+          element = this.element;
332
+        }
333
+        if (element.nodeType !== 1) {
334
+          return;
335
+        }
336
+        element = element.parentNode || element;
337
+        var iterable = element.querySelectorAll('.' + this.config.boxClass);
338
+        for (var i = 0; i < iterable.length; i++) {
339
+          var box = iterable[i];
340
+          if (!isIn(box, this.all)) {
341
+            this.boxes.push(box);
342
+            this.all.push(box);
343
+            if (this.stopped || this.disabled()) {
344
+              this.resetStyle();
345
+            } else {
346
+              this.applyStyle(box, true);
347
+            }
348
+            this.scrolled = true;
349
+          }
350
+        }
351
+      }
352
+    }, {
353
+      key: 'show',
354
+      value: function show(box) {
355
+        this.applyStyle(box);
356
+        box.className = box.className + ' ' + this.config.animateClass;
357
+        if (this.config.callback != null) {
358
+          this.config.callback(box);
359
+        }
360
+        emitEvent(box, this.wowEvent);
361
+
362
+        if (this.config.resetAnimation) {
363
+          addEvent(box, 'animationend', this.resetAnimation);
364
+          addEvent(box, 'oanimationend', this.resetAnimation);
365
+          addEvent(box, 'webkitAnimationEnd', this.resetAnimation);
366
+          addEvent(box, 'MSAnimationEnd', this.resetAnimation);
367
+        }
368
+
369
+        return box;
370
+      }
371
+    }, {
372
+      key: 'applyStyle',
373
+      value: function applyStyle(box, hidden) {
374
+        var _this2 = this;
375
+
376
+        var duration = box.getAttribute('data-wow-duration');
377
+        var delay = box.getAttribute('data-wow-delay');
378
+        var iteration = box.getAttribute('data-wow-iteration');
379
+
380
+        return this.animate(function () {
381
+          return _this2.customStyle(box, hidden, duration, delay, iteration);
382
+        });
383
+      }
384
+    }, {
385
+      key: 'resetStyle',
386
+      value: function resetStyle() {
387
+        for (var i = 0; i < this.boxes.length; i++) {
388
+          var box = this.boxes[i];
389
+          box.style.visibility = 'visible';
390
+        }
391
+        return undefined;
392
+      }
393
+    }, {
394
+      key: 'resetAnimation',
395
+      value: function resetAnimation(event) {
396
+        if (event.type.toLowerCase().indexOf('animationend') >= 0) {
397
+          var target = event.target || event.srcElement;
398
+          target.className = target.className.replace(this.config.animateClass, '').trim();
399
+        }
400
+      }
401
+    }, {
402
+      key: 'customStyle',
403
+      value: function customStyle(box, hidden, duration, delay, iteration) {
404
+        if (hidden) {
405
+          this.cacheAnimationName(box);
406
+        }
407
+        box.style.visibility = hidden ? 'hidden' : 'visible';
408
+
409
+        if (duration) {
410
+          this.vendorSet(box.style, { animationDuration: duration });
411
+        }
412
+        if (delay) {
413
+          this.vendorSet(box.style, { animationDelay: delay });
414
+        }
415
+        if (iteration) {
416
+          this.vendorSet(box.style, { animationIterationCount: iteration });
417
+        }
418
+        this.vendorSet(box.style, { animationName: hidden ? 'none' : this.cachedAnimationName(box) });
419
+
420
+        return box;
421
+      }
422
+    }, {
423
+      key: 'vendorSet',
424
+      value: function vendorSet(elem, properties) {
425
+        for (var name in properties) {
426
+          if (properties.hasOwnProperty(name)) {
427
+            var value = properties[name];
428
+            elem['' + name] = value;
429
+            for (var i = 0; i < this.vendors.length; i++) {
430
+              var vendor = this.vendors[i];
431
+              elem['' + vendor + name.charAt(0).toUpperCase() + name.substr(1)] = value;
432
+            }
433
+          }
434
+        }
435
+      }
436
+    }, {
437
+      key: 'vendorCSS',
438
+      value: function vendorCSS(elem, property) {
439
+        var style = getComputedStyle(elem);
440
+        var result = style.getPropertyCSSValue(property);
441
+        for (var i = 0; i < this.vendors.length; i++) {
442
+          var vendor = this.vendors[i];
443
+          result = result || style.getPropertyCSSValue('-' + vendor + '-' + property);
444
+        }
445
+        return result;
446
+      }
447
+    }, {
448
+      key: 'animationName',
449
+      value: function animationName(box) {
450
+        var aName = void 0;
451
+        try {
452
+          aName = this.vendorCSS(box, 'animation-name').cssText;
453
+        } catch (error) {
454
+          // Opera, fall back to plain property value
455
+          aName = getComputedStyle(box).getPropertyValue('animation-name');
456
+        }
457
+
458
+        if (aName === 'none') {
459
+          return ''; // SVG/Firefox, unable to get animation name?
460
+        }
461
+
462
+        return aName;
463
+      }
464
+    }, {
465
+      key: 'cacheAnimationName',
466
+      value: function cacheAnimationName(box) {
467
+        // https://bugzilla.mozilla.org/show_bug.cgi?id=921834
468
+        // box.dataset is not supported for SVG elements in Firefox
469
+        return this.animationNameCache.set(box, this.animationName(box));
470
+      }
471
+    }, {
472
+      key: 'cachedAnimationName',
473
+      value: function cachedAnimationName(box) {
474
+        return this.animationNameCache.get(box);
475
+      }
476
+    }, {
477
+      key: 'scrollHandler',
478
+      value: function scrollHandler() {
479
+        this.scrolled = true;
480
+      }
481
+    }, {
482
+      key: 'scrollCallback',
483
+      value: function scrollCallback() {
484
+        if (this.scrolled) {
485
+          this.scrolled = false;
486
+          var results = [];
487
+          for (var i = 0; i < this.boxes.length; i++) {
488
+            var box = this.boxes[i];
489
+            if (box) {
490
+              if (this.isVisible(box)) {
491
+                this.show(box);
492
+                continue;
493
+              }
494
+              results.push(box);
495
+            }
496
+          }
497
+          this.boxes = results;
498
+          if (!this.boxes.length && !this.config.live) {
499
+            this.stop();
500
+          }
501
+        }
502
+      }
503
+    }, {
504
+      key: 'offsetTop',
505
+      value: function offsetTop(element) {
506
+        // SVG elements don't have an offsetTop in Firefox.
507
+        // This will use their nearest parent that has an offsetTop.
508
+        // Also, using ('offsetTop' of element) causes an exception in Firefox.
509
+        while (element.offsetTop === undefined) {
510
+          element = element.parentNode;
511
+        }
512
+        var top = element.offsetTop;
513
+        while (element.offsetParent) {
514
+          element = element.offsetParent;
515
+          top += element.offsetTop;
516
+        }
517
+        return top;
518
+      }
519
+    }, {
520
+      key: 'isVisible',
521
+      value: function isVisible(box) {
522
+        var offset = box.getAttribute('data-wow-offset') || this.config.offset;
523
+        var viewTop = this.config.scrollContainer && this.config.scrollContainer.scrollTop || window.pageYOffset;
524
+        var viewBottom = viewTop + Math.min(this.element.clientHeight, getInnerHeight()) - offset;
525
+        var top = this.offsetTop(box);
526
+        var bottom = top + box.clientHeight;
527
+
528
+        return top <= viewBottom && bottom >= viewTop;
529
+      }
530
+    }, {
531
+      key: 'disabled',
532
+      value: function disabled() {
533
+        return !this.config.mobile && isMobile(navigator.userAgent);
534
+      }
535
+    }]);
536
+
537
+    return WOW;
538
+  }();
539
+
540
+  exports.default = WOW;
541
+  module.exports = exports['default'];
542
+});

+ 3
- 0
public/lib/wow/wow.min.js
File diff suppressed because it is too large
View File


BIN
public/webfonts/Playlist-Script.ttf.eot View File


+ 1102
- 0
public/webfonts/Playlist-Script.ttf.svg
File diff suppressed because it is too large
View File


BIN
public/webfonts/Playlist-Script.ttf.woff View File


BIN
public/webfonts/_DS_Store View File


+ 24
- 0
public/webfonts/install-a-webfont.txt View File

@@ -0,0 +1,24 @@
1
+Installing Webfonts
2
+
3
+1. Upload the files from this zip to your domain.
4
+2. Add this code to your website:
5
+
6
+@font-face {
7
+    font-family: 'Playlist-Script';
8
+    src:url('Playlist-Script.ttf.woff') format('woff'),
9
+        url('Playlist-Script.ttf.svg#Playlist-Script') format('svg'),
10
+        url('Playlist-Script.ttf.eot'),
11
+        url('Playlist-Script.ttf.eot?#iefix') format('embedded-opentype'); 
12
+    font-weight: normal;
13
+    font-style: normal;
14
+}
15
+3. Integrate the fonts into your CSS:
16
+Add the font name to your CSS styles. For example:
17
+
18
+h1 { 
19
+   font-family: 'Playlist-Script';
20
+}  
21
+
22
+Troubleshooting Webfonts
23
+1. You may be using the fonts on different domain or subdomain.
24
+2. Check if you have link the fonts properly in the CSS.

+ 6
- 6
src/App.vue View File

@@ -1,18 +1,19 @@
1 1
 <template>
2
-  <div id="app">
2
+  <div id="app" style="overflow-x: hidden">
3 3
     <a v-if="!isLandingPage" href="#" class="back-to-top">
4 4
       <i class="fa fa-chevron-up"></i>
5 5
     </a>
6 6
     <div v-if="!isLandingPage" class="click-closed"></div>
7 7
     <SearchTab v-if="!isLandingPage" />
8 8
     <NavBar v-if="!isLandingPage" @routerGoTo="routerGoTo" />
9
-    <div v-if="!isLandingPage" class="pushDown"></div>
9
+    <div v-if="!isLandingPage"></div>
10 10
     <router-view @setLandingPage="setLandingPage" />
11
-    <FooterSection v-if="!isLandingPage" class="margin-top" />
11
+    <FooterSection v-if="!isLandingPage" />
12 12
   </div>
13 13
 </template>
14 14
 
15 15
 <script>
16
+/* eslint-disable */
16 17
 import SearchTab from "./components/shared/searchTab.vue";
17 18
 import NavBar from "./components/shared/navBar.vue";
18 19
 import FooterSection from "./components/shared/footerSection.vue";
@@ -29,6 +30,7 @@ export default {
29 30
     NavBar,
30 31
     FooterSection
31 32
   },
33
+
32 34
   methods: {
33 35
     routerGoTo(goTo) {
34 36
       this.$router.push(goTo);
@@ -41,6 +43,7 @@ export default {
41 43
 </script>
42 44
 
43 45
 <style>
46
+@import "../public/css/newStyle.css";
44 47
 button:hover {
45 48
   cursor: pointer;
46 49
 }
@@ -140,7 +143,4 @@ html {
140 143
 .pushDown {
141 144
   height: 70px;
142 145
 }
143
-.margin-top {
144
-  margin-top: 50px;
145
-}
146 146
 </style>

+ 30
- 70
src/components/about/aboutTimeshare.vue View File

@@ -1,74 +1,34 @@
1 1
 <template>
2
-  <!--/ About Star /-->
3
-  <section class="section-about">
4
-    <!-- eslint-disable max-len -->
5
-    <div class="container">
6
-      <div class="row">
7
-        <div class="col-sm-12">
8
-          <div class="about-img-box">
9
-            <img src="img/timeshare2.jpg" alt="About Timeshare" class="img-fluid title-img" />
10
-          </div>
11
-          <div class="sinse-box title-title">
12
-            <h3 class="sinse-title">Timeshare Resales</h3>
13
-          </div>
14
-        </div>
15
-        <div class="col-md-12 section-t8">
16
-          <div class="row">
17
-            <div class="col-lg-2 d-none d-lg-block">
18
-              <div class="title-vertical d-flex justify-content-start color-b">
19
-                <span>Uni-Vate Properties</span>
20
-              </div>
21
-            </div>
22
-            <div class="col-md-6 col-lg-5 section-md-t3">
23
-              <p class="color-text-a font-weight-bold" style="text-align:left;">
24
-                Uni-Vate Properties found that there was a desperate need for a reputable source for buyers and
25
-                sellers to turn to with their timeshare needs in South Africa. Over the
26
-                years, Uni-Vate has developed a treasure of networking alliances of professional
27
-                acquaintances and that has made timeshare resales a pleasure for both buyers and
28
-                sellers. We are fully equipped to assist with conventional timeshare requirements
29
-                and assure you of fast, efficient and personal service.
30
-              </p>
31
-              <p class="color-text-a" style="text-align:left;">
32
-                We strive to legitimize an industry that has fallen victim to scam artists
33
-                and unscrupulous sales tactics. Your best option for buying or selling a
34
-                timeshare resale week is through a real-estate company where an agent is
35
-                able to assist you with the sale from point of offer, to negotiation,
36
-                to conclusion, to successful payment and transfer.
37
-              </p>
38
-              <p class="color-text-a" style="text-align:left;">
39
-                Our goal for our sellers is to obtain the best price the market will bear
40
-                for their week/s. We do this by continually evaluating our marketplace,
41
-                educating the consumer, and encouraging sellers to price their properties
42
-                at competitive prices. This ensures buyers of well researched data to be able
43
-                to make informed decisions about their purchase which will provide their families
44
-                with hassle free future holidays.
45
-              </p>
46
-            </div>
47
-            <div class="col-md-6 col-lg-5">
48
-              <p class="color-text-b" style="text-align:left;">
49
-                Uni-Vate Properties facilitates the timeshare resale for a listing fee of
50
-                only R380 including VAT payable when listing your week/module. Transfer fees
51
-                vary per week depending on the share block but this will be confirmed on request
52
-                when making an offer on an interested week. Transfer fees are payable by the buyers.
53
-                List your week for sale or browse our already listed weeks available for easy access
54
-                to creating new holiday memories for the whole family.
55
-              </p>
56
-              <p>
57
-                <img
58
-                  src="img/timeshare.jpg"
59
-                  alt
60
-                  class="img-fluid"
61
-                  style="width:500px;height:330px; border-radius:10px"
62
-                />
63
-              </p>
64
-            </div>
65
-          </div>
66
-        </div>
67
-      </div>
68
-    </div>
69
-  </section>
70
-  <!--/ About End /-->
2
+  <div>
3
+    <carouselSection />
4
+    <main id="main">
5
+      <contentSection />
6
+      <testimonialSection
7
+        data-aos="fade-up"
8
+        data-aos-anchor-placement="center-bottom"
9
+        data-aos-delay="150"
10
+      />
11
+    </main>
12
+  </div>
71 13
 </template>
14
+
72 15
 <script>
73
-export default {};
16
+/* eslint-disable */
17
+import carouselSection from "./aboutTimeshareCarouselSection";
18
+import contentSection from "./aboutTimeshareContentSection";
19
+import testimonialSection from "./aboutTimeshareTestimonialSection";
20
+import AOS from "aos";
21
+import "aos/dist/aos.css";
22
+export default {
23
+  created() {
24
+    AOS.init();
25
+  },
26
+  components: {
27
+    carouselSection,
28
+    contentSection,
29
+    testimonialSection
30
+  }
31
+};
74 32
 </script>
33
+
34
+<style lang="scss" scoped></style>

+ 50
- 0
src/components/about/aboutTimeshareCarouselSection.vue View File

@@ -0,0 +1,50 @@
1
+<template>
2
+  <section id="intro">
3
+    <div class="container">
4
+      <div class="row">
5
+        <div align="left" class="col-sm-12 col-md-8">
6
+          <div class="intro-content box">
7
+            <h2>About Timeshare Resales</h2>
8
+            <p>
9
+              Uni-Vate Properties found that there was a desperate need for a reputable source for
10
+              buyers and sellers to turn to with their timeshare needs in South Africa.
11
+            </p>
12
+          </div>
13
+        </div>
14
+      </div>
15
+    </div>
16
+
17
+    <carousel
18
+      :nav="false"
19
+      :dots="false"
20
+      :items="1"
21
+      :autoplay="true"
22
+      :loop="true"
23
+      id="intro-carousel"
24
+      style="margin-top:-50px"
25
+      :responsive="{ 0: { items: 1, nav: false }, 600: { items: 1, nav: false } }"
26
+    >
27
+      <img class="item" src="../../../public/img/intro-carousel/timeshare-1.jpg" alt="" />
28
+      <img class="item" src="../../../public/img/intro-carousel/timeshare-2.jpg" alt="" />
29
+      <img class="item" src="../../../public/img/intro-carousel/timeshare-3.jpg" alt="" />
30
+      <img class="item" src="../../../public/img/intro-carousel/timeshare-4.jpg" alt="" />
31
+      <img class="item" src="../../../public/img/intro-carousel/timeshare-5.jpg" alt="" />
32
+      <img class="item" src="../../../public/img/intro-carousel/timeshare-6.jpg" alt="" />
33
+    </carousel>
34
+
35
+    <div id="intro-carousel" class="owl-carousel"></div>
36
+  </section>
37
+</template>
38
+
39
+<script>
40
+/* eslint-disable */
41
+
42
+import carousel from "vue-owl-carousel";
43
+export default {
44
+  components: {
45
+    carousel
46
+  }
47
+};
48
+</script>
49
+
50
+<style lang="scss" scoped></style>

+ 75
- 0
src/components/about/aboutTimeshareContentSection.vue View File

@@ -0,0 +1,75 @@
1
+<template>
2
+  <section id="services">
3
+    <div class="container">
4
+      <div class="row">
5
+        <div class="col-lg-4" data-aos="fade-right">
6
+          <p>
7
+            Over the years, Uni-Vate has developed a treasure of networking alliances of
8
+            professional acquaintances and that has made timeshare resales a pleasure for both
9
+            buyers and sellers.
10
+          </p>
11
+          <h3>
12
+            We are fully equipped to assist with conventional timeshare requirements and assure you
13
+            of fast, efficient and personal service.
14
+          </h3>
15
+          <p>
16
+            We strive to legitimize an industry that has fallen victim to scam artists and
17
+            unscrupulous sales tactics. Your best option for buying or selling a timeshare resale
18
+            week is through a real-estate company where an agent is able to assist you with the sale
19
+            from point of offer, to negotiation, to conclusion, to successful payment and transfer.
20
+          </p>
21
+          <p>
22
+            <strong
23
+              >Our goal for our sellers is to obtain the best price the market will bear for their
24
+              week/s.</strong
25
+            >
26
+          </p>
27
+          <p>
28
+            We do this by continually evaluating our marketplace, educating the consumer, and
29
+            encouraging sellers to price their properties at competitive prices. This ensures buyers
30
+            of well researched data to be able to make informed decisions about their purchase which
31
+            will provide their families with hassle free future holidays.
32
+          </p>
33
+          <br />
34
+        </div>
35
+        <div class="col-lg-8" data-aos="fade-left">
36
+          <p>
37
+            <strong
38
+              >Transfer fees vary per week depending on the share block but this will be confirmed
39
+              on request when making an offer on an interested week.</strong
40
+            >
41
+          </p>
42
+          <img src="../../../public/img/timeshare-pic.png" width="100%" />
43
+          <img src="../../../public/img/strip.png" width="100%" /><br /><br />
44
+          <p>
45
+            Transfer fees are payable by the buyers. List your week for sale or browse our already
46
+            listed weeks available for easy access to creating new holiday memories for the whole
47
+            family.
48
+          </p>
49
+          <br />
50
+        </div>
51
+      </div>
52
+      <div class="row" data-aos="fade-down">
53
+        <div class="col-lg-12">
54
+          <h3>
55
+            Uni-Vate Properties facilitates the timeshare resale for a listing fee of only R380
56
+            including VAT payable when listing your week/module.
57
+          </h3>
58
+          <br />
59
+        </div>
60
+      </div>
61
+    </div>
62
+  </section>
63
+</template>
64
+
65
+<script>
66
+import AOS from "aos";
67
+import "aos/dist/aos.css";
68
+export default {
69
+  created() {
70
+    AOS.init();
71
+  }
72
+};
73
+</script>
74
+
75
+<style lang="scss" scoped></style>

+ 164
- 0
src/components/about/aboutTimeshareTestimonialSection.vue View File

@@ -0,0 +1,164 @@
1
+<template>
2
+  <section id="testimonials">
3
+    <div class="container">
4
+      <div class="section-header">
5
+        <h2>Testimonials</h2>
6
+      </div>
7
+
8
+      <carousel
9
+        :nav="false"
10
+        :dots="false"
11
+        :items="1"
12
+        :autoplay="true"
13
+        :loop="true"
14
+        id="intro-carousel"
15
+        style="margin-top:-50px"
16
+        :responsive="{ 0: { items: 1, nav: false }, 600: { items: 1, nav: false } }"
17
+        class="mt-3"
18
+      >
19
+        <div class="row">
20
+          <div class="col-lg-6">
21
+            <div>
22
+              <img src="img/testimonial-1.png" alt="" />
23
+            </div>
24
+          </div>
25
+
26
+          <div class="col-lg-6">
27
+            <div class="content">
28
+              <div class="row">
29
+                <div align="center" class="col">
30
+                  <br /><img style="width: 85px" src="img/quote.png" alt="" /><br />
31
+                </div>
32
+              </div>
33
+              <div class="row">
34
+                <div class="col">
35
+                  <p>
36
+                    Loved my stay at Crystal Springs. Appreciated the proffesionalism and
37
+                    friendliness of the staff. Thoroughly enjoyed the hike, game drive, jaccuzzi,
38
+                    heated pool, steam room and even the trampolines. Our chalet was in stellar
39
+                    condition. The heaters, extra blankets and fire place ensured we kept warm and
40
+                    toasty during the cold evenings. The food at the restaurant was delicious, and
41
+                    the experience was made even better by the friendly waitress who served us.
42
+                    Arriving to find Ferreiro Roche and Champagne in our chalet was the cherry on
43
+                    top. I would wholeheartedly recommend this resort any day. Well done Crystal
44
+                    Springs!
45
+                  </p>
46
+                  <h5>Anati Bacela</h5>
47
+                  <p>- on visiting Crystal Springs</p>
48
+                </div>
49
+              </div>
50
+            </div>
51
+          </div>
52
+        </div>
53
+
54
+        <div class="row">
55
+          <div class="col-lg-6">
56
+            <div>
57
+              <img src="img/testimonial-2.png" alt="" />
58
+            </div>
59
+          </div>
60
+
61
+          <div class="col-lg-6">
62
+            <div class="content">
63
+              <div class="row">
64
+                <div align="center" class="col">
65
+                  <br /><img style="width: 85px" src="img/quote.png" alt="" /><br />
66
+                </div>
67
+              </div>
68
+              <div class="row">
69
+                <div class="col">
70
+                  <p>
71
+                    We have been going to Ngwenya for 25 years or more. every year we have had
72
+                    wonderful sightings from our verandah. To me it is paradise on earth and we
73
+                    never grow tired of it. Wonderful play area for people of all ages, the gardens
74
+                    are well kept, the restaurant is good and the chalets are well maintained. Most
75
+                    of all what I love about Ngwenya is it's peaceful and tranquil atmosphere and
76
+                    the close proximity to our amazing wild life We will continue going for many
77
+                    more years
78
+                  </p>
79
+                  <h5>Linda Lewis</h5>
80
+                  <p>- on visiting Ngwenya Lodge</p>
81
+                </div>
82
+              </div>
83
+            </div>
84
+          </div>
85
+        </div>
86
+
87
+        <div class="row">
88
+          <div class="col-lg-6">
89
+            <div>
90
+              <img src="img/testimonial-3.2.jpg" alt="" />
91
+            </div>
92
+          </div>
93
+
94
+          <div class="col-lg-6">
95
+            <div class="content">
96
+              <div class="row">
97
+                <div align="center" class="col">
98
+                  <br /><img style="width: 85px" src="img/quote.png" alt="" /><br />
99
+                </div>
100
+              </div>
101
+              <div class="row">
102
+                <div class="col">
103
+                  <p>
104
+                    Great experience, I loved the place, so amazing and we saw many more animals.
105
+                    Had different kinds of visitors everyday (Impala, wild pig, monkeys, birds and
106
+                    more). The nature was great with all mountains and valleys and lakes. Every
107
+                    corner had a new moment. The staff was very friendly and helpful at all times.
108
+                    Thanks to the restaurant staff for helping me organizing my Husband's birthday
109
+                    surprise dinner. Best memories ever. Looking forward to my next visit with
110
+                    friends and more family members.
111
+                  </p>
112
+                  <h5>Sophie Adewale</h5>
113
+                  <p>- on visiting Mabalingwe Nature Reserve</p>
114
+                </div>
115
+              </div>
116
+            </div>
117
+          </div>
118
+        </div>
119
+
120
+        <div class="row">
121
+          <div class="col-lg-6">
122
+            <div>
123
+              <img src="img/testimonial-4.png" alt="" />
124
+            </div>
125
+          </div>
126
+
127
+          <div class="col-lg-6">
128
+            <div class="content">
129
+              <div class="row">
130
+                <div align="center" class="col">
131
+                  <br /><img style="width: 85px" src="img/quote.png" alt="" /><br />
132
+                </div>
133
+              </div>
134
+              <div class="row">
135
+                <div class="col">
136
+                  <p>
137
+                    Everything!! Little Eden is like a secret jewel no one but yourself and your
138
+                    very best friends should know about, but at the same time it’s like discovering
139
+                    something so awesome you can never keep it to yourself. You have to tell the
140
+                    world!!!
141
+                  </p>
142
+                  <h5>Sisna & Andries Venter</h5>
143
+                  <p>- on visiting Little Eden</p>
144
+                </div>
145
+              </div>
146
+            </div>
147
+          </div>
148
+        </div>
149
+      </carousel>
150
+    </div>
151
+  </section>
152
+</template>
153
+
154
+<script>
155
+/* eslint-disable */
156
+import carousel from "vue-owl-carousel";
157
+export default {
158
+  components: {
159
+    carousel
160
+  }
161
+};
162
+</script>
163
+
164
+<style lang="scss" scoped></style>

+ 52
- 0
src/components/about/aboutUsCarouselSection.vue View File

@@ -0,0 +1,52 @@
1
+<template>
2
+  <section id="intro">
3
+    <div class="container">
4
+      <div class="row">
5
+        <div align="left" class="col-sm-12 col-md-8">
6
+          <div class="intro-content box">
7
+            <h2>About Us</h2>
8
+            <p>
9
+              Uni-Vate Properties began in 2013 in Pretoria East with various properties in their
10
+              portfolio. Led by our Director, Delia 0' Conner, who has over 25 years of experience
11
+              in the timeshare industry, the move to conventional property sales and rentals was an
12
+              easy transition for the Uni-Vate team.
13
+            </p>
14
+          </div>
15
+        </div>
16
+      </div>
17
+    </div>
18
+
19
+    <carousel
20
+      :nav="false"
21
+      :dots="false"
22
+      :items="1"
23
+      :autoplay="true"
24
+      :loop="true"
25
+      id="intro-carousel"
26
+      style="margin-top:-50px"
27
+      :responsive="{ 0: { items: 1, nav: false }, 600: { items: 1, nav: false } }"
28
+    >
29
+      <img class="item" src="../../../public/img/intro-carousel/home-1.jpg" alt="" />
30
+      <img class="item" src="../../../public/img/intro-carousel/home-2.jpg" alt="" />
31
+      <img class="item" src="../../../public/img/intro-carousel/home-3.jpg" alt="" />
32
+      <img class="item" src="../../../public/img/intro-carousel/home-4.jpg" alt="" />
33
+      <img class="item" src="../../../public/img/intro-carousel/home-5.jpg" alt="" />
34
+      <img class="item" src="../../../public/img/intro-carousel/home-6.jpg" alt="" />
35
+    </carousel>
36
+
37
+    <div id="intro-carousel" class="owl-carousel"></div>
38
+  </section>
39
+</template>
40
+
41
+<script>
42
+/* eslint-disable */
43
+
44
+import carousel from "vue-owl-carousel";
45
+export default {
46
+  components: {
47
+    carousel
48
+  }
49
+};
50
+</script>
51
+
52
+<style lang="scss" scoped></style>

+ 68
- 0
src/components/about/aboutUsContentSection.vue View File

@@ -0,0 +1,68 @@
1
+<template>
2
+  <section id="services">
3
+    <div class="container">
4
+      <div class="row">
5
+        <div class="col-lg-6" data-aos="fade-right">
6
+          <p>
7
+            To date the team have processed many sales in the residential, share block and
8
+            commercial arenas within South Africa and are currently involved in the rental and
9
+            management of 40 commercial and 15 residential properties.
10
+          </p>
11
+          <p>
12
+            <strong
13
+              >The Uni-Vate support team consists of three highly qualified and experienced staff,
14
+              who have thirteen years' joint experience in the timeshare and property
15
+              industry.</strong
16
+            >
17
+          </p>
18
+          <p>
19
+            Owners seeking to sell their property understand the power of internet marketing and the
20
+            sophistication of target marketing to consumers who have shown an interest in buying
21
+            property. Buyers can save by purchasing from Owners advertising their property for sale
22
+            through Uni-Vate, using their website.
23
+          </p>
24
+          <p>
25
+            <strong
26
+              >Sellers across SA are able to list properties for a listing fee of R380 per property
27
+              listing which gives them exposure not only on the website, but on social media sites
28
+              also.</strong
29
+            >
30
+          </p>
31
+          <p>
32
+            Uni-Vate Properties is affiliated to the Estate Agents Board (EAAB) and also to the
33
+            Institute of Estate Agents South Africa (IEASA) and operates in compliance with the
34
+            Estate Agents Code of Conduct. This assures our clients of professional, ethical and
35
+            fair service at all times.
36
+          </p>
37
+          <br />
38
+        </div>
39
+
40
+        <div class="col-lg-6" data-aos="fade-left">
41
+          <h3>
42
+            Meeting the property needs of consumers is at the heart of what we do; whether it is
43
+            helping an Owner transition out of their property Ownership, or helping the buyer find
44
+            the property they have been looking for.
45
+          </h3>
46
+          <p>
47
+            So whether you would like to sell or rent out your: timeshare, home, industrial,
48
+            commercial, or vacant property or whether you would like to buy or rent a: timeshare,
49
+            home, industrial, commercial, or vacant property; Uni-Vate is able to assist you.
50
+          </p>
51
+          <img src="../../../public/img/logos.jpg" width="100%" /><br />
52
+        </div>
53
+      </div>
54
+    </div>
55
+  </section>
56
+</template>
57
+
58
+<script>
59
+import AOS from "aos";
60
+import "aos/dist/aos.css";
61
+export default {
62
+  created() {
63
+    AOS.init();
64
+  }
65
+};
66
+</script>
67
+
68
+<style lang="scss" scoped></style>

+ 14
- 102
src/components/about/aboutUsPage.vue View File

@@ -1,110 +1,22 @@
1 1
 <template>
2
-  <!-- eslint-disable max-len -->
3
-  <section class="section-about">
4
-    <div class="container">
5
-      <div class="row">
6
-        <div class="col-sm-12">
7
-          <div class="about-img-box">
8
-            <img src="img/slide-about-1.jpg" alt class="img-fluid title-img" />
9
-          </div>
10
-          <div class="sinse-box title-title">
11
-            <h3 class="sinse-title">About Us</h3>
12
-          </div>
13
-        </div>
14
-        <div class="col-md-12 section-t8">
15
-          <div class="row">
16
-            <div class="col-lg-2 d-none d-lg-block">
17
-              <div class="title-vertical d-flex justify-content-start color-b">
18
-                <span>Uni-Vate Properties</span>
19
-              </div>
20
-            </div>
21
-            <div class="col-md-6 col-lg-5 section-md-t3">
22
-              <p class="color-text-a font-weight-bold" style="text-align:left;">
23
-                Uni-Vate Properties began in 2013 in Pretoria East with various properties in their portfolio.
24
-                Led by our Director, Delia O' Conner, who has over 25 years of experience in the timeshare industry,
25
-                the move to conventional property sales and rentals was an easy transition for the Uni-Vate team.
26
-              </p>
27
-              <p class="color-text-a" style="text-align:left;">
28
-                To date the team have processed many sales in the residential,
29
-                share block and commercial arenas within South Africa and are currently
30
-                involved in the rental and management of 40 commercial and 15 residential properties.
31
-                <br />
32
-                <br />The Uni-Vate support team consists of three highly qualified and experienced staff,
33
-                who have thirteen years' joint experience in the timeshare and property industry.
34
-              </p>
35
-              <p class="color-text-a" style="text-align:left;">
36
-                Owners seeking to sell their property understand the power of internet marketing
37
-                and the sophistication of target marketing to consumers who have shown an interest
38
-                in buying property. Buyers can save by purchasing from owners advertising their
39
-                property for sale through Uni-Vate, using their website.
40
-                <br />
41
-                <br />Sellers across SA are
42
-                able to list properties for a listing fee of R380 per property listing which gives
43
-                them exposure not only on the website, but on social media sites also.
44
-              </p>
45
-            </div>
46
-            <div class="col-md-6 col-lg-5">
47
-              <p class="color-text-a" style="text-align:left;">
48
-                Uni-Vate Properties is affiliated to the Estate Agents Board (EAAB) and also
49
-                to the Institute of Estate Agents South Africa (IEASA) and operates in compliance
50
-                with the Estate Agents Code of Conduct. This assures our clients of professional,
51
-                ethical and fair service at all times.
52
-              </p>
53
-              <p class="color-text-b" style="text-align:left;">
54
-                Meeting the property needs of consumers is at the heart of what we do;
55
-                whether it is helping an owner transition out of their property ownership, or
56
-                helping the buyer find the property they have been looking for.
57
-                So whether you would like to sell or rent out your: timeshare, home,
58
-                industrial, commercial, or vacant property or whether you would like to
59
-                buy or rent a: timeshare, home, industrial, commercial, or vacant property;
60
-                <br />
61
-                <strong>Uni-Vate is able to assist you.</strong>
62
-              </p>
63
-              <p>
64
-                <img
65
-                  src="img/plan2.jpg"
66
-                  alt
67
-                  class="img-fluid"
68
-                  style="width:450px;height:200px; border-radius:10px"
69
-                />
70
-              </p>
71
-            </div>
72
-          </div>
73
-          <hr />
74
-          <img
75
-            src="img/logos/nama.png"
76
-            alt
77
-            class="img-fluid"
78
-            style="width:140px;height:150px; border-radius:10px"
79
-          />
80
-          <img
81
-            src="img/logos/IEASA-logo.png"
82
-            alt
83
-            class="img-fluid"
84
-            style="width:380px;height:140px; border-radius:10px"
85
-          />
86
-          <img
87
-            src="img/logos/eaab.png"
88
-            alt
89
-            class="img-fluid"
90
-            style="width:180px;height:140px; border-radius:10px"
91
-          />
92
-        </div>
93
-      </div>
94
-    </div>
95
-    <br />
96
-  </section>
97
-  <!--/ About End /-->
2
+  <div>
3
+    <carouselSection />
4
+    <main id="main">
5
+      <contentSection />
6
+    </main>
7
+  </div>
98 8
 </template>
99 9
 
100 10
 <script>
11
+/* eslint-disable */
12
+import carouselSection from "./aboutUsCarouselSection";
13
+import contentSection from "./aboutUsContentSection";
101 14
 export default {
102
-  created: () => {},
15
+  components: {
16
+    carouselSection,
17
+    contentSection
18
+  }
103 19
 };
104 20
 </script>
105 21
 
106
-<style scoped>
107
-.colorBlueTrans {
108
-  padding: 15px;
109
-}
110
-</style>
22
+<style lang="scss" scoped></style>

+ 21
- 22
src/components/admin/logs/SearchLogs.vue View File

@@ -1,12 +1,11 @@
1 1
 <template>
2 2
   <!-- eslint-disable max-len -->
3
-  <div>
3
+  <main id="main" style="margin-top:-20px; padding-bottom:50px">
4 4
     <div class="container">
5
-      <br />
6 5
       <div class="row">
7 6
         <div class="col-md-12 col-lg-8">
8
-          <div class="title-box-d">
9
-            <h1 class="title-d" style="text-align:left; font-size: 250%">Search Log</h1>
7
+          <div class="section-header">
8
+            <h2>Search Logs</h2>
10 9
           </div>
11 10
         </div>
12 11
       </div>
@@ -62,43 +61,43 @@
62 61
       </div>
63 62
     </div>
64 63
     <br />
65
-  </div>
64
+  </main>
66 65
 </template>
67 66
 
68 67
 <script>
69
-import { mapState, mapActions, mapGetters } from 'vuex';
70
-import JsonExcel from 'vue-json-excel';
71
-import listView from '../../shared/listView.vue';
68
+import { mapState, mapActions, mapGetters } from "vuex";
69
+import JsonExcel from "vue-json-excel";
70
+import listView from "../../shared/listView.vue";
72 71
 
73 72
 export default {
74
-  name: 'searchLog',
73
+  name: "searchLog",
75 74
   components: {
76 75
     listView,
77
-    JsonExcel,
76
+    JsonExcel
78 77
   },
79 78
   data() {
80 79
     return {
81 80
       exportFields: {
82
-        Date: 'date',
83
-        Time: 'time',
84
-        User: 'userName',
85
-        Type: 'type',
86
-        Field: 'property',
87
-        Value: 'value',
88
-      },
81
+        Date: "date",
82
+        Time: "time",
83
+        User: "userName",
84
+        Type: "type",
85
+        Field: "property",
86
+        Value: "value"
87
+      }
89 88
     };
90 89
   },
91 90
   methods: {
92
-    ...mapActions('searchLog', ['getPropertySearchLogs', 'clearFilter']),
91
+    ...mapActions("searchLog", ["getPropertySearchLogs", "clearFilter"])
93 92
   },
94 93
   mounted() {
95 94
     this.getPropertySearchLogs();
96 95
   },
97 96
   computed: {
98
-    ...mapState('searchLog', ['list', 'fields', 'filter']),
97
+    ...mapState("searchLog", ["list", "fields", "filter"]),
99 98
     ...mapGetters({
100
-      list: 'searchLog/filterList',
101
-    }),
102
-  },
99
+      list: "searchLog/filterList"
100
+    })
101
+  }
103 102
 };
104 103
 </script>

+ 36
- 38
src/components/admin/misc/carousel.vue View File

@@ -1,14 +1,12 @@
1 1
 <template>
2
-  <div>
2
+  <main id="main" style="margin-top:-20px; padding-bottom:50px">
3 3
     <div class="container">
4 4
       <div class="container">
5 5
         <div class="row">
6 6
           <div class="col-md-12 col-lg-8">
7
-            <div class="title-box-d">
8
-              <br />
9
-              <h1 class="title-d" style="text-align:left; font-size: 250%">Carousel Item</h1>
7
+            <div class="section-header">
8
+              <h2>Carousel</h2>
10 9
             </div>
11
-            <br />
12 10
           </div>
13 11
         </div>
14 12
       </div>
@@ -44,7 +42,9 @@
44 42
                         class="btn btn-b-n"
45 43
                         style="width: 150px; height:40px;"
46 44
                         data-dismiss="modal"
47
-                      >Close</button>
45
+                      >
46
+                        Close
47
+                      </button>
48 48
                     </div>
49 49
                   </div>
50 50
                 </div>
@@ -74,21 +74,15 @@
74 74
                 <span>{{ bedrooms }}</span>
75 75
               </li>
76 76
               <li class="d-flex justify-content-between">
77
-                <strong>
78
-                  <i class="fa fa-users"></i>&nbsp&nbsp&nbspSleeps:
79
-                </strong>
77
+                <strong> <i class="fa fa-users"></i>&nbsp&nbsp&nbspSleeps: </strong>
80 78
                 <span>{{ sleeps }}</span>
81 79
               </li>
82 80
               <li class="d-flex justify-content-between">
83
-                <strong>
84
-                  <i class="fa fa-calendar"></i>&nbsp&nbsp&nbspCheck in:
85
-                </strong>
81
+                <strong> <i class="fa fa-calendar"></i>&nbsp&nbsp&nbspCheck in: </strong>
86 82
                 <span>{{ arrival }}</span>
87 83
               </li>
88 84
               <li class="d-flex justify-content-between">
89
-                <strong>
90
-                  <i class="fa fa-calendar"></i>&nbsp&nbsp&nbspCheck out:
91
-                </strong>
85
+                <strong> <i class="fa fa-calendar"></i>&nbsp&nbsp&nbspCheck out: </strong>
92 86
                 <span>{{ departure }}</span>
93 87
               </li>
94 88
             </ul>
@@ -118,53 +112,57 @@
118 112
             @click="SaveData()"
119 113
             class="btn btn-b-n"
120 114
             style="width: 85px; height:40px;"
121
-          >Save</button>
115
+          >
116
+            Save
117
+          </button>
122 118
           <button
123 119
             type="button"
124 120
             @click="Close()"
125 121
             class="btn btn-b-n"
126 122
             style="width: 85px; height:40px;"
127
-          >Close</button>
123
+          >
124
+            Close
125
+          </button>
128 126
         </div>
129 127
       </div>
130 128
     </div>
131
-  </div>
129
+  </main>
132 130
 </template>
133 131
 
134 132
 <script>
135
-import { mapState, mapActions } from 'vuex';
136
-import Search from './carouselSearch.vue';
137
-import Images from '../../property/propertyImage.vue';
133
+import { mapState, mapActions } from "vuex";
134
+import Search from "./carouselSearch.vue";
135
+import Images from "../../property/propertyImage.vue";
138 136
 
139 137
 export default {
140
-  name: 'CarouselItem',
138
+  name: "CarouselItem",
141 139
   components: {
142 140
     Search,
143
-    Images,
141
+    Images
144 142
   },
145 143
   data() {
146 144
     return {
147
-      selectedType: 'Timeshare',
148
-      propDescription: '',
149
-      bedrooms: '',
150
-      sleeps: '',
145
+      selectedType: "Timeshare",
146
+      propDescription: "",
147
+      bedrooms: "",
148
+      sleeps: "",
151 149
       arrival: Date,
152 150
       departure: Date,
153
-      images: [],
151
+      images: []
154 152
     };
155 153
   },
156 154
   computed: {
157
-    ...mapState('carousel', ['carousel']),
158
-    ...mapState('property', ['propertyImages']),
155
+    ...mapState("carousel", ["carousel"]),
156
+    ...mapState("property", ["propertyImages"])
159 157
   },
160 158
   mounted() {
161 159
     this.getCarouselItem(this.$route.params.id);
162 160
   },
163 161
   methods: {
164
-    ...mapActions('carousel', ['saveCarouselItem', 'getCarouselItem']),
165
-    ...mapActions('property', ['getSavedPropertyImages']),
162
+    ...mapActions("carousel", ["saveCarouselItem", "getCarouselItem"]),
163
+    ...mapActions("property", ["getSavedPropertyImages"]),
166 164
     onSelected(item) {
167
-      if (this.selectedType === 'Timeshare') {
165
+      if (this.selectedType === "Timeshare") {
168 166
         this.carousel.header = item.resort.resortName;
169 167
         this.bedrooms = item.bedrooms;
170 168
         this.sleeps = item.maxSleep;
@@ -186,10 +184,10 @@ export default {
186 184
       this.images = values;
187 185
     },
188 186
     Close() {
189
-      this.$router.push('/carousel');
187
+      this.$router.push("/carousel");
190 188
     },
191 189
     SaveData() {
192
-      if (this.selectedType === 'Timeshare') {
190
+      if (this.selectedType === "Timeshare") {
193 191
         // eslint-disable-next-line no-plusplus
194 192
         for (let i = 0; i < this.images.length; i++) {
195 193
           this.carousel.image = this.images[i];
@@ -197,10 +195,10 @@ export default {
197 195
       }
198 196
       if (this.carousel.id === 0) {
199 197
         this.saveCarouselItem(this.carousel);
200
-        this.$router.push('/carousel');
198
+        this.$router.push("/carousel");
201 199
       }
202 200
       // Else update
203
-    },
204
-  },
201
+    }
202
+  }
205 203
 };
206 204
 </script>

+ 16
- 17
src/components/admin/misc/carouselList.vue View File

@@ -1,13 +1,12 @@
1 1
 <template>
2 2
   <!-- eslint-disable max-len -->
3
-  <div>
3
+  <main id="main" style="padding-bottom:50px; margin-top:-20px">
4 4
     <div class="container">
5 5
       <div class="container">
6 6
         <div class="row">
7 7
           <div class="col-md-12 col-lg-8">
8
-            <div class="title-box-d">
9
-              <br />
10
-              <h1 class="title-d" style="text-align:left; font-size: 250%">Carousel Items</h1>
8
+            <div class="section-header">
9
+              <h2>Carousel Items</h2>
11 10
             </div>
12 11
           </div>
13 12
         </div>
@@ -24,43 +23,43 @@
24 23
         @onDelete="Delete"
25 24
       />
26 25
     </div>
27
-  </div>
26
+  </main>
28 27
 </template>
29 28
 
30 29
 <script>
31
-import { mapState, mapActions } from 'vuex';
32
-import listView from '../../shared/listView.vue';
30
+import { mapState, mapActions } from "vuex";
31
+import listView from "../../shared/listView.vue";
33 32
 
34 33
 export default {
35
-  name: 'CarouselList',
34
+  name: "CarouselList",
36 35
   components: {
37
-    listView,
36
+    listView
38 37
   },
39 38
   data() {
40 39
     return {
41
-      columns: ['id', 'header', 'image'],
42
-      formats: ['', '', 'image'],
40
+      columns: ["id", "header", "image"],
41
+      formats: ["", "", "image"]
43 42
     };
44 43
   },
45 44
   methods: {
46
-    ...mapActions('carousel', ['getCarouselList', 'deleteCarousel']),
45
+    ...mapActions("carousel", ["getCarouselList", "deleteCarousel"]),
47 46
     New() {
48
-      this.$router.push('/carousel/details/0');
47
+      this.$router.push("/carousel/details/0");
49 48
     },
50 49
     Edit(itemID) {
51 50
       this.$router.push({
52
-        path: `/carousel/details/${itemID}`,
51
+        path: `/carousel/details/${itemID}`
53 52
       });
54 53
     },
55 54
     Delete(item) {
56 55
       this.deleteCarousel(item.id);
57
-    },
56
+    }
58 57
   },
59 58
   mounted() {
60 59
     this.getCarouselList();
61 60
   },
62 61
   computed: {
63
-    ...mapState('carousel', ['carouselList']),
64
-  },
62
+    ...mapState("carousel", ["carouselList"])
63
+  }
65 64
 };
66 65
 </script>

+ 15
- 16
src/components/admin/property/propertyTypeList.vue View File

@@ -1,12 +1,11 @@
1 1
 <template>
2 2
   <!-- eslint-disable max-len -->
3
-  <div>
3
+  <main id="main" style="margin-top:-20px; padding-bottom: 50px">
4 4
     <div class="container">
5
-      <br />
6 5
       <div class="row">
7 6
         <div class="col-md-12 col-lg-8">
8
-          <div class="title-box-d">
9
-            <h1 class="title-d" style="text-align:left; font-size: 250%">Property Types</h1>
7
+          <div class="section-header">
8
+            <h2>Property Types</h2>
10 9
           </div>
11 10
         </div>
12 11
       </div>
@@ -25,42 +24,42 @@
25 24
       />
26 25
     </div>
27 26
     <br />
28
-  </div>
27
+  </main>
29 28
 </template>
30 29
 
31 30
 <script>
32
-import { mapState, mapActions } from 'vuex';
33
-import listView from '../../shared/listView.vue';
31
+import { mapState, mapActions } from "vuex";
32
+import listView from "../../shared/listView.vue";
34 33
 
35 34
 export default {
36
-  name: 'PropertyTypeList',
35
+  name: "PropertyTypeList",
37 36
   components: {
38
-    listView,
37
+    listView
39 38
   },
40 39
   data() {
41 40
     return {
42
-      columns: ['propertyUsageType', 'description'],
41
+      columns: ["propertyUsageType", "description"]
43 42
     };
44 43
   },
45 44
   methods: {
46
-    ...mapActions('propertyTypes', ['getPropertyTypes', 'deletePropertyType']),
45
+    ...mapActions("propertyTypes", ["getPropertyTypes", "deletePropertyType"]),
47 46
     New() {
48
-      this.$router.push('/propertyType/new');
47
+      this.$router.push("/propertyType/new");
49 48
     },
50 49
     Edit(item) {
51 50
       this.$router.push({
52
-        path: `/propertyType/${item.id}`,
51
+        path: `/propertyType/${item.id}`
53 52
       });
54 53
     },
55 54
     Delete(item) {
56 55
       this.deletePropertyType(item.id);
57
-    },
56
+    }
58 57
   },
59 58
   mounted() {
60 59
     this.getPropertyTypes();
61 60
   },
62 61
   computed: {
63
-    ...mapState('propertyTypes', ['propertyTypes']),
64
-  },
62
+    ...mapState("propertyTypes", ["propertyTypes"])
63
+  }
65 64
 };
66 65
 </script>

+ 14
- 17
src/components/admin/property/userDefinedGroupsPage.vue View File

@@ -1,14 +1,11 @@
1 1
 <template>
2 2
   <!-- eslint-disable max-len -->
3
-  <div>
3
+  <main id="main" style="margin-top:-20px; padding-bottom:50px">
4 4
     <div class="container">
5
-      <br />
6 5
       <div class="row">
7 6
         <div class="col-md-12 col-lg-8">
8
-          <div class="title-box-d">
9
-            <h1 class="title-d" style="text-align:left; font-size: 250%">
10
-              Property User Defined Groups
11
-            </h1>
7
+          <div class="section-header">
8
+            <h2>Property User Defined Groups</h2>
12 9
           </div>
13 10
         </div>
14 11
       </div>
@@ -29,32 +26,32 @@
29 26
       </div>
30 27
     </div>
31 28
     <br />
32
-  </div>
29
+  </main>
33 30
 </template>
34 31
 <script>
35
-import { mapState, mapActions } from 'vuex';
36
-import listView from '../../shared/listView.vue';
32
+import { mapState, mapActions } from "vuex";
33
+import listView from "../../shared/listView.vue";
37 34
 
38 35
 export default {
39
-  name: 'UserDefinedGroup',
36
+  name: "UserDefinedGroup",
40 37
   components: {
41
-    listView,
38
+    listView
42 39
   },
43 40
   data() {
44 41
     return {
45
-      columns: ['description', 'propertyUsageType', 'rank'],
42
+      columns: ["description", "propertyUsageType", "rank"]
46 43
     };
47 44
   },
48 45
   mounted() {
49 46
     this.getUserDefinedGroups();
50 47
   },
51 48
   computed: {
52
-    ...mapState('propertyAdmin', ['userDefinedGroups']),
49
+    ...mapState("propertyAdmin", ["userDefinedGroups"])
53 50
   },
54 51
   methods: {
55
-    ...mapActions('propertyAdmin', ['getUserDefinedGroups', 'deleteUserDefinedGroup']),
52
+    ...mapActions("propertyAdmin", ["getUserDefinedGroups", "deleteUserDefinedGroup"]),
56 53
     New() {
57
-      this.$router.push('/userDefinedGroups/userDefinedGroup');
54
+      this.$router.push("/userDefinedGroups/userDefinedGroup");
58 55
     },
59 56
     Edit(item) {
60 57
       this.$router.push(`/userDefinedGroups/userDefinedGroup/${item.id}`);
@@ -64,7 +61,7 @@ export default {
64 61
         this.userDefinedGroups.pop(item);
65 62
       }
66 63
       this.deleteUserDefinedGroup(item.id);
67
-    },
68
-  },
64
+    }
65
+  }
69 66
 };
70 67
 </script>

+ 20
- 28
src/components/admin/status/changeLogPage.vue View File

@@ -1,46 +1,38 @@
1 1
 <template>
2
-  <!-- <section class="intro-single"> -->
3
-  <div class="container">
4
-    <br />
5
-    <br />
6
-    <br />
7
-    <br />
8
-    <div class="row">
9
-      <div class="col-md-12 col-lg-8">
10
-        <!-- <div class="title-single-box"> -->
11
-        <!-- <h1 class="title-single" style="text-align:left;">Change Log</h1> -->
12
-        <!-- </div> -->
13
-        <div class="title-box-d">
14
-          <h1 class="title-d" style="text-align:left; font-size: 250%">Change Log</h1>
2
+  <main id="main" style="margin-top:-20px; padding-bottom:50px">
3
+    <!-- <section class="intro-single"> -->
4
+    <div class="container">
5
+      <div class="row">
6
+        <div class="col-md-12 col-lg-8">
7
+          <div class="section-header">
8
+            <h2>Change Log</h2>
9
+          </div>
15 10
         </div>
16
-        <br />
17 11
       </div>
12
+      <div id="table" class="col-xs-12 table-responsive">
13
+        <datatable :columns="columns" :data="rows"></datatable>
14
+      </div>
15
+      <br />
18 16
     </div>
19
-    <div id="table" class="col-xs-12 table-responsive">
20
-      <datatable :columns="columns" :data="rows"></datatable>
21
-    </div>
22
-    <br />
23
-  </div>
24 17
 
25
-  <!-- </section> -->
18
+    <!-- </section> -->
19
+  </main>
26 20
 </template>
27 21
 <script>
28
-import { mapState, mapActions } from 'vuex';
22
+import { mapState, mapActions } from "vuex";
29 23
 
30 24
 export default {
31
-  name: 'changeLogPage',
25
+  name: "changeLogPage",
32 26
   created() {
33 27
     this.getchangeLogPage();
34 28
   },
35 29
   computed: {
36
-    ...mapState('status', ['changeLogPage']),
30
+    ...mapState("status", ["changeLogPage"])
37 31
   },
38 32
   methods: {
39
-    ...mapActions('status', ['getchangeLogPage']),
40
-  },
33
+    ...mapActions("status", ["getchangeLogPage"])
34
+  }
41 35
 };
42 36
 </script>
43 37
 
44
-
45
-<style>
46
-</style>
38
+<style></style>

+ 12
- 13
src/components/admin/status/statusPage.vue View File

@@ -1,5 +1,5 @@
1 1
 <template>
2
-  <div>
2
+  <main id="main" style="margin-top:-20px; padding-bottom:50px">
3 3
     <!-- <section class="intro-single"> -->
4 4
     <div class="container">
5 5
       <br />
@@ -11,8 +11,8 @@
11 11
           <!-- <div class="title-single-box"> -->
12 12
           <!-- <h2 class="title-single">Status List</h2> -->
13 13
           <!-- </div> -->
14
-          <div class="title-box-d">
15
-            <h1 class="title-d" style="text-align:left; font-size: 250%">Status List</h1>
14
+          <div class="section-header">
15
+            <h2>Status List</h2>
16 16
           </div>
17 17
           <br />
18 18
         </div>
@@ -22,27 +22,26 @@
22 22
     <div class="container">
23 23
       <ListView :items="statusList" :columnCount="4" :compact="false" :showNew="false" />
24 24
     </div>
25
-  </div>
25
+  </main>
26 26
 </template>
27 27
 <script>
28
-import { mapState, mapActions } from 'vuex';
29
-import ListView from '../../shared/listView.vue';
28
+import { mapState, mapActions } from "vuex";
29
+import ListView from "../../shared/listView.vue";
30 30
 
31 31
 export default {
32
-  name: 'StatusList',
32
+  name: "StatusList",
33 33
   components: {
34
-    ListView,
34
+    ListView
35 35
   },
36 36
   created() {
37 37
     this.getStatusList();
38 38
   },
39 39
   computed: {
40
-    ...mapState('status', ['statusList']),
40
+    ...mapState("status", ["statusList"])
41 41
   },
42 42
   methods: {
43
-    ...mapActions('status', ['getStatusList']),
44
-  },
43
+    ...mapActions("status", ["getStatusList"])
44
+  }
45 45
 };
46 46
 </script>
47
-<style>
48
-</style>
47
+<style></style>

+ 22
- 30
src/components/admin/status/tenderWeekAdminPage.vue View File

@@ -1,50 +1,42 @@
1 1
 <template>
2
-  <!-- <section class="intro-single"> -->
3
-  <div class="container">
4
-    <br />
5
-    <br />
6
-    <br />
7
-    <br />
8
-    <div class="row">
9
-      <div class="col-md-12 col-lg-8">
10
-        <!-- <div class="title-single-box"> -->
11
-        <!-- <h1 class="title-single" style="text-align:left;">Tender Week Admin</h1> -->
12
-        <!-- </div> -->
13
-        <div class="title-box-d">
14
-          <h1 class="title-d" style="text-align:left; font-size: 250%">Tender Week Admin</h1>
2
+  <main id="main" style="margin-top:-20px; padding-bottom:50px">
3
+    <!-- <section class="intro-single"> -->
4
+    <div class="container">
5
+      <div class="row">
6
+        <div class="col">
7
+          <div class="section-header">
8
+            <h2>Tender Week Admin</h2>
9
+          </div>
15 10
         </div>
16
-        <br />
17 11
       </div>
12
+      <div id="table" class="col-xs-12 table-responsive">
13
+        <ListView :items="items" :showNew="false"></ListView>
14
+      </div>
15
+      <br />
18 16
     </div>
19
-    <div id="table" class="col-xs-12 table-responsive">
20
-      <ListView :items="items" :showNew="false"></listView>
21
-    </div>
22
-    <br />
23
-  </div>
24 17
 
25
-  <!-- </section> -->
18
+    <!-- </section> -->
19
+  </main>
26 20
 </template>
27 21
 <script>
28
-import { mapState, mapActions } from 'vuex';
29
-import ListView from '../../shared/listView.vue';
22
+import { mapState, mapActions } from "vuex";
23
+import ListView from "../../shared/listView.vue";
30 24
 
31 25
 export default {
32
-  name: 'TenderWeekAdmin',
26
+  name: "TenderWeekAdmin",
33 27
   created() {
34 28
     this.getItems();
35 29
   },
36 30
   components: {
37
-    ListView,
31
+    ListView
38 32
   },
39 33
   computed: {
40
-    ...mapState('tenderWeek', ['items']),
34
+    ...mapState("tenderWeek", ["items"])
41 35
   },
42 36
   methods: {
43
-    ...mapActions('tenderWeek', ['getItems']),
44
-  },
37
+    ...mapActions("tenderWeek", ["getItems"])
38
+  }
45 39
 };
46 40
 </script>
47 41
 
48
-
49
-<style>
50
-</style>
42
+<style></style>

+ 44
- 33
src/components/admin/status/timeshareAdminPage.vue View File

@@ -1,47 +1,59 @@
1
-/* eslint-disable no-restricted-syntax */
2
-/* eslint-disable guard-for-in */
1
+/* eslint-disable no-restricted-syntax */ /* eslint-disable guard-for-in */
3 2
 <!-- eslint-disable max-len -->
4 3
 <template>
5
-  <div>
6
-    <br />
4
+  <main id="main" style="margin-top:-20px; padding-bottom:50px">
5
+    <div class="container">
6
+      <div class="row">
7
+        <div class="col">
8
+          <div class="section-header">
9
+            <h2>Pending Weeks</h2>
10
+          </div>
11
+        </div>
12
+      </div>
13
+    </div>
14
+
7 15
     <div class="row">
8 16
       <div class="offset-1 col-md-3">
9 17
         <button
10 18
           type="button"
11
-          :class="{'form-control btn btn-primary ': (1===1), 'my-disable': (!selectedItems || selectedItems.length === 0)}"
19
+          :class="{
20
+            'form-control btn btn-primary ': 1 === 1,
21
+            'my-disable': !selectedItems || selectedItems.length === 0
22
+          }"
12 23
           value="Verify Week(s)"
13 24
           :disabled="!(selectedItems.length > 0)"
14 25
           @click="onVerify()"
15
-        >{{ButtonMessage}}</button>
16
-        <div>{{Message}}</div>
26
+        >
27
+          {{ ButtonMessage }}
28
+        </button>
29
+        <div>{{ Message }}</div>
17 30
       </div>
18 31
       <div class="offset-1 col-md-10">
19 32
         <ListView
20 33
           :items="getNeedsVerify"
21 34
           @onRowClick="onRowClick"
22 35
           @onClearSelected="onClearSelected"
23
-          :title="'Pending Weeks'"
24 36
           :showNew="false"
25 37
         />
26 38
       </div>
27 39
     </div>
28
-  </div>
40
+  </main>
29 41
 </template>
30 42
 <script>
31
-import { mapState, mapActions, mapGetters } from 'vuex';
32
-import Log from '../../../assets/Log';
33
-import ListView from '../../shared/listView.vue';
43
+import { mapState, mapActions, mapGetters } from "vuex";
44
+import Log from "../../../assets/Log";
45
+import ListView from "../../shared/listView.vue";
34 46
 
35 47
 export default {
36
-  name: 'TimeshareAdmin',
48
+  name: "TimeshareAdmin",
37 49
   components: {
38
-    ListView,
50
+    ListView
39 51
   },
40 52
   data() {
41 53
     return {
42 54
       user: Log.getUser(),
43 55
       selectedItems: [],
44
-      showMessage: false,
56
+      showMessage: false
45 57
     };
46 58
   },
47 59
   mounted() {
@@ -54,36 +66,36 @@ export default {
54 66
       return selectedArray;
55 67
     },
56 68
     ButtonMessage() {
57
-      let msg = '';
69
+      let msg = "";
58 70
       if (!(this.selectedItems.length > 0)) {
59
-        msg = 'No Items selected';
71
+        msg = "No Items selected";
60 72
       } else {
61
-        msg = 'Verify item';
73
+        msg = "Verify item";
62 74
         if (this.selectedItems.length > 1) {
63
-          msg += 's';
75
+          msg += "s";
64 76
         }
65 77
       }
66 78
       return msg;
67 79
     },
68 80
     Message() {
69
-      let msg = '';
81
+      let msg = "";
70 82
       if (!(this.selectedItems.length > 0)) {
71
-        msg = 'Please select the item(s) to verify.';
83
+        msg = "Please select the item(s) to verify.";
72 84
       } else {
73 85
         msg = `${this.selectedItems.length}`;
74 86
         if (this.selectedItems.length === 1) {
75
-          msg += ' item ';
76
-        } else msg += ' items ';
77
-        msg += 'selected. Click to verify or select more...';
87
+          msg += " item ";
88
+        } else msg += " items ";
89
+        msg += "selected. Click to verify or select more...";
78 90
       }
79 91
       return msg;
80 92
     },
81
-    ...mapState('myWeeks', ['items']),
82
-    ...mapGetters({ getNeedsVerify: 'myWeeks/getNeedsVerify' }),
93
+    ...mapState("myWeeks", ["items"]),
94
+    ...mapGetters({ getNeedsVerify: "myWeeks/getNeedsVerify" })
83 95
   },
84 96
   methods: {
85
-    ...mapActions('myWeeks', ['getItems', 'verifyWeek']),
86
-    ...mapActions('alert', ['success']),
97
+    ...mapActions("myWeeks", ["getItems", "verifyWeek"]),
98
+    ...mapActions("alert", ["success"]),
87 99
     onVerify() {
88 100
       if (this.selectedItems.length > 0) {
89 101
         for (const i in this.selectedItems) {
@@ -93,8 +105,8 @@ export default {
93 105
             this.verifyWeek(item.id);
94 106
           }
95 107
         }
96
-        this.success('Week verified!');
97
-        this.$router.push('/shared/alert');
108
+        this.success("Week verified!");
109
+        this.$router.push("/shared/alert");
98 110
       }
99 111
     },
100 112
     onRowClick(items) {
@@ -105,12 +117,11 @@ export default {
105 117
     },
106 118
     onClearSelected() {
107 119
       this.selectedItems = [];
108
-    },
109
-  },
120
+    }
121
+  }
110 122
 };
111 123
 </script>
112 124
 
113
-
114 125
 <style>
115 126
 .my-disable {
116 127
   background-color: silver;

+ 54
- 60
src/components/admin/status/userManagementPage.vue View File

@@ -1,98 +1,92 @@
1 1
 <template>
2
-  <!-- eslint-disable max-len -->
3
-  <div class="container">
4
-    <br />
5
-    <br />
6
-    <div class="row">
7
-      <div class="col-md-12 col-lg-8">
8
-        <div class="title-box-d">
9
-          <h1 class="title-d" style="text-align:left; font-size: 250%">User Management</h1>
2
+  <main id="main" style="margin-top:-20px; padding-bottom:50px">
3
+    <!-- eslint-disable max-len -->
4
+    <div class="container">
5
+      <br />
6
+      <br />
7
+      <div class="row">
8
+        <div class="col-md-12 col-lg-8">
9
+          <div class="section-header">
10
+            <h2>User Management</h2>
11
+          </div>
10 12
         </div>
11 13
       </div>
12
-    </div>
13
-    <div class="row">
14
-      <div class="col-md-2 offset-1">
15
-        <button type="button" class="btn btn-b-n">Private Users</button>
14
+      <div class="row">
15
+        <div class="col-md-2 offset-1">
16
+          <button type="button" class="btn btn-b-n">Private Users</button>
17
+        </div>
18
+        <div class="col-md-2 offset-2">
19
+          <button
20
+            @click="routerGoTo('/status/agentUserManagementPage')"
21
+            type="button"
22
+            class="btn btn-b-n"
23
+          >
24
+            Agents
25
+          </button>
26
+        </div>
16 27
       </div>
17
-      <div class="col-md-2 offset-2">
18
-        <button
19
-          @click="routerGoTo('/status/agentUserManagementPage')"
20
-          type="button"
21
-          class="btn btn-b-n"
22
-        >Agents</button>
28
+      <div class="container">
29
+        <ListView
30
+          :items="individuals"
31
+          :showNew="false"
32
+          :editable="true"
33
+          :deleteable="true"
34
+          :showCustomAction="true"
35
+          :showColumnChooser="false"
36
+          :CustomActionHeading="'Reset Password'"
37
+          :displayColumns="columns"
38
+          :displayHeaders="headers"
39
+          @onEdit="Edit"
40
+          @onDelete="Delete"
41
+          @onResetPassword="PasswordReset"
42
+        />
43
+        <br />
23 44
       </div>
24 45
     </div>
25
-    <div class="container">
26
-      <ListView
27
-        :items="individuals"
28
-        :showNew="false"
29
-        :editable="true"
30
-        :deleteable="true"
31
-        :showCustomAction="true"
32
-        :showColumnChooser="false"
33
-        :CustomActionHeading="'Reset Password'"
34
-        :displayColumns="columns"
35
-        :displayHeaders="headers"
36
-        @onEdit="Edit"
37
-        @onDelete="Delete"
38
-        @onResetPassword="PasswordReset"
39
-      />
40
-      <br />
41
-    </div>
42
-  </div>
46
+  </main>
43 47
 </template>
44 48
 
45 49
 <script>
46
-import { mapState, mapActions } from 'vuex';
50
+import { mapState, mapActions } from "vuex";
47 51
 // import alert from '../../shared/alert.vue';
48
-import ListView from '../../shared/listView.vue';
52
+import ListView from "../../shared/listView.vue";
49 53
 
50 54
 export default {
51
-  name: 'userManagementPage',
55
+  name: "userManagementPage",
52 56
   components: {
53
-    ListView,
57
+    ListView
54 58
     // alert,
55 59
   },
56 60
   data() {
57 61
     return {
58
-      columns: [
59
-        'id',
60
-        'name',
61
-        'surname',
62
-        'cellNumber',
63
-        'telephone',
64
-        'email',
65
-        'isDeleted',
66
-      ],
67
-      headers: ['', '', '', '', '', '', ''],
68
-      item: {},
62
+      columns: ["id", "name", "surname", "cellNumber", "telephone", "email", "isDeleted"],
63
+      headers: ["", "", "", "", "", "", ""],
64
+      item: {}
69 65
     };
70 66
   },
71 67
   props: {},
72 68
   methods: {
73
-    ...mapActions('register', ['getIndividuals', 'deleteIndividual']),
69
+    ...mapActions("register", ["getIndividuals", "deleteIndividual"]),
74 70
     routerGoTo(goTo) {
75 71
       this.$router.push(goTo);
76 72
     },
77 73
     Edit(item) {
78 74
       this.$router.push({
79
-        path: '/user/updateProfileInfo',
80
-        query: { id: item.id },
75
+        path: "/user/updateProfileInfo",
76
+        query: { id: item.id }
81 77
       });
82 78
     },
83 79
     Delete(item) {
84 80
       this.deleteIndividual(item.id);
85
-    },
81
+    }
86 82
   },
87 83
   mounted() {
88 84
     this.getIndividuals();
89 85
   },
90 86
   computed: {
91
-    ...mapState('register', ['individuals', 'removeIndividual']),
92
-  },
87
+    ...mapState("register", ["individuals", "removeIndividual"])
88
+  }
93 89
 };
94 90
 </script>
95 91
 
96
-
97
-<style>
98
-</style>
92
+<style></style>

+ 12
- 20
src/components/admin/unitConfiguration/unitConfigurationPage.vue View File

@@ -1,21 +1,13 @@
1 1
 <template>
2
-  <div>
2
+  <main id="main" style="margin-top:-20px; padding-bottom:50px">
3 3
     <!-- eslint-disable max-len -->
4 4
     <!-- <section class="intro-single"> -->
5 5
     <div class="container">
6
-      <br />
7
-      <br />
8
-      <br />
9
-      <br />
10 6
       <div class="row">
11
-        <div class="col-md-12 col-lg-8">
12
-          <!-- <div class="title-single-box"> -->
13
-          <!-- <h2 class="title-single">Unit Configuration List</h2> -->
14
-          <!-- </div> -->
15
-          <div class="title-box-d">
16
-            <h1 class="title-d" style="text-align:left; font-size: 250%">Unit Configuration List</h1>
7
+        <div class="col">
8
+          <div class="section-header">
9
+            <h2>Unit Configuration List</h2>
17 10
           </div>
18
-          <br />
19 11
         </div>
20 12
       </div>
21 13
     </div>
@@ -23,26 +15,26 @@
23 15
     <div class="container">
24 16
       <ListView :items="unitConfigurationList" />
25 17
     </div>
26
-  </div>
18
+  </main>
27 19
 </template>
28 20
 <script>
29
-import { mapState, mapActions } from 'vuex';
30
-import ListView from '../../shared/listView.vue';
21
+import { mapState, mapActions } from "vuex";
22
+import ListView from "../../shared/listView.vue";
31 23
 
32 24
 export default {
33
-  name: 'UnitConfiguration',
25
+  name: "UnitConfiguration",
34 26
   components: {
35
-    ListView,
27
+    ListView
36 28
   },
37 29
   created() {
38 30
     this.getUnitConfigurationList();
39 31
   },
40 32
   computed: {
41
-    ...mapState('unitConfiguration', ['unitConfigurationList']),
33
+    ...mapState("unitConfiguration", ["unitConfigurationList"])
42 34
   },
43 35
   methods: {
44
-    ...mapActions('unitConfiguration', ['getUnitConfigurationList']),
45
-  },
36
+    ...mapActions("unitConfiguration", ["getUnitConfigurationList"])
37
+  }
46 38
 };
47 39
 </script>
48 40
 <style></style>

+ 38
- 33
src/components/communication/templatePage.vue View File

@@ -1,62 +1,67 @@
1 1
 <template>
2
-<!-- eslint-disable max-len -->
3
-  <div class="container-fluid" style="margin-top:25px;">
4
-    <div class="row">
5
-      <div class="col-md-1"></div>
6
-      <div class="col-md-10">
7
-        <div class>
8
-          <h3 class="sinse-title">Email Templates</h3>
2
+  <main id="main" style="margin-top:-20px; padding-bottom:50px">
3
+    <!-- eslint-disable max-len -->
4
+    <div class="container-fluid" style="margin-top:25px;">
5
+      <div class="row">
6
+        <div class="col-md-1"></div>
7
+        <div class="col-md-10">
8
+          <div class="section-header">
9
+            <h2 class="sinse-title">Email Templates</h2>
10
+          </div>
11
+        </div>
12
+        <div class="col-md-12">
13
+          <hr />
9 14
         </div>
10 15
       </div>
11
-      <div class="col-md-12">
12
-        <hr />
13
-      </div>
14
-    </div>
15
-    <div class="row">
16
-      <div :class="listClass">
17
-        <ListView :items="list" @onRowClick="onRowClick" @onNew="onNew" :showNew="true" />
18
-      </div>
19
-      <div class="col-md-6" v-if="showDetailView">
20
-        <DetailView :placeHolders="detailItem ? detailItem.placeHolders : []" :item="detailItem" @onClose="onDetailClose" :editable="clickedNew" />
16
+      <div class="row">
17
+        <div :class="listClass">
18
+          <ListView :items="list" @onRowClick="onRowClick" @onNew="onNew" :showNew="true" />
19
+        </div>
20
+        <div class="col-md-6" v-if="showDetailView">
21
+          <DetailView
22
+            :placeHolders="detailItem ? detailItem.placeHolders : []"
23
+            :item="detailItem"
24
+            @onClose="onDetailClose"
25
+            :editable="clickedNew"
26
+          />
27
+        </div>
21 28
       </div>
22
-    </div>
23 29
 
24
-    <hr />
25
-  </div>
30
+      <hr />
31
+    </div>
32
+  </main>
26 33
 </template>
27 34
 
28 35
 <script>
29
-import { mapState, mapActions } from 'vuex';
30
-import ListView from '../shared/listView.vue';
31
-import DetailView from './templateDetail.vue';
36
+import { mapState, mapActions } from "vuex";
37
+import ListView from "../shared/listView.vue";
38
+import DetailView from "./templateDetail.vue";
32 39
 
33 40
 export default {
34 41
   data() {
35 42
     return {
36 43
       detailItem: undefined,
37
-      clickedNew: false,
44
+      clickedNew: false
38 45
     };
39 46
   },
40 47
   components: {
41 48
     ListView,
42
-    DetailView,
49
+    DetailView
43 50
   },
44 51
   mounted() {
45 52
     this.getList();
46 53
   },
47 54
   computed: {
48
-    ...mapState('template', ['list', 'item']),
55
+    ...mapState("template", ["list", "item"]),
49 56
     showDetailView() {
50 57
       return this.detailItem !== undefined && this.detailItem != null;
51 58
     },
52 59
     listClass() {
53
-      return this.detailItem !== undefined && this.detailItem != null
54
-        ? 'col-md-6'
55
-        : 'col-md-12';
56
-    },
60
+      return this.detailItem !== undefined && this.detailItem != null ? "col-md-6" : "col-md-12";
61
+    }
57 62
   },
58 63
   methods: {
59
-    ...mapActions('template', ['getList']),
64
+    ...mapActions("template", ["getList"]),
60 65
     onRowClick(items) {
61 66
       if (items.length > 0) {
62 67
         const i = items[0];
@@ -73,7 +78,7 @@ export default {
73 78
     },
74 79
     onDetailClose() {
75 80
       this.detailItem = undefined;
76
-    },
77
-  },
81
+    }
82
+  }
78 83
 };
79 84
 </script>

+ 14
- 14
src/components/financial/payments.vue View File

@@ -1,14 +1,14 @@
1 1
 <template>
2 2
   <!-- eslint-disable max-len -->
3
-  <div>
3
+  <main id="main" style="margin-top:-20px;padding-bottom:300px">
4 4
     <div class="container">
5 5
       <div class="container">
6 6
         <br />
7 7
         <br />
8 8
         <div class="row">
9 9
           <div class="col-md-12 col-lg-8">
10
-            <div class="title-box-d">
11
-              <h1 class="title-d" style="text-align:left; font-size: 250%">Payments</h1>
10
+            <div class="section-header">
11
+              <h2>Payments</h2>
12 12
             </div>
13 13
           </div>
14 14
         </div>
@@ -25,36 +25,36 @@
25 25
       />
26 26
     </div>
27 27
     <br />
28
-  </div>
28
+  </main>
29 29
 </template>
30 30
 
31 31
 <script>
32
-import { mapState, mapActions } from 'vuex';
33
-import listView from '../shared/listView.vue';
34
-import Log from '../../assets/Log';
32
+import { mapState, mapActions } from "vuex";
33
+import listView from "../shared/listView.vue";
34
+import Log from "../../assets/Log";
35 35
 
36 36
 export default {
37
-  name: 'PaymentList',
37
+  name: "PaymentList",
38 38
   components: {
39
-    listView,
39
+    listView
40 40
   },
41 41
   data() {
42 42
     return {
43
-      userId: Log.getUser().Id,
43
+      userId: Log.getUser().Id
44 44
     };
45 45
   },
46 46
   methods: {
47
-    ...mapActions('Payment', ['getPayments']),
47
+    ...mapActions("Payment", ["getPayments"])
48 48
   },
49 49
   mounted() {
50 50
     this.getProperties(Object.assign(this.user.id));
51 51
   },
52 52
   computed: {
53
-    ...mapState('Payment', ['payments']),
53
+    ...mapState("Payment", ["payments"]),
54 54
     UserChanged() {
55 55
       this.getProperties(Object.assign(this.user.id));
56 56
       return this.user;
57
-    },
58
-  },
57
+    }
58
+  }
59 59
 };
60 60
 </script>

+ 246
- 67
src/components/home/carouselSection.vue View File

@@ -1,88 +1,267 @@
1 1
 <template>
2
-  <!-- eslint-disable max-len -->
3
-  <carousel
4
-    :per-page="1"
5
-    :mouse-drag="false"
6
-    :autoplay="true"
7
-    :autoplayTimeout="5000"
8
-    :loop="true"
9
-    :autoplayHoverPause="false"
10
-  >
11
-    <slide
12
-      v-for="(car, i) in carouselList"
13
-      :index="i"
14
-      :key="i"
15
-      :style="{ height:'1000px', width:'100%',  backgroundImage: 'url(' + car.image + ')',  backgroundSize: 'cover', backgroundPosition: 'center center'}"
16
-      calss="myClass"
17
-    >
18
-      <div class="intro-content display-table">
19
-        <div class="table-cell">
20
-          <div class="container">
21
-            <div class="row">
22
-              <div class="col-lg-8">
23
-                <div
24
-                  class="price-a"
25
-                  style="opacity:0.7; border: white solid 3px; border-radius: 15px; background-color: white;"
2
+  <section id="intro">
3
+    <div class="container">
4
+      <div class="row">
5
+        <div align="left" class="col-sm-12 col-md-8">
6
+          <div class="intro-content">
7
+            <h2>Find your perfect Property</h2>
8
+
9
+            <ul class="nav nav-pills mb-3" id="pills-tab" role="tablist">
10
+              <li class="nav-item">
11
+                <a
12
+                  class="nav-link btn-white-border"
13
+                  id="timeshare-tab"
14
+                  data-toggle="pill"
15
+                  href="#timeshare"
16
+                  role="tab"
17
+                  aria-controls="timeshare"
18
+                  aria-selected="true"
19
+                  >Timeshare</a
20
+                >
21
+              </li>
22
+              <li class="nav-item">
23
+                <a
24
+                  class="nav-link btn-white-border"
25
+                  id="commercial-tab"
26
+                  data-toggle="pill"
27
+                  href="#commercial"
28
+                  role="tab"
29
+                  aria-controls="commercial"
30
+                  aria-selected="false"
31
+                  >Commercial</a
32
+                >
33
+              </li>
34
+              <li class="nav-item">
35
+                <a
36
+                  class="nav-link btn-white-border"
37
+                  id="residential-tab"
38
+                  data-toggle="pill"
39
+                  href="#residential"
40
+                  role="tab"
41
+                  aria-controls="residential"
42
+                  aria-selected="false"
43
+                  >Residential</a
26 44
                 >
27
-                  <h1 class="intro-title mb-4">{{ car.header }}</h1>
28
-                  <div class="summary-list" v-if="car.isProperty">
29
-                    <p v-html="car.address" />
45
+              </li>
46
+            </ul>
47
+            <!--========    header tabs      ==========-->
48
+            <div class="tab-content" id="pills-tabContent">
49
+              <div
50
+                class="tab-pane fade show active"
51
+                id="start"
52
+                role="tabpanel"
53
+                aria-labelledby="start-tab"
54
+              >
55
+                <p>Choose an option to start your adventure</p>
56
+              </div>
57
+
58
+              <div
59
+                class="tab-pane fade show"
60
+                id="timeshare"
61
+                role="tabpanel"
62
+                aria-labelledby="timeshare-tab"
63
+              >
64
+                <H4>TIMESHARE SALES</H4>
65
+                <p>
66
+                  Start exploring your posibilities
67
+                </p>
68
+                <div id="row">
69
+                  <!-- <div class="form-group">
70
+                    <input
71
+                      data-toggle="dropdown"
72
+                      name="region"
73
+                      class="form-control my-2"
74
+                      id="name"
75
+                      placeholder="Region"
76
+                      aria-haspopup="true"
77
+                      aria-expanded="false"
78
+                    />
79
+                    <input
80
+                      data-toggle="dropdown"
81
+                      name="resort"
82
+                      class="form-control my-2"
83
+                      id="name"
84
+                      placeholder="Resort"
85
+                      aria-haspopup="true"
86
+                      aria-expanded="false"
87
+                    />
88
+                  </div> -->
89
+                  <router-link to="/timeshare/buy" class="btn-solid-blue"
90
+                    ><i class="fa fa-search"></i> BUY</router-link
91
+                  >
92
+                  <router-link to="/timeshare/sell" class="btn-solid-blue"
93
+                    ><i class="fa chevron-circle-right"></i> SELL</router-link
94
+                  >
95
+                </div>
96
+              </div>
97
+
98
+              <div
99
+                class="tab-pane fade"
100
+                id="commercial"
101
+                role="tabpanel"
102
+                aria-labelledby="commercial-tab"
103
+              >
104
+                <h4>COMMERCIAL PROPERTIES</h4>
105
+                <p>Select the region you are looking for to start your search</p>
106
+                <div id="row">
107
+                  <div class="form-group">
108
+                    <autoComplete
109
+                      align="left"
110
+                      class="col-md-11 offset-1"
111
+                      :items="suburbList"
112
+                      @selection="SelectedFilter"
113
+                      style="width:100%; margin-left:-15px"
114
+                    />
30 115
                   </div>
31
-                  <div class="summary-list" v-else>
32
-                    <ul class="list">
33
-                      <li class="d-flex justify-content-between">
34
-                        <strong>
35
-                          <i class="fa fa-bed"></i>&nbsp&nbsp&nbspBedrooms:
36
-                        </strong>
37
-                        <span>{{ car.bedrooms }}</span>
38
-                      </li>
39
-                      <li class="d-flex justify-content-between">
40
-                        <strong>
41
-                          <i class="fa fa-users"></i>&nbsp&nbsp&nbspSleeps:
42
-                        </strong>
43
-                        <span>{{ car.sleeps }}</span>
44
-                      </li>
45
-                      <li class="d-flex justify-content-between">
46
-                        <strong>
47
-                          <i class="fa fa-calendar"></i>&nbsp&nbsp&nbspCheck in:
48
-                        </strong>
49
-                        <span>{{ car.arrival | toDate }}</span>
50
-                      </li>
51
-                      <li class="d-flex justify-content-between">
52
-                        <strong>
53
-                          <i class="fa fa-calendar"></i>&nbsp&nbsp&nbspCheck out:
54
-                        </strong>
55
-                        <span>{{ car.departure | toDate}}</span>
56
-                      </li>
57
-                    </ul>
116
+                  <a v-on:click="SearchClickRentComm()" class="btn-solid-blue scrollto"
117
+                    ><i class="fa fa-search"></i> RENT</a
118
+                  >
119
+                  <a v-on:click="SearchClickBuyComm()" class="btn-solid-blue scrollto"
120
+                    ><i class="fa fa-search"></i> BUY</a
121
+                  >
122
+                </div>
123
+              </div>
124
+
125
+              <div
126
+                class="tab-pane fade"
127
+                id="residential"
128
+                role="tabpanel"
129
+                aria-labelledby="residential-tab"
130
+              >
131
+                <h4>RESIDENTIAL PROPERTIES</h4>
132
+                <p>Select the region you are looking for to start your search</p>
133
+                <div id="row">
134
+                  <div class="form-group">
135
+                    <autoComplete
136
+                      align="left"
137
+                      class="col-md-11 offset-1"
138
+                      :items="suburbList"
139
+                      @selection="SelectedFilter"
140
+                      style="width:100%; margin-left:-15px"
141
+                    />
142
+                    <!-- <input
143
+                      data-toggle="dropdown"
144
+                      name="type"
145
+                      class="form-control my-2"
146
+                      id="type"
147
+                      placeholder="Type"
148
+                      aria-haspopup="true"
149
+                      aria-expanded="false"
150
+                    /> -->
58 151
                   </div>
152
+                  <a v-on:click="SearchClickRentRes()" class="btn-solid-blue scrollto"
153
+                    ><i class="fa fa-search"></i> RENT</a
154
+                  >
155
+                  <a v-on:click="SearchClickBuyRes()" class="btn-solid-blue scrollto"
156
+                    ><i class="fa fa-search"></i> BUY</a
157
+                  >
59 158
                 </div>
60 159
               </div>
61 160
             </div>
161
+
162
+            <div></div>
62 163
           </div>
63 164
         </div>
64 165
       </div>
65
-    </slide>
66
-  </carousel>
166
+    </div>
167
+
168
+    <carousel
169
+      :nav="false"
170
+      :dots="false"
171
+      :items="1"
172
+      :autoplay="true"
173
+      :loop="true"
174
+      id="intro-carousel"
175
+      style="margin-top:-50px"
176
+      :responsive="{ 0: { items: 1, nav: false }, 600: { items: 1, nav: false } }"
177
+    >
178
+      <img class="item" src="../../../public/img/intro-carousel/home-1.jpg" alt="" />
179
+      <img class="item" src="../../../public/img/intro-carousel/home-2.jpg" alt="" />
180
+      <img class="item" src="../../../public/img/intro-carousel/home-3.jpg" alt="" />
181
+      <img class="item" src="../../../public/img/intro-carousel/home-4.jpg" alt="" />
182
+      <img class="item" src="../../../public/img/intro-carousel/home-5.jpg" alt="" />
183
+      <img class="item" src="../../../public/img/intro-carousel/home-6.jpg" alt="" />
184
+    </carousel>
185
+
186
+    <div id="intro-carousel" class="owl-carousel"></div>
187
+  </section>
188
+  <!-- #intro -->
67 189
 </template>
68 190
 
69 191
 <script>
70
-import { mapState, mapActions } from 'vuex';
71
-import { Carousel, Slide } from 'vue-carousel';
72
-
192
+/* eslint-disable */
193
+import { mapState, mapActions } from "vuex";
194
+import carousel from "vue-owl-carousel";
195
+import autoComplete from "../shared/autoComplete";
73 196
 export default {
74 197
   components: {
75
-    Carousel,
76
-    Slide,
198
+    carousel,
199
+    autoComplete
77 200
   },
78
-  methods: {
79
-    ...mapActions('carousel', ['getCarouselList']),
201
+  computed: {
202
+    ...mapState("propertySearch", ["suburbs", "suburbList", "propertySearch"])
80 203
   },
81
-  mounted() {
82
-    this.getCarouselList();
204
+  data() {
205
+    return {
206
+      propertyUsageType: "Commercial",
207
+      salesType: "Sale",
208
+      searchText: "",
209
+      clicked: false
210
+    };
83 211
   },
84
-  computed: {
85
-    ...mapState('carousel', ['carouselList']),
212
+  methods: {
213
+    ...mapActions("propertySearch", ["getSuburbs", "applyFilter"]),
214
+    SetSalesType(value) {
215
+      this.salesType = value;
216
+    },
217
+    SearchClickBuyRes() {
218
+      const item = this.suburbs.find(s => s.display === this.searchText);
219
+      this.propertySearch.province = item.province;
220
+      this.propertySearch.city = item.city;
221
+      this.propertySearch.suburb = item.suburb;
222
+      this.propertySearch.propertyUsageType = "Residential";
223
+      this.propertySearch.salesType = "Sale";
224
+
225
+      this.$router.push("/property/residential/searchResult");
226
+    },
227
+    SearchClickRentRes() {
228
+      const item = this.suburbs.find(s => s.display === this.searchText);
229
+      this.propertySearch.province = item.province;
230
+      this.propertySearch.city = item.city;
231
+      this.propertySearch.suburb = item.suburb;
232
+      this.propertySearch.propertyUsageType = "Residential";
233
+      this.propertySearch.salesType = "Rent";
234
+
235
+      this.$router.push("/property/residential/searchResult");
236
+    },
237
+    SearchClickBuyComm() {
238
+      const item = this.suburbs.find(s => s.display === this.searchText);
239
+      this.propertySearch.province = item.province;
240
+      this.propertySearch.city = item.city;
241
+      this.propertySearch.suburb = item.suburb;
242
+      this.propertySearch.propertyUsageType = "Commercial";
243
+      this.propertySearch.salesType = "Sale";
244
+
245
+      this.$router.push("/property/commercial/searchResult");
246
+    },
247
+    SearchClickRentComm() {
248
+      const item = this.suburbs.find(s => s.display === this.searchText);
249
+      this.propertySearch.province = item.province;
250
+      this.propertySearch.city = item.city;
251
+      this.propertySearch.suburb = item.suburb;
252
+      this.propertySearch.propertyUsageType = "Commercial";
253
+      this.propertySearch.salesType = "Rent";
254
+
255
+      this.$router.push("/property/commercial/searchResult");
256
+    },
257
+    SelectedFilter(item) {
258
+      this.searchText = item;
259
+    }
86 260
   },
261
+  mounted() {
262
+    this.getSuburbs();
263
+  }
87 264
 };
88 265
 </script>
266
+
267
+<style lang="scss" scoped></style>

+ 20
- 18
src/components/home/homePage.vue View File

@@ -1,29 +1,31 @@
1 1
 <template>
2 2
   <div>
3 3
     <CarouselSection />
4
-    <ServiceSection />
5
-    <PropertySection />
6
-    <NewsSection />
7
-    <TestimonialSection />
8
-    <a href="#" class="back-to-top">
9
-      <i class="fa fa-chevron-up"></i>
10
-    </a>
4
+    <PropertySection
5
+      data-aos="fade-up"
6
+      data-aos-anchor-placement="center-bottom"
7
+      data-aos-delay="150"
8
+    />
11 9
   </div>
12 10
 </template>
13 11
 <script>
14
-import CarouselSection from './carouselSection.vue';
15
-import ServiceSection from './serviceSection.vue';
16
-import PropertySection from './propertySection.vue';
17
-import NewsSection from './newsSection.vue';
18
-import TestimonialSection from './testimonialSection.vue';
19
-
12
+import CarouselSection from "./carouselSection.vue";
13
+//import ServiceSection from "./serviceSection.vue";
14
+import PropertySection from "./propertySection.vue";
15
+//import NewsSection from "./newsSection.vue";
16
+//import TestimonialSection from "./testimonialSection.vue";
17
+import AOS from "aos";
18
+import "aos/dist/aos.css";
20 19
 export default {
20
+  created() {
21
+    AOS.init();
22
+  },
21 23
   components: {
22 24
     CarouselSection,
23
-    ServiceSection,
24
-    PropertySection,
25
-    NewsSection,
26
-    TestimonialSection,
27
-  },
25
+    //ServiceSection,
26
+    PropertySection
27
+    //NewsSection,
28
+    //TestimonialSection
29
+  }
28 30
 };
29 31
 </script>

+ 28
- 22
src/components/home/propertySection.vue View File

@@ -1,42 +1,48 @@
1 1
 <template>
2
-  <div>
3
-    <section class="section-property section-t8">
2
+  <main id="main">
3
+    <section id="portfolio" class="wow fadeInUp">
4 4
       <div class="container">
5 5
         <div class="row">
6
-          <div class="col-md-12">
7
-            <div class="title-wrap d-flex justify-content-between">
8
-              <div class="title-box">
9
-                <h2 class="title-a">Latest Properties</h2>
10
-              </div>
11
-            </div>
6
+          <div class="col-lg-12">
7
+            <h2>Latest Properties</h2>
8
+          </div>
9
+        </div>
10
+      </div>
11
+      <div class="contianer">
12
+        <div class="row">
13
+          <div class="col">
14
+            <propertyCard
15
+              v-if="latestProperties.length > 0"
16
+              name="propertyholder"
17
+              :properties="latestProperties"
18
+              :showSort="false"
19
+            />
12 20
           </div>
13 21
         </div>
14
-        <propertyCard
15
-          v-if="latestProperties.length > 0"
16
-          name="propertyholder"
17
-          :properties="latestProperties"
18
-          :showSort="false"
19
-        />
20 22
       </div>
21 23
     </section>
22
-  </div>
24
+    <!-- #listings -->
25
+  </main>
23 26
 </template>
24
-<script>
25
-import { mapState, mapActions } from 'vuex';
26
-import propertyCard from '../property/propertyCard.vue';
27 27
 
28
+<script>
29
+/* eslint-disable */
30
+import { mapState, mapActions } from "vuex";
31
+import propertyCard from "../property/propertyCard.vue";
28 32
 export default {
29 33
   components: {
30
-    propertyCard,
34
+    propertyCard
31 35
   },
32 36
   computed: {
33
-    ...mapState('propertySearch', ['latestProperties']),
37
+    ...mapState("propertySearch", ["latestProperties"])
34 38
   },
35 39
   methods: {
36
-    ...mapActions('propertySearch', ['searchLatestProperties']),
40
+    ...mapActions("propertySearch", ["searchLatestProperties"])
37 41
   },
38 42
   mounted() {
39 43
     this.searchLatestProperties();
40
-  },
44
+  }
41 45
 };
42 46
 </script>
47
+
48
+<style lang="scss" scoped></style>

+ 26
- 35
src/components/marketing/landingPage.vue View File

@@ -54,7 +54,8 @@
54 54
                 role="tab"
55 55
                 aria-controls="directions"
56 56
                 aria-selected="false"
57
-              >Html</a>
57
+                >Html</a
58
+              >
58 59
             </li>
59 60
             <li class="nav-item">
60 61
               <a
@@ -65,7 +66,8 @@
65 66
                 role="tab"
66 67
                 aria-controls="resort-layout"
67 68
                 aria-selected="true"
68
-              >Preview</a>
69
+                >Preview</a
70
+              >
69 71
             </li>
70 72
           </ul>
71 73
           <div
@@ -126,7 +128,8 @@
126 128
                 role="tab"
127 129
                 aria-controls="template"
128 130
                 aria-selected="false"
129
-              >Html</a>
131
+                >Html</a
132
+              >
130 133
             </li>
131 134
             <li class="nav-item">
132 135
               <a
@@ -137,7 +140,8 @@
137 140
                 role="tab"
138 141
                 aria-controls="preview"
139 142
                 aria-selected="true"
140
-              >Preview</a>
143
+                >Preview</a
144
+              >
141 145
             </li>
142 146
           </ul>
143 147
           <div
@@ -191,11 +195,9 @@
191 195
           </label>
192 196
           <div class="d-flex">
193 197
             <div class="p-2">
194
-              <div
195
-                class="btn btn-primary myBackground"
196
-                @click="addClose()"
197
-                v-if="CanEdit"
198
-              >{{btnCaption}}</div>
198
+              <div class="btn btn-primary myBackground" @click="addClose()" v-if="CanEdit">
199
+                {{ btnCaption }}
200
+              </div>
199 201
             </div>
200 202
           </div>
201 203
         </div>
@@ -232,11 +234,9 @@
232 234
           </label>
233 235
           <div class="d-flex">
234 236
             <div class="p-2">
235
-              <div
236
-                class="btn btn-primary myBackground"
237
-                @click="addWeekClose()"
238
-                v-if="CanEditWeeks"
239
-              >{{btnCaptionWeek}}</div>
237
+              <div class="btn btn-primary myBackground" @click="addWeekClose()" v-if="CanEditWeeks">
238
+                {{ btnCaptionWeek }}
239
+              </div>
240 240
             </div>
241 241
           </div>
242 242
         </div>
@@ -270,13 +270,17 @@
270 270
             @click="SaveData()"
271 271
             class="btn btn-primary myBackground"
272 272
             style="width: 85px; height:40px;"
273
-          >Save</button>
273
+          >
274
+            Save
275
+          </button>
274 276
           <button
275 277
             type="button"
276 278
             @click="Close()"
277 279
             class="btn btn-primary myBackground"
278 280
             style="width: 85px; height:40px;"
279
-          >Close</button>
281
+          >
282
+            Close
283
+          </button>
280 284
         </div>
281 285
       </div>
282 286
       <div v-if="wait" id="preloader"></div>
@@ -342,16 +346,12 @@ export default {
342 346
             this.campaign.items[i].placeHolders &&
343 347
             this.campaign.items[i].placeHolders.length > 0
344 348
           ) {
345
-            this.campaign.items[
346
-              i
347
-            ].campaignItemPlaceHolder = this.campaign.items[i].placeHolders;
349
+            this.campaign.items[i].campaignItemPlaceHolder = this.campaign.items[i].placeHolders;
348 350
           }
349 351
         }
350 352
 
351 353
         for (let i = 0; i < this.campaign.placeHolders.length; i++) {
352
-          this.campaign.placeHolders[i].format = this.campaign.placeHolders[
353
-            i
354
-          ].formatTemplate;
354
+          this.campaign.placeHolders[i].format = this.campaign.placeHolders[i].formatTemplate;
355 355
         }
356 356
         console.log(JSON.stringify(this.campaign));
357 357
         // this.saveCampaign(this.campaign)
@@ -374,9 +374,7 @@ export default {
374 374
       this.$router.push("/landingPage/week/0");
375 375
     },
376 376
     onItemAdd(item) {
377
-      const myList = this.campaign.placeHolders
378
-        ? this.campaign.placeHolders
379
-        : [];
377
+      const myList = this.campaign.placeHolders ? this.campaign.placeHolders : [];
380 378
       myList.push({
381 379
         name: item.name,
382 380
         boundTo: item.property,
@@ -402,10 +400,7 @@ export default {
402 400
       }
403 401
     },
404 402
     onItemDelete(item) {
405
-      this.campaign.placeHolders = _.remove(
406
-        this.campaign.placeHolders,
407
-        x => x !== item
408
-      );
403
+      this.campaign.placeHolders = _.remove(this.campaign.placeHolders, x => x !== item);
409 404
       this.placeHolders = this.campaign.placeHolders;
410 405
     },
411 406
     // AddWeek(item) {
@@ -438,11 +433,7 @@ export default {
438 433
     }
439 434
   },
440 435
   computed: {
441
-    ...mapState("campaign", [
442
-      "campaign",
443
-      "campaignPlaceHolders",
444
-      "campaignItems"
445
-    ]),
436
+    ...mapState("campaign", ["campaign", "campaignPlaceHolders", "campaignItems"]),
446 437
     PlaceHolders() {
447 438
       if (this.campaign && this.campaign.placeHolders) {
448 439
         return this.campaign.placeHolders;
@@ -469,4 +460,4 @@ export default {
469 460
     }
470 461
   }
471 462
 };
472
-</script>
463
+</script>

+ 4
- 4
src/components/marketing/landingPages.vue View File

@@ -1,14 +1,14 @@
1 1
 <template>
2 2
   <!-- eslint-disable max-len -->
3
-  <div>
3
+  <main id="main" style="margin-top:-20px; padding-bottom:50px">
4 4
     <div class="container">
5 5
       <div class="container">
6 6
         <br />
7 7
         <br />
8 8
         <div class="row">
9 9
           <div class="col-md-12 col-lg-8">
10
-            <div class="title-box-d">
11
-              <h1 class="title-d" style="text-align:left; font-size: 250%">Landing Pages</h1>
10
+            <div class="section-header">
11
+              <h2>Landing Pages</h2>
12 12
             </div>
13 13
           </div>
14 14
         </div>
@@ -31,7 +31,7 @@
31 31
       />
32 32
     </div>
33 33
     <br />
34
-  </div>
34
+  </main>
35 35
 </template>
36 36
 
37 37
 <script>

+ 101
- 105
src/components/misc/address.vue View File

@@ -1,155 +1,155 @@
1 1
 <template>
2
-  <!-- eslint-disable max-len -->
3
-  <div>
4
-    <br />
5
-    <div class="col-md-12" style="text-align:centre">
6
-      <div class="myWell">
7
-        <h4>Address</h4>
8
-      </div>
9
-      <div class="form-group row"></div>
10
-      <div class="row" style="text-align:left">
11
-        <div class="col-md-6" style="margin-bottom: 1em">
12
-          <label>Street Number *</label>
13
-          <prop-field
14
-            :display="address.streetNumber"
15
-            :editType="'text'"
16
-            :propertyName="'streetNumber'"
17
-            :mayEdit="true"
18
-            @UpdateValue="UpdateValue"
2
+  <div class="form">
3
+    <div id="sendmessage">Your details has been sent. Thank you!</div>
4
+    <div id="errormessage"></div>
5
+    <form method="post" role="form" class="contactForm">
6
+      <div class="form-row">
7
+        <div class="form-group col-md-6">
8
+          <input
9
+            type="text"
10
+            name="street-nr"
11
+            class="form-control"
12
+            id="street-nr"
13
+            placeholder="Street Number"
14
+            data-rule="minlen:4"
15
+            data-msg="Please enter your street number"
16
+            v-model="address.streetNumber"
19 17
           />
18
+          <div class="validation"></div>
20 19
         </div>
21
-        <div class="col-md-6" style="margin-bottom: 1em">
22
-          <label>Street Name *</label>
23
-          <prop-field
24
-            :display="address.street"
25
-            :editType="'text'"
26
-            :propertyName="'street'"
27
-            :mayEdit="true"
28
-            @UpdateValue="UpdateValue"
20
+        <div class="form-group col-md-6">
21
+          <input
22
+            type="text"
23
+            class="form-control"
24
+            name="street"
25
+            id="street"
26
+            placeholder="Street Name"
27
+            data-msg="Please enter your street name"
28
+            v-model="address.street"
29 29
           />
30
+          <div class="validation"></div>
30 31
         </div>
31
-        <div class="col-md-6" style="margin-bottom: 1em">
32
-          <label>Province *</label>
33
-          <propField
34
-            :display="address.province"
35
-            :editType="'selector'"
36
-            :arrayObject="provinces"
37
-            :propertyName="'province'"
38
-            :mayEdit="true"
39
-            @UpdateValue="UpdateValue"
32
+        <div class="form-group col-md-6">
33
+          <input
34
+            type="text"
35
+            name="province"
36
+            class="form-control"
37
+            id="province"
38
+            placeholder="Province"
39
+            data-rule="minlen:4"
40
+            data-msg="Please enter your province"
41
+            v-model="address.province"
40 42
           />
43
+          <div class="validation"></div>
41 44
         </div>
42
-
43
-        <div class="col-md-6" style="margin-bottom: 1em">
44
-          <label>City *</label>
45
-          <propField
46
-            :display="address.city"
47
-            :editType="'selector'"
48
-            :arrayObject="cities"
49
-            :propertyName="'city'"
50
-            :mayEdit="true"
51
-            @UpdateValue="UpdateValue"
45
+        <div class="form-group col-md-6">
46
+          <input
47
+            type="text"
48
+            class="form-control"
49
+            name="city"
50
+            id="city"
51
+            placeholder="City"
52
+            data-rule="minlen:4"
53
+            data-msg="Please enter your city"
54
+            v-model="address.city"
52 55
           />
56
+          <div class="validation"></div>
53 57
         </div>
54
-        <div class="col-md-6" style="margin-bottom: 1em">
55
-          <label>Suburb *</label>
56
-          <propField
57
-            :display="address.suburb"
58
-            :editType="'selector'"
59
-            :arrayObject="suburbs"
60
-            :propertyName="'suburb'"
61
-            :mayEdit="true"
62
-            @UpdateValue="UpdateValue"
58
+        <div class="form-group col-md-6">
59
+          <input
60
+            type="text"
61
+            name="suburb"
62
+            class="form-control"
63
+            id="suburb"
64
+            placeholder="Suburb"
65
+            data-rule="minlen:4"
66
+            data-msg="Please enter your suburb"
67
+            v-model="address.suburb"
63 68
           />
69
+          <div class="validation"></div>
64 70
         </div>
65
-        <div class="col-md-6" style="margin-bottom: 1em">
66
-          <label>Postal Code *</label>
67
-          <propField
68
-            :display="address.postalCode"
69
-            :editType="'text'"
70
-            :propertyName="'postalCode'"
71
-            :mayEdit="true"
72
-            @UpdateValue="UpdateValue"
71
+        <div class="form-group col-md-6">
72
+          <input
73
+            type="text"
74
+            class="form-control"
75
+            name="postal"
76
+            id="postal"
77
+            placeholder="Postal Code"
78
+            data-msg="Please enter your postal code"
79
+            v-model="address.postalCode"
73 80
           />
81
+          <div class="validation"></div>
74 82
         </div>
75 83
       </div>
76
-    </div>
84
+    </form>
77 85
   </div>
78 86
 </template>
79 87
 
80 88
 <script>
81
-import { mapState, mapActions } from 'vuex';
82
-import propField from '../property/propertyFieldEditor.vue';
89
+/* eslint-disable */
90
+import { mapState, mapActions } from "vuex";
91
+import propField from "../property/propertyFieldEditor.vue";
83 92
 
84 93
 export default {
85 94
   components: {
86
-    propField,
95
+    propField
87 96
   },
88 97
   data() {
89 98
     return {
90
-      propertyType: 'Residential',
99
+      propertyType: "Residential"
91 100
     };
92 101
   },
93 102
   props: {
94
-    address: {},
103
+    address: {}
95 104
   },
96 105
   computed: {
97
-    ...mapState('searchTab', ['provinces', 'cities', 'suburbs']),
106
+    ...mapState("searchTab", ["provinces", "cities", "suburbs"])
98 107
   },
99 108
   methods: {
100
-    ...mapActions('searchTab', ['getProvince', 'getCities', 'getSuburbs']),
109
+    ...mapActions("searchTab", ["getProvince", "getCities", "getSuburbs"]),
101 110
     ProvinceSelected(item) {
102 111
       if (item.target.options.selectedIndex > 0) {
103
-        this.selectedProvince = this.provinces[
104
-          item.target.options.selectedIndex - 1
105
-        ].description;
112
+        this.selectedProvince = this.provinces[item.target.options.selectedIndex - 1].description;
106 113
         this.getCities(Object.assign({}, { province: this.selectedProvince }));
107 114
       }
108 115
     },
109 116
     CitySelected(item) {
110 117
       if (item.target.options.selectedIndex > 0) {
111
-        this.selectedCity = this.cities[
112
-          item.target.options.selectedIndex - 1
113
-        ].description;
118
+        this.selectedCity = this.cities[item.target.options.selectedIndex - 1].description;
114 119
         this.getSuburbs(
115
-          Object.assign(
116
-            {},
117
-            { province: this.selectedProvince, city: this.selectedCity },
118
-          ),
120
+          Object.assign({}, { province: this.selectedProvince, city: this.selectedCity })
119 121
         );
120 122
       }
121 123
     },
122 124
     getPostalCode(item) {
123
-      this.address.postalCode = this.suburbs[
124
-        item.target.options.selectedIndex - 1
125
-      ].postalCode;
125
+      this.address.postalCode = this.suburbs[item.target.options.selectedIndex - 1].postalCode;
126 126
     },
127 127
     UpdateValue(item) {
128 128
       if (item.fieldName) {
129
-        if (item.fieldName === 'streetNumber') {
129
+        if (item.fieldName === "streetNumber") {
130 130
           this.address.streetNumber = item.value;
131 131
         }
132
-        if (item.fieldName === 'street') {
132
+        if (item.fieldName === "street") {
133 133
           this.address.street = item.value;
134 134
         }
135
-        if (item.fieldName === 'province') {
136
-          if (item.value !== '') {
135
+        if (item.fieldName === "province") {
136
+          if (item.value !== "") {
137 137
             this.address.province = item.value;
138 138
             this.getCities(Object.assign({}, { province: item.value }));
139 139
             this.address.city = null;
140 140
             this.address.suburb = null;
141
-            this.address.postalCode = '';
141
+            this.address.postalCode = "";
142 142
           } else {
143 143
             this.address.province = null;
144 144
             this.address.city = null;
145 145
             this.address.suburb = null;
146
-            this.address.postalCode = '';
146
+            this.address.postalCode = "";
147 147
             this.cities = [];
148 148
             this.suburbs = [];
149 149
           }
150 150
         }
151
-        if (item.fieldName === 'city') {
152
-          if (item.value !== '') {
151
+        if (item.fieldName === "city") {
152
+          if (item.value !== "") {
153 153
             this.address.city = item.value;
154 154
             // this.address.city = newCity;
155 155
             // this.address.cityId = newCity.id;
@@ -158,21 +158,21 @@ export default {
158 158
                 {},
159 159
                 {
160 160
                   province: item.value,
161
-                  city: item.value,
162
-                },
163
-              ),
161
+                  city: item.value
162
+                }
163
+              )
164 164
             );
165 165
             this.address.suburb = null;
166
-            this.address.postalCode = '';
166
+            this.address.postalCode = "";
167 167
           } else {
168 168
             this.address.city = null;
169 169
             this.address.suburb = null;
170
-            this.address.postalCode = '';
170
+            this.address.postalCode = "";
171 171
             this.suburbs = [];
172 172
           }
173 173
         }
174
-        if (item.fieldName === 'suburb') {
175
-          if (item.value !== '') {
174
+        if (item.fieldName === "suburb") {
175
+          if (item.value !== "") {
176 176
             // const newSuburb = this.suburbs.find(
177 177
             //   p => p.description === item.value,
178 178
             // );
@@ -183,20 +183,16 @@ export default {
183 183
             this.address.postalCode = this.address.suburb.postalCode;
184 184
           } else {
185 185
             this.address.suburb = null;
186
-            this.address.postalCode = '';
186
+            this.address.postalCode = "";
187 187
           }
188 188
         }
189 189
       }
190
-    },
190
+    }
191 191
   },
192 192
   mounted() {
193 193
     this.getProvince();
194
-  },
194
+  }
195 195
 };
196 196
 </script>
197 197
 
198
-<style>
199
-.goDown {
200
-  margin-top: 150px;
201
-}
202
-</style>
198
+<style lang="scss" scoped></style>

+ 68
- 117
src/components/processFlow/makeOffer.vue View File

@@ -1,6 +1,6 @@
1 1
 <template>
2 2
   <!-- eslint-disable max-len -->
3
-  <div style="padding-left:50px; padding-right:50px; padding-bottom:50px;">
3
+  <div style="padding-left:30px; padding-right:30px; padding-bottom:30px;">
4 4
     <div v-if="!isLoggedIn">
5 5
       <div class="container col-md-10">
6 6
         <p class="alert myError">Please Login to add a property</p>
@@ -34,89 +34,39 @@
34 34
         <div v-if="!isProperty">
35 35
           <div class="form-group row">
36 36
             <div style="text-align:left">
37
-              <div class="title-box-d">
38
-                <h3 class="title-d">
39
-                  {{ item.resort.resortName ? item.resort.resortName : item.resort }}
40
-                </h3>
37
+              <div class="intro-content">
38
+                <h2>{{ item.resort.resortName ? item.resort.resortName : item.resort }}</h2>
41 39
               </div>
42 40
             </div>
43 41
           </div>
44 42
           <div class="form-group row">
45
-            <div class="col-md-6">
46
-              <label for="resortunit">Unit</label>
47
-              <div class="input-group mb-3">
48
-                <div class="input-group-prepend">
49
-                  <span class="input-group-text" style="color: #60CBEB">
50
-                    <b>U#</b>
51
-                  </span>
52
-                </div>
53
-                <input
54
-                  class="form-control"
55
-                  type="text"
56
-                  id="resort"
57
-                  name="resortunit"
58
-                  disabled
59
-                  v-model="item.unitNumber"
60
-                />
61
-              </div>
43
+            <div class="col-md-12">
44
+              <label for="resortunit">Unit:</label>
45
+              <h5>{{ item.unitNumber }}</h5>
62 46
             </div>
63
-            <div class="col-md-6">
64
-              <label for="resortWeek">Module / Week Number</label>
65
-              <div class="input-group mb-3">
66
-                <div class="input-group-prepend">
67
-                  <span class="input-group-text" style="color: #60CBEB">
68
-                    <b>M</b>
69
-                  </span>
70
-                </div>
71
-                <input
72
-                  class="form-control"
73
-                  type="text"
74
-                  id="week"
75
-                  name="resortWeek"
76
-                  disabled
77
-                  v-model="item.weekNumber"
78
-                />
79
-              </div>
47
+            <div class="col-md-12">
48
+              <label for="resortWeek">Module / Week Number:</label>
49
+              <h5>{{ item.weekNumber }}</h5>
80 50
             </div>
81 51
           </div>
82 52
         </div>
83 53
         <div class="form-group row">
84
-          <div class="col-md-6">
85
-            <label>Current Price</label>
86
-            <div class="input-group mb-3">
87
-              <div class="input-group-prepend">
88
-                <span class="input-group-text" style="color: #60CBEB">
89
-                  <b>R</b>
90
-                </span>
91
-              </div>
92
-              <input
93
-                v-if="isProperty"
94
-                class="form-control"
95
-                type="number"
96
-                v-model="item.price"
97
-                disabled
98
-              />
99
-              <input v-else class="form-control" type="number" v-model="item.sellPrice" disabled />
100
-            </div>
54
+          <div class="col-md-12">
55
+            <label>Current Price:</label>
56
+            <h4>{{ item.sellPrice | toCurrency }}</h4>
101 57
           </div>
102
-          <div class="col-md-6">
103
-            <label>Offer</label>
104
-            <div class="input-group mb-3">
105
-              <div class="input-group-prepend">
106
-                <span class="input-group-text" style="color: #60CBEB">
107
-                  <b>R</b>
108
-                </span>
109
-              </div>
110
-              <input
111
-                class="form-control"
112
-                type="number"
113
-                step="any"
114
-                id="minPrice"
115
-                name="minPrice"
116
-                v-model="item.offer"
117
-                :disabled="!isMakeOffer"
118
-              />
119
-            </div>
58
+          <div class="col-md-12">
59
+            <label>Offer:</label>
60
+
61
+            <input
62
+              class="form-control"
63
+              type="number"
64
+              step="any"
65
+              id="minPrice"
66
+              name="minPrice"
67
+              v-model="item.offer"
68
+              :disabled="!isMakeOffer"
69
+            />
120 70
           </div>
121 71
         </div>
122 72
         <div class="form-group row">
@@ -132,33 +82,31 @@
132 82
         </div>
133 83
       </div>
134 84
       <div v-if="!isSaved" class="container">
135
-        <button
136
-          v-if="isMakeOffer"
137
-          type="button"
138
-          @click="SendOffer()"
139
-          class="btn btn-b-n"
140
-          style="width: 150px; height:40px;"
141
-        >
142
-          Send Offer
143
-        </button>
144
-        <button
145
-          v-if="!isMakeOffer && !isDecline && canEdit"
146
-          type="submit"
147
-          @click="Accept()"
148
-          class="btn btn-b-n"
149
-          style="width: 150px; height:40px;"
150
-        >
151
-          Accept
152
-        </button>
153
-        <button
154
-          v-if="!isMakeOffer && !isDecline && canEdit"
155
-          type="button"
156
-          @click="Decline()"
157
-          class="btn btn-b-n"
158
-          style="width: 150px; height:40px;"
159
-        >
160
-          Decline
161
-        </button>
85
+        <div class="row">
86
+          <div algin="center" class="col">
87
+            <button v-if="isMakeOffer" type="button" @click="SendOffer()" class="btn-solid-blue">
88
+              Send Offer
89
+            </button>
90
+            <button
91
+              v-if="!isMakeOffer && !isDecline && canEdit"
92
+              type="submit"
93
+              @click="Accept()"
94
+              class="btn btn-b-n"
95
+              style="width: 150px; height:40px;"
96
+            >
97
+              Accept
98
+            </button>
99
+            <button
100
+              v-if="!isMakeOffer && !isDecline && canEdit"
101
+              type="button"
102
+              @click="Decline()"
103
+              class="btn btn-b-n"
104
+              style="width: 150px; height:40px;"
105
+            >
106
+              Decline
107
+            </button>
108
+          </div>
109
+        </div>
162 110
       </div>
163 111
       <div v-if="isDecline || item.statusCode === 'E3'" class="form-group row">
164 112
         <div class="col-md-12">
@@ -203,32 +151,33 @@
203 151
 </template>
204 152
 
205 153
 <script>
206
-import { mapState, mapActions } from 'vuex';
207
-import Log from '../../assets/Log';
154
+/* eslint-disable */
155
+import { mapState, mapActions } from "vuex";
156
+import Log from "../../assets/Log";
208 157
 
209 158
 export default {
210
-  name: 'MakeOffer',
159
+  name: "MakeOffer",
211 160
   props: {
212 161
     isMakeOffer: Boolean,
213 162
     isProperty: Boolean,
214 163
     canEdit: Boolean,
215 164
     item: Object,
216 165
     bidId: Number,
217
-    updateItem: Function,
166
+    updateItem: Function
218 167
   },
219 168
   data() {
220 169
     return {
221 170
       isDecline: false,
222 171
       isSaved: false,
223
-      message: '',
172
+      message: "",
224 173
       isInfo: true,
225
-      isLoggedIn: Log.isLoggedIn(),
174
+      isLoggedIn: Log.isLoggedIn()
226 175
     };
227 176
   },
228 177
   methods: {
229
-    ...mapActions('bid', ['getBid', 'saveBid', 'acceptBid', 'declineBid']),
178
+    ...mapActions("bid", ["getBid", "saveBid", "acceptBid", "declineBid"]),
230 179
     SendOffer() {
231
-      alert('Under Development');
180
+      alert("Under Development");
232 181
       // this.getBid(0);
233 182
       // this.bidItem.id = 0;
234 183
       // this.bidItem.amount = this.item.offer;
@@ -248,7 +197,7 @@ export default {
248 197
     Accept() {
249 198
       this.acceptBid(this.item.id);
250 199
       this.isSaved = true;
251
-      this.message = 'Offer Accepted.';
200
+      this.message = "Offer Accepted.";
252 201
       this.isInfo = true;
253 202
     },
254 203
     Decline() {
@@ -259,23 +208,25 @@ export default {
259 208
 
260 209
       const decline = {
261 210
         id: this.item.id,
262
-        comment: this.item.declineReason,
211
+        comment: this.item.declineReason
263 212
       };
264 213
 
265 214
       this.declineBid(decline);
266 215
       this.isSaved = true;
267
-      this.message = 'Offer Declined.';
216
+      this.message = "Offer Declined.";
268 217
       this.isInfo = false;
269
-    },
218
+    }
270 219
   },
271 220
   computed: {
272
-    ...mapState('bid', ['bidIt,em']),
221
+    ...mapState("bid", ["bidIt,em"])
273 222
   },
274 223
   watch: {
275 224
     item() {
276 225
       this.isSaved = false;
277
-      this.canEdit = this.item.statusCode === 'E1';
278
-    },
279
-  },
226
+      this.canEdit = this.item.statusCode === "E1";
227
+    }
228
+  }
280 229
 };
281 230
 </script>
231
+
232
+<style lang="scss" scoped></style>

+ 16
- 17
src/components/processFlow/offers.vue View File

@@ -1,11 +1,10 @@
1 1
 <template>
2
-  <div>
2
+  <main id="main" style="margin-top:-20px; padding-bottom:50px">
3 3
     <div class="container">
4
-      <br />
5 4
       <div class="row">
6 5
         <div class="col-md-12 col-lg-8">
7
-          <div class="title-box-d">
8
-            <h1 class="title-d" style="text-align:left; font-size: 250%">Bid Offers</h1>
6
+          <div class="section-header">
7
+            <h2>Bid Offers</h2>
9 8
           </div>
10 9
         </div>
11 10
       </div>
@@ -42,39 +41,39 @@
42 41
         </div>
43 42
       </div>
44 43
     </div>
45
-  </div>
44
+  </main>
46 45
 </template>
47 46
 
48 47
 <script>
49
-import { mapState, mapActions } from 'vuex';
50
-import makeOffer from './makeOffer.vue';
51
-import listView from '../shared/listView.vue';
48
+import { mapState, mapActions } from "vuex";
49
+import makeOffer from "./makeOffer.vue";
50
+import listView from "../shared/listView.vue";
52 51
 
53 52
 export default {
54
-  name: 'offers',
53
+  name: "offers",
55 54
   components: { makeOffer, listView },
56 55
   data() {
57 56
     return {
58 57
       item: {},
59
-      columns: ['date', 'type', 'shortDescription', 'status', 'price', 'offer', 'madeBy'],
60
-      formats: ['date', 'text', 'text', 'text', 'money', 'money', 'text'],
61
-      columnHeaders: ['', '', 'description', '', '', 'offerPrice', 'offerBy'],
58
+      columns: ["date", "type", "shortDescription", "status", "price", "offer", "madeBy"],
59
+      formats: ["date", "text", "text", "text", "money", "money", "text"],
60
+      columnHeaders: ["", "", "description", "", "", "offerPrice", "offerBy"]
62 61
     };
63 62
   },
64 63
   methods: {
65
-    ...mapActions('bid', ['getBids']),
64
+    ...mapActions("bid", ["getBids"]),
66 65
     Edit(item) {
67 66
       this.item = item;
68 67
 
69 68
       const element = this.$refs.MyModalForm;
70
-      $(element).modal('show');
71
-    },
69
+      $(element).modal("show");
70
+    }
72 71
   },
73 72
   computed: {
74
-    ...mapState('bid', ['bidItems']),
73
+    ...mapState("bid", ["bidItems"])
75 74
   },
76 75
   mounted() {
77 76
     this.getBids();
78
-  },
77
+  }
79 78
 };
80 79
 </script>

+ 158
- 0
src/components/property/commercial/commercialCarouselSection.vue View File

@@ -0,0 +1,158 @@
1
+<template>
2
+  <section id="intro">
3
+    <div class="container">
4
+      <div class="row">
5
+        <div align="left" class="col-sm-12 col-md-8">
6
+          <div class="intro-content">
7
+            <h2>Find an Office</h2>
8
+
9
+            <ul class="nav nav-pills mb-3" id="pills-tab" role="tablist">
10
+              <li class="nav-item">
11
+                <a
12
+                  class="nav-link btn-white-border"
13
+                  id="buy-tab"
14
+                  data-toggle="pill"
15
+                  href="#buy"
16
+                  role="tab"
17
+                  aria-controls="buy"
18
+                  aria-selected="true"
19
+                  @click="SetSalesType('Sale')"
20
+                  >Buy office space</a
21
+                >
22
+              </li>
23
+              <li class="nav-item">
24
+                <a
25
+                  class="nav-link btn-white-border"
26
+                  id="rent-tab"
27
+                  data-toggle="pill"
28
+                  href="#rent"
29
+                  role="tab"
30
+                  aria-controls="rent"
31
+                  aria-selected="false"
32
+                  @click="SetSalesType('Rent')"
33
+                  >Rent an office</a
34
+                >
35
+              </li>
36
+            </ul>
37
+            <div class="tab-content" id="pills-tabContent">
38
+              <div
39
+                class="tab-pane fade show active"
40
+                id="start"
41
+                role="tabpanel"
42
+                aria-labelledby="start-tab"
43
+              >
44
+                <p></p>
45
+              </div>
46
+
47
+              <div class="tab-pane fade show" id="buy" role="tabpanel" aria-labelledby="buy-tab">
48
+                <h4>PROPERTIES FOR SALE</h4>
49
+                <div class="row">
50
+                  <div class="form-group col-md-12">
51
+                    <autoComplete
52
+                      align="left"
53
+                      class="col-md-11 offset-1"
54
+                      :items="suburbList"
55
+                      @selection="SelectedFilter"
56
+                      style="width:100%; margin-left:-15px"
57
+                    />
58
+                  </div>
59
+                </div>
60
+                <a v-on:click="SearchClick" class="btn-solid-blue"
61
+                  ><i class="fa fa-search"></i> SEARCH</a
62
+                >
63
+              </div>
64
+
65
+              <div class="tab-pane fade" id="rent" role="tabpanel" aria-labelledby="rent-tab">
66
+                <h4>RENTAL PROPERTIES</h4>
67
+                <div class="row">
68
+                  <div class="form-group col-md-12">
69
+                    <autoComplete
70
+                      align="left"
71
+                      class="col-md-11 offset-1"
72
+                      :items="suburbList"
73
+                      @selection="SelectedFilter"
74
+                      style="width:100%; margin-left:-15px"
75
+                    />
76
+                  </div>
77
+                </div>
78
+                <a v-on:click="SearchClick" class="btn-solid-blue"
79
+                  ><i class="fa fa-search"></i> FIND</a
80
+                >
81
+              </div>
82
+            </div>
83
+          </div>
84
+        </div>
85
+      </div>
86
+    </div>
87
+
88
+    <carousel
89
+      :nav="false"
90
+      :dots="false"
91
+      :items="1"
92
+      :autoplay="true"
93
+      :loop="true"
94
+      id="intro-carousel"
95
+      style="margin-top:-50px"
96
+      :responsive="{ 0: { items: 1, nav: false }, 600: { items: 1, nav: false } }"
97
+    >
98
+      <img class="item" src="img/intro-carousel/comm-1.jpg" alt="" />
99
+      <img class="item" src="img/intro-carousel/comm-2.jpg" alt="" />
100
+      <img class="item" src="img/intro-carousel/comm-3.jpg" alt="" />
101
+      <img class="item" src="img/intro-carousel/comm-4.jpg" alt="" />
102
+      <img class="item" src="img/intro-carousel/comm-5.jpg" alt="" />
103
+      <img class="item" src="img/intro-carousel/comm-6.jpg" alt="" />
104
+    </carousel>
105
+
106
+    <div id="intro-carousel" class="owl-carousel"></div>
107
+  </section>
108
+</template>
109
+
110
+<script>
111
+/* eslint-disable */
112
+import { mapState, mapActions } from "vuex";
113
+import autoComplete from "../../shared/autoComplete";
114
+import carousel from "vue-owl-carousel";
115
+import searchResult from "./commercialSearchResults";
116
+export default {
117
+  components: {
118
+    carousel,
119
+    autoComplete,
120
+    searchResult
121
+  },
122
+  data() {
123
+    return {
124
+      propertyUsageType: "Commercial",
125
+      salesType: "Sale",
126
+      searchText: "",
127
+      clicked: false
128
+    };
129
+  },
130
+  computed: {
131
+    ...mapState("propertySearch", ["suburbs", "suburbList", "propertySearch"])
132
+  },
133
+  methods: {
134
+    ...mapActions("propertySearch", ["getSuburbs", "applyFilter"]),
135
+    SetSalesType(value) {
136
+      this.salesType = value;
137
+    },
138
+    SearchClick() {
139
+      const item = this.suburbs.find(s => s.display === this.searchText);
140
+      this.propertySearch.province = item.province;
141
+      this.propertySearch.city = item.city;
142
+      this.propertySearch.suburb = item.suburb;
143
+      this.propertySearch.propertyUsageType = this.propertyUsageType;
144
+      this.propertySearch.salesType = this.salesType;
145
+
146
+      this.$router.push("/property/commercial/searchResult");
147
+    },
148
+    SelectedFilter(item) {
149
+      this.searchText = item;
150
+    }
151
+  },
152
+  mounted() {
153
+    this.getSuburbs();
154
+  }
155
+};
156
+</script>
157
+
158
+<style lang="scss" scoped></style>

+ 19
- 0
src/components/property/commercial/commercialContentSection.vue View File

@@ -0,0 +1,19 @@
1
+<template>
2
+  <section id="services">
3
+    <div class="container">
4
+      <div class="section-header">
5
+        <p>
6
+          Uni-Vate Properties seeks out professional, clean spaces for such companies and acts as
7
+          mediator between the landlord/-lady and the tenants. Uni-Vate Properties provides
8
+          value-adding service to clients and conducts business with a high standard and integrity.
9
+        </p>
10
+      </div>
11
+    </div>
12
+  </section>
13
+</template>
14
+
15
+<script>
16
+export default {};
17
+</script>
18
+
19
+<style lang="scss" scoped></style>

+ 34
- 0
src/components/property/commercial/commercialPage.vue View File

@@ -0,0 +1,34 @@
1
+<template>
2
+  <div>
3
+    <carouselSection />
4
+    <main id="main">
5
+      <contentSection data-aos="fade-left" />
6
+      <latestListings
7
+        data-aos="fade-up"
8
+        data-aos-anchor-placement="center-bottom"
9
+        data-aos-delay="150"
10
+      />
11
+    </main>
12
+  </div>
13
+</template>
14
+
15
+<script>
16
+/* eslint-disable */
17
+import carouselSection from "./commercialCarouselSection";
18
+import contentSection from "./commercialContentSection";
19
+import latestListings from "./latestListings";
20
+import AOS from "aos";
21
+import "aos/dist/aos.css";
22
+export default {
23
+  created() {
24
+    AOS.init();
25
+  },
26
+  components: {
27
+    carouselSection,
28
+    contentSection,
29
+    latestListings
30
+  }
31
+};
32
+</script>
33
+
34
+<style lang="scss" scoped></style>

+ 109
- 0
src/components/property/commercial/commercialSearchResults.vue View File

@@ -0,0 +1,109 @@
1
+<template>
2
+  <main id="main" style="margin-top:-20px; padding-bottom:50px">
3
+    <section>
4
+      <div class="container">
5
+        <div class="row pt-5  justify-content-md-center">
6
+          <h3 v-if="propertySearch.salesType === 'Sale'">COMMERCIAL PROPERTIES FOR SALE</h3>
7
+          <h3 v-else-if="propertySearch.salesType === 'Rent'">COMMERCIAL PROPERTIES FOR RENT</h3>
8
+        </div>
9
+        <div v-if="properties.length > 0" class="row justify-content-md-center">
10
+          <div
11
+            class="col-lg-3 col-md-6 col-sm-6"
12
+            v-for="currentProperty in properties"
13
+            :key="currentProperty.id"
14
+          >
15
+            <div>
16
+              <div class="portfolio-item">
17
+                <img style="width:255px; height:255px" :src="currentProperty.displayImage" alt="" />
18
+
19
+                <h4 class="mt-3">{{ currentProperty.suburb }}</h4>
20
+                <p>
21
+                  Opposite Monument Park Spar, Pretoria! Secure Parking. A stand-alone building,
22
+                  situated in the best location. Incredible bargain!
23
+                </p>
24
+                <br />
25
+
26
+                <!-- <a href="commercialproperty-page.php" class="btn-white-border">VIEW</a> -->
27
+                <router-link
28
+                  class="btn-white-border"
29
+                  :to="`/property/commercial/property/${currentProperty.id}`"
30
+                  >VIEW</router-link
31
+                >
32
+              </div>
33
+            </div>
34
+          </div>
35
+        </div>
36
+        <div v-else class="row">
37
+          <div align="center" class="col-md-12">
38
+            <img src="img/no-homes.png" />
39
+            <br />
40
+            <br />
41
+            <p>Sorry no listing where found matching your search</p>
42
+          </div>
43
+        </div>
44
+      </div>
45
+    </section>
46
+  </main>
47
+</template>
48
+
49
+<script>
50
+/* eslint-disable */
51
+import { mapState, mapActions } from "vuex";
52
+import propertyCard from "../propertyCard";
53
+
54
+export default {
55
+  name: "propertysearch",
56
+  components: {
57
+    propertyCard
58
+  },
59
+  data() {
60
+    return {};
61
+  },
62
+  mounted() {
63
+    console.log(this.propertySearch.salesType);
64
+
65
+    if (typeof this.propertySearch.propertyUsageType === "undefined") {
66
+      this.propertySearch.propertyUsageType = "Residential";
67
+    }
68
+    if (this.user) {
69
+      this.propertySearch.userName = this.user.username;
70
+    }
71
+
72
+    this.searchProperties(this.propertySearch);
73
+  },
74
+  methods: {
75
+    ...mapActions("propertySearch", [
76
+      "searchProperties",
77
+      "clearProperties",
78
+      "updateResultsShowing"
79
+    ]),
80
+    SetType(item) {
81
+      this.propertySearch.propertyUsageType = item;
82
+    },
83
+    SearchPage() {
84
+      this.clearProperties();
85
+      this.$router.push("/property/search");
86
+    }
87
+  },
88
+  computed: {
89
+    ...mapState("propertySearch", ["properties", "propertySearch", "resultsShowing"]),
90
+    ...mapState("authentication", ["user"]),
91
+    ParamsChanged() {
92
+      console.log(JSON.stringify(this.propertySearch));
93
+      if (typeof this.propertySearch.propertyUsageType === "undefined") {
94
+        // eslint-disable-next-line vue/no-side-effects-in-computed-properties
95
+        this.propertySearch.propertyUsageType = "Residential";
96
+      }
97
+      this.searchProperties(this.propertySearch);
98
+      return null;
99
+    }
100
+  },
101
+  watch: {
102
+    ParamsChanged() {
103
+      return null;
104
+    }
105
+  }
106
+};
107
+</script>
108
+
109
+<style lang="scss" scoped></style>

+ 49
- 0
src/components/property/commercial/latestListings.vue View File

@@ -0,0 +1,49 @@
1
+<template>
2
+  <main id="main">
3
+    <section id="portfolio">
4
+      <div class="container">
5
+        <div class="row">
6
+          <div class="col-lg-12">
7
+            <h2>Latest Listings</h2>
8
+          </div>
9
+        </div>
10
+      </div>
11
+      <div class="contianer">
12
+        <div class="row">
13
+          <div class="col">
14
+            <propertyCard
15
+              v-if="properties.length > 0"
16
+              name="propertyholder"
17
+              :properties="properties"
18
+              :showSort="false"
19
+            />
20
+          </div>
21
+        </div>
22
+      </div>
23
+    </section>
24
+  </main>
25
+</template>
26
+
27
+<script>
28
+/* eslint-disable */
29
+import { mapState, mapActions } from "vuex";
30
+import propertyCard from "../propertyCard";
31
+export default {
32
+  components: {
33
+    propertyCard
34
+  },
35
+  methods: {
36
+    ...mapActions("propertySearch", ["searchProperties"])
37
+  },
38
+  mounted() {
39
+    this.propertySearch.propertyUsageType = "Commercial";
40
+
41
+    this.searchProperties(this.propertySearch);
42
+  },
43
+  computed: {
44
+    ...mapState("propertySearch", ["properties", "propertySearch"])
45
+  }
46
+};
47
+</script>
48
+
49
+<style lang="scss" scoped></style>

+ 46
- 0
src/components/property/commercial/singleView/carouselSection.vue View File

@@ -0,0 +1,46 @@
1
+<template>
2
+  <section id="intro">
3
+    <div>
4
+      <carousel
5
+        :nav="false"
6
+        :dots="false"
7
+        :items="1"
8
+        :autoplay="true"
9
+        :loop="true"
10
+        :autoHeight="true"
11
+        id="intro-carousel"
12
+        style="margin-top:-50px;"
13
+        :responsive="{ 0: { items: 1, nav: false }, 600: { items: 1, nav: false } }"
14
+      >
15
+        <img
16
+          class="item"
17
+          style="object-fit:cover"
18
+          v-for="(image, i) in propertyImages"
19
+          :src="image"
20
+          :key="i"
21
+        />
22
+      </carousel>
23
+    </div>
24
+  </section>
25
+</template>
26
+
27
+<script>
28
+/* eslint-disable */
29
+
30
+import carousel from "vue-owl-carousel";
31
+export default {
32
+  components: {
33
+    carousel
34
+  },
35
+  data() {
36
+    return {
37
+      images: []
38
+    };
39
+  },
40
+  props: {
41
+    propertyImages: {}
42
+  }
43
+};
44
+</script>
45
+
46
+<style lang="scss" scoped></style>

+ 146
- 0
src/components/property/commercial/singleView/contentSection.vue View File

@@ -0,0 +1,146 @@
1
+<template>
2
+  <section>
3
+    <div class="container">
4
+      <div class="row" id="resort-profile">
5
+        <div class="col-md-4">
6
+          <div class="resPortfolioSection">
7
+            <div v-for="(image, i) in propertyImages" @click="index = i" :key="i">
8
+              <div v-if="i < 3">
9
+                <img
10
+                  v-if="i === 0"
11
+                  style="width:100%; height:201px;object-fit: cover"
12
+                  :src="image"
13
+                />
14
+                <div v-else-if="i !== 0">
15
+                  <img
16
+                    v-if="i % 2 === 0"
17
+                    style="width:50%; height:140px; float:right;"
18
+                    :src="image"
19
+                  />
20
+                  <img v-else style="width:50%; height:140px; float:left" :src="image" />
21
+                </div>
22
+              </div>
23
+            </div>
24
+
25
+            <gallery :images="propertyImages" :index="index" @close="index = null"></gallery>
26
+          </div>
27
+
28
+          <div class="panel-left p-5" style="margin-top:140px; margin-bottom:50px">
29
+            <h2>Property Detial</h2>
30
+            <p>{{ property.addressLine1 }}</p>
31
+            <p>Town, Suburb</p>
32
+            <p>{{ property.shortDescription }}</p>
33
+            <p>{{ property.price }}</p>
34
+            <div class="btn-white-border"><i class="fa fa-search"></i>BOOK A VIEWING</div>
35
+          </div>
36
+        </div>
37
+        <div class="col-md-8 p-5 resort-profile">
38
+          <h2>{{ property.propertyName }} / {{ property.addressLine1 }}</h2>
39
+          <div>
40
+            <table class="table table-striped">
41
+              <thead>
42
+                <tr>
43
+                  <th scope="col">Reference</th>
44
+                  <th scope="col">Size</th>
45
+                  <th scope="col">Location</th>
46
+                  <th scope="col">Kitchen</th>
47
+                  <th scope="col">Extras</th>
48
+                  <th scope="col"></th>
49
+                </tr>
50
+              </thead>
51
+              <tbody>
52
+                <tr>
53
+                  <td>#123456</td>
54
+                  <td>#m2</td>
55
+                  <td>Second Floor</td>
56
+                  <td>yes</td>
57
+                  <td>open plan</td>
58
+                  <td><a href="#" class="btn-solid-blue">BOOK A VIEWING</a></td>
59
+                </tr>
60
+                <tr>
61
+                  <td>#123456</td>
62
+                  <td>#m2</td>
63
+                  <td>Top Floor</td>
64
+                  <td>yes</td>
65
+                  <td>open plan</td>
66
+                  <td><a href="#" class="btn-solid-blue">BOOK A VIEWING</a></td>
67
+                </tr>
68
+              </tbody>
69
+            </table>
70
+          </div>
71
+          <p></p>
72
+
73
+          <div class="d-flex mt-3">
74
+            <iframe
75
+              width="100%"
76
+              height="200"
77
+              id="gmap_canvas"
78
+              src="https://maps.google.com/maps?q=ngwenya%20lodge&t=&z=13&ie=UTF8&iwloc=&output=embed"
79
+              frameborder="0"
80
+              scrolling="no"
81
+              marginheight="0"
82
+              marginwidth="0"
83
+            ></iframe>
84
+          </div>
85
+        </div>
86
+      </div>
87
+    </div>
88
+  </section>
89
+</template>
90
+
91
+<script>
92
+/* eslint-disable */
93
+import gallery from "../../../shared/gallerySlideShow";
94
+export default {
95
+  components: {
96
+    gallery
97
+  },
98
+  props: {
99
+    property: {},
100
+    propertyImages: {}
101
+  },
102
+  data() {
103
+    return {
104
+      index: null,
105
+      date: new Date()
106
+    };
107
+  }
108
+};
109
+</script>
110
+
111
+<style lang="scss" scoped>
112
+/* Extra small devices (phones, 600px and down) */
113
+@media only screen and (max-width: 575px) {
114
+  .resPortfolioSection {
115
+    margin-bottom: 100px;
116
+  }
117
+}
118
+
119
+/* Small devices (portrait tablets and large phones, 600px and up) */
120
+@media only screen and (min-width: 576px) {
121
+  .resPortfolioSection {
122
+    margin-bottom: 140px;
123
+  }
124
+}
125
+
126
+/* Medium devices (landscape tablets, 768px and up) */
127
+@media only screen and (min-width: 768px) {
128
+  .resPortfolioSection {
129
+    margin-bottom: 50px;
130
+  }
131
+}
132
+
133
+/* Large devices (laptops/desktops, 992px and up) */
134
+@media only screen and (min-width: 992px) {
135
+  .resPortfolioSection {
136
+    margin-bottom: 60px;
137
+  }
138
+}
139
+
140
+/* Extra large devices (large laptops and desktops, 1200px and up) */
141
+@media only screen and (min-width: 1200px) {
142
+  .resPortfolioSection {
143
+    margin-bottom: 80px;
144
+  }
145
+}
146
+</style>

+ 65
- 0
src/components/property/commercial/singleView/singleCommercialPage.vue View File

@@ -0,0 +1,65 @@
1
+<template>
2
+  <div>
3
+    <carouselSection v-if="propertyImages.length > 0" :propertyImages="propertyImages" />
4
+    <main id="main" style="margin-top:-20px">
5
+      <contentSection
6
+        v-if="propertyImages.length > 0"
7
+        :property="property"
8
+        :propertyImages="propertyImages"
9
+      />
10
+    </main>
11
+  </div>
12
+  <!-- #intro -->
13
+</template>
14
+
15
+<script>
16
+/* eslint-disable */
17
+
18
+import { mapState, mapActions } from "vuex";
19
+import makeOffer from "../../../processFlow/makeOffer";
20
+import carouselSection from "./carouselSection";
21
+import contentSection from "./contentSection";
22
+
23
+export default {
24
+  name: "property",
25
+  components: {
26
+    makeOffer,
27
+    carouselSection,
28
+    contentSection
29
+  },
30
+  data() {
31
+    return {
32
+      index: null,
33
+      date: new Date()
34
+    };
35
+  },
36
+  async mounted() {
37
+    await this.getProperty(this.$route.params.id);
38
+    await this.getPropertyImages(this.$route.params.id);
39
+    this.mayEditProperty(this.$route.params.id);
40
+  },
41
+  computed: {
42
+    ...mapState("property", ["property", "propertyImages"]),
43
+    ...mapState("propertyEdit", ["mayEdit"])
44
+  },
45
+  methods: {
46
+    ...mapActions("property", ["getProperty", "getPropertyImages", "clearPropertyImages"]),
47
+    ...mapActions("propertyEdit", ["mayEditProperty"]),
48
+    formatPrice(value) {
49
+      const val = (value / 1).toFixed(2);
50
+      return val.toString().replace(/\B(?=(\d{3})+(?!\d))/g, " ");
51
+    },
52
+    formatAddress(value) {
53
+      if (value !== "") {
54
+        return `${value}<br/>`;
55
+      }
56
+      return "";
57
+    }
58
+  },
59
+  beforeDestroy() {
60
+    this.clearPropertyImages();
61
+  }
62
+};
63
+</script>
64
+
65
+<style lang="scss" scoped></style>

+ 46
- 129
src/components/property/propertyCard.vue View File

@@ -1,144 +1,59 @@
1 1
 <template>
2
-  <!-- eslint-disable max-len -->
3
-  <div>
4
-    <div class="form-group row" v-if="showSort">
5
-      <button
6
-        type="button"
7
-        class="btn btn-link font-weight-bold color-b"
8
-        style="width: 150px; height:40px;"
9
-        @click="sortNewest()"
10
-      >Newest</button>
11
-      <button
12
-        type="button"
13
-        class="btn btn-link font-weight-bold color-b"
14
-        style="width: 150px; height:40px;"
15
-        @click="sortLowPrice()"
16
-      >Lowest Price</button>
17
-      <button
18
-        type="button"
19
-        class="btn btn-link font-weight-bold color-b"
20
-        style="width: 150px; height:40px;"
21
-        @click="sortHighPrice()"
22
-      >Highest Price</button>
23
-      <button
24
-        v-if="salesType === 'Rent'"
25
-        type="button"
26
-        class="btn btn-link font-weight-bold color-b"
27
-        style="width: 150px; height:40px;"
28
-        @click="sortDateAvailable()"
29
-      >Date Available</button>
30
-      <hr />
31
-    </div>
32
-    <div class="form-group row">
33
-      <div class="col-md-4" v-for="currentProperty in properties" :key="currentProperty.id">
34
-        <router-link :to="`/property/property/${currentProperty.id}`">
35
-          <div class="card-box-a card-shadow">
36
-            <div class="img-box-a">
37
-              <img
38
-                :src="currentProperty.displayImage"
39
-                alt
40
-                class="img-a img-fluid"
41
-                style="height:466px; width:350px; object-fit: cover;"
42
-              />
43
-              <p
44
-                v-if="!currentProperty.isSale"
45
-                :class="[currentProperty.hasPendingOffer ? 'top-left pendingOffer' : 'top-left normalText']"
46
-              >
47
-                <strong>{{ currentProperty.available }}</strong>
48
-              </p>
49
-              <p
50
-                v-if="currentProperty.isSale  && currentProperty.hasPendingOffer"
51
-                class="top-left pendingOffer"
52
-              >
53
-                <strong>{{ currentProperty.available }}</strong>
54
-              </p>
55
-            </div>
56
-            <div class="card-overlay">
57
-              <div class="card-overlay-a-content">
58
-                <div class="card-header-a">
59
-                  <h4 class="card-title-a">
60
-                    <router-link
61
-                      :to="`/property/property/${currentProperty.id}`"
62
-                      class="link-a"
63
-                    >{{ currentProperty.shortDescription }}</router-link>
64
-                    <router-link
65
-                      v-if="!currentProperty.isSale"
66
-                      :to="`/property/property/${currentProperty.id}`"
67
-                      class="link-a"
68
-                    ></router-link>
69
-                  </h4>
70
-                  <h4 class="card-title-c">
71
-                    <router-link :to="`/property/property/${currentProperty.id}`" class="link-a">
72
-                      {{ currentProperty.province }}
73
-                      <br />
74
-                      {{ currentProperty.city }}
75
-                      <br />
76
-                      {{ currentProperty.suburb }}
77
-                    </router-link>
78
-                  </h4>
79
-                </div>
80
-                <div class="card-body-a">
81
-                  <div class="price-box d-flex">
82
-                    <span
83
-                      v-if="currentProperty.isSale"
84
-                      class="price-a"
85
-                    >sale | {{ currentProperty.displayPrice }}</span>
86
-                    <span
87
-                      v-if="!currentProperty.isSale"
88
-                      class="price-a"
89
-                    >rent | {{ currentProperty.displayPrice }}</span>
90
-                  </div>
91
-                  <router-link :to="`/property/property/${currentProperty.id}`" class="link-a">
92
-                    Click here to view
93
-                    <span class="ion-ios-arrow-forward"></span>
94
-                  </router-link>
2
+  <section id="portfolio" class="wow fadeInUp">
3
+    <div class="container-fluid">
4
+      <div class="row">
5
+        <div
6
+          class="col-lg-3 col-md-6 col-sm-6"
7
+          v-for="currentProperty in properties"
8
+          :key="currentProperty.id"
9
+        >
10
+          <div v-if="currentProperty.propertyUsageType === 'Residential'">
11
+            <router-link :to="`/property/residential/property/${currentProperty.id}`">
12
+              <div class="portfolio-item p-4 wow fadeInUp justify-content-md-center">
13
+                <div class="feature-top pt-3 mb-2">
14
+                  <h3>{{ currentProperty.displayPrice }}</h3>
15
+                  <img :src="currentProperty.displayImage" alt="" />
95 16
                 </div>
96
-                <div class="card-footer-a" v-if="currentProperty.showFooter">
97
-                  <ul class="card-info d-flex justify-content-around">
98
-                    <li v-if="currentProperty.area !== null">
99
-                      <h4 class="card-info-title">
100
-                        <img src="../../../public/img/icons/area.png" height="16px" width="16px" />
101
-                        <!-- <i class="fa fa-ruler-combined"></i> -->
102
-                      </h4>
103
-                      <span v-html="currentProperty.area"></span>
104
-                    </li>
105
-                    <li v-if="currentProperty.beds !== null">
106
-                      <h4 class="card-info-title">
107
-                        <i class="fa fa-bed"></i>
108
-                      </h4>
109
-                      <span>{{ currentProperty.beds }}</span>
110
-                    </li>
111
-                    <li v-if="currentProperty.baths !== null">
112
-                      <h4 class="card-info-title">
113
-                        <i class="fa fa-bath"></i>
114
-                      </h4>
115
-                      <span>{{ currentProperty.baths }}</span>
116
-                    </li>
117
-                    <li v-if="currentProperty.garages !== null">
118
-                      <h4 class="card-info-title">
119
-                        <!-- <i class="fa fa-warehouse"></i> -->
120
-                        <img src="../../../public/img/icons/garage.png" height="16px" width="16px" />
121
-                      </h4>
122
-                      <span>{{ currentProperty.garages }}</span>
123
-                    </li>
124
-                  </ul>
17
+                <h1>{{ currentProperty.suburb }}</h1>
18
+                <p>
19
+                  <strong>Week</strong> #000 &nbsp;|&nbsp; <strong>Season</strong> Peak <br />
20
+                  <strong>Levy</strong> #R0000
21
+                </p>
22
+                <a href="#"> </a>
23
+              </div>
24
+            </router-link>
25
+          </div>
26
+          <div v-else-if="currentProperty.propertyUsageType === 'Commercial'">
27
+            <router-link :to="`/property/commercial/property/${currentProperty.id}`">
28
+              <div class="portfolio-item p-4 wow fadeInUp justify-content-md-center">
29
+                <div class="feature-top pt-3 mb-2">
30
+                  <h3>{{ currentProperty.displayPrice }}</h3>
31
+                  <img :src="currentProperty.displayImage" alt="" />
125 32
                 </div>
33
+                <h1>{{ currentProperty.suburb }}</h1>
34
+                <p>
35
+                  <strong>Week</strong> #000 &nbsp;|&nbsp; <strong>Season</strong> Peak <br />
36
+                  <strong>Levy</strong> #R0000
37
+                </p>
38
+                <a href="#"> </a>
126 39
               </div>
127
-            </div>
40
+            </router-link>
128 41
           </div>
129
-        </router-link>
130
-        <br />
42
+        </div>
131 43
       </div>
132 44
     </div>
133
-  </div>
45
+  </section>
46
+  <!-- #listings -->
134 47
 </template>
135 48
 
136 49
 <script>
50
+/* eslint-disable */
51
+
137 52
 export default {
138 53
   props: {
139 54
     properties: { type: Array, default: () => [] },
140 55
     showSort: { type: Boolean, default: true },
141
-    salesType: { type: String, default: 'Rent' },
56
+    salesType: { type: String, default: "Rent" }
142 57
   },
143 58
   methods: {
144 59
     sortHighPrice() {
@@ -176,7 +91,9 @@ export default {
176 91
       }
177 92
 
178 93
       return this.properties.sort(compare);
179
-    },
180
-  },
94
+    }
95
+  }
181 96
 };
182 97
 </script>
98
+
99
+<style lang="scss" scoped></style>

+ 40
- 64
src/components/property/propertySearchResults.vue View File

@@ -1,45 +1,23 @@
1 1
 <template>
2 2
   <!-- eslint-disable max-len -->
3
-  <div class="container">
4
-    <br />
5
-    <div class="container col-md-12">
6
-      <div class="col-sm-12">
7
-        <div class="about-img-box">
8
-          <img
9
-            v-if="propertySearch.propertyUsageType === 'Residential'"
10
-            src="img/Pretoria-South-Africa.jpg"
11
-            alt="Property Listing"
12
-            class="img-fluid"
13
-            style="width:800px;height:400px; border-radius:10px"
14
-          />
15
-          <img
16
-            v-else
17
-            src="img/Johannesburg-south-africa-1.jpg"
18
-            alt="Property Listing"
19
-            class="img-fluid"
20
-            style="width:800px;height:400px; border-radius:10px"
21
-          />
22
-        </div>
23
-        <div class="sinse-box" style="opacity:0.7; border: white solid 3px; border-radius: 15px">
24
-          <h3 class="sinse-title">Property Listing</h3>
3
+  <section id="portfolio">
4
+    <div class="container-fluid p-0">
5
+      <div class="row ml-4">
6
+        <div class="col">
7
+          <h2>Search Results</h2>
25 8
         </div>
26 9
       </div>
27
-      <br />
28
-      <div>
29
-        <propertyCard
30
-          v-if="properties.length > 0"
31
-          name="propertyholder"
32
-          :properties="properties"
33
-          :salesType="propertySearch.salesType"
34
-        />
35
-        <!-- <div v-if="loading">
36
-          <img
37
-            class="img-fluid"
38
-            src="/img/kloader.gif"
39
-            alt="UVProp logo"
40
-            style="width:128px;height:128px;"
41
-          />
42
-        </div>-->
10
+      <div class="contianer-fluid">
11
+        <div class="row">
12
+          <div class="col">
13
+            <propertyCard
14
+              v-if="properties.length > 0"
15
+              name="propertyholder"
16
+              :properties="properties"
17
+              :salesType="propertySearch.salesType"
18
+            />
19
+          </div>
20
+        </div>
43 21
         <div v-if="properties.length === 0">
44 22
           <img src="../../../public/img/no-homes.png" />
45 23
           <br />
@@ -47,30 +25,26 @@
47 25
           <p>Sorry no listing where found matching your search</p>
48 26
         </div>
49 27
       </div>
50
-      <br />
51
-      <div class="row">
52
-        <div class="col-md-2 offset-5">
53
-          <button type="button" @click="SearchPage" class="btn btn-b-n">Back to Search</button>
54
-        </div>
55
-      </div>
56 28
     </div>
57
-  </div>
29
+  </section>
58 30
 </template>
31
+
59 32
 <script>
60
-import { mapState, mapActions } from 'vuex';
61
-import propertyCard from './propertyCard.vue';
33
+/* eslint-disable */
34
+import { mapState, mapActions } from "vuex";
35
+import propertyCard from "./propertyCard.vue";
62 36
 
63 37
 export default {
64
-  name: 'propertysearch',
38
+  name: "propertysearch",
65 39
   components: {
66
-    propertyCard,
40
+    propertyCard
67 41
   },
68 42
   data() {
69 43
     return {};
70 44
   },
71 45
   mounted() {
72
-    if (typeof this.propertySearch.propertyUsageType === 'undefined') {
73
-      this.propertySearch.propertyUsageType = 'Residential';
46
+    if (typeof this.propertySearch.propertyUsageType === "undefined") {
47
+      this.propertySearch.propertyUsageType = "Residential";
74 48
     }
75 49
     if (this.user) {
76 50
       this.propertySearch.userName = this.user.username;
@@ -79,36 +53,38 @@ export default {
79 53
     this.searchProperties(this.propertySearch);
80 54
   },
81 55
   methods: {
82
-    ...mapActions('propertySearch', [
83
-      'searchProperties',
84
-      'clearProperties',
85
-      'updateResultsShowing',
56
+    ...mapActions("propertySearch", [
57
+      "searchProperties",
58
+      "clearProperties",
59
+      "updateResultsShowing"
86 60
     ]),
87 61
     SetType(item) {
88 62
       this.propertySearch.propertyUsageType = item;
89 63
     },
90 64
     SearchPage() {
91 65
       this.clearProperties();
92
-      this.$router.push('/property/search');
93
-    },
66
+      this.$router.push("/property/search");
67
+    }
94 68
   },
95 69
   computed: {
96
-    ...mapState('propertySearch', ['properties', 'propertySearch', 'resultsShowing']),
97
-    ...mapState('authentication', ['user']),
70
+    ...mapState("propertySearch", ["properties", "propertySearch", "resultsShowing"]),
71
+    ...mapState("authentication", ["user"]),
98 72
     ParamsChanged() {
99 73
       console.log(JSON.stringify(this.propertySearch));
100
-      if (typeof this.propertySearch.propertyUsageType === 'undefined') {
74
+      if (typeof this.propertySearch.propertyUsageType === "undefined") {
101 75
         // eslint-disable-next-line vue/no-side-effects-in-computed-properties
102
-        this.propertySearch.propertyUsageType = 'Residential';
76
+        this.propertySearch.propertyUsageType = "Residential";
103 77
       }
104 78
       this.searchProperties(this.propertySearch);
105 79
       return null;
106
-    },
80
+    }
107 81
   },
108 82
   watch: {
109 83
     ParamsChanged() {
110 84
       return null;
111
-    },
112
-  },
85
+    }
86
+  }
113 87
 };
114 88
 </script>
89
+
90
+<style lang="scss" scoped></style>

+ 49
- 0
src/components/property/residential/latestListings.vue View File

@@ -0,0 +1,49 @@
1
+<template>
2
+  <main id="main">
3
+    <section id="portfolio">
4
+      <div class="container">
5
+        <div class="row">
6
+          <div class="col-lg-12">
7
+            <h2>Latest Listings</h2>
8
+          </div>
9
+        </div>
10
+      </div>
11
+      <div class="contianer">
12
+        <div class="row">
13
+          <div class="col">
14
+            <propertyCard
15
+              v-if="properties.length > 0"
16
+              name="propertyholder"
17
+              :properties="properties"
18
+              :showSort="false"
19
+            />
20
+          </div>
21
+        </div>
22
+      </div>
23
+    </section>
24
+  </main>
25
+</template>
26
+
27
+<script>
28
+/* eslint-disable */
29
+import { mapState, mapActions } from "vuex";
30
+import propertyCard from "../propertyCard";
31
+export default {
32
+  components: {
33
+    propertyCard
34
+  },
35
+  methods: {
36
+    ...mapActions("propertySearch", ["searchProperties"])
37
+  },
38
+  mounted() {
39
+    this.propertySearch.propertyUsageType = "Residential";
40
+
41
+    this.searchProperties(this.propertySearch);
42
+  },
43
+  computed: {
44
+    ...mapState("propertySearch", ["properties", "propertySearch"])
45
+  }
46
+};
47
+</script>
48
+
49
+<style lang="scss" scoped></style>

+ 310
- 0
src/components/property/residential/residentialCarouselSection.vue View File

@@ -0,0 +1,310 @@
1
+<template>
2
+  <div>
3
+    <section id="intro">
4
+      <div class="container">
5
+        <div class="row">
6
+          <div align="left" class="col-sm-12 col-md-8">
7
+            <div class="intro-content">
8
+              <h2>Find your Home</h2>
9
+
10
+              <ul class="nav nav-pills mb-3" id="pills-tab" role="tablist">
11
+                <li class="nav-item">
12
+                  <a
13
+                    class="nav-link btn-white-border"
14
+                    id="buy-tab"
15
+                    data-toggle="pill"
16
+                    href="#buy"
17
+                    role="tab"
18
+                    aria-controls="buy"
19
+                    aria-selected="true"
20
+                    @click="SetSalesType('Sale')"
21
+                    >Buy</a
22
+                  >
23
+                </li>
24
+                <li class="nav-item">
25
+                  <a
26
+                    class="nav-link btn-white-border"
27
+                    id="rent-tab"
28
+                    data-toggle="pill"
29
+                    href="#rent"
30
+                    role="tab"
31
+                    aria-controls="rent"
32
+                    aria-selected="false"
33
+                    @click="SetSalesType('Rent')"
34
+                    >Rent</a
35
+                  >
36
+                </li>
37
+              </ul>
38
+              <div class="tab-content" id="pills-tabContent">
39
+                <div
40
+                  class="tab-pane fade show active"
41
+                  id="start"
42
+                  role="tabpanel"
43
+                  aria-labelledby="start-tab"
44
+                >
45
+                  <p></p>
46
+                </div>
47
+
48
+                <div class="tab-pane fade show" id="buy" role="tabpanel" aria-labelledby="buy-tab">
49
+                  <h4>PROPERTIES FOR SALE</h4>
50
+                  <div class="row">
51
+                    <div align="left" class="form-group col-md-12">
52
+                      <autoComplete
53
+                        align="left"
54
+                        class="col-md-11 offset-1"
55
+                        :items="suburbList"
56
+                        @selection="SelectedFilter"
57
+                        style="width:100%; margin-left:-15px"
58
+                      />
59
+                    </div>
60
+                    <!-- <div class="form-group col-md-6">
61
+                    <input
62
+                      data-toggle="dropdown"
63
+                      name="region"
64
+                      class="form-control my-2"
65
+                      id="name"
66
+                      placeholder="Region"
67
+                      aria-haspopup="true"
68
+                      aria-expanded="false"
69
+                    />
70
+                    
71
+                    <input
72
+                      data-toggle="dropdown"
73
+                      name="town"
74
+                      class="form-control my-2"
75
+                      id="name"
76
+                      placeholder="Town"
77
+                      aria-haspopup="true"
78
+                      aria-expanded="false"
79
+                    />
80
+                  </div>
81
+                  <div class="form-group col-md-6">
82
+                    <input
83
+                      data-toggle="dropdown"
84
+                      name="suburb"
85
+                      class="form-control my-2"
86
+                      id="name"
87
+                      placeholder="Suburb"
88
+                      aria-haspopup="true"
89
+                      aria-expanded="false"
90
+                    />
91
+                    <input
92
+                      data-toggle="dropdown"
93
+                      name="type"
94
+                      class="form-control my-2"
95
+                      id="name"
96
+                      placeholder="Property Type"
97
+                      aria-haspopup="true"
98
+                      aria-expanded="false"
99
+                    /> -->
100
+                    <!-- </div> -->
101
+                  </div>
102
+                  <a v-on:click="SearchClick" class="btn-solid-blue"
103
+                    ><i class="fa fa-search"></i> SEARCH</a
104
+                  >
105
+                </div>
106
+
107
+                <div class="tab-pane fade" id="rent" role="tabpanel" aria-labelledby="rent-tab">
108
+                  <h4>RENTAL PROPERTIES</h4>
109
+                  <div class="row">
110
+                    <div align="left" class="form-group col">
111
+                      <autoComplete
112
+                        align="left"
113
+                        class="col-md-11 offset-1"
114
+                        :items="suburbList"
115
+                        @selection="SelectedFilter"
116
+                        style="width:100%; margin-left:-15px"
117
+                      />
118
+                    </div>
119
+                    <!-- <div class="form-group col-md-6">
120
+                    <input
121
+                      data-toggle="dropdown"
122
+                      name="region"
123
+                      class="form-control my-2"
124
+                      id="name"
125
+                      placeholder="Region"
126
+                      aria-haspopup="true"
127
+                      aria-expanded="false"
128
+                    />
129
+                    <input
130
+                      data-toggle="dropdown"
131
+                      name="town"
132
+                      class="form-control my-2"
133
+                      id="name"
134
+                      placeholder="Town"
135
+                      aria-haspopup="true"
136
+                      aria-expanded="false"
137
+                    />
138
+                  </div>
139
+                  <div class="form-group col-md-6">
140
+                    <input
141
+                      data-toggle="dropdown"
142
+                      name="suburb"
143
+                      class="form-control my-2"
144
+                      id="name"
145
+                      placeholder="Suburb"
146
+                      aria-haspopup="true"
147
+                      aria-expanded="false"
148
+                    />
149
+                    <input
150
+                      data-toggle="dropdown"
151
+                      name="type"
152
+                      class="form-control my-2"
153
+                      id="name"
154
+                      placeholder="Property Type"
155
+                      aria-haspopup="true"
156
+                      aria-expanded="false"
157
+                    />
158
+                  </div> -->
159
+                  </div>
160
+                  <a v-on:click="SearchClick" class="btn-solid-blue"
161
+                    ><i class="fa fa-search"></i> FIND</a
162
+                  >
163
+                </div>
164
+              </div>
165
+            </div>
166
+          </div>
167
+        </div>
168
+      </div>
169
+
170
+      <carousel
171
+        :nav="false"
172
+        :dots="false"
173
+        :items="1"
174
+        :autoplay="true"
175
+        :loop="true"
176
+        id="intro-carousel"
177
+        style="margin-top:-50px"
178
+        :responsive="{ 0: { items: 1, nav: false }, 600: { items: 1, nav: false } }"
179
+      >
180
+        <img class="item" src="img/intro-carousel/residential-1.jpg" alt="" />
181
+        <img class="item" src="img/intro-carousel/residential-2.jpg" alt="" />
182
+        <img class="item" src="img/intro-carousel/residential-3.jpg" alt="" />
183
+        <img class="item" src="img/intro-carousel/residential-4.jpg" alt="" />
184
+        <img class="item" src="img/intro-carousel/residential-5.jpg" alt="" />
185
+        <img class="item" src="img/intro-carousel/residential-6.jpg" alt="" />
186
+      </carousel>
187
+    </section>
188
+    <main id="main" style="margin-top:-20px">
189
+      <div class="container-fluid">
190
+        <div class="row">
191
+          <div
192
+            ref="searchRes"
193
+            :class="{ 'searchRes--clicked': clicked }"
194
+            class="col-sm-12 searchRes"
195
+          >
196
+            <searchResult
197
+              :class="{ 'searchComponent--clicked ': clicked }"
198
+              class="searchComponent"
199
+            />
200
+          </div>
201
+        </div>
202
+      </div>
203
+    </main>
204
+  </div>
205
+</template>
206
+
207
+<script>
208
+/* eslint-disable */
209
+import { mapState, mapActions } from "vuex";
210
+import autoComplete from "../../shared/autoComplete";
211
+import carousel from "vue-owl-carousel";
212
+import searchResult from "../propertySearchResults";
213
+export default {
214
+  components: {
215
+    carousel,
216
+    autoComplete,
217
+    searchResult
218
+  },
219
+  data() {
220
+    return {
221
+      propertyUsageType: "Residential",
222
+      salesType: "Sale",
223
+      searchText: "",
224
+      clicked: false
225
+    };
226
+  },
227
+  computed: {
228
+    ...mapState("propertySearch", ["suburbs", "suburbList", "propertySearch"])
229
+  },
230
+  methods: {
231
+    ...mapActions("propertySearch", ["getSuburbs", "applyFilter"]),
232
+    SetSalesType(value) {
233
+      this.salesType = value;
234
+    },
235
+    SearchClick() {
236
+      const item = this.suburbs.find(s => s.display === this.searchText);
237
+      this.propertySearch.province = item.province;
238
+      this.propertySearch.city = item.city;
239
+      this.propertySearch.suburb = item.suburb;
240
+      this.propertySearch.propertyUsageType = this.propertyUsageType;
241
+      this.propertySearch.salesType = this.salesType;
242
+
243
+      //this.clicked = true;
244
+      this.$router.push("/property/residential/searchResult");
245
+    },
246
+    SelectedFilter(item) {
247
+      this.searchText = item;
248
+    }
249
+  },
250
+  mounted() {
251
+    this.getSuburbs();
252
+  }
253
+};
254
+</script>
255
+
256
+<style lang="scss" scoped>
257
+.searchRes {
258
+  will-change: transform;
259
+  transition: height 500ms;
260
+  height: 0px;
261
+}
262
+
263
+.searchRes--clicked {
264
+  height: 75vh;
265
+}
266
+
267
+@media only screen and (max-width: 575px) {
268
+  .searchRes--clicked {
269
+    height: 100vh;
270
+  }
271
+}
272
+
273
+@media only screen and (min-width: 576px) {
274
+  .searchRes--clicked {
275
+    height: 60vh;
276
+  }
277
+}
278
+
279
+@media only screen and (min-width: 768px) {
280
+  .searchRes--clicked {
281
+    height: 75vh;
282
+  }
283
+}
284
+@media only screen and (min-width: 992px) {
285
+  .searchRes--clicked {
286
+    height: 60vh;
287
+  }
288
+}
289
+
290
+@media only screen and (min-width: 1200px) {
291
+  .searchRes--clicked {
292
+    height: 70vh;
293
+  }
294
+}
295
+
296
+.searchComponent {
297
+  will-change: transform;
298
+  transition: opacity 0.2s ease-in-out;
299
+  transition-delay: 0.5s;
300
+  margin-bottom: 80px;
301
+  position: absolute;
302
+  width: 100%;
303
+  left: 0;
304
+  opacity: 0;
305
+}
306
+
307
+.searchComponent--clicked {
308
+  opacity: 1;
309
+}
310
+</style>

+ 19
- 0
src/components/property/residential/residentialContentSection.vue View File

@@ -0,0 +1,19 @@
1
+<template>
2
+  <section id="services">
3
+    <div class="container">
4
+      <div class="section-header">
5
+        <p>
6
+          Uni-Vate Properties seeks out professional, clean spaces for such companies and acts as
7
+          mediator between the landlord/-lady and the tenants. Uni-Vate Properties provides
8
+          value-adding service to clients and conducts business with a high standard and integrity.
9
+        </p>
10
+      </div>
11
+    </div>
12
+  </section>
13
+</template>
14
+
15
+<script>
16
+export default {};
17
+</script>
18
+
19
+<style lang="scss" scoped></style>

+ 34
- 0
src/components/property/residential/residentialPage.vue View File

@@ -0,0 +1,34 @@
1
+<template>
2
+  <div>
3
+    <carouselSection />
4
+    <main id="main">
5
+      <contentSection data-aos="fade-left" />
6
+      <latestListings
7
+        data-aos="fade-up"
8
+        data-aos-anchor-placement="center-bottom"
9
+        data-aos-delay="150"
10
+      />
11
+    </main>
12
+  </div>
13
+</template>
14
+
15
+<script>
16
+/* eslint-disable */
17
+import carouselSection from "./residentialCarouselSection";
18
+import contentSection from "./residentialContentSection";
19
+import latestListings from "./latestListings";
20
+import AOS from "aos";
21
+import "aos/dist/aos.css";
22
+export default {
23
+  created() {
24
+    AOS.init();
25
+  },
26
+  components: {
27
+    carouselSection,
28
+    contentSection,
29
+    latestListings
30
+  }
31
+};
32
+</script>
33
+
34
+<style lang="scss" scoped></style>

+ 0
- 0
src/components/property/residential/residentialSearchResults.vue View File


Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save