mirror of
https://github.com/renbaoshuo/S2OJ.git
synced 2024-12-25 16:31:53 +00:00
96d4a3ecf7
Due to historical reasons, the code is in subfolder "1". With SVN removal, we place the code back and remove the annoying "1" folder.
123 lines
2.4 KiB
JavaScript
123 lines
2.4 KiB
JavaScript
(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);
|
|
};
|
|
};
|
|
|
|
})();
|