Merge branch 'collections-config-changes' into next-ota

This commit is contained in:
Chris Johnson 2019-01-18 13:08:00 -08:00
commit 4b4ef4195a
6 changed files with 91 additions and 88 deletions

View File

@ -4,7 +4,7 @@
/? 309 /? 309
/- hall /- hall
/+ cram, elem-to-react-json /+ cram, elem-to-react-json
:: :: :: ::
~% %collections-lib ..is ~ ~% %collections-lib ..is ~
|% |%
+$ move [bone card] +$ move [bone card]
@ -103,7 +103,7 @@
name=@t name=@t
description=@t description=@t
:: ::
owner=@p author=@p
:: ::
date-created=@da date-created=@da
last-modified=@da last-modified=@da
@ -259,7 +259,7 @@
[%s a] [%s a]
:- %name [%s name.con] :- %name [%s name.con]
:- %desc [%s description.con] :- %desc [%s description.con]
:- %owner (ship:enjs:format owner.con) :- %author (ship:enjs:format author.con)
:- %date-created (time:enjs:format date-created.con) :- %date-created (time:enjs:format date-created.con)
:- %last-modified (time:enjs:format last-modified.con) :- %last-modified (time:enjs:format last-modified.con)
:- %type [%s type.con] :- %type [%s type.con]
@ -339,7 +339,8 @@
|= [pax=path conf=config] |= [pax=path conf=config]
^- json ^- json
%- pairs:enjs:format %- pairs:enjs:format
:~ ['owner' [%s (crip (scow %p owner.conf))]] :~ ['author' [%s (crip (scow %p author.conf))]]
['host' [%s (crip (scow %p p.full-path.conf))]]
['path' [%a (turn pax |=(a=@ta `json`[%s a]))]] ['path' [%a (turn pax |=(a=@ta `json`[%s a]))]]
['name' [%s name.conf]] ['name' [%s name.conf]]
['date' [%s (crip (scow %da last-modified.conf))]] ['date' [%s (crip (scow %da last-modified.conf))]]
@ -352,7 +353,8 @@
~/ %coll-item-notify ~/ %coll-item-notify
|= [pax=path raw=raw-item now=@da byk=beak] |= [pax=path raw=raw-item now=@da byk=beak]
^- json ^- json
=/ owner (fall (~(get by meta.raw) %owner) ~.anon) =/ author (fall (~(get by meta.raw) %author) ~.anon)
=/ host (fall (~(get by meta.raw) %host) ~.anon)
=/ dat (fall (~(get by meta.raw) %last-modified) (scot %da now)) =/ dat (fall (~(get by meta.raw) %last-modified) (scot %da now))
=/ nom (fall (~(get by meta.raw) %name) ~.no-title) =/ nom (fall (~(get by meta.raw) %name) ~.no-title)
=/ typ (fall (~(get by meta.raw) %type) ~.no-type) =/ typ (fall (~(get by meta.raw) %type) ~.no-type)
@ -360,8 +362,8 @@
=/ elm=manx elm:(static:cram (ream data.raw)) =/ elm=manx elm:(static:cram (ream data.raw))
=/ snip=marl tal:(hedtal +.elm) =/ snip=marl tal:(hedtal +.elm)
=/ inner =/ inner
?~ snip ?~ snip
(crip (en-xml:html elm)) (crip (en-xml:html elm))
(crip (en-xml:html i.snip)) :: inner html (crip (en-xml:html i.snip)) :: inner html
:: ::
=/ parent-spur (slag 1 (flop pax)) =/ parent-spur (slag 1 (flop pax))
@ -372,7 +374,7 @@
=/ parent-conf=json =/ parent-conf=json
?: (~(has in dir.parent-dir) ~.udon ~) ?: (~(has in dir.parent-dir) ~.udon ~)
%- meta-to-json %- meta-to-json
%- udon-to-front %- udon-to-front
.^(@t %cx (weld parent-path /udon)) .^(@t %cx (weld parent-path /udon))
?: (~(has in dir.parent-dir) ~.collections-config ~) ?: (~(has in dir.parent-dir) ~.collections-config ~)
%- config-to-json %- config-to-json
@ -380,7 +382,8 @@
~ ~
:: ::
%- pairs:enjs:format %- pairs:enjs:format
:~ ['owner' [%s owner]] :~ ['author' [%s author]]
['host' [%s host]]
['path' [%a (turn pax |=(a=@ta `json`[%s a]))]] ['path' [%a (turn pax |=(a=@ta `json`[%s a]))]]
['name' [%s nom]] ['name' [%s nom]]
['date' [%s dat]] ['date' [%s dat]]
@ -436,8 +439,8 @@
:: ::
++ ta-this . ++ ta-this .
:: ::
:: +ta-done: :: +ta-done:
:: ::
:: flop :moves for finalization, since moves are prepended to the list :: flop :moves for finalization, since moves are prepended to the list
:: ::
++ ta-done (flop moves) ++ ta-done (flop moves)
@ -493,7 +496,7 @@
=/ perms .^([dict:clay dict:clay] %cp sap) =/ perms .^([dict:clay dict:clay] %cp sap)
?: (allowed-by src.bol +.perms our.bol) ?: (allowed-by src.bol +.perms our.bol)
(ta-remove pax.a) (ta-remove pax.a)
ta-this ta-this
:: ::
%perms %perms
?: =(src.bol our.bol) :: XX admin privileges for other users? ?: =(src.bol our.bol) :: XX admin privileges for other users?
@ -504,7 +507,7 @@
:: XX some of this is redunant :: XX some of this is redunant
:: ::
%collection %collection
=/ perms =/ perms
.^([dict:clay dict:clay] %cp (weld sap /[dat]/collections-config)) .^([dict:clay dict:clay] %cp (weld sap /[dat]/collections-config))
?. (allowed-by src.bol +.perms our.bol) ?. (allowed-by src.bol +.perms our.bol)
ta-this ta-this
@ -520,17 +523,17 @@
~ ~
visible.a visible.a
== ==
=. ta-this =. ta-this
%+ ta-write (weld pax.a /[dat]/collections-config) %+ ta-write (weld pax.a /[dat]/collections-config)
[%collections-config !>(conf)] [%collections-config !>(conf)]
:: restrict permissions on config file :: restrict permissions on config file
=. ta-this =. ta-this
%^ ta-set-permissions (weld pax.a /[dat]/collections-config) %^ ta-set-permissions (weld pax.a /[dat]/collections-config)
[%white ((set whom:clay) [[& src.bol] ~ ~])] :: read [%white ((set whom:clay) [[& src.bol] ~ ~])] :: read
[%white ((set whom:clay) [[& src.bol] ~ ~])] :: write [%white ((set whom:clay) [[& src.bol] ~ ~])] :: write
:: open permissions on collection items :: open permissions on collection items
=. ta-this =. ta-this
%^ ta-set-permissions (weld pax.a /[dat]) %^ ta-set-permissions (weld pax.a /[dat])
[%black ((set whom:clay) ~)] :: read [%black ((set whom:clay) ~)] :: read
[%black ((set whom:clay) ~)] :: write [%black ((set whom:clay) ~)] :: write
ta-this ta-this
@ -548,23 +551,23 @@
%- my %- my
:~ [%name name.a] :~ [%name name.a]
[%comments ?:(comments.a ~..y ~..n)] [%comments ?:(comments.a ~..y ~..n)]
[%owner (scot %p src.bol)] [%author (scot %p src.bol)]
[%host (scot %p our.bol)] [%host (scot %p our.bol)]
[%date-created (snag 0 (flop pax.a))] [%date-created (snag 0 (flop pax.a))]
[%last-modified dat] [%last-modified dat]
[%type type.a] [%type type.a]
== ==
=. ta-this =. ta-this
%+ ta-write (weld pax.a /udon) %+ ta-write (weld pax.a /udon)
[%udon !>((update-udon-front front content.a))] [%udon !>((update-udon-front front content.a))]
:: restrict permissions on udon file :: restrict permissions on udon file
=. ta-this =. ta-this
%^ ta-set-permissions (weld pax.a /udon) %^ ta-set-permissions (weld pax.a /udon)
[%black ((set whom:clay) ~)] :: read [%black ((set whom:clay) ~)] :: read
[%white ((set whom:clay) [[& src.bol] ~ ~])] :: write [%white ((set whom:clay) [[& src.bol] ~ ~])] :: write
:: open permissions on comments :: open permissions on comments
=. ta-this =. ta-this
%^ ta-set-permissions pax.a %^ ta-set-permissions pax.a
[%black ((set whom:clay) ~)] :: read [%black ((set whom:clay) ~)] :: read
[%black ((set whom:clay) ~)] :: write [%black ((set whom:clay) ~)] :: write
ta-this ta-this
@ -576,18 +579,18 @@
=. content.a (crip (weld (trip content.a) "\0a")) =. content.a (crip (weld (trip content.a) "\0a"))
=/ front=(map knot cord) =/ front=(map knot cord)
%- my %- my
:~ [%owner (scot %p src.bol)] :~ [%author (scot %p src.bol)]
[%host (scot %p our.bol)] [%host (scot %p our.bol)]
[%date-created dat] [%date-created dat]
[%last-modified dat] [%last-modified dat]
[%type %comments] [%type %comments]
== ==
=. ta-this =. ta-this
%+ ta-write (weld pax.a /[dat]/udon) %+ ta-write (weld pax.a /[dat]/udon)
[%udon !>((update-udon-front front content.a))] [%udon !>((update-udon-front front content.a))]
:: restrict permissions on udon file :: restrict permissions on udon file
=. ta-this =. ta-this
%^ ta-set-permissions (weld pax.a /[dat]/udon) %^ ta-set-permissions (weld pax.a /[dat]/udon)
[%black ((set whom:clay) ~)] :: read [%black ((set whom:clay) ~)] :: read
[%white ((set whom:clay) [[& src.bol] ~ ~])] :: write [%white ((set whom:clay) [[& src.bol] ~ ~])] :: write
ta-this ta-this
@ -620,7 +623,7 @@
:: ::
%collection %collection
=. ta-this =. ta-this
%^ ta-hall-json parent-path 'new collection' %^ ta-hall-json parent-path 'new collection'
(collection-notify pax meta.col.new) (collection-notify pax meta.col.new)
:: ::
=. ta-this (ta-hall-create-circle pax name.meta.col.new) =. ta-this (ta-hall-create-circle pax name.meta.col.new)
@ -643,18 +646,18 @@
:: ::
%raw %raw
=. ta-this =. ta-this
%^ ta-hall-json %^ ta-hall-json
parent-path parent-path
'new item' 'new item'
(item-notify pax raw.new now.bol byk.bol) (item-notify pax raw.new now.bol byk.bol)
?: ?& (~(has by meta.raw.new) %comments) ?: ?& (~(has by meta.raw.new) %comments)
=('.y' (~(got by meta.raw.new) %comments)) =('.y' (~(got by meta.raw.new) %comments))
== ==
=/ owner=(unit @ta) (~(get by meta.raw.new) %owner) =/ author=(unit @ta) (~(get by meta.raw.new) %author)
=/ owner-p=@p =/ author-p=@p
?~ owner our.bol ?~ author our.bol
(fall (rush u.owner ;~(pfix sig fed:ag)) our.bol) (fall (rush u.author ;~(pfix sig fed:ag)) our.bol)
(ta-generate-comments pax owner-p) (ta-generate-comments pax author-p)
ta-this ta-this
:: ::
== ==
@ -673,8 +676,8 @@
(ta-hall-lin parent 'error') (ta-hall-lin parent 'error')
:: ::
%collection %collection
=. ta-this =. ta-this
%^ ta-hall-json parent 'deleted collection' %^ ta-hall-json parent 'deleted collection'
(collection-notify pax meta.col.old) (collection-notify pax meta.col.old)
=. ta-this (ta-flush-permissions (weld pax /collections-config)) =. ta-this (ta-flush-permissions (weld pax /collections-config))
=/ items=(list [nom=@ta =item]) ~(tap by data.col.old) =/ items=(list [nom=@ta =item]) ~(tap by data.col.old)
@ -694,15 +697,15 @@
:: ::
%raw %raw
=. ta-this (ta-flush-permissions pax) =. ta-this (ta-flush-permissions pax)
%^ ta-hall-json %^ ta-hall-json
parent parent
'deleted item' 'deleted item'
(item-notify pax raw.old now.bol byk.bol) (item-notify pax raw.old now.bol byk.bol)
:: ::
== ==
:: ::
:: ::
:: ::
++ ta-update-item ++ ta-update-item
:: always make sure removals happen first and insertions happen last :: always make sure removals happen first and insertions happen last
:: because removals flush permissions and insertions set them :: because removals flush permissions and insertions set them
@ -782,20 +785,20 @@
:: ::
=? ta-this !=(data.old data.new) =? ta-this !=(data.old data.new)
=/ parent-path (scag (dec (lent pax)) pax) =/ parent-path (scag (dec (lent pax)) pax)
%^ ta-hall-json %^ ta-hall-json
parent-path parent-path
'edited item' 'edited item'
(item-notify pax new now.bol byk.bol) (item-notify pax new now.bol byk.bol)
:: ::
=? ta-this =? ta-this
?& =('.y' (fall (~(get by meta.new) %comments) '.n')) ?& =('.y' (fall (~(get by meta.new) %comments) '.n'))
=('.n' (fall (~(get by meta.old) %comments) '.n')) =('.n' (fall (~(get by meta.old) %comments) '.n'))
== ==
=/ owner=(unit @ta) (~(get by meta.new) %owner) =/ author=(unit @ta) (~(get by meta.new) %author)
=/ owner-p=@p =/ author-p=@p
?~ owner our.bol ?~ author our.bol
(fall (rush u.owner ;~(pfix sig fed:ag)) our.bol) (fall (rush u.author ;~(pfix sig fed:ag)) our.bol)
(ta-generate-comments pax owner-p) (ta-generate-comments pax author-p)
:: ::
=? ta-this =? ta-this
?& =('.n' (fall (~(get by meta.new) %comments) '.n')) ?& =('.n' (fall (~(get by meta.new) %comments) '.n'))
@ -872,7 +875,7 @@
:: ::
++ ta-generate-comments ++ ta-generate-comments
~/ %coll-ta-generate-comments ~/ %coll-ta-generate-comments
|= [pax=path owner=ship] |= [pax=path author=ship]
^+ ta-this ^+ ta-this
=/ sup=path [%collections-config (flop pax)] =/ sup=path [%collections-config (flop pax)]
=/ bek byk.bol(r [%da now.bol]) =/ bek byk.bol(r [%da now.bol])
@ -882,7 +885,7 @@
:* [bek sup] :* [bek sup]
'comments' 'comments'
'comments' 'comments'
owner author
dat dat
dat dat
%comments %comments
@ -961,7 +964,7 @@
(path-to-circle (scag (dec (lent pax)) pax) our.bol) (path-to-circle (scag (dec (lent pax)) pax) our.bol)
=/ acts=(list action:hall) =/ acts=(list action:hall)
:~ [%source nom.parent & (sy `source:hall`[circ ~] ~)] :~ [%source nom.parent & (sy `source:hall`[circ ~] ~)]
[%create nom.circ name %journal] [%create nom.circ name %journal]
== ==
:: XX should we also source comment circles? :: XX should we also source comment circles?
=? acts =(nom.parent %c) =? acts =(nom.parent %c)

