Merge branch 'master' of https://git.dirt.kz/igor/Metadata_PHP
This commit is contained in:
@ -1,7 +1,7 @@
|
|||||||
//Copyright (C) Ivanov I.M. file created in 2008
|
//Copyright (C) Ivanov I.M. file created in 2008
|
||||||
//For find non english chars: [^\x00-\x7F]+
|
//For find non english chars: [^\x00-\x7F]+
|
||||||
|
|
||||||
//Заглушки
|
//Stubs
|
||||||
function setPropVal(uid,id,c,p){
|
function setPropVal(uid,id,c,p){
|
||||||
ERec_mas[uid].setPropVal(id,c,p);
|
ERec_mas[uid].setPropVal(id,c,p);
|
||||||
}
|
}
|
||||||
@ -102,7 +102,7 @@ class EdtRec
|
|||||||
{
|
{
|
||||||
field.value=value;
|
field.value=value;
|
||||||
}else{
|
}else{
|
||||||
console.error('Field "'+propName+'" not found!');
|
log.error('Field "'+propName+'" not found!');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -321,15 +321,42 @@ class EdtRec
|
|||||||
let nList=findNode(nodeProp, "options");
|
let nList=findNode(nodeProp, "options");
|
||||||
if(nList!=null)
|
if(nList!=null)
|
||||||
{
|
{
|
||||||
|
if(nList.getAttribute("selector")=="combo")
|
||||||
|
{
|
||||||
|
let select = document.createElement('select');
|
||||||
|
select.classList.add('DBMS');
|
||||||
|
select.style.cssText="width: 100%; height:22px; line-height: 22px;";
|
||||||
|
select.setAttribute("name",nodeProp.getAttribute("n"));
|
||||||
|
select.setAttribute("id","prop_"+this.uid+"_"+nodeProp.getAttribute("n"));
|
||||||
|
select.onchange = function(thiz,node){ return function()
|
||||||
|
{
|
||||||
|
thiz.onComboObjectChangeHandler(node);
|
||||||
|
};
|
||||||
|
}(this,nodeProp);
|
||||||
|
|
||||||
|
let nCheckbox = nList.firstChild;
|
||||||
|
while (nCheckbox != null) {
|
||||||
|
if (nCheckbox.nodeName == "option") {
|
||||||
|
let option = document.createElement('option');
|
||||||
|
option.setAttribute("value",nCheckbox.getAttribute("n"));
|
||||||
|
option.appendChild(document.createTextNode(nCheckbox.getAttribute("d")));
|
||||||
|
select.appendChild( option );
|
||||||
|
}
|
||||||
|
nCheckbox = nCheckbox.nextSibling;
|
||||||
|
}
|
||||||
|
//select.setAttribute("value",value);// does not work because when creating no values in the list
|
||||||
|
newCell1.appendChild(select);
|
||||||
|
}else{
|
||||||
nodeProp.field = new TCheckboxListField(nodeProp.getAttribute("n"));
|
nodeProp.field = new TCheckboxListField(nodeProp.getAttribute("n"));
|
||||||
let nCheckbox = nList.firstChild;
|
let nCheckbox = nList.firstChild;
|
||||||
while (nCheckbox!=null) {
|
while (nCheckbox != null) {
|
||||||
if(nCheckbox.nodeName=="option") {
|
if (nCheckbox.nodeName == "option") {
|
||||||
nodeProp.field.addCheckbox(nCheckbox.getAttribute("n"), nCheckbox.getAttribute("d"));
|
nodeProp.field.addCheckbox(nCheckbox.getAttribute("n"), nCheckbox.getAttribute("d"));
|
||||||
}
|
}
|
||||||
nCheckbox = nCheckbox.nextSibling;
|
nCheckbox = nCheckbox.nextSibling;
|
||||||
}
|
}
|
||||||
newCell1.appendChild(nodeProp.field.getDiv());
|
newCell1.appendChild(nodeProp.field.getDiv());
|
||||||
|
}
|
||||||
}else
|
}else
|
||||||
{
|
{
|
||||||
let input = document.createElement('input');
|
let input = document.createElement('input');
|
||||||
@ -958,7 +985,7 @@ class EdtRec
|
|||||||
|
|
||||||
let rec=new SRec();
|
let rec=new SRec();
|
||||||
rec.opener=this;
|
rec.opener=this;
|
||||||
rec.create();
|
rec.create(null);
|
||||||
rec.f_State=1;
|
rec.f_State=1;
|
||||||
rec.f_PropName=nodeProp.getAttribute("n");
|
rec.f_PropName=nodeProp.getAttribute("n");
|
||||||
rec.f_Settings=settings;
|
rec.f_Settings=settings;
|
||||||
@ -1074,7 +1101,7 @@ class EdtRec
|
|||||||
}
|
}
|
||||||
nodeProp=nodeProp.nextSibling;
|
nodeProp=nodeProp.nextSibling;
|
||||||
}
|
}
|
||||||
//console.log('Значение в XML '+prop_name+'='+val);
|
//log.info('Значение в XML '+prop_name+'='+val);
|
||||||
|
|
||||||
//The first line in the select as NULL value = 1
|
//The first line in the select as NULL value = 1
|
||||||
option = document.createElement('option');
|
option = document.createElement('option');
|
||||||
@ -1107,7 +1134,7 @@ class EdtRec
|
|||||||
//option.style.color="graytext"
|
//option.style.color="graytext"
|
||||||
option.setAttribute("value",id);
|
option.setAttribute("value",id);
|
||||||
option.appendChild(document.createTextNode(caption));
|
option.appendChild(document.createTextNode(caption));
|
||||||
//console.log('id='+id+' val='+val);
|
//log.info('id='+id+' val='+val);
|
||||||
if (id==val) option.selected=true;
|
if (id==val) option.selected=true;
|
||||||
prop.appendChild( option );
|
prop.appendChild( option );
|
||||||
}
|
}
|
||||||
@ -1175,8 +1202,9 @@ class EdtRec
|
|||||||
applyReq(req,fn,node,xmldoc,win)
|
applyReq(req,fn,node,xmldoc,win)
|
||||||
{
|
{
|
||||||
this.hideProgressBar();
|
this.hideProgressBar();
|
||||||
if (fn==-1) {
|
|
||||||
let fullText = findFirstNode(node,'#cdata-section').nodeValue;
|
if(node.errorCode>0) {
|
||||||
|
let fullText = node.errorMessage;
|
||||||
let smallText = '';
|
let smallText = '';
|
||||||
let pos1=fullText.indexOf('[[');
|
let pos1=fullText.indexOf('[[');
|
||||||
let pos2=fullText.indexOf(']]');
|
let pos2=fullText.indexOf(']]');
|
||||||
@ -1197,7 +1225,9 @@ class EdtRec
|
|||||||
else
|
else
|
||||||
alert2(trt('Alert'), fullText);
|
alert2(trt('Alert'), fullText);
|
||||||
}
|
}
|
||||||
} else
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (fn==0) {
|
if (fn==0) {
|
||||||
this.eRecNo(node,this.record_id);
|
this.eRecNo(node,this.record_id);
|
||||||
} else
|
} else
|
||||||
@ -1240,15 +1270,15 @@ class EdtRec
|
|||||||
if(prop!==null) prop.value = id;
|
if(prop!==null) prop.value = id;
|
||||||
//Request a comment on the record id from the server
|
//Request a comment on the record id from the server
|
||||||
let xml = '';
|
let xml = '';
|
||||||
if(filter!=''){
|
if(filter!=null){
|
||||||
//Настройка для последующего вызова формы через кнопку
|
//Настройка для последующего вызова формы через кнопку
|
||||||
xml='<prop n="'+prop_id+'"><type n="' + TypeName + '"><objects-list>'+filter+'</objects-list></type></prop>';
|
xml='<prop n="'+prop_id+'"><type n="' + TypeName + '"><objects-list>'+getXMLNodeSerialisation(filter)+'</objects-list></type></prop>';
|
||||||
applyNodeToNode(CreateXMLDOC(xml).documentElement, node, "n");
|
applyNodeToNode(CreateXMLDOC(xml).documentElement, node, "n");
|
||||||
|
|
||||||
//Для запроса списка значений для выпадающего списка
|
//Для запроса списка значений для выпадающего списка
|
||||||
xml = '<?xml version="1.0" encoding="utf-8"?>' +
|
xml = '<?xml version="1.0" encoding="utf-8"?>' +
|
||||||
'<metadata fn="6"><type n="' + TypeName + '" c="' + name + '" pn="' + prop_id + '" fn="' + name + '">' +
|
'<metadata fn="6"><type n="' + TypeName + '" c="' + name + '" pn="' + prop_id + '" fn="' + name + '">' +
|
||||||
'<objects-list>' + filter + '</objects-list>' +
|
'<objects-list>' + getXMLNodeSerialisation(filter) + '</objects-list>' +
|
||||||
'</type></metadata>';
|
'</type></metadata>';
|
||||||
}else{
|
}else{
|
||||||
xml = '<?xml version="1.0" encoding="utf-8"?>' +
|
xml = '<?xml version="1.0" encoding="utf-8"?>' +
|
||||||
@ -1335,7 +1365,7 @@ class EdtRec
|
|||||||
if (nodeProp.nodeName=="prop")
|
if (nodeProp.nodeName=="prop")
|
||||||
{
|
{
|
||||||
let value=getCdata(nodeProp).nodeValue;
|
let value=getCdata(nodeProp).nodeValue;
|
||||||
//console.log("name = "+nodeProp.getAttribute("n")+" value= "+value);
|
//log.info("name = "+nodeProp.getAttribute("n")+" value= "+value);
|
||||||
|
|
||||||
if ((value=="true")||(value=="t")) value=1;
|
if ((value=="true")||(value=="t")) value=1;
|
||||||
if ((value=="false")||(value=="f")) value=0;
|
if ((value=="false")||(value=="f")) value=0;
|
||||||
@ -1430,7 +1460,7 @@ class EdtRec
|
|||||||
if(document.getElementById("prop_"+this.uid+"_"+nodeProp.getAttribute("n")+"_visible").value=="")
|
if(document.getElementById("prop_"+this.uid+"_"+nodeProp.getAttribute("n")+"_visible").value=="")
|
||||||
value="";
|
value="";
|
||||||
}
|
}
|
||||||
//console.log("name = "+nodeProp.getAttribute("n")+" value= "+value+" object = "+document.getElementById("prop_"+this.uid+"_"+nodeProp.getAttribute("n")));
|
//log.info("name = "+nodeProp.getAttribute("n")+" value= "+value+" object = "+document.getElementById("prop_"+this.uid+"_"+nodeProp.getAttribute("n")));
|
||||||
}else{
|
}else{
|
||||||
//For special fields (look "TCheckboxListField" class)
|
//For special fields (look "TCheckboxListField" class)
|
||||||
value=nodeProp.field.getValue();
|
value=nodeProp.field.getValue();
|
||||||
@ -1458,7 +1488,7 @@ class EdtRec
|
|||||||
//Check the field according to its type
|
//Check the field according to its type
|
||||||
checkData(value,type,maybenull)
|
checkData(value,type,maybenull)
|
||||||
{
|
{
|
||||||
//console.log("checkData value = "+value+" type= "+type+" maybenull = "+maybenull);
|
//log.info("checkData value = "+value+" type= "+type+" maybenull = "+maybenull);
|
||||||
if(value==undefined) return false;
|
if(value==undefined) return false;
|
||||||
if(type=="i4")
|
if(type=="i4")
|
||||||
{
|
{
|
||||||
|
|||||||
78
metadata/dbms/log.js
Normal file
78
metadata/dbms/log.js
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
// Самодельный логгер, почти аналог: https://thecode.media/winston/
|
||||||
|
class Log
|
||||||
|
{
|
||||||
|
constructor()
|
||||||
|
{
|
||||||
|
this.data = [];
|
||||||
|
this.win = null;
|
||||||
|
}
|
||||||
|
show() {
|
||||||
|
if (this.win != null) this.win.Close();
|
||||||
|
|
||||||
|
this.win = new TWin();
|
||||||
|
this.win.divsh.onclick = null;
|
||||||
|
this.win.shadow = false;
|
||||||
|
//this.win.setParent(this.parent.win);
|
||||||
|
this.win.BuildGUI(10, 10);
|
||||||
|
this.win.setCaption(trt('Log'));
|
||||||
|
this.win.setContent('<div id="log_' + this.win.uid + '" style="height:100%;width:100%;"></div>');
|
||||||
|
this.win.setSize("600px", "260px");
|
||||||
|
this.win.setCenter();
|
||||||
|
this.win.hide(false);
|
||||||
|
|
||||||
|
this.addLine(true);
|
||||||
|
}
|
||||||
|
hide(){
|
||||||
|
if(this.win!=null) this.win.Close();
|
||||||
|
this.win=null;
|
||||||
|
}
|
||||||
|
addLine(all){
|
||||||
|
if (this.win == null) return;
|
||||||
|
let elem = document.getElementById("log_" + this.win.uid);
|
||||||
|
let i = 0;
|
||||||
|
if(!all) i = this.data.length-1;
|
||||||
|
for (;i < this.data.length;i++) {
|
||||||
|
let div = document.createElement('div');
|
||||||
|
if(this.data[i].p==1){
|
||||||
|
div.style.cssText='color: maroon; width:100%;';
|
||||||
|
}
|
||||||
|
else if(this.data[i].p==2){
|
||||||
|
div.style.cssText='color: green; width:100%;';
|
||||||
|
}
|
||||||
|
else if(this.data[i].p==3){
|
||||||
|
div.style.cssText='color: orange; width:100%;';
|
||||||
|
}
|
||||||
|
else if(this.data[i].p==4){
|
||||||
|
div.style.cssText='color: red; width:100%;';
|
||||||
|
}
|
||||||
|
div.innerHTML = "["+this.data[i].t+"] "+this.data[i].d;
|
||||||
|
elem.appendChild(div);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
getTime(){
|
||||||
|
let data=new Date();
|
||||||
|
return ('0'+data.getHours()).slice(-2)+":"+('0'+data.getMinutes()).slice(-2)+":"+('0'+data.getSeconds()).slice(-2)+":"+('00'+data.getMilliseconds()).slice(-3);
|
||||||
|
}
|
||||||
|
debug(msg){
|
||||||
|
this.data.push({"p":1,"d":msg,"t": this.getTime()});
|
||||||
|
this.addLine(false);
|
||||||
|
}
|
||||||
|
info(msg){
|
||||||
|
this.data.push({"p":2,"d":msg,"t": this.getTime()});
|
||||||
|
this.addLine(false);
|
||||||
|
}
|
||||||
|
warn(msg){
|
||||||
|
this.data.push({"p":3,"d":msg,"t": this.getTime()});
|
||||||
|
this.addLine(false);
|
||||||
|
}
|
||||||
|
error(msg){
|
||||||
|
this.data.push({"p":4,"d":msg,"t": this.getTime()});
|
||||||
|
this.addLine(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var log = new Log();
|
||||||
|
/*log.debug("log.debug");
|
||||||
|
log.info("log.info");
|
||||||
|
log.warn("log.warn");
|
||||||
|
log.error("log.error");*/
|
||||||
@ -18,12 +18,11 @@ class DBMSUser
|
|||||||
|
|
||||||
applyReq(req,fn,node)
|
applyReq(req,fn,node)
|
||||||
{
|
{
|
||||||
//alert(getXMLNodeSerialisation(node));
|
|
||||||
this.showShadow(false);
|
this.showShadow(false);
|
||||||
if (fn==-1)
|
if(node.errorCode>0) {
|
||||||
{
|
alert2(trt('Alert'), node.errorMessage);
|
||||||
alert(findFirstNode(node,'#cdata-section').nodeValue);
|
}
|
||||||
}else
|
|
||||||
if(fn==7)
|
if(fn==7)
|
||||||
{
|
{
|
||||||
var nCmd=findFirstNode(node, "cmd");
|
var nCmd=findFirstNode(node, "cmd");
|
||||||
@ -95,7 +94,7 @@ class DBMSUser
|
|||||||
deleteHTML('TWin_CL_'+this.win.uid); //Удаляю кнопку закрыть
|
deleteHTML('TWin_CL_'+this.win.uid); //Удаляю кнопку закрыть
|
||||||
this.win.setCaption(trt('Authorization'));
|
this.win.setCaption(trt('Authorization'));
|
||||||
|
|
||||||
this.win.setSize("350px","200px");
|
this.win.setSize("350px","184px");
|
||||||
|
|
||||||
var str='<div style="width: 100%; height: 100%; padding: 3px; text-align: left;">\n\
|
var str='<div style="width: 100%; height: 100%; padding: 3px; text-align: left;">\n\
|
||||||
<table cellpadding="0" cellspacing="0" style="width: 100%; height: 100%;">\n\
|
<table cellpadding="0" cellspacing="0" style="width: 100%; height: 100%;">\n\
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
use lfkeitel\phptotp\{Base32,Totp};
|
||||||
//sleep(1);
|
//sleep(1);
|
||||||
|
|
||||||
//ini_set('display_errors','Off'); //Чтоб ошибки не отправлялись клиентам
|
//ini_set('display_errors','Off'); //Чтоб ошибки не отправлялись клиентам
|
||||||
@ -37,12 +38,15 @@
|
|||||||
return substr($path,0,$position);
|
return substr($path,0,$position);
|
||||||
}
|
}
|
||||||
|
|
||||||
function sendError($e)
|
function sendError($code, $error)
|
||||||
{
|
{
|
||||||
header('Content-type: text/xml');
|
$obj = new StdClass();
|
||||||
|
$obj->errorCode=$code;
|
||||||
|
$obj->errorMessage=$error;
|
||||||
|
header('Content-Type: application/json');
|
||||||
header("Cache-Control: no-cache, must-revalidate");
|
header("Cache-Control: no-cache, must-revalidate");
|
||||||
echo '<?xml version="1.0" encoding="utf-8"?><metadata fn="-1"><![CDATA['.$e.']]></metadata>';
|
echo json_encode($obj);
|
||||||
Exit();
|
exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
function getSQLValue($t,$v)
|
function getSQLValue($t,$v)
|
||||||
@ -173,13 +177,13 @@
|
|||||||
}
|
}
|
||||||
if($xmls!='')
|
if($xmls!='')
|
||||||
{
|
{
|
||||||
//sendError("Metadata node \"".$name."\" not find in database!");
|
//sendError(1,"Metadata node \"".$name."\" not find in database!");
|
||||||
$objXMLDocument = new DOMDocument();
|
$objXMLDocument = new DOMDocument();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
$objXMLDocument->loadXML($xmls);
|
$objXMLDocument->loadXML($xmls);
|
||||||
} catch (Exception $e)
|
} catch (Exception $e)
|
||||||
{ sendError($e->getMessage());
|
{ sendError(1,$e->getMessage());
|
||||||
}
|
}
|
||||||
$currNode=findNodeOnAttribute($objXMLDocument->documentElement, "type","n",$name);
|
$currNode=findNodeOnAttribute($objXMLDocument->documentElement, "type","n",$name);
|
||||||
return $currNode;
|
return $currNode;
|
||||||
@ -190,7 +194,7 @@
|
|||||||
|
|
||||||
function special_handler($exception)
|
function special_handler($exception)
|
||||||
{
|
{
|
||||||
sendError($exception->getMessage());
|
sendError(1,$exception->getMessage());
|
||||||
}
|
}
|
||||||
set_exception_handler('special_handler'); //чтоб не пойманные исключения посылались в виде XML
|
set_exception_handler('special_handler'); //чтоб не пойманные исключения посылались в виде XML
|
||||||
|
|
||||||
@ -216,10 +220,10 @@
|
|||||||
}
|
}
|
||||||
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
||||||
} catch (Exception $e)
|
} catch (Exception $e)
|
||||||
{ sendError('Connect error '.$_SERVER['HTTP_HOST'].': "'.$e->getMessage().'"!');
|
{ sendError(1,'Connect error '.$_SERVER['HTTP_HOST'].': "'.$e->getMessage().'"!');
|
||||||
}
|
}
|
||||||
|
|
||||||
//Пытаемся автоматически залогинется по GUID из COOKIE
|
//Пытаемся автоматически залогинется по GUID из COOKIE (TODO авторизация должна быть в отдельном файле! Смотри директорию password )
|
||||||
/*if($_SESSION['USER_ID']==null && $_COOKIE['GUID']!=null)
|
/*if($_SESSION['USER_ID']==null && $_COOKIE['GUID']!=null)
|
||||||
{
|
{
|
||||||
$res = $db->query("select * from ".$Schema."p__Login(null,null,null,'".$_COOKIE['GUID']."');");
|
$res = $db->query("select * from ".$Schema."p__Login(null,null,null,'".$_COOKIE['GUID']."');");
|
||||||
@ -242,7 +246,7 @@
|
|||||||
$doc->loadXML($HTTP_INPUT);
|
$doc->loadXML($HTTP_INPUT);
|
||||||
} catch (Exception $e)
|
} catch (Exception $e)
|
||||||
{
|
{
|
||||||
sendError($e->getMessage());
|
sendError(1,$e->getMessage());
|
||||||
}
|
}
|
||||||
$reqNode = $doc->documentElement;
|
$reqNode = $doc->documentElement;
|
||||||
|
|
||||||
@ -268,7 +272,6 @@
|
|||||||
if ($fn==0) //отправить метаданные клиенту по запрошенному узлу
|
if ($fn==0) //отправить метаданные клиенту по запрошенному узлу
|
||||||
{
|
{
|
||||||
session_write_close(); //Разблокируем сессионный файл так как запросы могут быть достаточно долгими
|
session_write_close(); //Разблокируем сессионный файл так как запросы могут быть достаточно долгими
|
||||||
//if (!isset($_SESSION['USER_ID']) || $_SESSION['USER_ID']=='') sendError('Вы не авторизованы! '.$_SERVER['PHP_SELF']);
|
|
||||||
|
|
||||||
$typename=findFirstNode($reqNode, "type")->getAttribute("n");
|
$typename=findFirstNode($reqNode, "type")->getAttribute("n");
|
||||||
$currNode=getMetadataNode($typename);
|
$currNode=getMetadataNode($typename);
|
||||||
@ -278,42 +281,32 @@
|
|||||||
$objXMLDocument=$currNode->ownerDocument;
|
$objXMLDocument=$currNode->ownerDocument;
|
||||||
|
|
||||||
//Вернём значение прав доступа для запрошенного объекта
|
//Вернём значение прав доступа для запрошенного объекта
|
||||||
//$allow=true;
|
$allow_ins=false;
|
||||||
$allow=false;
|
$allow_upd=false;
|
||||||
//$sql_query='select a.*,at.name from _Access a, _Actions at where a.del=false and at.id=a.action_id and at.name=\'Insert_'.$typename.'\' and a.role_id in (select group_id from _UsersRoles where user_id='.$_SESSION['USER_ID'].');'
|
$allow_del=false;
|
||||||
$sql_query='select '.$Schema.'p_getaccess('.getSQLValue(gettype($_SESSION['USER_ID']),$_SESSION['USER_ID']).',\'Insert_'.$typename.'\') as allow;';
|
$sql_query='select '.$Schema.'p_getaccess(:user_id1,:action_insert) as ins,'.$Schema.'p_getaccess(:user_id2,:action_update) as upd,'.$Schema.'p_getaccess(:user_id3,:action_delete) as del;';
|
||||||
|
$stmt = $db->prepare($sql_query);
|
||||||
$res = $db->query($sql_query);
|
$stmt->bindValue(':user_id1', $_SESSION['USER_ID'], PDO::PARAM_INT); //getSQLValue(gettype($_SESSION['USER_ID']),$_SESSION['USER_ID'])
|
||||||
while ($row = $res->fetch(PDO::FETCH_ASSOC))// $row - ассоциативный массив значений, ключи - названия столбцов
|
$stmt->bindValue(':user_id2', $_SESSION['USER_ID'], PDO::PARAM_INT); //getSQLValue(gettype($_SESSION['USER_ID']),$_SESSION['USER_ID'])
|
||||||
|
$stmt->bindValue(':user_id3', $_SESSION['USER_ID'], PDO::PARAM_INT); //getSQLValue(gettype($_SESSION['USER_ID']),$_SESSION['USER_ID'])
|
||||||
|
$stmt->bindValue(':action_insert', 'Insert_'.$typename, PDO::PARAM_STR);
|
||||||
|
$stmt->bindValue(':action_update', 'Update_'.$typename, PDO::PARAM_STR);
|
||||||
|
$stmt->bindValue(':action_delete', 'Delete_'.$typename, PDO::PARAM_STR);
|
||||||
|
$res=$stmt->execute();
|
||||||
|
while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
|
||||||
{
|
{
|
||||||
$allow=$allow || ($row['allow'] == 't');
|
$allow_ins=$row['ins'] == 't';
|
||||||
|
$allow_upd=$row['upd'] == 't';
|
||||||
|
$allow_del=$row['del'] == 't';
|
||||||
}
|
}
|
||||||
$xmlAttr = $objXMLDocument->createAttribute("ins"); //insert
|
$xmlAttr = $objXMLDocument->createAttribute("ins"); //insert
|
||||||
$xmlAttr->nodeValue = $allow ? "1" : "0";
|
$xmlAttr->nodeValue = $allow_ins ? "1" : "0";
|
||||||
$currNode->setAttributeNode($xmlAttr);
|
$currNode->setAttributeNode($xmlAttr);
|
||||||
|
$xmlAttr = $objXMLDocument->createAttribute("upd"); //update
|
||||||
$allow=false;
|
$xmlAttr->nodeValue = $allow_upd ? "1" : "0";
|
||||||
//$sql_query='select a.*,at.name from _Access a, _Actions at where a.del=false and at.id=a.action_id and at.name=\'Update_'.$typename.'\' and a.role_id in (select group_id from _UsersRoles where user_id='.$_SESSION['USER_ID'].');';
|
|
||||||
$sql_query='select '.$Schema.'p_getaccess('.getSQLValue(gettype($_SESSION['USER_ID']),$_SESSION['USER_ID']).',\'Update_'.$typename.'\') as allow;';
|
|
||||||
$res = $db->query($sql_query);
|
|
||||||
while ($row = $res->fetch(PDO::FETCH_ASSOC))// $row - ассоциативный массив значений, ключи - названия столбцов
|
|
||||||
{
|
|
||||||
$allow=$allow || ($row['allow'] == 't');
|
|
||||||
}
|
|
||||||
$xmlAttr = $objXMLDocument->createAttribute("upd"); //insert
|
|
||||||
$xmlAttr->nodeValue = $allow ? "1" : "0";
|
|
||||||
$currNode->setAttributeNode($xmlAttr);
|
$currNode->setAttributeNode($xmlAttr);
|
||||||
|
|
||||||
$allow=false;
|
|
||||||
//$sql_query='select a.*,at.name from _Access a, _Actions at where a.del=false and at.id=a.action_id and at.name=\'Delete_'.$typename.'\' and a.role_id in (select group_id from _UsersRoles where user_id='.$_SESSION['USER_ID'].');';
|
|
||||||
$sql_query='select '.$Schema.'p_getaccess('.getSQLValue(gettype($_SESSION['USER_ID']),$_SESSION['USER_ID']).',\'Delete_'.$typename.'\') as allow;';
|
|
||||||
$res = $db->query($sql_query);
|
|
||||||
while ($row = $res->fetch(PDO::FETCH_ASSOC))// $row - ассоциативный массив значений, ключи - названия столбцов
|
|
||||||
{
|
|
||||||
$allow=$allow || ($row['allow'] == 't');
|
|
||||||
}
|
|
||||||
$xmlAttr = $objXMLDocument->createAttribute("del"); //delete
|
$xmlAttr = $objXMLDocument->createAttribute("del"); //delete
|
||||||
$xmlAttr->nodeValue = $allow ? "1" : "0";
|
$xmlAttr->nodeValue = $allow_del ? "1" : "0";
|
||||||
$currNode->setAttributeNode($xmlAttr);
|
$currNode->setAttributeNode($xmlAttr);
|
||||||
|
|
||||||
$allow=true;
|
$allow=true;
|
||||||
@ -334,12 +327,11 @@
|
|||||||
Exit();
|
Exit();
|
||||||
}else
|
}else
|
||||||
{
|
{
|
||||||
sendError('Не найден запрошенный узел: "'.$typename.'"!');
|
sendError(1,'Не найден запрошенный узел: "'.$typename.'"!');
|
||||||
}
|
}
|
||||||
}else
|
}else
|
||||||
if ($fn==1) //вставка записи (результат id записи)
|
if ($fn==1) //вставка записи (результат id записи)
|
||||||
{
|
{
|
||||||
//if (!isset($_SESSION['USER_ID']) || $_SESSION['USER_ID']=='') sendError('Вы не авторизованы! '.$_SERVER['PHP_SELF']);
|
|
||||||
session_write_close(); //Разблокируем сессионный файл так как запросы могут быть достаточно долгими
|
session_write_close(); //Разблокируем сессионный файл так как запросы могут быть достаточно долгими
|
||||||
|
|
||||||
$typename=findFirstNode($reqNode,"type")->getAttribute("n");
|
$typename=findFirstNode($reqNode,"type")->getAttribute("n");
|
||||||
@ -382,7 +374,7 @@
|
|||||||
$path= $_SERVER['DOCUMENT_ROOT'].'/'.findFirstNodeOnAttribute($currNode,"prop","n",$nodePropData->getAttribute("n"))->getAttribute("path");
|
$path= $_SERVER['DOCUMENT_ROOT'].'/'.findFirstNodeOnAttribute($currNode,"prop","n",$nodePropData->getAttribute("n"))->getAttribute("path");
|
||||||
@mkdir($path); //Создаём папку если её нет
|
@mkdir($path); //Создаём папку если её нет
|
||||||
if(!rename($dir.$flnm, $path.$flnm))
|
if(!rename($dir.$flnm, $path.$flnm))
|
||||||
sendError('Can\'t rename to "'.$path.$v.'"!');
|
sendError(1,'Can\'t rename to "'.$path.$v.'"!');
|
||||||
}
|
}
|
||||||
}else
|
}else
|
||||||
{ $v=getSQLValue($vt, getCdataValue($nodePropData));
|
{ $v=getSQLValue($vt, getCdataValue($nodePropData));
|
||||||
@ -394,7 +386,7 @@
|
|||||||
$sql_query=str_replace('${_user_id}',getSQLValue(gettype($_SESSION['USER_ID']),$_SESSION['USER_ID']),$sql_query); //Потому что PostgreSQL не может хранить id пользователя привязаного к сесии
|
$sql_query=str_replace('${_user_id}',getSQLValue(gettype($_SESSION['USER_ID']),$_SESSION['USER_ID']),$sql_query); //Потому что PostgreSQL не может хранить id пользователя привязаного к сесии
|
||||||
|
|
||||||
$stmt = $db->prepare($sql_query);
|
$stmt = $db->prepare($sql_query);
|
||||||
if($stmt === false) sendError('Error preparing Statement');
|
if($stmt === false) sendError(1,'Error preparing Statement');
|
||||||
|
|
||||||
//присваеваем параметрам значения (В записи может быть только 1 двоичное поля см bindParam или сделать несколько переменных)
|
//присваеваем параметрам значения (В записи может быть только 1 двоичное поля см bindParam или сделать несколько переменных)
|
||||||
$nodePropData=$nodeProp->firstChild;
|
$nodePropData=$nodeProp->firstChild;
|
||||||
@ -417,12 +409,15 @@
|
|||||||
}
|
}
|
||||||
$nodePropData=$nodePropData->nextSibling;
|
$nodePropData=$nodePropData->nextSibling;
|
||||||
}
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
$res = $stmt->execute();
|
$res = $stmt->execute();
|
||||||
} catch (Exception $e)
|
} catch (Exception $e)
|
||||||
{ sendError($e->getMessage());
|
{
|
||||||
|
if(str_contains($e->getMessage(), ']]'))
|
||||||
|
sendError(1, $e->getMessage());
|
||||||
|
else
|
||||||
|
sendError(1, '[['.trt("SQL_query_error").']]'.$e->getMessage());
|
||||||
}
|
}
|
||||||
$result = $stmt->fetch(PDO::FETCH_NUM);
|
$result = $stmt->fetch(PDO::FETCH_NUM);
|
||||||
if($result[0]=='')
|
if($result[0]=='')
|
||||||
@ -430,7 +425,7 @@
|
|||||||
if(strpos($db_connection, 'sqlite')!==false) {
|
if(strpos($db_connection, 'sqlite')!==false) {
|
||||||
$result[0] = $db->lastInsertId(); //Для SQLite
|
$result[0] = $db->lastInsertId(); //Для SQLite
|
||||||
}else{
|
}else{
|
||||||
sendError(trt('Failed_to_insert_record').'!');
|
sendError(1,trt('Failed_to_insert_record').'!');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -441,13 +436,12 @@
|
|||||||
Exit();
|
Exit();
|
||||||
}else
|
}else
|
||||||
{
|
{
|
||||||
sendError('Не найден запрошенный узел: "'.$typename.'"!');
|
sendError(1,'Не найден запрошенный узел: "'.$typename.'"!');
|
||||||
}
|
}
|
||||||
}else
|
}else
|
||||||
if ($fn==2) //редактирование (результат id записи)
|
if ($fn==2) //редактирование (результат id записи)
|
||||||
{
|
{
|
||||||
session_write_close(); //Разблокируем сессионный файл так как запросы могут быть достаточно долгими
|
session_write_close(); //Разблокируем сессионный файл так как запросы могут быть достаточно долгими
|
||||||
//if (!isset($_SESSION['USER_ID']) || $_SESSION['USER_ID']=='') sendError('Вы не авторизованы! '.$_SERVER['PHP_SELF']);
|
|
||||||
|
|
||||||
$nodeType=findFirstNode($reqNode,"type");
|
$nodeType=findFirstNode($reqNode,"type");
|
||||||
$typename=$nodeType->getAttribute("n");
|
$typename=$nodeType->getAttribute("n");
|
||||||
@ -492,7 +486,7 @@
|
|||||||
$path= $_SERVER['DOCUMENT_ROOT'].'/'.findFirstNodeOnAttribute($currNode,"prop","n",$nodePropData->getAttribute("n"))->getAttribute("path");
|
$path= $_SERVER['DOCUMENT_ROOT'].'/'.findFirstNodeOnAttribute($currNode,"prop","n",$nodePropData->getAttribute("n"))->getAttribute("path");
|
||||||
@mkdir($path);//Создаём папку если её нет
|
@mkdir($path);//Создаём папку если её нет
|
||||||
if(!rename($dir.$flnm, $path.$flnm))
|
if(!rename($dir.$flnm, $path.$flnm))
|
||||||
sendError('Can\'t rename to "'.$path.$v.'"!');
|
sendError(1,'Can\'t rename to "'.$path.$v.'"!');
|
||||||
}
|
}
|
||||||
}else
|
}else
|
||||||
{
|
{
|
||||||
@ -505,9 +499,9 @@
|
|||||||
$sql_query=str_replace('${_user_id}',getSQLValue(gettype($_SESSION['USER_ID']),$_SESSION['USER_ID']),$sql_query); //Потому что PostgreSQL не может хранить id пользователя привязаного к сесии
|
$sql_query=str_replace('${_user_id}',getSQLValue(gettype($_SESSION['USER_ID']),$_SESSION['USER_ID']),$sql_query); //Потому что PostgreSQL не может хранить id пользователя привязаного к сесии
|
||||||
$sql_query=str_replace('${'.$currNode->getAttribute("ObjectID").'}',getSQLValue(gettype($obj_id),$obj_id),$sql_query); //Так как пока идентификатор базы отдельно передаётся
|
$sql_query=str_replace('${'.$currNode->getAttribute("ObjectID").'}',getSQLValue(gettype($obj_id),$obj_id),$sql_query); //Так как пока идентификатор базы отдельно передаётся
|
||||||
|
|
||||||
//sendError($sql_query);
|
//sendError(1,$sql_query);
|
||||||
$stmt = $db->prepare($sql_query);
|
$stmt = $db->prepare($sql_query);
|
||||||
if($stmt === false) sendError('Error preparing Statement');
|
if($stmt === false) sendError(1,'Error preparing Statement');
|
||||||
|
|
||||||
//Присваеваем параметру двоичную информацию (Внимание! Только 1 параметр может быть в 1 записи (почему?))
|
//Присваеваем параметру двоичную информацию (Внимание! Только 1 параметр может быть в 1 записи (почему?))
|
||||||
$pos_v = 0;
|
$pos_v = 0;
|
||||||
@ -540,7 +534,7 @@
|
|||||||
try
|
try
|
||||||
{ $res = $stmt->execute();
|
{ $res = $stmt->execute();
|
||||||
} catch (Exception $e)
|
} catch (Exception $e)
|
||||||
{ sendError($e->getMessage()."\n".$sql_query);
|
{ sendError(1,$e->getMessage()."\n".$sql_query);
|
||||||
}
|
}
|
||||||
$result = $stmt->fetch(PDO::FETCH_NUM); //$obj_id
|
$result = $stmt->fetch(PDO::FETCH_NUM); //$obj_id
|
||||||
if($result[0]==''){ $result[0]=$obj_id; }
|
if($result[0]==''){ $result[0]=$obj_id; }
|
||||||
@ -551,13 +545,12 @@
|
|||||||
Exit();
|
Exit();
|
||||||
}else
|
}else
|
||||||
{
|
{
|
||||||
sendError('Не найден запрошенный узел: "'.$typename.'"!');
|
sendError(1,'Не найден запрошенный узел: "'.$typename.'"!');
|
||||||
}
|
}
|
||||||
}else
|
}else
|
||||||
if ($fn==3) //удаление (результат id записи)
|
if ($fn==3) //удаление (результат id записи)
|
||||||
{
|
{
|
||||||
session_write_close(); //Разблокируем сессионный файл так как запросы могут быть достаточно долгими
|
session_write_close(); //Разблокируем сессионный файл так как запросы могут быть достаточно долгими
|
||||||
//if (!isset($_SESSION['USER_ID']) || $_SESSION['USER_ID']=='') sendError('Вы не авторизованы! '.$_SERVER['PHP_SELF']);
|
|
||||||
|
|
||||||
$nodeType=findFirstNode($reqNode,"type");
|
$nodeType=findFirstNode($reqNode,"type");
|
||||||
$typename=$nodeType->getAttribute("n");
|
$typename=$nodeType->getAttribute("n");
|
||||||
@ -576,7 +569,7 @@
|
|||||||
try
|
try
|
||||||
{ $res = $db->query($sql_query);
|
{ $res = $db->query($sql_query);
|
||||||
}catch (Exception $e)
|
}catch (Exception $e)
|
||||||
{ sendError($e->getMessage());
|
{ sendError(1,$e->getMessage());
|
||||||
}
|
}
|
||||||
//записываем id удалённой записи для удаления без перезагрузки страницы через javascript
|
//записываем id удалённой записи для удаления без перезагрузки страницы через javascript
|
||||||
$xmlstring="";
|
$xmlstring="";
|
||||||
@ -590,13 +583,12 @@
|
|||||||
Exit();
|
Exit();
|
||||||
}else
|
}else
|
||||||
{
|
{
|
||||||
sendError('Не найден запрошенный узел: "'.$typename.'"!');
|
sendError(1,'Не найден запрошенный узел: "'.$typename.'"!');
|
||||||
}
|
}
|
||||||
}else
|
}else
|
||||||
if ($fn==4 || $fn==11) //взять данные из базы по переданным значениям фильтра ($fn==11 для обновления записи у клиента после вставки или редактировании)
|
if ($fn==4 || $fn==11) //взять данные из базы по переданным значениям фильтра ($fn==11 для обновления записи у клиента после вставки или редактировании)
|
||||||
{
|
{
|
||||||
session_write_close(); //Разблокируем сессионный файл так как запросы могут быть достаточно долгими
|
session_write_close(); //Разблокируем сессионный файл так как запросы могут быть достаточно долгими
|
||||||
//if (!isset($_SESSION['USER_ID']) || $_SESSION['USER_ID']=='') sendError('Вы не авторизованы! 4'.$_SERVER['PHP_SELF']);
|
|
||||||
|
|
||||||
$rowspagecount = 100; //записей на страницу
|
$rowspagecount = 100; //записей на страницу
|
||||||
$nTypeR=findFirstNode($reqNode,'type');
|
$nTypeR=findFirstNode($reqNode,'type');
|
||||||
@ -636,12 +628,12 @@
|
|||||||
$sql_query=str_replace('${_order}',findNodeOnAttribute(findFirstNode($currNode,'objects-list'), "column","n",$objListR->getAttribute("order"))->getAttribute("order"),$sql_query);
|
$sql_query=str_replace('${_order}',findNodeOnAttribute(findFirstNode($currNode,'objects-list'), "column","n",$objListR->getAttribute("order"))->getAttribute("order"),$sql_query);
|
||||||
}else $sql_query=str_replace('${_order}','1',$sql_query);
|
}else $sql_query=str_replace('${_order}','1',$sql_query);
|
||||||
|
|
||||||
//sendError($sql_query);
|
//sendError(1,$sql_query);
|
||||||
//Выполняем запрос
|
//Выполняем запрос
|
||||||
try
|
try
|
||||||
{ $res = $db->query($sql_query);
|
{ $res = $db->query($sql_query);
|
||||||
} catch (Exception $e)
|
} catch (Exception $e)
|
||||||
{ sendError($e->getMessage().' '.$sql_query);
|
{ sendError(1,$e->getMessage().' '.$sql_query);
|
||||||
}
|
}
|
||||||
//Формируем ответ
|
//Формируем ответ
|
||||||
$pagecount=ceil($res->rowCount()/$rowspagecount); //Кол-во страниц
|
$pagecount=ceil($res->rowCount()/$rowspagecount); //Кол-во страниц
|
||||||
@ -677,6 +669,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
//перебираем RS и строим XML только из тех столбцов которые записанны в секци objects-list поля column в не зависимости от их видимости
|
//перебираем RS и строим XML только из тех столбцов которые записанны в секци objects-list поля column в не зависимости от их видимости
|
||||||
|
/*
|
||||||
$xmlstring='';
|
$xmlstring='';
|
||||||
$xmlstring.='<?xml version="1.0" encoding="utf-8"?>'."\n";
|
$xmlstring.='<?xml version="1.0" encoding="utf-8"?>'."\n";
|
||||||
$xmlstring.='<metadata fn="'.$fn.'"><type n="'.$typename.'" pc="'.$pagecount.'" pp="'.$pagepos.'">'."\n";
|
$xmlstring.='<metadata fn="'.$fn.'"><type n="'.$typename.'" pc="'.$pagecount.'" pp="'.$pagepos.'">'."\n";
|
||||||
@ -718,10 +711,11 @@
|
|||||||
{
|
{
|
||||||
if(array_key_exists($nextnode->getAttribute("n"),$row))
|
if(array_key_exists($nextnode->getAttribute("n"),$row))
|
||||||
{
|
{
|
||||||
$xmlstring.='<![CDATA['.$row[$nextnode->getAttribute("n")].']]>';
|
$field = $nextnode->getAttribute("n");
|
||||||
|
$xmlstring.='<![CDATA['.$row[$field].']]>';
|
||||||
}else
|
}else
|
||||||
{
|
{
|
||||||
sendError("Column \"".$nextnode->getAttribute("n")."\" not exists in \"$typename\" for select!");
|
sendError(1,"Column \"".$nextnode->getAttribute("n")."\" not exists in \"$typename\" for select!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$nextnode = $nextnode->nextSibling;
|
$nextnode = $nextnode->nextSibling;
|
||||||
@ -731,20 +725,86 @@
|
|||||||
$res->closeCursor();
|
$res->closeCursor();
|
||||||
$xmlstring.='</type></metadata>'."\n";
|
$xmlstring.='</type></metadata>'."\n";
|
||||||
|
|
||||||
//sendError('pos1='.$xmlstring);
|
|
||||||
|
|
||||||
header('Content-type: text/xml');
|
header('Content-type: text/xml');
|
||||||
echo $xmlstring;
|
echo $xmlstring;
|
||||||
|
*/
|
||||||
|
|
||||||
|
$obj = new StdClass();
|
||||||
|
$obj->errorCode=0;
|
||||||
|
$obj->errorMessage = '';
|
||||||
|
$obj->fn=$fn;
|
||||||
|
$obj->n=$typename;
|
||||||
|
$obj->pc=$pagecount;
|
||||||
|
$obj->pp=$pagepos;
|
||||||
|
//Перечисляю название выбираемых столбцов через запятую (почему в JAVA версии этого куска кода нет?)
|
||||||
|
$obj->objects_list=[];
|
||||||
|
$nextnode=findNode($currNode,'objects-list')->firstChild;
|
||||||
|
while ($nextnode)
|
||||||
|
{
|
||||||
|
if ($nextnode->nodeName=='column')
|
||||||
|
{
|
||||||
|
array_push($obj->objects_list,$nextnode->getAttribute("n"));
|
||||||
|
}
|
||||||
|
$nextnode = $nextnode->nextSibling;
|
||||||
|
}
|
||||||
|
$obj->data=[];
|
||||||
|
|
||||||
|
$node=findFirstNode($reqNode,'objects-list');
|
||||||
|
$pos=-1;
|
||||||
|
while ($row = $res->fetch(PDO::FETCH_ASSOC))// $row - ассоциативный массив значений, ключи - названия столбцов
|
||||||
|
{
|
||||||
|
$pos++;
|
||||||
|
if (($pagepos!=-1)&&(($pos<($pagepos*$rowspagecount))||($pos>=$pagepos*$rowspagecount+$rowspagecount))) { continue; }
|
||||||
|
|
||||||
|
array_push($obj->data,new StdClass());
|
||||||
|
|
||||||
|
//разрешать или запрещять редактировать запись надо проверять в хранимке а также запрещять либо разрешать редактировать колонку
|
||||||
|
//для каждой записи формируеться строка настроек со значениями что нужно запретить в таком виде "iuds"
|
||||||
|
$access=''; //u = enable update field, d = enable delete field
|
||||||
|
if(!array_key_exists("_u",$row)) { $access.="u"; } else { $access.=$row["_u"]; }
|
||||||
|
if(!array_key_exists("_d",$row)) { $access.="d"; } else { $access.=$row["_d"]; }
|
||||||
|
|
||||||
|
if(array_key_exists($currNode->getAttribute("ObjectID"),$row)) {
|
||||||
|
end($obj->data)->id=$row[$currNode->getAttribute("ObjectID")];
|
||||||
|
end($obj->data)->a=$access;
|
||||||
|
}else {
|
||||||
|
end($obj->data)->id="";
|
||||||
|
end($obj->data)->a=$access;
|
||||||
|
}
|
||||||
|
|
||||||
|
end($obj->data)->row=[];
|
||||||
|
|
||||||
|
$nextnode=findNode($currNode,'objects-list')->firstChild;
|
||||||
|
while ($nextnode)
|
||||||
|
{
|
||||||
|
if ($nextnode->nodeName=='column')
|
||||||
|
{
|
||||||
|
if(array_key_exists($nextnode->getAttribute("n"),$row))
|
||||||
|
{
|
||||||
|
$field = $nextnode->getAttribute("n");
|
||||||
|
array_push(end($obj->data)->row,$row[$field]);
|
||||||
}else
|
}else
|
||||||
{
|
{
|
||||||
sendError("Не найден запрошеный узел!");
|
sendError(1,"Column \"".$nextnode->getAttribute("n")."\" not exists in \"$typename\" for select!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$nextnode = $nextnode->nextSibling;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$res->closeCursor();
|
||||||
|
|
||||||
|
header('Content-Type: application/json; charset=utf-8');
|
||||||
|
header("Cache-Control: no-cache, must-revalidate");
|
||||||
|
echo json_encode($obj);
|
||||||
|
exit;
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
sendError(1,"Не найден запрошеный узел!");
|
||||||
}
|
}
|
||||||
}else
|
}else
|
||||||
if ($fn==5) //вернуть клиенту данные по id для редактирования одной записи
|
if ($fn==5) //вернуть клиенту данные по id для редактирования одной записи
|
||||||
{
|
{
|
||||||
session_write_close(); //Разблокируем сессионный файл так как запросы могут быть достаточно долгими
|
session_write_close(); //Разблокируем сессионный файл так как запросы могут быть достаточно долгими
|
||||||
//if (!isset($_SESSION['USER_ID']) || $_SESSION['USER_ID']=='') sendError('Вы не авторизованы! '.$_SERVER['PHP_SELF']);
|
|
||||||
|
|
||||||
$sql_query='';
|
$sql_query='';
|
||||||
$node=findFirstNode($reqNode,'type');
|
$node=findFirstNode($reqNode,'type');
|
||||||
@ -766,16 +826,16 @@
|
|||||||
$sql_query=str_replace('${_user_id}',getSQLValue(gettype($_SESSION['USER_ID']),$_SESSION['USER_ID']),$sql_query);
|
$sql_query=str_replace('${_user_id}',getSQLValue(gettype($_SESSION['USER_ID']),$_SESSION['USER_ID']),$sql_query);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//sendError($sql_query);
|
//sendError(1,$sql_query);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
$res = $db->query($sql_query);
|
$res = $db->query($sql_query);
|
||||||
} catch (Exception $e)
|
} catch (Exception $e)
|
||||||
{ sendError($e->getMessage());
|
{ sendError(1,$e->getMessage());
|
||||||
}
|
}
|
||||||
if(strpos($db_connection, 'sqlite')===false) //Для SQLite не работает rowCount()
|
if(strpos($db_connection, 'sqlite')===false) //Для SQLite не работает rowCount()
|
||||||
{
|
{
|
||||||
if($res->rowCount()!=1) sendError("Количество записей не равно одному!");
|
if($res->rowCount()!=1) sendError(1,"Количество записей не равно одному!");
|
||||||
}
|
}
|
||||||
|
|
||||||
$xmls='';
|
$xmls='';
|
||||||
@ -786,7 +846,7 @@
|
|||||||
}
|
}
|
||||||
if($xmls=='')
|
if($xmls=='')
|
||||||
{
|
{
|
||||||
sendError("Metadata node \"".$name."\" is empty!");
|
sendError(1,"Metadata node \"".$name."\" is empty!");
|
||||||
}
|
}
|
||||||
|
|
||||||
//загружаем мета данные и смотрим какие поля должны передать клиенту
|
//загружаем мета данные и смотрим какие поля должны передать клиенту
|
||||||
@ -795,7 +855,7 @@
|
|||||||
{
|
{
|
||||||
$mdoc->loadXML($xmls);
|
$mdoc->loadXML($xmls);
|
||||||
} catch (Exception $e)
|
} catch (Exception $e)
|
||||||
{ sendError($e->getMessage());
|
{ sendError(1,$e->getMessage());
|
||||||
}
|
}
|
||||||
//находим нужный узел
|
//находим нужный узел
|
||||||
$node=findNodeOnAttribute($mdoc->documentElement, "type","n",$typename);
|
$node=findNodeOnAttribute($mdoc->documentElement, "type","n",$typename);
|
||||||
@ -830,7 +890,7 @@
|
|||||||
if(array_key_exists($nextnode->getAttribute("cd"), $row)) {
|
if(array_key_exists($nextnode->getAttribute("cd"), $row)) {
|
||||||
$xmlstring .= '<prop n="' . $nextnode->getAttribute("n") . '"><![CDATA[' . $row[$nextnode->getAttribute("cd")] . ']]></prop>' . "\n";
|
$xmlstring .= '<prop n="' . $nextnode->getAttribute("n") . '"><![CDATA[' . $row[$nextnode->getAttribute("cd")] . ']]></prop>' . "\n";
|
||||||
}else{
|
}else{
|
||||||
sendError('Поле "'.$nextnode->getAttribute("cd").'" не найдено в результирующем наборе!');
|
sendError(1,'Поле "'.$nextnode->getAttribute("cd").'" не найдено в результирующем наборе!');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -838,10 +898,10 @@
|
|||||||
}
|
}
|
||||||
}else
|
}else
|
||||||
{
|
{
|
||||||
sendError('Поле "'.$nextnode->getAttribute("n").'" не найдено в результирующем наборе!');
|
sendError(1,'Поле "'.$nextnode->getAttribute("n").'" не найдено в результирующем наборе!');
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (Exception $e) { sendError($e->getMessage()); }
|
} catch (Exception $e) { sendError(1,$e->getMessage()); }
|
||||||
}
|
}
|
||||||
$nextnode = $nextnode->nextSibling;
|
$nextnode = $nextnode->nextSibling;
|
||||||
}
|
}
|
||||||
@ -856,7 +916,6 @@
|
|||||||
if ($fn==6) //вернуть клиенту данные колонки таблицы для заполнения выпадающего списка SELECT либо выборка названия поля типа object
|
if ($fn==6) //вернуть клиенту данные колонки таблицы для заполнения выпадающего списка SELECT либо выборка названия поля типа object
|
||||||
{
|
{
|
||||||
session_write_close(); //Разблокируем сессионный файл так как запросы могут быть достаточно долгими
|
session_write_close(); //Разблокируем сессионный файл так как запросы могут быть достаточно долгими
|
||||||
//if (!isset($_SESSION['USER_ID']) || $_SESSION['USER_ID']=='') sendError('Вы не авторизованы! '.$_SERVER['PHP_SELF']);
|
|
||||||
|
|
||||||
$tNodeR=findFirstNode($reqNode,'type');
|
$tNodeR=findFirstNode($reqNode,'type');
|
||||||
$typename=$tNodeR->getAttribute("n"); //Название принятого узла
|
$typename=$tNodeR->getAttribute("n"); //Название принятого узла
|
||||||
@ -868,7 +927,7 @@
|
|||||||
|
|
||||||
|
|
||||||
$currNode=getMetadataNode($typename);
|
$currNode=getMetadataNode($typename);
|
||||||
if($currNode==null) sendError("Not find \"".$typename."\"!");
|
if($currNode==null) sendError(1,"Not find \"".$typename."\"!");
|
||||||
$objXMLDocument=$currNode->ownerDocument;
|
$objXMLDocument=$currNode->ownerDocument;
|
||||||
|
|
||||||
$objListR = findFirstNode($tNodeR,'objects-list'); //Из запроса
|
$objListR = findFirstNode($tNodeR,'objects-list'); //Из запроса
|
||||||
@ -899,7 +958,7 @@
|
|||||||
try
|
try
|
||||||
{ $res = $db->query($sql_query);
|
{ $res = $db->query($sql_query);
|
||||||
} catch (Exception $e)
|
} catch (Exception $e)
|
||||||
{ sendError($e->getMessage());
|
{ sendError(1,$e->getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
//выбираем данные из базы и отправляем клиенту
|
//выбираем данные из базы и отправляем клиенту
|
||||||
@ -918,7 +977,7 @@
|
|||||||
$val.=$row[$columns[$i]];
|
$val.=$row[$columns[$i]];
|
||||||
}else
|
}else
|
||||||
{
|
{
|
||||||
sendError("Column \"$columns[$i]\" not exists in \"$typename\" for select to drop down list!");
|
sendError(1,"Column \"$columns[$i]\" not exists in \"$typename\" for select to drop down list!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$xmlstring.='<![CDATA['.$val.']]>';
|
$xmlstring.='<![CDATA['.$val.']]>';
|
||||||
@ -934,6 +993,8 @@
|
|||||||
$cmd=getCdataValue(findFirstNode($reqNode,"cmd"));
|
$cmd=getCdataValue(findFirstNode($reqNode,"cmd"));
|
||||||
$login=getCdataValue(findFirstNode($reqNode,"login"));
|
$login=getCdataValue(findFirstNode($reqNode,"login"));
|
||||||
$password=getCdataValue(findFirstNode($reqNode,"password"));
|
$password=getCdataValue(findFirstNode($reqNode,"password"));
|
||||||
|
$key=getCdataValue(findFirstNode($reqNode,"key"));
|
||||||
|
$time=getCdataValue(findFirstNode($reqNode,"time"));
|
||||||
$guid=getCdataValue(findFirstNode($reqNode,"guid")); //Зачем коментил?
|
$guid=getCdataValue(findFirstNode($reqNode,"guid")); //Зачем коментил?
|
||||||
|
|
||||||
if($cmd==0) //Restore password by email
|
if($cmd==0) //Restore password by email
|
||||||
@ -973,8 +1034,8 @@
|
|||||||
$html .= '<b>' . $password . '</b>';
|
$html .= '<b>' . $password . '</b>';
|
||||||
$html .= '</body></html>';
|
$html .= '</body></html>';
|
||||||
//mail($login,'rigor.kz','Not implement',"Content-type: text/html; charset=utf-8\r\nFrom: rigor Site <info@rigor.kz>");
|
//mail($login,'rigor.kz','Not implement',"Content-type: text/html; charset=utf-8\r\nFrom: rigor Site <info@rigor.kz>");
|
||||||
if (!mail($login, 'Password for transit.istt.kz', $html, "Content-type: text/html; charset=utf-8\r\nFrom: Transit Site <no-reply@istt.kz>")) {
|
if (!mail($login, 'Password for monitoring', $html, "Content-type: text/html; charset=utf-8\r\nFrom: Transit Site <no-reply@istt.kz>")) {
|
||||||
sendError("Failed to send mail to: " . $row["email"]);
|
sendError(1,"Failed to send mail to: " . $row["email"]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1000,7 +1061,7 @@
|
|||||||
try
|
try
|
||||||
{ $db->exec($sql);
|
{ $db->exec($sql);
|
||||||
} catch (Exception $e)
|
} catch (Exception $e)
|
||||||
{ sendError($e->getMessage());
|
{ sendError(1,$e->getMessage());
|
||||||
}
|
}
|
||||||
unset($_SESSION['USER_ID']);
|
unset($_SESSION['USER_ID']);
|
||||||
|
|
||||||
@ -1030,6 +1091,8 @@
|
|||||||
$xs.=' <surname><![CDATA['.$row['surname'].']]></surname>'."\n";
|
$xs.=' <surname><![CDATA['.$row['surname'].']]></surname>'."\n";
|
||||||
$xs.=' <patronymic><![CDATA['.$row['patronymic'].']]></patronymic>'."\n";
|
$xs.=' <patronymic><![CDATA['.$row['patronymic'].']]></patronymic>'."\n";
|
||||||
$xs.=' <company_id><![CDATA['.$row['company_id'].']]></company_id>'."\n";
|
$xs.=' <company_id><![CDATA['.$row['company_id'].']]></company_id>'."\n";
|
||||||
|
$xs.=' <expiration><![CDATA['.$row['expiration'].']]></expiration>'."\n";
|
||||||
|
$xs.=' <overdue><![CDATA['.$row['overdue'].']]></overdue>'."\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$xs.='</metadata>';
|
$xs.='</metadata>';
|
||||||
@ -1046,16 +1109,34 @@
|
|||||||
$name='';
|
$name='';
|
||||||
$surname='';
|
$surname='';
|
||||||
$patronymic='';
|
$patronymic='';
|
||||||
|
$expiration=false;
|
||||||
|
$overdue=false;
|
||||||
$sql="select * from ".$Schema."p__Login(".getSQLValue($idType,$_SESSION['USER_ID']).",'$login','$password',null,null,null);";
|
$sql="select * from ".$Schema."p__Login(".getSQLValue($idType,$_SESSION['USER_ID']).",'$login','$password',null,null,null);";
|
||||||
|
/*
|
||||||
|
$ga=new GoogleAuthenticator;
|
||||||
|
$code=$ga->getCode($user->ga_secret);
|
||||||
|
if ($code!=$_POST['code']) return new AuthError('invalid code');
|
||||||
|
*/
|
||||||
$res = $db->query($sql);
|
$res = $db->query($sql);
|
||||||
if($res->rowCount()>0)
|
if($res->rowCount()>0)
|
||||||
{ $result = $res->fetch(PDO::FETCH_ASSOC);
|
{
|
||||||
|
$result = $res->fetch(PDO::FETCH_ASSOC);
|
||||||
$ans='1';
|
$ans='1';
|
||||||
$_SESSION['USER_ID']=$result['id'];
|
$_SESSION['USER_ID']=$result['id'];
|
||||||
$name=$result['name'];
|
$name=$result['name'];
|
||||||
$surname=$result['surname'];
|
$surname=$result['surname'];
|
||||||
$patronymic=$result['patronymic'];
|
$patronymic=$result['patronymic'];
|
||||||
|
$expiration=$result['expiration']; //Дата смены пароля
|
||||||
|
$overdue=$result['overdue']; //Просрочен ли пароль
|
||||||
|
//Проверяю на соответствие токену TOPT если секретный ключ задан
|
||||||
|
if($result['secret']){
|
||||||
|
$secret = Base32::decode($result['secret']);
|
||||||
|
$genkey = (new Totp('sha1',0,60))->GenerateToken($secret,$time);
|
||||||
|
if($key != $genkey) {
|
||||||
|
$ans = '0';
|
||||||
|
$_SESSION['USER_ID'] = '';
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
$xs='<?xml version="1.0" encoding="utf-8"?>'."\n";
|
$xs='<?xml version="1.0" encoding="utf-8"?>'."\n";
|
||||||
$xs.='<metadata fn="7">'."\n";
|
$xs.='<metadata fn="7">'."\n";
|
||||||
@ -1065,13 +1146,15 @@
|
|||||||
$xs.=' <name><![CDATA['.$name.' '.$surname.' '.$patronymic.']]></name>'."\n";
|
$xs.=' <name><![CDATA['.$name.' '.$surname.' '.$patronymic.']]></name>'."\n";
|
||||||
$xs.=' <sesid><![CDATA['.session_id().']]></sesid>'."\n";
|
$xs.=' <sesid><![CDATA['.session_id().']]></sesid>'."\n";
|
||||||
$xs.=' <sesname><![CDATA['.session_name().']]></sesname>'."\n";
|
$xs.=' <sesname><![CDATA['.session_name().']]></sesname>'."\n";
|
||||||
|
$xs.=' <expiration><![CDATA['.$expiration.']]></expiration>'."\n";
|
||||||
|
$xs.=' <overdue><![CDATA['.$overdue.']]></overdue>'."\n";
|
||||||
$xs.='</metadata>';
|
$xs.='</metadata>';
|
||||||
header('Content-type: text/xml');
|
header('Content-type: text/xml');
|
||||||
header("Cache-Control: no-cache, must-revalidate");
|
header("Cache-Control: no-cache, must-revalidate");
|
||||||
echo $xs;
|
echo $xs;
|
||||||
exit();
|
exit();
|
||||||
}else{
|
}else{
|
||||||
sendError('Command "'.$cmd.'" not find!');
|
sendError(1,'Command "'.$cmd.'" not find!');
|
||||||
}
|
}
|
||||||
|
|
||||||
}else
|
}else
|
||||||
@ -1099,14 +1182,15 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
session_write_close(); //Разблокируем сессионный файл так как запросы могут быть достаточно долгими
|
session_write_close(); //Разблокируем сессионный файл так как запросы могут быть достаточно долгими
|
||||||
//if (!isset($_SESSION['USER_ID']) || $_SESSION['USER_ID']=='') sendError(trt('You are not logged in!'));
|
|
||||||
|
|
||||||
//Выбираем информацию о текущем пользователе
|
//Выбираем информацию о текущем пользователе
|
||||||
$name='';
|
$name='';
|
||||||
$sql="select Coalesce(surname,'') || ' ' || Coalesce(name,'') || ' ' || Coalesce(patronymic,'') as name from ".$Schema."_users where id=".$_SESSION['USER_ID'].";";
|
$sql="select Coalesce(surname,'') || ' ' || Coalesce(name,'') || ' ' || Coalesce(patronymic,'') as name from ".$Schema."_users where id=:user_id;";
|
||||||
$res = $db->query($sql);
|
$stmt = $db->prepare($sql);
|
||||||
if($res->rowCount()>0)
|
$stmt->bindValue(':user_id', $_SESSION['USER_ID'], PDO::PARAM_INT);
|
||||||
{ $result = $res->fetch(PDO::FETCH_ASSOC);
|
$res=$stmt->execute();
|
||||||
|
if($res && $stmt->rowCount()>0)
|
||||||
|
{ $result = $stmt->fetch(PDO::FETCH_NUM);
|
||||||
$name='<i>'.$result['name'].'</i><br>';
|
$name='<i>'.$result['name'].'</i><br>';
|
||||||
}
|
}
|
||||||
$res=null; //Чтоб сработал сборщик мусора, а то вываливается ошибка: "Cannot execute queries while other unbuffered queries are active".
|
$res=null; //Чтоб сработал сборщик мусора, а то вываливается ошибка: "Cannot execute queries while other unbuffered queries are active".
|
||||||
@ -1165,9 +1249,9 @@
|
|||||||
try
|
try
|
||||||
{ $res = $db->query($sql_query);
|
{ $res = $db->query($sql_query);
|
||||||
} catch (Exception $e)
|
} catch (Exception $e)
|
||||||
{ sendError($e->getMessage());
|
{ sendError(1,$e->getMessage());
|
||||||
}
|
}
|
||||||
if($res->rowCount()!=1) sendError(trt('The number of records is not equal to one!').' '.$sql_query);
|
if($res->rowCount()!=1) sendError(1,trt('The number of records is not equal to one!').' '.$sql_query);
|
||||||
|
|
||||||
|
|
||||||
$columns=explode(",",$nextnode->getAttribute('FieldCaption'));
|
$columns=explode(",",$nextnode->getAttribute('FieldCaption'));
|
||||||
@ -1217,7 +1301,7 @@
|
|||||||
try
|
try
|
||||||
{ $res = $db->query($sql_query);
|
{ $res = $db->query($sql_query);
|
||||||
} catch (Exception $e)
|
} catch (Exception $e)
|
||||||
{ sendError($e->getMessage().$sql_query);
|
{ sendError(1,$e->getMessage().$sql_query);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Сохраняем результсет в файл в виде HTML с расширением XLS
|
//Сохраняем результсет в файл в виде HTML с расширением XLS
|
||||||
@ -1305,7 +1389,7 @@
|
|||||||
//deleteTempFiles($dir);
|
//deleteTempFiles($dir);
|
||||||
}else
|
}else
|
||||||
{
|
{
|
||||||
sendError(trt('Not found the requested node:').' "'.$typename.'"!');
|
sendError(1,trt('Not found the requested node:').' "'.$typename.'"!');
|
||||||
}
|
}
|
||||||
|
|
||||||
}else
|
}else
|
||||||
@ -1369,7 +1453,7 @@
|
|||||||
}
|
}
|
||||||
if($xmls=='')
|
if($xmls=='')
|
||||||
{
|
{
|
||||||
sendError("Metadata node \"".$name."\" is empty!");
|
sendError(1,"Metadata node \"".$name."\" is empty!");
|
||||||
}
|
}
|
||||||
|
|
||||||
//Ищем поле в метаданных
|
//Ищем поле в метаданных
|
||||||
@ -1440,7 +1524,7 @@
|
|||||||
}
|
}
|
||||||
}else
|
}else
|
||||||
{
|
{
|
||||||
sendError("Неизвестная функция \"$fn\"!");
|
sendError(1,"Неизвестная функция \"$fn\"!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
//Copyright (C) 2008 Ivanov I.M. ivanov.i@istt.kz
|
//Copyright (C) 2008 Igor
|
||||||
//For find non english chars: [^\x00-\x7F]+
|
//For find non english chars: [^\x00-\x7F]+
|
||||||
|
|
||||||
function callWindow(uid,id,i)
|
function callWindow(uid,id,i)
|
||||||
@ -49,18 +49,14 @@ class SRec
|
|||||||
|
|
||||||
applyReq(req,fn,node,xmldoc)
|
applyReq(req,fn,node,xmldoc)
|
||||||
{
|
{
|
||||||
//alert2(trt('Alert'),getXMLNodeSerialisation(node));
|
|
||||||
this.hideProgressBar();
|
this.hideProgressBar();
|
||||||
|
|
||||||
this.xmldoc=node.ownerDocument; //xmldoc;
|
if(node.errorCode>0) {
|
||||||
if (fn==-1) //Information alert
|
let fullText = node.errorMessage;
|
||||||
{
|
|
||||||
let fullText = findFirstNode(node,'#cdata-section').nodeValue;
|
|
||||||
let smallText = '';
|
let smallText = '';
|
||||||
let pos1=fullText.indexOf('[[');
|
let pos1=fullText.indexOf('[[');
|
||||||
let pos2=fullText.indexOf(']]');
|
let pos2=fullText.indexOf(']]');
|
||||||
if(pos1>=0 && pos2>=0 && pos1<pos2) smallText=fullText.substring(pos1+2, pos2);
|
if(pos1>=0 && pos2>=0 && pos1<pos2) smallText=fullText.substring(pos1+2, pos2);
|
||||||
|
|
||||||
if(fullText.indexOf("id456[[")>=0){ //Если есть идентификатор того что это перезапись
|
if(fullText.indexOf("id456[[")>=0){ //Если есть идентификатор того что это перезапись
|
||||||
let okFunc=()=>{
|
let okFunc=()=>{
|
||||||
this.setValue('seq',0);
|
this.setValue('seq',0);
|
||||||
@ -76,7 +72,11 @@ class SRec
|
|||||||
else
|
else
|
||||||
alert2(trt('Alert'), fullText);
|
alert2(trt('Alert'), fullText);
|
||||||
}
|
}
|
||||||
}else
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.xmldoc=node.ownerDocument; //xmldoc;
|
||||||
|
|
||||||
if (fn==0)
|
if (fn==0)
|
||||||
{
|
{
|
||||||
//alert2(trt('Alert'),getXMLNodeSerialisation(node));
|
//alert2(trt('Alert'),getXMLNodeSerialisation(node));
|
||||||
@ -413,27 +413,28 @@ class SRec
|
|||||||
}
|
}
|
||||||
|
|
||||||
//we pass the id to the object filter column_n - the name of the filter
|
//we pass the id to the object filter column_n - the name of the filter
|
||||||
setFilterObject(TypeName, column_n, id, filter)
|
setFilterObject(TypeName, column_n, id, nodeFilter)
|
||||||
{
|
{
|
||||||
let node=findFirstNodeOnAttribute(this.nodeMetadata,'column','n',column_n);
|
let node=findFirstNodeOnAttribute(this.nodeMetadata,'column','n',column_n);
|
||||||
if(node!==null)
|
if(node!==null)
|
||||||
{
|
{
|
||||||
let name=node.getAttribute("FieldCaption");
|
let name=node.getAttribute("FieldCaption");
|
||||||
|
|
||||||
getCdata(node).nodeValue=id;
|
getCdata(node).nodeValue=id;
|
||||||
//we request data from the server to fill in the comments on the record id
|
//we request data from the server to fill in the comments on the record id
|
||||||
let prop=document.getElementById('filter_'+this.uid+'_'+column_n);
|
let prop=document.getElementById('filter_'+this.uid+'_'+column_n);
|
||||||
if(prop!==null) prop.value = id;
|
if(prop!==null) prop.value = id;
|
||||||
//Request a comment on the record id from the server
|
//Request a comment on the record id from the server
|
||||||
let xml = '';
|
let xml = '';
|
||||||
if(filter!=''){
|
if(nodeFilter!=null){
|
||||||
//Настройка для последующего вызова
|
//Настройка для последующего вызова
|
||||||
xml='<column n="'+column_n+'"><type n="' + TypeName + '"><objects-list>'+filter+'</objects-list></type></column>';
|
xml='<column n="'+column_n+'"><type n="' + TypeName + '"><objects-list>'+getXMLNodeSerialisation(nodeFilter)+'</objects-list></type></column>';
|
||||||
applyNodeToNode(CreateXMLDOC(xml).documentElement, node, "n");
|
applyNodeToNode(CreateXMLDOC(xml).documentElement, node, "n");
|
||||||
|
|
||||||
//Настройка для фильтрации списка
|
//Настройка для фильтрации списка
|
||||||
|
if(node.getAttribute("selector")=="combo") {
|
||||||
xml = '<?xml version="1.0" encoding="utf-8"?>' +
|
xml = '<?xml version="1.0" encoding="utf-8"?>' +
|
||||||
'<metadata fn="6"><type n="' + TypeName + '" c="' + name + '" pn="' + column_n + '" fn="' + name + '">' +
|
'<metadata fn="6"><type n="' + TypeName + '" c="' + name + '" pn="' + column_n + '" fn="' + name + '">' +
|
||||||
'<objects-list>' + filter + '</objects-list>' +
|
'<objects-list>' + getXMLNodeSerialisation(nodeFilter) + '</objects-list>' +
|
||||||
'</type></metadata>';
|
'</type></metadata>';
|
||||||
}else{
|
}else{
|
||||||
xml = '<?xml version="1.0" encoding="utf-8"?>' +
|
xml = '<?xml version="1.0" encoding="utf-8"?>' +
|
||||||
@ -441,6 +442,12 @@ class SRec
|
|||||||
'<objects-list><filter><column n="id"><![CDATA[' + id + ']]></column></filter></objects-list>' +
|
'<objects-list><filter><column n="id"><![CDATA[' + id + ']]></column></filter></objects-list>' +
|
||||||
'</type></metadata>';
|
'</type></metadata>';
|
||||||
}
|
}
|
||||||
|
}else{
|
||||||
|
xml = '<?xml version="1.0" encoding="utf-8"?>' +
|
||||||
|
'<metadata fn="6"><type n="' + TypeName + '" c="' + name + '" pn="' + column_n + '" fn="' + name + '">' +
|
||||||
|
'<objects-list><filter><column n="id"><![CDATA[' + id + ']]></column></filter></objects-list>' +
|
||||||
|
'</type></metadata>';
|
||||||
|
}
|
||||||
|
|
||||||
if(this.request.callServer(ScriptName,xml,true))
|
if(this.request.callServer(ScriptName,xml,true))
|
||||||
{
|
{
|
||||||
@ -541,7 +548,7 @@ class SRec
|
|||||||
let td,tr,td1,td2;
|
let td,tr,td1,td2;
|
||||||
let nodeFilter=null;
|
let nodeFilter=null;
|
||||||
let tablefilter=document.getElementById('idfilter'+this.uid);
|
let tablefilter=document.getElementById('idfilter'+this.uid);
|
||||||
if (tablefilter.tBodies==null) alert2(trt('Alert'),'tablefilter=null');
|
if (tablefilter==null || tablefilter.tBodies==null) alert2(trt('Alert'),'tablefilter=null');
|
||||||
let nodeType=findFirstNode(node, "type");
|
let nodeType=findFirstNode(node, "type");
|
||||||
this.f_pI=nodeType.getAttribute("ins");//access rights
|
this.f_pI=nodeType.getAttribute("ins");//access rights
|
||||||
this.f_pU=nodeType.getAttribute("upd");
|
this.f_pU=nodeType.getAttribute("upd");
|
||||||
@ -662,7 +669,6 @@ class SRec
|
|||||||
//singleClick: true,
|
//singleClick: true,
|
||||||
onSelect: function(){ this.hide(); }
|
onSelect: function(){ this.hide(); }
|
||||||
});
|
});
|
||||||
|
|
||||||
}else
|
}else
|
||||||
if (columnNode.getAttribute("vt")==="date")
|
if (columnNode.getAttribute("vt")==="date")
|
||||||
{
|
{
|
||||||
@ -759,7 +765,7 @@ class SRec
|
|||||||
input.classList.add('DBMS');
|
input.classList.add('DBMS');
|
||||||
input.style.cssText="width: 100%;";
|
input.style.cssText="width: 100%;";
|
||||||
input.setAttribute("type","text");
|
input.setAttribute("type","text");
|
||||||
input.onkeydown=function(event){if(event.which==13) event.which=9;};
|
input.onkeydown=(e)=>{ if(e==null) e=window.event; if(e.keyCode==13) { this.appendFilter(); this.sendFilter(-1,0); }};
|
||||||
input.setAttribute("name",columnNode.getAttribute("n"));
|
input.setAttribute("name",columnNode.getAttribute("n"));
|
||||||
if(columnNode.getAttribute("size")!=null)
|
if(columnNode.getAttribute("size")!=null)
|
||||||
input.setAttribute("maxlength",columnNode.getAttribute("size"),0);
|
input.setAttribute("maxlength",columnNode.getAttribute("size"),0);
|
||||||
@ -805,7 +811,7 @@ class SRec
|
|||||||
input.classList.add('DBMS');
|
input.classList.add('DBMS');
|
||||||
input.style.cssText="width: 100%;";
|
input.style.cssText="width: 100%;";
|
||||||
input.setAttribute("type","text");
|
input.setAttribute("type","text");
|
||||||
input.onkeydown=function(){ if(event.keyCode==13) event.keyCode=9; };
|
input.onkeydown=(e)=>{ if(e==null) e=window.event; if(e.keyCode==13) { this.appendFilter(); this.sendFilter(-1,0); }};
|
||||||
input.setAttribute("name",columnNode.getAttribute("n"));
|
input.setAttribute("name",columnNode.getAttribute("n"));
|
||||||
if(columnNode.getAttribute("size")!=null)
|
if(columnNode.getAttribute("size")!=null)
|
||||||
input.setAttribute("maxlength",columnNode.getAttribute("size"),0);
|
input.setAttribute("maxlength",columnNode.getAttribute("size"),0);
|
||||||
@ -838,7 +844,7 @@ class SRec
|
|||||||
input.setAttribute("type","text");
|
input.setAttribute("type","text");
|
||||||
button.classList.add('DBMS');
|
button.classList.add('DBMS');
|
||||||
input.style.cssText="width: 100%;";
|
input.style.cssText="width: 100%;";
|
||||||
input.onkeydown=function(){ if(event.keyCode==13) event.keyCode=9; };
|
input.onkeydown=(e)=>{ if(e==null) e=window.event; if(e.keyCode==13) { this.appendFilter(); this.sendFilter(-1,0); }};
|
||||||
input.setAttribute("name",columnNode.getAttribute("n"));
|
input.setAttribute("name",columnNode.getAttribute("n"));
|
||||||
if(columnNode.getAttribute("size")!=null)
|
if(columnNode.getAttribute("size")!=null)
|
||||||
input.setAttribute("maxlength",columnNode.getAttribute("size"),0);
|
input.setAttribute("maxlength",columnNode.getAttribute("size"),0);
|
||||||
@ -920,15 +926,15 @@ class SRec
|
|||||||
let input = document.createElement('input');
|
let input = document.createElement('input');
|
||||||
input.classList.add('DBMS');
|
input.classList.add('DBMS');
|
||||||
//After pressing Enter we pass the entered line to the server
|
//After pressing Enter we pass the entered line to the server
|
||||||
input.onkeydown=function(obj,val1,val2,val3,val4){
|
input.onkeydown=function(obj,typeName,name,value,htmlid,filterName){
|
||||||
return function(e){
|
return function(e){
|
||||||
if(e==null) e=window.event;
|
if(e==null) e=window.event;
|
||||||
if(e.keyCode==13){
|
if(e.keyCode==13){
|
||||||
obj.callFilterVal(val1,val2,-1,val3.value,val4);
|
obj.callFilterVal(typeName,name,-1,value.value,htmlid,filterName);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}(this,object,fc,input,columnNode.getAttribute("n"));
|
}(this,object,fc,input,columnNode.getAttribute("n"),columnNode.getAttribute("fn"));
|
||||||
|
|
||||||
input.style.cssText="width: 100%; height:22px; line-height:22px;";
|
input.style.cssText="width: 100%; height:22px; line-height:22px;";
|
||||||
input.setAttribute("type","text");
|
input.setAttribute("type","text");
|
||||||
@ -1084,18 +1090,21 @@ class SRec
|
|||||||
//id - id of record if it is necessary to return only the description, if -1 then it is not considered
|
//id - id of record if it is necessary to return only the description, if -1 then it is not considered
|
||||||
//value - filter value text field
|
//value - filter value text field
|
||||||
//htmlid - field name in filter n
|
//htmlid - field name in filter n
|
||||||
callFilterVal(typeName,name,id,value,htmlid)
|
callFilterVal(typeName,name,id,value,htmlid,filterName)
|
||||||
{
|
{
|
||||||
if(value!="")
|
if(value!="")
|
||||||
{
|
{
|
||||||
if(this.request.callServer(ScriptName,'<?xml version="1.0" encoding="utf-8"?><metadata fn="6"><type n="'+typeName+'" c="'+name+'" pn="'+htmlid+'" id="'+id+'"><objects-list><filter><column n="'+name+'"><![CDATA['+value+']]></column></filter></objects-list></type></metadata>',true))
|
let xml='<?xml version="1.0" encoding="utf-8"?><metadata fn="6"><type n="'+typeName+'" c="'+name+'" pn="'+htmlid+'" id="'+id+'"><objects-list><filter>';
|
||||||
|
xml+='<column n="'+filterName+'"><![CDATA['+value+']]></column>';
|
||||||
|
xml+='</filter></objects-list></type></metadata>';
|
||||||
|
if(this.request.callServer(ScriptName,xml,true))
|
||||||
{
|
{
|
||||||
this.showProgressBar();
|
this.showProgressBar();
|
||||||
}
|
}
|
||||||
}else
|
}else
|
||||||
{
|
{
|
||||||
document.getElementById("filter_"+htmlid).value=-1;
|
document.getElementById("filter_"+this.uid+"_"+htmlid).value='';
|
||||||
appendFilter();
|
this.appendFilter();
|
||||||
this.sendFilter(-1,0);
|
this.sendFilter(-1,0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1156,15 +1165,15 @@ class SRec
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Function to insert data into a table.
|
//Function to insert data into a table.
|
||||||
//node - A node with data.
|
//node - A JSON object with data.
|
||||||
//clear - Whether to clear all entries.
|
//clear - Whether to clear all entries.
|
||||||
insertRows(node,clear)
|
insertRows(node,clear)
|
||||||
{
|
{
|
||||||
let theTable = document.getElementById('thetable'+this.uid); //Data table
|
let theTable = document.getElementById('thetable'+this.uid); //Data table
|
||||||
|
|
||||||
let nodeType=findFirstNode(node, "type");
|
//let nodeType=findFirstNode(node, "type");
|
||||||
let pagecount=nodeType.getAttribute("pc"); //total pages
|
let pagecount=node.pc; //total pages
|
||||||
if((nodeType.getAttribute("pp")!=null)&&(nodeType.getAttribute("pp")!=-1)) this.pagepos=nodeType.getAttribute("pp");
|
this.pagepos=node.pp;
|
||||||
|
|
||||||
if(clear || this.f_nodeData==null)
|
if(clear || this.f_nodeData==null)
|
||||||
{ this.f_nodeData=node;
|
{ this.f_nodeData=node;
|
||||||
@ -1197,6 +1206,10 @@ class SRec
|
|||||||
let newCell = newRow.insertCell(-1);
|
let newCell = newRow.insertCell(-1);
|
||||||
newCell.style.backgroundColor = bgColor;
|
newCell.style.backgroundColor = bgColor;
|
||||||
newCell.style.cursor="pointer";
|
newCell.style.cursor="pointer";
|
||||||
|
if (this.pagepos==i) {
|
||||||
|
newCell.style.fontWeight = "bold";
|
||||||
|
newCell.style.fontSize = "large";
|
||||||
|
}
|
||||||
newCell.appendChild(document.createTextNode(i+1));
|
newCell.appendChild(document.createTextNode(i+1));
|
||||||
//Upon clicking, a filter with old values is used only with a different page number.
|
//Upon clicking, a filter with old values is used only with a different page number.
|
||||||
newCell.onclick=function(obj,page){
|
newCell.onclick=function(obj,page){
|
||||||
@ -1218,38 +1231,27 @@ class SRec
|
|||||||
}
|
}
|
||||||
}else
|
}else
|
||||||
{
|
{
|
||||||
let tmpNR=findFirstNode(this.f_nodeData, "type");
|
for(let i=0;i<node.data.length;i++){
|
||||||
let nodeRecord = nodeType.firstChild;
|
Object.assign(this.f_nodeData.data, node.data[i])
|
||||||
while (nodeRecord != null)
|
|
||||||
{
|
|
||||||
if(nodeRecord.nodeName=="record")
|
|
||||||
{
|
|
||||||
tmpNR.appendChild(nodeRecord.cloneNode(true) );
|
|
||||||
}
|
|
||||||
nodeRecord = nodeRecord.nextSibling;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Add new entries
|
//Add new entries
|
||||||
let nColor=findNumNodeOnAttribute(findNodeOnPath(this.nodeMetadata,"type/objects-list"),"column","n","color");
|
let nColor=findNumNodeOnAttribute(findNodeOnPath(this.nodeMetadata,"type/objects-list"),"column","n","color");
|
||||||
let TypeName = nodeType.getAttribute("n");
|
let TypeName = node.n;
|
||||||
let i=0; //The position should be received from the server.
|
let i=0; //The position should be received from the server.
|
||||||
|
|
||||||
let nodeRecord = nodeType.firstChild;
|
for(let i=0;i<node.data.length;i++){
|
||||||
while (nodeRecord != null)
|
|
||||||
{
|
|
||||||
if(nodeRecord.nodeName=="record")
|
|
||||||
{
|
|
||||||
let bgColor='';
|
let bgColor='';
|
||||||
let i=theTable.rows.length; //number of rows in the table
|
|
||||||
if (i%2==0) bgColor='var(--row-color-1)'; else bgColor='var(--row-color-2)';
|
if (i%2==0) bgColor='var(--row-color-1)'; else bgColor='var(--row-color-2)';
|
||||||
|
|
||||||
if(nColor>=0) //Color from Result
|
//if(nColor>=0) //Color from Result
|
||||||
{
|
//{
|
||||||
let bgColorT=findNodeOnNum(nodeRecord,"#cdata-section",nColor).nodeValue;
|
// let bgColorT=findNodeOnNum(nodeRecord,"#cdata-section",nColor).nodeValue;
|
||||||
if(bgColorT!="") bgColor=bgColorT;
|
// if(bgColorT!="") bgColor=bgColorT;
|
||||||
}
|
//}
|
||||||
let id=nodeRecord.getAttribute("id");
|
let id=node.data[i].id;
|
||||||
//add rows to an existing record table
|
//add rows to an existing record table
|
||||||
let tr = document.createElement('tr');
|
let tr = document.createElement('tr');
|
||||||
tr.onmouseover=function(){ this.style.backgroundColor="var(--btn-color2)"; };
|
tr.onmouseover=function(){ this.style.backgroundColor="var(--btn-color2)"; };
|
||||||
@ -1259,13 +1261,15 @@ class SRec
|
|||||||
|
|
||||||
//sequential record number
|
//sequential record number
|
||||||
let td = document.createElement('td');
|
let td = document.createElement('td');
|
||||||
td.appendChild( document.createTextNode( i+100*this.pagepos ) );
|
td.appendChild( document.createTextNode( i+1+100*this.pagepos ) );
|
||||||
tr.appendChild(td);
|
tr.appendChild(td);
|
||||||
|
|
||||||
//CheckBuck to delete records
|
//CheckBuck to delete records
|
||||||
td = document.createElement('td');
|
td = document.createElement('td');
|
||||||
td.style.cssText="text-align: center;";
|
td.style.cssText="text-align: center;";
|
||||||
if(!(this.f_pD!="1" || nodeRecord.getAttribute("a").indexOf("d")==-1))
|
|
||||||
|
|
||||||
|
if(!(this.f_pD!="1" || node.data[i].a.indexOf("d")==-1))
|
||||||
{
|
{
|
||||||
let checkbox = document.createElement('input');
|
let checkbox = document.createElement('input');
|
||||||
checkbox.classList.add('DBMS');
|
checkbox.classList.add('DBMS');
|
||||||
@ -1280,10 +1284,10 @@ class SRec
|
|||||||
|
|
||||||
//for each column we make a column
|
//for each column we make a column
|
||||||
let colN=0; //column number
|
let colN=0; //column number
|
||||||
let cdataNode = nodeRecord.firstChild;
|
//let cdataNode = nodeRecord.firstChild;
|
||||||
while (cdataNode!=null)
|
//while (cdataNode!=null)
|
||||||
{
|
//this.access[obj.data[i].row[0]]=obj.data[i].row[1];
|
||||||
if(cdataNode.nodeName=="#cdata-section")
|
for(let j=0;j<node.data[i].row.length;j++)
|
||||||
{
|
{
|
||||||
if(this.masVis[colN])
|
if(this.masVis[colN])
|
||||||
{
|
{
|
||||||
@ -1291,8 +1295,12 @@ class SRec
|
|||||||
if((this.f_pU=="1")||(this.f_State=="1")){
|
if((this.f_pU=="1")||(this.f_State=="1")){
|
||||||
td.style.cssText="cursor: pointer;";
|
td.style.cssText="cursor: pointer;";
|
||||||
}
|
}
|
||||||
let textNode=document.createTextNode(cdataNode.nodeValue);
|
let textNode;
|
||||||
td.setAttribute("id",id+this.masCL[colN].getAttribute("n")); //so that you can identify each record when you update
|
if(node.data[i].row[j]!=null) textNode=document.createTextNode(node.data[i].row[j]);
|
||||||
|
else textNode=document.createTextNode("");
|
||||||
|
|
||||||
|
//td.setAttribute("id",id+this.masCL[colN].getAttribute("n")); //so that you can identify each record when you update
|
||||||
|
td.setAttribute("id",id+this.masCL[colN].n); //so that you can identify each record when you update
|
||||||
td.appendChild(textNode);
|
td.appendChild(textNode);
|
||||||
//if in the metadata for this column there is a reference object then add a link
|
//if in the metadata for this column there is a reference object then add a link
|
||||||
if (this.masCT[colN]!=null)
|
if (this.masCT[colN]!=null)
|
||||||
@ -1314,7 +1322,7 @@ class SRec
|
|||||||
}(this,id,colN);
|
}(this,id,colN);
|
||||||
}else
|
}else
|
||||||
{
|
{
|
||||||
if((this.f_pU=="1" && nodeRecord.getAttribute("a").indexOf("u")!=-1)||(this.f_State=="1"))
|
if((this.f_pU=="1" && node.data[i].a.indexOf("u")!=-1)||(this.f_State=="1"))
|
||||||
{
|
{
|
||||||
td.onclick=function(thiz,val1,val2){
|
td.onclick=function(thiz,val1,val2){
|
||||||
return function(){thiz.updateRecord(val1);};
|
return function(){thiz.updateRecord(val1);};
|
||||||
@ -1328,12 +1336,9 @@ class SRec
|
|||||||
}
|
}
|
||||||
colN++;
|
colN++;
|
||||||
}
|
}
|
||||||
cdataNode = cdataNode.nextSibling;
|
|
||||||
}
|
|
||||||
theTable.tBodies[0].appendChild(tr);
|
theTable.tBodies[0].appendChild(tr);
|
||||||
}
|
}
|
||||||
nodeRecord = nodeRecord.nextSibling;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.updateSize();
|
this.updateSize();
|
||||||
}
|
}
|
||||||
@ -1411,9 +1416,9 @@ class SRec
|
|||||||
}
|
}
|
||||||
let rec=new SRec();
|
let rec=new SRec();
|
||||||
rec.opener=this;
|
rec.opener=this;
|
||||||
rec.create();
|
rec.create(null);
|
||||||
//rec.f_State=1; TODO then finish the job
|
rec.f_State=1; //Зачем коментил?
|
||||||
//rec.f_PropName=nodeColu.getAttribute("n");
|
rec.f_PropName=nodeColu.getAttribute("n"); //Зачем коментил?
|
||||||
rec.f_Settings=settings;
|
rec.f_Settings=settings;
|
||||||
rec.f_TypeName=TypeName;
|
rec.f_TypeName=TypeName;
|
||||||
rec.win.setLeftTop(pageX-250,pageY-10);
|
rec.win.setLeftTop(pageX-250,pageY-10);
|
||||||
@ -1444,7 +1449,7 @@ class SRec
|
|||||||
//Settings.add(0,xmlString)
|
//Settings.add(0,xmlString)
|
||||||
//wishWin = window.open("showrecord.html?name="+typeName,typeName,"width=800,height=600,menubar=no,location=no,resizable=yes,scrollbars=yes");
|
//wishWin = window.open("showrecord.html?name="+typeName,typeName,"width=800,height=600,menubar=no,location=no,resizable=yes,scrollbars=yes");
|
||||||
let rec=new SRec();
|
let rec=new SRec();
|
||||||
rec.create();
|
rec.create(null);
|
||||||
//rec.f_State=1; not used
|
//rec.f_State=1; not used
|
||||||
//rec.f_PropName=propname; not used
|
//rec.f_PropName=propname; not used
|
||||||
rec.f_Settings=xmlString;
|
rec.f_Settings=xmlString;
|
||||||
@ -1457,11 +1462,9 @@ class SRec
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//find the node cdata in the data by the record id and column name
|
//Get column number by name
|
||||||
getDataC(id,col)
|
getColN(name){
|
||||||
{
|
let i=-1;
|
||||||
let i=0;
|
|
||||||
let b=false;
|
|
||||||
//determine the sequence number of the column
|
//determine the sequence number of the column
|
||||||
let node=findNodeOnPath(this.nodeMetadata,"type/objects-list");
|
let node=findNodeOnPath(this.nodeMetadata,"type/objects-list");
|
||||||
let nodeCol = node.firstChild;
|
let nodeCol = node.firstChild;
|
||||||
@ -1470,74 +1473,69 @@ class SRec
|
|||||||
if(nodeCol.nodeName=="column")
|
if(nodeCol.nodeName=="column")
|
||||||
{
|
{
|
||||||
if(nodeCol.getAttribute("n")==col){
|
if(nodeCol.getAttribute("n")==col){
|
||||||
b=true;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
nodeCol = nodeCol.nextSibling;
|
nodeCol = nodeCol.nextSibling;
|
||||||
}
|
}
|
||||||
if(!b)return null;
|
return i;
|
||||||
|
|
||||||
//we search for value in result set
|
|
||||||
node=findFirstNode(this.f_nodeData, 'type');
|
|
||||||
let nodeRec=findNodeOnAttribute(node, 'record', 'id', id);
|
|
||||||
return findNodeOnNum(nodeRec,"#cdata-section",i);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//find the value in the result set by the id of the record and the name of the column
|
//find the value in the result set by the id of the record and the name of the column
|
||||||
getData(id,col)
|
getData(id,col)
|
||||||
{
|
{
|
||||||
if(findNode(this.nodeMetadata,'type').getAttribute("ObjectID")==col) return id;
|
if(findNode(this.nodeMetadata,'type').getAttribute("ObjectID")==col)
|
||||||
let cdt=this.getDataC(id,col);
|
return id;
|
||||||
if(cdt!=null) return cdt.nodeValue; else return '';
|
let pos=this.getColN(col);
|
||||||
|
if(pos>=0){
|
||||||
|
for(let i=0;i<this.f_nodeData.data.length;i++){
|
||||||
|
if(this.f_nodeData.data[i].id=id){
|
||||||
|
return this.f_nodeData.data[i].row[pos];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
//look for a string by id and update the values (TODO consecutively without hidden fields)
|
//look for a string by id and update the values (TODO consecutively without hidden fields)
|
||||||
updateRows(node)
|
updateRows(node)
|
||||||
{
|
{
|
||||||
//We sort through the received records and update the values
|
//We sort through the received records and update the values
|
||||||
let nodeRecord = findNode(node,"type").firstChild
|
for(let i=0;i<node.data.length;i++)
|
||||||
while (nodeRecord != null)
|
|
||||||
{
|
{
|
||||||
if(nodeRecord.nodeName=="record")
|
let id=node.data[i].id;
|
||||||
{
|
|
||||||
let ii=0;
|
|
||||||
let jj=0;
|
|
||||||
let id=nodeRecord.getAttribute("id");
|
|
||||||
let tr=document.getElementById(id+'_'+this.uid);
|
let tr=document.getElementById(id+'_'+this.uid);
|
||||||
|
|
||||||
if (tr==null)
|
if (tr==null)
|
||||||
{
|
{
|
||||||
this.insertRows(node,false); //If not then insert
|
this.insertRows(node,false); //If not then insert
|
||||||
}else
|
}else //Update fields if editing
|
||||||
{
|
{
|
||||||
|
//Updating data in a data object
|
||||||
|
for(let ii=0;ii<this.f_nodeData.data.length;ii++){
|
||||||
|
if(this.f_nodeData.data[ii].id==id) {
|
||||||
|
this.f_nodeData.data[ii].row=node.data[i].row;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//Updating data in an HTML table
|
||||||
|
let jj=0;
|
||||||
tr.style.textDecoration="underline";
|
tr.style.textDecoration="underline";
|
||||||
|
for(let j=0;j<node.data[i].row.length;j++)
|
||||||
let cdataNode = nodeRecord.firstChild;
|
|
||||||
while (cdataNode!=null)
|
|
||||||
{
|
{
|
||||||
if (cdataNode.nodeName=="#cdata-section")
|
if(this.masCL[j].getAttribute("visible")!="0")
|
||||||
{
|
{
|
||||||
let cd=this.getDataC(id,this.masCL[ii].getAttribute("n"));
|
while(tr.childNodes[jj+2].childNodes[0]) {
|
||||||
if(cd!=null) cd.nodeValue=cdataNode.nodeValue;
|
tr.childNodes[jj+2].removeChild(tr.childNodes[jj + 2].childNodes[0]);
|
||||||
|
}
|
||||||
if(this.masCL[ii].getAttribute("visible")!="0")
|
let textNode;
|
||||||
{
|
if(node.data[i].row[j]!=null) textNode=document.createTextNode(node.data[i].row[j]);
|
||||||
while(tr.childNodes[jj+2].childNodes[0])
|
else textNode=document.createTextNode("");
|
||||||
tr.childNodes[jj+2].removeChild(tr.childNodes[jj+2].childNodes[0]);
|
tr.childNodes[jj+2].appendChild(textNode);
|
||||||
tr.childNodes[jj+2].appendChild(document.createTextNode(cdataNode.nodeValue));
|
|
||||||
|
|
||||||
jj++;
|
jj++;
|
||||||
}
|
}
|
||||||
ii++;
|
|
||||||
}
|
|
||||||
cdataNode = cdataNode.nextSibling;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
nodeRecord = nodeRecord.nextSibling;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
openPage(page)
|
openPage(page)
|
||||||
@ -1629,14 +1627,10 @@ class SRec
|
|||||||
let filter="";
|
let filter="";
|
||||||
let nodeType=findFirstNode(this.nodeMetadata, "type");
|
let nodeType=findFirstNode(this.nodeMetadata, "type");
|
||||||
let nodeFilter=findNodeOnPath(nodeType,"objects-list/filter");
|
let nodeFilter=findNodeOnPath(nodeType,"objects-list/filter");
|
||||||
if (nodeFilter!=null)
|
|
||||||
{
|
|
||||||
filter=getXMLNodeSerialisation(nodeFilter)
|
|
||||||
}
|
|
||||||
|
|
||||||
//Send the id of the selected record to the parent of the selected record and close the window
|
//Send the id of the selected record to the parent of the selected record and close the window
|
||||||
//alert2(trt('Alert'),"id="+id+" f_PropName="+this.f_PropName+" f_TypeName="+this.f_TypeName);
|
//alert2(trt('Alert'),"id="+id+" f_PropName="+this.f_PropName+" f_TypeName="+this.f_TypeName);
|
||||||
this.opener.setFilterObject(this.f_TypeName, this.f_PropName, id, filter);
|
this.opener.setFilterObject(this.f_TypeName, this.f_PropName, id, nodeFilter);
|
||||||
this.win.Close();
|
this.win.Close();
|
||||||
}else{
|
}else{
|
||||||
let erec = new EdtRec("");
|
let erec = new EdtRec("");
|
||||||
@ -1650,6 +1644,7 @@ class SRec
|
|||||||
}else
|
}else
|
||||||
if(this.f_State=="2") //Multiple choice (on the records of ticking TODO is not implemented)
|
if(this.f_State=="2") //Multiple choice (on the records of ticking TODO is not implemented)
|
||||||
{
|
{
|
||||||
|
alert2(trt('Alert'), 'TODO');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1683,8 +1678,9 @@ class SRec
|
|||||||
//Rebuild sequential numbering of rows (first column)
|
//Rebuild sequential numbering of rows (first column)
|
||||||
let theTable = document.getElementById('thetable'+this.uid); //data table
|
let theTable = document.getElementById('thetable'+this.uid); //data table
|
||||||
for(let i=1;i<theTable.rows.length;i++)
|
for(let i=1;i<theTable.rows.length;i++)
|
||||||
{while (theTable.rows[i].cells[0].childNodes[0]) //delete all childs
|
{
|
||||||
{theTable.rows[i].cells[0].removeChild(theTable.rows[i].cells[0].childNodes[0]);
|
while (theTable.rows[i].cells[0].childNodes[0]) //delete all childs
|
||||||
|
{ theTable.rows[i].cells[0].removeChild(theTable.rows[i].cells[0].childNodes[0]);
|
||||||
}
|
}
|
||||||
theTable.rows[i].cells[0].appendChild(document.createTextNode(i));
|
theTable.rows[i].cells[0].appendChild(document.createTextNode(i));
|
||||||
}
|
}
|
||||||
|
|||||||
@ -9,14 +9,14 @@ function trt(key)
|
|||||||
if(val==null || val===undefined)
|
if(val==null || val===undefined)
|
||||||
{
|
{
|
||||||
for(let item in g_translations) {
|
for(let item in g_translations) {
|
||||||
if(item.toLowerCase()==key.toLowerCase())
|
if(item.toLowerCase()==(''+key).toLowerCase())
|
||||||
{
|
{
|
||||||
val=g_translations[item];
|
val=g_translations[item];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(val==null || val===undefined) return key.replace(/_/g, ' ');
|
if(val==null || val===undefined) return (''+key).replace(/_/g, ' ');
|
||||||
else return val;
|
else return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -28,7 +28,7 @@ function resizeDivTile(parent,minWidth)
|
|||||||
if(parent==null) return;
|
if(parent==null) return;
|
||||||
let dx=Math.floor(parent.offsetWidth/(minWidth));
|
let dx=Math.floor(parent.offsetWidth/(minWidth));
|
||||||
|
|
||||||
//console.log("parent.offsetWidth="+parent.offsetWidth+" minWidth="+minWidth+" margin="+margin+" dx="+dx);
|
//log.info("parent.offsetWidth="+parent.offsetWidth+" minWidth="+minWidth+" margin="+margin+" dx="+dx);
|
||||||
|
|
||||||
let addW=0;
|
let addW=0;
|
||||||
for(let i=0;i<minWidth+2;i++)
|
for(let i=0;i<minWidth+2;i++)
|
||||||
@ -36,24 +36,24 @@ function resizeDivTile(parent,minWidth)
|
|||||||
if(dx>=parent.offsetWidth/(minWidth+i))
|
if(dx>=parent.offsetWidth/(minWidth+i))
|
||||||
{
|
{
|
||||||
addW=i-1;
|
addW=i-1;
|
||||||
//console.log("addW="+addW+" parent.offsetWidth/(minWidth+margin+i)="+(parent.offsetWidth/(minWidth+margin+i)));
|
//log.info("addW="+addW+" parent.offsetWidth/(minWidth+margin+i)="+(parent.offsetWidth/(minWidth+margin+i)));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for(let i = 0; i < parent.children.length; i++) {
|
for(let i = 0; i < parent.children.length; i++) {
|
||||||
//console.log(parent.children[i].tagName);
|
//log.info(parent.children[i].tagName);
|
||||||
if(parent.children[i].tagName.toUpperCase()=='DIV')
|
if(parent.children[i].tagName.toUpperCase()=='DIV')
|
||||||
{
|
{
|
||||||
parent.children[i].style.width = (minWidth+addW)+"px";
|
parent.children[i].style.width = (minWidth+addW)+"px";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//console.log("minWidth+addW="+(minWidth+addW));
|
//log.info("minWidth+addW="+(minWidth+addW));
|
||||||
|
|
||||||
//Центрирую, путем добавления пространства с лева
|
//Центрирую, путем добавления пространства с лева
|
||||||
parent.style.paddingLeft = Math.floor((parent.offsetWidth-(dx*(minWidth+addW)))/2) + "px";
|
parent.style.paddingLeft = Math.floor((parent.offsetWidth-(dx*(minWidth+addW)))/2) + "px";
|
||||||
|
|
||||||
//console.log("parent.style.paddingLeft="+parent.style.paddingLeft+" calc="+(Math.floor((parent.offsetWidth-(dx*(minWidth+addW)))/2)));
|
//log.info("parent.style.paddingLeft="+parent.style.paddingLeft+" calc="+(Math.floor((parent.offsetWidth-(dx*(minWidth+addW)))/2)));
|
||||||
}
|
}
|
||||||
|
|
||||||
//Получить уникальный идентификатор в рамках текущего NAMESPACE из глобальной переменной
|
//Получить уникальный идентификатор в рамках текущего NAMESPACE из глобальной переменной
|
||||||
@ -306,6 +306,59 @@ function confirm2(title,smallText,fullText,okFunc,cancelFunc)
|
|||||||
return win;
|
return win;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//С поле ввода
|
||||||
|
function prompt2(title,smallText,fieldText,defaultText,okFunc,cancelFunc){
|
||||||
|
let win=new TWin();
|
||||||
|
win.BuildGUI(10,10);
|
||||||
|
win.setCaption(document.createTextNode(title));
|
||||||
|
let html='\n\
|
||||||
|
<table cellpadding="0" cellspacing="0" style="width: 100%; height: 100%;">\n\
|
||||||
|
<tr style="width: 100%;">\n\
|
||||||
|
<td colspan="3" style="text-align: center; vertical-align: middle; width: 100%;">'+smallText+'</td>\n\
|
||||||
|
</tr>\n\
|
||||||
|
<tr style="width: 100%;">\n\
|
||||||
|
<td colspan="3" style="width: 100%;">'+fieldText+'</td>\n\
|
||||||
|
</tr>\n\
|
||||||
|
<tr style="width: 100%;">\n\
|
||||||
|
<td colspan="3" style="width: 100%;"><textarea rows="5" style="width: 100%;" id="text_'+win.uid+'">'+defaultText+'</textarea></td>\n\
|
||||||
|
</tr>\n\
|
||||||
|
<tr style="height: 10px;">\n\
|
||||||
|
<td style="width: 100%;"> </td>\n\
|
||||||
|
<td><button class="button-secondary" id="'+win.uid+'_ok" style="width: 80px;margin:1px;">'+trt('Ok')+'</button></td>\n\
|
||||||
|
<td><button class="button-secondary" id="'+win.uid+'_cancel" style="width: 80px;margin:1px;">'+trt('Cancel')+'</button></td>\n\
|
||||||
|
</tr>\n\
|
||||||
|
</table>';
|
||||||
|
|
||||||
|
win.setContent(html);
|
||||||
|
|
||||||
|
let btnO=document.getElementById(win.uid+'_ok');
|
||||||
|
btnO.focus();
|
||||||
|
if(btnO!=null){
|
||||||
|
btnO.onclick=function(win){
|
||||||
|
return function(){
|
||||||
|
let text=document.getElementById('text_'+win.uid).value;
|
||||||
|
win.Close();
|
||||||
|
if(okFunc!=null) okFunc(text);
|
||||||
|
};
|
||||||
|
}(win,okFunc);
|
||||||
|
}
|
||||||
|
let btnC=document.getElementById(win.uid+'_cancel');
|
||||||
|
if(btnC!=null) {
|
||||||
|
btnC.onclick = function (win) {
|
||||||
|
return function () {
|
||||||
|
win.Close();
|
||||||
|
if(cancelFunc!=null) cancelFunc();
|
||||||
|
};
|
||||||
|
}(win,cancelFunc);
|
||||||
|
}
|
||||||
|
|
||||||
|
win.setSize("350px","200px");
|
||||||
|
win.setCenter();
|
||||||
|
win.shadow=true;
|
||||||
|
win.hide(false);
|
||||||
|
return win;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Добавить событие к объекту
|
* Добавить событие к объекту
|
||||||
* @param {object} obj Объект
|
* @param {object} obj Объект
|
||||||
@ -971,7 +1024,7 @@ function delChild(obj)
|
|||||||
function applyNodeToNode(first, second, name)
|
function applyNodeToNode(first, second, name)
|
||||||
{
|
{
|
||||||
if(first===null || second===null || name ===null){
|
if(first===null || second===null || name ===null){
|
||||||
console.error("first="+first+" second="+second+" name="+name);
|
log.error("first="+first+" second="+second+" name="+name);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//Если есть совпадающие узлы то передаём в рекурсию если нет то просто копируем
|
//Если есть совпадающие узлы то передаём в рекурсию если нет то просто копируем
|
||||||
@ -1006,6 +1059,13 @@ function applyNodeToNode(first, second, name)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*function applyObjectToObject(first, second, name){
|
||||||
|
if(first===null || second===null || name ===null){
|
||||||
|
log.error("first="+first+" second="+second+" name="+name);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}*/
|
||||||
|
|
||||||
function escapeRegExp(str) {
|
function escapeRegExp(str) {
|
||||||
return str.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1");
|
return str.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1");
|
||||||
}
|
}
|
||||||
@ -1057,39 +1117,97 @@ class TRequest
|
|||||||
}
|
}
|
||||||
|
|
||||||
processReqChange(xmlHttpRequest,url,xmlString)
|
processReqChange(xmlHttpRequest,url,xmlString)
|
||||||
|
{
|
||||||
|
if(typeof(xmlHttpRequest.status)=='undefined' || xmlHttpRequest.status == 200)
|
||||||
|
{
|
||||||
|
if(xmlHttpRequest.responseXML!=null) {
|
||||||
|
//if(typeof(xmlHttpRequest.responseXML)=='undefined' && xmlHttpRequest.contentType.match(/\/xml/)) //For IE XDomainRequest
|
||||||
|
// xmlHttpRequest.responseXML=CreateXMLDOC(xmlHttpRequest.responseText);
|
||||||
|
let xmldoc = xmlHttpRequest.responseXML;
|
||||||
|
if (xmldoc == null) {
|
||||||
|
alert2(trt('Alert'), trt('Wrong_XML_document') + "!\nXML=(" + xmlHttpRequest.responseText + ')\nURL=(' + url + ')\nxmlString=(' + xmlString + ')');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let node = xmldoc.documentElement;
|
||||||
|
if ((node == null) || (node.getAttribute("fn") == null)){
|
||||||
|
alert2(trt('Error'), trt('No_data')+"! \n" + xmlHttpRequest.responseText);
|
||||||
|
}else {
|
||||||
|
let fn = node.getAttribute("fn");
|
||||||
|
if (this.winObj != null) {
|
||||||
|
this.winObj.applyReq(this, fn, node, xmldoc, this.winObj);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
let obj = JSON.parse(xmlHttpRequest.responseText);
|
||||||
|
if(obj==null) {
|
||||||
|
alert2(trt('Alert'), trt('Wrong_JSON_document') + "!\nJSON=(" + xmlHttpRequest.responseText + ')');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(this.winObj!=null)
|
||||||
|
{
|
||||||
|
this.winObj.applyReq(this,obj.fn,obj,null,this.winObj);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
if(confirm(trt('Failed_to_get_data')+"\n URL: "+url+"\n"+xmlHttpRequest.statusText+trt('Repeat_request')+'?'))
|
||||||
|
{
|
||||||
|
this.callServer(url,xmlString);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*processReqChange(xmlHttpRequest,url,xmlString)
|
||||||
{
|
{
|
||||||
//if (typeof(xmlHttpRequest.readyState)=='undefined' || xmlHttpRequest.readyState == 4)
|
//if (typeof(xmlHttpRequest.readyState)=='undefined' || xmlHttpRequest.readyState == 4)
|
||||||
//{
|
//{
|
||||||
if(typeof(xmlHttpRequest.status)=='undefined' || xmlHttpRequest.status == 200)
|
if(typeof(xmlHttpRequest.status)=='undefined' || xmlHttpRequest.status == 200)
|
||||||
{
|
{
|
||||||
if(typeof(xmlHttpRequest.responseXML)=='undefined' && xmlHttpRequest.contentType.match(/\/xml/)) //For IE XDomainRequest
|
alert(JSON.stringify(xmlHttpRequest));
|
||||||
xmlHttpRequest.responseXML=CreateXMLDOC(xmlHttpRequest.responseText);
|
if(typeof(xmlHttpRequest.responseXML)=='undefined') {
|
||||||
|
if(xmlHttpRequest.contentType.match(/\/xml/)) {
|
||||||
//загрузился xml документ начинаем его разбирать (по id функции в документе)
|
xmlHttpRequest.responseXML = CreateXMLDOC(xmlHttpRequest.responseText);
|
||||||
let xmldoc = xmlHttpRequest.responseXML;
|
if(xmlHttpRequest.responseXML==null) {
|
||||||
if(xmldoc==null){
|
alert2(trt('Alert'), trt('Wrong_XML_document') + "!\nXML=(" + xmlHttpRequest.responseText + ')\nURL=(' + url + ')\nxmlString=(' + xmlString + ')');
|
||||||
alert2(trt('Alert'),trt('Wrong_XML_document')+"!\nXML=("+xmlHttpRequest.responseText+')\nURL=('+url+')\nxmlString=('+xmlString+')');
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
//загрузился xml документ начинаем его разбирать (по id функции в документе)
|
||||||
let node = xmldoc.documentElement;
|
let node = xmlHttpRequest.responseXML.documentElement;
|
||||||
if((node==null)||(node.getAttribute("fn")==null)) alert(trt('Error')+"\n"+trt('No_data')+"!\n"+xmlHttpRequest.responseText);
|
if((node==null)||(node.getAttribute("fn")==null)) alert(trt('Error')+"\n"+trt('No_data')+"!\n"+xmlHttpRequest.responseText);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//alert("XML=\n"+getXMLNodeSerialisation(node));
|
|
||||||
let fn = node.getAttribute("fn");
|
let fn = node.getAttribute("fn");
|
||||||
if(this.winObj!=null)
|
if(this.winObj!=null)
|
||||||
{
|
{
|
||||||
//this.winObj.alert("Принятый браузером XML=\n"+getXMLNodeSerialisation(node));
|
|
||||||
/* каждый слушатель должен сам реализовать
|
|
||||||
* if (fn==-1)
|
|
||||||
{
|
|
||||||
alert(findFirstNode(node,'#cdata-section').nodeValue);
|
|
||||||
}else*/
|
|
||||||
this.winObj.applyReq(this,fn,node,xmldoc,this.winObj);
|
this.winObj.applyReq(this,fn,node,xmldoc,this.winObj);
|
||||||
return null;
|
return null;
|
||||||
}else if(fn==0) alert(findFirstNode(node,'#cdata-section').nodeValue);
|
}else if(fn==0) alert(findFirstNode(node,'#cdata-section').nodeValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}else if(xmlHttpRequest.contentType.match(/\/json/)){
|
||||||
|
xmlHttpRequest.responseXML = JSON.parse(xmlHttpRequest.responseText);
|
||||||
|
if(xmlHttpRequest.responseXML==null) {
|
||||||
|
alert2(trt('Alert'), trt('Wrong_JSON_document') + "!\nJSON=(" + xmlHttpRequest.responseText + ')\nURL=(' + url + ')\njsonString=(' + xmlString + ')');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//загрузился xml документ начинаем его разбирать (по id функции в документе)
|
||||||
|
let node=xmlHttpRequest.responseXML;
|
||||||
|
if((node==null)||(node.fn==null)) alert(trt('Error')+"\n"+trt('No_data')+"!\n"+xmlHttpRequest.responseText);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(this.winObj!=null)
|
||||||
|
{
|
||||||
|
this.winObj.applyReq(this,node.fn,node,null,this.winObj);
|
||||||
|
return null;
|
||||||
|
}else if(fn==0) alert(findFirstNode(node,'#cdata-section').nodeValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}else
|
}else
|
||||||
{
|
{
|
||||||
if(confirm(trt('Failed_to_get_data')+"\n URL: "+url+"\n"+xmlHttpRequest.statusText+"\nПовторить запрос?"))
|
if(confirm(trt('Failed_to_get_data')+"\n URL: "+url+"\n"+xmlHttpRequest.statusText+"\nПовторить запрос?"))
|
||||||
@ -1099,7 +1217,7 @@ class TRequest
|
|||||||
}
|
}
|
||||||
//}
|
//}
|
||||||
return null;
|
return null;
|
||||||
}
|
}*/
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Класс асинхронных запросов к серверу
|
/** Класс асинхронных запросов к серверу
|
||||||
|
|||||||
@ -12,10 +12,12 @@ if (isset($_REQUEST['id'])) $id = $_REQUEST['id']; else $id = '';
|
|||||||
|
|
||||||
//$letters = array('a','b','c','d','e','f','g','h','j','k','m','n','p','q','r','s','t','u','v','w','x','y','z','2','3','4','5','6','7','9');
|
//$letters = array('a','b','c','d','e','f','g','h','j','k','m','n','p','q','r','s','t','u','v','w','x','y','z','2','3','4','5','6','7','9');
|
||||||
$letters = array('0','1','2','3','4','5','6','7','8','9');
|
$letters = array('0','1','2','3','4','5','6','7','8','9');
|
||||||
$colors = array('100','200','150','170','190','210','190','160','170','190','210');
|
//$colors = array('100','200','150','170','190','210','190','160','170','190','210'); //для тёмного стиля
|
||||||
|
$colors = array('50','100','75','85','95','105','90','80','85','95','105'); //Для светлого стиля
|
||||||
|
|
||||||
$src = imagecreatetruecolor($width,$height);
|
$src = imagecreatetruecolor($width,$height);
|
||||||
$fon = imagecolorallocate($src,58,58,58);
|
//$fon = imagecolorallocate($src,58,58,58); //Для тёмного стиля
|
||||||
|
$fon = imagecolorallocate($src,241,241,241); //Для светлого стиля
|
||||||
imagefill($src,0,0,$fon);
|
imagefill($src,0,0,$fon);
|
||||||
|
|
||||||
$fonts = array();
|
$fonts = array();
|
||||||
@ -35,7 +37,16 @@ if (isset($_REQUEST['id'])) $id = $_REQUEST['id']; else $id = '';
|
|||||||
$font = $path_fonts.$fonts[rand(0,sizeof($fonts)-1)];
|
$font = $path_fonts.$fonts[rand(0,sizeof($fonts)-1)];
|
||||||
$letter = $letters[rand(0,sizeof($letters)-1)];
|
$letter = $letters[rand(0,sizeof($letters)-1)];
|
||||||
$size = rand($font_size-2,$font_size+2);
|
$size = rand($font_size-2,$font_size+2);
|
||||||
imagettftext($src,$size,rand(0,45),rand($width*0.1,$width-$width*0.1),rand($height*0.2,$height),$color,$font,$letter);
|
imagettftext(
|
||||||
|
$src,
|
||||||
|
$size,
|
||||||
|
rand(0,45),
|
||||||
|
rand((int)($width*0.1),(int)($width-$width*0.1)),
|
||||||
|
rand((int)($height*0.2),$height),
|
||||||
|
$color,
|
||||||
|
$font,
|
||||||
|
$letter
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
for($i=0;$i<$let_amount;$i++)
|
for($i=0;$i<$let_amount;$i++)
|
||||||
@ -43,9 +54,9 @@ if (isset($_REQUEST['id'])) $id = $_REQUEST['id']; else $id = '';
|
|||||||
$color = imagecolorallocatealpha($src,$colors[rand(0,sizeof($colors)-1)],$colors[rand(0,sizeof($colors)-1)],$colors[rand(0,sizeof($colors)-1)],rand(20,40));
|
$color = imagecolorallocatealpha($src,$colors[rand(0,sizeof($colors)-1)],$colors[rand(0,sizeof($colors)-1)],$colors[rand(0,sizeof($colors)-1)],rand(20,40));
|
||||||
$font = $path_fonts.$fonts[rand(0,sizeof($fonts)-1)];
|
$font = $path_fonts.$fonts[rand(0,sizeof($fonts)-1)];
|
||||||
$letter = $letters[rand(0,sizeof($letters)-1)];
|
$letter = $letters[rand(0,sizeof($letters)-1)];
|
||||||
$size = rand($font_size*2.1-2,$font_size*2.1+2);
|
$size = rand((int)($font_size*2.1-2),(int)($font_size*2.1+2));
|
||||||
$x = ($i+0.9)*$font_size + rand(4,7);
|
$x = (int)(($i+0.9)*$font_size + rand(4,7));
|
||||||
$y = (($height*2.3)/3) + rand(0,5);
|
$y = (int)((($height*2.3)/3) + rand(0,5));
|
||||||
$cod[] = $letter;
|
$cod[] = $letter;
|
||||||
imagettftext($src,$size,rand(0,15),$x,$y,$color,$font,$letter);
|
imagettftext($src,$size,rand(0,15),$x,$y,$color,$font,$letter);
|
||||||
}
|
}
|
||||||
|
|||||||
276
metadata/include/otp/FixedByteNotation.php
Normal file
276
metadata/include/otp/FixedByteNotation.php
Normal file
@ -0,0 +1,276 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* FixedBitNotation
|
||||||
|
*
|
||||||
|
* @author Andre DeMarre
|
||||||
|
* @package FixedBitNotation
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The FixedBitNotation class is for binary to text conversion. It
|
||||||
|
* can handle many encoding schemes, formally defined or not, that
|
||||||
|
* use a fixed number of bits to encode each character.
|
||||||
|
*
|
||||||
|
* @package FixedBitNotation
|
||||||
|
*/
|
||||||
|
class FixedBitNotation
|
||||||
|
{
|
||||||
|
protected $_chars;
|
||||||
|
protected $_bitsPerCharacter;
|
||||||
|
protected $_radix;
|
||||||
|
protected $_rightPadFinalBits;
|
||||||
|
protected $_padFinalGroup;
|
||||||
|
protected $_padCharacter;
|
||||||
|
protected $_charmap;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*
|
||||||
|
* @param integer $bitsPerCharacter Bits to use for each encoded
|
||||||
|
* character
|
||||||
|
* @param string $chars Base character alphabet
|
||||||
|
* @param boolean $rightPadFinalBits How to encode last character
|
||||||
|
* @param boolean $padFinalGroup Add padding to end of encoded
|
||||||
|
* output
|
||||||
|
* @param string $padCharacter Character to use for padding
|
||||||
|
*/
|
||||||
|
public function __construct(
|
||||||
|
$bitsPerCharacter, $chars = NULL, $rightPadFinalBits = FALSE,
|
||||||
|
$padFinalGroup = FALSE, $padCharacter = '=')
|
||||||
|
{
|
||||||
|
// Ensure validity of $chars
|
||||||
|
if (!is_string($chars) || ($charLength = strlen($chars)) < 2) {
|
||||||
|
$chars =
|
||||||
|
'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-,';
|
||||||
|
$charLength = 64;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ensure validity of $bitsPerCharacter
|
||||||
|
if ($bitsPerCharacter < 1) {
|
||||||
|
// $bitsPerCharacter must be at least 1
|
||||||
|
$bitsPerCharacter = 1;
|
||||||
|
$radix = 2;
|
||||||
|
|
||||||
|
} elseif ($charLength < 1 << $bitsPerCharacter) {
|
||||||
|
// Character length of $chars is too small for $bitsPerCharacter
|
||||||
|
// Set $bitsPerCharacter to greatest acceptable value
|
||||||
|
$bitsPerCharacter = 1;
|
||||||
|
$radix = 2;
|
||||||
|
|
||||||
|
while ($charLength >= ($radix <<= 1) && $bitsPerCharacter < 8) {
|
||||||
|
$bitsPerCharacter++;
|
||||||
|
}
|
||||||
|
|
||||||
|
$radix >>= 1;
|
||||||
|
|
||||||
|
} elseif ($bitsPerCharacter > 8) {
|
||||||
|
// $bitsPerCharacter must not be greater than 8
|
||||||
|
$bitsPerCharacter = 8;
|
||||||
|
$radix = 256;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
$radix = 1 << $bitsPerCharacter;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->_chars = $chars;
|
||||||
|
$this->_bitsPerCharacter = $bitsPerCharacter;
|
||||||
|
$this->_radix = $radix;
|
||||||
|
$this->_rightPadFinalBits = $rightPadFinalBits;
|
||||||
|
$this->_padFinalGroup = $padFinalGroup;
|
||||||
|
$this->_padCharacter = $padCharacter[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Encode a string
|
||||||
|
*
|
||||||
|
* @param string $rawString Binary data to encode
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function encode($rawString)
|
||||||
|
{
|
||||||
|
// Unpack string into an array of bytes
|
||||||
|
$bytes = unpack('C*', $rawString);
|
||||||
|
$byteCount = count($bytes);
|
||||||
|
|
||||||
|
$encodedString = '';
|
||||||
|
$byte = array_shift($bytes);
|
||||||
|
$bitsRead = 0;
|
||||||
|
|
||||||
|
$chars = $this->_chars;
|
||||||
|
$bitsPerCharacter = $this->_bitsPerCharacter;
|
||||||
|
$rightPadFinalBits = $this->_rightPadFinalBits;
|
||||||
|
$padFinalGroup = $this->_padFinalGroup;
|
||||||
|
$padCharacter = $this->_padCharacter;
|
||||||
|
|
||||||
|
// Generate encoded output;
|
||||||
|
// each loop produces one encoded character
|
||||||
|
for ($c = 0; $c < $byteCount * 8 / $bitsPerCharacter; $c++) {
|
||||||
|
|
||||||
|
// Get the bits needed for this encoded character
|
||||||
|
if ($bitsRead + $bitsPerCharacter > 8) {
|
||||||
|
// Not enough bits remain in this byte for the current
|
||||||
|
// character
|
||||||
|
// Save the remaining bits before getting the next byte
|
||||||
|
$oldBitCount = 8 - $bitsRead;
|
||||||
|
$oldBits = $byte ^ ($byte >> $oldBitCount << $oldBitCount);
|
||||||
|
$newBitCount = $bitsPerCharacter - $oldBitCount;
|
||||||
|
|
||||||
|
if (!$bytes) {
|
||||||
|
// Last bits; match final character and exit loop
|
||||||
|
if ($rightPadFinalBits) $oldBits <<= $newBitCount;
|
||||||
|
$encodedString .= $chars[$oldBits];
|
||||||
|
|
||||||
|
if ($padFinalGroup) {
|
||||||
|
// Array of the lowest common multiples of
|
||||||
|
// $bitsPerCharacter and 8, divided by 8
|
||||||
|
$lcmMap = array(1 => 1, 2 => 1, 3 => 3, 4 => 1,
|
||||||
|
5 => 5, 6 => 3, 7 => 7, 8 => 1);
|
||||||
|
$bytesPerGroup = $lcmMap[$bitsPerCharacter];
|
||||||
|
$pads = $bytesPerGroup * 8 / $bitsPerCharacter
|
||||||
|
- ceil((strlen($rawString) % $bytesPerGroup)
|
||||||
|
* 8 / $bitsPerCharacter);
|
||||||
|
$encodedString .= str_repeat($padCharacter[0], $pads);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get next byte
|
||||||
|
$byte = array_shift($bytes);
|
||||||
|
$bitsRead = 0;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
$oldBitCount = 0;
|
||||||
|
$newBitCount = $bitsPerCharacter;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read only the needed bits from this byte
|
||||||
|
$bits = $byte >> 8 - ($bitsRead + ($newBitCount));
|
||||||
|
$bits ^= $bits >> $newBitCount << $newBitCount;
|
||||||
|
$bitsRead += $newBitCount;
|
||||||
|
|
||||||
|
if ($oldBitCount) {
|
||||||
|
// Bits come from seperate bytes, add $oldBits to $bits
|
||||||
|
$bits = ($oldBits << $newBitCount) | $bits;
|
||||||
|
}
|
||||||
|
|
||||||
|
$encodedString .= $chars[$bits];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $encodedString;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Decode a string
|
||||||
|
*
|
||||||
|
* @param string $encodedString Data to decode
|
||||||
|
* @param boolean $caseSensitive
|
||||||
|
* @param boolean $strict Returns NULL if $encodedString contains
|
||||||
|
* an undecodable character
|
||||||
|
* @return string|NULL
|
||||||
|
*/
|
||||||
|
public function decode($encodedString, $caseSensitive = TRUE,
|
||||||
|
$strict = FALSE)
|
||||||
|
{
|
||||||
|
if (!$encodedString || !is_string($encodedString)) {
|
||||||
|
// Empty string, nothing to decode
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
$chars = $this->_chars;
|
||||||
|
$bitsPerCharacter = $this->_bitsPerCharacter;
|
||||||
|
$radix = $this->_radix;
|
||||||
|
$rightPadFinalBits = $this->_rightPadFinalBits;
|
||||||
|
$padFinalGroup = $this->_padFinalGroup;
|
||||||
|
$padCharacter = $this->_padCharacter;
|
||||||
|
|
||||||
|
// Get index of encoded characters
|
||||||
|
if ($this->_charmap) {
|
||||||
|
$charmap = $this->_charmap;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
$charmap = array();
|
||||||
|
|
||||||
|
for ($i = 0; $i < $radix; $i++) {
|
||||||
|
$charmap[$chars[$i]] = $i;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->_charmap = $charmap;
|
||||||
|
}
|
||||||
|
|
||||||
|
// The last encoded character is $encodedString[$lastNotatedIndex]
|
||||||
|
$lastNotatedIndex = strlen($encodedString) - 1;
|
||||||
|
|
||||||
|
// Remove trailing padding characters
|
||||||
|
while ($encodedString[$lastNotatedIndex] == $padCharacter[0]) {
|
||||||
|
$encodedString = substr($encodedString, 0, $lastNotatedIndex);
|
||||||
|
$lastNotatedIndex--;
|
||||||
|
}
|
||||||
|
|
||||||
|
$rawString = '';
|
||||||
|
$byte = 0;
|
||||||
|
$bitsWritten = 0;
|
||||||
|
|
||||||
|
// Convert each encoded character to a series of unencoded bits
|
||||||
|
for ($c = 0; $c <= $lastNotatedIndex; $c++) {
|
||||||
|
|
||||||
|
if (!isset($charmap[$encodedString[$c]]) && !$caseSensitive) {
|
||||||
|
// Encoded character was not found; try other case
|
||||||
|
if (isset($charmap[$cUpper
|
||||||
|
= strtoupper($encodedString[$c])])) {
|
||||||
|
$charmap[$encodedString[$c]] = $charmap[$cUpper];
|
||||||
|
|
||||||
|
} elseif (isset($charmap[$cLower
|
||||||
|
= strtolower($encodedString[$c])])) {
|
||||||
|
$charmap[$encodedString[$c]] = $charmap[$cLower];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($charmap[$encodedString[$c]])) {
|
||||||
|
$bitsNeeded = 8 - $bitsWritten;
|
||||||
|
$unusedBitCount = $bitsPerCharacter - $bitsNeeded;
|
||||||
|
|
||||||
|
// Get the new bits ready
|
||||||
|
if ($bitsNeeded > $bitsPerCharacter) {
|
||||||
|
// New bits aren't enough to complete a byte; shift them
|
||||||
|
// left into position
|
||||||
|
$newBits = $charmap[$encodedString[$c]] << $bitsNeeded
|
||||||
|
- $bitsPerCharacter;
|
||||||
|
$bitsWritten += $bitsPerCharacter;
|
||||||
|
|
||||||
|
} elseif ($c != $lastNotatedIndex || $rightPadFinalBits) {
|
||||||
|
// Zero or more too many bits to complete a byte;
|
||||||
|
// shift right
|
||||||
|
$newBits = $charmap[$encodedString[$c]] >> $unusedBitCount;
|
||||||
|
$bitsWritten = 8; //$bitsWritten += $bitsNeeded;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// Final bits don't need to be shifted
|
||||||
|
$newBits = $charmap[$encodedString[$c]];
|
||||||
|
$bitsWritten = 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
$byte |= $newBits;
|
||||||
|
|
||||||
|
if ($bitsWritten == 8 || $c == $lastNotatedIndex) {
|
||||||
|
// Byte is ready to be written
|
||||||
|
$rawString .= pack('C', $byte);
|
||||||
|
|
||||||
|
if ($c != $lastNotatedIndex) {
|
||||||
|
// Start the next byte
|
||||||
|
$bitsWritten = $unusedBitCount;
|
||||||
|
$byte = ($charmap[$encodedString[$c]]
|
||||||
|
^ ($newBits << $unusedBitCount)) << 8 - $bitsWritten;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} elseif ($strict) {
|
||||||
|
// Unable to decode character; abort
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $rawString;
|
||||||
|
}
|
||||||
|
}
|
||||||
88
metadata/include/otp/GoogleAuthenticator.php
Normal file
88
metadata/include/otp/GoogleAuthenticator.php
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
<?php
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
|
||||||
|
include_once("FixedByteNotation.php");
|
||||||
|
|
||||||
|
|
||||||
|
class GoogleAuthenticator {
|
||||||
|
static $PASS_CODE_LENGTH = 6;
|
||||||
|
static $PIN_MODULO;
|
||||||
|
static $SECRET_LENGTH = 10;
|
||||||
|
|
||||||
|
public function __construct() {
|
||||||
|
self::$PIN_MODULO = pow(10, self::$PASS_CODE_LENGTH);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function checkCode($secret,$code) {
|
||||||
|
$time = floor(time() / 30);
|
||||||
|
for ( $i = -1; $i <= 1; $i++) {
|
||||||
|
|
||||||
|
if ($this->getCode($secret,$time + $i) == $code) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCode($secret,$time = null) {
|
||||||
|
|
||||||
|
if (!$time) {
|
||||||
|
$time = floor(time() / 30);
|
||||||
|
}
|
||||||
|
$base32 = new FixedBitNotation(5, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567', TRUE, TRUE);
|
||||||
|
$secret = $base32->decode($secret);
|
||||||
|
|
||||||
|
$time = pack("N", $time);
|
||||||
|
$time = str_pad($time,8, chr(0), STR_PAD_LEFT);
|
||||||
|
|
||||||
|
$hash = hash_hmac('sha1',$time,$secret,true);
|
||||||
|
$offset = ord(substr($hash,-1));
|
||||||
|
$offset = $offset & 0xF;
|
||||||
|
|
||||||
|
$truncatedHash = self::hashToInt($hash, $offset) & 0x7FFFFFFF;
|
||||||
|
$pinValue = str_pad($truncatedHash % self::$PIN_MODULO,6,"0",STR_PAD_LEFT);;
|
||||||
|
return $pinValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function hashToInt($bytes, $start) {
|
||||||
|
$input = substr($bytes, $start, strlen($bytes) - $start);
|
||||||
|
$val2 = unpack("N",substr($input,0,4));
|
||||||
|
return $val2[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getUrl($user, $hostname, $secret) {
|
||||||
|
$url = sprintf("otpauth://totp/%s@%s?secret=%s", $user, $hostname, $secret);
|
||||||
|
$encoder = "https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=";
|
||||||
|
$encoderURL = sprintf( "%sotpauth://totp/%s@%s&secret=%s",$encoder, $user, $hostname, $secret);
|
||||||
|
|
||||||
|
return $encoderURL;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function generateSecret() {
|
||||||
|
$secret = "";
|
||||||
|
for($i = 1; $i<= self::$SECRET_LENGTH;$i++) {
|
||||||
|
$c = rand(0,255);
|
||||||
|
$secret .= pack("c",$c);
|
||||||
|
}
|
||||||
|
$base32 = new FixedBitNotation(5, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567', TRUE, TRUE);
|
||||||
|
return $base32->encode($secret);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@ -10,7 +10,7 @@
|
|||||||
<div id="uploadButton"></div>
|
<div id="uploadButton"></div>
|
||||||
<div id="status"></div>
|
<div id="status"></div>
|
||||||
<div id="images"></div>
|
<div id="images"></div>
|
||||||
<script src="js/jquery-1.4.2.min.js"></script>
|
<script src="js/jquery-1.9.1.min.js"></script>
|
||||||
<script src="js/swfupload.js"></script>
|
<script src="js/swfupload.js"></script>
|
||||||
<script src="js/plugins/swfupload.queue.js"></script>
|
<script src="js/plugins/swfupload.queue.js"></script>
|
||||||
<script src="js/main.js"></script>
|
<script src="js/main.js"></script>
|
||||||
|
|||||||
154
metadata/include/swfupload/js/jquery-1.4.2.min.js
vendored
154
metadata/include/swfupload/js/jquery-1.4.2.min.js
vendored
@ -1,154 +0,0 @@
|
|||||||
/*!
|
|
||||||
* jQuery JavaScript Library v1.4.2
|
|
||||||
* http://jquery.com/
|
|
||||||
*
|
|
||||||
* Copyright 2010, John Resig
|
|
||||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
|
||||||
* http://jquery.org/license
|
|
||||||
*
|
|
||||||
* Includes Sizzle.js
|
|
||||||
* http://sizzlejs.com/
|
|
||||||
* Copyright 2010, The Dojo Foundation
|
|
||||||
* Released under the MIT, BSD, and GPL Licenses.
|
|
||||||
*
|
|
||||||
* Date: Sat Feb 13 22:33:48 2010 -0500
|
|
||||||
*/
|
|
||||||
(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i?
|
|
||||||
e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r=
|
|
||||||
j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g,
|
|
||||||
"&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e=
|
|
||||||
true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/,
|
|
||||||
Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&&
|
|
||||||
(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this,
|
|
||||||
a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b===
|
|
||||||
"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,
|
|
||||||
function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)||
|
|
||||||
c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded",
|
|
||||||
L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,
|
|
||||||
"isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+
|
|
||||||
a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f],
|
|
||||||
d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===
|
|
||||||
a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&&
|
|
||||||
!c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari=
|
|
||||||
true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML=" <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
|
|
||||||
var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,
|
|
||||||
parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent=
|
|
||||||
false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n=
|
|
||||||
s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,
|
|
||||||
applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando];
|
|
||||||
else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,
|
|
||||||
a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===
|
|
||||||
w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i,
|
|
||||||
cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.className+" ",
|
|
||||||
i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+b[i]+" ",
|
|
||||||
" ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=
|
|
||||||
this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j<d;j++){var i=
|
|
||||||
e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected=
|
|
||||||
c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
|
|
||||||
a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g,
|
|
||||||
function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split(".");
|
|
||||||
k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a),
|
|
||||||
C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove.call(a,u)}if(f!=
|
|
||||||
null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=
|
|
||||||
e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&&
|
|
||||||
f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;
|
|
||||||
if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
|
|
||||||
fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
|
|
||||||
d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.each(c.data(this,
|
|
||||||
"events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=
|
|
||||||
a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,
|
|
||||||
isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submitBubbles)c.event.special.submit=
|
|
||||||
{setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};
|
|
||||||
if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",
|
|
||||||
e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,
|
|
||||||
"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,
|
|
||||||
d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&
|
|
||||||
!a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},
|
|
||||||
toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j||this.selector,
|
|
||||||
u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),
|
|
||||||
function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];
|
|
||||||
if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
|
|
||||||
e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift();
|
|
||||||
t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D||
|
|
||||||
g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q;if(!g)return[];
|
|
||||||
for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-
|
|
||||||
1)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
|
|
||||||
CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},
|
|
||||||
relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m++)if(p=g[m])g[m]=
|
|
||||||
l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var l=[];
|
|
||||||
h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},
|
|
||||||
CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m,
|
|
||||||
g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},
|
|
||||||
text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},
|
|
||||||
setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return h<l[3]-0},gt:function(g,h,l){return h>l[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=
|
|
||||||
h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0;for(m=p.firstChild;m;m=
|
|
||||||
m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/l>=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m===
|
|
||||||
"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g,
|
|
||||||
h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocumentPosition||
|
|
||||||
!h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createRange(),m=
|
|
||||||
h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&&
|
|
||||||
q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="<a href='#'></a>";
|
|
||||||
if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}();
|
|
||||||
(function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}:
|
|
||||||
function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Until$/,fb=/^(?:parents|prevUntil|prevAll)/,
|
|
||||||
gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;
|
|
||||||
c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j=
|
|
||||||
{},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a===
|
|
||||||
"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",
|
|
||||||
d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?
|
|
||||||
a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType===
|
|
||||||
1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b,d){return hb.test(d)?
|
|
||||||
a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
|
|
||||||
c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
|
|
||||||
wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
|
|
||||||
prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
|
|
||||||
this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
|
|
||||||
return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja,
|
|
||||||
""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&
|
|
||||||
this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagName("tbody")[0]||
|
|
||||||
u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childNodes.length===
|
|
||||||
1?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]);
|
|
||||||
return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["",
|
|
||||||
""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="<table>"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e=
|
|
||||||
c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]?
|
|
||||||
c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja=
|
|
||||||
function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=
|
|
||||||
Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,
|
|
||||||
"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=
|
|
||||||
a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=
|
|
||||||
a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/<script(.|\s)*?\/script>/gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!==
|
|
||||||
"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this},
|
|
||||||
serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),
|
|
||||||
function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,
|
|
||||||
global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&&
|
|
||||||
e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)?
|
|
||||||
"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===
|
|
||||||
false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B=
|
|
||||||
false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since",
|
|
||||||
c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E||
|
|
||||||
d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x);
|
|
||||||
g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===
|
|
||||||
1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b===
|
|
||||||
"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional;
|
|
||||||
if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");
|
|
||||||
this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],
|
|
||||||
"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},
|
|
||||||
animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){(j.specialEasing=
|
|
||||||
j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);
|
|
||||||
this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration===
|
|
||||||
"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||
|
|
||||||
c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;
|
|
||||||
this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=
|
|
||||||
this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,
|
|
||||||
e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||
|
|
||||||
c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in s.documentElement?
|
|
||||||
function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=
|
|
||||||
this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.currentStyle;
|
|
||||||
k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o.offsetLeft}if(c.offset.supportsFixedPosition&&
|
|
||||||
f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
|
|
||||||
a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b);
|
|
||||||
c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,
|
|
||||||
d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-
|
|
||||||
f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset":
|
|
||||||
"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in
|
|
||||||
e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window);
|
|
||||||
5
metadata/include/swfupload/js/jquery-1.9.1.min.js
vendored
Normal file
5
metadata/include/swfupload/js/jquery-1.9.1.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@ -48,7 +48,7 @@ function trts($text)
|
|||||||
$from = 0; // Позиция поиска для итерации
|
$from = 0; // Позиция поиска для итерации
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
$pos1 = strpos($text, 'trt(', $from);
|
$pos1 = strpos($text, 'trt(', $from); //')
|
||||||
if($pos1 !== false)
|
if($pos1 !== false)
|
||||||
{
|
{
|
||||||
$from = $pos1+$pLen+1;
|
$from = $pos1+$pLen+1;
|
||||||
@ -72,6 +72,7 @@ function trts($text)
|
|||||||
//Выбираю из текста ${конкретные} слова для перевода
|
//Выбираю из текста ${конкретные} слова для перевода
|
||||||
function trs($text)
|
function trs($text)
|
||||||
{
|
{
|
||||||
|
if(!$text) return '';
|
||||||
$pos1=0;
|
$pos1=0;
|
||||||
while(true)
|
while(true)
|
||||||
{
|
{
|
||||||
@ -101,20 +102,24 @@ function getAccess($key)
|
|||||||
global $db;
|
global $db;
|
||||||
|
|
||||||
$result=false;
|
$result=false;
|
||||||
|
$sql="select main.p_getaccess(:user_id,:key) as acc;";
|
||||||
|
$stmt = $db->prepare($sql);
|
||||||
if(isset($_SESSION['USER_ID']))
|
if(isset($_SESSION['USER_ID']))
|
||||||
$sql="select main.p_getaccess(".$_SESSION['USER_ID'].",'".$key."') as acc;";
|
$stmt->bindValue(':user_id', $_SESSION['USER_ID'], PDO::PARAM_INT);
|
||||||
else
|
else
|
||||||
$sql="select main.p_getaccess(0,'".$key."') as acc;";
|
$stmt->bindValue(':user_id', 0, PDO::PARAM_INT);
|
||||||
|
$stmt->bindValue(':key', $key, PDO::PARAM_STR);
|
||||||
|
$res=null;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
$res = $db->query($sql);
|
$res=$stmt->execute();
|
||||||
}catch (Exception $e)
|
}catch (Exception $e)
|
||||||
{
|
{
|
||||||
echo $e->getMessage();
|
echo $e->getMessage();
|
||||||
}
|
}
|
||||||
if($res!=NULL && $res->rowCount()>0)
|
if($res && $stmt->rowCount()>0)
|
||||||
{
|
{
|
||||||
while ($row = $res->fetch(PDO::FETCH_NUM))
|
while ($row = $stmt->fetch(PDO::FETCH_NUM))
|
||||||
{
|
{
|
||||||
$result=$row[0];
|
$result=$row[0];
|
||||||
}
|
}
|
||||||
|
|||||||
10718
metadata/jquery.js
vendored
10718
metadata/jquery.js
vendored
File diff suppressed because one or more lines are too long
@ -120,7 +120,6 @@ while ($row = $res->fetch(PDO::FETCH_ASSOC))
|
|||||||
{
|
{
|
||||||
for($j=0;$j<count($tbl->fields);$j++)
|
for($j=0;$j<count($tbl->fields);$j++)
|
||||||
{
|
{
|
||||||
//print $tbl->fields[$j]->name.'='.$tbl->fields[$j]->getValue().'<br>';
|
|
||||||
$stmtU->bindValue(':'.$tbl->fields[$j]->name, $tbl->fields[$j]->getValue(), $tbl->fields[$j]->getPDOType());
|
$stmtU->bindValue(':'.$tbl->fields[$j]->name, $tbl->fields[$j]->getValue(), $tbl->fields[$j]->getPDOType());
|
||||||
}
|
}
|
||||||
print '<br>Update ';
|
print '<br>Update ';
|
||||||
|
|||||||
Reference in New Issue
Block a user