making all Matrix datatables templatable

This commit is contained in:
Yung Han Khoe 2009-05-30 14:43:41 +00:00
parent b0a1e20053
commit 398f5203f4
10 changed files with 20 additions and 635 deletions

View file

@ -710,8 +710,6 @@ sub view {
{type =>'text/javascript'});
$self->session->style->setScript($self->session->url->extras('yui/build/button/button-min.js'),
{type =>'text/javascript'});
$self->session->style->setScript($self->session->url->extras('wobject/Matrix/matrixListing.js'), {type =>
'text/javascript'});
$self->session->style->setLink($self->session->url->extras('yui/build/datatable/assets/skins/sam/datatable.css'),
{type =>'text/css', rel=>'stylesheet'});

View file

@ -635,8 +635,6 @@ sub view {
'text/javascript'});
$self->session->style->setScript($self->session->url->extras('yui/build/button/button-min.js'), {type =>
'text/javascript'});
$self->session->style->setScript($self->session->url->extras('wobject/Matrix/matrix.js'), {type =>
'text/javascript'});
my ($varStatistics,$varStatisticsEncoded);
my $var = $self->get;
@ -646,7 +644,7 @@ sub view {
$var->{exportAttributes_url} = $self->getUrl('func=exportAttributes');
$var->{listAttributes_url} = $self->getUrl('func=listAttributes');
$var->{search_url} = $self->getUrl('func=search');
$var->{compareForm_url} = $self->getUrl();
$var->{matrix_url} = $self->getUrl();
my $maxComparisons;
if($self->session->user->isVisitor){
@ -658,10 +656,7 @@ sub view {
else{
$maxComparisons = $self->get('maxComparisonsPrivileged');
}
$var->{javascript} = "<script type='text/javascript'>\n".
"var maxComparisons = ".$maxComparisons.";\n".
"var matrixUrl = '".$self->getUrl."';\n".
"</script>";
$var->{maxComparisons} = $maxComparisons;
if ($self->canEdit){
# Get all the MatrixListings that are still pending.
@ -880,8 +875,6 @@ sub www_compare {
{type =>'text/javascript'});
$self->session->style->setScript($self->session->url->extras('yui/build/container/container-min.js'),
{type =>'text/javascript'});
$self->session->style->setScript($self->session->url->extras('wobject/Matrix/matrixCompareList.js'), {type =>
'text/javascript'});
$self->session->style->setLink($self->session->url->extras('yui/build/datatable/assets/skins/sam/datatable.css'),
{type =>'text/css', rel=>'stylesheet'});
$self->session->style->setScript($self->session->url->extras('hoverhelp.js'), {type =>
@ -905,13 +898,12 @@ sub www_compare {
$listingId_safe =~ s/-/_____/g;
push(@responseFields, $listingId_safe, $listingId_safe."_compareColor");
}
$var->{javascript} = "<script type='text/javascript'>\n".
'var listingIds = new Array('.join(", ",map {'"'.$_.'"'} @listingIds).");\n".
'var responseFields = new Array("attributeId", "name", "description","fieldType", "checked", '.join(", ",map {'"'.$_.'"'} @responseFields).");\n".
"var maxComparisons = ".$maxComparisons.";\n".
"var matrixUrl = '".$self->getUrl."';\n".
"</script>";
$var->{maxComparisons} = $maxComparisons;
$var->{matrixUrl} = $self->getUrl;
$var->{listingIds} = join(", ",map {'"'.$_.'"'} @listingIds);
$var->{responseFields} = '"attributeId", "name", "description","fieldType", "checked", '
.join(", ",map{'"'.$_.'"'} @responseFields);
return $self->processStyle($self->processTemplate($var,$self->get("compareTemplateId")));
}
@ -1170,7 +1162,8 @@ sub www_getCompareFormData {
my @results;
if($form->process("search")){
while (my $result = $self->getListings) {
if ($searchParamList){
foreach my $result (@{$self->getListings}) {
my $matrixListing_attributes = $session->db->buildHashRefOfHashRefs("
select value, fieldType, attributeId from Matrix_attribute
left join MatrixListing_attribute as listing using(attributeId)
@ -1192,8 +1185,16 @@ sub www_getCompareFormData {
$result->{checked} = 'checked';
}
}
$result->{assetId} =~ s/-/_____/g;
push @results, $result;
$result->{assetId} =~ s/-/_____/g;
push @results, $result;
}
}
else{
foreach my $result (@{$self->getListings}) {
$result->{checked} = 'checked';
$result->{assetId} =~ s/-/_____/g;
push @results, $result;
}
}
}else{
foreach my $result (@{$self->getListings}) {
@ -1382,8 +1383,6 @@ sub www_search {
{type =>'text/javascript'});
$self->session->style->setScript($self->session->url->extras('yui/build/button/button-min.js'),
{type =>'text/javascript'});
$self->session->style->setScript($self->session->url->extras('wobject/Matrix/matrixSearch.js'), {type =>
'text/javascript'});
$self->session->style->setLink($self->session->url->extras('yui/build/datatable/assets/skins/sam/datatable.css'),
{type =>'text/css', rel=>'stylesheet'});

View file

@ -1,141 +0,0 @@
YAHOO.util.Event.addListener(window, "load", function() {
YAHOO.example.XHR_JSON = new function() {
this.formatUrl = function(elCell, oRecord, oColumn, sData) {
elCell.innerHTML = "<a href='" + oRecord.getData("url") + "'>" + sData + "</a>";
};
this.formatCheckBox = function(elCell, oRecord, oColumn, sData) {
var innerHTML = "<input type='checkbox' name='listingId' value='" + sData + "' id='" + sData + "_checkBox'";
if(typeof(oRecord.getData("checked")) != 'undefined' && oRecord.getData("checked") == 'checked'){
innerHTML = innerHTML + " checked='checked'";
}
innerHTML = innerHTML + " class='compareCheckBox'>";
elCell.innerHTML = innerHTML;
};
var myColumnDefs = [
{key:"assetId",label:"",sortable:false, formatter:this.formatCheckBox},
{key:"title", label:"", sortable:true, formatter:this.formatUrl},
{key:"views", sortable:true, sortOptions:{defaultDir:YAHOO.widget.DataTable.CLASS_DESC}},
{key:"clicks", sortable:true, sortOptions:{defaultDir:YAHOO.widget.DataTable.CLASS_DESC}},
{key:"compares", sortable:true, sortOptions:{defaultDir:YAHOO.widget.DataTable.CLASS_DESC}},
{key:"lastUpdated", sortable:true, sortOptions:{defaultDir:YAHOO.widget.DataTable.CLASS_DESC}}
];
var uri = "func=getCompareFormData";
if(typeof(listingIds) != 'undefined'){
uri = uri + ';__listingId_isIn=1';
for (var i = 0; i < listingIds.length; i++) {
uri = uri+';listingId='+listingIds[i];
}
}
this.myDataSource = new YAHOO.util.DataSource(YAHOO.util.Dom.get("compareFormTable"));
this.myDataSource.responseType = YAHOO.util.DataSource.TYPE_HTMLTABLE;
this.myDataSource.responseSchema = {
fields: [{key: "checked"},"assetId","title",{key: "views", parser: "number"},{key: "clicks", parser: "number"},{key: "compares", parser: "number"},{key: "lastUpdated", parser: "number"},"url"]
};
this.myDataTable = new YAHOO.widget.DataTable("compareForm", myColumnDefs,
this.myDataSource);
this.myDataTable.hideColumn(this.myDataTable.getColumn(2));
this.myDataTable.hideColumn(this.myDataTable.getColumn(3));
this.myDataTable.hideColumn(this.myDataTable.getColumn(4));
this.myDataTable.hideColumn(this.myDataTable.getColumn(5));
if(document.getElementById("sortByViews")){
var btnSortByViews = new YAHOO.widget.Button("sortByViews");
btnSortByViews.on("click", function(e) {
this.myDataTable.sortColumn(this.myDataTable.getColumn(2));
var request = YAHOO.util.Connect.asyncRequest('POST', matrixUrl + "?func=setSort;sort=views");
},this,true);
}
if(document.getElementById("sortByClicks")){
var btnSortByClicks = new YAHOO.widget.Button("sortByClicks");
btnSortByClicks.on("click", function(e) {
this.myDataTable.sortColumn(this.myDataTable.getColumn(3));
var request = YAHOO.util.Connect.asyncRequest('POST', matrixUrl + "?func=setSort;sort=clicks");
},this,true);
}
if(document.getElementById("sortByCompares")){
var btnSortByCompares = new YAHOO.widget.Button("sortByCompares");
btnSortByCompares.on("click", function(e) {
this.myDataTable.sortColumn(this.myDataTable.getColumn(4));
var request = YAHOO.util.Connect.asyncRequest('POST', matrixUrl + "?func=setSort;sort=compares");
},this,true);
}
if(document.getElementById("sortByUpdated")){
var btnSortByUpdated = new YAHOO.widget.Button("sortByUpdated");
btnSortByUpdated.on("click", function(e) {
this.myDataTable.sortColumn(this.myDataTable.getColumn(5));
var request = YAHOO.util.Connect.asyncRequest('POST', matrixUrl + "?func=setSort;sort=lastUpdated");
},this,true);
}
if(document.getElementById("sortByName")){
var btnSortByName = new YAHOO.widget.Button("sortByName");
btnSortByName.on("click", function(e) {
this.myDataTable.sortColumn(this.myDataTable.getColumn(1));
var request = YAHOO.util.Connect.asyncRequest('POST', matrixUrl + "?func=setSort;sort=lastUpdated");
},this,true);
}
var myCallback = function() {
this.set("sortedBy", null);
this.onDataReturnAppendRows.apply(this,arguments);
};
var compareFormButton = function() {
var compareCheckBoxes = YAHOO.util.Dom.getElementsByClassName('compareCheckBox','input');
var checked = 0;
var checkedCompareBoxes = new Object();
for (var i = compareCheckBoxes.length; i--; ) {
if(compareCheckBoxes[i].checked){
checked++;
checkedCompareBoxes[compareCheckBoxes[i].value] = true;
}
}
if (checked < 2){
alert(tooFewMessage);
}else if (checked > maxComparisons){
alert(tooManyMessage);
}else{
window.document.forms['doCompare'].submit();
}
var elements = window.compareDataTable.getRecordSet().getRecords();
for(j=0; j<elements.length; j++){
var assetId = elements[j].getData('assetId');
if(assetId in checkedCompareBoxes){
elements[j].setData('checked','checked');
}else{
elements[j].setData('checked',null);
}
}
}
if(document.getElementById("compare")){
var btnCompare = new YAHOO.widget.Button("compare",{id:"compareButton"});
btnCompare.on("click", compareFormButton);
}
if(document.getElementById("compare2")){
var btnCompare2 = new YAHOO.widget.Button("compare2",{id:"compareButton2"});
btnCompare2.on("click", compareFormButton);
}
if(document.getElementById("search")){
var btnSearch = new YAHOO.widget.Button("search");
btnSearch.on("click", function(e) {
window.location.href = matrixUrl + '?func=search';
},this,true);
}
window.compareDataTable = this.myDataTable;
};
});

View file

@ -1,251 +0,0 @@
YAHOO.util.Event.addListener(window, "load", function() {
YAHOO.example.XHR_JSON = new function() {
var Dom = YAHOO.util.Dom;
var hideStickies = 0;
this.formatStickied = function(elCell, oRecord, oColumn, sData) {
if(!(oRecord.getData("fieldType") in {'category':'','lastUpdated':''})){
var innerHTML = "<input type='checkBox' class='stickieCheckbox' id='" + oRecord.getData("attributeId") + "_stickied' name='" + oRecord.getData("attributeId") + "' onChange='setStickied(this)'";
if(typeof(oRecord.getData("checked")) != 'undefined' && oRecord.getData("checked") == 'checked'){
innerHTML = innerHTML + " checked='checked'";
}
innerHTML = innerHTML + ">";
elCell.innerHTML = innerHTML;
}
};
this.formatColors = function(elCell, oRecord, oColumn, sData) {
if(!(oRecord.getData("fieldType") in {'category':'','lastUpdated':''})){
var colorField = oColumn.key + "_compareColor";
var color = oRecord.getData(colorField);
if(color){
Dom.setStyle(elCell.parentNode, "background-color", color);
}
elCell.innerHTML = sData;
}else{
elCell.innerHTML = sData;
}
};
this.formatLabel = function(elCell, oRecord, oColumn, sData) {
if(oRecord.getData("fieldType") == 'category'){
elCell.innerHTML = "<b>" +sData + "</b>";
}else{
elCell.innerHTML = sData;
if(oRecord.getData("description")){
elCell.innerHTML = elCell.innerHTML + "<div class='wg-hoverhelp'>" + oRecord.getData("description") +"</div>";
}
}
};
YAHOO.widget.DataTable.Formatter.formatColors = this.formatColors;
var myColumnDefs = [
{key:"stickied",formatter:this.formatStickied,label:""},
{key:"name",formatter:this.formatLabel,label:""}
];
this.myDataSource = new YAHOO.util.DataSource("?");
this.myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
this.myDataSource.connXhrMode = "queueRequests";
this.myDataSource.responseSchema = {
resultsList: "ResultSet.Result",
fields: responseFields
};
var uri = "func=getCompareListData";
for (var i = 0; i < listingIds.length; i++) {
uri = uri+';listingId='+listingIds[i];
}
var initAttributeHoverHelp = function() {
initHoverHelp('compareList');
}
var myDataTable = new YAHOO.widget.DataTable("compareList", myColumnDefs,
this.myDataSource, {initialRequest:uri});
myDataTable.subscribe("initEvent", initAttributeHoverHelp);
window.removeListing = function(key) {
myDataTable.hideColumn(myDataTable.removeColumn(key));
}
this.myDataSource.doBeforeParseData = function (oRequest, oFullResponse) {
this.responseSchema.fields = oFullResponse.ResponseFields;
var existingColumns = myDataTable.getColumnSet().keys;
for (var i = 0; i < existingColumns.length; i++) {
if(i > 1){
// after deleting a column the next column will
// allways be no. 2 (the third in the array)
myDataTable.removeColumn(existingColumns[2]);
}
}
if (oFullResponse.ColumnDefs) {
var len = oFullResponse.ColumnDefs.length;
for (var i = 0; i < len; i++) {
var c = oFullResponse.ColumnDefs[i];
oFullResponse.ColumnDefs[i].label = "<a href='"+ oFullResponse.ColumnDefs[i].url +"'>" + oFullResponse.ColumnDefs[i].label + "</a> <a href='javascript:removeListing(\""+oFullResponse.ColumnDefs[i].key+"\")'><img src='/extras/toolbar/bullet/delete.gif' border='0'></a>"
myDataTable.insertColumn(c);
}
}
return oFullResponse;
}
var myCallback = function() {
this.set("sortedBy", null);
this.onDataReturnAppendRows.apply(this,arguments);
initHoverHelp('compareList');
};
var callback2 = {
success : myCallback,
failure : myCallback,
scope : myDataTable
};
if(document.getElementById("compare3")){
var btnCompare3 = new YAHOO.widget.Button("compare3",{id:"compareButton3"});
btnCompare3.on("click", function(e) {
var compareCheckBoxes = YAHOO.util.Dom.getElementsByClassName('compareCheckBox','input');
var checked = 0;
var checkedCompareBoxes = new Object();
for (var i = compareCheckBoxes.length; i--; ) {
if(compareCheckBoxes[i].checked){
checked++;
checkedCompareBoxes[compareCheckBoxes[i].value] = true;
}
}
if (checked < 2){
alert(tooFewMessage);
}else if (checked > maxComparisons){
alert(tooManyMessage);
}else{
//window.document.forms['doCompare'].submit();
var uri = "func=getCompareListData";
for (var i = compareCheckBoxes.length; i--; ) {
if(compareCheckBoxes[i].checked == true){
uri = uri+';listingId='+compareCheckBoxes[i].value;
}
}
myDataTable.getRecordSet().reset();
myDataTable.refreshView();
myDataTable.showTableMessage('Loading...');
this.myDataSource.sendRequest(uri,callback2);
}
},this,true);
}
if(document.getElementById("stickied")){
var btnStickied = new YAHOO.widget.Button("stickied");
btnStickied.on("click", function(e) {
var elements = myDataTable.getRecordSet().getRecords();
if(hideStickies == 0){
// hide non-selected attributes
for(i=0; i<elements.length; i++){
if(!(elements[i].getData('fieldType') in {'category':'','lastUpdated':''})){
var attributeId = elements[i].getData('attributeId');
var checkBox = Dom.get(attributeId+"_stickied");
if (checkBox.checked == false){
elRow = myDataTable.getTrEl(elements[i]);
Dom.setStyle(elRow, "display", "none");
}
}
}
hideStickies = 1;
}else{
// show all attributes
for(i=0; i<elements.length; i++){
if(!(elements[i].getData('fieldType') in {'category':'','lastUpdated':''})){
var attributeId = elements[i].getData('attributeId');
var checkBox = Dom.get(attributeId+"_stickied");
if (checkBox.checked == false){
elRow = myDataTable.getTrEl(elements[i]);
Dom.setStyle(elRow, "display", "table-row");
}
}
}
hideStickies = 0;
}
},this,true);
}
};
});
YAHOO.util.Event.addListener(window, "load", function() {
YAHOO.example.XHR_JSON2 = new function() {
this.formatUrl = function(elCell, oRecord, oColumn, sData) {
elCell.innerHTML = "<a href='" + oRecord.getData("url") + "'>" + sData + "</a>";
};
this.formatCheckBox = function(elCell, oRecord, oColumn, sData) {
var innerHTML = "<input type='checkbox' name='listingId' value='" + sData + "' id='" + sData + "_checkBox'";
if(typeof(oRecord.getData("checked")) != 'undefined' && oRecord.getData("checked") == 'checked'){
innerHTML = innerHTML + " checked='checked'";
}
innerHTML = innerHTML + " class='compareCheckBox'>";
elCell.innerHTML = innerHTML;
};
var myColumnDefs = [
{key:"assetId",label:"",sortable:false, formatter:this.formatCheckBox},
{key:"title", label:"", sortable:true, formatter:this.formatUrl},
{key:"views", sortable:true, sortOptions:{defaultDir:YAHOO.widget.DataTable.CLASS_DESC}},
{key:"clicks", sortable:true, sortOptions:{defaultDir:YAHOO.widget.DataTable.CLASS_DESC}},
{key:"compares", sortable:true, sortOptions:{defaultDir:YAHOO.widget.DataTable.CLASS_DESC}},
{key:"lastUpdated", sortable:true, sortOptions:{defaultDir:YAHOO.widget.DataTable.CLASS_DESC}}
];
var uri = "func=getCompareFormData";
if(typeof(listingIds) != 'undefined'){
uri = uri + ';__listingId_isIn=1';
for (var i = 0; i < listingIds.length; i++) {
uri = uri+';listingId='+listingIds[i];
}
}
this.myDataSource = new YAHOO.util.DataSource(matrixUrl + "?");
this.myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
this.myDataSource.connXhrMode = "queueRequests";
this.myDataSource.responseSchema = {
resultsList: "ResultSet.Result",
fields: ["title",{key: "views", parser: "number"},{key: "clicks", parser: "number"},{key: "compares", parser: "number"},{key: "checked"},{key: "lastUpdated", parser: "number"},"url","assetId"]
};
this.myDataTable = new YAHOO.widget.DataTable("compareForm", myColumnDefs,
this.myDataSource, {initialRequest:uri});
this.myDataTable.hideColumn(this.myDataTable.getColumn(2));
this.myDataTable.hideColumn(this.myDataTable.getColumn(3));
this.myDataTable.hideColumn(this.myDataTable.getColumn(4));
this.myDataTable.hideColumn(this.myDataTable.getColumn(5));
var myCallback = function() {
this.set("sortedBy", null);
this.onDataReturnAppendRows.apply(this,arguments);
};
if(document.getElementById("search")){
var btnSearch = new YAHOO.widget.Button("search");
btnSearch.on("click", function(e) {
window.location.href = matrixUrl + '?func=search';
},this,true);
}
window.compareDataTable = this.myDataTable;
};
});
function setStickied (checkbox) {
if(checkbox.checked == true){
var request = YAHOO.util.Connect.asyncRequest('POST', "?func=setStickied;attributeId="+checkbox.name);
}else{
var request = YAHOO.util.Connect.asyncRequest('POST', "?func=deleteStickied;attributeId="+checkbox.name);
}
}

View file

@ -1,126 +0,0 @@
YAHOO.util.Event.addListener(window, "load", function() {
YAHOO.example.XHR_JSON = new function() {
var Dom = YAHOO.util.Dom;
var hideStickies = 0;
this.formatStickied = function(elCell, oRecord, oColumn, sData) {
if(oRecord.getData("fieldType") != 'category'){
var innerHTML = "<input type='checkBox' class='stickieCheckbox' id='" + oRecord.getData("attributeId") + "_stickied' name='" + oRecord.getData("attributeId") + "' onChange='setStickied(this)'";
if(typeof(oRecord.getData("checked")) != 'undefined' && oRecord.getData("checked") == 'checked'){
innerHTML = innerHTML + " checked='checked'";
}
innerHTML = innerHTML + ">";
elCell.innerHTML = innerHTML;
}
};
this.formatLabel = function(elCell, oRecord, oColumn, sData) {
if(oRecord.getData("fieldType") == 'category'){
elCell.innerHTML = "<b>" +sData + "</b>";
}else{
elCell.innerHTML = sData + "<div class='wg-hoverhelp'>" + oRecord.getData("description") +"</div>";
}
};
this.formatColors = function(elCell, oRecord, oColumn, sData) {
if(oRecord.getData("fieldType") != 'category'){
var color = oRecord.getData("compareColor");
if(color){
Dom.setStyle(elCell.parentNode, "background-color", color);
}
elCell.innerHTML = sData;
}
};
var myColumnDefs = [
{key:"stickied",formatter:this.formatStickied,label:""},
{key:"label",formatter:this.formatLabel,label:""},
{key:"value",label:"",formatter:this.formatColors}
];
this.myDataSource = new YAHOO.util.DataSource("?");
this.myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
this.myDataSource.connXhrMode = "queueRequests";
this.myDataSource.responseSchema = {
resultsList: "ResultSet.Result",
fields: ["label","value","attributeId","fieldType","checked","description","compareColor"]
};
var uri = "func=getAttributes";
if(typeof(revision) != 'undefined'){
uri = uri + ';revision=' + revision;
}
var initAttributeHoverHelp = function() {
initHoverHelp('attributes');
}
var myDataTable = new YAHOO.widget.DataTable("attributes", myColumnDefs,
this.myDataSource, {initialRequest:uri});
myDataTable.subscribe("initEvent", initAttributeHoverHelp);
this.myDataSource.doBeforeParseData = function (oRequest, oFullResponse) {
myDataTable.getRecordSet().reset();
return oFullResponse;
}
var myCallback = function() {
this.set("sortedBy", null);
this.onDataReturnAppendRows.apply(this,arguments);
};
var myCallback2 = function() {
this.set("sortedBy", null);
this.onDataReturnAppendRows.apply(this,arguments);
};
var callback2 = {
success : myCallback,
failure : myCallback,
scope : myDataTable
};
var btnStickied = new YAHOO.widget.Button("stickied");
btnStickied.on("click", function(e) {
var elements = myDataTable.getRecordSet().getRecords();
if(hideStickies == 0){
// hide non-selected attributes
for(i=0; i<elements.length; i++){
if(elements[i].getData('fieldType') != 'category'){
var attributeId = elements[i].getData('attributeId');
var checkBox = Dom.get(attributeId+"_stickied");
if (checkBox.checked == false){
elRow = myDataTable.getTrEl(elements[i]);
Dom.setStyle(elRow, "display", "none");
}
}
}
hideStickies = 1;
}else{
// show all attributes
for(i=0; i<elements.length; i++){
if(elements[i].getData('fieldType') != 'category'){
var attributeId = elements[i].getData('attributeId');
var checkBox = Dom.get(attributeId+"_stickied");
if (checkBox.checked == false){
elRow = myDataTable.getTrEl(elements[i]);
Dom.setStyle(elRow, "display", "table-row");
}
}
}
hideStickies = 0;
}
},this,true);
};
});
function setStickied (checkbox) {
if(checkbox.checked == true){
var request = YAHOO.util.Connect.asyncRequest('POST', "?func=setStickied;attributeId="+checkbox.name);
}else{
var request = YAHOO.util.Connect.asyncRequest('POST', "?func=deleteStickied;attributeId="+checkbox.name);
}
}

View file

@ -1,94 +0,0 @@
YAHOO.util.Event.addListener(window, "load", function() {
YAHOO.example.XHR_JSON = new function() {
var Dom = YAHOO.util.Dom;
this.formatUrl = function(elCell, oRecord, oColumn, sData) {
elCell.innerHTML = "<a href='" + oRecord.getData("url") + "'>" + sData + "</a>";
};
this.formatCheckBox = function(elCell, oRecord, oColumn, sData) {
var innerHTML = "<input type='checkbox' name='listingId' value='" + sData + "' id='" + sData + "_checkBox'";
if(typeof(oRecord.getData("checked")) != 'undefined' && oRecord.getData("checked") == 'checked'){
innerHTML = innerHTML + " checked='checked'";
}
innerHTML = innerHTML + " class='compareCheckBox'>";
elCell.innerHTML = innerHTML;
};
var myColumnDefs = [
{key:"assetId",label:"",sortable:false, formatter:this.formatCheckBox},
{key:"title", label:"Name", sortable:true, formatter:this.formatUrl}
];
var uri = "func=getCompareFormData";
if(typeof(listingIds) != 'undefined'){
for (var i = 0; i < listingIds.length; i++) {
uri = uri+';listingId='+listingIds[i];
}
}
this.myDataSource = new YAHOO.util.DataSource("?");
this.myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
this.myDataSource.connXhrMode = "queueRequests";
this.myDataSource.responseSchema = {
resultsList: "ResultSet.Result",
fields: ["title","checked","url","assetId"]
};
var myDataTable = new YAHOO.widget.DataTable("compareForm", myColumnDefs,
this.myDataSource, {initialRequest:uri});
var myDataSource = this.myDataSource;
var myCallback = function() {
this.set("sortedBy", null);
this.onDataReturnAppendRows.apply(this,arguments);
};
var callback2 = {
success : myCallback,
failure : myCallback,
scope : myDataTable
};
var reloadCompareForm = function() {
var attributeSelects = YAHOO.util.Dom.getElementsByClassName('attributeSelect','select');
var newUri = "func=getCompareFormData;search=1";
for (var i = attributeSelects.length; i--; ) {
var selectedIndex = attributeSelects[i].selectedIndex;
if(attributeSelects[i].value != 'blank' && !(attributeSelects[i].value == '0' && attributeSelects[i][selectedIndex].text == 'No')){
newUri = newUri + ';search_' + attributeSelects[i].id + '=' + attributeSelects[i].value;
}
}
myDataTable.getRecordSet().reset();
myDataTable.refreshView();
myDataTable.showTableMessage('Loading...');
myDataSource.sendRequest(newUri,callback2);
}
var attributeSelects = YAHOO.util.Dom.getElementsByClassName('attributeSelect','select');
for (var i = attributeSelects.length; i--; ) {
attributeSelects[i].onchange = reloadCompareForm;
}
var btnCompare = new YAHOO.widget.Button("compare",{id:"compareButton"});
btnCompare.on("click", function(e) {
var compareCheckBoxes = YAHOO.util.Dom.getElementsByClassName('compareCheckBox','input');
var checked = 0;
for (var i = compareCheckBoxes.length; i--; ) {
if(compareCheckBoxes[i].checked){
checked++;
}
}
if (checked < 2){
alert(tooFewMessage);
}else if (checked > maxComparisons){
alert(tooManyMessage);
}else{
window.document.forms['doCompare'].submit();
}
},this,true);
};
});