source: Dev/branches/rest-dojo-ui/client/util/build/replace.js @ 256

Last change on this file since 256 was 256, checked in by hendrikvanantwerpen, 13 years ago

Reworked project structure based on REST interaction and Dojo library. As
soon as this is stable, the old jQueryUI branch can be removed (it's
kept for reference).

File size: 1.6 KB
Line 
1define(["./fs"], function(fs) {
2        var cached= {};
3
4        return function(contents, replacement) {
5                var encoding= "utf8";
6                if (replacement instanceof Array) {
7                        // replacement is a vector of replacement instructions; maybe the first item is an encoding
8                        if (typeof replacement[0]=="string") {
9                                encoding= replacement[0];
10                                replacement= replacement.slice(1);
11                        }
12                } else {
13                        // replacement is a single replacement [search, replacement, type] triple
14                        replacement= [replacement];
15                }
16                // at this point, encoding has been determined and replacement is a vector of [search, replacement, type] triples
17
18                replacement.forEach(function(item) {
19                        var
20                                searchText= item[0],
21                                replacementText= item[1],
22                                type= item[2];
23                        if (type=="file") {
24                                // replacementText gives a filename that holds the replacement text
25                                // TODO add type AMD module
26                                replacementText= (cached[filename]= cached[filename] || fs.readFileSynch(replacementText, encoding));
27                        }
28                        if (searchText instanceof RegExp) {
29                                contents= contents.replace(searchText, replacementText);
30                        } else if (typeof searchText=="function") {
31                                contents= searchText(contents);
32                        } else {
33                                // replace all occurences of searchText with replacementText
34                                var
35                                        searchTextLength= searchText.length,
36                                        replacementTextLength= replacementText.length,
37                                        start= contents.indexOf(searchText);
38                                while (start!=-1) {
39                                        contents= contents.substring(0, start) + replacementText + contents.substring(start + searchTextLength);
40                                        start= contents.indexOf(searchText, start + replacementTextLength);
41                                }
42                        }
43                });
44                return contents;
45        };
46});
47
Note: See TracBrowser for help on using the repository browser.