(function () { "use strict"; // Consts // ///////////////////////////////////////////////////////////////////////// var EVENT_BRIDGE_OPEN_MESSAGE = "eventBridgeOpen", UPDATE_UI = "update_ui", GOTO = "goto", VOTE_AVATAR = "vote_avatar", VOTE_DOMAIN = "vote_domain", EVENTBRIDGE_SETUP_DELAY = 200; // Components // ///////////////////////////////////////////////////////////////////////// Vue.component('navigation', { props: { polls: { type: Object } }, template: ` ` }) Vue.component('domainlist', { props: { flagvisited: { type: Boolean }, visitedalldomains: { type: Boolean }, domains: { type: Array }, open: { type: Boolean }, voted: { type: Boolean } // *** }, computed: { groupedItems() { var grouped = []; var index = -1; for (var i = 0; i < this.domains.length; i++) { if (i % 2 == 0) { index++; grouped[index] = []; grouped[index].id = index; } grouped[index].push(this.domains[i]); } if (grouped.length && grouped[index].length === 1) { grouped[index].push({ hidden: true }); } return grouped; }, getTitle() { if (!this.visitedalldomains) { return "Visit the entries then vote:"; } else if (this.voted) { return "Thanks for voting!"; } else { return "Vote for your favorite!"; } } }, methods: { closeVisitedModal() { console.log("closeModal"); this.isVisitedModalVisible = false; this.showedVisited = true; } }, data() { return { isVisitedModalVisible: false, showedVisited: false }; }, watch: { visitedalldomains: function (newVal, oldVal) { if (newVal === true && oldVal === false) { this.isVisitedModalVisible = true; } } }, template: ` ` }) Vue.component('domaincard', { props: { visitedalldomains: { type: Boolean }, domain: { type: Object }, voted: { type: Boolean } }, methods: { goto(domainName) { EventBridge.emitWebEvent(JSON.stringify({ type: GOTO, value: domainName })); console.log(domainName); }, votedomain(domainName) { EventBridge.emitWebEvent(JSON.stringify({ type: VOTE_DOMAIN, value: domainName })); console.log(domainName); this.closeVoteModal(); }, showVoteModal() { if (!this.domain.hidden) { this.isVoteModalVisible = true; } }, closeVoteModal() { console.log("closeVoteModal"); this.isVoteModalVisible = false; }, }, computed: { styles() { return "background: linear-gradient(rgba(0,0,0,0.25), rgba(0,0,0,0)), url('" + this.domain.image + "'); background-position: center; background-size: cover;"; } }, data() { return { isVoteModalVisible: false }; }, template: `

{{ domain.name }}

Vote for {{ domain.name }}?

You can only vote once and can not be changed later.

` }) Vue.component('avatarlist', { props: { avatars: { type: Array }, open: { type: Boolean }, voted: { type: Boolean } // *** }, computed: { groupedItems() { var grouped = []; var index = -1; for (var i = 0; i < this.avatars.length; i++) { if (i % 3 == 0) { index++; grouped[index] = []; grouped[index].id = index; } grouped[index].push(this.avatars[i]); } if (grouped.length && grouped[index].length < 3) { grouped[index].push({ hidden: true }); if (grouped[index].length === 2) { grouped[index].push({ hidden: true }); } } return grouped; } }, template: ` ` }) Vue.component('avatarcard', { props: { avatar: { type: Object }, voted: { type: Boolean } }, methods: { voteavatar(avatarName) { EventBridge.emitWebEvent(JSON.stringify({ type: VOTE_AVATAR, value: avatarName })); console.log(avatarName); this.closeVoteModal(); }, showAvatarInfoModal() { if (!this.avatar.hidden) { this.isAvatarInfoModalVisible = true; } }, closeAvatarInfoModal() { console.log("closeAvatarInfoModal"); this.isAvatarInfoModalVisible = false; }, showVoteModal() { if (!this.avatar.hidden) { this.isVoteModalVisible = true; this.isAvatarInfoModalVisible = false; } }, closeVoteModal() { console.log("closeAvatarInfoModal"); this.isVoteModalVisible = false; this.isAvatarInfoModalVisible = true; }, closeBothModals() { this.isVoteModalVisible = false; this.isAvatarInfoModalVisible = false; } }, data() { return { isAvatarInfoModalVisible: false, isVoteModalVisible: false, }; }, computed: { cardStyles() { var str = this.avatar.image; var urlLength = str.length; var charAt4 = str.charAt(urlLength - 4); // .png/.jpg var charAt5 = str.charAt(urlLength - 5); // .jpeg var index = -1; if (charAt4 === "." || charAt5 === ".") { index = charAt4 === "." ? urlLength - 4 : urlLength - 5; } var root = str.slice(0, index); var end = str.slice(index, urlLength); var thumbnail = "-thumbnail"; return "background: linear-gradient(rgba(255,255,255,0), rgba(255,255,255,0)), url('" + root + thumbnail + end + "'); background-position: center; background-size: cover; border:none"; }, modalStyles() { return "background: url('" + this.avatar.image + "'); background-position: center; background-size: cover; border:none"; }, voteBarText() { if (!this.voted) { return " Vote for " + this.avatar.name; } else { // voted already if (this.avatar.voted) { return " Voted!"; } else { return "Thanks for voting!"; } } }, votedFor () { return this.voted && this.avatar.voted; }, notVotedFor () { return this.voted && !this.avatar.voted; } }, template: `

{{ avatar.name }}

{{ avatar.name }}

{{ voteBarText }}

Vote for {{ avatar.name }}?

You can only vote once and can not be changed later.

` }) // Vue.component('avatarview', { // props: { // avatar: { type: Object }, // voted: { type: Boolean } // }, // template: ` // //
//
//

{{ avatar.name }}

// //
//
//

{{ voteBarText }}

//
//
//
// ` // }) Vue.component('modal', { props: { alert: { type: Boolean }, hidex: { type: Boolean }, isavatar: { type: Boolean } }, methods: { close() { console.log("close"); this.$emit('close'); } }, template: ` ` }) Vue.component('example', { props: { example: { type: Object } }, methods: { example() { EventBridge.emitWebEvent(JSON.stringify({ type: EXAMPLE_MESSAGE, value: this.example })); } }, template: `
{{ example.name }}
` }) // App // ///////////////////////////////////////////////////////////////////////// var app = new Vue({ el: '#app', data: { // dataStore: { // isLoggedIn: true, // voted: { // domain: false, // avatar: false // }, // openPolls: { // avatar: false, // domain: true // }, // visitedalldomains: false, // domains: [], // avatars: [] // } dataStore: { "isLoggedIn": true, "voted": { "domain": false, "avatar": false }, "openPolls": { "avatar":true, "domain":true }, "visitedalldomains":false, "domains": [ { "name":"TheSpot", "image":"https://hifi-metaverse.s3-us-west-1.amazonaws.com/images/places/previews/6bf/6ed/a7-/thumbnail/hifi-place-6bf6eda7-51d6-45ef-8ffc-28a6c4080af4.jpg?1527698357", "visited":false, "index":0 }, { "name":"Studio", "image":"http://img.youtube.com/vi/kEJDqO7WrKY/hqdefault.jpg", "visited":true, "index":1 }, { "name":"Help1", "image":"https://hifi-metaverse.s3-us-west-1.amazonaws.com/images/places/previews/0ce/40e/14-/thumbnail/hifi-place-0ce40e14-7c49-4076-8bcf-be6f76fe7482.png?1529018633", "visited":true, "index":2 }, { "name":"Help2", "image":"https://hifi-metaverse.s3-us-west-1.amazonaws.com/images/places/previews/0ce/40e/14-/thumbnail/hifi-place-0ce40e14-7c49-4076-8bcf-be6f76fe7482.png?1529018633", "visited":true, "index":2 }, { "name":"Help3", "image":"https://hifi-metaverse.s3-us-west-1.amazonaws.com/images/places/previews/0ce/40e/14-/thumbnail/hifi-place-0ce40e14-7c49-4076-8bcf-be6f76fe7482.png?1529018633", "visited":true, "index":2 }, { "name":"Help4", "image":"https://hifi-metaverse.s3-us-west-1.amazonaws.com/images/places/previews/0ce/40e/14-/thumbnail/hifi-place-0ce40e14-7c49-4076-8bcf-be6f76fe7482.png?1529018633", "visited":true, "index":2 }, { "name":"Help5", "image":"https://hifi-metaverse.s3-us-west-1.amazonaws.com/images/places/previews/0ce/40e/14-/thumbnail/hifi-place-0ce40e14-7c49-4076-8bcf-be6f76fe7482.png?1529018633", "visited":true, "index":2 }, { "name":"Help6", "image":"https://hifi-metaverse.s3-us-west-1.amazonaws.com/images/places/previews/0ce/40e/14-/thumbnail/hifi-place-0ce40e14-7c49-4076-8bcf-be6f76fe7482.png?1529018633", "visited":true, "index":2 } ], "avatars":[ { "name":"Robin1", "image":"http://hifi-content.s3-us-west-1.amazonaws.com/Experiences/LoadTest/VoteApp/InProgress/V7/Artemis-Feature-Pic.jpg" }, { "name":"Robin2", "image":"http://img.youtube.com/vi/kEJDqO7WrKY/hqdefault.jpg" }, { "name":"Robin3", "image":"http://img.youtube.com/vi/kEJDqO7WrKY/hqdefault.jpg" }, { "name":"Robin4", "image":"http://img.youtube.com/vi/kEJDqO7WrKY/hqdefault.jpg" }, { "name":"Robin5", "image":"http://img.youtube.com/vi/kEJDqO7WrKY/hqdefault.jpg" } ] } } }); // Procedural // ///////////////////////////////////////////////////////////////////////// function onScriptEventReceived(message) { var data; try { data = JSON.parse(message); switch (data.type) { case UPDATE_UI: app.dataStore = data.value; break; // case VISITED_ALL_DOMAINS: // app.dataStore.flagVisited = true; // break; default: } } catch (e) { console.log(e) return; } } function onLoad() { // Initial button active state is communicated via URL parameter. // isActive = location.search.replace("?active=", "") === "true"; setTimeout(function () { // Open the EventBridge to communicate with the main script. // Allow time for EventBridge to become ready. EventBridge.scriptEventReceived.connect(onScriptEventReceived); EventBridge.emitWebEvent(JSON.stringify({ type: EVENT_BRIDGE_OPEN_MESSAGE })); }, EVENTBRIDGE_SETUP_DELAY); } // Main // ///////////////////////////////////////////////////////////////////////// onLoad(); }());