parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Scroller.p — новый стандарт кода

Никита Козин 11.03.2007 17:29 / 11.03.2007 17:30

В соответствии с приведенным и используемым в том числе и мной описанием обновил класс Scroller. Изменений в логике нет, пока что в коде используются русские слова («страницы», «дальше» и «назад»), не знаю, надо ли делать эти строки обязательными при инициализации.
@CLASS
Scroller



# $oScroller[^Scroller::create[
#	$.iItemsCount()
#	$.iItemsPerPage()
#	$.sFormName[page]
#	$.iDirection(-1/0)
#	$.iPage($form:page)
# ]]
# $oScroller.iItemsCount
# $oScroller.iLimit
# $oScroller.iOffset
# $oScroller.iPageCount
# $oScroller.iCurrentPage
# $oScroller.iCurrentPageNumber
# $oScroller.iCurrentPageName
# $oScroller.iDirection
# $oScroller.iFirstPage
# $oScroller.iLastPage
# $oScroller.sFormName
@create[hParams][iIsFullPage]
$hParams[^hash::create[$hParams]]
^if(!def $hParams.iItemsCount){
	^throw[Scroller;Items count must be defined.]
}
^if(!^hParams.iItemsPerPage.int(0)){
	^throw[Scroller;Items per page must be defined and not equal 0.]
}
$self.sMode[xml]
$self.sFormName[^if(def $hParams.sFormName){$hParams.sFormName}{page}]
^if(!def $hParams.iPage){
	$hParams.iPage[$form:[$self.sFormName]]
}
$self.iItemsCount(^hParams.iItemsCount.int(0))
$iLimit(^hParams.iItemsPerPage.int(0))
$iPageCount(^math:ceiling($self.iItemsCount / $iLimit))
^if(^hParams.iDirection.int(0) < 0){
	$iCurrentPage(^hParams.iPage.int($iPageCount))
	^if($iCurrentPage > $iPageCount){
		$iCurrentPage($iPageCount)
	}{
		^if($iCurrentPage < 1){$iCurrentPage(1)}
	}
	$iCurrentPageNumber($iPageCount - $iCurrentPage + 1)
	$iCurrentPageName($iCurrentPageNumber)
	^if($iPageCount && $iCurrentPage < $iPageCount){
		$iIsFullPage(^if($self.iItemsCount % $iLimit){1}{0})
		$iOffset($self.iItemsCount % $iLimit + ($iPageCount - $iCurrentPage - $iIsFullPage) * $iLimit)
	}{
		$iOffset(0)
	}
	$self.iDirection(-1)
	$iFirstPage($iPageCount)
	$iLastPage(1)
}{
	$iCurrentPage(^hParams.iPage.int(1))
	^if($iCurrentPage > $iPageCount){
		$iCurrentPage($iPageCount)
	}{
		^if($iCurrentPage < 1){$iCurrentPage(1)}
	}
	$iCurrentPageNumber($iCurrentPage)
	$iCurrentPageName($iCurrentPage)
	$self.iDirection(+1)
	$iFirstPage(1)
	$iLastPage($iPageCount)
	^if($iPageCount){
		$iOffset(($iCurrentPage - 1) * $iLimit)
	}{
		$iOffset(0)
	}
}
# end @create[]



