Blame view

application/libs/PHPMailer/examples/scripts/shAutoloader.js 2.43 KB
8d65d0ce   andryeyev   init
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
  (function() {
  
  var sh = SyntaxHighlighter;
  
  /**
   * Provides functionality to dynamically load only the brushes that a needed to render the current page.
   *
   * There are two syntaxes that autoload understands. For example:
   *
   * SyntaxHighlighter.autoloader(
   *     [ 'applescript',          'Scripts/shBrushAppleScript.js' ],
   *     [ 'actionscript3', 'as3', 'Scripts/shBrushAS3.js' ]
   * );
   *
   * or a more easily comprehendable one:
   *
   * SyntaxHighlighter.autoloader(
   *     'applescript       Scripts/shBrushAppleScript.js',
   *     'actionscript3 as3 Scripts/shBrushAS3.js'
   * );
   */
  sh.autoloader = function()
  {
  	var list = arguments,
  		elements = sh.findElements(),
  		brushes = {},
  		scripts = {},
  		all = SyntaxHighlighter.all,
  		allCalled = false,
  		allParams = null,
  		i
  		;
  
  	SyntaxHighlighter.all = function(params)
  	{
  		allParams = params;
  		allCalled = true;
  	};
  
  	function addBrush(aliases, url)
  	{
  		for (var i = 0; i < aliases.length; i++)
  			brushes[aliases[i]] = url;
  	};
  
  	function getAliases(item)
  	{
  		return item.pop
  			? item
  			: item.split(/\s+/)
  			;
  	}
  
  	// create table of aliases and script urls
  	for (i = 0; i < list.length; i++)
  	{
  		var aliases = getAliases(list[i]),
  			url = aliases.pop()
  			;
  
  		addBrush(aliases, url);
  	}
  
  	// dynamically add <script /> tags to the document body
  	for (i = 0; i < elements.length; i++)
  	{
  		var url = brushes[elements[i].params.brush];
  
  		if(url && scripts[url] === undefined)
  		{
  			if(elements[i].params['html-script'] === 'true')
  			{
  				if(scripts[brushes['xml']] === undefined) {
  					loadScript(brushes['xml']);
  					scripts[url] = false;
  				}
  			}
  
  			scripts[url] = false;
  			loadScript(url);
  		}
  	}
  
  	function loadScript(url)
  	{
  		var script = document.createElement('script'),
  			done = false
  			;
  
  		script.src = url;
  		script.type = 'text/javascript';
  		script.language = 'javascript';
  		script.onload = script.onreadystatechange = function()
  		{
  			if (!done && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete'))
  			{
  				done = true;
  				scripts[url] = true;
  				checkAll();
  
  				// Handle memory leak in IE
  				script.onload = script.onreadystatechange = null;
  				script.parentNode.removeChild(script);
  			}
  		};
  
  		// sync way of adding script tags to the page
  		document.body.appendChild(script);
  	};
  
  	function checkAll()
  	{
  		for(var url in scripts)
  			if (scripts[url] == false)
  				return;
  
  		if (allCalled)
  			SyntaxHighlighter.highlight(allParams);
  	};
  };
  
  })();