diff --git a/feedr/README.md b/feedr/README.md new file mode 100644 index 0000000..46c8d3b --- /dev/null +++ b/feedr/README.md @@ -0,0 +1,192 @@ +# ![](https://ga-dash.s3.amazonaws.com/production/assets/logo-9f88ae6c9c3871690e33280fcf557f33.png) Unit #2 Project: Feedr + +### Overview + +The web is an ever growing medium and it is getting more and more difficult +to filter useful information. In our journey to writing beautiful JavaScript we +have come and will come across a great many reference points that will guide our +learning. This is where personal feeds come in very useful. Online feeds are +like to-do lists in that they can be infinitely personalized and there is not +one solution that works for everybody. + +For our Unit 2 project we will build __Feedr__, a personalized feed reader. Our +feed reader will pull feeds from our favorite blogs. The user will be able to +filter between publications through the dropdown on the header menu. +Clicking/tapping on one of the articles will load a pop up with more +information. The user from that point will be able to either dismiss the +additional information or go to the referenced article. + +This will be our first single page app. All of our application views will be +contained in the provided [index.html](index.html) file. Our task, after we pull from the +respective feed APIs, will be to toggle the appropriate classes and content for +the provided site architecture. + +--- + +### Technical Requirements + +#### Your core application rules: + +__Feed sources:__ + +Give the user the ability to pull from a multiple news sources. Here are a few news sources we suggest: + +- [Reddit](https://www.reddit.com/dev/api) +- [The Guardian](http://open-platform.theguardian.com/access/) +- [Hacker News](https://github.com/HackerNews/API) +- [Daily WTF](http://thedailywtf.com/articles/tdwtf-api) +- [Event Registry](https://eventregistry.org) +- [newsapi.org](https://newsapi.org) (republishes a number of news sources) + +You should also feel free to use other news APIs; however, you will find that many APIs that do not support either [CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing) or [JSONp](https://en.wikipedia.org/wiki/JSONP) will result in a cross-domain restriction error ("No 'Access-Control-Allow-Origin' header is present...") in the browser. To get around this, you can use the following proxy server to filter your API requests. + +Let's say you wanted to use the Digg API, which has the following endpoint: + +`http://digg.com/api/news/popular.json` + +If you preface the request with the proxy server API as follows... + +`https://accesscontrolalloworiginall.herokuapp.com/http://digg.com/api/news/popular.json` + +...you should be able to use the Digg API without encountering a cross-domain restriction error. Here's a code example of how you might use the proxy server: + +```js +$.get("https://accesscontrolalloworiginall.herokuapp.com/http://digg.com/api/news/popular.json", function(results){ + console.log(results); + results.data.feed.forEach(function(result){ + $("ul").append("
  • "+result.content.title+"
  • ") + }) +}) +``` + +If you use your own feeds, they must have APIs with the following minimum +requirements: + +- Each article must provide an image source for the circular thumbnail at the + left of the article. +- Must provide either a category, tag, or custom taxonomy to display below the + title (of course title of article is also required). +- Must provide a point, ranking, or some type of total impressions for the + respective article. +- Must provide either a full version or a summary of the article for the pop up + screen. + +__Feed rules:__ + +- When the application first loads display the loading container (see below on + instructions to toggle this). When you successfully retrieve information from + the default API hide the loader and replace the content of the `#main` + container with that of the API. The DOM structure of each article must adhere + to the `.article` structure. +- When the user selects an article's title show the `#popUp` overlay. The + content of the article must be inserted in the `.container` class inside + `#popUp`. Make sure you remove the `.loader` class when toggling the article + information in the pop-up. +- Change the link of the "Read more from source" button to that of the + respective article. +- When the user selects a source from the dropdown menu on the header, replace + the content of the page with articles from the newly selected source. Display + the loading pop up when the user first selects the new source, and hide it on + success. +- Add an error message (either alert or a notification on the page) if the app + cannot load from the selected feed. + +__Additional UI interaction rules:__ + +- When the user clicks/taps the search icon, expand the input box. Best approach + for this is to toggle the `.active` class for the `#search` container. If the + search input box is already expanded tapping the search icon again will close + the input. Pressing the "Enter" key should also close the opened input box. + _See Bonus 2 for search filtering functionality._ +- When the app is first loading and when the user selects to load a new feed + from the dropdown, display the `#popUp` container with the `.loader` class. + You can toggle the `.hidden` class from the container to display/hide the + overlay container. +- Add functionality to hide the pop-up when user selects the "X" button on the + pop-up. +- Clicking/tapping the "Feedr" logo will display the main/default feed. + + +#### Bonus + +1. Merge all feeds into one main feed in chronological order for the initial + view. When the user clicks/taps the "Feedr" logo at the top, they should be + return to this feed. This will be the new "home view." +2. Filter feed by title according to user keyboard input on the search input + box. This should run the filter on every keystroke. When the input box is + cleared, all articles should display in the respective feed. +3. Add infinite scrolling. Start displaying only the first 20 articles and keep + loading more on user scrolling. + +--- + +### Necessary Deliverables + +* A __working Feedr, built by you__, that can be run locally +* A __new git repository hosted on Github__, where your codebase is maintained. + - Most of the your will be done on the __app.js__ file. You may update + the index.html and style.css files if you would like to further customize your + app. + +--- + +### Getting Started + +Begin by forking the starter code repository. You can do so by clicking the "Fork" icon on +the top right of [this page](https://github.com/generalassembly-studio/JS-Unit-2-Project-Starter-Code). Once +complete, clone the repository to your computer by running the following +commands: + +``` +cd ~/JSD/ +git clone https://github.com//feedr.git +cd feedr +``` + +You can then open the `~/JSD/feedr` directory in your editor and +work on the below steps. As you accomplish a feature, be sure to commit it in +Git with the following commands: + +``` +git add . +git commit -m "A description of what was added" +git push origin master +``` + +Here are some sugestions on where to start: + +- Start by adding all the DOM functionality first. +- Map out all of the needed fields/properties from each respective feed. +- Start by doing a console.log of the incoming feeds to confirm you have a + successful transaction before you start mapping anything out. +- Make sure you have the [JSON View chrome extension](https://chrome.google.com/webstore/detail/jsonview/chklaanhfefbnpoihckbnefhakgolnmc?hl=en) + to get a clean view of the JSON dump in your browser. +- Think about ways to best standardize all of your incoming data. +- Test small pieces of functionality frequently, to make sure everything is + working. +- Use tools such as Stack Overflow, Google, and documentation resources to solve + problems. + +--- + +### Useful Resources + +**Key Resources** + +- [MDN JavaScript data types and data structures](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures) +- [jQuery Event Basics](https://learn.jquery.com/events/event-basics/) +- [Understanding Event Delegation](http://learn.jquery.com/events/event-delegation/) +- [jQuery Tutorial](http://tutorials.jenkov.com/jquery/index.html#jquery-version-used-in-this-tutorial) +- [A beginner's guide to HTTP and REST](http://code.tutsplus.com/tutorials/a-beginners-guide-to-http-and-rest--net-16340) +- [Async JS Callbacks](http://sporto.github.io/blog/2012/12/09/callbacks-listeners-promises/) +- [SitePoint: Intro to jQuery Shorthand AJAX Methods](http://www.sitepoint.com/introduction-jquery-shorthand-ajax-methods/) + +--- + +### Project Feedback + Evaluation + +When your project is complete, push the final version to your fork on GitHub and send the link to Larissa and Sasha. You do not need to create a pull request for this project. + +If you'd like to schedule a 30-minute code review, let Sasha and Larissa know. This is an opportunity for you to demonstrate your app and explain how you coded it, and for the instructional team to give you feedback on what you did well as well as things you might consider doing differently or adding for your future coding projects. + +A code review is optional, so if you'd like to participate in one, it is up to you to contact Sasha and Larissa to schedule it once your project is done. \ No newline at end of file diff --git a/feedr/images/ajax_loader.gif b/feedr/images/ajax_loader.gif new file mode 100644 index 0000000..ee545aa Binary files /dev/null and b/feedr/images/ajax_loader.gif differ diff --git a/feedr/images/article_placeholder_1.jpg b/feedr/images/article_placeholder_1.jpg new file mode 100644 index 0000000..7423074 Binary files /dev/null and b/feedr/images/article_placeholder_1.jpg differ diff --git a/feedr/images/article_placeholder_2.jpg b/feedr/images/article_placeholder_2.jpg new file mode 100644 index 0000000..b8d15d2 Binary files /dev/null and b/feedr/images/article_placeholder_2.jpg differ diff --git a/feedr/images/error_loading.jpg b/feedr/images/error_loading.jpg new file mode 100644 index 0000000..b892b73 Binary files /dev/null and b/feedr/images/error_loading.jpg differ diff --git a/feedr/images/search.png b/feedr/images/search.png new file mode 100644 index 0000000..39bd2fa Binary files /dev/null and b/feedr/images/search.png differ diff --git a/feedr/index.html b/feedr/index.html new file mode 100644 index 0000000..c31bac4 --- /dev/null +++ b/feedr/index.html @@ -0,0 +1,52 @@ + + + + + + + Feedr @ GA + + + + + + + + + + + +
    +
    +

    Feedr

    + +
    +
    +
    + +
    +
    + + + + + + + diff --git a/feedr/js/app.js b/feedr/js/app.js new file mode 100644 index 0000000..7cbf4f3 --- /dev/null +++ b/feedr/js/app.js @@ -0,0 +1,137 @@ +/* + GA-JS-SF-9 + Samantha Park + Please add all Javascript code to this file. +*/ +'use strict'; + +//define NEWS SOURCES +const allSource = 'sources= the-verge, polygon, wired&'; +const vergeSource = 'sources=the-verge&'; +const polygonSource = 'sources=polygon&'; +const wiredSource = 'sources=wired&'; + +//ON HOMEPAGE load +window.addEventListener('load', function(){ + getHeadlines(allSource); +}, false); + +//function to GRAB HEADLINES based on which NEWS SOURCE is selected +function getHeadlines(source){ + const url= 'https://newsapi.org/v2/top-headlines?' + + source + 'apiKey=acd435a3c73c4530a3dc729d9a356729'; + + fetch(url).then(function(response) { + if(response.ok) { + return response.json(); + }else { + console.log("There was a problem."); + $('#main').val(''); + errorMessage(); + } + }).then(function(data){ + //console.log(data); + createArticle(data); + }); +} + +//get NEWS SOURCES LINKS +const vergeFilter = $('#vergeButton'); +const polygonFilter = $('#polygonButton'); +const wiredFilter = $('#wiredButton'); +const feedrHomeButton = $('#feedrHome'); + +//SELECT BY news sources +vergeFilter.on('click', function(){ + $('#main').empty(); + getHeadlines(vergeSource); +}); + +polygonFilter.on('click', function(){ + $('#main').empty(); + getHeadlines(polygonSource); +}); + +wiredFilter.on('click', function(){ + $('#main').empty(); + getHeadlines(wiredSource); +}); + +feedrHomeButton.on('click', function(){ + $('#main').empty(); + getHeadlines(allSource); +}); + +//FUNCTION to CONVERT OBJECT and CREATE ARTICLE BLOCKS and APPEND +function createArticle(data){ + const $articles = data.articles; + console.log($articles); + + $.each($articles, function(){ + const $articleSection = $('
    ').addClass('article'); + + const $imageSection = $('
    ').addClass('featuredImage'); + const $image = $('').attr('src', this.urlToImage); + $imageSection.append($image); + $articleSection.append($imageSection); + + const $contentSection = $('
    ').addClass('articleContent'); + const $titleContent = $('').attr('href', '#'); + const $titleLink = $('

    ').text(this.title); + $titleContent.append($titleLink); + const $descriptionContent = $('

    ').text(this.source.name); + $contentSection.append($titleContent); + $contentSection.append($descriptionContent); + $articleSection.append($contentSection); + + const $impressions = $('
    ').addClass('impressions').text('526'); + $articleSection.append($impressions); + + const $clearfix = $('
    ').addClass('clearfix'); + $articleSection.append($clearfix); + + $('#main').append($articleSection); + }); +} + +//ON CLICK show ARTICLE DETAILS +$('.articleContent a').on('click', function(event) { + event.preventDefault(); + $titleToAdd = this.val(); + + $('#popUp').removeClass('hidden'); + $('#popUp').removeClass('loader'); + + const $closePopUp = $('').attr('href', '#').addClass('closePopUp').text('X'); + $('#popUp').append($closePopUp); + + const $newContainer = $('
    ').addClass('container'); + + const $titlePopUp = $('

    ').val($titleToAdd); + $newContainer.append($titlePopUp); + + const $descripPopUp = $('

    ').val(); + $newContainer.append($descripPopUp); + + const $goToArticle = $('').attr({href: "", target: "_blank"}).addClass('popUpAction').text('READ MORE FROM SOURCE'); + $newContainer.append($goToArticle); + + $('#popUp').append($newContainer); +}); + +//CLOSE article window +$(".closePopUp").on('click', function(){ + $('#popUp').addClass('hidden'); + $('#containerPopUp').val(''); +}); + +//LOADER function +// $('#popUp').removeClass('hidden').addClass('loader'); +// $('.closePopUp').addClass('hidden'); + +//ERROR MESSAGE function +function errorMessage(){ + const $errorLoadingImg = $('').attr('src', '../images/error_loading.jpg'); + const $errorText = $('

    ').val('Sorry! We are unable to load these articles right now.'); + $('#main').append($errorLoadingImg); +} diff --git a/feedr/psuedocodeFeedr.md b/feedr/psuedocodeFeedr.md new file mode 100644 index 0000000..cf838b3 --- /dev/null +++ b/feedr/psuedocodeFeedr.md @@ -0,0 +1,56 @@ +** GET JSON STRING ** + + API KEY = acd435a3c73c4530a3dc729d9a356729 + + const vergeNews [sources = the-verge] + const polygonNews [sources = polygon] + const wiredNews [sources = wired] + + const url= 'https://newsapi.org/v2/top-headlines?' + + 'sources=NEWS-OUTLET' + + 'apiKey=API_KEY'; + + var req = new Request(url); + + fetch(req) + .then(function(response) { + if there is a response: + console.log(response.json()); + function to convert object to string + function to attach articles to the DOM + else: + get error image + get error message + append both to page + }) + +** ATTACHING ARTICLES TO THE DOM ** +0. convert object to array +1. forEach loop + a. article container: create article with class article + b. image: create section with featuredImage class + i. get image url from api content & add to img src + ii. append section to article + c. title/link/type: create section with class articleContent + i. get article url & add to a href + ii. get article title & assign to h3 + iii. get tag/type/date? of article and add to h6 ??? + iv. append section to article + d. rating: create section with class impressions + i. get page views & add to section + e. clearfix: add div with class clearfix + f. append article to container + +** ON CLICK FUNCTIONS ** +- on dropdown menu click + remove all + attach articles from one object +- on home clicks + add everything + sort by date (top is most recent) +- on article click + remove class hidden from id popUp + get info from section clicked + append that info to the pop-up section + close popup by adding hidden on click closePopUp + remove content from popup section diff --git a/feedr/styles/html5bp.css b/feedr/styles/html5bp.css new file mode 100644 index 0000000..405ba2c --- /dev/null +++ b/feedr/styles/html5bp.css @@ -0,0 +1,261 @@ +/*! HTML5 Boilerplate v5.2.0 | MIT License | https://html5boilerplate.com/ */ + +/* + * What follows is the result of much research on cross-browser styling. + * Credit left inline and big thanks to Nicolas Gallagher, Jonathan Neal, + * Kroc Camen, and the H5BP dev community and team. + */ + +/* ========================================================================== + Base styles: opinionated defaults + ========================================================================== */ + +html { + color: #222; + font-size: 1em; + line-height: 1.4; +} + +/* + * Remove text-shadow in selection highlight: + * https://twitter.com/miketaylr/status/12228805301 + * + * These selection rule sets have to be separate. + * Customize the background color to match your design. + */ + +::-moz-selection { + background: #b3d4fc; + text-shadow: none; +} + +::selection { + background: #b3d4fc; + text-shadow: none; +} + +/* + * A better looking default horizontal rule + */ + +hr { + display: block; + height: 1px; + border: 0; + border-top: 1px solid #ccc; + margin: 1em 0; + padding: 0; +} + +/* + * Remove the gap between audio, canvas, iframes, + * images, videos and the bottom of their containers: + * https://github.com/h5bp/html5-boilerplate/issues/440 + */ + +audio, +canvas, +iframe, +img, +svg, +video { + vertical-align: middle; +} + +/* + * Remove default fieldset styles. + */ + +fieldset { + border: 0; + margin: 0; + padding: 0; +} + +/* + * Allow only vertical resizing of textareas. + */ + +textarea { + resize: vertical; +} + +/* ========================================================================== + Browser Upgrade Prompt + ========================================================================== */ + +.browserupgrade { + margin: 0.2em 0; + background: #ccc; + color: #000; + padding: 0.2em 0; +} + + +/* ========================================================================== + Helper classes + ========================================================================== */ + +/* + * Hide visually and from screen readers: + */ + +.hidden { + display: none !important; +} + +/* + * Hide only visually, but have it available for screen readers: + * http://snook.ca/archives/html_and_css/hiding-content-for-accessibility + */ + +.visuallyhidden { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} + +/* + * Extends the .visuallyhidden class to allow the element + * to be focusable when navigated to via the keyboard: + * https://www.drupal.org/node/897638 + */ + +.visuallyhidden.focusable:active, +.visuallyhidden.focusable:focus { + clip: auto; + height: auto; + margin: 0; + overflow: visible; + position: static; + width: auto; +} + +/* + * Hide visually and from screen readers, but maintain layout + */ + +.invisible { + visibility: hidden; +} + +/* + * Clearfix: contain floats + * + * For modern browsers + * 1. The space content is one way to avoid an Opera bug when the + * `contenteditable` attribute is included anywhere else in the document. + * Otherwise it causes space to appear at the top and bottom of elements + * that receive the `clearfix` class. + * 2. The use of `table` rather than `block` is only necessary if using + * `:before` to contain the top-margins of child elements. + */ + +.clearfix:before, +.clearfix:after { + content: " "; /* 1 */ + display: table; /* 2 */ +} + +.clearfix:after { + clear: both; +} + +/* ========================================================================== + EXAMPLE Media Queries for Responsive Design. + These examples override the primary ('mobile first') styles. + Modify as content requires. + ========================================================================== */ + +@media only screen and (min-width: 35em) { + /* Style adjustments for viewports that meet the condition */ +} + +@media print, + (-webkit-min-device-pixel-ratio: 1.25), + (min-resolution: 1.25dppx), + (min-resolution: 120dpi) { + /* Style adjustments for high resolution devices */ +} + +/* ========================================================================== + Print styles. + Inlined to avoid the additional HTTP request: + http://www.phpied.com/delay-loading-your-print-css/ + ========================================================================== */ + +@media print { + *, + *:before, + *:after { + background: transparent !important; + color: #000 !important; /* Black prints faster: + http://www.sanbeiji.com/archives/953 */ + box-shadow: none !important; + text-shadow: none !important; + } + + a, + a:visited { + text-decoration: underline; + } + + a[href]:after { + content: " (" attr(href) ")"; + } + + abbr[title]:after { + content: " (" attr(title) ")"; + } + + /* + * Don't show links that are fragment identifiers, + * or use the `javascript:` pseudo protocol + */ + + a[href^="#"]:after, + a[href^="javascript:"]:after { + content: ""; + } + + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + + /* + * Printing Tables: + * http://css-discuss.incutio.com/wiki/Printing_Tables + */ + + thead { + display: table-header-group; + } + + tr, + img { + page-break-inside: avoid; + } + + img { + max-width: 100% !important; + } + + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + + h2, + h3 { + page-break-after: avoid; + } +} diff --git a/feedr/styles/normalize.css b/feedr/styles/normalize.css new file mode 100644 index 0000000..5e5e3c8 --- /dev/null +++ b/feedr/styles/normalize.css @@ -0,0 +1,424 @@ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ + +/** + * 1. Set default font family to sans-serif. + * 2. Prevent iOS and IE text size adjust after device orientation change, + * without disabling user zoom. + */ + +html { + font-family: sans-serif; /* 1 */ + -ms-text-size-adjust: 100%; /* 2 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/** + * Remove default margin. + */ + +body { + margin: 0; +} + +/* HTML5 display definitions + ========================================================================== */ + +/** + * Correct `block` display not defined for any HTML5 element in IE 8/9. + * Correct `block` display not defined for `details` or `summary` in IE 10/11 + * and Firefox. + * Correct `block` display not defined for `main` in IE 11. + */ + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} + +/** + * 1. Correct `inline-block` display not defined in IE 8/9. + * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. + */ + +audio, +canvas, +progress, +video { + display: inline-block; /* 1 */ + vertical-align: baseline; /* 2 */ +} + +/** + * Prevent modern browsers from displaying `audio` without controls. + * Remove excess height in iOS 5 devices. + */ + +audio:not([controls]) { + display: none; + height: 0; +} + +/** + * Address `[hidden]` styling not present in IE 8/9/10. + * Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22. + */ + +[hidden], +template { + display: none; +} + +/* Links + ========================================================================== */ + +/** + * Remove the gray background color from active links in IE 10. + */ + +a { + background-color: transparent; +} + +/** + * Improve readability of focused elements when they are also in an + * active/hover state. + */ + +a:active, +a:hover { + outline: 0; +} + +/* Text-level semantics + ========================================================================== */ + +/** + * Address styling not present in IE 8/9/10/11, Safari, and Chrome. + */ + +abbr[title] { + border-bottom: 1px dotted; +} + +/** + * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. + */ + +b, +strong { + font-weight: bold; +} + +/** + * Address styling not present in Safari and Chrome. + */ + +dfn { + font-style: italic; +} + +/** + * Address variable `h1` font-size and margin within `section` and `article` + * contexts in Firefox 4+, Safari, and Chrome. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/** + * Address styling not present in IE 8/9. + */ + +mark { + background: #ff0; + color: #000; +} + +/** + * Address inconsistent and variable font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` affecting `line-height` in all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +/* Embedded content + ========================================================================== */ + +/** + * Remove border when inside `a` element in IE 8/9/10. + */ + +img { + border: 0; +} + +/** + * Correct overflow not hidden in IE 9/10/11. + */ + +svg:not(:root) { + overflow: hidden; +} + +/* Grouping content + ========================================================================== */ + +/** + * Address margin not present in IE 8/9 and Safari. + */ + +figure { + margin: 1em 40px; +} + +/** + * Address differences between Firefox and other browsers. + */ + +hr { + box-sizing: content-box; + height: 0; +} + +/** + * Contain overflow in all browsers. + */ + +pre { + overflow: auto; +} + +/** + * Address odd `em`-unit font size rendering in all browsers. + */ + +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} + +/* Forms + ========================================================================== */ + +/** + * Known limitation: by default, Chrome and Safari on OS X allow very limited + * styling of `select`, unless a `border` property is set. + */ + +/** + * 1. Correct color not being inherited. + * Known issue: affects color of disabled elements. + * 2. Correct font properties not being inherited. + * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. + */ + +button, +input, +optgroup, +select, +textarea { + color: inherit; /* 1 */ + font: inherit; /* 2 */ + margin: 0; /* 3 */ +} + +/** + * Address `overflow` set to `hidden` in IE 8/9/10/11. + */ + +button { + overflow: visible; +} + +/** + * Address inconsistent `text-transform` inheritance for `button` and `select`. + * All other form control elements do not inherit `text-transform` values. + * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. + * Correct `select` style inheritance in Firefox. + */ + +button, +select { + text-transform: none; +} + +/** + * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` + * and `video` controls. + * 2. Correct inability to style clickable `input` types in iOS. + * 3. Improve usability and consistency of cursor style between image-type + * `input` and others. + */ + +button, +html input[type="button"], /* 1 */ +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; /* 2 */ + cursor: pointer; /* 3 */ +} + +/** + * Re-set default cursor for disabled elements. + */ + +button[disabled], +html input[disabled] { + cursor: default; +} + +/** + * Remove inner padding and border in Firefox 4+. + */ + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/** + * Address Firefox 4+ setting `line-height` on `input` using `!important` in + * the UA stylesheet. + */ + +input { + line-height: normal; +} + +/** + * It's recommended that you don't attempt to style these elements. + * Firefox's implementation doesn't respect box-sizing, padding, or width. + * + * 1. Address box sizing set to `content-box` in IE 8/9/10. + * 2. Remove excess padding in IE 8/9/10. + */ + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Fix the cursor style for Chrome's increment/decrement buttons. For certain + * `font-size` values of the `input`, it causes the cursor style of the + * decrement button to change from `default` to `text`. + */ + +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Address `appearance` set to `searchfield` in Safari and Chrome. + * 2. Address `box-sizing` set to `border-box` in Safari and Chrome. + */ + +input[type="search"] { + -webkit-appearance: textfield; /* 1 */ + box-sizing: content-box; /* 2 */ +} + +/** + * Remove inner padding and search cancel button in Safari and Chrome on OS X. + * Safari (but not Chrome) clips the cancel button when the search input has + * padding (and `textfield` appearance). + */ + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * Define consistent border, margin, and padding. + */ + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +/** + * 1. Correct `color` not being inherited in IE 8/9/10/11. + * 2. Remove padding so people aren't caught out if they zero out fieldsets. + */ + +legend { + border: 0; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Remove default vertical scrollbar in IE 8/9/10/11. + */ + +textarea { + overflow: auto; +} + +/** + * Don't inherit the `font-weight` (applied by a rule above). + * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. + */ + +optgroup { + font-weight: bold; +} + +/* Tables + ========================================================================== */ + +/** + * Remove most spacing between table cells. + */ + +table { + border-collapse: collapse; + border-spacing: 0; +} + +td, +th { + padding: 0; +} diff --git a/feedr/styles/style.css b/feedr/styles/style.css new file mode 100644 index 0000000..106c712 --- /dev/null +++ b/feedr/styles/style.css @@ -0,0 +1,239 @@ +/* General styles */ +.container { + max-width: 1000px; + margin: 0 auto; +} + +#popUp { + opacity: 0.95; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: #fff; +} + +#popUp .closePopUp { + position: absolute; + top: 20px; + right: 20px; + font-size: 40px; + color: #FE052C; + text-decoration: none; +} + +#popUp.loader { + background-image: url(../images/ajax_loader.gif); + background-repeat: no-repeat; + background-position: center center; +} + +#popUp.loader .container { + display: none; +} + +#popUp .container { + margin-top: 80px; +} + +#popUp h1 { + margin-bottom: 0; +} + +#popUp .popUpAction { + padding: 10px; + background-color: #FE052C; + color: #fff; + text-decoration: none; + border-radius: 5px; + transform: 0.2s all; + margin-top: 30px; + display: inline-block; +} + +#popUp .popUpAction:hover { + color: #FE052C; + background: #fff; +} + +/* Header styles */ +header { + background-color: #FE052C; + position: fixed; + top: 0; + left: 0; + right: 0; + /*what is being changed*/ + z-index: 1000, +} + +header h1 { + color: #FFF; + padding: 10px 2%; + margin: 0; + width: 16%; + float: left; + padding-left: 0; +} + +/* Header navigation bar */ +header nav { + padding: 10px 2%; + width: 76%; + float: right; + text-align: right; + line-height: 30px; + margin-top: 0; + position: relative; + vertical-align: middle; +} + +/* Search bar */ +header #search { + width: 20px; + height: 20px; + position: absolute; + right: 20px; + top: 10px; +} + +header #search a { + display: block; + width: 100%; + padding: 10px; +} + +header #search a:hover { + background: #CC0020; +} + +header #search img { + width: 100%; + display: block; +} + +header #search input { + position: absolute; + right: 20px; + /*top: 10px;*/ + padding: 8px 0; + width: 0; + transition: 0.2s all; + visibility: hidden; +} + +header #search.active input { + width: 160px; + padding: 8px 10px; + visibility: visible; +} + +header #search.active a { + background: #CC0020; +} + +header nav a { + display:block; + padding:0 10px; + color:#FFF; + font-size:16px; + line-height: 40px; + text-decoration:none; + transition: 0.2s all; +} + +header nav a:hover { + background-color: #fff; + color: #CC0020; +} + +nav ul { + padding:0; + margin:0; + margin-right: 30px; + list-style: none; + position: relative; + } + +nav ul li { + display:inline-block; + background-color: #CC0020; + position: relative; +} + +nav ul ul { + display: none; + position: absolute; + top: 40px; + right: -30px; +} + +/* Display Dropdowns on Hover */ +nav ul li:hover > ul { + display:inherit; +} + +/* First Tier Dropdown */ +nav ul ul li { + width:170px; + float:none; + display:list-item; + position: relative; +} + +/* Main Section */ +#main { + margin-top: 65px; +} + +/* Individual Article Styling */ +.article { + border-bottom: 1px solid #ccc; + transition: 0.2s all; +} + +.article:hover { + padding: 0 2%; + background-color: #eee; +} + +.article .featuredImage { + width: 12%; + float: left; + margin: 1.5%; + max-width: 60px; +} + +.article .featuredImage img { + max-width: 100%; + border-radius: 50px; +} + +.article .articleContent { + width: 70%; + float: left; +} + +.article .articleContent a { + text-decoration: none; +} + +.article .articleContent h3 { + margin-bottom: 0; + color: #FE052C; +} + +.article .articleContent h6 { + margin-top: 0; + color: #666; +} + +.article .impressions { + width: 15%; + float: right; + font-size: 30px; + margin-top: 15px; + text-align: right; + color: #097FB2; +} diff --git a/js/app.js b/js/app.js index a6502cd..f8a2126 100755 --- a/js/app.js +++ b/js/app.js @@ -1,3 +1,5 @@ /* + GA-JS-SF-9 + Samantha Park Please add all Javascript code to this file. */