1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- // -*-coding: latin-1;-*-
- // Time-stamp: "2006-05-17 22:06:46 ADT" sburke@cpan.org
- // A workaround for XSL-to-XHTML systems that don't
- // implement XSL 'disable-output-escaping="yes"'.
- //
- // sburke@cpan.org, Sean M. Burke.
- // - I hereby release this JavaScript code into the public domain.
- var is_decoding;
- var DEBUG = 0;
- function complaining (s) { alert(s); return new Error(s,s); }
- if(!( document.getElementById && document.getElementsByName ))
- throw complaining("Your browser is too old to render this page properly."
- + " Consider going to getfirefox.com to upgrade.");
- function check_decoding () {
- var d = document.getElementById('cometestme');
- if(!d) {
- throw complaining("Can't find an id='cometestme' element?");
- } else if(!('textContent' in d)) {
- // It's a browser with a halfassed DOM implementation (like IE6)
- // that doesn't implement textContent! Assume that if it's that
- // dumb, it probably doesn't implement disable-content-encoding.
- } else {
- var ampy = d.textContent;
- if(DEBUG > 1) { alert("Got " + ampy); }
- if(ampy == undefined) throw complaining("'cometestme' element has undefined text content?!");
- if(ampy == '' ) throw complaining("'cometestme' element has empty text content?!" );
- if (ampy == "\x26" ) { is_decoding = true; }
- else if (ampy == "\x26amp;" ) { is_decoding = false; }
- else { throw complaining('Insane value: "' + ampy + '"!'); }
- }
- var msg =
- (is_decoding == undefined) ? "I can't tell whether the XSL processor supports disable-content-encoding!D"
- : is_decoding ? "The XSL processor DOES support disable-content-encoding"
- : "The XSL processor does NOT support disable-content-encoding"
- ;
- if(DEBUG) alert(msg);
- return msg;
- }
- function go_decoding () {
- check_decoding();
- if(is_decoding) {
- DEBUG && alert("No work needs doing -- already decoded!");
- return;
- }
- var to_decode = document.getElementsByName('decodeme');
- if(!( to_decode && to_decode.length )) {
- DEBUG && alert("No work needs doing -- no elements to decode!");
- return;
- }
- if(!( ( "innerHTML" in to_decode[0]) && ( "textContent" in to_decode[0]) ))
- throw complaining( "Your JavaScript version doesn't implement DOM " +
- "properly enough to show this page correctly. " +
- "Consider going to getfirefox.com to upgrade.");
- var s;
- for(var i = to_decode.length - 1; i >= 0; i--) {
- s = to_decode[i].textContent;
- if(
- s == undefined ||
- (s.indexOf('&') == -1 && s.indexOf('<') == -1)
- ) {
- // the null or markupless element needs no reworking
- } else {
- to_decode[i].innerHTML = s; // that's the magic
- }
- }
- return;
- }
- //End
|