From 42bbcd8b781b9232ae8a06553189347e93e9f614 Mon Sep 17 00:00:00 2001 From: Wade Wegner Date: Tue, 18 Oct 2016 20:47:50 -0700 Subject: [PATCH] Initial commit --- .gitignore | 10 + .project | 12 + .tern-project | 20 ++ Jenkinsfile | 72 +++++ Procfile | 6 + README.md | 18 ++ app-ci-apex-only.json | 26 ++ app-ci.json | 26 ++ app.json | 30 ++ bin/extra-org-setup.sh | 45 +++ bin/release | 38 +++ config/enterprise-scratch-def.json | 11 + .../unlimited-multicurrency-scratch-def.json | 12 + config/workspace-scratch-def.json | 10 + config/workspace-scratch-def.json.jim | 11 + data/brokers-data.json | 100 ++++++ data/properties-data.json | 256 +++++++++++++++ data/sample-data-plan.json | 16 + env-vars.sh | 16 + .../applications/DreamHouse.app-meta.xml | 15 + .../main/default/aura/Gallery/Gallery.cmp | 26 ++ .../main/default/aura/Gallery/Gallery.css | 34 ++ .../main/default/aura/Gallery/Gallery.design | 2 + .../default/aura/Gallery/GalleryController.js | 35 ++ .../default/aura/Gallery/GalleryHelper.js | 16 + .../default/aura/Gallery/aurabundle-meta.xml | 5 + .../IQPictureUploader/IQPictureUploader.cmp | 37 +++ .../IQPictureUploader/IQPictureUploader.css | 75 +++++ .../IQPictureUploaderController.js | 66 ++++ .../IQPictureUploader/aurabundle-meta.xml | 6 + force-app/main/default/aura/Map/Map.cmp | 23 ++ force-app/main/default/aura/Map/Map.css | 15 + force-app/main/default/aura/Map/Map.design | 2 + .../main/default/aura/Map/MapController.js | 20 ++ force-app/main/default/aura/Map/MapHelper.js | 22 ++ .../main/default/aura/Map/MapRenderer.js | 29 ++ .../main/default/aura/Map/aurabundle-meta.xml | 5 + .../PropertyExplorer/PropertyExplorer.cmp | 14 + .../PropertyExplorer/PropertyExplorer.css | 4 + .../PropertyExplorerController.js | 5 + .../aura/PropertyExplorer/aurabundle-meta.xml | 5 + .../PropertyExplorerApp.app | 5 + .../PropertyExplorerAppController.js | 5 + .../PropertyExplorerApp/aurabundle-meta.xml | 5 + .../aura/PropertyList/PropertyList.cmp | 26 ++ .../aura/PropertyList/PropertyList.css | 17 + .../PropertyList/PropertyListController.js | 25 ++ .../aura/PropertyList/PropertyListHelper.js | 20 ++ .../aura/PropertyList/aurabundle-meta.xml | 5 + .../PropertyListHeader/PropertyListHeader.cmp | 63 ++++ .../PropertyListHeader/aurabundle-meta.xml | 5 + .../PropertyListItem/PropertyListItem.cmp | 17 + .../PropertyListItem/PropertyListItem.css | 37 +++ .../PropertyListItemController.js | 10 + .../aura/PropertyListItem/aurabundle-meta.xml | 5 + .../PropertyPageChange/PropertyPageChange.evt | 3 + .../PropertyPageChange/aurabundle-meta.xml | 5 + .../PropertyPaginator/PropertyPaginator.cmp | 29 ++ .../PropertyPaginator/PropertyPaginator.css | 30 ++ .../PropertyPaginatorController.js | 12 + .../PropertyPaginator/aurabundle-meta.xml | 5 + .../PropertyPriceSelectionChange.evt | 4 + .../aurabundle-meta.xml | 5 + .../PropertyPriceSlider.cmp | 13 + .../PropertyPriceSlider.css | 24 ++ .../PropertyPriceSliderController.js | 31 ++ .../PropertyPriceSliderHelper.js | 7 + .../PropertyPriceSlider/aurabundle-meta.xml | 5 + .../PropertySearchBar/PropertySearchBar.cmp | 17 + .../PropertySearchBar/PropertySearchBar.css | 47 +++ .../PropertySearchBarController.js | 14 + .../PropertySearchBar/aurabundle-meta.xml | 5 + .../PropertySearchKeyChange.evt | 3 + .../aurabundle-meta.xml | 5 + .../main/default/aura/svg/aurabundle-meta.xml | 5 + force-app/main/default/aura/svg/svg.cmp | 5 + .../main/default/aura/svg/svgController.js | 5 + .../main/default/aura/svg/svgRenderer.js | 15 + .../default/classes/PropertyController.cls | 31 ++ .../classes/PropertyController.cls-meta.xml | 5 + .../default/classes/PropertyPagedResult.cls | 16 + .../classes/PropertyPagedResult.cls-meta.xml | 5 + .../Property_Record_Page.flexipage-meta.xml | 80 +++++ .../Broker__c-Broker Layout.layout-meta.xml | 97 ++++++ ...avorite__c-Favorite Layout.layout-meta.xml | 63 ++++ ...roperty__c-Property Layout.layout-meta.xml | 188 +++++++++++ .../default/objects/Broker__c.object-meta.xml | 135 ++++++++ .../main/default/objects/Case.object-meta.xml | 17 + .../objects/Favorite__c.object-meta.xml | 97 ++++++ .../objects/Property__c.object-meta.xml | 304 ++++++++++++++++++ force-app/main/default/pages/SmartHome.page | 269 ++++++++++++++++ .../default/pages/SmartHome.page-meta.xml | 7 + .../DreamHouse.permissionset-meta.xml | 242 ++++++++++++++ .../default/staticresources/SLDS100.resource | Bin 0 -> 89949 bytes .../staticresources/SLDS100.resource-meta.xml | 5 + .../SmartHomeVFP_styles.resource | 43 +++ .../SmartHomeVFP_styles.resource-meta.xml | 5 + .../default/staticresources/jquery.resource | 4 + .../staticresources/jquery.resource-meta.xml | 5 + .../default/staticresources/leaflet.resource | Bin 0 -> 102283 bytes .../staticresources/leaflet.resource-meta.xml | 5 + .../staticresources/nouislider.resource | Bin 0 -> 25325 bytes .../nouislider.resource-meta.xml | 5 + .../staticresources/smarthome.resource | Bin 0 -> 16986 bytes .../smarthome.resource-meta.xml | 5 + .../main/default/tabs/Broker__c.tab-meta.xml | 6 + .../tabs/Property_Explorer.tab-meta.xml | 7 + .../default/tabs/Property__c.tab-meta.xml | 6 + .../main/default/tabs/Smart_Home.tab-meta.xml | 7 + .../triggers/RejectDuplicateFavorite.trigger | 11 + .../RejectDuplicateFavorite.trigger-meta.xml | 5 + .../classes/PropertyControllerTest.cls | 30 ++ .../PropertyControllerTest.cls-meta.xml | 5 + .../classes/RejectDuplicateFavoriteTest.cls | 51 +++ .../RejectDuplicateFavoriteTest.cls-meta.xml | 5 + test/integration/BaseSalesforceTest.java | 95 ++++++ test/integration/IntegrationTest.java | 25 ++ test/test-runner-config.json | 142 ++++++++ test/test.sh | 21 ++ workspace-config.json | 5 + 120 files changed, 3789 insertions(+) create mode 100644 .gitignore create mode 100644 .project create mode 100644 .tern-project create mode 100644 Jenkinsfile create mode 100755 Procfile create mode 100644 README.md create mode 100644 app-ci-apex-only.json create mode 100644 app-ci.json create mode 100644 app.json create mode 100644 bin/extra-org-setup.sh create mode 100755 bin/release create mode 100644 config/enterprise-scratch-def.json create mode 100644 config/unlimited-multicurrency-scratch-def.json create mode 100644 config/workspace-scratch-def.json create mode 100644 config/workspace-scratch-def.json.jim create mode 100644 data/brokers-data.json create mode 100644 data/properties-data.json create mode 100644 data/sample-data-plan.json create mode 100755 env-vars.sh create mode 100755 force-app/main/default/applications/DreamHouse.app-meta.xml create mode 100755 force-app/main/default/aura/Gallery/Gallery.cmp create mode 100755 force-app/main/default/aura/Gallery/Gallery.css create mode 100755 force-app/main/default/aura/Gallery/Gallery.design create mode 100755 force-app/main/default/aura/Gallery/GalleryController.js create mode 100755 force-app/main/default/aura/Gallery/GalleryHelper.js create mode 100755 force-app/main/default/aura/Gallery/aurabundle-meta.xml create mode 100644 force-app/main/default/aura/IQPictureUploader/IQPictureUploader.cmp create mode 100644 force-app/main/default/aura/IQPictureUploader/IQPictureUploader.css create mode 100644 force-app/main/default/aura/IQPictureUploader/IQPictureUploaderController.js create mode 100644 force-app/main/default/aura/IQPictureUploader/aurabundle-meta.xml create mode 100755 force-app/main/default/aura/Map/Map.cmp create mode 100755 force-app/main/default/aura/Map/Map.css create mode 100755 force-app/main/default/aura/Map/Map.design create mode 100755 force-app/main/default/aura/Map/MapController.js create mode 100755 force-app/main/default/aura/Map/MapHelper.js create mode 100755 force-app/main/default/aura/Map/MapRenderer.js create mode 100755 force-app/main/default/aura/Map/aurabundle-meta.xml create mode 100755 force-app/main/default/aura/PropertyExplorer/PropertyExplorer.cmp create mode 100755 force-app/main/default/aura/PropertyExplorer/PropertyExplorer.css create mode 100755 force-app/main/default/aura/PropertyExplorer/PropertyExplorerController.js create mode 100755 force-app/main/default/aura/PropertyExplorer/aurabundle-meta.xml create mode 100755 force-app/main/default/aura/PropertyExplorerApp/PropertyExplorerApp.app create mode 100755 force-app/main/default/aura/PropertyExplorerApp/PropertyExplorerAppController.js create mode 100755 force-app/main/default/aura/PropertyExplorerApp/aurabundle-meta.xml create mode 100755 force-app/main/default/aura/PropertyList/PropertyList.cmp create mode 100755 force-app/main/default/aura/PropertyList/PropertyList.css create mode 100755 force-app/main/default/aura/PropertyList/PropertyListController.js create mode 100755 force-app/main/default/aura/PropertyList/PropertyListHelper.js create mode 100755 force-app/main/default/aura/PropertyList/aurabundle-meta.xml create mode 100755 force-app/main/default/aura/PropertyListHeader/PropertyListHeader.cmp create mode 100755 force-app/main/default/aura/PropertyListHeader/aurabundle-meta.xml create mode 100755 force-app/main/default/aura/PropertyListItem/PropertyListItem.cmp create mode 100755 force-app/main/default/aura/PropertyListItem/PropertyListItem.css create mode 100755 force-app/main/default/aura/PropertyListItem/PropertyListItemController.js create mode 100755 force-app/main/default/aura/PropertyListItem/aurabundle-meta.xml create mode 100755 force-app/main/default/aura/PropertyPageChange/PropertyPageChange.evt create mode 100755 force-app/main/default/aura/PropertyPageChange/aurabundle-meta.xml create mode 100755 force-app/main/default/aura/PropertyPaginator/PropertyPaginator.cmp create mode 100755 force-app/main/default/aura/PropertyPaginator/PropertyPaginator.css create mode 100755 force-app/main/default/aura/PropertyPaginator/PropertyPaginatorController.js create mode 100755 force-app/main/default/aura/PropertyPaginator/aurabundle-meta.xml create mode 100755 force-app/main/default/aura/PropertyPriceSelectionChange/PropertyPriceSelectionChange.evt create mode 100755 force-app/main/default/aura/PropertyPriceSelectionChange/aurabundle-meta.xml create mode 100755 force-app/main/default/aura/PropertyPriceSlider/PropertyPriceSlider.cmp create mode 100755 force-app/main/default/aura/PropertyPriceSlider/PropertyPriceSlider.css create mode 100755 force-app/main/default/aura/PropertyPriceSlider/PropertyPriceSliderController.js create mode 100755 force-app/main/default/aura/PropertyPriceSlider/PropertyPriceSliderHelper.js create mode 100755 force-app/main/default/aura/PropertyPriceSlider/aurabundle-meta.xml create mode 100755 force-app/main/default/aura/PropertySearchBar/PropertySearchBar.cmp create mode 100755 force-app/main/default/aura/PropertySearchBar/PropertySearchBar.css create mode 100755 force-app/main/default/aura/PropertySearchBar/PropertySearchBarController.js create mode 100755 force-app/main/default/aura/PropertySearchBar/aurabundle-meta.xml create mode 100755 force-app/main/default/aura/PropertySearchKeyChange/PropertySearchKeyChange.evt create mode 100755 force-app/main/default/aura/PropertySearchKeyChange/aurabundle-meta.xml create mode 100755 force-app/main/default/aura/svg/aurabundle-meta.xml create mode 100755 force-app/main/default/aura/svg/svg.cmp create mode 100755 force-app/main/default/aura/svg/svgController.js create mode 100755 force-app/main/default/aura/svg/svgRenderer.js create mode 100755 force-app/main/default/classes/PropertyController.cls create mode 100755 force-app/main/default/classes/PropertyController.cls-meta.xml create mode 100755 force-app/main/default/classes/PropertyPagedResult.cls create mode 100755 force-app/main/default/classes/PropertyPagedResult.cls-meta.xml create mode 100644 force-app/main/default/flexipages/Property_Record_Page.flexipage-meta.xml create mode 100755 force-app/main/default/layouts/Broker__c-Broker Layout.layout-meta.xml create mode 100755 force-app/main/default/layouts/Favorite__c-Favorite Layout.layout-meta.xml create mode 100755 force-app/main/default/layouts/Property__c-Property Layout.layout-meta.xml create mode 100755 force-app/main/default/objects/Broker__c.object-meta.xml create mode 100644 force-app/main/default/objects/Case.object-meta.xml create mode 100755 force-app/main/default/objects/Favorite__c.object-meta.xml create mode 100755 force-app/main/default/objects/Property__c.object-meta.xml create mode 100755 force-app/main/default/pages/SmartHome.page create mode 100755 force-app/main/default/pages/SmartHome.page-meta.xml create mode 100644 force-app/main/default/permissionsets/DreamHouse.permissionset-meta.xml create mode 100755 force-app/main/default/staticresources/SLDS100.resource create mode 100755 force-app/main/default/staticresources/SLDS100.resource-meta.xml create mode 100755 force-app/main/default/staticresources/SmartHomeVFP_styles.resource create mode 100755 force-app/main/default/staticresources/SmartHomeVFP_styles.resource-meta.xml create mode 100755 force-app/main/default/staticresources/jquery.resource create mode 100755 force-app/main/default/staticresources/jquery.resource-meta.xml create mode 100755 force-app/main/default/staticresources/leaflet.resource create mode 100755 force-app/main/default/staticresources/leaflet.resource-meta.xml create mode 100755 force-app/main/default/staticresources/nouislider.resource create mode 100755 force-app/main/default/staticresources/nouislider.resource-meta.xml create mode 100755 force-app/main/default/staticresources/smarthome.resource create mode 100755 force-app/main/default/staticresources/smarthome.resource-meta.xml create mode 100755 force-app/main/default/tabs/Broker__c.tab-meta.xml create mode 100755 force-app/main/default/tabs/Property_Explorer.tab-meta.xml create mode 100755 force-app/main/default/tabs/Property__c.tab-meta.xml create mode 100644 force-app/main/default/tabs/Smart_Home.tab-meta.xml create mode 100755 force-app/main/default/triggers/RejectDuplicateFavorite.trigger create mode 100755 force-app/main/default/triggers/RejectDuplicateFavorite.trigger-meta.xml create mode 100755 force-app/test/default/classes/PropertyControllerTest.cls create mode 100755 force-app/test/default/classes/PropertyControllerTest.cls-meta.xml create mode 100755 force-app/test/default/classes/RejectDuplicateFavoriteTest.cls create mode 100755 force-app/test/default/classes/RejectDuplicateFavoriteTest.cls-meta.xml create mode 100644 test/integration/BaseSalesforceTest.java create mode 100644 test/integration/IntegrationTest.java create mode 100644 test/test-runner-config.json create mode 100755 test/test.sh create mode 100644 workspace-config.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..97250dda --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +.DS_Store +.appcloud +.project +.salesforce +.settings +node_modules +.idea + +selenium-client-jars/ +testArtifacts/ \ No newline at end of file diff --git a/.project b/.project new file mode 100644 index 00000000..49e97890 --- /dev/null +++ b/.project @@ -0,0 +1,12 @@ + + + dreamhouse-devkeynote-sdx + + + + + + + mega.lightning.lightningNature + + diff --git a/.tern-project b/.tern-project new file mode 100644 index 00000000..b1336bd1 --- /dev/null +++ b/.tern-project @@ -0,0 +1,20 @@ +{ + "plugins": { + "guess-types": { + + }, + "outline": { + + }, + "doc_comment": { + + }, + "aura": { + "ide": true + } + }, + "libs": [ + "ecma5", + "browser" + ] +} \ No newline at end of file diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 00000000..8b4c9e5e --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,72 @@ +#!groovy +import groovy.json.JsonSlurperClassic +node { + + def SERIAL = System.currentTimeMillis() + def BRANCH = env.BRANCH_NAME.replaceAll(/[\/\\]/, '') + def BUILD_NUMBER=env.BUILD_NUMBER + def RUN_ARTIFACT_DIR="tests/${BUILD_NUMBER}" + def SFDC_USERNAME="ci-${BRANCH}-${SERIAL}-pr@dhci.com" + def CONNECTED_APP_CALLBACK_URL=env.CONNECTED_APP_CALLBACK_URL + def SIGN_UP_EMAIL=env.SIGN_UP_EMAIL + def API_VERSION=env.API_VERSION + + // Hard coding until pete can repair the damage + // def HUB_ORG=env.HUB_ORG_DH + // def HUB_KEY=env.HUB_KEY_FILE_PATH + // def SFDC_HOST = env.SFDC_HOST + // def CONNECTED_APP_CONSUMER_KEY=env.CONNECTED_APP_CONSUMER_KEY + def HUB_ORG="wade.wegner@acdxgs0hub.org" + def HUB_KEY="jenkins/server_adcxgs0hub.my.salesforce.com.key" + def SFDC_HOST="https://adcxgs0hub.my.salesforce.com" + def CONNECTED_APP_CONSUMER_KEY="3MVG9SemV5D80oBfPBCgboxuJ9df3F8MrzZxhqU5qeUb5MoRs.vuBNHRhhdMh2WDeh5cFiAXcv9z2PnZ7CScu" + + def toolbelt = tool 'toolbelt' + + stage('checkout source') { + // when running in multi-branch job, one must issue this command + checkout scm + } + + stage('Create Scratch Org') { + + rc = sh returnStatus: true, script: "${toolbelt}/sfdx force:org:authorize -i ${CONNECTED_APP_CONSUMER_KEY} -u ${HUB_ORG} -f ${HUB_KEY} -y debug" + if (rc != 0) { error 'hub org authorization failed' } + + // need to pull out assigned username + rmsg = sh returnStdout: true, script: "${toolbelt}/sfdx force:org:create -f config/workspace-scratch-def.json -j -t test -y debug" + printf rmsg + def jsonSlurper = new JsonSlurperClassic() + def robj = jsonSlurper.parseText(rmsg) + if (robj.status != "ok") { error 'org creation failed: ' + robj.message } + SFDC_USERNAME=robj.username + robj = null + + } + + stage('Push To Test Org') { + rc = sh returnStatus: true, script: "${toolbelt}/sfdx force:src:push --all --username ${SFDC_USERNAME} -y debug" + if (rc != 0) { + error 'push all failed' + } + // assign permset + rc = sh returnStatus: true, script: "${toolbelt}/sfdx force:permset:assign --username ${SFDC_USERNAME} --name DreamHouse -y debug" + if (rc != 0) { + error 'push all failed' + } + } + + stage('Run Apex Test') { + sh "mkdir -p ${RUN_ARTIFACT_DIR}" + timeout(time: 120, unit: 'SECONDS') { + rc = sh returnStatus: true, script: "${toolbelt}/sfdx force:apex:test --testlevel RunLocalTests --outputdir ${RUN_ARTIFACT_DIR} --reporter tap --username ${SFDC_USERNAME} -y debug" + if (rc != 0) { + error 'apex test run failed' + } + } + } + + stage('collect results') { + junit keepLongStdio: true, testResults: 'tests/**/*-junit.xml' + } +} diff --git a/Procfile b/Procfile new file mode 100755 index 00000000..2733dd0d --- /dev/null +++ b/Procfile @@ -0,0 +1,6 @@ +# Deploy source to SALESFORCE_URL org. +release: bin/release + +# Redirect all Heroku app domain requests to SALESFORCE_URL org. +# Defaults to /one/one.app, configurable via SALESFORCE_START_URL config var. +web: .salesforce/node/bin/node .salesforce/force.js redirect \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 00000000..a0d7eb50 --- /dev/null +++ b/README.md @@ -0,0 +1,18 @@ +#DreamHouse Developer Keynote Demo + +[![Deploy on Heroku](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy) + +### Source-based deploy + +On the command line: + +```bash +git clone https://github.com/heroku/dreamhouse-deveynote-sdx +cd dreamhouse-sdx + +heroku create +heroku addons:create salesforce +heroku buildpacks:add -i 1 https://github.com/heroku/salesforce-buildpack.git + +git push heroku master +``` diff --git a/app-ci-apex-only.json b/app-ci-apex-only.json new file mode 100644 index 00000000..73bd292c --- /dev/null +++ b/app-ci-apex-only.json @@ -0,0 +1,26 @@ +{ + "name": "sfdx-simple", + "description": "Simple Salesforce Developer Experience Force.com Applicaiton demonstrating Force.com and Heroku Integration", + "repository": "https://github.com/forcedotcom/simple-sfdx", + "logo": "https://avatars0.githubusercontent.com/u/464563?v=3&s=200", + "addons": [ + "salesforce", + "salesforcedx", + "force.com", + "heroku" + ], + "addons": [ + "salesforce" + ], + "buildpacks": [ + { + "url": "https://github.com/heroku/salesforce-buildpack" + } + ], + "scripts": { + "test-setup": "node .salesforce/force.js release", + "test": "heroku force:apex:test --reporter tap" + }, + "env": { + } +} diff --git a/app-ci.json b/app-ci.json new file mode 100644 index 00000000..d463341a --- /dev/null +++ b/app-ci.json @@ -0,0 +1,26 @@ +{ + "name": "Dreamhouse Salesforce DX Demo", + "description": "Dreamforce Force.com Application demonstrating Salesforce DX and Heroku Integration", + "repository": "https://github.com/forcedotcom/dreamhouse-devkeynote-sdx", + "logo": "https://avatars0.githubusercontent.com/u/464563?v=3&s=200", + "keywords": [ + "salesforce", + "salesforcedx", + "force.com", + "heroku" + ], + "addons": [ + "salesforce" + ], + "buildpacks": [ + { + "url": "https://github.com/heroku/salesforce-buildpack" + } + ], + "scripts": { + "test-setup": "node .salesforce/force.js release", + "test": "test/test.sh" + }, + "env": { + } +} diff --git a/app.json b/app.json new file mode 100644 index 00000000..ad4e29ac --- /dev/null +++ b/app.json @@ -0,0 +1,30 @@ +{ + "name": "Dreamhouse Salesforce DX Demo", + "description": "Dreamforce Force.com Application demonstrating Salesforce DX and Heroku Integration", + "repository": "https://github.com/forcedotcom/dreamhouse-devkeynote-sdx", + "logo": "https://avatars0.githubusercontent.com/u/464563?v=3&s=200", + "keywords": [ + "salesforce", + "salesforcedx", + "force.com", + "heroku" + ], + "addons": [ + "salesforce" + ], + "buildpacks": [ + { + "url": "https://github.com/heroku/salesforce-buildpack" + } + ], + "env": { + "HEROKU_APP_NAME": { + "description": "Provided to buildpacks by the Heroku platform when required:true. Need for Pipelines stage-awareness.", + "required": true + }, + "SALESFORCE_HUB_URL": { + "description": "Required for Review apps to create orgs", + "required": true + } + } +} diff --git a/bin/extra-org-setup.sh b/bin/extra-org-setup.sh new file mode 100644 index 00000000..08b19f81 --- /dev/null +++ b/bin/extra-org-setup.sh @@ -0,0 +1,45 @@ +#!/usr/bin/env bash + +## +# Performs additional setup on Dreamhouse org. +# +# This script: +# - Enables Dreamhouse PermissionSet on configured workspace, +# - Loads sample data. +# +# Requires Heroku CLI and AppCloud and Force.com CLI +# plugins which are installed by Salesforce Buildpack. +## + +# Debug, echo every command +#set -x + + +SCRATCH_ORG=org@salesforce.com +HEROKU_CLIENT=heroku + +runCmd() { + local cmnd="$*" + local ret_code + + echo $cmnd + eval $cmnd + ret_code=$? + if [ $ret_code != 0 ]; then + printf "Error : [%d] when executing command: '$cmnd'" $ret_code + exit $ret_code + fi +} + +# Set perms on apps and objects +echo "Enabling Dreamhouse PermissionSet for App and SObject visibility..." +runCmd "$HEROKU_CLIENT force:permset:assign --name DreamHouse" + + +if [ "$LOAD_DATA" != false ]; then + # Load the Properties, Favorites, & Brokers into the Salesforce org + echo "Loading Dreamhouse data..." + runCmd "$HEROKU_CLIENT force:data:import --plan data/sample-data-plan.json" +fi + +exit 0 diff --git a/bin/release b/bin/release new file mode 100755 index 00000000..1ebe7ec9 --- /dev/null +++ b/bin/release @@ -0,0 +1,38 @@ +#!/usr/bin/env bash + +## +# Script called in release phase of Heroku app deployment. +# +# This script: +# - Deploys Force.com source to workspace org, +# - Installs AppCloud and Force.com CLI plugins, +# - +# +# Assumes Heroku CLI already installed. +## + +START_TIME=$SECONDS + +# Fail immediately on non-zero exit code. +set -e +# Fail immediately on non-zero exit code within a pipeline. +set -o pipefail +# Fail on undeclared variables. +set -u +# Debug, echo every command +#set -x + +SCRIPT_DIR="$( cd "$( dirname "$0" )" && pwd )" + +# Pushes source to the Salesforce org +node .salesforce/force.js release + +# Set a password for the admin user and write it out to the log +#npm run set-org-password + +# Perform extra org setup +chmod +x $SCRIPT_DIR/extra-org-setup.sh +sh $SCRIPT_DIR/extra-org-setup.sh + +echo "DONE! Completed in $(($SECONDS - $START_TIME))s" +exit 0 diff --git a/config/enterprise-scratch-def.json b/config/enterprise-scratch-def.json new file mode 100644 index 00000000..7b8c9c59 --- /dev/null +++ b/config/enterprise-scratch-def.json @@ -0,0 +1,11 @@ +{ + "Company": "ACME Org", + "Country": "US", + "LastName": "Wegner", + "Email": "wade.wegner@salesforce.com", + "Edition": "Enterprise", + "OrgPreferences" : { + "S1DesktopEnabled" : true, + "ChatterEnabled" : false + } +} diff --git a/config/unlimited-multicurrency-scratch-def.json b/config/unlimited-multicurrency-scratch-def.json new file mode 100644 index 00000000..d08718a2 --- /dev/null +++ b/config/unlimited-multicurrency-scratch-def.json @@ -0,0 +1,12 @@ +{ + "Company": "ACME Org", + "Country": "US", + "LastName": "Wegner", + "Email": "wade.wegner@salesforce.com", + "Edition": "Unlimited", + "Features": "Multicurrency", + "OrgPreferences" : { + "ChatterEnabled" : false, + "IsOrdersEnabled" : true + } +} diff --git a/config/workspace-scratch-def.json b/config/workspace-scratch-def.json new file mode 100644 index 00000000..0f07045f --- /dev/null +++ b/config/workspace-scratch-def.json @@ -0,0 +1,10 @@ +{ + "Company": "ACME Org", + "Country": "US", + "LastName": "Wegner", + "Email": "wade.wegner@salesforce.com", + "TemplateId": "0TTB0000000A6Bd", + "OrgPreferences" : { + "S1DesktopEnabled" : true + } +} diff --git a/config/workspace-scratch-def.json.jim b/config/workspace-scratch-def.json.jim new file mode 100644 index 00000000..0f0722c3 --- /dev/null +++ b/config/workspace-scratch-def.json.jim @@ -0,0 +1,11 @@ +{ + "Company": "ACME Org", + "Country": "US", + "LastName": "Wegner", + "Email": "wade.wegner@salesforce.com", + "Edition": "Enterprise", + "OrgPreferences" : { + “ChatterEnabled” : false, + "IsOrdersEnabled" : true + } +} diff --git a/data/brokers-data.json b/data/brokers-data.json new file mode 100644 index 00000000..46a82418 --- /dev/null +++ b/data/brokers-data.json @@ -0,0 +1,100 @@ +{ + "records": [ + { + "attributes": { + "type": "Broker__c", + "referenceId": "CarolineBrookerRef" + }, + "name": "Caroline Kingsley", + "Title__c": "Senior Broker", + "Phone__c": "617-244-3672", + "Mobile_Phone__c": "617-244-3672", + "Email__c": "caroline@dreamhouse.demo", + "Picture__c": "https://s3-us-west-1.amazonaws.com/sfdc-demo/people/caroline_kingsley.jpg" + }, + { + "attributes": { + "type": "Broker__c", + "referenceId": "MichaelJonesRef" + }, + "name": "Michael Jones", + "Title__c": "Senior Broker", + "Phone__c": "617-244-3672", + "Mobile_Phone__c": "617-244-3672", + "Email__c": "michael@dreamhouse.demo", + "Picture__c": "https://s3-us-west-1.amazonaws.com/sfdc-demo/people/michael_jones.jpg" + }, + { + "attributes": { + "type": "Broker__c", + "referenceId": "JonathanBradleyRef" + }, + "name": "Jonathan Bradley", + "Title__c": "Senior Broker", + "Phone__c": "617-244-3672", + "Mobile_Phone__c": "617-244-3672", + "Email__c": "jonathan@dreamhouse.demo", + "Picture__c": "https://s3-us-west-1.amazonaws.com/sfdc-demo/people/jonathan_bradley.jpg" + }, + { + "attributes": { + "type": "Broker__c", + "referenceId": "JenniferWuRef" + }, + "name": "Jennifer Wu", + "Title__c": "Senior Broker", + "Phone__c": "617-244-3672", + "Mobile_Phone__c": "617-244-3672", + "Email__c": "jen@dreamhouse.demo", + "Picture__c": "https://s3-us-west-1.amazonaws.com/sfdc-demo/people/jennifer_wu.jpg" + }, + { + "attributes": { + "type": "Broker__c", + "referenceId": "OliviaGreenRef" + }, + "name": "Olivia Green", + "Title__c": "Senior Broker", + "Phone__c": "617-244-3672", + "Mobile_Phone__c": "617-244-3672", + "Email__c": "olivia@dreamhouse.demo", + "Picture__c": "https://s3-us-west-1.amazonaws.com/sfdc-demo/people/olivia_green.jpg" + }, + { + "attributes": { + "type": "Broker__c", + "referenceId": "MiriamAupontRef" + }, + "name": "Miriam Aupont", + "Title__c": "Senior Broker", + "Phone__c": "617-244-3672", + "Mobile_Phone__c": "617-244-3672", + "Email__c": "miriam@dreamhouse.demo", + "Picture__c": "https://s3-us-west-1.amazonaws.com/sfdc-demo/people/miriam_aupont.jpg" + }, + { + "attributes": { + "type": "Broker__c", + "referenceId": "MichelleLambertRef" + }, + "name": "Michelle Lambert", + "Title__c": "Senior Broker", + "Phone__c": "617-244-3672", + "Mobile_Phone__c": "617-244-3672", + "Email__c": "michelle@dreamhouse.demo", + "Picture__c": "https://s3-us-west-1.amazonaws.com/sfdc-demo/people/michelle_lambert.jpg" + }, + { + "attributes": { + "type": "Broker__c", + "referenceId": "SeniorBrokerRef" + }, + "name": "Victor Ochoa", + "Title__c": "Senior Broker", + "Phone__c": "617-244-3672", + "Mobile_Phone__c": "617-244-3672", + "Email__c": "victor@dreamhouse.demo", + "Picture__c": "https://s3-us-west-1.amazonaws.com/sfdc-demo/people/victor_ochoa.jpg" + } + ] +} diff --git a/data/properties-data.json b/data/properties-data.json new file mode 100644 index 00000000..7e09177d --- /dev/null +++ b/data/properties-data.json @@ -0,0 +1,256 @@ +{ + "records": [ + { + "attributes": { + "type": "Property__c", + "referenceId": "18HenryStRef" + }, + "Name": "Stunning Victorian", + "Address__c": "18 Henry St", + "City__c": "Cambridge", + "State__c": "MA", + "Zip__c": "01742", + "Price__c": 975000, + "Title__c": "Stunning Victorian", + "Beds__c": 4, + "Baths__c": 3, + "Location__Longitude__s": -71.11095, + "Location__Latitude__s": 42.35663, + "Picture__c": "https://s3-us-west-1.amazonaws.com/sfdc-demo/realty/house01.jpg", + "Thumbnail__c": "https://s3-us-west-1.amazonaws.com/sfdc-demo/realty/house01sq.jpg", + "Description__c": "Lorem ipsum dolor sit amet", + "Broker__c": "@CarolineBrookerRef" + }, + { + "attributes": { + "type": "Property__c", + "referenceId": "24PearlStRef" + }, + "Name": "Ultimate Sophistication", + "Address__c": "24 Pearl St", + "City__c": "Cambridge", + "State__c": "MA", + "Zip__c": "02420", + "Price__c": 1200000, + "Title__c": "Ultimate Sophistication", + "Beds__c": 5, + "Baths__c": 4, + "Location__Longitude__s": -71.10869, + "Location__Latitude__s": 42.359103, + "Picture__c": "https://s3-us-west-1.amazonaws.com/sfdc-demo/realty/house02.jpg", + "Thumbnail__c": "https://s3-us-west-1.amazonaws.com/sfdc-demo/realty/house02sq.jpg", + "Description__c": "Lorem ipsum dolor sit amet", + "Broker__c": "@MichaelJonesRef" + }, + { + "attributes": { + "type": "Property__c", + "referenceId": "72FrancisStRef" + }, + "Name": "Modern City Living", + "Address__c": "72 Francis st", + "City__c": "Boston", + "State__c": "MA", + "Zip__c": "02420", + "Price__c": 825000, + "Title__c": "Modern City Living", + "Beds__c": 5, + "Baths__c": 4, + "Location__Longitude__s": -71.106827, + "Location__Latitude__s": 42.335435, + "Picture__c": "https://s3-us-west-1.amazonaws.com/sfdc-demo/realty/house03.jpg", + "Thumbnail__c": "https://s3-us-west-1.amazonaws.com/sfdc-demo/realty/house03sq.jpg", + "Description__c": "Lorem ipsum dolor sit amet", + "Broker__c": "@JenniferWuRef" + }, + { + "attributes": { + "type": "Property__c", + "referenceId": "32PrinceStRef" + }, + "Name": "Stunning Colonial", + "Address__c": "32 Prince st", + "City__c": "Cambridge", + "State__c": "MA", + "Zip__c": "02420", + "Price__c": 930000, + "Title__c": "Stunning Colonial", + "Beds__c": 5, + "Baths__c": 4, + "Location__Longitude__s": -71.110448, + "Location__Latitude__s": 42.360642, + "Picture__c": "https://s3-us-west-1.amazonaws.com/sfdc-demo/realty/house04.jpg", + "Thumbnail__c": "https://s3-us-west-1.amazonaws.com/sfdc-demo/realty/house04sq.jpg", + "Description__c": "Lorem ipsum dolor sit amet", + "Broker__c": "@JenniferWuRef" + }, + { + "attributes": { + "type": "Property__c", + "referenceId": "110BaxterStRef" + }, + "Name": "Waterfront in the City", + "Address__c": "110 Baxter Street", + "City__c": "Boston", + "State__c": "MA", + "Zip__c": "02420", + "Price__c": 850000, + "Title__c": "Waterfront in the City", + "Beds__c": 3, + "Baths__c": 2, + "Location__Longitude__s": -71.053943, + "Location__Latitude__s": 42.372486, + "Picture__c": "https://s3-us-west-1.amazonaws.com/sfdc-demo/realty/house05.jpg", + "Thumbnail__c": "https://s3-us-west-1.amazonaws.com/sfdc-demo/realty/house05sq.jpg", + "Description__c": "Lorem ipsum dolor sit amet", + "Broker__c": "@OliviaGreenRef" + }, + { + "attributes": { + "type": "Property__c", + "referenceId": "448HanoverStRef" + }, + "Name": "Quiet Retreat", + "Address__c": "448 Hanover St", + "City__c": "Boston", + "State__c": "MA", + "Zip__c": "02420", + "Price__c": 725000, + "Title__c": "Quiet Retreat", + "Beds__c": 4, + "Baths__c": 2, + "Location__Longitude__s": -71.052617, + "Location__Latitude__s": 42.366855, + "Picture__c": "https://s3-us-west-1.amazonaws.com/sfdc-demo/realty/house06.jpg", + "Thumbnail__c": "https://s3-us-west-1.amazonaws.com/sfdc-demo/realty/house06sq.jpg", + "Description__c": "Lorem ipsum dolor sit amet", + "Broker__c": "@MiriamAupontRef" + }, + { + "attributes": { + "type": "Property__c", + "referenceId": "127EndicottStRef" + }, + "Name": "City Living", + "Address__c": "127 Endicott St", + "City__c": "Boston", + "State__c": "MA", + "Zip__c": "02420", + "Price__c": 450000, + "Title__c": "City Living", + "Beds__c": 3, + "Baths__c": 1, + "Location__Longitude__s": -71.057352, + "Location__Latitude__s": 42.365003, + "Picture__c": "https://s3-us-west-1.amazonaws.com/sfdc-demo/realty/house07.jpg", + "Thumbnail__c": "https://s3-us-west-1.amazonaws.com/sfdc-demo/realty/house07sq.jpg", + "Description__c": "Lorem ipsum dolor sit amet", + "Broker__c": "@MichelleLambertRef" + }, + { + "attributes": { + "type": "Property__c", + "referenceId": "48BrattleStRef" + }, + "Name": "Heart of Harvard Square", + "Address__c": "48 Brattle st", + "City__c": "Cambridge", + "State__c": "MA", + "Zip__c": "02420", + "Price__c": 450000, + "Title__c": "Heart of Harvard Square", + "Beds__c": 5, + "Baths__c": 4, + "Location__Longitude__s": -71.121653, + "Location__Latitude__s": 42.374117, + "Picture__c": "https://s3-us-west-1.amazonaws.com/sfdc-demo/realty/house10.jpg", + "Thumbnail__c": "https://s3-us-west-1.amazonaws.com/sfdc-demo/realty/house10sq.jpg", + "Description__c": "Lorem ipsum dolor sit amet", + "Broker__c": "@SeniorBrokerRef" + }, + { + "attributes": { + "type": "Property__c", + "referenceId": "121HarborwalkRef" + }, + "Name": "Seaport District Retreat", + "Address__c": "121 Harborwalk", + "City__c": "Boston", + "State__c": "MA", + "Zip__c": "02420", + "Price__c": 450000, + "Title__c": "Seaport District Retreat", + "Beds__c": 3, + "Baths__c": 3, + "Location__Longitude__s": -71.049327, + "Location__Latitude__s": 42.35695, + "Picture__c": "https://s3-us-west-1.amazonaws.com/sfdc-demo/realty/house09.jpg", + "Thumbnail__c": "https://s3-us-west-1.amazonaws.com/sfdc-demo/realty/house09sq.jpg", + "Description__c": "Lorem ipsum dolor sit amet", + "Broker__c": "@CarolineBrookerRef" + }, + { + "attributes": { + "type": "Property__c", + "referenceId": "640HarrisonAveRef" + }, + "Name": "City Living", + "Address__c": "640 Harrison Ave", + "City__c": "Boston", + "State__c": "MA", + "Zip__c": "02420", + "Price__c": 650000, + "Title__c": "City Living", + "Beds__c": 2, + "Baths__c": 2, + "Location__Longitude__s": -71.068781, + "Location__Latitude__s": 42.339892, + "Picture__c": "https://s3-us-west-1.amazonaws.com/sfdc-demo/realty/house08.jpg", + "Thumbnail__c": "https://s3-us-west-1.amazonaws.com/sfdc-demo/realty/house08sq.jpg", + "Description__c": "Lorem ipsum dolor sit amet", + "Broker__c": "@MichaelJonesRef" + }, + { + "attributes": { + "type": "Property__c", + "referenceId": "95GloucesterStRef" + }, + "Name": "Architectural Details", + "Address__c": "95 Gloucester St", + "City__c": "Boston", + "State__c": "MA", + "Zip__c": "02420", + "Price__c": 690000, + "Title__c": "Architectural Details", + "Beds__c": 3, + "Baths__c": 3, + "Location__Latitude__s": 42.349693, + "Location__Longitude__s": -71.084407, + "Picture__c": "https://s3-us-west-1.amazonaws.com/sfdc-demo/realty/house11.jpg", + "Thumbnail__c": "https://s3-us-west-1.amazonaws.com/sfdc-demo/realty/house11sq.jpg", + "Description__c": "Lorem ipsum dolor sit amet", + "Broker__c": "@CarolineBrookerRef" + }, + { + "attributes": { + "type": "Property__c", + "referenceId": "145CommonwealthAveRef" + }, + "Name": "Contemporary Luxury", + "Address__c": "145 Commonwealth Ave", + "City__c": "Boston", + "State__c": "MA", + "Zip__c": "02420", + "Price__c": 845000, + "Title__c": "Contemporary Luxury", + "Beds__c": 4, + "Baths__c": 3, + "Location__Latitude__s": 42.352466, + "Location__Longitude__s": -71.075311, + "Picture__c": "https://s3-us-west-1.amazonaws.com/sfdc-demo/realty/house12.jpg", + "Thumbnail__c": "https://s3-us-west-1.amazonaws.com/sfdc-demo/realty/house12sq.jpg", + "Description__c": "Lorem ipsum dolor sit amet", + "Broker__c": "@MichaelJonesRef" + } + ] +} diff --git a/data/sample-data-plan.json b/data/sample-data-plan.json new file mode 100644 index 00000000..871d0374 --- /dev/null +++ b/data/sample-data-plan.json @@ -0,0 +1,16 @@ +[ + { + "sobject": "Broker__c", + "saveRefs": true, + "files": [ + "brokers-data.json" + ] + }, + { + "sobject": "Property__c", + "resolveRefs": true, + "files": [ + "properties-data.json" + ] + } +] diff --git a/env-vars.sh b/env-vars.sh new file mode 100755 index 00000000..42b5d635 --- /dev/null +++ b/env-vars.sh @@ -0,0 +1,16 @@ +heroku config:set HEROKU_APP_NAME=dreamhouse-devkeynote-sdx --app dreamhouse-dev-sdx + +heroku config:set SALESFORCE_BUILDPACK_VERBOSE=true --app dreamhouse-dev-sdx + +heroku config:set SALESFORCE_BYOO=true --app dreamhouse-dev-sdx + +heroku config:set SALESFORCE_HUB_URL=force://3MVG9SemV5D80oBfPBCgboxuJ9df3F8MrzZxhqU5qeUb5MoRs.vuBNHRhhdMh2WDeh5cFiAXcv9z2PnZ7CScu:7278165525231799669:5Aep8614XGwzVzzTO6qBJOvmrMfeAZ4Sc3uO0RDrLGdXsjdUptJNEncPW1UWhP9ETgwIKtxUjgG4cFovYohFrnr@adcxgs0hub.my.salesforce.com --app dreamhouse-dev-sdx + + +heroku config:set HEROKU_APP_NAME=dreamhouse-devkeynote-sdx-staging --app dreamhouse-dev-sdx-staging + +heroku config:set SALESFORCE_BUILDPACK_VERBOSE=true --app dreamhouse-dev-sdx-staging + +heroku config:set SALESFORCE_BYOO=true --app dreamhouse-dev-sdx-staging + +heroku config:set SALESFORCE_HUB_URL=force://3MVG9SemV5D80oBfPBCgboxuJ9df3F8MrzZxhqU5qeUb5MoRs.vuBNHRhhdMh2WDeh5cFiAXcv9z2PnZ7CScu:7278165525231799669:5Aep8614XGwzVzzTO6qBJOvmrMfeAZ4Sc3uO0RDrLGdXsjdUptJNEncPW1UWhP9ETgwIKtxUjgG4cFovYohFrnr@adcxgs0hub.my.salesforce.com --app dreamhouse-dev-sdx-staging \ No newline at end of file diff --git a/force-app/main/default/applications/DreamHouse.app-meta.xml b/force-app/main/default/applications/DreamHouse.app-meta.xml new file mode 100755 index 00000000..c18a575d --- /dev/null +++ b/force-app/main/default/applications/DreamHouse.app-meta.xml @@ -0,0 +1,15 @@ + + + standard-home + DreamHouse helps you connect with your Customers in a whole new way. + + + + Property__c + Broker__c + Property_Explorer + diff --git a/force-app/main/default/aura/Gallery/Gallery.cmp b/force-app/main/default/aura/Gallery/Gallery.cmp new file mode 100755 index 00000000..f0fcbe96 --- /dev/null +++ b/force-app/main/default/aura/Gallery/Gallery.cmp @@ -0,0 +1,26 @@ + + + + + + + + + +
+

