/* This file is part of RelaxNGui. RelaxNGui is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. RelaxNGui is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with RelaxNGui (file COPYING in the main directory). If not, see . */ var RelaxNGui = function(rng,target,ceval,ignore=false) { if (!(rng instanceof XMLDocument)) { // rng has to be XMLDocument //{{{ rng = $XR($(rng).serializeXML()); } //}}} var lenextract = function(tag, lencount) { //{{{ $.each(tag.attributes,function(k,v){ if ((v.localName == 'label') && (v.namespaceURI == 'http://rngui.org')) { lencount = v.nodeValue.length > lencount ? v.nodeValue.length : lencount; } }); return lencount; }; //}}} var labextract = function(type,tag) { //{{{ var ret = { 'type': type, 'wrap': false, 'readonly': false, 'label': '', default: '' }; $.each(tag.attributes,function(k,v){ if ((v.localName == 'label') && (v.namespaceURI == 'http://rngui.org')) { ret['label'] = v.nodeValue; } if ((v.localName == 'readonly') && (v.namespaceURI == 'http://rngui.org')) { ret['readonly'] = v.nodeValue == 'true' ? true : false; } if ((v.localName == 'wrap') && (v.namespaceURI == 'http://rngui.org')) { ret['wrap'] = v.nodeValue == 'true' ? true : false; } }); $.each(tag.children,function(k,v){ if ((v.localName == 'param') && (v.namespaceURI == 'http://relaxng.org/ns/structure/1.0')) { $.each(v.attributes,function(l,w){ if ((w.localName == 'name') && (w.nodeValue == 'minInclusive')) { ret['min'] = v.lastChild.nodeValue; } if ((w.localName == 'name') && (w.nodeValue == 'maxInclusive')) { ret['max'] = v.lastChild.nodeValue; } }); } }); return ret; }; //}}} var addelements = function(target) { //{{{ var template = target.parent().find('> .relaxngui_template').clone(true,true); template.removeClass('relaxngui_template'); template.find('[data-relaxngui-template]').each(function(j,t){ $(t).attr('data-relaxngui-template',false); }); template.find('.relaxngui_template [data-relaxngui-template]').each(function(j,t){ $(t).attr('data-relaxngui-template',true); }); template.addClass('relaxngui_dyn'); template.on('click', '> *:first-child', function(ev){ delelements($(ev.target)); }); if (target.parent().find('> .relaxngui_dyn').length % 2 == 1) { var evens = template.find('.even'); var odds = template.find('.odd'); evens.each(function(k,v){ $(v).removeClass('even'); $(v).addClass('odd'); }); odds.each(function(k,v){ $(v).removeClass('odd'); $(v).addClass('even'); }); } target.parent().find('> .relaxngui_control').before(template); }; //}}} var delelements = function(target) { //{{{ var it = target.parent(); var par = target.parent().parent(); it.remove(); par.trigger('relaxngui_remove'); }; //}}} var recshow_header = function(tag,ret){ //{{{ var header; $.each(tag.attributes,function(k,v){ if ((v.localName == 'header') && (v.namespaceURI == 'http://rngui.org')) { header = v.nodeValue; } }); if (header) { ret.append($("
" + header + "
")); } } //}}} var recshow_single = function(tag,ret,template,path,lencount,optional){ //{{{ var node = $('
'); var name; var label; var second = {}; var datalist = []; var defaul = ''; var hint = ''; var retcount = 0; $.each(tag.attributes,function(k,v){ if ((v.localName == 'label') && (v.namespaceURI == 'http://rngui.org')) { label = v.nodeValue; } if ((v.localName == 'date') && (v.namespaceURI == 'http://rngui.org')) { label = v.nodeValue; } if ((v.localName == 'default') && (v.namespaceURI == 'http://rngui.org')) { defaul = v.nodeValue; } if ((v.localName == 'hint') && (v.namespaceURI == 'http://rngui.org')) { hint = v.nodeValue; } if (v.localName == 'name') { name = v.nodeValue; } }); $.each($(tag).children('data[type=string]'), function(k,v) { second = labextract('string',v); }); $.each($(tag).children('data[type=integer]'), function(k,v) { second = labextract('integer',v); }); $.each($(tag).children('data[type=nonNegativeInteger]'), function(k,v) { second = labextract('nonNegativeInteger',v); }); $.each($(tag).children('data[type=positiveInteger]'), function(k,v) { second = labextract('positiveInteger',v); }); $.each($(tag).children('data[type=float]'), function(k,v) { second = labextract('float',v); }); $.each($(tag).children('data[type=date]'), function(k,v) { second = labextract('date',v); }); $.each($(tag).children('text'), function(k,v) { second = labextract('text',v); }); $.each($(tag).find('choice > value'), function(k,v) { second = labextract('datalist',$(v).parent()[0]); datalist.push(v.textContent); }); if (name && label) { node.append($("")); } else if (name) { // a tag without information is ignored } else if (label) { node.append($("")); } var tpath = ((typeof name === 'undefined') ? path + ' > *' : (tag.localName == 'element' ? path + ' > ' + $(tag).attr('name') : path + '[' + $(tag).attr('name') + ']')); if (label) { if (defaul && typeof defaul == 'string' && defaul.match(/^javascript:/)) { defaul = defaul.replace(/^javascript:/,''); defaul = ceval ? ceval(defaul) : eval(defaul); } var os = (optional ? " onkeyup='var sl = $(this).siblings(\"label\"); if ($(this).get_val() == \"\") { if (!sl.hasClass(\"optional\")) { sl.addClass(\"optional\") } } else { sl.removeClass(\"optional\") }' data-optional='true'" : " data-optional='false'"); if (second.readonly) node.append($("")); else { if (second.type == 'string') { node.append($("")); } else if (second.type == 'integer') { node.append($("")); } else if (second.type == 'positiveInteger') { if (second.min == undefined) second.min = 1; node.append($("")); } else if (second.type == 'nonNegativeInteger') { if (second.min == undefined) second.min = 0; node.append($("")); } else if (second.type == 'date') { node.append($("")); } else if (second.type == 'float') { node.append($("")); } else if (second.type == 'text') { node.append($("
")); } else if (second.type == 'datalist') { var tnode = $(""); $.each(datalist,function(didx,dname){ if (dname == defaul) tnode.append('