Skip to content

Commit

Permalink
Merge pull request #44 from ve1ld/ops/AdminControls
Browse files Browse the repository at this point in the history
Dynamic Admin Controls
  • Loading branch information
ks0m1c authored Feb 25, 2024
2 parents 77b4896 + 271118d commit dd594fa
Show file tree
Hide file tree
Showing 11 changed files with 124 additions and 20 deletions.
2 changes: 2 additions & 0 deletions config/config.exs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ config :vyasa, VyasaWeb.Endpoint,
# at the `config/runtime.exs`.
config :vyasa, Vyasa.Mailer, adapter: Swoosh.Adapters.Local

config :live_admin, ecto_repo: Vyasa.Repo

# Configure esbuild (the version is required)
config :esbuild,
version: "0.17.11",
Expand Down
2 changes: 1 addition & 1 deletion docs/initial_db_helpers.livemd
Original file line number Diff line number Diff line change
Expand Up @@ -362,7 +362,7 @@ events =
Shloka 30:- 07:13
Shloka 31:- 07:26
Shloka 32 :- 07:38
Shloka 33:- 07:52
Shloka 33:- 07:51
Shloka 34 :- 08:05
Shloka 35 :- 08:18
Shloka 36 :- 08:31
Expand Down
10 changes: 10 additions & 0 deletions lib/vyasa/medium.ex
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,16 @@ defmodule Vyasa.Medium do
"""
def get_event!(id), do: Repo.get!(Event, id)

def get_event_by_order!(%Event{origin: origin, voice_id: v_id}, order) do
#TODO merge Sangh Filters to fix -1 order case for origin backwards operators
(from e in Event,
preload: [:voice, :verse],
where: e.origin >= ^origin and e.voice_id == ^v_id,
order_by: e.origin,
offset: ^order,
limit: 1)
|> Repo.one!()
end

@doc """
Creates a event.
Expand Down
1 change: 0 additions & 1 deletion lib/vyasa/medium/event.ex
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
defmodule Vyasa.Medium.Event do
use Ecto.Schema

import Ecto.Changeset

alias Vyasa.Written.{Verse, Source}
Expand Down
1 change: 1 addition & 0 deletions lib/vyasa/written.ex
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,7 @@ defmodule Vyasa.Written do
|> Repo.preload([:verses, :translations])

chapter.verses

end

