migrate view helper components into core components
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				continuous-integration/drone/push Build is passing
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	continuous-integration/drone/push Build is passing
				
			This commit is contained in:
		| @@ -136,6 +136,39 @@ defmodule MemexWeb.CoreComponents do | |||||||
|     """ |     """ | ||||||
|   end |   end | ||||||
|  |  | ||||||
|  |   attr :datetime, :any, required: true, doc: "A `DateTime` struct or nil" | ||||||
|  |  | ||||||
|  |   @doc """ | ||||||
|  |   Phoenix.Component for a <time> element that renders the naivedatetime in the | ||||||
|  |   user's local timezone with Alpine.js | ||||||
|  |   """ | ||||||
|  |   def datetime(assigns) | ||||||
|  |  | ||||||
|  |   @spec cast_datetime(NaiveDateTime.t() | nil) :: String.t() | ||||||
|  |   defp cast_datetime(%NaiveDateTime{} = datetime) do | ||||||
|  |     datetime |> DateTime.from_naive!("Etc/UTC") |> DateTime.to_iso8601(:extended) | ||||||
|  |   end | ||||||
|  |  | ||||||
|  |   defp cast_datetime(_datetime), do: "" | ||||||
|  |  | ||||||
|  |   attr :date, :any, required: true, doc: "A `Date` struct or nil" | ||||||
|  |  | ||||||
|  |   @doc """ | ||||||
|  |   Phoenix.Component for a <date> element that renders the Date in the user's | ||||||
|  |   local timezone with Alpine.js | ||||||
|  |   """ | ||||||
|  |   def date(assigns) | ||||||
|  |  | ||||||
|  |   attr :content, :string, required: true | ||||||
|  |   attr :filename, :string, default: "qrcode", doc: "filename without .png extension" | ||||||
|  |   attr :image_class, :string, default: "w-64 h-max" | ||||||
|  |   attr :width, :integer, default: 384, doc: "width of png to generate" | ||||||
|  |  | ||||||
|  |   @doc """ | ||||||
|  |   Creates a downloadable QR Code element | ||||||
|  |   """ | ||||||
|  |   def qr_code(assigns) | ||||||
|  |  | ||||||
|   attr :note, Note, required: true |   attr :note, Note, required: true | ||||||
|  |  | ||||||
|   def note_content(assigns) do |   def note_content(assigns) do | ||||||
|   | |||||||
							
								
								
									
										7
									
								
								lib/memex_web/components/core_components/date.html.heex
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								lib/memex_web/components/core_components/date.html.heex
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | |||||||
|  | <time :if={@date} datetime={@date |> Date.to_iso8601(:extended)} x-data={~s<{ | ||||||
|  |     date: | ||||||
|  |       Intl.DateTimeFormat([], {timeZone: 'Etc/UTC', dateStyle: 'short'}) | ||||||
|  |         .format(new Date("#{Date.to_iso8601(@date, :extended)}")) | ||||||
|  |   }>} x-text="date"> | ||||||
|  |   <%= @date |> Date.to_iso8601(:extended) %> | ||||||
|  | </time> | ||||||
| @@ -0,0 +1,7 @@ | |||||||
|  | <time :if={@datetime} datetime={cast_datetime(@datetime)} x-data={~s/{ | ||||||
|  |     datetime: | ||||||
|  |       Intl.DateTimeFormat([], {dateStyle: 'short', timeStyle: 'long'}) | ||||||
|  |         .format(new Date("#{cast_datetime(@datetime)}")) | ||||||
|  |   }/} x-text="datetime"> | ||||||
|  |   <%= cast_datetime(@datetime) %> | ||||||
|  | </time> | ||||||
| @@ -0,0 +1,3 @@ | |||||||
|  | <a href={qr_code_image(@content)} download={@filename <> ".png"}> | ||||||
|  |   <img class={@image_class} alt={@filename} src={qr_code_image(@content)} /> | ||||||
|  | </a> | ||||||
| @@ -7,61 +7,6 @@ defmodule MemexWeb.ViewHelpers do | |||||||
|  |  | ||||||
|   use Phoenix.Component |   use Phoenix.Component | ||||||
|  |  | ||||||
|   @doc """ |  | ||||||
|   Phoenix.Component for a <time> element that renders the naivedatetime in the |  | ||||||
|   user's local timezone with Alpine.js |  | ||||||
|   """ |  | ||||||
|  |  | ||||||
|   attr :datetime, :any, required: true, doc: "A `DateTime` struct or nil" |  | ||||||
|  |  | ||||||
|   def datetime(assigns) do |  | ||||||
|     ~H""" |  | ||||||
|     <time |  | ||||||
|       :if={@datetime} |  | ||||||
|       datetime={cast_datetime(@datetime)} |  | ||||||
|       x-data={"{ |  | ||||||
|         datetime: |  | ||||||
|           Intl.DateTimeFormat([], {dateStyle: 'short', timeStyle: 'long'}) |  | ||||||
|             .format(new Date(\"#{cast_datetime(@datetime)}\")) |  | ||||||
|       }"} |  | ||||||
|       x-text="datetime" |  | ||||||
|     > |  | ||||||
|       <%= cast_datetime(@datetime) %> |  | ||||||
|     </time> |  | ||||||
|     """ |  | ||||||
|   end |  | ||||||
|  |  | ||||||
|   @spec cast_datetime(NaiveDateTime.t() | nil) :: String.t() |  | ||||||
|   defp cast_datetime(%NaiveDateTime{} = datetime) do |  | ||||||
|     datetime |> DateTime.from_naive!("Etc/UTC") |> DateTime.to_iso8601(:extended) |  | ||||||
|   end |  | ||||||
|  |  | ||||||
|   defp cast_datetime(_datetime), do: "" |  | ||||||
|  |  | ||||||
|   @doc """ |  | ||||||
|   Phoenix.Component for a <date> element that renders the Date in the user's |  | ||||||
|   local timezone with Alpine.js |  | ||||||
|   """ |  | ||||||
|  |  | ||||||
|   attr :date, :any, required: true, doc: "A `Date` struct or nil" |  | ||||||
|  |  | ||||||
|   def date(assigns) do |  | ||||||
|     ~H""" |  | ||||||
|     <time |  | ||||||
|       :if={@date} |  | ||||||
|       datetime={@date |> Date.to_iso8601(:extended)} |  | ||||||
|       x-data={"{ |  | ||||||
|         date: |  | ||||||
|           Intl.DateTimeFormat([], {timeZone: 'Etc/UTC', dateStyle: 'short'}) |  | ||||||
|             .format(new Date(\"#{@date |> Date.to_iso8601(:extended)}\")) |  | ||||||
|       }"} |  | ||||||
|       x-text="date" |  | ||||||
|     > |  | ||||||
|       <%= @date |> Date.to_iso8601(:extended) %> |  | ||||||
|     </time> |  | ||||||
|     """ |  | ||||||
|   end |  | ||||||
|  |  | ||||||
|   @doc """ |   @doc """ | ||||||
|   Displays content in a QR code as a base64 encoded PNG |   Displays content in a QR code as a base64 encoded PNG | ||||||
|   """ |   """ | ||||||
| @@ -76,21 +21,4 @@ defmodule MemexWeb.ViewHelpers do | |||||||
|  |  | ||||||
|     "data:image/png;base64," <> img_data |     "data:image/png;base64," <> img_data | ||||||
|   end |   end | ||||||
|  |  | ||||||
|   @doc """ |  | ||||||
|   Creates a downloadable QR Code element |  | ||||||
|   """ |  | ||||||
|  |  | ||||||
|   attr :content, :string, required: true |  | ||||||
|   attr :filename, :string, default: "qrcode", doc: "filename without .png extension" |  | ||||||
|   attr :image_class, :string, default: "w-64 h-max" |  | ||||||
|   attr :width, :integer, default: 384, doc: "width of png to generate" |  | ||||||
|  |  | ||||||
|   def qr_code(assigns) do |  | ||||||
|     ~H""" |  | ||||||
|     <a href={qr_code_image(@content)} download={@filename <> ".png"}> |  | ||||||
|       <img class={@image_class} alt={@filename} src={qr_code_image(@content)} /> |  | ||||||
|     </a> |  | ||||||
|     """ |  | ||||||
|   end |  | ||||||
| end | end | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user