var config = { apiKey: "AIzaSyA4De5itV56yaOBfBW6Cnk3fS7skPmDCHM", authDomain: "punchlist-1561043639952.firebaseapp.com", databaseURL: "https://punchlist-1561043639952.firebaseio.com", projectId: "punchlist-1561043639952", storageBucket: "", messagingSenderId: "999467953896", appId: "1:999467953896:web:a4ded59b12ccb9ff" }; var logging = false; function consoleLog(logMessage) { if ( logging === true ) { console.log(logMessage); } } //firebase.initializeApp(firebaseConfig); if (!firebase.apps.length) { firebase.initializeApp(config); } function initApp() { consoleLog("function: initApp()"); // Auth state changes. // [START authstatelistener] firebase.auth().onAuthStateChanged(function(user){ consoleLog(`in onAuthStateChanged`); if (user) { consoleLog(`${user.displayName}`); // User is signed in. var displayName = user.displayName; var email = user.email; var emailVerified = user.emailVerified; var photoURL = user.photoURL; var isAnonymous = user.isAnonymous; var uid = user.uid; window.uid = uid; var providerData = user.providerData; writeUserData(uid, displayName, email, photoURL); //newPunch(uid); loadPunches(uid); document.getElementById('whoami').innerHTML = email; // [START_EXCLUDE] //document.getElementById('quickstart-sign-in-status').textContent = 'Signed in'; //document.getElementById('signout').disabled = false; //document.getElementById('quickstart-account-details').textContent = JSON.stringify(user, null, ' '); // [END_EXCLUDE] } else { // User is signed out. // [START_EXCLUDE] //document.getElementById('quickstart-sign-in-status').textContent = 'Signed out'; //document.getElementById('signout').disabled = true; //document.getElementById('quickstart-account-details').textContent = 'null'; // [END_EXCLUDE] } }); // [END authstatelistener] //document.getElementById('signout').addEventListener('click', handleSignOut, true); } // AUTH // // [START googlecallback] function onSignIn(googleUser) { consoleLog('Google Auth Response', googleUser); // We need to register an Observer on Firebase Auth to make sure auth is initialized. var unsubscribe = firebase.auth().onAuthStateChanged(function(firebaseUser) { unsubscribe(); // Check if we are already signed-in Firebase with the correct user. if (!isUserEqual(googleUser, firebaseUser)) { // Build Firebase credential with the Google ID token. // [START googlecredential] var credential = firebase.auth.GoogleAuthProvider.credential( googleUser.getAuthResponse().id_token); // [END googlecredential] // Sign in with credential from the Google user. // [START authwithcred] firebase.auth().signInWithCredential(credential).catch(function(error) { // Handle Errors here. var errorCode = error.code; var errorMessage = error.message; // The email of the user's account used. var email = error.email; // The firebase.auth.AuthCredential type that was used. var credential = error.credential; // [START_EXCLUDE] if (errorCode === 'auth/account-exists-with-different-credential') { alert('You have already signed up with a different auth provider for that email.'); // If you are using multiple auth providers on your app you should handle linking // the user's accounts here. } else { console.error(error); } // [END_EXCLUDE] }); // [END authwithcred] } else { var user = googleUser; consoleLog('User already signed-in Firebase.'); var displayName = user.displayName; var email = user.email; var emailVerified = user.emailVerified; var photoURL = user.photoURL; var isAnonymous = user.isAnonymous; var uid = user.uid; var providerData = user.providerData; // [START_EXCLUDE] //document.getElementById('quickstart-sign-in-status').textContent = 'Signed in'; //document.getElementById('signout').disabled = false; //document.getElementById('quickstart-account-details').textContent = JSON.stringify(user, null, ' '); // [END_EXCLUDE] } }); } // [END googlecallback] /** * Check that the given Google user is equals to the given Firebase user. */ // [START checksameuser] function isUserEqual(googleUser, firebaseUser) { if (firebaseUser) { var providerData = firebaseUser.providerData; for (var i = 0; i < providerData.length; i++) { if (providerData[i].providerId === firebase.auth.GoogleAuthProvider.PROVIDER_ID && providerData[i].uid === googleUser.getBasicProfile().getId()) { // We don't need to reauth the Firebase connection. return true; } } } return false; } // [END checksameuser] /** * Handle the sign out button press. */ function handleSignOut() { var googleAuth = gapi.auth2.getAuthInstance(); googleAuth.signOut().then(function() { firebase.auth().signOut(); }); } function writeUserData(userId, name, email, imageUrl) { consoleLog("function: writeUserData(" + userId + ", " + name + ", " + email + ", " + imageUrl + ")"); firebase.database().ref('users/' + userId).update({ username: name, email: email, profile_picture : imageUrl }); } //var punchesRef = firebase.database().ref('users/' + userId + '/punches'); //punchesRef.on('value', function(snapshot) { // updateStarCount(postElement, snapshot.val()); //}); function newPunch(uid, subject, priority, progress, needBy, notes, tags) { consoleLog("function: newPunch(" + uid + ", " + subject + ", " + priority + ", " + progress + ", " + needBy + ", " + notes + ", " + tags + ")"); var punchData = { uid: uid, subject: subject, priority: priority, progress: progress, needByDate: needBy, notes: notes, tags: tags }; //Get a key for a new post var newPunchKey = firebase.database().ref().child('users/' + window.uid + '/punches').push().key; // Write the new punch data var updates = {}; updates['users/' + uid + '/punches/' + newPunchKey] = punchData; return firebase.database().ref().update(updates); } function genDaily() { consoleLog("function: genDaily()"); var daily = [ "Check Workday", "Check Expenses", "Check Change Cases", "Check TD's", "Check at-mentions" ]; consoleLog(`${daily[1]}`); priority = parseInt("3"); var d = new Date(); var needBy = d.setHours(17,0,0); var newTag = "work,daily"; var stripLeadingSpace = newTag.replace(/, /g, ','); var noSpaces = stripLeadingSpace.replace(/ /g, '_'); var newTags = noSpaces.split(","); for (x = 0; x < daily.length; x++) { newPunch(window.uid, daily[x], priority, "new", needBy, "", newTags); } } function genWeekly() { consoleLog("function: genWeekly()"); //get next monday: // var d = new Date(); // d.setDate(d.getDate() + (1 + 7 - d.getDay()) % 7); // consoleLog(d) // }; var weekly = [ "Update ORB Notes", "Prep Weekly Meeting", "Build out Broadcast Timer" ]; var priority = parseInt("5"); var newTag = "work,weekly"; var stripLeadingSpace = newTag.replace(/, /g, ','); var noSpaces = stripLeadingSpace.replace(/ /g, '_'); var newTags = noSpaces.split(","); var needBy = ''; for (x = 0; x < weekly.length; x++) { newPunch(window.uid, weekly[x], priority, "new", needBy, "", newTags); } } // Read the punches via listener // standard functions function setPriority(sortObject, newPosition) { consoleLog("function: setPriority(" + sortObject + ", " + newPosition + ")"); var priority = {}; priority['users/' + window.uid + '/punches/' + sortObject + '/priority' ] = parseInt(newPosition); firebase.database().ref().update(priority); $( '#' + sortObject).attr("priority", newPosition); // loadPunches(window.uid); } function startPunch(reference) { consoleLog("function: startPunch(" + reference + ")"); var exists = document.getElementById("timer" + reference); if ( exists === null ) { consoleLog("Generate Element: timer" + reference); genPunchListItem('
', '#details-col-one' + reference); } var timerExists = exists.innerHTML; consoleLog(timerExists); if (timerExists === null || timerExists === '') { consoleLog("createTimer(" + reference + ", " + time + ")"); var time = new Date(start).getTime(); createTimer("timer" + reference, time); } } function completePunch(reference) { consoleLog("function: completePunch(" + reference + ")"); deletePunchElement(reference); } function setPunchProgress(reference, p) { consoleLog("function: setPunchProgress(" + reference + ", " + p + ")"); var progress = {}; progress['users/' + window.uid + '/punches/' + reference + '/progress'] = p; firebase.database().ref().update(progress); switch(p.toLowerCase()) { case "in progress": // execute var refClass = "inProgress"; var rmClass = [ "punch-default", "waiting" ]; var start = new Date().getTime(); var startTime = {}; startTime['users/' + window.uid + '/punches/' + reference + '/startTime'] = start; firebase.database().ref().update(startTime); //startPunch(reference); break; case "waiting": // execute var refClass = "waiting"; var rmClass = [ "punch-default", "inProgress" ]; break; case "done": var end = new Date().getTime(); var endTime = {}; endTime['users/' + window.uid + '/punches/' + reference + '/endTime'] = end; firebase.database().ref().update(endTime); positionLoop(); //completePunch(reference); break; default: consoleLog("function: setStyle(" + reference + ", " + progress + "), did not match a condition. :("); } // setStyle(reference, p); } function setStyle(reference, progress) { switch(progress.toLowerCase()) { case "new": // execute var refClass = "punch-default"; var rmClass = [ "waiting", "inProgress" ]; break; case "in progress": // execute var refClass = "inProgress"; var rmClass = [ "punch-default", "waiting" ]; startPunch(reference); break; case "waiting": // execute var refClass = "waiting"; var rmClass = [ "punch-default", "inProgress" ]; break; case "done": completePunch(reference); break; default: consoleLog("function: setStyle(" + reference + ", " + progress + "), did not match a condition. :("); } elementIds = [ '#' + reference, '#progress' + reference ]; var c; var i; consoleLog("Element Ids: " + elementIds); for (i in elementIds) { for (c in rmClass) { consoleLog("Removing: " + rmClass[c] + ", from: " + elementIds[i]); $( elementIds[i] ).removeClass( rmClass[c] ); } consoleLog("Adding: " + refClass + ", to: " + elementIds[i]); $( elementIds[i] ).addClass( refClass ); } } function clearDefault(a){ if (a.defaultValue === a.value) { a.value=""; } } function positionLoop() { $( "li" ).each(function( i, l ){ var punchRef = firebase.database().ref('users/' + uid + '/punches/' + l.id + '/priority'); punchRef.once('value').then(function(snapshot) { var cPriority = snapshot.val(); var nPriority = i; if ( parseInt(cPriority) < 100 ) { consoleLog("Updating: " + l.id + " priority, from: " + cPriority + ", to: " + nPriority); setPriority(l.id, nPriority); } }); //consoleLog("i: " + i + " l: " + l.id); }); } function mkSortable(){ consoleLog("function: mkSortable()"); $( function() { $( "#sortable" ).sortable({ cancel: ".portlet-toggle", placeholder: "portlet-placeholder ui-corner-all", revert: true, distance: 50, start: function(event, ui) { //consoleLog($( this ).( "li" )); consoleLog(ui.item.context.id); consoleLog(`Start Position: ${ui.item.index()}`); }, stop: function(event, ui) { // setPriority(window.sortObjectUUID, ui.item.index()); consoleLog(event, ui); setPriority(ui.item.context.id, ui.item.index()); consoleLog(`New Position: ${ui.item.index()}`); positionLoop(); } }); }); } function enableDetail(){ consoleLog("function: enableDetail()"); $(function() { $( ".portlet" ) .addClass( "ui-widget ui-widget-content ui-helper-clearfix ui-corner-all" ) .find( ".details-container" ) .addClass( "ui-corner-all" ) .prepend( ""); $( ".portlet-toggle" ).on( "click", function() { var icon = $( this ); icon.toggleClass( "ui-icon-minusthick ui-icon-plusthick" ); icon.closest( ".portlet" ).find( ".backlog-list-content" ).toggle(); }); $( "#sortable" ).disableSelection(); }); // pop-over dialog $( "#dialog" ).dialog({ autoOpen: false }); $( "#opener" ).click(function() { $( "#dialog" ).dialog( "open" ); }); } // some element functions... function enableElement(element) { consoleLog(`enabling ${element}`); document.getElementById(element).style.display = "block"; } function disableElement(element) { consoleLog(`disabling ${element}`); document.getElementById(element).style.display = "none"; } // menus function mainMenuDrop() { document.getElementById("mainMenuDropdown").classList.toggle("show"); } function progressMenuDrop(uuid) { document.getElementById("progressDropdown" + uuid).classList.toggle("show"); } function toggleElement(element) { document.getElementById(element).classList.toggle("show"); } window.onclick = function(event) { if (!event.target.matches('.dropbtn')) { var dropdowns = document.getElementsByClassName("dropdown-content"); var i; for (i = 0; i < dropdowns.length; i++) { var openDropdown = dropdowns[i]; if (openDropdown.classList.contains('show')) { openDropdown.classList.remove('show'); } } } } // end menus // // edit punch function editPunch(uuid) { disableElement("punchListAll"); enableElement("editPunch"); var punchRef = firebase.database().ref('users/' + uid + '/punches/' + uuid); punchRef.once('value').then(function(snapshot) { var data = snapshot.val(); consoleLog(data); var nDate = new Date(data.needByDate); var notes = data.notes; var priority = data.priority; var progress = data.progress; var subject = data.subject; var tags = data.tags; var html = '