made playground form decent
This commit is contained in:
		
							parent
							
								
									23765a97ef
								
							
						
					
					
						commit
						a16fbdd764
					
				
							
								
								
									
										40
									
								
								index.html
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								index.html
									
									
									
									
									
								
							| @ -153,22 +153,35 @@ | |||||||
|           <div class="col-md-12"> |           <div class="col-md-12"> | ||||||
|             <h2>Go ahead, test our login</h2> |             <h2>Go ahead, test our login</h2> | ||||||
| 
 | 
 | ||||||
|  |             <div ng-if="vm.error" ng-bind="vm.error.message" class="alert alert-warning">err</div> | ||||||
|  |             <div ng-if="vm._working" class="alert alert-info"> | ||||||
|  |               <marquee>taking my sweet time to do something in the background...</marquee> | ||||||
|  |             </div> | ||||||
|  | 
 | ||||||
|             <label>Address:</label> |             <label>Address:</label> | ||||||
|             <input type="text" placeholder="ex: john@example.com" class="form-control" ng-model="vm.form.user" ng-change="vm.fn.changeProvider()"> |             <input type="text" placeholder="ex: john@example.com" class="form-control" ng-model="vm.form.id" ng-change="vm.fn.changeUser()"> | ||||||
|             <label ng-if="vm.advanced">Identity Issuer:</label> |             <label ng-if="vm.advanced">Identity Issuer:</label> | ||||||
|             <input ng-if="vm.advanced" type="text" class="form-control" ng-model="vm.form.provider" placeholder="ex: sso.example.com"> |             <input ng-if="vm.advanced" type="text" class="form-control" ng-model="vm.form.provider" placeholder="ex: sso.example.com" ng-change="vm.fn.changeProvider()"> | ||||||
|             <button class="btn btn-link" ng-if="vm.advanced" ng-click="vm.advanced = !vm.advanced">hide advanced</button> |             <button class="btn btn-link" ng-if="vm.advanced" ng-click="vm.fn.toggleAdvanced()">hide advanced</button> | ||||||
|             <button class="btn btn-link" ng-if="!vm.advanced" ng-click="vm.advanced = !vm.advanced">show advanced</button> |             <button class="btn btn-link" ng-if="!vm.advanced" ng-click="vm.fn.toggleAdvanced()">show advanced</button> | ||||||
|             <button class="btn btn-primary" ng-click="vm.fn.login()">Login</button> |             <button class="btn btn-primary" ng-click="vm.fn.login()" ng-disabled="!vm.validated.provider">Login</button> | ||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
| 
 | 
 | ||||||
|         <div class="row"> |         <div class="row"> | ||||||
|           <div class="col-md-6"> |           <div class="col-md-12"> | ||||||
|  |             <br/> | ||||||
|  |             <br/> | ||||||
|  |             <br/> | ||||||
|  |           </div> | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="row"> | ||||||
|  |           <div class="col-md-12"> | ||||||
| 
 | 
 | ||||||
|             <div class="row"> |             <div class="row"> | ||||||
|               <div class="col-md-12"> |               <div class="col-md-12"> | ||||||
|                 <h2>Status</h2> |                 <h2>Debug & Status Info:</h2> | ||||||
|               </div> |               </div> | ||||||
|             </div> |             </div> | ||||||
| 
 | 
 | ||||||
| @ -232,7 +245,18 @@ | |||||||
|             </div> |             </div> | ||||||
| 
 | 
 | ||||||
|           </div> |           </div> | ||||||
|           <div class="col-md-6"> |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="row"> | ||||||
|  |           <div class="col-md-12"> | ||||||
|  |             <br/> | ||||||
|  |             <br/> | ||||||
|  |             <br/> | ||||||
|  |           </div> | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="row"> | ||||||
|  |           <div class="col-md-12"> | ||||||
|             <h2>Docs</h2> |             <h2>Docs</h2> | ||||||
| 
 | 
 | ||||||
|             <p>0. Include the Library |             <p>0. Include the Library | ||||||
|  | |||||||
| @ -400,7 +400,7 @@ $(function () { | |||||||
|     } else { |     } else { | ||||||
|       console.log('[DEBUG] not an auth window'); |       console.log('[DEBUG] not an auth window'); | ||||||
|       $('.js-playground').addClass('in'); |       $('.js-playground').addClass('in'); | ||||||
|       window.PLAYGROUND(); |       //window.PLAYGROUND();
 | ||||||
|     } |     } | ||||||
|   }); |   }); | ||||||
| }); | }); | ||||||
|  | |||||||
							
								
								
									
										135
									
								
								js/playground.js
									
									
									
									
									
								
							
							
						
						
									
										135
									
								
								js/playground.js
									
									
									
									
									
								
							| @ -21,7 +21,7 @@ | |||||||
