      1 // AJAX-JSF AJAX-like library, for communicate with view Tree on server side.
      2 // In case of XMLHttpRequest don't worked, use :
      3 // JSHttpRequest v1.12. (C) Dmitry Koterov, 2005-01-27.
      4 // http://forum.dklab.ru/users/DmitryKoterov/
      5 //
      6 // Do not remove this comment if you want to use script!
      7 // ?? ???????? ?????? ???????????, ???? ?? ?????? ???????????? ??????!
      8 //
      9 // Modified by Alexander J. Smirnov to use as JSF AJAX-like components.
     10
     11 // DOM - like elements for JSRequest. JS serialiser encode
     12 // XML sax events to creation of corresponding objects.
     13 JSNode =  function() {
     14 };
     15
     16 // Base node
     17 JSNode.prototype = {
     18 	tag : null,
     19 	attrs : {},
     20 	childs : [],
     21 	value : "",
     22 	_symbols : {
     23 			'&':"&",
     24 			'<':"<",
     25 			'>':">",
     26 			'"':""",
     27 			'\'':"'",
     28 			'\u00A0':" "
     29 	},
     30
     31 	// Public functions
     32 	getInnerHTML : function(context) {
     33 		var children = [];
     34 		for (var i = 0; i < this.childs.length; i++)
     35 		{
     36 			children.push(this.childs[i].getContent(context));
     37 		}
     38 		return children.join('');
     39 	},
     40 	// Escape XML symbols - < > & ' ...
     41 	xmlEscape : function(value) {
     42 		return RichFaces.jQuery("<div></div>").text(value).html();
     43 	}
     44 };
     45
     46 // Element node
     47 E = function(tagname,attributes,childnodes) {
     48 	this.tag = tagname;
     49 	if (attributes) this.attrs = attributes;
     50 	if(childnodes) this.childs = childnodes;
     51 };
     52
     53 E.prototype = new JSNode();
     54 E.prototype.getContent = function(context) {
     55 	var html = "<"+this.tag;
     56 	var inner = this.getInnerHTML(context);
     57 	if (inner=='') this.isEmpty = true; else this.isEmpty=false;
     58 	for(var i in this.attrs) {
     59 		if (!this.attrs.hasOwnProperty(i)) {
     60 			continue ;
     61 		}
     62
     63 		var attrValue = this.attrs[i];
     64
     65 		if (typeof attrValue == "function")
     66 			attrValue = attrValue.call(this, context);
     67
     68 		if (attrValue)
     69 			html += " "+(i=='className'?'class':i)+'="'+this.xmlEscape(attrValue)+'"';
     70 	}
     71 	html+= ">"+inner+"</"+this.tag+">";
     72 	return html;
     73 };
     74
     75 // Escaped Text node
     76 ET = function(text) {
     77 	this.value = text;
     78 };
     79
     80
     81 //ET.prototype = new JSNode();
     82 ET.prototype.getContent = function(context) {
     83   	var value = this.value;
     84   	if (typeof value=="function") value=value(context);
     85   	if (value && value.getContent) {
     86 		value = value.getContent(context);
     87 	}
     88
     89 	if (value) return value;
     90
     91 	return "";
     92 };
     93
     94 // Text node
     95 T = function(text) {
     96 	this.value = text;
     97 };
     98
     99 T.prototype = new JSNode();
    100 T.prototype.getContent = function(context) {
    101   	var value = this.value;
    102   	if (typeof value=="function") value=value(context);
    103
    104 	if (value) return this.xmlEscape(value);
    105
    106 	return "";
    107 };
    108
    109 // Comment node
    110 C = function(text) {
    111 	this.value = text;
    112 };
    113
    114 //C.prototype = new JSNode();
    115 C.prototype.getContent = function(context) {
    116 	return "<!--"+this.value+"-->";
    117 };
    118
    119 // CDATA Section node.
    120 D = function(text) {
    121 	this.value = text;
    122 };
    123
    124 //D.prototype = new JSNode();
    125 D.prototype.getContent = function(context) {
    126 	return "<![CDATA["+this.value+"]]>";
    127 };
    128
    129
    130