Picture Gallery

+
+
+ +
Drag pictures here
+
+ +
+
+ +
\ No newline at end of file diff --git a/force-app/main/default/aura/Gallery/Gallery.css b/force-app/main/default/aura/Gallery/Gallery.css new file mode 100755 index 00000000..e05786a0 --- /dev/null +++ b/force-app/main/default/aura/Gallery/Gallery.css @@ -0,0 +1,34 @@ +.THIS h2 { + font-size: 1.125rem; + line-height: 1; + padding: 1rem 0; +} + +.THIS>div { + width: 100%; + min-height: 250px; + text-align: center; + position: relative; +} + +.THIS .placeholder { + padding-top: 50px; + position: absolute; + text-align: center; + color: #DFDFDF; + width: 100%; +} + +.THIS .placeholder>img { + margin-bottom: 4px; +} + + +.THIS>div>div { + position:absolute; +} + +.THIS .gallery>img { + width:100%; + margin-bottom: 4px; +} \ No newline at end of file diff --git a/force-app/main/default/aura/Gallery/Gallery.design b/force-app/main/default/aura/Gallery/Gallery.design new file mode 100755 index 00000000..648ee445 --- /dev/null +++ b/force-app/main/default/aura/Gallery/Gallery.design @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/force-app/main/default/aura/Gallery/GalleryController.js b/force-app/main/default/aura/Gallery/GalleryController.js new file mode 100755 index 00000000..2cb91db0 --- /dev/null +++ b/force-app/main/default/aura/Gallery/GalleryController.js @@ -0,0 +1,35 @@ +({ + onInit: function(component) { + component.set("v.pictures", []); + }, + + onDragOver: function(component, event) { + event.preventDefault(); + }, + + onDrop: function(component, event) { + + event.stopPropagation(); + event.preventDefault(); + event.dataTransfer.dropEffect = 'copy'; + + var files = event.dataTransfer.files; + + for (var i=0; i + + 36.0 + A Lightning Component Bundle + \ No newline at end of file diff --git a/force-app/main/default/aura/IQPictureUploader/IQPictureUploader.cmp b/force-app/main/default/aura/IQPictureUploader/IQPictureUploader.cmp new file mode 100644 index 00000000..9697ef07 --- /dev/null +++ b/force-app/main/default/aura/IQPictureUploader/IQPictureUploader.cmp @@ -0,0 +1,37 @@ + + + + + + + + + + + + IQ Picture Uploader + +
+
+ +
Drag house picture here
+
+ +
+
+ +
\ No newline at end of file diff --git a/force-app/main/default/aura/IQPictureUploader/IQPictureUploader.css b/force-app/main/default/aura/IQPictureUploader/IQPictureUploader.css new file mode 100644 index 00000000..5834c121 --- /dev/null +++ b/force-app/main/default/aura/IQPictureUploader/IQPictureUploader.css @@ -0,0 +1,75 @@ +.THIS { + background-color: #FFFFFF; + /*min-height: 450px;*/ +} + +.THIS .slds-card__header { + padding-left: 1rem; + padding-top: 28px; +} + +.THIS .slds-card__body { + padding: 12px; +} + +.THIS .drop-target { + width: 100%; + min-height: 250px; + text-align: center; + position: relative; +} + +.THIS .placeholder { + padding-top: 50px; + position: absolute; + text-align: center; + color: rgb(216, 221, 230); + width: 100%; + font-size:14px; + font-weight: 300; +} + +.THIS .placeholder svg { + fill: rgb(216, 221, 230); +} + +.THIS .placeholder>img { + position:absolute; + margin-bottom: 4px; +} + +.THIS .gallery>img { + position:absolute; + width:100%; + margin-bottom: 4px; +} + +.THIS .img-wrapper { + position: relative; + overflow: hidden; + margin-bottom: 12px; +} + +.THIS .scanner { + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + opacity: .5; + background-color: #FF0000; + z-index: 10; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + transition: all 2s ease-in-out; +} + +.THIS .slds-pill { + padding: 6px 4px 4px 4px; + border-radius: 2px; +} + +.THIS .scanner.on { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(110%, 0, 0); +} \ No newline at end of file diff --git a/force-app/main/default/aura/IQPictureUploader/IQPictureUploaderController.js b/force-app/main/default/aura/IQPictureUploader/IQPictureUploaderController.js new file mode 100644 index 00000000..8f154e2d --- /dev/null +++ b/force-app/main/default/aura/IQPictureUploader/IQPictureUploaderController.js @@ -0,0 +1,66 @@ +({ + onInit: function(component) { + + }, + + onDragOver: function(component, event) { + event.preventDefault(); + }, + + onDrop: function(component, event) { + + event.stopPropagation(); + event.preventDefault(); + event.dataTransfer.dropEffect = 'copy'; + + var file = event.dataTransfer.files[0]; + if (file.type.match(/(image.*)/)) { + var reader = new FileReader(); + reader.onloadend = function(e) { + var dataURL = e.target.result; + component.set("v.pictureURL", dataURL); + + //helper.upload(component, file, dataURL.match(/,(.*)$/)[1]); + }; + component.set("v.tags", []); + reader.readAsDataURL(file); + } + + }, + + removeTag: function(component, event) { + console.log("removetag"); + var index = event.currentTarget.dataset.index; + console.log(index); + var tags = component.get("v.tags"); + tags.splice(index, 1); + component.set("v.tags", tags); + }, + + imgLoadedHandler: function(component, event) { + console.log("onload"); + var scanner = component.find('scanner'); + console.log(scanner); + window.setTimeout( + $A.getCallback(function() { + if (component.isValid()) { + $A.util.addClass(scanner, 'on'); + window.setTimeout( + $A.getCallback(function() { + $A.util.removeClass(scanner, 'on'); + window.setTimeout( + $A.getCallback(function() { + if (component.isValid()) { + var tags = ["Colonial", "Two car garage", "Driveway", "Front Yard"]; + component.set("v.tags", tags); + } + }), 3200 + ); + }), 3200 + ); + } + }), 750 + ); + } + +}) \ No newline at end of file diff --git a/force-app/main/default/aura/IQPictureUploader/aurabundle-meta.xml b/force-app/main/default/aura/IQPictureUploader/aurabundle-meta.xml new file mode 100644 index 00000000..6920a972 --- /dev/null +++ b/force-app/main/default/aura/IQPictureUploader/aurabundle-meta.xml @@ -0,0 +1,6 @@ + + + 38.0 + A Lightning Component Bundle + Component + \ No newline at end of file diff --git a/force-app/main/default/aura/Map/Map.cmp b/force-app/main/default/aura/Map/Map.cmp new file mode 100755 index 00000000..09d49729 --- /dev/null +++ b/force-app/main/default/aura/Map/Map.cmp @@ -0,0 +1,23 @@ + + + + + + + + + + + + +
+

Location

+
+ Open in Google Maps +
+ +
\ No newline at end of file diff --git a/force-app/main/default/aura/Map/Map.css b/force-app/main/default/aura/Map/Map.css new file mode 100755 index 00000000..c5fbe5d4 --- /dev/null +++ b/force-app/main/default/aura/Map/Map.css @@ -0,0 +1,15 @@ +.THIS { + margin: -5rem 1rem 0 1rem; +} + +.THIS > div { + width: 100%; + height: 400px; + margin-bottom: 4px; +} + +.THIS h2 { + font-size: 1.125rem; + line-height: 1; + padding: 0rem 0rem 1rem 0rem; +} \ No newline at end of file diff --git a/force-app/main/default/aura/Map/Map.design b/force-app/main/default/aura/Map/Map.design new file mode 100755 index 00000000..1e9ef467 --- /dev/null +++ b/force-app/main/default/aura/Map/Map.design @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/force-app/main/default/aura/Map/MapController.js b/force-app/main/default/aura/Map/MapController.js new file mode 100755 index 00000000..aaab4206 --- /dev/null +++ b/force-app/main/default/aura/Map/MapController.js @@ -0,0 +1,20 @@ +({ + doInit: function(component, event, helper) { + var action = component.get("c.findById"); + action.setParams({ + "propertyId": component.get("v.recordId") + }); + // Register the callback function + action.setCallback(this, function(response) { + component.set("v.property", response.returnValue); + helper.addMarker(component); + }); + // Invoke the service + $A.enqueueAction(action); + }, + + jsLoaded: function(component, event) { + //component.rerender(); + } + +}) \ No newline at end of file diff --git a/force-app/main/default/aura/Map/MapHelper.js b/force-app/main/default/aura/Map/MapHelper.js new file mode 100755 index 00000000..c3c0c1b8 --- /dev/null +++ b/force-app/main/default/aura/Map/MapHelper.js @@ -0,0 +1,22 @@ +({ + addMarker: function(component) { + + var map = component.get('v.map'); + var markers = component.get('v.markers'); + var property = component.get('v.property'); + + // Remove existing markers + if (markers) { + markers.clearLayers(); + } + + // Add Markers + if (map && property && property.Location__Latitude__s && property.Location__Longitude__s) { + var latLng = [property.Location__Latitude__s, property.Location__Longitude__s]; + var marker = window.L.marker(latLng); + markers.addLayer(marker); + map.addLayer(markers); + map.panTo(latLng); + } + } +}) \ No newline at end of file diff --git a/force-app/main/default/aura/Map/MapRenderer.js b/force-app/main/default/aura/Map/MapRenderer.js new file mode 100755 index 00000000..6cc40f91 --- /dev/null +++ b/force-app/main/default/aura/Map/MapRenderer.js @@ -0,0 +1,29 @@ +({ + rerender: function (component, helper) { + + var nodes = this.superRerender(); + + // If the Leaflet library is not yet loaded, we can't draw the map: return + if (!window.L) { + return nodes; + } + + var map = component.get("v.map"); + + // Draw the map if it hasn't been drawn yet + if (!map) { + var mapElement = component.find("map").getElement(); + map = window.L.map(mapElement, {zoomControl: true}).setView([37.784173, -122.401557], 14); + window.L.tileLayer('https://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer/tile/{z}/{y}/{x}', + {attribution: 'Tiles © Esri'}).addTo(map); + component.set("v.map", map); + var markers = new window.L.FeatureGroup(); + component.set("v.markers", markers); + // If we had received a location before Leaflet was loaded, add a marker for this location + helper.addMarker(component); + } + + return nodes; + + } +}) \ No newline at end of file diff --git a/force-app/main/default/aura/Map/aurabundle-meta.xml b/force-app/main/default/aura/Map/aurabundle-meta.xml new file mode 100755 index 00000000..1e47d4bf --- /dev/null +++ b/force-app/main/default/aura/Map/aurabundle-meta.xml @@ -0,0 +1,5 @@ + + + 36.0 + A Lightning Component Bundle + \ No newline at end of file diff --git a/force-app/main/default/aura/PropertyExplorer/PropertyExplorer.cmp b/force-app/main/default/aura/PropertyExplorer/PropertyExplorer.cmp new file mode 100755 index 00000000..80d16b7c --- /dev/null +++ b/force-app/main/default/aura/PropertyExplorer/PropertyExplorer.cmp @@ -0,0 +1,14 @@ + + + + +
+ +
+ + + +
+
+ +
\ No newline at end of file diff --git a/force-app/main/default/aura/PropertyExplorer/PropertyExplorer.css b/force-app/main/default/aura/PropertyExplorer/PropertyExplorer.css new file mode 100755 index 00000000..de028705 --- /dev/null +++ b/force-app/main/default/aura/PropertyExplorer/PropertyExplorer.css @@ -0,0 +1,4 @@ +.THIS .content { + max-width: 850px; + margin: 0 auto; +} \ No newline at end of file diff --git a/force-app/main/default/aura/PropertyExplorer/PropertyExplorerController.js b/force-app/main/default/aura/PropertyExplorer/PropertyExplorerController.js new file mode 100755 index 00000000..bb1e8abc --- /dev/null +++ b/force-app/main/default/aura/PropertyExplorer/PropertyExplorerController.js @@ -0,0 +1,5 @@ +({ + myAction : function(component, event, helper) { + + } +}) \ No newline at end of file diff --git a/force-app/main/default/aura/PropertyExplorer/aurabundle-meta.xml b/force-app/main/default/aura/PropertyExplorer/aurabundle-meta.xml new file mode 100755 index 00000000..1e47d4bf --- /dev/null +++ b/force-app/main/default/aura/PropertyExplorer/aurabundle-meta.xml @@ -0,0 +1,5 @@ + + + 36.0 + A Lightning Component Bundle + \ No newline at end of file diff --git a/force-app/main/default/aura/PropertyExplorerApp/PropertyExplorerApp.app b/force-app/main/default/aura/PropertyExplorerApp/PropertyExplorerApp.app new file mode 100755 index 00000000..e751e25f --- /dev/null +++ b/force-app/main/default/aura/PropertyExplorerApp/PropertyExplorerApp.app @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/force-app/main/default/aura/PropertyExplorerApp/PropertyExplorerAppController.js b/force-app/main/default/aura/PropertyExplorerApp/PropertyExplorerAppController.js new file mode 100755 index 00000000..f9597c8a --- /dev/null +++ b/force-app/main/default/aura/PropertyExplorerApp/PropertyExplorerAppController.js @@ -0,0 +1,5 @@ +({ + myAction : function(component, event, helper) { + + } +}) \ No newline at end of file diff --git a/force-app/main/default/aura/PropertyExplorerApp/aurabundle-meta.xml b/force-app/main/default/aura/PropertyExplorerApp/aurabundle-meta.xml new file mode 100755 index 00000000..1e47d4bf --- /dev/null +++ b/force-app/main/default/aura/PropertyExplorerApp/aurabundle-meta.xml @@ -0,0 +1,5 @@ + + + 36.0 + A Lightning Component Bundle + \ No newline at end of file diff --git a/force-app/main/default/aura/PropertyList/PropertyList.cmp b/force-app/main/default/aura/PropertyList/PropertyList.cmp new file mode 100755 index 00000000..25cb121b --- /dev/null +++ b/force-app/main/default/aura/PropertyList/PropertyList.cmp @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + +
+
+ + + +
+ +
+ +
\ No newline at end of file diff --git a/force-app/main/default/aura/PropertyList/PropertyList.css b/force-app/main/default/aura/PropertyList/PropertyList.css new file mode 100755 index 00000000..f53bcc77 --- /dev/null +++ b/force-app/main/default/aura/PropertyList/PropertyList.css @@ -0,0 +1,17 @@ +.THIS { + padding: 0 12px; +} + +.THIS .list { + margin: 0 auto; + display: -webkit-flex; + display: flex; + -webkit-flex-direction: row; + flex-direction: row; + -webkit-flex-wrap: wrap; + flex-wrap: wrap; + /* + -webkit-justify-content: center; + justify-content: center; + */ +} \ No newline at end of file diff --git a/force-app/main/default/aura/PropertyList/PropertyListController.js b/force-app/main/default/aura/PropertyList/PropertyListController.js new file mode 100755 index 00000000..9255592f --- /dev/null +++ b/force-app/main/default/aura/PropertyList/PropertyListController.js @@ -0,0 +1,25 @@ +({ + // this is a build comment + doInit: function(component, event, helper) { + helper.getProperties(component); + }, + + searchKeyChange: function(component, event, helper) { + component.set("v.searchKey", event.getParam("searchKey")); + helper.getProperties(component); + }, + + priceSelectionChange: function(component, event, helper) { + component.set("v.minPrice", event.getParam("min")); + component.set("v.maxPrice", event.getParam("max")); + helper.getProperties(component); + }, + + pageChange: function(component, event, helper) { + var page = component.get("v.page") || 1; + var direction = event.getParam("direction"); + page = direction === "previous" ? (page - 1) : (page + 1); + helper.getProperties(component, page); + } + +}) \ No newline at end of file diff --git a/force-app/main/default/aura/PropertyList/PropertyListHelper.js b/force-app/main/default/aura/PropertyList/PropertyListHelper.js new file mode 100755 index 00000000..f5579bd3 --- /dev/null +++ b/force-app/main/default/aura/PropertyList/PropertyListHelper.js @@ -0,0 +1,20 @@ +({ + getProperties : function(component, page) { + // pass the constraints set by the user to the view + var action = component.get("c.findAll"); + action.setParams({ + "searchKey": component.get("v.searchKey"), + "minPrice": component.get("v.minPrice"), + "maxPrice": component.get("v.maxPrice"), + "pageNumber": page || 1 + }); + action.setCallback(this, function(a) { + var result = a.getReturnValue(); + component.set("v.properties", result.properties); + component.set("v.page", result.page); + component.set("v.total", result.total); + component.set("v.pages", Math.ceil(result.total/8)); + }); + $A.enqueueAction(action); + } +}) \ No newline at end of file diff --git a/force-app/main/default/aura/PropertyList/aurabundle-meta.xml b/force-app/main/default/aura/PropertyList/aurabundle-meta.xml new file mode 100755 index 00000000..1e47d4bf --- /dev/null +++ b/force-app/main/default/aura/PropertyList/aurabundle-meta.xml @@ -0,0 +1,5 @@ + + + 36.0 + A Lightning Component Bundle + \ No newline at end of file diff --git a/force-app/main/default/aura/PropertyListHeader/PropertyListHeader.cmp b/force-app/main/default/aura/PropertyListHeader/PropertyListHeader.cmp new file mode 100755 index 00000000..03957d11 --- /dev/null +++ b/force-app/main/default/aura/PropertyListHeader/PropertyListHeader.cmp @@ -0,0 +1,63 @@ + + +
+
+
+

Properties

+
+
+

Property Explorer

+ +
+ + +
+
+
+
+
+ +
+
+ + + +
+
+ +
+ +
+
+
+
+
+

n properties • Sorted by Name

+
+ +
\ No newline at end of file diff --git a/force-app/main/default/aura/PropertyListHeader/aurabundle-meta.xml b/force-app/main/default/aura/PropertyListHeader/aurabundle-meta.xml new file mode 100755 index 00000000..1e47d4bf --- /dev/null +++ b/force-app/main/default/aura/PropertyListHeader/aurabundle-meta.xml @@ -0,0 +1,5 @@ + + + 36.0 + A Lightning Component Bundle + \ No newline at end of file diff --git a/force-app/main/default/aura/PropertyListItem/PropertyListItem.cmp b/force-app/main/default/aura/PropertyListItem/PropertyListItem.cmp new file mode 100755 index 00000000..f1d9c4a8 --- /dev/null +++ b/force-app/main/default/aura/PropertyListItem/PropertyListItem.cmp @@ -0,0 +1,17 @@ + + + + + + +
+
+

{!v.property.Title__c}

+
{!v.property.City__c}
+
Beds: {!v.property.Beds__c}   Baths: {!v.property.Baths__c}
+
${! v.property.Price__c}
+
+
+
+ +
\ No newline at end of file diff --git a/force-app/main/default/aura/PropertyListItem/PropertyListItem.css b/force-app/main/default/aura/PropertyListItem/PropertyListItem.css new file mode 100755 index 00000000..cded0ba2 --- /dev/null +++ b/force-app/main/default/aura/PropertyListItem/PropertyListItem.css @@ -0,0 +1,37 @@ +.THIS > div { + position:relative; + display: inline-block; + margin: .2rem; + border: solid 1px #dddddd; + border-radius: .2rem; + padding: 1rem; + width: 200px; + height: 200px; + background-size: cover; + background-position: center; + background-repeat: no-repeat; + font-size: 0.9rem; +} + +.THIS > div > div { + position: absolute; + bottom: 0; + left: 0; + right: 0; + color: #FFFFFF; + background-color: rgba(0, 0, 0, .4); + padding: 4px 6px; +} + +.THIS > div > div > div { + font-weight: 300; + padding: 0; + margin: 0; +} + +.THIS h1 { + font-size: 17px !important; + font-weight: 300; + padding: 0; + margin: 0; +} \ No newline at end of file diff --git a/force-app/main/default/aura/PropertyListItem/PropertyListItemController.js b/force-app/main/default/aura/PropertyListItem/PropertyListItemController.js new file mode 100755 index 00000000..2c5f98d5 --- /dev/null +++ b/force-app/main/default/aura/PropertyListItem/PropertyListItemController.js @@ -0,0 +1,10 @@ +({ + navigateToDetailsView : function(component) { + var property = component.get("v.property"); + var event = $A.get("e.force:navigateToSObject"); + event.setParams({ + "recordId": property.Id + }); + event.fire(); + } +}) \ No newline at end of file diff --git a/force-app/main/default/aura/PropertyListItem/aurabundle-meta.xml b/force-app/main/default/aura/PropertyListItem/aurabundle-meta.xml new file mode 100755 index 00000000..1e47d4bf --- /dev/null +++ b/force-app/main/default/aura/PropertyListItem/aurabundle-meta.xml @@ -0,0 +1,5 @@ + + + 36.0 + A Lightning Component Bundle + \ No newline at end of file diff --git a/force-app/main/default/aura/PropertyPageChange/PropertyPageChange.evt b/force-app/main/default/aura/PropertyPageChange/PropertyPageChange.evt new file mode 100755 index 00000000..faa30134 --- /dev/null +++ b/force-app/main/default/aura/PropertyPageChange/PropertyPageChange.evt @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/force-app/main/default/aura/PropertyPageChange/aurabundle-meta.xml b/force-app/main/default/aura/PropertyPageChange/aurabundle-meta.xml new file mode 100755 index 00000000..1e47d4bf --- /dev/null +++ b/force-app/main/default/aura/PropertyPageChange/aurabundle-meta.xml @@ -0,0 +1,5 @@ + + + 36.0 + A Lightning Component Bundle + \ No newline at end of file diff --git a/force-app/main/default/aura/PropertyPaginator/PropertyPaginator.cmp b/force-app/main/default/aura/PropertyPaginator/PropertyPaginator.cmp new file mode 100755 index 00000000..6187a356 --- /dev/null +++ b/force-app/main/default/aura/PropertyPaginator/PropertyPaginator.cmp @@ -0,0 +1,29 @@ + + + + + + + + +
+
+ + + +
+
{!v.total} properties • page {!v.page} / {!v.pages}
+
+ + + +
+
+ +
\ No newline at end of file diff --git a/force-app/main/default/aura/PropertyPaginator/PropertyPaginator.css b/force-app/main/default/aura/PropertyPaginator/PropertyPaginator.css new file mode 100755 index 00000000..4dfd8145 --- /dev/null +++ b/force-app/main/default/aura/PropertyPaginator/PropertyPaginator.css @@ -0,0 +1,30 @@ +.THIS { + margin: 8px; + display: -webkit-flex; + display: flex; + -webkit-flex-direction: row; + flex-direction: row; + -webkit-flex-wrap: wrap; + flex-wrap: wrap; + align-items: center; + justify-content: center; +} + +.THIS .left { + /*width: 100px;*/ +} + +.THIS .right { + /* width: 100px; */ + text-align: right; +} + +.THIS .centered { + /*flex: 1;*/ + color: #999999; + font-size: 0.9rem; + text-align: center; + align-self: center; + background-color: #FFFFFF; + padding: 0 12px; +} \ No newline at end of file diff --git a/force-app/main/default/aura/PropertyPaginator/PropertyPaginatorController.js b/force-app/main/default/aura/PropertyPaginator/PropertyPaginatorController.js new file mode 100755 index 00000000..e00a2417 --- /dev/null +++ b/force-app/main/default/aura/PropertyPaginator/PropertyPaginatorController.js @@ -0,0 +1,12 @@ +({ + previousPage : function(component, event) { + var myEvent = $A.get("e.c:PropertyPageChange"); + myEvent.setParams({ "direction": "previous"}); + myEvent.fire(); + }, + nextPage : function(component, event) { + var myEvent = $A.get("e.c:PropertyPageChange"); + myEvent.setParams({ "direction": "next"}); + myEvent.fire(); + } +}) \ No newline at end of file diff --git a/force-app/main/default/aura/PropertyPaginator/aurabundle-meta.xml b/force-app/main/default/aura/PropertyPaginator/aurabundle-meta.xml new file mode 100755 index 00000000..1e47d4bf --- /dev/null +++ b/force-app/main/default/aura/PropertyPaginator/aurabundle-meta.xml @@ -0,0 +1,5 @@ + + + 36.0 + A Lightning Component Bundle + \ No newline at end of file diff --git a/force-app/main/default/aura/PropertyPriceSelectionChange/PropertyPriceSelectionChange.evt b/force-app/main/default/aura/PropertyPriceSelectionChange/PropertyPriceSelectionChange.evt new file mode 100755 index 00000000..3c4268e2 --- /dev/null +++ b/force-app/main/default/aura/PropertyPriceSelectionChange/PropertyPriceSelectionChange.evt @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/force-app/main/default/aura/PropertyPriceSelectionChange/aurabundle-meta.xml b/force-app/main/default/aura/PropertyPriceSelectionChange/aurabundle-meta.xml new file mode 100755 index 00000000..1e47d4bf --- /dev/null +++ b/force-app/main/default/aura/PropertyPriceSelectionChange/aurabundle-meta.xml @@ -0,0 +1,5 @@ + + + 36.0 + A Lightning Component Bundle + \ No newline at end of file diff --git a/force-app/main/default/aura/PropertyPriceSlider/PropertyPriceSlider.cmp b/force-app/main/default/aura/PropertyPriceSlider/PropertyPriceSlider.cmp new file mode 100755 index 00000000..b5ab4ff7 --- /dev/null +++ b/force-app/main/default/aura/PropertyPriceSlider/PropertyPriceSlider.cmp @@ -0,0 +1,13 @@ + + + + + + +
+
+
+ +
\ No newline at end of file diff --git a/force-app/main/default/aura/PropertyPriceSlider/PropertyPriceSlider.css b/force-app/main/default/aura/PropertyPriceSlider/PropertyPriceSlider.css new file mode 100755 index 00000000..d09dbfb0 --- /dev/null +++ b/force-app/main/default/aura/PropertyPriceSlider/PropertyPriceSlider.css @@ -0,0 +1,24 @@ +.THIS { + margin-top: 44px; + margin-bottom: 28px; +} + +.THIS .noUi-tooltip { + padding: 3px 4px; + font-size: .8rem; +} + +.THIS .noUi-horizontal .noUi-handle-upper .noUi-tooltip { + top: -32px; + bottom: inherit; + right: 0; +} + +.THIS>div { + margin: 0 auto; + width: 400px; +} + +.THIS .noUi-connect { + background: #16325C; +} \ No newline at end of file diff --git a/force-app/main/default/aura/PropertyPriceSlider/PropertyPriceSliderController.js b/force-app/main/default/aura/PropertyPriceSlider/PropertyPriceSliderController.js new file mode 100755 index 00000000..5052b3a6 --- /dev/null +++ b/force-app/main/default/aura/PropertyPriceSlider/PropertyPriceSliderController.js @@ -0,0 +1,31 @@ +({ + doInit : function(component) { + var slider = component.find("slider").getElement(); + noUiSlider.create(slider, { + start: [300000, 1500000], + tooltips: [ true, true ], + connect: true, + step: 50000, + range: { + 'min': 300000, + 'max': 1500000 + }, + format: { + to: function ( value ) { + return Math.round(value/1000); + }, + from: function ( value ) { + return value; + } + } + }); + + slider.noUiSlider.on('change', function() { + var minMax = slider.noUiSlider.get(); + var myEvent = $A.get("e.c:PropertyPriceSelectionChange"); + myEvent.setParams({ "min": minMax[0]*1000, "max": minMax[1]*1000}); + myEvent.fire(); + }); + + } +}) \ No newline at end of file diff --git a/force-app/main/default/aura/PropertyPriceSlider/PropertyPriceSliderHelper.js b/force-app/main/default/aura/PropertyPriceSlider/PropertyPriceSliderHelper.js new file mode 100755 index 00000000..17bda0ac --- /dev/null +++ b/force-app/main/default/aura/PropertyPriceSlider/PropertyPriceSliderHelper.js @@ -0,0 +1,7 @@ +({ + formatNumber : function(value) { + + return value/1000; + + } +}) \ No newline at end of file diff --git a/force-app/main/default/aura/PropertyPriceSlider/aurabundle-meta.xml b/force-app/main/default/aura/PropertyPriceSlider/aurabundle-meta.xml new file mode 100755 index 00000000..1e47d4bf --- /dev/null +++ b/force-app/main/default/aura/PropertyPriceSlider/aurabundle-meta.xml @@ -0,0 +1,5 @@ + + + 36.0 + A Lightning Component Bundle + \ No newline at end of file diff --git a/force-app/main/default/aura/PropertySearchBar/PropertySearchBar.cmp b/force-app/main/default/aura/PropertySearchBar/PropertySearchBar.cmp new file mode 100755 index 00000000..ac093f37 --- /dev/null +++ b/force-app/main/default/aura/PropertySearchBar/PropertySearchBar.cmp @@ -0,0 +1,17 @@ + + + + +
+
+
+ + +
+
+
+ +
\ No newline at end of file diff --git a/force-app/main/default/aura/PropertySearchBar/PropertySearchBar.css b/force-app/main/default/aura/PropertySearchBar/PropertySearchBar.css new file mode 100755 index 00000000..e1a8112c --- /dev/null +++ b/force-app/main/default/aura/PropertySearchBar/PropertySearchBar.css @@ -0,0 +1,47 @@ +.THIS { + margin:12px 0; + width: 100%; +} + +.THIS>div { + width: 400px; + margin: 0 auto; +} + +/* +.THIS { + text-align: center; + padding: 12px; +} + +.THIS .wrapper { + display: inline-block; + position: relative; +} + +.THIS input[type=text] { + font-size: 1rem; + -webkit-appearance: none; + box-shadow: none; + padding: 8px; + border: 1px solid #DDDDDD; + border-radius: 4px; + width: 400px; +} +.THIS button:focus, +.THIS input:focus { + outline:none; +} + +.THIS button { + -webkit-appearance: none; + background: #FFFFFF; + border: none; + position: absolute; + right: 5px; + top: 8px; + font-size: 1rem; + font-weight: bold; + color: #AAAAAA; +} +*/ \ No newline at end of file diff --git a/force-app/main/default/aura/PropertySearchBar/PropertySearchBarController.js b/force-app/main/default/aura/PropertySearchBar/PropertySearchBarController.js new file mode 100755 index 00000000..981947b0 --- /dev/null +++ b/force-app/main/default/aura/PropertySearchBar/PropertySearchBarController.js @@ -0,0 +1,14 @@ +({ + searchKeyChange: function(component) { + var searchKeyEl = component.find("searchKey").getElement(); + var myEvent = $A.get("e.c:PropertySearchKeyChange"); + myEvent.setParams({"searchKey": searchKeyEl.value }); + myEvent.fire(); + }, + clearText: function(component) { + component.set("v.searchKey", ""); + var myEvent = $A.get("e.c:PropertySearchKeyChange"); + myEvent.setParams({"searchKey": "" }); + myEvent.fire(); + } +}) \ No newline at end of file diff --git a/force-app/main/default/aura/PropertySearchBar/aurabundle-meta.xml b/force-app/main/default/aura/PropertySearchBar/aurabundle-meta.xml new file mode 100755 index 00000000..1e47d4bf --- /dev/null +++ b/force-app/main/default/aura/PropertySearchBar/aurabundle-meta.xml @@ -0,0 +1,5 @@ + + + 36.0 + A Lightning Component Bundle + \ No newline at end of file diff --git a/force-app/main/default/aura/PropertySearchKeyChange/PropertySearchKeyChange.evt b/force-app/main/default/aura/PropertySearchKeyChange/PropertySearchKeyChange.evt new file mode 100755 index 00000000..2eca572f --- /dev/null +++ b/force-app/main/default/aura/PropertySearchKeyChange/PropertySearchKeyChange.evt @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/force-app/main/default/aura/PropertySearchKeyChange/aurabundle-meta.xml b/force-app/main/default/aura/PropertySearchKeyChange/aurabundle-meta.xml new file mode 100755 index 00000000..1e47d4bf --- /dev/null +++ b/force-app/main/default/aura/PropertySearchKeyChange/aurabundle-meta.xml @@ -0,0 +1,5 @@ + + + 36.0 + A Lightning Component Bundle + \ No newline at end of file diff --git a/force-app/main/default/aura/svg/aurabundle-meta.xml b/force-app/main/default/aura/svg/aurabundle-meta.xml new file mode 100755 index 00000000..1e47d4bf --- /dev/null +++ b/force-app/main/default/aura/svg/aurabundle-meta.xml @@ -0,0 +1,5 @@ + + + 36.0 + A Lightning Component Bundle + \ No newline at end of file diff --git a/force-app/main/default/aura/svg/svg.cmp b/force-app/main/default/aura/svg/svg.cmp new file mode 100755 index 00000000..9bac4c4c --- /dev/null +++ b/force-app/main/default/aura/svg/svg.cmp @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/force-app/main/default/aura/svg/svgController.js b/force-app/main/default/aura/svg/svgController.js new file mode 100755 index 00000000..bb1e8abc --- /dev/null +++ b/force-app/main/default/aura/svg/svgController.js @@ -0,0 +1,5 @@ +({ + myAction : function(component, event, helper) { + + } +}) \ No newline at end of file diff --git a/force-app/main/default/aura/svg/svgRenderer.js b/force-app/main/default/aura/svg/svgRenderer.js new file mode 100755 index 00000000..4276fd16 --- /dev/null +++ b/force-app/main/default/aura/svg/svgRenderer.js @@ -0,0 +1,15 @@ +({ + render: function(component) { + //grab attributes from the component markup + var classname = component.get("v.class"); + var xlinkhref = component.get("v.xlinkHref"); + var ariaHidden = component.get("v.ariaHidden"); + + //return an svg element w/ the attributes + var svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"); + svg.setAttribute('class', classname); + svg.setAttribute('aria-hidden', ariaHidden); + svg.innerHTML = ''; + return svg; + } +}) \ No newline at end of file diff --git a/force-app/main/default/classes/PropertyController.cls b/force-app/main/default/classes/PropertyController.cls new file mode 100755 index 00000000..d2aa0d9d --- /dev/null +++ b/force-app/main/default/classes/PropertyController.cls @@ -0,0 +1,31 @@ +public with sharing class PropertyController { + + @AuraEnabled + public static PropertyPagedResult findAll(String searchKey, Decimal minPrice, Decimal maxPrice, Decimal pageNumber) { + Integer pageSize = 8; + String key = '%' + searchKey + '%'; + Integer offset = ((Integer)pageNumber - 1) * pageSize; + + PropertyPagedResult r = new PropertyPagedResult(); + r.pageSize = pageSize; + r.page = (Integer) pageNumber; + r.total = [SELECT count() FROM property__c + WHERE (title__c LIKE :key OR city__c LIKE :key) + AND price__c >= :minPrice + AND price__c <= :maxPrice]; + r.properties = [SELECT Id, title__c, city__c, description__c, price__c, baths__c, beds__c, thumbnail__c FROM property__c + WHERE (title__c LIKE :key OR city__c LIKE :key) + AND price__c >= :minPrice + AND price__c <= :maxPrice + ORDER BY price__c LIMIT 8 OFFSET :offset]; + return r; + } + + @AuraEnabled + public static Property__c findById(Id propertyId) { + return [SELECT id, name, beds__c, baths__c, address__c, city__c, state__c, price__c, Location__Latitude__s, Location__Longitude__s, Picture__c + FROM Property__c + WHERE Id=:propertyId]; + } + +} diff --git a/force-app/main/default/classes/PropertyController.cls-meta.xml b/force-app/main/default/classes/PropertyController.cls-meta.xml new file mode 100755 index 00000000..b98d9423 --- /dev/null +++ b/force-app/main/default/classes/PropertyController.cls-meta.xml @@ -0,0 +1,5 @@ + + + 36 + Active + \ No newline at end of file diff --git a/force-app/main/default/classes/PropertyPagedResult.cls b/force-app/main/default/classes/PropertyPagedResult.cls new file mode 100755 index 00000000..b0d30b99 --- /dev/null +++ b/force-app/main/default/classes/PropertyPagedResult.cls @@ -0,0 +1,16 @@ +// PropertyPagedResult is used for relaying property information +public class PropertyPagedResult { + + @AuraEnabled + public Integer pageSize { get;set; } + + @AuraEnabled + public Integer page { get;set; } + + @AuraEnabled + public Integer total { get;set; } + + @AuraEnabled + public List properties { get;set; } + +} diff --git a/force-app/main/default/classes/PropertyPagedResult.cls-meta.xml b/force-app/main/default/classes/PropertyPagedResult.cls-meta.xml new file mode 100755 index 00000000..50378711 --- /dev/null +++ b/force-app/main/default/classes/PropertyPagedResult.cls-meta.xml @@ -0,0 +1,5 @@ + + + 36.0 + Active + \ No newline at end of file diff --git a/force-app/main/default/flexipages/Property_Record_Page.flexipage-meta.xml b/force-app/main/default/flexipages/Property_Record_Page.flexipage-meta.xml new file mode 100644 index 00000000..1820c7fb --- /dev/null +++ b/force-app/main/default/flexipages/Property_Record_Page.flexipage-meta.xml @@ -0,0 +1,80 @@ + + + + + force:highlightsPanel + + Replace + header + Region + + + + force:relatedListContainer + + Replace + relatedTabContent + Facet + + + + force:detailPanel + + Replace + detailTabContent + Facet + + + + + body + relatedTabContent + + + title + Standard.Tab.relatedLists + + flexipage:tab + + + + active + true + + + body + detailTabContent + + + title + Standard.Tab.detail + + flexipage:tab + + Replace + maintabs + Facet + + + + + tabs + maintabs + + flexipage:tabset + + Replace + main + Region + + + Replace + sidebar + Region + + Property Record Page + flexipage:recordHomeTemplateDesktop + flexipage__default_rec_L + Property__c + RecordPage + diff --git a/force-app/main/default/layouts/Broker__c-Broker Layout.layout-meta.xml b/force-app/main/default/layouts/Broker__c-Broker Layout.layout-meta.xml new file mode 100755 index 00000000..dcc00dd5 --- /dev/null +++ b/force-app/main/default/layouts/Broker__c-Broker Layout.layout-meta.xml @@ -0,0 +1,97 @@ + + + Submit + + true + true + true + + + + Readonly + Picture_IMG__c + + + + + + false + false + true + + + + Required + Name + + + Edit + Title__c + + + Edit + Email__c + + + + + Edit + OwnerId + + + Edit + Phone__c + + + Edit + Mobile_Phone__c + + + + + + false + false + true + + + + Readonly + CreatedById + + + + + Readonly + LastModifiedById + + + + + + true + false + true + + + + + + + + NAME + Price__c + Property__c.Broker__c + + false + false + false + false + false + + 00h36000000O5GM + 4 + 0 + Default + + \ No newline at end of file diff --git a/force-app/main/default/layouts/Favorite__c-Favorite Layout.layout-meta.xml b/force-app/main/default/layouts/Favorite__c-Favorite Layout.layout-meta.xml new file mode 100755 index 00000000..6397a791 --- /dev/null +++ b/force-app/main/default/layouts/Favorite__c-Favorite Layout.layout-meta.xml @@ -0,0 +1,63 @@ + + + + false + false + true + + + + Readonly + Name + + + Edit + Property__c + + + Edit + User__c + + + + + Edit + OwnerId + + + + + + false + false + true + + + + Readonly + CreatedById + + + + + Readonly + LastModifiedById + + + + + + false + false + true + + + + + + false + false + false + false + false + \ No newline at end of file diff --git a/force-app/main/default/layouts/Property__c-Property Layout.layout-meta.xml b/force-app/main/default/layouts/Property__c-Property Layout.layout-meta.xml new file mode 100755 index 00000000..9255d472 --- /dev/null +++ b/force-app/main/default/layouts/Property__c-Property Layout.layout-meta.xml @@ -0,0 +1,188 @@ + + + Submit + + false + false + true + + + + Required + Name + + + Edit + Address__c + + + Edit + State__c + + + Edit + Beds__c + + + Edit + Price__c + + + Edit + Status__c + + + + + Edit + Title__c + + + Edit + City__c + + + Edit + Zip__c + + + Edit + Baths__c + + + Edit + Broker__c + + + Edit + OwnerId + + + + + + true + false + true + + + + + + + + true + true + true + + + + Edit + Description__c + + + + + + true + true + true + + + + Readonly + Picture_IMG__c + + + + + Readonly + Thumbnail_IMG__c + + + + + + false + false + true + + + + + + + Record + + FeedItem.TextPost + QuickAction + 0 + + + FeedItem.ContentPost + QuickAction + 2 + + + FeedItem.LinkPost + QuickAction + 3 + + + FeedItem.PollPost + QuickAction + 4 + + + FeedItem.QuestionPost + QuickAction + 5 + + + Edit + StandardButton + 6 + + + Delete + StandardButton + 7 + + + Clone + StandardButton + 8 + + + Share + StandardButton + 9 + + + + NAME + User__c + CREATED_DATE + Favorite__c.Property__c + CREATED_DATE + Desc + + + CASES.CASE_NUMBER + CASES.SUBJECT + CASES.CREATED_DATE + CASES.PRIORITY + Case.Property__c + + false + false + false + false + false + + 00h36000000O5GO + 4 + 0 + Default + + diff --git a/force-app/main/default/objects/Broker__c.object-meta.xml b/force-app/main/default/objects/Broker__c.object-meta.xml new file mode 100755 index 00000000..7634d5f0 --- /dev/null +++ b/force-app/main/default/objects/Broker__c.object-meta.xml @@ -0,0 +1,135 @@ + + + + Accept + Default + + + CancelEdit + Default + + + Clone + Default + + + Delete + Default + + + Edit + Default + + + Follow + Default + + + List + Default + + + New + Default + + + SaveEdit + Default + + + Tab + Default + + + View + Default + + false + Broker_Compact + + Broker_Compact + Name + Title__c + Phone__c + Mobile_Phone__c + Email__c + + + Deployed + false + true + false + false + false + true + true + true + + Email__c + false + + false + false + Email + false + + + Mobile_Phone__c + false + + false + false + Phone + + + Phone__c + false + + false + false + Phone + + + Picture_IMG__c + false + IMAGE( Picture__c , "picture" , 150, 150) + BlankAsZero + + false + false + Text + false + + + Picture__c + false + + false + false + Url + + + Title__c + false + + 30 + false + false + Text + false + + + + All + NAME + Everything + + + + + Text + + Brokers + + ReadWrite + diff --git a/force-app/main/default/objects/Case.object-meta.xml b/force-app/main/default/objects/Case.object-meta.xml new file mode 100644 index 00000000..d1e1760a --- /dev/null +++ b/force-app/main/default/objects/Case.object-meta.xml @@ -0,0 +1,17 @@ + + + + Property__c + SetNull + false + + Property__c + Cases + Cases + false + false + false + false + Lookup + + diff --git a/force-app/main/default/objects/Favorite__c.object-meta.xml b/force-app/main/default/objects/Favorite__c.object-meta.xml new file mode 100755 index 00000000..181ec502 --- /dev/null +++ b/force-app/main/default/objects/Favorite__c.object-meta.xml @@ -0,0 +1,97 @@ + + + + Accept + Default + + + CancelEdit + Default + + + Clone + Default + + + Delete + Default + + + Edit + Default + + + Follow + Default + + + List + Default + + + New + Default + + + SaveEdit + Default + + + Tab + Default + + + View + Default + + false + SYSTEM + Deployed + false + true + false + false + false + true + true + true + + Property__c + SetNull + false + + Property__c + Favorites + Favorites + false + false + Lookup + + + User__c + SetNull + false + + User + Favorites + false + false + Lookup + + + + All + NAME + Property__c + Everything + + + + F-{00000000} + + AutoNumber + + Favorites + + ReadWrite + diff --git a/force-app/main/default/objects/Property__c.object-meta.xml b/force-app/main/default/objects/Property__c.object-meta.xml new file mode 100755 index 00000000..7f9bb81a --- /dev/null +++ b/force-app/main/default/objects/Property__c.object-meta.xml @@ -0,0 +1,304 @@ + + + + Accept + Default + + + CancelEdit + Default + + + Clone + Default + + + Delete + Default + + + Edit + Default + + + Follow + Default + + + List + Default + + + New + Default + + + SaveEdit + Default + + + Tab + Default + + + View + Property_Record_Page + Large + false + Flexipage + + false + Property_Compact_Layout + + Property_Compact_Layout + Name + City__c + Price__c + Beds__c + Baths__c + + + Deployed + false + true + true + true + false + true + true + true + + Address__c + false + + 100 + false + false + false + false + Text + false + + + Baths__c + false + + 2 + false + 0 + false + false + false + Number + false + + + Beds__c + false + + 2 + false + 0 + false + false + false + Number + false + + + Broker__c + SetNull + false + + Broker__c + Properties + Properties + false + false + false + false + Lookup + + + City__c + false + + 50 + false + false + false + false + Text + false + + + Description__c + false + + 500 + false + false + false + LongTextArea + 3 + + + Location__c + true + false + + false + 7 + false + false + false + Location + + + Picture_IMG__c + false + if(ISBLANK(Picture__c), '', IMAGE(Picture__c, "Picture", 400, 400)) + BlankAsZero + + false + false + false + Text + false + + + Picture__c + false + + false + false + false + false + Url + + + Price__c + false + + 8 + false + 0 + true + true + false + Currency + + + Record_Link__c + false + LEFT($Api.Partner_Server_URL_260, FIND( '/services', $Api.Partner_Server_URL_260))+ Id + BlankAsZero + + false + false + false + Text + false + + + State__c + false + + 20 + false + false + false + false + Text + false + + + Status__c + false + + + + Available + false + + + Under agreement + false + + + Sold + false + + false + + true + false + false + Picklist + + + Thumbnail_IMG__c + false + if(ISBLANK(Thumbnail__c), "", IMAGE(Thumbnail__c, "Picture", 200, 200)) + BlankAsZero + + false + false + false + Text + false + + + Thumbnail__c + false + + false + false + false + false + Url + + + Title__c + false + + 100 + false + false + false + false + Text + false + + + Zip__c + false + + 10 + false + false + false + false + Text + false + + + + All + NAME + City__c + Beds__c + Price__c + Everything + + + + + false + false + Text + + Properties + + ReadWrite + diff --git a/force-app/main/default/pages/SmartHome.page b/force-app/main/default/pages/SmartHome.page new file mode 100755 index 00000000..1d714433 --- /dev/null +++ b/force-app/main/default/pages/SmartHome.page @@ -0,0 +1,269 @@ + + + + + + + + + + + +
+ + + +
{!property__c.address__c}, {!property__c.city__c} {!property__c.state__c}
+ +
+
+
+ + + +
+
+ + + +
+
+
+
+ + + +
+
+ +
+
+
+
+ +
+
+ +
+
+
+ + + + + + + + + + + + + diff --git a/force-app/main/default/pages/SmartHome.page-meta.xml b/force-app/main/default/pages/SmartHome.page-meta.xml new file mode 100755 index 00000000..a97e220c --- /dev/null +++ b/force-app/main/default/pages/SmartHome.page-meta.xml @@ -0,0 +1,7 @@ + + + 36.0 + true + false + + \ No newline at end of file diff --git a/force-app/main/default/permissionsets/DreamHouse.permissionset-meta.xml b/force-app/main/default/permissionsets/DreamHouse.permissionset-meta.xml new file mode 100644 index 00000000..152012b9 --- /dev/null +++ b/force-app/main/default/permissionsets/DreamHouse.permissionset-meta.xml @@ -0,0 +1,242 @@ + + + + DreamHouse + true + + + standard__AppLauncher + false + + + standard__Chatter + false + + + standard__Community + false + + + standard__Content + false + + + standard__Marketing + false + + + standard__Platform + false + + + standard__Sales + false + + + standard__Service + false + + + standard__Work + false + + + PropertyController + true + + + PropertyControllerTest + true + + + PropertyPagedResult + true + + + RejectDuplicateFavoriteTest + true + + + true + Broker__c.Email__c + true + + + true + Broker__c.Mobile_Phone__c + true + + + true + Broker__c.Phone__c + true + + + false + Broker__c.Picture_IMG__c + true + + + true + Broker__c.Picture__c + true + + + true + Broker__c.Title__c + true + + + true + Favorite__c.Property__c + true + + + true + Favorite__c.User__c + true + + + true + Property__c.Address__c + true + + + true + Property__c.Baths__c + true + + + true + Property__c.Beds__c + true + + + true + Property__c.Broker__c + true + + + true + Property__c.City__c + true + + + true + Property__c.Description__c + true + + + true + Property__c.Location__c + true + + + false + Property__c.Picture_IMG__c + true + + + true + Property__c.Picture__c + true + + + true + Property__c.Price__c + true + + + false + Property__c.Record_Link__c + true + + + true + Property__c.State__c + true + + + true + Property__c.Status__c + true + + + false + Property__c.Thumbnail_IMG__c + true + + + true + Property__c.Thumbnail__c + true + + + true + Property__c.Title__c + true + + + true + Property__c.Zip__c + true + + false + + + true + true + true + true + true + Case + true + + + true + true + true + true + true + Broker__c + true + + + true + true + true + true + true + Favorite__c + true + + + true + true + true + true + true + Property__c + true + + + SmartHome + true + + + Broker__c + Visible + + + Property_Explorer + Visible + + + Property__c + Visible + + + Smart_Home + Visible + + diff --git a/force-app/main/default/staticresources/SLDS100.resource b/force-app/main/default/staticresources/SLDS100.resource new file mode 100755 index 0000000000000000000000000000000000000000..a80cd922b42ffcdbef9950b8ca0f4ce53507a1c0 GIT binary patch literal 89949 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 i*U6@YpgN``@B+b$1HE=n0qyqoAK1d}Ol z*01=<8a)AAH%?-Xy4878Faxs7+PGeK%klp_mB&$&|5mVnJ{59yjH<2pi?}FM?we}V zzRJt*M2e+Rb@`>JL&LJ5wAm?EuIJa`6KRuiG*+!95pQ)?WVas$wGjGRv5ncitUK z+;ZKnG3^zfA|S%}(8K7}<*~@Nb@iM{lH{(UJeI3+S2j$v;=koir(({Y_|5Xrp@Nfd zM48DSqJ=5Vc4pZug~_g)rKz%i_Xu$dYW0SEC5VI}eB#f%uAlP#WAUJY_(|gYWS83; zOq#k%YbVU{i!lF~!aOn~sOF}0HQ4;`c1a7p*soNBUDEf~#i#R=9qjYLG5u6yk)d*9Qk;uu?=;@Y?L%uI|?xJBco1uT|)DjJjtc zNqrX`LuGgz}z?4>HwS!f;y*6%@YR}(p%P78b zN`|{{=()EqKyTONfcK!w-!B8q9SbjRFaN=-Od$J}Zl9F-xeUmJ`a9;dVIE$%a8;$V zZEAoRQj{6NEa_r-V+75jogV*;QgQHjB;BS5=v|;VO zTA=!W>oei(Y%piSRK-N+VlE7r2`Vt~eK;BCVfpvrYFvgFSJFY)9>XL7Zb$o&0`ydP zgoy9N8#$BozYm|}Ld>}2T!=d-2vKqWBs4jaeU@)_-SD4L^LaqB8{g_;aVZ9P{`y2s zjX~4GiJtx)v-(?&yIqnASJ64x3E>)t6e6z0j0iMUE zt`3a&y^|em%DyA`PUSgUF(>E!1GA(^Cn-O(7t7o~>vMNznhX3$D=pzVmXSut*lU|% z>^H9H7_}6_h{pu1;}A-na|Z^~u0ev47uj7Bfo?|W9>ygx<3Sc6V_-ehFKo5JHvfV#6PuZfoHfB8x_2y0c`qJpn{A$D7(NDq}zh!@22nM%TnzAoi zNUdPHZ^w0A?RH`oG}Q^XK!CFz-r(+Qf4FGMI^=-l;8Btj`r@?9dD;zW40;Pl=q2I$(qIoFD=so)ugYoeBu_ z#>t)C<4dHvx}V!m!Jyqat0a7HP`!srI;u?`x^)qQdSg*{?jD|epxVBszh%C3$~ zY1A6G!}MXQ%xAqJXT%*HxLX3=WDaA4T^D0V)_O1Ivw5Hc-FJgU8PSJ+JY@@_ZTScic#5&U)Zb6b8cHr+_a1`A}&w|fcpm35}pMU(Ew zW8V(InB|k8qA1=~LIGlff0@TNLji|#Rc1DQZpZ};G1+}PRtR@CdpEQG2(9*>Gkpb| zDo}ApDrD)z6G~WfJj&WT5^hX$eCHpBVl-{5stIb`Su6j)iWLE|BS-Q)ZsM`T4Z`58 z`P0A6|LykQfG`a+F5L8Zp*~@;{K8#<{>{@3`e~!1K6XjmAUr7g*wNJ>Q_Bf# z!{`y?rZKoHims}g$c7DbDcWDZmT1PTyD4L*ZdmIQw#75) zmtOM2zG~j6uPWvx9;kS04lf{a=`jz5(mA9}#kuKn7O4>w4VZ!`+5i}dW*_}{yx6X$ zhAtwUm^J&+V9wKdiTNk?**!BtTAVTw0$~hr}ogst^+Eq~gxKc!GxiV%)H@zb% zK++CSvVe@1!E-ImIvoQNY!MZ!C8tUq5^|aMuq|umHLst_-3DMJs@?sNv3&=GOP>I} z$ZWXG(vrh6wS>^dr<$I9L{Y`)op?qb9bs_H(<*n3f3i4@tgCImEPH19?YaiRYHyYi zhmM1Atjs+upS=p?lXj&wGjJxeZZh<8mR+Q5Bgpst@7WqJoe21B5O9wM#Qbp@zz|)a zxen7IYczTU7+t)XlT>V+UE=xngF~J>LHhzbX=~4HPDVqk^|}31=j}qtkAfp?Gw{st z^eDn?%^q#t=Sz;vMgGc5Lw2)#v-aM4ue!>b%9cZL0Mj0`9k~3PN%WGyGCMGAe`|9g z9Nl*SSn**P0N^spTJte^{uGe2mC!Lka*wF=xMiPXiUJs)ugQn?zEfTj&$`~UC3Q{yHfO9XI;vS$WNTZcMgZsO1V0?ohLlZ;5xbIhYyER z<>(Jz11*Qji;5f9g%D>%b3>&g__s%lCh|Uw+a_`3pkET{qJ0xL&l7e^QiUN~30R^M zuyK#VMd(;53J1ESuI6-dd6~Hi@<+=YvdPyTd8jjp^>lVWn@7j>Ty64QVC^xV*8w(( zreDxbS>-x(>0Zt*c`hT2q!hR~^_?H~C2B&tgl$Eqi(ok;}37l2IP zq9fdi08@g~Fs=_z6K#?l7ovUh&Xl;i&*5o;z9xda)Dop|YTUXsw|9tNV;UB5v8V0Nb^>f)_0}C7 z)+Y4)nL%{xLch0G4Z0KEfl5{haCPmvXFPJlOvbUS_UCYLNQhh|wD7_Q?*<$;$DZ3$ z)xdQUKbN8BU0i1c#?Orgt5bZ?5a%E--kO(Tg+gJYI?Ry2fwcC1&W%KHCANj;Z7-~BA8fJh zu-C<5R~AQqK-~u1H2pI~13Yl=N5(nCO+s5|jDLd|nus1ee@mePJP8HYEDtI$8rU{F zH&G!)3Mm7EF>r=!#W?gDgPib9WY7pcL~MhO+PTr^ht`O^8K|y=)w`|@lZS; zn&?AIMhDxlqu&j7X@lm1l{YLAYJ=6R3rsL?P({-Dm)|kxdt~e3Af#NDlenS}4XOo^b?$E8BDtE?y zD!mOvfW>i;IRu?Q8szvJPVC4k4$n9YIcvgekdpX;HGW+1D&^FntIie7w{4$<#*;$B zqxs4Hm90%DXY1k686IfJvbLh{brR;%m-=qA|E^*1c6c|_jM)&HX@V{bqL4X%rAXHTgvLe%#ygTxc?6y+mIK#}e z4@@U_)zK<&Gjoh|`}e@T;H+%}ycUpVt=p<%K?AP9+ylnCjmKKHdLFXX8J8x%h$Hje zJAWYCoZ1t`@w@pE2;I4>7{x6e?7^8UhR~eJ^!8>nnKRXyEM{DPmUbrQJ+Dd_9(kry za0XnBoTFDD{~kGfE#7X~`o##*SZr_z&WOt$#sbgHtS*j4Lnq;EI|!Fn`Fir{kjRp+ zzN48YJtcnTo-vZbOr~o@VB*FEFrg$gTMc1WkjG4caOR%9#c<3&@~o1xX?sTIwrUAe zCN8(G^ZmNmosYIeMewifs>GhaVGvyD!}bY>7UgZvvs-8Jnau>rfM^LWF@&Go@sI+J zIspse0ahK#NyBmv+!7AY_@nb|ee|m61#?Tl7u`EZy-PX?5Kh3W+at-4cTe#~k8mMU z4D0DUVa`APA?cI?2vKVYyQ6t3ALl`U>(m+Z3WvU}flg0+P9f=!&@No;;Pi)Lw<{0F z@`%vtl~vNL)l=B0ifq2B<|UCsO9VGKx$+x1iVdtQ@IjAiTd zov^(6D&_wIr+!FSrX6>8m|+f=DZ3SF)KvOk+Ay5`1-|3l*24I~WYdY~Ldsia=4P0o ztbRv73WCs&{Ez=J!~!o2;g$VxSd=k?{Yg0mwityhc%*XTvZ(75q{KKUb_wZ%GgqOc zEASXo7+d>^3>+2uqk9Cma-L1F!7;C*xj}ve)kM|K~ z#;DEOyDvnFp*W9o)%osr<3%k5;c{;TmeEuTm;8&Hg%;Cmg^~y}b*cdXQYM|c`t7F$ ztd1F5_tZt(u&D9QA3p5!j~Bn6d1OvV1+9<#57s}xf{w*Jg?d*s*k0pL^VK?E z`ldSw%I6uQM?Hms7CQfrH{)ob^R~@EYMQdyMX8xADfG0hQYZ>%%%k(MdTPYLmp*DEt7KJu@J1NKb-7-$jD>TFfm}rdKm^5 z<~ibTMdLJA6qqp@`*$6o(Z3t12H~=FEy6=l9}k6`7;NKeWnn?z%#Dw$wWPd6 zzC{w}x2ML1hqt^5;yM=`63sEedl4rmI525TU?A6*Ja|sr$PLdbfD_{}Mb)BBFoaEFW*h#V-3`B_!2a=;^iCA5?U)R^{9s9BV6-g#=9RF`lB`U*Zs4dK>8i9al3onrdY zX{SzmckBO39;SbsasE@y^WD0DU0$H_l>KkxtlCXOFz9Q8B%AU6;x%D z9_VncwTI@oU0~4o-Fykdzr&mJ()zy@Uykl2Z1LgoRBm`WAADugKmz_4F3@A(wl0&0 zOPN4~#W-NiR9F(*oc+)D-4r&kHUVfY-0}ynqIK^TijVp3R3zcBc^*-z3?uZi{=9o=GC#V{Yul(ZqF7Iu_%v^9OukW z@bY-{j(M`uN%9i<)1Ki7CL z8;}zpHdT}5fp05#rOMb!CUUzN0s020L$B8elLwKC*i17fROsMdK?Zka?Ke>xAjGmz zZ$)#wNgl$De@HMiwn#lw7{c=NE@gk7mOw_;Z4ne&%7=&h7ck01@mBbDDXo`jZ&m5OvlLONaGx@)$;_^Bryief&weRs?L+(i(X?IP?XU|kT| zxuEltfb}lQ&btsh&C0M&#&@^}Xs<`q_PA|r2}(8Wfqp@2AH>&-OjBAk~5V-GH0 znQby!p@LMp&{9`QN&n<4={|oh9!3n>@t@hku`d2uK+KBI%y#}eM+|Fjyju#}dMevs z;rl$(_sLV3_D>vQGS9qT;`VxrjqOUeHS2K`PZhQ@d_8ZEsMli`Zfx{28H z@&BCnCJ+PE;~5~*LqH?pkDpi2vO>W>zNp%Zs$EIdLe|Z-hls}g!L;POO!}rZE=A$K zqG@~4vll(Prd?A@>G5S1{RVZdd!C)TjJB=6n#=a0XD@noMSm@%ZhtTpd09e@Widh9 zzNS%oQL+~$JExL?!9rd!^7L%RgTbe7o%RUl3iSZP|;4y=d5__GGdw zzqutt^6~8+37ayYeaPiC-w8 zPpr37qZNc0EcKt|QN2e}YygPk?Q*-8vqe8lB_5>OOh&ffCwn_^tA6U`E12atnGXsIl(tyknTIOkBZb2Z6 zG$3~fEw^c4?m-}Ti82}^#4HoxOhG93iBM(;HIs27AOuXR2H#@zBF34=-0;>kTm zPof@ACoq^qO`c9MdJ=VcI)}j|YV&k~(UYjo(>oYUqCQWTmQ+z(KjYP5e z<@Gk-9g7gK*2|D@Z_Do72dS&w@vqKT>Gj>5AIXtH0&&S3)qE4#Rg;@y)#P4*`&3oE zBVN4CC^qhnuc=QL=iyKsmuF$H4pO+{k>P7d((H31@iGo`gtlnuNX`Pk5_uOw@c{%V zz@8d~Pl9FDx=pdoPdn#1z=TJMRR3@3U7}ZBL2Um`&M>p|Z=u5WBI?Kw`ts2m^SS$F z@%&cwNI>utjMEWy=XfTP|6XlcE>nIM)GTtDQe)>mgDRi4KRP1SbiOSC{-YGV9CXa(fG>O=K=+I7bJjy0wGl^^^ zgBa!C+b7`U_VFS^vk~Eg3`2cy!6jEA?FwI}(VTVD-!Xk{9mvRHaS5XdSV{i7dj~27mh!wu{d{h4%rOC3Sm&ou9= z?)@YnuSI@E-^kdOpNoy_!oRX=_v@M4J&VE1%C(fMjuZ2lU@FhNnUC2v<9C6R1#$eF4M8)U z#uzp|{bV(>cnM)1Jy)B2mt}{#dOkGfZy!GJ^f3EHF8#1g0vIdGWgk_;k0601Z2}0k zRn^#ZYTGi516pd~hhth{G*y1I-qCWrBQ0-JN_LP>uhK@`NuI@?&LH zRarsjo@F=3r=8?mCo*Gr^HWoyfS!x}$xE+Ga-abX?bhQvwH(9gwt*)oA&0wj#?isF zTkD(9SDum(Y+&R90MAAHHqwcNLQ@IwW1I&dA%;fB2`#8z8?kyuIRfReLe1jPB>M>P zR6{I5HW=hYcplBCb-AN{mdP)Xu~XYB{n4$>-E|!-1|}i>y2+bdrQrVZ`pDF6$CGem zlP*srE!s_mY&tQR9eib^#difkI5zvRkq-n^zuuo*||TQ8i@P702!%B;pG{^ z@qF4frNz7t&JxmEPk4`u=daLBfue|S)m(!3QkpSRnStl$FI|5ACDWUHXVmstGV_f? z_oBehPMoCm?a=pp1&zgiMBepVbGCHzM6_ye zDexy851)PKhD-x#!oH()K6c>*uZyzK=0jl z!W-_&Gjr`62R2XM)^Hk4It+o|TDFOrdGpRnQtSP#K;B6JAIw%_~cRB89-9uwUU{7?5=7;U;@kp{J?POIJ3$E2`E#p58K zVaR6y^4ZUx&VUDl0g^oHqd-qFI;H>}Q#;{IJEU;JSts@5q1qqY@HZ5!iuJ=J>Tso- zN8ZuXN9Ll`=m9tyu4HYSlKIiCA$Vq8c4o>N5SNNX#3dn%|Z zl1cl!I9@xJzZZ55KPP@RU34)ZBanPL9Ey6K9|i7R(TMjI_(SoMgfRn$h466of==RL zcKqZqhq8?ltsjc#L-WNsm4QyMcNo`^nh>H#^K=9Ky1`C?kmLhOaRv#w7JjbjR)YkH zW*f`<26l@`MF9(wcBMjy9EXcotU<9*p2eAmzjNU5SF|>c2ltimUPN^C?Whs9pX~_5 z-vv8xJHrb1=-( zd_t+s{C|9thvqhSZbDO^_UpV+7Q{HxGmivy+$^B9^1s)`ZYSa!a&55ZcFoqUcyGDY zvKB}%!CDqa;fB2};$ZBdLxInv%Y7CWxygRd=lD;pIUt~pf`tTcp&gE7pqc0e=*d@6 zNh~4zo`f=Sb`OJS34wgcV0z(UQf$b;ar<@{w>(O$5#z&L*rqOdRxMMPee;x6+pPI= zDBiG*)Bdd(SK?a3sjF)3v&1UWnC+Eoq>rV!_=z#4}^+j6(V?_e1K zOe;@0t|UVYjyG^mkIPM@&N1)*OLYp}43n*8Gd$mp;_X6sgNp^YZ6QGsnkYQBH~Y6F z_c#jC^)}7J`!2`IaSgGmRwRUu*9j#H*d8yg$ZQ{8{_ZLwV9PTzxf-7I9VjrBopn@{ z-`e+Qh@pm3V(1P*8Ue|f0Te_+0qO2;h7jqH5F`YY7AcjG?v`#4iD4K(7$h7zBp!Uv zZ$0Pzo#%PaS?@pl+UvU4`hIt<`~G9^eSa+ITrSbw+HI&3Q*^auzPE{~u3kEFfu_F9 z?uU^h$8K(5eN@DVsA>k(XfJ^|SI{>WV+r=#TyoDFCT@TI`u=x|gKlC|1=CHpZi#et zF0LX7-ufmaTk=PrXSf|tt7D4Q3|mX*Xrku&u>A9{4ew~+mZa7Za3Kh|$S~k=^8^yZ zo^SHugd5mlCGJ!5@p16jRX-j4q4n!I?u!r55_Co;0k!O4{*=F>TQiZCwewbU7Ae*; ztRAnDsE*&0TXj8Ep_Hbh2=+V#?&t2vmJK`>Y8PYou;rZET^6P!~ftnB#tD~Ayo~`Ja9T{V7m%2k^Qy1=R{|~iy9%rK@9E7%n zeBj5Xv20Qs#%ZLdwEB6!q3sujF8hblLv@LJ()?2Pu9v)zHEVs>+nZ!(L57P)JSlgQ zi?G8+)^xN5{>dL_p~ba%b8e_!_yzOi`KbxcnHjtM+KK(I{_~w?Z5L-&@tU{op_ETC z13#ucLOT*70rJ5T)nXKAwl2VLUrMZywPFNwD3;~5+duM(}w5~X-DalYja;guCqRY`7R<2tH|2cRr?lE5sl0_M;$KTMP~j*7`#DGzvV zwE|WZyZhMqjmMKHg168(u09Auf2uDW&jxafO+t`Up)QS8L+V=;zTO=LodA7F zfi^6wwu(qE?J6*P^4aqwY^6Lr-~nI$eNidh+O%v`=}0`W+UT#@4_*;#>j;vTIm<@^ z;!>idMIBwZJd?A7gSb)06v>kY@4o4?M@?=~t4{v1{^7Izok}9vwB6h@=g#M4z-^2$ zJ`J6G=HN41!4@cOZCmI2Fp?*j8PfL*o5iydI?gI%zBY4>Jd6Km>W1?t3fIT5fXmf~k z+spkJ%BM*faaX2BzE3RKi=jj&WyTdg(z^GSNi>mpIOGylr1~&v% z4#We7G;e!ekNX6@j47Vbek!^?P`1+TCZUHJ$xyKdF+|0D-k08obg!N5!6J>IUivqV z&=QZ#2cUOwvN~9_KdhK$zMvW5NnubB9)1!<5S+40nRs-F*py$bY}=JU+JL{2&liW| zsuzHkN;%?H^1h)yD)N{oK@ynW-;;G;@B{d6?J5^l5{AC&Y~AlfRorGakn3RZ4G!@Z zO%jk158zAaD3UYAo-FUq?*NsZOHcwWZVERGFVVo__a*|o`;vTll!@M&_zrf7X&spT zH29?4hPLKiZdHD$Q9o`?aIsFFYzTv2x`T>dFaddL7q}uQA2vzUDX~XEP@)50IMwh~ zVF_k&OCX+8hBNp_dlvFEq#*pG4)N>u`@K4WZsOuv(swYf%quu)8tw`xB8qKJvK2Al zvlgCi=W{*;w^>sC`^wkUFL%G=av7}LIiGd})SWM7(<8CeCBWK8< z3U0WAS-3|%U*&-jb9InM1S#`$4(*D#n@A_mTK`ws9mm?xSX!$$2xN3*+W%3IVX24n^t9}HPhHhS;O5uF1^v@?gJ+`;CLOJ~p<=nM}4!SfQTVl=ZcNJ4S zdMV02X*=^6=}NMlfr80Bn;bM7Yy}@#_#lQUi@JIxM`3jO48IxOeOeuz7E^ln+jz4) zaU{R~l2E{@KH?>%5xpO9v#;jR69DXk>xUHIV^GX_#(qz0QA`$UBh>wV%LbnKigYJ# zWmvXwT*>Br29rsYf9*A&MDpW)d{U0ID1L+Pr8Ovbr9$PeyR^6*h-JSLf6P zm-j6qDAN+X;9lQ}LwID3;ii6MOQaDOo7XOTb~J^EQHu3#OB;(ffufJ znHG&V++w^RbjRI|MPYHfOSADy#Ey4D2@|;jGQN5!H$^=CyQ_y#Q2yR6%BZy zl2J0mZ9$pPE=^(G2!`8C580V!nb$BGe4v_HP)ZtT^*uK}={tEjSj$p$L z7p~|jFfZ&1|JFH$umi_qEnF#LmclT;pef(3FdVa1j)9@*1ozmemAl}$2_^J96VpR> za_VN@OeEkbKWL71u?E;bmHbgDI^r(#gz4m}Mk_yQl|NrjT>R#ugu+f&g*AuC*)bW? z*s38d zi7g)?@x&F)(7Gl2Cby^DOyKebs4_O-6t#C&EZMA=XoQXl5AN5aY_Mg+Xv!1P*+9NB zvCXT!8dKUnjuQ8z>|CLZ16}ZUYMpms#ClFof9a%g1AAvOr-K^!QpUl0R>W_`O5Gb# z&vY)8!&tcsKb|sE%Chxwe7lF-ih+R}8LQehu#%QiqiAO(_bgRig&#*bXICX8Z6-(o ziKui+4<18z?vWRr2bH6=J|;8Mo7Fj^yLJb{CH%v=QtZ!hD9?*VS#eaJ6H`i)=PKfH zcJn-89LThNQj7H5$>ZC3{>ssrWRqB04HoGnP>Lv9N)B0htM*gg7@=w(vPLa7kl+T9T#l1q z{rF($`HI=DG3ze5TlN|ENByNy^4wkpc7{NatLgEWZSPi$7NeQCk`iD-OhYMzk(7qg zJWIe*sl%tP@(JT?=DH_Cg06z6@~X13u07on<|VH)JX(S=X}mX{y)dcB*G08QWcGf3 z>rQoYlS&_ZzM|7m3dDAP%^R%}8U8zy_!~{~(X{GGXbiVP^|`Gi>;SE(E%9@&JXCKZiHjp%YUs$_G81j0nTF<)?i>TmYXZP=)-K3&ttA3*v6pL~h1lkfT|bM;TH zL)K6zbhalvS$7zG0Czs|Ck7Ft6rQ4=H;4?&0$LMo zPL(VxnZ@nve@O1vX$R9M(k`T3KesOVnE7!`Y|qYlOu&`vf*=1?`%po`6V-OzX^HnL zFY8h=&YR=qtIx))@UOe}k~-?!_wu^fR-5XUbRS+0PWafCao(xkt$l$nv`6i0Hyhi6 zmyBp*j2+ftSYuA1oH@%hueqnc75Qj8nW|tJM5S)&UE= z&cu?ki2QyKs%lw?T|E>#S1p5|7xxFgYY5T?YvP|`OBcmRI(`*@ypyK>AB9+$4OTkUTQ2jQcC9(Efu^$ z8Cl|+V%6C;x33nDdTj4u!Q~TvjuNJMF2$w`kmbxdznf!fTUU4<`bbwd6tXUOx6)Ot z!YIC`an6tUe)!v*`w0qS6+2ACh~3%*%9ct(GLivD8S>lCwXMnvqpfvnH9K8S3=E5( zXENCLN@o)a&BQ7g1jia@-xS7?R4gRJ=RS``6He`Z`g(wv`my3Fx^WE_9r-C?(&i+i zz78ugK(0?An7*hc1wX6rMK;sS9?JJCd|W`TnJhT@Gpyy#xHS6Bl9Jl|&K?^eTu6Vm zy4hU0qd&PlJnSUX+|4%D`mKRRsHLtR_}1;FO4@udFNiBH6ttuak*oUlmdod;viat- zG5jk!&T&_gJ2NK|09N5lME}SC5`iyvsJ4Aj_+fOo7 z9OtRb=FFX&d+eDrAJTkNkknnC3RnfC8zJTnUO;SU4o=?X$Ojy`aOjxuxESCNj4Kxn z9TOS%0@UQbDTE5Kj+1~7aR58HL3hUMDKJLhLjk~idqyD?1oOdz0!#n+*D7?LGsGi-&6=w3O1EZ-`Nj95JOVw_^^>7ivG zBF5y=I^+9=x4i*us#Sqr=rt)r$GHvhBf^x1mKF1j2&@^YNJ1$zt8NkYQmLU4AB;$< zfBg^uh3teq!|m{e4FS!YGmc_rK$~`w0S56e>MTprAdW2O22rLG`RVsCHU#Ge05>fX zJ1x#qne6pK*!^r*tL$}XvCXF`9E{Rh&*v$ASZNXTn(9Li@bdjzQ3B}?!x8x7sKnRH zmu_rD6Z%0Lhx_bH9Q+tN%1$qm)yCev#V|it4!>PkJmT8XP%(aPnOb7mQqfZUZ0>6PxkveVNY8;-IJ)s7#TTx zWe_rxa^6WYFHNQUOO!O3*64bT2>jn*s=~L`4(ClE-eXKuu!0k^Sk{Sf0_7x3Z}_Cj z;Tp_=GvFXk{FYn*EeQFMfa}r0Hta?4Gx=?;jf?GL3PSxY_|F%SCZ&;>WTU4f6I>_nX$sU_9|$O=FTOO45o{!_ zr7-a%cVv^^0Ex$7m>+m2ax@W8A|LW>Lo%yYJ5rgty?hy!qcWqDf}mifY4~G`+ag5Y zV~CtNxwS7Klthq9P*6C?T<<5$615DBsp)&Nf@KXO;oK3fvJ(atW(8z@7b{slek`N4 zO=k=scqI39o6h=A)Y)cm1{h4Q>U;Q&1Fad4%su?Dz%`4+_q}Z}LM;k8GTLYY4k+wU z%9N2g6<{;D8sg#S-i4p++w)yU1vr=z(EnXVA2|3bVEDU?J#g@4!1#9=KlHJ>j3Xm+ z4}dF+u^;e3oy0bzOM}clButacF@z6F;v6EK#JC8kWxL;jhN}{K`bp0SjiW<1X}7T* zg?O^w8(WOMW>+R;j1WRpRaw7nT`7r@irSnNlC72DcsZj7D6EMdrFa&c_tMT{g96fi=KG+ z(mx{`gC=v+N>z!L14Ou!{uI4%kz%n@D^U4_MFf!O-2q{xAr= z6u|$%NGOCJ3YeSaz%4Li1yaEhFQW5-_*!^!Us$3*G*E}b{vZgwxw}Q7jr<{4JS41e zUG5Mp6#{>6dlO|ta0=FC55dp|lPOW=C=fez;CKLmp-lorF7hl`xSQip$=#o|a1X(m z4wKI$yTqZ+;X4}jf-qNN^Ehqq8}qxP(M|5Jx@&PDH*Xm`DP#VmKZzGN3Hm z^w^J~4GCkh4)kg>G^tzZRL3<7QE)QTb~@+c`@BqkZe)$WQLFi`7|UdBpn>Lgl(ZtU zg>3&!d4kGMWZva-4#V-=`Z0>;ouk0Xw`!p$w-eTx>f`Makn0yFMpqr^Pz9Hv1w%K3 zK+VTZ$mm0xlDM(x=j|Q=aR`0^0K^I8JC@kD-;XM!A}=LjjV=pp3iSEpTU-RWOx!=y zno$?bEleZNQ-~M6vM#)I_(1i1`=Z=z)JMK%H;kY((0%Inis;N)%Tii&^b?a$?h`S93W*D7Lf5Na$}+sNdMjF znu@^qvbnjHM2uVc_h?C=-K4CwUsIiK*i!BNE!9{Aq8X3K-MrV|=@8PT2LKzK47WK9 z7B?*Op{!-Il^aqDUbxnK?K#BY6evy;brSKFtPrWv_w!~bQb|>=Y|k)734e=*TWsbF zo+OAwD4;Oc&-JMn$^?ha_Fc56iObKX>)idw{Y`|;>m++F@*VX=Zhri+TD288R}t!E z8c5op9aAUlm*m8EK(Om1G036ID$(0i=C!FS8XMPyRPt_p5mXkpWA>S{{9{n}gG1o} zxqyR!o0H6!QIY{N0hhHLAv>JS#<4)MUnHOz*QCsA1Qk!P3_h8g-U&0 zmYj^QzE6ZeRp;K`T_)z5;f8ED>UX!!u7O%=KpbY=e}FG^AO0PDK>&dKg}|Ty?7;q1 z|H5GC>fi%#MQ->P|AT$;PchGb5hMMZ*dMjO#2l>LT>l_7ZY1sgz2u4V-`mIdH_4cP zmGtp;aCY$a7w~fTbnv$MheJWvzisrtI2bX_>L6(Dp5ML|+fMXjV zfd4NS;EjG^sMJmP+tB<=KmNFQ`MX%UIeQ7-)c?=G{Q-mguXFKFLwC&#xyUpCK$jX9 z!235tO{@Q4_?MZzw~O{-ODgA$##Z gH2=TIDmV83>j2_|ZYJag + + Public + application/zip + \ No newline at end of file diff --git a/force-app/main/default/staticresources/SmartHomeVFP_styles.resource b/force-app/main/default/staticresources/SmartHomeVFP_styles.resource new file mode 100755 index 00000000..ed139f01 --- /dev/null +++ b/force-app/main/default/staticresources/SmartHomeVFP_styles.resource @@ -0,0 +1,43 @@ +.hidden { + display: none; +} + +input[type=range]{ + -webkit-appearance: none; + width:200px; +} + +input[type=range]::-webkit-slider-runnable-track { + width: 500px; + height: 1px; + background: #32738E; + border: none; + border-radius: 3px; +} + +input[type=range]::-webkit-slider-thumb { + -webkit-appearance: none; + border: none; + height: 24px; + width: 16px; + border-radius: 2px; + background: #32738E; + margin-top: -12px; +} + +input[type=range]:focus { + outline: none; +} + +input[type=range]:focus::-webkit-slider-runnable-track { + background: #32738E; +} + +.row { + display: table-row +} +.cell { + display: table-cell; + padding: 8px; +} + diff --git a/force-app/main/default/staticresources/SmartHomeVFP_styles.resource-meta.xml b/force-app/main/default/staticresources/SmartHomeVFP_styles.resource-meta.xml new file mode 100755 index 00000000..4871c42a --- /dev/null +++ b/force-app/main/default/staticresources/SmartHomeVFP_styles.resource-meta.xml @@ -0,0 +1,5 @@ + + + Private + text/css + \ No newline at end of file diff --git a/force-app/main/default/staticresources/jquery.resource b/force-app/main/default/staticresources/jquery.resource new file mode 100755 index 00000000..b8c4187d --- /dev/null +++ b/force-app/main/default/staticresources/jquery.resource @@ -0,0 +1,4 @@ +/*! jQuery v2.2.3 | (c) jQuery Foundation | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="2.2.3",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isPlainObject:function(a){var b;if("object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype||{},"isPrototypeOf"))return!1;for(b in a);return void 0===b||k.call(a,b)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=d.createElement("script"),b.text=a,d.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:h.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(d=e.call(arguments,2),f=function(){return a.apply(b||this,d.concat(e.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return h.call(b,a)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&f.parentNode&&(this.length=1,this[0]=f),this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?void 0!==c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?h.call(n(a),this[0]):h.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||n.uniqueSort(e),D.test(a)&&e.reverse()),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.removeEventListener("DOMContentLoaded",J),a.removeEventListener("load",J),n.ready()}n.ready.promise=function(b){return I||(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(n.ready):(d.addEventListener("DOMContentLoaded",J),a.addEventListener("load",J))),I.promise(b)},n.ready.promise();var K=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)K(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},L=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function M(){this.expando=n.expando+M.uid++}M.uid=1,M.prototype={register:function(a,b){var c=b||{};return a.nodeType?a[this.expando]=c:Object.defineProperty(a,this.expando,{value:c,writable:!0,configurable:!0}),a[this.expando]},cache:function(a){if(!L(a))return{};var b=a[this.expando];return b||(b={},L(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[b]=c;else for(d in b)e[d]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=a[this.expando];if(void 0!==f){if(void 0===b)this.register(a);else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in f?d=[b,e]:(d=e,d=d in f?[d]:d.match(G)||[])),c=d.length;while(c--)delete f[d[c]]}(void 0===b||n.isEmptyObject(f))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!n.isEmptyObject(b)}};var N=new M,O=new M,P=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Q=/[A-Z]/g;function R(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Q,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:P.test(c)?n.parseJSON(c):c; +}catch(e){}O.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return O.hasData(a)||N.hasData(a)},data:function(a,b,c){return O.access(a,b,c)},removeData:function(a,b){O.remove(a,b)},_data:function(a,b,c){return N.access(a,b,c)},_removeData:function(a,b){N.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=O.get(f),1===f.nodeType&&!N.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),R(f,d,e[d])));N.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){O.set(this,a)}):K(this,function(b){var c,d;if(f&&void 0===b){if(c=O.get(f,a)||O.get(f,a.replace(Q,"-$&").toLowerCase()),void 0!==c)return c;if(d=n.camelCase(a),c=O.get(f,d),void 0!==c)return c;if(c=R(f,d,void 0),void 0!==c)return c}else d=n.camelCase(a),this.each(function(){var c=O.get(this,d);O.set(this,d,b),a.indexOf("-")>-1&&void 0!==c&&O.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){O.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=N.get(a,b),c&&(!d||n.isArray(c)?d=N.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return N.get(a,c)||N.access(a,c,{empty:n.Callbacks("once memory").add(function(){N.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length",""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};$.optgroup=$.option,$.tbody=$.tfoot=$.colgroup=$.caption=$.thead,$.th=$.td;function _(a,b){var c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function aa(a,b){for(var c=0,d=a.length;d>c;c++)N.set(a[c],"globalEval",!b||N.get(b[c],"globalEval"))}var ba=/<|&#?\w+;/;function ca(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],o=0,p=a.length;p>o;o++)if(f=a[o],f||0===f)if("object"===n.type(f))n.merge(m,f.nodeType?[f]:f);else if(ba.test(f)){g=g||l.appendChild(b.createElement("div")),h=(Y.exec(f)||["",""])[1].toLowerCase(),i=$[h]||$._default,g.innerHTML=i[1]+n.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;n.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",o=0;while(f=m[o++])if(d&&n.inArray(f,d)>-1)e&&e.push(f);else if(j=n.contains(f.ownerDocument,f),g=_(l.appendChild(f),"script"),j&&aa(g),c){k=0;while(f=g[k++])Z.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var da=/^key/,ea=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,fa=/^([^.]*)(?:\.(.+)|)/;function ga(){return!0}function ha(){return!1}function ia(){try{return d.activeElement}catch(a){}}function ja(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ja(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=ha;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=N.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return"undefined"!=typeof n&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(G)||[""],j=b.length;while(j--)h=fa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=N.hasData(a)&&N.get(a);if(r&&(i=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=fa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&N.remove(a,"handle events")}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(N.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!==this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,la=/\s*$/g;function pa(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function qa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function ra(a){var b=na.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function sa(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(N.hasData(a)&&(f=N.access(a),g=N.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}O.hasData(a)&&(h=O.access(a),i=n.extend({},h),O.set(b,i))}}function ta(a,b){var c=b.nodeName.toLowerCase();"input"===c&&X.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function ua(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&ma.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),ua(f,b,c,d)});if(o&&(e=ca(b,a[0].ownerDocument,!1,a,d),g=e.firstChild,1===e.childNodes.length&&(e=g),g||d)){for(h=n.map(_(e,"script"),qa),i=h.length;o>m;m++)j=e,m!==p&&(j=n.clone(j,!0,!0),i&&n.merge(h,_(j,"script"))),c.call(a[m],j,m);if(i)for(k=h[h.length-1].ownerDocument,n.map(h,ra),m=0;i>m;m++)j=h[m],Z.test(j.type||"")&&!N.access(j,"globalEval")&&n.contains(k,j)&&(j.src?n._evalUrl&&n._evalUrl(j.src):n.globalEval(j.textContent.replace(oa,"")))}return a}function va(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(_(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&aa(_(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(ka,"<$1>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=_(h),f=_(a),d=0,e=f.length;e>d;d++)ta(f[d],g[d]);if(b)if(c)for(f=f||_(a),g=g||_(h),d=0,e=f.length;e>d;d++)sa(f[d],g[d]);else sa(a,h);return g=_(h,"script"),g.length>0&&aa(g,!i&&_(a,"script")),h},cleanData:function(a){for(var b,c,d,e=n.event.special,f=0;void 0!==(c=a[f]);f++)if(L(c)){if(b=c[N.expando]){if(b.events)for(d in b.events)e[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);c[N.expando]=void 0}c[O.expando]&&(c[O.expando]=void 0)}}}),n.fn.extend({domManip:ua,detach:function(a){return va(this,a,!0)},remove:function(a){return va(this,a)},text:function(a){return K(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return ua(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=pa(this,a);b.appendChild(a)}})},prepend:function(){return ua(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=pa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return ua(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return ua(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(_(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return K(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!la.test(a)&&!$[(Y.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(_(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return ua(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(_(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),f=e.length-1,h=0;f>=h;h++)c=h===f?this:this.clone(!0),n(e[h])[b](c),g.apply(d,c.get());return this.pushStack(d)}});var wa,xa={HTML:"block",BODY:"block"};function ya(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function za(a){var b=d,c=xa[a];return c||(c=ya(a,b),"none"!==c&&c||(wa=(wa||n("