1var fm_registered_form_items = []; 2var fm_registered_forms = []; 3 4/* PHP passes the form structure to JS using 'fm_register_form_item' and 'fm_register_form' */ 5//itemDef is an 'associative array', the item's database entry (unpacked) 6function fm_register_form_item(formID, itemDef){ 7 itemDef.formID = formID; 8 fm_registered_form_items.push(itemDef); 9} 10 11// returns the 'registered' information about the form element, essentially the DB entry 12function fm_get_form_item_info(itemID){ 13 for(var x=0;x<fm_registered_form_items.length;x++){ 14 if(fm_registered_form_items[x].unique_name == itemID 15 || fm_registered_form_items[x].nickname == itemID){ 16 return fm_registered_form_items[x]; 17 } 18 } 19} 20 21//returns the form element (unless it is a checkbox/radio list) 22function fm_get_form_item(itemID){ 23 var itemInfo = fm_get_form_item_info(itemID); 24 return document.getElementById('fm-form-' + itemInfo.ID)[itemInfo.unique_name]; 25} 26 27//the same as the above, but for checkbox/radio lists 28function fm_get_form_item_indexed(itemID, index){ 29 var itemInfo = fm_get_form_item_info(itemID); 30 return document.getElementById('fm-form-' + itemInfo.ID)[itemInfo.unique_name + '-' + index]; 31} 32 33//does nothing for now; appropriate script should be attached to the button to begin with 34function fm_register_form(formID){ 35 36} 37 38function fm_submit_onclick(formID){ 39 if(!fm_check_required_items(formID)) return false; 40 if(!fm_check_text_validation(formID)) return false; 41 return true; 42} 43 44function fm_submit_onclick_ajax(formID, formSlug){ 45 if(fm_registered_forms[formID]) return false; 46 fm_registered_forms[formID] = true; 47 48 if(!fm_check_required_items(formID)) return false; 49 if(!fm_check_text_validation(formID)) return false; 50 51 var data = { 52 action: 'fm_post_form', 53 slug: formSlug, 54 fm_id: document.getElementById('fm-form-' + formID)['fm_id'].value, 55 fm_nonce: document.getElementById('fm-form-' + formID)['fm_nonce'].value 56 }; 57 var temp; 58 59 for(var x=0;x<fm_registered_form_items.length;x++){ 60 if(fm_registered_form_items[x].formID == formID){ 61 eval("temp = " + fm_registered_form_items[x].getter_script + "(\'" + formID + "\', \'" + fm_registered_form_items[x].unique_name + "\');"); 62 data[fm_registered_form_items[x].unique_name] = temp; 63 } 64 } 65 66 var ajaxurl = fm_user_I18n.ajaxurl; 67 68 jQuery.post(ajaxurl, data, function(response){ 69 var formEL = document.getElementById('fm-form-' + formID); 70 jQuery(formEL).after(response).remove(); 71 }); 72 73 return false; 74} 75 76/* Validation checks */ 77 78//check text validation 79function fm_check_text_validation(formID){ 80 var msg = ""; 81 for(var x=0;x<fm_registered_form_items.length;x++){ 82 if(fm_registered_form_items[x].formID == formID && 83 fm_registered_form_items[x].type == 'text' && 84 !fm_item_validation_satisfied(fm_registered_form_items[x])){ 85 if(!temp){ 86 if(msg != "") msg += "\n"; 87 msg += fm_registered_form_items[x].validation_msg; 88 } 89 } 90 } 91 if(msg != ""){ 92 alert(msg); 93 return false; 94 } 95 return true; 96} 97 98function fm_item_validation_satisfied(itemDef){ 99 if(itemDef.validation_callback != ""){ 100 eval("temp = " + itemDef.validation_callback + "('" + itemDef.formID + "', '" + itemDef.unique_name + "', '" + itemDef.validation_type + "');"); 101 return temp; 102 } 103 return true; 104} 105 106 107 108//check required items 109function fm_check_required_items(formID){ 110 var msg = ""; 111 for(var x=0;x<fm_registered_form_items.length;x++){ 112 if(fm_registered_form_items[x].formID == formID && 113 !fm_item_required_satisfied(fm_registered_form_items[x])){ 114 if(!temp){ 115 if(msg != "") msg += "\n"; 116 msg += fm_registered_form_items[x].required_msg; 117 } 118 } 119 } 120 if(msg != ""){ 121 alert(msg); 122 return false; 123 } 124 return true; 125} 126 127 128function fm_item_required_satisfied(itemDef){ 129 if(itemDef.required == 1 && itemDef.required_callback != ""){ 130 eval("temp = " + itemDef.required_callback + "('" + itemDef.formID + "', '" + itemDef.unique_name + "');"); 131 return temp; 132 } 133 return true; 134} 135 136function fm_set_required(itemID, req){ 137 for(var x=0;x<fm_registered_form_items.length;x++){ 138 temp = fm_registered_form_items[x]; 139 if(temp.unique_name == itemID){ 140 fm_registered_form_items[x].required = req; 141 tempID = 'fm-item-' + (temp.nickname != "" ? temp.nickname : temp.unique_name); 142 EMs = document.getElementById(tempID).getElementsByTagName('em'); 143 if (EMs[0] !== undefined){ 144 EMs[0].style.display = (req == 1 ? 'inline' : 'none'); 145 } 146 } 147 } 148 149} 150 151function fm_supports_placeholder(){ 152 placeholderSupport = ("placeholder" in document.createElement("input")); 153 return placeholderSupport; 154} 155 156 157function fm_remove_placeholders(){ 158 if(!fm_supports_placeholder()){ 159 for(var i=0;i<fm_registered_form_items.length;i++){ 160 switch(fm_registered_form_items[i].type) { 161 case 'text': 162 case 'textarea': 163 formID = fm_registered_form_items[i].formID; 164 itemID = fm_registered_form_items[i].unique_name; 165 var textItem = document.getElementById('fm-form-' + formID)[itemID]; 166 textItem.value = fm_base_get_value(formID, itemID); 167 break; 168 } 169 } 170 } 171} 172
173//////////////////////////////////////////////////////////// 174//// HELPERS /////////////////////////////////////////////// 175 176function fm_trim(str){ 177 return str.replace(/^\s+|\s+$/g,""); 178} 179function fm_fix_str(str){ 180 return str.replace(/[\\]/g,'\\\\\\\\').replace(/[']/g,'\\\\\\$&'); 181} 182function fm_htmlEntities(str) { 183 return String(str).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"'); 184} 185function fm_array_contains(haystack, needle){ 186 for(var x=0;x<haystack.length;x++){ 187 if( haystack[x] == needle ) return true; 188 } 189 return false; 190} 191 192//////////////////////////////////////////////////////////// 193//// FORM ELEMENTS ///////////////////////////////////////// 194 195// form element base class 196function fm_base_required_validator(formID, itemID){ 197 var e = document.getElementById('fm-form-' + formID)[itemID]; 198 if ( typeof(e.ph_hasEdit) != 'undefined' ){ 199 return ( e.ph_hasEdit ); 200 } 201 return (fm_trim(e.value) != ""); 202} 203function fm_base_get_value(formID, itemID){ 204 var e = document.getElementById('fm-form-' + formID)[itemID]; 205 if ( typeof(e.ph_hasEdit) != 'undefined' ){ 206 if ( e.ph_hasEdit == true ) 207 return fm_trim(e.value); 208 return ""; 209 } 210 return fm_trim(e.value); 211} 212 213// checkbox 214function fm_checkbox_required_validator(formID, itemID){ 215 return document.getElementById('fm-form-' + formID)[itemID].checked; 216} 217 218// list 219function fm_custom_list_required_validator(formID, itemID){ 220 var listType = document.getElementById('fm-form-' + formID)[itemID + '-list-style'].value; 221 switch(listType){ 222 case "radio": 223 return fm_radio_list_required_validator(formID, itemID); 224 case "checkbox": 225 return fm_checkbox_list_required_validator(formID, itemID); 226 default: 227 return fm_select_list_required_validator(formID, itemID); 228 } 229 return false; 230} 231function fm_select_list_required_validator(formID, itemID){ 232 return (document.getElementById('fm-form-' + formID)[itemID].value != 0); 233} 234function fm_radio_list_required_validator(formID, itemID){ 235 var radioList = document.getElementById('fm-form-' + formID)[itemID]; 236 for(var x=0;x<radioList.length;x++) 237 if(radioList[x].checked == true) return true; 238 return false; 239} 240function fm_checkbox_list_required_validator(formID, itemID){ 241 var count = document.getElementById('fm-form-' + formID)[itemID + '-count'].value; 242 for(var x=0;x<count;x++){ 243 if(document.getElementById('fm-form-' + formID)[itemID + '-' + x].checked) return true; 244 } 245 return false; 246}
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.