| 		$stateProvider.state(aboutState); | 		$stateProvider.state(aboutState); | ||||||
| 	}); | 	}); | ||||||
| */ | */ | ||||||
| 	.controller('PlaygroundCtrl', [ 'azp@oauth3.org', function (OAUTH3) { | 	.controller('PlaygroundCtrl', [ '$timeout', 'azp@oauth3.org', function ($timeout, OAUTH3) { | ||||||
|     // NOTE: This OAUTH3 is the same as window.OAUTH3, but with angular's promise injected
 |     // NOTE: This OAUTH3 is the same as window.OAUTH3, but with angular's promise injected
 | ||||||
|     // TODO: how to load more than one version of oauth3 on the page (i.e. a vanilla version without angular entaglement)
 |     // TODO: how to load more than one version of oauth3 on the page (i.e. a vanilla version without angular entaglement)
 | ||||||
| 		var vm = this; | 		var vm = this; | ||||||
| @ -29,11 +29,85 @@ | |||||||
|     vm.clientUri = OAUTH3.clientUri(window.location); |     vm.clientUri = OAUTH3.clientUri(window.location); | ||||||
|     vm.conf = { client_id: vm.clientUri, client_uri: vm.clientUri, provider_uri: vm.clientUri }; |     vm.conf = { client_id: vm.clientUri, client_uri: vm.clientUri, provider_uri: vm.clientUri }; | ||||||
|     vm.providerUri = vm.conf.client_uri; |     vm.providerUri = vm.conf.client_uri; | ||||||
|  |     // map of things being debounced presently
 | ||||||
|  |     vm.debouncing = {}; | ||||||
|  | 
 | ||||||
|  |     vm.form = {}; | ||||||
|  |     vm.form.id = ''; | ||||||
|  |     vm.form.user = ''; | ||||||
|  |     vm.form.userProvider = ''; | ||||||
|  |     vm.form.provider = ''; | ||||||
|  | 
 | ||||||
|  |     vm.locks = {}; | ||||||
|  |     vm.validated = {}; | ||||||
| 
 | 
 | ||||||
|     //
 |     //
 | ||||||
|     // Convenience for our app
 |     // Convenience for our app
 | ||||||
|     //
 |     //
 | ||||||
|     vm.fn = {}; |     vm.fn = {}; | ||||||
|  |     vm.fn._debounce = {}; | ||||||
|  |     vm.fn.debounceUi = function () { | ||||||
|  |       if (vm.debouncing.user || vm.debouncing.provider) { | ||||||
|  |         vm.locks['login'] = true; | ||||||
|  |       } else { | ||||||
|  |         vm.locks['login'] = false; | ||||||
|  |       } | ||||||
|  |     }; | ||||||
|  |     vm.fn.debounce = function (name, time) { | ||||||
|  |       vm.debouncing[name] = true; | ||||||
|  |       vm.fn.debounceUi(); | ||||||
|  |       $timeout.cancel(vm.fn._debounce[name]); | ||||||
|  |       vm.fn._debounce[name] = $timeout(function () { | ||||||
|  |         vm.debouncing[name] = false; | ||||||
|  |         vm.fn.debounceUi(); | ||||||
|  |         // do nothing, just use promise
 | ||||||
|  |         return; | ||||||
|  |       }, time || 250); | ||||||
|  |       return vm.fn._debounce[name]; | ||||||
|  |     } | ||||||
|  |     vm.fn.changeUser = function () { | ||||||
|  |       var parts = vm.form.id.split('@'); | ||||||
|  |       var user; | ||||||
|  |       var provider; | ||||||
|  | 
 | ||||||
|  |       if (/@/.test(vm.form.id)) { | ||||||
|  |         // The username may have a single @, the provider may not
 | ||||||
|  |         // user@thing.com@whatever.com -> user@thing.com, whatever.com
 | ||||||
|  |         provider = parts.pop(); | ||||||
|  |         vm.form.user = parts.join(''); | ||||||
|  |       } else { | ||||||
|  |         //vm.form.hasUser = false;
 | ||||||
|  |         vm.form.user = null; | ||||||
|  |         provider = parts.join(''); | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       if (!vm.form.providerIndependent) { | ||||||
|  |         vm.form.provider = provider; | ||||||
|  |       } | ||||||
|  |       vm.form.userProvider = provider; | ||||||
|  | 
 | ||||||
|  |       vm.fn.debounce('provider', 250).then(function () { | ||||||
|  |         // uses vm.form.provider for lookup
 | ||||||
|  |         if (vm.form.provider.length >= 5 && vm.form.provider.split('.').length >= 2) { | ||||||
|  |           vm.api.discover(); | ||||||
|  |         } | ||||||
|  |       }); | ||||||
|  |     }; | ||||||
|  |     vm.fn.changeProvider = function () { | ||||||
|  |       vm.form.providerIndependent = true; | ||||||
|  |       vm.fn.debounce('provider', 250).then(function () { | ||||||
|  |         console.log("[TODO] discover advanced-provider"); | ||||||
|  |       }); | ||||||
|  |     }; | ||||||
|  |     vm.fn.toggleAdvanced = function () { | ||||||
|  |       vm.advanced = !vm.advanced; | ||||||
|  |       vm.form.provider = vm.form.userProvider; | ||||||
|  |       if (!vm.advanced) { | ||||||
|  |         vm.form.providerIndependent = false; | ||||||
|  |         vm.fn.changeUser(); | ||||||
|  |       } | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|     vm.fn.lock = function () { |     vm.fn.lock = function () { | ||||||
|       vm._working = true; |       vm._working = true; | ||||||
|     }; |     }; | ||||||
| @ -73,17 +147,37 @@ | |||||||
|         vm.error = e; |         vm.error = e; | ||||||
|       } |       } | ||||||
|     }; |     }; | ||||||
|  |     vm.api._discoverCount = 0; | ||||||
|     vm.api.discover = function () { |     vm.api.discover = function () { | ||||||
|  |       vm.validated.provider = ''; | ||||||
|  |       vm.api._discoverCount += 1; | ||||||
|  |       var latest = vm.api._discoverCount; | ||||||
|  |       var provider = vm.form.provider; // shouldn't be mutable during this time but...
 | ||||||
|  | 
 | ||||||
|       vm.fn.lock(); |       vm.fn.lock(); | ||||||
| 
 | 
 | ||||||
|       vm.discoveryObj = OAUTH3.urls.discover(vm.conf.provider_uri, vm.conf); |       vm.discoveryObj = OAUTH3.urls.discover(provider, vm.conf); | ||||||
|       vm.directivesUrl = OAUTH3.url.normalize(vm.conf.provider_uri) + '/' + vm.discoveryObj.query._pathname; |       vm.directivesUrl = OAUTH3.url.normalize(provider) + '/' + vm.discoveryObj.query._pathname; | ||||||
|       vm.discoveryUrl = vm.discoveryObj.method + ' ' + vm.discoveryObj.url; |       vm.discoveryUrl = vm.discoveryObj.method + ' ' + vm.discoveryObj.url; | ||||||
|       return OAUTH3.discover(vm.conf.provider_uri, vm.conf).then(function (dir) { | 
 | ||||||
|  |       console.log('about to discover'); | ||||||
|  | 
 | ||||||
|  |       return OAUTH3.discover(provider, vm.conf).then(function (dir) { | ||||||
|  |         if (latest !== vm.api._discoverCount) { | ||||||
|  |           console.log('[DEBUG] ignoring stale discover response for', provider); | ||||||
|  |           return; | ||||||
|  |         } | ||||||
|         console.log('[DEBUG] directives:'); |         console.log('[DEBUG] directives:'); | ||||||
|         console.log(dir); |         console.log(dir); | ||||||
|  |         vm.validated.provider = provider; | ||||||
|         vm.directives = JSON.stringify(dir, null, 2); |         vm.directives = JSON.stringify(dir, null, 2); | ||||||
|       }, function (err) { |       }, function (err) { | ||||||
|  |         if (latest !== vm.api._discoverCount) { | ||||||
|  |           console.warn('[DEBUG] ignoring stale discover error for', provider); | ||||||
|  |           console.warn(err); | ||||||
|  |           return; | ||||||
|  |         } | ||||||
|  |         console.log('error on discover'); | ||||||
|         vm.error = err; |         vm.error = err; | ||||||
|       }).then(function () { |       }).then(function () { | ||||||
|         vm.fn.unlock(); |         vm.fn.unlock(); | ||||||
| @ -92,36 +186,3 @@ | |||||||
| 
 | 
 | ||||||
| 	} ] ); | 	} ] ); | ||||||
| }()); | }()); | ||||||
| 
 |  | ||||||
