//@utf-8
(function($) {
$.csv2table={
name : 'csv2table',
version : '0.02-b-2.8',
date : '2009.1.10',
update : 'http://jsgt.org/lib/jquery/plugin/csv2table/v002/update.txt',
ver : '',
charset : 'utf-8',
doc : 'http://jsgt.org/mt/01/',
demo : 'http://jsgt.org/lib/jquery/plugin/csv2table/v002/test.htm',
author : 'Toshiro Takahashi',
lisence : 'Public Domain',
loadImg : (new Image()).src='./img/icon-loadinfo.gif', //Dafault loading IMG
sortNImg : (new Image()).src='./img/icon-n.gif', //Dafault sort IMG N
sortDImg : (new Image()).src='./img/icon-d-green.gif', //Dafault sort IMG D
sortAImg : (new Image()).src='./img/icon-a-green.gif', //Dafault sort IMG A
setting : [],
data : [],
_rowsAry : [],
_doc : document,
err : [],
f : {
classifyByCol:function(id,colIndex,myCompAry,nolegend){
var toj=$('table',$('#'+id)),oj=$('tr > td:nth-child('+(colIndex+1)+')',toj)
if(!nolegend){
var legend=($('#csv2table-legend-'+id).length==0)?
$('
'):$('#csv2table-legend-'+id);
toj.after(
legend.append(
$('')
.append($.csv2table._rowsAry[id][0][colIndex]+' ')
)
)
}
//Eg. myCompAry is [['>10','#eee'],['>30','#ddd'],['>50','#bbb']]
$.each(myCompAry,function(){
oj
.filter(':_csv2table_myComp('+this[0]+')')
.css('background',this[1])
if(!nolegend){
var hanrei=''
+' '
$('#csv2table-legend-'+id+'-'+colIndex)
.append(hanrei+this[0].split('<').join('<')+' ' )
}
})
}
}
}
$.fn.csv2table= function (url,setting){
if(!setting)var setting={};
var contents=$.fn.csv2table.el=this,id=this[0].id,
op = $.csv2table.setting[id] = $.extend({
url : url,
nowloadingImg : $.csv2table.loadImg, //Image of now loading...
nowloadingMsg : 'now loading...', //Massege of now loading...
sortNImg : $.csv2table.sortNImg, //Sort IMG N
sortDImg : $.csv2table.sortDImg, //Sort IMG D
sortAImg : $.csv2table.sortAImg, //Sort IMG A
removeDoubleQuote : true, // remove " of "hogehoge"
appendThead : null, //Array. Append a Row of Thead.(e.g. ["Name","Address"])
col_midasi : 0, //
row_sep : '\n', //Separator of rows. default '\n'
col_sep : ',', //Separator(,|\t|;) of cols. default ','
sortable : true, //col sort
select : '*', //select col lists. default '*' is all cols.
orderBy : null, //array of sort col. orderBy:[[colNo|'colName','sortType']]
where : null, //array of where : [{'ColName':'condition'}] etc.
limit : null, //array of limit : [offset,len]
col0color : true, //col[0] color sync jQchart line_strokeStyle
numArignRight : true, //Set the Number TD to "textAlign : 'right'"
onload : null, //collback function (id,op,data,ary) {}
use : null, // 'jqchart:line#canvasID'
className_div : 'csv2table-div', //className
className_table : 'csv2table-table', //className
className_table_th : 'csv2table-table-th', //className
className_table_td : 'csv2table-table-td', //className
className_hoboNum : 'csv2table-hoboNum', //className
className_sortMark : 'csv2table-sortMark', //className
className_legends : 'csv2table-legends' //className
},setting);
if(op.row_sep=='\n')op.row_sep_reg='\r\n'
if(op.use){
op.use_api = op.use.split(':')[0]
op.use_api_type = op.use.split('#')[0]
op.use_api_box = op.use.split(':')[1].split('#')[1]
}
//Custom Selectors
$.extend($.expr[":"], {
//_csv2table_hoboNum is match to number or Number-like (3 digit + comma)
//for Set the Number TD to "textAlign : 'right'"
_csv2table_hoboNum : function(a,i,m){
var b = a.textContent||a.innerText||$(a).text()||"",
c = Number(
chkThreeComma(b).split(",").join("")
);
return !isNaN(b) || !isNaN(c);
},
//
_csv2table_myComp : function(a,i,m){
var b = Number(
(a.textContent||a.innerText||$(a).text()||"")
.replace(" ","")
.replace(/,/g,'')
);
return typeof b=='number'? eval(b+m[3]):false;
}
});
$(contents).before('
'+op.nowloadingMsg+'
' )
$.get(url+"?"+(new Date()).getTime(),"",function(data,textStatus){
if(op.appendThead)data=op.appendThead.join(op.col_sep)+op.row_sep+data;
$.csv2table.data[id]=data;
$(".csv2table-loading").fadeOut();
$(contents).css("display","none").html(mkRowsAry(id,data));
setCSS(id);
$(contents).fadeIn();
if(op.use_api=='jqchart'){
if(op.use_api_type=='jqchart:line')op.type=$.csv2table.setting[id].type='line';
else if(op.use_api_type=='jqchart:bar')op.type=$.csv2table.setting[id].type='bar';
useChart(id,op,data,$.csv2table._rowsAry[id]);
}
if($.csv2table.setting[id].onload)$.csv2table.setting[id].onload(id,op,data,$.csv2table._rowsAry[id]);
});
$.csv2table.wrtTable=function(colIndex,id,callback){
$("#"+id).html(mkRowsAry(id,$.csv2table._rowsAry[id],op['th'+colIndex],colIndex));
setCSS(id);
if(op.use_api=='jqchart'){
if(op.use_api_type=='jqchart:line')op.type=$.csv2table.setting[id].type='line';
else if(op.use_api_type=='jqchart:bar')op.type=$.csv2table.setting[id].type='bar';
useChart(id,op,$.csv2table.data[id],$.csv2table._rowsAry[id]);
}
if($.csv2table.setting[id].onload)$.csv2table.setting[id].onload(id,op,$.csv2table.data[id],$.csv2table._rowsAry[id]);
if(callback)callback(op['th'+colIndex],colIndex,id);
}
$.csv2table.reset=function(id){
rowsAry=$.csv2table._rowsAry[id]=escapeStrComma(op.col_sep,op.row_sep,$.csv2table.data[id],op.removeDoubleQuote);
$("#"+id).html( mkTable(id,rowsAry));
if(op.sortable)$('#'+id+' table th .sortimg').attr('src',op.sortNImg )
setCSS(id);
if(op.use_api=='jqchart'){
if(op.use_api_type=='jqchart:line')op.type=$.csv2table.setting[id].type='line';
else if(op.use_api_type=='jqchart:bar')op.type=$.csv2table.setting[id].type='bar';
useChart(id,op,$.csv2table.data[id],$.csv2table._rowsAry[id]);
}
}
function orderWk(ary,sortType,colIndex){
ary.head=ary.slice(0,op.col_midasi+1)
var rowsAry=ary.slice(op.col_midasi+1,ary.length)
rowsAry=sortwk(rowsAry,sortType,colIndex);
rowsAry=ary=ary.head.concat(rowsAry)
return rowsAry
}
function mkRowsAry(id,data,sortType,colIndex){
var rowsAry=null,rewrite=true,//zanntei
ofs,len
if(sortType && rewrite){
rowsAry=$.csv2table._rowsAry[id]=orderWk(data,sortType,colIndex);
} else {
rowsAry=$.csv2table._rowsAry[id]=escapeStrComma(op.col_sep,op.row_sep,data,op.removeDoubleQuote);
if(op.where){
var _rowsAry = rowsAry,
rowsAry = [],
wlen = op.where.length-1,
colNamesArry =_rowsAry[0] ;
for(var i=_rowsAry.length-1 ;i> 0;i--){ //最終行はheaderなので無視
var sikis='',siki='',colValue='',value='',colNo=null;
for(var j=0,ok=false;j<=wlen;j++){
if(op.where[j]=='&&' || op.where[j]=='||'){
siki =op.where[j];
sikis += " " +siki;ok=true;
} else {
if(typeof op.where[j].length=='number'){
colNo=op.where[j][0]; value=$.trim(op.where[j][1]);
} else if(typeof op.where[j]=='object'){
for(var k in op.where[j]){
var colName=$.trim(k);value=$.trim(op.where[j][k]);break;
}
colNo= $.inArray(colName, colNamesArry);//get colNo
} else ok=errLog('op.where operetor');
if(value.match(/^==(.*)/g)){
siki = '"'+_rowsAry[i][colNo]+'"=="'+RegExp.$1+'"';
sikis += " " +siki;ok=true;
} else if(value.match(/^like\s*(.*)/g)){
var reg= RegExp.$1;
reg= reg.split('\\_').join('###adrsr###') ; //escape _
reg= reg.replace(/_/g,'.') ;
reg= reg.split('###adrsr###').join('_') ;
reg= reg.split('\\%').join('###parst###') ; //escape %
reg= reg.replace(/%/g,'.*') ;
reg= reg.split('###parst###').join('%') ;
reg= '^'+reg+'$' ;
siki=(_rowsAry[i][colNo].match(new RegExp(reg,'g')))?true:false;
sikis += " " +siki;ok=true;
} else if(chkThreeComma(_rowsAry[i][colNo])){
colValue=_rowsAry[i][colNo].split(',').join('');
siki = colValue+value.split(',').join('');
if(chkSiki(siki) != null){
sikis += " " +siki;ok=true;
} else ok=errLog('op.where operetor');
} else {
colValue= _rowsAry[i][colNo] ;
siki = colValue+value;
if(chkSiki(siki) != null){
sikis += " " +siki;ok=true;
} else ok=errLog('op.where operetor');
}
}
}
if(eval(sikis) && ok)rowsAry.unshift(_rowsAry[i]);
}
rowsAry.unshift(_rowsAry[0]);
$.csv2table._rowsAry[id]=rowsAry;
}
resetSortImg(id);
if(op.orderBy){
var cv,orderlen = op.orderBy.length-1;
for(var i=orderlen ;i>=0;i--){
var cv=getColNoAndValue(op.orderBy[i],rowsAry[0]);
rowsAry=$.csv2table._rowsAry[id]=orderWk(
rowsAry,cv.val,cv.cln
)
}
}
if(op.limit){
var lmt=op.limit,lmlen=lmt.length,_rowsAry=[],zan,end;
if(lmlen==1)ofs=1,len=lmt[0];
else if(lmlen==2)ofs=lmt[0]+1,len=lmt[1];
else ofs=1,len=rowsAry.length;
zan=rowsAry.length-ofs;
if(len>zan)len=zan;
end=ofs+len;
for(var i=rowsAry.length;i>0;i--){
if(ofs<=i && i\!=][=]{0,}[0-9]*$/g)
}
function mkTable(id,rowsAry){
if(!rowsAry)return
var row=rowsAry.length,col=rowsAry[0].length,
s=op.col_midasi+1
var htm="";
//見出し行の処理
htm+= "";
for (var k=0; k"
+ rowsAry[op.col_midasi][k];
if(op.sortable)
htm+= "
"
htm+= "";
if(!op['th'+k])op['th'+k]=null;//memo of sortType
}
htm+= "
";
//data行の処理
for (var i=s; i";
//列の処理
for (var j=0; j"
+ rowsAry[i][j]
+ "";
}
htm+= "";
}
var tableHtm=$.csv2table._doc.getElementById(id)
.innerHTML="";
return tableHtm;
}
////
// 並べ替え
// @parame dataAry 並べ替え対象配列
// @parame sortType 昇順A|降順D
// @parame colIndex ソート列
//
function sortwk(dataAry,sortType,colIndex){
if(!dataAry)return ;
sortType=sortType.toUpperCase();
if(sortType=="D")op['th'+colIndex]='D';
else op['th'+colIndex]='A';
var ci=colIndex,
are3comma=chkThreeComma(dataAry[0][ci]),
mved3comma=are3comma.split(",").join("");
if(!isNaN(dataAry[0][ci]) || !isNaN(mved3comma)){
var rowlen=dataAry.length;
if(are3comma != 'null'){
for(var j=0;j ""+b[ci])?-1:1):
((""+a[ci] > ""+b[ci])?1:-1);
}
)
}
return dataAry;
}
function escapeStrComma(col_sep,row_sep,oj,removeDoubleQuote){
var rdq=(removeDoubleQuote)?'':'"';
//mk dmy for comma in "
var dmy =['-###','###-'],cnt=0,r;
cnt=(function mkdmy(cnt){
if(!(
oj.indexOf((dmy[0]+'comma'+cnt+dmy[1]))==-1 ||
oj.indexOf((dmy[0]+'rn'+cnt+dmy[1]))==-1 ||
oj.indexOf((dmy[0]+'wDquote'+cnt+dmy[1]))==-1
))mkdmy( ++cnt )
else void(0)
return cnt;
})(cnt)
var reg='(["](.|(\r\n))*?(["]$|["][,('+op.row_sep_reg+')]))',
dmystr_comma=''+(dmy[0]+'comma'+cnt+dmy[1]) ,
dmystr_rn=''+(dmy[0]+'rn'+cnt+dmy[1]) ,
dmystr_wDquote=''+(dmy[0]+'wDquote'+cnt+dmy[1]) ;
escape= oj.replace('""',dmystr_wDquote);
escape= escape.replace(
new RegExp(reg,"g"),
function (after,before,index) {
after= after
.replace(/(\r\n)(?!$)/g,dmystr_rn)
.replace(/,(?!$)/g,dmystr_comma)
return after
}
)
if(op.select == '*'||op.select == ['*'])
r=$.csv2table._rowsAry[id]=mkArray(escape,op.col_sep,op.row_sep);
else r=$.csv2table._rowsAry[id]=mkSelectedArray(escape,op.col_sep,op.row_sep,op.select)
var b=[],rowlen=r.length,collen=r[0].length;
for(var i=0;i