Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(721)

Unified Diff: polymer_1.0.4/bower_components/google-calendar/google-calendar.html

Issue 1205703007: Add polymer 1.0 to npm_modules (Closed) Base URL: https://chromium.googlesource.com/infra/third_party/npm_modules.git@master
Patch Set: Renamed folder to 1.0.4 Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: polymer_1.0.4/bower_components/google-calendar/google-calendar.html
diff --git a/polymer_1.0.4/bower_components/google-calendar/google-calendar.html b/polymer_1.0.4/bower_components/google-calendar/google-calendar.html
new file mode 100644
index 0000000000000000000000000000000000000000..a7a871c16dc77443a1c755edab19762073f24ed8
--- /dev/null
+++ b/polymer_1.0.4/bower_components/google-calendar/google-calendar.html
@@ -0,0 +1,309 @@
+<link rel="import" href="../polymer/polymer.html">
+<link rel="import" href="../google-signin/google-signin-aware.html">
+<link rel="import" href="../google-apis/google-client-loader.html">
+
+
+<!--
+Element providing a list of Google Calendars for a signed in user.
+Needs a google-signin element included somewhere on the same page
+that handles authentication.
+
+##### Example
+
+ <google-calendar-list title="What I'm up to"></google-calendar-list>
+
+@demo
+-->
+<dom-module id="google-calendar-list">
+ <style>
+ :host, span {
+ display: inline-block;
+ }
+ ul {
+ list-style: none;
+ padding: 0;
+ }
+
+ li {
+ font-family: Arial, sans-serif;
+ display: block;
+ list-style: none;
+ width: 300px;
+ border-radius: .2em;
+ padding: .2em;
+ margin: .2em;
+ overflow: hidden;
+ }
+
+ li a {
+ color: inherit;
+ display: block;
+ text-decoration: none;
+ }
+ </style>
+ <template>
+ <google-client-loader id="calendar" name="calendar" version="v3"
+ on-google-api-load="displayCalendars"></google-client-loader>
+ <google-signin-aware
+ scopes="https://www.googleapis.com/auth/calendar.readonly"
+ is-authorized="{{_signedIn}}"></google-signin-aware>
+
+ <ul id="calendars">
+ <li>{{title}}</li>
+ <template is="dom-repeat" items="{{calendars}}">
+ <li style$="{{_computeCalStyle(item.backgroundColor)}}">
+ <a href="{{_computeCalHref(item.id, item.timeZone)}}" target="_blank">{{item.summary}}</a>
+ </li>
+ </template>
+ </ul>
+ </template>
+</dom-module>
+
+<script>
+ Polymer({
+
+ is: 'google-calendar-list',
+
+ properties: {
+ _signedIn: {
+ type: Boolean,
+ value: false,
+ observer: '_signInChanged'
+ },
+ /**
+ * A title to be displayed on top of the calendar list.
+ */
+ title: {
+ type: String,
+ value: 'My calendars'
+ },
+ /**
+ * List of calendars
+ */
+ calendars: {
+ type: Array,
+ value: function() { return []; },
+ readOnly: true
+ }
+ },
+
+ _signInChanged: function(val) {
+ if (val) {
+ this.displayCalendars();
+ }
+ else {
+ this._setCalendars([]);
+ }
+ },
+
+ _computeCalStyle: function(backgroundColor) {
+ return 'background-color:' + (backgroundColor || 'gray');
+ },
+ _computeCalHref: function(calId, calTimeZone) {
+ return 'https://www.google.com/calendar/embed?src=' + calId + '&ctz=' + calTimeZone;
+ },
+ /**
+ * Displays the calendar list if the user is signed in to Google.
+ */
+ displayCalendars: function() {
+ if (this._signedIn && this.$.calendar.api) {
+ var request = this.$.calendar.api.calendarList.list({"key": ""});
+
+ // var request = this.$.calendar.api.calendarList.list({"key": ""});
+ request.execute(function(resp) {
+ if (resp.error) {
+ console.error("Error with calendarList.list", resp.message)
+ } else {
+ this._setCalendars(resp.items);
+ }
+ }.bind(this));
+ }
+ }
+ });
+</script>
+
+
+<dom-module id="google-calendar-busy-now">
+ <style>
+ span {
+ font-family: Arial, sans-serif;
+ display: inline-block;
+ border-radius: .2em;
+ padding: .2em;
+ margin: .2em;
+ overflow: hidden;
+ }
+
+ .busy {
+ background-color: #FA573C;
+ }
+
+ .free {
+ background-color: #7BD148;
+ }
+
+ .na {
+ background-color: #999;
+ }
+ </style>
+ <template>
+ <google-client-loader id="calendar" name="calendar" version="v3"
+ on-google-api-load="displayBusy"></google-client-loader>
+ <google-signin-aware
+ scopes="https://www.googleapis.com/auth/calendar.readonly"
+ is-authorized="{{_isAuthorized}}"></google-signin-aware>
+
+ <span class$="{{_labelClass}}">{{_label}}</span>
+ </template>
+</dom-template>
+<script>
+ (function() {
+ var MS_PER_MINUTE = 60000;
+ var TIME_SPAN = 30;
+
+/**
+A badge showing the free/busy status based on the events in a given calendar.
+
+##### Example
+
+ <google-calendar-busy-now
+ calendarId="YOUR_CAL_ID"
+ apiKey="YOUR_API_KEY"
+ busyLabel="Do not disturb"
+ freeLabel="I'm free, talk to me!">
+ </google-calendar-busy-now>
+
+*/
+ Polymer({
+ is: 'google-calendar-busy-now',
+
+ properties: {
+ /**
+ * Event from this calendar decide whether the status is free/busy.
+ */
+ calendarId: {
+ type: String,
+ value: null,
+ observer: '_calendarIdChanged'
+ },
+ /**
+ * API key to use with Calendar API requests.
+ */
+ apiKey: {
+ type: String,
+ value: null
+ },
+ /**
+ * Label to be displayed if the status is busy.
+ */
+ busyLabel: {
+ type: String,
+ value: "I'm busy"
+ },
+ /**
+ * Label to be displayed if the status is free.
+ */
+ freeLabel: {
+ type: String,
+ value: "I'm free"
+ },
+
+ _labelClass: {
+ type: String,
+ value: ''
+ },
+
+ _label: {
+ type: String,
+ value: ''
+ },
+
+ _isAuthorized: {
+ type: Boolean,
+ value: false,
+ observer: '_isAuthorizedChanged'
+ }
+ },
+
+ _calendarIdChanged: function() {
+ this.displayBusy();
+ },
+
+ _isAuthorizedChanged: function() {
+ this.displayBusy();
+ },
+
+ _setState: function(state) {
+ switch(state) {
+ case 'free':
+ this._label = this.freeLabel;
+ this._labelClass = 'free';
+ break;
+ case 'busy':
+ this._label = this.busyLabel;
+ this._labelClass = 'busy';
+ break;
+ case 'na':
+ this._label = 'n/a';
+ this._labelClass = 'na';
+ break;
+ };
+ },
+ /**
+ * Displays the busy/free status. Use it to refresh label state
+ */
+ displayBusy: function() {
+ if (!this.calendarId) {
+ console.log('CalendarId is required for this component');
+ return;
+ }
+ if (!this._isAuthorized) {
+ this._setState('na');
+ return;
+ }
+ if (this.$.calendar.api) {
+ if (this.apiKey) {
+ gapi.client.setApiKey(this.apiKey);
+ }
+ var now = new Date();
+ var query = {
+ timeMin: now.toISOString(),
+ timeMax: new Date(now.valueOf() + TIME_SPAN * MS_PER_MINUTE).toISOString(),
+ items: [
+ {
+ id: this.calendarId
+ }
+ ]
+ }
+ var request = this.$.calendar.api.freebusy.query(query);
+ request.execute(function(resp) {
+ if (!resp.calendars) {
+ if (resp.error) {
+ this._setState('na');
+ } else {
+ this._setState('free');
+ }
+ return;
+ }
+ if (resp.calendars[this.calendarId].errors) {
+ this._setState('na');
+ return;
+ }
+ var now = new Date();
+ var busyTimes = resp.calendars[this.calendarId];
+ for (var i = 0, busyTime; busyTime = busyTimes.busy[i]; i++) {
+ var start = new Date(busyTime.start);
+ var end = new Date(busyTime.end);
+ var busy = start < now && now < end;
+ this._setState( busy ? 'busy': 'free');
+ if (busy) {
+ break;
+ }
+ }
+ }.bind(this));
+ }
+ }
+ });
+ })();
+</script>
+

Powered by Google App Engine
This is Rietveld 408576698