mirror of
https://github.com/britzl/monarch.git
synced 2025-06-27 10:27:49 +02:00
Accept both hash and string as screen id
This commit is contained in:
parent
a4cef48239
commit
f811c1f306
@ -32,6 +32,15 @@ function M.debug()
|
|||||||
log = print
|
log = print
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- use a lookup table for so we don't have to do "return (type(s) == "string" and hash(s) or s)"
|
||||||
|
-- every time
|
||||||
|
local hash_lookup = {}
|
||||||
|
local function tohash(s)
|
||||||
|
hash_lookup[s] = hash_lookup[s] or (type(s) == "string" and hash(s) or s)
|
||||||
|
return hash_lookup[s]
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
local function screen_from_proxy(proxy)
|
local function screen_from_proxy(proxy)
|
||||||
for _, screen in pairs(screens) do
|
for _, screen in pairs(screens) do
|
||||||
if screen.proxy == proxy then
|
if screen.proxy == proxy then
|
||||||
@ -51,9 +60,11 @@ end
|
|||||||
|
|
||||||
|
|
||||||
--- Check if a screen exists in the current screen stack
|
--- Check if a screen exists in the current screen stack
|
||||||
-- @param id
|
-- @param id (string|hash)
|
||||||
-- @return true of the screen is in the stack
|
-- @return true of the screen is in the stack
|
||||||
function M.in_stack(id)
|
function M.in_stack(id)
|
||||||
|
assert(id, "You must provide a screen id")
|
||||||
|
id = tohash(id)
|
||||||
for i = 1, #stack do
|
for i = 1, #stack do
|
||||||
if stack[i].id == id then
|
if stack[i].id == id then
|
||||||
return true
|
return true
|
||||||
@ -65,9 +76,11 @@ end
|
|||||||
|
|
||||||
--- Check if a screen is at the top of the stack
|
--- Check if a screen is at the top of the stack
|
||||||
-- (primarily used for unit tests, but could have a usecase outside tests)
|
-- (primarily used for unit tests, but could have a usecase outside tests)
|
||||||
-- @param id
|
-- @param id (string|hash)
|
||||||
-- @return true if the screen is at the top of the stack
|
-- @return true if the screen is at the top of the stack
|
||||||
function M.is_top(id)
|
function M.is_top(id)
|
||||||
|
assert(id, "You must provide a screen id")
|
||||||
|
id = tohash(id)
|
||||||
local top = stack[#stack]
|
local top = stack[#stack]
|
||||||
return top and top.id == id or false
|
return top and top.id == id or false
|
||||||
end
|
end
|
||||||
@ -89,6 +102,8 @@ end
|
|||||||
-- * focus_url - URL to a script that is to be notified of focus
|
-- * focus_url - URL to a script that is to be notified of focus
|
||||||
-- lost/gained events
|
-- lost/gained events
|
||||||
function M.register(id, proxy, settings)
|
function M.register(id, proxy, settings)
|
||||||
|
assert(id, "You must provide a screen id")
|
||||||
|
id = tohash(id)
|
||||||
assert(not screens[id], ("There is already a screen registered with id %s"):format(tostring(id)))
|
assert(not screens[id], ("There is already a screen registered with id %s"):format(tostring(id)))
|
||||||
assert(proxy, "You must provide a collection proxy URL")
|
assert(proxy, "You must provide a collection proxy URL")
|
||||||
local url = msg.url(proxy)
|
local url = msg.url(proxy)
|
||||||
@ -107,6 +122,8 @@ end
|
|||||||
-- This is done automatically by the screen.script
|
-- This is done automatically by the screen.script
|
||||||
-- @param id Id of the screen to unregister
|
-- @param id Id of the screen to unregister
|
||||||
function M.unregister(id)
|
function M.unregister(id)
|
||||||
|
assert(id, "You must provide a screen id")
|
||||||
|
id = tohash(id)
|
||||||
assert(screens[id], ("There is no screen registered with id %s"):format(tostring(id)))
|
assert(screens[id], ("There is no screen registered with id %s"):format(tostring(id)))
|
||||||
screens[id] = nil
|
screens[id] = nil
|
||||||
end
|
end
|
||||||
@ -290,31 +307,35 @@ end
|
|||||||
|
|
||||||
|
|
||||||
--- Get data associated with a screen
|
--- Get data associated with a screen
|
||||||
-- @param id Id of the screen to get data for
|
-- @param id (string|hash) Id of the screen to get data for
|
||||||
-- @return Data associated with the screen
|
-- @return Data associated with the screen
|
||||||
function M.data(id)
|
function M.data(id)
|
||||||
assert(id, "You must provide a screen id")
|
assert(id, "You must provide a screen id")
|
||||||
|
id = tohash(id)
|
||||||
assert(screens[id], ("There is no screen registered with id %s"):format(tostring(id)))
|
assert(screens[id], ("There is no screen registered with id %s"):format(tostring(id)))
|
||||||
return screens[id].data
|
return screens[id].data
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Checks to see if a screen id is registered
|
--- Checks to see if a screen id is registered
|
||||||
-- @param id Id of the screen to check if is registered
|
-- @param id (string|hash) Id of the screen to check if is registered
|
||||||
-- @return True or False if the screen id is registered or not
|
-- @return True or False if the screen id is registered or not
|
||||||
function M.screen_exists(id)
|
function M.screen_exists(id)
|
||||||
|
assert(id, "You must provide a screen id")
|
||||||
|
id = tohash(id)
|
||||||
return screens[id] ~= nil
|
return screens[id] ~= nil
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Show a new screen
|
--- Show a new screen
|
||||||
-- @param id Id of the screen to show
|
-- @param id (string|hash) - Id of the screen to show
|
||||||
-- @param options Table with options when showing the screen (can be nil). Valid values:
|
-- @param options (table) - Table with options when showing the screen (can be nil). Valid values:
|
||||||
-- * clear - Set to true if the stack should be cleared down to an existing instance of the screen
|
-- * clear - Set to true if the stack should be cleared down to an existing instance of the screen
|
||||||
-- * reload - Set to true if screen should be reloaded if it already exists in the stack and is loaded.
|
-- * reload - Set to true if screen should be reloaded if it already exists in the stack and is loaded.
|
||||||
-- This would be the case if doing a show() from a popup on the screen just below the popup.
|
-- This would be the case if doing a show() from a popup on the screen just below the popup.
|
||||||
-- @param data Optional data to set on the screen. Can be retrieved by the data() function
|
-- @param data (*) - Optional data to set on the screen. Can be retrieved by the data() function
|
||||||
-- @param cb Optional callback to invoke when screen is shown
|
-- @param cb (function) - Optional callback to invoke when screen is shown
|
||||||
function M.show(id, options, data, cb)
|
function M.show(id, options, data, cb)
|
||||||
assert(id, "You must provide a screen id")
|
assert(id, "You must provide a screen id")
|
||||||
|
id = tohash(id)
|
||||||
assert(screens[id], ("There is no screen registered with id %s"):format(tostring(id)))
|
assert(screens[id], ("There is no screen registered with id %s"):format(tostring(id)))
|
||||||
|
|
||||||
local screen = screens[id]
|
local screen = screens[id]
|
||||||
@ -362,8 +383,8 @@ end
|
|||||||
|
|
||||||
|
|
||||||
-- Go back to the previous screen in the stack
|
-- Go back to the previous screen in the stack
|
||||||
-- @param data Optional data to set for the previous screen
|
-- @param data (*) - Optional data to set for the previous screen
|
||||||
-- @param cb Optional callback to invoke when the previous screen is visible again
|
-- @param cb (function) - Optional callback to invoke when the previous screen is visible again
|
||||||
function M.back(data, cb)
|
function M.back(data, cb)
|
||||||
local screen = table.remove(stack)
|
local screen = table.remove(stack)
|
||||||
if screen then
|
if screen then
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
local cowait = require "test.cowait"
|
local cowait = require "test.cowait"
|
||||||
local monarch = require "monarch.monarch"
|
local monarch = require "monarch.monarch"
|
||||||
|
|
||||||
local SCREEN1 = hash("screen1")
|
local SCREEN1 = hash(SCREEN1_STR)
|
||||||
local SCREEN2 = hash("screen2")
|
local SCREEN2 = hash("screen2")
|
||||||
local POPUP1 = hash("popup1")
|
local POPUP1 = hash("popup1")
|
||||||
local POPUP2 = hash("popup2")
|
local POPUP2 = hash("popup2")
|
||||||
@ -65,12 +65,13 @@ return function()
|
|||||||
|
|
||||||
it("should be able to tell if a screen exists", function()
|
it("should be able to tell if a screen exists", function()
|
||||||
assert(monarch.screen_exists(SCREEN1))
|
assert(monarch.screen_exists(SCREEN1))
|
||||||
|
assert(monarch.screen_exists(SCREEN1_STR))
|
||||||
assert(not monarch.screen_exists(hash("foobar")))
|
assert(not monarch.screen_exists(hash("foobar")))
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
|
||||||
it("should be able to show screens and go back to previous screens", function()
|
it("should be able to show screens and go back to previous screens", function()
|
||||||
monarch.show(SCREEN1)
|
monarch.show(SCREEN1_STR)
|
||||||
assert(wait_until_shown(SCREEN1), "Screen1 was never shown")
|
assert(wait_until_shown(SCREEN1), "Screen1 was never shown")
|
||||||
assert_stack({ SCREEN1 })
|
assert_stack({ SCREEN1 })
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user