daily pastebin goal
40%
SHARE
TWEET

Untitled

a guest Jun 30th, 2018 104 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const auth = firebase.auth();
  2. const database = firebase.database();
  3.  
  4. function signUp() {
  5.     let email = document.getElementById('email').value;
  6.     let username = document.getElementById('username').value;
  7.     let password = document.getElementById('password').value;
  8.     let confirmPassword = document.getElementById('confirm-password').value;
  9.    
  10.     if(confirmPassword === password){
  11.         auth.createUserWithEmailAndPassword(email, password)
  12.         .then(() => {
  13.             let userSignedIn = auth.currentUser;
  14.             userSignedIn.updateProfile({
  15.                 displayName: username,
  16.                 emailVerified: true
  17.             })
  18.             setTimeout(() => {
  19.                 location = 'index.html';
  20.             }, 1000)
  21.         }).catch((err) => {
  22.             var errorCode = err.code;
  23.             var errorMessage = err.message;
  24.             if (errorCode === 'auth/weak-password') {
  25.                 document.getElementsByClassName("error-message")[1].innerHTML = `<p>The password is too weak.</p>`
  26.             } else {
  27.                 document.getElementsByClassName("error-message")[1].innerHTML = `<p>${errorMessage}</p>`
  28.             }
  29.             setTimeout(() =>{
  30.                 document.getElementsByClassName("error-message")[1].innerHTML = ""
  31.             },5000)
  32.             console.log(`${err}`)
  33.         });
  34.     }
  35.     return false
  36. }
  37.  
  38. function logIn() {
  39.     let email = document.getElementById('loginEmail').value;
  40.     let password = document.getElementById('loginPassword').value;
  41.     auth.signInWithEmailAndPassword(email, password).then(() => {
  42.         setTimeout(() => {
  43.             location = 'index.html';
  44.         }, 1000)
  45.     })
  46.     .catch((err) => {
  47.         var errorCode = err.code;
  48.         var errorMessage = err.message;
  49.         if (errorCode) {
  50.             console.log('Error:' + errorCode);
  51.         } else {
  52.             console.log(errorMessage);
  53.         }
  54.         console.log(`Error: ${err}`)
  55.     });
  56.     return false
  57. }
  58.  
  59. function signOut() {
  60.     auth.signOut().then(() => {
  61.         setTimeout(() => {
  62.             location = 'index.html';
  63.         }, 1000)
  64.     }).catch(error => console.error(error));
  65. }
  66.  
  67. function addPoll(){
  68.     const question = document.getElementById('question').value;
  69.     const options = document.getElementsByName('options');
  70.     let poll = {
  71.         question,
  72.         author: auth.currentUser.displayName,
  73.         option: {},
  74.         results: {}
  75.     }
  76.  
  77.     for(let i = 0; i < 4; i++) {
  78.         poll.option[`option${i + 1}`] = options[i].value;
  79.         poll.results[`option${i + 1}`] = 0;
  80.     }
  81.     database.ref(`users/${auth.currentUser.uid}/polls`).push().set(poll);
  82.     database.ref(`polls`).push().set(poll);
  83.     location.reload();
  84.     return false;
  85. }
  86.  
  87. function viewPolls(user = null) {
  88.     const accordion = $('.ui.styled.accordion');
  89.     let poll
  90.     database.ref(`polls`).on('child_added', snapshot => {
  91.         if(user){
  92.             poll = renderPoll(snapshot.val(), snapshot.key, user);
  93.         }
  94.         else {
  95.             poll = renderPoll(snapshot.val(), snapshot.key);
  96.         }
  97.         accordion.append(poll);
  98.     });
  99. }
  100.  
  101. function renderPoll(data, key, user = null) {
  102.     let pollOptions = ``
  103.     for(let i = 0; i < 4; i++) {
  104.         pollOptions += `
  105.             <div class="field">
  106.                 <div class="ui radio checkbox">
  107.                     <input type="radio" name="pollOption" value="${i + 1}" tabindex="0">
  108.                     <label>${data.option[`option${i + 1}`]}</label>
  109.                 </div>
  110.             </div>
  111.         `
  112.     }
  113.     if(data.author == user.displayName) {
  114.         return `
  115.             <div class="title">
  116.                 <i class="dropdown icon"></i>
  117.                 <h4>
  118.                     ${data.question}
  119.                     <br>                
  120.                     <small>Made by: ${data.author}</small>
  121.                 </h4>
  122.                 <span style="margin-left:auto">
  123.                     <button class="ui button" onClick="deletePoll('${key}')">Delete Poll</button>
  124.                 </span>
  125.             </div>
  126.             <div class="content">
  127.                 <div class="ui form">
  128.                     <div class="grouped fields">
  129.                         ${pollOptions}
  130.                         <button class="ui button" onclick="showResults(this, '${key}')">Submit</button>
  131.                     </div>
  132.                 </div>
  133.             </div>
  134.         `
  135.     }
  136.     else {
  137.         return `
  138.             <div class="title">
  139.                 <i class="dropdown icon"></i>
  140.                 <h4>
  141.                     ${data.question}
  142.                     <br>                
  143.                     <small>Made by: ${data.author}</small>
  144.                 </h4>
  145.             </div>
  146.             <div class="content">
  147.                 <div class="ui form">
  148.                     <div class="grouped fields">
  149.                         ${pollOptions}
  150.                         <button class="ui button" onclick="showResults(this, '${key}')">Submit</button>
  151.                     </div>
  152.                 </div>
  153.             </div>
  154.         `
  155.     }
  156. }
  157.  
  158. function showResults(element, key) {
  159.     let el = $(element).parent().parent();
  160.     let option = $("input:radio[name=pollOption]:checked").val();
  161.     const dataRefPoll = database.ref(`polls/${key}`);
  162.     let dataRes, pollResult = "", options;
  163.     dataRefPoll.on('value', snapshot => {
  164.         dataRes = snapshot.val().results
  165.         options = snapshot.val().option
  166.         dataRes[`option${option}`]++;
  167.     });
  168.     for(let i = 0; i < 4; i++) {
  169.         pollResult += `<p>${options[`option${i + 1}`]} : ${dataRes[`option${i + 1}`]}</p>`
  170.     }
  171.     database.ref(`polls/${key}/results`).set(dataRes);
  172.     el.html(
  173.         `
  174.             <h4>Thank you for taking part in this poll. Here are the results</h4>
  175.             ${pollResult}
  176.         `
  177.     );
  178. }
  179.  
  180. function deletePoll(pid = null) {
  181.     database.ref(`users/${auth.currentUser.uid}/polls/${pid}`).remove();
  182.     database.ref(`polls/${pid}`).remove();
  183.     location.reload();
  184. }
  185.  
  186. function changeState (){
  187.     let nav = $('ul.right.menu');
  188.     let addButton = $('#addPoll');
  189.     auth.onAuthStateChanged(user => {
  190.         if(user){
  191.             nav.html(`
  192.                 <li>
  193.                     <a class="ui item">Welcome: ${user.displayName}</a>
  194.                 </li>
  195.                 <li>
  196.                     <a onclick="signOut()" class="ui item">Sign Out</a>
  197.                 </li>
  198.             `);
  199.             addButton.html(`<button class="ui button" onClick="showAddPollModal()">Add New Poll</button>`)
  200.             document.body.onload = viewPolls(user);
  201.         }
  202.         else {
  203.             document.body.onload = viewPolls();
  204.         }
  205.     });
  206. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top