@doc """
Expand Down
3 changes: 3 additions & 0 deletions lib/vyasa_web.ex
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ defmodule VyasaWeb do
import Plug.Conn
import Phoenix.Controller
import Phoenix.LiveView.Router

# Import Admin Routes
import LiveAdmin.Router
end
end

Expand Down
79 changes: 79 additions & 0 deletions lib/vyasa_web/admin.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
defmodule VyasaWeb.Admin.Written.Verse do
use LiveAdmin.Resource, schema: Vyasa.Written.Verse
end

defmodule VyasaWeb.Admin.Medium.Event do
use LiveAdmin.Resource, schema: Vyasa.Medium.Event,
immutable_fields: [:source_id],
actions: [:silence, :next, :prev],
render_with: :render_field



def render_field(record, field, session) do
VyasaWeb.Admin.Renderer.render_field(record, field, session)
end


def silence(%{voice: _v} = e, _sess) do
e = %{e | voice: nil}
{:ok, e}
end

def next(%{voice: _v} = e, _sess) do
{:ok, Vyasa.Medium.get_event_by_order!(e, 1)}
end

def prev(%{voice: _v} = e, _sess) do
{:ok, Vyasa.Medium.get_event_by_order!(e, -1)}
end
end


defmodule VyasaWeb.Admin.Renderer do
use Phoenix.Component

def render_field(%{origin: o, voice: %Vyasa.Medium.Voice{} = v} = assigns, :phase, _session) do
assigns = %{assigns | origin: floor(o/1000), voice: Vyasa.Medium.Store.hydrate(v)}
~H"""
<%= @phase %>
<audio id={"#{@origin}-audioplayback"} controls preload="metadata">
<source src={@voice.file_path <> "#t=#{@origin}"} type="audio/mp3">
</audio>
"""
end

def render_field(%{verse: %Vyasa.Written.Verse{} = v} = assigns, :verse_id, _session) do
assigns = %{assigns | verse: v |> Vyasa.Repo.preload(:translations)}
~H"""
<div class="flex items-center justify-center">
<%= @verse.body %>
</div>
<div class="whitespace-pre-line">
<%= List.first(@verse.translations).target.body_translit %>
</div>
"""
end


def render_field(record, field, _session) do
IO.inspect(field)
record
|> Map.fetch!(field)
|> case do
bool when is_boolean(bool) ->
if bool, do: "Yes", else: "No"
date = %Date{} ->
Calendar.strftime(date, "%a, %B %d %Y")
bin when is_binary(bin) -> bin
_ ->
record
|> Map.fetch!(field)
|> case do
val when is_binary(val) -> val
val -> inspect(val, pretty: true)
end
end
end

end
7 changes: 7 additions & 0 deletions lib/vyasa_web/router.ex
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
defmodule VyasaWeb.Router do
use VyasaWeb, :router


pipeline :browser do
plug :accepts, ["html"]
plug CORSPlug, origin: ["https://www.youtube.com/iframe_api"]
Expand Down Expand Up @@ -33,6 +34,12 @@ defmodule VyasaWeb.Router do
live "/explore/:source_title/:chap_no", SourceLive.Chapter.Index, :index
live "/explore/:source_title/:chap_no/:verse_no", SourceLive.Chapter.ShowVerse, :show
end

live_admin "/admin" do
admin_resource "/verses", VyasaWeb.Admin.Written.Verse
admin_resource "/events", VyasaWeb.Admin.Medium.Event
end

end

# Other scopes may use custom stacks.
Expand Down
5 changes: 3 additions & 2 deletions mix.exs
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,9 @@ defmodule Vyasa.MixProject do
{:kino, "~> 0.12.0"},
{:cors_plug, "~> 3.0"},
{:ex_aws, "~> 2.0"},
{:req, "~> 0.4.0"},
{:ex_aws_s3, "~> 2.5"}
{:ex_aws_s3, "~> 2.5"},
{:live_admin, "~> 0.11.4"},
{:req, "~> 0.4.0"}
]
end

Expand Down
2 changes: 2 additions & 0 deletions mix.lock
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
"image": {:hex, :image, "0.39.0", "c003ce095ee32c40f194ca1a48ffa6d3e67192e567183e70dfd8b77bb7144119", [:mix], [{:bumblebee, "~> 0.3", [hex: :bumblebee, repo: "hexpm", optional: true]}, {:evision, "~> 0.1.33", [hex: :evision, repo: "hexpm", optional: true]}, {:exla, "~> 0.5", [hex: :exla, repo: "hexpm", optional: true]}, {:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: true]}, {:kino, "~> 0.7", [hex: :kino, repo: "hexpm", optional: true]}, {:nx, "~> 0.5", [hex: :nx, repo: "hexpm", optional: true]}, {:phoenix_html, "~> 2.14 or ~> 3.2", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:plug, "~> 1.13", [hex: :plug, repo: "hexpm", optional: true]}, {:rustler, "> 0.0.0", [hex: :rustler, repo: "hexpm", optional: true]}, {:sweet_xml, "~> 0.7", [hex: :sweet_xml, repo: "hexpm", optional: false]}, {:vix, "~> 0.23", [hex: :vix, repo: "hexpm", optional: false]}], "hexpm", "d83de26e009a59cb8c53d2efecaacd7c9b990897dc3c7095a5b8847e73c8f968"},
"jason": {:hex, :jason, "1.4.1", "af1504e35f629ddcdd6addb3513c3853991f694921b1b9368b0bd32beb9f1b63", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "fbb01ecdfd565b56261302f7e1fcc27c4fb8f32d56eab74db621fc154604a7a1"},
"kino": {:hex, :kino, "0.12.0", "dfebe415f31cf2f54d98600178c08fd017931d9dada6fb59b7716b5431bee4a1", [:mix], [{:fss, "~> 0.1.0", [hex: :fss, repo: "hexpm", optional: false]}, {:nx, "~> 0.1", [hex: :nx, repo: "hexpm", optional: true]}, {:table, "~> 0.1.2", [hex: :table, repo: "hexpm", optional: false]}], "hexpm", "6796a64ae978fc2e50e52cae022ae6a3d28b8e50589af158b8f3904e7f748377"},
"live_admin": {:hex, :live_admin, "0.11.4", "d4e964ac99d215305d2d9f4af941a334d8e8edd19c53d589ebf3d53b7f079fea", [:mix], [{:ecto, "~> 3.10", [hex: :ecto, repo: "hexpm", optional: false]}, {:ecto_sql, "~> 3.10", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:gettext, "~> 0.22", [hex: :gettext, repo: "hexpm", optional: false]}, {:phoenix_ecto, "~> 4.4", [hex: :phoenix_ecto, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 0.20.0", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: false]}], "hexpm", "c09ae7669b6b6e85bb03af19436c035aaf01e49f4ef7966d0e0c994c651252c9"},
"metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm", "69b09adddc4f74a40716ae54d140f93beb0fb8978d8636eaded0c31b6f099f16"},
"mime": {:hex, :mime, "2.0.5", "dc34c8efd439abe6ae0343edbb8556f4d63f178594894720607772a041b04b02", [:mix], [], "hexpm", "da0d64a365c45bc9935cc5c8a7fc5e49a0e0f9932a761c55d6c52b142780a05c"},
"mimerl": {:hex, :mimerl, "1.2.0", "67e2d3f571088d5cfd3e550c383094b47159f3eee8ffa08e64106cdf5e981be3", [:rebar3], [], "hexpm", "f278585650aa581986264638ebf698f8bb19df297f66ad91b18910dfc6e19323"},
Expand All @@ -43,6 +44,7 @@
"phoenix_live_view": {:hex, :phoenix_live_view, "0.20.1", "92a37acf07afca67ac98bd326532ba8f44ad7d4bdf3e4361b03f7f02594e5ae9", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6.15 or ~> 1.7.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.3", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.15", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "be494fd1215052729298b0e97d5c2ce8e719c00854b82cd8cf15c1cd7fcf6294"},
"phoenix_pubsub": {:hex, :phoenix_pubsub, "2.1.3", "3168d78ba41835aecad272d5e8cd51aa87a7ac9eb836eabc42f6e57538e3731d", [:mix], [], "hexpm", "bba06bc1dcfd8cb086759f0edc94a8ba2bc8896d5331a1e2c2902bf8e36ee502"},
"phoenix_template": {:hex, :phoenix_template, "1.0.3", "32de561eefcefa951aead30a1f94f1b5f0379bc9e340bb5c667f65f1edfa4326", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}], "hexpm", "16f4b6588a4152f3cc057b9d0c0ba7e82ee23afa65543da535313ad8d25d8e2c"},
"phoenix_view": {:hex, :phoenix_view, "2.0.3", "4d32c4817fce933693741deeb99ef1392619f942633dde834a5163124813aad3", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}], "hexpm", "cd34049af41be2c627df99cd4eaa71fc52a328c0c3d8e7d4aa28f880c30e7f64"},
"plug": {:hex, :plug, "1.15.1", "b7efd81c1a1286f13efb3f769de343236bd8b7d23b4a9f40d3002fc39ad8f74c", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "459497bd94d041d98d948054ec6c0b76feacd28eec38b219ca04c0de13c79d30"},
"plug_cowboy": {:hex, :plug_cowboy, "2.6.1", "9a3bbfceeb65eff5f39dab529e5cd79137ac36e913c02067dba3963a26efe9b2", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "de36e1a21f451a18b790f37765db198075c25875c64834bcc82d90b309eb6613"},
"plug_crypto": {:hex, :plug_crypto, "2.0.0", "77515cc10af06645abbfb5e6ad7a3e9714f805ae118fa1a70205f80d2d70fe73", [:mix], [], "hexpm", "53695bae57cc4e54566d993eb01074e4d894b65a3766f1c43e2c61a1b0f45ea9"},
Expand Down
32 changes: 16 additions & 16 deletions priv/static/corpus/gita/verse.json
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@
"title": "Verse 5",
"verse_number": 5,
"verse_order": 5,
"transliteration": "dhṛiṣhṭaketuśhchekitānaḥ kāśhirājaśhcha vīryavān\npurujit kuntibhojaśhcha śhaibyaśhcha nara-puṅgavaḥ\nyudhāmanyuśhcha vikrānta uttamaujāśhcha vīryavān\n",
"transliteration": "dhṛiṣhṭaketuśhchekitānaḥ kāśhirājaśhcha vīryavān\npurujit kuntibhojaśhcha śhaibyaśhcha nara-puṅgavaḥ\n",
"word_meanings": "dhṛiṣhṭaketuḥ—Dhrishtaketu; chekitānaḥ—Chekitan; kāśhirājaḥ—Kashiraj; cha—and; vīrya-vān—heroic; purujit—Purujit; kuntibhojaḥ—Kuntibhoj; cha—and; śhaibyaḥ—Shaibya; cha—and; nara-puṅgavaḥ—best of men; yudhāmanyuḥ—Yudhamanyu; cha—and; vikrāntaḥ—courageous; uttamaujāḥ—Uttamauja; cha—and; vīrya-vān—gallant;\n"
},
{
Expand All @@ -68,7 +68,7 @@
"title": "Verse 6",
"verse_number": 6,
"verse_order": 6,
"transliteration": "saubhadro draupadeyāśhcha sarva eva mahā-rathāḥ\n",
"transliteration": "yudhāmanyuśhcha vikrānta uttamaujāśhcha vīryavān\nsaubhadro draupadeyāśhcha sarva eva mahā-rathāḥ\n",
"word_meanings": "saubhadraḥ—the son of Subhadra; draupadeyāḥ—the sons of Draupadi; cha—and; sarve—all; eva—indeed; mahā-rathāḥ—warriors who could single handedly match the strength of ten thousand ordinary warriors\n"
},
{
Expand Down Expand Up @@ -232,24 +232,24 @@
"chapter_number": 1,
"externalId": 20,
"id": 20,
"text": "अथ व्यवस्थितान् दृष्ट्वा धार्तराष्ट्रान्कपिध्वजः।\n\nप्रवृत्ते शस्त्रसंपाते धनुरुद्यम्य पाण्डवः।।1.20।।\n ",
"text": "अथ व्यवस्थितान् दृष्ट्वा धार्तराष्ट्रान्कपिध्वजः।\n\nप्रवृत्ते शस्त्रसंपाते धनुरुद्यम्य पाण्डवः।।1.20।।\n",
"title": "Verse 20",
"verse_number": 20,
"verse_order": 20,
"transliteration": "atha vyavasthitān dṛiṣhṭvā dhārtarāṣhṭrān kapi-dhwajaḥ\npravṛitte śhastra-sampāte dhanurudyamya pāṇḍavaḥ\nhṛiṣhīkeśhaṁ tadā vākyam idam āha mahī-pate\n",
"word_meanings": "atha—thereupon; vyavasthitān—arrayed; dṛiṣhṭvā—seeing; dhārtarāṣhṭrān—Dhritarashtra’s sons; kapi-dwajaḥ—the Monkey Bannered; pravṛitte—about to commence; śhastra-sampāte—to use the weapons; dhanuḥ—bow; udyamya—taking up; pāṇḍavaḥ—Arjun, the son of Pandu; hṛiṣhīkeśham—to Shree Krishna; tadā—at that time; vākyam—words; idam—these; āha—said; mahī-pate—King\n"
"transliteration": "atha vyavasthitān dṛiṣhṭvā dhārtarāṣhṭrān kapi-dhwajaḥ\npravṛitte śhastra-sampāte dhanurudyamya pāṇḍavaḥ\n",
"word_meanings": "atha—thereupon; vyavasthitān—arrayed; dṛiṣhṭvā—seeing; dhārtarāṣhṭrān—Dhritarashtra’s sons; kapi-dwajaḥ—the Monkey Bannered; pravṛitte—about to commence; śhastra-sampāte—to use the weapons; dhanuḥ—bow; udyamya—taking up; pāṇḍavaḥ—Arjun, the son of Pandu\n"
},
{
"chapter_id": 1,
"chapter_number": 1,
"externalId": 21,
"id": 21,
"text": "अर्जुन उवाच\n\nहृषीकेशं तदा वाक्यमिदमाह महीपते\n\nसेनयोरुभयोर्मध्ये रथं स्थापय मेऽच्युत।।1.21।।\n ",
"text": "हृषीकेशं तदा वाक्यमिदमाह महीपते अर्जुन उवाच\n\nसेनयोरुभयोर्मध्ये रथं स्थापय मेऽच्युत।।1.21।।\n ",
"title": "Verse 21",
"verse_number": 21,
"verse_order": 21,
"transliteration": "arjuna uvācha\nsenayor ubhayor madhye rathaṁ sthāpaya me ’chyuta\n",
"word_meanings": "arjunaḥ uvācha—Arjun said; senayoḥ—armies; ubhayoḥ—both; madhye—in the middle; ratham—chariot; sthāpaya—place; me—my; achyuta—Shree Krishna, the infallible One;\n"
"transliteration": "hṛiṣhīkeśhaṁ tadā vākyam idam āha mahī-pate\narjuna uvācha\nsenayor ubhayor madhye rathaṁ sthāpaya me ’chyuta\n",
"word_meanings": "hṛiṣhīkeśham—to Shree Krishna; tadā—at that time; vākyam—words; idam—these; āha—said; mahī-pate—Kingarjunaḥ uvācha—Arjun said; senayoḥ—armies; ubhayoḥ—both; madhye—in the middle; ratham—chariot; sthāpaya—place; me—my; achyuta—Shree Krishna, the infallible One;\n"
},
{
"chapter_id": 1,
Expand Down Expand Up @@ -304,12 +304,12 @@
"chapter_number": 1,
"externalId": 26,
"id": 26,
"text": "तत्रापश्यत्स्थितान्पार्थः पितृ़नथ पितामहान्।\n\nआचार्यान्मातुलान्भ्रातृ़न्पुत्रान्पौत्रान्सखींस्तथा।।1.26।।\n ",
"text": "तत्रापश्य त्स्थितान् पार्थः पितृ़नथ पितामहान्।\n\nआचार्यान् मातुलान् भ्रातृ़न् पुत्रान् पौत्रान् सखींस् तथा।।1.26।।\n ",
"title": "Verse 26",
"verse_number": 26,
"verse_order": 26,
"transliteration": "tatrāpaśhyat sthitān pārthaḥ pitṝīn atha pitāmahān\nāchāryān mātulān bhrātṝīn putrān pautrān sakhīṁs tathā\nśhvaśhurān suhṛidaśh chaiva senayor ubhayor api\n",
"word_meanings": "tatra—there; apaśhyat—saw; sthitān—stationed; pārthaḥ—Arjun; pitṝīn—fathers; atha—thereafter; pitāmahān—grandfathers; āchāryān—teachers; mātulān—maternal uncles; bhrātṝīn—brothers; putrān—sons; pautrān—grandsons; sakhīn—friends; tathā—also; śhvaśhurān—fathers-in-law; suhṛidaḥ—well-wishers; cha—and; eva—indeed; senayoḥ—armies; ubhayoḥ—in both armies; api—also\n"
"transliteration": "tatrāpaśhyat sthitān pārthaḥ pitṝīn atha pitāmahān\nāchāryān mātulān bhrātṝīn putrān pautrān sakhīṁs tathā\n",
"word_meanings": "tatra—there; apaśhyat—saw; sthitān—stationed; pārthaḥ—Arjun; pitṝīn—fathers; atha—thereafter; pitāmahān—grandfathers; āchāryān—teachers; mātulān—maternal uncles; bhrātṝīn—brothers; putrān—sons; pautrān—grandsons; sakhīn—friends; tathā—likewise\n"
},
{
"chapter_id": 1,
Expand All @@ -320,20 +320,20 @@
"title": "Verse 27",
"verse_number": 27,
"verse_order": 27,
"transliteration": "tān samīkṣhya sa kaunteyaḥ sarvān bandhūn avasthitān\nkṛipayā parayāviṣhṭo viṣhīdann idam abravīt\n",
"word_meanings": "tān—these; samīkṣhya—on seeing; saḥ—they; kaunteyaḥ—Arjun, the son of Kunti; sarvān—all; bandhūn—relatives; avasthitān—present; kṛipayā—by compassion; parayā—great; āviṣhṭaḥ—overwhelmed; viṣhīdan—deep sorrow; idam—this; abravīt—spoke\n"
"transliteration": "śhvaśhurān suhṛidaśh chaiva senayor ubhayor api\ntān samīkṣhya sa kaunteyaḥ sarvān bandhūn avasthitān\n",
"word_meanings": "śhvaśhurān—fathers-in-law; suhṛidaḥ—well-wishers; cha—and; eva—indeed; senayoḥ—armies; ubhayoḥ—in both armies; api—also; tān—these; samīkṣhya—on seeing; saḥ—they; kaunteyaḥ—Arjun, the son of Kunti; sarvān—all; bandhūn—relatives; avasthitān—present\n"
},
{
"chapter_id": 1,
"chapter_number": 1,
"externalId": 28,
"id": 28,
"text": "अर्जुन उवाच\n\nकृपया परयाऽऽविष्टो विषीदन्निदमब्रवीत्।\n\nदृष्ट्वेमं स्वजनं कृष्ण युयुत्सुं समुपस्थितम्।।1.28।।\n ",
"text": "कृपया परयाऽऽविष्टो विषीदन्न् इदम् अब्रवीत्।\n\nअर्जुन उवाच\n\nदृष्ट्वेमं स्वजनं कृष्ण युयुत्सुं समुपस्थितम्।।1.28।।\n ",
"title": "Verse 28",
"verse_number": 28,
"verse_order": 28,
"transliteration": "arjuna uvācha\ndṛiṣhṭvemaṁ sva-janaṁ kṛiṣhṇa yuyutsuṁ samupasthitam\n",
"word_meanings": "arjunaḥ uvācha—Arjun said; dṛiṣhṭvā—on seeing; imam—these; sva-janam—kinsmen; kṛiṣhṇa—Krishna; yuyutsum—eager to fight; samupasthitam—present; \n"
"transliteration": "kṛipayā parayāviṣhṭo viṣhīdann idam abravīt\narjuna uvācha\ndṛiṣhṭvemaṁ sva-janaṁ kṛiṣhṇa yuyutsuṁ samupasthitam\n",
"word_meanings": "kṛipayā—by compassion; parayā—great; āviṣhṭaḥ—overwhelmed; viṣhīdan—deep sorrow; idam—this; abravīt—spoke; arjunaḥ uvācha—Arjun said; dṛiṣhṭvā—on seeing; imam—these; sva-janam—kinsmen; kṛiṣhṇa—Krishna; yuyutsum—eager to fight; samupasthitam—present; \n"
},
{
"chapter_id": 1,
Expand Down

0 comments on commit dd594fa

Please sign in to comment.