1/** 2 * @file 3 * Mobile App related fix. 4 */ 5 6// Declaring jquery as $ variable for mobile app function. 7var $ = jQuery; 8 9(function ($, cookies) { 10 Drupal.behaviors.mobileApp = { 11 attach: function (context, settings) { 12 $("#mobile-app-browse").hide(); 13 14 // ANDROID Mobile APP. 15 // Check the mobile app user agent present. 16 if (navigator.userAgent.indexOf('mp_cordova_app_ios') === -1 17 && navigator.userAgent.indexOf('mp_cordova_app_tempapp') === -1 18 && navigator.userAgent.indexOf('mp_cordova_app') >= 0 19 ) { 20 // Add class to page div for mobile app. 21 $('#page-wrapper').addClass('mp-mobile-app'); 22 $('body').addClass('mp-mobile-app-body'); 23 } 24 25 if (navigator.userAgent.indexOf('one_mobile_app') >= 0 ){ 26 $('button#accessibilitytool').css('display', 'none'); 27 $('a.mobile-menu').css('display', 'none'); 28 $('#footer').css('display','none'); 29 $('#formbricks-modal-container').css('display','none'); 30 $('#sliding-popup').css('display','none'); 31 $('.block-mp-theme-mypagess25cta').css('display','none'); 32 // Hide dashboard menu on personal detail page and adjust padding. 33 $(".block-mp-theme-dashboardleftmenu, .block-pp-theme-dashboardleftmenu, .my-page-cv-block, .footer_copyright").hide(); 34 $(".page-mypage-personal-details #block-mp-theme-content, .page-mypage-personal-details #block-pp-theme-content").css("padding", "30px 0 0 0"); 35 } 36 37 var appStatus = 'old'; 38 // For NGE-1697 mobile changes for MP UK 39 //if (($.cookie('mpuk_industralised_cookie') != undefined && $.cookie('mpuk_industralised_cookie') == 'true')) { 40 if ((cookies.get('mpuk_industralised_cookie') != undefined && cookies.get('mpuk_industralised_cookie') == 'true')) { 41 appStatus = 'new'; 42 } 43 44 // ANDROID and IOS common function. 45 // Check the mobile app user agent present. 46 if (navigator.userAgent.indexOf('mp_cordova_app') >= 0) { 47 // Show update popup for Android apps. 48 if (typeof drupalSettings.app_popup_settings !== 'undefined') { 49 var show_popup = drupalSettings.app_popup_settings.andriod_popup; 50 51 //if (show_popup && ($.cookie('temphubGiantURLupdate') == undefined || $.cookie('temphubGiantURLupdate') == 'false') && navigator.userAgent.indexOf('mp_cordova_app_ios') === -1) { 52 if (show_popup && navigator.userAgent.indexOf('mp_cordova_app_ios') === -1) { 53 showUpdatePopup(drupalSettings.app_popup_settings.play_store_url); 54 } 55 } 56 57 // Add class to page div for mobile app. 58 $('body').addClass('mp-mobile-app-body'); 59 $('#page-wrapper').addClass('mp-mobile-app'); 60 // Update the login link for Mobile app. 61 $('.role--anonymous .user_login, .mp-loginlink, .mp-user-forgot-success .form-region a, .role--anonymous .dashboard-info a, .role--anonymous .block-homepagecampaignfooterblock .footer_campaign a[href^="/mypage"], form.mp-anon-job-alert-success .form-actions.form-submit a').attr('href', '#native_login'); 62 63 $('.mobile-settings').attr("href", "#mobileappsetting"); 64 $('.page-mypage-dashboard .sub-menu-account-settings a').attr('href', '#native_change_password'); 65 66 // Here, we are intentionally altering sign in link for Mobile apps. 67 // Existing link is making an ajax call and opens login popup. 68 var sign_in_link = '<a href="#native_login" class="sign-in-link">' + Drupal.t('Sign in') + '</a>'; 69 $('.role--anonymous #mp-job-apply-form .login-link a, .role--anonymous #mp-cv-submit-form .login-link a').replaceWith(sign_in_link); 70 $('.role--anonymous #mp-job-apply-form .login-link a, .role--anonymous #mp-user-consent-cv-submit-form .login-link a').replaceWith(sign_in_link); 71 // Here, we are intentionally altering log out / sign out / change password link for Mobile apps. 72 // MP_UK mobile app is running on old Mobile app code, so skipping this. 73 // Except MP_UK site, do follow this change for all other sites. 74 if ((!$('body').hasClass('site-name-MP_UK') && !$('body').hasClass('site-name-MP_GB')) || appStatus == "new") { 75 var logout_link = '<a href="#logout" class="sign-out-link">' + Drupal.t('Sign out') + '</a>'; 76 $('.user-logged-in #mp-job-apply-form .login-link a, .user-logged-in #mp-cv-submit-form .login-link a').replaceWith(logout_link); 77 $('.user-logged-in #mp-job-apply-form .login-link a, .user-logged-in #mp-user-consent-cv-submit-form .login-link a').replaceWith(logout_link); 78 // Mypage menu Logout link changed for Mobile Apps. 79 $('.user-links .mypage-links-wrapper a.logout').attr('href', '#logout');
80 $('.my-page-dashboard .mypage-account-setting, .mypage-links-wrapper .mypage-account-setting').attr('href', '#native_change_password'); 81 } 82 } 83 84 // IOS Mobile APP. 85 // Show CV upload only for iPhone and iPad. 86 if (navigator.userAgent.indexOf('mp_cordova_app_ios') >= 0) { 87 // Add class to identify IOS Mobile APP. 88 $('#page-wrapper').addClass('mp-mobile-app-ios'); 89 90 // Disable forward & back links. 91 if (document.referrer.length < 1) { 92 $('.back, .forward').prop('onclick', null).off('click').addClass('disabled'); 93 } 94 95 //var back_link = $.cookie('back-link'); 96 var back_link = cookies.get('back-link'); 97 if (back_link === 0 || back_link === null) { 98 $('.forward').prop('onclick', null).off('click').addClass('disabled'); 99 } 100 101 if ($('.mycv-selected').length) { 102 $('.mobile-browse-wrapper .upload-cv-text').hide(); 103 } 104 105 var cv_fid = $('.removecv-link').attr('data-id'); 106 var removeFunction = "mobileremoveCV('removecv_" + cv_fid + "')"; 107 $(".removecv-link").attr("onclick", removeFunction); 108 109 if (jQuery('#mobile-app-browse #add-cv').length == 0) { 110 $("#mobile-app-browse").append('<a id="add-cv" class="cv-browse" href="#" style="display:none"></a>'); 111 } 112 113 $(".upload-list").before('<div class="file-list"><ul id="cv-instant-upload"></ul></div>'); 114 $(".upload-list").hide(); 115 116 // Adding the CV in frontend. 117 $(once('add-cv','#add-cv')).on('click', function () { 118 mobileAppendCV($(this).attr('class')); 119 }); 120 121 var ratio = window.devicePixelRatio || 1; 122 // Define the users device screen dimensions. 123 var screen = { 124 width : window.screen.width * ratio, 125 height : window.screen.height * ratio 126 }; 127 128 // iPhone X and above Detection. 129 var width = [1125, 750, 1242]; 130 var height = [2436, 1624, 2688]; 131 132 if (jQuery.inArray(screen.width , width ) >= 0 && jQuery.inArray(screen.height , height ) >= 0) { 133 $("meta[name='viewport']").attr('content', 'width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0, viewport-fit=cover') 134 $('#page-wrapper').addClass('mp-mobile-iphonex'); 135 $('body').addClass('mp-mobile-iphonex-body'); 136 } 137 138 // Hide nav bar if the keypad in open state. 139 $(document).on('focus', 'textarea, input.form-text, select', function () { 140 if (!$('body').hasClass('hide-ios-footer')) { 141 $('.mp-mobile-app-ios .ios-nav-mobile').css('display', 'none'); 142 } 143 144 $('#header').css('position', 'absolute'); 145 }).on('blur', 'textarea, input.form-text, select', function () { 146 if (!$('body').hasClass('hide-ios-footer')) { 147 $('.mp-mobile-app-ios .ios-nav-mobile').css('display', 'block'); 148 } 149 150 $('#header').css('position', 'fixed'); 151 }).on('touchend', 'input.form-submit', function () { 152 if (!$('body').hasClass('hide-ios-footer')) { 153 $('.mp-mobile-app-ios .ios-nav-mobile').css('display', 'block'); 154 } 155 156 $('#header').css('position', 'fixed'); 157 }); 158 159 // Show update popup for IOS apps. 160 if (typeof drupalSettings.app_popup_settings !== 'undefined') { 161 var show_popup = drupalSettings.app_popup_settings.ios_popup; 162 163 //if (show_popup && ($.cookie('temphubGiantURLupdate') == undefined || $.cookie('temphubGiantURLupdate') == 'false')) { 164 if (show_popup) { 165 showUpdatePopup(drupalSettings.app_popup_settings.apple_store_url); 166 } 167 } 168 } 169 170 // TempAPP only. 171 if (navigator.userAgent.indexOf('mp_cordova_app_tempapp') >= 0) { 172 // Add class to page div for mobile app. 173 $('#page-wrapper').addClass('mp-mobile-tempapp'); 174 175 // Showing temp job main-menu item in tempapp and changing href for login user. 176 var main_menu_tempitem = '.menu-primary-menu .main_menu_item_tempapp'; 177 $(main_menu_tempitem).parent().show(); 178 179 if ($("body").hasClass("user-logged-in")) { 180 $(main_menu_tempitem).attr('href', '#tempapp_roles'); 181 } else { 182 $(main_menu_tempitem).attr('href', '#tempapp_login'); 183 } 184 185 // Only for MP_UK mobile app, change the MyAccount Setting link URL. 186 // MP_UK mobile is running on old mobile app code, so its specially required 187 // for that app. rest other sites will follow latest app code base. 188 if (($('body').hasClass('site-name-MP_UK') || $('body').hasClass('site-name-MP_GB')) && appStatus == "old") {
189 $('.my-page-dashboard a.mobile-settings').attr('href', '?mobileappsetting'); 190 } 191 } 192 193 // Any anchor link clicked with in Mobile apps. 194 $(document).on('click', 'a', function () { 195 // For IOS only, set path in cookie to use in Fwd button. 196 if ( 197 ((navigator.userAgent.indexOf('mp_cordova_app_ios') >= 0) || (navigator.userAgent.indexOf('mp_cordova_app_tempapp') >= 0)) 198 && navigator.userAgent.indexOf('mp_cordova_app_android') === -1 199 ) { 200 var $this = $(this); 201 202 if ($this.parent().hasClass('ios-mobile-nav') && $this.hasClass('back')) { 203 //$.cookie('back-link', 1, {path: '/'}); 204 cookies.set('back-link', 1, {path: '/'}); 205 } else { 206 //$.cookie('back-link', 0, {path: '/'}); 207 cookies.set('back-link', 0, {path: '/'}); 208 } 209 } 210 211 // Add loader Android, tempapp and IOS apps. 212 if (navigator.userAgent.indexOf('mp_cordova_app_android') >= 0 || 213 navigator.userAgent.indexOf('mp_cordova_app_ios') >= 0 || 214 navigator.userAgent.indexOf('mp_cordova_app_tempapp') >= 0) { 215 var link_href = $(this).attr('href'); 216 217 // Check the link href has valid url. If valid add the loader. 218 if (!$(this).hasClass('flag-processed') 219 && !$(this).hasClass('apply-link') 220 && !$(this).hasClass('set-as-default-cv') 221 && !$(this).hasClass('personal-cancel') 222 && !$(this).hasClass('my-cv-list') 223 && !$(this).hasClass('edit-experience') 224 && !$(this).hasClass('remove-exp') 225 && link_href.indexOf('#job-titles-block') === -1 226 && link_href.indexOf('#location-block') === -1 227 && link_href.indexOf('#sector-block') === -1 228 && link_href.indexOf('#industry-block') === -1 229 && link_href.indexOf('#browse') === -1 230 && link_href.indexOf('#summary') === -1 231 && link_href.indexOf('#block-similar-jobs-mobile') === -1 232 && link_href.indexOf('#job-description') === -1 233 && link_href.indexOf('#native') === -1 234 && link_href !== "#" 235 && link_href.indexOf('javascript:void') === -1) { 236 $('div.native_mobile').addClass('native_mobile_loader'); 237 } 238 } 239 }); 240 241 $(document).ajaxComplete(function (event, request, settings) { 242 $('div.native_mobile').removeClass('native_mobile_loader'); 243 }); 244 } 245 }; 246})(jQuery, window.Cookies); 247 248jQuery(document).ready(function () { 249 if (navigator.userAgent.indexOf('mp_cordova_app_ios') >= 0) { 250 // For IOS App, Browse option show/hide on clock on upload cv CTA. 251 $(document).on('click', '.mobile-browse-wrapper span', function () { 252 $("#mobile-app-browse").toggle(); 253 $(this).toggleClass('active'); 254 }); 255 } 256 // Added id for resolved accessibility G1, G123 and G124. 257 if ($('form.webform-submission-form #mobile-app-browse').find('.cv-browse').length > 0) { 258 $('#mobile-app-browse').find('.cv-browse').attr('id', 'cv_upload'); 259 } 260}); 261 262// Append the value to form. 263function mobileAppendCV(classname) { 264 // Fixing D10 deprecations. 265 // var file_fid = $.cookie('file_id'); 266 // var file_name = $.cookie('file_name'); 267 // var file_url = $.cookie('file_url'); 268 var file_fid = window.Cookies.get('file_id'); 269 var file_name = window.Cookies.get('file_name'); 270 var file_url = window.Cookies.get('file_url'); 271 272 if (classname.indexOf('webform-browse') >= 0) { 273 cvRow = '<div class="file-list"><ul><li class="uploaded-cv pdf"><span class="uploaded-file file-view-link">' + file_name + '</span>\n\ 274 <span class="upload-component"><a class="remove-link webform-file managed-file" href="javascript:void(0);" onclick="mobileRemoveWebformCV()">' + Drupal.t('Remove') + '</a></span></li></ul></div>'; 275 276 if (jQuery('.webform-file-list').length == 0) { 277 jQuery('.mobile-browse-wrapper').before('<div class="webform-file-list">' + (cvRow) + "</div>"); 278 } 279 280 jQuery('input[name="file_chose_file_input[fids]"]').val(file_fid); 281 } 282 else { 283 // Fetching CV upload limit config. 284 if (typeof drupalSettings.cv_upload_settings !== 'undefined') { 285 limit = drupalSettings.cv_upload_settings.limit; 286 max_message = drupalSettings.cv_upload_settings.maxlimit_message; 287 } 288 289 var cvRow = ''; 290 var removeFunction = "mobileremoveCV('removecv_" + file_fid + "'," + file_fid + "," + limit + ")"; 291 var cvRow = '<li class="uploaded-cv pdf removecv_' + file_fid + '" index="' + file_fid + '"> <span class="uploaded-file">
291 <a class="file-view-link" target="_blank" href="/view-resume/ ' + file_fid + '">' + file_name + '</a> </span> <span class="show-options"></span> <span class="upload-component"> <a class="remove-link" href="javascript:void(0);" onclick="' + removeFunction + '" index=' + file_fid + '>Remove</a> <a class="view-link" target="_blank" href="">View CV</a> </span> </li>'; 292 var uploadedVals = jQuery('input[name="instant_upload_cvs"]').val(); 293 // Add CV to front end display. 294 jQuery('#cv-instant-upload').append(cvRow); 295 296 // Remove CV Error, if error present for the field. 297 $('.mobile-browse-wrapper .upload-cv-text').removeClass('mp-cv-upload-error'); 298 $('.mobile-browse-wrapper .messages--error').remove(); 299 300 // Job mathch IOS FID. 301 $("#mp-job-match-cv-upload-form input[name='field_cv[0][fids]']").val(file_fid); 302 303 // Adding multi CV upload. 304 var countFiles = jQuery('#cv-instant-upload li').length; 305 if (uploadedVals != '') { 306 uploadedVals += ','; 307 } 308 309 if (countFiles) { 310 $('.cv-upload-section .mp-mypage-cv-upload-form').find('.form-submit').removeAttr('disabled'); 311 } 312 else { 313 $('.cv-upload-section .mp-mypage-cv-upload-form').find('.form-submit').attr('disabled', 'disabled'); 314 } 315 316 // Remove the old CV. 317 if (countFiles > limit) { 318 jQuery('#cv-instant-upload li').eq(0).remove(); 319 uploadedVals = uploadedVals.split(/,(.+)/)[1]; 320 } 321 // Validation for CV limit function. 322 maxcvcondtion(limit); 323 324 // Setting final file IDs. 325 if (limit == 1) { 326 jQuery('input[name="instant_upload_cvs"]').val(file_fid); 327 } else { 328 jQuery('input[name="instant_upload_cvs"]').val(uploadedVals + file_fid); 329 } 330 331 // For my_cv page, hide complete browse option. 332 $('.page-mypage-your-cv .mobile-browse-wrapper').hide(); 333 334 //Job match Cv Upload form 335 var jobmatch_cv_form = $("body.page-job-match-upload-cv .mp-job-match-cv-upload-form"); 336 if (jobmatch_cv_form.find('.file-list li').length) { 337 jobmatch_cv_form.find('.jobmatchcv-submit').removeAttr('disabled'); 338 jobmatch_cv_form.find('.mobile-browse-wrapper').hide(); 339 } 340 341 } 342 343 // Hide the upload option for IOS. 344 $('.mobile-browse-wrapper .upload-cv-text').hide(); 345} 346 347// CV limitaion condition. 348function maxcvcondtion(limit) { 349 var cvcountFiles = jQuery('#cv-instant-upload li').length; 350 351 // If multiple cv upoad configured and user reaches the max limit 352 // show the message to user about max limit reached. 353 if (cvcountFiles == limit && limit > 1) { 354 if (jQuery('.cv-upload-options .max_limit').length == 0) { 355 jQuery('.cv-upload-options').append('<div class="max_limit">' + max_message + '</div>'); 356 } 357 jQuery('#mobile-app-browse .cv-browse').addClass('ui-state-disabled'); 358 } else { 359 jQuery('.cv-upload-options .max_limit').remove(); 360 jQuery('#mobile-app-browse .cv-browse').removeClass('ui-state-disabled'); 361 } 362} 363 364// Remove an uploaded CV in webform. 365function mobileRemoveWebformCV() { 366 jQuery('.webform-file-list').empty(); 367 jQuery('input[name="file_chose_file_input[fids]"]').val(''); 368} 369 370// Remove an uploaded CV. 371function mobileremoveCV(cv_file_name, cv_fid, limit) { 372 // Remove the selected CV. 373 jQuery("." + cv_file_name).remove(); 374 $('.cv-upload-section .mp-mypage-cv-upload-form').find('.form-submit').attr('disabled', 'disabled'); 375 376 var cv_list = jQuery('input[name="instant_upload_cvs"]').val(); 377 var final_list = cv_list.split(",") 378 379 final_list.splice(final_list.indexOf(cv_fid), 1); 380 jQuery('input[name="instant_upload_cvs"]').val(final_list.join()); 381 382 // Enable CV upload option for IOS. 383 $('.mobile-browse-wrapper .upload-cv-text').show(); 384 // For my_cv page & job match page, show complete browse option. 385 $('.page-mypage-your-cv .mobile-browse-wrapper, .page-job-match-upload-cv .mobile-browse-wrapper').show(); 386} 387 388// Show update popup. 389function showUpdatePopup(appUrl) { 390 $("body").append('<div id="popup" class="mp-popup-ui"></div>'); 391 // Update popup get title from config. 392 var title = drupalSettings.app_popup_settings.update_app_popup_t
392itle; 393 // Update popup get message from config. 394 var message = drupalSettings.app_popup_settings.update_app_popup_message; 395 var update_text = Drupal.t("Update APP"); 396 var cancel_text = Drupal.t("Cancel"); 397 398 var full_message = '<p>' + message + '</p><div class="buttons">'; 399 full_message += '<button class="login primary" name="login" value="Update" onclick="window.open(\'' + appUrl + '\', \'_system\')">' + update_text + '</button>'; 400 if (!drupalSettings.app_popup_settings.force_update) { 401 full_message += '<button class="secondary cancel" onclick="update_popup_close()">' + cancel_text + '</button>'; 402 } 403 full_message += '</div>'; 404 405 Drupal.mp_mobile.popup.open($('#popup'), title, full_message, '', 'updatepopup'); 406} 407 408// Close the update popup. 409function update_popup_close() { 410 jQuery('.ui-dialog-content').dialog('close'); 411}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.