# ^oScroller.print[
#	$.sMode[html|xml]
#	$.iItemsCount(5)
#	$.sSeparator[:]
#	$.sCanvasTagName[]
#	$.sCanvasTagAttributes[]
#	$.sTitle[Страницы: ]
#	$.sLeftDivider[]
#	$.sRightDivider[|]
#	$.sBackTitle[&larr^; Назад]
#	$.sForwardTitle[Дальше &rarr^;]
#	$.sTargetURL[./]
# ]
@print[hParams][iPageNumber;iItemsCount;iFirstItem;iLastItem;sSeparator;sURLSeparator;sTitle;iCounter;iPage]
^if($iPageCount > 1){
	$hParams[^hash::create[$hParams]]
	^if(!def $hParams.sTargetURL){
		$hParams.sTargetURL[./]
	}
	^if(def $hParams.sMode){
		$sMode[$hParams.sMode]
	}
	$iItemsCount(^hParams.iItemsCount.int(5))
	$iFirstItem($iCurrentPageNumber - $iItemsCount \ 2)
	^if($iFirstItem < 1){
		$iFirstItem(1)
	}
	$iLastItem($iFirstItem + $iItemsCount - 1)
	^if($iLastItem > $iPageCount){
		$iLastItem($iPageCount)
		$iFirstItem($iLastItem - $iItemsCount)
		^if($iFirstItem < 1){$iFirstItem(1)}
	}
	$sSeparator[^if(def $hParams.sSeparator){$hParams.sSeparator}{...}]
	$sURLSeparator[^if(^hParams.sTargetURL.pos[?]>=0){^taint[&]}{?}]
	^if(def $hParams.sCanvasTagName){
		<$hParams.sCanvasTagName $hParams.sCanvasTagAttributes>
	}
	$sTitle[^if(def $hParams.sTitle){$hParams.sTitle}{Страницы: }]
	^if($sMode eq "html"){
		$sTitle
	}{
		<title>$sTitle</title>
		^if(def $hParams.sLeftDivider){<left-divider>$hParams.sLeftDivider</left-divider>}
		^if(def $hParams.sRightDivider){<right-divider>$hParams.sRightDivider</right-divider>}
	}
	^if($iCurrentPage != $iFirstPage){
		^_printItem[
			$.sType[back]
			$.sTitle[^if(def $hParams.sBackTitle){$hParams.sBackTitle}{&larr^; Назад}]
			$.sURL[$hParams.sTargetURL]
			$.sURLSeparator[$sURLSeparator]
			$.iPage(^eval($iCurrentPage - $iDirection))
		]
		^if($sMode eq "html" && def $hParams.sLeftDivider){$hParams.sLeftDivider}
	}
	^if($iFirstItem > 1){
		^_printItem[
			$.sType[first]
			$.sTitle[1]
			$.sURL[$hParams.sTargetURL]
			$.sURLSeparator[$sURLSeparator]
			$.iPage($iFirstPage)
		]
		^if($iFirstItem > 2){
			^_printItem[
				$.sType[separator]
				$.sTitle[$sSeparator]
			]
		}
	}
	^for[iCounter]($iFirstItem;$iLastItem){
		^if($iDirection < 0){
			$iPage($iPageCount - $iCounter + 1)
		}{
			$iPage($iCounter)
		}
		^_printItem[
			^if($iPage == $iCurrentPage){
				$.sType[current]
			}
			$.sTitle[$iCounter]
			$.sURL[$hParams.sTargetURL]
			$.sURLSeparator[$sURLSeparator]
			$.iPage($iPage)
		]
	}
	^if($iLastItem < $iPageCount){
		^if($iLastItem < $iPageCount - 1){
			^_printItem[
				$.sType[separator]
				$.sTitle[$sSeparator]
			]
		}
		^_printItem[
			$.sType[last]
			$.sTitle[$iPageCount]
			$.sURL[$hParams.sTargetURL]
			$.sURLSeparator[$sURLSeparator]
			$.iPage($iLastPage)
		]
	}
	^if($iCurrentPage != $iLastPage){
		^if($sMode eq "html"){
			^if(def $hParams.sRightDivider){$hParams.sRightDivider}{|}
		}
		^_printItem[
			$.sType[forward]
			$.sTitle[^if(def $hParams.sForwardTitle){$hParams.sForwardTitle}{Вперед &rarr^;}]
			$.sURL[$hParams.sTargetURL]
			$.sURLSeparator[$sURLSeparator]
			$.iPage(^eval($iCurrentPage + $iDirection))
		]
	}
	^if(def $hParams.sCanvasTagName){</$hParams.sCanvasTagName>}
}
# end @print[]



@_printItem[hParams]
$hParams[^hash::create[$hParams]]
^if($sMode eq "html"){
	^if($hParams.sType eq "separator"){
		$result[$hParams.sTitle]
	}{
		^if($hParams.sType ne "current" && def $hParams.iPage){
			$result[<a href="^untaint[html]{$hParams.sURL^if($hParams.iPage != $iFirstPage){${hParams.sURLSeparator}$sFormName=$hParams.iPage}}">$hParams.sTitle</a>]
		}{
			$result[$hParams.sTitle]
		}
	}
}{
	$result[<page
		^if(def $hParams.sType){ type="$hParams.sType"}
		^if($hParams.sType ne "current" && def $hParams.iPage){
			href="^untaint[xml]{^if(def $hParams.sURL){$hParams.sURL}{./}^if($hParams.iPage != $iFirstPage){${hParams.sURLSeparator}$sFormName=$hParams.iPage}}"
		}
		num="$hParams.sTitle"
	/>]
}
# end @_printItem[]