1(function($){ 2 if($.G2 == undefined){ 3 $.G2 = {}; 4 } 5 6 $.G2.actions = {}; 7 $.G2.actions.list = {}; 8 9 $.G2.actions.include = function(items){ 10 $.each(items, function(k, item){ 11 $.G2.actions.list[k] = item; 12 }); 13 }; 14 15 $.G2.actions.ready = function(Elem){ 16 if(typeof Elem == 'undefined'){ 17 Elem = $('body'); 18 } 19 20 Elem.find('.G2-static').each(function(k, element){ 21 $.G2.actions.statics(element); 22 }); 23 24 Elem.find('.G2-dynamic').each(function(k, element){ 25 $.G2.actions.dynamics(element); 26 }); 27 28 }; 29 30 $.G2.actions.statics = function(element){ 31 var id = $(element).data('id'); 32 33 $(element).off('click.static'); 34 $(element).on('click.static', function(e){ 35 e.preventDefault(); 36 if($.G2.actions.list.hasOwnProperty(id) && $.G2.actions.list[id].hasOwnProperty('click')){ 37 var result = $.G2.actions.list[id].click($(element), e); 38 if(result == false){ 39 return ret; 40 } 41 } 42 }); 43 44 if($(element).data('task')){ 45 46 var targets = $.G2.actions.getTarget(element, $(element).data('task')); 47 target_element = targets[1]; 48 element_task = targets[0]; 49 $(element).data('target', target_element); 50 51 if(element_task == 'popup'){ 52 53 popup_element = target_element; 54 55 if(popup_element == null){ 56 $(element).after($('<div class="ui fluid popup top left transition hidden G2-static-popup"><div class="ui active inline centered loader"></div></div>')); 57 popup_element = $(element).next('.popup').first(); 58 } 59 60 if(popup_element != null){ 61 $(element).popup({ 62 //inline: true, 63 position: (typeof popup_element.data('position') == 'undefined') ? 'top right' : popup_element.data('position'), 64 popup: popup_element, 65 on : 'click', 66 closable: true, 67 exclusive: true, 68 preserve: true, 69 lastResort: true, 70 onHidden: function(){ 71 //$('body').off('click.staticpopup'); 72 }, 73 onVisible: function(){ 74 /*$('body').on('click.staticpopup', function(_e){ 75 if(_e.target !== $(element).next('.popup')[0] && !$.contains($(element).next('.popup')[0], _e.target)){ 76 if($(element).next('.popup').hasClass('visible')){ 77 $(element).popup('show'); 78 $(element).popup('hide'); 79 } 80 } 81 });*/ 82 } 83 }); 84 /*$(element).on('click', function(){ 85 $(element).popup('show'); 86 });*/ 87 } 88 89 }else if(element_task == 'modal'){ 90 91 modal_element = target_element; 92 $(element).on('click', function(){ 93 $(element).next('.ui.modal').modal({'detachable' : false, 'inverted' : true}).modal('show'); 94 }); 95 }else if(element_task == 'scroll'){ 96 97 $(element).off('click').on('click', function(e){ 98 e.preventDefault(); 99 target_element = $(element).data('target'); 100 101 if(target_element != null){ 102 $.G2.scrollTo(target_element); 103 } 104 }); 105 }else if(element_task == 'hide'){ 106 107 $(element).off('click').on('click', function(e){ 108 e.preventDefault(); 109 target_element = $(element).data('target'); 110 111 target_element.removeClass('visible').addClass('hidden'); 112 }); 113 }else if(element_task == 'remove'){ 114 115 $(element).off('click').on('click', function(e){ 116 e.preventDefault(); 117 target_element = $(element).data('target'); 118 119 target_element.remove(); 120 $(element).trigger('g2.actions.static.remove'); 121 }); 122 }else if(element_task == 'clone'){ 123 124 $(element).off('click').on('click', function(e){ 125 e.preventDefault(); 126 target_element = $(element).data('target'); 127 128 var clone = target_element.clone(); 129 var counter = target_element.data('counter') ? parseInt(target_element.data('counter')) : 0; 130 counter = counter + 1; 131 target_element.data('counter', counter); 132 133 clone.html(clone.html().replace(/\[0\]/g, '[' + counter + ']').replace(/-0/g, counter)); 134 target_element.after(clone); 135 136 clone.trigger('contentChange.basics'); 137 }); 138 } 139 } 140 }; 141 142 $.G2.actions.getTarget = function(element, string){ 143 144 var task_data = string.split(':'); 145 var task_data1 = task_data[0].split('/'); 146 147 if(task_data.length > 1){ 148 var task_data2 = task_data[1].split('/'); 149 }else{ 150 var task_data2 = ''; 151 } 152 153 var target_element = null; 154 155 if(task_data1[1] == 'self'){ 156 157 target_element = $(element); 158 159 }else if(task_data1[1] == 'next'){ 160 161 if(task_data2[0] == undefined){ 162 target_element = $(element).next(); 163 }else{ 164 target_element = $(element).next().find(task_data2[0]); 165 } 166 167 }else if(task_data1[1] == 'closest' && task_data2[0] != undefined){ 168 169 target_element = $(element).closest(task_data2[0]); 170 171 }else if(task_data1[1] == 'child'){ 172 173 }else if((task_data1[1] == 'find' || task_data1[1] == undefined) && task_data2[0] != undefined){ 174 175 target_element = $(task_data2[0]); 176 177 }else if(task_data1[1] == undefined && task_data2[0] == undefined){ 178 target_element = $(element).next(); 179 } 180 181 return [task_data1[0], target_element]; 182 }; 183 184 $.G2.actions.dynamics = function(element){ 185 var id = $(element).data('id'); 186 187 var Event = 'click'; 188 if($(element).prop('tagName') == 'FORM'){ 189 Event = 'submit'; 190 $(element).data('url', $(element).attr('action')); 191 } 192 193 if($(element).data('url') == undefined && $(element).attr('href')){ 194 $(element).data('url', $(element).attr('href')); 195 } 196 /* 197 if($(element).is('.ui.dropdown')){ 198 $(element).data('url', $(element).find('select').first().data('url')); 199 } 200 */ 201 $(element).off(Event + '.dynamic'); 202 $(element).on(Event + '.dynamic', function(e){ 203 204 e.preventDefault(); 205 206 $.G2.actions.dynamics.run(element); 207 }); 208 }; 209 210 $.G2.actions.dynamics.run = function(element){ 211 var id = $(element).data('id'); 212 213 var counter = $(element).data('counter') ? parseInt($(element).data('counter')) : 0; 214 //counter = counter + 1; 215 //$(element).data('counter', counter); 216
217 var counterParam = $(element).attr('name') ? '&' + $(element).attr('name') + '[counter]=' + counter : ''; 218 counterParam = counterParam + '&_counter=' + counter; 219 //update the counter for the next run 220 counter = counter + 1; 221 $(element).data('counter', counter); 222 223 if($(element).data('once') && $(element).data('called')){ 224 return false; 225 } 226 227 //trigger element completion event 228 var beforeStartValue = $(element).triggerHandler('g2.actions.dynamic.beforeStart'); 229 if(beforeStartValue === false || $(element).data('beforeStart') === false){ 230 return false; 231 } 232 233 if($(element).data('url')){ 234 var requestData = {}; 235 var content = false;//'application/x-www-form-urlencoded; charset=UTF-8'; 236 var container = ''; 237 var buildData = false; 238 239 if($(element).data('dtask')){ 240 241 var targets = $.G2.actions.getTarget(element, $(element).data('dtask')); 242 target_element = targets[1]; 243 element_task = targets[0]; 244 245 if(element_task == 'send'){ 246 247 if(target_element != null){ 248 buildData = true; 249 container = target_element; 250 } 251 252 } 253 } 254 255 //check triggers 256 if($(element).data('dynamic') && $(element).data('dynamic')['onstart']){ 257 $.each($(element).data('dynamic')['onstart'], function(dact, dactdata){ 258 if(dact == 'send'){ 259 buildData = true; 260 $.each(dactdata, function(k, dactid){ 261 container = $(dactid); 262 }); 263 } 264 }); 265 } 266 267 if(buildData){ 268 //add text data 269 requestData = new FormData(); 270 $.each(container.find(':input').serializeArray(), function(key, input){ 271 requestData.append(input.name, input.value); 272 }); 273 //add files data 274 container.find('input[type="file"]').each(function(key, input){ 275 requestData.append($(input).attr('name'), $(input)[0].files[0]); 276 }); 277 } 278 279 $.ajax({ 280 xhr: function(){ 281 var xhr = new window.XMLHttpRequest(); 282 283 if(container && jQuery.fn.progress != undefined){ 284 //container.find('.progress').show(); 285 xhr.upload.addEventListener('progress', function(evt){ 286 if(evt.lengthComputable){ 287 var percentComplete = evt.loaded / evt.total; 288 percentComplete = parseInt(percentComplete * 100); 289 290 container.find('.progress').progress('set percent', percentComplete); 291 292 if(percentComplete === 100){ 293 //container.find('.progress').hide(); 294 } 295 } 296 }, false); 297 } 298 return xhr; 299 }, 300 url: $(element).data('url') + counterParam, 301 type: "POST", 302 data: requestData, 303 processData: false, 304 contentType: content, 305 beforeSend: function(){ 306 $(element).addClass('loading'); 307 if(container && container.hasClass('loading') == false){ 308 container.append('<div class="ui active inverted dimmer"><div class="ui text loader"></div></div>'); 309 } 310 }, 311 error: function(xhr, textStatus, message){ 312 $(element).removeClass('loading'); 313 if(container){ 314 container.children('.ui.active.dimmer').remove(); 315 } 316 317 if(jQuery.fn.popup != undefined){ 318 $(element).popup({html : '<div class="ui message error small">'+textStatus+':'+message+'</div>'}); 319 $(element).popup('show'); 320 }else{ 321 alert(textStatus+':'+message); 322 } 323 }, 324 success: function(data, textStatus, xhr){ 325 $('.g2-message').remove(); 326 327 $(element).removeClass('loading'); 328 //$(element).popup('destroy'); 329 330 if(container){ 331 container.find('.ui.dimmer').remove(); 332 } 333 var is_json = false; 334 //check response data type 335 if(data.substring(0, 1) == '{' && data.slice(-1) == '}'){ 336 var is_json = true; 337 338 var json = JSON.parse(data); 339 340 if(json.hasOwnProperty('error') && json.error != 0){ 341 if(jQuery.fn.popup != undefined){ 342 $(element).popup({html : '<div class="ui message error small">'+json.error+'</div>'}); 343 $(element).popup('show'); 344 }else{ 345 alert(json.error); 346 } 347 }else{ 348 json.error = 0; 349 } 350 351 data = json; 352 } 353 354 var newContent = ''; 355 356 if($(element).data('result') && (is_json == false || (is_json == true && data.error == 0))){ 357 358 if(is_json == false){ 359 var newContent = $(data); 360 } 361 362 var targets = $.G2.actions.getTarget(element, $(element).data('result')); 363 target_element = targets[1]; 364 element_task = targets[0]; 365 366 if(element_task == 'replace'){ 367 368 if(target_element != null){ 369 target_element.replaceWith(newContent); 370 } 371 }else if(element_task == 'after'){ 372 373 if(target_element != null){ 374 target_element.after(newContent); 375 } 376 }else if(element_task == 'before'){ 377 378 if(target_element != null){ 379 target_element.before(newContent); 380 } 381 }else if(element_task == 'html'){ 382 383 if(target_element != null){ 384 target_element.html(newContent); 385 } 386 }else if(element_task == 'text'){ 387 388 if(target_element != null){ 389 target_element.text(data); 390 } 391 }else if(element_task == 'append'){ 392 393 if(target_element != null){ 394 target_element.append(newContent); 395 } 396 }else if(element_task == 'prepend'){ 397 398 if(target_element != null){
399 target_element.prepend(newContent); 400 } 401 }else if(element_task == 'remove'){ 402 403 if(target_element != null){ 404 if(target_element.prop('tagName') == 'TR'){ 405 target_element.remove(); 406 }else{ 407 target_element.transition({ 408 'animation' : 'fly right', 409 'onComplete' : function(){ 410 target_element.remove(); 411 } 412 }); 413 } 414 } 415 } 416 417 } 418 419 //process click events for the element 420 /*if($.G2.actions.list.hasOwnProperty(id) && $.G2.actions.list[id].hasOwnProperty('success')){ 421 $.G2.actions.list[id].success($(element), data, is_json, newContent); 422 }*/ 423 424 //check triggers 425 if($(element).data('dynamic') && $(element).data('dynamic')['oncomplete']){ 426 //$.each($(element).data('dynamic'), function(devent, deventdata){ 427 $.each($(element).data('dynamic')['oncomplete'], function(dact, dactdata){ 428 if(dact == 'reload'){ 429 $.each(dactdata, function(k, dactid){ 430 $(dactid).addClass('loading'); 431 $.ajax({ 432 url: $(dactid).data('url'), 433 success: function(result){ 434 var newContent = $(result); 435 $(dactid).replaceWith(newContent); 436 newContent.trigger('contentChange'); 437 } 438 }); 439 }); 440 }else if(dact == 'show'){ 441 $.each(dactdata, function(k, dactid){ 442 $(dactid).removeClass('hidden'); 443 $(dactid).show(); 444 }); 445 }else if(dact == 'hide'){ 446 $.each(dactdata, function(k, dactid){ 447 $(dactid).addClass('hidden'); 448 $(dactid).hide(); 449 }); 450 } 451 }); 452 //}); 453 } 454 //trigger element completion event 455 $(element).trigger('g2.actions.dynamic.complete', [data, is_json, newContent]); 456 //set called status 457 if($(element).data('once')){ 458 $(element).data('called', true); 459 } 460 461 if(is_json == false && newContent){ 462 newContent.trigger('contentChange'); 463 } 464 } 465 }); 466 } 467 }; 468 469}(jQuery));
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.