Some helpers for phoenix html( truncate, time_ago_in_words, number_with_delimiter, url_for, current_page? )
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
config
lib
priv/gettext
test
.formatter.exs
.gitignore
.travis.yml
LICENSE
README.md
mix.exs
mix.lock

README.md

PhoenixHtmlSimplifiedHelpers

Build Status Hex version Hex downloads Deps Status Inline docs hex.pm

Installation

If available in Hex, the package can be installed as:

  1. Add phoenix_html_simplified_helpers to your list of dependencies in mix.exs:
def deps do
  [{:phoenix_html_simplified_helpers, "~> x.x.x"}]
end
  1. Ensure phoenix_html_simplified_helpers is started before your application:
def application do
  [applications: [:phoenix_html_simplified_helpers]]
end
  1. phoenix_html_simplified_helpers need to import(use) your Phoenix project. The following description is adding 'use syntax' into web.ex.
def view do
  quote do
    use Phoenix.View, root: "web/templates"

    # Import convenience functions from controllers
    import Phoenix.Controller, only: [get_csrf_token: 0, get_flash: 2, view_module: 1]

    # Use all HTML functionality (forms, tags, etc)
    use Phoenix.HTML
    use Phoenix.HTML.SimplifiedHelpers  # <- this line.

    import MyApp.Router.Helpers
    import MyApp.ErrorHelpers
    import MyApp.Gettext
  end
end

It is also able to import(use) in each view helper files.

defmodule MyApp.LayoutView do
  use MyApp.Web, :view
  import Phoenix.HTML.SimplifiedHelpers.Truncate        # <- this line.
  import Phoenix.HTML.SimplifiedHelpers.TimeAgoInWords  # <- this line.
end
  1. time_ago_in_words has Gettext module that is changed translation file from project's locale.
Gettext.put_locale(Phoenix.HTML.SimplifiedHelpers.Gettext, "en")
Gettext.put_locale(Phoenix.HTML.SimplifiedHelpers.Gettext, "ja")
Gettext.put_locale(Phoenix.HTML.SimplifiedHelpers.Gettext, "es")

Usage

truncate

<%= truncate entity.content %>
truncate "Once upon a time in a world far far away"
# Once upon a time in a world...
truncate "Once upon a time in a world far far away", length: 27
# Once upon a time in a wo...
truncate "And they found that many people were sleeping better.", length: 25, omission: "... (continued)"
# And they f... (continued)
truncate("Once upon a time in a world far far away", length: 17, separator: " ")
# Once upon a...

time_ago_in_words

<%= time_ago_in_words entity.published_at %> ago
time_ago_in_words :os.system_time
# less than 5 seconds
time_ago_in_words Timex.now
# less than 5 seconds
time_ago_in_words DateTime.utc_now
# less than 5 seconds
time_ago_in_words Ecto.DateTime.utc
# less than 5 seconds
time_ago_in_words NaiveDateTime.utc_now
# less than 5 seconds
time_ago_in_words ~N[2017-08-14 04:40:12.101212]
# ......

distance_of_time_in_words

from = Timex.to_datetime({{2015, 10, 31}, {0, 0, 0}})
to   = Timex.shift(from, days: 45)
distance_of_time_in_words(from, to)
# about 2 months

Gettext.put_locale(Phoenix.HTML.SimplifiedHelpers.Gettext, "ja")
from = Timex.to_datetime({{2015, 10, 31}, {0, 0, 0}})
to   = Timex.shift(from, months: 1)
distance_of_time_in_words(from, to)
# 約1ヶ月

Gettext.put_locale(Phoenix.HTML.SimplifiedHelpers.Gettext, "es")
from = Timex.to_datetime({{2015, 10, 31}, {0, 0, 0}})
to   = Timex.shift(from, months: 18)
distance_of_time_in_words(from, to)
# más de 1 año

Or uses Timex.format!("{relative}", :relative) instead, like this.

Timex.shift(datetime, hours: -3) |> Timex.format!("{relative}", :relative)
"3 hours ago"

number_with_delimiter

number_with_delimiter 1234567
# 1,234,567

url_for

Routes setting is Here.

url_for(conn, "home.index")
# /

url_for(conn, "entry.release:")
# /release/

url_for(conn, "entry.release:percent")
# /release/percent

url_for(conn, "entry.release:", some: "query")
# /release/?some=query

url_for(conn, "entry.release:", some: "query", unko: "query2")
# /release/?some=query&unko=query2

current_page?

conn = conn(:get, "/release/")

current_page?(conn, "entry.release:")
# true

current_page?(conn, "home.index")
# false