aboutsummaryrefslogtreecommitdiff
path: root/captain/requtils.f90
diff options
context:
space:
mode:
authorJeffrey Armstrong <jeff@approximatrix.com>2021-05-17 10:16:40 -0400
committerJeffrey Armstrong <jeff@approximatrix.com>2021-05-17 10:16:40 -0400
commitbbc986be5425c6abdddb6eaab6dca1b5054c43e0 (patch)
treeef603995051fc7b121a0d84170e8fcd2257beb04 /captain/requtils.f90
parentb52aa3bf2b9cbb529b861566f6dbed24483c0b67 (diff)
downloadlevitating-bbc986be5425c6abdddb6eaab6dca1b5054c43e0.tar.gz
levitating-bbc986be5425c6abdddb6eaab6dca1b5054c43e0.zip
Added pager to jobs list on instructions page as well.
Diffstat (limited to 'captain/requtils.f90')
-rw-r--r--captain/requtils.f90126
1 files changed, 126 insertions, 0 deletions
diff --git a/captain/requtils.f90 b/captain/requtils.f90
index d2ffb29..1af605f 100644
--- a/captain/requtils.f90
+++ b/captain/requtils.f90
@@ -186,6 +186,132 @@ contains
end function request_static
+ function build_link(link, label, gemini_mode) result(res)
+ implicit none
+
+ character(*), intent(in)::link, label
+ logical, intent(in)::gemini_mode
+ character(len=:), pointer::res
+ integer::nl
+
+ if(gemini_mode) then
+
+ nl = len_trim(link) + len_trim(label) + len('=> ')
+ allocate(character(len=nl)::res)
+ res = '=> '//trim(link)//' '//trim(label)
+
+ else
+
+ nl = len_trim(link) + len_trim(label) + len('<a href=""></a>')
+ allocate(character(len=nl)::res)
+ res = '<a href="'//trim(link)//'">'//trim(label)//'</a>'
+
+ end if
+
+ end function build_link
+
+ function generate_simple_pager(startindex, stopindex, step, maxcount, page, gemini_mode) result(res)
+ use logging
+ implicit none
+
+ integer, intent(in)::startindex, stopindex, step, maxcount
+ character(*), intent(in)::page
+ logical, intent(in)::gemini_mode
+ character(len=:), pointer::res
+
+ integer::i
+ character(len=:), allocatable::back_page, forward_page
+ character(len=:), pointer::back_link, forward_link
+ character(5)::num
+ integer::res_size
+
+ res_size = 128
+
+ back_link => null()
+ forward_link => null()
+
+ if(startindex > 1) then
+ i = max(startindex-step, 1)
+ allocate(character(len=(len_trim(page)+6)) :: back_page)
+ write(num, '(I5)') i
+ num = adjustl(num)
+ back_page = trim(page)//"?"//trim(num)
+ back_link => build_link(back_page, "Newer", gemini_mode)
+ deallocate(back_page)
+ end if
+
+ if(stopindex < maxcount) then
+ i = stopindex+1
+ allocate(character(len=(len_trim(page)+6)) :: forward_page)
+ write(num, '(I5)') i
+ num = adjustl(num)
+ forward_page = trim(page)//"?"//trim(num)
+ forward_link => build_link(forward_page, "Older", gemini_mode)
+ deallocate(forward_page)
+ end if
+
+ if(.not. associated(back_link) .and. .not. associated(forward_link)) then
+
+ res => null()
+
+ else
+
+ if(gemini_mode) then
+ res_size = 1
+ else
+ res_size = len('<p class="pager"> - </p>')
+ end if
+
+ if(associated(back_link)) then
+ res_size = res_size + len(back_link)
+ end if
+ if(associated(forward_link)) then
+ res_size = res_size + len(forward_link)
+ end if
+
+ allocate(character(len=res_size) :: res)
+ res = " "
+
+ if(gemini_mode) then
+
+ if(associated(back_link)) then
+ res = back_link
+ deallocate(back_link)
+ end if
+
+ if(associated(forward_link)) then
+ if(len_trim(res) > 0) then
+ res = trim(res)//new_line(' ')//forward_link
+ else
+ res = forward_link
+ end if
+ deallocate(forward_link)
+ end if
+
+ else
+
+ if(associated(back_link)) then
+ res = '<p class="pager">'//back_link
+ deallocate(back_link)
+ end if
+
+ if(associated(forward_link)) then
+ if(len_trim(res) > 0) then
+ res = trim(res)//" - "//forward_link
+ else
+ res = '<p class="pager">'//forward_link
+ end if
+ deallocate(forward_link)
+ end if
+
+ res = trim(res)//"</p>"
+
+ end if
+
+ end if
+
+ end function generate_simple_pager
+
function render_jobs_links(jobs, startindex, stopindex, gemini_mode, link_prefix) result(res)
use captain_db
implicit none