| Index: polymer_1.0.4/bower_components/google-feeds/google-feeds.html
|
| diff --git a/polymer_1.0.4/bower_components/google-feeds/google-feeds.html b/polymer_1.0.4/bower_components/google-feeds/google-feeds.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..af404e0ada6473a8249739d974bcb3de324344a1
|
| --- /dev/null
|
| +++ b/polymer_1.0.4/bower_components/google-feeds/google-feeds.html
|
| @@ -0,0 +1,222 @@
|
| +<!--
|
| + Copyright 2015 The Polymer Authors. All rights reserved.
|
| + Use of this source code is governed by a BSD-style
|
| + license that can be found in the LICENSE file.
|
| +-->
|
| +<link rel='import' href='../polymer/polymer.html'>
|
| +<link rel='import' href='../google-apis/google-legacy-loader.html'>
|
| +
|
| +<!--
|
| +Exposes [Google Feeds API](https://developers.google.com/feed/)
|
| +
|
| +<b>Example</b>:
|
| +
|
| + <template is='dom-bind'>
|
| + <google-feeds feed='http://www.engadget.com/rss-full.xml'
|
| + results='{{result}}'></google-feeds>
|
| + <p>Feed title: <span>{{result.title}}</span></p>
|
| + </template>
|
| +
|
| +@demo
|
| +-->
|
| +<dom-module id='google-feeds'>
|
| + <template>
|
| + <div id='content'></div>
|
| + </template>
|
| +</dom-module>
|
| +<script>
|
| +(function() {
|
| + Polymer({
|
| +
|
| + is: 'google-feeds',
|
| +
|
| + /**
|
| + * Fired when feed has been loaded
|
| + * @param {object} feed feed object
|
| + * @event google-feeds-response
|
| + */
|
| + /**
|
| + * Fired when feed load fails
|
| + * @param {string} status load status
|
| + * @event google-feeds-error
|
| + */
|
| + /**
|
| + * Fired when multiple feeds have loaded successfully
|
| + * @param {object} feeds multiple feeds
|
| + * @event google-multi-feeds-response
|
| + */
|
| + /**
|
| + * Fired when feed query fails
|
| + * @param {string} status status
|
| + * @event google-feeds-queryerror
|
| + */
|
| + /**
|
| + * Fired when feed query succeeds
|
| + * @param {object} entries query results
|
| + * @event google-feeds-queryresponse
|
| + */
|
| +
|
| + properties: {
|
| +
|
| + /**
|
| + * url of the feed to fetch.
|
| + */
|
| + feed: {
|
| + type: String,
|
| + observer: '_feedChanged'
|
| + },
|
| +
|
| + /**
|
| + * An array of multiple feeds. Feed will load, and report results in `google-feeds-response` event.
|
| + */
|
| + feeds: {
|
| + type: Array,
|
| + value: function() { return []; },
|
| + observer: '_feedsChanged'
|
| + },
|
| +
|
| + /**
|
| + * Result of loading a single feed url
|
| + */
|
| + results: {
|
| + type: Object,
|
| + value: null,
|
| + notify: true
|
| + },
|
| +
|
| + /**
|
| + * Query for google.feeds.findFeeds(). Query result will be reported through `google-feeds-queryresponse` event
|
| + */
|
| + query: {
|
| + type: String,
|
| + observer: '_queryChanged'
|
| + },
|
| +
|
| + /**
|
| + * Number of feed items to fetch in fetchFeed
|
| + */
|
| + count: {
|
| + type: Number,
|
| + value: 32
|
| + },
|
| +
|
| + /**
|
| + * True if feeds API is loading an item
|
| + */
|
| + loading: {
|
| + type: Boolean,
|
| + notify: true
|
| + }
|
| + },
|
| +
|
| + attached: function() {
|
| + this.pendingFeeds = [];
|
| + },
|
| +
|
| + _feedChanged: function() {
|
| + if (this.feed) {
|
| + this.loading = true;
|
| + // call fetchFeeds async to make sure any binding to count property
|
| + // is resolved before fetchFeeds is called
|
| + this._withFeedsApi(this._fetchFeeds.bind(this));
|
| + } else {
|
| + this.results = null;
|
| + }
|
| + },
|
| +
|
| + _fetchFeeds: function() {
|
| + var feed = new google.feeds.Feed(this.feed);
|
| + feed.includeHistoricalEntries(); // tell the API we want to have old entries too
|
| + feed.setNumEntries(this.count); // we want this maximum number of entries, if they exist
|
| + feed.load(this._fetchFeedsDone.bind(this));
|
| + },
|
| +
|
| + _fetchFeedsDone: function(results) {
|
| + this.loading = false;
|
| + if (results.error) {
|
| + this.results = {};
|
| + this.fire('google-feeds-error', {status: results.status});
|
| + } else {
|
| + this.results = results.feed;
|
| + this.fire('google-feeds-response', {feed: results.feed});
|
| + }
|
| + },
|
| +
|
| + _feedsChanged: function() {
|
| + this._withFeedsApi(function(item) {
|
| + this._fetchMultipleFeeds(this.feeds, function(results) {
|
| + // TODO: Figure out why the onLoad callback
|
| + // isn't getting fired. Below isn't fired.
|
| + this.fire('google-multi-feeds-response', { feeds: results });
|
| + });
|
| + }.bind(this));
|
| + },
|
| +
|
| + _fetchMultipleFeeds: function(feeds, onLoad) {
|
| + var feedControl = new google.feeds.FeedControl();
|
| + if (feeds) {
|
| + feeds.forEach(function(item) {
|
| + feedControl.addFeed(item);
|
| + });
|
| + feedControl.setNumEntries(this.count);
|
| + feedControl.draw(this.$.content);
|
| + google.setOnLoadCallback(onLoad);
|
| + }
|
| + },
|
| +
|
| + _queryChanged: function() {
|
| + if (this.query) {
|
| + this.loading = true;
|
| + this._withFeedsApi(this._findFeeds.bind(this));
|
| + }
|
| + },
|
| +
|
| + _findFeeds: function() {
|
| + google.feeds.findFeeds(this.query, this._findFeedsDone.bind(this));
|
| + },
|
| +
|
| + _findFeedsDone: function(results) {
|
| + this.loading = false;
|
| + if (results.error) {
|
| + this.fire('google-feeds-queryerror', {status: results.status});
|
| + } else {
|
| + this.fire('google-feeds-queryresponse', {entries: results.entries});
|
| + }
|
| + },
|
| +
|
| + // TODO(ffu): integrate the ability to load a specific api like feeds
|
| + // into google-jsapi.
|
| + _feedsCallbacks: [],
|
| +
|
| + _feedsApiLoaded: function() {
|
| + while (this._feedsCallbacks.length) {
|
| + var fn = this._feedsCallbacks.shift();
|
| + fn();
|
| + }
|
| + },
|
| +
|
| + _isApiLoaded: function() {
|
| + return !!(window.google && google.feeds && google.feeds.Feed);
|
| + },
|
| +
|
| + _withFeedsApi: function(callback) {
|
| + if (this._isApiLoaded() && callback) {
|
| + callback();
|
| + } else {
|
| + if (!this.feedsApiLoading) {
|
| + var loaded = this._feedsApiLoaded.bind(this);
|
| + var loader = document.createElement('google-legacy-loader');
|
| + loader.addEventListener('api-load', function(e) {
|
| + google.load('feeds', '1', {callback: loaded});
|
| + });
|
| + this.feedsApiLoading = true;
|
| + }
|
| + if (callback) {
|
| + this._feedsCallbacks.push(callback);
|
| + }
|
| + }
|
| + }
|
| +
|
| + });
|
| +})();
|
| +</script>
|
|
|