~caneypuggies/reformedchurcheslocator/couchapp-backbone

« back to all changes in this revision

Viewing changes to _attachments/js/vendor/jquery.xpath/res/assemble.js

  • Committer: Tim Black
  • Date: 2013-09-16 22:50:16 UTC
  • Revision ID: tim@alwaysreformed.com-20130916225016-zk8jiba25z33ew7h
Versioned Bower vendor directory

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
(function() {
 
2
 
 
3
        var cXMLHttpRequest     = window.XMLHttpRequest || function() {
 
4
                return new ActiveXObject("Microsoft.XMLHTTP");
 
5
        };
 
6
 
 
7
        // Uri utilities
 
8
        var hUriCache   = {};
 
9
        function fGetUriComponents(sUri) {
 
10
                var aResult     = hUriCache[sUri] ||(hUriCache[sUri] = sUri.match(/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/));
 
11
                return [aResult[1], aResult[3], aResult[5], aResult[6], aResult[8]];
 
12
        };
 
13
 
 
14
        function fResolveUri(sUri, sBaseUri) {
 
15
                if (sUri == '' || sUri.charAt(0) == '#')
 
16
                        return sBaseUri;
 
17
 
 
18
                var aUri        = fGetUriComponents(sUri);
 
19
                if (aUri[0])    // scheme
 
20
                        return sUri;
 
21
 
 
22
                var aBaseUri    = fGetUriComponents(sBaseUri);
 
23
                aUri[0] = aBaseUri[0];  // scheme
 
24
 
 
25
                if (!aUri[1]) {
 
26
                        // authority
 
27
                        aUri[1] = aBaseUri[1];
 
28
 
 
29
                        // path
 
30
                        if (aUri[2].charAt(0) != '/') {
 
31
                                var aUriSegments                = aUri[2].split('/'),
 
32
                                        aBaseUriSegments        = aBaseUri[2].split('/');
 
33
                                aBaseUriSegments.pop();
 
34
 
 
35
                                var nBaseUriStart       = aBaseUriSegments[0] == '' ? 1 : 0;
 
36
                                for (var nIndex = 0, nLength = aUriSegments.length; nIndex < nLength; nIndex++) {
 
37
                                        if (aUriSegments[nIndex] == '..') {
 
38
                                                if (aBaseUriSegments.length > nBaseUriStart)
 
39
                                                        aBaseUriSegments.pop();
 
40
                                                else {
 
41
                                                        aBaseUriSegments.push(aUriSegments[nIndex]);
 
42
                                                        nBaseUriStart++;
 
43
                                                }
 
44
                                        }
 
45
                                        else
 
46
                                        if (aUriSegments[nIndex] != '.')
 
47
                                                aBaseUriSegments.push(aUriSegments[nIndex]);
 
48
                                }
 
49
                                if (aUriSegments[--nIndex] == '..' || aUriSegments[nIndex] == '.')
 
50
                                        aBaseUriSegments.push('');
 
51
                                aUri[2] = aBaseUriSegments.join('/');
 
52
                        }
 
53
                }
 
54
 
 
55
                var aResult     = [];
 
56
                if (aUri[0])
 
57
                        aResult.push(aUri[0]);
 
58
                if (aUri[1])    // '//'
 
59
                        aResult.push(aUri[1]);
 
60
                if (aUri[2])
 
61
                        aResult.push(aUri[2]);
 
62
                if (aUri[3])    // '?'
 
63
                        aResult.push(aUri[3]);
 
64
                if (aUri[4])    // '#'
 
65
                        aResult.push(aUri[4]);
 
66
 
 
67
                return aResult.join('');
 
68
        };
 
69
 
 
70
        function fAssemble(descriptor) {
 
71
                // get files list
 
72
                var oRequest    = new cXMLHttpRequest;
 
73
                oRequest.open("GET", descriptor, false);
 
74
                oRequest.send(null);
 
75
 
 
76
                // read files
 
77
                var source      = [];
 
78
                for (var n = 0, files   = oRequest.responseText.split(/\n/g), file; n < files.length; n++) {
 
79
                        if ((file = files[n].replace(/^\s+/, "").replace(/\s+$/, "")) != '' && file.substr(0, 1) != "#") {
 
80
                                file    = fResolveUri(file, descriptor);
 
81
                                if (file.match(/.files$/))
 
82
                                        source[source.length]   = fAssemble(file);
 
83
                                else {
 
84
                                        oRequest.open("GET", file, false);
 
85
                                        oRequest.send(null);
 
86
                                        source[source.length]   = oRequest.responseText;
 
87
                                }
 
88
                        }
 
89
                }
 
90
                return source.join("\n");
 
91
        };
 
92
 
 
93
        // Get baseUri
 
94
        var scripts     = document.getElementsByTagName("script"),
 
95
                self    = scripts[scripts.length-1],
 
96
                match   = self.src.match(/\?path=(.+)$/);
 
97
 
 
98
        //
 
99
        self.parentNode.removeChild(self);
 
100
 
 
101
        // Remove self
 
102
        var code        = fAssemble(match[1] + ".files");
 
103
 
 
104
        // Evaluate
 
105
        var oScript     = document.getElementsByTagName("head")[0].appendChild(document.createElement("script"));
 
106
        oScript.type    = "text/javascript";
 
107
        oScript.text    =       "" +
 
108
                                                "(function(){" +
 
109
                                                        code +
 
110
                                                "})()" +
 
111
                                                "";
 
112
})();
 
 
b'\\ No newline at end of file'