PageSourceSearch

https://www.michaelpage.com.cn/modules/custom/mp_mobile_app/js/mobile_app_scripts.js?v=10.5.4

js michaelpage.com.cn collected 2026-10-04 02:04:12 UTC 18,971 bytes, 411 lines download raw bytes

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.