View File

@ -9,7 +9,7 @@
++ grow ++ grow
|% |%
++ mime ++ mime
:- /text/x-collection-config :- /text/x-collection-config
(as-octs:mimes:html (of-wain:format txt)) (as-octs:mimes:html (of-wain:format txt))
++ txt ++ txt
^- wain ^- wain
@ -18,7 +18,7 @@
(cat 3 'name: ' name.con) (cat 3 'name: ' name.con)
(cat 3 'description: ' description.con) (cat 3 'description: ' description.con)
:: ::
(cat 3 'owner: ' (scot %p owner.con)) (cat 3 'author: ' (scot %p author.con))
:: ::
(cat 3 'date-created: ' (scot %da date-created.con)) (cat 3 'date-created: ' (scot %da date-created.con))
(cat 3 'last-modified: ' (scot %da last-modified.con)) (cat 3 'last-modified: ' (scot %da last-modified.con))
@ -42,7 +42,7 @@
?> ?= $: full-path=@t ?> ?= $: full-path=@t
name=@t name=@t
desc=@t desc=@t
owner=@t author=@t
dc=@t dc=@t
lm=@t lm=@t
type=@t type=@t
@ -53,32 +53,32 @@
== ==
txs txs
:: ::
:* %- need :* %- need
%+ rash full-path.txs %+ rash full-path.txs
;~ pfix (jest 'full-path: ') ;~ pfix (jest 'full-path: ')
%+ cook de-beam:format %+ cook de-beam:format
;~(pfix fas (more fas urs:ab)) ;~(pfix fas (more fas urs:ab))
== ==
::
(rash name.txs ;~(pfix (jest 'name: ') (cook crip (star next))))
:: ::
(rash desc.txs ;~(pfix (jest 'description: ') (cook crip (star next)))) (rash name.txs ;~(pfix (jest 'name: ') (cook crip (star next))))
:: ::
(rash owner.txs ;~(pfix (jest 'owner: ~') fed:ag)) (rash desc.txs ;~(pfix (jest 'description: ') (cook crip (star next))))
:: ::
%+ rash dc.txs (rash author.txs ;~(pfix (jest 'author: ~') fed:ag))
;~ pfix ::
(jest 'date-created: ~') %+ rash dc.txs
;~ pfix
(jest 'date-created: ~')
(cook year when:so) (cook year when:so)
== ==
:: ::
%+ rash lm.txs %+ rash lm.txs
;~ pfix ;~ pfix
(jest 'last-modified: ~') (jest 'last-modified: ~')
(cook year when:so) (cook year when:so)
== ==
:: ::
(rash type.txs ;~(pfix (jest 'type: ') (cook crip (star next)))) (rash type.txs ;~(pfix (jest 'type: ') (cook crip (star next))))
:: ::
(rash com.txs ;~(pfix (jest 'comments: ') (fuss %y %n))) (rash com.txs ;~(pfix (jest 'comments: ') (fuss %y %n)))
:: ::

