mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			145 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			145 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // Licensed to the Apache Software Foundation (ASF) under one
 | |
| // or more contributor license agreements.  See the NOTICE file
 | |
| // distributed with this work for additional information
 | |
| // regarding copyright ownership.  The ASF licenses this file
 | |
| // to you under the Apache License, Version 2.0 (the
 | |
| // "License"); you may not use this file except in compliance
 | |
| // with the License.  You may obtain a copy of the License at
 | |
| //
 | |
| //   http://www.apache.org/licenses/LICENSE-2.0
 | |
| //
 | |
| // Unless required by applicable law or agreed to in writing,
 | |
| // software distributed under the License is distributed on an
 | |
| // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 | |
| // KIND, either express or implied.  See the License for the
 | |
| // specific language governing permissions and limitations
 | |
| // under the License.
 | |
| (function($, cloudStack) {
 | |
|   /**
 | |
|    * Login process
 | |
|    */
 | |
|   cloudStack.uiCustom.login = function(args) {
 | |
|     var $container = args.$container;
 | |
|     var $login = $('#template').find('.login').clone();
 | |
|     var $form = $login.find('form');
 | |
|     var $inputs = $form.find('input[type=text], input[type=password]');
 | |
|     var complete = args.complete;
 | |
|     var bypass = args.bypassLoginCheck && args.bypassLoginCheck();
 | |
| 
 | |
|     // Check to see if we can bypass login screen
 | |
|     if (bypass) {
 | |
|       complete({
 | |
|         user: bypass.user
 | |
|       });
 | |
| 
 | |
|       return;
 | |
|     }
 | |
| 
 | |
|     $login.appendTo('html body');
 | |
|     $('html body').addClass('login');
 | |
| 
 | |
|     // Remove label if field was auto filled
 | |
|     $.each($form.find('label'), function() {
 | |
|       var $label = $(this);
 | |
|       var $input = $form.find('input').filter(function() {
 | |
|         return $(this).attr('name') == $label.attr('for');
 | |
|       });
 | |
|       if ($input.val()) {
 | |
|         $label.hide();
 | |
|       }
 | |
|     });
 | |
| 
 | |
|     // Form validation
 | |
|     $form.validate();
 | |
| 
 | |
|     // Form label behavior
 | |
|     $inputs.bind('keydown focus click blur', function(event) {
 | |
|       var $target = $(event.target);
 | |
|       var $label = $form.find('label').filter(function() {
 | |
|         return $(this).attr('for') == $target.attr('name');
 | |
|       });
 | |
| 
 | |
|       if (event.type == 'keydown') {
 | |
|         $label.hide();
 | |
| 
 | |
|         return true;
 | |
|       } else if (event.type == 'blur') {
 | |
|         if ($target.hasClass('first-input')) {
 | |
|           $target.removeClass('first-input');
 | |
|         }
 | |
|         if (!$(this).val()) {
 | |
|           $label.show();
 | |
|         }
 | |
|       } else {
 | |
|         if (!$target.hasClass('first-input')) {
 | |
|             $label.hide();
 | |
|         }
 | |
|       }
 | |
| 
 | |
|       return true;
 | |
|     });
 | |
| 
 | |
|     if (!args.hasLogo) $login.addClass('nologo');
 | |
| 
 | |
|     // Labels cause related input to be focused
 | |
|     $login.find('label').click(function() {
 | |
|       var $input = $inputs.filter('[name=' + $(this).attr('for') + ']');
 | |
|       var $label = $(this);
 | |
| 
 | |
|       $input.focus();
 | |
|       $label.hide();
 | |
|     });
 | |
| 
 | |
|     $inputs.filter(':first').addClass('first-input').focus();
 | |
| 
 | |
|     // Login action
 | |
|     $login.find('input[type=submit]').click(function() {
 | |
|       if (!$form.valid()) return false;
 | |
| 
 | |
|       var data = cloudStack.serializeForm($form);
 | |
| 
 | |
|       args.loginAction({
 | |
|         data: data,
 | |
|         response: {
 | |
|           success: function(args) {
 | |
|             $login.remove();
 | |
|             $('html body').removeClass('login');
 | |
|             complete({
 | |
|               user: args.data.user
 | |
|             });
 | |
|           },
 | |
|           error: function(args) {
 | |
|             cloudStack.dialog.notice({ message: args });
 | |
|           }
 | |
|         }
 | |
|       });
 | |
| 
 | |
|       return false;
 | |
|     });
 | |
| 
 | |
|     // Select language
 | |
|     var $languageSelect = $login.find('select[name=language]');
 | |
|     $languageSelect.change(function() {
 | |
| 		  if($(this).val() != '') //language dropdown is not blank
 | |
|         $.cookie('lang', $(this).val()); //the selected option in language dropdown will be used (instead of browser's default language) 
 | |
| 			else //language dropdown is blank
 | |
| 			  $.cookie('lang', null); //null $.cookie('lang'), so browser's default language will be used.
 | |
|       document.location.reload();
 | |
|     });
 | |
|     
 | |
|     $languageSelect.val($.cookie('lang'));
 | |
| 
 | |
|     // Hide login screen, mainly for SSO
 | |
|     if (args.hideLoginScreen) {
 | |
|       $login.children().hide();
 | |
|       $login.append($('<div>').addClass('loading-overlay').append(
 | |
|         $('<span>').html(
 | |
|           // _l is not set yet, so localize directly to dictionary
 | |
|           // [should fix in future]
 | |
|           dictionary['message.redirecting.region']
 | |
|         )
 | |
|       ));
 | |
|     }
 | |
|   };
 | |
| })(jQuery, cloudStack);
 |