Merge pull request #2741 from timwienk/gruntfile-restructuring
[mootools.git] / Source / Request / Request.HTML.js
blob427e083380c7df552a724d564bce9f44fea7721f
1 /*
2 ---
4 name: Request.HTML
6 description: Extends the basic Request Class with additional methods for interacting with HTML responses.
8 license: MIT-style license.
10 requires: [Element, Request]
12 provides: Request.HTML
14 ...
17 Request.HTML = new Class({
19         Extends: Request,
21         options: {
22                 update: false,
23                 append: false,
24                 evalScripts: true,
25                 filter: false,
26                 headers: {
27                         Accept: 'text/html, application/xml, text/xml, */*'
28                 }
29         },
31         success: function(text){
32                 var options = this.options, response = this.response;
34                 response.html = text.stripScripts(function(script){
35                         response.javascript = script;
36                 });
38                 var match = response.html.match(/<body[^>]*>([\s\S]*?)<\/body>/i);
39                 if (match) response.html = match[1];
40                 var temp = new Element('div').set('html', response.html);
42                 response.tree = temp.childNodes;
43                 response.elements = temp.getElements(options.filter || '*');
45                 if (options.filter) response.tree = response.elements;
46                 if (options.update){
47                         var update = document.id(options.update).empty();
48                         if (options.filter) update.adopt(response.elements);
49                         else update.set('html', response.html);
50                 } else if (options.append){
51                         var append = document.id(options.append);
52                         if (options.filter) response.elements.reverse().inject(append);
53                         else append.adopt(temp.getChildren());
54                 }
55                 if (options.evalScripts) Browser.exec(response.javascript);
57                 this.onSuccess(response.tree, response.elements, response.html, response.javascript);
58         }
60 });
62 Element.Properties.load = {
64         set: function(options){
65                 var load = this.get('load').cancel();
66                 load.setOptions(options);
67                 return this;
68         },
70         get: function(){
71                 var load = this.retrieve('load');
72                 if (!load){
73                         load = new Request.HTML({data: this, link: 'cancel', update: this, method: 'get'});
74                         this.store('load', load);
75                 }
76                 return load;
77         }
81 Element.implement({
83         load: function(){
84                 this.get('load').send(Array.link(arguments, {data: Type.isObject, url: Type.isString}));
85                 return this;
86         }
88 });