From ab14e4aa0f74e33d50f19add2f6d10ff62a0877e Mon Sep 17 00:00:00 2001 From: Yung Han Khoe Date: Sun, 16 Nov 2008 21:05:27 +0000 Subject: [PATCH] Adding more features to Matrix v2 --- lib/WebGUI/Asset/MatrixListing.pm | 208 ++++++++++++- lib/WebGUI/Asset/Wobject/Matrix.pm | 294 ++++++++++++++++-- www/extras/wobject/Matrix/matrix.js | 74 +++++ .../wobject/Matrix/matrixCompareList.js | 86 +++++ 4 files changed, 614 insertions(+), 48 deletions(-) create mode 100644 www/extras/wobject/Matrix/matrix.js create mode 100644 www/extras/wobject/Matrix/matrixCompareList.js diff --git a/lib/WebGUI/Asset/MatrixListing.pm b/lib/WebGUI/Asset/MatrixListing.pm index 528331e8b..68da4beed 100644 --- a/lib/WebGUI/Asset/MatrixListing.pm +++ b/lib/WebGUI/Asset/MatrixListing.pm @@ -16,7 +16,9 @@ package WebGUI::Asset::MatrixListing; use strict; use Tie::IxHash; -use base 'WebGUI::Asset'; +use Class::C3; +use base qw(WebGUI::AssetAspect::Comments WebGUI::Asset); +#use base 'WebGUI::Asset'; use WebGUI::Utility; @@ -53,7 +55,7 @@ These methods are available from this class: sub addRevision { my $self = shift; - my $newSelf = $self->SUPER::addRevision(@_); + my $newSelf = $self->next::method(@_); return $newSelf; } @@ -110,6 +112,11 @@ sub definition { label =>$i18n->get("version label"), hoverHelp =>$i18n->get("version description") }, + score => { + defaultValue =>0, + autoGenerate =>0, + noFormPost =>1, + }, views => { defaultValue =>0, autoGenerate =>0, @@ -182,7 +189,7 @@ sub definition { className=>'WebGUI::Asset::MatrixListing', properties=>\%properties }); - return $class->SUPER::definition($session, $definition); + return $class->next::method($session, $definition); } @@ -198,7 +205,7 @@ sub definition { sub duplicate { my $self = shift; - my $newAsset = $self->SUPER::duplicate(@_); + my $newAsset = $self->next::method(@_); return $newAsset; } @@ -229,7 +236,7 @@ sub getEditForm { my $session = $self->session; my $db = $session->db; my $matrixId = $self->getParent->getId; - my $tabform = $self->SUPER::getEditForm(); + my $tabform = $self->next::method();#SUPER::getEditForm(); my $i18n = WebGUI::International->new($session, 'Asset_MatrixListing'); #$self->session->style->setScript($self->session->url->extras('FileUploadControl.js'), {type =>'text/javascript'}); @@ -339,7 +346,7 @@ Making private. See WebGUI::Asset::indexContent() for additonal details. sub indexContent { my $self = shift; - my $indexer = $self->SUPER::indexContent; + my $indexer = $self->next::method; $indexer->setIsPublic(0); } @@ -354,7 +361,7 @@ See WebGUI::Asset::prepareView() for details. sub prepareView { my $self = shift; - $self->SUPER::prepareView(); + $self->next::method(); my $template = WebGUI::Asset::Template->new($self->session, $self->getParent->get('detailTemplateId')); $template->prepare; $self->{_viewTemplate} = $template; @@ -372,18 +379,26 @@ Used to process properties from the form posted. sub processPropertiesFromFormPost { my $self = shift; my $session = $self->session; + my $score = 0; - $self->SUPER::processPropertiesFromFormPost; + $self->next::method(@_);#SUPER::processPropertiesFromFormPost; my $attributes = $session->db->read("select * from Matrix_attribute where assetId = ?",[$self->getParent->getId]); while (my $attribute = $attributes->hashRef) { my $name = 'attribute_'.$attribute->{attributeId}; - #my $value = $session->form->process($name); - my $value = $session->form->process($name,$attribute->{fieldType},$attribute->{defaultValue},$attribute); + my $value; + if ($attribute->{fieldType} eq 'MatrixCompare'){ + $value = $session->form->process($name); + $score = $score + $value; + } + else{ + $value = $session->form->process($name,$attribute->{fieldType},$attribute->{defaultValue},$attribute); + } $session->db->write("replace into MatrixListing_attribute (matrixId, matrixListingId, attributeId, value) values (?, ?, ?, ?)", [$self->getParent->getId,$self->getId,$attribute->{attributeId},$value]); } + $self->update({score => $score}); $self->requestAutoCommit; } @@ -407,7 +422,7 @@ sub purge { $db->write("delete from MatrixListing_rating where listingId=?" ,[$self->getId]); $db->write("delete from MatrixListing_ratingSummary where listingId=?" ,[$self->getId]); - return $self->SUPER::purge; + return $self->next::method; } #------------------------------------------------------------------- @@ -420,7 +435,7 @@ This method is called when data is purged by the system. sub purgeRevision { my $self = shift; - return $self->SUPER::purgeRevision; + return $self->next::method; } #------------------------------------------------------------------- @@ -495,6 +510,7 @@ sub view { $var->{emailSent} = 1; } $var->{controls} = $self->getToolbar; + $var->{comments} = $self->getFormattedComments(), $var->{productName} = $var->{title}; $var->{lastUpdated_epoch} = $self->get('lastUpdated'); $var->{lastUpdated_date} = $self->session->datetime->epochToHuman($self->get('lastUpdated'),"%z"); @@ -536,8 +552,57 @@ sub view { my $storage = $file->getStorageLocation; my @files = @{ $storage->getFiles } if (defined $storage); if (scalar(@files)) { - $var->{screenshots} = $file->getFilePreview($storage); + #$var->{screenshots} = $file->getFilePreview($storage); } + $var->{screenshots} = qq| + + + + +|; } # Rating form @@ -641,7 +706,7 @@ sub view { ); $var->{emailForm} = $mailForm->print; - return $self->processTemplate($var,undef, $self->{_viewTemplate}); + return $self->getParent->processStyle($self->processTemplate($var,undef, $self->{_viewTemplate})); } @@ -655,6 +720,9 @@ Redirects to the manufacturerUrl or productUrl and increments clicks. sub www_click { my $self = shift; + + return $self->session->privilege->noAccess() unless $self->canView; + my $session = $self->session; $self->incrementCounter('clicks'); @@ -688,6 +756,118 @@ sub www_edit { #------------------------------------------------------------------- +=head2 www_getScreenshots ( ) + +Returns the screenshots as xml. + +=cut + +sub www_getScreenshots { + my $self = shift; + + return $self->session->privilege->noAccess() unless $self->canView; + + $self->session->http->setMimeType('text/xml'); + + my $xml = qq | + + +|; + + if ( $self->get('screenshots') ) { + my $fileObject = WebGUI::Form::File->new($self->session,{ value=>$self->get('screenshots') }); + my $storage = $fileObject->getStorageLocation; + my $path = $storage->getPath; + my @files = @{ $storage->getFiles } if (defined $storage); + foreach my $file (@files) { + unless ($file =~ m/^thumb-/){ + my $thumb = 'thumb-'.$file; + $xml .= " + + 400 + 300 + <![CDATA[<b>Slide</b> One]]> + + ".$storage->getUrl($file)." + 5 + ".$storage->getUrl($thumb)." + + "; + } + } + } + + $xml .= qq | + + +|; + + return $xml; +} + +#------------------------------------------------------------------- + +=head2 www_getScreenshotsConfig ( ) + +Returns the xml config file for the ukplayer that displays the screenshots. + +=cut + +sub www_getScreenshotsConfig { + my $self = shift; + + return $self->session->privilege->noAccess() unless $self->canView; + + $self->session->http->setMimeType('text/xml'); + + my $xml = qq| + + + ?func=getScreenshots + + 400 + 300 + 0xDDDDEE + 20 + 100 + 100 + + Verdana + 12 + 0xCCCCCC + 0xCCCCCC + 0x000000 + true + + 0xCCCCCC + 0xCCCCCC + 0x000000 + false + + 48 + 36 + 0x000000 + true + 100 + 5 + + false + true + false + false + + + + +|; + + return $xml; +} + +#------------------------------------------------------------------- + =head2 www_rate ( ) Saves a rating of a matrix listing and returns the listing view. diff --git a/lib/WebGUI/Asset/Wobject/Matrix.pm b/lib/WebGUI/Asset/Wobject/Matrix.pm index c4173421a..cc45f4033 100644 --- a/lib/WebGUI/Asset/Wobject/Matrix.pm +++ b/lib/WebGUI/Asset/Wobject/Matrix.pm @@ -15,8 +15,10 @@ $VERSION = "2.0.0"; use strict; use warnings; use Tie::IxHash; +use JSON; use WebGUI::International; use WebGUI::Utility; +use WebGUI::Asset::MatrixListing; use base 'WebGUI::Asset::Wobject'; #---------------------------------------------------------------------------- @@ -94,14 +96,14 @@ sub definition { hoverHelp =>$i18n->get('detail template description'), label =>$i18n->get('detail template label'), }, - ratingDetailTemplateId=>{ - defaultValue =>"matrixtmpl000000000004", - fieldType =>"template", - tab =>"display", - namespace =>"Matrix/RatingDetail", - hoverHelp =>$i18n->get('rating detail template description'), - label =>$i18n->get('rating detail template label'), - }, +# ratingDetailTemplateId=>{ +# defaultValue =>"matrixtmpl000000000004", +# fieldType =>"template", +# tab =>"display", +# namespace =>"Matrix/RatingDetail", +# hoverHelp =>$i18n->get('rating detail template description'), +# label =>$i18n->get('rating detail template label'), +# }, compareTemplateId=>{ defaultValue =>"matrixtmpl000000000002", fieldType =>"template", @@ -328,27 +330,16 @@ sub getCompareForm { my (%options, @listings); tie %options, 'Tie::IxHash'; - if ($self->get('defaultSort') eq 'score'){ - my @unorderedListings = @{ $self->getLineage(['descendants'], { - includeOnlyClasses => ['WebGUI::Asset::MatrixListing'], - returnObjects => 1, - }) }; - foreach my $listing (@unorderedListings) { - } - # sort an array of hashrefs: - # @listings = sort { $$a{'ques'} <=> $$b{'ques'} } @listings; - } - else{ - my $sortDirection = " asc"; - if ($self->get('defaultSort') eq "revisionDate"){ - $sortDirection = " desc"; - } - @listings = @{ $self->getLineage(['descendants'], { - includeOnlyClasses => ['WebGUI::Asset::MatrixListing'], - orderByClause => $self->get('defaultSort').$sortDirection, - returnObjects => 1, - }) }; + my $sortDirection = " asc"; + if ( WebGUI::Utility::isIn($self->get('defaultSort'),qw(revisionDate score)) ){ + $sortDirection = " desc"; } + @listings = @{ $self->getLineage(['descendants'], { + includeOnlyClasses => ['WebGUI::Asset::MatrixListing'], + joinClass => "WebGUI::Asset::MatrixListing", + orderByClause => $self->get('defaultSort').$sortDirection, + returnObjects => 1, + }) }; # Create an options hash based on the orderd array of listings. foreach my $listing (@listings){ $options{$listing->getId} = ''.$listing->get('title').''; @@ -365,17 +356,19 @@ sub getCompareForm { name=>"func", value=>"compare" }) - .WebGUI::Form::checkList($self->session, { - name=>"listingId", - vertical=>1, - value=>\@selectedListingIds, - options=>\%options, - }) + .'
' +# .WebGUI::Form::checkList($self->session, { +# name=>"listingId", +# vertical=>1, +# value=>\@selectedListingIds, +# options=>\%options, +# }) ."
" .WebGUI::Form::submit($self->session,{ value=>"compare" }) .WebGUI::Form::formFooter($self->session); + #.'
'; return $form; } @@ -449,6 +442,24 @@ sub view { my $session = $self->session; my $db = $session->db; + # javascript and css files for compare form datatable + $self->session->style->setScript($self->session->url->extras('yui/build/json/json-min.js'), {type => + 'text/javascript'}); + $self->session->style->setScript($self->session->url->extras('yui/build/connection/connection-min.js'), {type => + 'text/javascript'}); + $self->session->style->setScript($self->session->url->extras('yui/build/get/get-min.js'), {type => + 'text/javascript'}); + $self->session->style->setScript($self->session->url->extras('yui/build/element/element-beta-min.js'), {type => + 'text/javascript'}); + $self->session->style->setScript($self->session->url->extras('yui/build/datasource/datasource-beta-min.js'), {type => + 'text/javascript'}); + $self->session->style->setScript($self->session->url->extras('yui/build/datatable/datatable-beta-min.js'), {type => + 'text/javascript'}); + $self->session->style->setScript($self->session->url->extras('wobject/Matrix/matrix.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'}); + #This automatically creates template variables for all of your wobject's properties. my $var = $self->get; $var->{isLoggedIn} = ($self->session->user->userId ne "1"); @@ -610,6 +621,66 @@ assetData.revisionDate #------------------------------------------------------------------- +=head2 www_compare ( ) + +Returns the compare screen + +=cut + +sub www_compare { + + my $self = shift; + my $var = $self->get; + my @listingIds = @_; + my @columnKeys = ['name']; + #my @listingIds = ['AwioUvaZXmAEaFw20t-x3Q', 'CWNjAHcmh0pEF6WJooomJA']; + unless (scalar(@listingIds)) { + @listingIds = $self->session->form->checkList("listingId"); + } + + $self->session->style->setScript($self->session->url->extras('yui/build/yahoo/yahoo-min.js'), + {type => 'text/javascript'}); + $self->session->style->setScript($self->session->url->extras('yui/build/dom/dom-min.js'), + {type => 'text/javascript'}); + $self->session->style->setScript($self->session->url->extras('yui/build/event/event-min.js'), + {type => 'text/javascript'}); + $self->session->style->setScript($self->session->url->extras('yui/build/json/json-min.js'), {type => + 'text/javascript'}); + $self->session->style->setScript($self->session->url->extras('yui/build/connection/connection-min.js'), + {type => 'text/javascript'}); + $self->session->style->setScript($self->session->url->extras('yui/build/get/get-min.js'), {type => + 'text/javascript'}); + $self->session->style->setScript($self->session->url->extras('yui/build/element/element-beta-min.js'), {type => + 'text/javascript'}); + $self->session->style->setScript($self->session->url->extras('yui/build/datasource/datasource-beta-min.js'), + {type => 'text/javascript'}); + $self->session->style->setScript($self->session->url->extras('yui/build/datatable/datatable-beta-min.js'), + {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/matrixCompareList.js'), {type => + 'text/javascript'}); + $self->session->style->setScript($self->session->url->extras('wobject/Matrix/matrix.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'}); + + foreach my $listingId (@listingIds){ + my $listingId_safe = $listingId; + $listingId_safe =~ s/-//g; + push(@columnKeys, $listingId_safe); + } + + $var->{javascript} = ""; + + return $self->processStyle($self->processTemplate($var,$self->get("compareTemplateId")));; +} + +#------------------------------------------------------------------- + =head2 www_deleteAttribute ( ) Deletes an Attribute, including listing data for this attribute. @@ -805,6 +876,161 @@ sub www_editAttributeSave { #------------------------------------------------------------------- +=head2 www_getCompareFormData ( ) + +Returns the compare form data as JSON. + +=cut + +sub www_getCompareFormData { + + my $self = shift; + my @results; + my $sortDirection = ' asc'; + + $self->session->http->setMimeType("application/json"); +=cut + my @listings = @{ $self->getLineage(['descendants'], { + includeOnlyClasses => ['WebGUI::Asset::MatrixListing'], + joinClass => "WebGUI::Asset::MatrixListing", + orderByClause => $self->get('defaultSort').$sortDirection, + returnObjects => 1, + }) }; +=cut + my $sql = " + select + assetData.title, + assetData.url, + listing.assetId, + listing.views, + listing.compares, + listing.clicks, + listing.lastUpdated + from MatrixListing as listing + left join asset on listing.assetId = asset.assetId + left join assetData on assetData.assetId = listing.assetId and listing.revisionDate = +assetData.revisionDate + where + asset.parentId=? + and asset.state='published' + and asset.className='WebGUI::Asset::MatrixListing' + and assetData.revisionDate=( + select + max(revisionDate) + from + assetData + where + assetData.assetId=asset.assetId + and (status='approved' or status='archived') + ) + and status='approved' + group by + assetData.assetId + order by ".$self->get('defaultSort').$sortDirection; + + my $results = $self->session->db->buildArrayRefOfHashRefs($sql,[$self->getId]); +=cut +push(@results,{ + Title=>$data->{title}, + Views=>$data->{views}, + Compares=>$data->{compares}, + Clicks=>$data->{clicks} + }); +=cut + # Create an options hash based on the orderd array of listings. +=cut + foreach my $listing (@listings){ + push(@results,{Title=>$listing->get('title'),Phone=>'123'}) + #$options{$listing->getId} = ''.$listing->get('title').''; + } +=cut + my $jsonOutput; + $jsonOutput->{ResultSet} = {Result=>$results}; + + return JSON->new->utf8->encode($jsonOutput); +=cut + return JSON->new->utf8->encode({ + ResultSet=>{ + totalResultsAvailable=>1, + totalResultsReturned=>1, + firstResultPosition=>1, + Result=>[{ + Title=>"Pizza Depot", + Phone=>"(408) 245-7760", + City=>"Sunnyvale", + ClickUrl=>"http:\/\/local.yahoo.com\/details?id=21332021&stx=pizza&csz=Sunnyvale+CA" + }] + } + }); +=cut +} + +#------------------------------------------------------------------- + +=head2 www_getCompareListData ( ) + +Returns the compare list data as JSON. + +=cut + +sub www_getCompareListData { + + my $self = shift; + my @listingIds = @_; + unless (scalar(@listingIds)) { + @listingIds = $self->session->form->checkList("listingId"); + } + + my $session = $self->session; + my (@results,$results,@columnDefs); + my $sortDirection = ' asc'; + + foreach my $listingId (@listingIds){ + my $listing = WebGUI::Asset::MatrixListing->new($session,$listingId); + my $listingId_safe = $listingId; + $listingId_safe =~ s/-//g; + push(@columnDefs,{key=>$listingId_safe,label=>$listing->get('title')}); + } + + my $jsonOutput; + $jsonOutput->{ColumnDefs} = \@columnDefs; + + foreach my $category (keys %{$self->getCategories}) { + my $fields = " a.name, a.fieldType "; + my $from = "from Matrix_attribute a"; + my $tableCount = "b"; + foreach my $listingId (@listingIds) { + my $listingId_safe = $listingId; + $listingId_safe =~ s/-//g; + $fields .= ", ".$tableCount.".value as `$listingId_safe`"; + $from .= " left join MatrixListing_attribute ".$tableCount." on a.attributeId=" + .$tableCount.".attributeId and ".$tableCount.".matrixListingId=? "; + $tableCount++; + } + push(@results, @{ $self->session->db->buildArrayRefOfHashRefs( + "select $fields $from where a.category=? and a.assetId=? order by a.name", + [@listingIds,$category,$self->getId] + ) }); + } + foreach my $result (@results){ + foreach my $listingId (@listingIds) { + my $listingId_safe = $listingId; + $listingId_safe =~ s/-//g; + if ($result->{fieldType} eq 'MatrixCompare'){ + $result->{$listingId_safe} = WebGUI::Form::MatrixCompare->new( $self->session, + { value=>$result->{$listingId_safe} },defaultValue=>0)->getValueAsHtml; + } + } + } + + $jsonOutput->{ResultSet} = {Result=>\@results}; + + $session->http->setMimeType("application/json"); + + return JSON->new->utf8->encode($jsonOutput); +} +#------------------------------------------------------------------- + =head2 www_listAttributes ( ) Lists all attributes of this Matrix. diff --git a/www/extras/wobject/Matrix/matrix.js b/www/extras/wobject/Matrix/matrix.js new file mode 100644 index 000000000..824d6c42a --- /dev/null +++ b/www/extras/wobject/Matrix/matrix.js @@ -0,0 +1,74 @@ +var myCompareTable; + +YAHOO.util.Event.addListener(window, "load", function() { + YAHOO.example.XHR_JSON = new function() { + this.formatUrl = function(elCell, oRecord, oColumn, sData) { + elCell.innerHTML = "" + sData + ""; + }; + + this.formatCheckBox = function(elCell, oRecord, oColumn, sData) { + elCell.innerHTML = ""; + }; + + var myColumnDefs = [ + {key:"assetId",label:"",sortable:false,formatter:this.formatCheckBox}, + {key:"title", label:"Name", sortable:true, formatter:this.formatUrl}, + {key:"views", sortable:true}, + {key:"clicks", sortable:true}, + {key:"compares", sortable:true} + ]; + + 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","views","clicks","compares","assetId"] + }; + + this.myDataTable = new YAHOO.widget.DataTable("compareForm", myColumnDefs, + this.myDataSource, {initialRequest:"func=getCompareFormData"}); + + var oColumn = this.myDataTable.getColumn(3); + this.myDataTable.hideColumn(oColumn); + + + var btnAddRows = new YAHOO.widget.Button("hidecolumn"); + btnAddRows.on("click", function(e) { + + //var oColumn = this.myDataTable.getColumn(3); + this.myDataTable.sortColumn(oColumn); + },this,true); + + + var myCallback = function() { + this.set("sortedBy", null); + this.onDataReturnAppendRows.apply(this,arguments); + }; + + }; +}); + +//function sort() { +// myCompareTable.sortColumn() +// var oColumn = myCompareTable.getColumn(3); +// myCompareTable.hideColumn(oColumn); +//} + +function bla() { + var callback1 = { + success : myCallback, + failure : myCallback, + scope : this.myDataTable + }; + this.myDataSource.sendRequest("func=getCompareFormData", + callback1); + + var callback2 = { + success : myCallback, + failure : myCallback, + scope : this.myDataTable + }; + this.myDataSource.sendRequest("func=getCompareFormData", + callback2); +} \ No newline at end of file diff --git a/www/extras/wobject/Matrix/matrixCompareList.js b/www/extras/wobject/Matrix/matrixCompareList.js new file mode 100644 index 000000000..f613dbbd3 --- /dev/null +++ b/www/extras/wobject/Matrix/matrixCompareList.js @@ -0,0 +1,86 @@ +//var myCompareTable; + +YAHOO.util.Event.addListener(window, "load", function() { + YAHOO.example.XHR_JSON = new function() { + + var myColumnDefs = [ + {key:"name"} + ]; + + 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: columnKeys //["name","AwioUvaZXmAEaFw20tx3Q","CWNjAHcmh0pEF6WJooomJA"] + }; + + var uri = "func=getCompareListData"; + for (var i = 0; i < listingIds.length; i++) { + uri = uri+';listingId='+listingIds[i]; + } + + var myDataTable = new YAHOO.widget.DataTable("compareList", myColumnDefs, + this.myDataSource, {initialRequest:uri}); + + //var oColumn = this.myDataTable.getColumn(3); + //this.myDataTable.hideColumn(oColumn); + + + //var btnAddRows = new YAHOO.widget.Button("hidecolumn"); + //btnAddRows.on("click", function(e) { + + //var oColumn = this.myDataTable.getColumn(3); + // this.myDataTable.sortColumn(oColumn); + //},this,true); + + this.myDataSource.doBeforeParseData = function (oRequest, oFullResponse) { + myDataTable.getRecordSet().reset(); + var existingColumns = myDataTable.getColumnSet().keys; + for (var i = 0; i < existingColumns.length; i++) { + if(i > 0){ + myDataTable.removeColumn(existingColumns[1]); + } + } + if (oFullResponse.ColumnDefs) { + var len = oFullResponse.ColumnDefs.length; + + for (var i = 0; i < len; i++) { + var c = oFullResponse.ColumnDefs[i]; + myDataTable.insertColumn(c); + } + } + return oFullResponse; + } + + var myCallback = function() { + this.set("sortedBy", null); + this.onDataReturnAppendRows.apply(this,arguments); + }; + + var myCallback2 = function() { + this.getRecordSet().reset(); + //this.render(); + this.set("sortedBy", null); + this.onDataReturnAppendRows.apply(this,arguments); + this.getRecordSet().reset(); + }; + + + var callback2 = { + success : myCallback, + failure : myCallback, + scope : myDataTable + }; + this.myDataSource.sendRequest("func=getCompareListData;listingId=CWNjAHcmh0pEF6WJooomJA", + callback2); + + }; +}); + +//function sort() { +// myCompareTable.sortColumn() +// var oColumn = myCompareTable.getColumn(3); +// myCompareTable.hideColumn(oColumn); +//} +