| Index: polymer_1.0.4/bower_components/google-signin/google-signin.html
|
| diff --git a/polymer_1.0.4/bower_components/google-signin/google-signin.html b/polymer_1.0.4/bower_components/google-signin/google-signin.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..5bf7f958ce969abc2797613130750ee5c3f712c3
|
| --- /dev/null
|
| +++ b/polymer_1.0.4/bower_components/google-signin/google-signin.html
|
| @@ -0,0 +1,490 @@
|
| +<link rel="import" href="../polymer/polymer.html">
|
| +<link rel="import" href="google-signin-aware.html">
|
| +<link rel="import" href="../iron-icon/iron-icon.html">
|
| +<link rel="import" href="../iron-icons/iron-icons.html">
|
| +<link rel="import" href="../font-roboto/roboto.html">
|
| +<link rel="import" href="../google-apis/google-js-api.html">
|
| +<link rel="import" href="../paper-ripple/paper-ripple.html">
|
| +<link rel="import" href="../paper-material/paper-material.html">
|
| +<link rel="import" href="../iron-flex-layout/classes/iron-flex-layout.html">
|
| +<link rel="import" href="google-icons.html">
|
| +
|
| +<dom-module id="google-signin">
|
| + <link rel="import" type="css" href="google-signin.css">
|
| + <template>
|
| + <google-signin-aware id="aware"
|
| + app-package-name="{{appPackageName}}"
|
| + client-id="{{clientId}}"
|
| + cookie-policy="{{cookiePolicy}}"
|
| + request-visible-actions="{{requestVisibleActions}}"
|
| + scopes="{{scopes}}"
|
| + signed-in="{{signedIn}}"
|
| + is-authorized="{{isAuthorized}}"
|
| + need-additional-auth="{{needAdditionalAuth}}"
|
| + has-plus-scopes="{{hasPlusScopes}}"></google-signin-aware>
|
| + <template is="dom-if" if="{{raised}}">
|
| + <paper-material id="shadow" class="fit" elevation="2" animated></paper-material>
|
| + </template>
|
| + <div id="button"
|
| + class$="[[_computeButtonClass(height, width, theme, signedIn, _brand, needAdditionalAuth)]]">
|
| +
|
| + <paper-ripple id="ripple" class="fit"></paper-ripple>
|
| + <!-- this div is needed to position the ripple behind text content -->
|
| + <div relative layout horizontal center-center>
|
| + <template is="dom-if" if="{{_computeButtonIsSignIn(signedIn, needAdditionalAuth)}}">
|
| + <div class="button-content signIn" tabindex="0"
|
| + on-click="signIn" on-keydown="_signInKeyPress">
|
| + <span class="icon"><iron-icon icon="[[_brandIcon]]"></iron-icon></span>
|
| + <span class="buttonText">{{_labelSignin}}</span>
|
| + </div>
|
| + </template>
|
| + <template is="dom-if" if="{{_computeButtonIsSignOut(signedIn, needAdditionalAuth) }}">
|
| + <div class="button-content signOut" tabindex="0"
|
| + on-click="signOut" on-keydown="_signOutKeyPress">
|
| + <span class="icon"><iron-icon icon="[[_brandIcon]]"></iron-icon></span>
|
| + <span class="buttonText">{{labelSignout}}</span>
|
| + </div>
|
| + </template>
|
| + <template is="dom-if" if="{{_computeButtonIsSignOutAddl(signedIn, needAdditionalAuth) }}">
|
| + <div class="button-content signIn" tabindex="0"
|
| + on-click="signIn" on-keydown="_signInKeyPress">
|
| + <span class="icon"><iron-icon icon="[[_brandIcon]]"></iron-icon></span>
|
| + <span class="buttonText">{{labelAdditional}}</span>
|
| + </div>
|
| + </template>
|
| + </div>
|
| +
|
| + </div>
|
| + </template>
|
| +</dom-module>
|
| +<script>
|
| + (function() {
|
| +
|
| + /**
|
| + * Enum brand values.
|
| + * @readonly
|
| + * @enum {string}
|
| + */
|
| + var BrandValue = {
|
| + GOOGLE: 'google',
|
| + PLUS: 'google-plus'
|
| + };
|
| +
|
| + /**
|
| + * Enum height values.
|
| + * @readonly
|
| + * @enum {string}
|
| + */
|
| + var HeightValue = {
|
| + SHORT: 'short',
|
| + STANDARD: 'standard',
|
| + TALL: 'tall'
|
| + };
|
| +
|
| + /**
|
| + * Enum button label default values.
|
| + * @readonly
|
| + * @enum {string}
|
| + */
|
| + var LabelValue = {
|
| + STANDARD: 'Sign in',
|
| + WIDE: 'Sign in with Google',
|
| + WIDE_PLUS: 'Sign in with Google+'
|
| + };
|
| +
|
| + /**
|
| + * Enum theme values.
|
| + * @readonly
|
| + * @enum {string}
|
| + */
|
| + var ThemeValue = {
|
| + LIGHT: 'light',
|
| + DARK: 'dark'
|
| + };
|
| +
|
| + /**
|
| + * Enum width values.
|
| + * @readonly
|
| + * @enum {string}
|
| + */
|
| + var WidthValue = {
|
| + ICON_ONLY: 'iconOnly',
|
| + STANDARD: 'standard',
|
| + WIDE: 'wide'
|
| + };
|
| +
|
| +/**
|
| +<google-signin> is used to authenticate with Google, allowing you to interact
|
| +with other Google APIs such as Drive and Google+.
|
| +
|
| +<img style="max-width:100%;" src="https://cloud.githubusercontent.com/assets/107076/6791176/5c868822-d16a-11e4-918c-ec9b84a2db45.png"/>
|
| +
|
| +If you do not need to show the button, use companion `<google-signin-aware>` element to declare scopes, check authentication state.
|
| +
|
| +#### Examples
|
| +
|
| + <google-signin client-id="..." scopes="https://www.googleapis.com/auth/drive"></google-signin>
|
| +
|
| + <google-signin label-signin="Sign-in" client-id="..." scopes="https://www.googleapis.com/auth/drive"></google-signin>
|
| +
|
| + <google-signin theme="dark" width="iconOnly" client-id="..." scopes="https://www.googleapis.com/auth/drive"></google-signin>
|
| +
|
| +
|
| +#### Notes
|
| +
|
| +The attribute `clientId` is provided in your Google Developers Console
|
| +(https://console.developers.google.com).
|
| +
|
| +The `scopes` attribute allows you to specify which scope permissions are required
|
| +(e.g do you want to allow interaction with the Google Drive API). Many APIs also
|
| +need to be enabled in the Google Developers Console before you can use them.
|
| +
|
| +The `requestVisibleActions` attribute is necessary if you want to write app
|
| +activities (https://developers.google.com/+/web/app-activities/) on behalf of
|
| +the user. Please note that this attribute is only valid in combination with the
|
| +plus.login scope (https://www.googleapis.com/auth/plus.login).
|
| +
|
| +Use label properties to customize prompts.
|
| +
|
| +The button can be styled in using the `height`, `width`, and `theme` attributes.
|
| +These attributes help you follow the Google+ Sign-In button branding guidelines
|
| +(https://developers.google.com/+/branding-guidelines).
|
| +
|
| +The `google-signin-success` event is triggered when a user successfully authenticates
|
| +and `google-signed-out` is triggered when user signeds out.
|
| +You can also use `isAuthorized` attribute to observe user's authentication state.
|
| +
|
| +Additional events, such as `google-signout-attempted` are
|
| +triggered when the user attempts to sign-out and successfully signs out.
|
| +
|
| +The `google-signin-necessary` event is fired when scopes requested via
|
| +google-signin-aware elements require additional user permissions.
|
| +
|
| +#### Testing
|
| +
|
| +By default, the demo accompanying this element is setup to work on localhost with
|
| +port 8080. That said, you *should* update the `clientId` to your own one for
|
| +any apps you're building. See the Google Developers Console
|
| +(https://console.developers.google.com) for more info.
|
| +
|
| +@demo
|
| +*/
|
| +
|
| + Polymer({
|
| +
|
| + is: 'google-signin',
|
| +
|
| + /**
|
| + * Fired when user is signed in.
|
| + * You can use auth2 api to retrieve current user: `gapi.auth2.getAuthInstance().currentUser.get();`
|
| + * @event google-signin-success
|
| + */
|
| +
|
| + /**
|
| + * Fired when the user is signed-out.
|
| + * @event google-signed-out
|
| + */
|
| +
|
| + /**
|
| + * Fired if user requires additional authorization
|
| + * @event google-signin-necessary
|
| + */
|
| +
|
| + /**
|
| + * Fired when signed in, and scope has been authorized
|
| + * @param {Object} result Authorization result.
|
| + * @event google-signin-aware-success
|
| + */
|
| +
|
| + /**
|
| + * Fired when this scope is not authorized
|
| + * @event google-signin-aware-signed-out
|
| + */
|
| + properties: {
|
| + /**
|
| + * App package name for android over-the-air installs.
|
| + * See the relevant [docs](https://developers.google.com/+/web/signin/android-app-installs)
|
| + */
|
| + appPackageName: {
|
| + type: String,
|
| + value: ''
|
| + },
|
| +
|
| + /**
|
| + * The brand being used for logo and styling.
|
| + *
|
| + * @default 'google'
|
| + */
|
| + brand: {
|
| + type: String,
|
| + value: ''
|
| + },
|
| +
|
| + /** @private */
|
| + _brand: {
|
| + type: String,
|
| + computed: '_computeBrand(brand, hasPlusScopes)'
|
| + },
|
| +
|
| + /**
|
| + * a Google Developers clientId reference
|
| + */
|
| + clientId: {
|
| + type: String,
|
| + value: ''
|
| + },
|
| +
|
| + /**
|
| + * The cookie policy defines what URIs have access to the session cookie
|
| + * remembering the user's sign-in state.
|
| + * See the relevant [docs](https://developers.google.com/+/web/signin/reference#determining_a_value_for_cookie_policy) for more information.
|
| + *
|
| + * @default 'single_host_origin'
|
| + */
|
| + cookiePolicy: {
|
| + type: String,
|
| + value: ''
|
| + },
|
| +
|
| + /**
|
| + * The height to use for the button.
|
| + *
|
| + * Available options: short, standard, tall.
|
| + *
|
| + * @type {HeightValue}
|
| + */
|
| + height: {
|
| + type: String,
|
| + value: 'standard'
|
| + },
|
| +
|
| + /**
|
| + * By default the ripple expands to fill the button. Set this to true to
|
| + * constrain the ripple to a circle within the button.
|
| + */
|
| + fill: {
|
| + type: Boolean,
|
| + value: true
|
| + },
|
| +
|
| + /**
|
| + * An optional label for the button for additional permissions.
|
| + */
|
| + labelAdditional: {
|
| + type: String,
|
| + value: 'Additional permissions required'
|
| + },
|
| +
|
| + /**
|
| + * An optional label for the sign-in button.
|
| + */
|
| + labelSignin: {
|
| + type: String,
|
| + value: ''
|
| + },
|
| +
|
| + _labelSignin: {
|
| + type: String,
|
| + computed: '_computeSigninLabel(labelSignin, width, _brand)'
|
| + },
|
| + /**
|
| + * An optional label for the sign-out button.
|
| + */
|
| + labelSignout: {
|
| + type: String,
|
| + value: 'Sign out'
|
| + },
|
| +
|
| + /**
|
| + * If true, the button will be styled with a shadow.
|
| + */
|
| + raised: {
|
| + type: Boolean,
|
| + value: false
|
| + },
|
| +
|
| + /**
|
| + * The app activity types you want to write on behalf of the user
|
| + * (e.g http://schemas.google.com/AddActivity)
|
| + */
|
| + requestVisibleActions: {
|
| + type: String,
|
| + value: ''
|
| + },
|
| +
|
| + /**
|
| + * The scopes to provide access to (e.g https://www.googleapis.com/auth/drive)
|
| + * and should be space-delimited.
|
| + */
|
| + scopes: {
|
| + type: String,
|
| + value: ''
|
| + },
|
| +
|
| + /**
|
| + * The theme to use for the button.
|
| + *
|
| + * Available options: light, dark.
|
| + *
|
| + * @attribute theme
|
| + * @type {ThemeValue}
|
| + * @default 'dark'
|
| + */
|
| + theme: {
|
| + type: String,
|
| + value: 'dark'
|
| + },
|
| +
|
| + /**
|
| + * The width to use for the button.
|
| + *
|
| + * Available options: iconOnly, standard, wide.
|
| + *
|
| + * @type {WidthValue}
|
| + */
|
| + width: {
|
| + type: String,
|
| + value: 'standard'
|
| + },
|
| +
|
| + _brandIcon: {
|
| + type: String,
|
| + computed: '_computeIcon(_brand)'
|
| + },
|
| +
|
| + /**
|
| + * True if *any* element has google+ scopes
|
| + */
|
| + hasPlusScopes: {
|
| + type: Boolean,
|
| + notify: true,
|
| + value: false
|
| + },
|
| +
|
| + /**
|
| + * True if additional authorization required globally
|
| + */
|
| + needAdditionalAuth: {
|
| + type: Boolean,
|
| + value: false
|
| + },
|
| +
|
| + /**
|
| + * Is user signed in?
|
| + */
|
| + signedIn: {
|
| + type: Boolean,
|
| + notify: true,
|
| + value: false,
|
| + observer: '_observeSignedIn'
|
| + },
|
| +
|
| + /**
|
| + * True if authorizations for *this* element have been granted
|
| + */
|
| + isAuthorized: {
|
| + type: Boolean,
|
| + notify: true,
|
| + value: false
|
| + }
|
| +
|
| + },
|
| +
|
| + _computeButtonClass: function(height, width, theme, signedIn, brand, needAdditionalAuth) {
|
| + return "height-" + height + " width-" + width + " theme-" + theme + " signedIn-" + signedIn + " brand-" + brand + " additionalAuth-" + needAdditionalAuth;
|
| + },
|
| +
|
| + _computeIcon: function(brand) {
|
| + return "google:" + brand;
|
| + },
|
| +
|
| + /* Button state computed */
|
| + _computeButtonIsSignIn: function(signedIn, additionalAuth) {
|
| + return !signedIn;
|
| + },
|
| +
|
| + _computeButtonIsSignOut: function(signedIn, additionalAuth) {
|
| + return signedIn && !additionalAuth;
|
| + },
|
| +
|
| + _computeButtonIsSignOutAddl: function(signedIn, additionalAuth) {
|
| + return signedIn && additionalAuth;
|
| + },
|
| +
|
| + _computeBrand: function(attrBrand, hasPlusScopes) {
|
| + var newBrand;
|
| + if (attrBrand) {
|
| + newBrand = attrBrand;
|
| + } else if (hasPlusScopes) {
|
| + newBrand = BrandValue.PLUS;
|
| + } else {
|
| + newBrand = BrandValue.GOOGLE;
|
| + };
|
| + return newBrand;
|
| + },
|
| +
|
| + _observeSignedIn: function(newVal, oldVal) {
|
| + if (newVal) {
|
| + if (this.needAdditionalAuth)
|
| + this.fire('google-signin-necessary');
|
| + this.fire('google-signin-success');
|
| + }
|
| + else
|
| + this.fire('google-signed-out');
|
| + },
|
| +
|
| + /**
|
| + * Determines the proper label based on the attributes.
|
| + */
|
| + _computeSigninLabel: function(labelSignin, width, _brand) {
|
| + if (labelSignin) {
|
| + return labelSignin;
|
| + } else {
|
| + switch(width) {
|
| +
|
| + case WidthValue.WIDE:
|
| + return (_brand == BrandValue.PLUS) ?
|
| + LabelValue.WIDE_PLUS : LabelValue.WIDE;
|
| +
|
| + case WidthValue.STANDARD:
|
| + return LabelValue.STANDARD;
|
| +
|
| + case WidthValue.ICON_ONLY:
|
| + return '';
|
| +
|
| + default:
|
| + console.warn("bad width value: ", width);
|
| + return LabelValue.STANDARD;
|
| + }
|
| + }
|
| + },
|
| +
|
| + /** Sign in user. Opens the authorization dialog for signing in.
|
| + * The dialog will be blocked by a popup blocker unless called inside click handler.
|
| + */
|
| + signIn: function () {
|
| + this.$.aware.signIn();
|
| + },
|
| +
|
| + _signInKeyPress: function (e) {
|
| + if (e.which == 13 || e.keyCode == 13 || e.which == 32 || e.keyCode == 32) {
|
| + e.preventDefault();
|
| + this.signIn();
|
| + }
|
| + },
|
| +
|
| + /** Sign out the user */
|
| + signOut: function () {
|
| + this.fire('google-signout-attempted');
|
| + this.$.aware.signOut();
|
| + },
|
| +
|
| + _signOutKeyPress: function (e) {
|
| + if (e.which == 13 || e.keyCode == 13 || e.which == 32 || e.keyCode == 32) {
|
| + e.preventDefault();
|
| + this.signOut();
|
| + }
|
| + }
|
| + });
|
| + }());
|
| +</script>
|
|
|