View File

@ -113,7 +113,7 @@
=/ ht (hedtal:collections +.elm) =/ ht (hedtal:collections +.elm)
=/ title (fall (~(get by meta.raw) %name) -.s.bem.gas) =/ title (fall (~(get by meta.raw) %name) -.s.bem.gas)
=/ date (fall (~(get by meta.raw) %date-created) 'missing date') =/ date (fall (~(get by meta.raw) %date-created) 'missing date')
=/ owner (fall (~(get by meta.raw) %owner) 'anonymous') =/ author (fall (~(get by meta.raw) %author) 'anonymous')
:: ::
;div.mb-18.mt-4 ;div.mb-18.mt-4
;+ elm ;+ elm
@ -141,20 +141,20 @@
|= [nom=knot ite=item:collections] |= [nom=knot ite=item:collections]
^- manx ^- manx
?> ?=(%raw -.ite) ?> ?=(%raw -.ite)
=/ owner (fall (~(get by meta.raw.ite) %owner) 'anonymous') =/ author (fall (~(get by meta.raw.ite) %author) 'anonymous')
=/ host (fall (~(get by meta.raw.ite) %host) 'anonymous') =/ host (fall (~(get by meta.raw.ite) %host) 'anonymous')
=/ date (fall (~(get by meta.raw.ite) %date-created) 'missing date') =/ date (fall (~(get by meta.raw.ite) %date-created) 'missing date')
;li.mb-6 ;li.mb-6
;div.flex.align-center ;div.flex.align-center
;div.mr-2 ;div.mr-2
=urb-component "Sigil" =urb-component "Sigil"
=urb-ship "{(trip owner)}" =urb-ship "{(trip author)}"
=urb-size "18" =urb-size "18"
=urb-suffix "true"; =urb-suffix "true";
;div ;div
;a.vanilla.text-mono.text-small.text-700.mr-4 ;a.vanilla.text-mono.text-small.text-700.mr-4
=href "/~~/{(trip host)}/==/web/landscape/profile" =href "/~~/{(trip host)}/==/web/landscape/profile"
; {(trip owner)} ; {(trip author)}
== ==
== ==
;div.text-host-breadcrumb ;div.text-host-breadcrumb
@ -210,7 +210,7 @@
;h2.mt-0.mb-0 ;h2.mt-0.mb-0
;a(href lnk): {(trip name.meta.col)} ;a(href lnk): {(trip name.meta.col)}
== ==
;div.who.text-mono.text-600: {<owner.meta.col>} ;div.who.text-mono.text-600: {<author.meta.col>}
;div.meta-cont ;div.meta-cont
;div.com-count.ml-12 ;div.com-count.ml-12
; {(trip (scot %ud ~(wyt by data.col)))} comments ; {(trip (scot %ud ~(wyt by data.col)))} comments
@ -227,7 +227,7 @@
(scag 5 c.elm) (scag 5 c.elm)
=/ title (fall (~(get by meta.raw) %name) nom) =/ title (fall (~(get by meta.raw) %name) nom)
=/ date (fall (~(get by meta.raw) %date-created) 'missing date') =/ date (fall (~(get by meta.raw) %date-created) 'missing date')
=/ owner (fall (~(get by meta.raw) %owner) 'anonymous') =/ author (fall (~(get by meta.raw) %author) 'anonymous')
=/ lnk=tape =/ lnk=tape
"/~~/{(scow %p p.bem.gas)}/=={(spud (flop s.bem.gas))}/{(trip nom)}" "/~~/{(scow %p p.bem.gas)}/=={(spud (flop s.bem.gas))}/{(trip nom)}"
:: ::
@ -238,7 +238,7 @@
;a(href lnk): {(trip title)} ;a(href lnk): {(trip title)}
;a(href lnk): *{hed.ht} ;a(href lnk): *{hed.ht}
== ==
;div.who.text-mono.text-600: {(trip owner)} ;div.who.text-mono.text-600: {(trip author)}
;div.snippet ;div.snippet
;* tal.ht ;* tal.ht
== ==
@ -262,7 +262,7 @@
;a(href lnk): {(trip title)} ;a(href lnk): {(trip title)}
;a(href lnk): *{hed.ht} ;a(href lnk): *{hed.ht}
== ==
;div.text-mono.text-small.text-300.mt-1.mb-1: {<owner.meta.col>} ;div.text-mono.text-small.text-300.mt-1.mb-1: {<author.meta.col>}
;div ;div
;div.icon-label.justify-start ;div.icon-label.justify-start
;div(urb-component "IconComment"); ;div(urb-component "IconComment");
@ -291,7 +291,7 @@
%collection %collection
=* met meta.col.itm =* met meta.col.itm
:~ [%urb-name (trip name.met)] :~ [%urb-name (trip name.met)]
[%urb-owner (scow %p owner.met)] [%urb-author (scow %p author.met)]
[%urb-host (scow %p p.full-path.met)] [%urb-host (scow %p p.full-path.met)]
[%urb-date-created (scow %da date-created.met)] [%urb-date-created (scow %da date-created.met)]
[%urb-last-modified (scow %da last-modified.met)] [%urb-last-modified (scow %da last-modified.met)]
@ -301,7 +301,7 @@
%raw %raw
=/ met ~(got by meta.raw.itm) =/ met ~(got by meta.raw.itm)
:~ [%urb-name (trip (met %name))] :~ [%urb-name (trip (met %name))]
[%urb-owner (trip (met %owner))] [%urb-author (trip (met %author))]
[%urb-host (trip (met %host))] [%urb-host (trip (met %host))]
[%urb-date-created (trip (met %date-created))] [%urb-date-created (trip (met %date-created))]
[%urb-last-modified (trip (met %last-modified))] [%urb-last-modified (trip (met %last-modified))]
@ -311,7 +311,7 @@
%both %both
=/ met ~(got by meta.raw.itm) =/ met ~(got by meta.raw.itm)
:~ [%urb-name (trip (met %name))] :~ [%urb-name (trip (met %name))]
[%urb-owner (trip (met %owner))] [%urb-author (trip (met %author))]
[%urb-host (trip (met %host))] [%urb-host (trip (met %host))]
[%urb-date-created (trip (met %date-created))] [%urb-date-created (trip (met %date-created))]
[%urb-last-modified (trip (met %last-modified))] [%urb-last-modified (trip (met %last-modified))]

