// step = e.g. 100 // value = 0 to count static S pageNav2(S baseLink, int count, int value, int step, S nVar, O... _) { new L l; baseLink = unnull(baseLink) + (contains(baseLink, "?") ? "&" : "?") + urlencode(nVar) + "="; if (value > 0) l.add(ahref(baseLink + max(0, value-step), stringPar leftArrow(_, htmlencode(unicode_leftPointingTriangle())))); for (int i = 0; i < count; i += step) { int n = i/step+1; if (pageNav2_showPage(value, i, step, count)) if (value == i) l.add(b(n)); else l.add(ahref(baseLink + i, n)); } if (value+step < count) l.add(ahref(baseLink + (value+step), stringPar rightArrow(_, htmlencode(unicode_rightPointingTriangle())))); ret p("Pages: " + lines(l)); } sbool pageNav2_showPage(int actual, int i, int step, int count) { int diff = abs(actual-i)/step; ret i == 0 || i >= (count-1)/step*step || diff <= 10 || diff <= 100 && ((i/step) % 10) == 9 || diff <= 1000 && ((i/step) % 100) == 99 || ((i/step) % 1000) == 999; }