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));