1///// 2// make form act as ajax login form 3// it will just submit form to aMember's login url 4// and handle login response 5// options - 6// success: callback to be called on succes 7// by default - redirect or page reload 8// failure: callback to be called on failure 9// by default - display error to $("ul.errors") 10///// 11function amAjaxLoginForm(selector, options) 12{ 13 if (typeof options == 'function') { 14 options = {success: options}; 15 } 16 options = jQuery.extend(true, { 17 success: function(response, frm) { 18 if (response.url) window.location = response.url; 19 else if (response.reload) window.location.reload(true); 20 }, 21 error: function(response, frm) { 22 var errUl = jQuery("ul.errors.am-login-errors"); 23 if (!errUl.length) 24 frm.before(errUl = jQuery("<ul class='errors am-login-errors'></ul>")); 25 else 26 errUl.empty(); 27 for (var i=0;i<response.error.length;i++) 28 errUl.append("<li>"+response.error[i]+"</li>"); 29 errUl.fadeTo('slow', 0.1).fadeTo('slow', 1.0); 30 // show recaptcha if enabled 31 if (response.recaptcha_key) 32 { 33 jQuery("#recaptcha-row").show(); 34 35 if (typeof grecaptcha == "undefined") 36 { 37 window.onLoadGrecaptcha = function(){ 38 frm.data('recaptcha', grecaptcha.render('recaptcha-element', { 39 sitekey: response.recaptcha_key, 40 theme: jQuery("#recaptcha-row").data('recaptcha-theme') 41 })); 42 } 43 jQuery.getScript('//www.google.com/recaptcha/api.js?onload=onLoadGrecaptcha&render=explicit'); 44 } else { 45 if (typeof(frm.data('recaptcha')) == 'undefined') { 46 frm.data('recaptcha', grecaptcha.render('recaptcha-element', { 47 sitekey: response.recaptcha_key, 48 theme: jQuery("#recaptcha-row").data('recaptcha-theme') 49 })); 50 } else { 51 grecaptcha.reset(frm.data('recaptcha')); 52 } 53 } 54 } else { 55 jQuery("#recaptcha-row").hide(); 56 } 57 } 58 }, options); 59 jQuery(document).off("click.ajax-login", selector + ' [type=submit]'); 60 jQuery(document).on("click.ajax-login", selector + ' [type=submit]', function(){ 61 var frm = jQuery(this).closest('form'); 62 var formData = frm.serializeArray(); 63 formData.push({ name: this.name, value: this.value }); 64 jQuery.post(frm.attr("action"), formData, function(response, status, request){ 65 if ((request.status != '200') && (request.status != 200)) 66 response = {ok: false, error: ["ajax request error: " + request.status + ': ' + request.statusText ]}; 67 if (!response) 68 response = {ok: false, error: ["ajax request error: empty response"]}; 69 if (!response || !response.ok) 70 { 71 if (response.code == -8) { 72 var p = frm.parent().empty().append(response.html); 73 frm = p.find('form'); 74 } else { 75 if (!response.error) response.error = ["Login failed"]; 76 options.error(response, frm); 77 } 78 } else { 79 options.success(response, frm); 80 } 81 }); 82 return false; 83 }); 84} 85 86///// 87// make form act as ajax login form 88// it will just submit form to aMember's login url 89// and handle login response 90// options - 91// success: callback to be called on succes 92// by default - redirect or page reload 93// failure: callback to be called on failure 94// by default - display error to jQuery("ul.errors") 95///// 96function amAjaxSendPassForm(selector, options) 97{ 98 if (typeof options == 'function') { 99 options = {success: options}; 100 } 101 options = jQuery.extend(true, { 102 successContainer: jQuery("success", this), 103 success: function(response, frm) { 104 if (response.url) window.location = response.url; 105 else if (response.reload) window.location.reload(true); 106 else { 107 if (!options.successContainer.length) 108 { 109 frm.before(options.successContainer = jQuery('<div class="am-info"></div>')); 110 } 111 jQuery("ul.errors.am-sendpass-errors").remove(); 112 options.successContainer.html(response.error[0]); 113 jQuery(":submit", frm).prop("disabled", "disabled"); 114 } 115 }, 116 error: function(response, frm) { 117 var errUl = jQuery("ul.errors.am-sendpass-errors"); 118 if (!errUl.length) 119 frm.before(errUl = jQuery("<ul class='errors am-sendpass-errors'></ul>")); 120 else 121 errUl.empty(); 122 for (var i=0;i<response.error.length;i++) 123 errUl.append("<li>"+response.error[i]+"</li>"); 124 errUl.fadeTo('slow', 0.1).fadeTo('slow', 1.0); 125 } 126 }, options); 127 jQuery(document).off("submit.ajax-send-pass", selector); 128 jQuery(document).on("submit.ajax-send-pass", selector, function(){ 129 var frm = jQuery(this); 130 jQuery.post(frm.attr("action"), frm.serialize(), function(response, status, request){ 131 if ((request.status != '200') && (request.status != 200)) 132 response = {ok: false, error: ["ajax request error: " + request.status + ': ' + request.statusText ]}; 133 if (!response) 134 response = {ok: false, error: ["ajax request error: empty response"]}; 135 if (!response || !response.ok) 136 { 137 if (!response.error) response.error = ["Error while e-mailing lost password"]; 138 options.error(response, frm); 139 } else { 140 options.success(response, frm); 141 } 142 }); 143 return false;
144 }); 145} 146 147function amFlashError(msg){ 148 return amFlash(msg, 'error', 5000); 149} 150function amFlashMessage(msg){ 151 return amFlash(msg, 'message', 2000); 152} 153function amFlash(msg, msgClass, timeout) 154{ 155 $('#am-flash .am-flash-content').empty().text(msg). 156 removeClass('am-flash-content-error am-flash-content-message'). 157 addClass('am-flash-content-' + msgClass); 158 $('#am-flash').fadeIn(); 159 if (timeout) 160 setTimeout(function(){ 161 $('#am-flash').fadeOut(); 162 }, timeout); 163} 164 165function ajaxLink(selector) 166{ 167 jQuery(document).on('click', selector, function(){ 168 var $link = jQuery(this); 169 jQuery("#ajax-link").remove(); 170 jQuery.get(jQuery(this).attr('href'), {}, function(html){ 171 var options = {}; 172 if ($link.data('popup-width')) 173 options.width = $link.data('popup-width'); 174 if ($link.data('popup-height')) 175 options.height = $link.data('popup-height'); 176 if ($link.prop('title')) 177 options.title = $link.prop('title'); 178 jQuery('body').append('<div id="ajax-link" style="display:none"></div>'); 179 jQuery("#ajax-link").html(html).amPopup(options); 180 }) 181 return false; 182 }); 183} 184(function($){ 185 // render a popup window for the element 186 if (!$.fn.amPopup) { // if not yet re-defined by theme 187 //recalculate popup position on resize event 188 $(window).resize(function(){ 189 $('.am-popup').css({ 190 left: $('body').width()/2 - $('.am-popup').outerWidth(false)/2 191 }); 192 }); 193 $.fn.amPopup = function(params){ 194 return this.each(function(){ 195 var options = params; 196 if (options == 'close') 197 { 198 $(".am-popup-close").first().click(); 199 return; 200 } 201 // else do init 202 var options = $.extend({ 203 width: null, 204 height: null, 205 title: '', 206 animation: 300, 207 onClose : function() {} 208 }, options); 209 var $this = $(this); 210 $("#mask").remove(); 211 212 var $popup = $("\ 213 <div class='am-popup am-common'>\ 214 <div class='am-popup-header'>\ 215 <a href='javascript:' class='am-popup-close-icon am-popup-close' />\ 216 <div class='am-popup-title'>\ 217 </div>\ 218 </div>\ 219 <div class='am-popup-content' />\ 220 </div>"); 221 222 var $parent = $this.wrap('<div><div>').parent(); 223 $popup.find(".am-popup-title").empty().append(options.title); 224 if(options.width > $('body').width()) options.width = $('body').width(); 225 options.width && $popup.css('width', options.width); 226 options.height && $popup.find(".am-popup-content"). 227 css('max-height', options.height). 228 css('overflow-y', 'auto'); 229 $popup.find(".am-popup-content").empty().append($(this).css('display', 'block')); 230 231 var _top = $(window).scrollTop() + 100; 232 $('body').append('<div id="mask"></div>').append($popup); 233 $popup.css({ 234 top: _top - 50, 235 left: $('body').width()/2 - $popup.outerWidth(false)/2, 236 transition: 'top 0.5s ease' 237 }); 238 239 $popup.fadeIn(options.animation); 240 $popup.css({ 241 top: _top, 242 }); 243 $popup.find(".am-popup-close").unbind('click.popup').bind('click.popup', function(){ 244 $popup.css({top: _top - 50}); 245 $popup.fadeOut(options.animation, function() { 246 $parent.append($this.css('display', 'none')); 247 $this.unwrap(); 248 $(this).closest('.am-popup').remove(); 249 $("#mask").remove(); 250 options.onClose.call(); 251 }); 252 }); 253 });}; 254 } 255 256 $.fn.amRevealPass = function() { 257 return $(this).each(function(){ 258 if ($(this).data('am-reveal-pass-init')) return; 259 $(this).data('am-reveal-pass-init', true); 260 261 var $switch = $('<span class="am-switch-reveal am-switch-reveal-off" title="Toggle Password Visibility"></span>'); 262 $(this).after($switch); 263 $switch.click(function(){ 264 $(this).toggleClass('am-switch-reveal-on am-switch-reveal-off'); 265 var $input = $(this).prev(); 266 $input.attr('type', $input.attr('type') == 'text' ? 'password' : 'text'); 267 }); 268 }) 269 }; 270 271})(jQuery); 272 273jQuery(function($) { 274 // scroll to error message if any 275 var errors = $(".errors:visible:first,.error:visible:first"); 276 if (errors.length) 277 $("html, body").scrollTop(Math.floor(errors.offset().top)); 278 279 $('input.datepicker').datepicker({ 280 defaultDate: window.uiDefaultDate, 281 dateFormat: window.uiDateFormat, 282 changeMonth: true, 283 changeYear: true, 284 yearRange: 'c-90:c+10' 285 }); 286 287 $('.upload').upload(); 288 289 amAjaxLoginForm(".am-login-form form"); 290 291 amAjaxSendPassForm(".am-sendpass-form form"); 292 293 // cancel form support hooks (member/payment-history) 294 $(document).on('click',".cancel-subscription", function(event){ 295 event.stopPropagation(); 296 var $div = $(".cancel-subscription-popup"); 297 $div.amPopup({ 298 width: 500, 299 title: $div.data('popup-title') 300 }).data('href', this.href); 301 return false;
302 }); 303 $(document).on('click',"#cancel-subscription-yes", function(){ 304 window.location.href = $(".cancel-subscription-popup").data('href'); 305 }); 306 // end of cancel form 307 // upgrade form 308 $(document).on('click',"a.upgrade-subscription", function(event){ 309 event.stopPropagation(); 310 var $div = $(".upgrade-subscription-popup-"+$(this).data('invoice_item_id')); 311 $div.amPopup({ 312 width: 500, 313 title: $div.data('popup-title') 314 }).data('href', this.href); 315 return false; 316 }); 317 // end of upgrade 318 319 ajaxLink(".ajax-link"); 320 321 $('.am-pass-reveal').amRevealPass(); 322 $(document).ajaxComplete(function(){ 323 //allow ajax handler to do needed tasks before convert elements 324 setTimeout(function(){$('.am-pass-reveal').amRevealPass();}, 100); 325 }) 326 327 $(document).on("click",".am-switch-forms", function(){ 328 var el = $(this); 329 $(el.data('show_form')).show(); 330 $(el.data('hide_form')).hide(); 331 }); 332 /// DEPRECATED, kept for compatiblity, handled by css .popup-close 333 $(document).on('click',"#cancel-subscription-no, .upgrade-subscription-no", function(){ 334 if (!$(this).hasClass("am-popup-close")) { 335 $(".am-popup").amPopup("close"); 336 } 337 }); 338}); 339 340function filterHtml(source) 341{ 342 HTMLReg.disablePositioning = true; 343 HTMLReg.validateHTML = false; 344 return HTMLReg.parse(source); 345}
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.