File diff suppressed because one or more lines are too long

View File

@ -8,7 +8,7 @@
-- --
^- manx ^- manx
;div ;div
;input(type "hidden", name "urb-metadata", urb-structure-type "header-profile", urb-owner "{(scow %p p.bem.gas)}"); ;input(type "hidden", name "urb-metadata", urb-structure-type "header-profile", urb-author "{(scow %p p.bem.gas)}");
;div.container ;div.container
;div.row ;div.row
;div.flex-col-2; ;div.flex-col-2;

View File

@ -10,7 +10,7 @@
.^(@p %j /(scot %p p.bem.gas)/code/(scot r.bem.gas)/(scot %p p.bem.gas)) .^(@p %j /(scot %p p.bem.gas)/code/(scot r.bem.gas)/(scot %p p.bem.gas))
^- manx ^- manx
;div ;div
;input(type "hidden", name "urb-metadata", urb-structure-type "header-profile", urb-owner "{(scow %p p.bem.gas)}"); ;input(type "hidden", name "urb-metadata", urb-structure-type "header-profile", urb-author "{(scow %p p.bem.gas)}");
;div.container(urb-devices "") ;div.container(urb-devices "")
;div.row.mt-4 ;div.row.mt-4
;div.flex-col-2; ;div.flex-col-2;