Commit graph

47 commits

Author SHA1 Message Date
github-actions[bot]
a991e71851
chore(main): release 0.12.0 (#204)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-06-12 23:49:12 -04:00
Mitchell Hanberg
9a24ff85cb
chore: Bump v0.11.0 2023-01-21 07:02:11 -05:00
Mitchell Hanberg
0879bfb793
docs(changelog): Dynamic Attributes 2023-01-21 06:47:58 -05:00
Mitchell Hanberg
07c82e21d3
Dynamic Attributes (#190)
* Move directories for ast tests to match convention

* feat!: Rename `:let` to `:let!`

We use the "bang" style as the reserved keyword to differentiate it from
other possible attributes.

* feat: use Phoenix.HTML as the default engine

I am choosing to leverage this library in order to quickly get dynamic
attributes (see #183) up and running.

This also ensures that folks who wish to use Temple outside of a Phoenix
project with get some nice HTML functions as well as properly escaped
HTML out of the box.

This can be made optional if Temple becomes decoupled from the render
and it including HTML specific packages becomes a strange.

* feat: Allow user to make their own Component module

The component module is essentially to defer compiling functions that the
user might not need. The component, render_slot, and inner_block functions
are only mean to be used when there isn't another implementation.

In the case of a LiveView application, LiveView is providing the
component runtime implementation. This was causing some compile time
warnings for temple, because it was using the LiveView engine at compile
time (for Temple, not the user's application) and LiveView hadn't been
compiled or loaded.

So, now we defer this to the user to make their own module and import it
where necessary.

* feat: Pass dynamic attributes with the :rest! attribute

The :rest! attribute can be used to pass in a dynamic list of attributes
to be mixed into the static ones at runtime.

Since this cannot be properly escaped by any engine, we have to mark it
as safe and then allow the function to escape it for us. I decided to
leverage the `attributes_escape/1` function from `phoenix_html`. There
isn't really any point in making my own version of this or vendoring it.

Now you can also pass a variable as the attributes as well if you only
want to pass through attributes from a calling component.

The :rest! attribute also works with components, allowing you to pass
a dynamic list of args into them.

Fixes #183

* Move test components to their own file.

* docs(components): Update documentation on Temple.Components

* docs(guides): Mention attributes_escape/1 function in the guides

* chore(test): Move helper to it's own module

* feat: rest! support for slots

* docs(guides): Dynamic attributes

* ci: downgrade runs-on to support OTP 23
2023-01-21 06:44:29 -05:00
Mitchell Hanberg
f4ce790411
fix: runtime boolean attributes (#188)
Closes #187
2022-11-11 22:28:05 -05:00
Mitchell Hanberg
db231e7b6b
Align component model with HEEx/Surface (#182)
* Align component model with HEEx/Surface

This change aligns the component model with HEEx/Surface. This shoudl
allow one to interop components created in any syntax with any other
syntax.

The advantage of this is folks can utilize component packages created
using a different syntax.

This includes several enhancements and breaking changes, please see the changelog and the migration guide for further details.

Closes #130
2022-10-12 09:17:23 -04:00
Mitchell Hanberg
dca47b9802 Bump v0.10.0 2022-09-19 20:37:10 -04:00
Mitchell Hanberg
2f042506b6
feat: Mix task to convert HTML into Temple (#180) 2022-09-11 22:39:31 -04:00
Mitchell Hanberg
f942817994
Utilize the EEx Engine instead of creating an EEx string (#177) 2022-04-19 23:56:46 -04:00
Mitchell Hanberg
c6d29e592b Bump v0.8.0 2021-08-29 18:11:24 -04:00
Mitchell Hanberg
0715a514c5 Bump v0.7.0 2021-06-27 12:05:45 -04:00
Mitchell Hanberg
d9f00e5147
Class object syntax (#140)
* Class object syntax

Allows for conditionally setting classes on an element.

* Docs for class bindings
2021-06-27 12:04:19 -04:00
Mitchell Hanberg
9d05f74cdf
Properly emit boolean attributes (#139)
* Update some docs

* Properly emit boolean attributes.

* Account for quoted literals when compiling attributes

* Update changelog
2021-06-26 21:47:21 -04:00
Mitchell Hanberg
fb5f0a99f4 Bump v0.6.2 2021-06-03 23:14:58 -04:00
Mitchell Hanberg
006886fa5e Bump v0.6.1 2021-05-23 14:01:25 -04:00
Mitchell Hanberg
15a999d8f3 Only collect slots in the root of a component
slot definitions in a component instance can only exist in the root of
that component, with root being defined as the lexical scoping of the
slot still being the component it's defined in.

Fixes #126
2021-05-23 13:56:05 -04:00
Mitchell Hanberg
301963f06b Bump v0.6.0 2021-05-22 01:13:58 -04:00
Mitchell Hanberg
0b55cf1cec Bump v0.6.0-rc.1 2021-05-13 00:31:00 -04:00
Mitchell Hanberg
fe3aed5df7 Some cleanup 2021-04-09 00:16:30 -04:00
Mitchell Hanberg
e97302149b rename default branch 2021-01-02 13:34:19 -05:00
Mitchell Hanberg
c4059b3a6e Bump v0.6.0-rc.0 2021-01-02 13:24:49 -05:00
Mitchell Hanberg
ced2f6ab66 feat: New Component API 2021-01-02 13:22:03 -05:00
Mitchell Hanberg
aa9a7dd578 Update changelog 2020-11-04 20:11:26 -05:00
Mitchell Hanberg
265c413960 Allow element attrs to be evaluated at runtime
Before this change, only keyword list literals could be passed to
elements. If they had non-literals as values, then those would compile
to EEx expressions.

This allows a non-literal to be passed as attrs and have the entire thing
compile to an EEx expression, which will pass the non-literal to a
"runtime_attrs" function, which evaluates a keyword list into a safe
string.

That last part might need to be reworked if the user is not using
the Phoenix.HTML.Engine EEx Engine.
2020-08-09 10:07:27 -04:00
Mitchell Hanberg
7be82e003f Module based Component API 2020-07-24 15:54:38 -04:00
Mitchell Hanberg
7bf649c4b5 Correctly parse do blocks
Did not correctly parse expressions with do blocks
where the expression had two or more arguments before
the block.
2020-07-22 21:34:50 -04:00
Mitchell Hanberg
2206aa62fe Bump v0.6.0-alpha.4 2020-07-16 00:21:25 -04:00
Mitchell Hanberg
1f599f5f6d Handle expressions with do blocks that aren't if/unless/for 2020-07-15 23:23:12 -04:00
Mitchell Hanberg
a2917d3bae Update changelog 2020-07-15 22:40:46 -04:00
Mitchell Hanberg
4498eabedb Context/LiveView generator 2020-06-30 20:43:04 -04:00
Mitchell Hanberg
33c95186fb
Compile to EEx (#80)
Code is gross
2020-06-16 15:28:21 -04:00
Mitchell Hanberg
25284988bb Bump v0.5.0 2020-04-14 10:40:19 -04:00
Mitchell Hanberg
7376ce5d34 Bump v0.4.4 2020-04-14 10:39:47 -04:00
Mitchell Hanberg
fb0359fa8c Bump v0.4.3 2020-01-07 23:49:51 -05:00
Mitchell Hanberg
71bddc6346 Bump v0.4.2 2019-11-22 22:55:57 -05:00
Mitchell Hanberg
d2e8a45094 Bump v0.4.1 2019-09-25 19:23:00 -04:00
Mitchell Hanberg
86f5656b46 Bump v0.4.0 2019-09-13 21:38:53 -04:00
Mitchell Hanberg
5acd6fc079
Svg module (#25)
* Temple.Svg

- scopes update_mdn_task to the temple namespace
- introduces new temple.convert mix task to convert plain HTML and SVG to
  Temple syntax

* Rename Temple.Tags to Temple.Html

* Remove hackney

I'm not sure why it was even in there ¯\_(ツ)_/¯

* Update floki

* Document temple.convert in README
2019-09-13 21:36:16 -04:00
Mitchell Hanberg
9e4f56dd95 Bump v0.3.1 2019-08-27 22:09:22 -04:00
Mitchell Hanberg
451f5d4859 Bump v0.3.0 2019-08-20 23:32:14 -04:00
Mitchell Hanberg
3a52b2d7e7 Update changelog 2019-08-20 23:17:46 -04:00
Mitchell Hanberg
a20900a281 Bump v0.2.0 2019-08-13 18:28:28 -04:00
Shritesh Bhattarai
43f10cd0de Add radio_button (#14) 2019-08-13 11:04:14 -04:00
Mitchell Hanberg
408dfdc6c7 Bump v0.1.2 2019-08-10 01:10:45 -04:00
Mitchell Hanberg
eb0fde6e83
Don't recursively call generated component macros (#12)
Recursively calling the macros works fine if you `import` the whole
module wherever you are using your components, but not if you `require`
the module.

This is because importing brings in the all the macros into the callers
namespace, which allows them to be called just by the macro name. When
you `require` the module, it will look for the generated 2-arity macro
in the callers namespace, which probably doesn't exist.

We get around this by not recursively calling them and avoiding the
problem all togther. A few utility functions solves the original issue
of wanting to DRY the file.
2019-08-10 01:09:24 -04:00
Mitchell Hanberg
030e0f9d3c Bump v0.1.1 2019-08-08 09:01:28 -04:00
Mitchell Hanberg
03e35f858c Finishing touches 2019-07-03 20:57:19 -04:00