| window.PLAYGROUND = function () { |  | ||||||
|   /* |  | ||||||
|   'use strict'; |  | ||||||
| 
 |  | ||||||
|   console.log("Welcome to the Playground!"); |  | ||||||
|   var clientUri = OAUTH3.clientUri(window.location); |  | ||||||
| 
 |  | ||||||
|   $('input.js-provider-uri').val(window.location.host); |  | ||||||
|   $('span.js-provider-uri').text(window.location.host); |  | ||||||
| 
 |  | ||||||
|   $('body').on('keyup', '.js-provider-uri', function () { |  | ||||||
|     $('span.js-provider-uri').text($('input.js-provider-uri').val()) |  | ||||||
|   }); |  | ||||||
| 
 |  | ||||||
|   $('body').on('click', '.js-discover', function () { |  | ||||||
|     $('.js-discover').attr('disabled', 'disabled'); |  | ||||||
|     console.log('discover clicked!'); |  | ||||||
|     var providerUri = $('input.js-provider-uri').val(); |  | ||||||
| 
 |  | ||||||
|     return OAUTH3.discover(providerUri, { client_uri: clientUri }).then(function (dir) { |  | ||||||
|       console.log('[DEBUG] directives:'); |  | ||||||
|       console.log(dir); |  | ||||||
|       $('.js-directives').val(JSON.stringify(dir, null, 2)); |  | ||||||
|     }, function (err) { |  | ||||||
|       console.error('[DEBUG] error:'); |  | ||||||
|       console.error(err); |  | ||||||
|     }).then(function () { |  | ||||||
|       $('.js-discover').removeAttr('disabled'); |  | ||||||
|     }); |  | ||||||
|   }); |  | ||||||
|   */ |  | ||||||
| }; |  | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user