1/******************************* 2 * æ±ç¨ã³ã³ã¿ã¯ããã©ã¼ã éä¿¡ 3 * åºæ¬ã¯ä»¥ä¸ 4 * <form class="contact-form" method="post" data-when-complete=".for-form-complete"> 5 * <input type="email" name="email" required> 6 * <div class="error_msg" data-for="email"></div> 7 * <textarea name="body"></textarea> 8 * <div class="error_msg" data-for="body"></div> 9 * </form> 10 * <div class="for-form-complete" style="display:none;"> 11 * Thanks for your message! 12 * </div> 13 * 14 * <form class="contact-form" data-when-complete="{some selector}">...</form> 15 * ã¨ãããã¨ã§ããã©ã¼ã éä¿¡æåæã«è¡¨ç¤ºããè¦ç´ ãæå®ã§ããã 16 * 17 * name="body"ããªãå ´åãname="email"以å¤ã®å ¥åãã£ã¼ã«ããã¼ã¿å¤ãé ç®å¥ã«bodyã«å ¥ãã¦éä¿¡ããã 18 * ãã®å ´åãããªãã¼ã·ã§ã³ã¯è¡ãããªãã®ã§æ³¨æãHTML5ã®ãã©ã¼ã ããªãã¼ã·ã§ã³ãå©ç¨ããããµã¼ãå´ãã§ãã¯ã¯è¡ããªãã 19 * 20 * <form class="contact-form" method="post"> 21 * <input type="email" name="email"> 22 * <div class="error_msg" data-for="email"></div> 23 * <label><input type="checkbox" name="checked" value="checked">Checked<label> 24 * <br> 25 * <select name="job"><option>job1</option><option>job2</option>...</select> 26 * <br> 27 * <textarea name="free"></textarea> 28 * </form> 29 * 30 */ 31$(function(){ 32 33 var API_DEFAULT = window._contact_api || '/_contact'; 34 var CSRF_FIELD_NAME = 'csrfmiddlewaretoken'; 35 var RECAPTCHAV2_FIELD_NAME = 'g-recaptcha-response'; 36 37 function _dbg(msg) { 38 ($('#dbg')[0] ? $('#dbg') : $('<div id="dbg"></div>').css({position:'fixed',bottom:0,right:0,background:'rgba(0,0,0,.5)',color:'white',zIndex:32767,padding:'10px'}).appendTo('body')) 39 .text(msg); 40 } 41 42 function findFormComplete($form) { 43 if (!$form.is('[data-when-complete]')) { return $(); } 44 return $($form.attr('data-when-complete')); 45 } 46 47 $('form.contact-form').each(function(){ 48 findFormComplete($(this)).hide(); 49 }); 50 51 $('form.contact-form').on('submit', function(ev){ 52 var $form = $(this), $when_complete = findFormComplete($form).hide(); 53 ev.preventDefault(); 54 var data = $form.formGet(), $combined = null; 55 if (!data.source_url) { 56 if (!$form.find(':input[name="source_url"]')[0]) { 57 $form.append($('<input>').attr({ 58 'type':'hidden', 59 'name':'source_url', 60 'value':location.href 61 })); 62 } 63 } 64 var combined = !$form.find(':input[name=body]')[0]; 65 // var combined = !!($form.find(':input:not([name="body"]):not([name="email"]):visible')[0]); 66 if (combined) { 67 if (!($form.find('.error_msg[data-for="body"]')[0])) { 68 var $error_msg = $('<div class="error_msg" data-for="body"></div>').css({ 69 'color': '#800', 70 'background': '#fcc', 71 'padding': '3px 6px', 72 'margin': '.25em 0' 73 }); 74 var $submit = $form.find('[type="submit"],button:not([type])'); 75 if ($submit[0]) { 76 $error_msg.insertBefore($submit); 77 } else { 78 $form.prepend($error_msg); 79 } 80 } 81 var combined_data = [] 82 for (var k in data) { 83 if (k!='email' && k!=CSRF_FIELD_NAME && k!=RECAPTCHAV2_FIELD_NAME) { 84 combined_data.push('[[' + k + ']]\n' + data[k]); 85 } 86 } 87 88 if (combined_data) { 89 combined_data = '---- combined ----\n' + combined_data.join('\n\n') + '\n------------------'; 90 $combined = $('<input>').attr({ 91 'name':'body', 92 'type':'hidden', 93 'data-combined':'1' 94 }).val(combined_data).appendTo($form); 95 } 96 } 97 var csrftoken = $.cookie('csrftoken'); 98 if (csrftoken && !$form.find('[name="' + CSRF_FIELD_NAME + '"]')[0]) { 99 $form.append($('<input>').attr({type:'hidden',name:CSRF_FIELD_NAME,value:csrftoken})); 100 } 101 102 var opts = { 103 alert_not_detected_errors: true, 104 filter:function(res){ 105 res.success = res.result == 'ok'; 106 return res; 107 } 108 } 109 110 if (!$form.attr('action')) { 111 opts.url = API_DEFAULT; 112 opts.method = 'post'; 113 } 114 115 $form.formPost(opts).then(function(res){ 116 var $form_complete = findFormComplete($form), hide_form = true; 117 if ($form_complete[0]) { 118 $form_complete.each(function(){ 119 if ($.contains($form[0], this)) { 120 hide_form = false;
121 return false; 122 } 123 }); 124 if (hide_form) { 125 $form.hide(); 126 } 127 } 128 findFormComplete($form.hide()).show(); 129 setTimeout(function(){ 130 findFormComplete($form).hide(); 131 $form.formClear().show(); 132 }, 10000); 133 }).fail(function(res){ 134 if (res.ajaxerror){ alert('connection error:'+res.ajaxerror.statusText) } 135 if (res.systemerror) { alert('serverside error:'+res.systemerror); } 136 }).always(function(res){ 137 if ($combined) { 138 $combined.remove(); 139 } 140 // always clear reCAPCHA status after form post. 141 if(typeof grecaptcha === "undefined") { 142 // pass 143 } 144 else { 145 grecaptcha.reset(); 146 } 147 }); 148 }); 149}); 150 151
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.