<cfcomponent
displayname="DataPager"
output="no"
hint="Handles data pagination mathematics.">
<cfscript>
VARIABLES.Instance = StructNew();
VARIABLES.Instance.Page = 0;
VARIABLES.Instance.Pages = 0;
VARIABLES.Instance.PageSize = 15;
VARIABLES.Instance.Bucket = 0;
VARIABLES.Instance.Buckets = 0;
VARIABLES.Instance.BucketSize = 10;
VARIABLES.Instance.BucketStartPage = 0;
VARIABLES.Instance.BucketEndPage = 0;
VARIABLES.Instance.RecordCount = 0;
VARIABLES.Instance.Offset = 0;
VARIABLES.Instance.Prev = 0;
VARIABLES.Instance.Next = 0;
VARIABLES.Instance.End = 0;
VARIABLES.Instance.Start = 0;
VARIABLES.Instance.URL = "";
</cfscript>
<cffunction name="Init" access="public" returntype="DataPager" output="no"
hint="Returns an initialized data pager instance.">
<cfreturn THIS />
</cffunction>
<cffunction name="Calculate" access="public" returntype="boolean" output="no"
hint="Calculates the page instance data based on the parts that were manually set.">
<cfscript>
if (VARIABLES.Instance.PageSize LT 1){
VARIABLES.Instance.PageSize = 15;
}
if (VARIABLES.Instance.BucketSize LT 1){
VARIABLES.Instance.BucketSize = 5;
}
if (VARIABLES.Instance.Offset GT VARIABLES.Instance.RecordCount){
VARIABLES.Instance.Offset = VARIABLES.Instance.RecordCount;
}
if (VARIABLES.Instance.Offset LT 1){
VARIABLES.Instance.Offset = 1;
}
if (VARIABLES.Instance.RecordCount GT 0){
VARIABLES.Instance.Pages = Ceiling(VARIABLES.Instance.RecordCount / VARIABLES.Instance.PageSize);
VARIABLES.Instance.Page = Ceiling(VARIABLES.Instance.Offset / VARIABLES.Instance.PageSize);
VARIABLES.Instance.Buckets = Ceiling(VARIABLES.Instance.Pages / VARIABLES.Instance.BucketSize);
VARIABLES.Instance.Bucket = Ceiling(VARIABLES.Instance.Page / VARIABLES.Instance.BucketSize);
VARIABLES.Instance.BucketStartPage = (((VARIABLES.Instance.Bucket - 1) * VARIABLES.Instance.BucketSize) + 1);
VARIABLES.Instance.BucketEndPage = (VARIABLES.Instance.BucketStartPage + VARIABLES.Instance.BucketSize - 1);
if (VARIABLES.Instance.BucketEndPage GT VARIABLES.Instance.Pages){
VARIABLES.Instance.BucketEndPage = VARIABLES.Instance.Pages;
}
VARIABLES.Instance.Offset = (((VARIABLES.Instance.Page - 1) * VARIABLES.Instance.PageSize) + 1);
if (VARIABLES.Instance.Page GT 1){
VARIABLES.Instance.Prev = (VARIABLES.Instance.Offset - VARIABLES.Instance.PageSize);
}
if (VARIABLES.Instance.Page LT VARIABLES.Instance.Pages){
VARIABLES.Instance.Next = (VARIABLES.Instance.Offset + VARIABLES.Instance.PageSize);
}
VARIABLES.Instance.Start = VARIABLES.Instance.Offset;
VARIABLES.Instance.End = (VARIABLES.Instance.Offset + VARIABLES.Instance.PageSize - 1);
if (VARIABLES.Instance.End GT VARIABLES.Instance.RecordCount){
VARIABLES.Instance.End = VARIABLES.Instance.RecordCount;
}
}
return(true);
</cfscript>
</cffunction>
<cffunction name="GetBucket" access="public" returntype="numeric" output="no"
hint="Gets the current bucket.">
<cfreturn VARIABLES.Instance.Bucket />
</cffunction>
<cffunction name="GetBucketEndPage" access="public" returntype="numeric" output="no"
hint="Gets the last page in the current bucket.">
<cfreturn VARIABLES.Instance.BucketEndPage />
</cffunction>
<cffunction name="GetBuckets" access="public" returntype="numeric" output="no"
hint="Gets the number of buckets in the list pager.">
<cfreturn VARIABLES.Instance.Buckets />
</cffunction>
<cffunction name="GetBucketSize" access="public" returntype="numeric" output="no"
hint="Gets the bucket size.">
<cfreturn VARIABLES.Instance.BucketSize />
</cffunction>
<cffunction name="GetBucketStartPage" access="public" returntype="numeric" output="no"
hint="Gets the first page in the current bucket.">
<cfreturn VARIABLES.Instance.BucketStartPage />
</cffunction>
<cffunction name="GetEnd" access="public" returntype="numeric" output="no"
hint="Gets the last offset in the current page.">
<cfreturn VARIABLES.Instance.End />
</cffunction>
<cffunction name="GetNext" access="public" returntype="numeric" output="no"
hint="Gets the next page.">
<cfreturn VARIABLES.Instance.Next />
</cffunction>
<cffunction name="GetOffset" access="public" returntype="numeric" output="no"
hint="Gets the current offset">
<cfreturn VARIABLES.Instance.Offset />
</cffunction>
<cffunction name="GetPage" access="public" returntype="numeric" output="no"
hint="Gets the current page.">
<cfreturn VARIABLES.Instance.Page />
</cffunction>
<cffunction name="GetPages" access="public" returntype="numeric" output="no"
hint="Gets the number of pages in the list pager.">
<cfreturn VARIABLES.Instance.Pages />
</cffunction>
<cffunction name="GetPageSize" access="public" returntype="numeric" output="no"
hint="Gets the page size.">
<cfreturn VARIABLES.Instance.PageSize />
</cffunction>
<cffunction name="GetPrev" access="public" returntype="numeric" output="no"
hint="Gets the previous page.">
<cfreturn VARIABLES.Instance.Prev />
</cffunction>
<cffunction name="GetRecordCount" access="public" returntype="numeric" output="no"
hint="Gets the record count.">
<cfreturn VARIABLES.Instance.RecordCount />
</cffunction>
<cffunction name="GetStart" access="public" returntype="numeric" output="no"
hint="Gets the first offset in the current page.">
<cfreturn VARIABLES.Instance.Start />
</cffunction>
<cffunction name="GetURL" access="public" returntype="numeric" output="no"
hint="Gets the base url.">
<cfreturn VARIABLES.Instance.URL />
</cffunction>
<cffunction name="HasMultiplePages" access="public" returntype="boolean" output="no"
hint="Checks to see if the page had more than one page to display.">
<cfreturn (VARIABLES.Instance.Pages GT 1) />
</cffunction>
<cffunction name="ReplaceOffset" access="public" returntype="string" output="no"
hint="Replaces the [OFFSET] with the passed offset in the base url. This gives the user more flexibility as to how the offset is going to be used.">
<cfargument name="Offset" type="numeric" required="yes" />
<cfreturn ReplaceNoCase(VARIABLES.Instance.URL, "[OFFSET]", ARGUMENTS.Offset, "ALL") />
</cffunction>
<cffunction name="SetBucketSize" access="public" returntype="boolean" output="no"
hint="Sets the bucket size (pages per bucket).">
<cfargument name="BucketSize" type="numeric" required="yes" />
<cfset VARIABLES.Instance.BucketSize = ARGUMENTS.BucketSize />
<cfreturn true />
</cffunction>
<cffunction name="SetOffset" access="public" returntype="boolean" output="no"
hint="Sets the page offset.">
<cfargument name="Offset" type="numeric" required="yes" />
<cfset VARIABLES.Instance.Offset = ARGUMENTS.Offset />
<cfreturn true />
</cffunction>
<cffunction name="SetPageSize" access="public" returntype="boolean" output="no"
hint="Sets the page size.">
<cfargument name="PageSize" type="numeric" required="yes" />
<cfset VARIABLES.Instance.PageSize = ARGUMENTS.PageSize />
<cfreturn true />
</cffunction>
<cffunction name="SetRecordCount" access="public" returntype="boolean" output="no"
hint="Sets the record count.">
<cfargument name="RecordCount" type="numeric" required="yes" />
<cfset VARIABLES.Instance.RecordCount = ARGUMENTS.RecordCount />
<cfreturn true />
</cffunction>
<cffunction name="SetUrl" access="public" returntype="boolean" output="no"
hint="Sets the base url.">
<cfargument name="Url" type="string" required="yes" />
<cfset VARIABLES.Instance.Url = ARGUMENTS.Url />
<cfreturn true />
</cffunction>
</cfcomponent>