Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <!DOCTYPE html>
- <html lang="" xmlns:th="http://www.thymeleaf.org">
- <head>
- <meta charset="utf-8" />
- <meta http-equiv="x-ua-compatible" content="ie=edge" />
- <title th:text="#{seo.post.title}">SpeedHome</title>
- <meta name="description" th:content="#{seo.post.description}" />
- <meta name="viewport" content="width=device-width, initial-scale=1" />
- <!--
- Icons for different devices you can generate with - http://realfavicongenerator.net
- Place generated files in the dev/static/favicons directory.
- -->
- <link rel="stylesheet" href="/assets/fonts/icomoon/style.css" />
- <link
- rel="stylesheet"
- href="https://use.fontawesome.com/releases/v5.6.3/css/all.css"
- integrity="sha384-UHRtZLI+pbxtHCWp1t77Bi1L4ZtiqrqD80Kn4Z8NTSRyMA2Fd33n5dQ8lWUE00s/"
- crossorigin="anonymous"
- />
- <link
- rel="stylesheet"
- href="https://cdnjs.cloudflare.com/ajax/libs/magnific-popup.js/1.1.0/magnific-popup.min.css"
- />
- <link
- rel="stylesheet"
- href="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.0.0-beta.3/assets/owl.carousel.min.css"
- />
- <link
- rel="stylesheet"
- href="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.0.0-beta.3/assets/owl.theme.default.min.css"
- />
- <link rel="stylesheet" href="/assets/css/wizard/smart_wizard.min.css" />
- <link
- rel="stylesheet"
- href="/assets/css/wizard/smart_wizard_theme_arrows.min.css"
- />
- <link
- rel="stylesheet"
- href="/assets/css/wizard/smart_wizard_theme_circles.min.css"
- />
- <link
- rel="stylesheet"
- href="/assets/css/wizard/smart_wizard_theme_dots.min.css"
- />
- <link rel="stylesheet" href="/assets/css/bundle.css" />
- <link rel="stylesheet" href="/assets/css/pikaday.css" />
- <th:block th:replace="common/links" />
- </head>
- <body>
- <div id="wrapper">
- <div th:replace="common/header :: header"></div>
- <main id="main" class="inner-pages">
- <div class="breadcrumb-wrapper">
- <div class="container">
- <ul class="breadcrumb">
- <li>
- <a
- th:href="${@urlHelper.format(language, '/')}"
- th:text="#{link.home}"
- >Home</a
- >
- </li>
- <li>
- <strong th:text="#{property.create_title}">Create Listing</strong>
- </li>
- </ul>
- </div>
- </div>
- <div class="container create-listing">
- <div id="smartwizard">
- <ul class="progressbar">
- <li>
- <a href="#step-1" aria-disabled="true"
- ><span class="num">1</span>
- <th:block th:text="#{property.info_text}"
- >Property Info</th:block
- >
- </a>
- </li>
- <li>
- <a href="#step-2" aria-disabled="true"
- ><span class="num">2</span>
- <th:block th:text="#{property.upload_photo}"
- >Upload Photo</th:block
- >
- </a>
- </li>
- <li>
- <a href="#step-3" aria-disabled="true"
- ><span class="num">3</span>
- <th:block th:text="#{property.extra_info}"
- >Extra Info</th:block
- >
- </a>
- </li>
- </ul>
- <div>
- <input type="hidden" id="coverPhotoId" value="0">
- <div id="step-1" class="">
- <!-- <h2>Step 1 Content</h2> -->
- <form id="prop-form">
- <div id="form-step-0" role="form" data-toggle="validator">
- <div class="check-wrap">
- <label class="checkbox form-group checkbox-sm">
- <input id="owner" type="checkbox" required checked />
- <span class="checkbox__icon"></span>
- <th:block th:text="#{property.owner_check}"
- >I am the owner of this unit</th:block
- >
- </label>
- </div>
- <div class="form-group input-wrap select-wrap select-wrap-single">
- <label for="type" th:text="#{filter.housing_type}"
- >Housing Type</label
- >
- <div class=" status-housing-type">
- <select
- name="type"
- id="type"
- class="custom-select select-sm housingType"
- th:placeholder="#{property_sqft.high_rise}"
- required
- >
- <option
- id="typeHighrise"
- value="HIGHRISE"
- th:text="#{property_sqft.high_rise}"
- >Highrise</option>
- <option
- id="typeLanded"
- value="LANDED"
- th:text="#{property_sqft.landed}"
- >Landed</option
- >
- <option
- id="typeRoom"
- value="ROOM"
- th:text="#{property_sqft.room}"
- >Room</option
- >
- </select>
- </div>
- </div>
- <div class="row gutter-big">
- <div class="col-xs-12 col-md-6">
- <div class="form-group input-wrap prop-name-wrap">
- <label for="propName" th:text="#{property.name_text}"
- >Property Name</label
- >
- <div class="visual-tab tab-wrapper">
- <input
- id="propName"
- name="propName"
- type="text"
- th:placeholder="#{property.name_text}"
- class="form-control"
- required
- />
- <span class="error" th:text="#{error_message.property_name_required}">Property name must be required</span>
- <span class="error-v2" th:text="#{error_message.property_name_required_cond}">Property must be 4 character long and less than 100.</span>
- </div>
- </div>
- </div>
- <div id="blockFloor" class="col-xs-12 col-md-6">
- <div class="input-wrap form-group">
- <label for="floor" th:text="#{property.floor_level}"
- >Floor level / Storey no.</label
- >
- <div class="status status-foor-level">
- <input
- type="number"
- id="floor"
- class="form-control"
- required
- />
- <span class="error" th:text="#{error_message.floor_required}">Floor level must be required</span>
- <span class="error-v2" th:text="#{error_message.floor_required_cond}">Floor level should be less than 20 character long.</span>
- </div>
- </div>
- </div>
- <div id="blockStorey" class="col-xs-12 col-md-6">
- <div class="input-wrap select-wrap">
- <label for="storeys" th:text="#{property.floor_level}">Floor level / Storey no.</label>
- <div class=" status-storey-no">
- <select
- name="storeys"
- id="storeys"
- class="custom-select select-sm sources"
- placeholder="Single"
- required>
- <option selected value="1">Single</option>
- <option value="2">Double</option>
- <option value="3">More than 2 storeys</option>
- </select>
- </div>
- </div>
- </div>
- <div class="col-xs-12 col-md-6">
- <div class="input-wrap form-group">
- <label for="address" th:text="#{property.address_text}"
- >Address</label
- >
- <div class="status status-property-address">
- <input
- name="address"
- id="address"
- type="search"
- th:placeholder="#{property.address_label_text}"
- class="form-control"
- required
- />
- <span class="error" th:text="#{error_message.address_required}">Property address must be required</span>
- <span class="error-v2" th:text="#{error_message.address_required_cond}">Property address must be required</span>
- </div>
- </div>
- </div>
- <div id="blockBedroom" class="col-xs-12 col-md-6">
- <div class="input-wrap form-group select-wrap">
- <label for="bedroom" th:text="#{property.bedroom_text}"
- >Bedroom</label
- >
- <div class=" status-bedroom">
- <select
- name="bedroom"
- id="bedroom"
- class="custom-select select-sm sources"
- placeholder="1">
- <option value="1">1</option>
- <option value="2">2</option>
- <option value="3">3</option>
- <option value="4">4</option>
- </select>
- </div>
- </div>
- </div>
- <div id="blockRoomPax" class="col-xs-12 col-md-6">
- <div class="input-wrap form-group select-wrap">
- <label for="bedroom" th:text="#{property.room.pax}">Max pax allowed to stay</label>
- <div class=" status-pax">
- <select
- name="bedroom"
- id="roomPax"
- class="custom-select select-sm sources"
- placeholder="1">
- <option value="1">1</option>
- <option value="2">2</option>
- <option value="3">3</option>
- <option value="4">4</option>
- <option value="5">5</option>
- </select>
- </div>
- </div>
- </div>
- <div class="col-xs-12 col-md-6">
- <div class="input-wrap form-group">
- <label
- for="postcode"
- th:text="#{property.post_code_text}"
- >Post Code</label
- >
- <div class="status status-post-code">
- <input
- name="postcode"
- id="postcode"
- type="search"
- class="form-control"
- required
- />
- <span class="error" th:text="#{error_message.post_required}">Post code must be required</span>
- <span class="error-v2" th:text="#{error_message.post_required_cond}">Post code must be required</span>
- <span class="error-v3" th:text="#{error_message.post_required_cond1}">Post code need to be numbers only.</span>
- </div>
- </div>
- </div>
- <div id="blockBathroom" class="col-xs-12 col-md-6">
- <div class="input-wrap form-group select-wrap">
- <label
- for="bathroom"
- th:text="#{property.bathroom_text}"
- >Bathroom</label
- >
- <div class=" status-bathroom">
- <select
- name="bathroom"
- id="bathroom"
- class="custom-select select-sm sources"
- placeholder="1"
- required
- >
- <option value="1">1</option>
- <option value="2">2</option>
- <option value="3">3</option>
- <option value="4">4</option>
- </select>
- </div>
- </div>
- </div>
- <div id="blockRoomBathroom" class="col-xs-12 col-md-6">
- <div class="input-wrap form-group select-wrap">
- <label
- for="bathroom"
- th:text="#{property.bathroom_text}">Bathroom</label>
- <div class=" status-room-bathroom">
- <select
- name="bathroom"
- id="roomBathroom"
- class="custom-select select-sm sources"
- th:placeholder="#{property_room.private}"
- required>
- <option value="PRIVATE" th:text="#{property_room.private}">Private</option>
- <option value="SHARED" th:text="#{property_room.shared}">Shared</option>
- </select>
- </div>
- </div>
- </div>
- <div id="blockSqft" class="col-xs-12 col-md-6">
- <div class="input-wrap form-group">
- <label for="sqft" th:text="#{property.sqft_text}"
- >Build-up Size (sqft)*</label
- >
- <div class="status status-sqft">
- <input
- name="sqft"
- id="sqft"
- type="text"
- class="form-control"
- required
- />
- <span class="error" th:text="#{error_message.sqft_required}">Property sqft must be required</span>
- <span class="error-v2" th:text="#{error_message.sqft_required_cond}">Property sqft must be greater</span>
- <span class="error-v3" th:text="#{error_message.sqft_required_cond1}">Please insert a valid value for sqft.</span>
- </div>
- <small class="sm-note" th:text="#{property.area_note}"
- >*
- <th:block th:text="#{property.area_note}"
- >this refers to the total area occupied by your
- property/house</th:block
- ></small
- >
- </div>
- </div>
- <div id="blockRoomSize" class="col-xs-12 col-md-6">
- <div class="input-wrap form-group">
- <label for="sqft" th:text="#{property.room.sqft_text}"
- >Room Size</label
- >
- <div class=" status-room-size">
- <select
- name="roomSize"
- id="roomSize"
- class="custom-select select-sm sources"
- th:placeholder="#{property_room.single}"
- required>
- <option value="SMALL" th:text="#{property_room.single}">Single</option>
- <option value="MEDIUM" th:text="#{property_room.middle}">Middle</option>
- <option value="MASTER" th:text="#{property_room.master}">Master</option>
- </select>
- </div>
- </div>
- </div>
- <div class="col-xs-12 col-md-6">
- <div class="input-wrap form-group select-wrap">
- <label for="carpark" th:text="#{property.parking_text}"
- >Parking</label
- >
- <div class=" status-parking">
- <select
- name="carpark"
- id="carpark"
- class="custom-select select-sm sources"
- placeholder="0"
- required
- >
- <option value="0">0</option>
- <option value="1">1</option>
- <option value="2">2</option>
- <option value="3">3</option>
- <option value="4">4</option>
- </select>
- </div>
- </div>
- </div>
- <div class="col-xs-12 col-md-6">
- <div class="input-wrap form-group ">
- <label for="price" th:text="#{filter.price}"
- >Price (RM)</label
- >
- <div class="status status-price">
- <input
- name="price"
- id="price"
- type="text"
- class="form-control"
- required
- />
- <span class="error" th:text="#{error_message.price_required}">Property price must be required</span>
- <span class="error-v2" th:text="#{error_message.price_required_cond}">Property price must be required</span>
- <span class="error-v3" th:text="#{error_message.price_required_cond1}">Property price must be required</span>
- </div>
- </div>
- </div>
- <div class="col-xs-12 col-md-6">
- <div class="input-wrap form-group select-wrap">
- <label
- for="furnishingType"
- th:text="#{property.furnishing_title}"
- >Furnishing</label
- >
- <div class=" status-furnishing">
- <select
- name="furnishingType"
- id="furnishingType"
- class="custom-select select-sm sources "
- th:placeholder="#{property_furnish.unfurnished}"
- required
- >
- <option
- selected
- value="NONE"
- th:text="#{property_furnish.unfurnished}"
- >Unfurnished</option
- >
- <option
- value="PARTIAL"
- th:text="#{property_furnish.partially}"
- >Partially Furnished</option
- >
- <option
- value="FULL"
- th:text="#{property_furnish.fully}"
- >Fully Furnished</option
- >
- </select>
- </div>
- </div>
- </div>
- <div class="col-xs-12 col-md-6">
- <div class="check-wrap">
- <label class="checkbox form-group checkbox-sm checkbox-inline-sm">
- <input type="checkbox" id="negotiable" required checked/>
- <span class="checkbox__icon"></span>
- <th:block th:text="#{property.negotiable_text}"
- >Negotiable</th:block
- >
- </label>
- </div>
- </div>
- <div class="col-xs-12 col-md-6">
- <div class="check-wrap">
- <label class="checkbox form-group checkbox-sm checkbox-inline-sm">
- <input type="checkbox" id="fullyFurnishable" />
- <span class="checkbox__icon"></span>
- <th:block th:text="#{property.extra_note}"
- >I'm willing to fully furnish this unit at extra
- cost</th:block
- >
- </label>
- </div>
- </div>
- </div>
- </div>
- </form>
- </div>
- <div id="step-2" class="">
- <div id="form-step-1" role="form" data-toggle="validator">
- <h2
- class="step-sub-title text-center"
- th:text="#{property.photo_guidelines}"
- >
- Photo Guidelines
- </h2>
- <div class="photo-guideline-top d-flex h-center">
- <div class="col">
- <div class="ico">
- <img
- src="/assets/img/icons/photo-guidelines.svg"
- width="80"
- alt=""
- />
- </div>
- <div class="caption">
- <th:block th:text="#{property.photo_guidelines_tag1}"
- >At least</th:block
- >
- <br />
- <th:block th:text="#{property.photo_guidelines_tag2}"
- >non-watermarked</th:block
- >
- </div>
- </div>
- <div class="col">
- <div class="ico">
- <img
- src="/assets/img/icons/photo-guidelines-hd.svg"
- width="80"
- alt=""
- />
- </div>
- <div class="caption">
- <th:block th:text="#{property.photo_guidelines_tag3}"
- >High</th:block
- >
- <br />
- <th:block th:text="#{property.photo_guidelines_tag4}"
- >quality photo</th:block
- >
- </div>
- </div>
- <div class="col">
- <div class="ico">
- <img
- src="/assets/img/icons/photo-guidelines-sun.svg"
- width="80"
- alt=""
- />
- </div>
- <div class="caption">
- <th:block th:text="#{property.photo_guidelines_tag5}"
- >Bright and</th:block
- >
- <br />
- <th:block th:text="#{property.photo_guidelines_tag6}"
- >natural lighting</th:block
- >
- </div>
- </div>
- </div>
- <div class="check-wrap" th:if="false">
- <label class="checkbox checkbox-sm checkbox-inline-sm">
- <input type="checkbox" />
- <span class="checkbox__icon"></span>
- <th:block th:text="#{property.photographer_tagline1}"
- >I need a photographer to take high quality photos /
- 360</th:block
- >
- </label>
- </div>
- <div class="row photo-thumb-listing">
- <div class="col-xs-6 col-md-4">
- <div class="box text-right">
- <button class="btn btn-secondary-filled btn-set-cover-photo" id="setCoverPhotoBtn0"
- th:text="#{button.set_cover_photo}" onclick="setAsCoverPhoto(0)"
- >Set as Cover Photo</button>
- <div class="btn btn-primary-filled btn-rotate">
- <button class="rotate-left">
- <i class="material-icons">
- rotate_90_degrees_ccw
- </i>
- </button>
- <button class="rotate-right">
- <i class="material-icons">
- rotate_90_degrees_ccw
- </i>
- </button>
- </div>
- <div class="js--image-preview" id="img0"></div>
- <div class="upload-options">
- <label>
- <input
- type="file"
- class="image-upload"
- accept="image/*"
- />
- </label>
- </div>
- </div>
- </div>
- <div class="col-xs-6 col-md-4">
- <div class="box text-right">
- <button class="btn btn-secondary-filled btn-set-cover-photo" id="setCoverPhotoBtn1"
- th:text="#{button.set_cover_photo}" onclick="setAsCoverPhoto(1)"
- >Set as Cover Photo</button>
- <div class="btn btn-primary-filled btn-rotate">
- <button class="rotate-left">
- <i class="material-icons">
- rotate_90_degrees_ccw
- </i>
- </button>
- <button class="rotate-right">
- <i class="material-icons">
- rotate_90_degrees_ccw
- </i>
- </button>
- </div>
- <div class="js--image-preview" id="img1"></div>
- <div class="upload-options">
- <label>
- <input
- type="file"
- class="image-upload"
- accept="image/*"
- />
- <input type="hidden" />
- </label>
- </div>
- </div>
- </div>
- <div class="col-xs-6 col-md-4">
- <div class="box text-right">
- <button class="btn btn-secondary-filled btn-set-cover-photo" id="setCoverPhotoBtn2"
- th:text="#{button.set_cover_photo}" onclick="setAsCoverPhoto(2)"
- >Set as Cover Photo</button>
- <div class="btn btn-primary-filled btn-rotate">
- <button class="rotate-left">
- <i class="material-icons">
- rotate_90_degrees_ccw
- </i>
- </button>
- <button class="rotate-right">
- <i class="material-icons">
- rotate_90_degrees_ccw
- </i>
- </button>
- </div>
- <div class="js--image-preview" id="img2"></div>
- <div class="upload-options">
- <label>
- <input
- type="file"
- class="image-upload"
- accept="image/*"
- />
- </label>
- </div>
- </div>
- </div>
- <div class="col-xs-6 col-md-4">
- <div class="box text-right">
- <button class="btn btn-secondary-filled btn-set-cover-photo" id="setCoverPhotoBtn3"
- th:text="#{button.set_cover_photo}" onclick="setAsCoverPhoto(3)"
- >Set as Cover Photo</button>
- <div class="btn btn-primary-filled btn-rotate">
- <button class="rotate-left">
- <i class="material-icons">
- rotate_90_degrees_ccw
- </i>
- </button>
- <button class="rotate-right">
- <i class="material-icons">
- rotate_90_degrees_ccw
- </i>
- </button>
- </div>
- <div class="js--image-preview" id="img3"></div>
- <div class="upload-options">
- <label>
- <input
- type="file"
- class="image-upload"
- accept="image/*"
- />
- </label>
- </div>
- </div>
- </div>
- <div class="col-xs-6 col-md-4">
- <div class="box text-right">
- <button class="btn btn-secondary-filled btn-set-cover-photo" id="setCoverPhotoBtn4"
- th:text="#{button.set_cover_photo}" onclick="setAsCoverPhoto(4)"
- >Set as Cover Photo</button>
- <div class="btn btn-primary-filled btn-rotate">
- <button class="rotate-left">
- <i class="material-icons">
- rotate_90_degrees_ccw
- </i>
- </button>
- <button class="rotate-right">
- <i class="material-icons">
- rotate_90_degrees_ccw
- </i>
- </button>
- </div>
- <div class="js--image-preview" id="img4"></div>
- <div class="upload-options">
- <label>
- <input
- type="file"
- class="image-upload"
- accept="image/*"
- />
- </label>
- </div>
- </div>
- </div>
- <div class="col-xs-6 col-md-4">
- <div class="box text-right">
- <button class="btn btn-secondary-filled btn-set-cover-photo" id="setCoverPhotoBtn5"
- th:text="#{button.set_cover_photo}" onclick="setAsCoverPhoto(5)"
- >Set as Cover Photo</button>
- <div class="btn btn-primary-filled btn-rotate">
- <button class="rotate-left">
- <i class="material-icons">
- rotate_90_degrees_ccw
- </i>
- </button>
- <button class="rotate-right">
- <i class="material-icons">
- rotate_90_degrees_ccw
- </i>
- </button>
- </div>
- <div class="js--image-preview" id="img5"></div>
- <div class="upload-options">
- <label>
- <input
- type="file"
- class="image-upload"
- accept="image/*"
- />
- </label>
- </div>
- </div>
- </div>
- <div class="col-xs-6 col-md-4">
- <div class="box text-right">
- <button class="btn btn-secondary-filled btn-set-cover-photo" id="setCoverPhotoBtn6"
- th:text="#{button.set_cover_photo}" onclick="setAsCoverPhoto(6)"
- >Set as Cover Photo</button>
- <div class="btn btn-primary-filled btn-rotate">
- <button class="rotate-left">
- <i class="material-icons">
- rotate_90_degrees_ccw
- </i>
- </button>
- <button class="rotate-right">
- <i class="material-icons">
- rotate_90_degrees_ccw
- </i>
- </button>
- </div>
- <div class="js--image-preview" id="img6"></div>
- <div class="upload-options">
- <label>
- <input
- type="file"
- class="image-upload"
- accept="image/*"
- />
- </label>
- </div>
- </div>
- </div>
- <div class="col-xs-6 col-md-4">
- <div class="box text-right">
- <button class="btn btn-secondary-filled btn-set-cover-photo" id="setCoverPhotoBtn7"
- th:text="#{button.set_cover_photo}" onclick="setAsCoverPhoto(7)"
- >Set as Cover Photo</button>
- <div class="btn btn-primary-filled btn-rotate">
- <button class="rotate-left">
- <i class="material-icons">
- rotate_90_degrees_ccw
- </i>
- </button>
- <button class="rotate-right">
- <i class="material-icons">
- rotate_90_degrees_ccw
- </i>
- </button>
- </div>
- <div class="js--image-preview" id="img7"></div>
- <div class="upload-options">
- <label>
- <input
- type="file"
- class="image-upload"
- accept="image/*"
- />
- </label>
- </div>
- </div>
- </div>
- <div class="col-xs-6 col-md-4">
- <div class="box text-right">
- <button class="btn btn-secondary-filled btn-set-cover-photo" id="setCoverPhotoBtn8"
- th:text="#{button.set_cover_photo}" onclick="setAsCoverPhoto(8)"
- >Set as Cover Photo</button>
- <div class="btn btn-primary-filled btn-rotate">
- <button class="rotate-left">
- <i class="material-icons">
- rotate_90_degrees_ccw
- </i>
- </button>
- <button class="rotate-right">
- <i class="material-icons">
- rotate_90_degrees_ccw
- </i>
- </button>
- </div>
- <div class="js--image-preview" id="img8"></div>
- <div class="upload-options">
- <label>
- <input
- type="file"
- class="image-upload"
- accept="image/*"
- />
- </label>
- </div>
- </div>
- </div>
- <div class="col-xs-6 col-md-4">
- <div class="box text-right">
- <button class="btn btn-secondary-filled btn-set-cover-photo" id="setCoverPhotoBtn9"
- th:text="#{button.set_cover_photo}" onclick="setAsCoverPhoto(9)"
- >Set as Cover Photo</button>
- <div class="btn btn-primary-filled btn-rotate">
- <button class="rotate-left">
- <i class="material-icons">
- rotate_90_degrees_ccw
- </i>
- </button>
- <button class="rotate-right">
- <i class="material-icons">
- rotate_90_degrees_ccw
- </i>
- </button>
- </div>
- <div class="js--image-preview" id="img9"></div>
- <div class="upload-options">
- <label>
- <input
- type="file"
- class="image-upload"
- accept="image/*"
- />
- </label>
- </div>
- </div>
- </div>
- <div class="col-xs-6 col-md-4">
- <div class="box text-right">
- <button class="btn btn-secondary-filled btn-set-cover-photo" id="setCoverPhotoBtn10"
- th:text="#{button.set_cover_photo}" onclick="setAsCoverPhoto(10)"
- >Set as Cover Photo</button>
- <div class="btn btn-primary-filled btn-rotate">
- <button class="rotate-left">
- <i class="material-icons">
- rotate_90_degrees_ccw
- </i>
- </button>
- <button class="rotate-right">
- <i class="material-icons">
- rotate_90_degrees_ccw
- </i>
- </button>
- </div>
- <div class="js--image-preview" id="img10"></div>
- <div class="upload-options">
- <label>
- <input
- type="file"
- class="image-upload"
- accept="image/*"
- />
- </label>
- </div>
- </div>
- </div>
- <div class="col-xs-6 col-md-4">
- <div class="box text-right">
- <button class="btn btn-secondary-filled btn-set-cover-photo" id="setCoverPhotoBtn11"
- th:text="#{button.set_cover_photo}" onclick="setAsCoverPhoto(11)"
- >Set as Cover Photo</button>
- <div class="btn btn-primary-filled btn-rotate">
- <button class="rotate-left">
- <i class="material-icons">
- rotate_90_degrees_ccw
- </i>
- </button>
- <button class="rotate-right">
- <i class="material-icons">
- rotate_90_degrees_ccw
- </i>
- </button>
- </div>
- <div class="js--image-preview" id="img11"></div>
- <div class="upload-options">
- <label>
- <input
- type="file"
- class="image-upload"
- accept="image/*"
- />
- </label>
- </div>
- </div>
- </div>
- <div th:if="false" class="col-xs-6 col-md-4">
- <div class="box box-add lastme">
- <div class="js--image-preview"></div>
- <div class="thumb-inner centered">
- <div>
- <div class="icons">
- <i class="fas fa-plus-circle"></i>
- </div>
- <small th:text="#{property.add_more_photos}"
- >Add more photos</small
- >
- </div>
- </div>
- <div class="upload-options">
- <label>
- <input
- type="file"
- class="image-upload"
- accept="image/*"
- />
- <input type="hidden" id="image7" />
- </label>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div id="step-3" class="">
- <div id="form-step-2" role="form" data-toggle="validator">
- <div class="extra-info">
- <div class="text-center stat-msg">
- <em th:text="#{property.photo_uploaded}"
- >Photo successfully uploaded!</em
- >
- </div>
- <div class="inner-main">
- <div class="slot-extra">
- <strong
- class="content-title text-center"
- th:text="#{property.furnishing_title}"
- >Furnishing</strong
- >
- <div class="extra-inner">
- <div class="row">
- <div class="col-xs-6 col-sm-4">
- <div class="check-wrap">
- <label
- class="checkbox checkbox-sm checkbox-inline-sm"
- >
- <input type="checkbox" id="cbTv" />
- <span class="checkbox__icon"></span>
- <th:block th:text="#{furnish.tv}"
- >TV</th:block
- >
- </label>
- </div>
- </div>
- <div class="col-xs-6 col-sm-4">
- <div class="check-wrap">
- <label
- class="checkbox checkbox-sm checkbox-inline-sm"
- >
- <input type="checkbox" id="cbCurtain" />
- <span class="checkbox__icon"></span>
- <th:block th:text="#{furnish.curtain}"
- >Curtain</th:block
- >
- </label>
- </div>
- </div>
- <div class="col-xs-6 col-sm-4">
- <div class="check-wrap">
- <label
- class="checkbox checkbox-sm checkbox-inline-sm"
- >
- <input type="checkbox" id="cbMattress" />
- <span class="checkbox__icon"></span>
- <th:block th:text="#{furnish.mattress}"
- >Mattress</th:block
- >
- </label>
- </div>
- </div>
- <div class="col-xs-6 col-sm-4">
- <div class="check-wrap">
- <label
- class="checkbox checkbox-sm checkbox-inline-sm"
- >
- <input
- type="checkbox"
- id="cbWashingMachine"
- />
- <span class="checkbox__icon"></span>
- <th:block th:text="#{furnish.washing_machine}"
- >Washing machine</th:block
- >
- </label>
- </div>
- </div>
- <div class="col-xs-6 col-sm-4">
- <div class="check-wrap">
- <label
- class="checkbox checkbox-sm checkbox-inline-sm"
- >
- <input type="checkbox" id="cbHood" />
- <span class="checkbox__icon"></span>
- <th:block th:text="#{furnish.hood_hub}"
- >Hood & hub</th:block
- >
- </label>
- </div>
- </div>
- <div class="col-xs-6 col-sm-4">
- <div class="check-wrap">
- <label
- class="checkbox checkbox-sm checkbox-inline-sm"
- >
- <input type="checkbox" id="cbAc" />
- <span class="checkbox__icon"></span>
- <th:block th:text="#{furnish.ac}"
- >A/C</th:block
- >
- </label>
- </div>
- </div>
- <div class="col-xs-6 col-sm-4">
- <div class="check-wrap">
- <label
- class="checkbox checkbox-sm checkbox-inline-sm"
- >
- <input type="checkbox" id="cbWaterHeater" />
- <span class="checkbox__icon"></span>
- <th:block th:text="#{furnish.water_heater}"
- >Water heater</th:block
- >
- </label>
- </div>
- </div>
- <div class="col-xs-6 col-sm-4">
- <div class="check-wrap">
- <label
- class="checkbox checkbox-sm checkbox-inline-sm"
- >
- <input type="checkbox" id="cbDiningTable" />
- <span class="checkbox__icon"></span>
- <th:block th:text="#{furnish.dining_table}"
- >Dining table</th:block
- >
- </label>
- </div>
- </div>
- <div class="col-xs-6 col-sm-4">
- <div class="check-wrap">
- <label
- class="checkbox checkbox-sm checkbox-inline-sm"
- >
- <input type="checkbox" id="cbWardrobe" />
- <span class="checkbox__icon"></span>
- <th:block th:text="#{furnish.wardrobe}"
- >Wardrobe</th:block
- >
- </label>
- </div>
- </div>
- <div class="col-xs-6 col-sm-4">
- <div class="check-wrap">
- <label
- class="checkbox checkbox-sm checkbox-inline-sm"
- >
- <input type="checkbox" id="cbKitchen" />
- <span class="checkbox__icon"></span>
- <th:block th:text="#{furnish.kitchen_cabinet}"
- >Kitchen cabinet</th:block
- >
- </label>
- </div>
- </div>
- <div class="col-xs-6 col-sm-4">
- <div class="check-wrap">
- <label
- class="checkbox checkbox-sm checkbox-inline-sm"
- >
- <input type="checkbox" id="cbOven" />
- <span class="checkbox__icon"></span>
- <th:block th:text="#{furnish.oven}"
- >Oven</th:block
- >
- </label>
- </div>
- </div>
- <div class="col-xs-6 col-sm-4">
- <div class="check-wrap">
- <label
- class="checkbox checkbox-sm checkbox-inline-sm"
- >
- <input type="checkbox" id="cbFridge" />
- <span class="checkbox__icon"></span>
- <th:block th:text="#{furnish.fridge}"
- >Refrigerator</th:block
- >
- </label>
- </div>
- </div>
- <div class="col-xs-6 col-sm-4">
- <div class="check-wrap">
- <label
- class="checkbox checkbox-sm checkbox-inline-sm"
- >
- <input type="checkbox" id="cbSofa" />
- <span class="checkbox__icon"></span>
- <th:block th:text="#{furnish.sofa}"
- >Sofa</th:block
- >
- </label>
- </div>
- </div>
- <div class="col-xs-6 col-sm-4">
- <div class="check-wrap">
- <label
- class="checkbox checkbox-sm checkbox-inline-sm"
- >
- <input type="checkbox" id="cbMicrowave" />
- <span class="checkbox__icon"></span>
- <th:block th:text="#{furnish.microwave}"
- >Microwave</th:block
- >
- </label>
- </div>
- </div>
- <div class="col-xs-6 col-sm-4">
- <div class="check-wrap">
- <label
- class="checkbox checkbox-sm checkbox-inline-sm"
- >
- <input type="checkbox" id="cbBedframe" />
- <span class="checkbox__icon"></span>
- <th:block th:text="#{furnish.bed_frame}"
- >Bed frame</th:block
- >
- </label>
- </div>
- </div>
- <div class="col-xs-6 col-sm-4">
- <div class="check-wrap">
- <label
- class="checkbox checkbox-sm checkbox-inline-sm"
- >
- <input type="checkbox" id="cbInternet" />
- <span class="checkbox__icon"></span>
- <th:block th:text="#{furnish.internet}"
- >Internet</th:block
- >
- </label>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="slot-extra">
- <strong class="content-title text-center"
- >Facilities</strong
- >
- <div class="extra-inner">
- <div class="row">
- <div class="col-xs-6 col-sm-4">
- <div class="check-wrap">
- <label
- class="checkbox checkbox-sm checkbox-inline-sm"
- >
- <input type="checkbox" id="cbBbq" />
- <span class="checkbox__icon"></span>
- <th:block th:text="#{facility.bbq}"
- >Barbeque area</th:block
- >
- </label>
- </div>
- </div>
- <div class="col-xs-6 col-sm-4">
- <div class="check-wrap">
- <label
- class="checkbox checkbox-sm checkbox-inline-sm"
- >
- <input
- type="checkbox"
- id="cbCoveredParking"
- />
- <span class="checkbox__icon"></span>
- <th:block
- th:text="#{facility.covered_parking}"
- >Covered parking</th:block
- >
- </label>
- </div>
- </div>
- <div class="col-xs-6 col-sm-4">
- <div class="check-wrap">
- <label
- class="checkbox checkbox-sm checkbox-inline-sm"
- >
- <input type="checkbox" id="cbGym" />
- <span class="checkbox__icon"></span>
- <th:block th:text="#{facility.gymnasium}"
- >Gymnasium</th:block
- >
- </label>
- </div>
- </div>
- <div class="col-xs-6 col-sm-4">
- <div class="check-wrap">
- <label
- class="checkbox checkbox-sm checkbox-inline-sm"
- >
- <input type="checkbox" id="cbBasketball" />
- <span class="checkbox__icon"></span>
- <th:block th:text="#{facility.basketball}"
- >Basketball</th:block
- >
- </label>
- </div>
- </div>
- <div class="col-xs-6 col-sm-4">
- <div class="check-wrap">
- <label
- class="checkbox checkbox-sm checkbox-inline-sm"
- >
- <input type="checkbox" id="cbRestaurant" />
- <span class="checkbox__icon"></span>
- <th:block th:text="#{facility.restaurant}"
- >Restaurant</th:block
- >
- </label>
- </div>
- </div>
- <div class="col-xs-6 col-sm-4">
- <div class="check-wrap">
- <label
- class="checkbox checkbox-sm checkbox-inline-sm"
- >
- <input type="checkbox" id="cbDobby" />
- <span class="checkbox__icon"></span>
- <th:block th:text="#{facility.dobby}"
- >Dobby</th:block
- >
- </label>
- </div>
- </div>
- <div class="col-xs-6 col-sm-4">
- <div class="check-wrap">
- <label
- class="checkbox checkbox-sm checkbox-inline-sm"
- >
- <input type="checkbox" id="cbNursery" />
- <span class="checkbox__icon"></span>
- <th:block th:text="#{facility.nursery}"
- >Nursery</th:block
- >
- </label>
- </div>
- </div>
- <div class="col-xs-6 col-sm-4">
- <div class="check-wrap">
- <label
- class="checkbox checkbox-sm checkbox-inline-sm"
- >
- <input type="checkbox" id="cbPlayground" />
- <span class="checkbox__icon"></span>
- <th:block th:text="#{facility.playground}"
- >Playground</th:block
- >
- </label>
- </div>
- </div>
- <div class="col-xs-6 col-sm-4">
- <div class="check-wrap">
- <label
- class="checkbox checkbox-sm checkbox-inline-sm"
- >
- <input type="checkbox" id="cbSauna" />
- <span class="checkbox__icon"></span>
- <th:block th:text="#{facility.sauna}"
- >Sauna</th:block
- >
- </label>
- </div>
- </div>
- <div class="col-xs-6 col-sm-4">
- <div class="check-wrap">
- <label
- class="checkbox checkbox-sm checkbox-inline-sm"
- >
- <input type="checkbox" id="cbSwimmingPool" />
- <span class="checkbox__icon"></span>
- <th:block th:text="#{facility.swimming}"
- >Swimming pool</th:block
- >
- </label>
- </div>
- </div>
- <div class="col-xs-6 col-sm-4">
- <div class="check-wrap">
- <label
- class="checkbox checkbox-sm checkbox-inline-sm"
- >
- <input type="checkbox" id="cbTennis" />
- <span class="checkbox__icon"></span>
- <th:block th:text="#{facility.tennis}"
- >Tennis court</th:block
- >
- </label>
- </div>
- </div>
- <div class="col-xs-6 col-sm-4">
- <div class="check-wrap">
- <label
- class="checkbox checkbox-sm checkbox-inline-sm"
- >
- <input type="checkbox" id="cbSecurity" />
- <span class="checkbox__icon"></span>
- <th:block th:text="#{facility.security24hr}"
- >24hr security</th:block
- >
- </label>
- </div>
- </div>
- <div class="col-xs-6 col-sm-4">
- <div class="check-wrap">
- <label
- class="checkbox checkbox-sm checkbox-inline-sm"
- >
- <input type="checkbox" id="cbMart" />
- <span class="checkbox__icon"></span>
- <th:block th:text="#{facility.mart}"
- >Mart</th:block
- >
- </label>
- </div>
- </div>
- <div class="col-xs-6 col-sm-4">
- <div class="check-wrap">
- <label
- class="checkbox checkbox-sm checkbox-inline-sm"
- >
- <input type="checkbox" id="cbSquash" />
- <span class="checkbox__icon"></span>
- <th:block th:text="#{facility.squash}"
- >Squash court</th:block
- >
- </label>
- </div>
- </div>
- <div class="col-xs-6 col-sm-4">
- <div class="check-wrap">
- <label
- class="checkbox checkbox-sm checkbox-inline-sm"
- >
- <input type="checkbox" id="cbBadminton" />
- <span class="checkbox__icon"></span>
- <th:block th:text="#{facility.badminton}"
- >Badminton</th:block
- >
- </label>
- </div>
- </div>
- <div class="col-xs-6 col-sm-4">
- <div class="check-wrap">
- <label
- class="checkbox checkbox-sm checkbox-inline-sm"
- >
- <input type="checkbox" id="cbElevator" />
- <span class="checkbox__icon"></span>
- <th:block th:text="#{facility.elevator}"
- >Elevator</th:block
- >
- </label>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="slot-extra">
- <strong
- class="content-title text-center"
- th:text="#{property.description_title}"
- >Description</strong
- >
- <div class="extra-inner">
- <textarea
- name=""
- id="description"
- cols="30"
- rows="10"
- class="big-des form-control"
- ></textarea>
- </div>
- </div>
- <div class="slot-extra">
- <strong class="content-title text-center"
- > </strong
- >
- <div class="extra-inner">
- <div class="row">
- <div class="col-xs-6 col-sm-4">
- <div class="check-wrap">
- <label
- class="checkbox checkbox-sm checkbox-inline-sm"
- >
- <input type="checkbox" id="cbAllRace" />
- <span class="checkbox__icon"></span>
- <th:block
- th:text="#{extra_info.accept_all_races}"
- >Accept all races</th:block
- >
- </label>
- </div>
- </div>
- <div class="col-xs-6 col-sm-4">
- <div class="check-wrap">
- <label
- class="checkbox checkbox-sm checkbox-inline-sm"
- >
- <input type="checkbox" id="cbPet" />
- <span class="checkbox__icon"></span>
- <th:block th:text="#{extra_info.pet_friendly}"
- >Pet-friendly</th:block
- >
- </label>
- </div>
- </div>
- <div class="col-xs-6 col-sm-4" th:if="false">
- <div class="check-wrap">
- <label
- class="checkbox checkbox-sm checkbox-inline-sm">
- <input type="checkbox" />
- <span class="checkbox__icon"></span>
- <th:block th:text="#{extra_info.handicapped}"
- >Handicapped</th:block
- >
- </label>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="slot-extra">
- <strong class="content-title"> </strong>
- <div class="row extra-inner">
- <div class="col-date col-xs-12 col-md-6">
- <div class="input-inline-group d-flex">
- <label
- for="dateAvailable"
- th:text="#{property.avaliable_date_text}"
- >Availability date:</label
- >
- <input
- th:placeholder="#{property_ava_date.placeholder}"
- type="text"
- id="dateAvailable"
- class="form-control datepicker-nice"
- data-language="en"
- data-position="bottom left"
- />
- </div>
- </div>
- <div class="col-xs-12 col-md-6" th:if="false">
- <div class="input-inline-group d-flex">
- <label
- for="dateIn"
- th:text="#{property.minimum_stay}"
- >Minimum stay:</label
- >
- <div class="input-wrap select-wrap">
- <div class="status">
- <select
- name="sources"
- id="sources"
- class="custom-select select-sm sources"
- placeholder="Any"
- >
- <option selected value="rent">Any</option>
- <option value="buy">Many</option>
- </select>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="slot-extra">
- <strong class="content-title"> </strong>
- <div class="slot-inner">
- <div class="note-box">
- <div class="head d-flex">
- <div
- class="txt-left"
- th:text="#{property.insurance_note}"
- >
- LANDLORD INSURANCE AS DEPOSIT
- </div>
- <div class="right">
- <img
- src="/assets/img/icons/no-deposit.svg"
- width="30"
- alt=""
- />
- <img
- src="/assets/img/icons/allinaz.svg"
- width="110"
- alt=""
- />
- </div>
- </div>
- <div class="sub-inner">
- <strong
- class="content-title"
- th:text="#{property.secured_note}"
- >Be secured up to RM26,000</strong
- >
- <p th:text="#{property.bottom_info}">
- When you sign up and rent with SPEEDHOME, your
- property is insured up to RM15,000. You can also
- claim up to RM1,000 in unpaid utility bills and
- 2 months’ of rent.
- </p>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- </form>
- </div>
- </main>
- <div replace="common/footer :: footer"></div>
- </div>
- <div id="uploadPhotoError" class="white-popup mfp-hide text-center">
- <div class="user-container upload-photo-error">
- <div class="popup-header">Whoopsie Daisy</div>
- <div class="user-faces">
- <img
- src="/assets/img/icons/warning.svg" width="60"
- />
- </div>
- <div class="user-title">
- You need to upload at least 4 photos to proceed.
- </div>
- <div class="btn-wrapper">
- <div class="">
- <span
- id="btnCloseErrorPopup"
- class="btn btn-curv btn-dark-gray-filled"
- >Got it
- </span>
- </div>
- </div>
- </div>
- </div>
- <div th:replace="common/filter :: filter"></div>
- <div class="m-cookies"></div>
- <script src="/assets/js/jquery.min.js"></script>
- <script src="/assets/js/owl.carousel.min.js"></script>
- <script src="/assets/js/jquery.autocomplete.min.js"></script>
- <script src="/assets/js/jquery.magnific-popup.min.js"></script>
- <script src="/assets/js/jquery.smartWizard.min.js"></script>
- <script src="/assets/js/wizardInit.js"></script>
- <script src="/assets/js/moment.js"></script>
- <script src="/assets/js/pikaday.js"></script>
- <script src="/assets/js/jquery-ui.js"></script>
- <script src="/assets/js/jquery-ui-slider-pips.js"></script>
- <script src="/assets/js/main.js"></script>
- <script src="/assets/js/intlTelInput.js"></script>
- <script src="/assets/js/jquery.disableAutoFill.min.js"></script>
- <script>
- $("#btnCloseErrorPopup").on("click", function () {
- $.magnificPopup.close();
- $(this).scrollTop(0);
- });
- var input = document.querySelector(".country-drop");
- window.intlTelInput(input, {
- // allowDropdown: false,
- // autoHideDialCode: false,
- autoPlaceholder: "on",
- separateDialCode: true,
- // dropdownContainer: ".popup-dropdown",
- customContainer:'.popup-dropdown',
- // excludeCountries: ["us"],
- // formatOnDisplay: false,
- // geoIpLookup: function(callback) {
- // $.get("http://ipinfo.io", function() {}, "jsonp").always(function(resp) {
- // var countryCode = (resp && resp.country) ? resp.country : "";
- // callback(countryCode);
- // });
- // },
- // hiddenInput: "full_number",
- initialCountry: "my",
- localizedCountries: { my: "Malaysia" },
- // nationalMode: false,
- // onlyCountries: ['us', 'gb', 'ch', 'ca', 'do'],
- // placeholderNumberType: "MOBILE",
- // preferredCountries: ['cn', 'jp'],
- preferredCountries: ['my'],
- // separateDialCode: true,
- utilsScript:
- "https://cdnjs.cloudflare.com/ajax/libs/intl-tel-input/8.4.6/js/utils.js"
- });
- </script>
- <script>
- var picker = new Pikaday({
- field: document.getElementById("dateAvailable"),
- format: "DD/MM/YYYY",
- minDate: new Date(),
- });
- </script>
- <div th:replace="common/post-autocomplete-js"></div>
- <div th:replace="common/tracking :: tracking"></div>
- <div th:replace="common/login :: login"></div>
- <script th:inline="javascript">
- var errorBarred = [[#{error_message.barred_account}]];
- var errorFailCreateListing = [[#{error_message.fail_create_listing}]];
- </script>
- <script>
- var propId = null;
- var propRef = null;
- $(document).ready(function() {
- $('#prop-form').disableAutoFill();
- $("#blockStorey").hide();
- $("#blockRoomPax").hide();
- $("#blockRoomSize").hide();
- $("#blockRoomBathroom").hide();
- $("#blockBathroom").show();
- $("#blockBedroom").show();
- $("#blockSqft").show();
- $("#blockFloor").show();
- // change type select
- $(".housingType")
- .find(".custom-option")
- .on("click", function() {
- var type = $(this).data("value");
- if(type == 'LANDED'){
- $("#blockFloor").hide();
- $("#blockStorey").show();
- $("#blockRoomPax").hide();
- $("#blockRoomSize").hide();
- $("#blockRoomBathroom").hide();
- $("#blockBathroom").show();
- $("#blockBedroom").show();
- $("#blockSqft").show();
- }else{
- //high rise or room
- $("#blockFloor").show();
- $("#blockStorey").hide();
- if(type == 'ROOM'){
- $("#blockRoomPax").show();
- $("#blockRoomSize").show();
- $("#blockRoomBathroom").show();
- $("#blockBathroom").hide();
- $("#blockBedroom").hide();
- $("#blockSqft").hide();
- }else{
- $("#blockRoomPax").hide();
- $("#blockRoomSize").hide();
- $("#blockRoomBathroom").hide();
- $("#blockBathroom").show();
- $("#blockBedroom").show();
- $("#blockSqft").show();
- }
- }
- });
- // Initialize the leaveStep event
- $("#smartwizard").on("leaveStep", function(
- e,
- anchorObject,
- stepNumber,
- stepDirection
- ) {
- //create property
- var name = $("#propName").val();
- var type = $("#type").val();
- var owner = checkIfTicked("negotiable");
- var storeys = $("#storeys").val();
- var floor = $("#floor").val();
- var furnishingType = $("#furnishingType").val();
- var roomSize = $("#roomSize").val();
- var roomPax = $("#roomPax").val();
- var roomBathroom = $("#roomBathroom").val();
- var address = $("#address").val();
- var bathroom = $("#bathroom").val();
- var postcode = $("#postcode").val();
- var bedroom = $("#bedroom").val();
- var sqft = $("#sqft").val();
- var carpark = $("#carpark").val();
- var price = $("#price").val();
- var negotiable = checkIfTicked("negotiable");
- var fullyFurnishable = checkIfTicked("fullyFurnishable");
- // var stepOneClone = $("#step-1").clone();
- if (stepNumber == 0 && stepDirection == "forward") {
- // $(this).scrollTop(0);
- if(name == '' || type == '' || address == '' || carpark == '' || price == '' || furnishingType == ''){
- //debugger;
- // $("#step-1").replaceWith(stepOneClone);
- $("#step-1").find('input[required]').filter(function() {
- $(this).scrollTop(0);
- $(this).removeClass("error");
- $("span[for='" + $(this).attr('id') + "']").remove();
- if( $(this).val().length === 0 ) {
- var label = $("label[for='" + $(this).attr('id') + "']");
- $(this).addClass("error");
- $(this).parent().addClass('invalid');
- // debugger
- $(this).nextAll('span.error').addClass('show');
- // $(this).after('<span for='+$(this).attr('id') +' class="error">'+ label[0].innerText + ' is required </span>');
- }
- // keyup events
- $(this).keyup(function () {
- if( $(this).val().length > 1 ) {
- $(this).removeClass("error");
- $(this).parent().removeClass('invalid');
- $(this).next('.error').hide();
- }
- });
- });
- //alert('Please fill up all the details.'); // i have just comment this and added addClass function on eerror case
- // $('.status').addClass('invalid');
- return false;
- }
- if(name.length < 4 || name.length > 100){
- let _nameField = $('#propName');
- _nameField.removeClass("error");
- $("span[for='" + _nameField.attr('id') + "']").remove();
- let label = $("label[for='" + _nameField.attr('id') + "']");
- _nameField.addClass("error");
- _nameField.parent().addClass('invalid');
- $(_nameField).nextAll('span.error').removeClass('show');
- $(_nameField).nextAll('span.error-v2').addClass('show');
- return false
- }
- if(address.length < 5){
- let _addressField = $('#address');
- _addressField.removeClass("error");
- $("span[for='" + _addressField.attr('id') + "']").remove();
- let label = $("label[for='" + _addressField.attr('id') + "']");
- _addressField.addClass("error");
- _addressField.parent().addClass('invalid');
- $(_addressField).nextAll('span.error').removeClass('show');
- $(_addressField).nextAll('span.error-v2').addClass('show');
- return false
- }
- if(floor > 200){
- let _floorField = $('#floor');
- _floorField.removeClass("error");
- $("span[for='" + _floorField.attr('id') + "']").remove();
- let label = $("label[for='" + _floorField.attr('id') + "']");
- _floorField.addClass("error");
- _floorField.parent().addClass('invalid');
- $(_floorField).nextAll('span.error').removeClass('show');
- $(_floorField).nextAll('span.error-v2').addClass('show');
- // _floorField.after('<span for=' + _floorField.attr('id') + ' class="error">' + label[0].innerText + ' should be less than 20 character long. </span>');
- return false
- }
- if (price <= 1) {
- //alert('Budget should be more than 1');
- let _priceField = $('#price');
- _priceField.removeClass("error");
- $("span[for='" + _priceField.attr('id') + "']").remove();
- let label = $("label[for='" + _priceField.attr('id') + "']");
- _priceField.addClass("error");
- _priceField.parent().addClass('invalid');
- $(_priceField).nextAll('span.error').removeClass('show');
- $(_priceField).nextAll('span.error-v2').addClass('show');
- // _priceField.after('<span for=' + _priceField.attr('id') + ' class="error">' + label[0].innerText + ' must be greater than 1. </span>');
- return false
- }
- if(type !== 'ROOM'){
- if (sqft <= 99 || sqft >= 99999) {
- //alert('Budget should be more than 1');
- let _sqftField = $('#sqft');
- _sqftField.removeClass("error");
- $("span[for='" + _sqftField.attr('id') + "']").remove();
- let label = $("label[for='" + _sqftField.attr('id') + "']");
- _sqftField.addClass("error");
- _sqftField.parent().addClass('invalid');
- $(_sqftField).nextAll('span.error').removeClass('show');
- $(_sqftField).nextAll('span.error-v2').addClass('show');
- // _sqftField.after('<span for=' + _sqftField.attr('id') + ' class="error">' + label[0].innerText + ' must be greater than 99 and less than 9999. </span>');
- return false
- }
- }
- if(type == 'LANDED'){
- if(storeys == ''){
- let _storeysField = $('#storeys');
- _storeysField.removeClass("error");
- $("span[for='" + _storeysField.attr('id') + "']").remove();
- let label = $("label[for='" + _storeysField.attr('id') + "']");
- _storeysField.addClass("error");
- _storeysField.parent().addClass('invalid');
- $(_storeysField).nextAll('span.error').removeClass('show');
- $(_storeysField).nextAll('span.error-v2').addClass('show');
- // _storeysField.after('<span for=' + _storeysField.attr('id') + ' class="error">' + label[0].innerText + ' required. </span>');
- return false
- }
- }else{
- if(floor == ''){
- // alert('Please fill up all floor the details.');
- let _floorField = $('#floor');
- _floorField.removeClass("error");
- $("span[for='" + _floorField.attr('id') + "']").remove();
- let label = $("label[for='" + _floorField.attr('id') + "']");
- _floorField.addClass("error");
- _floorField.parent().addClass('invalid');
- $(_floorField).nextAll('span.error').addClass('show');
- return false;
- }
- }
- // $(name,address,floor,postcode,sqft,price).on('keyup', function (e) {
- // if(name.length > 1) {
- // debugger;
- // $(this).parent().removeClass('invalid');
- // }
- // });
- if(type == 'ROOM'){
- if(roomBathroom == '' || roomPax == '' || roomSize == ''){
- alert('Please fill up all the details.');
- return false;
- }
- }else{
- if(bathroom == '' || bedroom == '' || sqft == ''){
- alert('Please fill up all the details.');
- return false;
- }
- if(!isNormalInteger(sqft)){
- let _sqftField = $('#sqft');
- _sqftField.parent().addClass('invalid');
- $(_sqftField).nextAll('span.error').removeClass('show');
- $(_sqftField).nextAll('span.error-v2').removeClass('show');
- $(_sqftField).nextAll('span.error-v3').addClass('show');
- return false;
- }
- }
- if(postcode.length != 5){
- let _postcodeField = $('#postcode');
- _postcodeField.removeClass("error");
- $("span[for='" + _postcodeField.attr('id') + "']").remove();
- let label = $("label[for='" + _postcodeField.attr('id') + "']");
- _postcodeField.addClass("error");
- _postcodeField.parent().addClass('invalid');
- $(_postcodeField).nextAll('span.error').removeClass('show');
- $(_postcodeField).nextAll('span.error-v2').addClass('show');
- // _postcodeField.after('<span for=' + _postcodeField.attr('id') + ' class="error">' + label[0].innerText + ' should be 5 digit only. </span>');
- return false
- }
- if(!isNormalInteger(postcode)){
- // alert('Postcode need to be numbers only.');
- let _postcodeField = $('#postcode');
- _postcodeField.parent().addClass('invalid');
- $(_postcodeField).nextAll('span.error').removeClass('show');
- $(_postcodeField).nextAll('span.error-v2').removeClass('show');
- $(_postcodeField).nextAll('span.error-v3').addClass('show');
- return false;
- }
- if(!isNormalInteger(price)){
- let _priceField = $('#price');
- // alert('Please insert a valid value for price.');
- _priceField.parent().addClass('invalid');
- $(_priceField).nextAll('span.error').removeClass('show');
- $(_priceField).nextAll('span.error-v2').removeClass('show');
- $(_priceField).nextAll('span.error-v3').addClass('show');
- return false;
- }
- else {
- // $("#wrapper").scrollTop(0);
- // alert('boommmmmmmmmmmmm')?
- $(window).scrollTop(0);
- }
- } else if (
- stepNumber == 1 &&
- stepDirection == "forward" &&
- propId == null
- ) {
- // debugger
- $(this).scrollTop(0);
- String.prototype.myStartsWith = function(str){
- debugger
- if(this.indexOf(str)===0){
- return true;
- }else{
- return false;
- }
- };
- // $('body').removeClass('upload-error');
- var count = 0;
- for(var i = 0; i < 12; i++){
- debugger;
- var val = $("#img" + i).css("background-image");
- if (val != null && val != "" && (val.startsWith('url(data:image')|| val.startsWith('url("data:image'))) {
- count++;
- }
- }
- if(count < 4){
- // alert('Plese submit at least 4 photos.');
- $.magnificPopup.open({
- items: {
- src: '#uploadPhotoError'
- },
- type: 'inline'
- });
- // $('body').addClass('upload-error');
- return false;
- }
- // $('body').removeClass('upload-error');
- if($('#btnLogin').length){
- refreshAfterLogin = false;
- EventBus.addEventListener('onLoggedIn', createListing);
- $("#btnLogin").click();
- }else{
- createListing();
- }
- return false;
- //added
- $('.status').removeClass('invalid');
- }
- });
- function createListing(){
- var name = $("#propName").val();
- var type = $("#type").val();
- var owner = checkIfTicked("negotiable");
- var storeys = $("#storeys").val();
- var furnishingType = $("#furnishingType").val();
- var floor = $("#floor").val();
- var address = $("#address").val();
- var bathroom = $("#bathroom").val();
- var postcode = $("#postcode").val();
- var bedroom = $("#bedroom").val();
- var sqft = $("#sqft").val();
- var carpark = $("#carpark").val();
- var price = $("#price").val();
- var negotiable = checkIfTicked("negotiable");
- var fullyFurnishable = checkIfTicked("fullyFurnishable");
- var roomSize = $("#roomSize").val();
- var roomPax = $("#roomPax").val();
- var roomBathroom = $("#roomBathroom").val();
- $('.loader-wrapper').show();
- $.ajax({
- url: "/api/post/create",
- data: JSON.stringify({
- name: name,
- type: type,
- owner: owner,
- storeys: type == "LANDED" ? storeys : null,
- level: type != "LANDED" ? floor : null,
- roomType: type == "ROOM" ? roomSize : null,
- address: address,
- bathroom: bathroom,
- bathroomType: type == "ROOM" ? roomBathroom : null,
- postcode: postcode,
- bedroom: bedroom,
- sqft: sqft,
- roommate: type == "ROOM" ? roomPax : null,
- carpark: carpark,
- price: price,
- furnishType: furnishingType,
- negotiable: negotiable,
- fullyFurnishable: fullyFurnishable
- }),
- type: "POST",
- dataType: "json",
- contentType: "application/json; charset=utf-8",
- success: function(data, response) {
- window.dataLayer = window.dataLayer || [];
- window.dataLayer.push({
- 'event': 'createListing'
- });
- propId = data.id;
- propRef = data.ref;
- uploadPhoto(0);
- },
- error: function(response, error) {
- $('.loader-wrapper').hide();
- if(response.status === 401){
- alert(errorBarred);
- } else {
- alert(errorFailCreateListing);
- }
- }
- });
- }
- var tmpAnimation = 0;
- $(".rotate-right").click(function(){
- var element = $(this).parent().nextAll('.js--image-preview');
- tmpAnimation = tmpAnimation + 90;
- let id= element[0].id.replace("img","")
- let _elementUrl=element.css("background-image");
- let data= _elementUrl.replace('url("','').replace('")','').toString();
- $({degrees: tmpAnimation - 90}).animate({degrees: tmpAnimation}, {
- duration: 200,
- step: function(now) {
- // element.css({
- // transform: 'rotate(' + now + 'deg)'
- // });
- }
- });
- rotateBase64ImageRight(data, element,id);
- });
- $(".rotate-left").click(function(){
- var element = $(this).parent().nextAll('.js--image-preview');
- tmpAnimation = tmpAnimation - 90;
- let id= element[0].id.replace("img","")
- let _elementUrl=element.css("background-image");
- let data= _elementUrl.replace('url("','').replace('")','').toString();
- $({degrees: tmpAnimation + 90}).animate({degrees: tmpAnimation}, {
- duration: 200,
- step: function(now) {
- // element.css({
- // transform: 'rotate(' + now + 'deg)'
- // });
- }
- });
- rotateBase64ImageLeft(data, element,id);
- });
- function rotateBase64ImageRight(base64data, element,id) {
- var canvas = document.getElementById("c");
- var ctx = canvas.getContext("2d");
- debugger;
- var image = new Image();
- image.src = base64data;
- image.onload = function() {
- debugger;
- canvas.height = image.width;
- canvas.width = image.height;
- // ctx.translate(image.width, image.height);
- // ctx.rotate(180 * Math.PI / 180);
- ctx.rotate(90 * Math.PI / 180);
- ctx.translate(0, -canvas.width);
- ctx.drawImage(image, 0, 0);
- callback(canvas.toDataURL(),id,element);
- };
- }
- function rotateBase64ImageLeft(base64data, element,id) {
- var canvas = document.getElementById("c");
- var ctx = canvas.getContext("2d");
- debugger;
- var image = new Image();
- image.src = base64data;
- image.onload = function() {
- debugger;
- canvas.height = image.width;
- canvas.width = image.height;
- // ctx.translate(image.width, image.height);
- // ctx.rotate(180 * Math.PI / 180);
- ctx.rotate(-90 * Math.PI / 180);
- ctx.translate(-canvas.height, 0);
- ctx.drawImage(image, 0, 0);
- callback(canvas.toDataURL(),id,element);
- };
- }
- function callback(base64data,i,element) {
- element.css({
- 'background-image': 'url("'+base64data + '")'
- });
- }
- function uploadPhoto(i) {
- var coverPhoto = false;
- var coverPhotoId= $('#coverPhotoId').val();
- if (i == coverPhotoId) {
- coverPhoto = true;
- }
- var val = $("#img" + i).css("background-image");
- if (val != null && val != "" && (val.startsWith('url(data:image')|| val.startsWith('url("data:image'))) {
- $.ajax({
- url: "/api/post/create/" + propId + "/image",
- data: JSON.stringify({ image: val, coverPhoto: coverPhoto }),
- type: "POST",
- dataType: "json",
- contentType: "application/json; charset=utf-8",
- success: function(data, response) {
- uploadPhoto(i + 1);
- },
- error: function(response, error) {
- $('.loader-wrapper').hide();
- alert(response + " " + error);
- }
- });
- } else if (i == 12) {
- $('.loader-wrapper').hide();
- $("#smartwizard").smartWizard("next");
- window.scrollTo(0, 0);
- $('.sw-btn-next').hide();
- $('#btnFinish').show();
- $('#btnFinish').removeClass( "disabledd" )
- } else {
- uploadPhoto(i + 1);
- }
- }
- });
- function checkIfTicked(tag) {
- var result = document.getElementById(tag).checked;
- return result;
- }
- function uploadListing(){
- var name = $("#propName").val();
- var type = $("#type").val();
- var owner = checkIfTicked("negotiable");
- var storeys = $("#storeys").val();
- var floor = $("#floor").val();
- var address = $("#address").val();
- var bathroom = $("#bathroom").val();
- var postcode = $("#postcode").val();
- var bedroom = $("#bedroom").val();
- var sqft = $("#sqft").val();
- var carpark = $("#carpark").val();
- var price = $("#price").val();
- var negotiable = checkIfTicked("negotiable");
- var fullyFurnishable = checkIfTicked("fullyFurnishable");
- var furnishes = [];
- var facilities = [];
- if (checkIfTicked("cbTv")) {
- furnishes.push("tv");
- }
- if (checkIfTicked("cbCurtain")) {
- furnishes.push("curtain");
- }
- if (checkIfTicked("cbMattress")) {
- furnishes.push("mattress");
- }
- if (checkIfTicked("cbWashingMachine")) {
- furnishes.push("washing_machine");
- }
- if (checkIfTicked("cbHood")) {
- furnishes.push("hood");
- }
- if (checkIfTicked("cbAc")) {
- furnishes.push("ac");
- }
- if (checkIfTicked("cbWaterHeater")) {
- furnishes.push("water_heater");
- }
- if (checkIfTicked("cbDiningTable")) {
- furnishes.push("dining_table");
- }
- if (checkIfTicked("cbWardrobe")) {
- furnishes.push("wardrobe");
- }
- if (checkIfTicked("cbKitchen")) {
- furnishes.push("kitchen_cabinet");
- }
- if (checkIfTicked("cbOven")) {
- furnishes.push("oven");
- }
- if (checkIfTicked("cbFridge")) {
- furnishes.push("fridge");
- }
- if (checkIfTicked("cbSofa")) {
- furnishes.push("sofa");
- }
- if (checkIfTicked("cbMicrowave")) {
- furnishes.push("microwave");
- }
- if (checkIfTicked("cbBedframe")) {
- furnishes.push("bed_frame");
- }
- if (checkIfTicked("cbInternet")) {
- furnishes.push("internet");
- }
- if (checkIfTicked("cbBbq")) {
- facilities.push("bbq");
- }
- if(checkIfTicked("cbCoveredParking"))
- {
- facilities.push("covered_parking");
- }
- if (checkIfTicked("cbGym")) {
- facilities.push("gym");
- }
- if (checkIfTicked("cbBasketball")) {
- facilities.push("basketball");
- }
- if (checkIfTicked("cbRestaurant")) {
- facilities.push("restaurant");
- }
- if (checkIfTicked("cbDobby")) {
- facilities.push("dobby");
- }
- if (checkIfTicked("cbNursery")) {
- facilities.push("nursery");
- }
- if (checkIfTicked("cbPlayground")) {
- facilities.push("playground");
- }
- if (checkIfTicked("cbSauna")) {
- facilities.push("sauna");
- }
- if (checkIfTicked("cbSwimmingPool")) {
- facilities.push("swimming");
- }
- if (checkIfTicked("cbTennis")) {
- facilities.push("tennis");
- }
- if (checkIfTicked("cbSecurity")) {
- facilities.push("security24hr");
- }
- if (checkIfTicked("cbMart")) {
- facilities.push("mart");
- }
- if (checkIfTicked("cbSquash")) {
- facilities.push("squash");
- }
- if (checkIfTicked("cbBadminton")) {
- facilities.push("badminton");
- }
- if (checkIfTicked("cbElevator")) {
- facilities.push("elevator");
- }
- var description = $("#description").val();
- var dateAvailable = $("#dateAvailable").val();
- if (dateAvailable == "") {
- alert("Please fill up your availability date");
- return;
- }
- $('.loader-wrapper').show();
- $.ajax({
- url: "/api/post/update",
- data: JSON.stringify({
- id: propId,
- description: description,
- availability: dateAvailable,
- petFriendly: checkIfTicked("cbPet"),
- allRaces: checkIfTicked("cbAllRace"),
- furnishes: furnishes,
- facilities: facilities
- }),
- type: "PUT",
- dataType: "json",
- contentType: "application/json; charset=utf-8",
- success: function(data, response) {
- $('.loader-wrapper').hide();
- //call track user
- trackUser();
- window.location.href =
- "[[${@urlHelper.format(language, '/post/gps/')}]]" +
- propRef;
- },
- error: function(response, error) {
- $('.loader-wrapper').hide();
- alert(response + " " + error);
- }
- });
- }
- function trackUser(){
- $.ajax({
- url: "/api/users/track",
- type: "POST",
- data: JSON.stringify({id:'Post_CreateProperty'}),
- contentType: "application/json; charset=utf-8",
- dataType: "json",
- success: function(data) {
- console.log("Tracking Success");
- }
- });
- }
- // Toolbar extra buttons
- var btnFinish = $('<button id="btnFinish"></button>').text('Finish')
- .addClass('btn btn-secondary sw-btn-next');
- $(document).ready(function() {
- // Smart Wizard initialize
- $("#smartwizard").smartWizard({
- selected: 0,
- theme: "dots",
- transitionEffect: "fade",
- showStepURLhash: false,
- anchorSettings: {
- markDoneStep: true, // add done css
- markAllPreviousStepsAsDone: true, // When a step selected by url hash, all previous steps are marked done
- removeDoneStepOnNavigateBack: true, // While navigate back done step after active step will be cleared
- enableAnchorOnDoneStep: true // Enable/Disable the done steps navigation
- },
- toolbarSettings: {
- toolbarPosition: "bottom",
- toolbarExtraButtons: [btnFinish]
- }
- });
- });
- if($('.btn-group').hasClass('sw-btn-group-extra')){
- $(this).parent().addClass('hide-prev-btn');
- }else{
- $(this).parent().removeClass('hide-prev-btn');
- }
- // External Button Events
- $("#reset-btn").on("click", function() {
- // Reset wizard
- $("#smartwizard").smartWizard("reset");
- return true;
- });
- $("#prev-btn").on("click", function() {
- // Navigate previous
- $("#smartwizard").smartWizard("prev");
- return true;
- });
- $("#next-btn").on("click", function() {
- // Navigate next
- $("#smartwizard").smartWizard("next");
- return true;
- });
- $("#theme_selector").on("change", function() {
- // Change theme
- $("#smartwizard").smartWizard("theme", $(this).val());
- return true;
- });
- $(document).ready(function() {
- setTimeout(function() {
- window.scrollTo(0, 0);
- }, 1);
- $('#btnFinish').hide();
- $("#btnFinish").click(function() {
- uploadListing();
- });
- });
- $(".progressbar li").each(function() {
- if (
- $(this)
- .next("li")
- .hasClass("done")
- ) {
- debugger;
- $(this).addClass("done");
- }
- });
- function isNormalInteger(str) {
- var n = Math.floor(Number(str));
- return n !== Infinity && String(n) === str && n > 0;
- }
- </script>
- <script th:inline="javascript">
- function setAsCoverPhoto(i){
- $('#coverPhotoId').val(i);
- var setCoverPhoto=/*[[#{button.set_cover_photo}]]*/;
- var coverPhoto=/*[[#{button.cover_photo}]]*/;
- for(var j=0; j<12; j++){
- if(i!=j)
- $('#setCoverPhotoBtn'+j).html(setCoverPhoto);
- else
- $('#setCoverPhotoBtn'+j).html(coverPhoto);
- }
- }
- </script>
- <canvas style='display: none' id="c"/>
- </body>
- </html>
Add Comment
Please, Sign In to add comment