220 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			220 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| window.common = (function(global) {
 | |
|   const {
 | |
|     $,
 | |
|     Rx: { Observable },
 | |
|     common = { init: [] },
 | |
|     Mousetrap
 | |
|   } = global;
 | |
| 
 | |
|   common.ctrlEnterClickHandler = function ctrlEnterClickHandler(e) {
 | |
|     // ctrl + enter or cmd + enter
 | |
|     if (
 | |
|       e.keyCode === 13 &&
 | |
|       (e.metaKey || e.ctrlKey)
 | |
|     ) {
 | |
|       $('#complete-courseware-dialog').off('keydown', ctrlEnterClickHandler);
 | |
|       if ($('#submit-challenge').length > 0) {
 | |
|         $('#submit-challenge').click();
 | |
|       } else {
 | |
|         window.location = '/challenges/next-challenge?id=' + common.challengeId;
 | |
|       }
 | |
|     }
 | |
|   };
 | |
| 
 | |
|   common.init.push(function($) {
 | |
| 
 | |
|     var $marginFix = $('.innerMarginFix');
 | |
|     $marginFix.css('min-height', $marginFix.height());
 | |
| 
 | |
|     common.submitBtn$ = Observable.fromEvent($('#submitButton'), 'click');
 | |
| 
 | |
|     common.resetBtn$ = Observable.fromEvent($('#reset-button'), 'click');
 | |
| 
 | |
|     // init modal keybindings on open
 | |
|     $('#complete-courseware-dialog').on('shown.bs.modal', function() {
 | |
|       $('#complete-courseware-dialog').keydown(common.ctrlEnterClickHandler);
 | |
|     });
 | |
| 
 | |
|     // remove modal keybinds on close
 | |
|     $('#complete-courseware-dialog').on('hidden.bs.modal', function() {
 | |
|       $('#complete-courseware-dialog').off(
 | |
|         'keydown',
 | |
|         common.ctrlEnterClickHandler
 | |
|       );
 | |
|     });
 | |
| 
 | |
|     // set focus keybind
 | |
|     Mousetrap.bind(['command+shift+e', 'ctrl+shift+e'], () => {
 | |
|         common.editor.focus();
 | |
|     });
 | |
| 
 | |
|     // video checklist binding
 | |
|     $('.challenge-list-checkbox').on('change', function() {
 | |
|       var checkboxId = $(this).parent().parent().attr('id');
 | |
|       if ($(this).is(':checked')) {
 | |
|         $(this).parent().siblings().children().addClass('faded');
 | |
|         if (!localStorage || !localStorage[checkboxId]) {
 | |
|           localStorage[checkboxId] = true;
 | |
|         }
 | |
|       }
 | |
| 
 | |
|       if (!$(this).is(':checked')) {
 | |
|         $(this).parent().siblings().children().removeClass('faded');
 | |
|         if (localStorage[checkboxId]) {
 | |
|           localStorage.removeItem(checkboxId);
 | |
|         }
 | |
|       }
 | |
|     });
 | |
| 
 | |
|     $('.checklist-element').each(function() {
 | |
|       var checklistElementId = $(this).attr('id');
 | |
|       if (localStorage[checklistElementId]) {
 | |
|         $(this).children().children('li').addClass('faded');
 | |
|         $(this).children().children('input').trigger('click');
 | |
|       }
 | |
|     });
 | |
| 
 | |
| 
 | |
|     // video challenge submit
 | |
|     $('#next-courseware-button').on('click', function() {
 | |
|       $('#next-courseware-button').unbind('click');
 | |
|       if ($('.signup-btn-nav').length < 1) {
 | |
|         var data;
 | |
|         var solution = $('#public-url').val() || null;
 | |
|         var githubLink = $('#github-url').val() || null;
 | |
|         switch (common.challengeType) {
 | |
|           case common.challengeTypes.VIDEO:
 | |
|             data = {
 | |
|               id: common.challengeId,
 | |
|               name: common.challengeName,
 | |
|               challengeType: +common.challengeType
 | |
|             };
 | |
|             $.ajax({
 | |
|               url: '/completed-challenge/',
 | |
|               type: 'POST',
 | |
|               data: JSON.stringify(data),
 | |
|               contentType: 'application/json',
 | |
|               dataType: 'json'
 | |
|             })
 | |
|               .success(function(res) {
 | |
|                 if (!res) {
 | |
|                   return;
 | |
|                 }
 | |
|                 window.location.href = '/challenges/next-challenge?id=' +
 | |
|                   common.challengeId;
 | |
|               })
 | |
|               .fail(function() {
 | |
|                 window.location.replace(window.location.href);
 | |
|               });
 | |
| 
 | |
|             break;
 | |
|           case common.challengeTypes.BASEJUMP:
 | |
|           case common.challengeTypes.ZIPLINE:
 | |
|             data = {
 | |
|               id: common.challengeId,
 | |
|               name: common.challengeName,
 | |
|               challengeType: +common.challengeType,
 | |
|               solution,
 | |
|               githubLink
 | |
|             };
 | |
| 
 | |
|             $.ajax({
 | |
|               url: '/completed-zipline-or-basejump/',
 | |
|               type: 'POST',
 | |
|               data: JSON.stringify(data),
 | |
|               contentType: 'application/json',
 | |
|               dataType: 'json'
 | |
|             })
 | |
|               .success(function() {
 | |
|                 window.location.href = '/challenges/next-challenge?id=' +
 | |
|                   common.challengeId;
 | |
|               })
 | |
|               .fail(function() {
 | |
|                 window.location.replace(window.location.href);
 | |
|               });
 | |
|             break;
 | |
| 
 | |
|           case common.challengeTypes.BONFIRE:
 | |
|             window.location.href = '/challenges/next-challenge?id=' +
 | |
|               common.challengeId;
 | |
|             break;
 | |
| 
 | |
|           default:
 | |
|             console.log('Happy Coding!');
 | |
|             break;
 | |
|           }
 | |
|       }
 | |
|     });
 | |
| 
 | |
|     if (common.challengeName) {
 | |
|       window.ga('send', 'event', 'Challenge', 'load', common.gaName);
 | |
|     }
 | |
| 
 | |
|     $('.modal').on('show.bs.modal', function() {
 | |
|       $('.gitter-chat-embed, .wiki-aside, .map-aside')
 | |
|         .addClass('is-collapsed');
 | |
|     });
 | |
| 
 | |
|     $('#complete-courseware-dialog').on('hidden.bs.modal', function() {
 | |
|       if (common.editor.focus) {
 | |
|         common.editor.focus();
 | |
|       }
 | |
|     });
 | |
| 
 | |
|     $('#trigger-issue-modal').on('click', function() {
 | |
|       $('#issue-modal').modal('show');
 | |
|     });
 | |
| 
 | |
|     $('#trigger-help-modal').on('click', function() {
 | |
|       $('#help-modal').modal('show');
 | |
|     });
 | |
| 
 | |
|     $('#trigger-reset-modal').on('click', function() {
 | |
|       $('#reset-modal').modal('show');
 | |
|     });
 | |
| 
 | |
|     $('#trigger-pair-modal').on('click', function() {
 | |
|       $('#pair-modal').modal('show');
 | |
|     });
 | |
| 
 | |
|     $('#completed-courseware').on('click', function() {
 | |
|       $('#complete-courseware-dialog').modal('show');
 | |
|     });
 | |
| 
 | |
|     $('#show-solution').on('click', function() {
 | |
|       $('#complete-courseware-dialog').modal('hide');
 | |
|       $('#nav-wiki-btn').click();
 | |
|     });
 | |
| 
 | |
|     $('#challenge-help-btn').on('click', function() {
 | |
|       $('.wiki-aside, .map-aside, #chat-embed-main').addClass('is-collapsed');
 | |
|     });
 | |
| 
 | |
|     $('#help-ive-found-a-bug-wiki-article').on('click', function() {
 | |
|       window.open(
 | |
|         'https://github.com/FreeCodeCamp/FreeCodeCamp/wiki/' +
 | |
|           'FreeCodeCamp-Report-Bugs',
 | |
|         '_blank'
 | |
|       );
 | |
|     });
 | |
| 
 | |
|     $('#search-issue').on('click', function() {
 | |
|       var queryIssue = window.location.href
 | |
|         .toString()
 | |
|         .split('?')[0]
 | |
|         .replace(/(#*)$/, '');
 | |
|       window.open(
 | |
|         'https://github.com/FreeCodeCamp/FreeCodeCamp/issues?q=' +
 | |
|         'is:issue is:all ' +
 | |
|         (common.challengeName) +
 | |
|         ' OR ' +
 | |
|         queryIssue
 | |
|           .substr(queryIssue.lastIndexOf('challenges/') + 11)
 | |
|           .replace('/', ''), '_blank');
 | |
|     });
 | |
| 
 | |
|   });
 | |
| 
 | |
|   return common;
 | |
| }(window));
 |