From bbc986be5425c6abdddb6eaab6dca1b5054c43e0 Mon Sep 17 00:00:00 2001 From: Jeffrey Armstrong Date: Mon, 17 May 2021 10:16:40 -0400 Subject: Added pager to jobs list on instructions page as well. --- captain/requtils.f90 | 126 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) (limited to 'captain/requtils.f90') 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('') + allocate(character(len=nl)::res) + res = ''//trim(label)//'' + + 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('

-

') + 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 = '

'//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 = '

'//forward_link + end if + deallocate(forward_link) + end if + + res = trim(res)//"

" + + 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 -- cgit v1.2.3