Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <!DOCTYPE html>
- <html>
- <head>
- <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
- <script src = "https://code.jquery.com/jquery.js"></script>
- <title>News Aggregation</title>
- <meta name = "viewport" content = "width = device-width, initial-scale = 1.0">
- <!-- Bootstrap -->
- <link href = "css/bootstrap.min.css" rel = "stylesheet">
- <link href = "css/main.css" rel = "stylesheet">
- <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
- <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
- <!--[if lt IE 9]>
- <script src = "https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
- <script src = "https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
- <![endif]-->
- <script type="text/javascript" src="https://www.google.com/jsapi"></script>
- <script>
- function dateWork(){
- var currDate = new Date();
- var hours = currDate.getHours();
- var ampm = 'AM';
- if (hours === 0 ) {
- hours = 12;
- } else if (hours === 12) {
- ampm = 'PM';
- } else if (hours > 12){
- hours = hours - 12;
- ampm = 'PM';
- }
- var minutesStr = '' + currDate.getMinutes();
- if (currDate.getMinutes() < 10){
- minutesStr = '0' + minutesStr;
- }
- var dateString = (currDate.getMonth() + 1) + '/' + currDate.getDate() + '/' +
- currDate.getFullYear() + ' at ' + hours + ':' + minutesStr + ' ' + ampm;
- return dateString;
- }
- function everything(){
- $("#create-acct-btn").click(function(){
- $("#auth-errs").text("");
- $("#auth-success").text("");
- $.ajax({
- method: "POST",
- url: "create-account.php",
- data: {
- username: $("#username").val(),
- password: $("#password").val()
- },
- dataType: "json",
- success: function(data, status){
- if (data.errCode == 1){
- // Username already exists
- $("#auth-errs").text(data.errText);
- } else {
- // Account creation successful
- $("#login-success").text(data.successText);
- }
- },
- error: function(data, status, errorThrown){
- //alert("ERROR: " + JSON.stringify(data) + " " + status + " " + errorThrown);
- }
- });
- });
- $("#login-btn").click(function(){
- $("#auth-errs").text("");
- $("#acct-created").text("");
- $.ajax({
- method: "POST",
- url: "login.php",
- data: {
- username: $("#username").val(),
- password: $("#password").val()
- },
- dataType: "json",
- success: function(data, status){
- if(data.errCode == 1){
- // Bad password
- $("#auth-errs").text(data.errText);
- } else if (data.errCode == 2){
- // Nonexistant username
- $("#auth-errs").text(data.errText);
- } else {
- // Login successful
- $(".auth-box").hide();
- $(".logged-in-head").css("opacity", 1);
- $("#main-content").show();
- $(".userDisplay").text(data.username);
- var userDateStr = data.username + 'lastDate';
- var lastVisit = localStorage.getItem(userDateStr);
- if (lastVisit != null) {
- $(".timeDisplay").text(lastVisit);
- } else {
- $(".timeDisplay").text('Never');
- }
- $(".filter-boxes input").prop('checked', true);
- var filters = {};
- var firstLoad = true;
- var allArticles;
- function loadFeeds(callback){
- var feedsArray = [ "http://feeds.reuters.com/Reuters/domesticNews",
- "http://feeds.reuters.com/Reuters/worldNews",
- "http://feeds.reuters.com/reuters/sportsNews",
- "http://w1.weather.gov/xml/current_obs/KROC.rss",
- "http://feeds.reuters.com/reuters/technologyNews"];
- var articleArray = [];
- var count = 0;
- for (var i in feedsArray){
- var feed = new google.feeds.Feed(feedsArray[i]);
- feed.setNumEntries(6);
- feed.load(function(result) {
- if (!result.error) {
- articleArray = articleArray.concat(result.feed.entries);
- }
- count++;
- if (count == feedsArray.length) {
- allArticles = articleArray;
- callback(articleArray);
- }
- });
- }
- }
- function updateFilters(){
- var boxArray = $(".filter-boxes input");
- for (var i in boxArray){
- filters[boxArray[i].id] = boxArray[i].checked;
- }
- if (firstLoad){
- } else {
- drawArticles(allArticles);
- }
- }
- updateFilters();
- $(".filter-boxes .checkbox").click(updateFilters);
- localStorage.setItem(userDateStr, dateWork());
- var favorites = (data.favorites || []);
- function saveFavorites(){
- $.ajax({
- method: "POST",
- url: "saveFaves.php",
- data: {username: data.username, favorites: {array: favorites}},
- dataType: "json"
- });
- }
- function drawFavorites(){
- var favCont = $("#favContent");
- favCont.html("");
- for (var i in favorites){
- var favItem = $('<div class="favItem"></div>');
- favItem.html(
- "<a href=" + favorites[i].link + "\">" + favorites[i].title + "</a>" +
- "<button type=\"button\" class=\"btn btn-primary-outline unFavBtn\" my-fav= \"" + i + "\">" +
- "<span class=\"glyphicon glyphicon-trash\" aria-hidden=\"true\"></span></button>"
- );
- favCont.append(favItem);
- }
- $(".unFavBtn").click(function(){
- var index = Number($(this).attr("my-fav"));
- favorites.splice(index, 1);
- drawFavorites();
- saveFavorites();
- });
- }
- drawFavorites();
- function filterArticles(articleArray){
- var filtTrans = {
- domesticNews: "us-check",
- worldNews: "world-check",
- sportsNews: "sports-check",
- technologyNews: "tech-check",
- weather: "weather-check"
- };
- var filtered = [];
- for (var i in articleArray){
- var filterKey = filtTrans[(articleArray[i].categories[0] || "weather")];
- if(filters[filterKey]){
- filtered.push(articleArray[i]);
- }
- }
- return filtered;
- }
- function drawArticles(articleArray) {
- firstLoad = false;
- articleArray = filterArticles(articleArray);
- articleArray.sort(function dateComp(article1, article2){
- var d1;
- var d2;
- if (article1.publishedDate != "") {
- d1 = new Date(article1.publishedDate);
- } else {
- d1 = new Date();
- }
- if (article2.publishedDate != "") {
- d2 = new Date(article2.publishedDate);
- } else {
- d2 = new Date();
- }
- if (d1 > d2) {
- return -1;
- } else if (d1 == d2){
- return 0;
- } else {
- return 1;
- }
- });
- var articleCont = $("#rssBody");
- articleCont.html("");
- var catTrans = {
- domesticNews: "US News",
- worldNews: "World News",
- sportsNews: "Sports",
- technologyNews: "Technology"
- };
- for (var i in articleArray){
- var artDate = (articleArray[i].publishedDate || "Right Now ");
- var articleItem = $('<div class="articleItem"></div>');
- articleItem.html(
- "<button type=\"button\" class=\"btn btn-primary-outline favBtn\" my-article= \"" + i + "\">" +
- "<span class=\"glyphicon glyphicon-heart\" aria-hidden=\"true\"></span></button>" +
- "<a href=" + articleArray[i].link + "\">" + articleArray[i].title + "</a><br>" +
- "<span class= \"articleTime\">(" + artDate.substring(0, artDate.length - 9) + ")</span><br>" +
- "<span class= \"snippet\">" + articleArray[i].contentSnippet + "</span>" +
- "<span class= \"category\">" + (catTrans[articleArray[i].categories[0]] || "Weather") + "</span>"
- );
- articleCont.append(articleItem);
- }
- $(".favBtn").click(function(){
- var index = Number($(this).attr("my-article"));
- favorites.push({title: articleArray[index].title, link: articleArray[index].link});
- drawFavorites();
- saveFavorites();
- });
- }
- loadFeeds(drawArticles);
- }
- },
- error: function(data, status, errorThrown){
- //alert("ERROR: " + JSON.stringify(data) + " " + status + " " + errorThrown);
- }
- });
- });
- $("#logout-button").click(function(){
- $("#main-content").hide();
- $(".logged-in-head").css("opacity", 0);
- $(".auth-box").show();
- });
- /*
- "http://feeds.reuters.com/Reuters/domesticNews", //US News
- "http://feeds.reuters.com/Reuters/worldNews", //World News
- "http://feeds.reuters.com/reuters/sportsNews", //Sports
- "http://w1.weather.gov/xml/current_obs/KROC.rss", //Weather
- "http://feeds.reuters.com/reuters/technologyNews" //Technology
- */
- }; //everything
- google.load("feeds", "1");
- google.setOnLoadCallback(everything);
- </script>
- </head>
- <body>
- <!-- Include all compiled plugins (below), or include individual files as needed -->
- <script src = "js/bootstrap.min.js"></script>
- <div class = "container centered">
- <div class = "bg-primary row" id="head-content">
- <div class = "logged-in-head last-visit col-xs-3" id="welcome-box">
- Welcome <span class="userDisplay"></span>.<br>
- Last visit was on: <span class="timeDisplay"></span>.<br>
- </div>
- <div class = "main-col col-xs-6 text-left">
- <h1>News Aggregation</h1>
- </div>
- <div class = "logged-in-head col-xs-3 text-right">
- <br><button type="button" class="btn btn-danger btn-sm" id="logout-button">Logout</button>
- </div>
- </div>
- <div class="row" id="auth-row">
- <div class="auth-box">
- <input type="text" class="form-control" id="username" placeholder="Username">
- <input type="password" class="form-control" id="password" placeholder="Password">
- <div class="btn-group btn-group-justified">
- <div class="btn-group"><button type="button" class="btn btn-default" id="create-acct-btn">Create Account</button></div>
- <div class="btn-group"><button type="button" class="btn btn-primary" id="login-btn">Login</button></div>
- </div>
- </div>
- <div class="err-box text-danger" id="auth-errs"></div>
- <div class="success-box text-success" id="auth-success"></div>
- </div>
- <div class = "row" id="main-content">
- <div class = "col-xs-8" style=" border-right: 1px solid #ccc; border-left: 1px solid #ccc;">
- <div id="rssBody">
- Loading...
- <!--
- <div id="feedControl" class= "feedControl">Loading...</div>
- -->
- </div>
- </div>
- <div class = "col-xs-4" id="favorites">
- <h3>Content Filters</h3>
- <div class="filter-boxes">
- <label class="checkbox active">
- <input type="checkbox" checked id="us-check">US News
- </label>
- <label class="checkbox active">
- <input type="checkbox" checked id="world-check">World News
- </label>
- <label class="checkbox active">
- <input type="checkbox" checked id="sports-check">Sports
- </label>
- <label class="checkbox active">
- <input type="checkbox" checked id="weather-check">Weather
- </label>
- <label class="checkbox active">
- <input type="checkbox" checked id="tech-check">Technology
- </label>
- </div>
- <h3><span class= "fav-text">Favorites</span></h3>
- <div class="fav-list" id="favContent">Loading...</div>
- </div>
- </div>
- </div>
- </body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement