From 473c583bf540dcf95974f53dfeb51aa955944f98 Mon Sep 17 00:00:00 2001 From: Ted Trask Date: Thu, 25 Feb 2016 04:19:37 +0000 Subject: Create toplevel and dependent actions so loaded view can display the two tables with sorting/pagination/filtering Modify available action and view so can share code with toplevel and dependent Loaded action is still present for backward compatibility despite view ignoring the output --- apk-available-html.lsp | 30 ++++++++++----- apk-controller.lua | 8 ++++ apk-dependent-html.lsp | 1 + apk-loaded-html.lsp | 100 ++++--------------------------------------------- apk-model.lua | 94 +++++++++++++++++++++++++++++++++------------- apk-toplevel-html.lsp | 1 + apk.roles | 4 +- 7 files changed, 108 insertions(+), 130 deletions(-) create mode 120000 apk-dependent-html.lsp create mode 120000 apk-toplevel-html.lsp diff --git a/apk-available-html.lsp b/apk-available-html.lsp index bcf109f..136f084 100644 --- a/apk-available-html.lsp +++ b/apk-available-html.lsp @@ -24,14 +24,19 @@ var MultiString = function(f) { return f.toString().split('\n').slice(1, -1).join('\n'); } - var actions = MultiString(function() {/** + var <%= page_info.action %>actions = MultiString(function() {/** <% local packagecfe = cfe({ type="hidden", value="REPLACEME" }) - --if viewlibrary.check_permission("install") and not packagetable.upgrade then + if viewlibrary.check_permission("delete") and page_info.action == "toplevel" then + htmlviewfunctions.displayitem(cfe({type="form", value={package=packagecfe}, label="", option="Delete", action="delete" }), page_info, -1) + end if viewlibrary.check_permission("install") then - htmlviewfunctions.displayitem(cfe({type="form", value={package=packagecfe}, label="", option="Install", action="install" }), page_info, -1) + if page_info.action == "dependent" then + htmlviewfunctions.displayitem(cfe({type="form", value={package=packagecfe}, label="", option="Promote", action="install" }), page_info, -1) + elseif page_info.action ~= "toplevel" then + htmlviewfunctions.displayitem(cfe({type="form", value={package=packagecfe}, label="", option="Install", action="install" }), page_info, -1) + end end - --if viewlibrary.check_permission("upgrade") and packagetable.upgrade then if viewlibrary.check_permission("upgrade") then htmlviewfunctions.displayitem(cfe({type="form", value={package=packagecfe}, label="", option="Upgrade", action="upgrade" }), page_info, -1) end @@ -42,12 +47,13 @@ **/}); <% end %> - $("#list").tablesorter({widgets: ['zebra', 'filter', 'pager'], widgetOptions: { + $("#<%= page_info.action %>list").tablesorter({widgets: ['zebra', 'filter', 'pager'], widgetOptions: { + pager_selectors: { container: '#<%= page_info.action %>pager' }, // Filtering is handled by the server filter_serversideFiltering: true, // We can put the page number and size here, filtering and sorting handled by pager_customAjaxUrl - pager_ajaxUrl : '<%= html.html_escape(page_info.script .. page_info.orig_action) %>?viewtype=json&page={page+1}&pagesize={size}', + pager_ajaxUrl : '<%= html.html_escape(page_info.script..page_info.prefix..page_info.controller.."/"..page_info.action) %>?viewtype=json&page={page+1}&pagesize={size}', // Modify the url after all processing has been applied to handle filtering and sorting pager_customAjaxUrl: function(table, url) { @@ -80,9 +86,13 @@ for ( r=0; r - var tmp = actions.replace(/REPLACEME/g, data.value.result.value[r].name); + var tmp = <%= page_info.action %>actions.replace(/REPLACEME/g, data.value.result.value[r].name); if (data.value.result.value[r].upgrade) { +<% if page_info.action ~= "dependent" and page_info.action ~= "toplevel" then %> row[0] = tmp.replace(/action="install"[\s\S]*?
+ row[0] = tmp; +<% end %> } else { row[0] = tmp.replace(/action="upgrade"[\s\S]*? -<% htmlviewfunctions.displaycommandresults({"upgrade", "install"}, session) %> +<% htmlviewfunctions.displaycommandresults({"delete", "install", "upgrade"}, session) %> <% local header_level = htmlviewfunctions.displaysectionstart(form, page_info) %> - +
<% if viewlibrary.check_permission("install") or viewlibrary.check_permission("upgrade") or viewlibrary.check_permission("details") then %> @@ -115,7 +125,7 @@
Action
-
+
Page: diff --git a/apk-controller.lua b/apk-controller.lua index 674742a..9d30afb 100644 --- a/apk-controller.lua +++ b/apk-controller.lua @@ -11,6 +11,14 @@ mymodule.available = function(self) return self.model.get_available_packages(self, self.clientdata) end +mymodule.toplevel = function(self) + return self.model.get_toplevel_packages(self, self.clientdata) +end + +mymodule.dependent = function(self) + return self.model.get_dependent_packages(self, self.clientdata) +end + mymodule.details = function(self) return self.model.get_package_details(self.clientdata.package) end diff --git a/apk-dependent-html.lsp b/apk-dependent-html.lsp new file mode 120000 index 0000000..fbcc343 --- /dev/null +++ b/apk-dependent-html.lsp @@ -0,0 +1 @@ +apk-available-html.lsp \ No newline at end of file diff --git a/apk-loaded-html.lsp b/apk-loaded-html.lsp index 5fc82df..9996835 100644 --- a/apk-loaded-html.lsp +++ b/apk-loaded-html.lsp @@ -1,97 +1,13 @@ <% local form, viewlibrary, page_info, session = ... %> <% htmlviewfunctions = require("htmlviewfunctions") %> -<% html = require("acf.html") %> - - - - - - <% htmlviewfunctions.displaycommandresults({"delete", "install", "upgrade"}, session) %> -<% local header_level = htmlviewfunctions.displaysectionstart(form, page_info) %> -<% local header_level2 = htmlviewfunctions.displaysectionstart(form.value.toplevel, page_info, htmlviewfunctions.incrementheader(header_level)) %> - - - <% if viewlibrary.check_permission("delete") or viewlibrary.check_permission("upgrade") then %> - - <% end %> - - - - - -<% local packagecfe = cfe({ type="hidden", value="" }) %> -<% for i,packagetable in pairs(form.value.toplevel.value) do %> - - <% if viewlibrary.check_permission("delete") or viewlibrary.check_permission("upgrade") or viewlibrary.check_permission("details") then %> - <% packagecfe.value = packagetable.name %> - - <% end %> - - - - -<% end %> -
ActionPackage NameVersionDescription
- <% if viewlibrary.check_permission("delete") then %> - <% htmlviewfunctions.displayitem(cfe({type="form", value={package=packagecfe}, label="", option="Delete", action="delete" }), page_info, -1) %> - <% end %> - <% if viewlibrary.check_permission("upgrade") and packagetable.upgrade then %> - <% htmlviewfunctions.displayitem(cfe({type="form", value={package=packagecfe}, label="", option="Upgrade", action="upgrade" }), page_info, -1) %> - <% end %> - <% if viewlibrary.check_permission("details") then %> - <% htmlviewfunctions.displayitem(cfe({type="form", value={package=packagecfe}, label="", option="View", action="details" }), page_info, -1) %> - <% end %> - <%= html.html_escape(packagetable.name) %><%= html.html_escape(packagetable.version) %><%= html.html_escape(packagetable.description) %>
-<% htmlviewfunctions.displaysectionend(header_level2) %> - -<% htmlviewfunctions.displaysectionstart(form.value.dependent, page_info, header_level2) %> - - - <% if viewlibrary.check_permission("install") or viewlibrary.check_permission("upgrade") then %> - - <% end %> - - - - - -<% for i,packagetable in pairs(form.value.dependent.value) do %> - - <% if viewlibrary.check_permission("install") or viewlibrary.check_permission("upgrade") or viewlibrary.check_permission("details") then %> - <% packagecfe.value = packagetable.name %> - - <% end %> - - - - -<% end %> -
ActionPackage NameVersionDescription
- <% if viewlibrary.check_permission("install") then %> - <% htmlviewfunctions.displayitem(cfe({type="form", value={package=packagecfe}, label="", option="Promote", action="install" }), page_info, -1) %> - <% end %> - <% if viewlibrary.check_permission("upgrade") and packagetable.upgrade then %> - <% htmlviewfunctions.displayitem(cfe({type="form", value={package=packagecfe}, label="", option="Upgrade", action="upgrade" }), page_info, -1) %> - <% end %> - <% if viewlibrary.check_permission("details") then %> - <% htmlviewfunctions.displayitem(cfe({type="form", value={package=packagecfe}, label="", option="View", action="details" }), page_info, -1) %> - <% end %> - <%= html.html_escape(packagetable.name) %><%= html.html_escape(packagetable.version) %><%= html.html_escape(packagetable.description) %>
-<% htmlviewfunctions.displaysectionend(header_level2) %> -<% htmlviewfunctions.displaysectionend(header_level) %> +<% if viewlibrary and viewlibrary.dispatch_component then + if viewlibrary.check_permission("toplevel") then + viewlibrary.dispatch_component("toplevel") + end + if viewlibrary.check_permission("dependent") then + viewlibrary.dispatch_component("dependent") + end +end %> diff --git a/apk-model.lua b/apk-model.lua index 682beea..d72ba07 100644 --- a/apk-model.lua +++ b/apk-model.lua @@ -172,10 +172,8 @@ mymodule.get_loaded_packages = function() return cfe({ type="group", value={toplevel=top, dependent=depend}, label="Installed Packages" }) end -mymodule.get_available_packages = function(self, clientdata) - repo = repository() - -- available are all except same version installed - local retval = cfe({ type="group", value={}, label="Available Packages" }) +local handle_pagination_and_filtering = function(self, clientdata, packages) + local retval = cfe({ type="group", value={} }) retval.value.page = cfe({ value=0, label="Page Number", descr="0 indicates ALL", key=true }) retval.value.pagesize = cfe({ value=10, label="Page Size", key=true }) retval.value.rowcount = cfe({ value=0, label="Row Count" }) @@ -184,7 +182,7 @@ mymodule.get_available_packages = function(self, clientdata) -- filter is a table with a string filter for each column retval.value.filter = cfe({ type="structure", value={name="", version=""}, label="Filter", key=true }) self.handle_clientdata(retval, clientdata) - retval.value.result = cfe({ type="structure", value={}, label="Available Packages" }) + retval.value.result = cfe({ type="structure", value={} }) -- Process the incoming page data local page = tonumber(retval.value.page.value) or 0 @@ -192,28 +190,27 @@ mymodule.get_available_packages = function(self, clientdata) local pagesize = tonumber(retval.value.pagesize.value) or 10 retval.value.pagesize.value = pagesize - local available = {} - for name,value in pairs(repo) do - if value.version and (not value.installed or value.upgrade) then - local temp = {} - temp.name = name - temp.version = value.version - temp.upgrade = value.upgrade - - -- Filter - for c,f in pairs(retval.value.filter.value) do - if temp[c] and f ~= "" and not string.find(temp[c], format.escapemagiccharacters(f)) then - temp = nil - break - end + local result = {} + for name,value in pairs(packages) do + local temp = {} + temp.name = name + temp.version = value.installed or value.version + temp.upgrade = value.upgrade + temp.description = value.comment + + -- Filter + for c,f in pairs(retval.value.filter.value) do + if temp[c] and f ~= "" and not string.find(temp[c], format.escapemagiccharacters(f)) then + temp = nil + break end - - available[#available + 1] = temp end + + result[#result + 1] = temp end -- Sort - if #available > 0 then + if #result > 0 then local function createsort(column, descending, equal) return function(a,b) if a[column] == b[column] then @@ -238,19 +235,64 @@ mymodule.get_available_packages = function(self, clientdata) end end end - table.sort(available, sortfunction) + table.sort(result, sortfunction) end -- Paginate - retval.value.rowcount.value = #available + retval.value.rowcount.value = #result if page > 0 then for i=((page-1)*pagesize+1), (page*pagesize) do - retval.value.result.value[#retval.value.result.value+1] = available[i] + retval.value.result.value[#retval.value.result.value+1] = result[i] end else - retval.value.result.value = available + retval.value.result.value = result + end + + return retval +end + +mymodule.get_available_packages = function(self, clientdata) + repo = repository() + local packages = {} + -- available are all except same version installed + for name,value in pairs(repo) do + if value.version and (not value.installed or value.upgrade) then + packages[name] = value + end end + local retval = handle_pagination_and_filtering(self, clientdata, packages) + retval.label = "Available Packages" + if retval.value.result then retval.value.result.label = "Available Packages" end + return retval +end +mymodule.get_toplevel_packages = function(self, clientdata) + repo = repository() + toplevel = gettoplevel() + local packages = {} + for name,value in pairs(repo) do + if value.installed and toplevel[name] then + packages[name] = value + end + end + local retval = handle_pagination_and_filtering(self, clientdata, packages) + retval.label = "Top Level Packages" + if retval.value.result then retval.value.result.label = "Top Level Packages" end + return retval +end + +mymodule.get_dependent_packages = function(self, clientdata) + repo = repository() + toplevel = gettoplevel() + local packages = {} + for name,value in pairs(repo) do + if value.installed and not toplevel[name] then + packages[name] = value + end + end + local retval = handle_pagination_and_filtering(self, clientdata, packages) + retval.label = "Dependent Packages" + if retval.value.result then retval.value.result.label = "Dependent Packages" end return retval end diff --git a/apk-toplevel-html.lsp b/apk-toplevel-html.lsp new file mode 120000 index 0000000..fbcc343 --- /dev/null +++ b/apk-toplevel-html.lsp @@ -0,0 +1 @@ +apk-available-html.lsp \ No newline at end of file diff --git a/apk.roles b/apk.roles index cb26ff8..bdfc07a 100644 --- a/apk.roles +++ b/apk.roles @@ -1,3 +1,3 @@ -USER=apk:loaded,apk:available,apk:details +USER=apk:loaded,apk:available,apk:details,apk:toplevel,apk:dependent EXPERT=apk:cache,apk:expert,apk:delete,apk:install,apk:upgrade,apk:updateall,apk:upgradeall -ADMIN=apk:loaded,apk:available,apk:details,apk:cache,apk:expert,apk:delete,apk:install,apk:upgrade,apk:updateall,apk:upgradeall +ADMIN=apk:loaded,apk:available,apk:details,apk:toplevel,apk:dependent,apk:cache,apk:expert,apk:delete,apk:install,apk:upgrade,apk:updateall,apk:upgradeall -- cgit v1.2.3