defmodule Runbox.Ui do @moduledoc """ Set of utility functions for working with UI. """ @doc """ Returns a URL path to the specific asset in the Network tab. ## Examples iex> network_asset_path("/assets/cameras", "main") "/network/asset/%2Fassets%2Fcameras/main" iex> network_asset_path("/assets/strange type", "strange#id") "/network/asset/%2Fassets%2Fstrange%20type/strange%23id" """ def network_asset_path(type, id) do "/network/asset/#{uri_encode(type)}/#{uri_encode(id)}" end @doc """ Returns a URL path to the specific incident in the Network tab. ## Examples iex> network_incident_path("fire", "big") "/network/incident/fire/big" iex> network_incident_path("bad fire&", "strange#/id") "/network/incident/bad%20fire%26/strange%23%2Fid" """ def network_incident_path(type, id) do "/network/incident/#{uri_encode(type)}/#{uri_encode(id)}" end # Note that `URI.encode_www_form/1` is NOT compatible with JS `decodeURIComponent`. defp uri_encode(segment), do: URI.encode(segment, &URI.char_unreserved?/1) end