From 545952c8aa377a8f880af451499e956caad7d926 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Mon, 29 Jul 2024 21:14:00 +0800 Subject: [PATCH 001/130] Cleanups: rm old .livemds --- config/runtime.exs | 4 +- docs/initial_db_helpers.livemd | 781 ------------------ ...ion_ritesh.livemd => migration_wow.livemd} | 4 + 3 files changed, 6 insertions(+), 783 deletions(-) delete mode 100644 docs/initial_db_helpers.livemd rename docs/{migration_ritesh.livemd => migration_wow.livemd} (98%) diff --git a/config/runtime.exs b/config/runtime.exs index 49493441..b20384f2 100644 --- a/config/runtime.exs +++ b/config/runtime.exs @@ -116,6 +116,6 @@ if config_env() == :prod do # # See https://hexdocs.pm/swoosh/Swoosh.html#module-installation for details. # - else - Vyasa.Parser.Env.load_file('.env') +else + Vyasa.Parser.Env.load_file(".env") end diff --git a/docs/initial_db_helpers.livemd b/docs/initial_db_helpers.livemd deleted file mode 100644 index 9bd49236..00000000 --- a/docs/initial_db_helpers.livemd +++ /dev/null @@ -1,781 +0,0 @@ -# 2024 - An Ecto Odessy [Initial DB Helpers] - -## Root Section -- Common Utils - -### Supports Recompilation from within Livebook - -```elixir -defmodule R do - def recompile() do - Mix.Task.reenable("app.start") - Mix.Task.reenable("compile") - Mix.Task.reenable("compile.all") - compilers = Mix.compilers() - Enum.each(compilers, &Mix.Task.reenable("compile.#{&1}")) - Mix.Task.run("compile.all") - end -end - -R.recompile() -``` - -### Source Extraction Modules - -Convert json --> struct --> using changeset --> insert into repo - - - -#### Gita Source Extraction Module - -```elixir -alias Vyasa.Written.{Chapter, Source, Translation} -alias Vyasa.Medium -alias Vyasa.Repo - -defmodule G do - @gita_sub_dir Path.expand("./priv/static/corpus/gita") - - @verses "#{@gita_sub_dir}/verse.json" - @translations "#{@gita_sub_dir}/translation.json" - @chapters "#{@gita_sub_dir}/chapters.json" - - alias Vyasa.Written.{Chapter} - - def read_verses() do - @verses - |> File.read!() - |> Jason.decode!() - end - - def read_translations() do - @translations - |> File.read!() - |> Jason.decode!() - end - - def read_chapters() do - @chapters - |> File.read!() - |> Jason.decode!() - end - - def get_translation_by_verse(id) do - read_translations() - |> Enum.find(fn %{"verseNumber" => no, "authorName" => a} -> - no == id and a == "Dr. S. Sankaranarayan" - end) - end - - def create_verse(verse, source_id) do - updated = - verse - |> Map.put("source_id", source_id) - |> Map.put("chapter_no", verse["chapter_number"]) - |> Map.put("body", verse["text"]) - |> Map.put("no", verse["verse_number"]) - - updated - end - - def get_verses_for_chapter(chap_no, src_id) do - read_verses() - |> Enum.filter(fn verse -> verse["chapter_number"] == chap_no end) - |> Enum.map(fn verse -> G.create_verse(verse, src_id) end) - end - - def create_translation_for_chapter(chapter) do - %{ - type: "chapters", - lang: "hi", - target: %{ - title: chapter["name"], - body: chapter["chapter_summary_hindi"] - } - } - end - - def create_chapter(%{} = chapter, source_id) do - %{ - no: chapter["chapter_number"], - title: chapter["name"], - body: chapter["chapter_summary"], - source_id: source_id - } - - # |> dbg() - end - - def create_chapter(%{} = chapter, [%{} = _head | _rest] = _verses, source_id) do - IO.puts("CHECK THIS CHAPTER OUT") - IO.inspect(chapter) - - %{ - source_id: source_id, - no: chapter["chapter_number"] - } - end - - def get_chapters([%{} = _head | _rest] = verses, source_id) do - @chapters - |> File.read!() - |> Jason.decode!() - |> Enum.map(fn chap -> create_chapter(chap, verses, source_id) end) - end - - def get_chapters(source_id) do - @chapters - |> File.read!() - |> Jason.decode!() - |> Enum.map(fn chap -> create_chapter(chap, source_id) end) - end - - def add_relevant_verses(chapter, verses) do - relevant_verses = - verses - |> Enum.filter(fn verse -> verse.chapter_no == chapter.no end) - |> Enum.map(fn verse -> Map.put(verse, :id, Ecto.UUID.generate()) end) - - %{chapter | verses: relevant_verses} - end - - def insert_verses_into_chapters(chapters, verses) do - chapters - |> Enum.map(fn chap -> add_relevant_verses(chap, verses) end) - end - - def get_source([%{} = _h | _r] = chapters, [%{} = _head | _rest] = verses, source_id) do - %{ - id: source_id, - title: "Gita", - chapters: chapters, - verses: verses - } - end - - def create_chapter_changeset(chap, verses, src_id) do - Chapter.changeset( - %Chapter{ - no: chap["chapter_number"], - source_id: src_id, - title: chap["name"], - body: chap["chapter_summary"] - }, - %{ - verses: verses - } - ) - end - - def create_chap_translation_changeset(%Chapter{} = inserted_chap, %{} = chap) do - Translation.gen_changeset( - %Translation{}, - %{ - lang: "en", - body: chap["chapter_summary"], - target: %{ - title: chap["name_meaning"], - translit_title: chap["name_transliterated"], - body: chap["chapter_summary"] - } - }, - inserted_chap - ) - end - - def create_translation_changeset_for_verse( - inserted_verse, - %{"verse_order" => verse_id} = relevant_verse - ) do - dbg(relevant_verse) - - Translation.gen_changeset( - %Translation{}, - %{ - lang: "en", - # body: verse["transliteration"], - target: %{ - body: get_translation_by_verse(verse_id)["description"], - body_translit_meant: relevant_verse["word_meanings"], - body_translit: relevant_verse["transliteration"] - } - }, - inserted_verse - ) - |> dbg() - end - - def create_translation_changesets_for_verses(inserted_verses, relevant_verses) do - Enum.zip(inserted_verses, relevant_verses) - |> Enum.map(fn {inserted_verse, relevant_verse} -> - create_translation_changeset_for_verse(inserted_verse, relevant_verse) - end) - end -end -``` - -#### Hanuman Chalisa Source Extraction Module - -```elixir -defmodule H do - alias Vyasa.Written.{Chapter, Source, Translation} - alias Vyasa.Medium - alias Vyasa.Repo - - @chalisa_events """ - start :- 00:00 - Shloka 1:- 00:02 - Shloka 2 :- 00:24 - Shloka 3:- 00:56 - Shloka 4:- 01:07 - Shloka 5:- 01:23 - Shloka 6:- 01:33 - Shloka 7:- 01:44 - Shloka 8:- 01:55 - Shloka 9:- 02:10 - Shloka 10:- 02:21 - Shloka 11:- 02:32 - Shloka 12:- 02:43 - Shloka 13:- 02:58 - Shloka 14:- 03:09 - Shloka 15:- 03:19 - Shloka 16:- 03:30 - Shloka 17:- 03:45 - Shloka 18:- 03:54 - Shloka 19:- 04:07 - Shloka 20:- 04:18 - Shloka 21:- 04:33 - Shloka 22:- 04:44 - Shloka 23:- 04:55 - Shloka 24:- 05:05 - Shloka 25:- 05:21 - Shloka 26:- 05:32 - Shloka 27:- 05:42 - Shloka 28:- 05:53 - Shloka 29:- 06:09 - Shloka 30:- 06:19 - Shloka 31:- 06:30 - Shloka 32 :- 06:41 - Shloka 33:- 06:56 - Shloka 34 :- 07:07 - Shloka 35 :- 07:17 - Shloka 36 :- 07:28 - Shloka 37:- 07:43 - Shloka 38 :- 07:54 - Shloka 39:- 08:05 - Shloka 40:- 08:16 - Shloka 41:- 08:31 - Shloka 42:- 08:41 - Shloka 43:- 09:00 - end:- 09:42 - """ - - @chalisa_json_path Path.expand("./priv/static/corpus/shlokam.org/hanumanchalisa.json") - - def read_verses() do - @chalisa_json_path - |> File.read!() - |> Jason.decode!() - end -end -``` - -#### Seeders - -```elixir -defmodule SourceSeeders do - alias Vyasa.Repo - alias G - alias Vyasa.Written.{Source, Chapter, Verse, Translation} - alias Vyasa.Medium.{Event, Voice, Video} - - @gulshan_kumar_chalisa_uri "AETFvQonfV8" - @gita_video_uri "z4IQ4Laivtk" - - # generic - def insert_source(uuid, source_title \\ "gita") do - source_changeset = - Source.gen_changeset(%Source{}, %{ - id: uuid, - title: source_title - }) - - Repo.insert!(source_changeset) - end - - def associate_video_to_voice(inserted_voice, video_attrs) do - Video.gen_changeset(%Video{}, video_attrs, inserted_voice) - |> Repo.insert() - end - - def insert_gita_chapter(chap, source_id) do - relevant_verses = G.get_verses_for_chapter(chap["chapter_number"], source_id) - chap_changeset = G.create_chapter_changeset(chap, relevant_verses, source_id) - {:ok, %Chapter{} = inserted_chapter} = Repo.insert(chap_changeset) - %{verses: inserted_verses} = inserted_chapter - - changeset_chap_translation = G.create_chap_translation_changeset(inserted_chapter, chap) - {:ok, %Translation{} = _inserted_chap_translation} = Repo.insert(changeset_chap_translation) - - verses_translation_changesets = - G.create_translation_changesets_for_verses(inserted_verses, relevant_verses) - - _inserted_verse_translations = - verses_translation_changesets - |> Enum.map(fn c_set -> Repo.insert(c_set) end) - |> Enum.map(fn {:ok, inserted_verse_translation} -> inserted_verse_translation end) - - chap - end - - def insert_gita_chapters(source_id) do - G.read_chapters() - |> Enum.map(fn chap -> insert_gita_chapter(chap, source_id) end) - end - - # def insert_hanuman_chalisa_verses(source_id) do - # verses = H.get_verses(soure_id) - - # end - - @gita_chap_1_events """ - start :- 00:00 - Shloka 1:- 00:33 - Shloka 2 :- 00:49 - Shloka 3:- 01:06 - Shloka 4:- 01:19 - Shloka 5:- 01:32 - Shloka 6:- 01:46 - Shloka 7:- 02:00 - Shloka 8:- 02:15 - Shloka 9:- 02:28 - Shloka 10:- 02:42 - Shloka 11:- 02:56 - Shloka 12:- 03:09 - Shloka 13:- 03:22 - Shloka 14:- 03:36 - Shloka 15:- 03:49 - Shloka 16:- 04:02 - Shloka 17:- 04:14 - Shloka 18:- 04:27 - Shloka 19:- 04:40 - Shloka 20:- 04:54 - Shloka 21:- 05:07 - Shloka 22:- 05:23 - Shloka 23:- 05:36 - Shloka 24:- 05:50 - Shloka 25:- 06:05 - Shloka 26:- 06:18 - Shloka 27:- 06:32 - Shloka 28:- 06:46 - Shloka 29:- 07:01 - Shloka 30:- 07:13 - Shloka 31:- 07:26 - Shloka 32 :- 07:38 - Shloka 33:- 07:51 - Shloka 34 :- 08:05 - Shloka 35 :- 08:18 - Shloka 36 :- 08:31 - Shloka 37:- 08:44 - Shloka 38 :- 08:57 - Shloka 39:- 09:09 - Shloka 40:- 09:22 - Shloka 41:- 09:35 - Shloka 42:- 09:48 - Shloka 43:- 10:02 - Shloka 44:- 10:16 - Shloka 45:- 10:29 - Shloka 46:- 10:40 - Shloka 47:- 10:53 - end:- 11:08 - """ - - def seed_gita_chapter_1() do - gita = Vyasa.Written.get_source_by_title("gita") - verses = Vyasa.Written.get_verses_in_chapter(1, gita.id) - - # creats a map using verse information - verse_lookup = Enum.into(for(%{id: id, no: verse_no} <- verses, do: {verse_no, id}), %{}) - - c1_path = Path.expand("./1.mp3", "media/gita") - - {:ok, - %Vyasa.Parser.MP3{ - duration: tot_d, - path: p - }} = Vyasa.Parser.MP3.parse(c1_path) - - {:ok, voice} = - Vyasa.Medium.create_voice(%{ - lang: "sa", - duration: tot_d, - file_path: c1_path, - source_id: gita.id, - chapter_no: 1 - }) - - {:ok, video} = associate_video_to_voice(voice, %{ext_uri: @gita_video_uri, type: "youtube"}) - - @gita_chap_1_events - |> String.split("\n") - |> Enum.map(fn x -> - x - |> String.split(":-") - |> Enum.map(&String.trim/1) - |> Enum.reduce([], fn - <<"Shloka"::utf8, sep::utf8, verse_no::binary>>, acc -> - [verse_lookup[String.to_integer(verse_no)] | acc] - - bin, acc -> - [bin | acc] - end) - end) - |> IO.inspect(limit: :infinity) - |> Enum.reduce( - [], - fn - [time, "start"], acc -> - [ - %Vyasa.Medium.Event{origin: 0, phase: "start", voice_id: voice.id, source_id: gita.id} - | acc - ] - - [time, "end"], [%{origin: o} = prev | acc] -> - [min, sec] = time |> String.split(":") |> Enum.map(&String.to_integer/1) - d = (min * 60 + sec) * 1000 - - [ - %Vyasa.Medium.Event{ - origin: d, - duration: tot_d - d, - phase: "end", - voice_id: voice.id, - source_id: gita.id - } - | [%{prev | duration: d - o} | acc] - ] - - [time, id], [%{origin: o} = prev | acc] -> - [min, sec] = time |> String.split(":") |> Enum.map(&String.to_integer/1) - d = (min * 60 + sec) * 1000 - - [ - %Vyasa.Medium.Event{origin: d, verse_id: id, voice_id: voice.id, source_id: gita.id} - | [%{prev | duration: d - o} | acc] - ] - - _, acc -> - acc - end - ) - |> Enum.map(&Vyasa.Medium.create_event(&1)) - end - - def seed_gita() do - uuid = Ecto.UUID.generate() - _source = insert_source(uuid, "gita") - _chaps = insert_gita_chapters(uuid) - seed_gita_chapter_1() - end - - @chalisa_events """ - start :- 00:00 - Shloka 1:- 00:02 - Shloka 2 :- 00:24 - Shloka 3:- 00:56 - Shloka 4:- 01:07 - Shloka 5:- 01:23 - Shloka 6:- 01:33 - Shloka 7:- 01:44 - Shloka 8:- 01:55 - Shloka 9:- 02:10 - Shloka 10:- 02:21 - Shloka 11:- 02:32 - Shloka 12:- 02:43 - Shloka 13:- 02:58 - Shloka 14:- 03:09 - Shloka 15:- 03:19 - Shloka 16:- 03:30 - Shloka 17:- 03:45 - Shloka 18:- 03:54 - Shloka 19:- 04:07 - Shloka 20:- 04:18 - Shloka 21:- 04:33 - Shloka 22:- 04:44 - Shloka 23:- 04:55 - Shloka 24:- 05:05 - Shloka 25:- 05:21 - Shloka 26:- 05:32 - Shloka 27:- 05:42 - Shloka 28:- 05:53 - Shloka 29:- 06:09 - Shloka 30:- 06:19 - Shloka 31:- 06:30 - Shloka 32 :- 06:41 - Shloka 33:- 06:56 - Shloka 34 :- 07:07 - Shloka 35 :- 07:17 - Shloka 36 :- 07:28 - Shloka 37:- 07:43 - Shloka 38 :- 07:54 - Shloka 39:- 08:05 - Shloka 40:- 08:16 - Shloka 41:- 08:31 - Shloka 42:- 08:41 - Shloka 43:- 09:00 - end:- 09:42 - """ - @chalisa_audio_path Path.expand("./hanuman_chalisa_gulshan_kumar.mp3", "media/chalisa") - def insert_hanuman_chalisa_events() do - chalisa = Vyasa.Written.get_source_by_title("hanuman_chalisa") - verses = Vyasa.Written.get_verses_in_chapter(1, chalisa.id) - verse_lookup = Enum.into(for(%{id: id, no: verse_no} <- verses, do: {verse_no, id}), %{}) - - # parse mp3 info: - {:ok, - %Vyasa.Parser.MP3{ - duration: tot_d, - path: p - }} = Vyasa.Parser.MP3.parse(@chalisa_audio_path) - - # handle voices: - {:ok, voice} = - Vyasa.Medium.create_voice(%{ - lang: "sa", - duration: tot_d, - file_path: @chalisa_audio_path, - source_id: chalisa.id, - chapter_no: 1 - }) - - # handle video: - {:ok, video} = - associate_video_to_voice(voice, %{ext_uri: @gulshan_kumar_chalisa_uri, type: "youtube"}) - - # now handle the events: - @chalisa_events - |> String.split("\n") - |> Enum.map(fn x -> - x - |> String.split(":-") - |> Enum.map(&String.trim/1) - |> Enum.reduce([], fn - <<"Shloka"::utf8, sep::utf8, verse_no::binary>>, acc -> - [verse_lookup[String.to_integer(verse_no)] | acc] - - bin, acc -> - [bin | acc] - end) - end) - |> IO.inspect(limit: :infinity) - |> Enum.reduce( - [], - fn - [time, "start"], acc -> - [ - %Vyasa.Medium.Event{ - origin: 0, - phase: "start", - voice_id: voice.id, - source_id: chalisa.id - } - | acc - ] - - [time, "end"], [%{origin: o} = prev | acc] -> - [min, sec] = time |> String.split(":") |> Enum.map(&String.to_integer/1) - d = (min * 60 + sec) * 1000 - - [ - %Vyasa.Medium.Event{ - origin: d, - duration: tot_d - d, - phase: "end", - voice_id: voice.id, - source_id: chalisa.id - } - | [%{prev | duration: d - o} | acc] - ] - - [time, id], [%{origin: o} = prev | acc] -> - [min, sec] = time |> String.split(":") |> Enum.map(&String.to_integer/1) - d = (min * 60 + sec) * 1000 - - [ - %Vyasa.Medium.Event{ - origin: d, - verse_id: id, - voice_id: voice.id, - source_id: chalisa.id - } - | [%{prev | duration: d - o} | acc] - ] - - _, acc -> - acc - end - ) - |> Enum.map(&Vyasa.Medium.create_event(&1)) - end - - @chalisa_chap_body "The Hanuman Chalisa, composed by Goswami Tulsidas, is a 40-verse hymn dedicated to Lord Hanuman, highlighting his unwavering devotion to Lord Rama. It is a testament to Hanuman's strength, wisdom, and courage, as well as his role in Lord Rama's epic battles against evil. Reciting this hymn is believed to bestow blessings and protection from Hanuman, fostering spiritual growth and devotion to Lord Rama." - def insert_hanuman_chalisa_chapter(source, chalisa_verses) do - {:ok, inserted_chap} = - Chapter.changeset( - %Chapter{ - no: 1, - source_id: source.id, - title: "Hanuman Chalisa", - body: @chalisa_chap_body - }, - %{ - verses: - chalisa_verses - |> Enum.map(fn v -> - %{ - no: v["count"], - body: v["verse_sanskrit"], - source_id: source.id - } - end) - } - ) - |> Repo.insert() - |> dbg() - - Translation.gen_changeset( - %Translation{}, - %{ - lang: "en", - body: @chalisa_chap_body, - target: %{ - title: "Hanuman Chalisa", - translit_tile: "Hanuman Chalisa", - body: @chalisa_chap_body - }, - source_id: source.id - }, - inserted_chap - ) - |> Repo.insert() - |> dbg() - - inserted_chap - end - - def insert_hanuman_chalisa_verses(source, chalisa_verses) do - chalisa_verses - |> Enum.map(fn v -> - Verse.changeset(%Verse{}, %{ - no: v["count"], - body: v["verse_sanskrit"], - source_id: source.id - }) - end) - |> Enum.map(fn chset -> Repo.insert(chset) end) - |> Enum.map(fn {:ok, inserted_v} -> inserted_v end) - end - - def insert_hanuman_chalisa_verse_translations( - %Chapter{verses: inserted_verses} = _inserted_chap, - chalisa_verses - ) do - inserted_verses - |> Enum.zip(chalisa_verses) - |> Enum.map(fn {inserted_verse, v} -> - Translation.gen_changeset( - %Translation{}, - %{ - lang: "en", - target: %{ - body: v["verse_sanskrit"], - body_translit_meant: v["verse_meaning"], - body_translit: v["verse_trans"] - }, - source_id: inserted_verse.source_id, - # chapter_no: inserted_verse.chapter_no, # this assoc isn't supposed to be done @ verse-trans creation - verse_id: inserted_verse.id - }, - inserted_verse - ) - end) - |> Enum.map(fn trans_cset -> Repo.insert(trans_cset) end) - |> Enum.map(fn outcome -> elem(outcome, 1) end) - |> dbg() - end - - def seed_hanuman_chalisa() do - uuid = Ecto.UUID.generate() - %{"verses" => chalisa_verses} = _verse_info = H.read_verses() - - uuid - |> insert_source("hanuman_chalisa") - |> insert_hanuman_chalisa_chapter(chalisa_verses) - |> insert_hanuman_chalisa_verse_translations(chalisa_verses) - - insert_hanuman_chalisa_events() - end -end -``` - -#### DB Convenience Actions - -* purging of db -* seeding of db - -```elixir -defmodule DBHelper do - alias SourceSeeders - alias Vyasa.Repo - alias G - alias Vyasa.Written.{Source, Chapter, Verse, Translation} - alias Vyasa.Medium.{Video, Event, Voice} - - # alias Vyasa.Medium.{Voice, Event, Store, Track, Video, Writer} - - def purge_db() do - [Video, Event, Voice, Translation, Verse, Chapter, Source] - |> Enum.map(fn mod -> Repo.delete_all(mod) end) - end - - def seed_db() do - SourceSeeders.seed_gita() - SourceSeeders.seed_hanuman_chalisa() - end -end -``` - -#### Testing the purging and seeding of the db: - -```elixir -R.recompile() -DBHelper.purge_db() -DBHelper.seed_db() -``` - -### Exploring video-voice sync - -The following is a demo check that the seeding is working correctly. Once verified, the block may be removed. - -```elixir -R.recompile() - -alias Vyasa.Written -alias Vyasa.Written.{Source} -alias Vyasa.Medium.{Voice, Video, Store} -alias Vyasa.Medium -alias Vyasa.Repo - -%Source{id: chalisa_id} = chalisa = Written.get_source_by_title("hanuman_chalisa") -h_voice = Repo.get_by!(Voice, source_id: chalisa_id) |> Repo.preload([:video]) - -%Source{id: gita_id} = gita = Written.get_source_by_title("gita") -g_voice = Repo.get_by!(Voice, source_id: gita_id) |> Repo.preload([:video]) - -g_voice.video |> Medium.resolve_video_url() - -Medium.get_voice(chalisa_id, 1, "sa") |> Store.hydrate() -``` - -```elixir - -``` diff --git a/docs/migration_ritesh.livemd b/docs/migration_wow.livemd similarity index 98% rename from docs/migration_ritesh.livemd rename to docs/migration_wow.livemd index 9b9e2f19..a82276c8 100644 --- a/docs/migration_ritesh.livemd +++ b/docs/migration_wow.livemd @@ -111,3 +111,7 @@ File.ls!(target_media_folder) end) |> Enum.map(fn v -> Vyasa.Medium.Voice.gen_changeset(%Medium.Voice{}, v) end) ``` + +```elixir +Vyasa.Repo.all(Vyasa.Medium.Video) +``` From b2095887107b7f746a58c6e0a8b961f2897556e9 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Tue, 30 Jul 2024 12:22:53 +0800 Subject: [PATCH 002/130] Update migrator script's save() to preload video --- lib/vyasa/corpus/migrator/dump.ex | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/vyasa/corpus/migrator/dump.ex b/lib/vyasa/corpus/migrator/dump.ex index fe225fb7..96517872 100644 --- a/lib/vyasa/corpus/migrator/dump.ex +++ b/lib/vyasa/corpus/migrator/dump.ex @@ -28,7 +28,8 @@ defmodule Vyasa.Corpus.Migrator.Dump do |> Repo.preload(:video) |> Vyasa.Medium.Store.hydrate() |> Enum.map(&Vyasa.Medium.Store.download(&1)) - %{record | voices: voices} + + %{record | voices: voices |> Repo.preload(:video)} end def hydrate_voices(r), do: r From 4b1b4047d9d1f7594a855338a0e2c61e385205c0 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Tue, 30 Jul 2024 16:33:59 +0800 Subject: [PATCH 003/130] fix imprt stmt & add guard to hoverrune --- assets/js/hooks/floater.js | 13 ++++++------- assets/js/hooks/hoverune.js | 4 ++++ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/assets/js/hooks/floater.js b/assets/js/hooks/floater.js index 33bb2e68..37f5efd9 100644 --- a/assets/js/hooks/floater.js +++ b/assets/js/hooks/floater.js @@ -2,6 +2,12 @@ * Ideally generic hook for floating logic. */ import {isMobileDevice} from "../utils/uncategorised_utils.js"; +import { + computePosition, + autoPlacement, + shift, + offset, +} from "floating-ui.dom.umd.min"; Floater = { mounted() { @@ -48,13 +54,6 @@ Floater = { return } - const { - computePosition, - autoPlacement, - shift, - offset, - } = window.FloatingUIDOM; - computePosition(reference, floater, { placement: 'right', // NOTE: order of middleware matters. diff --git a/assets/js/hooks/hoverune.js b/assets/js/hooks/hoverune.js index 439062f3..47905347 100644 --- a/assets/js/hooks/hoverune.js +++ b/assets/js/hooks/hoverune.js @@ -52,6 +52,10 @@ export default HoveRune = { const targetEvents = ['pointerdown', 'pointerup'] targetEvents.forEach(e => window.addEventListener(e, ({ target }) => { var selection = window.getSelection() + if (!selection || selection.rangeCount <= 0) { + return + } + var getSelectRect = selection.getRangeAt(0).getBoundingClientRect(); const getSelectText = selection.toString() //const validElem = findHook(target) From 021f7979ac3a12ced584f8aedab97b9555936d9a Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Wed, 31 Jul 2024 11:53:05 +0800 Subject: [PATCH 004/130] Wire up voice metadata note: because of this, the PR requires the deployment to use a fresh json file this prepares for the info needed by media sessions does some linting using the latest elixir-ls --- assets/js/hooks/audio_player.js | 28 +- lib/vyasa/medium.ex | 33 +- lib/vyasa/medium/meta.ex | 56 ++- lib/vyasa/medium/voice.ex | 21 +- lib/vyasa_web/live/media_live/media_bridge.ex | 380 ++++++++++-------- .../live/media_live/media_bridge.html.heex | 42 +- 6 files changed, 325 insertions(+), 235 deletions(-) diff --git a/assets/js/hooks/audio_player.js b/assets/js/hooks/audio_player.js index 3ee4fc05..80364f25 100644 --- a/assets/js/hooks/audio_player.js +++ b/assets/js/hooks/audio_player.js @@ -126,7 +126,7 @@ AudioPlayer = { console.log("PlayMedia", playback) const {meta: playbackMeta, "playing?": isPlaying, elapsed} = playback; const { title, duration, file_path: filePath, artists } = playbackMeta; - const artist = artists ? artists[0] : "myArtist" // FIXME: this should be ready once seeding has been update to properly add in artist names + const artist = artists ? artists.join(", ") : "Unknown artist"; const beginTime = nowMs() - elapsed this.playbackBeganAt = beginTime @@ -142,10 +142,7 @@ AudioPlayer = { } // TODO: supply necessary info for media sessions api here... - const isMediaSessionApiSupported = "mediaSession" in navigator; - if(isMediaSessionApiSupported){ - navigator.mediaSession.metadata = new MediaMetadata({artist, title}) - } + this.updateMediaSession({title, artist}) }, play(opts = {}){ console.log("Triggered playback, check params", { @@ -168,6 +165,7 @@ AudioPlayer = { } }) }, + // TODO: add triggers for updateMediaSession() pause(){ this.player.pause() }, @@ -191,6 +189,26 @@ AudioPlayer = { this.player.play() // force a play event if is not paused } }, + updateMediaSession(payload) { + const isSupported = "mediaSession" in navigator; + if (!isSupported) { + return; + } + + const oldSessionData = navigator.mediaSession?.metadata + // FIXME: this spreading won't work since it's an obj and not an existing dict + const metadata = { + ...oldSessionData, + ...payload, + } + console.log("Updating media session api", { + oldSessionData, + payload, + metadata, + }) + + navigator.mediaSession.metadata = new MediaMetadata(metadata) + } } diff --git a/lib/vyasa/medium.ex b/lib/vyasa/medium.ex index d89a54e4..be765e9d 100644 --- a/lib/vyasa/medium.ex +++ b/lib/vyasa/medium.ex @@ -1,11 +1,9 @@ defmodule Vyasa.Medium do - import Ecto.Query, warn: false alias Vyasa.Medium.{Video, Voice, Event} alias Vyasa.Medium alias Vyasa.Repo - @doc """ Gets a single voice. @@ -28,14 +26,16 @@ defmodule Vyasa.Medium do def get_voice(source_id, chapter_no, lang) do from(v in Voice, where: v.source_id == ^source_id and v.lang == ^lang and v.chapter_no == ^chapter_no, - preload: [:events, :video]) + preload: [:events, :video] + ) |> Repo.one() end def get_voices!(%Voice{source_id: src_id, chapter_no: c_no, lang: l}) do from(v in Voice, where: v.source_id == ^src_id and v.chapter_no == ^c_no and v.lang == ^l, - preload: [:events]) + preload: [:events] + ) |> Repo.all() end @@ -44,19 +44,18 @@ defmodule Vyasa.Medium do Currently mainly used for youtube videos, possibly more in the future. """ - def resolve_video_url(%Video{ - type: type, - ext_uri: ext_uri, - } = _video) do - + def resolve_video_url( + %Video{ + type: type, + ext_uri: ext_uri + } = _video + ) do cond do type == "youtube" -> "https://www.youtube.com/watch?v=#{ext_uri}" true -> ext_uri end - end - @doc """ Creates a voice. @@ -137,17 +136,18 @@ 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, + # 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) + limit: 1 + ) |> Repo.one!() end - @doc """ + @doc """ Creates a event. ## Examples @@ -161,10 +161,12 @@ defmodule Vyasa.Medium do """ def create_event(attrs \\ %{}) + def create_event(%Event{} = event) do event |> Repo.insert() end + def create_event(attrs) do %Event{} |> Event.changeset(attrs) @@ -222,5 +224,4 @@ defmodule Vyasa.Medium do |> List.first() |> Medium.Store.hydrate() end - end diff --git a/lib/vyasa/medium/meta.ex b/lib/vyasa/medium/meta.ex index 2048bd66..0fa0e14f 100644 --- a/lib/vyasa/medium/meta.ex +++ b/lib/vyasa/medium/meta.ex @@ -1,24 +1,42 @@ - defmodule Vyasa.Medium.Meta do - @moduledoc """ - Meta is a medium-agnostic struct for tracking metadata. - """ +defmodule Vyasa.Medium.Meta do + @moduledoc """ + Meta is a medium-agnostic struct for tracking metadata for that medium. - alias Vyasa.Medium.Meta - - defstruct [ - title: nil, - artists: [], - duration: 0, # time, in ms - file_path: nil, - ] - - defimpl Jason.Encoder, for: Meta do - def encode(%Meta{ title: title, artists: artists, duration: duration, file_path: file_path }, opts) do - %{ title: title, artists: artists, duration: duration, file_path: file_path } - |> Jason.Encode.map(opts) - end - end + Since this relates to rich media, the intent is also to contain information that is helpful for interfacing + with APIs like the MediaSessions API. + """ + alias Vyasa.Medium.Meta + defstruct title: nil, + artists: [], + album: nil, + artwork: %{}, + # time, in ms + duration: 0, + file_path: nil + defimpl Jason.Encoder, for: Meta do + def encode( + %Meta{ + title: title, + artists: artists, + album: album, + artwork: artwork, + duration: duration, + file_path: file_path + }, + opts + ) do + %{ + title: title, + artists: artists, + album: album, + artwork: artwork, + duration: duration, + file_path: file_path + } + |> Jason.Encode.map(opts) + end end +end diff --git a/lib/vyasa/medium/voice.ex b/lib/vyasa/medium/voice.ex index 9ccb0ede..2b750e23 100644 --- a/lib/vyasa/medium/voice.ex +++ b/lib/vyasa/medium/voice.ex @@ -14,18 +14,24 @@ defmodule Vyasa.Medium.Voice do ## FIXME: change field name to artists since it's an array.. embeds_one :meta, VoiceMetadata do - field(:artist, {:array, :string}) + field(:artists, {:array, :string}) + field(:album, :string) + field(:artwork, {:array, {:map, :string}}) end has_one :video, Video, references: :id, foreign_key: :voice_id - has_many :events, Event, references: :id, foreign_key: :voice_id, preload_order: [asc: :origin] + + has_many :events, Event, + references: :id, + foreign_key: :voice_id, + preload_order: [asc: :origin] belongs_to :track, Track, references: :id, foreign_key: :track_id belongs_to :chapter, Chapter, type: :integer, references: :no, foreign_key: :chapter_no belongs_to :source, Source, references: :id, foreign_key: :source_id, type: :binary_id timestamps(type: :utc_datetime) - end + end @doc false @@ -57,10 +63,11 @@ defmodule Vyasa.Medium.Voice do end def file_upload(%Ecto.Changeset{changes: %{file_path: _} = changes} = ec) do - ext_path = apply_changes(ec) - |> Vyasa.Medium.Writer.run() - |> then(&elem(&1, 1).key) - |> Vyasa.Medium.Store.get!() + ext_path = + apply_changes(ec) + |> Vyasa.Medium.Writer.run() + |> then(&elem(&1, 1).key) + |> Vyasa.Medium.Store.get!() %{ec | changes: %{changes | file_path: ext_path}} end diff --git a/lib/vyasa_web/live/media_live/media_bridge.ex b/lib/vyasa_web/live/media_live/media_bridge.ex index 70ff441a..e0f032da 100644 --- a/lib/vyasa_web/live/media_live/media_bridge.ex +++ b/lib/vyasa_web/live/media_live/media_bridge.ex @@ -14,29 +14,33 @@ defmodule VyasaWeb.MediaLive.MediaBridge do @default_player_config %{ height: "300", width: "400", - playerVars: %{ # see supported params here: https://developers.google.com/youtube/player_parameters#Parameters + # see supported params here: https://developers.google.com/youtube/player_parameters#Parameters + playerVars: %{ autoplay: 1, mute: 1, start: 0, controls: 0, enablejsapi: 1, - iv_load_policy: 3, # hide video annotations - playsinline: 1, # ensures it doesn't full-screen on ios + # hide video annotations + iv_load_policy: 3, + # ensures it doesn't full-screen on ios + playsinline: 1 } } @impl true def mount(_params, _sess, socket) do encoded_config = Jason.encode!(@default_player_config) - socket = socket - |> assign(playback: nil) - |> assign(voice: nil) - |> assign(video: nil) - |> assign(video_player_config: encoded_config) - |> assign(should_show_vid: false) - |> assign(is_follow_mode: true) - |> sync_session() + socket = + socket + |> assign(playback: nil) + |> assign(voice: nil) + |> assign(video: nil) + |> assign(video_player_config: encoded_config) + |> assign(should_show_vid: false) + |> assign(is_follow_mode: true) + |> sync_session() {:ok, socket, layout: false} end @@ -55,6 +59,7 @@ defmodule VyasaWeb.MediaLive.MediaBridge do defp play_media(socket, %Playback{elapsed: elapsed} = playback) do IO.puts("play_media triggerred with elapsed = #{elapsed} ms") + socket |> assign(playback: update_playback_on_play(playback)) |> update_audio_player() @@ -67,59 +72,80 @@ defmodule VyasaWeb.MediaLive.MediaBridge do defp update_playback_on_play(%Playback{elapsed: elapsed} = playback) do now = DateTime.utc_now() - played_at = cond do - elapsed > 0 -> # resume case - DateTime.add(now, -round(elapsed), :millisecond) - elapsed == 0 -> # fresh start case - now - true -> - now - end + + played_at = + cond do + # resume case + elapsed > 0 -> + DateTime.add(now, -round(elapsed), :millisecond) + + # fresh start case + elapsed == 0 -> + now + + true -> + now + end + %{playback | playing?: true, played_at: played_at} - end + end - defp pause_media(socket, %Playback{} = playback) do + defp pause_media(socket, %Playback{} = playback) do socket |> assign(playback: update_playback_on_pause(playback)) |> update_audio_player() + # |> pause_audio() end - defp update_playback_on_pause( %Playback{ - played_at: played_at - } = playback) do + defp update_playback_on_pause( + %Playback{ + played_at: played_at + } = playback + ) do now = DateTime.utc_now() elapsed = DateTime.diff(now, played_at, :millisecond) %{playback | playing?: false, paused_at: now, elapsed: elapsed} end - # internal action: updates the playback state on seek defp update_playback_on_seek(socket, position_ms) do - %{playback: %Playback{ - playing?: playing?, - played_at: played_at, - } = playback, + %{ + playback: + %Playback{ + playing?: playing?, + played_at: played_at + } = playback } = socket.assigns - now = DateTime.utc_now() # <=== sigil U + # <=== sigil U + now = DateTime.utc_now() - played_at = cond do - !playing? -> played_at - playing? -> DateTime.add(now, -round(position_ms), :millisecond) - end + played_at = + cond do + !playing? -> played_at + playing? -> DateTime.add(now, -round(position_ms), :millisecond) + end socket |> assign(playback: %{playback | played_at: played_at, elapsed: position_ms}) end @impl true - def handle_event("toggle_should_show_vid", _, %{assigns: %{ should_show_vid: flag } = _assigns} = socket) do + def handle_event( + "toggle_should_show_vid", + _, + %{assigns: %{should_show_vid: flag} = _assigns} = socket + ) do {:noreply, socket |> assign(should_show_vid: !flag)} end @impl true - def handle_event("toggle_is_follow_mode", _, %{assigns: %{ is_follow_mode: flag } = _assigns} = socket) do + def handle_event( + "toggle_is_follow_mode", + _, + %{assigns: %{is_follow_mode: flag} = _assigns} = socket + ) do { :noreply, socket @@ -131,38 +157,43 @@ defmodule VyasaWeb.MediaLive.MediaBridge do @impl true def handle_event("play_pause", _, socket) do %{ - playback: %Playback { - playing?: playing?, - } = playback, + playback: + %Playback{ + playing?: playing? + } = playback } = socket.assigns {:noreply, cond do playing? -> socket |> pause_media(playback) !playing? -> socket |> play_media(playback) - end - } - end - + end} + end - @doc""" + @doc """ Handles seekTime event originated from the ProgressBar """ @impl true - def handle_event("seekTime", %{"seekToMs" => position_ms, "originator" => "ProgressBar" = originator} = _payload, socket) do + def handle_event( + "seekTime", + %{"seekToMs" => position_ms, "originator" => "ProgressBar" = originator} = _payload, + socket + ) do IO.puts("[handleEvent] seekToMs #{position_ms} ORIGINATOR = #{originator}") + socket |> handle_seek(position_ms, originator) - end + end # Fallback for seekTime, if no originator is present, shall be to treat MediaBridge as the originator # and call handle_seek. @impl true def handle_event("seekTime", %{"seekToMs" => position_ms} = _payload, socket) do IO.puts("[handleEvent] seekToMs #{position_ms}") + socket |> handle_seek(position_ms, "MediaBridge") - end + end # when originator is the ProgressBar, then shall only consume and carry out internal actions only # i.e. updating of the playback state kept in MediaBridge liveview. @@ -178,12 +209,14 @@ defmodule VyasaWeb.MediaLive.MediaBridge do # internal: updating of the playback state kept in the MediaBridge liveview # external: pubbing via the seekTime targetEvent defp handle_seek(socket, position_ms, "MediaBridge" = originator) do - seek_time_payload = %{ + seek_time_payload = %{ seekToMs: position_ms, originator: originator } - IO.inspect("handle_seek originator: #{originator}, playback position ms: #{position_ms}", label: "checkpoint") + IO.inspect("handle_seek originator: #{originator}, playback position ms: #{position_ms}", + label: "checkpoint" + ) { :noreply, @@ -193,43 +226,56 @@ defmodule VyasaWeb.MediaLive.MediaBridge do } end - @impl true @doc """ On receiving a voice_ack, the written and player contexts are now synced. A playback struct is created that represents this synced-state and the client-side hook is triggerred to register the associated events timeline. """ - def handle_info({_, :voice_ack, %Voice{ - video: video, - } = voice}, socket) do - %Voice{ - events: voice_events, - title: title, - file_path: file_path, - duration: duration, - # FIXME: seeding has issues, loaded voice's meta should load something, it's nill at the moment - # meta: %{ - # artist: artists, # FIXME: voice.ex has a meta and that needs to change variable name to "artists" - # }= _voice_meta, - } = loaded_voice = voice |> Medium.load_events() - - playback_meta = %Meta{ - title: title, - # artists: artists, - artists: ["artistA", "artistB"], - duration: duration, - file_path: file_path, - } - - { + def handle_info( + {_, :voice_ack, + %Voice{ + video: video + } = voice}, + socket + ) do + %Voice{ + events: voice_events, + title: title, + file_path: file_path, + duration: duration, + # FIXME: seeding has issues, loaded voice's meta should load something, it's nill at the moment + meta: + %{ + artists: artists, + album: album, + artwork: artwork + } = meta + } = loaded_voice = voice |> Medium.load_events() + + playback_meta = %Meta{ + title: title, + # TODO: use metadata present in db about the medium + artists: artists, + album: album, + artwork: artwork, + duration: duration, + file_path: file_path + } + + IO.inspect(meta, label: "Checkpoint: voice meta:") + IO.inspect(playback_meta, label: "Checkpoint: playback meta:") + + { :noreply, socket |> assign(voice: loaded_voice) |> assign(video: video) |> assign(playback: Playback.init_playback(playback_meta)) - |> push_event("media_bridge:registerEventsTimeline", %{voice_events: voice_events |> create_events_payload()}) - } + |> push_event("media_bridge:registerEventsTimeline", %{ + voice_events: voice_events |> create_events_payload() + }) + } end def handle_info({_, :written_handshake, :init}, %{assigns: %{session: %{"id" => id}}} = socket) do @@ -241,15 +287,16 @@ defmodule VyasaWeb.MediaLive.MediaBridge do # to get updated to the start of the event corresponding to that particular verse. @impl true def handle_info({_, :playback_sync, %{verse_id: verse_id} = _inner_msg} = _msg, socket) do - %{voice: %{ events: events } = _voice} = socket.assigns + %{voice: %{events: events} = _voice} = socket.assigns IO.inspect("handle_info::playback_sync", label: "checkpoint") %Event{ origin: target_ms - } = _target_event = events - |> get_target_event(verse_id) - + } = + _target_event = + events + |> get_target_event(verse_id) socket |> handle_seek(target_ms, "MediaBridge") @@ -260,55 +307,56 @@ defmodule VyasaWeb.MediaLive.MediaBridge do {:noreply, socket} end - -defp create_events_payload([%Event{} | _] = events) do - events|> Enum.map(&(&1 |> Map.take([:origin, :duration, :phase, :fragments, :verse_id]))) -end - -defp get_target_event([%Event{} | _] = events, verse_id) do - events - |> Enum.find(fn e -> e.verse_id === verse_id end) + defp create_events_payload([%Event{} | _] = events) do + events |> Enum.map(&(&1 |> Map.take([:origin, :duration, :phase, :fragments, :verse_id]))) end -defp update_audio_player(%{ - assigns: %{ - playback: %Playback{ - playing?: playing?, - } = playback - } = _assigns, - } = socket) do - - - send_update( - self(), - VyasaWeb.AudioPlayer, - id: "audio-player", - playback: playback, - event: "media_bridge:update_audio_player" - ) - - cmd = cond do - playing? -> - "play" - !playing? -> - "pause" + defp get_target_event([%Event{} | _] = events, verse_id) do + events + |> Enum.find(fn e -> e.verse_id === verse_id end) end - seek_time_payload = %{ + defp update_audio_player( + %{ + assigns: + %{ + playback: + %Playback{ + playing?: playing? + } = playback + } = _assigns + } = socket + ) do + send_update( + self(), + VyasaWeb.AudioPlayer, + id: "audio-player", + playback: playback, + event: "media_bridge:update_audio_player" + ) + + cmd = + cond do + playing? -> + "play" + + !playing? -> + "pause" + end + + seek_time_payload = %{ seekToMs: playback.elapsed, originator: "MediaBridge" } - socket - |> push_event("media_bridge:play_pause", %{ - cmd: cmd, - originator: "MediaBridge", - playback: playback, + socket + |> push_event("media_bridge:play_pause", %{ + cmd: cmd, + originator: "MediaBridge", + playback: playback }) - |> push_event("media_bridge:seekTime", seek_time_payload) - -end - + |> push_event("media_bridge:seekTime", seek_time_payload) + end # TODO: add this when implementing tracks & playlists defp js_prev() do @@ -321,14 +369,17 @@ end attr :id, :string, required: true attr :min, :integer, default: 0 attr :max, :integer, default: 100 - attr :value, :integer # elapsed time (in milliseconds) + # elapsed time (in milliseconds) + attr :value, :integer + def progress_bar(assigns) do assigns = assign_new(assigns, :value, fn -> assigns[:min] || 0 end) IO.inspect(assigns, label: "progress hopefully we make some progress") + ~H"""
""" - end + end attr :playback, Playback, required: false + def play_pause_button(assigns) do - ~H""" + ~H""" - """ + """ end - def next_button(assigns) do - ~H""" - + def next_button(assigns) do + ~H""" + """ - end + end def prev_button(assigns) do ~H""" - + """ end @@ -451,17 +498,19 @@ end ~H"""
+ phx-hook="Floater" + data-floater-id="container-YouTubePlayer" + data-floater-reference-selector=".emphasized-verse" + data-floater-fallback-reference-selector="#media-player-container" + > <.live_component module={VyasaWeb.YouTubePlayer} - id={"YouTubePlayer"} + id="YouTubePlayer" video_id={@video.ext_uri} player_config={@player_config} /> @@ -472,24 +521,19 @@ end def video_toggler(assigns) do ~H""" -
- <.icon :if={@should_show_vid} name="hero-video-camera-slash"/> - <.icon :if={!@should_show_vid} name="hero-video-camera"/> +
+ <.icon :if={@should_show_vid} name="hero-video-camera-slash" /> + <.icon :if={!@should_show_vid} name="hero-video-camera" />
""" end def follow_mode_toggler(assigns) do ~H""" -
- <.icon :if={@is_follow_mode} name="hero-rectangle-stack"/> - <.icon :if={!@is_follow_mode} name="hero-queue-list"/> +
+ <.icon :if={@is_follow_mode} name="hero-rectangle-stack" /> + <.icon :if={!@is_follow_mode} name="hero-queue-list" />
""" end - end diff --git a/lib/vyasa_web/live/media_live/media_bridge.html.heex b/lib/vyasa_web/live/media_live/media_bridge.html.heex index ef88f170..193344ad 100644 --- a/lib/vyasa_web/live/media_live/media_bridge.html.heex +++ b/lib/vyasa_web/live/media_live/media_bridge.html.heex @@ -28,29 +28,31 @@
<.live_component module={VyasaWeb.AudioPlayer} id={"audio-player"}/>
-
-
-
-

- <%= @voice.title %> -

-

- <%= if @voice && Map.has_key?(@voice, "artist") do %> - <%= @voice.artist %> - <% else %> - artist - <% end %> -

-
+
+
+

+ <%= @playback.meta.title %> +

+ +

+ <%= if @playback && @playback.meta.artists do %> + <%= Enum.join(@playback.meta.artists, ", ") %> + <% else %> + Unknown artist + <% end %> +

+ + +
- <.progress_bar - id="player-progress" - max={(@voice && @voice.duration) || 100} - value={@playback && @playback.elapsed || 0} - /> + <.progress_bar + id="player-progress" + max={(@voice && @voice.duration) || 100} + value={@playback && @playback.elapsed || 0} + />
From 8d9e9f89b6d677e9a95ef6797e6299d0acafd8d9 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Wed, 31 Jul 2024 15:17:47 +0800 Subject: [PATCH 005/130] Use og image for artwork Not sure why it doesn't display when using the emulator. I think it's better if I test it on the deployed version directly, not sure if the testing method is accurate. --- assets/js/hooks/audio_player.js | 26 +++++++++++++++---- lib/vyasa/medium.ex | 2 +- lib/vyasa/medium/voice.ex | 1 - lib/vyasa_web/live/media_live/media_bridge.ex | 8 ++++-- .../live/media_live/media_bridge.html.heex | 5 ++-- 5 files changed, 30 insertions(+), 12 deletions(-) diff --git a/assets/js/hooks/audio_player.js b/assets/js/hooks/audio_player.js index 80364f25..c91db2e9 100644 --- a/assets/js/hooks/audio_player.js +++ b/assets/js/hooks/audio_player.js @@ -142,7 +142,7 @@ AudioPlayer = { } // TODO: supply necessary info for media sessions api here... - this.updateMediaSession({title, artist}) + this.updateMediaSession(playbackMeta) }, play(opts = {}){ console.log("Triggered playback, check params", { @@ -195,15 +195,31 @@ AudioPlayer = { return; } - const oldSessionData = navigator.mediaSession?.metadata - // FIXME: this spreading won't work since it's an obj and not an existing dict + const session = navigator.mediaSession + const sessionMetadata = session?.metadata + const oldMetadata = sessionMetadata + ? { + title: sessionMetadata.title, + artist: sessionMetadata.artist, + album: sessionMetadata.album, + artwork: sessionMetadata.artwork, + + } + : {} + + const artist = payload?.artists + ? payload.artists.join(", ") + : sessionMetadata.artist ?? "Unknown artist"; const metadata = { - ...oldSessionData, + ...oldMetadata, ...payload, + artist, } + console.log("Updating media session api", { - oldSessionData, + oldMetadata, payload, + sessionMetadata, metadata, }) diff --git a/lib/vyasa/medium.ex b/lib/vyasa/medium.ex index be765e9d..e824edb9 100644 --- a/lib/vyasa/medium.ex +++ b/lib/vyasa/medium.ex @@ -34,7 +34,7 @@ defmodule Vyasa.Medium do def get_voices!(%Voice{source_id: src_id, chapter_no: c_no, lang: l}) do from(v in Voice, where: v.source_id == ^src_id and v.chapter_no == ^c_no and v.lang == ^l, - preload: [:events] + preload: [:events, :source] ) |> Repo.all() end diff --git a/lib/vyasa/medium/voice.ex b/lib/vyasa/medium/voice.ex index 2b750e23..76e23f99 100644 --- a/lib/vyasa/medium/voice.ex +++ b/lib/vyasa/medium/voice.ex @@ -12,7 +12,6 @@ defmodule Vyasa.Medium.Voice do field :duration, :integer field :file_path, :string, virtual: true - ## FIXME: change field name to artists since it's an array.. embeds_one :meta, VoiceMetadata do field(:artists, {:array, :string}) field(:album, :string) diff --git a/lib/vyasa_web/live/media_live/media_bridge.ex b/lib/vyasa_web/live/media_live/media_bridge.ex index e0f032da..3628ae1a 100644 --- a/lib/vyasa_web/live/media_live/media_bridge.ex +++ b/lib/vyasa_web/live/media_live/media_bridge.ex @@ -253,12 +253,16 @@ defmodule VyasaWeb.MediaLive.MediaBridge do } = meta } = loaded_voice = voice |> Medium.load_events() + generated_artwork = %{ + src: + url(~p"/og/#{VyasaWeb.OgImageController.get_by_binding(%{source: loaded_voice.source})}") + } + playback_meta = %Meta{ title: title, - # TODO: use metadata present in db about the medium artists: artists, album: album, - artwork: artwork, + artwork: [generated_artwork | artwork], duration: duration, file_path: file_path } diff --git a/lib/vyasa_web/live/media_live/media_bridge.html.heex b/lib/vyasa_web/live/media_live/media_bridge.html.heex index 193344ad..c7e073a4 100644 --- a/lib/vyasa_web/live/media_live/media_bridge.html.heex +++ b/lib/vyasa_web/live/media_live/media_bridge.html.heex @@ -29,11 +29,10 @@ <.live_component module={VyasaWeb.AudioPlayer} id={"audio-player"}/>
-
+

<%= @playback.meta.title %>

-

<%= if @playback && @playback.meta.artists do %> <%= Enum.join(@playback.meta.artists, ", ") %> @@ -52,7 +51,7 @@ />

From e6f06a28092751f742a422855224094a61fbda87 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Wed, 31 Jul 2024 19:27:40 +0800 Subject: [PATCH 006/130] Minor cleanups --- assets/js/hooks/audio_player.js | 23 +++++++++++-------- assets/js/hooks/youtube_player.js | 1 - lib/vyasa_web/live/media_live/media_bridge.ex | 1 - 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/assets/js/hooks/audio_player.js b/assets/js/hooks/audio_player.js index c91db2e9..3c3fe008 100644 --- a/assets/js/hooks/audio_player.js +++ b/assets/js/hooks/audio_player.js @@ -140,9 +140,8 @@ AudioPlayer = { this.player.src = currentSrc this.play({sync: true}) } - // TODO: supply necessary info for media sessions api here... - this.updateMediaSession(playbackMeta) + this.updateMediaSession(playback) }, play(opts = {}){ console.log("Triggered playback, check params", { @@ -189,12 +188,16 @@ AudioPlayer = { this.player.play() // force a play event if is not paused } }, - updateMediaSession(payload) { + updateMediaSession(playback) { const isSupported = "mediaSession" in navigator; if (!isSupported) { return; } - + navigator.mediaSession.metadata = this.createMediaMetadata(playback) + // TODO: register action handlers + } + createMediaMetadata(playback) { + const {meta} = playback const session = navigator.mediaSession const sessionMetadata = session?.metadata const oldMetadata = sessionMetadata @@ -207,23 +210,23 @@ AudioPlayer = { } : {} - const artist = payload?.artists - ? payload.artists.join(", ") + const artist = meta?.artists + ? meta.artists.join(", ") : sessionMetadata.artist ?? "Unknown artist"; const metadata = { ...oldMetadata, - ...payload, + ...meta, artist, } - console.log("Updating media session api", { + console.log("creating new MediaMetadata", { oldMetadata, - payload, + meta, sessionMetadata, metadata, }) - navigator.mediaSession.metadata = new MediaMetadata(metadata) + return new MediaMetadata(metadata) } } diff --git a/assets/js/hooks/youtube_player.js b/assets/js/hooks/youtube_player.js index 20cdcb79..cd9e4d43 100644 --- a/assets/js/hooks/youtube_player.js +++ b/assets/js/hooks/youtube_player.js @@ -106,7 +106,6 @@ export const RenderYouTubePlayer = { console.log("youtube player playMedia triggerred", playback) const {meta: playbackMeta, "playing?": isPlaying, elapsed} = playback; const { title, duration, file_path: filePath, artists } = playbackMeta; - const artist = artists ? artists[0] : "myArtist" // FIXME: this should be ready once seeding has been update to properly add in artist names // TODO: consider if the elapsed ms should be used here for better sync(?) window.youtubePlayer.playVideo() diff --git a/lib/vyasa_web/live/media_live/media_bridge.ex b/lib/vyasa_web/live/media_live/media_bridge.ex index 3628ae1a..5305b74e 100644 --- a/lib/vyasa_web/live/media_live/media_bridge.ex +++ b/lib/vyasa_web/live/media_live/media_bridge.ex @@ -244,7 +244,6 @@ defmodule VyasaWeb.MediaLive.MediaBridge do title: title, file_path: file_path, duration: duration, - # FIXME: seeding has issues, loaded voice's meta should load something, it's nill at the moment meta: %{ artists: artists, From 607c9cff6988f053769ab1db12e2fbcfdb2747f0 Mon Sep 17 00:00:00 2001 From: ks0m1c_dharma Date: Wed, 31 Jul 2024 20:18:45 +0800 Subject: [PATCH 007/130] Meta cleanup encode --- lib/vyasa/medium/meta.ex | 28 +++++++--------------------- 1 file changed, 7 insertions(+), 21 deletions(-) diff --git a/lib/vyasa/medium/meta.ex b/lib/vyasa/medium/meta.ex index 0fa0e14f..0d493c00 100644 --- a/lib/vyasa/medium/meta.ex +++ b/lib/vyasa/medium/meta.ex @@ -1,9 +1,12 @@ defmodule Vyasa.Medium.Meta do @moduledoc """ - Meta is a medium-agnostic struct for tracking metadata for that medium. + Meta is a medium-agnostic generic struct for tracking metadata for that medium doesn't entangle itself with DB meta. + We can construct adapters to specifc metadata for specific mediums from here + ## Adapters + iex> from_voice(%Voice{meta: meta}) Since this relates to rich media, the intent is also to contain information that is helpful for interfacing - with APIs like the MediaSessions API. + with APIs like the MediaSessions API (Browser). """ alias Vyasa.Medium.Meta @@ -17,25 +20,8 @@ defmodule Vyasa.Medium.Meta do file_path: nil defimpl Jason.Encoder, for: Meta do - def encode( - %Meta{ - title: title, - artists: artists, - album: album, - artwork: artwork, - duration: duration, - file_path: file_path - }, - opts - ) do - %{ - title: title, - artists: artists, - album: album, - artwork: artwork, - duration: duration, - file_path: file_path - } + def encode(%Meta{} = m, opts) do + Map.from_struct(m) |> Jason.Encode.map(opts) end end From 99389137b6a8235e5c6dc209026151a4c1a3e4a5 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Wed, 31 Jul 2024 20:31:00 +0800 Subject: [PATCH 008/130] Add comma --- assets/js/hooks/audio_player.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/js/hooks/audio_player.js b/assets/js/hooks/audio_player.js index 3c3fe008..2d4564bc 100644 --- a/assets/js/hooks/audio_player.js +++ b/assets/js/hooks/audio_player.js @@ -195,7 +195,7 @@ AudioPlayer = { } navigator.mediaSession.metadata = this.createMediaMetadata(playback) // TODO: register action handlers - } + }, createMediaMetadata(playback) { const {meta} = playback const session = navigator.mediaSession From 303e53a325558cfd6a61615bd38ef1d8d7a40974 Mon Sep 17 00:00:00 2001 From: ks0m1c_dharma Date: Wed, 31 Jul 2024 21:07:12 +0800 Subject: [PATCH 009/130] Simple changes --- docs/migration_wow.livemd | 9 +++++++++ lib/vyasa/medium/video.ex | 1 - lib/vyasa/medium/voice.ex | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/docs/migration_wow.livemd b/docs/migration_wow.livemd index a82276c8..d996d809 100644 --- a/docs/migration_wow.livemd +++ b/docs/migration_wow.livemd @@ -35,6 +35,15 @@ end R.recompile() ``` +```elixir +Vyasa.Release.rollback(Vyasa.Repo, 0) +``` + +```elixir +# 20241515170225 +Vyasa.Release.migrate() +``` + #### inits the non-event structs ```elixir diff --git a/lib/vyasa/medium/video.ex b/lib/vyasa/medium/video.ex index 5f80c1c4..c1d8375e 100644 --- a/lib/vyasa/medium/video.ex +++ b/lib/vyasa/medium/video.ex @@ -18,7 +18,6 @@ defmodule Vyasa.Medium.Video do def changeset(video, attrs) do video |> cast(attrs, [:type, :ext_uri]) - |> validate_required([:title]) end def gen_changeset(video, attrs, %Voice{id: voice_id}) do diff --git a/lib/vyasa/medium/voice.ex b/lib/vyasa/medium/voice.ex index 76e23f99..a5051c96 100644 --- a/lib/vyasa/medium/voice.ex +++ b/lib/vyasa/medium/voice.ex @@ -58,7 +58,7 @@ defmodule Vyasa.Medium.Voice do def meta_changeset(voice, attrs) do voice - |> cast(attrs, [:artist]) + |> cast(attrs, [:artists]) end def file_upload(%Ecto.Changeset{changes: %{file_path: _} = changes} = ec) do From 4f12674b9b4d4f1779996d7c23405b2ad2f07d6a Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Wed, 31 Jul 2024 21:48:53 +0800 Subject: [PATCH 010/130] Revert use of Map.from_struct --- lib/vyasa/medium/meta.ex | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/lib/vyasa/medium/meta.ex b/lib/vyasa/medium/meta.ex index 0d493c00..33abf123 100644 --- a/lib/vyasa/medium/meta.ex +++ b/lib/vyasa/medium/meta.ex @@ -20,8 +20,25 @@ defmodule Vyasa.Medium.Meta do file_path: nil defimpl Jason.Encoder, for: Meta do - def encode(%Meta{} = m, opts) do - Map.from_struct(m) + def encode( + %Meta{ + title: title, + artists: artists, + album: album, + artwork: artwork, + duration: duration, + file_path: file_path + }, + opts + ) do + %{ + title: title, + artists: artists, + album: album, + artwork: artwork, + duration: duration, + file_path: file_path + } |> Jason.Encode.map(opts) end end From c77a4d662299acb17a9688006dfb7d5afa0c072b Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Wed, 31 Jul 2024 22:10:46 +0800 Subject: [PATCH 011/130] Shift guarding to playback.ex instead of encoder --- lib/vyasa/medium/meta.ex | 19 +----- lib/vyasa/medium/playback.ex | 118 ++++++++++++++++++++++------------- 2 files changed, 78 insertions(+), 59 deletions(-) diff --git a/lib/vyasa/medium/meta.ex b/lib/vyasa/medium/meta.ex index 33abf123..d35a4d28 100644 --- a/lib/vyasa/medium/meta.ex +++ b/lib/vyasa/medium/meta.ex @@ -21,25 +21,10 @@ defmodule Vyasa.Medium.Meta do defimpl Jason.Encoder, for: Meta do def encode( - %Meta{ - title: title, - artists: artists, - album: album, - artwork: artwork, - duration: duration, - file_path: file_path - }, + %Meta{} = m, opts ) do - %{ - title: title, - artists: artists, - album: album, - artwork: artwork, - duration: duration, - file_path: file_path - } - |> Jason.Encode.map(opts) + Map.from_struct(m) |> Jason.Encode.map(opts) end end end diff --git a/lib/vyasa/medium/playback.ex b/lib/vyasa/medium/playback.ex index a195ad4d..4453aba8 100644 --- a/lib/vyasa/medium/playback.ex +++ b/lib/vyasa/medium/playback.ex @@ -1,50 +1,84 @@ - defmodule Vyasa.Medium.Playback do - @moduledoc """ - The Playback struct is a medium-agnostic way of representing the playback of a generic "media". - It shall be a reference struct which audio/video players shall use to sync up with each other. - """ - alias Vyasa.Medium.{Playback, Meta} +defmodule Vyasa.Medium.Playback do + @moduledoc """ + The Playback struct is a medium-agnostic way of representing the playback of a generic "media". + It shall be a reference struct which audio/video players shall use to sync up with each other. + """ + alias Vyasa.Medium.{Playback, Meta} - defstruct [ - :medium, - meta: %Meta{}, - playing?: false, - played_at: nil, - paused_at: nil, - elapsed: 0, # time unit: millseconds - current_time: 0 - ] + defstruct [ + :medium, + meta: %Meta{}, + playing?: false, + played_at: nil, + paused_at: nil, + # time unit: millseconds + elapsed: 0, + current_time: 0 + ] - defimpl Jason.Encoder, for: Playback do - def encode(%Playback{medium: medium, meta: meta, playing?: playing, played_at: played_at, paused_at: paused_at, elapsed: elapsed, current_time: current_time}, opts) do - %{ medium: medium, meta: meta, playing?: playing, played_at: played_at, paused_at: paused_at, elapsed: elapsed, current_time: current_time } - |> Jason.Encode.map(opts) - end - end - - def new(%{} = attrs) do - %Vyasa.Medium.Playback{ - playing?: attrs.playing?, - meta: attrs.meta, - played_at: nil, # timestamps - paused_at: nil, # timestamps - elapsed: 0, # seconds TODO: convert to ms to standardise w HTML players? + defimpl Jason.Encoder, for: Playback do + def encode( + %Playback{ + medium: medium, + meta: meta, + playing?: playing, + played_at: played_at, + paused_at: paused_at, + elapsed: elapsed, + current_time: current_time + }, + opts + ) do + %{ + medium: medium, + meta: meta, + playing?: playing, + played_at: played_at, + paused_at: paused_at, + elapsed: elapsed, + current_time: current_time } + |> Jason.Encode.map(opts) end + end - def init_playback(%Meta{} = meta) do - Playback.new(%{ - playing?: false, - meta: meta, - }) - end + def new(%{} = attrs) do + %Vyasa.Medium.Playback{ + playing?: attrs.playing?, + meta: attrs.meta, + # timestamps + played_at: nil, + # timestamps + paused_at: nil, + # seconds TODO: convert to ms to standardise w HTML players? + elapsed: 0 + } + end - def init_playback() do - Playback.new(%{ - playing?: false, - meta: nil, - }) - end + def init_playback( + %Meta{ + title: _title, + artists: _artists, + album: _album, + artwork: _artwork, + duration: _duration, + file_path: _file_path + } = meta + ) do + Playback.new(%{ + playing?: false, + meta: meta + }) + end + def init_playback(nil) do + init_playback() + end - end + def init_playback() do + Playback.new(%{ + playing?: false, + meta: nil + }) + end +end From fe5d51f9ce5836698e24809c7ef82cb8b91eab7c Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Wed, 31 Jul 2024 22:34:36 +0800 Subject: [PATCH 012/130] Add nil clause for meta::Jason encode() --- lib/vyasa/medium/meta.ex | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lib/vyasa/medium/meta.ex b/lib/vyasa/medium/meta.ex index d35a4d28..2816fd28 100644 --- a/lib/vyasa/medium/meta.ex +++ b/lib/vyasa/medium/meta.ex @@ -26,5 +26,12 @@ defmodule Vyasa.Medium.Meta do ) do Map.from_struct(m) |> Jason.Encode.map(opts) end + + def encode( + nil, + opts + ) do + Jason.Encode.map(%{}, opts) + end end end From 3d3aa49cf0760ef5391dc3e233b414d4e5c2d272 Mon Sep 17 00:00:00 2001 From: ks0m1c_dharma Date: Thu, 1 Aug 2024 00:30:21 +0800 Subject: [PATCH 013/130] @derive --- lib/vyasa/medium/meta.ex | 21 ++------------------- lib/vyasa/medium/playback.ex | 26 +------------------------- mix.exs | 2 +- mix.lock | 4 ++-- 4 files changed, 6 insertions(+), 47 deletions(-) diff --git a/lib/vyasa/medium/meta.ex b/lib/vyasa/medium/meta.ex index 2816fd28..1206a983 100644 --- a/lib/vyasa/medium/meta.ex +++ b/lib/vyasa/medium/meta.ex @@ -9,29 +9,12 @@ defmodule Vyasa.Medium.Meta do with APIs like the MediaSessions API (Browser). """ - alias Vyasa.Medium.Meta - + @derive {Jason.Encoder, only: [:title, :artists, :album, :duration, :file_path]} defstruct title: nil, artists: [], album: nil, - artwork: %{}, + artwork: [], # time, in ms duration: 0, file_path: nil - - defimpl Jason.Encoder, for: Meta do - def encode( - %Meta{} = m, - opts - ) do - Map.from_struct(m) |> Jason.Encode.map(opts) - end - - def encode( - nil, - opts - ) do - Jason.Encode.map(%{}, opts) - end - end end diff --git a/lib/vyasa/medium/playback.ex b/lib/vyasa/medium/playback.ex index 4453aba8..29dcdc82 100644 --- a/lib/vyasa/medium/playback.ex +++ b/lib/vyasa/medium/playback.ex @@ -5,6 +5,7 @@ defmodule Vyasa.Medium.Playback do """ alias Vyasa.Medium.{Playback, Meta} + @derive Jason.Encoder defstruct [ :medium, meta: %Meta{}, @@ -16,31 +17,6 @@ defmodule Vyasa.Medium.Playback do current_time: 0 ] - defimpl Jason.Encoder, for: Playback do - def encode( - %Playback{ - medium: medium, - meta: meta, - playing?: playing, - played_at: played_at, - paused_at: paused_at, - elapsed: elapsed, - current_time: current_time - }, - opts - ) do - %{ - medium: medium, - meta: meta, - playing?: playing, - played_at: played_at, - paused_at: paused_at, - elapsed: elapsed, - current_time: current_time - } - |> Jason.Encode.map(opts) - end - end def new(%{} = attrs) do %Vyasa.Medium.Playback{ diff --git a/mix.exs b/mix.exs index 2d6856d4..a9ebee9d 100644 --- a/mix.exs +++ b/mix.exs @@ -57,7 +57,7 @@ defmodule Vyasa.MixProject do {:telemetry_metrics, "~> 0.6"}, {:telemetry_poller, "~> 1.0"}, {:gettext, "~> 0.20"}, - {:jason, "~> 1.2"}, + {:jason, "~> 1.4"}, {:dns_cluster, "~> 0.1.1"}, {:plug_cowboy, "~> 2.5"}, {:ecto_ltree, "~> 0.4.0"}, diff --git a/mix.lock b/mix.lock index bcd5f2de..d246185b 100644 --- a/mix.lock +++ b/mix.lock @@ -28,7 +28,7 @@ "httpoison": {:hex, :httpoison, "2.2.1", "87b7ed6d95db0389f7df02779644171d7319d319178f6680438167d7b69b1f3d", [:mix], [{:hackney, "~> 1.17", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "51364e6d2f429d80e14fe4b5f8e39719cacd03eb3f9a9286e61e216feac2d2df"}, "idna": {:hex, :idna, "6.1.1", "8a63070e9f7d0c62eb9d9fcb360a7de382448200fbbd1b106cc96d3d8099df8d", [:rebar3], [{:unicode_util_compat, "~> 0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "92376eb7894412ed19ac475e4a86f7b413c1b9fbb5bd16dccd57934157944cea"}, "image": {:hex, :image, "0.48.1", "916945355da9904836b1c416a1a7b470107085e1707a7a6e4fc02aafee28b19a", [:mix], [{:bumblebee, "~> 0.3", [hex: :bumblebee, repo: "hexpm", optional: true]}, {:evision, "~> 0.1.33 or ~> 0.2", [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.11", [hex: :kino, repo: "hexpm", optional: true]}, {:nx, "~> 0.5", [hex: :nx, repo: "hexpm", optional: true]}, {:nx_image, "~> 0.1", [hex: :nx_image, repo: "hexpm", optional: true]}, {:phoenix_html, "~> 2.1 or ~> 3.2 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:plug, "~> 1.13", [hex: :plug, repo: "hexpm", optional: true]}, {:req, "~> 0.4", [hex: :req, 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", "f276d57dff0b5de3ef8ab362978cf2ab104923196fd7f7f7ee9dc865a0b5606b"}, - "jason": {:hex, :jason, "1.4.3", "d3f984eeb96fe53b85d20e0b049f03e57d075b5acda3ac8d465c969a2536c17b", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "9a90e868927f7c777689baa16d86f4d0e086d968db5c05d917ccff6d443e58a3"}, + "jason": {:hex, :jason, "1.4.4", "b9226785a9aa77b6857ca22832cffa5d5011a667207eb2a0ad56adb5db443b8a", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "c5eb0cab91f094599f94d55bc63409236a8ec69a21a67814529e8d5f6cc90b3b"}, "kino": {:hex, :kino, "0.12.3", "a5f48a243c60a7ac18ba23869f697b1c775fc7794e8cd55dd248ba33c6fe9445", [: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", "a6dfa3d54ba0edec9ca6e5940154916b381901001f171c85a2d8c67869dbc2d8"}, "live_admin": {:hex, :live_admin, "0.12.0", "c06845564b09c3a5f09545cef6bfd6bd4dd5c32ed82c55472a9274d0bde400d3", [: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]}, {:nimble_options, "~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:phoenix_ecto, "~> 4.4", [hex: :phoenix_ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_html_helpers, "~> 1.0", [hex: :phoenix_html_helpers, repo: "hexpm", optional: false]}, {:phoenix_live_view, ">= 0.20.0 and < 0.21.0", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: false]}], "hexpm", "c04a5e944c72b3ea55b2c5f780b5acbc45f9641004a3ce9eec492a0c68685bc8"}, "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm", "69b09adddc4f74a40716ae54d140f93beb0fb8978d8636eaded0c31b6f099f16"}, @@ -67,7 +67,7 @@ "timex": {:hex, :timex, "3.7.11", "bb95cb4eb1d06e27346325de506bcc6c30f9c6dea40d1ebe390b262fad1862d1", [:mix], [{:combine, "~> 0.10", [hex: :combine, repo: "hexpm", optional: false]}, {:gettext, "~> 0.20", [hex: :gettext, repo: "hexpm", optional: false]}, {:tzdata, "~> 1.1", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm", "8b9024f7efbabaf9bd7aa04f65cf8dcd7c9818ca5737677c7b76acbc6a94d1aa"}, "tzdata": {:hex, :tzdata, "1.1.1", "20c8043476dfda8504952d00adac41c6eda23912278add38edc140ae0c5bcc46", [:mix], [{:hackney, "~> 1.17", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "a69cec8352eafcd2e198dea28a34113b60fdc6cb57eb5ad65c10292a6ba89787"}, "unicode_util_compat": {:hex, :unicode_util_compat, "0.7.0", "bc84380c9ab48177092f43ac89e4dfa2c6d62b40b8bd132b1059ecc7232f9a78", [:rebar3], [], "hexpm", "25eee6d67df61960cf6a794239566599b09e17e668d3700247bc498638152521"}, - "vix": {:hex, :vix, "0.27.0", "c9d6be17abe6fd1b3daed52964331c67ff1f980ea188499d8ac5e723cf215576", [:make, :mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: false]}, {:cc_precompiler, "~> 0.1.4 or ~> 0.2", [hex: :cc_precompiler, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.7.3 or ~> 0.8", [hex: :elixir_make, repo: "hexpm", optional: false]}, {:kino, "~> 0.7", [hex: :kino, repo: "hexpm", optional: true]}], "hexpm", "ae4ba5bb9882753396baadfff93b6cab5d4275b13751fd49723591eb116f373a"}, + "vix": {:hex, :vix, "0.29.0", "e6afff70c839722aaeb9be924beacc48711289a1090af72a0082f5d2b3a981fb", [:make, :mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: false]}, {:cc_precompiler, "~> 0.1.4 or ~> 0.2", [hex: :cc_precompiler, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.7.3 or ~> 0.8", [hex: :elixir_make, repo: "hexpm", optional: false]}, {:kino, "~> 0.7", [hex: :kino, repo: "hexpm", optional: true]}], "hexpm", "6809f26629afa6fc792fce7f14146e9e2ea1ef71bde92e1ee1318883d5aa48a8"}, "websock": {:hex, :websock, "0.5.3", "2f69a6ebe810328555b6fe5c831a851f485e303a7c8ce6c5f675abeb20ebdadc", [:mix], [], "hexpm", "6105453d7fac22c712ad66fab1d45abdf049868f253cf719b625151460b8b453"}, "websock_adapter": {:hex, :websock_adapter, "0.5.6", "0437fe56e093fd4ac422de33bf8fc89f7bc1416a3f2d732d8b2c8fd54792fe60", [:mix], [{:bandit, ">= 0.6.0", [hex: :bandit, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.6", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:websock, "~> 0.5", [hex: :websock, repo: "hexpm", optional: false]}], "hexpm", "e04378d26b0af627817ae84c92083b7e97aca3121196679b73c73b99d0d133ea"}, } From ea797c9ec6b03647809cd51f9e2cca8b9f55955b Mon Sep 17 00:00:00 2001 From: ks0m1c_dharma Date: Thu, 1 Aug 2024 00:31:24 +0800 Subject: [PATCH 014/130] except artwork --- lib/vyasa/medium/meta.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/vyasa/medium/meta.ex b/lib/vyasa/medium/meta.ex index 1206a983..877ae60b 100644 --- a/lib/vyasa/medium/meta.ex +++ b/lib/vyasa/medium/meta.ex @@ -9,7 +9,7 @@ defmodule Vyasa.Medium.Meta do with APIs like the MediaSessions API (Browser). """ - @derive {Jason.Encoder, only: [:title, :artists, :album, :duration, :file_path]} + @derive {Jason.Encoder, except: [:artwork]} defstruct title: nil, artists: [], album: nil, From f15ef26c0bc92302061818b58d8240c3c4372199 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Thu, 1 Aug 2024 07:27:42 +0800 Subject: [PATCH 015/130] Handle nil case for artwork better w better guard --- lib/vyasa/medium/meta.ex | 2 +- lib/vyasa_web/live/media_live/media_bridge.ex | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/vyasa/medium/meta.ex b/lib/vyasa/medium/meta.ex index 877ae60b..88552896 100644 --- a/lib/vyasa/medium/meta.ex +++ b/lib/vyasa/medium/meta.ex @@ -9,7 +9,7 @@ defmodule Vyasa.Medium.Meta do with APIs like the MediaSessions API (Browser). """ - @derive {Jason.Encoder, except: [:artwork]} + @derive Jason.Encoder defstruct title: nil, artists: [], album: nil, diff --git a/lib/vyasa_web/live/media_live/media_bridge.ex b/lib/vyasa_web/live/media_live/media_bridge.ex index 5305b74e..9a25ea6d 100644 --- a/lib/vyasa_web/live/media_live/media_bridge.ex +++ b/lib/vyasa_web/live/media_live/media_bridge.ex @@ -257,11 +257,16 @@ defmodule VyasaWeb.MediaLive.MediaBridge do url(~p"/og/#{VyasaWeb.OgImageController.get_by_binding(%{source: loaded_voice.source})}") } + updated_artwork = cond do + artwork && is_list(artwork) -> [generated_artwork | artwork] + true -> [generated_artwork] + end + playback_meta = %Meta{ title: title, artists: artists, album: album, - artwork: [generated_artwork | artwork], + artwork: updated_artwork, duration: duration, file_path: file_path } @@ -279,7 +284,7 @@ defmodule VyasaWeb.MediaLive.MediaBridge do voice_events: voice_events |> create_events_payload() }) } - end + end def handle_info({_, :written_handshake, :init}, %{assigns: %{session: %{"id" => id}}} = socket) do Vyasa.PubSub.publish(:init, :media_handshake, "written:session:" <> id) From 56991b8d80f7e633b5bedcfbc993b9c7858e5aa1 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Thu, 1 Aug 2024 08:57:41 +0800 Subject: [PATCH 016/130] Minor changes --- assets/js/hooks/audio_player.js | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/assets/js/hooks/audio_player.js b/assets/js/hooks/audio_player.js index 2d4564bc..ea21e2e7 100644 --- a/assets/js/hooks/audio_player.js +++ b/assets/js/hooks/audio_player.js @@ -193,7 +193,11 @@ AudioPlayer = { if (!isSupported) { return; } - navigator.mediaSession.metadata = this.createMediaMetadata(playback) + const newMetadata = this.createMediaMetadata(playback) + console.log("new metadata", newMetadata) + navigator.mediaSession.metadata = newMetadata + + // TODO: register action handlers }, createMediaMetadata(playback) { @@ -206,7 +210,6 @@ AudioPlayer = { artist: sessionMetadata.artist, album: sessionMetadata.album, artwork: sessionMetadata.artwork, - } : {} @@ -219,14 +222,17 @@ AudioPlayer = { artist, } + + const res = new MediaMetadata(metadata) console.log("creating new MediaMetadata", { oldMetadata, meta, sessionMetadata, metadata, + res }) - return new MediaMetadata(metadata) + return res } } From 87ae2252710c862b1f2feedc04a8ea5ed3786f75 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Thu, 1 Aug 2024 08:58:56 +0800 Subject: [PATCH 017/130] Use dummy metadata example --- assets/js/hooks/audio_player.js | 42 ++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/assets/js/hooks/audio_player.js b/assets/js/hooks/audio_player.js index ea21e2e7..fd2b8b10 100644 --- a/assets/js/hooks/audio_player.js +++ b/assets/js/hooks/audio_player.js @@ -195,7 +195,47 @@ AudioPlayer = { } const newMetadata = this.createMediaMetadata(playback) console.log("new metadata", newMetadata) - navigator.mediaSession.metadata = newMetadata + // navigator.mediaSession.metadata = newMetadata + + navigator.mediaSession.metadata = new MediaMetadata({ + title: "Unforgettable", + artist: "Nat King Cole", + album: "The Ultimate Collection (Remastered)", + artwork: [ + { + src: "https://dummyimage.com/96x96", + sizes: "96x96", + type: "image/png", + }, + { + src: "https://dummyimage.com/128x128", + sizes: "128x128", + type: "image/png", + }, + { + src: "https://dummyimage.com/192x192", + sizes: "192x192", + type: "image/png", + }, + { + src: "https://dummyimage.com/256x256", + sizes: "256x256", + type: "image/png", + }, + { + src: "https://dummyimage.com/384x384", + sizes: "384x384", + type: "image/png", + }, + { + src: "https://dummyimage.com/512x512", + sizes: "512x512", + type: "image/png", + }, + ], + }); + + // TODO: register action handlers From d79b816a2fbe5651ec80a51877dfb0781c170d62 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Thu, 1 Aug 2024 09:12:24 +0800 Subject: [PATCH 018/130] Revert dummy example --- assets/js/hooks/audio_player.js | 43 +-------------------------------- 1 file changed, 1 insertion(+), 42 deletions(-) diff --git a/assets/js/hooks/audio_player.js b/assets/js/hooks/audio_player.js index fd2b8b10..a04888c0 100644 --- a/assets/js/hooks/audio_player.js +++ b/assets/js/hooks/audio_player.js @@ -195,48 +195,7 @@ AudioPlayer = { } const newMetadata = this.createMediaMetadata(playback) console.log("new metadata", newMetadata) - // navigator.mediaSession.metadata = newMetadata - - navigator.mediaSession.metadata = new MediaMetadata({ - title: "Unforgettable", - artist: "Nat King Cole", - album: "The Ultimate Collection (Remastered)", - artwork: [ - { - src: "https://dummyimage.com/96x96", - sizes: "96x96", - type: "image/png", - }, - { - src: "https://dummyimage.com/128x128", - sizes: "128x128", - type: "image/png", - }, - { - src: "https://dummyimage.com/192x192", - sizes: "192x192", - type: "image/png", - }, - { - src: "https://dummyimage.com/256x256", - sizes: "256x256", - type: "image/png", - }, - { - src: "https://dummyimage.com/384x384", - sizes: "384x384", - type: "image/png", - }, - { - src: "https://dummyimage.com/512x512", - sizes: "512x512", - type: "image/png", - }, - ], - }); - - - + navigator.mediaSession.metadata = newMetadata // TODO: register action handlers }, From cf05f76b155cb4f7d9bcbfcc715d8cab630505c0 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Thu, 1 Aug 2024 10:23:13 +0800 Subject: [PATCH 019/130] iAnother dummy attempt --- assets/js/hooks/audio_player.js | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/assets/js/hooks/audio_player.js b/assets/js/hooks/audio_player.js index a04888c0..96358f33 100644 --- a/assets/js/hooks/audio_player.js +++ b/assets/js/hooks/audio_player.js @@ -193,13 +193,26 @@ AudioPlayer = { if (!isSupported) { return; } - const newMetadata = this.createMediaMetadata(playback) - console.log("new metadata", newMetadata) - navigator.mediaSession.metadata = newMetadata + const payload = this.createMediaMetadataPayload(playback) + console.log("new metadata payload", payload) + // navigator.mediaSession.metadata = new MediaMetadata(payload) + + navigator.mediaSession.metadata = new MediaMetadata({ + "title": "Hanuman Chalisa", + "album": "Shree Hanuman Chalisa - Hanuman Ashtak", + "artwork": [ + { + "type": "image/jpeg", + "src": "https://i.ytimg.com/vi/AETFvQonfV8/hqdefault.jpg", + "sizes": "480x360" + } + ], + "artist": "Hariharan, Gulshan Kumar" + }) // TODO: register action handlers }, - createMediaMetadata(playback) { + createMediaMetadataPayload(playback) { const {meta} = playback const session = navigator.mediaSession const sessionMetadata = session?.metadata @@ -221,17 +234,17 @@ AudioPlayer = { artist, } - - const res = new MediaMetadata(metadata) + // const res = new MediaMetadata(metadata) console.log("creating new MediaMetadata", { oldMetadata, meta, sessionMetadata, metadata, - res + // res }) - return res + // return res + return metadata } } From 211a794a469aecf039372f0f896bff32a26caae5 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Thu, 1 Aug 2024 10:38:34 +0800 Subject: [PATCH 020/130] Another attempt --- assets/js/hooks/audio_player.js | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/assets/js/hooks/audio_player.js b/assets/js/hooks/audio_player.js index 96358f33..deee770c 100644 --- a/assets/js/hooks/audio_player.js +++ b/assets/js/hooks/audio_player.js @@ -198,17 +198,17 @@ AudioPlayer = { // navigator.mediaSession.metadata = new MediaMetadata(payload) navigator.mediaSession.metadata = new MediaMetadata({ - "title": "Hanuman Chalisa", - "album": "Shree Hanuman Chalisa - Hanuman Ashtak", - "artwork": [ - { - "type": "image/jpeg", - "src": "https://i.ytimg.com/vi/AETFvQonfV8/hqdefault.jpg", - "sizes": "480x360" - } - ], - "artist": "Hariharan, Gulshan Kumar" - }) + title: "Hanuman Chalisa", + artist: "Hariharan, Gulshan Kumar", + album: "Shree Hanuman Chalisa - Hanuman Ashtak", + artwork: [ + { + src: "https://i.ytimg.com/vi/AETFvQonfV8/hqdefault.jpg", + sizes: "96x96", + type: "image/jpeg", + } + ], + }); // TODO: register action handlers }, From 9268fe9fe32d282bb680607e4bed3faf623e9d16 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Thu, 1 Aug 2024 10:45:20 +0800 Subject: [PATCH 021/130] test dict creation --- assets/js/hooks/audio_player.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/js/hooks/audio_player.js b/assets/js/hooks/audio_player.js index deee770c..024081f2 100644 --- a/assets/js/hooks/audio_player.js +++ b/assets/js/hooks/audio_player.js @@ -198,7 +198,7 @@ AudioPlayer = { // navigator.mediaSession.metadata = new MediaMetadata(payload) navigator.mediaSession.metadata = new MediaMetadata({ - title: "Hanuman Chalisa", + "title": "Hanuman Chalisa", artist: "Hariharan, Gulshan Kumar", album: "Shree Hanuman Chalisa - Hanuman Ashtak", artwork: [ From 6068efe34e5acb8e8bc893987717693bfba9b5b5 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Thu, 1 Aug 2024 11:01:21 +0800 Subject: [PATCH 022/130] test use of extra key in media metadata --- assets/js/hooks/audio_player.js | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/assets/js/hooks/audio_player.js b/assets/js/hooks/audio_player.js index 024081f2..b7d587ad 100644 --- a/assets/js/hooks/audio_player.js +++ b/assets/js/hooks/audio_player.js @@ -198,17 +198,18 @@ AudioPlayer = { // navigator.mediaSession.metadata = new MediaMetadata(payload) navigator.mediaSession.metadata = new MediaMetadata({ - "title": "Hanuman Chalisa", - artist: "Hariharan, Gulshan Kumar", - album: "Shree Hanuman Chalisa - Hanuman Ashtak", - artwork: [ - { - src: "https://i.ytimg.com/vi/AETFvQonfV8/hqdefault.jpg", - sizes: "96x96", - type: "image/jpeg", - } - ], - }); + "title": "Hanuman Chalisa", + "album": "Shree Hanuman Chalisa - Hanuman Ashtak", + "artwork": [ + { + "type": "image/jpeg", + "src": "https://i.ytimg.com/vi/AETFvQonfV8/hqdefault.jpg", + "sizes": "480x360" + } + ], + "artist": "Hariharan, Gulshan Kumar", + "extraKey": "foo" + }); // TODO: register action handlers }, From 7277a9cf7899182b61c9cc1a5f47b02e58e2fbf6 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Thu, 1 Aug 2024 11:12:52 +0800 Subject: [PATCH 023/130] Test: use geenrated artwork --- assets/js/hooks/audio_player.js | 17 +++++++++-------- lib/vyasa_web/live/media_live/media_bridge.ex | 11 ++++++++++- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/assets/js/hooks/audio_player.js b/assets/js/hooks/audio_player.js index b7d587ad..cce744d8 100644 --- a/assets/js/hooks/audio_player.js +++ b/assets/js/hooks/audio_player.js @@ -194,19 +194,20 @@ AudioPlayer = { return; } const payload = this.createMediaMetadataPayload(playback) - console.log("new metadata payload", payload) + console.log("new metadata payload", {playback, payload}) // navigator.mediaSession.metadata = new MediaMetadata(payload) navigator.mediaSession.metadata = new MediaMetadata({ "title": "Hanuman Chalisa", "album": "Shree Hanuman Chalisa - Hanuman Ashtak", - "artwork": [ - { - "type": "image/jpeg", - "src": "https://i.ytimg.com/vi/AETFvQonfV8/hqdefault.jpg", - "sizes": "480x360" - } - ], + artwork: payload?.meta?.artwork + // "artwork": [ + // { + // "type": "image/jpeg", + // "src": "https://i.ytimg.com/vi/AETFvQonfV8/hqdefault.jpg", + // "sizes": "480x360" + // } + // ], "artist": "Hariharan, Gulshan Kumar", "extraKey": "foo" }); diff --git a/lib/vyasa_web/live/media_live/media_bridge.ex b/lib/vyasa_web/live/media_live/media_bridge.ex index 9a25ea6d..42c2d585 100644 --- a/lib/vyasa_web/live/media_live/media_bridge.ex +++ b/lib/vyasa_web/live/media_live/media_bridge.ex @@ -254,9 +254,18 @@ defmodule VyasaWeb.MediaLive.MediaBridge do generated_artwork = %{ src: - url(~p"/og/#{VyasaWeb.OgImageController.get_by_binding(%{source: loaded_voice.source})}") + url(~p"/og/#{VyasaWeb.OgImageController.get_by_binding(%{source: loaded_voice.source})}"), + type: "image/jpeg", + sizes: "480x360" } + # generated_artwork = %{ + # src: + # "https://i.ytimg.com/vi/AETFvQonfV8/hqdefault.jpg", + # type: "image/jpeg", + # sizes: "480x360" + # } + updated_artwork = cond do artwork && is_list(artwork) -> [generated_artwork | artwork] true -> [generated_artwork] From 2a79d27e6b2e39dc7b8ae58cfb6c86a6df5afdab Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Thu, 1 Aug 2024 11:16:56 +0800 Subject: [PATCH 024/130] minor change --- assets/js/hooks/audio_player.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/js/hooks/audio_player.js b/assets/js/hooks/audio_player.js index cce744d8..7487881a 100644 --- a/assets/js/hooks/audio_player.js +++ b/assets/js/hooks/audio_player.js @@ -200,7 +200,7 @@ AudioPlayer = { navigator.mediaSession.metadata = new MediaMetadata({ "title": "Hanuman Chalisa", "album": "Shree Hanuman Chalisa - Hanuman Ashtak", - artwork: payload?.meta?.artwork + artwork: payload?.meta?.artwork, // "artwork": [ // { // "type": "image/jpeg", From d6785839cec941619b5bb0146aac934f43cd3576 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Thu, 1 Aug 2024 11:27:28 +0800 Subject: [PATCH 025/130] Change MIME type for generated_artwork jpeg -> png --- lib/vyasa_web/live/media_live/media_bridge.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/vyasa_web/live/media_live/media_bridge.ex b/lib/vyasa_web/live/media_live/media_bridge.ex index 42c2d585..32a96612 100644 --- a/lib/vyasa_web/live/media_live/media_bridge.ex +++ b/lib/vyasa_web/live/media_live/media_bridge.ex @@ -255,7 +255,7 @@ defmodule VyasaWeb.MediaLive.MediaBridge do generated_artwork = %{ src: url(~p"/og/#{VyasaWeb.OgImageController.get_by_binding(%{source: loaded_voice.source})}"), - type: "image/jpeg", + type: "image/png", sizes: "480x360" } From 15d2d627fa72c8d34180fc7cc2f53b63bae7523d Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Thu, 1 Aug 2024 11:38:28 +0800 Subject: [PATCH 026/130] Minor change --- assets/js/hooks/audio_player.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/js/hooks/audio_player.js b/assets/js/hooks/audio_player.js index 7487881a..29a9aa97 100644 --- a/assets/js/hooks/audio_player.js +++ b/assets/js/hooks/audio_player.js @@ -200,7 +200,7 @@ AudioPlayer = { navigator.mediaSession.metadata = new MediaMetadata({ "title": "Hanuman Chalisa", "album": "Shree Hanuman Chalisa - Hanuman Ashtak", - artwork: payload?.meta?.artwork, + artwork: playback?.meta?.artwork, // "artwork": [ // { // "type": "image/jpeg", From 91106e5f456367daf23f407b8665e7429d45010c Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Thu, 1 Aug 2024 11:53:57 +0800 Subject: [PATCH 027/130] Use createMediaMetadataPayload() --- assets/js/hooks/audio_player.js | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/assets/js/hooks/audio_player.js b/assets/js/hooks/audio_player.js index 29a9aa97..81f98085 100644 --- a/assets/js/hooks/audio_player.js +++ b/assets/js/hooks/audio_player.js @@ -197,20 +197,21 @@ AudioPlayer = { console.log("new metadata payload", {playback, payload}) // navigator.mediaSession.metadata = new MediaMetadata(payload) - navigator.mediaSession.metadata = new MediaMetadata({ - "title": "Hanuman Chalisa", - "album": "Shree Hanuman Chalisa - Hanuman Ashtak", - artwork: playback?.meta?.artwork, - // "artwork": [ - // { - // "type": "image/jpeg", - // "src": "https://i.ytimg.com/vi/AETFvQonfV8/hqdefault.jpg", - // "sizes": "480x360" - // } - // ], - "artist": "Hariharan, Gulshan Kumar", - "extraKey": "foo" - }); + navigator.mediaSession.metadata = new MediaMetadata(payload) + // navigator.mediaSession.metadata = new MediaMetadata({ + // "title": "Hanuman Chalisa", + // "album": "Shree Hanuman Chalisa - Hanuman Ashtak", + // artwork: playback?.meta?.artwork, + // // "artwork": [ + // // { + // // "type": "image/jpeg", + // // "src": "https://i.ytimg.com/vi/AETFvQonfV8/hqdefault.jpg", + // // "sizes": "480x360" + // // } + // // ], + // "artist": "Hariharan, Gulshan Kumar", + // "extraKey": "foo" + // }); // TODO: register action handlers }, From 81d1563febf4cbb12cdb90b49a02c7f8154bbe79 Mon Sep 17 00:00:00 2001 From: ks0m1c_dharma Date: Thu, 1 Aug 2024 12:59:36 +0800 Subject: [PATCH 028/130] Server Logging to Console & Image Lib Update --- assets/js/app.js | 9 +++++++++ config/dev.exs | 3 ++- mix.exs | 6 +++--- mix.lock | 4 ++-- 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/assets/js/app.js b/assets/js/app.js index 0ef6eb47..dc1bd3b0 100644 --- a/assets/js/app.js +++ b/assets/js/app.js @@ -36,11 +36,20 @@ let liveSocket = new LiveSocket("/live", Socket, { hooks: Hooks, }); + // Show progress bar on live navigation and form submits topbar.config({ barColors: { 0: "#29d" }, shadowColor: "rgba(0, 0, 0, .3)" }); window.addEventListener("phx:page-loading-start", (_info) => topbar.show(300)); window.addEventListener("phx:page-loading-stop", (_info) => topbar.hide()); +// Stream our server logs directly to our browser’s console +window.addEventListener("phx:live_reload:attached", ({detail: reloader}) => { + // enable server log streaming to client. + // disable with reloader.disableServerLogs() + reloader.enableServerLogs() + +}) + // connect if there are any LiveViews on the page liveSocket.connect(); diff --git a/config/dev.exs b/config/dev.exs index a9f55e26..a1d3f71f 100644 --- a/config/dev.exs +++ b/config/dev.exs @@ -73,7 +73,8 @@ config :vyasa, VyasaWeb.Endpoint, ~r"priv/static/.*(js|css|png|jpeg|jpg|gif|svg)$", ~r"priv/gettext/.*(po)$", ~r"lib/vyasa_web/(controllers|live|components)/.*(ex|heex)$" - ] + ], + web_console_logger: true ] # Enable dev routes for dashboard and mailbox diff --git a/mix.exs b/mix.exs index a9ebee9d..2d2eddc1 100644 --- a/mix.exs +++ b/mix.exs @@ -46,7 +46,7 @@ defmodule Vyasa.MixProject do {:ecto_sql, "~> 3.10"}, {:postgrex, ">= 0.0.0"}, {:phoenix_html, "~> 4.0"}, - {:phoenix_live_reload, "~> 1.2", only: :dev}, + {:phoenix_live_reload, "~> 1.5", only: :dev}, {:phoenix_live_view, "~> 0.20.17"}, {:floki, ">= 0.30.0"}, {:phoenix_live_dashboard, "~> 0.8.2"}, @@ -61,9 +61,9 @@ defmodule Vyasa.MixProject do {:dns_cluster, "~> 0.1.1"}, {:plug_cowboy, "~> 2.5"}, {:ecto_ltree, "~> 0.4.0"}, - {:image, "~> 0.37"}, + {:image, "~> 0.53"}, {:vix, "~> 0.5"}, - {:kino, "~> 0.12.0"}, + {:kino, "~> 0.13"}, {:cors_plug, "~> 3.0"}, {:ex_aws, "~> 2.0"}, {:ex_aws_s3, "~> 2.5"}, diff --git a/mix.lock b/mix.lock index d246185b..f3e1bfdf 100644 --- a/mix.lock +++ b/mix.lock @@ -27,9 +27,9 @@ "hpax": {:hex, :hpax, "1.0.0", "28dcf54509fe2152a3d040e4e3df5b265dcb6cb532029ecbacf4ce52caea3fd2", [:mix], [], "hexpm", "7f1314731d711e2ca5fdc7fd361296593fc2542570b3105595bb0bc6d0fad601"}, "httpoison": {:hex, :httpoison, "2.2.1", "87b7ed6d95db0389f7df02779644171d7319d319178f6680438167d7b69b1f3d", [:mix], [{:hackney, "~> 1.17", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "51364e6d2f429d80e14fe4b5f8e39719cacd03eb3f9a9286e61e216feac2d2df"}, "idna": {:hex, :idna, "6.1.1", "8a63070e9f7d0c62eb9d9fcb360a7de382448200fbbd1b106cc96d3d8099df8d", [:rebar3], [{:unicode_util_compat, "~> 0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "92376eb7894412ed19ac475e4a86f7b413c1b9fbb5bd16dccd57934157944cea"}, - "image": {:hex, :image, "0.48.1", "916945355da9904836b1c416a1a7b470107085e1707a7a6e4fc02aafee28b19a", [:mix], [{:bumblebee, "~> 0.3", [hex: :bumblebee, repo: "hexpm", optional: true]}, {:evision, "~> 0.1.33 or ~> 0.2", [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.11", [hex: :kino, repo: "hexpm", optional: true]}, {:nx, "~> 0.5", [hex: :nx, repo: "hexpm", optional: true]}, {:nx_image, "~> 0.1", [hex: :nx_image, repo: "hexpm", optional: true]}, {:phoenix_html, "~> 2.1 or ~> 3.2 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:plug, "~> 1.13", [hex: :plug, repo: "hexpm", optional: true]}, {:req, "~> 0.4", [hex: :req, 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", "f276d57dff0b5de3ef8ab362978cf2ab104923196fd7f7f7ee9dc865a0b5606b"}, + "image": {:hex, :image, "0.53.0", "77ba25c41992a2f230ef991040e110a0558badc22d83cb9a0faf9b68209a3961", [:mix], [{:bumblebee, "~> 0.3", [hex: :bumblebee, repo: "hexpm", optional: true]}, {:evision, "~> 0.1.33 or ~> 0.2", [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.13", [hex: :kino, repo: "hexpm", optional: true]}, {:nx, "~> 0.7", [hex: :nx, repo: "hexpm", optional: true]}, {:nx_image, "~> 0.1", [hex: :nx_image, repo: "hexpm", optional: true]}, {:phoenix_html, "~> 2.1 or ~> 3.2 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:plug, "~> 1.13", [hex: :plug, repo: "hexpm", optional: true]}, {:req, "~> 0.4", [hex: :req, repo: "hexpm", optional: true]}, {:rustler, "> 0.0.0", [hex: :rustler, repo: "hexpm", optional: true]}, {:scholar, "~> 0.3", [hex: :scholar, 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", "ce06fff64b4dcf34a64c2b0dc907d0ce51cca85566912a9d5b8ec3378fe3e902"}, "jason": {:hex, :jason, "1.4.4", "b9226785a9aa77b6857ca22832cffa5d5011a667207eb2a0ad56adb5db443b8a", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "c5eb0cab91f094599f94d55bc63409236a8ec69a21a67814529e8d5f6cc90b3b"}, - "kino": {:hex, :kino, "0.12.3", "a5f48a243c60a7ac18ba23869f697b1c775fc7794e8cd55dd248ba33c6fe9445", [: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", "a6dfa3d54ba0edec9ca6e5940154916b381901001f171c85a2d8c67869dbc2d8"}, + "kino": {:hex, :kino, "0.13.2", "087c8f340734764fc8c70efd43f3155fa47498c78d2d18fa83aaf97373133ade", [:mix], [{:fss, "~> 0.1.0", [hex: :fss, repo: "hexpm", optional: false]}, {:nx, "~> 0.1", [hex: :nx, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: true]}, {:table, "~> 0.1.2", [hex: :table, repo: "hexpm", optional: false]}], "hexpm", "05fb420dae92a81746dcaceceddf235974394486b17cc2704ddbb051072b4617"}, "live_admin": {:hex, :live_admin, "0.12.0", "c06845564b09c3a5f09545cef6bfd6bd4dd5c32ed82c55472a9274d0bde400d3", [: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]}, {:nimble_options, "~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:phoenix_ecto, "~> 4.4", [hex: :phoenix_ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_html_helpers, "~> 1.0", [hex: :phoenix_html_helpers, repo: "hexpm", optional: false]}, {:phoenix_live_view, ">= 0.20.0 and < 0.21.0", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: false]}], "hexpm", "c04a5e944c72b3ea55b2c5f780b5acbc45f9641004a3ce9eec492a0c68685bc8"}, "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm", "69b09adddc4f74a40716ae54d140f93beb0fb8978d8636eaded0c31b6f099f16"}, "mime": {:hex, :mime, "2.0.6", "8f18486773d9b15f95f4f4f1e39b710045fa1de891fada4516559967276e4dc2", [:mix], [], "hexpm", "c9945363a6b26d747389aac3643f8e0e09d30499a138ad64fe8fd1d13d9b153e"}, From 05710d69472ede6be644ec8dbb9c274bcc6b5e81 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Thu, 1 Aug 2024 16:03:56 +0800 Subject: [PATCH 029/130] Init media session @ metadata load Init functions don't have action handlers yet --- assets/js/hooks/audio_player.js | 44 ++++------------ lib/vyasa_web/components/audio_player.ex | 65 +++++++++++++----------- 2 files changed, 45 insertions(+), 64 deletions(-) diff --git a/assets/js/hooks/audio_player.js b/assets/js/hooks/audio_player.js index 81f98085..038cb6d9 100644 --- a/assets/js/hooks/audio_player.js +++ b/assets/js/hooks/audio_player.js @@ -97,10 +97,8 @@ AudioPlayer = { localStorage.setItem("session", JSON.stringify(sess)) }, handleMetadataLoad(e) { - console.log("Loaded metadata!", { - duration: this.player.duration, - event: e, - }) + const playback = JSON.parse(this?.player?.dataset?.playback) + this.initMediaSession(playback) }, handlePlayPause() { console.log("{play_pause event triggerred} player:", this.player) @@ -188,6 +186,13 @@ AudioPlayer = { this.player.play() // force a play event if is not paused } }, + /** + * At the point of init, we register some action handlers and update the media session's metadata + * */ + initMediaSession(playback) { + // TODO: register action handlers + this.updateMediaSession(playback) + }, updateMediaSession(playback) { const isSupported = "mediaSession" in navigator; if (!isSupported) { @@ -195,30 +200,11 @@ AudioPlayer = { } const payload = this.createMediaMetadataPayload(playback) console.log("new metadata payload", {playback, payload}) - // navigator.mediaSession.metadata = new MediaMetadata(payload) - navigator.mediaSession.metadata = new MediaMetadata(payload) - // navigator.mediaSession.metadata = new MediaMetadata({ - // "title": "Hanuman Chalisa", - // "album": "Shree Hanuman Chalisa - Hanuman Ashtak", - // artwork: playback?.meta?.artwork, - // // "artwork": [ - // // { - // // "type": "image/jpeg", - // // "src": "https://i.ytimg.com/vi/AETFvQonfV8/hqdefault.jpg", - // // "sizes": "480x360" - // // } - // // ], - // "artist": "Hariharan, Gulshan Kumar", - // "extraKey": "foo" - // }); - - // TODO: register action handlers }, createMediaMetadataPayload(playback) { const {meta} = playback - const session = navigator.mediaSession - const sessionMetadata = session?.metadata + const sessionMetadata = navigator?.mediaSession?.metadata const oldMetadata = sessionMetadata ? { title: sessionMetadata.title, @@ -237,16 +223,6 @@ AudioPlayer = { artist, } - // const res = new MediaMetadata(metadata) - console.log("creating new MediaMetadata", { - oldMetadata, - meta, - sessionMetadata, - metadata, - // res - }) - - // return res return metadata } } diff --git a/lib/vyasa_web/components/audio_player.ex b/lib/vyasa_web/components/audio_player.ex index 05418e65..4fe485ff 100644 --- a/lib/vyasa_web/components/audio_player.ex +++ b/lib/vyasa_web/components/audio_player.ex @@ -1,38 +1,43 @@ defmodule VyasaWeb.AudioPlayer do - use VyasaWeb, :live_component + use VyasaWeb, :live_component - def mount(_, _, socket) do - socket - |> assign(playback: nil) - end + def mount(_, _, socket) do + socket + |> assign(playback: nil) + end - @impl true - def render(assigns) do - ~H""" -
- -
- """ - end + @impl true + def render(assigns) do + ~H""" +
+ +
+ """ + end - @impl true - def update(%{ + @impl true + def update( + %{ event: "media_bridge:update_audio_player" = event, - playback: playback, - } = _assigns, socket) do - IO.inspect("handle update case in audio_player.ex with event = #{event}", label: "checkpoint") + playback: playback + } = _assigns, + socket + ) do + IO.inspect("handle update case in audio_player.ex with event = #{event}", label: "checkpoint") + + { + :ok, + socket + |> assign(playback: playback) + } + end - { - :ok, socket - |> assign(playback: playback) - } - end + @impl true + def update(assigns, socket) do + IO.inspect(assigns, label: "what") - @impl true - def update(assigns, socket) do - IO.inspect(assigns, label: "what") - {:ok, socket - |> assign(playback: nil) - } - end + {:ok, + socket + |> assign(playback: nil)} end +end From c60172cf384617193edc9fb34d77296cdd6d6a58 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Thu, 1 Aug 2024 16:06:15 +0800 Subject: [PATCH 030/130] Guard against null playback --- assets/js/hooks/audio_player.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/assets/js/hooks/audio_player.js b/assets/js/hooks/audio_player.js index 038cb6d9..328684b3 100644 --- a/assets/js/hooks/audio_player.js +++ b/assets/js/hooks/audio_player.js @@ -203,6 +203,9 @@ AudioPlayer = { navigator.mediaSession.metadata = new MediaMetadata(payload) }, createMediaMetadataPayload(playback) { + if (!playback) { + return {} + } const {meta} = playback const sessionMetadata = navigator?.mediaSession?.metadata const oldMetadata = sessionMetadata From 665ee9cda3bd4be929673471f320c5b0f2dba9b1 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Thu, 1 Aug 2024 16:23:16 +0800 Subject: [PATCH 031/130] Shift mediaSession update to before play --- assets/js/hooks/audio_player.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/assets/js/hooks/audio_player.js b/assets/js/hooks/audio_player.js index 328684b3..926a29e8 100644 --- a/assets/js/hooks/audio_player.js +++ b/assets/js/hooks/audio_player.js @@ -126,6 +126,9 @@ AudioPlayer = { const { title, duration, file_path: filePath, artists } = playbackMeta; const artist = artists ? artists.join(", ") : "Unknown artist"; + // TODO: supply necessary info for media sessions api here... + this.updateMediaSession(playback) + const beginTime = nowMs() - elapsed this.playbackBeganAt = beginTime let currentSrc = this.player.src.split("?")[0] @@ -138,8 +141,6 @@ AudioPlayer = { this.player.src = currentSrc this.play({sync: true}) } - // TODO: supply necessary info for media sessions api here... - this.updateMediaSession(playback) }, play(opts = {}){ console.log("Triggered playback, check params", { From 9902f63cfbf4f4416ed8d8a8dbd8f39d0d2956c5 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Thu, 1 Aug 2024 16:53:21 +0800 Subject: [PATCH 032/130] Attempt earlier update of metadata --- assets/js/hooks/audio_player.js | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/assets/js/hooks/audio_player.js b/assets/js/hooks/audio_player.js index 926a29e8..4c887c35 100644 --- a/assets/js/hooks/audio_player.js +++ b/assets/js/hooks/audio_player.js @@ -28,8 +28,8 @@ AudioPlayer = { this.playbackBeganAt = null this.player = this.el.querySelector("audio") - document.addEventListener("click", () => this.enableAudio()) - + document.addEventListener("pointerdown", () => this.enableAudio()) + this.player.addEventListener("canplay", e => this.handlePlayableState(e)) this.player.addEventListener("loadedmetadata", e => this.handleMetadataLoad(e)) this.handleEvent("initSession", (sess) => this.initSession(sess)) @@ -96,7 +96,13 @@ AudioPlayer = { initSession(sess) { localStorage.setItem("session", JSON.stringify(sess)) }, + handlePlayableState(e) { + console.log("HandlePlayableState", e) + const playback = JSON.parse(this?.player?.dataset?.playback) + this.initMediaSession(playback) + }, handleMetadataLoad(e) { + console.log("HandleMetadataLoad", e) const playback = JSON.parse(this?.player?.dataset?.playback) this.initMediaSession(playback) }, @@ -112,7 +118,7 @@ AudioPlayer = { * */ enableAudio() { if(this.player.src){ - document.removeEventListener("click", this.enableAudio) + document.removeEventListener("pointerdown", this.enableAudio) const hasNothingToPlay = this.player.readyState === 0; if(hasNothingToPlay){ this.player.play().catch(error => null) From 0586466889d6d6b728ed43f95a99d2828f56f0bb Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Fri, 2 Aug 2024 15:08:14 +0800 Subject: [PATCH 033/130] Use waiting spinner to prevent early play triggers --- lib/vyasa_web/components/core_components.ex | 21 ++++ .../controllers/og_image_controller.ex | 35 +++--- lib/vyasa_web/live/media_live/media_bridge.ex | 109 ++++++++++-------- .../live/media_live/media_bridge.html.heex | 2 + 4 files changed, 103 insertions(+), 64 deletions(-) diff --git a/lib/vyasa_web/components/core_components.ex b/lib/vyasa_web/components/core_components.ex index 95b47f94..1adc2962 100644 --- a/lib/vyasa_web/components/core_components.ex +++ b/lib/vyasa_web/components/core_components.ex @@ -178,6 +178,27 @@ defmodule VyasaWeb.CoreComponents do """ end + @doc """ + Renders a waiting spinner + """ + def spinner(assigns) do + ~H""" + + + + + + """ + end @doc """ Renders flash notices. diff --git a/lib/vyasa_web/controllers/og_image_controller.ex b/lib/vyasa_web/controllers/og_image_controller.ex index 89a127d8..9426f4b1 100644 --- a/lib/vyasa_web/controllers/og_image_controller.ex +++ b/lib/vyasa_web/controllers/og_image_controller.ex @@ -5,9 +5,10 @@ defmodule VyasaWeb.OgImageController do action_fallback VyasaWeb.FallbackController - @spaced_om " ॐ" - @fallback_text @spaced_om <> "\n" <> "Come explore Indic wisdom; distilled into words." <> "\n" <> @spaced_om + @fallback_text @spaced_om <> + "\n" <> + "Come explore Indic wisdom; distilled into words." <> "\n" <> @spaced_om @priv_dir :code.priv_dir(:vyasa) @base_url Path.join([@priv_dir, "static", "images"]) @fallback_img_url Path.join([@base_url, "fallback_thumbnail.png"]) @@ -21,17 +22,15 @@ defmodule VyasaWeb.OgImageController do |> send_file(200, encode_url(filename)) end - def get_by_binding(%Binding{} = b) do with target_url <- encode_url(b), - {:file, _ , false} <- {:file, target_url, File.exists?(target_url)}, + {:file, _, false} <- {:file, target_url, File.exists?(target_url)}, template <- template(b), - image <- create(target_url, template) do + image <- create(target_url, template) do IO.inspect(image) target_url else {:file, url, true} -> url - _ -> @fallback_img_url end end @@ -49,17 +48,22 @@ defmodule VyasaWeb.OgImageController do "source_#{title}.png" end - def encode_url(path) do - System.tmp_dir() |> Path.join(path) + System.tmp_dir() |> Path.join(path) end - @doc """ templates derived from Binding for image pipes in the future """ - def template(%Binding{chapter: %{no: c_no, title: c_title, translations: [%{target: %{translit_title: t_title}} | _]}, source: %{title: title}}) do + def template(%Binding{ + chapter: %{ + no: c_no, + title: c_title, + translations: [%{target: %{translit_title: t_title}} | _] + }, + source: %{title: title} + }) do "#{Recase.to_title(title)} Chapter #{c_no}\n\ #{c_title}\n #{t_title} @@ -83,6 +87,7 @@ defmodule VyasaWeb.OgImageController do def create(filename, content \\ @fallback_text) when is_binary(content) do IO.inspect(filename) IO.inspect(content) + content |> create_thumbnail() |> Image.write!(encode_url(filename)) @@ -104,14 +109,15 @@ defmodule VyasaWeb.OgImageController do caption_text_color = "brown" bg_url = - [:code.priv_dir(:vyasa), "static", "images" ,"logo_with_gradient_and_stamp_1200x630.png"] - |> Path.join() + [:code.priv_dir(:vyasa), "static", "images", "logo_with_gradient_and_stamp_1200x630.png"] + |> Path.join() IO.inspect(@img_bg_file_url, label: "compiletime") IO.inspect(bg_url, label: "runtime") - {:ok, base} = bg_url - |> Image.open() + {:ok, base} = + bg_url + |> Image.open() {:ok, thumbed} = base @@ -135,5 +141,4 @@ defmodule VyasaWeb.OgImageController do thumbed |> Image.compose!(txt_img) end - end diff --git a/lib/vyasa_web/live/media_live/media_bridge.ex b/lib/vyasa_web/live/media_live/media_bridge.ex index 32a96612..44d6ffca 100644 --- a/lib/vyasa_web/live/media_live/media_bridge.ex +++ b/lib/vyasa_web/live/media_live/media_bridge.ex @@ -266,10 +266,11 @@ defmodule VyasaWeb.MediaLive.MediaBridge do # sizes: "480x360" # } - updated_artwork = cond do - artwork && is_list(artwork) -> [generated_artwork | artwork] - true -> [generated_artwork] - end + updated_artwork = + cond do + artwork && is_list(artwork) -> [generated_artwork | artwork] + true -> [generated_artwork] + end playback_meta = %Meta{ title: title, @@ -293,7 +294,7 @@ defmodule VyasaWeb.MediaLive.MediaBridge do voice_events: voice_events |> create_events_payload() }) } - end + end def handle_info({_, :written_handshake, :init}, %{assigns: %{session: %{"id" => id}}} = socket) do Vyasa.PubSub.publish(:init, :media_handshake, "written:session:" <> id) @@ -415,6 +416,8 @@ defmodule VyasaWeb.MediaLive.MediaBridge do end attr :playback, Playback, required: false + attr :isReady, :boolean, required: false, default: false + attr :isPlaying, :boolean, required: true def play_pause_button(assigns) do ~H""" @@ -424,55 +427,63 @@ defmodule VyasaWeb.MediaLive.MediaBridge do phx-click={JS.push("play_pause")} phx-target="#media-player" aria-label={ - if @playback && @playback.playing? do - "Pause" - else - "Play" + cond do + not @isReady -> + "Not ready to play" + + @isPlaying -> + "Pause" + + true -> + "Play" end } > - <%= if @playback && @playback.playing? do %> - - - - - + <%= if not @isReady do %> + <.spinner /> <% else %> - - - + + + + + <% else %> + - + viewBox="0 0 24 24" + stroke="currentColor" + > + + + + <% end %> <% end %> """ diff --git a/lib/vyasa_web/live/media_live/media_bridge.html.heex b/lib/vyasa_web/live/media_live/media_bridge.html.heex index c7e073a4..95859607 100644 --- a/lib/vyasa_web/live/media_live/media_bridge.html.heex +++ b/lib/vyasa_web/live/media_live/media_bridge.html.heex @@ -69,6 +69,8 @@
<.play_pause_button playback={@playback} + isReady={not is_nil(@playback)} + isPlaying={@playback && @playback.playing?} />
From b87cbcb7452ef2305b1b76ed2bcdc9f3d70c8395 Mon Sep 17 00:00:00 2001 From: ks0m1c_dharma Date: Wed, 7 Aug 2024 23:11:58 +0800 Subject: [PATCH 034/130] clear source title index --- assets/js/app.js | 1 + docs/scraper.livemd | 189 +++++++++++++++++- .../20240131122233_gen_media_events.exs | 1 - 3 files changed, 179 insertions(+), 12 deletions(-) diff --git a/assets/js/app.js b/assets/js/app.js index dc1bd3b0..814026e2 100644 --- a/assets/js/app.js +++ b/assets/js/app.js @@ -27,6 +27,7 @@ let csrfToken = document.querySelector("meta[name='csrf-token']").getAttribute( "content", ); let liveSocket = new LiveSocket("/live", Socket, { + longPollFallbackMs: 2500, params: { _csrf_token: csrfToken, locale: Intl.NumberFormat().resolvedOptions().locale, timezone: Intl.DateTimeFormat().resolvedOptions().timeZone, diff --git a/docs/scraper.livemd b/docs/scraper.livemd index 51df2d92..67c2ee05 100644 --- a/docs/scraper.livemd +++ b/docs/scraper.livemd @@ -12,22 +12,22 @@ ## Root ```elixir -# defmodule R do -# def recompile() do -# Mix.Task.reenable("app.start") -# Mix.Task.reenable("compile") -# Mix.Task.reenable("compile.all") -# compilers = Mix.compilers() -# Enum.each(compilers, &Mix.Task.reenable("compile.#{&1}")) -# Mix.Task.run("compile.all") -# end -# end +defmodule R do + def recompile() do + Mix.Task.reenable("app.start") + Mix.Task.reenable("compile") + Mix.Task.reenable("compile.all") + compilers = Mix.compilers() + Enum.each(compilers, &Mix.Task.reenable("compile.#{&1}")) + Mix.Task.run("compile.all") + end +end R.recompile() ``` ```elixir -{:ok, src} = Vyasa.Written.create_source(%{title: "rama"}) +# {:ok, src} = Vyasa.Written.create_source(%{title: "rama"}) # Vyasa.Medium.Writer.init(%) ``` @@ -35,6 +35,173 @@ R.recompile() ``` +## Thiruvaasagam + +```elixir +url = "https://www.sivaya.org/" +# fetch from root frame +path = "thiruvaasagam_complete.php" +doc = "?lang=english" + +col = + Finch.build(:get, url <> path <> doc) + |> Finch.request!(Vyasa.Finch) + |> Map.get(:body) + |> Floki.parse_document!() + |> Floki.find("body") + |> tap(&IO.inspect(&1, limit: :infinity)) +``` + +```elixir +defmodule ThiruvaasagamScraper do + @base_url "https://www.sivaya.org/thiruvaasagam_complete.php" + + def scrape(lang) do + {:ok, html} = + Finch.build(:get, @base_url <> "?lang=" <> lang) + |> Finch.request!(Vyasa.Finch) + |> Map.get(:body) + |> Floki.parse_document() + + chapters = extract_chapters(html, lang) + %{chapters: chapters} + end + + def extract_chapters(html, lang) do + html + |> Floki.find("a[href^='thirumurai_song.php?&pathigam_no=8.']") + |> Enum.map(&extract_chapter(&1, lang)) + end + + defp extract_chapter(chapter_link, lang) do + href = Floki.attribute(chapter_link, "href") + + chapter_number = + href + |> List.first() + |> extract_chapter_number() + + chapter_title = Floki.text(chapter_link) + # verses = extract_verses(chapter_number, lang) + + %{ + number: chapter_number, + title: chapter_title, + url: href + # verses: verses + } + end + + defp extract_chapter_number(href) do + Regex.run(~r/pathigam_no=8\.(\d+)/, href) + |> List.last() + |> String.to_integer() + end + + def extract_verses(chapter_number, lang) when is_number(chapter_number) do + chapter_url = + "https://www.sivaya.org/thirumurai_song.php?&pathigam_no=8.#{chapter_number}&lang=" <> lang + + extract_verses(chapter_url, lang) + end + + def extract_verses(chapter_url, lang) when is_binary(chapter_url) do + {:ok, chapter_html} = + Finch.build(:get, chapter_url) + |> Finch.request!(Vyasa.Finch) + |> Map.get(:body) + |> Floki.parse_document() + + chapter_html + |> Floki.find("table td") + |> extract_verse_texts() + end + + defp extract_verse_texts(td) do + td + |> Enum.reduce([], fn + {"td", [], + [ + {"a", [{"id", _}], []}, + links, + _ + ]} = td, + acc -> + [links | acc] + + _, acc -> + acc + end) + |> Enum.reverse() + |> Enum.map( + &(Floki.text(&1) + |> String.split("\n\n") + |> Enum.reject(fn + "" -> true + _ -> false + end)) + ) + |> List.flatten() + end +end +``` + +```elixir +e_v = ThiruvaasagamScraper.extract_verses(101, "english") + +t_v = ThiruvaasagamScraper.extract_verses(101, "tamil") +``` + +```elixir +# %Vyasa.Written.Source{ +# title: "Thiruvasagam", +# verses: (for i <- 0..length(t_v) do +# %Vyasa.Written.Verse{no: i, body: Enum.at(t_v, i), translations: (for i <- 0..length(e_v) do +# %Vyasa.Written.Translation{lang: "en", body: Enum.at(t_v, i)} +# end)} +# end) + +# } + +# %Vyasa.Written.Source{} +# |> Vyasa.Written.Source.gen_changeset(%{title: "Thiruvasagam", chapters: }) + +chapters_t = ThiruvaasagamScraper.scrape("tamil") +``` + +```elixir +chapters_t[:chapters] +|> Enum.reduce( + [], + fn + %{number: no, title: title, url: [url]}, [%{number: curr_no, url: curr_url} = curr | acc] + when no == curr_no + 100 -> + Map.put(curr, :url, [url | curr_url]) + + %{number: no, title: title, url: url}, acc -> + [ + %{ + number: no - 100, + title: + String.split(title, "-") + |> List.first() + |> String.split(" ") + |> List.last() + |> String.trim(), + url: url + } + | acc + ] + end +) + +# |> Enum.find(&(&1.number == 5 )) +``` + +```elixir +t_v = ThiruvaasagamScraper.extract_verses(101, "hindi") +``` + ## Valmiki Ramayana diff --git a/priv/repo/migrations/20240131122233_gen_media_events.exs b/priv/repo/migrations/20240131122233_gen_media_events.exs index 945af24c..ddfe63f7 100644 --- a/priv/repo/migrations/20240131122233_gen_media_events.exs +++ b/priv/repo/migrations/20240131122233_gen_media_events.exs @@ -46,6 +46,5 @@ defmodule Vyasa.Repo.Migrations.GenMediaEvents do add :parent_no, references(:chapters, column: :no, type: :integer, with: [source_id: :source_id]) end - create unique_index(:sources, [:title]) end end From ce6fd8ffc8fe3329732d8105893827ca45d60e7f Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Tue, 13 Aug 2024 22:56:56 +0800 Subject: [PATCH 035/130] [WIP]: basic DM, demo state & assigned components Still have no idea how the VyasaWeb.SourceLive.Chapter.Index is supposed to be rendered as @inner_content within the new display_manager.html.heex --- lib/vyasa_web/components/command_group.ex | 108 +++ .../components/layouts/app.html.heex | 9 +- .../layouts/display_manager.html.heex | 17 + .../live/display_manager/display_manager.ex | 637 ++++++++++++++++++ .../display_manager/display_manager.html.heex | 3 + .../live/source_live/chapter/index.ex | 1 + 6 files changed, 770 insertions(+), 5 deletions(-) create mode 100644 lib/vyasa_web/components/command_group.ex create mode 100644 lib/vyasa_web/components/layouts/display_manager.html.heex create mode 100644 lib/vyasa_web/live/display_manager/display_manager.ex create mode 100644 lib/vyasa_web/live/display_manager/display_manager.html.heex diff --git a/lib/vyasa_web/components/command_group.ex b/lib/vyasa_web/components/command_group.ex new file mode 100644 index 00000000..f05e54d0 --- /dev/null +++ b/lib/vyasa_web/components/command_group.ex @@ -0,0 +1,108 @@ +defmodule VyasaWeb.CommandGroup do + @moduledoc """ + """ + use VyasaWeb, :live_component + alias Phoenix.LiveView.Socket + + # alias Vyasa.Medium.{Playback} + + def mount(_, _, socket) do + socket + end + + @impl true + def render(assigns) do + ~H""" +
+ +

show_command_group?: <%= @show_command_group? %>

+ <.button + id="toggleButton" + class="bg-blue-500 text-white p-2 rounded-full focus:outline-none" + phx-click={JS.push("toggle_show_command_group")} + phx-target={@myself} + > + + + + +
+ + + +
+
+ """ + end + + @impl true + def handle_event( + "toggle_show_command_group", + _params, + %Socket{ + assigns: + %{ + show_command_group?: show_command_group? + } = _assigns + } = socket + ) do + IO.inspect(show_command_group?, label: "TRACE handle event for toggle_show_command_group") + + { + :noreply, + socket + |> assign(show_command_group?: !show_command_group?) + } + end + + @impl true + def update(_assigns, socket) do + {:ok, + socket + |> assign(show_command_group?: false)} + end + + # @impl true + # def update( + # %{ + # event: "media_bridge:notify_audio_player" = _event, + # playback: %Playback{} = playback + # } = _assigns, + # socket + # ) do + # {:ok, + # socket + # |> assign(playback: playback)} + # end + + # @impl true + # def update(_assigns, socket) do + # {:ok, + # socket + # |> assign(playback: nil)} + # end +end diff --git a/lib/vyasa_web/components/layouts/app.html.heex b/lib/vyasa_web/components/layouts/app.html.heex index e3829211..c57ce378 100644 --- a/lib/vyasa_web/components/layouts/app.html.heex +++ b/lib/vyasa_web/components/layouts/app.html.heex @@ -1,4 +1,4 @@ -
+
@@ -21,9 +21,8 @@
<.flash_group flash={@flash} /> - <%= @inner_content %> -
- <%= live_render(@socket, VyasaWeb.MediaLive.MediaBridge, id: "MediaBridge", session: @session, sticky: true) %> -
+ + <%= live_render(@socket, VyasaWeb.DisplayManager.DisplayManager, id: "DisplayManager", session: @session, sticky: true) %> + <%= @inner_content %>
diff --git a/lib/vyasa_web/components/layouts/display_manager.html.heex b/lib/vyasa_web/components/layouts/display_manager.html.heex new file mode 100644 index 00000000..a4397e17 --- /dev/null +++ b/lib/vyasa_web/components/layouts/display_manager.html.heex @@ -0,0 +1,17 @@ +
+ + + <.live_component module={@command_group_component} id="command_group" /> + +
+

Content View

+

This is the main content area. The button group hovers above this content.

+
+ + <%= @from_parent %> + HEllo world, this is display manager + <%= @example %> +
+ <%= live_render(@socket, @action_bar_component, id: "MediaBridge", session: @session, sticky: true) %> +
+
diff --git a/lib/vyasa_web/live/display_manager/display_manager.ex b/lib/vyasa_web/live/display_manager/display_manager.ex new file mode 100644 index 00000000..88f6a08a --- /dev/null +++ b/lib/vyasa_web/live/display_manager/display_manager.ex @@ -0,0 +1,637 @@ +defmodule VyasaWeb.DisplayManager.DisplayManager do + @moduledoc """ + Testing out nested live_views + """ + use VyasaWeb, :live_view + # alias Phoenix.LiveView.Socket + # alias Vyasa.Medium + # alias Vyasa.Medium.{Voice, Event, Playback} + + # @default_player_config %{ + # height: "300", + # width: "400", + # # see supported params here: https://developers.google.com/youtube/player_parameters#Parameters + # playerVars: %{ + # autoplay: 1, + # mute: 1, + # start: 0, + # controls: 0, + # enablejsapi: 1, + # # hide video annotations + # iv_load_policy: 3, + # # ensures it doesn't full-screen on ios + # playsinline: 1 + # } + # } + + @impl true + def mount(_params, sess, socket) do + # encoded_config = Jason.encode!(@default_player_config) + IO.inspect(sess, label: "TRACE session:") + + from_parent = + cond do + Map.has_key?(sess, "from_parent") -> + sess["from_parent"] + + true -> + "default from parent" + end + + { + :ok, + socket + |> assign(example: "foo") + |> assign(session: sess) + |> assign(from_parent: from_parent) + # TODO: wire up conditional component selection based the mode here: + |> assign(action_bar_component: VyasaWeb.MediaLive.MediaBridge) + |> assign(command_group_component: VyasaWeb.CommandGroup), + layout: {VyasaWeb.Layouts, :display_manager} + } + + # socket = + # socket + # |> assign(playback: nil) + # |> assign(voice: nil) + # |> assign(video: nil) + # |> assign(video_player_config: encoded_config) + # |> assign(should_show_vid: false) + # |> assign(is_follow_mode: true) + # |> sync_session() + + # {:ok, socket, layout: false} + end + + # defp sync_session(%{assigns: %{session: %{"id" => id} = sess}} = socket) when is_binary(id) do + # Vyasa.PubSub.subscribe("media:session:" <> id) + # Vyasa.PubSub.publish(:init, :media_handshake, "written:session:" <> id) + + # socket + # |> push_event("initSession", sess |> Map.take(["id"])) + # end + + # defp sync_session(socket) do + # socket + # end + + # defp update_playback( + # %Socket{ + # assigns: + # %{ + # playback: + # %Playback{ + # played_at: _played_at, + # elapsed: _elapsed, + # playing?: _playing?, + # paused_at: _paused_at + # } = playback_bef + # } = _assigns + # } = + # socket + # ) do + # # TODO: [refactor] add case for updating playback on seek + # socket + # |> assign( + # playback: + # case playback_bef do + # %Playback{playing?: false} -> + # create_playback_on_play(playback_bef) + + # %Playback{playing?: true} -> + # create_playback_on_pause(playback_bef) + + # _ -> + # playback_bef + # end + # ) + # end + + # defp update_playback(%Socket{} = socket) do + # socket + # end + + # defp create_playback_on_play(%Playback{elapsed: elapsed} = playback) do + # now = DateTime.utc_now() + + # played_at = + # cond do + # # resume case + # elapsed > 0 -> + # DateTime.add(now, -round(elapsed), :millisecond) + + # # fresh start case + # elapsed == 0 -> + # now + + # true -> + # now + # end + + # %{playback | playing?: true, played_at: played_at} + # end + + # defp create_playback_on_pause( + # %Playback{ + # played_at: played_at + # } = playback + # ) do + # now = DateTime.utc_now() + # elapsed = DateTime.diff(now, played_at, :millisecond) + # %{playback | playing?: false, paused_at: now, elapsed: elapsed} + # end + + # # TODO: [refactor] merge with the other update playback functions + # defp update_playback_on_seek(socket, position_ms) do + # %{ + # playback: + # %Playback{ + # playing?: playing?, + # played_at: played_at + # } = playback + # } = socket.assigns + + # # <=== sigil U + # now = DateTime.utc_now() + + # played_at = + # cond do + # !playing? -> played_at + # playing? -> DateTime.add(now, -round(position_ms), :millisecond) + # end + + # socket + # |> assign(playback: %{playback | played_at: played_at, elapsed: position_ms}) + # end + + # @impl true + # def handle_event( + # "toggle_should_show_vid", + # _, + # %{assigns: %{should_show_vid: flag} = _assigns} = socket + # ) do + # {:noreply, socket |> assign(should_show_vid: !flag)} + # end + + # @impl true + # def handle_event( + # "toggle_is_follow_mode", + # _, + # %{assigns: %{is_follow_mode: flag} = _assigns} = socket + # ) do + # { + # :noreply, + # socket + # |> assign(is_follow_mode: !flag) + # |> push_event("toggleFollowMode", %{}) + # } + # end + + # @impl true + # @doc """ + # Handle the user-generated action of playing or pausing. + # First updates the playback struct then uses it to notify others that depend on that playback struct. + + # TODO: use event structs in the same fashion as livebeats to standardise the user-generated events + # """ + # def handle_event("play_pause", _, socket) do + # %{ + # assigns: %{ + # playback: %Playback{} = playback + # } + # } = socket + + # IO.inspect(playback, label: "TRACE :handling play_pause event") + + # {:noreply, + # socket + # |> update_playback() + # |> notify_audio_player() + # |> push_hook_events()} + # end + + # @impl true + # def handle_event( + # "seekTime", + # %{"seekToMs" => position_ms, "originator" => "ProgressBar" = originator} = _payload, + # socket + # ) do + # IO.puts("[handleEvent] seekToMs #{position_ms} ORIGINATOR = #{originator}") + + # socket + # |> handle_seek(position_ms, originator) + # end + + # # Fallback for seekTime, if no originator is present, shall be to treat MediaBridge as the originator + # # and call handle_seek. + # @impl true + # def handle_event("seekTime", %{"seekToMs" => position_ms} = _payload, socket) do + # IO.puts("[handleEvent] seekToMs #{position_ms}") + + # socket + # |> handle_seek(position_ms, "MediaBridge") + # end + + # # when originator is the ProgressBar, then shall only consume and carry out internal actions only + # # i.e. updating of the playback state kept in MediaBridge liveview. + # defp handle_seek(socket, position_ms, "ProgressBar" = _originator) do + # { + # :noreply, + # socket + # |> update_playback_on_seek(position_ms) + # } + # end + + # # when the seek is originated by the MediaBridge, then it shall carry out both internal & external actions + # # internal: updating of the playback state kept in the MediaBridge liveview + # # external: pubbing via the seekTime targetEvent + # defp handle_seek(socket, position_ms, "MediaBridge" = originator) do + # seek_time_payload = %{ + # seekToMs: position_ms, + # originator: originator + # } + + # IO.inspect("handle_seek originator: #{originator}, playback position ms: #{position_ms}", + # label: "checkpoint" + # ) + + # { + # :noreply, + # socket + # |> push_event("media_bridge:seekTime", seek_time_payload) + # |> update_playback_on_seek(position_ms) + # } + # end + + # # assigns necessary states if voice is legit and events can be loaded. + # defp apply_voice_action( + # %Socket{} = socket, + # %Voice{ + # video: video + # } = voice + # ) do + # loaded_voice = voice |> Medium.load_events() + + # generated_artwork = %{ + # src: + # url(~p"/og/#{VyasaWeb.OgImageController.get_by_binding(%{source: loaded_voice.source})}"), + # type: "image/png", + # sizes: "480x360" + # } + + # playback = Playback.create_playback(loaded_voice, generated_artwork) + + # socket + # |> assign(voice: loaded_voice) + # |> assign(video: video) + # |> assign(playback: playback) + # end + + # defp dispatch_voice_registering_events( + # %Socket{ + # assigns: %{ + # voice: + # %Voice{ + # events: voice_events + # } = _voice, + # playback: playback + # } + # } = socket + # ) do + # socket + # |> push_event("media_bridge:registerEventsTimeline", %{ + # voice_events: voice_events |> create_events_payload() + # }) + # |> push_event("media_bridge:registerPlayback", %{playback: playback}) + # end + + # # TODO: consolidate other hook events that need to be sent to the media bridge hook + # defp push_hook_events( + # %Socket{ + # assigns: %{ + # playback: + # %Playback{ + # playing?: playing?, + # elapsed: elapsed + # } = playback + # } + # } = socket + # ) do + # # TODO: merge into a single push_event, let the hook use the Playback::elapsed to determine where to start playing from. + # socket + # |> push_event("media_bridge:play_pause", %{ + # cmd: + # cond do + # playing? -> + # "play" + + # !playing? -> + # "pause" + # end, + # originator: "MediaBridge", + # playback: playback + # }) + # |> push_event("media_bridge:seekTime", %{ + # seekToMs: elapsed, + # originator: "MediaBridge" + # }) + # end + + # @impl true + # # On receiving a voice_ack, the written and player contexts are now synced. + # # The voice's id shall be used as a sort of implicit ack number to check if the voice received + # # has already been received and in the case of a duplicate message, we shall ignore the msg. + # # + # # If the voice is new, then we shall pipe it to the respective apply_action where in + # # a playback struct is created that represents this synced-state and the client-side hook is triggerred + # # to register the associated events timeline. + # def handle_info( + # {_, :voice_ack, + # %Voice{ + # id: id, + # video: _video + # } = voice} = _msg, + # %Socket{ + # assigns: %{ + # voice: prev_voice + # } + # } = socket + # ) do + # prev_id = + # cond do + # is_nil(prev_voice) -> nil + # %Voice{id: prev_id} = prev_voice -> prev_id + # true -> nil + # end + + # is_new_voice = id !== prev_id + + # cond do + # is_new_voice -> + # {:noreply, + # socket + # |> apply_voice_action(voice) + # |> dispatch_voice_registering_events()} + + # true -> + # {:noreply, socket} + # end + # end + + # @doc """ + # Handles the custom message that correponds to the :written_handshake event + # with the :init msg, regardless of the module that dispatched the message. + # """ + # def handle_info( + # {_, :written_handshake, :init} = _msg, + # %{assigns: %{session: %{"id" => id}}} = socket + # ) do + # Vyasa.PubSub.publish(:init, :media_handshake, "written:session:" <> id) + # {:noreply, socket} + # end + + # # Handles playback sync relative to a particular verse id. In this case, the playback state is expected + # # to get updated to the start of the event corresponding to that particular verse. + # @impl true + # def handle_info({_, :playback_sync, %{verse_id: verse_id} = _inner_msg} = _msg, socket) do + # %{voice: %{events: events} = _voice} = socket.assigns + + # IO.inspect("handle_info::playback_sync", label: "checkpoint") + + # %Event{ + # origin: target_ms + # } = + # _target_event = + # events + # |> get_target_event(verse_id) + + # socket + # |> handle_seek(target_ms, "MediaBridge") + # end + + # def handle_info(msg, socket) do + # IO.inspect(msg, label: "unexpected message received by media bridge") + # {:noreply, socket} + # end + + # defp create_events_payload([%Event{} | _] = events) do + # events |> Enum.map(&(&1 |> Map.take([:origin, :duration, :phase, :fragments, :verse_id]))) + # end + + # defp get_target_event([%Event{} | _] = events, verse_id) do + # events + # |> Enum.find(fn e -> e.verse_id === verse_id end) + # end + + # # dispatches events to the audio player + # defp notify_audio_player( + # %{ + # assigns: + # %{ + # playback: + # %Playback{ + # playing?: _playing? + # } = playback + # } = _assigns + # } = socket + # ) do + # send_update( + # self(), + # VyasaWeb.AudioPlayer, + # id: "audio-player", + # playback: playback, + # event: "media_bridge:notify_audio_player" + # ) + + # socket + # end + + # # TODO: add this when implementing tracks & playlists + # defp js_prev() do + # end + + # # TODO: add this when implementing tracks & playlists + # defp js_next() do + # end + + # attr :id, :string, required: true + # attr :min, :integer, default: 0 + # attr :max, :integer, default: 100 + # # elapsed time (in milliseconds) + # attr :value, :integer + + # def progress_bar(assigns) do + # assigns = assign_new(assigns, :value, fn -> assigns[:min] || 0 end) + # IO.inspect(assigns, label: "progress hopefully we make some progress") + + # ~H""" + #
+ #
+ #
+ #
+ # """ + # end + + # attr :playback, Playback, required: false + # attr :isReady, :boolean, required: false, default: false + # attr :isPlaying, :boolean, required: true + + # def play_pause_button(assigns) do + # ~H""" + # + # """ + # end + + # def next_button(assigns) do + # ~H""" + # + # """ + # end + + # def prev_button(assigns) do + # ~H""" + # + # """ + # end + + # # def volume_control(assigns) do + # # ~H""" + + # # """ + + # # end + + # def video_player(assigns) do + # ~H""" + #
+ #
+ # <.live_component + # module={VyasaWeb.YouTubePlayer} + # id="YouTubePlayer" + # video_id={@video.ext_uri} + # player_config={@player_config} + # /> + #
+ #
+ # """ + # end + + # def video_toggler(assigns) do + # ~H""" + #
+ # <.icon :if={@should_show_vid} name="hero-video-camera-slash" /> + # <.icon :if={!@should_show_vid} name="hero-video-camera" /> + #
+ # """ + # end + + # def follow_mode_toggler(assigns) do + # ~H""" + #
+ # <.icon :if={@is_follow_mode} name="hero-rectangle-stack" /> + # <.icon :if={!@is_follow_mode} name="hero-queue-list" /> + #
+ # """ + # end +end diff --git a/lib/vyasa_web/live/display_manager/display_manager.html.heex b/lib/vyasa_web/live/display_manager/display_manager.html.heex new file mode 100644 index 00000000..806cf971 --- /dev/null +++ b/lib/vyasa_web/live/display_manager/display_manager.html.heex @@ -0,0 +1,3 @@ +
+ <%= live_render(@socket, VyasaWeb.MediaLive.MediaBridge, id: "MediaBridge", session: @session, sticky: true) %> +
diff --git a/lib/vyasa_web/live/source_live/chapter/index.ex b/lib/vyasa_web/live/source_live/chapter/index.ex index 3b07ac3e..045c93ec 100644 --- a/lib/vyasa_web/live/source_live/chapter/index.ex +++ b/lib/vyasa_web/live/source_live/chapter/index.ex @@ -1,4 +1,5 @@ defmodule VyasaWeb.SourceLive.Chapter.Index do + # use VyasaWeb, {:live_view, layout: {VyasaWeb.Layouts, :content_layout}} use VyasaWeb, :live_view alias Vyasa.{Written, Medium, Draft} alias Vyasa.Medium.{Voice} From 7e07caafbc0ba034386c7bec5e19fd72ddc9ce61 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Thu, 15 Aug 2024 08:45:24 +0800 Subject: [PATCH 036/130] Rename CommandGroup -> ControlPanel --- lib/vyasa_web/components/command_group.ex | 41 +++++-------------- .../layouts/display_manager.html.heex | 11 +---- .../live/display_manager/display_manager.ex | 3 +- 3 files changed, 13 insertions(+), 42 deletions(-) diff --git a/lib/vyasa_web/components/command_group.ex b/lib/vyasa_web/components/command_group.ex index f05e54d0..01e03f53 100644 --- a/lib/vyasa_web/components/command_group.ex +++ b/lib/vyasa_web/components/command_group.ex @@ -1,11 +1,11 @@ -defmodule VyasaWeb.CommandGroup do +defmodule VyasaWeb.ControlPanel do @moduledoc """ + The ControlPanel is the hover-overlay of buttons that allow the user to access + usage-modes and carry out actions related to a specific mode. """ use VyasaWeb, :live_component alias Phoenix.LiveView.Socket - # alias Vyasa.Medium.{Playback} - def mount(_, _, socket) do socket end @@ -15,11 +15,10 @@ defmodule VyasaWeb.CommandGroup do ~H"""
-

show_command_group?: <%= @show_command_group? %>

<.button id="toggleButton" class="bg-blue-500 text-white p-2 rounded-full focus:outline-none" - phx-click={JS.push("toggle_show_command_group")} + phx-click={JS.push("toggle_show_control_panel")} phx-target={@myself} > assign(show_command_group?: !show_command_group?) + |> assign(show_control_panel?: !show_control_panel?) } end @@ -83,26 +82,6 @@ defmodule VyasaWeb.CommandGroup do def update(_assigns, socket) do {:ok, socket - |> assign(show_command_group?: false)} + |> assign(show_control_panel?: false)} end - - # @impl true - # def update( - # %{ - # event: "media_bridge:notify_audio_player" = _event, - # playback: %Playback{} = playback - # } = _assigns, - # socket - # ) do - # {:ok, - # socket - # |> assign(playback: playback)} - # end - - # @impl true - # def update(_assigns, socket) do - # {:ok, - # socket - # |> assign(playback: nil)} - # end end diff --git a/lib/vyasa_web/components/layouts/display_manager.html.heex b/lib/vyasa_web/components/layouts/display_manager.html.heex index a4397e17..d3455ba1 100644 --- a/lib/vyasa_web/components/layouts/display_manager.html.heex +++ b/lib/vyasa_web/components/layouts/display_manager.html.heex @@ -1,16 +1,7 @@
- - <.live_component module={@command_group_component} id="command_group" /> - -
-

Content View

-

This is the main content area. The button group hovers above this content.

-
+ <.live_component module={@control_panel_component} id="control_panel" /> - <%= @from_parent %> - HEllo world, this is display manager - <%= @example %>
<%= live_render(@socket, @action_bar_component, id: "MediaBridge", session: @session, sticky: true) %>
diff --git a/lib/vyasa_web/live/display_manager/display_manager.ex b/lib/vyasa_web/live/display_manager/display_manager.ex index 88f6a08a..ee589457 100644 --- a/lib/vyasa_web/live/display_manager/display_manager.ex +++ b/lib/vyasa_web/live/display_manager/display_manager.ex @@ -44,9 +44,10 @@ defmodule VyasaWeb.DisplayManager.DisplayManager do |> assign(example: "foo") |> assign(session: sess) |> assign(from_parent: from_parent) + # |> assign(content: SourceLive.Chapter.Index) # TODO: wire up conditional component selection based the mode here: |> assign(action_bar_component: VyasaWeb.MediaLive.MediaBridge) - |> assign(command_group_component: VyasaWeb.CommandGroup), + |> assign(control_panel_component: VyasaWeb.ControlPanel), layout: {VyasaWeb.Layouts, :display_manager} } From e4dd84cea87fa8fd1800d5e2d558a848a34ecf9b Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Thu, 15 Aug 2024 11:51:02 +0800 Subject: [PATCH 037/130] Initial Wire up %UserMode{} to Control Panel --- lib/vyasa/display/user_mode.ex | 45 +++++++++++++++++++ .../{command_group.ex => control_panel.ex} | 22 +++------ .../layouts/display_manager.html.heex | 4 +- .../live/display_manager/display_manager.ex | 20 ++------- 4 files changed, 57 insertions(+), 34 deletions(-) create mode 100644 lib/vyasa/display/user_mode.ex rename lib/vyasa_web/components/{command_group.ex => control_panel.ex} (79%) diff --git a/lib/vyasa/display/user_mode.ex b/lib/vyasa/display/user_mode.ex new file mode 100644 index 00000000..56e13dca --- /dev/null +++ b/lib/vyasa/display/user_mode.ex @@ -0,0 +1,45 @@ +defmodule Vyasa.Display.UserMode do + @moduledoc """ + The UserMode struct is a way of representing user-modes and + is intended to be used as a container. + + Typically, + 1. they shall contain component-definitions that get passed as "args" for the DM layout + 2. they may contain callback functions that get triggerred on a particular button activity + + Modes: + 1. Reading + 2. Drafting + 3. Discussion(?) + """ + alias Vyasa.Display.UserMode + + @derive Jason.Encoder + defstruct [ + :mode, + :mode_icon_name, + :action_bar_component, + :control_panel_component + ] + + # defines static aspects of different modes: + @defs %{ + "read" => %{ + mode: "read", + mode_icon_name: "hero-book-open", + action_bar_component: VyasaWeb.MediaLive.MediaBridge, + control_panel_component: VyasaWeb.ControlPanel + }, + "draft" => %{ + mode: "draft", + mode_icon_name: "hero-pencil-square", + action_bar_component: VyasaWeb.MediaLive.MediaBridge, + control_panel_component: VyasaWeb.ControlPanel + } + } + + def get_initial_mode() do + mode = "read" + struct(UserMode, @defs[mode]) + end +end diff --git a/lib/vyasa_web/components/command_group.ex b/lib/vyasa_web/components/control_panel.ex similarity index 79% rename from lib/vyasa_web/components/command_group.ex rename to lib/vyasa_web/components/control_panel.ex index 01e03f53..05443c5d 100644 --- a/lib/vyasa_web/components/command_group.ex +++ b/lib/vyasa_web/components/control_panel.ex @@ -12,6 +12,8 @@ defmodule VyasaWeb.ControlPanel do @impl true def render(assigns) do + IO.inspect(assigns, label: "Component Assigns") + ~H"""
@@ -21,20 +23,7 @@ defmodule VyasaWeb.ControlPanel do phx-click={JS.push("toggle_show_control_panel")} phx-target={@myself} > - - - + <.icon name={@mode.mode_icon_name} />
assign(show_control_panel?: false)} + |> assign(show_control_panel?: false) + |> assign(mode: mode)} end end diff --git a/lib/vyasa_web/components/layouts/display_manager.html.heex b/lib/vyasa_web/components/layouts/display_manager.html.heex index d3455ba1..afd66c32 100644 --- a/lib/vyasa_web/components/layouts/display_manager.html.heex +++ b/lib/vyasa_web/components/layouts/display_manager.html.heex @@ -1,8 +1,8 @@
- <.live_component module={@control_panel_component} id="control_panel" /> + <.live_component module={@mode.control_panel_component} id="control_panel" mode={@mode} />
- <%= live_render(@socket, @action_bar_component, id: "MediaBridge", session: @session, sticky: true) %> + <%= live_render(@socket, @mode.action_bar_component, id: "MediaBridge", session: @session, sticky: true) %>
diff --git a/lib/vyasa_web/live/display_manager/display_manager.ex b/lib/vyasa_web/live/display_manager/display_manager.ex index ee589457..17ee7b4f 100644 --- a/lib/vyasa_web/live/display_manager/display_manager.ex +++ b/lib/vyasa_web/live/display_manager/display_manager.ex @@ -3,6 +3,7 @@ defmodule VyasaWeb.DisplayManager.DisplayManager do Testing out nested live_views """ use VyasaWeb, :live_view + alias Vyasa.Display.UserMode # alias Phoenix.LiveView.Socket # alias Vyasa.Medium # alias Vyasa.Medium.{Voice, Event, Playback} @@ -27,27 +28,14 @@ defmodule VyasaWeb.DisplayManager.DisplayManager do @impl true def mount(_params, sess, socket) do # encoded_config = Jason.encode!(@default_player_config) - IO.inspect(sess, label: "TRACE session:") - - from_parent = - cond do - Map.has_key?(sess, "from_parent") -> - sess["from_parent"] - - true -> - "default from parent" - end + %UserMode{} = mode = UserMode.get_initial_mode() { :ok, socket - |> assign(example: "foo") + # to allow passing to children live-views |> assign(session: sess) - |> assign(from_parent: from_parent) - # |> assign(content: SourceLive.Chapter.Index) - # TODO: wire up conditional component selection based the mode here: - |> assign(action_bar_component: VyasaWeb.MediaLive.MediaBridge) - |> assign(control_panel_component: VyasaWeb.ControlPanel), + |> assign(mode: mode), layout: {VyasaWeb.Layouts, :display_manager} } From 5fac0dc5345db29b8c628597f5394fa270180af9 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Thu, 15 Aug 2024 16:23:13 +0800 Subject: [PATCH 038/130] Switch modes, add user_mode.ex to tw config --- assets/js/hooks/media_bridge.js | 2 +- assets/tailwind.config.js | 131 +++++++++++------- lib/vyasa/display/user_mode.ex | 11 ++ lib/vyasa_web/components/control_panel.ex | 26 ++-- lib/vyasa_web/components/core_components.ex | 46 ++++-- .../live/display_manager/display_manager.ex | 33 +++-- 6 files changed, 163 insertions(+), 86 deletions(-) diff --git a/assets/js/hooks/media_bridge.js b/assets/js/hooks/media_bridge.js index 40388b8e..5582d035 100644 --- a/assets/js/hooks/media_bridge.js +++ b/assets/js/hooks/media_bridge.js @@ -95,7 +95,7 @@ MediaBridge = { emphasizeChapterPreamble() { const preambleNode = document.querySelector("#chapter-preamble"); if (!preambleNode) { - console.warning("[EMPHASIZE], no preamble node found"); + console.warn("[EMPHASIZE], no preamble node found"); return null; } diff --git a/assets/tailwind.config.js b/assets/tailwind.config.js index 83e22aa7..8e66d50d 100644 --- a/assets/tailwind.config.js +++ b/assets/tailwind.config.js @@ -1,36 +1,37 @@ // See the Tailwind configuration guide for advanced usage // https://tailwindcss.com/docs/configuration -const plugin = require("tailwindcss/plugin") -const fs = require("fs") -const path = require("path") +const plugin = require("tailwindcss/plugin"); +const fs = require("fs"); +const path = require("path"); module.exports = { content: [ "./js/**/*.js", "../lib/vyasa_web.ex", - "../lib/vyasa_web/**/*.*ex" + "../lib/vyasa/display/user_mode.ex", + "../lib/vyasa_web/**/*.*ex", ], theme: { extend: { fontFamily: { - 'dn': ['"Gotu"', 'sans-serif'], - 'tl': ['"Tamil Font"', 'sans-serif'], + dn: ['"Gotu"', "sans-serif"], + tl: ['"Tamil Font"', "sans-serif"], }, colors: { - primary: 'var(--color-primary)', - primaryAccent: 'var(--color-primary-accent)', - secondary: 'var(--color-secondary)', - primaryBackground: 'var(--color-primary-background)', - secondary: 'var(--color-secondary)', - brand: 'var(--color-brand)', - brandLight: 'var(--color-brand-light)', - brandExtraLight: 'var(--color-brand-extra-light)', - brandAccent: 'var(--color-brand-accent)', - brandAccentLight: 'var(--color-brand-accent-light)', - brandDark: 'var(--color-brand-dark)', - brandExtraDark: 'var(--color-brand-extra-dark)', - } + primary: "var(--color-primary)", + primaryAccent: "var(--color-primary-accent)", + secondary: "var(--color-secondary)", + primaryBackground: "var(--color-primary-background)", + secondary: "var(--color-secondary)", + brand: "var(--color-brand)", + brandLight: "var(--color-brand-light)", + brandExtraLight: "var(--color-brand-extra-light)", + brandAccent: "var(--color-brand-accent)", + brandAccentLight: "var(--color-brand-accent-light)", + brandDark: "var(--color-brand-dark)", + brandExtraDark: "var(--color-brand-extra-dark)", + }, }, }, plugins: [ @@ -41,44 +42,70 @@ module.exports = { // //
// - plugin(({addVariant}) => addVariant("phx-no-feedback", [".phx-no-feedback&", ".phx-no-feedback &"])), - plugin(({addVariant}) => addVariant("phx-click-loading", [".phx-click-loading&", ".phx-click-loading &"])), - plugin(({addVariant}) => addVariant("phx-submit-loading", [".phx-submit-loading&", ".phx-submit-loading &"])), - plugin(({addVariant}) => addVariant("phx-change-loading", [".phx-change-loading&", ".phx-change-loading &"])), + plugin(({ addVariant }) => + addVariant("phx-no-feedback", [ + ".phx-no-feedback&", + ".phx-no-feedback &", + ]), + ), + plugin(({ addVariant }) => + addVariant("phx-click-loading", [ + ".phx-click-loading&", + ".phx-click-loading &", + ]), + ), + plugin(({ addVariant }) => + addVariant("phx-submit-loading", [ + ".phx-submit-loading&", + ".phx-submit-loading &", + ]), + ), + plugin(({ addVariant }) => + addVariant("phx-change-loading", [ + ".phx-change-loading&", + ".phx-change-loading &", + ]), + ), // Embeds Heroicons (https://heroicons.com) into your app.css bundle // See your `CoreComponents.icon/1` for more information. // - plugin(function({matchComponents, theme}) { - let iconsDir = path.join(__dirname, "./vendor/heroicons/optimized") - let values = {} + plugin(function ({ matchComponents, theme }) { + let iconsDir = path.join(__dirname, "./vendor/heroicons/optimized"); + let values = {}; let icons = [ ["", "/24/outline"], ["-solid", "/24/solid"], - ["-mini", "/20/solid"] - ] + ["-mini", "/20/solid"], + ]; icons.forEach(([suffix, dir]) => { - fs.readdirSync(path.join(iconsDir, dir)).forEach(file => { - let name = path.basename(file, ".svg") + suffix - values[name] = {name, fullPath: path.join(iconsDir, dir, file)} - }) - }) - matchComponents({ - "hero": ({name, fullPath}) => { - let content = fs.readFileSync(fullPath).toString().replace(/\r?\n|\r/g, "") - return { - [`--hero-${name}`]: `url('data:image/svg+xml;utf8,${content}')`, - "-webkit-mask": `var(--hero-${name})`, - "mask": `var(--hero-${name})`, - "mask-repeat": "no-repeat", - "background-color": "currentColor", - "vertical-align": "middle", - "display": "inline-block", - "width": theme("spacing.5"), - "height": theme("spacing.5") - } - } - }, {values}) - }) - ] -} + fs.readdirSync(path.join(iconsDir, dir)).forEach((file) => { + let name = path.basename(file, ".svg") + suffix; + values[name] = { name, fullPath: path.join(iconsDir, dir, file) }; + }); + }); + matchComponents( + { + hero: ({ name, fullPath }) => { + let content = fs + .readFileSync(fullPath) + .toString() + .replace(/\r?\n|\r/g, ""); + return { + [`--hero-${name}`]: `url('data:image/svg+xml;utf8,${content}')`, + "-webkit-mask": `var(--hero-${name})`, + mask: `var(--hero-${name})`, + "mask-repeat": "no-repeat", + "background-color": "currentColor", + "vertical-align": "middle", + display: "inline-block", + width: theme("spacing.5"), + height: theme("spacing.5"), + }; + }, + }, + { values }, + ); + }), + ], +}; diff --git a/lib/vyasa/display/user_mode.ex b/lib/vyasa/display/user_mode.ex index 56e13dca..b98cab36 100644 --- a/lib/vyasa/display/user_mode.ex +++ b/lib/vyasa/display/user_mode.ex @@ -38,8 +38,19 @@ defmodule Vyasa.Display.UserMode do } } + def supported_modes, do: Map.keys(@defs) + def get_initial_mode() do mode = "read" struct(UserMode, @defs[mode]) end + + def get_mode(mode_name) when is_map_key(@defs, mode_name) do + struct(UserMode, @defs[mode_name]) + end + + # defaults to the intial mode + def get_mode(_) do + get_initial_mode() + end end diff --git a/lib/vyasa_web/components/control_panel.ex b/lib/vyasa_web/components/control_panel.ex index 05443c5d..0eefb032 100644 --- a/lib/vyasa_web/components/control_panel.ex +++ b/lib/vyasa_web/components/control_panel.ex @@ -12,11 +12,10 @@ defmodule VyasaWeb.ControlPanel do @impl true def render(assigns) do - IO.inspect(assigns, label: "Component Assigns") - ~H""" -
+
+ <%= @mode.mode %> <.button id="toggleButton" class="bg-blue-500 text-white p-2 rounded-full focus:outline-none" @@ -33,15 +32,18 @@ defmodule VyasaWeb.ControlPanel do else: "flex flex-col mt-2 space-y-2 hidden" } > - - - + <.button + phx-click={JS.push("change_mode", value: %{current_mode: @mode.mode, target_mode: "read"})} + class="bg-green-500 text-white px-4 py-2 rounded-md focus:outline-none" + > + Change to Read + + <.button + phx-click={JS.push("change_mode", value: %{current_mode: @mode.mode, target_mode: "draft"})} + class="bg-red-500 text-white px-4 py-2 rounded-md focus:outline-none" + > + Change to Draft +
""" diff --git a/lib/vyasa_web/components/core_components.ex b/lib/vyasa_web/components/core_components.ex index 1adc2962..306a0c97 100644 --- a/lib/vyasa_web/components/core_components.ex +++ b/lib/vyasa_web/components/core_components.ex @@ -137,7 +137,7 @@ defmodule VyasaWeb.CoreComponents do class="-m-3 flex-none p-3 opacity-80 hover:opacity-40" aria-label={gettext("close")} > - <.icon name="hero-x-mark-solid" class="h-5 w-5 text-white" /> + <.icon name="hero-x-mark-solid" class="h-5 w-5 text-white" />
@@ -331,11 +331,13 @@ defmodule VyasaWeb.CoreComponents do <.button phx-click="go" class="ml-2">Send! """ attr :type, :string, default: nil + attr(:tone, :atom, default: :primary, values: ~w(primary inline success warning danger)a, doc: "Theme of the button" ) + attr :class, :string, default: nil attr :rest, :global, include: ~w(disabled form name value) @@ -361,6 +363,7 @@ defmodule VyasaWeb.CoreComponents do defp button_class(:primary), do: "focus:outline-none focus:ring-4 font-bold rounded-xl lg:text-base text-sm px-5 py-2.5 text-center bg-[#9747FF] text-[#D1D1D1] hover:bg-purple-700 focus:ring-purple-900 font-poppins" + defp button_class(:inline), do: "inline-flex items-center justify-center w-10 h-10 rounded-full bg-white/30 dark:bg-gray-800/30 group-hover:bg-white/50 dark:group-hover:bg-gray-800/60 group-focus:ring-4 group-focus:ring-white dark:group-focus:ring-gray-800/70 group-focus:outline-none" @@ -589,7 +592,10 @@ defmodule VyasaWeb.CoreComponents do
- +
@@ -605,7 +611,7 @@ defmodule VyasaWeb.CoreComponents do
- <%= render_slot(@quote) %> + <%= render_slot(@quote) %>
@@ -627,15 +633,25 @@ defmodule VyasaWeb.CoreComponents do
-
+
- -
- + +
+
@@ -746,7 +762,9 @@ defmodule VyasaWeb.CoreComponents do <%= render_slot(@inner_block) %>
-
<%= item.title %>
+
+ <%= item.title %> +
<%= render_slot(item) %>
@@ -799,7 +817,9 @@ defmodule VyasaWeb.CoreComponents do attr :name, :string, required: true attr :class, :string, default: nil - def icon(%{name: "hero-" <> _} = assigns) do + def icon(%{name: "hero-" <> _ = name} = assigns) do + IO.inspect(name, label: "TRACE icon name:") + ~H""" """ diff --git a/lib/vyasa_web/live/display_manager/display_manager.ex b/lib/vyasa_web/live/display_manager/display_manager.ex index 17ee7b4f..7eb12978 100644 --- a/lib/vyasa_web/live/display_manager/display_manager.ex +++ b/lib/vyasa_web/live/display_manager/display_manager.ex @@ -25,6 +25,8 @@ defmodule VyasaWeb.DisplayManager.DisplayManager do # } # } + @supported_modes UserMode.supported_modes() + @impl true def mount(_params, sess, socket) do # encoded_config = Jason.encode!(@default_player_config) @@ -153,14 +155,29 @@ defmodule VyasaWeb.DisplayManager.DisplayManager do # |> assign(playback: %{playback | played_at: played_at, elapsed: position_ms}) # end - # @impl true - # def handle_event( - # "toggle_should_show_vid", - # _, - # %{assigns: %{should_show_vid: flag} = _assigns} = socket - # ) do - # {:noreply, socket |> assign(should_show_vid: !flag)} - # end + @impl true + def handle_event( + "change_mode", + %{ + "current_mode" => current_mode, + "target_mode" => target_mode + } = _params, + socket + ) do + {:noreply, + socket + |> change_mode(current_mode, target_mode)} + end + + defp change_mode(socket, curr, target) + when is_binary(curr) and is_binary(target) and target in @supported_modes do + socket + |> assign(mode: UserMode.get_mode(target)) + end + + defp change_mode(socket, _, _) do + socket + end # @impl true # def handle_event( From 9754b10be8671f857df596fc8b506b260fc98943 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Thu, 15 Aug 2024 18:34:55 +0800 Subject: [PATCH 039/130] Prevent full page-reloads via push_navigate() This prevents the socket from being killed at every navigation, so the overlay's states is still managed without any issue. Actually, currently, there's a issue with definitions on the router-side problem: if I do a push_navigate to the path matching =/explore/:source_title/:chap_no= from =/explore/:source_title/=, it will trigger a socket error: =phx-F-vfg0fv3-NR4yFB error: unauthorized live_redirect. Falling back to page request -= Hunch: it's because of the router defining two different live_session scopes (anon vs sangh) so it's not allowing a =push_navigate()= and hence it's reverting to a full page reload. Do you know a quick fix to this? live_session :gen_anon_session, on_mount: [{VyasaWeb.Session, :anon}] do live "/explore/", SourceLive.Index, :index live "/explore/:source_title/", SourceLive.Show, :show #live "/explore/:source_title/:chap_no", SourceLive.Chapter.Index, :index live "/explore/:source_title/:chap_no", SourceLive.Chapter.Index, :index live "/explore/:source_title/:chap_no/:verse_no", SourceLive.Chapter.ShowVerse, :show end live_session :gen_sangh_session, on_mount: [{VyasaWeb.Session, :sangh}] do live "/explore/:source_title/:chap_no", SourceLive.Chapter.Index, :index end --- lib/vyasa/display/user_mode.ex | 5 ++++- lib/vyasa_web/components/core_components.ex | 4 +--- .../components/layouts/display_manager.html.heex | 8 +++++--- lib/vyasa_web/live/source_live/index.ex | 12 ++++++++++-- lib/vyasa_web/live/source_live/index.html.heex | 2 +- lib/vyasa_web/live/source_live/show.ex | 15 ++++++++++++--- lib/vyasa_web/live/source_live/show.html.heex | 4 +--- 7 files changed, 34 insertions(+), 16 deletions(-) diff --git a/lib/vyasa/display/user_mode.ex b/lib/vyasa/display/user_mode.ex index b98cab36..d48c74d4 100644 --- a/lib/vyasa/display/user_mode.ex +++ b/lib/vyasa/display/user_mode.ex @@ -33,7 +33,10 @@ defmodule Vyasa.Display.UserMode do "draft" => %{ mode: "draft", mode_icon_name: "hero-pencil-square", - action_bar_component: VyasaWeb.MediaLive.MediaBridge, + # TODO: add drafting form for this + # TODO: to test swaps of action bar component + # action_bar_component: VyasaWeb.MediaLive.MediaBridge, + action_bar_component: nil, control_panel_component: VyasaWeb.ControlPanel } } diff --git a/lib/vyasa_web/components/core_components.ex b/lib/vyasa_web/components/core_components.ex index 306a0c97..7cc54e7c 100644 --- a/lib/vyasa_web/components/core_components.ex +++ b/lib/vyasa_web/components/core_components.ex @@ -817,9 +817,7 @@ defmodule VyasaWeb.CoreComponents do attr :name, :string, required: true attr :class, :string, default: nil - def icon(%{name: "hero-" <> _ = name} = assigns) do - IO.inspect(name, label: "TRACE icon name:") - + def icon(%{name: "hero-" <> _} = assigns) do ~H""" """ diff --git a/lib/vyasa_web/components/layouts/display_manager.html.heex b/lib/vyasa_web/components/layouts/display_manager.html.heex index afd66c32..786c6227 100644 --- a/lib/vyasa_web/components/layouts/display_manager.html.heex +++ b/lib/vyasa_web/components/layouts/display_manager.html.heex @@ -2,7 +2,9 @@ <.live_component module={@mode.control_panel_component} id="control_panel" mode={@mode} /> -
- <%= live_render(@socket, @mode.action_bar_component, id: "MediaBridge", session: @session, sticky: true) %> -
+ <%= if @mode.action_bar_component do %> +
+ <%= live_render(@socket, @mode.action_bar_component, id: "MediaBridge", session: @session, sticky: true) %> +
+ <% end %>
diff --git a/lib/vyasa_web/live/source_live/index.ex b/lib/vyasa_web/live/source_live/index.ex index 10c2c737..6be431b5 100644 --- a/lib/vyasa_web/live/source_live/index.ex +++ b/lib/vyasa_web/live/source_live/index.ex @@ -7,7 +7,6 @@ defmodule VyasaWeb.SourceLive.Index do {:ok, stream(socket, :sources, Written.list_sources())} end - @impl true def handle_params(params, _url, socket) do {:noreply, apply_action(socket, socket.assigns.live_action, params)} @@ -25,7 +24,16 @@ defmodule VyasaWeb.SourceLive.Index do description: "Explore the wealth of indic knowledge, distilled into words.", type: "website", image: url(~p"/images/the_vyasa_project_1.png"), - url: url(socket, ~p"/explore/"), + url: url(socket, ~p"/explore/") }) end + + @impl true + def handle_event("navigate_to_source", %{"target" => target} = _payload, socket) do + IO.inspect(target, label: "TRACE: push navigate to the following target:") + + {:noreply, + socket + |> push_navigate(to: target)} + end end diff --git a/lib/vyasa_web/live/source_live/index.html.heex b/lib/vyasa_web/live/source_live/index.html.heex index 96a1559d..3903ecf2 100644 --- a/lib/vyasa_web/live/source_live/index.html.heex +++ b/lib/vyasa_web/live/source_live/index.html.heex @@ -8,7 +8,7 @@ <.table id="sources" rows={@streams.sources} - row_click={fn {_id, source} -> JS.navigate(~p"/explore/#{source.title}/") end} + row_click={fn {_id, source} -> JS.push("navigate_to_source", value: %{target: ~p"/explore/#{source.title}/"}) end} > <:col :let={{_id, source}} label="">
diff --git a/lib/vyasa_web/live/source_live/show.ex b/lib/vyasa_web/live/source_live/show.ex index 523ba246..f1576263 100644 --- a/lib/vyasa_web/live/source_live/show.ex +++ b/lib/vyasa_web/live/source_live/show.ex @@ -5,14 +5,13 @@ defmodule VyasaWeb.SourceLive.Show do @impl true def mount(_params, _session, socket) do - socket = stream_configure(socket, :chapters, dom_id: &("Chapter-#{&1.no}")) + socket = stream_configure(socket, :chapters, dom_id: &"Chapter-#{&1.no}") {:ok, socket} end @impl true def handle_params(%{"source_title" => source_title}, _, socket) do - - [%Chapter{source: src} |_]= chapters = Written.get_chapters_by_src(source_title) + [%Chapter{source: src} | _] = chapters = Written.get_chapters_by_src(source_title) { :noreply, @@ -22,7 +21,17 @@ defmodule VyasaWeb.SourceLive.Show do |> stream(:chapters, chapters |> Enum.sort_by(fn chap -> chap.no end)) |> assign_meta() } + end + + @impl true + def handle_event("navigate_to_chapter", %{"target" => target} = _payload, socket) do + IO.inspect(target, label: "TRACE: navigate_to_chapter:") + { + :noreply, + socket + |> push_navigate(to: target) + } end defp assign_meta(%{assigns: %{source: src}} = socket) do diff --git a/lib/vyasa_web/live/source_live/show.html.heex b/lib/vyasa_web/live/source_live/show.html.heex index 2de75a5a..cf1e5af6 100644 --- a/lib/vyasa_web/live/source_live/show.html.heex +++ b/lib/vyasa_web/live/source_live/show.html.heex @@ -5,12 +5,10 @@
- - <.table id="chapters" rows={@streams.chapters} -row_click={fn {_id, chap} -> JS.navigate(~p"/explore/#{@source.title}/#{chap.no}") end} +row_click={fn {_id, chap} -> JS.push("navigate_to_chapter", value: %{target: ~p"/explore/#{@source.title}/#{chap.no}/"}) end} > <:col :let={{_id, chap}} label="Chapter">
From d010644cad6bb1dfabb00069ed0a843d9e08462e Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Thu, 15 Aug 2024 19:18:07 +0800 Subject: [PATCH 040/130] [temp] shift all from anon session to sangh sess --- lib/vyasa_web/router.ex | 34 +++++++++++++++------------------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/lib/vyasa_web/router.ex b/lib/vyasa_web/router.ex index 40601825..9560a355 100644 --- a/lib/vyasa_web/router.ex +++ b/lib/vyasa_web/router.ex @@ -1,7 +1,6 @@ defmodule VyasaWeb.Router do use VyasaWeb, :router - pipeline :browser do plug :accepts, ["html"] plug CORSPlug, origin: ["https://www.youtube.com/iframe_api"] @@ -16,37 +15,35 @@ defmodule VyasaWeb.Router do plug :accepts, ["json"] end - - scope "/", VyasaWeb do pipe_through :browser - get "/og/:filename", OgImageController, :show - get "/", PageController, :home - live_session :gen_anon_session, - on_mount: [{VyasaWeb.Session, :anon}] do + # live_session :gen_anon_session, + # on_mount: [{VyasaWeb.Session, :anon}] do + # live "/explore/", SourceLive.Index, :index + # live "/explore/:source_title/", SourceLive.Show, :show + # # live "/explore/:source_title/:chap_no", SourceLive.Chapter.Index, :index + # live "/explore/:source_title/:chap_no", SourceLive.Chapter.Index, :index + # live "/explore/:source_title/:chap_no/:verse_no", SourceLive.Chapter.ShowVerse, :show + # end + + live_session :gen_sangh_session, + on_mount: [{VyasaWeb.Session, :sangh}] do live "/explore/", SourceLive.Index, :index live "/explore/:source_title/", SourceLive.Show, :show - #live "/explore/:source_title/:chap_no", SourceLive.Chapter.Index, :index - #live "/explore/:source_title/:chap_no", SourceLive.Chapter.Index, :index + live "/explore/:source_title/:chap_no", SourceLive.Chapter.Index, :index live "/explore/:source_title/:chap_no/:verse_no", SourceLive.Chapter.ShowVerse, :show end - live_session :gen_sangh_session, - on_mount: [{VyasaWeb.Session, :sangh}] do - live "/explore/:source_title/:chap_no", SourceLive.Chapter.Index, :index - end - live_admin "/admin" do - admin_resource "/verses", VyasaWeb.Admin.Written.Verse - admin_resource "/events", VyasaWeb.Admin.Medium.Event + admin_resource("/verses", VyasaWeb.Admin.Written.Verse) + admin_resource("/events", VyasaWeb.Admin.Medium.Event) end - - end + end # Other scopes may use custom stacks. # scope "/api", VyasaWeb do @@ -65,7 +62,6 @@ defmodule VyasaWeb.Router do scope "/dev" do pipe_through :browser - live_dashboard "/dashboard", metrics: VyasaWeb.Telemetry forward "/mailbox", Plug.Swoosh.MailboxPreview end From 2f4a6be70375209bc69e75487d4631670f285e53 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Thu, 15 Aug 2024 21:05:50 +0800 Subject: [PATCH 041/130] Minor changes --- lib/vyasa/display/user_mode.ex | 4 ++-- lib/vyasa_web/components/layouts/display_manager.html.heex | 2 +- lib/vyasa_web/live/display_manager/display_manager.html.heex | 4 +--- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/lib/vyasa/display/user_mode.ex b/lib/vyasa/display/user_mode.ex index d48c74d4..319aaee4 100644 --- a/lib/vyasa/display/user_mode.ex +++ b/lib/vyasa/display/user_mode.ex @@ -35,8 +35,8 @@ defmodule Vyasa.Display.UserMode do mode_icon_name: "hero-pencil-square", # TODO: add drafting form for this # TODO: to test swaps of action bar component - # action_bar_component: VyasaWeb.MediaLive.MediaBridge, - action_bar_component: nil, + action_bar_component: VyasaWeb.MediaLive.MediaBridge, + # action_bar_component: nil, control_panel_component: VyasaWeb.ControlPanel } } diff --git a/lib/vyasa_web/components/layouts/display_manager.html.heex b/lib/vyasa_web/components/layouts/display_manager.html.heex index 786c6227..2cfa7045 100644 --- a/lib/vyasa_web/components/layouts/display_manager.html.heex +++ b/lib/vyasa_web/components/layouts/display_manager.html.heex @@ -4,7 +4,7 @@ <%= if @mode.action_bar_component do %>
- <%= live_render(@socket, @mode.action_bar_component, id: "MediaBridge", session: @session, sticky: true) %> + <%= live_render(@socket, @mode.action_bar_component, id: "ActionBar", session: @session, sticky: true) %>
<% end %>
diff --git a/lib/vyasa_web/live/display_manager/display_manager.html.heex b/lib/vyasa_web/live/display_manager/display_manager.html.heex index 806cf971..7c89b545 100644 --- a/lib/vyasa_web/live/display_manager/display_manager.html.heex +++ b/lib/vyasa_web/live/display_manager/display_manager.html.heex @@ -1,3 +1 @@ -
- <%= live_render(@socket, VyasaWeb.MediaLive.MediaBridge, id: "MediaBridge", session: @session, sticky: true) %> -
+
From 09ad52382421c873aa30516d98b57cb630467808 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Fri, 16 Aug 2024 00:07:01 +0800 Subject: [PATCH 042/130] [WIP, Attempt] Shift from layout to heex template Still the thing dies on me --- .../components/layouts/display_manager.html.heex | 12 +++--------- lib/vyasa_web/components/layouts/root.html.heex | 2 +- .../live/display_manager/display_manager.html.heex | 11 ++++++++++- lib/vyasa_web/live/source_live/index.ex | 3 +++ lib/vyasa_web/live/source_live/show.ex | 1 + 5 files changed, 18 insertions(+), 11 deletions(-) diff --git a/lib/vyasa_web/components/layouts/display_manager.html.heex b/lib/vyasa_web/components/layouts/display_manager.html.heex index 2cfa7045..e30029f0 100644 --- a/lib/vyasa_web/components/layouts/display_manager.html.heex +++ b/lib/vyasa_web/components/layouts/display_manager.html.heex @@ -1,10 +1,4 @@ -
- - <.live_component module={@mode.control_panel_component} id="control_panel" mode={@mode} /> - - <%= if @mode.action_bar_component do %> -
- <%= live_render(@socket, @mode.action_bar_component, id: "ActionBar", session: @session, sticky: true) %> -
- <% end %> + +
+ <%= @inner_content %>
diff --git a/lib/vyasa_web/components/layouts/root.html.heex b/lib/vyasa_web/components/layouts/root.html.heex index 9a23cee5..c24999d5 100644 --- a/lib/vyasa_web/components/layouts/root.html.heex +++ b/lib/vyasa_web/components/layouts/root.html.heex @@ -12,6 +12,6 @@ <.meta_tags contents={assigns[:meta]} /> - <%= @inner_content %> + <%= @inner_content %> diff --git a/lib/vyasa_web/live/display_manager/display_manager.html.heex b/lib/vyasa_web/live/display_manager/display_manager.html.heex index 7c89b545..406d1bb7 100644 --- a/lib/vyasa_web/live/display_manager/display_manager.html.heex +++ b/lib/vyasa_web/live/display_manager/display_manager.html.heex @@ -1 +1,10 @@ -
+
+<.live_component module={@mode.control_panel_component} id="control_panel" mode={@mode} /> + +<%= if @mode.action_bar_component do %> +
+ <%= live_render(@socket, @mode.action_bar_component, id: "ActionBar", session: @session, sticky: true) %> +
+<% end %> + +
diff --git a/lib/vyasa_web/live/source_live/index.ex b/lib/vyasa_web/live/source_live/index.ex index 6be431b5..e4dcf870 100644 --- a/lib/vyasa_web/live/source_live/index.ex +++ b/lib/vyasa_web/live/source_live/index.ex @@ -9,6 +9,7 @@ defmodule VyasaWeb.SourceLive.Index do @impl true def handle_params(params, _url, socket) do + # dbg() {:noreply, apply_action(socket, socket.assigns.live_action, params)} end @@ -35,5 +36,7 @@ defmodule VyasaWeb.SourceLive.Index do {:noreply, socket |> push_navigate(to: target)} + + # |> push_patch(to: target)} end end diff --git a/lib/vyasa_web/live/source_live/show.ex b/lib/vyasa_web/live/source_live/show.ex index f1576263..eb603007 100644 --- a/lib/vyasa_web/live/source_live/show.ex +++ b/lib/vyasa_web/live/source_live/show.ex @@ -31,6 +31,7 @@ defmodule VyasaWeb.SourceLive.Show do :noreply, socket |> push_navigate(to: target) + # |> push_patch(to: target) } end From c91472cb25d8b467694c73cf01d53a5c7344b333 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Fri, 16 Aug 2024 00:59:52 +0800 Subject: [PATCH 043/130] Trigger DIFF --- lib/vyasa_web/components/layouts/display_manager.html.heex | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/vyasa_web/components/layouts/display_manager.html.heex b/lib/vyasa_web/components/layouts/display_manager.html.heex index e30029f0..d6943c0f 100644 --- a/lib/vyasa_web/components/layouts/display_manager.html.heex +++ b/lib/vyasa_web/components/layouts/display_manager.html.heex @@ -1,4 +1,5 @@
<%= @inner_content %> +
From 9b23208e50a2d617bf85aa36f3407f8b881be7cc Mon Sep 17 00:00:00 2001 From: ks0m1c_dharma Date: Fri, 16 Aug 2024 09:10:32 +0800 Subject: [PATCH 044/130] persistent marks --- ... 20240151122233_create_sangh_sessions.exs} | 5 +--- .../20240831122233_create_marks.exs | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+), 4 deletions(-) rename priv/repo/migrations/{20241515170225_create_sangh_sessions.exs => 20240151122233_create_sangh_sessions.exs} (90%) create mode 100644 priv/repo/migrations/20240831122233_create_marks.exs diff --git a/priv/repo/migrations/20241515170225_create_sangh_sessions.exs b/priv/repo/migrations/20240151122233_create_sangh_sessions.exs similarity index 90% rename from priv/repo/migrations/20241515170225_create_sangh_sessions.exs rename to priv/repo/migrations/20240151122233_create_sangh_sessions.exs index 457c6dee..793ee07a 100644 --- a/priv/repo/migrations/20241515170225_create_sangh_sessions.exs +++ b/priv/repo/migrations/20240151122233_create_sangh_sessions.exs @@ -27,16 +27,13 @@ defmodule Vyasa.Repo.Migrations.CreateSanghSessions do create table(:bindings, primary_key: false) do add :id, :uuid, primary_key: true add :w_type, :string - add :field_key, :string + add :field_key, :jsonb add :verse_id, references(:verses, column: :id, type: :uuid, on_delete: :nothing) add :chapter_no, references(:chapters, column: :no, type: :integer, with: [source_id: :source_id]) add :translation_id, references(:translations, column: :id, type: :uuid, on_delete: :nothing) add :comment_id, references(:comments, column: :id, type: :uuid) - add :comment_bind_id, references(:comments, column: :id, type: :uuid) add :source_id, references(:sources, column: :id, type: :uuid) add :window, :jsonb - - timestamps(type: :utc_datetime_usec) end create index(:comments, [:path]) diff --git a/priv/repo/migrations/20240831122233_create_marks.exs b/priv/repo/migrations/20240831122233_create_marks.exs new file mode 100644 index 00000000..c3ccf5c8 --- /dev/null +++ b/priv/repo/migrations/20240831122233_create_marks.exs @@ -0,0 +1,23 @@ +defmodule Vyasa.Repo.Migrations.CreateMarks do + use Ecto.Migration + + def change do + + create table(:marks, primary_key: false) do + add :id, :uuid, primary_key: true + add :body, :string + add :order, :integer + add :state, :string + add :window, :jsonb + + add :verse_id, references(:verses, column: :id, type: :uuid, on_delete: :nothing) + add :binding_id, references(:bindings, column: :id, type: :uuid, on_delete: :nothing) + + timestamps(type: :utc_datetime_usec) + end + + create index(:marks, [:verse_id]) + create index(:marks, [:binding_id]) + + end + end From c09d3e34b7327fe7561cb27742b25e42cc0edf7a Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Fri, 16 Aug 2024 11:15:13 +0800 Subject: [PATCH 045/130] Use DM @ router actions, load data :show_sources --- .../components/layouts/app.html.heex | 2 +- .../live/display_manager/display_live.ex | 127 ++++ .../display_manager/display_live.html.heex | 38 ++ .../live/display_manager/display_manager.ex | 643 ------------------ .../display_manager/display_manager.html.heex | 10 - .../live/source_live/index.html.heex | 1 - lib/vyasa_web/router.ex | 13 +- 7 files changed, 175 insertions(+), 659 deletions(-) create mode 100644 lib/vyasa_web/live/display_manager/display_live.ex create mode 100644 lib/vyasa_web/live/display_manager/display_live.html.heex delete mode 100644 lib/vyasa_web/live/display_manager/display_manager.ex delete mode 100644 lib/vyasa_web/live/display_manager/display_manager.html.heex diff --git a/lib/vyasa_web/components/layouts/app.html.heex b/lib/vyasa_web/components/layouts/app.html.heex index c57ce378..d18d9a50 100644 --- a/lib/vyasa_web/components/layouts/app.html.heex +++ b/lib/vyasa_web/components/layouts/app.html.heex @@ -23,6 +23,6 @@ <.flash_group flash={@flash} />
- <%= live_render(@socket, VyasaWeb.DisplayManager.DisplayManager, id: "DisplayManager", session: @session, sticky: true) %> + <%= live_render(@socket, VyasaWeb.DisplayManager.DisplayLive, id: "DisplayManager", session: @session, sticky: true) %> <%= @inner_content %> diff --git a/lib/vyasa_web/live/display_manager/display_live.ex b/lib/vyasa_web/live/display_manager/display_live.ex new file mode 100644 index 00000000..381a1ea2 --- /dev/null +++ b/lib/vyasa_web/live/display_manager/display_live.ex @@ -0,0 +1,127 @@ +defmodule VyasaWeb.DisplayManager.DisplayLive do + @moduledoc """ + Testing out nested live_views + """ + use VyasaWeb, :live_view + alias Vyasa.Display.UserMode + alias Phoenix.LiveView.Socket + alias Vyasa.Written + @supported_modes UserMode.supported_modes() + + @impl true + def mount(_params, sess, socket) do + # encoded_config = Jason.encode!(@default_player_config) + %UserMode{} = mode = UserMode.get_initial_mode() + + { + :ok, + socket + # to allow passing to children live-views + |> assign(session: sess) + |> assign(mode: mode), + layout: {VyasaWeb.Layouts, :display_manager} + } + end + + @impl true + def handle_params( + params, + url, + %Socket{ + assigns: %{ + live_action: live_action + } + } = socket + ) do + IO.inspect(url, label: "TRACE: handle param url") + IO.inspect(live_action, label: "TRACE: handle param live_action") + + { + :noreply, + socket |> apply_action(live_action, params) + } + end + + @impl true + def handle_params(_params, _url, socket) do + {:noreply, socket} + end + + defp apply_action(%Socket{} = socket, :show_sources, _params) do + IO.inspect(:show_sources, label: "TRACE: apply action DM action show_sources:") + # IO.inspect(params, label: "TRACE: apply action DM params:") + + # TODO: make this into a live component + socket + |> stream(:sources, Written.list_sources()) + |> assign(:content_action, :show_sources) + |> assign(:page_title, "Sources") + |> assign(:meta, %{ + title: "Sources to Explore", + description: "Explore the wealth of indic knowledge, distilled into words.", + type: "website", + image: url(~p"/images/the_vyasa_project_1.png"), + url: url(socket, ~p"/explore/") + }) + end + + defp apply_action( + %Socket{} = socket, + :show_chapters, + %{"source_title" => source_title} = + params + ) do + IO.inspect(:show_chapters, label: "TRACE: apply action DM action show_chapters:") + IO.inspect(params, label: "TRACE: apply action DM params:") + IO.inspect(source_title, label: "TRACE: apply action DM params source_title:") + socket + end + + defp apply_action( + %Socket{} = socket, + :show_verses, + %{"source_title" => source_title, "chap_no" => chap_no} = params + ) do + IO.inspect(:show_verses, label: "TRACE: apply action DM action show_verses:") + IO.inspect(params, label: "TRACE: apply action DM params:") + IO.inspect(source_title, label: "TRACE: apply action DM params source_title:") + IO.inspect(chap_no, label: "TRACE: apply action DM params chap_no:") + socket + end + + defp apply_action(%Socket{} = socket, _, _) do + socket + end + + defp apply_action(socket, action, params) do + IO.inspect(action, label: "TRACE: apply action DM action:") + IO.inspect(params, label: "TRACE: apply action DM params:") + + socket + |> assign(:page_title, "Sources") + end + + @impl true + def handle_event( + "change_mode", + %{ + "current_mode" => current_mode, + "target_mode" => target_mode + } = _params, + socket + ) do + {:noreply, + socket + |> change_mode(current_mode, target_mode)} + end + + defp change_mode(socket, curr, target) + when is_binary(curr) and is_binary(target) and target in @supported_modes do + socket + |> assign(mode: UserMode.get_mode(target)) + end + + defp change_mode(socket, _, _) do + socket + end +end diff --git a/lib/vyasa_web/live/display_manager/display_live.html.heex b/lib/vyasa_web/live/display_manager/display_live.html.heex new file mode 100644 index 00000000..005f3573 --- /dev/null +++ b/lib/vyasa_web/live/display_manager/display_live.html.heex @@ -0,0 +1,38 @@ +
+<.live_component module={@mode.control_panel_component} id="control_panel" mode={@mode} /> + + +<%= if @content_action === :show_sources do%> +
+ <.header> +
+ <%= @page_title %> +
+ + + <.table + id="sources" + rows={@streams.sources} + row_click={fn {_id, source} -> JS.push("navigate_to_source", value: %{target: ~p"/explore/#{source.title}/"}) end} + > + <:col :let={{_id, source}} label=""> +
+ <%= to_title_case(source.title) %> +
+ + + + Enum.count() < 10} class="block h-96"/> +
+<% end %> + + + + +<%= if @mode.action_bar_component do %> +
+ <%= live_render(@socket, @mode.action_bar_component, id: "ActionBar", session: @session, sticky: true) %> +
+<% end %> + +
diff --git a/lib/vyasa_web/live/display_manager/display_manager.ex b/lib/vyasa_web/live/display_manager/display_manager.ex deleted file mode 100644 index 7eb12978..00000000 --- a/lib/vyasa_web/live/display_manager/display_manager.ex +++ /dev/null @@ -1,643 +0,0 @@ -defmodule VyasaWeb.DisplayManager.DisplayManager do - @moduledoc """ - Testing out nested live_views - """ - use VyasaWeb, :live_view - alias Vyasa.Display.UserMode - # alias Phoenix.LiveView.Socket - # alias Vyasa.Medium - # alias Vyasa.Medium.{Voice, Event, Playback} - - # @default_player_config %{ - # height: "300", - # width: "400", - # # see supported params here: https://developers.google.com/youtube/player_parameters#Parameters - # playerVars: %{ - # autoplay: 1, - # mute: 1, - # start: 0, - # controls: 0, - # enablejsapi: 1, - # # hide video annotations - # iv_load_policy: 3, - # # ensures it doesn't full-screen on ios - # playsinline: 1 - # } - # } - - @supported_modes UserMode.supported_modes() - - @impl true - def mount(_params, sess, socket) do - # encoded_config = Jason.encode!(@default_player_config) - %UserMode{} = mode = UserMode.get_initial_mode() - - { - :ok, - socket - # to allow passing to children live-views - |> assign(session: sess) - |> assign(mode: mode), - layout: {VyasaWeb.Layouts, :display_manager} - } - - # socket = - # socket - # |> assign(playback: nil) - # |> assign(voice: nil) - # |> assign(video: nil) - # |> assign(video_player_config: encoded_config) - # |> assign(should_show_vid: false) - # |> assign(is_follow_mode: true) - # |> sync_session() - - # {:ok, socket, layout: false} - end - - # defp sync_session(%{assigns: %{session: %{"id" => id} = sess}} = socket) when is_binary(id) do - # Vyasa.PubSub.subscribe("media:session:" <> id) - # Vyasa.PubSub.publish(:init, :media_handshake, "written:session:" <> id) - - # socket - # |> push_event("initSession", sess |> Map.take(["id"])) - # end - - # defp sync_session(socket) do - # socket - # end - - # defp update_playback( - # %Socket{ - # assigns: - # %{ - # playback: - # %Playback{ - # played_at: _played_at, - # elapsed: _elapsed, - # playing?: _playing?, - # paused_at: _paused_at - # } = playback_bef - # } = _assigns - # } = - # socket - # ) do - # # TODO: [refactor] add case for updating playback on seek - # socket - # |> assign( - # playback: - # case playback_bef do - # %Playback{playing?: false} -> - # create_playback_on_play(playback_bef) - - # %Playback{playing?: true} -> - # create_playback_on_pause(playback_bef) - - # _ -> - # playback_bef - # end - # ) - # end - - # defp update_playback(%Socket{} = socket) do - # socket - # end - - # defp create_playback_on_play(%Playback{elapsed: elapsed} = playback) do - # now = DateTime.utc_now() - - # played_at = - # cond do - # # resume case - # elapsed > 0 -> - # DateTime.add(now, -round(elapsed), :millisecond) - - # # fresh start case - # elapsed == 0 -> - # now - - # true -> - # now - # end - - # %{playback | playing?: true, played_at: played_at} - # end - - # defp create_playback_on_pause( - # %Playback{ - # played_at: played_at - # } = playback - # ) do - # now = DateTime.utc_now() - # elapsed = DateTime.diff(now, played_at, :millisecond) - # %{playback | playing?: false, paused_at: now, elapsed: elapsed} - # end - - # # TODO: [refactor] merge with the other update playback functions - # defp update_playback_on_seek(socket, position_ms) do - # %{ - # playback: - # %Playback{ - # playing?: playing?, - # played_at: played_at - # } = playback - # } = socket.assigns - - # # <=== sigil U - # now = DateTime.utc_now() - - # played_at = - # cond do - # !playing? -> played_at - # playing? -> DateTime.add(now, -round(position_ms), :millisecond) - # end - - # socket - # |> assign(playback: %{playback | played_at: played_at, elapsed: position_ms}) - # end - - @impl true - def handle_event( - "change_mode", - %{ - "current_mode" => current_mode, - "target_mode" => target_mode - } = _params, - socket - ) do - {:noreply, - socket - |> change_mode(current_mode, target_mode)} - end - - defp change_mode(socket, curr, target) - when is_binary(curr) and is_binary(target) and target in @supported_modes do - socket - |> assign(mode: UserMode.get_mode(target)) - end - - defp change_mode(socket, _, _) do - socket - end - - # @impl true - # def handle_event( - # "toggle_is_follow_mode", - # _, - # %{assigns: %{is_follow_mode: flag} = _assigns} = socket - # ) do - # { - # :noreply, - # socket - # |> assign(is_follow_mode: !flag) - # |> push_event("toggleFollowMode", %{}) - # } - # end - - # @impl true - # @doc """ - # Handle the user-generated action of playing or pausing. - # First updates the playback struct then uses it to notify others that depend on that playback struct. - - # TODO: use event structs in the same fashion as livebeats to standardise the user-generated events - # """ - # def handle_event("play_pause", _, socket) do - # %{ - # assigns: %{ - # playback: %Playback{} = playback - # } - # } = socket - - # IO.inspect(playback, label: "TRACE :handling play_pause event") - - # {:noreply, - # socket - # |> update_playback() - # |> notify_audio_player() - # |> push_hook_events()} - # end - - # @impl true - # def handle_event( - # "seekTime", - # %{"seekToMs" => position_ms, "originator" => "ProgressBar" = originator} = _payload, - # socket - # ) do - # IO.puts("[handleEvent] seekToMs #{position_ms} ORIGINATOR = #{originator}") - - # socket - # |> handle_seek(position_ms, originator) - # end - - # # Fallback for seekTime, if no originator is present, shall be to treat MediaBridge as the originator - # # and call handle_seek. - # @impl true - # def handle_event("seekTime", %{"seekToMs" => position_ms} = _payload, socket) do - # IO.puts("[handleEvent] seekToMs #{position_ms}") - - # socket - # |> handle_seek(position_ms, "MediaBridge") - # end - - # # when originator is the ProgressBar, then shall only consume and carry out internal actions only - # # i.e. updating of the playback state kept in MediaBridge liveview. - # defp handle_seek(socket, position_ms, "ProgressBar" = _originator) do - # { - # :noreply, - # socket - # |> update_playback_on_seek(position_ms) - # } - # end - - # # when the seek is originated by the MediaBridge, then it shall carry out both internal & external actions - # # internal: updating of the playback state kept in the MediaBridge liveview - # # external: pubbing via the seekTime targetEvent - # defp handle_seek(socket, position_ms, "MediaBridge" = originator) do - # seek_time_payload = %{ - # seekToMs: position_ms, - # originator: originator - # } - - # IO.inspect("handle_seek originator: #{originator}, playback position ms: #{position_ms}", - # label: "checkpoint" - # ) - - # { - # :noreply, - # socket - # |> push_event("media_bridge:seekTime", seek_time_payload) - # |> update_playback_on_seek(position_ms) - # } - # end - - # # assigns necessary states if voice is legit and events can be loaded. - # defp apply_voice_action( - # %Socket{} = socket, - # %Voice{ - # video: video - # } = voice - # ) do - # loaded_voice = voice |> Medium.load_events() - - # generated_artwork = %{ - # src: - # url(~p"/og/#{VyasaWeb.OgImageController.get_by_binding(%{source: loaded_voice.source})}"), - # type: "image/png", - # sizes: "480x360" - # } - - # playback = Playback.create_playback(loaded_voice, generated_artwork) - - # socket - # |> assign(voice: loaded_voice) - # |> assign(video: video) - # |> assign(playback: playback) - # end - - # defp dispatch_voice_registering_events( - # %Socket{ - # assigns: %{ - # voice: - # %Voice{ - # events: voice_events - # } = _voice, - # playback: playback - # } - # } = socket - # ) do - # socket - # |> push_event("media_bridge:registerEventsTimeline", %{ - # voice_events: voice_events |> create_events_payload() - # }) - # |> push_event("media_bridge:registerPlayback", %{playback: playback}) - # end - - # # TODO: consolidate other hook events that need to be sent to the media bridge hook - # defp push_hook_events( - # %Socket{ - # assigns: %{ - # playback: - # %Playback{ - # playing?: playing?, - # elapsed: elapsed - # } = playback - # } - # } = socket - # ) do - # # TODO: merge into a single push_event, let the hook use the Playback::elapsed to determine where to start playing from. - # socket - # |> push_event("media_bridge:play_pause", %{ - # cmd: - # cond do - # playing? -> - # "play" - - # !playing? -> - # "pause" - # end, - # originator: "MediaBridge", - # playback: playback - # }) - # |> push_event("media_bridge:seekTime", %{ - # seekToMs: elapsed, - # originator: "MediaBridge" - # }) - # end - - # @impl true - # # On receiving a voice_ack, the written and player contexts are now synced. - # # The voice's id shall be used as a sort of implicit ack number to check if the voice received - # # has already been received and in the case of a duplicate message, we shall ignore the msg. - # # - # # If the voice is new, then we shall pipe it to the respective apply_action where in - # # a playback struct is created that represents this synced-state and the client-side hook is triggerred - # # to register the associated events timeline. - # def handle_info( - # {_, :voice_ack, - # %Voice{ - # id: id, - # video: _video - # } = voice} = _msg, - # %Socket{ - # assigns: %{ - # voice: prev_voice - # } - # } = socket - # ) do - # prev_id = - # cond do - # is_nil(prev_voice) -> nil - # %Voice{id: prev_id} = prev_voice -> prev_id - # true -> nil - # end - - # is_new_voice = id !== prev_id - - # cond do - # is_new_voice -> - # {:noreply, - # socket - # |> apply_voice_action(voice) - # |> dispatch_voice_registering_events()} - - # true -> - # {:noreply, socket} - # end - # end - - # @doc """ - # Handles the custom message that correponds to the :written_handshake event - # with the :init msg, regardless of the module that dispatched the message. - # """ - # def handle_info( - # {_, :written_handshake, :init} = _msg, - # %{assigns: %{session: %{"id" => id}}} = socket - # ) do - # Vyasa.PubSub.publish(:init, :media_handshake, "written:session:" <> id) - # {:noreply, socket} - # end - - # # Handles playback sync relative to a particular verse id. In this case, the playback state is expected - # # to get updated to the start of the event corresponding to that particular verse. - # @impl true - # def handle_info({_, :playback_sync, %{verse_id: verse_id} = _inner_msg} = _msg, socket) do - # %{voice: %{events: events} = _voice} = socket.assigns - - # IO.inspect("handle_info::playback_sync", label: "checkpoint") - - # %Event{ - # origin: target_ms - # } = - # _target_event = - # events - # |> get_target_event(verse_id) - - # socket - # |> handle_seek(target_ms, "MediaBridge") - # end - - # def handle_info(msg, socket) do - # IO.inspect(msg, label: "unexpected message received by media bridge") - # {:noreply, socket} - # end - - # defp create_events_payload([%Event{} | _] = events) do - # events |> Enum.map(&(&1 |> Map.take([:origin, :duration, :phase, :fragments, :verse_id]))) - # end - - # defp get_target_event([%Event{} | _] = events, verse_id) do - # events - # |> Enum.find(fn e -> e.verse_id === verse_id end) - # end - - # # dispatches events to the audio player - # defp notify_audio_player( - # %{ - # assigns: - # %{ - # playback: - # %Playback{ - # playing?: _playing? - # } = playback - # } = _assigns - # } = socket - # ) do - # send_update( - # self(), - # VyasaWeb.AudioPlayer, - # id: "audio-player", - # playback: playback, - # event: "media_bridge:notify_audio_player" - # ) - - # socket - # end - - # # TODO: add this when implementing tracks & playlists - # defp js_prev() do - # end - - # # TODO: add this when implementing tracks & playlists - # defp js_next() do - # end - - # attr :id, :string, required: true - # attr :min, :integer, default: 0 - # attr :max, :integer, default: 100 - # # elapsed time (in milliseconds) - # attr :value, :integer - - # def progress_bar(assigns) do - # assigns = assign_new(assigns, :value, fn -> assigns[:min] || 0 end) - # IO.inspect(assigns, label: "progress hopefully we make some progress") - - # ~H""" - #
- #
- #
- #
- # """ - # end - - # attr :playback, Playback, required: false - # attr :isReady, :boolean, required: false, default: false - # attr :isPlaying, :boolean, required: true - - # def play_pause_button(assigns) do - # ~H""" - # - # """ - # end - - # def next_button(assigns) do - # ~H""" - # - # """ - # end - - # def prev_button(assigns) do - # ~H""" - # - # """ - # end - - # # def volume_control(assigns) do - # # ~H""" - - # # """ - - # # end - - # def video_player(assigns) do - # ~H""" - #
- #
- # <.live_component - # module={VyasaWeb.YouTubePlayer} - # id="YouTubePlayer" - # video_id={@video.ext_uri} - # player_config={@player_config} - # /> - #
- #
- # """ - # end - - # def video_toggler(assigns) do - # ~H""" - #
- # <.icon :if={@should_show_vid} name="hero-video-camera-slash" /> - # <.icon :if={!@should_show_vid} name="hero-video-camera" /> - #
- # """ - # end - - # def follow_mode_toggler(assigns) do - # ~H""" - #
- # <.icon :if={@is_follow_mode} name="hero-rectangle-stack" /> - # <.icon :if={!@is_follow_mode} name="hero-queue-list" /> - #
- # """ - # end -end diff --git a/lib/vyasa_web/live/display_manager/display_manager.html.heex b/lib/vyasa_web/live/display_manager/display_manager.html.heex deleted file mode 100644 index 406d1bb7..00000000 --- a/lib/vyasa_web/live/display_manager/display_manager.html.heex +++ /dev/null @@ -1,10 +0,0 @@ -
-<.live_component module={@mode.control_panel_component} id="control_panel" mode={@mode} /> - -<%= if @mode.action_bar_component do %> -
- <%= live_render(@socket, @mode.action_bar_component, id: "ActionBar", session: @session, sticky: true) %> -
-<% end %> - -
diff --git a/lib/vyasa_web/live/source_live/index.html.heex b/lib/vyasa_web/live/source_live/index.html.heex index 3903ecf2..8d76b8ed 100644 --- a/lib/vyasa_web/live/source_live/index.html.heex +++ b/lib/vyasa_web/live/source_live/index.html.heex @@ -1,5 +1,4 @@ <.header> -
<%= @page_title %>
diff --git a/lib/vyasa_web/router.ex b/lib/vyasa_web/router.ex index 9560a355..c7980b4f 100644 --- a/lib/vyasa_web/router.ex +++ b/lib/vyasa_web/router.ex @@ -33,10 +33,15 @@ defmodule VyasaWeb.Router do live_session :gen_sangh_session, on_mount: [{VyasaWeb.Session, :sangh}] do - live "/explore/", SourceLive.Index, :index - live "/explore/:source_title/", SourceLive.Show, :show - live "/explore/:source_title/:chap_no", SourceLive.Chapter.Index, :index - live "/explore/:source_title/:chap_no/:verse_no", SourceLive.Chapter.ShowVerse, :show + # live "/explore/", SourceLive.Index, :index + # live "/explore/:source_title/", SourceLive.Show, :show + # live "/explore/:source_title/:chap_no", SourceLive.Chapter.Index, :index + # live "/explore/:source_title/:chap_no/:verse_no", SourceLive.Chapter.ShowVerse, :show + + live "/explore/", DisplayManager.DisplayLive, :show_sources + live "/explore/:source_title/", DisplayManager.DisplayLive, :show_chapters + live "/explore/:source_title/:chap_no", DisplayManager.DisplayLive, :show_verses + # live "/explore/:source_title/:chap_no/:verse_no", DisplayManager.DisplayLive, :show_verse end live_admin "/admin" do From 2ca6f1dfd8bf0107795db19fd39e1d853745433f Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Fri, 16 Aug 2024 11:58:05 +0800 Subject: [PATCH 046/130] Add data load for :show_chapters action on DM --- .../live/display_manager/display_live.ex | 18 ++++++++ .../display_manager/display_live.html.heex | 46 ++++++++++++++++++- 2 files changed, 63 insertions(+), 1 deletion(-) diff --git a/lib/vyasa_web/live/display_manager/display_live.ex b/lib/vyasa_web/live/display_manager/display_live.ex index 381a1ea2..83d9e575 100644 --- a/lib/vyasa_web/live/display_manager/display_live.ex +++ b/lib/vyasa_web/live/display_manager/display_live.ex @@ -6,6 +6,7 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do alias Vyasa.Display.UserMode alias Phoenix.LiveView.Socket alias Vyasa.Written + alias Vyasa.Written.{Chapter} @supported_modes UserMode.supported_modes() @impl true @@ -65,6 +66,7 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do }) end + # TODO: change navigate -> patch on the html side defp apply_action( %Socket{} = socket, :show_chapters, @@ -74,7 +76,23 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do IO.inspect(:show_chapters, label: "TRACE: apply action DM action show_chapters:") IO.inspect(params, label: "TRACE: apply action DM params:") IO.inspect(source_title, label: "TRACE: apply action DM params source_title:") + + [%Chapter{source: src} | _] = chapters = Written.get_chapters_by_src(source_title) + socket + |> assign(:content_action, :show_chapters) + |> assign(:page_title, to_title_case(src.title)) + |> assign(:source, src) + |> assign(:meta, %{ + title: to_title_case(src.title), + description: "Explore the #{to_title_case(src.title)}", + type: "website", + image: url(~p"/og/#{VyasaWeb.OgImageController.get_by_binding(%{source: src})}"), + url: url(socket, ~p"/explore/#{src.title}") + }) + |> stream_configure(:chapters, dom_id: &"Chapter-#{&1.no}") + |> stream(:chapters, chapters |> Enum.sort_by(fn chap -> chap.no end)) + |> dbg() end defp apply_action( diff --git a/lib/vyasa_web/live/display_manager/display_live.html.heex b/lib/vyasa_web/live/display_manager/display_live.html.heex index 005f3573..3ee01a9f 100644 --- a/lib/vyasa_web/live/display_manager/display_live.html.heex +++ b/lib/vyasa_web/live/display_manager/display_live.html.heex @@ -2,8 +2,9 @@ <.live_component module={@mode.control_panel_component} id="control_panel" mode={@mode} /> -<%= if @content_action === :show_sources do%> +<%= if @content_action == :show_sources do%>
+ SHOW SOURCES <.header>
<%= @page_title %> @@ -26,7 +27,50 @@
<% end %> +<%= if @content_action == :show_chapters do%> +
+ SHOW CHAPTERS + +<.header > +
+ <%= to_title_case(@source.title)%> +
+ + +<.table +id="chapters" +rows={@streams.chapters} +row_click={fn {_id, chap} -> JS.push("navigate_to_chapter", value: %{target: ~p"/explore/#{@source.title}/#{chap.no}/"}) end} +> + <:col :let={{_id, chap}} label="Chapter"> +
+ <%= chap.no %>. <%= hd(chap.translations).target.translit_title %> +
+ + <:col :let={{_id, chap}} label="Description"> +
+ <%= chap.title %> +
+
+ <%= hd(chap.translations).target.title %> +
+ + + +<.back navigate={~p"/explore/"}>Back to All Sources + + Enum.count() < 10} class="block h-96"/> + +
+<% end %> + +<%= if @content_action == :show_verses do%> +
+ SHOW VERSES + +
+<% end %> <%= if @mode.action_bar_component do %> From 0041758a43697947893231a95d45b234fcaa7a6b Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Fri, 16 Aug 2024 12:50:14 +0800 Subject: [PATCH 047/130] Use push_patch() @ :show_sources -> :show_chapters --- .../components/source_content/chapters.ex | 63 +++++++++++++++++++ .../components/source_content/sources.ex | 50 +++++++++++++++ .../live/display_manager/display_live.ex | 3 +- .../display_manager/display_live.html.heex | 62 ++++-------------- 4 files changed, 126 insertions(+), 52 deletions(-) create mode 100644 lib/vyasa_web/components/source_content/chapters.ex create mode 100644 lib/vyasa_web/components/source_content/sources.ex diff --git a/lib/vyasa_web/components/source_content/chapters.ex b/lib/vyasa_web/components/source_content/chapters.ex new file mode 100644 index 00000000..d77a1674 --- /dev/null +++ b/lib/vyasa_web/components/source_content/chapters.ex @@ -0,0 +1,63 @@ +defmodule VyasaWeb.Content.Chapters do + use VyasaWeb, :live_component + + @impl true + def update(params, socket) do + { + :ok, + socket + |> assign(params) + # |> dbg() + } + end + + # TODO: navigate() -> patch() on links... + @impl true + def render(assigns) do + ~H""" +
+ <.header> +
+ <%= to_title_case(@source.title) %> +
+ + + <.table + id="chapters" + rows={@chapters} + row_click={ + fn {_id, chap} -> + JS.push("navigate_to_chapter", + value: %{target: ~p"/explore/#{@source.title}/#{chap.no}/"} + ) + end + } + > + <:col :let={{_id, chap}} label="Chapter"> +
+ <%= chap.no %>. <%= hd(chap.translations).target.translit_title %> +
+ + <:col :let={{_id, chap}} label="Description"> +
+ <%= chap.title %> +
+
+ <%= hd(chap.translations).target.title %> +
+ + + + <.back navigate={~p"/explore/"}>Back to All Sources + + Enum.count() < 10} class="block h-96" /> +
+ """ + end + + # @impl true + # def handle_event("reportVideoStatus", payload, socket) do + # IO.inspect(payload) + # {:noreply, socket} + # end +end diff --git a/lib/vyasa_web/components/source_content/sources.ex b/lib/vyasa_web/components/source_content/sources.ex new file mode 100644 index 00000000..a28f999f --- /dev/null +++ b/lib/vyasa_web/components/source_content/sources.ex @@ -0,0 +1,50 @@ +defmodule VyasaWeb.Content.Sources do + use VyasaWeb, :live_component + + @impl true + def update(params, socket) do + { + :ok, + socket + |> assign(params) + } + end + + @impl true + def render(assigns) do + ~H""" +
+

SOURCES LIVE COMPONENT

+ <.table + id="sources" + rows={@sources} + row_click={ + fn {_id, source} -> + JS.push("navigate_to_source", + value: %{target: ~p"/explore/#{source.title}/"}, + target: @myself + ) + end + } + > + <:col :let={{_id, source}} label=""> +
+ <%= to_title_case(source.title) %> +
+ + + + Enum.count() < 10} class="block h-96" /> +
+ """ + end + + @impl true + def handle_event("navigate_to_source", %{"target" => target} = _payload, socket) do + IO.inspect(target, label: "TRACE: push patch to the following target by @myself:") + + {:noreply, + socket + |> push_patch(to: target)} + end +end diff --git a/lib/vyasa_web/live/display_manager/display_live.ex b/lib/vyasa_web/live/display_manager/display_live.ex index 83d9e575..1d2704f3 100644 --- a/lib/vyasa_web/live/display_manager/display_live.ex +++ b/lib/vyasa_web/live/display_manager/display_live.ex @@ -92,7 +92,8 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do }) |> stream_configure(:chapters, dom_id: &"Chapter-#{&1.no}") |> stream(:chapters, chapters |> Enum.sort_by(fn chap -> chap.no end)) - |> dbg() + + # |> dbg() end defp apply_action( diff --git a/lib/vyasa_web/live/display_manager/display_live.html.heex b/lib/vyasa_web/live/display_manager/display_live.html.heex index 3ee01a9f..7d817e95 100644 --- a/lib/vyasa_web/live/display_manager/display_live.html.heex +++ b/lib/vyasa_web/live/display_manager/display_live.html.heex @@ -5,63 +5,23 @@ <%= if @content_action == :show_sources do%>
SHOW SOURCES - <.header> -
- <%= @page_title %> -
- - - <.table - id="sources" - rows={@streams.sources} - row_click={fn {_id, source} -> JS.push("navigate_to_source", value: %{target: ~p"/explore/#{source.title}/"}) end} - > - <:col :let={{_id, source}} label=""> -
- <%= to_title_case(source.title) %> -
- - - - Enum.count() < 10} class="block h-96"/> + <.live_component + module={VyasaWeb.Content.Sources} + id={"content-sources"} + sources={@streams.sources} + />
<% end %> <%= if @content_action == :show_chapters do%>
SHOW CHAPTERS - -<.header > -
- <%= to_title_case(@source.title)%> -
- - -<.table -id="chapters" -rows={@streams.chapters} -row_click={fn {_id, chap} -> JS.push("navigate_to_chapter", value: %{target: ~p"/explore/#{@source.title}/#{chap.no}/"}) end} -> - <:col :let={{_id, chap}} label="Chapter"> -
- <%= chap.no %>. <%= hd(chap.translations).target.translit_title %> -
- - <:col :let={{_id, chap}} label="Description"> -
- <%= chap.title %> -
-
- <%= hd(chap.translations).target.title %> -
- - - - -<.back navigate={~p"/explore/"}>Back to All Sources - - Enum.count() < 10} class="block h-96"/> - + <.live_component + module={VyasaWeb.Content.Chapters} + id={"content-sources"} + source={@source} + chapters={@streams.chapters} + />
<% end %> From d160a3200f2634b67f812af442b958ecd4a62d35 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Fri, 16 Aug 2024 15:07:32 +0800 Subject: [PATCH 048/130] Handle data load & nav:show_chapters->:show_verses --- lib/vyasa/written.ex | 102 +++++---- .../components/source_content/chapters.ex | 11 +- .../live/display_manager/display_live.ex | 201 +++++++++++++++++- .../display_manager/display_live.html.heex | 71 ++++++- 4 files changed, 333 insertions(+), 52 deletions(-) diff --git a/lib/vyasa/written.ex b/lib/vyasa/written.ex index df159539..577d8e96 100644 --- a/lib/vyasa/written.ex +++ b/lib/vyasa/written.ex @@ -18,12 +18,12 @@ defmodule Vyasa.Written do """ defguard is_uuid?(value) - when is_bitstring(value) and - byte_size(value) == 36 and - binary_part(value, 8, 1) == "-" and - binary_part(value, 13, 1) == "-" and - binary_part(value, 18, 1) == "-" and - binary_part(value, 23, 1) == "-" + when is_bitstring(value) and + byte_size(value) == 36 and + binary_part(value, 8, 1) == "-" and + binary_part(value, 13, 1) == "-" and + binary_part(value, 18, 1) == "-" and + binary_part(value, 23, 1) == "-" @doc """ Returns the list of texts. @@ -80,8 +80,6 @@ defmodule Vyasa.Written do |> Repo.preload([:verses]) end - - @doc """ Gets a single text. @@ -114,46 +112,60 @@ defmodule Vyasa.Written do ** (Ecto.NoResultsError) """ - def get_source!(id), do: Repo.get!(Source, id) - |> Repo.preload([:chapters, :verses]) + def get_source!(id), + do: + Repo.get!(Source, id) + |> Repo.preload([:chapters, :verses]) def get_source_by_title(title) do - query = from src in Source, - where: src.title == ^title, - preload: [verses: [:translations], chapters: [:translations]] + query = + from src in Source, + where: src.title == ^title, + preload: [verses: [:translations], chapters: [:translations]] Repo.one(query) end def get_chapters_by_src(src_title) do - (from c in Chapter, + from(c in Chapter, inner_join: src in assoc(c, :source), where: src.title == ^src_title, inner_join: t in assoc(c, :translations), - on: t.source_id == src.id) + on: t.source_id == src.id + ) |> select_merge([c, src, t], %{ - c | translations: [t], source: src - }) + c + | translations: [t], + source: src + }) |> Repo.all() end def get_chapter(no, source_title) do - (from c in Chapter, where: c.no == ^no, + from(c in Chapter, + where: c.no == ^no, inner_join: src in assoc(c, :source), - where: src.title == ^source_title) + where: src.title == ^source_title + ) |> Repo.one() end def get_chapter(no, sid, lang) when is_uuid?(sid) do - - target_lang = (from ts in Translation, - where: ts.lang == ^lang and ts.source_id == ^sid) - - (from c in Chapter, - where: c.no == ^no and c.source_id == ^sid, - preload: [verses: ^(from v in Verse, where: v.source_id == ^sid, order_by: v.no, - preload: [translations: ^target_lang]), - translations: ^target_lang] + target_lang = + from ts in Translation, + where: ts.lang == ^lang and ts.source_id == ^sid + + from(c in Chapter, + where: c.no == ^no and c.source_id == ^sid, + preload: [ + verses: + ^from(v in Verse, + where: v.source_id == ^sid, + order_by: v.no, + preload: [translations: ^target_lang] + ), + translations: ^target_lang + ] ) |> Repo.one() end @@ -161,25 +173,33 @@ defmodule Vyasa.Written do def get_chapter(no, source_title, lang) do %Source{id: id} = _src = get_source_by_title(source_title) - target_lang = (from ts in Translation, - where: ts.lang == ^lang and ts.source_id == ^id) - - (from c in Chapter, - where: c.no == ^no and c.source_id == ^id, - preload: [verses: ^(from v in Verse, where: v.source_id == ^id, order_by: v.no, - preload: [translations: ^target_lang]), - translations: ^target_lang] + target_lang = + from ts in Translation, + where: ts.lang == ^lang and ts.source_id == ^id + + from(c in Chapter, + where: c.no == ^no and c.source_id == ^id, + preload: [ + verses: + ^from(v in Verse, + where: v.source_id == ^id, + order_by: v.no, + preload: [translations: ^target_lang] + ), + translations: ^target_lang + ] ) |> Repo.one() end def get_verses_in_chapter(no, source_id) do - query_verse = from v in Verse, - where: v.chapter_no == ^no and v.source_id == ^source_id, - preload: [:chapter] + query_verse = + from v in Verse, + where: v.chapter_no == ^no and v.source_id == ^source_id, + preload: [:chapter] Repo.all(query_verse) - end + end @doc """ Creates a text. @@ -306,4 +326,4 @@ defmodule Vyasa.Written do def change_source(%Source{} = source, attrs \\ %{}) do Source.mutate_changeset(source, attrs) end - end +end diff --git a/lib/vyasa_web/components/source_content/chapters.ex b/lib/vyasa_web/components/source_content/chapters.ex index d77a1674..d7f1dc06 100644 --- a/lib/vyasa_web/components/source_content/chapters.ex +++ b/lib/vyasa_web/components/source_content/chapters.ex @@ -28,7 +28,8 @@ defmodule VyasaWeb.Content.Chapters do row_click={ fn {_id, chap} -> JS.push("navigate_to_chapter", - value: %{target: ~p"/explore/#{@source.title}/#{chap.no}/"} + value: %{target: ~p"/explore/#{@source.title}/#{chap.no}/"}, + target: @myself ) end } @@ -60,4 +61,12 @@ defmodule VyasaWeb.Content.Chapters do # IO.inspect(payload) # {:noreply, socket} # end + @impl true + def handle_event("navigate_to_chapter", %{"target" => target} = _payload, socket) do + IO.inspect(target, label: "TRACE: push patch to the following target by @myself:") + + {:noreply, + socket + |> push_patch(to: target)} + end end diff --git a/lib/vyasa_web/live/display_manager/display_live.ex b/lib/vyasa_web/live/display_manager/display_live.ex index 1d2704f3..54561b58 100644 --- a/lib/vyasa_web/live/display_manager/display_live.ex +++ b/lib/vyasa_web/live/display_manager/display_live.ex @@ -4,10 +4,17 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do """ use VyasaWeb, :live_view alias Vyasa.Display.UserMode + alias VyasaWeb.OgImageController alias Phoenix.LiveView.Socket alias Vyasa.Written + alias Vyasa.Written.{Source, Chapter} alias Vyasa.Written.{Chapter} + alias Vyasa.Sangh.{Comment, Mark} + alias Utils.Struct + @supported_modes UserMode.supported_modes() + @default_lang "en" + # @default_voice_lang "sa" @impl true def mount(_params, sess, socket) do @@ -92,8 +99,6 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do }) |> stream_configure(:chapters, dom_id: &"Chapter-#{&1.no}") |> stream(:chapters, chapters |> Enum.sort_by(fn chap -> chap.no end)) - - # |> dbg() end defp apply_action( @@ -105,7 +110,50 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do IO.inspect(params, label: "TRACE: apply action DM params:") IO.inspect(source_title, label: "TRACE: apply action DM params source_title:") IO.inspect(chap_no, label: "TRACE: apply action DM params chap_no:") - socket + + with %Source{id: sid} = source <- Written.get_source_by_title(source_title), + %{verses: verses, translations: [ts | _], title: chap_title, body: chap_body} = chap <- + Written.get_chapter(chap_no, sid, @default_lang) do + fmted_title = to_title_case(source.title) + + socket + |> sync_session() + |> assign(:content_action, :show_verses) + |> stream_configure(:verses, dom_id: &"verse-#{&1.id}") + |> stream(:verses, verses) + |> assign( + :kv_verses, + Enum.into( + verses, + %{}, + &{&1.id, + %{ + &1 + | comments: [ + %Comment{signature: "Pope", body: "Achilles’ wrath, to Greece the direful spring + Of woes unnumber’d, heavenly goddess, sing"} + ] + }} + ) + ) + |> assign(:marks, [%Mark{state: :draft, order: 0}]) + # DEPRECATED + |> assign(:src, source) + |> assign(:lang, @default_lang) + |> assign(:chap, chap) + |> assign(:selected_transl, ts) + |> assign(:page_title, "#{fmted_title} Chapter #{chap_no} | #{chap_title}") + |> assign(:meta, %{ + title: "#{fmted_title} Chapter #{chap_no} | #{chap_title}", + description: chap_body, + type: "website", + image: url(~p"/og/#{OgImageController.get_by_binding(%{chapter: chap, source: source})}"), + url: url(socket, ~p"/explore/#{source.title}/#{chap_no}") + }) + else + _ -> + raise VyasaWeb.ErrorHTML.FourOFour, message: "Chapter not Found" + end end defp apply_action(%Socket{} = socket, _, _) do @@ -143,4 +191,151 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do defp change_mode(socket, _, _) do socket end + + defp sync_session(%{assigns: %{session: %{"id" => sess_id}}} = socket) do + # written channel for reading and media channel for writing to media bridge and to player + Vyasa.PubSub.subscribe("written:session:" <> sess_id) + Vyasa.PubSub.publish(:init, :written_handshake, "media:session:" <> sess_id) + socket + end + + defp sync_session(socket), do: socket + + # ---- CHECKPOINT: all the sangha stuff goes here ---- + + # enum.split() from @verse binding to mark + def verse_matrix(assigns) do + assigns = assigns + + ~H""" +
+
+
+
+ +
+
+
Enum.join("::")} + class={"text-zinc-700 #{verse_class(elem.verseup)}"} + > + <%= Struct.get_in(Map.get(elem, :node, @verse), elem.field) %> +
+
+ <.comment_binding comments={@verse.comments} /> + + + ☙ ——— ›– ❊ –‹ ——— ❧ + + <.drafting marks={@marks} quote={@verse.binding.window && @verse.binding.window.quote} /> +
+
+
+
+
+ """ + end + + # font by lang here + defp verse_class(:big), + do: "font-dn text-lg sm:text-xl" + + defp verse_class(:mid), + do: "font-dn text-m" + + def comment_binding(assigns) do + assigns = assigns |> assign(:elem_id, "comment-modal-#{Ecto.UUID.generate()}") + + ~H""" + + <%= comment.body %> - <%= comment.signature %> + + """ + end + + attr :quote, :string, default: nil + attr :marks, :list, default: [] + + def drafting(assigns) do + assigns = assigns |> assign(:elem_id, "comment-modal-#{Ecto.UUID.generate()}") + + ~H""" +
+ + <%= mark.binding.window.quote %> + + + <%= mark.body %> - <%= "Self" %> + +
+ + + <%= @quote %> + + +
+ <.form for={%{}} phx-submit="createMark"> + + +
+ +
+
+ """ + end end diff --git a/lib/vyasa_web/live/display_manager/display_live.html.heex b/lib/vyasa_web/live/display_manager/display_live.html.heex index 7d817e95..999a8522 100644 --- a/lib/vyasa_web/live/display_manager/display_live.html.heex +++ b/lib/vyasa_web/live/display_manager/display_live.html.heex @@ -5,12 +5,12 @@ <%= if @content_action == :show_sources do%>
SHOW SOURCES - <.live_component - module={VyasaWeb.Content.Sources} - id={"content-sources"} - sources={@streams.sources} - /> -
+ <.live_component + module={VyasaWeb.Content.Sources} + id={"content-sources"} + sources={@streams.sources} + /> +
<% end %> <%= if @content_action == :show_chapters do%> @@ -28,8 +28,65 @@ <%= if @content_action == :show_verses do%>
SHOW VERSES -
+ <%= @page_title %> +
+ <.header class="p-4 pb-0"> +
+ <%= @selected_transl.target.translit_title %> | <%= @chap.title%> +
+
+ Chapter <%= @chap.no%> - <%= @selected_transl.target.title %> +
+ + <:subtitle> +
+ <%= @selected_transl.target.body %> +
+ + +
+ <.verse_matrix id={dom_id} verse={verse} :for={{dom_id, %Written.Verse{} = verse} <- @streams.verses} marks={@marks}> + <:edge + title={"#{verse.chapter_no}.#{verse.no}"} + field={[:body]} + verseup={:big}/> + <:edge + node={hd(verse.translations)} + field={[:target, :body_translit]} + verseup={:mid}/> + + <:edge + node={hd(verse.translations)} + field={[:target, :body_translit_meant]} + verseup={:mid}/> + + <:edge + node={hd(verse.translations)} + field={[:target, :body]} + verseup={:mid}/> + +
+ <.back navigate={~p"/explore/#{@src.title}"}>Back to <%= to_title_case(@src.title)%> Chapters +
+ + + + + <% end %> From 2d67555276b462b71cb02e6c802fdfcc9544f1b9 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Fri, 16 Aug 2024 15:29:01 +0800 Subject: [PATCH 049/130] Create VyasaWeb.Content.Verses live_component --- .../components/source_content/verses.ex | 232 ++++++++++++++++++ .../live/display_manager/display_live.ex | 1 + .../display_manager/display_live.html.heex | 72 +----- 3 files changed, 246 insertions(+), 59 deletions(-) create mode 100644 lib/vyasa_web/components/source_content/verses.ex diff --git a/lib/vyasa_web/components/source_content/verses.ex b/lib/vyasa_web/components/source_content/verses.ex new file mode 100644 index 00000000..006f0140 --- /dev/null +++ b/lib/vyasa_web/components/source_content/verses.ex @@ -0,0 +1,232 @@ +defmodule VyasaWeb.Content.Verses do + use VyasaWeb, :live_component + + alias Vyasa.Written.{Verse} + alias Utils.Struct + + @impl true + def update(params, socket) do + { + :ok, + socket + |> assign(params) + } + end + + # TODO: navigate() -> patch() on links... + @impl true + def render(assigns) do + ~H""" +
+ VERSES LIVE COMPONENT +
+ <.header class="p-4 pb-0"> +
+ <%= @selected_transl.target.translit_title %> | <%= @chap.title %> +
+
+ Chapter <%= @chap.no %> - <%= @selected_transl.target.title %> +
+ + <:subtitle> +
+ <%= @selected_transl.target.body %> +
+ + +
+ <.verse_matrix + :for={{dom_id, %Verse{} = verse} <- @verses} + id={dom_id} + verse={verse} + marks={@marks} + > + <:edge title={"#{verse.chapter_no}.#{verse.no}"} field={[:body]} verseup={:big} /> + <:edge node={hd(verse.translations)} field={[:target, :body_translit]} verseup={:mid} /> + + <:edge + node={hd(verse.translations)} + field={[:target, :body_translit_meant]} + verseup={:mid} + /> + + <:edge node={hd(verse.translations)} field={[:target, :body]} verseup={:mid} /> + +
+ <.back navigate={~p"/explore/#{@src.title}"}> + Back to <%= to_title_case(@src.title) %> Chapters + +
+ + +
+ """ + end + + # ---- CHECKPOINT: all the sangha stuff goes here ---- + + # enum.split() from @verse binding to mark + def verse_matrix(assigns) do + assigns = assigns + + ~H""" +
+
+
+
+ +
+
+
Enum.join("::")} + class={"text-zinc-700 #{verse_class(elem.verseup)}"} + > + <%= Struct.get_in(Map.get(elem, :node, @verse), elem.field) %> +
+
+ <.comment_binding comments={@verse.comments} /> + + + ☙ ——— ›– ❊ –‹ ——— ❧ + + <.drafting marks={@marks} quote={@verse.binding.window && @verse.binding.window.quote} /> +
+
+
+
+
+ """ + end + + # font by lang here + defp verse_class(:big), + do: "font-dn text-lg sm:text-xl" + + defp verse_class(:mid), + do: "font-dn text-m" + + def comment_binding(assigns) do + assigns = assigns |> assign(:elem_id, "comment-modal-#{Ecto.UUID.generate()}") + + ~H""" + + <%= comment.body %> - <%= comment.signature %> + + """ + end + + attr :quote, :string, default: nil + attr :marks, :list, default: [] + + def drafting(assigns) do + assigns = assigns |> assign(:elem_id, "comment-modal-#{Ecto.UUID.generate()}") + + ~H""" +
+ + <%= mark.binding.window.quote %> + + + <%= mark.body %> - <%= "Self" %> + +
+ + + <%= @quote %> + + +
+ <.form for={%{}} phx-submit="createMark"> + + +
+ +
+
+ """ + end + + # @impl true + # def handle_event("reportVideoStatus", payload, socket) do + # IO.inspect(payload) + # {:noreply, socket} + # end + @impl true + def handle_event("navigate_to_chapter", %{"target" => target} = _payload, socket) do + IO.inspect(target, label: "TRACE: push patch to the following target by @myself:") + + {:noreply, + socket + |> push_patch(to: target)} + end +end diff --git a/lib/vyasa_web/live/display_manager/display_live.ex b/lib/vyasa_web/live/display_manager/display_live.ex index 54561b58..9e94b9af 100644 --- a/lib/vyasa_web/live/display_manager/display_live.ex +++ b/lib/vyasa_web/live/display_manager/display_live.ex @@ -138,6 +138,7 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do ) |> assign(:marks, [%Mark{state: :draft, order: 0}]) # DEPRECATED + # RENAME? |> assign(:src, source) |> assign(:lang, @default_lang) |> assign(:chap, chap) diff --git a/lib/vyasa_web/live/display_manager/display_live.html.heex b/lib/vyasa_web/live/display_manager/display_live.html.heex index 999a8522..6ea358af 100644 --- a/lib/vyasa_web/live/display_manager/display_live.html.heex +++ b/lib/vyasa_web/live/display_manager/display_live.html.heex @@ -18,7 +18,7 @@ SHOW CHAPTERS <.live_component module={VyasaWeb.Content.Chapters} - id={"content-sources"} + id={"content-chapters"} source={@source} chapters={@streams.chapters} /> @@ -29,64 +29,18 @@
SHOW VERSES
- <%= @page_title %> -
- <.header class="p-4 pb-0"> -
- <%= @selected_transl.target.translit_title %> | <%= @chap.title%> -
-
- Chapter <%= @chap.no%> - <%= @selected_transl.target.title %> -
- - <:subtitle> -
- <%= @selected_transl.target.body %> -
- - -
- <.verse_matrix id={dom_id} verse={verse} :for={{dom_id, %Written.Verse{} = verse} <- @streams.verses} marks={@marks}> - <:edge - title={"#{verse.chapter_no}.#{verse.no}"} - field={[:body]} - verseup={:big}/> - <:edge - node={hd(verse.translations)} - field={[:target, :body_translit]} - verseup={:mid}/> - - <:edge - node={hd(verse.translations)} - field={[:target, :body_translit_meant]} - verseup={:mid}/> - - <:edge - node={hd(verse.translations)} - field={[:target, :body]} - verseup={:mid}/> - -
- <.back navigate={~p"/explore/#{@src.title}"}>Back to <%= to_title_case(@src.title)%> Chapters -
- - - - - + <.live_component + module={VyasaWeb.Content.Verses} + id={"content-verses"} + src={@src} + verses={@streams.verses} + chap={@chap} + kv_verses={@kv_verses} + marks={@marks} + lang={@lang} + selected_transl={@selected_transl} + page_title={@page_title} + /> <% end %> From 2f88c9b44ad08887665c3155f25244082008bc4a Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Fri, 16 Aug 2024 17:07:19 +0800 Subject: [PATCH 050/130] Wire up handshakes successfully, shift to patches Also done: 1. use maybe_stream_configure/3 (see note in definition) 2. change backlinks from navigate -> patch so that a full-page reload is NOT done. This is also what allows the state of ControlPanel and ActionBar to be maintained despite going back and forth content. 3. actually wiring up the event handlers and stuff that allowed the handshakes to happen TODOs: 1. fix css nonsense with how the content is being displayed. 2. future iteration needs a cleanup, this module is too fat. --- lib/vyasa_web/components/core_components.ex | 27 +- .../components/source_content/chapters.ex | 4 +- .../components/source_content/verses.ex | 6 +- .../live/display_manager/display_live.ex | 231 ++++++++++++++++-- .../display_manager/display_live.html.heex | 98 ++++---- 5 files changed, 290 insertions(+), 76 deletions(-) diff --git a/lib/vyasa_web/components/core_components.ex b/lib/vyasa_web/components/core_components.ex index 7cc54e7c..2994d852 100644 --- a/lib/vyasa_web/components/core_components.ex +++ b/lib/vyasa_web/components/core_components.ex @@ -779,19 +779,30 @@ defmodule VyasaWeb.CoreComponents do <.back navigate={~p"/posts"}>Back to posts """ - attr :navigate, :any, required: true + attr :navigate, :any, default: nil + attr :patch, :any, default: nil slot :inner_block, required: true def back(assigns) do ~H"""
- <.link - navigate={@navigate} - class="text-sm font-semibold leading-6 text-zinc-900 hover:text-zinc-700" - > - <.icon name="hero-arrow-left-solid" class="h-3 w-3" /> - <%= render_slot(@inner_block) %> - + <%= if @patch do %> + <.link + patch={@patch} + class="text-sm font-semibold leading-6 text-zinc-900 hover:text-zinc-700" + > + <.icon name="hero-arrow-left-solid" class="h-3 w-3" /> + <%= render_slot(@inner_block) %> + + <% else %> + <.link + navigate={@navigate} + class="text-sm font-semibold leading-6 text-zinc-900 hover:text-zinc-700" + > + <.icon name="hero-arrow-left-solid" class="h-3 w-3" /> + <%= render_slot(@inner_block) %> + + <% end %>
""" end diff --git a/lib/vyasa_web/components/source_content/chapters.ex b/lib/vyasa_web/components/source_content/chapters.ex index d7f1dc06..a82d07ff 100644 --- a/lib/vyasa_web/components/source_content/chapters.ex +++ b/lib/vyasa_web/components/source_content/chapters.ex @@ -22,6 +22,8 @@ defmodule VyasaWeb.Content.Chapters do
+ <.back patch={~p"/explore/"}>Back to All Sources + <.table id="chapters" rows={@chapters} @@ -49,7 +51,7 @@ defmodule VyasaWeb.Content.Chapters do - <.back navigate={~p"/explore/"}>Back to All Sources + <.back patch={~p"/explore/"}>Back to All Sources Enum.count() < 10} class="block h-96" />
diff --git a/lib/vyasa_web/components/source_content/verses.ex b/lib/vyasa_web/components/source_content/verses.ex index 006f0140..24dd0962 100644 --- a/lib/vyasa_web/components/source_content/verses.ex +++ b/lib/vyasa_web/components/source_content/verses.ex @@ -34,6 +34,9 @@ defmodule VyasaWeb.Content.Verses do
+ <.back patch={~p"/explore/#{@src.title}"}> + Back to <%= to_title_case(@src.title) %> Chapters +
<.verse_matrix :for={{dom_id, %Verse{} = verse} <- @verses} @@ -53,7 +56,7 @@ defmodule VyasaWeb.Content.Verses do <:edge node={hd(verse.translations)} field={[:target, :body]} verseup={:mid} />
- <.back navigate={~p"/explore/#{@src.title}"}> + <.back patch={~p"/explore/#{@src.title}"}> Back to <%= to_title_case(@src.title) %> Chapters
@@ -79,7 +82,6 @@ defmodule VyasaWeb.Content.Verses do end # ---- CHECKPOINT: all the sangha stuff goes here ---- - # enum.split() from @verse binding to mark def verse_matrix(assigns) do assigns = assigns diff --git a/lib/vyasa_web/live/display_manager/display_live.ex b/lib/vyasa_web/live/display_manager/display_live.ex index 9e94b9af..1498ff44 100644 --- a/lib/vyasa_web/live/display_manager/display_live.ex +++ b/lib/vyasa_web/live/display_manager/display_live.ex @@ -6,15 +6,15 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do alias Vyasa.Display.UserMode alias VyasaWeb.OgImageController alias Phoenix.LiveView.Socket - alias Vyasa.Written + alias Vyasa.{Medium, Written, Draft} + alias Vyasa.Medium.{Voice} alias Vyasa.Written.{Source, Chapter} - alias Vyasa.Written.{Chapter} alias Vyasa.Sangh.{Comment, Mark} alias Utils.Struct @supported_modes UserMode.supported_modes() @default_lang "en" - # @default_voice_lang "sa" + @default_voice_lang "sa" @impl true def mount(_params, sess, socket) do @@ -25,7 +25,8 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do :ok, socket # to allow passing to children live-views - |> assign(session: sess) + # TODO: figure out if this is important + |> assign(stored_session: sess) |> assign(mode: mode), layout: {VyasaWeb.Layouts, :display_manager} } @@ -97,7 +98,7 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do image: url(~p"/og/#{VyasaWeb.OgImageController.get_by_binding(%{source: src})}"), url: url(socket, ~p"/explore/#{src.title}") }) - |> stream_configure(:chapters, dom_id: &"Chapter-#{&1.no}") + |> maybe_stream_configure(:chapters, dom_id: &"Chapter-#{&1.no}") |> stream(:chapters, chapters |> Enum.sort_by(fn chap -> chap.no end)) end @@ -116,10 +117,12 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do Written.get_chapter(chap_no, sid, @default_lang) do fmted_title = to_title_case(source.title) + IO.inspect(fmted_title, label: "TRACE: am i WITH it?") + socket |> sync_session() |> assign(:content_action, :show_verses) - |> stream_configure(:verses, dom_id: &"verse-#{&1.id}") + |> maybe_stream_configure(:verses, dom_id: &"verse-#{&1.id}") |> stream(:verses, verses) |> assign( :kv_verses, @@ -169,20 +172,6 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do |> assign(:page_title, "Sources") end - @impl true - def handle_event( - "change_mode", - %{ - "current_mode" => current_mode, - "target_mode" => target_mode - } = _params, - socket - ) do - {:noreply, - socket - |> change_mode(current_mode, target_mode)} - end - defp change_mode(socket, curr, target) when is_binary(curr) and is_binary(target) and target in @supported_modes do socket @@ -197,10 +186,15 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do # written channel for reading and media channel for writing to media bridge and to player Vyasa.PubSub.subscribe("written:session:" <> sess_id) Vyasa.PubSub.publish(:init, :written_handshake, "media:session:" <> sess_id) + + IO.inspect(sess_id, label: "TRACE: synced the sess with session id: ") socket end - defp sync_session(socket), do: socket + defp sync_session(socket) do + IO.inspect(socket, label: "TRACE: NO SYNC OF SESSION!") + socket + end # ---- CHECKPOINT: all the sangha stuff goes here ---- @@ -339,4 +333,199 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do
""" end + + @impl true + def handle_event( + "change_mode", + %{ + "current_mode" => current_mode, + "target_mode" => target_mode + } = _params, + socket + ) do + {:noreply, + socket + |> change_mode(current_mode, target_mode)} + end + + # CHECKPOINT: event handlers related to hoverrune and stuff + # + # + + @impl true + @doc """ + events + + "clickVersetoSeek" -> + Handles the action of clicking to seek by emitting the verse_id to the live player + via the pubsub system. + + "binding" + """ + def handle_event( + "clickVerseToSeek", + %{"verse_id" => verse_id} = _payload, + %{assigns: %{session: %{"id" => sess_id}}} = socket + ) do + IO.inspect("handle_event::clickVerseToSeek", label: "checkpoint") + Vyasa.PubSub.publish(%{verse_id: verse_id}, :playback_sync, "media:session:" <> sess_id) + {:noreply, socket} + end + + @impl true + def handle_event( + "bindHoveRune", + %{"binding" => bind = %{"verse_id" => verse_id}}, + %{ + assigns: %{ + kv_verses: verses, + marks: [%Mark{state: :draft, verse_id: curr_verse_id} = d_mark | marks] + } + } = socket + ) + when is_binary(curr_verse_id) and verse_id != curr_verse_id do + # binding here blocks the stream from appending to quote + bind = Draft.bind_node(bind) + + {:noreply, + socket + |> stream_insert( + :verses, + %{verses[curr_verse_id] | binding: nil} + ) + |> stream_insert( + :verses, + %{verses[verse_id] | binding: bind} + ) + |> assign(:marks, [%{d_mark | binding: bind, verse_id: verse_id} | marks])} + end + + # already in mark in drafting state, remember to late bind binding => with a fn() + def handle_event( + "bindHoveRune", + %{"binding" => bind = %{"verse_id" => verse_id}}, + %{assigns: %{kv_verses: verses, marks: [%Mark{state: :draft} = d_mark | marks]}} = socket + ) do + # binding here blocks the stream from appending to quote + bind = Draft.bind_node(bind) + + {:noreply, + socket + |> stream_insert( + :verses, + %{verses[verse_id] | binding: bind} + ) + |> assign(:marks, [%{d_mark | binding: bind, verse_id: verse_id} | marks])} + end + + @impl true + def handle_event( + "bindHoveRune", + %{"binding" => bind = %{"verse_id" => verse_id}}, + %{assigns: %{kv_verses: verses, marks: [%Mark{order: no} | _] = marks}} = socket + ) do + bind = Draft.bind_node(bind) + + {:noreply, + socket + |> stream_insert( + :verses, + %{verses[verse_id] | binding: bind} + ) + |> assign(:marks, [ + %Mark{state: :draft, order: no + 1, verse_id: verse_id, binding: bind} | marks + ])} + end + + @impl true + def handle_event( + "markQuote", + _, + %{assigns: %{marks: [%Mark{state: :draft} = d_mark | marks]}} = socket + ) do + IO.inspect(marks) + {:noreply, socket |> assign(:marks, [%{d_mark | state: :live} | marks])} + end + + def handle_event("markQuote", _, socket) do + {:noreply, socket} + end + + def handle_event( + "createMark", + %{"body" => body}, + %{assigns: %{marks: [%Mark{state: :draft} = d_mark | marks]}} = socket + ) do + {:noreply, socket |> assign(:marks, [%{d_mark | body: body, state: :live} | marks])} + end + + def handle_event("createMark", _event, socket) do + {:noreply, socket} + end + + def handle_event(event, message, socket) do + IO.inspect(%{event: event, message: message}, label: "pokemon") + {:noreply, socket} + end + + # CHECKPOINT: handle_info functions in DM + @doc """ + Handles the custom message that corresponds to the :media_handshake event with the :init + message, regardless of the module that dispatched the message. + + This indicates an intention to sync the media library with the chapter, hence it + returns a message containing %Voice{} info that can be used to generate a playback struct. + """ + @impl true + def handle_info( + {_, :media_handshake, :init} = _msg, + %{ + assigns: %{ + session: %{"id" => sess_id}, + chap: %Chapter{no: c_no, source_id: src_id} + } + } = socket + ) do + %Voice{} = chosen_voice = Medium.get_voice(src_id, c_no, @default_voice_lang) + + Vyasa.PubSub.publish( + chosen_voice, + :voice_ack, + sess_id + ) + + {:noreply, socket} + end + + @impl true + def handle_info(msg, socket) do + IO.inspect(msg, label: "unexpected message in @chapter") + {:noreply, socket} + end + + # NOTE: This is needed because a stream can't be reconfigured. + # Consider the case where we move from :show_chapters -> :show_verses -> :show_chapters. + # In this case, because the state is held @ the live_view side (DM), we will end up with a situation + # where the stream (e.g. chapters stream) would have already been configed. + # Hence, a maybe_stream_configure/3 is necessary to avoid throwing an error. + defp maybe_stream_configure( + %Socket{ + assigns: assigns + } = socket, + stream_name, + opts + ) + when is_list(opts) do + case Map.has_key?(assigns, :streams) && Map.has_key?(assigns.streams, stream_name) do + true -> + socket + + false -> + socket |> stream_configure(stream_name, opts) + end + end + + def maybe_config_stream(%Socket{} = socket, _, _) do + socket + end end diff --git a/lib/vyasa_web/live/display_manager/display_live.html.heex b/lib/vyasa_web/live/display_manager/display_live.html.heex index 6ea358af..17900ac0 100644 --- a/lib/vyasa_web/live/display_manager/display_live.html.heex +++ b/lib/vyasa_web/live/display_manager/display_live.html.heex @@ -1,53 +1,63 @@
-<.live_component module={@mode.control_panel_component} id="control_panel" mode={@mode} /> - - -<%= if @content_action == :show_sources do%>
- SHOW SOURCES - <.live_component - module={VyasaWeb.Content.Sources} - id={"content-sources"} - sources={@streams.sources} - /> +
+ <.live_component module={@mode.control_panel_component} id="control_panel" mode={@mode} />
-<% end %> -<%= if @content_action == :show_chapters do%> -
- SHOW CHAPTERS - <.live_component - module={VyasaWeb.Content.Chapters} - id={"content-chapters"} - source={@source} - chapters={@streams.chapters} - /> -
-<% end %> + +
+ <%= if @content_action == :show_sources do%> +
+ SHOW SOURCES + <.live_component + module={VyasaWeb.Content.Sources} + id={"content-sources"} + sources={@streams.sources} + /> +
+ <% end %> -<%= if @content_action == :show_verses do%> -
- SHOW VERSES -
- <.live_component - module={VyasaWeb.Content.Verses} - id={"content-verses"} - src={@src} - verses={@streams.verses} - chap={@chap} - kv_verses={@kv_verses} - marks={@marks} - lang={@lang} - selected_transl={@selected_transl} - page_title={@page_title} - /> -<% end %> + <%= if @content_action == :show_chapters do%> +
+ SHOW CHAPTERS + <.live_component + module={VyasaWeb.Content.Chapters} + id={"content-chapters"} + source={@source} + chapters={@streams.chapters} + /> +
+ <% end %> - -<%= if @mode.action_bar_component do %> -
- <%= live_render(@socket, @mode.action_bar_component, id: "ActionBar", session: @session, sticky: true) %> + <%= if @content_action == :show_verses do%> +
+ SHOW VERSES +
+ <.live_component + module={VyasaWeb.Content.Verses} + id={"content-verses"} + src={@src} + verses={@streams.verses} + chap={@chap} + kv_verses={@kv_verses} + marks={@marks} + lang={@lang} + selected_transl={@selected_transl} + page_title={@page_title} + /> + <% end %>
-<% end %> + + + <%= if @mode.action_bar_component do %> +
+ <%= live_render(@socket, @mode.action_bar_component, id: "ActionBar", session: @session, sticky: true) %> +
+ <% end %> + +
From 920a806d0a0e863773923162e487d15963c0a3f1 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Fri, 16 Aug 2024 17:23:30 +0800 Subject: [PATCH 051/130] Fix css issues --- .../components/source_content/verses.ex | 1 - .../display_manager/display_live.html.heex | 59 +++++++++++-------- 2 files changed, 36 insertions(+), 24 deletions(-) diff --git a/lib/vyasa_web/components/source_content/verses.ex b/lib/vyasa_web/components/source_content/verses.ex index 24dd0962..ec46d79c 100644 --- a/lib/vyasa_web/components/source_content/verses.ex +++ b/lib/vyasa_web/components/source_content/verses.ex @@ -18,7 +18,6 @@ defmodule VyasaWeb.Content.Verses do def render(assigns) do ~H"""
- VERSES LIVE COMPONENT
<.header class="p-4 pb-0">
diff --git a/lib/vyasa_web/live/display_manager/display_live.html.heex b/lib/vyasa_web/live/display_manager/display_live.html.heex index 17900ac0..4611e9b9 100644 --- a/lib/vyasa_web/live/display_manager/display_live.html.heex +++ b/lib/vyasa_web/live/display_manager/display_live.html.heex @@ -1,4 +1,26 @@ -
+
+ +
+ + +
<.live_component module={@mode.control_panel_component} id="control_panel" mode={@mode} /> @@ -7,36 +29,27 @@
<%= if @content_action == :show_sources do%> -
- SHOW SOURCES - <.live_component - module={VyasaWeb.Content.Sources} - id={"content-sources"} - sources={@streams.sources} - /> -
+ <.live_component + module={VyasaWeb.Content.Sources} + id={"content-sources"} + sources={@streams.sources} + /> <% end %> <%= if @content_action == :show_chapters do%> -
- SHOW CHAPTERS - <.live_component - module={VyasaWeb.Content.Chapters} - id={"content-chapters"} - source={@source} - chapters={@streams.chapters} + <.live_component + module={VyasaWeb.Content.Chapters} + id={"content-chapters"} + source={@source} + chapters={@streams.chapters} /> -
<% end %> <%= if @content_action == :show_verses do%> -
- SHOW VERSES -
- <.live_component + <.live_component module={VyasaWeb.Content.Verses} id={"content-verses"} src={@src} @@ -60,4 +73,4 @@ <% end %>
-
+
From 4d4d142f66ba5eef79aa37d4df9a9bec1c7d9056 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Fri, 16 Aug 2024 17:37:22 +0800 Subject: [PATCH 052/130] More minor css fixes --- assets/js/hooks/index.js | 8 +++++--- assets/js/hooks/scrolling.js | 11 +++++++++++ .../components/layouts/display_manager.html.heex | 2 -- lib/vyasa_web/components/layouts/root.html.heex | 5 ++++- lib/vyasa_web/components/source_content/chapters.ex | 5 ++--- lib/vyasa_web/components/source_content/sources.ex | 4 ++-- lib/vyasa_web/components/source_content/verses.ex | 3 ++- .../live/display_manager/display_live.html.heex | 5 ++--- 8 files changed, 28 insertions(+), 15 deletions(-) create mode 100644 assets/js/hooks/scrolling.js diff --git a/assets/js/hooks/index.js b/assets/js/hooks/index.js index cfd438ae..2e312973 100644 --- a/assets/js/hooks/index.js +++ b/assets/js/hooks/index.js @@ -7,10 +7,11 @@ import MiniPlayer from "./mini_player.js"; import MediaBridge from "./media_bridge.js"; import AudioPlayer from "./audio_player.js"; import ProgressBar from "./progress_bar.js"; -import Floater from "./floater.js" -import ApplyModal from "./apply_modal.js" +import Floater from "./floater.js"; +import ApplyModal from "./apply_modal.js"; import MargiNote from "./marginote.js"; import HoveRune from "./hoverune.js"; +import Scrolling from "./scrolling.js"; let Hooks = { ShareQuoteButton, @@ -23,7 +24,8 @@ let Hooks = { Floater, ApplyModal, MargiNote, - HoveRune + HoveRune, + Scrolling, }; export default Hooks; diff --git a/assets/js/hooks/scrolling.js b/assets/js/hooks/scrolling.js new file mode 100644 index 00000000..68af5873 --- /dev/null +++ b/assets/js/hooks/scrolling.js @@ -0,0 +1,11 @@ +Scrolling = { + mounted() { + console.log("SCROLLING MOUNTED"); + this.handleEvent("scroll-to-top", this.handleScrollToTop); + }, + handleScrollToTop() { + window.scrollTo({ top: 0, behavior: "smooth" }); + }, +}; + +export default Scrolling; diff --git a/lib/vyasa_web/components/layouts/display_manager.html.heex b/lib/vyasa_web/components/layouts/display_manager.html.heex index d6943c0f..e86bbdd2 100644 --- a/lib/vyasa_web/components/layouts/display_manager.html.heex +++ b/lib/vyasa_web/components/layouts/display_manager.html.heex @@ -1,5 +1,3 @@ -
<%= @inner_content %> -
diff --git a/lib/vyasa_web/components/layouts/root.html.heex b/lib/vyasa_web/components/layouts/root.html.heex index c24999d5..8f313da7 100644 --- a/lib/vyasa_web/components/layouts/root.html.heex +++ b/lib/vyasa_web/components/layouts/root.html.heex @@ -1,6 +1,9 @@ - + diff --git a/lib/vyasa_web/components/source_content/chapters.ex b/lib/vyasa_web/components/source_content/chapters.ex index a82d07ff..7accc7f0 100644 --- a/lib/vyasa_web/components/source_content/chapters.ex +++ b/lib/vyasa_web/components/source_content/chapters.ex @@ -7,11 +7,9 @@ defmodule VyasaWeb.Content.Chapters do :ok, socket |> assign(params) - # |> dbg() } end - # TODO: navigate() -> patch() on links... @impl true def render(assigns) do ~H""" @@ -69,6 +67,7 @@ defmodule VyasaWeb.Content.Chapters do {:noreply, socket - |> push_patch(to: target)} + |> push_patch(to: target) + |> push_event("scroll-to-top", %{})} end end diff --git a/lib/vyasa_web/components/source_content/sources.ex b/lib/vyasa_web/components/source_content/sources.ex index a28f999f..bb9dd193 100644 --- a/lib/vyasa_web/components/source_content/sources.ex +++ b/lib/vyasa_web/components/source_content/sources.ex @@ -14,7 +14,6 @@ defmodule VyasaWeb.Content.Sources do def render(assigns) do ~H"""
-

SOURCES LIVE COMPONENT

<.table id="sources" rows={@sources} @@ -45,6 +44,7 @@ defmodule VyasaWeb.Content.Sources do {:noreply, socket - |> push_patch(to: target)} + |> push_patch(to: target) + |> push_event("scroll-to-top", %{})} end end diff --git a/lib/vyasa_web/components/source_content/verses.ex b/lib/vyasa_web/components/source_content/verses.ex index ec46d79c..006a027d 100644 --- a/lib/vyasa_web/components/source_content/verses.ex +++ b/lib/vyasa_web/components/source_content/verses.ex @@ -228,6 +228,7 @@ defmodule VyasaWeb.Content.Verses do {:noreply, socket - |> push_patch(to: target)} + |> push_patch(to: target) + |> push_event("scroll-to-top", %{})} end end diff --git a/lib/vyasa_web/live/display_manager/display_live.html.heex b/lib/vyasa_web/live/display_manager/display_live.html.heex index 4611e9b9..3c5c37f6 100644 --- a/lib/vyasa_web/live/display_manager/display_live.html.heex +++ b/lib/vyasa_web/live/display_manager/display_live.html.heex @@ -1,4 +1,4 @@ -
+
-
@@ -29,7 +28,7 @@
<%= if @content_action == :show_sources do%> <.live_component From 851b323f0d6f31cfd4fe15ffcb1e94d3e6546c5a Mon Sep 17 00:00:00 2001 From: ks0m1c_dharma Date: Sat, 17 Aug 2024 01:54:39 +0800 Subject: [PATCH 053/130] handle empty events payload --- lib/vyasa_web/live/media_live/media_bridge.ex | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/vyasa_web/live/media_live/media_bridge.ex b/lib/vyasa_web/live/media_live/media_bridge.ex index 44d6ffca..b63021b7 100644 --- a/lib/vyasa_web/live/media_live/media_bridge.ex +++ b/lib/vyasa_web/live/media_live/media_bridge.ex @@ -329,6 +329,10 @@ defmodule VyasaWeb.MediaLive.MediaBridge do events |> Enum.map(&(&1 |> Map.take([:origin, :duration, :phase, :fragments, :verse_id]))) end + defp create_events_payload([]) do + [] + end + defp get_target_event([%Event{} | _] = events, verse_id) do events |> Enum.find(fn e -> e.verse_id === verse_id end) From 9dbc123f37ead60d28f900522d3b3037dd762ff3 Mon Sep 17 00:00:00 2001 From: ks0m1c_dharma Date: Sat, 17 Aug 2024 02:28:07 +0800 Subject: [PATCH 054/130] migrator restore --- docs/migration_wow.livemd | 39 +------------------------ lib/vyasa/corpus/migrator/restore.ex | 43 ++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 38 deletions(-) diff --git a/docs/migration_wow.livemd b/docs/migration_wow.livemd index d996d809..bee35ebe 100644 --- a/docs/migration_wow.livemd +++ b/docs/migration_wow.livemd @@ -49,44 +49,7 @@ Vyasa.Release.migrate() ```elixir Path.expand(mypath, "data") |> Vyasa.Corpus.Migrator.Restore.read() -# |> Vyasa.Written.create_source() -|> Enum.map(fn x -> - # &1["translations"] - e = - x["events"] - |> Enum.group_by(fn map -> map["voice_id"] end) - - t = - x["translations"] - |> Enum.group_by(fn m -> {m["type"], m["verse_id"] || m["chapter_no"]} end) - - v = - x["voices"] - |> Enum.group_by(fn m -> m["chapter_no"] end) - - # Map.keys(x) - %{ - x - | "chapters" => - Enum.map(x["chapters"], fn %{"no" => no} = c -> - c - |> Map.put("translations", t[{"chapters", no}]) - |> Map.put( - "voices", - (is_list(v[no]) && v[no] |> Enum.map(fn %{"id" => id} = v -> v end)) || [] - ) - end), - "verses" => - Enum.map(x["verses"], fn %{"id" => id} = v -> - v |> Map.put("translations", t[{"verses", id}]) - end) - } -end) -|> Enum.map( - &(%Vyasa.Written.Source{} - |> Vyasa.Written.Source.gen_changeset(&1) - |> Vyasa.Repo.insert!()) -) +|> Vyasa.Corpus.Migrator.Restore.run() ``` #### Migrates the events diff --git a/lib/vyasa/corpus/migrator/restore.ex b/lib/vyasa/corpus/migrator/restore.ex index 739b1317..f4dc4e05 100644 --- a/lib/vyasa/corpus/migrator/restore.ex +++ b/lib/vyasa/corpus/migrator/restore.ex @@ -3,4 +3,47 @@ defmodule Vyasa.Corpus.Migrator.Restore do File.read!(path) |> Jason.decode!() end + + def run(source) do + source + |> Enum.map(fn x -> + t = + x["translations"] + |> Enum.group_by(fn m -> {m["type"], m["verse_id"] || m["chapter_no"]} end) + + v = + x["voices"] + |> Enum.group_by(fn m -> m["chapter_no"] end) + + %{ + x + | "chapters" => + Enum.map(x["chapters"], fn %{"no" => no} = c -> + c + |> Map.put("translations", t[{"chapters", no}]) + |> Map.put( + "voices", + (is_list(v[no]) && v[no] |> Enum.map(fn %{"id" => _} = v -> v end)) || [] + ) + end), + "verses" => + Enum.map(x["verses"], fn %{"id" => id} = v -> + v |> Map.put("translations", t[{"verses", id}]) + end) + } + end) + |> Enum.map( + &(%Vyasa.Written.Source{} + |> Vyasa.Written.Source.gen_changeset(&1) + |> Vyasa.Repo.insert!()) + ) + + # events are dependent on both verse and voice + source + |> Enum.map(fn x -> + # &1["translations"] + x["events"] + |> Enum.map(&(&1 |> Vyasa.Medium.create_event())) + end) + end end From c0805b4917abcc9c0d5037addcbec97afda3ecaf Mon Sep 17 00:00:00 2001 From: ks0m1c_dharma Date: Sat, 17 Aug 2024 02:34:53 +0800 Subject: [PATCH 055/130] fix voice non existo with guard clause --- .../live/display_manager/display_live.ex | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/lib/vyasa_web/live/display_manager/display_live.ex b/lib/vyasa_web/live/display_manager/display_live.ex index 1498ff44..6cbd7d0d 100644 --- a/lib/vyasa_web/live/display_manager/display_live.ex +++ b/lib/vyasa_web/live/display_manager/display_live.ex @@ -486,13 +486,19 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do } } = socket ) do - %Voice{} = chosen_voice = Medium.get_voice(src_id, c_no, @default_voice_lang) - Vyasa.PubSub.publish( - chosen_voice, - :voice_ack, - sess_id - ) + case Medium.get_voice(src_id, c_no, @default_voice_lang) do + %Voice{} = v -> + Vyasa.PubSub.publish( + v, + :voice_ack, + sess_id + ) + + _ -> nil + end + + {:noreply, socket} end From c11a8019d87104a01e7e747ae282cfbf26a8f0b2 Mon Sep 17 00:00:00 2001 From: ks0m1c_dharma Date: Sun, 18 Aug 2024 05:33:33 +0800 Subject: [PATCH 056/130] Vyas Font --- assets/css/app.css | 7 +++++++ assets/tailwind.config.js | 2 +- priv/static/fonts/ta/VyasaTA.ttf | Bin 0 -> 190364 bytes priv/static/fonts/ta/VyasaTA.woff | Bin 0 -> 96116 bytes priv/static/fonts/ta/VyasaTA.woff2 | Bin 0 -> 73180 bytes 5 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 priv/static/fonts/ta/VyasaTA.ttf create mode 100644 priv/static/fonts/ta/VyasaTA.woff create mode 100644 priv/static/fonts/ta/VyasaTA.woff2 diff --git a/assets/css/app.css b/assets/css/app.css index bc948eb1..0cd02679 100644 --- a/assets/css/app.css +++ b/assets/css/app.css @@ -59,6 +59,13 @@ url('/fonts/gotu/Gotu-Regular.ttf') format('ttf'); } +@font-face { + font-family: "Vyas"; + src: url('/fonts/ta/VyasaTA.woff2') format('woff2'), + url('/fonts/ta/VyasaTA.woff') format('woff'), + url('/fonts/ta/VyasaTA.ttf') format('ttf'); +} + /* This file is for your main application CSS */ diff --git a/assets/tailwind.config.js b/assets/tailwind.config.js index 8e66d50d..3e5f712f 100644 --- a/assets/tailwind.config.js +++ b/assets/tailwind.config.js @@ -16,7 +16,7 @@ module.exports = { extend: { fontFamily: { dn: ['"Gotu"', "sans-serif"], - tl: ['"Tamil Font"', "sans-serif"], + tl: ['"Vyas", "sans-serif"'], }, colors: { primary: "var(--color-primary)", diff --git a/priv/static/fonts/ta/VyasaTA.ttf b/priv/static/fonts/ta/VyasaTA.ttf new file mode 100644 index 0000000000000000000000000000000000000000..101a580667d1fd25f92739ec9dea1e295c02f266 GIT binary patch literal 190364 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%0A`ZZcmy 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 aqN#p&{L^yhqxyBn*PQIg?+!lG`2PR^7*^8& literal 0 HcmV?d00001 diff --git a/priv/static/fonts/ta/VyasaTA.woff b/priv/static/fonts/ta/VyasaTA.woff new file mode 100644 index 0000000000000000000000000000000000000000..94d36c99f8afbb9a5cce19476c2c45c73cf9063e GIT binary patch literal 96116 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

bE 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 literal 0 HcmV?d00001 From bceda5b7d0398bf0ba99c2c3f4d997841017f365 Mon Sep 17 00:00:00 2001 From: ks0m1c_dharma Date: Sun, 18 Aug 2024 11:20:47 +0800 Subject: [PATCH 057/130] Script Support --- Dockerfile | 1 + docs/migration_wow.livemd | 4 +- docs/scraper.livemd | 117 +++++++++++++++--- lib/vyasa/written.ex | 8 ++ lib/vyasa/written/source.ex | 6 +- .../components/source_content/verses.ex | 13 +- ...121234321_create_tables_for_gita_clone.exs | 1 + 7 files changed, 127 insertions(+), 23 deletions(-) diff --git a/Dockerfile b/Dockerfile index f596b2a9..ca62e83c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -85,6 +85,7 @@ RUN chown nobody /app # copies over font files, updates debian runner's font cache: RUN echo "...syncing font file(s)" COPY ./priv/static/fonts/gotu/* /usr/share/fonts/truetype/ +COPY ./priv/static/fonts/ta/* /usr/share/fonts/truetype/ RUN apt-get update && apt-get install -y fontconfig RUN fc-cache -f -v RUN echo "...[DONE] syncing font file(s)" diff --git a/docs/migration_wow.livemd b/docs/migration_wow.livemd index bee35ebe..6f8c6061 100644 --- a/docs/migration_wow.livemd +++ b/docs/migration_wow.livemd @@ -36,7 +36,9 @@ R.recompile() ``` ```elixir -Vyasa.Release.rollback(Vyasa.Repo, 0) +# Vyasa.Release.rollback(Vyasa.Repo, 0) + +Ecto.Migrator.run(Vyasa.Repo, :down, all: true) ``` ```elixir diff --git a/docs/scraper.livemd b/docs/scraper.livemd index 67c2ee05..41ae4013 100644 --- a/docs/scraper.livemd +++ b/docs/scraper.livemd @@ -12,16 +12,16 @@ ## Root ```elixir -defmodule R do - def recompile() do - Mix.Task.reenable("app.start") - Mix.Task.reenable("compile") - Mix.Task.reenable("compile.all") - compilers = Mix.compilers() - Enum.each(compilers, &Mix.Task.reenable("compile.#{&1}")) - Mix.Task.run("compile.all") - end -end +# defmodule R do +# def recompile() do +# Mix.Task.reenable("app.start") +# Mix.Task.reenable("compile") +# Mix.Task.reenable("compile.all") +# compilers = Mix.compilers() +# Enum.each(compilers, &Mix.Task.reenable("compile.#{&1}")) +# Mix.Task.run("compile.all") +# end +# end R.recompile() ``` @@ -35,6 +35,88 @@ R.recompile() ``` +## GUPOPE + +```elixir +link = "https://www.projectmadurai.org/pm_etexts/utf8/pmuni0094.html" + +p = + Finch.build(:get, link) + |> Finch.request!(Vyasa.Finch) + |> Map.get(:body) + |> Floki.parse_document!() + |> Floki.find("body") + |> tap(&IO.inspect(&1, limit: :infinity)) +``` + +```elixir +# [{"body", [], body , something}] =p +b = p |> List.first() + +{"body", [], body} = b + +ts = + body + |> Enum.reduce({-1, %{}, []}, fn + # Clear window and start new chapter + {"h3", _, chapter}, {curr, acc, win} when is_list(chapter) -> + IO.inspect(win, label: "remaining window") + {curr + 1, Map.put(acc, curr + 1, %{chapter: List.last(chapter), verse: []}), []} + + {"h3", _, chapter}, {curr, acc, win} -> + IO.inspect(win, label: "remaining window") + {curr + 1, Map.put(acc, curr + 1, %{chapter: chapter}), []} + + # New value in topic, add appropriate topic_map to topic_maps in accumulator + {"center", [], [{"h3", [], list}]}, acc -> + acc + + {_, _, _}, acc -> + # other translations not today + acc + + line, {curr, acc, win} -> + newin = + case Regex.run(~r/\s*(\(?\d+\)?)\s*$/, line) do + [_, verse_number] -> + verse_number = String.replace(verse_number, "(", "") |> String.replace(")", "") + verse_number = String.trim(verse_number) + + f_l = + line + |> String.replace(~r/\s*\(?\d+\)?\s*/, "") + |> String.trim() + + # Allocate the verse to the corresponding number + [{String.to_integer(verse_number), f_l} | win] + + _ -> + # If no verse number, just accumulate the line + [{nil, line} | win] + end + + {curr, acc, newin} + end) +``` + +```elixir +{last, map, win} = ts + +win +|> Enum.reverse() +|> Enum.reduce({0, %{}}, fn + {verse_number, text}, {curr, acc} when is_number(verse_number) -> + {verse_number, Map.update(acc, verse_number, text, fn existing -> [text | existing] end)} + + {nil, text}, {curr, acc} -> + {curr + 1, Map.update(acc, curr + 1, text, fn existing -> [text | existing] end)} +end) + +# |> Enum.map(fn {verse_number, texts} -> +# {verse_number, Enum.reverse(texts)} +# end) +``` + ## Thiruvaasagam ```elixir @@ -165,18 +247,18 @@ t_v = ThiruvaasagamScraper.extract_verses(101, "tamil") # %Vyasa.Written.Source{} # |> Vyasa.Written.Source.gen_changeset(%{title: "Thiruvasagam", chapters: }) - +chapters_e = ThiruvaasagamScraper.scrape("english") chapters_t = ThiruvaasagamScraper.scrape("tamil") ``` ```elixir -chapters_t[:chapters] +chapters_e[:chapters] |> Enum.reduce( [], fn %{number: no, title: title, url: [url]}, [%{number: curr_no, url: curr_url} = curr | acc] when no == curr_no + 100 -> - Map.put(curr, :url, [url | curr_url]) + [Map.put(curr, :url, [url | curr_url]) | acc] %{number: no, title: title, url: url}, acc -> [ @@ -194,14 +276,21 @@ chapters_t[:chapters] ] end ) +|> Enum.find(&(&1.number == 1)) +``` -# |> Enum.find(&(&1.number == 5 )) +```elixir +chapters_e ``` ```elixir t_v = ThiruvaasagamScraper.extract_verses(101, "hindi") ``` +```elixir + +``` + ## Valmiki Ramayana diff --git a/lib/vyasa/written.ex b/lib/vyasa/written.ex index 577d8e96..bc2d7a99 100644 --- a/lib/vyasa/written.ex +++ b/lib/vyasa/written.ex @@ -124,6 +124,7 @@ defmodule Vyasa.Written do preload: [verses: [:translations], chapters: [:translations]] Repo.one(query) + |> lang2script() end def get_chapters_by_src(src_title) do @@ -326,4 +327,11 @@ defmodule Vyasa.Written do def change_source(%Source{} = source, attrs \\ %{}) do Source.mutate_changeset(source, attrs) end + + #Sanskrit + defp lang2script(%Source{lang: "sa"} = s), do: %{s | script: "dn"} + #Awadhi + defp lang2script(%Source{lang: "awadi"} = s), do: %{s | script: "dn"} + #Tamil + defp lang2script(%Source{lang: "ta"} = s), do: %{s | script: "ta"} end diff --git a/lib/vyasa/written/source.ex b/lib/vyasa/written/source.ex index 90d413eb..551ef28b 100644 --- a/lib/vyasa/written/source.ex +++ b/lib/vyasa/written/source.ex @@ -8,6 +8,8 @@ defmodule Vyasa.Written.Source do @primary_key {:id, Ecto.UUID, autogenerate: true} schema "sources" do field :title, :string + field :lang, :string + field :script, :string, virtual: true has_many :verses, Verse has_many :translations, Translation has_many :chapters, Chapter @@ -20,7 +22,7 @@ defmodule Vyasa.Written.Source do @doc false def gen_changeset(source, attrs) do source - |> cast(attrs, [:id, :title]) + |> cast(attrs, [:id, :title, :lang]) |> cast_assoc(:chapters) |> cast_assoc(:verses) |> validate_required([:title]) @@ -28,7 +30,7 @@ defmodule Vyasa.Written.Source do def mutate_changeset(source, attrs) do source - |> cast(attrs, [:id, :title]) + |> cast(attrs, [:id, :title, :lang]) |> cast_assoc(:chapters) |> cast_assoc(:verses) |> validate_required([:id, :title]) diff --git a/lib/vyasa_web/components/source_content/verses.ex b/lib/vyasa_web/components/source_content/verses.ex index 006a027d..bfb095a3 100644 --- a/lib/vyasa_web/components/source_content/verses.ex +++ b/lib/vyasa_web/components/source_content/verses.ex @@ -19,14 +19,15 @@ defmodule VyasaWeb.Content.Verses do ~H"""

- <.header class="p-4 pb-0"> -
+ <.header class="p-4 pb-0" > + +
@src.script]} > <%= @selected_transl.target.translit_title %> | <%= @chap.title %>
Chapter <%= @chap.no %> - <%= @selected_transl.target.title %>
- + <:subtitle>
<%= @selected_transl.target.body %> @@ -43,7 +44,7 @@ defmodule VyasaWeb.Content.Verses do verse={verse} marks={@marks} > - <:edge title={"#{verse.chapter_no}.#{verse.no}"} field={[:body]} verseup={:big} /> + <:edge title={"#{verse.chapter_no}.#{verse.no}"} field={[:body]} verseup={{:big, @src.script}} /> <:edge node={hd(verse.translations)} field={[:target, :body_translit]} verseup={:mid} /> <:edge @@ -136,8 +137,8 @@ defmodule VyasaWeb.Content.Verses do end # font by lang here - defp verse_class(:big), - do: "font-dn text-lg sm:text-xl" + defp verse_class({:big, script}), + do: "font-#{script} text-lg sm:text-xl" defp verse_class(:mid), do: "font-dn text-m" diff --git a/priv/repo/migrations/20240121234321_create_tables_for_gita_clone.exs b/priv/repo/migrations/20240121234321_create_tables_for_gita_clone.exs index 4b447e25..e707fca0 100644 --- a/priv/repo/migrations/20240121234321_create_tables_for_gita_clone.exs +++ b/priv/repo/migrations/20240121234321_create_tables_for_gita_clone.exs @@ -7,6 +7,7 @@ defmodule Vyasa.Repo.Migrations.CreateTablesForGitaClone do create table(:sources, primary_key: false) do add :id, :uuid, primary_key: true add :title, :string + add :lang, :string timestamps([:utc_datetime]) end From 9352e7437dd8697f6b51c34d6f177f6ee5d8151a Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Sun, 18 Aug 2024 13:01:33 +0800 Subject: [PATCH 058/130] Add fallthrough to devanagari for lang2script --- lib/vyasa/written.ex | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/vyasa/written.ex b/lib/vyasa/written.ex index bc2d7a99..e7453b9a 100644 --- a/lib/vyasa/written.ex +++ b/lib/vyasa/written.ex @@ -328,10 +328,13 @@ defmodule Vyasa.Written do Source.mutate_changeset(source, attrs) end - #Sanskrit + # Sanskrit defp lang2script(%Source{lang: "sa"} = s), do: %{s | script: "dn"} - #Awadhi + # Awadhi defp lang2script(%Source{lang: "awadi"} = s), do: %{s | script: "dn"} - #Tamil + # Tamil defp lang2script(%Source{lang: "ta"} = s), do: %{s | script: "ta"} + + # fallthrough to devanagari + defp lang2script(%Source{} = s), do: %{s | script: "dn"} end From 43d900de2d0f65fb62cc0f92dcbc44301cd11549 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Tue, 20 Aug 2024 16:44:34 +0800 Subject: [PATCH 059/130] Cleanup: extract components into different files --- .../components/source_content/verses.ex | 14 +- .../components/comment_binding.ex | 19 +++ .../display_manager/components/drafting.ex | 62 +++++++ .../components/verse_matrix.ex | 69 ++++++++ .../live/display_manager/display_live.ex | 151 +----------------- 5 files changed, 160 insertions(+), 155 deletions(-) create mode 100644 lib/vyasa_web/live/display_manager/components/comment_binding.ex create mode 100644 lib/vyasa_web/live/display_manager/components/drafting.ex create mode 100644 lib/vyasa_web/live/display_manager/components/verse_matrix.ex diff --git a/lib/vyasa_web/components/source_content/verses.ex b/lib/vyasa_web/components/source_content/verses.ex index bfb095a3..9c7b871f 100644 --- a/lib/vyasa_web/components/source_content/verses.ex +++ b/lib/vyasa_web/components/source_content/verses.ex @@ -13,21 +13,19 @@ defmodule VyasaWeb.Content.Verses do } end - # TODO: navigate() -> patch() on links... @impl true def render(assigns) do ~H"""
- <.header class="p-4 pb-0" > - -
@src.script]} > + <.header class="p-4 pb-0"> +
@src.script]}> <%= @selected_transl.target.translit_title %> | <%= @chap.title %>
Chapter <%= @chap.no %> - <%= @selected_transl.target.title %>
- + <:subtitle>
<%= @selected_transl.target.body %> @@ -44,7 +42,11 @@ defmodule VyasaWeb.Content.Verses do verse={verse} marks={@marks} > - <:edge title={"#{verse.chapter_no}.#{verse.no}"} field={[:body]} verseup={{:big, @src.script}} /> + <:edge + title={"#{verse.chapter_no}.#{verse.no}"} + field={[:body]} + verseup={{:big, @src.script}} + /> <:edge node={hd(verse.translations)} field={[:target, :body_translit]} verseup={:mid} /> <:edge diff --git a/lib/vyasa_web/live/display_manager/components/comment_binding.ex b/lib/vyasa_web/live/display_manager/components/comment_binding.ex new file mode 100644 index 00000000..6fa17f38 --- /dev/null +++ b/lib/vyasa_web/live/display_manager/components/comment_binding.ex @@ -0,0 +1,19 @@ +defmodule VyasaWeb.DisplayManager.Components.CommentBinding do + use VyasaWeb, :html + + def render(assigns) do + assigns = assigns |> assign(:elem_id, "comment-modal-#{Ecto.UUID.generate()}") + + ~H""" + + <%= comment.body %> - <%= comment.signature %> + + """ + end +end diff --git a/lib/vyasa_web/live/display_manager/components/drafting.ex b/lib/vyasa_web/live/display_manager/components/drafting.ex new file mode 100644 index 00000000..252e52c5 --- /dev/null +++ b/lib/vyasa_web/live/display_manager/components/drafting.ex @@ -0,0 +1,62 @@ +defmodule VyasaWeb.DisplayManager.Components.Drafting do + use VyasaWeb, :html + + attr :quote, :string, default: nil + attr :marks, :list, default: [] + + def render(assigns) do + assigns = assigns |> assign(:elem_id, "comment-modal-#{Ecto.UUID.generate()}") + + ~H""" +
+ + <%= mark.binding.window.quote %> + + + <%= mark.body %> - <%= "Self" %> + +
+ + + <%= @quote %> + + +
+ <.form for={%{}} phx-submit="createMark"> + + +
+ +
+
+ """ + end +end diff --git a/lib/vyasa_web/live/display_manager/components/verse_matrix.ex b/lib/vyasa_web/live/display_manager/components/verse_matrix.ex new file mode 100644 index 00000000..55997f0e --- /dev/null +++ b/lib/vyasa_web/live/display_manager/components/verse_matrix.ex @@ -0,0 +1,69 @@ +defmodule VyasaWeb.DisplayManager.Components.VerseMatrix do + use VyasaWeb, :html + alias Utils.Struct + alias VyasaWeb.DisplayManager.Components.CommentBinding + alias VyasaWeb.DisplayManager.Components.Drafting + + # import VyasaWeb.DisplayManager.Components.CommentBinding + # import VyasaWeb.DisplayManager.Components.Drafting + + def render(assigns) do + ~H""" +
+
+
+
+ +
+
+
Enum.join("::")} + class={"text-zinc-700 #{verse_class(elem.verseup)}"} + > + <%= Struct.get_in(Map.get(elem, :node, @verse), elem.field) %> +
+
+ + + + ☙ ——— ›– ❊ –‹ ——— ❧ + + +
+
+
+
+
+ """ + end + + defp verse_class(:big), + do: "font-dn text-lg sm:text-xl" + + defp verse_class(:mid), + do: "font-dn text-m" +end diff --git a/lib/vyasa_web/live/display_manager/display_live.ex b/lib/vyasa_web/live/display_manager/display_live.ex index 6cbd7d0d..4c91f1d0 100644 --- a/lib/vyasa_web/live/display_manager/display_live.ex +++ b/lib/vyasa_web/live/display_manager/display_live.ex @@ -10,7 +10,6 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do alias Vyasa.Medium.{Voice} alias Vyasa.Written.{Source, Chapter} alias Vyasa.Sangh.{Comment, Mark} - alias Utils.Struct @supported_modes UserMode.supported_modes() @default_lang "en" @@ -60,7 +59,6 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do IO.inspect(:show_sources, label: "TRACE: apply action DM action show_sources:") # IO.inspect(params, label: "TRACE: apply action DM params:") - # TODO: make this into a live component socket |> stream(:sources, Written.list_sources()) |> assign(:content_action, :show_sources) @@ -74,7 +72,6 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do }) end - # TODO: change navigate -> patch on the html side defp apply_action( %Socket{} = socket, :show_chapters, @@ -196,144 +193,6 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do socket end - # ---- CHECKPOINT: all the sangha stuff goes here ---- - - # enum.split() from @verse binding to mark - def verse_matrix(assigns) do - assigns = assigns - - ~H""" -
-
-
-
- -
-
-
Enum.join("::")} - class={"text-zinc-700 #{verse_class(elem.verseup)}"} - > - <%= Struct.get_in(Map.get(elem, :node, @verse), elem.field) %> -
-
- <.comment_binding comments={@verse.comments} /> - - - ☙ ——— ›– ❊ –‹ ——— ❧ - - <.drafting marks={@marks} quote={@verse.binding.window && @verse.binding.window.quote} /> -
-
-
-
-
- """ - end - - # font by lang here - defp verse_class(:big), - do: "font-dn text-lg sm:text-xl" - - defp verse_class(:mid), - do: "font-dn text-m" - - def comment_binding(assigns) do - assigns = assigns |> assign(:elem_id, "comment-modal-#{Ecto.UUID.generate()}") - - ~H""" - - <%= comment.body %> - <%= comment.signature %> - - """ - end - - attr :quote, :string, default: nil - attr :marks, :list, default: [] - - def drafting(assigns) do - assigns = assigns |> assign(:elem_id, "comment-modal-#{Ecto.UUID.generate()}") - - ~H""" -
- - <%= mark.binding.window.quote %> - - - <%= mark.body %> - <%= "Self" %> - -
- - - <%= @quote %> - - -
- <.form for={%{}} phx-submit="createMark"> - - -
- -
-
- """ - end - @impl true def handle_event( "change_mode", @@ -348,10 +207,6 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do |> change_mode(current_mode, target_mode)} end - # CHECKPOINT: event handlers related to hoverrune and stuff - # - # - @impl true @doc """ events @@ -486,7 +341,6 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do } } = socket ) do - case Medium.get_voice(src_id, c_no, @default_voice_lang) do %Voice{} = v -> Vyasa.PubSub.publish( @@ -495,11 +349,10 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do sess_id ) - _ -> nil + _ -> + nil end - - {:noreply, socket} end From 28fca633b6a4ba5564bb1341d4202c3160d6d59f Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Wed, 21 Aug 2024 16:52:35 +0800 Subject: [PATCH 060/130] Kill source_live/ @ks0m1c this is no longer needed since we're doubling down on the explorer paradigm because I unintentionally made the mistake of editing these files while testing something, I realise that leaving this in here may be confusing. As such I'm making this commit just for removal of source_live/ --- .../source_live/chapter/generate_image.ex | 95 ---- .../live/source_live/chapter/index.ex | 423 ------------------ .../live/source_live/chapter/index.html.heex | 54 --- .../live/source_live/chapter/show_verse.ex | 37 -- .../source_live/chapter/show_verse.html.heex | 77 ---- lib/vyasa_web/live/source_live/index.ex | 42 -- .../live/source_live/index.html.heex | 19 - lib/vyasa_web/live/source_live/show.ex | 83 ---- lib/vyasa_web/live/source_live/show.html.heex | 31 -- .../live/source_live/show_verse.html.heex | 68 --- 10 files changed, 929 deletions(-) delete mode 100644 lib/vyasa_web/live/source_live/chapter/generate_image.ex delete mode 100644 lib/vyasa_web/live/source_live/chapter/index.ex delete mode 100644 lib/vyasa_web/live/source_live/chapter/index.html.heex delete mode 100644 lib/vyasa_web/live/source_live/chapter/show_verse.ex delete mode 100644 lib/vyasa_web/live/source_live/chapter/show_verse.html.heex delete mode 100644 lib/vyasa_web/live/source_live/index.ex delete mode 100644 lib/vyasa_web/live/source_live/index.html.heex delete mode 100644 lib/vyasa_web/live/source_live/show.ex delete mode 100644 lib/vyasa_web/live/source_live/show.html.heex delete mode 100644 lib/vyasa_web/live/source_live/show_verse.html.heex diff --git a/lib/vyasa_web/live/source_live/chapter/generate_image.ex b/lib/vyasa_web/live/source_live/chapter/generate_image.ex deleted file mode 100644 index 5ed7d50c..00000000 --- a/lib/vyasa_web/live/source_live/chapter/generate_image.ex +++ /dev/null @@ -1,95 +0,0 @@ -defmodule VyasaWeb.SourceLive.ImageGenerator do - @moduledoc """ - Contains logic for creating images, initially for opengraph purposes mainly. - """ - @fallback_text "Vyasa Project - Indic wisdom distilled into words" - @col_width 20 - alias VyasaWeb.SourceLive.ImageGenerator - alias Vix.Vips.Operation - - @doc """ - Returns a url string that can be used for the open-graph image meta-tag. - Currently stores images locally in a temp directory. - """ - def generate_opengraph_image!(filename, content \\ @fallback_text) do - url = - content - |> generate_svg() - |> write_opengraph_image(filename) - - url - end - - defp write_opengraph_image(svg, filename) do - target_url = System.tmp_dir() |> Path.join(filename) - IO.puts(">> [write_opengraph_image] target url: #{target_url}") - {image, _} = Operation.svgload_buffer!(svg) - - Image.write!(image, target_url) - target_url - end - - def generate_svg(content) do - svg_text_nodes = - content - |> ImageGenerator.wrap_text(@col_width) - |> Enum.with_index() - |> Enum.map(fn - {line, idx} -> get_svg_for_text(line, idx) - end) - |> Enum.join("") - - svg_precursor = """ - - - - - - - - - - """ - - svg_end = """ - - - """ - svg = svg_precursor <> svg_text_nodes <> svg_end - svg - end - - defp get_svg_for_text(text, offset) do - initial_y = 250 - vert_line_space = 90 - y_resolved = Integer.to_string(initial_y + vert_line_space * offset) - - """ - #{text} - """ - end - - @doc """ - Manually wraps a text to width of size @col_width. - """ - def wrap_text(text, col_length \\ @col_width) do - words = String.split(text, " ") - - Enum.reduce(words, [], fn word, acc_lines -> - IO.puts("[word:] #{word}") - curr_line = List.last(acc_lines, "") - new_combined_line = curr_line <> " " <> word - has_space_in_curr_line = String.length(new_combined_line) <= col_length - - if has_space_in_curr_line do - if acc_lines == [] do - [word] - else - List.replace_at(acc_lines, length(acc_lines) - 1, new_combined_line) - end - else - acc_lines ++ [word] - end - end) - end -end diff --git a/lib/vyasa_web/live/source_live/chapter/index.ex b/lib/vyasa_web/live/source_live/chapter/index.ex deleted file mode 100644 index 045c93ec..00000000 --- a/lib/vyasa_web/live/source_live/chapter/index.ex +++ /dev/null @@ -1,423 +0,0 @@ -defmodule VyasaWeb.SourceLive.Chapter.Index do - # use VyasaWeb, {:live_view, layout: {VyasaWeb.Layouts, :content_layout}} - use VyasaWeb, :live_view - alias Vyasa.{Written, Medium, Draft} - alias Vyasa.Medium.{Voice} - alias Vyasa.Written.{Source, Chapter} - alias VyasaWeb.OgImageController - alias Utils.Struct - alias Vyasa.Sangh.{Comment, Mark} - - @default_lang "en" - @default_voice_lang "sa" - - @impl true - def mount(_params, _session, socket) do - {:ok, socket} - end - - @impl true - def handle_params(params, _url, socket) do - {:noreply, - socket - |> sync_session() - |> apply_action(socket.assigns.live_action, params)} - end - - defp sync_session(%{assigns: %{session: %{"id" => sess_id}}} = socket) do - # written channel for reading and media channel for writing to media bridge and to player - Vyasa.PubSub.subscribe("written:session:" <> sess_id) - Vyasa.PubSub.publish(:init, :written_handshake, "media:session:" <> sess_id) - socket - end - - defp sync_session(socket), do: socket - - defp apply_action( - socket, - :index, - %{"source_title" => source_title, "chap_no" => chap_no} = _params - ) do - with %Source{id: sid} = source <- Written.get_source_by_title(source_title), - %{verses: verses, translations: [ts | _]} = chap <- - Written.get_chapter(chap_no, sid, @default_lang) do - socket - |> stream_configure(:verses, dom_id: &"verse-#{&1.id}") - |> stream(:verses, verses) - |> assign( - :kv_verses, - Enum.into( - verses, - %{}, - &{&1.id, - %{ - &1 - | comments: [ - %Comment{signature: "Pope", body: "Achilles’ wrath, to Greece the direful spring - Of woes unnumber’d, heavenly goddess, sing"} - ] - }} - ) - ) - |> assign(:src, source) - |> assign(:marks, [%Mark{state: :draft, order: 0}]) - |> assign(:lang, @default_lang) - |> assign(:chap, chap) - |> assign(:selected_transl, ts) - |> assign_meta() - else - _ -> raise VyasaWeb.ErrorHTML.FourOFour, message: "Chapter not Found" - end - end - - @impl true - @doc """ - events - - "clickVersetoSeek" -> - Handles the action of clicking to seek by emitting the verse_id to the live player - via the pubsub system. - - "binding" - """ - def handle_event( - "clickVerseToSeek", - %{"verse_id" => verse_id} = _payload, - %{assigns: %{session: %{"id" => sess_id}}} = socket - ) do - IO.inspect("handle_event::clickVerseToSeek", label: "checkpoint") - Vyasa.PubSub.publish(%{verse_id: verse_id}, :playback_sync, "media:session:" <> sess_id) - {:noreply, socket} - end - - @impl true - def handle_event( - "bindHoveRune", - %{"binding" => bind = %{"verse_id" => verse_id}}, - %{ - assigns: %{ - kv_verses: verses, - marks: [%Mark{state: :draft, verse_id: curr_verse_id} = d_mark | marks] - } - } = socket - ) - when is_binary(curr_verse_id) and verse_id != curr_verse_id do - # binding here blocks the stream from appending to quote - bind = Draft.bind_node(bind) - - {:noreply, - socket - |> stream_insert( - :verses, - %{verses[curr_verse_id] | binding: nil} - ) - |> stream_insert( - :verses, - %{verses[verse_id] | binding: bind} - ) - |> assign(:marks, [%{d_mark | binding: bind, verse_id: verse_id} | marks])} - end - - # already in mark in drafting state, remember to late bind binding => with a fn() - def handle_event( - "bindHoveRune", - %{"binding" => bind = %{"verse_id" => verse_id}}, - %{assigns: %{kv_verses: verses, marks: [%Mark{state: :draft} = d_mark | marks]}} = socket - ) do - # binding here blocks the stream from appending to quote - bind = Draft.bind_node(bind) - - {:noreply, - socket - |> stream_insert( - :verses, - %{verses[verse_id] | binding: bind} - ) - |> assign(:marks, [%{d_mark | binding: bind, verse_id: verse_id} | marks])} - end - - @impl true - def handle_event( - "bindHoveRune", - %{"binding" => bind = %{"verse_id" => verse_id}}, - %{assigns: %{kv_verses: verses, marks: [%Mark{order: no} | _] = marks}} = socket - ) do - bind = Draft.bind_node(bind) - - {:noreply, - socket - |> stream_insert( - :verses, - %{verses[verse_id] | binding: bind} - ) - |> assign(:marks, [ - %Mark{state: :draft, order: no + 1, verse_id: verse_id, binding: bind} | marks - ])} - end - - @impl true - def handle_event( - "markQuote", - _, - %{assigns: %{marks: [%Mark{state: :draft} = d_mark | marks]}} = socket - ) do - IO.inspect(marks) - {:noreply, socket |> assign(:marks, [%{d_mark | state: :live} | marks])} - end - - def handle_event("markQuote", _, socket) do - {:noreply, socket} - end - - def handle_event( - "createMark", - %{"body" => body}, - %{assigns: %{marks: [%Mark{state: :draft} = d_mark | marks]}} = socket - ) do - {:noreply, socket |> assign(:marks, [%{d_mark | body: body, state: :live} | marks])} - end - - def handle_event("createMark", _event, socket) do - {:noreply, socket} - end - - def handle_event(event, message, socket) do - IO.inspect(%{event: event, message: message}, label: "pokemon") - {:noreply, socket} - end - - @doc """ - Handles the custom message that corresponds to the :media_handshake event with the :init - message, regardless of the module that dispatched the message. - - This indicates an intention to sync the media library with the chapter, hence it - returns a message containing %Voice{} info that can be used to generate a playback struct. - """ - @impl true - def handle_info( - {_, :media_handshake, :init} = _msg, - %{ - assigns: %{ - session: %{"id" => sess_id}, - chap: %Written.Chapter{no: c_no, source_id: src_id} - } - } = socket - ) do - %Voice{} = chosen_voice = Medium.get_voice(src_id, c_no, @default_voice_lang) - - Vyasa.PubSub.publish( - chosen_voice, - :voice_ack, - sess_id - ) - - {:noreply, socket} - end - - def handle_info(msg, socket) do - IO.inspect(msg, label: "unexpected message in @chapter") - {:noreply, socket} - end - - defp assign_meta( - %{ - assigns: %{ - chap: - %Chapter{ - no: chap_no, - title: chap_title, - body: chap_body - } = chap, - src: src - } - } = socket - ) do - fmted_title = to_title_case(src.title) - - socket - |> assign(:page_title, "#{fmted_title} Chapter #{chap_no} | #{chap_title}") - |> assign(:meta, %{ - title: "#{fmted_title} Chapter #{chap_no} | #{chap_title}", - description: chap_body, - type: "website", - image: url(~p"/og/#{OgImageController.get_by_binding(%{chapter: chap, source: src})}"), - url: url(socket, ~p"/explore/#{src.title}/#{chap_no}") - }) - end - - defp assign_meta(socket), do: socket - - # TODO verse matrix id structure build hashed node ref from node and node_id, field pairs - # all comments where bindings -> where source and chapter - # construct flat map access head via verse_id => %{node_assocs => %{node_id => }} for existing bindings based comments (r)a - # create bindings based on node and node_id with the comment (w) - - @doc """ - Renders Abstract Verse Matrix - - ## Examples - <.verse_display> - <:item title="Title" navigate={~p"/myPath"}><%= @post.title %> - - """ - attr :id, :string, required: false - attr :verse, :any, required: true - attr :marks, :any - - slot :edge, required: true do - attr :title, :string - - attr(:node, :any, - required: false, - doc: "Written Nodes linked to Verse" - ) - - attr :field, :list - - attr(:verseup, :atom, - values: ~w(big mid smol)a, - doc: "Markup Style" - ) - - attr :navigate, :any, required: false - end - - # enum.split() from @verse binding to mark - def verse_matrix(assigns) do - assigns = assigns - - ~H""" -
-
-
-
- -
-
-
Enum.join("::")} - class={"text-zinc-700 #{verse_class(elem.verseup)}"} - > - <%= Struct.get_in(Map.get(elem, :node, @verse), elem.field) %> -
-
- <.comment_binding comments={@verse.comments} /> - - - ☙ ——— ›– ❊ –‹ ——— ❧ - - <.drafting marks={@marks} quote={@verse.binding.window && @verse.binding.window.quote} /> -
-
-
-
-
- """ - end - - # font by lang here - defp verse_class(:big), - do: "font-dn text-lg sm:text-xl" - - defp verse_class(:mid), - do: "font-dn text-m" - - attr :class, :string, default: nil - attr :comments, :any, default: nil - - def comment_binding(assigns) do - assigns = assigns |> assign(:elem_id, "comment-modal-#{Ecto.UUID.generate()}") - - ~H""" - - <%= comment.body %> - <%= comment.signature %> - - """ - end - - attr :quote, :string, default: nil - attr :marks, :list, default: [] - - def drafting(assigns) do - assigns = assigns |> assign(:elem_id, "comment-modal-#{Ecto.UUID.generate()}") - - ~H""" -
- - <%= mark.binding.window.quote %> - - - <%= mark.body %> - <%= "Self" %> - -
- - - <%= @quote %> - - -
- <.form for={%{}} phx-submit="createMark"> - - -
- -
-
- """ - end -end diff --git a/lib/vyasa_web/live/source_live/chapter/index.html.heex b/lib/vyasa_web/live/source_live/chapter/index.html.heex deleted file mode 100644 index 7b18e83d..00000000 --- a/lib/vyasa_web/live/source_live/chapter/index.html.heex +++ /dev/null @@ -1,54 +0,0 @@ -
- <.header class="p-4 pb-0"> -
- <%= @selected_transl.target.translit_title %> | <%= @chap.title%> -
-
- Chapter <%= @chap.no%> - <%= @selected_transl.target.title %> -
- - <:subtitle> -
- <%= @selected_transl.target.body %> -
- - -
- <.verse_matrix id={dom_id} verse={verse} :for={{dom_id, %Written.Verse{} = verse} <- @streams.verses} marks={@marks}> - <:edge - title={"#{verse.chapter_no}.#{verse.no}"} - field={[:body]} - verseup={:big}/> - <:edge - node={hd(verse.translations)} - field={[:target, :body_translit]} - verseup={:mid}/> - - <:edge - node={hd(verse.translations)} - field={[:target, :body_translit_meant]} - verseup={:mid}/> - - <:edge - node={hd(verse.translations)} - field={[:target, :body]} - verseup={:mid}/> - -
- <.back navigate={~p"/explore/#{@src.title}"}>Back to <%= to_title_case(@src.title)%> Chapters -
- - diff --git a/lib/vyasa_web/live/source_live/chapter/show_verse.ex b/lib/vyasa_web/live/source_live/chapter/show_verse.ex deleted file mode 100644 index 7ba33add..00000000 --- a/lib/vyasa_web/live/source_live/chapter/show_verse.ex +++ /dev/null @@ -1,37 +0,0 @@ -defmodule VyasaWeb.SourceLive.Chapter.ShowVerse do - use VyasaWeb, :live_view - alias Vyasa.Written - - @impl true - def mount(_params, _session, socket) do - {:ok, socket} - end - - @impl true - def handle_params(%{"source_title" => source_title, "chap_no" => chap_no, "verse_no" => verse_no}, _, socket) do - verse = get_verse_via_url_params(String.to_integer(verse_no), chap_no, source_title) - - en_translation = verse.translations |> Enum.find(fn t -> t.lang == "en" end) - - {:noreply, - socket - |> assign(:source_title, source_title) - |> assign(:chap_no, chap_no) - |> assign(:verse_no, String.to_integer(verse_no)) - |> assign(:verse, verse) - |> assign(:en_translation, en_translation) - # |> assign_meta() - } - # |> assign(:chapter, Written.get_chapter(chap_no, source_id)) - # |> stream(:verses, Gita.verses(chap_no)) - # |> assign(:verse, Gita.verse(chap_no, verse_no)) - # |> assign_meta()} - end - - defp get_verse_via_url_params(verse_no, chap_no, src_title) do - chapter = Written.get_chapter(chap_no, src_title) - chapter.verses - |> Enum.find(fn verse -> verse.no == verse_no end) - |> Vyasa.Repo.preload([:chapter, :source, :translations]) - end -end diff --git a/lib/vyasa_web/live/source_live/chapter/show_verse.html.heex b/lib/vyasa_web/live/source_live/chapter/show_verse.html.heex deleted file mode 100644 index 2665e291..00000000 --- a/lib/vyasa_web/live/source_live/chapter/show_verse.html.heex +++ /dev/null @@ -1,77 +0,0 @@ - - - -
- <.header> - <:subtitle> - <%= @verse.chapter_no %>:<%= @verse.no %> - -

- <%= @verse.body %> -

- - -

- <%= @en_translation.target.body_translit %> -

- -

- <%= @en_translation.target.body_translit_meant %> -

- -

- hi - <%= @en_translation.target.body %> -

- - -
-
-
- <.button - id="button-YouTubePlayer" - > - Toggle Player - -
- It's me, tooltip content... -
- - <.back navigate={~p"/explore/#{@source_title}/#{@chap_no}"}> - Back to <%= @source_title %> Chapter <%= @verse.chapter_no %> - - <.back navigate={~p"/explore/#{@source_title}"}>Back to <%= @source_title %> Chapters -
- <.live_component - module={VyasaWeb.YouTubePlayer} - id={"YouTubePlayer"} - /> -
-
diff --git a/lib/vyasa_web/live/source_live/index.ex b/lib/vyasa_web/live/source_live/index.ex deleted file mode 100644 index e4dcf870..00000000 --- a/lib/vyasa_web/live/source_live/index.ex +++ /dev/null @@ -1,42 +0,0 @@ -defmodule VyasaWeb.SourceLive.Index do - use VyasaWeb, :live_view - alias Vyasa.Written - - @impl true - def mount(_params, _session, socket) do - {:ok, stream(socket, :sources, Written.list_sources())} - end - - @impl true - def handle_params(params, _url, socket) do - # dbg() - {:noreply, apply_action(socket, socket.assigns.live_action, params)} - end - - defp apply_action(socket, :index, _params) do - socket - |> assign(:page_title, "Sources") - |> assign_meta() - end - - defp assign_meta(socket) do - assign(socket, :meta, %{ - title: "Sources to Explore", - description: "Explore the wealth of indic knowledge, distilled into words.", - type: "website", - image: url(~p"/images/the_vyasa_project_1.png"), - url: url(socket, ~p"/explore/") - }) - end - - @impl true - def handle_event("navigate_to_source", %{"target" => target} = _payload, socket) do - IO.inspect(target, label: "TRACE: push navigate to the following target:") - - {:noreply, - socket - |> push_navigate(to: target)} - - # |> push_patch(to: target)} - end -end diff --git a/lib/vyasa_web/live/source_live/index.html.heex b/lib/vyasa_web/live/source_live/index.html.heex deleted file mode 100644 index 8d76b8ed..00000000 --- a/lib/vyasa_web/live/source_live/index.html.heex +++ /dev/null @@ -1,19 +0,0 @@ - <.header> -
- <%= @page_title %> -
- - - <.table - id="sources" - rows={@streams.sources} - row_click={fn {_id, source} -> JS.push("navigate_to_source", value: %{target: ~p"/explore/#{source.title}/"}) end} - > - <:col :let={{_id, source}} label=""> -
- <%= to_title_case(source.title) %> -
- - - - Enum.count() < 10} class="block h-96"/> diff --git a/lib/vyasa_web/live/source_live/show.ex b/lib/vyasa_web/live/source_live/show.ex deleted file mode 100644 index eb603007..00000000 --- a/lib/vyasa_web/live/source_live/show.ex +++ /dev/null @@ -1,83 +0,0 @@ -defmodule VyasaWeb.SourceLive.Show do - use VyasaWeb, :live_view - alias Vyasa.Written - alias Vyasa.Written.{Chapter} - - @impl true - def mount(_params, _session, socket) do - socket = stream_configure(socket, :chapters, dom_id: &"Chapter-#{&1.no}") - {:ok, socket} - end - - @impl true - def handle_params(%{"source_title" => source_title}, _, socket) do - [%Chapter{source: src} | _] = chapters = Written.get_chapters_by_src(source_title) - - { - :noreply, - socket - |> assign(:source, src) - |> assign(:page_title, to_title_case(src.title)) - |> stream(:chapters, chapters |> Enum.sort_by(fn chap -> chap.no end)) - |> assign_meta() - } - end - - @impl true - def handle_event("navigate_to_chapter", %{"target" => target} = _payload, socket) do - IO.inspect(target, label: "TRACE: navigate_to_chapter:") - - { - :noreply, - socket - |> push_navigate(to: target) - # |> push_patch(to: target) - } - end - - defp assign_meta(%{assigns: %{source: src}} = socket) do - assign(socket, :meta, %{ - title: to_title_case(src.title), - description: "Explore the #{to_title_case(src.title)}", - type: "website", - image: url(~p"/og/#{VyasaWeb.OgImageController.get_by_binding(%{source: src})}"), - url: url(socket, ~p"/explore/#{src.title}") - }) - end - - @doc """ - Renders a clickable verse list. - - ## Examples - <.chapter_list> - <:item title="Title" navigate={~p"/explore/:id/:chapter_id"}> [<%= @chapter.no =>]<%= @chapter.title %> - - """ - slot :item, required: true do - attr :title, :string - attr :navigate, :any, required: false - end - - def chapter_list(assigns) do - ~H""" -
-
-
-
- <.link - navigate={item[:navigate]} - class="text-sm font-semibold leading-6 text-zinc-900 hover:text-zinc-700" - > - <%= item.title %> - -
-
<%= render_slot(item) %>
-
-
-
- """ - end -end diff --git a/lib/vyasa_web/live/source_live/show.html.heex b/lib/vyasa_web/live/source_live/show.html.heex deleted file mode 100644 index cf1e5af6..00000000 --- a/lib/vyasa_web/live/source_live/show.html.heex +++ /dev/null @@ -1,31 +0,0 @@ - -<.header > -
- <%= to_title_case(@source.title)%> -
- - -<.table -id="chapters" -rows={@streams.chapters} -row_click={fn {_id, chap} -> JS.push("navigate_to_chapter", value: %{target: ~p"/explore/#{@source.title}/#{chap.no}/"}) end} -> - <:col :let={{_id, chap}} label="Chapter"> -
- <%= chap.no %>. <%= hd(chap.translations).target.translit_title %> -
- - <:col :let={{_id, chap}} label="Description"> -
- <%= chap.title %> -
-
- <%= hd(chap.translations).target.title %> -
- - - - -<.back navigate={~p"/explore/"}>Back to All Sources - - Enum.count() < 10} class="block h-96"/> diff --git a/lib/vyasa_web/live/source_live/show_verse.html.heex b/lib/vyasa_web/live/source_live/show_verse.html.heex deleted file mode 100644 index 4beef9ee..00000000 --- a/lib/vyasa_web/live/source_live/show_verse.html.heex +++ /dev/null @@ -1,68 +0,0 @@ - - -
- <.header> - <:subtitle><%= @verse.chapter_number %>:<%= @verse.verse_number %> -

<%= @verse.text |> String.split("।।") |> List.first() %>

- -
-

<%= @verse.transliteration %>

-
-

<%= @verse.word_meanings %>

-
- <.button - phx-hook="ShareQuoteButton" - id="ShareQuoteButton" - aria-describedby="tooltip" - data-verse={Jason.encode!(@verse)} - data-share-title={"Gita Chapter #{@verse.chapter_number} #{@verse.title}"} - > - Share - - <.button - id="button-YouTubePlayer" - > - Toggle Player - -
- It's me, tooltip content... -
- - <.back navigate={~p"/explore/#{@source_title}/@{chap_no}"}> - Back to Gita Chapter <%= @verse.chapter_number %> - - <.back navigate={~p"/explore/#{@source_title}"}>Back to <%= @source_title %> -
- <.live_component - module={VyasaWeb.YouTubePlayer} - id={"YouTubePlayer"} - /> -
-
From b934fc9c3215577ad64f79f64629060c455b637f Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Thu, 22 Aug 2024 21:20:20 +0800 Subject: [PATCH 061/130] [WIP]: partial impl browser hist popstate handler --- assets/js/app.js | 33 +++++++++---------- assets/js/hooks/index.js | 2 ++ lib/vyasa/display/user_mode.ex | 1 + .../components/source_content/verses.ex | 20 ++++++++++- .../live/display_manager/display_live.ex | 12 +++++++ 5 files changed, 50 insertions(+), 18 deletions(-) diff --git a/assets/js/app.js b/assets/js/app.js index 814026e2..c2b78e0b 100644 --- a/assets/js/app.js +++ b/assets/js/app.js @@ -21,35 +21,34 @@ import "phoenix_html"; import { Socket } from "phoenix"; import { LiveSocket } from "phoenix_live_view"; import topbar from "../vendor/topbar"; -import Hooks from "./hooks"; +import Hooks from "./hooks"; -let csrfToken = document.querySelector("meta[name='csrf-token']").getAttribute( - "content", -); +let csrfToken = document + .querySelector("meta[name='csrf-token']") + .getAttribute("content"); let liveSocket = new LiveSocket("/live", Socket, { longPollFallbackMs: 2500, - params: { _csrf_token: csrfToken, - locale: Intl.NumberFormat().resolvedOptions().locale, - timezone: Intl.DateTimeFormat().resolvedOptions().timeZone, - timezone_offset: -new Date().getTimezoneOffset(), - session: JSON.parse(localStorage.getItem("session")) || {active: true} - }, + params: { + _csrf_token: csrfToken, + locale: Intl.NumberFormat().resolvedOptions().locale, + timezone: Intl.DateTimeFormat().resolvedOptions().timeZone, + timezone_offset: -new Date().getTimezoneOffset(), + session: JSON.parse(localStorage.getItem("session")) || { active: true }, + }, hooks: Hooks, }); - // Show progress bar on live navigation and form submits topbar.config({ barColors: { 0: "#29d" }, shadowColor: "rgba(0, 0, 0, .3)" }); window.addEventListener("phx:page-loading-start", (_info) => topbar.show(300)); window.addEventListener("phx:page-loading-stop", (_info) => topbar.hide()); // Stream our server logs directly to our browser’s console -window.addEventListener("phx:live_reload:attached", ({detail: reloader}) => { - // enable server log streaming to client. - // disable with reloader.disableServerLogs() - reloader.enableServerLogs() - -}) +window.addEventListener("phx:live_reload:attached", ({ detail: reloader }) => { + // enable server log streaming to client. + // disable with reloader.disableServerLogs() + reloader.enableServerLogs(); +}); // connect if there are any LiveViews on the page liveSocket.connect(); diff --git a/assets/js/hooks/index.js b/assets/js/hooks/index.js index 2e312973..0efb9cef 100644 --- a/assets/js/hooks/index.js +++ b/assets/js/hooks/index.js @@ -12,6 +12,7 @@ import ApplyModal from "./apply_modal.js"; import MargiNote from "./marginote.js"; import HoveRune from "./hoverune.js"; import Scrolling from "./scrolling.js"; +import BrowserNavInterceptor from "./browser_nav_interceptor.js"; let Hooks = { ShareQuoteButton, @@ -26,6 +27,7 @@ let Hooks = { MargiNote, HoveRune, Scrolling, + BrowserNavInterceptor, }; export default Hooks; diff --git a/lib/vyasa/display/user_mode.ex b/lib/vyasa/display/user_mode.ex index 319aaee4..79dc0e66 100644 --- a/lib/vyasa/display/user_mode.ex +++ b/lib/vyasa/display/user_mode.ex @@ -23,6 +23,7 @@ defmodule Vyasa.Display.UserMode do ] # defines static aspects of different modes: + # TODO: define mode-specific hoverrune functions here @defs %{ "read" => %{ mode: "read", diff --git a/lib/vyasa_web/components/source_content/verses.ex b/lib/vyasa_web/components/source_content/verses.ex index 9c7b871f..7d3c20f4 100644 --- a/lib/vyasa_web/components/source_content/verses.ex +++ b/lib/vyasa_web/components/source_content/verses.ex @@ -17,7 +17,11 @@ defmodule VyasaWeb.Content.Verses do def render(assigns) do ~H"""
-
+
<.header class="p-4 pb-0">
@src.script]}> <%= @selected_transl.target.translit_title %> | <%= @chap.title %> @@ -234,4 +238,18 @@ defmodule VyasaWeb.Content.Verses do |> push_patch(to: target) |> push_event("scroll-to-top", %{})} end + + @impl true + def handle_event("BrowserNavInterceptor:nav", %{"nav_target" => nav_target}, socket) do + dbg() + + # {:noreply, + # socket + # |> push_patch(to: nav_target)} + + {:noreply, + socket + |> push_patch(to: nav_target) + |> push_event("scroll-to-top", %{})} + end end diff --git a/lib/vyasa_web/live/display_manager/display_live.ex b/lib/vyasa_web/live/display_manager/display_live.ex index 4c91f1d0..3017e4f7 100644 --- a/lib/vyasa_web/live/display_manager/display_live.ex +++ b/lib/vyasa_web/live/display_manager/display_live.ex @@ -302,10 +302,12 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do {:noreply, socket |> assign(:marks, [%{d_mark | state: :live} | marks])} end + @impl true def handle_event("markQuote", _, socket) do {:noreply, socket} end + @impl true def handle_event( "createMark", %{"body" => body}, @@ -314,10 +316,20 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do {:noreply, socket |> assign(:marks, [%{d_mark | body: body, state: :live} | marks])} end + @impl true def handle_event("createMark", _event, socket) do {:noreply, socket} end + @impl true + def handle_event("BrowserNavInterceptor:nav", %{"nav_target" => nav_target}, socket) do + dbg() + + {:noreply, + socket + |> push_patch(to: nav_target)} + end + def handle_event(event, message, socket) do IO.inspect(%{event: event, message: message}, label: "pokemon") {:noreply, socket} From 2e214327ccb2852df9b5d98e1f8093d174360683 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Fri, 23 Aug 2024 10:43:52 +0800 Subject: [PATCH 062/130] Add missing file for BrowserNavInterceptor hook --- assets/js/hooks/browser_nav_interceptor.js | 28 ++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 assets/js/hooks/browser_nav_interceptor.js diff --git a/assets/js/hooks/browser_nav_interceptor.js b/assets/js/hooks/browser_nav_interceptor.js new file mode 100644 index 00000000..e00d441c --- /dev/null +++ b/assets/js/hooks/browser_nav_interceptor.js @@ -0,0 +1,28 @@ +/** + * This hooks intercepts browser navigation actions and pipes it to server actions instead. + * */ +BrowserNavInterceptor = { + mounted() { + console.log("TRACE: Interceptor mounted"); + window.addEventListener("popstate", this.handleStatePop.bind(this)); + }, + destroyed() { + console.log("TRACE: Interceptor destroyed"); + window.removeEventListener("popstate", this.handleStatePop.bind(this)); + }, + handleStatePop(e) { + const { navTarget } = this.el.dataset; + console.log("TRACE: Handle state pop", { navTarget, e }); + e.preventDefault(); + // this.pushEvent("BrowserNavInterceptor:nav", { nav_target: navTarget }); + this.pushEvent("BrowserNavInterceptor:nav", { nav_target: navTarget }); + if (e.state) { + console.log( + "TRACE: User navigated using the browser buttons. Detected using popstate event.", + ); + // You can perform additional actions here, such as updating the UI + } + }, +}; + +export default BrowserNavInterceptor; From 5b1a9bee9b5a11dba405c98b76bed6fe44c4822e Mon Sep 17 00:00:00 2001 From: ks0m1c_dharma Date: Fri, 23 Aug 2024 18:43:26 +0800 Subject: [PATCH 063/130] LiveAdmin unblock --- mix.exs | 4 ++-- mix.lock | 22 +++++++++++----------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/mix.exs b/mix.exs index 2d2eddc1..2aff681c 100644 --- a/mix.exs +++ b/mix.exs @@ -47,7 +47,7 @@ defmodule Vyasa.MixProject do {:postgrex, ">= 0.0.0"}, {:phoenix_html, "~> 4.0"}, {:phoenix_live_reload, "~> 1.5", only: :dev}, - {:phoenix_live_view, "~> 0.20.17"}, + {:phoenix_live_view, github: "phoenixframework/phoenix_live_view", tag: "440fd04", override: true}, {:floki, ">= 0.30.0"}, {:phoenix_live_dashboard, "~> 0.8.2"}, {:esbuild, "~> 0.8", runtime: Mix.env() == :dev}, @@ -67,7 +67,7 @@ defmodule Vyasa.MixProject do {:cors_plug, "~> 3.0"}, {:ex_aws, "~> 2.0"}, {:ex_aws_s3, "~> 2.5"}, - {:live_admin, "~> 0.12"}, + {:live_admin, github: "ks0m1c/live_admin", tag: "895fbaa"}, {:req, "~> 0.4.0"}, {:recase, "~> 0.5"}, {:timex, "~> 3.0"} diff --git a/mix.lock b/mix.lock index f3e1bfdf..6e633808 100644 --- a/mix.lock +++ b/mix.lock @@ -10,27 +10,27 @@ "db_connection": {:hex, :db_connection, "2.7.0", "b99faa9291bb09892c7da373bb82cba59aefa9b36300f6145c5f201c7adf48ec", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "dcf08f31b2701f857dfc787fbad78223d61a32204f217f15e881dd93e4bdd3ff"}, "decimal": {:hex, :decimal, "2.1.1", "5611dca5d4b2c3dd497dec8f68751f1f1a54755e8ed2a966c2633cf885973ad6", [:mix], [], "hexpm", "53cfe5f497ed0e7771ae1a475575603d77425099ba5faef9394932b35020ffcc"}, "dns_cluster": {:hex, :dns_cluster, "0.1.3", "0bc20a2c88ed6cc494f2964075c359f8c2d00e1bf25518a6a6c7fd277c9b0c66", [:mix], [], "hexpm", "46cb7c4a1b3e52c7ad4cbe33ca5079fbde4840dedeafca2baf77996c2da1bc33"}, - "ecto": {:hex, :ecto, "3.11.2", "e1d26be989db350a633667c5cda9c3d115ae779b66da567c68c80cfb26a8c9ee", [:mix], [{:decimal, "~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "3c38bca2c6f8d8023f2145326cc8a80100c3ffe4dcbd9842ff867f7fc6156c65"}, + "ecto": {:hex, :ecto, "3.12.1", "626765f7066589de6fa09e0876a253ff60c3d00870dd3a1cd696e2ba67bfceea", [:mix], [{:decimal, "~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "df0045ab9d87be947228e05a8d153f3e06e0d05ab10c3b3cc557d2f7243d1940"}, "ecto_ltree": {:hex, :ecto_ltree, "0.4.0", "9724f7ca0033a5c357100de96d06a027674b7aafce199ca70be712f86739ff6c", [:mix], [{:ecto, "~> 3.2", [hex: :ecto, repo: "hexpm", optional: false]}, {:postgrex, ">= 0.0.0", [hex: :postgrex, repo: "hexpm", optional: false]}], "hexpm", "f708c3415d63da5c9bf83a58c92b3281727886483083f4af7c131b1501bab659"}, - "ecto_sql": {:hex, :ecto_sql, "3.11.3", "4eb7348ff8101fbc4e6bbc5a4404a24fecbe73a3372d16569526b0cf34ebc195", [:mix], [{:db_connection, "~> 2.4.1 or ~> 2.5", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.11.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.6", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.16 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1 or ~> 2.2", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "e5f36e3d736b99c7fee3e631333b8394ade4bafe9d96d35669fca2d81c2be928"}, + "ecto_sql": {:hex, :ecto_sql, "3.12.0", "73cea17edfa54bde76ee8561b30d29ea08f630959685006d9c6e7d1e59113b7d", [:mix], [{:db_connection, "~> 2.4.1 or ~> 2.5", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.12", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.7", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.19 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1 or ~> 2.2", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "dc9e4d206f274f3947e96142a8fdc5f69a2a6a9abb4649ef5c882323b6d512f0"}, "elixir_make": {:hex, :elixir_make, "0.8.4", "4960a03ce79081dee8fe119d80ad372c4e7badb84c493cc75983f9d3bc8bde0f", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:certifi, "~> 2.0", [hex: :certifi, repo: "hexpm", optional: true]}], "hexpm", "6e7f1d619b5f61dfabd0a20aa268e575572b542ac31723293a4c1a567d5ef040"}, "esbuild": {:hex, :esbuild, "0.8.1", "0cbf919f0eccb136d2eeef0df49c4acf55336de864e63594adcea3814f3edf41", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}, {:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "25fc876a67c13cb0a776e7b5d7974851556baeda2085296c14ab48555ea7560f"}, "ex_aws": {:hex, :ex_aws, "2.5.4", "86c5bb870a49e0ab6f5aa5dd58cf505f09d2624ebe17530db3c1b61c88a673af", [:mix], [{:configparser_ex, "~> 4.0", [hex: :configparser_ex, repo: "hexpm", optional: true]}, {:hackney, "~> 1.16", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: true]}, {:jsx, "~> 2.8 or ~> 3.0", [hex: :jsx, repo: "hexpm", optional: true]}, {:mime, "~> 1.2 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:sweet_xml, "~> 0.7", [hex: :sweet_xml, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "e82bd0091bb9a5bb190139599f922ff3fc7aebcca4374d65c99c4e23aa6d1625"}, "ex_aws_s3": {:hex, :ex_aws_s3, "2.5.3", "422468e5c3e1a4da5298e66c3468b465cfd354b842e512cb1f6fbbe4e2f5bdaf", [:mix], [{:ex_aws, "~> 2.0", [hex: :ex_aws, repo: "hexpm", optional: false]}, {:sweet_xml, ">= 0.0.0", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm", "4f09dd372cc386550e484808c5ac5027766c8d0cd8271ccc578b82ee6ef4f3b8"}, - "expo": {:hex, :expo, "0.5.2", "beba786aab8e3c5431813d7a44b828e7b922bfa431d6bfbada0904535342efe2", [:mix], [], "hexpm", "8c9bfa06ca017c9cb4020fabe980bc7fdb1aaec059fd004c2ab3bff03b1c599c"}, - "file_system": {:hex, :file_system, "1.0.0", "b689cc7dcee665f774de94b5a832e578bd7963c8e637ef940cd44327db7de2cd", [:mix], [], "hexpm", "6752092d66aec5a10e662aefeed8ddb9531d79db0bc145bb8c40325ca1d8536d"}, + "expo": {:hex, :expo, "1.0.0", "647639267e088717232f4d4451526e7a9de31a3402af7fcbda09b27e9a10395a", [:mix], [], "hexpm", "18d2093d344d97678e8a331ca0391e85d29816f9664a25653fd7e6166827827c"}, + "file_system": {:hex, :file_system, "1.0.1", "79e8ceaddb0416f8b8cd02a0127bdbababe7bf4a23d2a395b983c1f8b3f73edd", [:mix], [], "hexpm", "4414d1f38863ddf9120720cd976fce5bdde8e91d8283353f0e31850fa89feb9e"}, "finch": {:hex, :finch, "0.18.0", "944ac7d34d0bd2ac8998f79f7a811b21d87d911e77a786bc5810adb75632ada4", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: false]}, {:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 1.3", [hex: :mint, repo: "hexpm", optional: false]}, {:nimble_options, "~> 0.4 or ~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 0.2.6 or ~> 1.0", [hex: :nimble_pool, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "69f5045b042e531e53edc2574f15e25e735b522c37e2ddb766e15b979e03aa65"}, "floki": {:hex, :floki, "0.36.2", "a7da0193538c93f937714a6704369711998a51a6164a222d710ebd54020aa7a3", [:mix], [], "hexpm", "a8766c0bc92f074e5cb36c4f9961982eda84c5d2b8e979ca67f5c268ec8ed580"}, "fss": {:hex, :fss, "0.1.1", "9db2344dbbb5d555ce442ac7c2f82dd975b605b50d169314a20f08ed21e08642", [:mix], [], "hexpm", "78ad5955c7919c3764065b21144913df7515d52e228c09427a004afe9c1a16b0"}, - "gettext": {:hex, :gettext, "0.24.0", "6f4d90ac5f3111673cbefc4ebee96fe5f37a114861ab8c7b7d5b30a1108ce6d8", [:mix], [{:expo, "~> 0.5.1", [hex: :expo, repo: "hexpm", optional: false]}], "hexpm", "bdf75cdfcbe9e4622dd18e034b227d77dd17f0f133853a1c73b97b3d6c770e8b"}, + "gettext": {:hex, :gettext, "0.26.1", "38e14ea5dcf962d1fc9f361b63ea07c0ce715a8ef1f9e82d3dfb8e67e0416715", [:mix], [{:expo, "~> 0.5.1 or ~> 1.0", [hex: :expo, repo: "hexpm", optional: false]}], "hexpm", "01ce56f188b9dc28780a52783d6529ad2bc7124f9744e571e1ee4ea88bf08734"}, "hackney": {:hex, :hackney, "1.20.1", "8d97aec62ddddd757d128bfd1df6c5861093419f8f7a4223823537bad5d064e2", [:rebar3], [{:certifi, "~> 2.12.0", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "~> 6.1.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "~> 1.0.0", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~> 1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:parse_trans, "3.4.1", [hex: :parse_trans, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "~> 1.1.0", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}, {:unicode_util_compat, "~> 0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "fe9094e5f1a2a2c0a7d10918fee36bfec0ec2a979994cff8cfe8058cd9af38e3"}, "hpax": {:hex, :hpax, "1.0.0", "28dcf54509fe2152a3d040e4e3df5b265dcb6cb532029ecbacf4ce52caea3fd2", [:mix], [], "hexpm", "7f1314731d711e2ca5fdc7fd361296593fc2542570b3105595bb0bc6d0fad601"}, "httpoison": {:hex, :httpoison, "2.2.1", "87b7ed6d95db0389f7df02779644171d7319d319178f6680438167d7b69b1f3d", [:mix], [{:hackney, "~> 1.17", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "51364e6d2f429d80e14fe4b5f8e39719cacd03eb3f9a9286e61e216feac2d2df"}, "idna": {:hex, :idna, "6.1.1", "8a63070e9f7d0c62eb9d9fcb360a7de382448200fbbd1b106cc96d3d8099df8d", [:rebar3], [{:unicode_util_compat, "~> 0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "92376eb7894412ed19ac475e4a86f7b413c1b9fbb5bd16dccd57934157944cea"}, - "image": {:hex, :image, "0.53.0", "77ba25c41992a2f230ef991040e110a0558badc22d83cb9a0faf9b68209a3961", [:mix], [{:bumblebee, "~> 0.3", [hex: :bumblebee, repo: "hexpm", optional: true]}, {:evision, "~> 0.1.33 or ~> 0.2", [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.13", [hex: :kino, repo: "hexpm", optional: true]}, {:nx, "~> 0.7", [hex: :nx, repo: "hexpm", optional: true]}, {:nx_image, "~> 0.1", [hex: :nx_image, repo: "hexpm", optional: true]}, {:phoenix_html, "~> 2.1 or ~> 3.2 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:plug, "~> 1.13", [hex: :plug, repo: "hexpm", optional: true]}, {:req, "~> 0.4", [hex: :req, repo: "hexpm", optional: true]}, {:rustler, "> 0.0.0", [hex: :rustler, repo: "hexpm", optional: true]}, {:scholar, "~> 0.3", [hex: :scholar, 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", "ce06fff64b4dcf34a64c2b0dc907d0ce51cca85566912a9d5b8ec3378fe3e902"}, + "image": {:hex, :image, "0.54.1", "3b4e55a321f73d45d0c639aab222606516df3e1d0a266eab6192a924402e3af1", [:mix], [{:bumblebee, "~> 0.3", [hex: :bumblebee, repo: "hexpm", optional: true]}, {:evision, "~> 0.1.33 or ~> 0.2", [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.13", [hex: :kino, repo: "hexpm", optional: true]}, {:nx, "~> 0.7", [hex: :nx, repo: "hexpm", optional: true]}, {:nx_image, "~> 0.1", [hex: :nx_image, repo: "hexpm", optional: true]}, {:phoenix_html, "~> 2.1 or ~> 3.2 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:plug, "~> 1.13", [hex: :plug, repo: "hexpm", optional: true]}, {:req, "~> 0.4", [hex: :req, repo: "hexpm", optional: true]}, {:rustler, "> 0.0.0", [hex: :rustler, repo: "hexpm", optional: true]}, {:scholar, "~> 0.3", [hex: :scholar, 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", "77389da9a651e32a77d8f5366dd8b8a85834a6f6bd553f9d4fb4bb6e39a51405"}, "jason": {:hex, :jason, "1.4.4", "b9226785a9aa77b6857ca22832cffa5d5011a667207eb2a0ad56adb5db443b8a", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "c5eb0cab91f094599f94d55bc63409236a8ec69a21a67814529e8d5f6cc90b3b"}, "kino": {:hex, :kino, "0.13.2", "087c8f340734764fc8c70efd43f3155fa47498c78d2d18fa83aaf97373133ade", [:mix], [{:fss, "~> 0.1.0", [hex: :fss, repo: "hexpm", optional: false]}, {:nx, "~> 0.1", [hex: :nx, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: true]}, {:table, "~> 0.1.2", [hex: :table, repo: "hexpm", optional: false]}], "hexpm", "05fb420dae92a81746dcaceceddf235974394486b17cc2704ddbb051072b4617"}, - "live_admin": {:hex, :live_admin, "0.12.0", "c06845564b09c3a5f09545cef6bfd6bd4dd5c32ed82c55472a9274d0bde400d3", [: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]}, {:nimble_options, "~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:phoenix_ecto, "~> 4.4", [hex: :phoenix_ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_html_helpers, "~> 1.0", [hex: :phoenix_html_helpers, repo: "hexpm", optional: false]}, {:phoenix_live_view, ">= 0.20.0 and < 0.21.0", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: false]}], "hexpm", "c04a5e944c72b3ea55b2c5f780b5acbc45f9641004a3ce9eec492a0c68685bc8"}, + "live_admin": {:git, "https://github.com/ks0m1c/live_admin.git", "895fbaa723147b474685f2e9ad8df29c5d655eb4", [tag: "895fbaa"]}, "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm", "69b09adddc4f74a40716ae54d140f93beb0fb8978d8636eaded0c31b6f099f16"}, "mime": {:hex, :mime, "2.0.6", "8f18486773d9b15f95f4f4f1e39b710045fa1de891fada4516559967276e4dc2", [:mix], [], "hexpm", "c9945363a6b26d747389aac3643f8e0e09d30499a138ad64fe8fd1d13d9b153e"}, "mimerl": {:hex, :mimerl, "1.3.0", "d0cd9fc04b9061f82490f6581e0128379830e78535e017f7780f37fea7545726", [:rebar3], [], "hexpm", "a1e15a50d1887217de95f0b9b0793e32853f7c258a5cd227650889b38839fe9d"}, @@ -45,14 +45,14 @@ "phoenix_html_helpers": {:hex, :phoenix_html_helpers, "1.0.1", "7eed85c52eff80a179391036931791ee5d2f713d76a81d0d2c6ebafe1e11e5ec", [:mix], [{:phoenix_html, "~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "cffd2385d1fa4f78b04432df69ab8da63dc5cf63e07b713a4dcf36a3740e3090"}, "phoenix_live_dashboard": {:hex, :phoenix_live_dashboard, "0.8.4", "4508e481f791ce62ec6a096e13b061387158cbeefacca68c6c1928e1305e23ed", [:mix], [{:ecto, "~> 3.6.2 or ~> 3.7", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_mysql_extras, "~> 0.5", [hex: :ecto_mysql_extras, repo: "hexpm", optional: true]}, {:ecto_psql_extras, "~> 0.7", [hex: :ecto_psql_extras, repo: "hexpm", optional: true]}, {:ecto_sqlite3_extras, "~> 1.1.7 or ~> 1.2.0", [hex: :ecto_sqlite3_extras, repo: "hexpm", optional: true]}, {:mime, "~> 1.6 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 0.19 or ~> 1.0", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6 or ~> 1.0", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}], "hexpm", "2984aae96994fbc5c61795a73b8fb58153b41ff934019cfb522343d2d3817d59"}, "phoenix_live_reload": {:hex, :phoenix_live_reload, "1.5.3", "f2161c207fda0e4fb55165f650f7f8db23f02b29e3bff00ff7ef161d6ac1f09d", [:mix], [{:file_system, "~> 0.3 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}], "hexpm", "b4ec9cd73cb01ff1bd1cac92e045d13e7030330b74164297d1aee3907b54803c"}, - "phoenix_live_view": {:hex, :phoenix_live_view, "0.20.17", "f396bbdaf4ba227b82251eb75ac0afa6b3da5e509bc0d030206374237dfc9450", [:mix], [{:floki, "~> 0.36", [hex: :floki, repo: "hexpm", optional: true]}, {: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 or ~> 4.0", [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", "a61d741ffb78c85fdbca0de084da6a48f8ceb5261a79165b5a0b59e5f65ce98b"}, + "phoenix_live_view": {:git, "https://github.com/phoenixframework/phoenix_live_view.git", "440fd0460405c57f61fcc7457ea9f80ff56f1135", [tag: "440fd04"]}, "phoenix_pubsub": {:hex, :phoenix_pubsub, "2.1.3", "3168d78ba41835aecad272d5e8cd51aa87a7ac9eb836eabc42f6e57538e3731d", [:mix], [], "hexpm", "bba06bc1dcfd8cb086759f0edc94a8ba2bc8896d5331a1e2c2902bf8e36ee502"}, "phoenix_template": {:hex, :phoenix_template, "1.0.4", "e2092c132f3b5e5b2d49c96695342eb36d0ed514c5b252a77048d5969330d639", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}], "hexpm", "2c0c81f0e5c6753faf5cca2f229c9709919aba34fab866d3bc05060c9c444206"}, "phoenix_view": {:hex, :phoenix_view, "2.0.4", "b45c9d9cf15b3a1af5fb555c674b525391b6a1fe975f040fb4d913397b31abf4", [: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", "4e992022ce14f31fe57335db27a28154afcc94e9983266835bb3040243eb620b"}, "plug": {:hex, :plug, "1.16.1", "40c74619c12f82736d2214557dedec2e9762029b2438d6d175c5074c933edc9d", [: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", "a13ff6b9006b03d7e33874945b2755253841b238c34071ed85b0e86057f8cddc"}, "plug_cowboy": {:hex, :plug_cowboy, "2.7.1", "87677ffe3b765bc96a89be7960f81703223fe2e21efa42c125fcd0127dd9d6b2", [: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", "02dbd5f9ab571b864ae39418db7811618506256f6d13b4a45037e5fe78dc5de3"}, "plug_crypto": {:hex, :plug_crypto, "2.1.0", "f44309c2b06d249c27c8d3f65cfe08158ade08418cf540fd4f72d4d6863abb7b", [:mix], [], "hexpm", "131216a4b030b8f8ce0f26038bc4421ae60e4bb95c5cf5395e1421437824c4fa"}, - "postgrex": {:hex, :postgrex, "0.18.0", "f34664101eaca11ff24481ed4c378492fed2ff416cd9b06c399e90f321867d7e", [:mix], [{:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:table, "~> 0.1.0", [hex: :table, repo: "hexpm", optional: true]}], "hexpm", "a042989ba1bc1cca7383ebb9e461398e3f89f868c92ce6671feb7ef132a252d1"}, + "postgrex": {:hex, :postgrex, "0.19.1", "73b498508b69aded53907fe48a1fee811be34cc720e69ef4ccd568c8715495ea", [:mix], [{:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:table, "~> 0.1.0", [hex: :table, repo: "hexpm", optional: true]}], "hexpm", "8bac7885a18f381e091ec6caf41bda7bb8c77912bb0e9285212829afe5d8a8f8"}, "ranch": {:hex, :ranch, "1.8.0", "8c7a100a139fd57f17327b6413e4167ac559fbc04ca7448e9be9057311597a1d", [:make, :rebar3], [], "hexpm", "49fbcfd3682fab1f5d109351b61257676da1a2fdbe295904176d5e521a2ddfe5"}, "recase": {:hex, :recase, "0.8.1", "ab98cd35857a86fa5ca99036f575241d71d77d9c2ab0c39aacf1c9b61f6f7d1d", [:mix], [], "hexpm", "9fd8d63e7e43bd9ea385b12364e305778b2bbd92537e95c4b2e26fc507d5e4c2"}, "req": {:hex, :req, "0.4.14", "103de133a076a31044e5458e0f850d5681eef23dfabf3ea34af63212e3b902e2", [:mix], [{:aws_signature, "~> 0.3.2", [hex: :aws_signature, repo: "hexpm", optional: true]}, {:brotli, "~> 0.3.1", [hex: :brotli, repo: "hexpm", optional: true]}, {:ezstd, "~> 1.0", [hex: :ezstd, repo: "hexpm", optional: true]}, {:finch, "~> 0.17", [hex: :finch, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mime, "~> 1.6 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:nimble_csv, "~> 1.0", [hex: :nimble_csv, repo: "hexpm", optional: true]}, {:nimble_ownership, "~> 0.2.0 or ~> 0.3.0", [hex: :nimble_ownership, repo: "hexpm", optional: false]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "2ddd3d33f9ab714ced8d3c15fd03db40c14dbf129003c4a3eb80fac2cc0b1b08"}, @@ -61,7 +61,7 @@ "swoosh": {:hex, :swoosh, "1.16.8", "37112d4430f7054676f7652745676a6acad0e9279d3b052fe69a58c2532a67f8", [:mix], [{:bandit, ">= 1.0.0", [hex: :bandit, repo: "hexpm", optional: true]}, {:cowboy, "~> 1.1 or ~> 2.4", [hex: :cowboy, repo: "hexpm", optional: true]}, {:ex_aws, "~> 2.1", [hex: :ex_aws, repo: "hexpm", optional: true]}, {:finch, "~> 0.6", [hex: :finch, repo: "hexpm", optional: true]}, {:gen_smtp, "~> 0.13 or ~> 1.0", [hex: :gen_smtp, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mail, "~> 0.2", [hex: :mail, repo: "hexpm", optional: true]}, {:mime, "~> 1.1 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mua, "~> 0.2.0", [hex: :mua, repo: "hexpm", optional: true]}, {:multipart, "~> 0.4", [hex: :multipart, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: true]}, {:plug_cowboy, ">= 1.0.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:req, "~> 0.4 or ~> 1.0", [hex: :req, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "33de50fa414c07ed55fcb28e60e72a44496e14f8753e46cbf80e7b15d1adaae2"}, "table": {:hex, :table, "0.1.2", "87ad1125f5b70c5dea0307aa633194083eb5182ec537efc94e96af08937e14a8", [:mix], [], "hexpm", "7e99bc7efef806315c7e65640724bf165c3061cdc5d854060f74468367065029"}, "tailwind": {:hex, :tailwind, "0.2.3", "277f08145d407de49650d0a4685dc062174bdd1ae7731c5f1da86163a24dfcdb", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}], "hexpm", "8e45e7a34a676a7747d04f7913a96c770c85e6be810a1d7f91e713d3a3655b5d"}, - "telemetry": {:hex, :telemetry, "1.2.1", "68fdfe8d8f05a8428483a97d7aab2f268aaff24b49e0f599faa091f1d4e7f61c", [:rebar3], [], "hexpm", "dad9ce9d8effc621708f99eac538ef1cbe05d6a874dd741de2e689c47feafed5"}, + "telemetry": {:hex, :telemetry, "1.3.0", "fedebbae410d715cf8e7062c96a1ef32ec22e764197f70cda73d82778d61e7a2", [:rebar3], [], "hexpm", "7015fc8919dbe63764f4b4b87a95b7c0996bd539e0d499be6ec9d7f3875b79e6"}, "telemetry_metrics": {:hex, :telemetry_metrics, "0.6.2", "2caabe9344ec17eafe5403304771c3539f3b6e2f7fb6a6f602558c825d0d0bfb", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "9b43db0dc33863930b9ef9d27137e78974756f5f198cae18409970ed6fa5b561"}, "telemetry_poller": {:hex, :telemetry_poller, "1.1.0", "58fa7c216257291caaf8d05678c8d01bd45f4bdbc1286838a28c4bb62ef32999", [:rebar3], [{:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "9eb9d9cbfd81cbd7cdd24682f8711b6e2b691289a0de6826e58452f28c103c8f"}, "timex": {:hex, :timex, "3.7.11", "bb95cb4eb1d06e27346325de506bcc6c30f9c6dea40d1ebe390b262fad1862d1", [:mix], [{:combine, "~> 0.10", [hex: :combine, repo: "hexpm", optional: false]}, {:gettext, "~> 0.20", [hex: :gettext, repo: "hexpm", optional: false]}, {:tzdata, "~> 1.1", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm", "8b9024f7efbabaf9bd7aa04f65cf8dcd7c9818ca5737677c7b76acbc6a94d1aa"}, @@ -69,5 +69,5 @@ "unicode_util_compat": {:hex, :unicode_util_compat, "0.7.0", "bc84380c9ab48177092f43ac89e4dfa2c6d62b40b8bd132b1059ecc7232f9a78", [:rebar3], [], "hexpm", "25eee6d67df61960cf6a794239566599b09e17e668d3700247bc498638152521"}, "vix": {:hex, :vix, "0.29.0", "e6afff70c839722aaeb9be924beacc48711289a1090af72a0082f5d2b3a981fb", [:make, :mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: false]}, {:cc_precompiler, "~> 0.1.4 or ~> 0.2", [hex: :cc_precompiler, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.7.3 or ~> 0.8", [hex: :elixir_make, repo: "hexpm", optional: false]}, {:kino, "~> 0.7", [hex: :kino, repo: "hexpm", optional: true]}], "hexpm", "6809f26629afa6fc792fce7f14146e9e2ea1ef71bde92e1ee1318883d5aa48a8"}, "websock": {:hex, :websock, "0.5.3", "2f69a6ebe810328555b6fe5c831a851f485e303a7c8ce6c5f675abeb20ebdadc", [:mix], [], "hexpm", "6105453d7fac22c712ad66fab1d45abdf049868f253cf719b625151460b8b453"}, - "websock_adapter": {:hex, :websock_adapter, "0.5.6", "0437fe56e093fd4ac422de33bf8fc89f7bc1416a3f2d732d8b2c8fd54792fe60", [:mix], [{:bandit, ">= 0.6.0", [hex: :bandit, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.6", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:websock, "~> 0.5", [hex: :websock, repo: "hexpm", optional: false]}], "hexpm", "e04378d26b0af627817ae84c92083b7e97aca3121196679b73c73b99d0d133ea"}, + "websock_adapter": {:hex, :websock_adapter, "0.5.7", "65fa74042530064ef0570b75b43f5c49bb8b235d6515671b3d250022cb8a1f9e", [:mix], [{:bandit, ">= 0.6.0", [hex: :bandit, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.6", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:websock, "~> 0.5", [hex: :websock, repo: "hexpm", optional: false]}], "hexpm", "d0f478ee64deddfec64b800673fd6e0c8888b079d9f3444dd96d2a98383bdbd1"}, } From 44bc1b3874dd555c14d3cfb42beec6db4a07af19 Mon Sep 17 00:00:00 2001 From: ks0m1c_dharma Date: Fri, 23 Aug 2024 19:00:58 +0800 Subject: [PATCH 064/130] Gettext Update Backends --- lib/vyasa_web.ex | 3 +-- lib/vyasa_web/components/core_components.ex | 2 +- lib/vyasa_web/gettext.ex | 2 +- mix.exs | 11 ++++++++++- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/lib/vyasa_web.ex b/lib/vyasa_web.ex index 4bb4bdcb..9a9fb75c 100644 --- a/lib/vyasa_web.ex +++ b/lib/vyasa_web.ex @@ -46,7 +46,6 @@ defmodule VyasaWeb do layouts: [html: VyasaWeb.Layouts] import Plug.Conn - import VyasaWeb.Gettext unquote(verified_routes()) end @@ -107,7 +106,7 @@ defmodule VyasaWeb do import Phoenix.HTML # Core UI components and translation import VyasaWeb.CoreComponents - import VyasaWeb.Gettext + use Gettext, backend: Vyasa.Gettext #String Formating for Display import Utils.String, only: [to_title_case: 1] # Shortcut for generating JS commands diff --git a/lib/vyasa_web/components/core_components.ex b/lib/vyasa_web/components/core_components.ex index 2994d852..315ca02d 100644 --- a/lib/vyasa_web/components/core_components.ex +++ b/lib/vyasa_web/components/core_components.ex @@ -15,9 +15,9 @@ defmodule VyasaWeb.CoreComponents do Icons are provided by [heroicons](https://heroicons.com). See `icon/1` for usage. """ use Phoenix.Component + use Gettext, backend: Vyasa.Gettext alias Phoenix.LiveView.JS - import VyasaWeb.Gettext @doc """ Renders a modal. diff --git a/lib/vyasa_web/gettext.ex b/lib/vyasa_web/gettext.ex index bbcd4c0d..3a0c7957 100644 --- a/lib/vyasa_web/gettext.ex +++ b/lib/vyasa_web/gettext.ex @@ -20,5 +20,5 @@ defmodule VyasaWeb.Gettext do See the [Gettext Docs](https://hexdocs.pm/gettext) for detailed usage. """ - use Gettext, otp_app: :vyasa + use Gettext.Backend, otp_app: :vyasa end diff --git a/mix.exs b/mix.exs index 2aff681c..996f96b6 100644 --- a/mix.exs +++ b/mix.exs @@ -67,13 +67,22 @@ defmodule Vyasa.MixProject do {:cors_plug, "~> 3.0"}, {:ex_aws, "~> 2.0"}, {:ex_aws_s3, "~> 2.5"}, - {:live_admin, github: "ks0m1c/live_admin", tag: "895fbaa"}, + {:live_admin, live_admin_dep()}, {:req, "~> 0.4.0"}, {:recase, "~> 0.5"}, {:timex, "~> 3.0"} ] end + + defp live_admin_dep() do + if path = System.get_env("LA_PATH") do + [path: path] + else + [github: "ks0m1c/live_admin", tag: "8201e03"] + end + end + # Aliases are shortcuts or tasks specific to the current project. # For example, to install project dependencies and perform other setup tasks, run: # From 8f023809def9b6f80b330d888eed9834e5cae853 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Fri, 23 Aug 2024 19:35:10 +0800 Subject: [PATCH 065/130] Change tag->ref, Vyasa.Gettext->VyasaWeb.Gettext --- lib/vyasa_web.ex | 12 ++++-------- lib/vyasa_web/components/core_components.ex | 2 +- mix.exs | 4 ++-- mix.lock | 4 ++-- 4 files changed, 9 insertions(+), 13 deletions(-) diff --git a/lib/vyasa_web.ex b/lib/vyasa_web.ex index 9a9fb75c..e124a6cd 100644 --- a/lib/vyasa_web.ex +++ b/lib/vyasa_web.ex @@ -46,6 +46,7 @@ defmodule VyasaWeb do layouts: [html: VyasaWeb.Layouts] import Plug.Conn + use Gettext, backend: VyasaWeb.Gettext unquote(verified_routes()) end @@ -64,7 +65,6 @@ defmodule VyasaWeb do use Phoenix.LiveView, @opts unquote(html_helpers()) - end end @@ -77,8 +77,6 @@ defmodule VyasaWeb do end end - - def live_component do quote do use Phoenix.LiveComponent @@ -106,8 +104,8 @@ defmodule VyasaWeb do import Phoenix.HTML # Core UI components and translation import VyasaWeb.CoreComponents - use Gettext, backend: Vyasa.Gettext - #String Formating for Display + use Gettext, backend: VyasaWeb.Gettext + # String Formating for Display import Utils.String, only: [to_title_case: 1] # Shortcut for generating JS commands alias Phoenix.LiveView.JS @@ -126,7 +124,6 @@ defmodule VyasaWeb do end end - @doc """ When used, dispatch to the appropriate controller/view/etc. """ @@ -137,5 +134,4 @@ defmodule VyasaWeb do defmacro __using__(which) when is_atom(which) do apply(__MODULE__, which, []) end - - end +end diff --git a/lib/vyasa_web/components/core_components.ex b/lib/vyasa_web/components/core_components.ex index 315ca02d..f9e65f4d 100644 --- a/lib/vyasa_web/components/core_components.ex +++ b/lib/vyasa_web/components/core_components.ex @@ -15,7 +15,7 @@ defmodule VyasaWeb.CoreComponents do Icons are provided by [heroicons](https://heroicons.com). See `icon/1` for usage. """ use Phoenix.Component - use Gettext, backend: Vyasa.Gettext + use Gettext, backend: VyasaWeb.Gettext alias Phoenix.LiveView.JS diff --git a/mix.exs b/mix.exs index 996f96b6..3159d13d 100644 --- a/mix.exs +++ b/mix.exs @@ -47,7 +47,7 @@ defmodule Vyasa.MixProject do {:postgrex, ">= 0.0.0"}, {:phoenix_html, "~> 4.0"}, {:phoenix_live_reload, "~> 1.5", only: :dev}, - {:phoenix_live_view, github: "phoenixframework/phoenix_live_view", tag: "440fd04", override: true}, + {:phoenix_live_view, github: "phoenixframework/phoenix_live_view", ref: "440fd04", override: true}, {:floki, ">= 0.30.0"}, {:phoenix_live_dashboard, "~> 0.8.2"}, {:esbuild, "~> 0.8", runtime: Mix.env() == :dev}, @@ -79,7 +79,7 @@ defmodule Vyasa.MixProject do if path = System.get_env("LA_PATH") do [path: path] else - [github: "ks0m1c/live_admin", tag: "8201e03"] + [github: "ks0m1c/live_admin", ref: "8201e03"] end end diff --git a/mix.lock b/mix.lock index 6e633808..3632fbaf 100644 --- a/mix.lock +++ b/mix.lock @@ -30,7 +30,7 @@ "image": {:hex, :image, "0.54.1", "3b4e55a321f73d45d0c639aab222606516df3e1d0a266eab6192a924402e3af1", [:mix], [{:bumblebee, "~> 0.3", [hex: :bumblebee, repo: "hexpm", optional: true]}, {:evision, "~> 0.1.33 or ~> 0.2", [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.13", [hex: :kino, repo: "hexpm", optional: true]}, {:nx, "~> 0.7", [hex: :nx, repo: "hexpm", optional: true]}, {:nx_image, "~> 0.1", [hex: :nx_image, repo: "hexpm", optional: true]}, {:phoenix_html, "~> 2.1 or ~> 3.2 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:plug, "~> 1.13", [hex: :plug, repo: "hexpm", optional: true]}, {:req, "~> 0.4", [hex: :req, repo: "hexpm", optional: true]}, {:rustler, "> 0.0.0", [hex: :rustler, repo: "hexpm", optional: true]}, {:scholar, "~> 0.3", [hex: :scholar, 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", "77389da9a651e32a77d8f5366dd8b8a85834a6f6bd553f9d4fb4bb6e39a51405"}, "jason": {:hex, :jason, "1.4.4", "b9226785a9aa77b6857ca22832cffa5d5011a667207eb2a0ad56adb5db443b8a", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "c5eb0cab91f094599f94d55bc63409236a8ec69a21a67814529e8d5f6cc90b3b"}, "kino": {:hex, :kino, "0.13.2", "087c8f340734764fc8c70efd43f3155fa47498c78d2d18fa83aaf97373133ade", [:mix], [{:fss, "~> 0.1.0", [hex: :fss, repo: "hexpm", optional: false]}, {:nx, "~> 0.1", [hex: :nx, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: true]}, {:table, "~> 0.1.2", [hex: :table, repo: "hexpm", optional: false]}], "hexpm", "05fb420dae92a81746dcaceceddf235974394486b17cc2704ddbb051072b4617"}, - "live_admin": {:git, "https://github.com/ks0m1c/live_admin.git", "895fbaa723147b474685f2e9ad8df29c5d655eb4", [tag: "895fbaa"]}, + "live_admin": {:git, "https://github.com/ks0m1c/live_admin.git", "8201e0372af7f4cf18bf417c38b91232e110e983", [ref: "8201e03"]}, "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm", "69b09adddc4f74a40716ae54d140f93beb0fb8978d8636eaded0c31b6f099f16"}, "mime": {:hex, :mime, "2.0.6", "8f18486773d9b15f95f4f4f1e39b710045fa1de891fada4516559967276e4dc2", [:mix], [], "hexpm", "c9945363a6b26d747389aac3643f8e0e09d30499a138ad64fe8fd1d13d9b153e"}, "mimerl": {:hex, :mimerl, "1.3.0", "d0cd9fc04b9061f82490f6581e0128379830e78535e017f7780f37fea7545726", [:rebar3], [], "hexpm", "a1e15a50d1887217de95f0b9b0793e32853f7c258a5cd227650889b38839fe9d"}, @@ -45,7 +45,7 @@ "phoenix_html_helpers": {:hex, :phoenix_html_helpers, "1.0.1", "7eed85c52eff80a179391036931791ee5d2f713d76a81d0d2c6ebafe1e11e5ec", [:mix], [{:phoenix_html, "~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "cffd2385d1fa4f78b04432df69ab8da63dc5cf63e07b713a4dcf36a3740e3090"}, "phoenix_live_dashboard": {:hex, :phoenix_live_dashboard, "0.8.4", "4508e481f791ce62ec6a096e13b061387158cbeefacca68c6c1928e1305e23ed", [:mix], [{:ecto, "~> 3.6.2 or ~> 3.7", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_mysql_extras, "~> 0.5", [hex: :ecto_mysql_extras, repo: "hexpm", optional: true]}, {:ecto_psql_extras, "~> 0.7", [hex: :ecto_psql_extras, repo: "hexpm", optional: true]}, {:ecto_sqlite3_extras, "~> 1.1.7 or ~> 1.2.0", [hex: :ecto_sqlite3_extras, repo: "hexpm", optional: true]}, {:mime, "~> 1.6 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 0.19 or ~> 1.0", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6 or ~> 1.0", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}], "hexpm", "2984aae96994fbc5c61795a73b8fb58153b41ff934019cfb522343d2d3817d59"}, "phoenix_live_reload": {:hex, :phoenix_live_reload, "1.5.3", "f2161c207fda0e4fb55165f650f7f8db23f02b29e3bff00ff7ef161d6ac1f09d", [:mix], [{:file_system, "~> 0.3 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}], "hexpm", "b4ec9cd73cb01ff1bd1cac92e045d13e7030330b74164297d1aee3907b54803c"}, - "phoenix_live_view": {:git, "https://github.com/phoenixframework/phoenix_live_view.git", "440fd0460405c57f61fcc7457ea9f80ff56f1135", [tag: "440fd04"]}, + "phoenix_live_view": {:git, "https://github.com/phoenixframework/phoenix_live_view.git", "440fd0460405c57f61fcc7457ea9f80ff56f1135", [ref: "440fd04"]}, "phoenix_pubsub": {:hex, :phoenix_pubsub, "2.1.3", "3168d78ba41835aecad272d5e8cd51aa87a7ac9eb836eabc42f6e57538e3731d", [:mix], [], "hexpm", "bba06bc1dcfd8cb086759f0edc94a8ba2bc8896d5331a1e2c2902bf8e36ee502"}, "phoenix_template": {:hex, :phoenix_template, "1.0.4", "e2092c132f3b5e5b2d49c96695342eb36d0ed514c5b252a77048d5969330d639", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}], "hexpm", "2c0c81f0e5c6753faf5cca2f229c9709919aba34fab866d3bc05060c9c444206"}, "phoenix_view": {:hex, :phoenix_view, "2.0.4", "b45c9d9cf15b3a1af5fb555c674b525391b6a1fe975f040fb4d913397b31abf4", [: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", "4e992022ce14f31fe57335db27a28154afcc94e9983266835bb3040243eb620b"}, From 22e9bed8e9532aac6f8dde85d660663167d710b9 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Fri, 23 Aug 2024 22:28:55 +0800 Subject: [PATCH 066/130] Rm use of BrowserNavInterceptor Initially this was supposed to be an attempt at a workaround, but now that we've bumped up the version number for live_view, the navigation state handling based on the back button works okay. To be honest, the state management is still a little flakey but I have spent too long investigating this, will move on first. --- lib/vyasa_web/components/source_content/verses.ex | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/lib/vyasa_web/components/source_content/verses.ex b/lib/vyasa_web/components/source_content/verses.ex index 7d3c20f4..0220bfc0 100644 --- a/lib/vyasa_web/components/source_content/verses.ex +++ b/lib/vyasa_web/components/source_content/verses.ex @@ -17,11 +17,7 @@ defmodule VyasaWeb.Content.Verses do def render(assigns) do ~H"""
-
+
<.header class="p-4 pb-0">
@src.script]}> <%= @selected_transl.target.translit_title %> | <%= @chap.title %> From 3830f7ae95697431ba6b61cd6ee50274597b0afd Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Sun, 25 Aug 2024 17:45:16 +0800 Subject: [PATCH 067/130] Minor cleanup of unused code --- .../components/source_content/verses.ex | 6 +- .../components/comment_binding.ex | 19 ----- .../display_manager/components/drafting.ex | 2 - .../components/verse_matrix.ex | 69 ------------------- 4 files changed, 2 insertions(+), 94 deletions(-) delete mode 100644 lib/vyasa_web/live/display_manager/components/comment_binding.ex delete mode 100644 lib/vyasa_web/live/display_manager/components/verse_matrix.ex diff --git a/lib/vyasa_web/components/source_content/verses.ex b/lib/vyasa_web/components/source_content/verses.ex index 0220bfc0..d09fbfe2 100644 --- a/lib/vyasa_web/components/source_content/verses.ex +++ b/lib/vyasa_web/components/source_content/verses.ex @@ -86,8 +86,6 @@ defmodule VyasaWeb.Content.Verses do # ---- CHECKPOINT: all the sangha stuff goes here ---- # enum.split() from @verse binding to mark def verse_matrix(assigns) do - assigns = assigns - ~H"""
@@ -116,8 +114,6 @@ defmodule VyasaWeb.Content.Verses do :if={@verse.binding} class={[ "block mt-4 text-sm text-gray-700 font-serif leading-relaxed - lg:absolute lg:top-0 lg:right-0 md:mt-0 - lg:float-right lg:clear-right lg:-mr-[60%] lg:w-[50%] lg:text-[0.9rem] opacity-70 transition-opacity duration-300 ease-in-out hover:opacity-100", (@verse.binding.node_id == Map.get(elem, :node, @verse).id && @@ -146,6 +142,8 @@ defmodule VyasaWeb.Content.Verses do do: "font-dn text-m" def comment_binding(assigns) do + # QQ: this elem_id isn't being used explicitly anywhere, was there a purpose for it & can it be removed? + # TODO: verify if this custom id assigns can be removed assigns = assigns |> assign(:elem_id, "comment-modal-#{Ecto.UUID.generate()}") ~H""" diff --git a/lib/vyasa_web/live/display_manager/components/comment_binding.ex b/lib/vyasa_web/live/display_manager/components/comment_binding.ex deleted file mode 100644 index 6fa17f38..00000000 --- a/lib/vyasa_web/live/display_manager/components/comment_binding.ex +++ /dev/null @@ -1,19 +0,0 @@ -defmodule VyasaWeb.DisplayManager.Components.CommentBinding do - use VyasaWeb, :html - - def render(assigns) do - assigns = assigns |> assign(:elem_id, "comment-modal-#{Ecto.UUID.generate()}") - - ~H""" - - <%= comment.body %> - <%= comment.signature %> - - """ - end -end diff --git a/lib/vyasa_web/live/display_manager/components/drafting.ex b/lib/vyasa_web/live/display_manager/components/drafting.ex index 252e52c5..62137fb6 100644 --- a/lib/vyasa_web/live/display_manager/components/drafting.ex +++ b/lib/vyasa_web/live/display_manager/components/drafting.ex @@ -5,8 +5,6 @@ defmodule VyasaWeb.DisplayManager.Components.Drafting do attr :marks, :list, default: [] def render(assigns) do - assigns = assigns |> assign(:elem_id, "comment-modal-#{Ecto.UUID.generate()}") - ~H"""
-
-
-
- -
-
-
Enum.join("::")} - class={"text-zinc-700 #{verse_class(elem.verseup)}"} - > - <%= Struct.get_in(Map.get(elem, :node, @verse), elem.field) %> -
-
- - - - ☙ ——— ›– ❊ –‹ ——— ❧ - - -
-
-
-
-
- """ - end - - defp verse_class(:big), - do: "font-dn text-lg sm:text-xl" - - defp verse_class(:mid), - do: "font-dn text-m" -end From 9a86567eb4cb208659294d10eb2d1ade669fbf24 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Mon, 26 Aug 2024 00:37:53 +0800 Subject: [PATCH 068/130] Define slotting pattern, let DM handle hoverune - CLOSING NOTE [2024-08-26 Mon 00:37] Nice, this gives a pattern that the control panel stuff can follow as well. - intent: Hoverune should be universal, if kept, and shouldn’t be specific to the verses only. Additionally, action buttons within it need to be determinable by the usermode. We can do this by defining what buttons the user-mode should be rendering. The rendering can be deferred till later, and use a rendering function from elsewhere within the VyasaWeb namespace. This is essentially how we “slot” in the buttons we want. - pre-req understanding: - understand how the binding actions work for hoverrune - interesting: [this](file:///Users/rtshkmr/Projects/vyasa/lib/vyasa/draft.ex) seems like a way to do a multi-step parsing of sorts for a single function - Learning: so for the slotting behaviour, the usermode.ex is not in within vyasaweb and is purely server side. Therefore, we shall just use atoms to id what kind of button we want to render, and we can define them within components So we can define the buttons like this: # Vyasa.Display.UserMode @ lib/vyasa/display/ "read" => %{ mode: "read", mode_icon_name: "hero-book-open", action_bar_component: VyasaWeb.MediaLive.MediaBridge, control_panel_component: VyasaWeb.ControlPanel, quick_action_buttons: [:mark_quote, :bookmark] } And we can define the how to render based on these ids: def render_hoverune_button(:bookmark, assigns) do ~H""" """ end and we can just call these functions from within a livecomponent: attr :quick_action_buttons, :list_of, type: :atom, default: [] @impl true def render(assigns) do ~H""" """ end --- lib/vyasa/adapters/binding.ex | 30 +++++++------ lib/vyasa/display/user_mode.ex | 11 +++-- lib/vyasa/draft.ex | 42 ++++++++++++------- lib/vyasa_web/components/hoverune.ex | 26 ++++++++++++ .../components/source_content/verses.ex | 17 -------- .../components/user_mode_components.ex | 28 +++++++++++++ .../live/display_manager/display_live.ex | 7 ++-- .../display_manager/display_live.html.heex | 6 +++ 8 files changed, 116 insertions(+), 51 deletions(-) create mode 100644 lib/vyasa_web/components/hoverune.ex create mode 100644 lib/vyasa_web/components/user_mode_components.ex diff --git a/lib/vyasa/adapters/binding.ex b/lib/vyasa/adapters/binding.ex index 3608b76b..14409739 100644 --- a/lib/vyasa/adapters/binding.ex +++ b/lib/vyasa/adapters/binding.ex @@ -23,6 +23,8 @@ defmodule Vyasa.Adapters.Binding do belongs_to :translation, Translation, foreign_key: :translation_id, type: :binary_id belongs_to :comment, Comment, foreign_key: :comment_id, type: :binary_id + # window is essentially because bindings might only refer to a subset of a node + # either by timestamping of events or through line no and character range embeds_one :window, Window, on_replace: :delete do field(:line_number, :integer) field(:start, :integer) @@ -39,26 +41,29 @@ defmodule Vyasa.Adapters.Binding do |> cast(attrs, [:verse_id, :voice_id, :source_id]) end - def windowing_changeset(%__MODULE__{} = binding, attrs) do binding |> cast(attrs, [:w_type, :verse_id, :chapter_no, :source_id]) |> typed_window_switch(attrs) - |> Map.put(:repo_opts, [on_conflict: {:replace_all_except, [:id]}, conflict_target: :id]) + |> Map.put(:repo_opts, on_conflict: {:replace_all_except, [:id]}, conflict_target: :id) end + # when type changes + def typed_window_switch(changeset, %{w_type: type}), + do: typed_window_switch(changeset, %{"w_type" => type}) - #when type changes - def typed_window_switch(changeset, %{w_type: type}), do: typed_window_switch(changeset, %{"w_type" => type}) def typed_window_switch(changeset, %{"w_type" => type}) do - window_changeset = case type do - "quote" -> - "e_changeset(&1, &2) - "timestamp" -> - ×tamp_changeset(&1, &2) - _ -> - &null_changeset(&1, &2) - end + window_changeset = + case type do + "quote" -> + "e_changeset(&1, &2) + + "timestamp" -> + ×tamp_changeset(&1, &2) + + _ -> + &null_changeset(&1, &2) + end cast_embed(changeset, :window, with: window_changeset) end @@ -82,7 +87,6 @@ defmodule Vyasa.Adapters.Binding do |> cast(attrs, []) end - def cast(attrs) do %__MODULE__{} |> Vyasa.Repo.preload(__schema__(:associations)) diff --git a/lib/vyasa/display/user_mode.ex b/lib/vyasa/display/user_mode.ex index 79dc0e66..08aea109 100644 --- a/lib/vyasa/display/user_mode.ex +++ b/lib/vyasa/display/user_mode.ex @@ -19,9 +19,12 @@ defmodule Vyasa.Display.UserMode do :mode, :mode_icon_name, :action_bar_component, - :control_panel_component + :control_panel_component, + :quick_action_buttons ] + @buttons [:mark_quote, :bookmark] + # defines static aspects of different modes: # TODO: define mode-specific hoverrune functions here @defs %{ @@ -29,7 +32,8 @@ defmodule Vyasa.Display.UserMode do mode: "read", mode_icon_name: "hero-book-open", action_bar_component: VyasaWeb.MediaLive.MediaBridge, - control_panel_component: VyasaWeb.ControlPanel + control_panel_component: VyasaWeb.ControlPanel, + quick_action_buttons: @buttons }, "draft" => %{ mode: "draft", @@ -38,7 +42,8 @@ defmodule Vyasa.Display.UserMode do # TODO: to test swaps of action bar component action_bar_component: VyasaWeb.MediaLive.MediaBridge, # action_bar_component: nil, - control_panel_component: VyasaWeb.ControlPanel + control_panel_component: VyasaWeb.ControlPanel, + quick_action_buttons: @buttons } } diff --git a/lib/vyasa/draft.ex b/lib/vyasa/draft.ex index fc740c38..f525372e 100644 --- a/lib/vyasa/draft.ex +++ b/lib/vyasa/draft.ex @@ -9,32 +9,46 @@ defmodule Vyasa.Draft do alias Vyasa.Sangh alias Vyasa.Repo - - - def bind_node(%{"selection" => ""} = node) do + # Inits the binding for an empty selection + def bind_node(%{"selection" => ""} = node = _bind_target_payload) do bind_node(node, %Binding{}) end - def bind_node(%{"selection" => selection} = node) do + # Shifts the selection within the bind target payload to the %Binding{} struct, and continues with the binding. + def bind_node(%{"selection" => selection} = node = _bind_target_payload) do bind_node(Map.delete(node, "selection"), %Binding{:window => %{:quote => selection}}) end - def bind_node(%{"field" => field} = node, bind) do - bind_node(Map.delete(node, "field"), %{bind | field_key: String.split(field, "::") |> Enum.map(&(String.to_existing_atom(&1)))}) + # Uses the "field" attribute in the bind_target + # When the binding target is defined by a "field" attribute, it sets the field_key for the %Binding{} struct struct. + def bind_node(%{"field" => field} = node = _bind_target_payload, bind) do + bind_node(Map.delete(node, "field"), %{ + bind + | field_key: String.split(field, "::") |> Enum.map(&String.to_existing_atom(&1)) + }) end - def bind_node(%{"node" => node, "node_id" => node_id}, %Binding{} = bind) do - n = node - |> String.to_existing_atom() - |> struct() - |> Binding.field_lookup() - - %{bind | n => node_id, :node_id => node_id} + @doc """ + Finally, updates the %Binding{} struct's node_id and returns a map with the binding, the node_id and the with the id and the + id as keyed by the node_field_name. + """ + def bind_node( + %{"node" => node, "node_id" => node_id} = _binding_target_payload, + %Binding{} = bind + ) do + node_field_name = + node + |> String.to_existing_atom() + |> struct() + |> Binding.field_lookup() + + %{bind | node_field_name => node_id, :node_id => node_id} end - def create_comment([%Mark{} | _]= marks) do + def create_comment([%Mark{} | _] = marks) do Sangh.create_comment(%{marks: marks}) end + @doc """ Returns the list of marks. diff --git a/lib/vyasa_web/components/hoverune.ex b/lib/vyasa_web/components/hoverune.ex new file mode 100644 index 00000000..f11f054c --- /dev/null +++ b/lib/vyasa_web/components/hoverune.ex @@ -0,0 +1,26 @@ +defmodule VyasaWeb.HoveRune do + @moduledoc """ + The HoveRune is a hovering quick-actions menu. + For now, it's done used in the context of selected text. + + We shall define slot attributs for the various kinds of buttons we want + and we shall render those buttons using approate rendering functions defined elsewhere. + """ + use VyasaWeb, :live_component + + attr :quick_action_buttons, :list_of, type: :atom, default: [] + @impl true + def render(assigns) do + ~H""" + + """ + end +end diff --git a/lib/vyasa_web/components/source_content/verses.ex b/lib/vyasa_web/components/source_content/verses.ex index d09fbfe2..5a25096c 100644 --- a/lib/vyasa_web/components/source_content/verses.ex +++ b/lib/vyasa_web/components/source_content/verses.ex @@ -62,23 +62,6 @@ defmodule VyasaWeb.Content.Verses do Back to <%= to_title_case(@src.title) %> Chapters
- -
""" end diff --git a/lib/vyasa_web/components/user_mode_components.ex b/lib/vyasa_web/components/user_mode_components.ex new file mode 100644 index 00000000..62e3cce9 --- /dev/null +++ b/lib/vyasa_web/components/user_mode_components.ex @@ -0,0 +1,28 @@ +defmodule VyasaWeb.Display.UserMode.Components do + use VyasaWeb, :html + + def render_hoverune_button(:mark_quote, assigns) do + ~H""" + + """ + end + + def render_hoverune_button(:bookmark, assigns) do + ~H""" + + """ + end + + def render_hoverune_button(_fallback_id, assigns) do + ~H""" +
+ """ + end +end diff --git a/lib/vyasa_web/live/display_manager/display_live.ex b/lib/vyasa_web/live/display_manager/display_live.ex index 3017e4f7..b062459b 100644 --- a/lib/vyasa_web/live/display_manager/display_live.ex +++ b/lib/vyasa_web/live/display_manager/display_live.ex @@ -123,6 +123,7 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do |> stream(:verses, verses) |> assign( :kv_verses, + # creates a map of verse_id_to_verses Enum.into( verses, %{}, @@ -258,11 +259,11 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do # already in mark in drafting state, remember to late bind binding => with a fn() def handle_event( "bindHoveRune", - %{"binding" => bind = %{"verse_id" => verse_id}}, + %{"binding" => bind_target_payload = %{"verse_id" => verse_id}}, %{assigns: %{kv_verses: verses, marks: [%Mark{state: :draft} = d_mark | marks]}} = socket ) do # binding here blocks the stream from appending to quote - bind = Draft.bind_node(bind) + bind = Draft.bind_node(bind_target_payload) {:noreply, socket @@ -323,8 +324,6 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do @impl true def handle_event("BrowserNavInterceptor:nav", %{"nav_target" => nav_target}, socket) do - dbg() - {:noreply, socket |> push_patch(to: nav_target)} diff --git a/lib/vyasa_web/live/display_manager/display_live.html.heex b/lib/vyasa_web/live/display_manager/display_live.html.heex index 3c5c37f6..274e1dc2 100644 --- a/lib/vyasa_web/live/display_manager/display_live.html.heex +++ b/lib/vyasa_web/live/display_manager/display_live.html.heex @@ -25,6 +25,12 @@ <.live_component module={@mode.control_panel_component} id="control_panel" mode={@mode} />
+ <.live_component + module={VyasaWeb.HoveRune} + id={"hoverune"} + quick_action_buttons={@mode.quick_action_buttons} + /> +
Date: Mon, 26 Aug 2024 01:00:21 +0800 Subject: [PATCH 069/130] Minor change --- lib/vyasa_web/components/hoverune.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/vyasa_web/components/hoverune.ex b/lib/vyasa_web/components/hoverune.ex index f11f054c..6d8c6858 100644 --- a/lib/vyasa_web/components/hoverune.ex +++ b/lib/vyasa_web/components/hoverune.ex @@ -8,7 +8,7 @@ defmodule VyasaWeb.HoveRune do """ use VyasaWeb, :live_component - attr :quick_action_buttons, :list_of, type: :atom, default: [] + attr :quick_action_buttons, :list, default: [] @impl true def render(assigns) do ~H""" From 24a6a96572abd42a98a2470c84eedf84f73e387f Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Mon, 26 Aug 2024 11:31:42 +0800 Subject: [PATCH 070/130] Support slots for control panel modes to switch to This handles the button UI flow for the major user-mode changes (e.g. :read -> :draft). We need to just define the modes to display when currently in a particular mode and then we can display buttons for those modes from there. --- lib/vyasa/display/user_mode.ex | 10 +-- lib/vyasa_web/components/control_panel.ex | 32 ++++----- lib/vyasa_web/components/hoverune.ex | 5 +- .../components/user_mode_components.ex | 66 +++++++++++++++++++ .../live/display_manager/display_live.ex | 11 +++- lib/vyasa_web/live/media_live/media_bridge.ex | 1 - 6 files changed, 95 insertions(+), 30 deletions(-) diff --git a/lib/vyasa/display/user_mode.ex b/lib/vyasa/display/user_mode.ex index 08aea109..191da4aa 100644 --- a/lib/vyasa/display/user_mode.ex +++ b/lib/vyasa/display/user_mode.ex @@ -20,7 +20,8 @@ defmodule Vyasa.Display.UserMode do :mode_icon_name, :action_bar_component, :control_panel_component, - :quick_action_buttons + :quick_action_buttons, + :control_panel_modes ] @buttons [:mark_quote, :bookmark] @@ -33,7 +34,8 @@ defmodule Vyasa.Display.UserMode do mode_icon_name: "hero-book-open", action_bar_component: VyasaWeb.MediaLive.MediaBridge, control_panel_component: VyasaWeb.ControlPanel, - quick_action_buttons: @buttons + quick_action_buttons: @buttons, + control_panel_modes: ["draft"] }, "draft" => %{ mode: "draft", @@ -41,9 +43,9 @@ defmodule Vyasa.Display.UserMode do # TODO: add drafting form for this # TODO: to test swaps of action bar component action_bar_component: VyasaWeb.MediaLive.MediaBridge, - # action_bar_component: nil, control_panel_component: VyasaWeb.ControlPanel, - quick_action_buttons: @buttons + quick_action_buttons: @buttons, + control_panel_modes: ["read"] } } diff --git a/lib/vyasa_web/components/control_panel.ex b/lib/vyasa_web/components/control_panel.ex index 0eefb032..442d1f78 100644 --- a/lib/vyasa_web/components/control_panel.ex +++ b/lib/vyasa_web/components/control_panel.ex @@ -4,26 +4,22 @@ defmodule VyasaWeb.ControlPanel do usage-modes and carry out actions related to a specific mode. """ use VyasaWeb, :live_component + use VyasaWeb, :html alias Phoenix.LiveView.Socket + alias Vyasa.Display.UserMode + import VyasaWeb.Display.UserMode.Components def mount(_, _, socket) do socket end + attr :mode, UserMode, required: true @impl true def render(assigns) do ~H"""
- <%= @mode.mode %> - <.button - id="toggleButton" - class="bg-blue-500 text-white p-2 rounded-full focus:outline-none" - phx-click={JS.push("toggle_show_control_panel")} - phx-target={@myself} - > - <.icon name={@mode.mode_icon_name} /> - + <.control_panel_mode_indicator mode={@mode} myself={@myself} />
- <.button - phx-click={JS.push("change_mode", value: %{current_mode: @mode.mode, target_mode: "read"})} - class="bg-green-500 text-white px-4 py-2 rounded-md focus:outline-none" - > - Change to Read - - <.button - phx-click={JS.push("change_mode", value: %{current_mode: @mode.mode, target_mode: "draft"})} - class="bg-red-500 text-white px-4 py-2 rounded-md focus:outline-none" - > - Change to Draft - + <%= for other_mode <- @mode.control_panel_modes do %> + <.control_panel_mode_button + current_mode={@mode} + target_mode={UserMode.get_mode(other_mode)} + /> + <% end %>
""" diff --git a/lib/vyasa_web/components/hoverune.ex b/lib/vyasa_web/components/hoverune.ex index 6d8c6858..76088760 100644 --- a/lib/vyasa_web/components/hoverune.ex +++ b/lib/vyasa_web/components/hoverune.ex @@ -3,10 +3,11 @@ defmodule VyasaWeb.HoveRune do The HoveRune is a hovering quick-actions menu. For now, it's done used in the context of selected text. - We shall define slot attributs for the various kinds of buttons we want + We shall define slot attributes for the various kinds of buttons we want and we shall render those buttons using approate rendering functions defined elsewhere. """ use VyasaWeb, :live_component + alias VyasaWeb.Display.UserMode.Components attr :quick_action_buttons, :list, default: [] @impl true @@ -18,7 +19,7 @@ defmodule VyasaWeb.HoveRune do class="absolute hidden top-0 left-0 max-w-max group-hover:flex items-center space-x-2 bg-white/80 rounded-lg shadow-lg px-4 py-2 border border-gray-200 transition-all duration-300 ease-in-out" >
- <%= VyasaWeb.Display.UserMode.Components.render_hoverune_button(button_id, %{}) %> + <%= Components.render_hoverune_button(button_id, %{}) %>
""" diff --git a/lib/vyasa_web/components/user_mode_components.ex b/lib/vyasa_web/components/user_mode_components.ex index 62e3cce9..2d512dd2 100644 --- a/lib/vyasa_web/components/user_mode_components.ex +++ b/lib/vyasa_web/components/user_mode_components.ex @@ -1,5 +1,6 @@ defmodule VyasaWeb.Display.UserMode.Components do use VyasaWeb, :html + alias Vyasa.Display.UserMode def render_hoverune_button(:mark_quote, assigns) do ~H""" @@ -25,4 +26,69 @@ defmodule VyasaWeb.Display.UserMode.Components do
""" end + + def render_current_mode_button( + %{ + mode: %UserMode{} + } = assigns + ) do + ~H""" +
+ <%= @mode.mode_icon_name %> + <.button + id="toggleButton" + class="bg-blue-500 text-white p-2 rounded-full focus:outline-none" + phx-click={JS.push("toggle_show_control_panel")} + phx-target={@myself} + > + <.icon name={@mode.mode_icon_name} /> + +
+ """ + end + + attr :current_mode, UserMode, required: true + attr :target_mode, UserMode, required: true + + @doc """ + The mode button displays modes that can be switched into. + Clicking it allows the user to switch from the current mode to the target mode. + """ + def control_panel_mode_button(assigns) do + ~H""" + <.button + phx-click={ + JS.push("change_mode", + value: %{ + current_mode: @current_mode.mode, + target_mode: @target_mode.mode + } + ) + } + class="bg-green-500 text-white px-4 py-2 rounded-md focus:outline-none" + > + <.icon name={@target_mode.mode_icon_name} /> + + """ + end + + attr :mode, UserMode, required: true + attr :myself, :any, required: true + + @doc """ + The current user mode is indicated by this button that shall always be present and hovering, regardless whether + the Control Panel is collapsed or not. + """ + def control_panel_mode_indicator(assigns) do + ~H""" + <.button + id="control-panel-indicator" + class="bg-blue-500 text-white p-2 rounded-full focus:outline-none" + phx-click={JS.push("toggle_show_control_panel")} + phx-target={@myself} + > + <.icon name={@mode.mode_icon_name} /> + + """ + end end diff --git a/lib/vyasa_web/live/display_manager/display_live.ex b/lib/vyasa_web/live/display_manager/display_live.ex index b062459b..6c3dea8b 100644 --- a/lib/vyasa_web/live/display_manager/display_live.ex +++ b/lib/vyasa_web/live/display_manager/display_live.ex @@ -172,8 +172,15 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do defp change_mode(socket, curr, target) when is_binary(curr) and is_binary(target) and target in @supported_modes do - socket - |> assign(mode: UserMode.get_mode(target)) + case curr == target do + # prevents unnecessary switches + true -> + socket + + false -> + socket + |> assign(mode: UserMode.get_mode(target)) + end end defp change_mode(socket, _, _) do diff --git a/lib/vyasa_web/live/media_live/media_bridge.ex b/lib/vyasa_web/live/media_live/media_bridge.ex index 19f99904..96be5536 100644 --- a/lib/vyasa_web/live/media_live/media_bridge.ex +++ b/lib/vyasa_web/live/media_live/media_bridge.ex @@ -449,7 +449,6 @@ defmodule VyasaWeb.MediaLive.MediaBridge do def progress_bar(assigns) do assigns = assign_new(assigns, :value, fn -> assigns[:min] || 0 end) - IO.inspect(assigns, label: "progress hopefully we make some progress") ~H"""
Date: Mon, 26 Aug 2024 13:01:34 +0800 Subject: [PATCH 071/130] Change specific render fns -> generic fn component --- lib/vyasa/display/user_mode.ex | 18 ++++--- lib/vyasa_web/components/control_panel.ex | 10 ++++ lib/vyasa_web/components/hoverune.ex | 32 +++++++++--- .../components/user_mode_components.ex | 49 ++++--------------- .../display_manager/display_live.html.heex | 2 +- 5 files changed, 57 insertions(+), 54 deletions(-) diff --git a/lib/vyasa/display/user_mode.ex b/lib/vyasa/display/user_mode.ex index 191da4aa..2b023269 100644 --- a/lib/vyasa/display/user_mode.ex +++ b/lib/vyasa/display/user_mode.ex @@ -20,11 +20,13 @@ defmodule Vyasa.Display.UserMode do :mode_icon_name, :action_bar_component, :control_panel_component, - :quick_action_buttons, - :control_panel_modes + :quick_actions, + :control_panel_modes, + :mode_actions ] - @buttons [:mark_quote, :bookmark] + @quick_actions [:mark_quote, :bookmark] + @mode_actions [:mark_quote, :bookmark] # defines static aspects of different modes: # TODO: define mode-specific hoverrune functions here @@ -34,8 +36,9 @@ defmodule Vyasa.Display.UserMode do mode_icon_name: "hero-book-open", action_bar_component: VyasaWeb.MediaLive.MediaBridge, control_panel_component: VyasaWeb.ControlPanel, - quick_action_buttons: @buttons, - control_panel_modes: ["draft"] + quick_actions: @quick_actions, + control_panel_modes: ["draft"], + mode_actions: @mode_actions }, "draft" => %{ mode: "draft", @@ -44,8 +47,9 @@ defmodule Vyasa.Display.UserMode do # TODO: to test swaps of action bar component action_bar_component: VyasaWeb.MediaLive.MediaBridge, control_panel_component: VyasaWeb.ControlPanel, - quick_action_buttons: @buttons, - control_panel_modes: ["read"] + quick_actions: @quick_actions, + control_panel_modes: ["read"], + mode_actions: @mode_actions } } diff --git a/lib/vyasa_web/components/control_panel.ex b/lib/vyasa_web/components/control_panel.ex index 442d1f78..916550c9 100644 --- a/lib/vyasa_web/components/control_panel.ex +++ b/lib/vyasa_web/components/control_panel.ex @@ -7,7 +7,10 @@ defmodule VyasaWeb.ControlPanel do use VyasaWeb, :html alias Phoenix.LiveView.Socket alias Vyasa.Display.UserMode + # alias VyasaWeb.Display.UserMode.Components + import VyasaWeb.Display.UserMode.Components + alias VyasaWeb.HoveRune def mount(_, _, socket) do socket @@ -15,6 +18,7 @@ defmodule VyasaWeb.ControlPanel do attr :mode, UserMode, required: true @impl true + # TODO: add set of render functions specific to the rendering of action buttons def render(assigns) do ~H"""
@@ -34,6 +38,12 @@ defmodule VyasaWeb.ControlPanel do target_mode={UserMode.get_mode(other_mode)} /> <% end %> + <%= for action <- @mode.mode_actions do %> + <.hover_rune_quick_action + action_event={HoveRune.get_quick_action_click_event(action)} + action_icon_name={HoveRune.get_quick_action_icon_name(action)} + /> + <% end %>
""" diff --git a/lib/vyasa_web/components/hoverune.ex b/lib/vyasa_web/components/hoverune.ex index 76088760..04b0f2a4 100644 --- a/lib/vyasa_web/components/hoverune.ex +++ b/lib/vyasa_web/components/hoverune.ex @@ -7,21 +7,39 @@ defmodule VyasaWeb.HoveRune do and we shall render those buttons using approate rendering functions defined elsewhere. """ use VyasaWeb, :live_component - alias VyasaWeb.Display.UserMode.Components + # alias VyasaWeb.Display.UserMode.Components + import VyasaWeb.Display.UserMode.Components - attr :quick_action_buttons, :list, default: [] + attr :quick_actions, :list, default: [] @impl true def render(assigns) do ~H""" """ end + + def get_quick_action_click_event(action) when is_atom(action) do + case action do + :mark_quote -> "markQuote" + _ -> "" + end + end + + def get_quick_action_icon_name(action) when is_atom(action) do + case action do + :bookmark -> "hero-bookmark-mini" + :mark_quote -> "hero-link-mini" + _ -> nil + end + end end diff --git a/lib/vyasa_web/components/user_mode_components.ex b/lib/vyasa_web/components/user_mode_components.ex index 2d512dd2..8d63040a 100644 --- a/lib/vyasa_web/components/user_mode_components.ex +++ b/lib/vyasa_web/components/user_mode_components.ex @@ -2,51 +2,22 @@ defmodule VyasaWeb.Display.UserMode.Components do use VyasaWeb, :html alias Vyasa.Display.UserMode - def render_hoverune_button(:mark_quote, assigns) do - ~H""" - - """ - end + attr :action_event, :string, required: true + attr :action_icon_name, :string, required: true - def render_hoverune_button(:bookmark, assigns) do + def hover_rune_quick_action(assigns) do ~H""" - """ end - def render_hoverune_button(_fallback_id, assigns) do - ~H""" -
- """ - end - - def render_current_mode_button( - %{ - mode: %UserMode{} - } = assigns - ) do - ~H""" -
- <%= @mode.mode_icon_name %> - <.button - id="toggleButton" - class="bg-blue-500 text-white p-2 rounded-full focus:outline-none" - phx-click={JS.push("toggle_show_control_panel")} - phx-target={@myself} - > - <.icon name={@mode.mode_icon_name} /> - -
- """ - end - attr :current_mode, UserMode, required: true attr :target_mode, UserMode, required: true diff --git a/lib/vyasa_web/live/display_manager/display_live.html.heex b/lib/vyasa_web/live/display_manager/display_live.html.heex index 274e1dc2..511d49cc 100644 --- a/lib/vyasa_web/live/display_manager/display_live.html.heex +++ b/lib/vyasa_web/live/display_manager/display_live.html.heex @@ -28,7 +28,7 @@ <.live_component module={VyasaWeb.HoveRune} id={"hoverune"} - quick_action_buttons={@mode.quick_action_buttons} + quick_actions={@mode.quick_actions} /> From 2c80cb21b49627e08bee1fec86172d7446a899f7 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Mon, 26 Aug 2024 13:03:59 +0800 Subject: [PATCH 072/130] Cleanup: rm remnants of BrowserNavInterceptor --- assets/js/hooks/browser_nav_interceptor.js | 28 ------------------- assets/js/hooks/index.js | 2 -- .../components/source_content/verses.ex | 14 ---------- .../live/display_manager/display_live.ex | 7 ----- 4 files changed, 51 deletions(-) delete mode 100644 assets/js/hooks/browser_nav_interceptor.js diff --git a/assets/js/hooks/browser_nav_interceptor.js b/assets/js/hooks/browser_nav_interceptor.js deleted file mode 100644 index e00d441c..00000000 --- a/assets/js/hooks/browser_nav_interceptor.js +++ /dev/null @@ -1,28 +0,0 @@ -/** - * This hooks intercepts browser navigation actions and pipes it to server actions instead. - * */ -BrowserNavInterceptor = { - mounted() { - console.log("TRACE: Interceptor mounted"); - window.addEventListener("popstate", this.handleStatePop.bind(this)); - }, - destroyed() { - console.log("TRACE: Interceptor destroyed"); - window.removeEventListener("popstate", this.handleStatePop.bind(this)); - }, - handleStatePop(e) { - const { navTarget } = this.el.dataset; - console.log("TRACE: Handle state pop", { navTarget, e }); - e.preventDefault(); - // this.pushEvent("BrowserNavInterceptor:nav", { nav_target: navTarget }); - this.pushEvent("BrowserNavInterceptor:nav", { nav_target: navTarget }); - if (e.state) { - console.log( - "TRACE: User navigated using the browser buttons. Detected using popstate event.", - ); - // You can perform additional actions here, such as updating the UI - } - }, -}; - -export default BrowserNavInterceptor; diff --git a/assets/js/hooks/index.js b/assets/js/hooks/index.js index 0efb9cef..2e312973 100644 --- a/assets/js/hooks/index.js +++ b/assets/js/hooks/index.js @@ -12,7 +12,6 @@ import ApplyModal from "./apply_modal.js"; import MargiNote from "./marginote.js"; import HoveRune from "./hoverune.js"; import Scrolling from "./scrolling.js"; -import BrowserNavInterceptor from "./browser_nav_interceptor.js"; let Hooks = { ShareQuoteButton, @@ -27,7 +26,6 @@ let Hooks = { MargiNote, HoveRune, Scrolling, - BrowserNavInterceptor, }; export default Hooks; diff --git a/lib/vyasa_web/components/source_content/verses.ex b/lib/vyasa_web/components/source_content/verses.ex index 5a25096c..83caf8a0 100644 --- a/lib/vyasa_web/components/source_content/verses.ex +++ b/lib/vyasa_web/components/source_content/verses.ex @@ -215,18 +215,4 @@ defmodule VyasaWeb.Content.Verses do |> push_patch(to: target) |> push_event("scroll-to-top", %{})} end - - @impl true - def handle_event("BrowserNavInterceptor:nav", %{"nav_target" => nav_target}, socket) do - dbg() - - # {:noreply, - # socket - # |> push_patch(to: nav_target)} - - {:noreply, - socket - |> push_patch(to: nav_target) - |> push_event("scroll-to-top", %{})} - end end diff --git a/lib/vyasa_web/live/display_manager/display_live.ex b/lib/vyasa_web/live/display_manager/display_live.ex index 6c3dea8b..e992b47e 100644 --- a/lib/vyasa_web/live/display_manager/display_live.ex +++ b/lib/vyasa_web/live/display_manager/display_live.ex @@ -329,13 +329,6 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do {:noreply, socket} end - @impl true - def handle_event("BrowserNavInterceptor:nav", %{"nav_target" => nav_target}, socket) do - {:noreply, - socket - |> push_patch(to: nav_target)} - end - def handle_event(event, message, socket) do IO.inspect(%{event: event, message: message}, label: "pokemon") {:noreply, socket} From f10f4609b2be61b94fccc8610257716e82c40efd Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Mon, 26 Aug 2024 13:35:10 +0800 Subject: [PATCH 073/130] Minor changes --- lib/vyasa/display/user_mode.ex | 6 ++++++ lib/vyasa_web/components/control_panel.ex | 3 ++- lib/vyasa_web/components/source_content/verses.ex | 1 + 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/vyasa/display/user_mode.ex b/lib/vyasa/display/user_mode.ex index 2b023269..6ffcb552 100644 --- a/lib/vyasa/display/user_mode.ex +++ b/lib/vyasa/display/user_mode.ex @@ -25,7 +25,13 @@ defmodule Vyasa.Display.UserMode do :mode_actions ] + # THESE ARE EXAMPLE quick actions and mode actions for now + + # we use quick_actions to define what quick actions are supported + # by the hoverrune @quick_actions [:mark_quote, :bookmark] + # we use mode_actions to define what specific actions are supported + # under this mode. @mode_actions [:mark_quote, :bookmark] # defines static aspects of different modes: diff --git a/lib/vyasa_web/components/control_panel.ex b/lib/vyasa_web/components/control_panel.ex index 916550c9..52c4e1fd 100644 --- a/lib/vyasa_web/components/control_panel.ex +++ b/lib/vyasa_web/components/control_panel.ex @@ -18,7 +18,8 @@ defmodule VyasaWeb.ControlPanel do attr :mode, UserMode, required: true @impl true - # TODO: add set of render functions specific to the rendering of action buttons + # TODO: as a stop-gap we're using functions from Hoverune, this needs to be changed and + # we need a component specific to control panel for the rendering of mode-specific action buttons def render(assigns) do ~H"""
diff --git a/lib/vyasa_web/components/source_content/verses.ex b/lib/vyasa_web/components/source_content/verses.ex index 83caf8a0..6a849fd4 100644 --- a/lib/vyasa_web/components/source_content/verses.ex +++ b/lib/vyasa_web/components/source_content/verses.ex @@ -95,6 +95,7 @@ defmodule VyasaWeb.Content.Verses do
Date: Mon, 26 Aug 2024 18:02:53 +0800 Subject: [PATCH 074/130] Shift MediaBridge to be everpresent, improve style --- assets/js/hooks/progress_bar.js | 71 ++++++++++++++ assets/tailwind.config.js | 3 + lib/vyasa/display/user_mode.ex | 1 + .../display_manager/display_live.html.heex | 8 +- lib/vyasa_web/live/media_live/media_bridge.ex | 18 +++- .../live/media_live/media_bridge.html.heex | 95 ++++++++++--------- 6 files changed, 144 insertions(+), 52 deletions(-) diff --git a/assets/js/hooks/progress_bar.js b/assets/js/hooks/progress_bar.js index 68db4f4f..dde77636 100644 --- a/assets/js/hooks/progress_bar.js +++ b/assets/js/hooks/progress_bar.js @@ -6,10 +6,24 @@ import { seekTimeBridge, heartbeatBridge } from "./mediaEventBridges"; ProgressBar = { mounted() { + const progressSelectorPrefix = this.el.id.replace("-container", ""); + this.progressBar = this.el.querySelector(`#${progressSelectorPrefix}`); + this.scrubber = this.el.querySelector( + `#${progressSelectorPrefix}-scrubber`, + ); + this.isDragging = false; + this.el.addEventListener("click", (e) => { e.preventDefault(); this.handleProgressBarClick(e); }); + this.el.addEventListener("mousedown", (e) => this.startDrag(e)); + document.addEventListener("mousemove", (e) => this.drag(e)); + document.addEventListener("mouseup", () => this.endDrag()); + this.el.addEventListener("mousemove", (e) => + this.updateScrubberPosition(e), + ); + this.el.addEventListener("mouseleave", () => this.hideScrubber()); const heartbeatDeregisterer = heartbeatBridge.sub((payload) => this.handleHeartbeat(payload), @@ -114,6 +128,63 @@ ProgressBar = { ); progressBarNode.style.width = progressStyleWidth; }, + startDrag(e) { + this.isDragging = true; + this.updateProgress(e); + this.showScrubber(); + }, + + drag(e) { + if (this.isDragging) { + this.updateProgress(e); + } + }, + + endDrag() { + if (this.isDragging) { + this.isDragging = false; + // Dispatch the final position + const seekTimePayload = { + seekToMs: this.calculatePositionMs(this.progressBar.style.width), + originator: "ProgressBar", + }; + seekTimeBridge.dispatch(this, seekTimePayload, "#media-player-container"); + } + }, + updateProgress(e) { + const rect = this.el.getBoundingClientRect(); + const x = e.clientX - rect.left; + const width = rect.width; + const percentage = Math.max(0, Math.min(1, x / width)); + this.setProgressBarWidth(`${percentage * 100}%`); + this.updateScrubberPosition(e); + }, + + updateScrubberPosition(e) { + const rect = this.el.getBoundingClientRect(); + const x = e.clientX - rect.left; + const percentage = Math.max(0, Math.min(1, x / rect.width)); + this.scrubber.style.left = `${percentage * 100}%`; + }, + + showScrubber() { + this.scrubber.style.opacity = "1"; + }, + + hideScrubber() { + if (!this.isDragging) { + this.scrubber.style.opacity = "0"; + } + }, + + calculatePositionMs(widthPercentage) { + const percentage = parseFloat(widthPercentage) / 100; + return Math.round(percentage * this.el.dataset.max); + }, + setProgressBarWidth(progressStyleWidth) { + this.progressBar.style.width = progressStyleWidth; + this.scrubber.style.left = progressStyleWidth; + }, }; export default ProgressBar; diff --git a/assets/tailwind.config.js b/assets/tailwind.config.js index 3e5f712f..9655ce38 100644 --- a/assets/tailwind.config.js +++ b/assets/tailwind.config.js @@ -18,6 +18,9 @@ module.exports = { dn: ['"Gotu"', "sans-serif"], tl: ['"Vyas", "sans-serif"'], }, + fontSize: { + xs: "0.65rem", + }, colors: { primary: "var(--color-primary)", primaryAccent: "var(--color-primary-accent)", diff --git a/lib/vyasa/display/user_mode.ex b/lib/vyasa/display/user_mode.ex index 6ffcb552..ab93644c 100644 --- a/lib/vyasa/display/user_mode.ex +++ b/lib/vyasa/display/user_mode.ex @@ -36,6 +36,7 @@ defmodule Vyasa.Display.UserMode do # defines static aspects of different modes: # TODO: define mode-specific hoverrune functions here + # TODO: for the liveview for media bridge, just do a soft disappear @defs %{ "read" => %{ mode: "read", diff --git a/lib/vyasa_web/live/display_manager/display_live.html.heex b/lib/vyasa_web/live/display_manager/display_live.html.heex index 511d49cc..b197102c 100644 --- a/lib/vyasa_web/live/display_manager/display_live.html.heex +++ b/lib/vyasa_web/live/display_manager/display_live.html.heex @@ -71,11 +71,9 @@ - <%= if @mode.action_bar_component do %> -
- <%= live_render(@socket, @mode.action_bar_component, id: "ActionBar", session: @session, sticky: true) %> -
- <% end %> +
+ <%= live_render(@socket, VyasaWeb.MediaLive.MediaBridge, id: "MediaBridge", session: @session, sticky: true) %> +
diff --git a/lib/vyasa_web/live/media_live/media_bridge.ex b/lib/vyasa_web/live/media_live/media_bridge.ex index 96be5536..7d1e57a8 100644 --- a/lib/vyasa_web/live/media_live/media_bridge.ex +++ b/lib/vyasa_web/live/media_live/media_bridge.ex @@ -446,6 +446,7 @@ defmodule VyasaWeb.MediaLive.MediaBridge do attr :max, :integer, default: 100 # elapsed time (in milliseconds) attr :value, :integer + attr :class, :string, default: "" def progress_bar(assigns) do assigns = assign_new(assigns, :value, fn -> assigns[:min] || 0 end) @@ -453,7 +454,10 @@ defmodule VyasaWeb.MediaLive.MediaBridge do ~H"""
+
+
""" end @@ -474,12 +485,13 @@ defmodule VyasaWeb.MediaLive.MediaBridge do attr :playback, Playback, required: false attr :isReady, :boolean, required: false, default: false attr :isPlaying, :boolean, required: true + attr :class, :string, default: "" def play_pause_button(assigns) do ~H""" + + <.follow_mode_toggler + is_follow_mode={@is_follow_mode} + class="text-2xl sm:text-3xl transition-all duration-300 ease-in-out hover:text-brand dark:hover:text-brandAccentLight transform hover:scale-105" + /> + + <.play_pause_button + playback={@playback} + isReady={not is_nil(@playback)} + isPlaying={@playback && @playback.playing?} + class="text-3xl sm:text-4xl transition-all duration-300 ease-in-out hover:text-brand dark:hover:text-brandAccentLight transform hover:scale-110" + /> + + <.video_toggler + should_show_vid={@should_show_vid} + class="text-2xl sm:text-3xl transition-all duration-300 ease-in-out hover:text-brand dark:hover:text-brandAccentLight transform hover:scale-105" + /> + +
+
@@ -94,4 +100,5 @@ player_config={@video_player_config} />
+ <.live_component module={VyasaWeb.AudioPlayer} id={"audio-player"}/>
From a2532e88988b2255fbb05a3dc297c3555eafcbfd Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Mon, 26 Aug 2024 18:46:51 +0800 Subject: [PATCH 075/130] Add :show_media_bridge_default?, hides MediaBridge --- lib/vyasa/display/user_mode.ex | 9 ++++++--- .../live/display_manager/display_live.html.heex | 3 +-- lib/vyasa_web/live/media_live/media_bridge.html.heex | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/lib/vyasa/display/user_mode.ex b/lib/vyasa/display/user_mode.ex index ab93644c..e63c9587 100644 --- a/lib/vyasa/display/user_mode.ex +++ b/lib/vyasa/display/user_mode.ex @@ -22,7 +22,8 @@ defmodule Vyasa.Display.UserMode do :control_panel_component, :quick_actions, :control_panel_modes, - :mode_actions + :mode_actions, + :show_media_bridge_default? ] # THESE ARE EXAMPLE quick actions and mode actions for now @@ -45,7 +46,8 @@ defmodule Vyasa.Display.UserMode do control_panel_component: VyasaWeb.ControlPanel, quick_actions: @quick_actions, control_panel_modes: ["draft"], - mode_actions: @mode_actions + mode_actions: @mode_actions, + show_media_bridge_default?: true }, "draft" => %{ mode: "draft", @@ -56,7 +58,8 @@ defmodule Vyasa.Display.UserMode do control_panel_component: VyasaWeb.ControlPanel, quick_actions: @quick_actions, control_panel_modes: ["read"], - mode_actions: @mode_actions + mode_actions: @mode_actions, + show_media_bridge_default?: false } } diff --git a/lib/vyasa_web/live/display_manager/display_live.html.heex b/lib/vyasa_web/live/display_manager/display_live.html.heex index b197102c..d0f065a4 100644 --- a/lib/vyasa_web/live/display_manager/display_live.html.heex +++ b/lib/vyasa_web/live/display_manager/display_live.html.heex @@ -71,9 +71,8 @@ -
+
<%= live_render(@socket, VyasaWeb.MediaLive.MediaBridge, id: "MediaBridge", session: @session, sticky: true) %>
-
diff --git a/lib/vyasa_web/live/media_live/media_bridge.html.heex b/lib/vyasa_web/live/media_live/media_bridge.html.heex index 342fcd16..6525533f 100644 --- a/lib/vyasa_web/live/media_live/media_bridge.html.heex +++ b/lib/vyasa_web/live/media_live/media_bridge.html.heex @@ -26,7 +26,7 @@
-
+
From 2caf3f5dff5d9e02ddcf1461d49e8ecd94f6e11e Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Mon, 26 Aug 2024 20:12:32 +0800 Subject: [PATCH 076/130] Add VyasaWeb.Hook.UserAgentHook to do ua_parsing [Attempt] display topbar only if non-mobile Not sure if the ua_parsing actually works correctly Minor change --- assets/js/hooks/progress_bar.js | 8 -------- lib/vyasa/parser/ua_parser.ex | 13 +++++++++++++ lib/vyasa_web/components/source_content/verses.ex | 2 ++ lib/vyasa_web/endpoint.ex | 3 ++- lib/vyasa_web/live/display_manager/display_live.ex | 4 ++++ .../live/display_manager/display_live.html.heex | 3 ++- lib/vyasa_web/live/hooks/user_agent_hook.ex | 14 ++++++++++++++ mix.exs | 3 ++- mix.lock | 2 ++ 9 files changed, 41 insertions(+), 11 deletions(-) create mode 100644 lib/vyasa/parser/ua_parser.ex create mode 100644 lib/vyasa_web/live/hooks/user_agent_hook.ex diff --git a/assets/js/hooks/progress_bar.js b/assets/js/hooks/progress_bar.js index dde77636..2227362b 100644 --- a/assets/js/hooks/progress_bar.js +++ b/assets/js/hooks/progress_bar.js @@ -120,14 +120,6 @@ ProgressBar = { seekTimeBridge.dispatch(this, seekTimePayload, "#media-player-container"); return; }, - setProgressBarWidth(progressStyleWidth, selector = "#player-progress") { - const progressBarNode = document.querySelector(selector); - console.assert( - !!progressBarNode, - "progress bar node must always be present in the dom.", - ); - progressBarNode.style.width = progressStyleWidth; - }, startDrag(e) { this.isDragging = true; this.updateProgress(e); diff --git a/lib/vyasa/parser/ua_parser.ex b/lib/vyasa/parser/ua_parser.ex new file mode 100644 index 00000000..331257d1 --- /dev/null +++ b/lib/vyasa/parser/ua_parser.ex @@ -0,0 +1,13 @@ +defmodule Vyasa.UserAgentParser do + @moduledoc """ + Uses the external library, ua_parser to add more fine-tuned judgement of + what the current user-agent is. + """ + def parse_user_agent(user_agent) do + case UAParser.parse(user_agent) do + %UAParser.UA{device: %UAParser.Device{family: "Smartphone"}} -> :mobile + %UAParser.UA{device: %UAParser.Device{family: "Tablet"}} -> :tablet + _ -> :desktop + end + end +end diff --git a/lib/vyasa_web/components/source_content/verses.ex b/lib/vyasa_web/components/source_content/verses.ex index 6a849fd4..a9d52c2d 100644 --- a/lib/vyasa_web/components/source_content/verses.ex +++ b/lib/vyasa_web/components/source_content/verses.ex @@ -14,6 +14,8 @@ defmodule VyasaWeb.Content.Verses do end @impl true + # FIXME: there's a duplication of ids so we get this error on the client side: + # Multiple IDs detected: quick-draft-container. Ensure unique element ids. def render(assigns) do ~H"""
diff --git a/lib/vyasa_web/endpoint.ex b/lib/vyasa_web/endpoint.ex index 1fdd05b7..455f0178 100644 --- a/lib/vyasa_web/endpoint.ex +++ b/lib/vyasa_web/endpoint.ex @@ -11,7 +11,8 @@ defmodule VyasaWeb.Endpoint do same_site: "Lax" ] - socket "/live", Phoenix.LiveView.Socket, websocket: [connect_info: [session: @session_options]] + socket "/live", Phoenix.LiveView.Socket, + websocket: [connect_info: [:user_agent, session: @session_options]] # Serve at "/" the static files from "priv/static" directory. # diff --git a/lib/vyasa_web/live/display_manager/display_live.ex b/lib/vyasa_web/live/display_manager/display_live.ex index e992b47e..c59a848a 100644 --- a/lib/vyasa_web/live/display_manager/display_live.ex +++ b/lib/vyasa_web/live/display_manager/display_live.ex @@ -3,6 +3,8 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do Testing out nested live_views """ use VyasaWeb, :live_view + on_mount VyasaWeb.Hook.UserAgentHook + alias Vyasa.Display.UserMode alias VyasaWeb.OgImageController alias Phoenix.LiveView.Socket @@ -20,6 +22,8 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do # encoded_config = Jason.encode!(@default_player_config) %UserMode{} = mode = UserMode.get_initial_mode() + IO.inspect(socket.assigns.device_type, label: "TRACE device:type:") + { :ok, socket diff --git a/lib/vyasa_web/live/display_manager/display_live.html.heex b/lib/vyasa_web/live/display_manager/display_live.html.heex index d0f065a4..7c3a33b0 100644 --- a/lib/vyasa_web/live/display_manager/display_live.html.heex +++ b/lib/vyasa_web/live/display_manager/display_live.html.heex @@ -1,4 +1,5 @@ -
+
+ <%= @device_type %>
diff --git a/lib/vyasa_web/live/hooks/user_agent_hook.ex b/lib/vyasa_web/live/hooks/user_agent_hook.ex new file mode 100644 index 00000000..7c6c4034 --- /dev/null +++ b/lib/vyasa_web/live/hooks/user_agent_hook.ex @@ -0,0 +1,14 @@ +defmodule VyasaWeb.Hook.UserAgentHook do + import Phoenix.Component + + def on_mount(:default, _params, _session, socket) do + case Phoenix.LiveView.get_connect_info(socket, :user_agent) do + user_agent when is_binary(user_agent) -> + device_type = Vyasa.UserAgentParser.parse_user_agent(user_agent) + {:cont, assign(socket, device_type: device_type)} + + _ -> + {:cont, assign(socket, device_type: :unknown)} + end + end +end diff --git a/mix.exs b/mix.exs index 3159d13d..be8b0ae6 100644 --- a/mix.exs +++ b/mix.exs @@ -70,7 +70,8 @@ defmodule Vyasa.MixProject do {:live_admin, live_admin_dep()}, {:req, "~> 0.4.0"}, {:recase, "~> 0.5"}, - {:timex, "~> 3.0"} + {:timex, "~> 3.0"}, + {:ua_parser, "~> 1.9"} ] end diff --git a/mix.lock b/mix.lock index 3632fbaf..b93641f3 100644 --- a/mix.lock +++ b/mix.lock @@ -66,8 +66,10 @@ "telemetry_poller": {:hex, :telemetry_poller, "1.1.0", "58fa7c216257291caaf8d05678c8d01bd45f4bdbc1286838a28c4bb62ef32999", [:rebar3], [{:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "9eb9d9cbfd81cbd7cdd24682f8711b6e2b691289a0de6826e58452f28c103c8f"}, "timex": {:hex, :timex, "3.7.11", "bb95cb4eb1d06e27346325de506bcc6c30f9c6dea40d1ebe390b262fad1862d1", [:mix], [{:combine, "~> 0.10", [hex: :combine, repo: "hexpm", optional: false]}, {:gettext, "~> 0.20", [hex: :gettext, repo: "hexpm", optional: false]}, {:tzdata, "~> 1.1", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm", "8b9024f7efbabaf9bd7aa04f65cf8dcd7c9818ca5737677c7b76acbc6a94d1aa"}, "tzdata": {:hex, :tzdata, "1.1.1", "20c8043476dfda8504952d00adac41c6eda23912278add38edc140ae0c5bcc46", [:mix], [{:hackney, "~> 1.17", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "a69cec8352eafcd2e198dea28a34113b60fdc6cb57eb5ad65c10292a6ba89787"}, + "ua_parser": {:hex, :ua_parser, "1.9.1", "68a7bbeb9865d118cb27cd63f6eae1c084b930a38b46f31861e1e3eed525396c", [:mix], [{:yamerl, "~> 0.8", [hex: :yamerl, repo: "hexpm", optional: false]}], "hexpm", "b9f56d722a999b1940e8e9b17a84e23ead0525cf32250bb333afad89ca73fe46"}, "unicode_util_compat": {:hex, :unicode_util_compat, "0.7.0", "bc84380c9ab48177092f43ac89e4dfa2c6d62b40b8bd132b1059ecc7232f9a78", [:rebar3], [], "hexpm", "25eee6d67df61960cf6a794239566599b09e17e668d3700247bc498638152521"}, "vix": {:hex, :vix, "0.29.0", "e6afff70c839722aaeb9be924beacc48711289a1090af72a0082f5d2b3a981fb", [:make, :mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: false]}, {:cc_precompiler, "~> 0.1.4 or ~> 0.2", [hex: :cc_precompiler, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.7.3 or ~> 0.8", [hex: :elixir_make, repo: "hexpm", optional: false]}, {:kino, "~> 0.7", [hex: :kino, repo: "hexpm", optional: true]}], "hexpm", "6809f26629afa6fc792fce7f14146e9e2ea1ef71bde92e1ee1318883d5aa48a8"}, "websock": {:hex, :websock, "0.5.3", "2f69a6ebe810328555b6fe5c831a851f485e303a7c8ce6c5f675abeb20ebdadc", [:mix], [], "hexpm", "6105453d7fac22c712ad66fab1d45abdf049868f253cf719b625151460b8b453"}, "websock_adapter": {:hex, :websock_adapter, "0.5.7", "65fa74042530064ef0570b75b43f5c49bb8b235d6515671b3d250022cb8a1f9e", [:mix], [{:bandit, ">= 0.6.0", [hex: :bandit, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.6", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:websock, "~> 0.5", [hex: :websock, repo: "hexpm", optional: false]}], "hexpm", "d0f478ee64deddfec64b800673fd6e0c8888b079d9f3444dd96d2a98383bdbd1"}, + "yamerl": {:hex, :yamerl, "0.10.0", "4ff81fee2f1f6a46f1700c0d880b24d193ddb74bd14ef42cb0bcf46e81ef2f8e", [:rebar3], [], "hexpm", "346adb2963f1051dc837a2364e4acf6eb7d80097c0f53cbdc3046ec8ec4b4e6e"}, } From 6353710f2a229c0d7b995fc6742cdd2a45866a41 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Mon, 26 Aug 2024 21:21:36 +0800 Subject: [PATCH 077/130] Fix ua_parsing issues Now, we do a check using the family values and doing a regex. I suspect we'd need to keep updating this if the parsing breaks in thefuture. but should be good enough for now. also the different versions of the ua_parser lib seem to be giving different output --- lib/vyasa/parser/ua_parser.ex | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/lib/vyasa/parser/ua_parser.ex b/lib/vyasa/parser/ua_parser.ex index 331257d1..3daec781 100644 --- a/lib/vyasa/parser/ua_parser.ex +++ b/lib/vyasa/parser/ua_parser.ex @@ -1,13 +1,27 @@ defmodule Vyasa.UserAgentParser do @moduledoc """ - Uses the external library, ua_parser to add more fine-tuned judgement of - what the current user-agent is. + Uses the UA Parser library to determine the device type from a user agent string. """ - def parse_user_agent(user_agent) do - case UAParser.parse(user_agent) do - %UAParser.UA{device: %UAParser.Device{family: "Smartphone"}} -> :mobile - %UAParser.UA{device: %UAParser.Device{family: "Tablet"}} -> :tablet - _ -> :desktop + + def parse_user_agent(user_agent) when is_binary(user_agent) do + ua = UAParser.parse(user_agent) + + cond do + is_mobile?(ua) -> :mobile + is_tablet?(ua) -> :tablet + true -> :desktop end end + + def parse_user_agent(_), do: :unknown + + defp is_mobile?(ua) do + ua.os.family in ["Android", "iOS", "Windows Phone"] or + String.match?(ua.os.family, ~r/Mobile|iP(hone|od)|Android|BlackBerry|IEMobile|Silk/) + end + + defp is_tablet?(ua) do + (ua.os.family == "iOS" and ua.device.model == "iPad") or + (ua.os.family == "Android" and not is_mobile?(ua)) + end end From 1e05d67a5e2787c9e98b11fc792a6b7adb345e4c Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Mon, 26 Aug 2024 23:20:45 +0800 Subject: [PATCH 078/130] Minor changes --- lib/vyasa_web/live/display_manager/display_live.html.heex | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/vyasa_web/live/display_manager/display_live.html.heex b/lib/vyasa_web/live/display_manager/display_live.html.heex index 7c3a33b0..2e6dadd0 100644 --- a/lib/vyasa_web/live/display_manager/display_live.html.heex +++ b/lib/vyasa_web/live/display_manager/display_live.html.heex @@ -1,5 +1,5 @@ + From 9a3c8231dc814c487004e7dbb9dc5fed087e9a63 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Tue, 27 Aug 2024 00:49:54 +0800 Subject: [PATCH 079/130] [UI]: hide MediaBridge if keyboard open on :mobile Primarily for quick drafts on mobile, 1. the mediabridge will be hidden (animated away by right) 2. once done typing, it should be visible again It corresponds to: 1. if phone keyboard is open, hide the media player, else show it so that more screen space is given for mobile devices --- .../components/source_content/verses.ex | 8 +- .../live/display_manager/display_live.ex | 60 ++++++- .../display_manager/display_live.html.heex | 156 ++++++++++-------- 3 files changed, 148 insertions(+), 76 deletions(-) diff --git a/lib/vyasa_web/components/source_content/verses.ex b/lib/vyasa_web/components/source_content/verses.ex index a9d52c2d..23200283 100644 --- a/lib/vyasa_web/components/source_content/verses.ex +++ b/lib/vyasa_web/components/source_content/verses.ex @@ -187,12 +187,18 @@ defmodule VyasaWeb.Content.Verses do <%= @quote %> -
+
<.form for={%{}} phx-submit="createMark">
diff --git a/lib/vyasa_web/live/display_manager/display_live.ex b/lib/vyasa_web/live/display_manager/display_live.ex index c59a848a..75fb644c 100644 --- a/lib/vyasa_web/live/display_manager/display_live.ex +++ b/lib/vyasa_web/live/display_manager/display_live.ex @@ -20,7 +20,9 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do @impl true def mount(_params, sess, socket) do # encoded_config = Jason.encode!(@default_player_config) - %UserMode{} = mode = UserMode.get_initial_mode() + %UserMode{ + show_media_bridge_default?: show_media_bridge_default? + } = mode = UserMode.get_initial_mode() IO.inspect(socket.assigns.device_type, label: "TRACE device:type:") @@ -30,7 +32,8 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do # to allow passing to children live-views # TODO: figure out if this is important |> assign(stored_session: sess) - |> assign(mode: mode), + |> assign(mode: mode) + |> assign(show_media_bridge?: show_media_bridge_default?), layout: {VyasaWeb.Layouts, :display_manager} } end @@ -285,6 +288,21 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do |> assign(:marks, [%{d_mark | binding: bind, verse_id: verse_id} | marks])} end + @impl true + def handle_event( + "verses::focus_toggle_on_quick_mark_drafting", + %{"is_focusing?" => is_focusing?} = _payload, + %Socket{ + assigns: %{ + device_type: device_type + } + } = socket + ) do + {:noreply, + socket + |> assign(show_media_bridge?: should_show_media_bridge(device_type, is_focusing?))} + end + @impl true def handle_event( "bindHoveRune", @@ -323,14 +341,31 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do def handle_event( "createMark", %{"body" => body}, - %{assigns: %{marks: [%Mark{state: :draft} = d_mark | marks]}} = socket + %{assigns: %{marks: [%Mark{state: :draft} = d_mark | marks], device_type: device_type}} = + socket ) do - {:noreply, socket |> assign(:marks, [%{d_mark | body: body, state: :live} | marks])} + {:noreply, + socket + |> assign(:marks, [%{d_mark | body: body, state: :live} | marks]) + |> assign(:show_media_bridge?, should_show_media_bridge(device_type, false))} end @impl true - def handle_event("createMark", _event, socket) do - {:noreply, socket} + def handle_event( + "createMark", + _event, + %Socket{ + assigns: %{ + device_type: device_type + } + } = + socket + ) do + { + :noreply, + socket + |> assign(:show_media_bridge?, should_show_media_bridge(device_type, false)) + } end def handle_event(event, message, socket) do @@ -402,4 +437,17 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do def maybe_config_stream(%Socket{} = socket, _, _) do socket end + + defp should_show_media_bridge(device_type, is_focusing?) + when is_atom(device_type) and is_boolean(is_focusing?) do + case {device_type, is_focusing?} do + {:mobile, true} -> false + {:mobile, false} -> true + {_, _} -> true + end + end + + defp should_show_media_bridge(_, _) do + true + end end diff --git a/lib/vyasa_web/live/display_manager/display_live.html.heex b/lib/vyasa_web/live/display_manager/display_live.html.heex index 2e6dadd0..6f1b6278 100644 --- a/lib/vyasa_web/live/display_manager/display_live.html.heex +++ b/lib/vyasa_web/live/display_manager/display_live.html.heex @@ -1,81 +1,99 @@ -
-
-
-
- - - -

- v<%= Application.spec(:vyasa, :vsn) %> -

-
- -
-
+ +
+
+
+
+ + + +

+ v<%= Application.spec(:vyasa, :vsn) %> +

+
+
+
- <.live_component - module={VyasaWeb.HoveRune} - id={"hoverune"} - quick_actions={@mode.quick_actions} - /> +
+
+
+ <.live_component module={@mode.control_panel_component} id="control_panel" mode={@mode} /> +
- -
- <%= if @content_action == :show_sources do%> <.live_component - module={VyasaWeb.Content.Sources} - id={"content-sources"} - sources={@streams.sources} + module={VyasaWeb.HoveRune} + id={"hoverune"} + quick_actions={@mode.quick_actions} /> - <% end %> - <%= if @content_action == :show_chapters do%> - <.live_component - module={VyasaWeb.Content.Chapters} - id={"content-chapters"} - source={@source} - chapters={@streams.chapters} - /> - <% end %> + +
+ <%= if @content_action == :show_sources do%> + <.live_component + module={VyasaWeb.Content.Sources} + id={"content-sources"} + sources={@streams.sources} + /> + <% end %> - <%= if @content_action == :show_verses do%> - <.live_component - module={VyasaWeb.Content.Verses} - id={"content-verses"} - src={@src} - verses={@streams.verses} - chap={@chap} - kv_verses={@kv_verses} - marks={@marks} - lang={@lang} - selected_transl={@selected_transl} - page_title={@page_title} - /> - <% end %> -
+ <%= if @content_action == :show_chapters do%> + <.live_component + module={VyasaWeb.Content.Chapters} + id={"content-chapters"} + source={@source} + chapters={@streams.chapters} + /> + <% end %> + <%= if @content_action == :show_verses do%> + <.live_component + module={VyasaWeb.Content.Verses} + id={"content-verses"} + src={@src} + verses={@streams.verses} + chap={@chap} + kv_verses={@kv_verses} + marks={@marks} + lang={@lang} + selected_transl={@selected_transl} + page_title={@page_title} + /> + <% end %> +
- -
- <%= live_render(@socket, VyasaWeb.MediaLive.MediaBridge, id: "MediaBridge", session: @session, sticky: true) %> -
-
-
+ + +
+ <%= live_render(@socket, VyasaWeb.MediaLive.MediaBridge, id: "MediaBridge", session: @session, sticky: true) %> +
+
+
From 5945547cdb464b909410b1dc92c4b49f111cfa3f Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Tue, 27 Aug 2024 01:12:18 +0800 Subject: [PATCH 080/130] [Attempt] handle capture of enter button press --- lib/vyasa_web/components/source_content/verses.ex | 4 ++++ .../live/display_manager/display_live.ex | 15 +++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/lib/vyasa_web/components/source_content/verses.ex b/lib/vyasa_web/components/source_content/verses.ex index 23200283..a99996b4 100644 --- a/lib/vyasa_web/components/source_content/verses.ex +++ b/lib/vyasa_web/components/source_content/verses.ex @@ -199,6 +199,10 @@ defmodule VyasaWeb.Content.Verses do phx-blur={ JS.push("verses::focus_toggle_on_quick_mark_drafting", value: %{is_focusing?: false}) } + phx-window-blur={ + JS.push("verses::focus_toggle_on_quick_mark_drafting", value: %{is_focusing?: false}) + } + phx-keyup="verses::focus_toggle_on_quick_mark_drafting" />
diff --git a/lib/vyasa_web/live/display_manager/display_live.ex b/lib/vyasa_web/live/display_manager/display_live.ex index 75fb644c..ffad6e85 100644 --- a/lib/vyasa_web/live/display_manager/display_live.ex +++ b/lib/vyasa_web/live/display_manager/display_live.ex @@ -288,6 +288,21 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do |> assign(:marks, [%{d_mark | binding: bind, verse_id: verse_id} | marks])} end + @impl true + def handle_event( + "verses::focus_toggle_on_quick_mark_drafting", + %{"key" => "Enter"} = _payload, + %Socket{ + assigns: %{ + device_type: device_type + } + } = socket + ) do + {:noreply, + socket + |> assign(show_media_bridge?: should_show_media_bridge(device_type, false))} + end + @impl true def handle_event( "verses::focus_toggle_on_quick_mark_drafting", From 66619a149dc08b20fdb7a2fca3f6f2f28089c737 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Tue, 27 Aug 2024 01:21:39 +0800 Subject: [PATCH 081/130] [WIP] prepare user_mode to inject action_bar slots This should be the "interface" to judge what the DM displays. time to toh for now --- lib/vyasa/display/user_mode.ex | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/lib/vyasa/display/user_mode.ex b/lib/vyasa/display/user_mode.ex index e63c9587..87c78623 100644 --- a/lib/vyasa/display/user_mode.ex +++ b/lib/vyasa/display/user_mode.ex @@ -23,7 +23,10 @@ defmodule Vyasa.Display.UserMode do :quick_actions, :control_panel_modes, :mode_actions, - :show_media_bridge_default? + :show_media_bridge_default?, + :action_bar_nav_event_prefix, + :action_bar_actions, + :action_bar_info_types ] # THESE ARE EXAMPLE quick actions and mode actions for now @@ -47,7 +50,10 @@ defmodule Vyasa.Display.UserMode do quick_actions: @quick_actions, control_panel_modes: ["draft"], mode_actions: @mode_actions, - show_media_bridge_default?: true + show_media_bridge_default?: true, + action_bar_nav_event_prefix: "quick_mark_nav", + action_bar_actions: [], + action_bar_info_types: [] }, "draft" => %{ mode: "draft", @@ -59,7 +65,10 @@ defmodule Vyasa.Display.UserMode do quick_actions: @quick_actions, control_panel_modes: ["read"], mode_actions: @mode_actions, - show_media_bridge_default?: false + show_media_bridge_default?: false, + action_bar_nav_event_prefix: "quick_mark_nav", + action_bar_actions: [], + action_bar_info_types: [] } } From f6ce35b8363b8d183d13c18fbdb1d83172a918f9 Mon Sep 17 00:00:00 2001 From: ks0m1c_dharma Date: Tue, 27 Aug 2024 14:46:48 +0800 Subject: [PATCH 082/130] Stream of Marks --- lib/vyasa/written.ex | 2 +- lib/vyasa/written/verse.ex | 2 +- .../components/source_content/verses.ex | 11 +-- .../display_manager/components/drafting.ex | 60 ------------ .../live/display_manager/display_live.ex | 92 ++++++++++++------- 5 files changed, 65 insertions(+), 102 deletions(-) delete mode 100644 lib/vyasa_web/live/display_manager/components/drafting.ex diff --git a/lib/vyasa/written.ex b/lib/vyasa/written.ex index e7453b9a..d120660b 100644 --- a/lib/vyasa/written.ex +++ b/lib/vyasa/written.ex @@ -331,7 +331,7 @@ defmodule Vyasa.Written do # Sanskrit defp lang2script(%Source{lang: "sa"} = s), do: %{s | script: "dn"} # Awadhi - defp lang2script(%Source{lang: "awadi"} = s), do: %{s | script: "dn"} + defp lang2script(%Source{lang: "awa"} = s), do: %{s | script: "dn"} # Tamil defp lang2script(%Source{lang: "ta"} = s), do: %{s | script: "ta"} diff --git a/lib/vyasa/written/verse.ex b/lib/vyasa/written/verse.ex index b6f63650..5659677d 100644 --- a/lib/vyasa/written/verse.ex +++ b/lib/vyasa/written/verse.ex @@ -10,7 +10,7 @@ defmodule Vyasa.Written.Verse do schema "verses" do field :no, :integer field :body, :string - field :binding, :any, virtual: true + field :binding, :map, virtual: true belongs_to :source, Source, type: Ecto.UUID belongs_to :chapter, Chapter, type: :integer, references: :no, foreign_key: :chapter_no diff --git a/lib/vyasa_web/components/source_content/verses.ex b/lib/vyasa_web/components/source_content/verses.ex index a99996b4..24c72cf7 100644 --- a/lib/vyasa_web/components/source_content/verses.ex +++ b/lib/vyasa_web/components/source_content/verses.ex @@ -96,14 +96,13 @@ defmodule VyasaWeb.Content.Verses do <%= Struct.get_in(Map.get(elem, :node, @verse), elem.field) %>
<.comment_binding comments={@verse.comments} /> @@ -150,9 +149,9 @@ defmodule VyasaWeb.Content.Verses do def drafting(assigns) do assigns = assigns |> assign(:elem_id, "comment-modal-#{Ecto.UUID.generate()}") - + IO.inspect(assigns, label: "state") ~H""" -
+
Enum.reverse()} :if={mark.state == :live}> - - <%= mark.binding.window.quote %> - - - <%= mark.body %> - <%= "Self" %> - -
- - - <%= @quote %> - - -
- <.form for={%{}} phx-submit="createMark"> - - -
- -
-
- """ - end -end diff --git a/lib/vyasa_web/live/display_manager/display_live.ex b/lib/vyasa_web/live/display_manager/display_live.ex index ffad6e85..8fafceaa 100644 --- a/lib/vyasa_web/live/display_manager/display_live.ex +++ b/lib/vyasa_web/live/display_manager/display_live.ex @@ -256,17 +256,14 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do when is_binary(curr_verse_id) and verse_id != curr_verse_id do # binding here blocks the stream from appending to quote bind = Draft.bind_node(bind) + bound_verses = verses + |> then(&put_in(&1[verse_id].binding, bind)) + |> then(&put_in(&1[curr_verse_id].binding, nil)) {:noreply, socket - |> stream_insert( - :verses, - %{verses[curr_verse_id] | binding: nil} - ) - |> stream_insert( - :verses, - %{verses[verse_id] | binding: bind} - ) + |> mutate_verses(curr_verse_id, bound_verses) + |> mutate_verses(verse_id, bound_verses) |> assign(:marks, [%{d_mark | binding: bind, verse_id: verse_id} | marks])} end @@ -278,16 +275,31 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do ) do # binding here blocks the stream from appending to quote bind = Draft.bind_node(bind_target_payload) + bound_verses = put_in(verses[verse_id].binding, bind) {:noreply, socket - |> stream_insert( - :verses, - %{verses[verse_id] | binding: bind} - ) + |> mutate_verses(verse_id, bound_verses) |> assign(:marks, [%{d_mark | binding: bind, verse_id: verse_id} | marks])} end + @impl true + def handle_event( + "bindHoveRune", + %{"binding" => bind = %{"verse_id" => verse_id}}, + %{assigns: %{kv_verses: verses, marks: [%Mark{order: no} | _] = marks}} = socket + ) do + bind = Draft.bind_node(bind) + bound_verses = put_in(verses[verse_id].binding, bind) + + {:noreply, + socket + |> mutate_verses(verse_id, bound_verses) + |> assign(:marks, [ + %Mark{state: :draft, order: no + 1, verse_id: verse_id, binding: bind} | marks + ])} + end + @impl true def handle_event( "verses::focus_toggle_on_quick_mark_drafting", @@ -318,32 +330,13 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do |> assign(show_media_bridge?: should_show_media_bridge(device_type, is_focusing?))} end - @impl true - def handle_event( - "bindHoveRune", - %{"binding" => bind = %{"verse_id" => verse_id}}, - %{assigns: %{kv_verses: verses, marks: [%Mark{order: no} | _] = marks}} = socket - ) do - bind = Draft.bind_node(bind) - - {:noreply, - socket - |> stream_insert( - :verses, - %{verses[verse_id] | binding: bind} - ) - |> assign(:marks, [ - %Mark{state: :draft, order: no + 1, verse_id: verse_id, binding: bind} | marks - ])} - end - @impl true def handle_event( "markQuote", _, %{assigns: %{marks: [%Mark{state: :draft} = d_mark | marks]}} = socket ) do - IO.inspect(marks) + {:noreply, socket |> assign(:marks, [%{d_mark | state: :live} | marks])} end @@ -356,12 +349,33 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do def handle_event( "createMark", %{"body" => body}, - %{assigns: %{marks: [%Mark{state: :draft} = d_mark | marks], device_type: device_type}} = - socket + %{assigns: %{kv_verses: verses, + marks: [%Mark{state: :draft, verse_id: v_id, binding: binding} = d_mark | marks], + device_type: device_type}} = socket + ) do + {:noreply, + socket + |> assign(:marks, [%{d_mark | body: body, state: :live} | marks]) + |> stream_insert( + :verses, %{verses[v_id] | binding: binding} + ) + |> assign(:show_media_bridge?, should_show_media_bridge(device_type, false))} + end + + # when user remains on the the same binding + def handle_event( + "createMark", + %{"body" => body}, + %{assigns: %{kv_verses: verses, + marks: [%Mark{state: :live, verse_id: v_id, binding: binding} = d_mark | _] = marks, + device_type: device_type}} = socket ) do {:noreply, socket |> assign(:marks, [%{d_mark | body: body, state: :live} | marks]) + |> stream_insert( + :verses, %{verses[v_id] | binding: binding} + ) |> assign(:show_media_bridge?, should_show_media_bridge(device_type, false))} end @@ -376,6 +390,7 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do } = socket ) do + { :noreply, socket @@ -453,6 +468,15 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do socket end + defp mutate_verses(%Socket{} = socket, target_verse_id, mutated_verses) do + socket + |> stream_insert( + :verses, + mutated_verses[target_verse_id] + ) + |> assign(:kv_verses, mutated_verses) + end + defp should_show_media_bridge(device_type, is_focusing?) when is_atom(device_type) and is_boolean(is_focusing?) do case {device_type, is_focusing?} do From f2b7d9afb4c8b23730f0d173827845c24de12e13 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Tue, 27 Aug 2024 16:46:01 +0800 Subject: [PATCH 083/130] Add Slottable ActionBar, cohere w MediaBridge MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Similar to the hoverune implementation, this action_bar.ex live_component also takes in an array of actions, which the user_mode defines and then renders buttons that trigger click events specific to the mode and action_name. This allows the DM to be the one with the necessary handlers to act on these events. ******* 1. Bars are soft appearing / disappearing This means that we don't mount / destroy nodes, simply hide and make them appear as and when we need. This means that we need to make some things "equivalent" and work the same way as it does on MediaBridge and ActionBar. Suppose there are nav buttons (the left and right stuff) which are generic. They will DEFINITELY appear on the MediaBridge. They may or may not appear on the ActionBar. This means that any button click on the nav buttons on MediaBridge may just be relayed to a optionally present button on the actionbar, along with other buttons on the action bar. ******* 2. Maintain equivalence in UI buttons b/w action-bar and media bridge by relaying button clicks This will Shim / Relay the nav button click from the media bridge to the corresponding action bar via hooks Essentially, clicking the nav buttons on the mediabridge will relay to the nav buttons on the action bar, which is mode-specific Here's some logs to show that the wire-up looks okay (have left the functions empty first). %Vix.Vips.Image{ref: #Reference<0.3949460734.1140719640.214139>} [debug] HANDLE EVENT "read::nav_back" in VyasaWeb.DisplayManager.DisplayLive Parameters: %{"value" => ""} TRACE: TODO handle nav_event @ action-bar region: %{"event" => "nav_back", "mode" => "read"} [debug] Replied in 430µs TRACE: TODO handle nav_event @ action-bar region: %{"event" => "nav_fwd", "mode" => "read"} [debug] HANDLE EVENT "read::nav_fwd" in VyasaWeb.DisplayManager.DisplayLive Parameters: %{"value" => ""} [debug] Replied in 375µs TRACE handle event for toggle_show_control_panel: false [debug] HANDLE EVENT "toggle_show_control_panel" in VyasaWeb.DisplayManager.DisplayLive Component: VyasaWeb.ControlPanel Parameters: %{"value" => ""} [debug] Replied in 342µs [debug] HANDLE EVENT "change_mode" in VyasaWeb.DisplayManager.DisplayLive Parameters: %{"current_mode" => "read", "target_mode" => "draft", "value" => ""} [debug] Replied in 162µs [debug] HANDLE EVENT "draft::nav_fwd" in VyasaWeb.DisplayManager.DisplayLive Parameters: %{"value" => ""} TRACE: TODO handle nav_event @ action-bar region: %{"event" => "nav_fwd", "mode" => "draft"} [debug] Replied in 562µs TRACE: TODO handle nav_event @ action-bar region: %{"event" => "nav_back", "mode" => "draft"} [debug] HANDLE EVENT "draft::nav_back" in VyasaWeb.DisplayManager.DisplayLive Parameters: %{"value" => ""} [debug] Replied in 573µs iex(test@127.0.0.1)1> --- assets/js/hooks/button_click_relayer.js | 23 ++++++++ assets/js/hooks/index.js | 2 + assets/tailwind.config.js | 9 +++ lib/vyasa/display/user_mode.ex | 11 ++-- lib/vyasa_web/components/action_bar.ex | 57 +++++++++++++++++++ .../components/user_mode_components.ex | 18 ++++++ .../live/display_manager/display_live.ex | 56 +++++++++++++++++- .../display_manager/display_live.html.heex | 8 +++ .../live/media_live/media_bridge.html.heex | 16 ++++-- 9 files changed, 187 insertions(+), 13 deletions(-) create mode 100644 assets/js/hooks/button_click_relayer.js create mode 100644 lib/vyasa_web/components/action_bar.ex diff --git a/assets/js/hooks/button_click_relayer.js b/assets/js/hooks/button_click_relayer.js new file mode 100644 index 00000000..ab3982cb --- /dev/null +++ b/assets/js/hooks/button_click_relayer.js @@ -0,0 +1,23 @@ +/** + * This hook intends to follow a relay / shim pattern. + * + * When registered, it should have an associated name of a different dom selector and an event. + * What this will do is to listen to a click event, and trigger the click even in the target dom node, if that exists. + * + * There's scope to generify this beyond click events in the future. + * */ +ButtonClickRelayer = { + mounted() { + this.el.addEventListener("click", (e) => this.relayClickEvent(e)); + }, + relayClickEvent(e) { + e.preventDefault(); + const { targetRelayId: targetId } = this.el.dataset; + const targetButton = document.getElementById(targetId); + if (targetButton) { + targetButton.click(); + } + }, +}; + +export default ButtonClickRelayer; diff --git a/assets/js/hooks/index.js b/assets/js/hooks/index.js index 2e312973..3894c7c4 100644 --- a/assets/js/hooks/index.js +++ b/assets/js/hooks/index.js @@ -12,6 +12,7 @@ import ApplyModal from "./apply_modal.js"; import MargiNote from "./marginote.js"; import HoveRune from "./hoverune.js"; import Scrolling from "./scrolling.js"; +import ButtonClickRelayer from "./button_click_relayer.js"; let Hooks = { ShareQuoteButton, @@ -26,6 +27,7 @@ let Hooks = { MargiNote, HoveRune, Scrolling, + ButtonClickRelayer, }; export default Hooks; diff --git a/assets/tailwind.config.js b/assets/tailwind.config.js index 9655ce38..e9e48530 100644 --- a/assets/tailwind.config.js +++ b/assets/tailwind.config.js @@ -14,6 +14,15 @@ module.exports = { ], theme: { extend: { + animation: { + ripple: "ripple 0.6s linear", + }, + keyframes: { + ripple: { + "0%": { transform: "scale(0)", opacity: "0.5" }, + "100%": { transform: "scale(4)", opacity: "0" }, + }, + }, fontFamily: { dn: ['"Gotu"', "sans-serif"], tl: ['"Vyas", "sans-serif"'], diff --git a/lib/vyasa/display/user_mode.ex b/lib/vyasa/display/user_mode.ex index 87c78623..f5a04f62 100644 --- a/lib/vyasa/display/user_mode.ex +++ b/lib/vyasa/display/user_mode.ex @@ -24,7 +24,6 @@ defmodule Vyasa.Display.UserMode do :control_panel_modes, :mode_actions, :show_media_bridge_default?, - :action_bar_nav_event_prefix, :action_bar_actions, :action_bar_info_types ] @@ -51,9 +50,9 @@ defmodule Vyasa.Display.UserMode do control_panel_modes: ["draft"], mode_actions: @mode_actions, show_media_bridge_default?: true, - action_bar_nav_event_prefix: "quick_mark_nav", - action_bar_actions: [], - action_bar_info_types: [] + # NOTE: so when it's used, the event name will end up being + # "quick_mark_nav-dec" ==> moves backwawrd in the order of the list + action_bar_actions: [:nav_back, :nav_fwd] }, "draft" => %{ mode: "draft", @@ -66,9 +65,7 @@ defmodule Vyasa.Display.UserMode do control_panel_modes: ["read"], mode_actions: @mode_actions, show_media_bridge_default?: false, - action_bar_nav_event_prefix: "quick_mark_nav", - action_bar_actions: [], - action_bar_info_types: [] + action_bar_actions: [:nav_back, :nav_fwd] } } diff --git a/lib/vyasa_web/components/action_bar.ex b/lib/vyasa_web/components/action_bar.ex new file mode 100644 index 00000000..71b18b6b --- /dev/null +++ b/lib/vyasa_web/components/action_bar.ex @@ -0,0 +1,57 @@ +defmodule VyasaWeb.ActionBar do + @moduledoc """ + ActionBar is our slottable panel of buttons that are user-mode-specific. + It shall recieve a list of actions and shall effect changes specific to the user mode. + + For example, consider the action of navigation, which is a generic slot + + say the following info is passeed via %UserMode: + %UserMode{ + ... + mode: "read", + action_bar_actions: [:nav_back, :nav_fwd] + ... + } = u_mode + + then the action is used for the phx-click for that button, and the event name ends up being a concat: + <> "::" <> + """ + use VyasaWeb, :live_component + alias Vyasa.Display.UserMode + import VyasaWeb.Display.UserMode.Components + + attr :mode, UserMode, required: true + @impl true + def render(assigns) do + ~H""" +
+ <%= for action <- @mode.action_bar_actions do %> + <.action_bar_action + action_name={Atom.to_string(action)} + action_event={define_action_event_name(action, @mode)} + action_icon_name={get_action_icon_name(action)} + /> + <% end %> +
+ """ + end + + def define_action_event_name(action, %UserMode{mode: mode_name} = _mode) when is_atom(action) do + mode_name <> "::" <> Atom.to_string(action) + end + + @doc """ + Resolves icons to use for the actions + """ + def get_action_icon_name(action) when is_atom(action) do + case action do + :nav_back -> "hero-arrow-left-circle" + :nav_fwd -> "hero-arrow-right-circle" + _ -> nil + end + end +end diff --git a/lib/vyasa_web/components/user_mode_components.ex b/lib/vyasa_web/components/user_mode_components.ex index 8d63040a..88b937ae 100644 --- a/lib/vyasa_web/components/user_mode_components.ex +++ b/lib/vyasa_web/components/user_mode_components.ex @@ -18,6 +18,24 @@ defmodule VyasaWeb.Display.UserMode.Components do """ end + def action_bar_action(assigns) do + ~H""" + + """ + end + attr :current_mode, UserMode, required: true attr :target_mode, UserMode, required: true diff --git a/lib/vyasa_web/live/display_manager/display_live.ex b/lib/vyasa_web/live/display_manager/display_live.ex index ffad6e85..aa4ce484 100644 --- a/lib/vyasa_web/live/display_manager/display_live.ex +++ b/lib/vyasa_web/live/display_manager/display_live.ex @@ -21,11 +21,10 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do def mount(_params, sess, socket) do # encoded_config = Jason.encode!(@default_player_config) %UserMode{ + # TEMP show_media_bridge_default?: show_media_bridge_default? } = mode = UserMode.get_initial_mode() - IO.inspect(socket.assigns.device_type, label: "TRACE device:type:") - { :ok, socket @@ -33,7 +32,10 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do # TODO: figure out if this is important |> assign(stored_session: sess) |> assign(mode: mode) + |> assign(show_action_bar?: true) |> assign(show_media_bridge?: show_media_bridge_default?), + # temp + # |> assign(show_media_bridge?: true), layout: {VyasaWeb.Layouts, :display_manager} } end @@ -318,6 +320,56 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do |> assign(show_media_bridge?: should_show_media_bridge(device_type, is_focusing?))} end + @impl true + def handle_event( + "read" <> "::" <> event = _nav_event, + _, + %Socket{ + assigns: %{ + mode: %UserMode{ + mode: mode_name + } + } + } = socket + ) do + IO.inspect( + %{ + "event" => event, + "mode" => mode_name + }, + label: "TRACE: TODO handle nav_event @ action-bar region" + ) + + # TODO: implement nav_event handlers from action bar + # This is also the event handler that needs to be triggerred if the user clicks on the nav buttons on the media bridge. + {:noreply, socket} + end + + @impl true + def handle_event( + "draft" <> "::" <> event = _nav_event, + _, + %Socket{ + assigns: %{ + mode: %UserMode{ + mode: mode_name + } + } + } = socket + ) do + IO.inspect( + %{ + "event" => event, + "mode" => mode_name + }, + label: "TRACE: TODO handle nav_event @ action-bar region" + ) + + # TODO: implement nav_event handlers from action bar + # This is also the event handler that needs to be triggerred if the user clicks on the nav buttons on the media bridge. + {:noreply, socket} + end + @impl true def handle_event( "bindHoveRune", diff --git a/lib/vyasa_web/live/display_manager/display_live.html.heex b/lib/vyasa_web/live/display_manager/display_live.html.heex index 6f1b6278..e513d2eb 100644 --- a/lib/vyasa_web/live/display_manager/display_live.html.heex +++ b/lib/vyasa_web/live/display_manager/display_live.html.heex @@ -88,6 +88,14 @@ <% end %>
+
+ <.live_component + module={VyasaWeb.ActionBar} + id={"action-bar"} + mode={@mode} + /> +
+
diff --git a/lib/vyasa_web/live/media_live/media_bridge.html.heex b/lib/vyasa_web/live/media_live/media_bridge.html.heex index 6525533f..f28cd919 100644 --- a/lib/vyasa_web/live/media_live/media_bridge.html.heex +++ b/lib/vyasa_web/live/media_live/media_bridge.html.heex @@ -26,7 +26,7 @@
-
+
@@ -58,11 +58,15 @@
-
- @@ -83,7 +87,11 @@ class="text-2xl sm:text-3xl transition-all duration-300 ease-in-out hover:text-brand dark:hover:text-brandAccentLight transform hover:scale-105" /> -
From 2c87ab33172fe858a52444d17424a4a3fa59d1e8 Mon Sep 17 00:00:00 2001 From: ks0m1c_dharma Date: Tue, 27 Aug 2024 17:13:38 +0800 Subject: [PATCH 084/130] Fixed Dupe Acked-by: ks0m1c_dharma --- .../live/display_manager/display_live.ex | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/lib/vyasa_web/live/display_manager/display_live.ex b/lib/vyasa_web/live/display_manager/display_live.ex index 783971c8..ebc8139c 100644 --- a/lib/vyasa_web/live/display_manager/display_live.ex +++ b/lib/vyasa_web/live/display_manager/display_live.ex @@ -383,24 +383,6 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do {:noreply, socket} end - @impl true - def handle_event( - "bindHoveRune", - %{"binding" => bind = %{"verse_id" => verse_id}}, - %{assigns: %{kv_verses: verses, marks: [%Mark{order: no} | _] = marks}} = socket - ) do - bind = Draft.bind_node(bind) - - {:noreply, - socket - |> stream_insert( - :verses, - %{verses[verse_id] | binding: bind} - ) - |> assign(:marks, [ - %Mark{state: :draft, order: no + 1, verse_id: verse_id, binding: bind} | marks - ])} - end @impl true def handle_event( From dcd090c97a50920da55e0ad0fcca7b168171385a Mon Sep 17 00:00:00 2001 From: ks0m1c_dharma Date: Tue, 27 Aug 2024 17:28:43 +0800 Subject: [PATCH 085/130] Hygiene eq_verse_binding guard --- lib/vyasa_web/components/source_content/verses.ex | 6 ++++-- lib/vyasa_web/live/display_manager/display_live.ex | 3 +++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/vyasa_web/components/source_content/verses.ex b/lib/vyasa_web/components/source_content/verses.ex index 24c72cf7..4761d483 100644 --- a/lib/vyasa_web/components/source_content/verses.ex +++ b/lib/vyasa_web/components/source_content/verses.ex @@ -96,8 +96,7 @@ defmodule VyasaWeb.Content.Verses do <%= Struct.get_in(Map.get(elem, :node, @verse), elem.field) %>
stream_insert( From a40491d5471b862d7106354e8a90542be0d18be1 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Wed, 28 Aug 2024 22:35:41 +0800 Subject: [PATCH 086/130] Style the control panel with glass ui --- lib/vyasa_web/components/control_panel.ex | 43 +++++++++++-------- .../components/user_mode_components.ex | 38 ++++++++++++---- 2 files changed, 55 insertions(+), 26 deletions(-) diff --git a/lib/vyasa_web/components/control_panel.ex b/lib/vyasa_web/components/control_panel.ex index 52c4e1fd..f9392920 100644 --- a/lib/vyasa_web/components/control_panel.ex +++ b/lib/vyasa_web/components/control_panel.ex @@ -22,29 +22,36 @@ defmodule VyasaWeb.ControlPanel do # we need a component specific to control panel for the rendering of mode-specific action buttons def render(assigns) do ~H""" -
+
<.control_panel_mode_indicator mode={@mode} myself={@myself} />
- <%= for other_mode <- @mode.control_panel_modes do %> - <.control_panel_mode_button - current_mode={@mode} - target_mode={UserMode.get_mode(other_mode)} - /> - <% end %> - <%= for action <- @mode.mode_actions do %> - <.hover_rune_quick_action - action_event={HoveRune.get_quick_action_click_event(action)} - action_icon_name={HoveRune.get_quick_action_icon_name(action)} - /> - <% end %> +
+ <%= for other_mode <- @mode.control_panel_modes do %> + <.control_panel_mode_button + current_mode={@mode} + target_mode={UserMode.get_mode(other_mode)} + /> + <% end %> +
+
+ <%= for action <- @mode.mode_actions do %> + <.control_panel_mode_action + action_event={HoveRune.get_quick_action_click_event(action)} + action_icon_name={HoveRune.get_quick_action_icon_name(action)} + /> + <% end %> +
""" diff --git a/lib/vyasa_web/components/user_mode_components.ex b/lib/vyasa_web/components/user_mode_components.ex index 88b937ae..da0dff16 100644 --- a/lib/vyasa_web/components/user_mode_components.ex +++ b/lib/vyasa_web/components/user_mode_components.ex @@ -5,6 +5,22 @@ defmodule VyasaWeb.Display.UserMode.Components do attr :action_event, :string, required: true attr :action_icon_name, :string, required: true + def control_panel_mode_action(assigns) do + ~H""" + + """ + end + def hover_rune_quick_action(assigns) do ~H""" """ end @@ -70,14 +89,17 @@ defmodule VyasaWeb.Display.UserMode.Components do """ def control_panel_mode_indicator(assigns) do ~H""" - <.button + """ end end From 2a0a146a7958f73f87358a2488c6b2a575c39c49 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Thu, 29 Aug 2024 12:17:59 +0800 Subject: [PATCH 087/130] Create VerseMatrix live_component Just comitting this while I make some UI mods next to that. The reason why a live_component works here is that I expect to use some collapsible state. --- .../components/source_content/verse_matrix.ex | 238 ++++++++++++++++++ .../components/source_content/verses.ex | 178 +------------ 2 files changed, 251 insertions(+), 165 deletions(-) create mode 100644 lib/vyasa_web/components/source_content/verse_matrix.ex diff --git a/lib/vyasa_web/components/source_content/verse_matrix.ex b/lib/vyasa_web/components/source_content/verse_matrix.ex new file mode 100644 index 00000000..abe676dc --- /dev/null +++ b/lib/vyasa_web/components/source_content/verse_matrix.ex @@ -0,0 +1,238 @@ +defmodule VyasaWeb.Content.VerseMatrix do + use VyasaWeb, :live_component + # import VyasaWeb.Display.UserMode.Components + alias Utils.Struct + + def mount(socket) do + # TODO: add UI state vars here + {:ok, assign(socket, foo: false)} + end + + def update(%{verse: verse, marks: marks} = assigns, socket) do + socket = + socket + |> assign(assigns) + |> assign(:verse, verse) + |> assign(:marks, marks) + + {:ok, socket} + end + + slot :edge, required: true do + attr :title, :string + attr :field, :list, required: true + attr :verseup, :any, required: true + attr :node, :any + end + + @doc """ + Renders a single verse. + Along with verse-related UI like the quick draft UI + + CAUTION ⚠️: The current implementation of the client-side emphasis of verses is done using id selectors. + Therefore, the id for the outer container div should match what the MediaBridge::emphasizeActiveEvent is expecting. + Currently, the id follows the pattern of "verse-<@verse.id>" + """ + def render(assigns) do + ~H""" +
+
+
+
+ <.verse_title_button verse_id={@verse.id} title={elem.title} /> +
+
+ <.verse_content + verse_id={@verse.id} + node={Map.get(elem, :node, @verse).__struct__} + node_id={Map.get(elem, :node, @verse).id} + field={elem.field |> Enum.join("::")} + verseup={elem.verseup} + content={Struct.get_in(Map.get(elem, :node, @verse), elem.field)} + /> + <.quick_draft_container + :if={is_elem_bound_to_verse(@verse, elem)} + comments={@verse.comments} + marks={@marks} + quote={@verse.binding.window && @verse.binding.window.quote} + /> +
+
+
+
+ """ + end + + # font by lang here + defp verse_class({:big, script}), + do: "font-#{script} text-lg sm:text-xl" + + defp verse_class(:mid), + do: "font-dn text-m" + + # returns true if the binding struct matches the element id of that particular edge slot. + defp is_elem_bound_to_verse(verse, edge_elem), + do: + verse.binding && + (verse.binding.node_id == Map.get(edge_elem, :node, verse).id && + verse.binding.field_key == edge_elem.field) + + def comment_binding(assigns) do + # QQ: this elem_id isn't being used explicitly anywhere, was there a purpose for it & can it be removed? + # TODO: verify if this custom id assigns can be removed + assigns = assigns |> assign(:elem_id, "comment-modal-#{Ecto.UUID.generate()}") + + ~H""" + + <%= comment.body %> - <%= comment.signature %> + + """ + end + + attr :quote, :string, default: nil + attr :marks, :list, default: [] + + def drafting(assigns) do + assigns = assigns |> assign(:elem_id, "comment-modal-#{Ecto.UUID.generate()}") + IO.inspect(assigns, label: "state") + + ~H""" +
Enum.reverse()} :if={mark.state == :live}> + + <%= mark.binding.window.quote %> + + + <%= mark.body %> - <%= "Self" %> + +
+ + + <%= @quote %> + + +
+ <.form for={%{}} phx-submit="createMark"> + + +
+ +
+
+ """ + end + + def verse_title_button(assigns) do + ~H""" + + """ + end + + def verse_content(assigns) do + ~H""" +
+ <%= @content %> +
+ """ + end + + def quick_draft_container(assigns) do + ~H""" +
+ <.comment_binding comments={@comments} /> + + ☙ ——— ›– ❊ –‹ ——— ❧ + + <.drafting marks={@marks} quote={@quote} /> +
+ """ + end + + def mark_form(assigns) do + ~H""" +
+ <.form for={%{}} phx-submit="createMark"> + + +
+ +
+
+ """ + end +end diff --git a/lib/vyasa_web/components/source_content/verses.ex b/lib/vyasa_web/components/source_content/verses.ex index 4761d483..baa87f8a 100644 --- a/lib/vyasa_web/components/source_content/verses.ex +++ b/lib/vyasa_web/components/source_content/verses.ex @@ -2,7 +2,6 @@ defmodule VyasaWeb.Content.Verses do use VyasaWeb, :live_component alias Vyasa.Written.{Verse} - alias Utils.Struct @impl true def update(params, socket) do @@ -38,27 +37,23 @@ defmodule VyasaWeb.Content.Verses do Back to <%= to_title_case(@src.title) %> Chapters
- <.verse_matrix + <.live_component :for={{dom_id, %Verse{} = verse} <- @verses} id={dom_id} + module={VyasaWeb.Content.VerseMatrix} verse={verse} marks={@marks} - > - <:edge - title={"#{verse.chapter_no}.#{verse.no}"} - field={[:body]} - verseup={{:big, @src.script}} - /> - <:edge node={hd(verse.translations)} field={[:target, :body_translit]} verseup={:mid} /> - - <:edge - node={hd(verse.translations)} - field={[:target, :body_translit_meant]} - verseup={:mid} - /> - - <:edge node={hd(verse.translations)} field={[:target, :body]} verseup={:mid} /> - + edge={[ + %{ + title: "#{verse.chapter_no}.#{verse.no}", + field: [:body], + verseup: {:big, @src.script} + }, + %{node: hd(verse.translations), field: [:target, :body_translit], verseup: :mid}, + %{node: hd(verse.translations), field: [:target, :body_translit_meant], verseup: :mid}, + %{node: hd(verse.translations), field: [:target, :body], verseup: :mid} + ]} + />
<.back patch={~p"/explore/#{@src.title}"}> Back to <%= to_title_case(@src.title) %> Chapters @@ -68,153 +63,6 @@ defmodule VyasaWeb.Content.Verses do """ end - # ---- CHECKPOINT: all the sangha stuff goes here ---- - # enum.split() from @verse binding to mark - def verse_matrix(assigns) do - ~H""" -
-
-
-
- -
-
-
Enum.join("::")} - class={"text-zinc-700 #{verse_class(elem.verseup)}"} - > - <%= Struct.get_in(Map.get(elem, :node, @verse), elem.field) %> -
-
- <.comment_binding comments={@verse.comments} /> - - - ☙ ——— ›– ❊ –‹ ——— ❧ - - <.drafting marks={@marks} quote={@verse.binding.window && @verse.binding.window.quote} /> -
-
-
-
-
- """ - end - - # font by lang here - defp verse_class({:big, script}), - do: "font-#{script} text-lg sm:text-xl" - - defp verse_class(:mid), - do: "font-dn text-m" - - defp eq_verse_binding(verse, elem), do: verse.binding && (verse.binding.node_id == Map.get(elem, :node, verse).id && - verse.binding.field_key == elem.field) - - def comment_binding(assigns) do - # QQ: this elem_id isn't being used explicitly anywhere, was there a purpose for it & can it be removed? - # TODO: verify if this custom id assigns can be removed - assigns = assigns |> assign(:elem_id, "comment-modal-#{Ecto.UUID.generate()}") - - ~H""" - - <%= comment.body %> - <%= comment.signature %> - - """ - end - - attr :quote, :string, default: nil - attr :marks, :list, default: [] - - def drafting(assigns) do - assigns = assigns |> assign(:elem_id, "comment-modal-#{Ecto.UUID.generate()}") - IO.inspect(assigns, label: "state") - ~H""" -
Enum.reverse()} :if={mark.state == :live}> - - <%= mark.binding.window.quote %> - - - <%= mark.body %> - <%= "Self" %> - -
- - - <%= @quote %> - - -
- <.form for={%{}} phx-submit="createMark"> - - -
- -
-
- """ - end - # @impl true # def handle_event("reportVideoStatus", payload, socket) do # IO.inspect(payload) From 7cfe5e0e0154c819c5ac78372303f521defc052b Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Thu, 29 Aug 2024 15:58:57 +0800 Subject: [PATCH 088/130] Minor cleanups / rearranging of code --- .../components/source_content/verse_matrix.ex | 158 ++++++++---------- 1 file changed, 66 insertions(+), 92 deletions(-) diff --git a/lib/vyasa_web/components/source_content/verse_matrix.ex b/lib/vyasa_web/components/source_content/verse_matrix.ex index abe676dc..3094ec98 100644 --- a/lib/vyasa_web/components/source_content/verse_matrix.ex +++ b/lib/vyasa_web/components/source_content/verse_matrix.ex @@ -1,6 +1,5 @@ defmodule VyasaWeb.Content.VerseMatrix do use VyasaWeb, :live_component - # import VyasaWeb.Display.UserMode.Components alias Utils.Struct def mount(socket) do @@ -25,14 +24,6 @@ defmodule VyasaWeb.Content.VerseMatrix do attr :node, :any end - @doc """ - Renders a single verse. - Along with verse-related UI like the quick draft UI - - CAUTION ⚠️: The current implementation of the client-side emphasis of verses is done using id selectors. - Therefore, the id for the outer container div should match what the MediaBridge::emphasizeActiveEvent is expecting. - Currently, the id follows the pattern of "verse-<@verse.id>" - """ def render(assigns) do ~H"""
@@ -63,23 +54,54 @@ defmodule VyasaWeb.Content.VerseMatrix do """ end - # font by lang here - defp verse_class({:big, script}), - do: "font-#{script} text-lg sm:text-xl" + def verse_title_button(assigns) do + ~H""" + + """ + end + + def verse_content(assigns) do + ~H""" +
+ <%= @content %> +
+ """ + end + + attr :comments, :list, default: [] + attr :quote, :string, default: nil + attr :marks, :list, default: [] - defp verse_class(:mid), - do: "font-dn text-m" + def quick_draft_container(assigns) do + assigns = assigns |> assign(:elem_id, "comment-modal-#{Ecto.UUID.generate()}") - # returns true if the binding struct matches the element id of that particular edge slot. - defp is_elem_bound_to_verse(verse, edge_elem), - do: - verse.binding && - (verse.binding.node_id == Map.get(edge_elem, :node, verse).id && - verse.binding.field_key == edge_elem.field) + ~H""" +
+ <.bound_comments comments={@comments} /> + <.current_marks marks={@marks} /> + <.current_quote quote={@quote} /> + <.quick_draft_form /> +
+ """ + end - def comment_binding(assigns) do - # QQ: this elem_id isn't being used explicitly anywhere, was there a purpose for it & can it be removed? - # TODO: verify if this custom id assigns can be removed + def bound_comments(assigns) do assigns = assigns |> assign(:elem_id, "comment-modal-#{Ecto.UUID.generate()}") ~H""" @@ -95,13 +117,9 @@ defmodule VyasaWeb.Content.VerseMatrix do """ end - attr :quote, :string, default: nil attr :marks, :list, default: [] - def drafting(assigns) do - assigns = assigns |> assign(:elem_id, "comment-modal-#{Ecto.UUID.generate()}") - IO.inspect(assigns, label: "state") - + def current_marks(assigns) do ~H"""
Enum.reverse()} :if={mark.state == :live}> - <%= "Self" %>
+ """ + end + attr :quote, :string, default: nil + + def current_quote(assigns) do + ~H""" <.form for={%{}} phx-submit="createMark"> -
- <%= @title %> -
- + + ☙ ——— ›– ❊ –‹ ——— ❧ + """ end - def verse_content(assigns) do - ~H""" -
- <%= @content %> -
- """ - end + defp verse_class({:big, script}), do: "font-#{script} text-lg sm:text-xl" + defp verse_class(:mid), do: "font-dn text-m" - def quick_draft_container(assigns) do - ~H""" -
- <.comment_binding comments={@comments} /> - - ☙ ——— ›– ❊ –‹ ——— ❧ - - <.drafting marks={@marks} quote={@quote} /> -
- """ - end - - def mark_form(assigns) do - ~H""" -
- <.form for={%{}} phx-submit="createMark"> - - -
- -
-
- """ + defp is_elem_bound_to_verse(verse, edge_elem) do + verse.binding && + (verse.binding.node_id == Map.get(edge_elem, :node, verse).id && + verse.binding.field_key == edge_elem.field) end end From 88fd666578a344f54075d3192f47c83fcb518156 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Thu, 29 Aug 2024 20:41:56 +0800 Subject: [PATCH 089/130] Style the quick draft components Still needs improvement --- lib/utils/time.ex | 69 +++++++ lib/vyasa/sangh/mark.ex | 25 ++- .../components/source_content/verse_matrix.ex | 193 +++++++++++++----- mix.exs | 7 +- mix.lock | 1 + 5 files changed, 228 insertions(+), 67 deletions(-) create mode 100644 lib/utils/time.ex diff --git a/lib/utils/time.ex b/lib/utils/time.ex new file mode 100644 index 00000000..2d298540 --- /dev/null +++ b/lib/utils/time.ex @@ -0,0 +1,69 @@ +defmodule Utils.Time do + @moduledoc """ + Anything related to time-calculations shall go here + """ + + @doc """ + Inserts the current time with the given key if that key doesn't exist in the map or is nil. + + ## Parameters + - target_map: The map to potentially update + - target_key: The key to check and potentially insert + + ## Returns + The updated map or the original map if no update was needed. + + ## Examples + iex> Utils.Time.maybe_insert_current_time(%{}, :timestamp) + %{timestamp: ~U[...]} + + iex> Utils.Time.maybe_insert_current_time(%{timestamp: nil}, :timestamp) + %{timestamp: ~U[...]} + + iex> Utils.Time.maybe_insert_current_time(%{timestamp: "exists"}, :timestamp) + %{timestamp: "exists"} + """ + def maybe_insert_current_time(target_map, target_key) + when is_map(target_map) and (is_atom(target_key) or is_binary(target_key)) do + case Map.get(target_map, target_key) do + nil -> Map.put(target_map, target_key, DateTime.utc_now()) + _ -> target_map + end + end + + def maybe_insert_current_time(target_map, target_key) do + raise ArgumentError, + "Invalid arguments. Expected a map and a key (atom or string), got: #{inspect(target_map)}, #{inspect(target_key)}" + end + + @doc """ + Updates the given key in the map with the current time, regardless of its existing value. + + ## Parameters + - target_map: The map to update + - target_key: The key to update with the current time + + ## Returns + The updated map with the specified key set to the current time. + + ## Examples + iex> TimeUpdater.update_current_time(%{}, :timestamp) + %{timestamp: ~U[...]} + + iex> TimeUpdater.update_current_time(%{timestamp: "old_value"}, :timestamp) + %{timestamp: ~U[...]} + + iex> TimeUpdater.update_current_time(%{other_key: "value"}, :timestamp) + %{other_key: "value", timestamp: ~U[...]} + """ + @spec update_current_time(map(), atom() | String.t()) :: map() + def update_current_time(target_map, target_key) + when is_map(target_map) and (is_atom(target_key) or is_binary(target_key)) do + Map.put(target_map, target_key, DateTime.utc_now()) + end + + def update_current_time(target_map, target_key) do + raise ArgumentError, + "Invalid arguments. Expected a map and a key (atom or string), got: #{inspect(target_map)}, #{inspect(target_key)}" + end +end diff --git a/lib/vyasa/sangh/mark.ex b/lib/vyasa/sangh/mark.ex index 4ed68af8..e14d2673 100644 --- a/lib/vyasa/sangh/mark.ex +++ b/lib/vyasa/sangh/mark.ex @@ -4,15 +4,18 @@ defmodule Vyasa.Sangh.Mark do """ use Ecto.Schema - import Ecto.Changeset + import Ecto.Changeset - alias Vyasa.Sangh.{Comment} - alias Vyasa.Adapters.Binding + alias Vyasa.Sangh.{Comment, Mark} + alias Vyasa.Adapters.Binding + alias Utils.Time - @primary_key {:id, Ecto.UUID, autogenerate: true} - schema "marks" do + @primary_key {:id, Ecto.UUID, autogenerate: true} + schema "marks" do field :body, :string field :order, :integer + + # TODO: @ks0m1c these enums need better names or a docstring to explain why they are named like so field :state, Ecto.Enum, values: [:draft, :bookmark, :live] field :verse_id, :string, virtual: true @@ -20,11 +23,17 @@ defmodule Vyasa.Sangh.Mark do belongs_to :binding, Binding, foreign_key: :binding_id, type: :binary_id timestamps() - end + end - def changeset(event, attrs) do + def changeset(event, attrs) do event |> cast(attrs, [:body, :order, :status, :comment_id, :binding_id]) - end + end + def update_mark(%Mark{} = draft_mark, opts \\ []) do + draft_mark + |> Map.merge(Map.new(opts)) + |> Time.maybe_insert_current_time(:inserted_at) + |> Time.update_current_time(:updated_at) + end end diff --git a/lib/vyasa_web/components/source_content/verse_matrix.ex b/lib/vyasa_web/components/source_content/verse_matrix.ex index 3094ec98..d9becbe3 100644 --- a/lib/vyasa_web/components/source_content/verse_matrix.ex +++ b/lib/vyasa_web/components/source_content/verse_matrix.ex @@ -1,10 +1,12 @@ defmodule VyasaWeb.Content.VerseMatrix do use VyasaWeb, :live_component + alias Phoenix.LiveView.Socket + alias Utils.Struct def mount(socket) do # TODO: add UI state vars here - {:ok, assign(socket, foo: false)} + {:ok, socket |> assign(:show_current_marks?, false)} end def update(%{verse: verse, marks: marks} = assigns, socket) do @@ -44,8 +46,10 @@ defmodule VyasaWeb.Content.VerseMatrix do <.quick_draft_container :if={is_elem_bound_to_verse(@verse, elem)} comments={@verse.comments} + show_current_marks?={@show_current_marks?} marks={@marks} quote={@verse.binding.window && @verse.binding.window.quote} + myself={@myself} />
@@ -84,19 +88,22 @@ defmodule VyasaWeb.Content.VerseMatrix do attr :comments, :list, default: [] attr :quote, :string, default: nil attr :marks, :list, default: [] + attr :show_current_marks?, :boolean, default: false + attr :myself, :any def quick_draft_container(assigns) do assigns = assigns |> assign(:elem_id, "comment-modal-#{Ecto.UUID.generate()}") + # TODO: i want a "current_comment" ~H"""
- <.bound_comments comments={@comments} /> - <.current_marks marks={@marks} /> <.current_quote quote={@quote} /> <.quick_draft_form /> + <.current_marks myself={@myself} marks={@marks} show_current_marks?={@show_current_marks?} /> + <.bound_comments comments={@comments} />
""" end @@ -117,31 +124,57 @@ defmodule VyasaWeb.Content.VerseMatrix do """ end + # FIXME @ks0m1c qq: for current_marks below: when marks are in draft state, you'll help have a default container for it right + # i need the invariant to be true: every mark has an associated container it is in, regardless of the state of the mark (draft or live or not) + # yeah all marks are stored in this stack + # if the stack becomes a list of lists + # it is possible to have a single elemented list mark + # so should be g + attr :marks, :list, default: [] + attr :show_current_marks?, :boolean, default: true + attr :myself, :any def current_marks(assigns) do ~H""" -
Enum.reverse()} :if={mark.state == :live}> - + + +
+
+ <%= for mark <- @marks |> Enum.reverse() do %> + <%= if mark.state == :live do %> +
+ <%= if !is_nil(mark.binding.window) && mark.binding.window.quote !== "" do %> + + "<%= mark.binding.window.quote %>" + + <% end %> + <%= if is_binary(mark.body) do %> + + <%= mark.body %> - <%= "Self" %> + + <% end %> +
+ <% end %> + <% end %> +
+
""" end @@ -150,44 +183,63 @@ defmodule VyasaWeb.Content.VerseMatrix do def current_quote(assigns) do ~H""" - - <%= @quote %> - + <%= if !is_nil(@quote) && @quote !== "" do %> +
+
+ <.icon name="hero-chat-bubble-left-ellipsis" class="w-5 h-5 mr-2 text-primary" /> + + Current selection + +
+
+
+ + "<%= @quote %>" + +
+
+
+ <% end %> """ end def quick_draft_form(assigns) do ~H""" -
- <.form for={%{}} phx-submit="createMark"> - - -
- +
+
+ <.icon name="hero-pencil-square" class="w-5 h-5 mr-2 text-primary" /> + + Add a new mark + +
+
+
+ <.form for={%{}} phx-submit="createMark"> + + +
+ +
+
""" @@ -209,4 +261,33 @@ defmodule VyasaWeb.Content.VerseMatrix do (verse.binding.node_id == Map.get(edge_elem, :node, verse).id && verse.binding.field_key == edge_elem.field) end + + def handle_event( + "toggle_show_current_marks", + %{"value" => _}, + %Socket{ + assigns: + %{ + show_current_marks?: _show_current_marks? + } = _assigns + } = socket + ) do + # {:noreply, update(socket, :show_current_marks?, !show_current_marks?)} + + {:noreply, update(socket, :show_current_marks?, &(!&1))} + end + + def handle_event("toggle_show_current_marks", %{"value" => _}, socket) do + {:noreply, update(socket, :show_current_marks?, &(!&1))} + end + + def handle_event( + _, + _, + %Socket{} = socket + ) do + IO.puts("WARNING: verse_matrix pokemon for handle_event") + + {:noreply, socket} + end end diff --git a/mix.exs b/mix.exs index be8b0ae6..20e387d5 100644 --- a/mix.exs +++ b/mix.exs @@ -47,7 +47,8 @@ defmodule Vyasa.MixProject do {:postgrex, ">= 0.0.0"}, {:phoenix_html, "~> 4.0"}, {:phoenix_live_reload, "~> 1.5", only: :dev}, - {:phoenix_live_view, github: "phoenixframework/phoenix_live_view", ref: "440fd04", override: true}, + {:phoenix_live_view, + github: "phoenixframework/phoenix_live_view", ref: "440fd04", override: true}, {:floki, ">= 0.30.0"}, {:phoenix_live_dashboard, "~> 0.8.2"}, {:esbuild, "~> 0.8", runtime: Mix.env() == :dev}, @@ -71,11 +72,11 @@ defmodule Vyasa.MixProject do {:req, "~> 0.4.0"}, {:recase, "~> 0.5"}, {:timex, "~> 3.0"}, - {:ua_parser, "~> 1.9"} + {:ua_parser, "~> 1.9"}, + {:inflex, "~> 2.1"} ] end - defp live_admin_dep() do if path = System.get_env("LA_PATH") do [path: path] diff --git a/mix.lock b/mix.lock index b93641f3..77966d1e 100644 --- a/mix.lock +++ b/mix.lock @@ -28,6 +28,7 @@ "httpoison": {:hex, :httpoison, "2.2.1", "87b7ed6d95db0389f7df02779644171d7319d319178f6680438167d7b69b1f3d", [:mix], [{:hackney, "~> 1.17", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "51364e6d2f429d80e14fe4b5f8e39719cacd03eb3f9a9286e61e216feac2d2df"}, "idna": {:hex, :idna, "6.1.1", "8a63070e9f7d0c62eb9d9fcb360a7de382448200fbbd1b106cc96d3d8099df8d", [:rebar3], [{:unicode_util_compat, "~> 0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "92376eb7894412ed19ac475e4a86f7b413c1b9fbb5bd16dccd57934157944cea"}, "image": {:hex, :image, "0.54.1", "3b4e55a321f73d45d0c639aab222606516df3e1d0a266eab6192a924402e3af1", [:mix], [{:bumblebee, "~> 0.3", [hex: :bumblebee, repo: "hexpm", optional: true]}, {:evision, "~> 0.1.33 or ~> 0.2", [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.13", [hex: :kino, repo: "hexpm", optional: true]}, {:nx, "~> 0.7", [hex: :nx, repo: "hexpm", optional: true]}, {:nx_image, "~> 0.1", [hex: :nx_image, repo: "hexpm", optional: true]}, {:phoenix_html, "~> 2.1 or ~> 3.2 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:plug, "~> 1.13", [hex: :plug, repo: "hexpm", optional: true]}, {:req, "~> 0.4", [hex: :req, repo: "hexpm", optional: true]}, {:rustler, "> 0.0.0", [hex: :rustler, repo: "hexpm", optional: true]}, {:scholar, "~> 0.3", [hex: :scholar, 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", "77389da9a651e32a77d8f5366dd8b8a85834a6f6bd553f9d4fb4bb6e39a51405"}, + "inflex": {:hex, :inflex, "2.1.0", "a365cf0821a9dacb65067abd95008ca1b0bb7dcdd85ae59965deef2aa062924c", [:mix], [], "hexpm", "14c17d05db4ee9b6d319b0bff1bdf22aa389a25398d1952c7a0b5f3d93162dd8"}, "jason": {:hex, :jason, "1.4.4", "b9226785a9aa77b6857ca22832cffa5d5011a667207eb2a0ad56adb5db443b8a", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "c5eb0cab91f094599f94d55bc63409236a8ec69a21a67814529e8d5f6cc90b3b"}, "kino": {:hex, :kino, "0.13.2", "087c8f340734764fc8c70efd43f3155fa47498c78d2d18fa83aaf97373133ade", [:mix], [{:fss, "~> 0.1.0", [hex: :fss, repo: "hexpm", optional: false]}, {:nx, "~> 0.1", [hex: :nx, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: true]}, {:table, "~> 0.1.2", [hex: :table, repo: "hexpm", optional: false]}], "hexpm", "05fb420dae92a81746dcaceceddf235974394486b17cc2704ddbb051072b4617"}, "live_admin": {:git, "https://github.com/ks0m1c/live_admin.git", "8201e0372af7f4cf18bf417c38b91232e110e983", [ref: "8201e03"]}, From b73d639b1e7e1466195cc56cf660e721802fa4e8 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Thu, 29 Aug 2024 23:53:57 +0800 Subject: [PATCH 090/130] Iterate on quick draft container The event handler for send comment not wired up --- .../components/source_content/verse_matrix.ex | 143 +++++++++++------- 1 file changed, 89 insertions(+), 54 deletions(-) diff --git a/lib/vyasa_web/components/source_content/verse_matrix.ex b/lib/vyasa_web/components/source_content/verse_matrix.ex index d9becbe3..d1dbe291 100644 --- a/lib/vyasa_web/components/source_content/verse_matrix.ex +++ b/lib/vyasa_web/components/source_content/verse_matrix.ex @@ -6,7 +6,10 @@ defmodule VyasaWeb.Content.VerseMatrix do def mount(socket) do # TODO: add UI state vars here - {:ok, socket |> assign(:show_current_marks?, false)} + {:ok, + socket + |> assign(:show_current_marks?, false) + |> assign(:form_type, :mark)} end def update(%{verse: verse, marks: marks} = assigns, socket) do @@ -49,6 +52,7 @@ defmodule VyasaWeb.Content.VerseMatrix do show_current_marks?={@show_current_marks?} marks={@marks} quote={@verse.binding.window && @verse.binding.window.quote} + form_type={@form_type} myself={@myself} />
@@ -89,6 +93,7 @@ defmodule VyasaWeb.Content.VerseMatrix do attr :quote, :string, default: nil attr :marks, :list, default: [] attr :show_current_marks?, :boolean, default: false + attr :form_type, :atom, required: true attr :myself, :any def quick_draft_container(assigns) do @@ -100,8 +105,7 @@ defmodule VyasaWeb.Content.VerseMatrix do id="quick-draft-container" class="block mt-4 text-sm text-gray-700 font-serif leading-relaxed opacity-70 transition-opacity duration-300 ease-in-out hover:opacity-100" > - <.current_quote quote={@quote} /> - <.quick_draft_form /> + <.unified_quote_and_form quote={@quote} form_type={@form_type} myself={@myself} /> <.current_marks myself={@myself} marks={@marks} show_current_marks?={@show_current_marks?} /> <.bound_comments comments={@comments} />
@@ -124,6 +128,19 @@ defmodule VyasaWeb.Content.VerseMatrix do """ end + attr :quote, :string, required: true + attr :form_type, :atom, required: true + attr :myself, :any, required: true + + def unified_quote_and_form(assigns) do + ~H""" +
+ <.current_quote quote={@quote} form_type={@form_type} /> + <.quick_draft_form quote={@quote} form_type={@form_type} myself={@myself} /> +
+ """ + end + # FIXME @ks0m1c qq: for current_marks below: when marks are in draft state, you'll help have a default container for it right # i need the invariant to be true: every mark has an associated container it is in, regardless of the state of the mark (draft or live or not) # yeah all marks are stored in this stack @@ -179,68 +196,87 @@ defmodule VyasaWeb.Content.VerseMatrix do """ end - attr :quote, :string, default: nil + attr :quote, :string, required: true + attr :form_type, :atom, required: true def current_quote(assigns) do ~H""" <%= if !is_nil(@quote) && @quote !== "" do %> -
-
- <.icon name="hero-chat-bubble-left-ellipsis" class="w-5 h-5 mr-2 text-primary" /> - - Current selection +
+
+ <.icon + name={ + if @form_type == :mark, + do: "hero-bookmark-solid", + else: "hero-chat-bubble-left-ellipsis-solid" + } + class="w-4 h-4 text-brand mr-2" + /> + + Current <%= if @form_type == :mark, do: "mark", else: "comment" %>'s selection
-
-
- - "<%= @quote %>" - -
+
+ "<%= @quote %>"
<% end %> """ end + attr :form_type, :atom, required: true + attr :myself, :any, required: true + attr :quote, :string, default: nil + def quick_draft_form(assigns) do ~H""" -
-
- <.icon name="hero-pencil-square" class="w-5 h-5 mr-2 text-primary" /> - - Add a new mark - -
-
-
+ <.form + for={%{}} + phx-submit={(@form_type == :mark && "createMark") || "createComment"} + class="flex items-center" + > + + -
-
-
+ <.icon name="hero-paper-airplane" class="w-4 h-4 text-brand" /> + + +
""" end @@ -272,13 +308,12 @@ defmodule VyasaWeb.Content.VerseMatrix do } = _assigns } = socket ) do - # {:noreply, update(socket, :show_current_marks?, !show_current_marks?)} - {:noreply, update(socket, :show_current_marks?, &(!&1))} end - def handle_event("toggle_show_current_marks", %{"value" => _}, socket) do - {:noreply, update(socket, :show_current_marks?, &(!&1))} + def handle_event("change_form_type", %{"type" => type}, socket) do + new_form_type = String.to_existing_atom(type) + {:noreply, assign(socket, :form_type, new_form_type)} end def handle_event( From 3d33f99adae684cc12422f9f51cd775c694aa499 Mon Sep 17 00:00:00 2001 From: ks0m1c_dharma Date: Sat, 31 Aug 2024 12:19:11 +0800 Subject: [PATCH 091/130] Title Translit Shift and Change of Chapters Query --- lib/vyasa/written.ex | 16 ++++++++++++++++ lib/vyasa/written/chapter.ex | 2 +- lib/vyasa/written/translation.ex | 5 +++-- .../components/source_content/chapters.ex | 2 +- .../components/source_content/verses.ex | 2 +- lib/vyasa_web/controllers/og_image_controller.ex | 2 +- 6 files changed, 23 insertions(+), 6 deletions(-) diff --git a/lib/vyasa/written.ex b/lib/vyasa/written.ex index d120660b..517e528e 100644 --- a/lib/vyasa/written.ex +++ b/lib/vyasa/written.ex @@ -142,6 +142,22 @@ defmodule Vyasa.Written do |> Repo.all() end + def list_chapters_by_source(sid, lang) when is_uuid?(sid) do + from(c in Chapter, + where: c.source_id == ^sid, + join: ts in assoc(c, :translations), + on: ts.source_id == ^sid and ts.lang == ^lang) + |> select_merge([c, t], %{ + c | translations: [t] + }) + |> Repo.all() + end + + def list_chapters_by_source(source_title, lang) do + %Source{id: id} = _src = get_source_by_title(source_title) + list_chapters_by_source(id, lang) + end + def get_chapter(no, source_title) do from(c in Chapter, where: c.no == ^no, diff --git a/lib/vyasa/written/chapter.ex b/lib/vyasa/written/chapter.ex index 68b78437..c24df42a 100644 --- a/lib/vyasa/written/chapter.ex +++ b/lib/vyasa/written/chapter.ex @@ -22,7 +22,7 @@ defmodule Vyasa.Written.Chapter do @doc false def changeset(text, attrs) do text - |> cast(attrs, [:body, :no, :title, :parent_no]) + |> cast(attrs, [:body, :no, :title, :parent_no, :source_id]) |> cast_assoc(:verses) |> cast_assoc(:translations) |> cast_assoc(:voices) diff --git a/lib/vyasa/written/translation.ex b/lib/vyasa/written/translation.ex index a2bfe6c9..1aa9bc6c 100644 --- a/lib/vyasa/written/translation.ex +++ b/lib/vyasa/written/translation.ex @@ -12,7 +12,7 @@ defmodule Vyasa.Written.Translation do embeds_one :target, Target, on_replace: :delete do # for chapter field(:title, :string) - field(:translit_title, :string) + field(:title_translit, :string) # for chapter/verse field(:body, :string) field(:body_meant, :string) @@ -37,6 +37,7 @@ defmodule Vyasa.Written.Translation do @doc false def changeset(translation, %{"type" => type} = attrs) do + IO.inspect(translation) # %{translation | type: type, verse_id: verse_id, source_id: s_id, chap_no: } # <== DON'T DO THIS. this will create extra associations to chap, but in this fn we only want verse-assocs translation |> cast(attrs, [:lang, :type, :verse_id, :chapter_no, :source_id]) @@ -84,7 +85,7 @@ defmodule Vyasa.Written.Translation do def chapter_changeset(structure, attrs) do structure - |> cast(attrs, [:title, :translit_title, :body, :body_translit]) + |> cast(attrs, [:title, :title_translit, :body, :body_translit]) end def verse_changeset(structure, attrs) do diff --git a/lib/vyasa_web/components/source_content/chapters.ex b/lib/vyasa_web/components/source_content/chapters.ex index 7accc7f0..d628554c 100644 --- a/lib/vyasa_web/components/source_content/chapters.ex +++ b/lib/vyasa_web/components/source_content/chapters.ex @@ -36,7 +36,7 @@ defmodule VyasaWeb.Content.Chapters do > <:col :let={{_id, chap}} label="Chapter">
- <%= chap.no %>. <%= hd(chap.translations).target.translit_title %> + <%= chap.no %>. <%= hd(chap.translations).target.title_translit %>
<:col :let={{_id, chap}} label="Description"> diff --git a/lib/vyasa_web/components/source_content/verses.ex b/lib/vyasa_web/components/source_content/verses.ex index 4761d483..9de30e62 100644 --- a/lib/vyasa_web/components/source_content/verses.ex +++ b/lib/vyasa_web/components/source_content/verses.ex @@ -22,7 +22,7 @@ defmodule VyasaWeb.Content.Verses do
<.header class="p-4 pb-0">
@src.script]}> - <%= @selected_transl.target.translit_title %> | <%= @chap.title %> + <%= @selected_transl.target.title_translit %> | <%= @chap.title %>
Chapter <%= @chap.no %> - <%= @selected_transl.target.title %> diff --git a/lib/vyasa_web/controllers/og_image_controller.ex b/lib/vyasa_web/controllers/og_image_controller.ex index 9426f4b1..b34986be 100644 --- a/lib/vyasa_web/controllers/og_image_controller.ex +++ b/lib/vyasa_web/controllers/og_image_controller.ex @@ -60,7 +60,7 @@ defmodule VyasaWeb.OgImageController do chapter: %{ no: c_no, title: c_title, - translations: [%{target: %{translit_title: t_title}} | _] + translations: [%{target: %{title_translit: t_title}} | _] }, source: %{title: title} }) do From 4122c7789d3630d8cb99a2fde525c9fef0ac3767 Mon Sep 17 00:00:00 2001 From: ks0m1c_dharma Date: Sat, 31 Aug 2024 12:19:46 +0800 Subject: [PATCH 092/130] Change of Navigation 4 Singular Hymns like Chalisa --- .../live/display_manager/display_live.ex | 49 ++++++++++++------- 1 file changed, 30 insertions(+), 19 deletions(-) diff --git a/lib/vyasa_web/live/display_manager/display_live.ex b/lib/vyasa_web/live/display_manager/display_live.ex index 6542929e..8dde6a1a 100644 --- a/lib/vyasa_web/live/display_manager/display_live.ex +++ b/lib/vyasa_web/live/display_manager/display_live.ex @@ -82,30 +82,41 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do end defp apply_action( - %Socket{} = socket, - :show_chapters, - %{"source_title" => source_title} = - params - ) do + %Socket{} = socket, + :show_chapters, + %{"source_title" => source_title} = + params + ) do IO.inspect(:show_chapters, label: "TRACE: apply action DM action show_chapters:") IO.inspect(params, label: "TRACE: apply action DM params:") IO.inspect(source_title, label: "TRACE: apply action DM params source_title:") - [%Chapter{source: src} | _] = chapters = Written.get_chapters_by_src(source_title) + with %Source{id: sid} = source <- Written.get_source_by_title(source_title), + # when is more than 1 chapter + [%Chapter{} | [%Chapter{} | _]] = chapters <- Written.list_chapters_by_source(sid, @default_lang) do + socket + |> assign(:content_action, :show_chapters) + |> assign(:page_title, to_title_case(source.title)) + |> assign(:source, source) + |> assign(:meta, %{ + title: to_title_case(source.title), + description: "Explore the #{to_title_case(source.title)}", + type: "website", + image: url(~p"/og/#{VyasaWeb.OgImageController.get_by_binding(%{source: source})}"), + url: url(socket, ~p"/explore/#{source.title}") + }) + |> maybe_stream_configure(:chapters, dom_id: &"Chapter-#{&1.no}") + |> stream(:chapters, chapters |> Enum.sort_by(fn chap -> chap.no end)) + + else + [%Chapter{} = chapter | _] -> + socket + |> push_patch(to: ~p"/explore/#{source_title}/#{chapter.no}/") + + _ -> + raise VyasaWeb.ErrorHTML.FourOFour, message: "No Chapters here yet" + end - socket - |> assign(:content_action, :show_chapters) - |> assign(:page_title, to_title_case(src.title)) - |> assign(:source, src) - |> assign(:meta, %{ - title: to_title_case(src.title), - description: "Explore the #{to_title_case(src.title)}", - type: "website", - image: url(~p"/og/#{VyasaWeb.OgImageController.get_by_binding(%{source: src})}"), - url: url(socket, ~p"/explore/#{src.title}") - }) - |> maybe_stream_configure(:chapters, dom_id: &"Chapter-#{&1.no}") - |> stream(:chapters, chapters |> Enum.sort_by(fn chap -> chap.no end)) end defp apply_action( From 3d892bc52646e2507e193b0caf54a5f07e9e4d2b Mon Sep 17 00:00:00 2001 From: ks0m1c_dharma Date: Sat, 31 Aug 2024 12:20:14 +0800 Subject: [PATCH 093/130] Language Script Changes --- assets/tailwind.config.js | 2 +- lib/vyasa_web/components/source_content/chapters.ex | 2 +- lib/vyasa_web/controllers/page_html/home.html.heex | 8 +++++--- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/assets/tailwind.config.js b/assets/tailwind.config.js index e9e48530..10910f95 100644 --- a/assets/tailwind.config.js +++ b/assets/tailwind.config.js @@ -25,7 +25,7 @@ module.exports = { }, fontFamily: { dn: ['"Gotu"', "sans-serif"], - tl: ['"Vyas", "sans-serif"'], + ta: ['"Vyas", "sans-serif"'], }, fontSize: { xs: "0.65rem", diff --git a/lib/vyasa_web/components/source_content/chapters.ex b/lib/vyasa_web/components/source_content/chapters.ex index d628554c..2e92f2c3 100644 --- a/lib/vyasa_web/components/source_content/chapters.ex +++ b/lib/vyasa_web/components/source_content/chapters.ex @@ -40,7 +40,7 @@ defmodule VyasaWeb.Content.Chapters do
<:col :let={{_id, chap}} label="Description"> -
+
<%= chap.title %>
diff --git a/lib/vyasa_web/controllers/page_html/home.html.heex b/lib/vyasa_web/controllers/page_html/home.html.heex index f6cfae01..d0d5deda 100644 --- a/lib/vyasa_web/controllers/page_html/home.html.heex +++ b/lib/vyasa_web/controllers/page_html/home.html.heex @@ -312,8 +312,10 @@ hr {
- Tradition is the handing down of Fire - <%= assigns[:reason] && @reason.message || "not the worship of Ashes" %> + वेदव्यास +
Tradition is the handing down of Fire
+ வியாசர் +
<%= assigns[:reason] && @reason.message || "not the worship of Ashes" %>
@@ -331,7 +333,7 @@ hr {

- Vyasa + Vyasa v<%= Application.spec(:vyasa, :vsn) %> From a772ff91c467ee65b33e17e0fd12a8779f8b2946 Mon Sep 17 00:00:00 2001 From: ks0m1c_dharma Date: Sat, 31 Aug 2024 12:20:25 +0800 Subject: [PATCH 094/130] Migration for Thiruvasagam --- docs/migration_wow.livemd | 32 ++++---- docs/scraper.livemd | 154 ++++++++++++++++++++++++++++---------- 2 files changed, 134 insertions(+), 52 deletions(-) diff --git a/docs/migration_wow.livemd b/docs/migration_wow.livemd index 6f8c6061..10ef48dc 100644 --- a/docs/migration_wow.livemd +++ b/docs/migration_wow.livemd @@ -16,23 +16,27 @@ The key steps for data migration are: #### Defines the location of the json dump file that we are using ```elixir -mypath = "#{File.cwd!()}/wow.json" +mypath = + "#{File.cwd!()}/data/Elixir.Vyasa.Written.Source" + |> File.ls!() + |> Enum.sort(:desc) + |> List.first() ``` ```elixir # A module to support re-compilation from within a livebook cell. Call it from anywhere. -defmodule R do - def recompile() do - Mix.Task.reenable("app.start") - Mix.Task.reenable("compile") - Mix.Task.reenable("compile.all") - compilers = Mix.compilers() - Enum.each(compilers, &Mix.Task.reenable("compile.#{&1}")) - Mix.Task.run("compile.all") - end -end - -R.recompile() +# defmodule R do +# def recompile() do +# Mix.Task.reenable("app.start") +# Mix.Task.reenable("compile") +# Mix.Task.reenable("compile.all") +# compilers = Mix.compilers() +# Enum.each(compilers, &Mix.Task.reenable("compile.#{&1}")) +# Mix.Task.run("compile.all") +# end +# end + +# R.recompile() ``` ```elixir @@ -49,7 +53,7 @@ Vyasa.Release.migrate() #### inits the non-event structs ```elixir -Path.expand(mypath, "data") +Path.expand(mypath, "#{File.cwd!()}/data/Elixir.Vyasa.Written.Source") |> Vyasa.Corpus.Migrator.Restore.read() |> Vyasa.Corpus.Migrator.Restore.run() ``` diff --git a/docs/scraper.livemd b/docs/scraper.livemd index 41ae4013..4bb9fd41 100644 --- a/docs/scraper.livemd +++ b/docs/scraper.livemd @@ -23,7 +23,7 @@ # end # end -R.recompile() +# R.recompile() ``` ```elixir @@ -76,6 +76,8 @@ ts = acc line, {curr, acc, win} -> + IO.inspect(line, label: "caught") + newin = case Regex.run(~r/\s*(\(?\d+\)?)\s*$/, line) do [_, verse_number] -> @@ -102,15 +104,50 @@ ts = ```elixir {last, map, win} = ts -win -|> Enum.reverse() -|> Enum.reduce({0, %{}}, fn - {verse_number, text}, {curr, acc} when is_number(verse_number) -> - {verse_number, Map.update(acc, verse_number, text, fn existing -> [text | existing] end)} +{count, _, v} = + [:END | win] + |> Enum.reverse() + |> Enum.reduce({0, [], %{}}, fn + {verse_number, text}, {curr, rem, acc} when is_number(verse_number) -> + {_, verses} = + rem + |> Enum.reverse() + |> Enum.reduce_while({verse_number, acc}, fn + x, {count, acc} when count > curr -> + case Regex.match?(~r/^[A-Z\s'!@#$%^&*()_+={}\[\]:;"'<>,.?\/\\-]+$/, x) do + false -> + {:cont, + {count - 1, Map.update(acc, count - 1, x, fn existing -> [x | existing] end)}} + + _ -> + {:cont, {count, acc}} + end + + x, {_, acc} -> + {:halt, acc} + end) - {nil, text}, {curr, acc} -> - {curr + 1, Map.update(acc, curr + 1, text, fn existing -> [text | existing] end)} -end) + {verse_number, [], + Map.update(verses, verse_number, text, fn existing -> [text | existing] end)} + + {nil, text}, {curr, rem, acc} when length(rem) > 4 -> + {curr, [text | rem |> Enum.reverse() |> tl() |> Enum.reverse()], acc} + + {nil, text}, {curr, rem, acc} -> + {curr, [text | rem], acc} + + :END, {curr, rem, acc} -> + {_, terminal} = + rem + |> Enum.reverse() + |> Enum.reduce({curr, acc}, fn x, {count, acc} -> + {count + 1, Map.update(acc, count + 1, x, fn existing -> [x | existing] end)} + end) + + {curr, [], terminal} + end) + +v # |> Enum.map(fn {verse_number, texts} -> # {verse_number, Enum.reverse(texts)} @@ -182,14 +219,14 @@ defmodule ThiruvaasagamScraper do def extract_verses(chapter_number, lang) when is_number(chapter_number) do chapter_url = - "https://www.sivaya.org/thirumurai_song.php?&pathigam_no=8.#{chapter_number}&lang=" <> lang + "thirumurai_song.php?&pathigam_no=8.#{chapter_number}&lang=" <> lang - extract_verses(chapter_url, lang) + extract_verses(chapter_url) end - def extract_verses(chapter_url, lang) when is_binary(chapter_url) do + def extract_verses(chapter_url) when is_binary(chapter_url) do {:ok, chapter_html} = - Finch.build(:get, chapter_url) + Finch.build(:get, "https://www.sivaya.org/" <> chapter_url) |> Finch.request!(Vyasa.Finch) |> Map.get(:body) |> Floki.parse_document() @@ -252,35 +289,76 @@ chapters_t = ThiruvaasagamScraper.scrape("tamil") ``` ```elixir -chapters_e[:chapters] -|> Enum.reduce( - [], - fn - %{number: no, title: title, url: [url]}, [%{number: curr_no, url: curr_url} = curr | acc] - when no == curr_no + 100 -> - [Map.put(curr, :url, [url | curr_url]) | acc] +%{id: sid} = + source = + %Vyasa.Written.Source{} + |> Vyasa.Written.Source.gen_changeset(%{title: "thiruvasagam", lang: "ta"}) + |> Vyasa.Repo.insert!() + +c_t = + chapters_t[:chapters] + |> Enum.reduce( + [], + fn + %{number: no, title: title, url: [url]}, [%{number: curr_no, url: curr_url} = curr | acc] + when no == curr_no + 100 -> + [Map.put(curr, :url, [url | curr_url]) | acc] + + %{number: no, title: title, url: url}, acc -> + [ + %{ + no: no - 100, + title: + String.split(title, "-") + |> List.first() + |> String.split(" ") + |> List.last() + |> String.trim(), + url: url, + source_id: sid + } + | acc + ] + end + ) + |> Enum.map(fn %{url: url} = c -> + Map.put( + c, + :verses, + url + |> Enum.map(fn u -> + ThiruvaasagamScraper.extract_verses(u) + end) + |> List.flatten() + |> Enum.reduce({1, []}, fn x, {count, verses} -> + {count + 1, [%{no: count, body: x, source_id: sid} | verses]} + end) + |> elem(1) + ) + end) +``` - %{number: no, title: title, url: url}, acc -> - [ - %{ - number: no - 100, - title: - String.split(title, "-") - |> List.first() - |> String.split(" ") - |> List.last() - |> String.trim(), - url: url - } - | acc - ] - end -) -|> Enum.find(&(&1.number == 1)) +```elixir + +``` + +```elixir +chapters = + c_t + |> Enum.uniq(& &1.no) + |> Enum.map(fn c -> + %Vyasa.Written.Chapter{source_id: sid} + |> Vyasa.Written.Chapter.changeset(c) + |> Vyasa.Repo.insert!() + end) +``` + +```elixir +Vyasa.Written.get_source!("219f1767-6018-45af-9567-0a3fe52671af") ``` ```elixir -chapters_e +ThiruvaasagamScraper.extract_verses("thirumurai_song.php?&pathigam_no=8.101&lang=tamil") ``` ```elixir From e9d53f0e1b91f1085d0a82025a69d3a090198013 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Sat, 31 Aug 2024 12:34:18 +0800 Subject: [PATCH 095/130] Use %UiState{} for managing ui state --- lib/vyasa/display/ui_state.ex | 15 +++ lib/vyasa/display/user_mode.ex | 8 +- .../live/display_manager/display_live.ex | 99 ++++++++++++------- .../display_manager/display_live.html.heex | 4 +- 4 files changed, 85 insertions(+), 41 deletions(-) create mode 100644 lib/vyasa/display/ui_state.ex diff --git a/lib/vyasa/display/ui_state.ex b/lib/vyasa/display/ui_state.ex new file mode 100644 index 00000000..10f679ee --- /dev/null +++ b/lib/vyasa/display/ui_state.ex @@ -0,0 +1,15 @@ +defmodule Vyasa.Display.UiState do + @moduledoc """ + UiState defines booleans and other UI-related aspects that need to be tracked. + This shall only be a struct definition. If mediating state transitions becomes complex enough, then we shall + add split DM to a UiStateManager and DataManager or something of that nature. + + This is expected to be used in 2 ways: + 1. allow DM to manage this UiState via this struct + 2. allow UserModes to be defined with an initial UI state in mind + """ + defstruct [ + :show_media_bridge?, + :show_action_bar? + ] +end diff --git a/lib/vyasa/display/user_mode.ex b/lib/vyasa/display/user_mode.ex index f5a04f62..895d28f8 100644 --- a/lib/vyasa/display/user_mode.ex +++ b/lib/vyasa/display/user_mode.ex @@ -12,18 +12,18 @@ defmodule Vyasa.Display.UserMode do 2. Drafting 3. Discussion(?) """ - alias Vyasa.Display.UserMode + alias Vyasa.Display.{UserMode, UiState} @derive Jason.Encoder defstruct [ :mode, + :default_ui_state, :mode_icon_name, :action_bar_component, :control_panel_component, :quick_actions, :control_panel_modes, :mode_actions, - :show_media_bridge_default?, :action_bar_actions, :action_bar_info_types ] @@ -49,7 +49,7 @@ defmodule Vyasa.Display.UserMode do quick_actions: @quick_actions, control_panel_modes: ["draft"], mode_actions: @mode_actions, - show_media_bridge_default?: true, + default_ui_state: %UiState{show_media_bridge?: true, show_action_bar?: true}, # NOTE: so when it's used, the event name will end up being # "quick_mark_nav-dec" ==> moves backwawrd in the order of the list action_bar_actions: [:nav_back, :nav_fwd] @@ -64,7 +64,7 @@ defmodule Vyasa.Display.UserMode do quick_actions: @quick_actions, control_panel_modes: ["read"], mode_actions: @mode_actions, - show_media_bridge_default?: false, + default_ui_state: %UiState{show_media_bridge?: true, show_action_bar?: true}, action_bar_actions: [:nav_back, :nav_fwd] } } diff --git a/lib/vyasa_web/live/display_manager/display_live.ex b/lib/vyasa_web/live/display_manager/display_live.ex index 6542929e..fa848669 100644 --- a/lib/vyasa_web/live/display_manager/display_live.ex +++ b/lib/vyasa_web/live/display_manager/display_live.ex @@ -5,7 +5,8 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do use VyasaWeb, :live_view on_mount VyasaWeb.Hook.UserAgentHook - alias Vyasa.Display.UserMode + alias Vyasa.Display.{UserMode, UiState} + alias VyasaWeb.OgImageController alias Phoenix.LiveView.Socket alias Vyasa.{Medium, Written, Draft} @@ -21,8 +22,7 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do def mount(_params, sess, socket) do # encoded_config = Jason.encode!(@default_player_config) %UserMode{ - # TEMP - show_media_bridge_default?: show_media_bridge_default? + default_ui_state: %UiState{} = initial_ui_state } = mode = UserMode.get_initial_mode() { @@ -32,10 +32,7 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do # TODO: figure out if this is important |> assign(stored_session: sess) |> assign(mode: mode) - |> assign(show_action_bar?: true) - |> assign(show_media_bridge?: show_media_bridge_default?), - # temp - # |> assign(show_media_bridge?: true), + |> assign(ui_state: initial_ui_state), layout: {VyasaWeb.Layouts, :display_manager} } end @@ -258,9 +255,11 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do when is_binary(curr_verse_id) and verse_id != curr_verse_id do # binding here blocks the stream from appending to quote bind = Draft.bind_node(bind) - bound_verses = verses - |> then(&put_in(&1[verse_id].binding, bind)) - |> then(&put_in(&1[curr_verse_id].binding, nil)) + + bound_verses = + verses + |> then(&put_in(&1[verse_id].binding, bind)) + |> then(&put_in(&1[curr_verse_id].binding, nil)) {:noreply, socket @@ -308,13 +307,19 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do %{"key" => "Enter"} = _payload, %Socket{ assigns: %{ - device_type: device_type + device_type: device_type, + ui_state: ui_state } } = socket ) do {:noreply, socket - |> assign(show_media_bridge?: should_show_media_bridge(device_type, false))} + |> assign( + ui_state: %UiState{ + ui_state + | show_media_bridge?: should_show_media_bridge(device_type, false) + } + )} end @impl true @@ -323,18 +328,23 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do %{"is_focusing?" => is_focusing?} = _payload, %Socket{ assigns: %{ - device_type: device_type + device_type: device_type, + ui_state: ui_state } } = socket ) do {:noreply, socket - |> assign(show_media_bridge?: should_show_media_bridge(device_type, is_focusing?))} + |> assign( + ui_state: %UiState{ + ui_state + | show_media_bridge?: should_show_media_bridge(device_type, is_focusing?) + } + )} end @impl true def handle_event( - "read" <> "::" <> event = _nav_event, _, %Socket{ @@ -383,14 +393,12 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do {:noreply, socket} end - @impl true def handle_event( "markQuote", _, %{assigns: %{marks: [%Mark{state: :draft} = d_mark | marks]}} = socket ) do - {:noreply, socket |> assign(:marks, [%{d_mark | state: :live} | marks])} end @@ -403,34 +411,53 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do def handle_event( "createMark", %{"body" => body}, - %{assigns: %{kv_verses: verses, - marks: [%Mark{state: :draft, verse_id: v_id, binding: binding} = d_mark | marks], - device_type: device_type}} = socket + %{ + assigns: %{ + kv_verses: verses, + marks: [%Mark{state: :draft, verse_id: v_id, binding: binding} = d_mark | marks], + device_type: device_type, + ui_state: ui_state + } + } = socket ) do {:noreply, socket |> assign(:marks, [%{d_mark | body: body, state: :live} | marks]) |> stream_insert( - :verses, %{verses[v_id] | binding: binding} + :verses, + %{verses[v_id] | binding: binding} ) - |> assign(:show_media_bridge?, should_show_media_bridge(device_type, false))} + |> assign(:ui_state, %UiState{ + ui_state + | show_media_bridge?: should_show_media_bridge(device_type, false) + })} end # when user remains on the the same binding def handle_event( "createMark", %{"body" => body}, - %{assigns: %{kv_verses: verses, - marks: [%Mark{state: :live, verse_id: v_id, binding: binding} = d_mark | _] = marks, - device_type: device_type}} = socket + %{ + assigns: %{ + kv_verses: verses, + marks: [%Mark{state: :live, verse_id: v_id, binding: binding} = d_mark | _] = marks, + device_type: device_type, + ui_state: ui_state + } + } = socket ) do {:noreply, socket |> assign(:marks, [%{d_mark | body: body, state: :live} | marks]) |> stream_insert( - :verses, %{verses[v_id] | binding: binding} + :verses, + %{verses[v_id] | binding: binding} ) - |> assign(:show_media_bridge?, should_show_media_bridge(device_type, false))} + |> assign(:show_media_bridge?, should_show_media_bridge(device_type, false)) + |> assign(:ui_state, %UiState{ + ui_state + | show_media_bridge?: should_show_media_bridge(device_type, false) + })} end @impl true @@ -439,16 +466,19 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do _event, %Socket{ assigns: %{ - device_type: device_type + device_type: device_type, + ui_state: ui_state } } = socket ) do - { :noreply, socket - |> assign(:show_media_bridge?, should_show_media_bridge(device_type, false)) + |> assign(:ui_state, %UiState{ + ui_state + | show_media_bridge?: should_show_media_bridge(device_type, false) + }) } end @@ -522,15 +552,14 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do socket end - - #Helper function for updating verse state across both stream and the k_v map + # Helper function for updating verse state across both stream and the k_v map defp mutate_verses(%Socket{} = socket, target_verse_id, mutated_verses) do socket |> stream_insert( - :verses, - mutated_verses[target_verse_id] - ) + :verses, + mutated_verses[target_verse_id] + ) |> assign(:kv_verses, mutated_verses) end diff --git a/lib/vyasa_web/live/display_manager/display_live.html.heex b/lib/vyasa_web/live/display_manager/display_live.html.heex index e513d2eb..57c5af65 100644 --- a/lib/vyasa_web/live/display_manager/display_live.html.heex +++ b/lib/vyasa_web/live/display_manager/display_live.html.heex @@ -88,7 +88,7 @@ <% end %>

-
+
<.live_component module={VyasaWeb.ActionBar} id={"action-bar"} @@ -98,7 +98,7 @@ -
+
<%= live_render(@socket, VyasaWeb.MediaLive.MediaBridge, id: "MediaBridge", session: @session, sticky: true) %>
From cf27ef749f5211d9f106ad6346a8ac98497eb899 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Sat, 31 Aug 2024 17:58:42 +0800 Subject: [PATCH 096/130] Add meaningful helpers to Vyasa.Display.UiState Minor changes --- lib/vyasa/display/ui_state.ex | 64 +++++++++++ .../live/display_manager/display_live.ex | 105 ++++++------------ 2 files changed, 98 insertions(+), 71 deletions(-) diff --git a/lib/vyasa/display/ui_state.ex b/lib/vyasa/display/ui_state.ex index 10f679ee..cb7a80e9 100644 --- a/lib/vyasa/display/ui_state.ex +++ b/lib/vyasa/display/ui_state.ex @@ -8,8 +8,72 @@ defmodule Vyasa.Display.UiState do 1. allow DM to manage this UiState via this struct 2. allow UserModes to be defined with an initial UI state in mind """ + alias Phoenix.LiveView.Socket + alias Vyasa.Display.UiState + + import Phoenix.Component, only: [assign: 2] + defstruct [ :show_media_bridge?, :show_action_bar? ] + + defp set_hide_media_bridge(%UiState{} = state) do + %UiState{state | show_media_bridge?: false} + end + + defp set_show_media_bridge(%UiState{} = state) do + %UiState{state | show_media_bridge?: true} + end + + def update_media_bridge_visibility( + %Socket{ + assigns: %{ + device_type: device_type, + ui_state: ui_state + } + } = socket, + is_focusing_on_input? + ) + when is_boolean(is_focusing_on_input?) do + case should_show_media_bridge(device_type, is_focusing_on_input?) do + true -> + socket + |> assign(ui_state: set_show_media_bridge(ui_state)) + + false -> + socket |> assign(ui_state: set_hide_media_bridge(ui_state)) + end + end + + @doc """ + Changes UI struct to hide the media_bridge. The ui_state must be within the socket. + """ + def hide_media_bridge( + %Socket{ + assigns: %{ + ui_state: %UiState{} = ui_state + } + } = socket + ) do + socket + |> assign( + ui_state: + ui_state + |> set_hide_media_bridge() + ) + end + + defp should_show_media_bridge(device_type, is_focusing_on_input?) + when is_atom(device_type) and is_boolean(is_focusing_on_input?) do + case {device_type, is_focusing_on_input?} do + {:mobile, true} -> false + {:mobile, false} -> true + {_, _} -> true + end + end + + defp should_show_media_bridge(_, _) do + true + end end diff --git a/lib/vyasa_web/live/display_manager/display_live.ex b/lib/vyasa_web/live/display_manager/display_live.ex index fa848669..68c5770e 100644 --- a/lib/vyasa_web/live/display_manager/display_live.ex +++ b/lib/vyasa_web/live/display_manager/display_live.ex @@ -20,7 +20,6 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do @impl true def mount(_params, sess, socket) do - # encoded_config = Jason.encode!(@default_player_config) %UserMode{ default_ui_state: %UiState{} = initial_ui_state } = mode = UserMode.get_initial_mode() @@ -29,7 +28,6 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do :ok, socket # to allow passing to children live-views - # TODO: figure out if this is important |> assign(stored_session: sess) |> assign(mode: mode) |> assign(ui_state: initial_ui_state), @@ -307,19 +305,16 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do %{"key" => "Enter"} = _payload, %Socket{ assigns: %{ - device_type: device_type, - ui_state: ui_state + device_type: _device_type, + ui_state: _ui_state } } = socket ) do - {:noreply, - socket - |> assign( - ui_state: %UiState{ - ui_state - | show_media_bridge?: should_show_media_bridge(device_type, false) - } - )} + { + :noreply, + socket + |> UiState.update_media_bridge_visibility(false) + } end @impl true @@ -328,41 +323,30 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do %{"is_focusing?" => is_focusing?} = _payload, %Socket{ assigns: %{ - device_type: device_type, - ui_state: ui_state + device_type: _device_type, + ui_state: _ui_state } } = socket ) do - {:noreply, - socket - |> assign( - ui_state: %UiState{ - ui_state - | show_media_bridge?: should_show_media_bridge(device_type, is_focusing?) - } - )} + { + :noreply, + socket + |> UiState.update_media_bridge_visibility(is_focusing?) + } end @impl true def handle_event( - "read" <> "::" <> event = _nav_event, + "read" <> "::" <> _event = _nav_event, _, %Socket{ assigns: %{ mode: %UserMode{ - mode: mode_name + mode: _mode_name } } } = socket ) do - IO.inspect( - %{ - "event" => event, - "mode" => mode_name - }, - label: "TRACE: TODO handle nav_event @ action-bar region" - ) - # TODO: implement nav_event handlers from action bar # This is also the event handler that needs to be triggerred if the user clicks on the nav buttons on the media bridge. {:noreply, socket} @@ -415,22 +399,21 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do assigns: %{ kv_verses: verses, marks: [%Mark{state: :draft, verse_id: v_id, binding: binding} = d_mark | marks], - device_type: device_type, - ui_state: ui_state + device_type: _device_type, + ui_state: _ui_state } } = socket ) do - {:noreply, - socket - |> assign(:marks, [%{d_mark | body: body, state: :live} | marks]) - |> stream_insert( - :verses, - %{verses[v_id] | binding: binding} - ) - |> assign(:ui_state, %UiState{ - ui_state - | show_media_bridge?: should_show_media_bridge(device_type, false) - })} + { + :noreply, + socket + |> assign(:marks, [%{d_mark | body: body, state: :live} | marks]) + |> stream_insert( + :verses, + %{verses[v_id] | binding: binding} + ) + |> UiState.update_media_bridge_visibility(false) + } end # when user remains on the the same binding @@ -441,8 +424,8 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do assigns: %{ kv_verses: verses, marks: [%Mark{state: :live, verse_id: v_id, binding: binding} = d_mark | _] = marks, - device_type: device_type, - ui_state: ui_state + device_type: _device_type, + ui_state: _ui_state } } = socket ) do @@ -453,11 +436,7 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do :verses, %{verses[v_id] | binding: binding} ) - |> assign(:show_media_bridge?, should_show_media_bridge(device_type, false)) - |> assign(:ui_state, %UiState{ - ui_state - | show_media_bridge?: should_show_media_bridge(device_type, false) - })} + |> UiState.update_media_bridge_visibility(false)} end @impl true @@ -466,8 +445,8 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do _event, %Socket{ assigns: %{ - device_type: device_type, - ui_state: ui_state + device_type: _device_type, + ui_state: _ui_state } } = socket @@ -475,10 +454,7 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do { :noreply, socket - |> assign(:ui_state, %UiState{ - ui_state - | show_media_bridge?: should_show_media_bridge(device_type, false) - }) + |> UiState.update_media_bridge_visibility(false) } end @@ -562,17 +538,4 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do ) |> assign(:kv_verses, mutated_verses) end - - defp should_show_media_bridge(device_type, is_focusing?) - when is_atom(device_type) and is_boolean(is_focusing?) do - case {device_type, is_focusing?} do - {:mobile, true} -> false - {:mobile, false} -> true - {_, _} -> true - end - end - - defp should_show_media_bridge(_, _) do - true - end end From 4ebf50c38b93a10c7653dbc53ead083d5ea31ef2 Mon Sep 17 00:00:00 2001 From: ks0m1c_dharma Date: Sat, 31 Aug 2024 20:21:20 +0800 Subject: [PATCH 097/130] Change to Karma Font --- assets/css/app.css | 8 ++--- assets/tailwind.config.js | 2 +- .../components/source_content/verses.ex | 8 ++--- .../controllers/og_image_controller.ex | 29 +++++++++--------- priv/static/fonts/dn/Karm-Medium.ttf | Bin 0 -> 311652 bytes priv/static/fonts/dn/Karm-Medium.woff | Bin 0 -> 153052 bytes priv/static/fonts/dn/Karm-Medium.woff2 | Bin 0 -> 109832 bytes priv/static/fonts/gotu/Gotu-Regular.ttf | Bin 690352 -> 0 bytes priv/static/fonts/gotu/Gotu-Regular.woff | Bin 285228 -> 0 bytes priv/static/fonts/gotu/Gotu-Regular.woff2 | Bin 188644 -> 0 bytes 10 files changed, 23 insertions(+), 24 deletions(-) create mode 100644 priv/static/fonts/dn/Karm-Medium.ttf create mode 100644 priv/static/fonts/dn/Karm-Medium.woff create mode 100644 priv/static/fonts/dn/Karm-Medium.woff2 delete mode 100644 priv/static/fonts/gotu/Gotu-Regular.ttf delete mode 100644 priv/static/fonts/gotu/Gotu-Regular.woff delete mode 100644 priv/static/fonts/gotu/Gotu-Regular.woff2 diff --git a/assets/css/app.css b/assets/css/app.css index 0cd02679..29f14c06 100644 --- a/assets/css/app.css +++ b/assets/css/app.css @@ -53,10 +53,10 @@ /* fonts declared from priv/assets/fonts */ @font-face { - font-family: "Gotu"; - src: url('/fonts/gotu/Gotu-Regular.woff2') format('woff2'), - url('/fonts/gotu/Gotu-Regular.woff') format('woff'), - url('/fonts/gotu/Gotu-Regular.ttf') format('ttf'); + font-family: "Karm"; + src: url('/fonts/dn/Karm-Medium.woff2') format('woff2'), + url('/fonts/dn/Karm-Medium.woff') format('woff'), + url('/fonts/dn/Karm-Medium.ttf') format('ttf'); } @font-face { diff --git a/assets/tailwind.config.js b/assets/tailwind.config.js index 10910f95..304d5e3e 100644 --- a/assets/tailwind.config.js +++ b/assets/tailwind.config.js @@ -24,7 +24,7 @@ module.exports = { }, }, fontFamily: { - dn: ['"Gotu"', "sans-serif"], + dn: ['"Karm"', "sans-serif"], ta: ['"Vyas", "sans-serif"'], }, fontSize: { diff --git a/lib/vyasa_web/components/source_content/verses.ex b/lib/vyasa_web/components/source_content/verses.ex index 9de30e62..14f33117 100644 --- a/lib/vyasa_web/components/source_content/verses.ex +++ b/lib/vyasa_web/components/source_content/verses.ex @@ -74,8 +74,8 @@ defmodule VyasaWeb.Content.Verses do ~H"""
-
-
+
+
@@ -134,6 +142,7 @@ defmodule VyasaWeb.Content.VerseMatrix do end attr :quote, :string, required: true + attr :event_target, :string, required: true attr :form_type, :atom, required: true attr :myself, :any, required: true @@ -141,7 +150,12 @@ defmodule VyasaWeb.Content.VerseMatrix do ~H"""
<.current_quote quote={@quote} form_type={@form_type} /> - <.quick_draft_form quote={@quote} form_type={@form_type} myself={@myself} /> + <.quick_draft_form + event_target={@event_target} + quote={@quote} + form_type={@form_type} + myself={@myself} + />
""" end @@ -230,6 +244,7 @@ defmodule VyasaWeb.Content.VerseMatrix do end attr :form_type, :atom, required: true + attr :event_target, :string, required: true attr :myself, :any, required: true attr :quote, :string, default: nil @@ -239,7 +254,7 @@ defmodule VyasaWeb.Content.VerseMatrix do <.form for={%{}} phx-submit={(@form_type == :mark && "createMark") || "createComment"} - phx-target="#reading-content" + phx-target={"#" <> @event_target} class="flex items-center" > @event_target, value: %{is_focusing?: true} ) } phx-blur={ JS.push("verses::focus_toggle_on_quick_mark_drafting", - target: "#reading-content", + target: "#" <> @event_target, value: %{is_focusing?: false} ) } phx-window-blur={ JS.push("verses::focus_toggle_on_quick_mark_drafting", - target: "#reading-content", + target: "#" <> @event_target, value: %{is_focusing?: false} ) } phx-keyup="verses::focus_toggle_on_quick_mark_drafting" + phx-target={"#" <> @event_target} />
+
+
+
+ your name: + +
+ + ☙ –‹›––– ❊ –––‹›– ❧ + +
+ +
+ + + + +
+
+
@@ -71,7 +103,7 @@
- <%= live_render(@socket, VyasaWeb.MediaLive.MediaBridge, id: "MediaBridge", session: @session, sticky: true) %> + <%= live_render(@socket, VyasaWeb.MediaLive.MediaBridge, id: "MediaBridge", sticky: true) %>
diff --git a/lib/vyasa_web/live/media_live/media_bridge.ex b/lib/vyasa_web/live/media_live/media_bridge.ex index 2b7b11ed..3e725a61 100644 --- a/lib/vyasa_web/live/media_live/media_bridge.ex +++ b/lib/vyasa_web/live/media_live/media_bridge.ex @@ -6,6 +6,11 @@ defmodule VyasaWeb.MediaLive.MediaBridge do 1. stores a general playback state. This shall be agnostic to the players that rely on this playback state for synchronising their own playback states. 2. It shall contain the common playback buttons because these buttons will be controlling all the supported players simultaneously. In so doing, playback state and actions are kept only in the media_bridge 3. TODO: handle the sync between A/V players + + 1) remove handshake protocol (just simple assign to socket) + 2) a client side component + 3) event fragment navigation a push event from client side that calls navigation stream + 4) remove heartbeat from server side """ use VyasaWeb, :live_view alias Phoenix.LiveView.Socket @@ -46,17 +51,17 @@ defmodule VyasaWeb.MediaLive.MediaBridge do |> sync_session(), layout: false} end - defp sync_session(%{assigns: %{session: %{"id" => id} = sess}} = socket) when is_binary(id) do + defp sync_session(%{assigns: %{session: %VyasaWeb.Session{id: id}}} = socket) when is_binary(id) do IO.inspect( "MediaBridge::sync_session sub to media:session:#{id} pub to written:session:#{id}", label: "SEE ME" ) Vyasa.PubSub.subscribe("media:session:" <> id) + Vyasa.PubSub.publish(:init, :media_handshake, "written:session:" <> id) socket - |> push_event("initSession", sess |> Map.take(["id"])) end defp sync_session(socket) do @@ -353,6 +358,8 @@ defmodule VyasaWeb.MediaLive.MediaBridge do true -> nil end + IO.inspect("voice acked") + is_new_voice = id !== prev_id cond do @@ -373,13 +380,14 @@ defmodule VyasaWeb.MediaLive.MediaBridge do """ def handle_info( {_, :written_handshake, :init} = _msg, - %{assigns: %{session: %{"id" => id}}} = socket + %{assigns: %{session: %{id: id}}} = socket ) do # QQ: TODO figure out if te id payload to the message is still necessary ? # NOTE: this is temporary, we will be shifting the way media-handshake works because # of a refactor of how media bridge is supposed to be a nested liveview / slottable entity # use this comment to track what needs to be done. Vyasa.PubSub.publish(:init, :media_handshake, "written:session:" <> id) + IO.inspect("written handhsaker") {:noreply, socket} end diff --git a/lib/vyasa_web/session.ex b/lib/vyasa_web/session.ex index 1cbf479d..59b393c3 100644 --- a/lib/vyasa_web/session.ex +++ b/lib/vyasa_web/session.ex @@ -2,36 +2,43 @@ defmodule VyasaWeb.Session do import Phoenix.Component, only: [assign: 2] import Phoenix.LiveView, only: [get_connect_params: 1] + @derive Jason.Encoder + defstruct name: nil, id: nil, active: true, sangh_id: Ecto.UUID.generate(), last_opened: DateTime.now!("Etc/UTC") + @default_locale "en" @timezone "UTC" @timezone_offset 0 - def on_mount(:anon, _params, _sessions, socket) do + def on_mount(:sangh, params, _sessions, socket) do # get_connect_params returns nil on the first (static rendering) mount call, and has the added connect params from the js LiveSocket creation on the subsequent (LiveSocket) call + # {:cont, socket |> assign( locale: get_connect_params(socket)["locale"] || @default_locale, tz: %{timezone: get_connect_params(socket)["timezone"] || @timezone, timezone_offset: get_connect_params(socket)["timezone_offset"] || @timezone_offset}, - session: get_connect_params(socket)["session"] |> mutate_session() + session: get_connect_params(socket)["session"] |> mutate_session(params) )} end - def on_mount(:sangh, _params, _sessions, socket) do - # get_connect_params returns nil on the first (static rendering) mount call, and has the added connect params from the js LiveSocket creation on the subsequent (LiveSocket) call - {:cont, - socket - |> assign( - locale: get_connect_params(socket)["locale"] || @default_locale, - tz: %{timezone: get_connect_params(socket)["timezone"] || @timezone, - timezone_offset: get_connect_params(socket)["timezone_offset"] || @timezone_offset}, - session: get_connect_params(socket)["session"] |> mutate_session() - )} + defp mutate_session(%{"id" => id} = sess, %{"s" => s_id}) when is_binary(id) and is_binary(s_id)do + atomised_sess = for {key, val} <- sess, into: %{} do + {String.to_existing_atom(key), val} + end + %{struct(%__MODULE__{}, atomised_sess ) | sangh_id: s_id} + end + + # careful of client and server state race. id here is not SOT + defp mutate_session(%{"id" => id} = sess, _) when is_binary(id) do + atomised_sess = for {key, val} <- sess, into: %{} do + {String.to_existing_atom(key), val} + end + + IO.inspect(struct(%__MODULE__{}, atomised_sess), label: "wow") + struct(%__MODULE__{}, atomised_sess) end - defp mutate_session(%{"id" => id} = sess) when is_binary(id), do: sess - defp mutate_session(%{"active" => true}), do: %{"id" => :crypto.strong_rand_bytes(18) |> :base64.encode()} - defp mutate_session(%{}), do: %{"id" => :crypto.strong_rand_bytes(18) |> :base64.encode()} - defp mutate_session(_), do: %{"active" => false} + # false first load + defp mutate_session(_, _), do: %__MODULE__{} end From 4d7bab44a35bb13bb8257419723a103b56f2babc Mon Sep 17 00:00:00 2001 From: ks0m1c_dharma Date: Sat, 21 Sep 2024 23:49:39 +0800 Subject: [PATCH 115/130] Prep DB & Scaffold Sangh Session --- docs/migration_wow.livemd | 11 +++---- lib/vyasa/corpus/migrator/restore.ex | 1 + lib/vyasa/draft.ex | 5 ---- lib/vyasa/sangh/comments.ex | 17 ++++++++--- lib/vyasa/sangh/mark.ex | 2 +- lib/vyasa/sangh/session.ex | 2 +- lib/vyasa/written/verse.ex | 4 +-- .../source_content/reading_content.ex | 30 ++++++------------- .../live/display_manager/display_live.ex | 16 +++++++--- lib/vyasa_web/live/media_live/media_bridge.ex | 1 - lib/vyasa_web/session.ex | 26 ++++++++++++---- .../20240151122233_create_sangh_sessions.exs | 6 +++- .../20240831122233_create_marks.exs | 8 ++--- 13 files changed, 73 insertions(+), 56 deletions(-) diff --git a/docs/migration_wow.livemd b/docs/migration_wow.livemd index 38b18d61..af8e2b9c 100644 --- a/docs/migration_wow.livemd +++ b/docs/migration_wow.livemd @@ -54,7 +54,6 @@ Vyasa.Release.migrate() ```elixir Path.expand(mypath, "#{File.cwd!()}/data/Elixir.Vyasa.Written.Source") -|> Vyasa.Corpus.Migrator.Restore.read() |> Vyasa.Corpus.Migrator.Restore.run() ``` @@ -93,10 +92,12 @@ end) ```elixir # can test if events are seeded correctly here: voice_id = "b1db78be-0bdf-443c-afdf-3221bac38758" -loaded_voice = Vyasa.Repo.get(Vyasa.Medium.Voice, voice_id) -|> Vyasa.Medium.get_voices!() -|> List.first() -|> Vyasa.Medium.Store.hydrate() + +loaded_voice = + Vyasa.Repo.get(Vyasa.Medium.Voice, voice_id) + |> Vyasa.Medium.get_voices!() + |> List.first() + |> Vyasa.Medium.Store.hydrate() loaded_voice.events ``` diff --git a/lib/vyasa/corpus/migrator/restore.ex b/lib/vyasa/corpus/migrator/restore.ex index 9f0ed127..bf7d2fca 100644 --- a/lib/vyasa/corpus/migrator/restore.ex +++ b/lib/vyasa/corpus/migrator/restore.ex @@ -41,6 +41,7 @@ defmodule Vyasa.Corpus.Migrator.Restore do # events are dependent on both verse and voice source + |> read() |> Enum.map(fn x -> # &1["translations"] x["events"] diff --git a/lib/vyasa/draft.ex b/lib/vyasa/draft.ex index f525372e..1e90739e 100644 --- a/lib/vyasa/draft.ex +++ b/lib/vyasa/draft.ex @@ -6,7 +6,6 @@ defmodule Vyasa.Draft do import Ecto.Query, warn: false alias Vyasa.Adapters.Binding alias Vyasa.Sangh.Mark - alias Vyasa.Sangh alias Vyasa.Repo # Inits the binding for an empty selection @@ -45,10 +44,6 @@ defmodule Vyasa.Draft do %{bind | node_field_name => node_id, :node_id => node_id} end - def create_comment([%Mark{} | _] = marks) do - Sangh.create_comment(%{marks: marks}) - end - @doc """ Returns the list of marks. diff --git a/lib/vyasa/sangh/comments.ex b/lib/vyasa/sangh/comments.ex index c12c6ee7..4a190b04 100644 --- a/lib/vyasa/sangh/comments.ex +++ b/lib/vyasa/sangh/comments.ex @@ -1,4 +1,13 @@ defmodule Vyasa.Sangh.Comment do + @moduledoc """ + Not your traditional comments, waypoints and containers for marks + so that they can be referred to and moved around + + Can create a trail of marks and tied to session + Can seperate marks into collapsible categories + + Sangh session Ids is SOT on shared and individual context + """ use Ecto.Schema import Ecto.Changeset alias EctoLtree.LabelTree, as: Ltree @@ -10,22 +19,22 @@ defmodule Vyasa.Sangh.Comment do field :active, :boolean, default: true field :path, Ltree field :signature, :string + field :traits, {:array, :string}, default: [] field :child_count, :integer, default: 0, virtual: true belongs_to :session, Session, references: :id, type: Ecto.UUID belongs_to :parent, Comment, references: :id, type: Ecto.UUID - #has_many :marks, Mark, references: :id, foreign_key: :comment_bind_id, on_replace: :delete_if_exists + has_many :marks, Mark, references: :id, foreign_key: :comment_id, on_replace: :delete_if_exists #has_many :bindings, Binding, references: :id, foreign_key: :comment_bind_id, on_replace: :delete_if_exists - timestamps() end @doc false def changeset(%Comment{} = comment, attrs) do comment - |> cast(attrs, [:id, :body, :path, :chapter_number, :p_type, :session_id, :parent_id, :text_id]) - |> cast_assoc(:bindings, with: &Mark.changeset/2) + |> cast(attrs, [:id, :body, :path, :session_id, :signature, :parent_id]) + |> cast_assoc(:marks, with: &Mark.changeset/2) |> validate_required([:id, :session_id]) end diff --git a/lib/vyasa/sangh/mark.ex b/lib/vyasa/sangh/mark.ex index e14d2673..c539de4e 100644 --- a/lib/vyasa/sangh/mark.ex +++ b/lib/vyasa/sangh/mark.ex @@ -27,7 +27,7 @@ defmodule Vyasa.Sangh.Mark do def changeset(event, attrs) do event - |> cast(attrs, [:body, :order, :status, :comment_id, :binding_id]) + |> cast(attrs, [:body, :order, :state, :comment_id, :binding_id]) end def update_mark(%Mark{} = draft_mark, opts \\ []) do diff --git a/lib/vyasa/sangh/session.ex b/lib/vyasa/sangh/session.ex index eee306f4..b77789d6 100644 --- a/lib/vyasa/sangh/session.ex +++ b/lib/vyasa/sangh/session.ex @@ -4,6 +4,7 @@ defmodule Vyasa.Sangh.Session do alias Vyasa.Sangh.{Comment} + @derive {Jason.Encoder, only: [:id]} @primary_key {:id, Ecto.UUID, autogenerate: true} schema "sessions" do @@ -16,6 +17,5 @@ defmodule Vyasa.Sangh.Session do def changeset(session, attrs) do session |> cast(attrs, [:id]) - |> validate_required([:id]) end end diff --git a/lib/vyasa/written/verse.ex b/lib/vyasa/written/verse.ex index 5659677d..95b56461 100644 --- a/lib/vyasa/written/verse.ex +++ b/lib/vyasa/written/verse.ex @@ -3,20 +3,18 @@ defmodule Vyasa.Written.Verse do import Ecto.Changeset alias Vyasa.Written.{Source, Chapter, Translation} - alias Vyasa.Sangh.{Comment} - alias Vyasa.Adapters.Binding @primary_key {:id, Ecto.UUID, autogenerate: true} schema "verses" do field :no, :integer field :body, :string field :binding, :map, virtual: true + field :comments, {:array, :map}, virtual: true, default: [] belongs_to :source, Source, type: Ecto.UUID belongs_to :chapter, Chapter, type: :integer, references: :no, foreign_key: :chapter_no has_many :translations, Translation - many_to_many :comments, Comment, join_through: Binding end @doc false diff --git a/lib/vyasa_web/components/source_content/reading_content.ex b/lib/vyasa_web/components/source_content/reading_content.ex index 6f500748..fcf582ac 100644 --- a/lib/vyasa_web/components/source_content/reading_content.ex +++ b/lib/vyasa_web/components/source_content/reading_content.ex @@ -13,7 +13,7 @@ defmodule VyasaWeb.Content.ReadingContent do alias Vyasa.Medium.{Voice} alias Vyasa.Written.{Source, Chapter} alias Phoenix.LiveView.Socket - alias Vyasa.Sangh.{Comment, Mark} + alias Vyasa.Sangh.{Mark} alias VyasaWeb.OgImageController @impl true @@ -43,7 +43,7 @@ defmodule VyasaWeb.Content.ReadingContent do @impl true # received updates from parent liveview when a handshake is init, does a pub for the voice to use def update( - %{id: "reading-content", sess_id: sess_id} = _props, + %{id: "reading-content"} = _props, %{ assigns: %{ session: %{id: sess_id}, @@ -127,27 +127,16 @@ defmodule VyasaWeb.Content.ReadingContent do socket - |> sync_session() - |> assign(:content_action, :show_verses) - |> maybe_stream_configure(:verses, dom_id: &"verse-#{&1.id}") - |> stream(:verses, verses) |> assign( :kv_verses, # creates a map of verse_id_to_verses - Enum.into( - verses, - %{}, - &{&1.id, - %{ - &1 - | comments: [ - %Comment{signature: "Pope", body: "Achilles’ wrath, to Greece the direful spring - Of woes unnumber’d, heavenly goddess, sing"} - ] - }} - ) - ) + Enum.into(verses, %{},&({&1.id, &1}) + )) |> assign(:marks, [%Mark{state: :draft, order: 0}]) + |> sync_session() + |> assign(:content_action, :show_verses) + |> maybe_stream_configure(:verses, dom_id: &"verse-#{&1.id}") + |> stream(:verses, verses) # DEPRECATED # RENAME? |> assign(:src, source) @@ -209,12 +198,10 @@ defmodule VyasaWeb.Content.ReadingContent do defp sync_session(%Socket{assigns: %{session: %{id: sess_id}}} = socket) when is_binary(sess_id) do Vyasa.PubSub.subscribe("written:session:" <> sess_id) Vyasa.PubSub.publish(:init, :written_handshake, "media:session:" <> sess_id) - IO.inspect(sess_id <> " sync la") socket end defp sync_session(socket) do - IO.inspect(socket, label: "not ready to init sync of session from within ReadingContent") socket end @@ -421,6 +408,7 @@ defmodule VyasaWeb.Content.ReadingContent do ~H"""
Hello world, i'm the ReadingContent
+ Session: <%= @session && @session.name %>
<%= @user_mode.mode_context_component %> <%= @user_mode.mode_context_component_selector %> <.button phx-click="foo" phx-target={@myself}> diff --git a/lib/vyasa_web/live/display_manager/display_live.ex b/lib/vyasa_web/live/display_manager/display_live.ex index 0e59fade..9466d9f1 100644 --- a/lib/vyasa_web/live/display_manager/display_live.ex +++ b/lib/vyasa_web/live/display_manager/display_live.ex @@ -37,12 +37,21 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do } end - defp sync_session(%{assigns: %{session: %Session{name: name} = sess}} = socket) when is_binary(name) do + defp sync_session(%{assigns: %{session: %Session{name: name, sangh: %{id: _s_id}} = sess}} = socket) when is_binary(name) do # currently needs name prerequisite to save socket |> push_event("initSession", sess) end + defp sync_session(%{assigns: %{session: %Session{name: name} = sess}} = socket) when is_binary(name) do + # initialises sangh if uninitiated (didnt init at Vyasa.Session) + {:ok, sangh} = Vyasa.Sangh.create_session() + sangh_sess = %{sess | sangh: sangh} + socket + |> assign(session: sangh_sess) + |> push_event("initSession", sangh_sess) + end + defp sync_session(socket) do socket end @@ -149,7 +158,6 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do {_, :media_handshake, :init} = _msg, %{ assigns: %{ - session: %VyasaWeb.Session{id: sess_id}, mode: %UserMode{ mode_context_component: component, mode_context_component_selector: selector @@ -157,8 +165,8 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do } } = socket ) do - IO.inspect(sess_id, label: "media handshake") - send_update(component, id: selector, sess_id: sess_id) + + send_update(component, id: selector) {:noreply, socket} end diff --git a/lib/vyasa_web/live/media_live/media_bridge.ex b/lib/vyasa_web/live/media_live/media_bridge.ex index 3e725a61..835a2209 100644 --- a/lib/vyasa_web/live/media_live/media_bridge.ex +++ b/lib/vyasa_web/live/media_live/media_bridge.ex @@ -358,7 +358,6 @@ defmodule VyasaWeb.MediaLive.MediaBridge do true -> nil end - IO.inspect("voice acked") is_new_voice = id !== prev_id diff --git a/lib/vyasa_web/session.ex b/lib/vyasa_web/session.ex index 59b393c3..75f977e3 100644 --- a/lib/vyasa_web/session.ex +++ b/lib/vyasa_web/session.ex @@ -3,12 +3,20 @@ defmodule VyasaWeb.Session do import Phoenix.LiveView, only: [get_connect_params: 1] @derive Jason.Encoder - defstruct name: nil, id: nil, active: true, sangh_id: Ecto.UUID.generate(), last_opened: DateTime.now!("Etc/UTC") + defstruct name: nil, id: nil, active: true, sangh: nil, last_opened: DateTime.now!("Etc/UTC") @default_locale "en" @timezone "UTC" @timezone_offset 0 + defguard is_uuid?(value) + when is_bitstring(value) and + byte_size(value) == 36 and + binary_part(value, 8, 1) == "-" and + binary_part(value, 13, 1) == "-" and + binary_part(value, 18, 1) == "-" and + binary_part(value, 23, 1) == "-" + def on_mount(:sangh, params, _sessions, socket) do # get_connect_params returns nil on the first (static rendering) mount call, and has the added connect params from the js LiveSocket creation on the subsequent (LiveSocket) call # @@ -22,23 +30,29 @@ defmodule VyasaWeb.Session do )} end - defp mutate_session(%{"id" => id} = sess, %{"s" => s_id}) when is_binary(id) and is_binary(s_id)do + defp mutate_session(%{"id" => id} = sess, %{"s" => s_id}) when is_binary(id) and is_uuid?(s_id)do atomised_sess = for {key, val} <- sess, into: %{} do - {String.to_existing_atom(key), val} + hydrate_session(key, val) end - %{struct(%__MODULE__{}, atomised_sess ) | sangh_id: s_id} + %{struct(%__MODULE__{}, atomised_sess ) | sangh: Vyasa.Sangh.get_session!(s_id)} end # careful of client and server state race. id here is not SOT defp mutate_session(%{"id" => id} = sess, _) when is_binary(id) do atomised_sess = for {key, val} <- sess, into: %{} do - {String.to_existing_atom(key), val} + hydrate_session(key, val) end - IO.inspect(struct(%__MODULE__{}, atomised_sess), label: "wow") struct(%__MODULE__{}, atomised_sess) end # false first load defp mutate_session(_, _), do: %__MODULE__{} + + + defp hydrate_session("sangh", %{"id" => s_id}) do + {:sangh, Vyasa.Sangh.get_session!(s_id)} + end + + defp hydrate_session(key, val), do: {String.to_existing_atom(key), val} end diff --git a/priv/repo/migrations/20240151122233_create_sangh_sessions.exs b/priv/repo/migrations/20240151122233_create_sangh_sessions.exs index 793ee07a..d9761732 100644 --- a/priv/repo/migrations/20240151122233_create_sangh_sessions.exs +++ b/priv/repo/migrations/20240151122233_create_sangh_sessions.exs @@ -13,16 +13,19 @@ defmodule Vyasa.Repo.Migrations.CreateSanghSessions do create table(:comments, primary_key: false) do add :id, :uuid, primary_key: true - add :body, :text, null: false + add :body, :text add :active, :boolean, default: false add :path, :ltree add :signature, :string add :session_id, references(:sessions, column: :id, type: :uuid) add :parent_id, references(:comments, column: :id, type: :uuid) + add :traits, :jsonb timestamps(type: :utc_datetime_usec) end + execute("CREATE INDEX comments_traits_index ON comments USING GIN(traits jsonb_path_ops)", "DROP INDEX comments_traits_index") + create table(:bindings, primary_key: false) do add :id, :uuid, primary_key: true @@ -41,4 +44,5 @@ defmodule Vyasa.Repo.Migrations.CreateSanghSessions do create index(:bindings, [:chapter_no, :source_id]) end + end diff --git a/priv/repo/migrations/20240831122233_create_marks.exs b/priv/repo/migrations/20240831122233_create_marks.exs index c3ccf5c8..be9f9989 100644 --- a/priv/repo/migrations/20240831122233_create_marks.exs +++ b/priv/repo/migrations/20240831122233_create_marks.exs @@ -6,17 +6,17 @@ defmodule Vyasa.Repo.Migrations.CreateMarks do create table(:marks, primary_key: false) do add :id, :uuid, primary_key: true add :body, :string - add :order, :integer + add :state, :string - add :window, :jsonb + add :order, :integer - add :verse_id, references(:verses, column: :id, type: :uuid, on_delete: :nothing) + add :comment_id, references(:comments, column: :id, type: :uuid, on_delete: :nothing) add :binding_id, references(:bindings, column: :id, type: :uuid, on_delete: :nothing) timestamps(type: :utc_datetime_usec) end - create index(:marks, [:verse_id]) + create index(:marks, [:comment_id]) create index(:marks, [:binding_id]) end From f0ac479af1cd2537df05a6a4d6949830faaee8fa Mon Sep 17 00:00:00 2001 From: ks0m1c_dharma Date: Sun, 22 Sep 2024 03:52:40 +0800 Subject: [PATCH 116/130] Draft Table Persistence of Marks --- lib/vyasa/adapters/binding.ex | 2 +- lib/vyasa/sangh.ex | 9 +++- lib/vyasa/sangh/comments.ex | 41 ++++++++++++++++- .../source_content/reading_content.ex | 44 ++++++++++++++++--- .../live/display_manager/display_live.ex | 5 ++- 5 files changed, 89 insertions(+), 12 deletions(-) diff --git a/lib/vyasa/adapters/binding.ex b/lib/vyasa/adapters/binding.ex index 14409739..1d203310 100644 --- a/lib/vyasa/adapters/binding.ex +++ b/lib/vyasa/adapters/binding.ex @@ -13,7 +13,7 @@ defmodule Vyasa.Adapters.Binding do schema "bindings" do field :w_type, Ecto.Enum, values: [:quote, :timestamp, :null] - field :field_key, {:array, :string} + field :field_key, {:array, :any} field :node_id, :string, virtual: true diff --git a/lib/vyasa/sangh.ex b/lib/vyasa/sangh.ex index 057d6231..d042f98c 100644 --- a/lib/vyasa/sangh.ex +++ b/lib/vyasa/sangh.ex @@ -135,7 +135,14 @@ defmodule Vyasa.Sangh do Repo.Paginated.all(query, page, sort_attribute, limit) end - + def get_comments_by_session(id, %{traits: traits}) do + from(c in Comment, + where: c.session_id == ^id and fragment("? @> ?", c.traits, ^traits), + preload: [marks: [:binding]] + ) + |> order_by(asc: :inserted_at) + |> Repo.all() + end def get_comments_by_session(id) do query = Comment diff --git a/lib/vyasa/sangh/comments.ex b/lib/vyasa/sangh/comments.ex index 4a190b04..368417d8 100644 --- a/lib/vyasa/sangh/comments.ex +++ b/lib/vyasa/sangh/comments.ex @@ -16,7 +16,7 @@ defmodule Vyasa.Sangh.Comment do @primary_key {:id, Ecto.UUID, autogenerate: false} schema "comments" do field :body, :string - field :active, :boolean, default: true + field :active, :boolean, default: true #active in drafting table field :path, Ltree field :signature, :string field :traits, {:array, :string}, default: [] @@ -31,11 +31,28 @@ defmodule Vyasa.Sangh.Comment do end @doc false + def changeset(%Comment{} = comment, %{marks: [%Mark{} | _ ] = marks} = attrs) do + comment + |> cast(attrs, [:id, :body, :active, :path, :session_id, :signature, :parent_id, :traits]) + |> put_assoc(:marks, marks, with: &Mark.changeset/2) + |> validate_required([:id, :session_id]) + |> validate_include_subset(:traits, ["personal", "draft", "publish"]) + end + def changeset(%Comment{} = comment, attrs) do comment - |> cast(attrs, [:id, :body, :path, :session_id, :signature, :parent_id]) + |> cast(attrs, [:id, :body, :active, :path, :session_id, :signature, :parent_id, :traits]) |> cast_assoc(:marks, with: &Mark.changeset/2) |> validate_required([:id, :session_id]) + |> validate_include_subset(:traits, ["personal", "draft", "publish"]) + end + + def mutate_changeset(%Comment{} = comment, %{marks: [%Mark{} | _ ] = marks} = attrs) do + comment + |> Vyasa.Repo.preload([:marks]) + |> cast(attrs, [:id, :body, :active, :signature]) + |> put_assoc(:marks, marks, with: &Mark.changeset/2) + |> Map.put(:repo_opts, [on_conflict: {:replace_all_except, [:id]}, conflict_target: :id]) end def mutate_changeset(%Comment{} = comment, attrs) do @@ -43,4 +60,24 @@ defmodule Vyasa.Sangh.Comment do |> cast(attrs, [:id, :body, :active]) |> Map.put(:repo_opts, [on_conflict: {:replace_all_except, [:id]}, conflict_target: :id]) end + + defp validate_include_subset(changeset, field, data, opts \\ []) do + validate_change changeset, field, {:superset, data}, fn _, value -> + element_type = + case Map.fetch!(changeset.types, field) do + {:array, element_type} -> + element_type + type -> + {:array, element_type} = Ecto.Type.type(type) + element_type + end + + Enum.map(data, &Ecto.Type.include?(element_type, &1, value)) + |> Enum.member?(true) + |> case do + false -> [{field, {Keyword.get(opts, :message, "has an invalid entry"), [validation: :superset, enum: data]}}] + _ -> [] + end + end + end end diff --git a/lib/vyasa_web/components/source_content/reading_content.ex b/lib/vyasa_web/components/source_content/reading_content.ex index fcf582ac..352fd106 100644 --- a/lib/vyasa_web/components/source_content/reading_content.ex +++ b/lib/vyasa_web/components/source_content/reading_content.ex @@ -41,7 +41,7 @@ defmodule VyasaWeb.Content.ReadingContent do end @impl true - # received updates from parent liveview when a handshake is init, does a pub for the voice to use + # received updates from parent liveview when a handshake is init with sesion, does a pub for the voice to use def update( %{id: "reading-content"} = _props, %{ @@ -199,6 +199,7 @@ defmodule VyasaWeb.Content.ReadingContent do Vyasa.PubSub.subscribe("written:session:" <> sess_id) Vyasa.PubSub.publish(:init, :written_handshake, "media:session:" <> sess_id) socket + |> sync_draft_table() end defp sync_session(socket) do @@ -346,6 +347,7 @@ defmodule VyasaWeb.Content.ReadingContent do :noreply, socket |> assign(:marks, [%{d_mark | body: body, state: :live} | marks]) + |> mutate_draft_table() |> stream_insert( :verses, %{verses[v_id] | binding: binding} @@ -369,6 +371,7 @@ defmodule VyasaWeb.Content.ReadingContent do {:noreply, socket |> assign(:marks, [%{d_mark | body: body, state: :live} | marks]) + |> mutate_draft_table() |> stream_insert( :verses, %{verses[v_id] | binding: binding} @@ -383,10 +386,7 @@ defmodule VyasaWeb.Content.ReadingContent do ) do send(self(), {"mutate_UiState", "update_media_bridge_visibility", [false]}) - { - :noreply, - socket - } + {:noreply, socket} end @impl true @@ -408,7 +408,7 @@ defmodule VyasaWeb.Content.ReadingContent do ~H"""
Hello world, i'm the ReadingContent
- Session: <%= @session && @session.name %>
+ Session: <%= @session && @session.name %> Sangh: <%= @session && @session.sangh && @session.sangh.id %>
<%= @user_mode.mode_context_component %> <%= @user_mode.mode_context_component_selector %> <.button phx-click="foo" phx-target={@myself}> @@ -471,4 +471,36 @@ defmodule VyasaWeb.Content.ReadingContent do ) |> assign(:kv_verses, mutated_verses) end + + # Helper function that syncs and mutates draft table + defp mutate_draft_table(%{assigns: %{draft_table: %Vyasa.Sangh.Comment{} = dt, marks: marks}} = socket) do + IO.inspect(dt, label: "DROFT") + {:ok, com} = Vyasa.Sangh.update_comment(dt, %{marks: marks}) + socket + |> assign(:draft_table, com) + end + # currently naive hd lookup can be filter based on active toggle, + # tree like comments can be used to store nested collapsible topics (personal mark collection e.g.) + # currently marks merged in and swapped out probably can be singular data structure + # if sangh_id is active open drafting table + defp sync_draft_table(%{assigns: %{session: %{sangh: %{id: sangh_id}}}} = socket) do + case Vyasa.Sangh.get_comments_by_session(sangh_id, %{traits: ["draft"]}) do + [%Vyasa.Sangh.Comment{marks: [ _ | _] = marks} = dt | _ ] -> + IO.inspect(marks, label: "is this triggering") + socket + |> assign(draft_table: dt) + |> assign(marks: marks) + [%Vyasa.Sangh.Comment{} = dt | _ ] -> + socket + |> assign(draft_table: dt) + _ -> + {:ok, com} = Vyasa.Sangh.create_comment(%{id: Ecto.UUID.generate(), session_id: sangh_id, traits: ["draft"]}) + socket + |> assign(draft_table: com) + end + end + + defp sync_draft_table(%{assigns: %{session: _}} = socket) do + socket + end end diff --git a/lib/vyasa_web/live/display_manager/display_live.ex b/lib/vyasa_web/live/display_manager/display_live.ex index 9466d9f1..336def46 100644 --- a/lib/vyasa_web/live/display_manager/display_live.ex +++ b/lib/vyasa_web/live/display_manager/display_live.ex @@ -7,6 +7,7 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do alias Vyasa.Display.{UserMode, UiState} alias Phoenix.LiveView.Socket alias VyasaWeb.Session + alias Vyasa.Sangh @supported_modes UserMode.supported_modes() @mod_registry %{"UiState" => UiState} @@ -37,7 +38,7 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do } end - defp sync_session(%{assigns: %{session: %Session{name: name, sangh: %{id: _s_id}} = sess}} = socket) when is_binary(name) do + defp sync_session(%{assigns: %{session: %Session{name: name, sangh: %{id: _sangh_id}} = sess}} = socket) when is_binary(name) do # currently needs name prerequisite to save socket |> push_event("initSession", sess) @@ -45,7 +46,7 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do defp sync_session(%{assigns: %{session: %Session{name: name} = sess}} = socket) when is_binary(name) do # initialises sangh if uninitiated (didnt init at Vyasa.Session) - {:ok, sangh} = Vyasa.Sangh.create_session() + {:ok, sangh} = Sangh.create_session() sangh_sess = %{sess | sangh: sangh} socket |> assign(session: sangh_sess) From 08effb6d95a80a9cf9f84b9a2d836b4b57cf4bc7 Mon Sep 17 00:00:00 2001 From: ks0m1c_dharma Date: Sun, 22 Sep 2024 03:57:46 +0800 Subject: [PATCH 117/130] Sangh autogenerates id now --- test/vyasa/sangh_test.exs | 8 -------- 1 file changed, 8 deletions(-) diff --git a/test/vyasa/sangh_test.exs b/test/vyasa/sangh_test.exs index 0b27840f..59484023 100644 --- a/test/vyasa/sangh_test.exs +++ b/test/vyasa/sangh_test.exs @@ -27,9 +27,6 @@ defmodule Vyasa.SanghTest do assert session.id == "7488a646-e31f-11e4-aace-600308960662" end - test "create_session/1 with invalid data returns error changeset" do - assert {:error, %Ecto.Changeset{}} = Sangh.create_session(@invalid_attrs) - end test "update_session/2 with valid data updates the session" do session = session_fixture() @@ -39,11 +36,6 @@ defmodule Vyasa.SanghTest do assert session.id == "7488a646-e31f-11e4-aace-600308960668" end - test "update_session/2 with invalid data returns error changeset" do - session = session_fixture() - assert {:error, %Ecto.Changeset{}} = Sangh.update_session(session, @invalid_attrs) - assert session == Sangh.get_session!(session.id) - end test "delete_session/1 deletes the session" do session = session_fixture() From 82e4ae01a554fcb5e26f2a0c593b1c5779cf230d Mon Sep 17 00:00:00 2001 From: ks0m1c_dharma Date: Sun, 22 Sep 2024 04:15:55 +0800 Subject: [PATCH 118/130] Relax constraint on session sync to automated id --- lib/vyasa_web/components/source_content/reading_content.ex | 6 +++++- lib/vyasa_web/live/display_manager/display_live.ex | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/vyasa_web/components/source_content/reading_content.ex b/lib/vyasa_web/components/source_content/reading_content.ex index 352fd106..9631e434 100644 --- a/lib/vyasa_web/components/source_content/reading_content.ex +++ b/lib/vyasa_web/components/source_content/reading_content.ex @@ -474,11 +474,15 @@ defmodule VyasaWeb.Content.ReadingContent do # Helper function that syncs and mutates draft table defp mutate_draft_table(%{assigns: %{draft_table: %Vyasa.Sangh.Comment{} = dt, marks: marks}} = socket) do - IO.inspect(dt, label: "DROFT") {:ok, com} = Vyasa.Sangh.update_comment(dt, %{marks: marks}) socket |> assign(:draft_table, com) end + + # when session hasnt been initialised + defp mutate_draft_table(socket) do + socket + end # currently naive hd lookup can be filter based on active toggle, # tree like comments can be used to store nested collapsible topics (personal mark collection e.g.) # currently marks merged in and swapped out probably can be singular data structure diff --git a/lib/vyasa_web/live/display_manager/display_live.ex b/lib/vyasa_web/live/display_manager/display_live.ex index 336def46..b25c5d82 100644 --- a/lib/vyasa_web/live/display_manager/display_live.ex +++ b/lib/vyasa_web/live/display_manager/display_live.ex @@ -38,13 +38,13 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do } end - defp sync_session(%{assigns: %{session: %Session{name: name, sangh: %{id: _sangh_id}} = sess}} = socket) when is_binary(name) do + defp sync_session(%{assigns: %{session: %Session{id: id, sangh: %{id: _sangh_id}} = sess}} = socket) when is_binary(id) do # currently needs name prerequisite to save socket |> push_event("initSession", sess) end - defp sync_session(%{assigns: %{session: %Session{name: name} = sess}} = socket) when is_binary(name) do + defp sync_session(%{assigns: %{session: %Session{id: id} = sess}} = socket) when is_binary(id) do # initialises sangh if uninitiated (didnt init at Vyasa.Session) {:ok, sangh} = Sangh.create_session() sangh_sess = %{sess | sangh: sangh} From 2ba1c5dd755f6f34097c2af5d10ccd3b6c634009 Mon Sep 17 00:00:00 2001 From: a/vivekbala Date: Mon, 23 Sep 2024 10:35:08 +0800 Subject: [PATCH 119/130] Guard Check Co-authored-by: Ritesh Kumar Signed-off-by: a/vivekbala --- lib/vyasa/written.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/vyasa/written.ex b/lib/vyasa/written.ex index 517e528e..d036469c 100644 --- a/lib/vyasa/written.ex +++ b/lib/vyasa/written.ex @@ -153,7 +153,7 @@ defmodule Vyasa.Written do |> Repo.all() end - def list_chapters_by_source(source_title, lang) do + def list_chapters_by_source(source_title, lang) when is_binary(source_title) do %Source{id: id} = _src = get_source_by_title(source_title) list_chapters_by_source(id, lang) end From f113e71c8060ac93f303f76d27a35c2808c7b5a1 Mon Sep 17 00:00:00 2001 From: ks0m1c_dharma Date: Mon, 23 Sep 2024 14:57:33 +0800 Subject: [PATCH 120/130] Drafting Table to Reflector --- lib/vyasa/sangh/comments.ex | 6 ++-- .../source_content/reading_content.ex | 31 +++++++++++-------- 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/lib/vyasa/sangh/comments.ex b/lib/vyasa/sangh/comments.ex index 368417d8..686f844b 100644 --- a/lib/vyasa/sangh/comments.ex +++ b/lib/vyasa/sangh/comments.ex @@ -1,10 +1,10 @@ defmodule Vyasa.Sangh.Comment do @moduledoc """ Not your traditional comments, waypoints and containers for marks - so that they can be referred to and moved around + so that they can be referred to and moved around according to their context Can create a trail of marks and tied to session - Can seperate marks into collapsible categories + Can seperate marks into bundle collapsible categories Sangh session Ids is SOT on shared and individual context """ @@ -16,7 +16,7 @@ defmodule Vyasa.Sangh.Comment do @primary_key {:id, Ecto.UUID, autogenerate: false} schema "comments" do field :body, :string - field :active, :boolean, default: true #active in drafting table + field :active, :boolean, default: true #active in draft reflector field :path, Ltree field :signature, :string field :traits, {:array, :string}, default: [] diff --git a/lib/vyasa_web/components/source_content/reading_content.ex b/lib/vyasa_web/components/source_content/reading_content.ex index 9631e434..39aecdc7 100644 --- a/lib/vyasa_web/components/source_content/reading_content.ex +++ b/lib/vyasa_web/components/source_content/reading_content.ex @@ -199,7 +199,7 @@ defmodule VyasaWeb.Content.ReadingContent do Vyasa.PubSub.subscribe("written:session:" <> sess_id) Vyasa.PubSub.publish(:init, :written_handshake, "media:session:" <> sess_id) socket - |> sync_draft_table() + |> sync_draft_reflector() end defp sync_session(socket) do @@ -347,7 +347,7 @@ defmodule VyasaWeb.Content.ReadingContent do :noreply, socket |> assign(:marks, [%{d_mark | body: body, state: :live} | marks]) - |> mutate_draft_table() + |> mutate_draft_reflector() |> stream_insert( :verses, %{verses[v_id] | binding: binding} @@ -371,7 +371,7 @@ defmodule VyasaWeb.Content.ReadingContent do {:noreply, socket |> assign(:marks, [%{d_mark | body: body, state: :live} | marks]) - |> mutate_draft_table() + |> mutate_draft_reflector() |> stream_insert( :verses, %{verses[v_id] | binding: binding} @@ -472,39 +472,44 @@ defmodule VyasaWeb.Content.ReadingContent do |> assign(:kv_verses, mutated_verses) end - # Helper function that syncs and mutates draft table - defp mutate_draft_table(%{assigns: %{draft_table: %Vyasa.Sangh.Comment{} = dt, marks: marks}} = socket) do + # Helper function that syncs and mutates Draft Reflector + + # Helper function that syncs and mutates Draft Reflector + defp mutate_draft_reflector(%{assigns: %{draft_reflector: %Vyasa.Sangh.Comment{} = dt, marks: marks}} = socket) do + {:ok, com} = Vyasa.Sangh.update_comment(dt, %{marks: marks}) socket - |> assign(:draft_table, com) + |> assign(:draft_reflector, com) end # when session hasnt been initialised - defp mutate_draft_table(socket) do + defp mutate_draft_reflector(socket) do socket + end # currently naive hd lookup can be filter based on active toggle, # tree like comments can be used to store nested collapsible topics (personal mark collection e.g.) # currently marks merged in and swapped out probably can be singular data structure - # if sangh_id is active open drafting table - defp sync_draft_table(%{assigns: %{session: %{sangh: %{id: sangh_id}}}} = socket) do + # managing of lifecycle of marks + # if sangh_id is active open + defp sync_draft_reflector(%{assigns: %{session: %{sangh: %{id: sangh_id}}}} = socket) do case Vyasa.Sangh.get_comments_by_session(sangh_id, %{traits: ["draft"]}) do [%Vyasa.Sangh.Comment{marks: [ _ | _] = marks} = dt | _ ] -> IO.inspect(marks, label: "is this triggering") socket - |> assign(draft_table: dt) + |> assign(draft_reflector: dt) |> assign(marks: marks) [%Vyasa.Sangh.Comment{} = dt | _ ] -> socket - |> assign(draft_table: dt) + |> assign(draft_reflector: dt) _ -> {:ok, com} = Vyasa.Sangh.create_comment(%{id: Ecto.UUID.generate(), session_id: sangh_id, traits: ["draft"]}) socket - |> assign(draft_table: com) + |> assign(draft_reflector: com) end end - defp sync_draft_table(%{assigns: %{session: _}} = socket) do + defp sync_draft_reflector(%{assigns: %{session: _}} = socket) do socket end end From 290742cb93b3d3302cf8e06587f9d24267cc0db2 Mon Sep 17 00:00:00 2001 From: ks0m1c_dharma Date: Mon, 23 Sep 2024 15:21:46 +0800 Subject: [PATCH 121/130] Helm for 1single Chalisa --- .../source_content/reading_content.ex | 53 ++++++++++++------- .../live/display_manager/display_live.ex | 6 +++ 2 files changed, 40 insertions(+), 19 deletions(-) diff --git a/lib/vyasa_web/components/source_content/reading_content.ex b/lib/vyasa_web/components/source_content/reading_content.ex index 39aecdc7..77d0ef05 100644 --- a/lib/vyasa_web/components/source_content/reading_content.ex +++ b/lib/vyasa_web/components/source_content/reading_content.ex @@ -87,33 +87,48 @@ defmodule VyasaWeb.Content.ReadingContent do }) end + defp apply_action( - %Socket{} = socket, - :show_chapters, - %{"source_title" => source_title} = - params - ) do + %Socket{} = socket, + :show_chapters, + %{"source_title" => source_title} = + params + ) do IO.inspect(:show_chapters, label: "TRACE: apply action DM action show_chapters:") IO.inspect(params, label: "TRACE: apply action DM params:") IO.inspect(source_title, label: "TRACE: apply action DM params source_title:") - [%Chapter{source: src} | _] = chapters = Written.get_chapters_by_src(source_title) + with %Source{id: sid} = source <- Written.get_source_by_title(source_title), + # when is more than 1 chapter + [%Chapter{} | [%Chapter{} | _]] = chapters <- Written.list_chapters_by_source(sid, @default_lang) do + socket + |> assign(:content_action, :show_chapters) + |> assign(:page_title, to_title_case(source.title)) + |> assign(:source, source) + |> assign(:meta, %{ + title: to_title_case(source.title), + description: "Explore the #{to_title_case(source.title)}", + type: "website", + image: url(~p"/og/#{VyasaWeb.OgImageController.get_by_binding(%{source: source})}"), + url: url(socket, ~p"/explore/#{source.title}") + }) + |> maybe_stream_configure(:chapters, dom_id: &"Chapter-#{&1.no}") + |> stream(:chapters, chapters |> Enum.sort_by(fn chap -> chap.no end)) + + else + [%Chapter{} = chapter | _] -> + + send(self(), {"helm", ~p"/explore/#{source_title}/#{chapter.no}/"}) + + socket + + _ -> + raise VyasaWeb.ErrorHTML.FourOFour, message: "No Chapters here yet" + end - socket - |> assign(:content_action, :show_chapters) - |> assign(:page_title, to_title_case(src.title)) - |> assign(:source, src) - |> assign(:meta, %{ - title: to_title_case(src.title), - description: "Explore the #{to_title_case(src.title)}", - type: "website", - image: url(~p"/og/#{VyasaWeb.OgImageController.get_by_binding(%{source: src})}"), - url: url(socket, ~p"/explore/#{src.title}") - }) - |> maybe_stream_configure(:chapters, dom_id: &"Chapter-#{&1.no}") - |> stream(:chapters, chapters |> Enum.sort_by(fn chap -> chap.no end)) end + defp apply_action( %Socket{} = socket, :show_verses, diff --git a/lib/vyasa_web/live/display_manager/display_live.ex b/lib/vyasa_web/live/display_manager/display_live.ex index b25c5d82..927e3761 100644 --- a/lib/vyasa_web/live/display_manager/display_live.ex +++ b/lib/vyasa_web/live/display_manager/display_live.ex @@ -171,6 +171,12 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do {:noreply, socket} end + def handle_info({"helm", dest}, socket) do + {:noreply, socket + |> push_patch([to: dest, replace: true]) + } + end + @impl true def handle_info({"mutate_" <> mod, function_name, args}, socket) when is_binary(function_name) and is_list(args) do From 6d0630e0d3b08102432eb7b0d9fb2c176050588e Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Mon, 23 Sep 2024 16:50:51 +0800 Subject: [PATCH 122/130] Raname Content.ReadingContent -> Context.Read --- lib/utils/string.ex | 6 +- lib/vyasa/display/user_mode.ex | 4 +- .../reading_content.ex => contexts/read.ex} | 85 ++++++++++--------- .../read}/chapters.ex | 2 +- .../read}/sources.ex | 0 .../read}/verse_matrix.ex | 0 .../read}/verses.ex | 0 .../live/display_manager/display_live.ex | 16 ++-- 8 files changed, 62 insertions(+), 51 deletions(-) rename lib/vyasa_web/components/{source_content/reading_content.ex => contexts/read.ex} (89%) rename lib/vyasa_web/components/{source_content => contexts/read}/chapters.ex (95%) rename lib/vyasa_web/components/{source_content => contexts/read}/sources.ex (100%) rename lib/vyasa_web/components/{source_content => contexts/read}/verse_matrix.ex (100%) rename lib/vyasa_web/components/{source_content => contexts/read}/verses.ex (100%) diff --git a/lib/utils/string.ex b/lib/utils/string.ex index 9b8070e5..33614bc7 100644 --- a/lib/utils/string.ex +++ b/lib/utils/string.ex @@ -12,14 +12,14 @@ defmodule Utils.String do @doc """ Converts a module name to an HTML selector format. - The module name is expected to be in the form of a module atom (e.g., `VyasaWeb.Content.ReadingContent`). + The module name is expected to be in the form of a module atom (e.g., `VyasaWeb.Context.Read`). The function extracts the last part of the module name and checks if it is in PascalCase. If valid, it converts the name to kebab-case format. ## Examples - iex> VyasaWeb.Utils.module_to_selector(VyasaWeb.Content.ReadingContent) - "reading-content" + iex> VyasaWeb.Utils.module_to_selector(VyasaWeb.Context.Read) + "read-context" iex> VyasaWeb.Utils.module_to_selector(VyasaWeb.Content.InvalidName) ** (ArgumentError) Last element of the module name must be in PascalCase diff --git a/lib/vyasa/display/user_mode.ex b/lib/vyasa/display/user_mode.ex index edfc3720..3f488a64 100644 --- a/lib/vyasa/display/user_mode.ex +++ b/lib/vyasa/display/user_mode.ex @@ -50,7 +50,7 @@ defmodule Vyasa.Display.UserMode do mode_icon_name: "hero-book-open", action_bar_component: VyasaWeb.MediaLive.MediaBridge, control_panel_component: VyasaWeb.ControlPanel, - mode_context_component: VyasaWeb.Content.ReadingContent, + mode_context_component: VyasaWeb.Context.Read, quick_actions: @quick_actions, control_panel_modes: ["discuss"], mode_actions: @mode_actions, @@ -64,7 +64,7 @@ defmodule Vyasa.Display.UserMode do mode_icon_name: "hero-chat-bubble-left-right", action_bar_component: VyasaWeb.MediaLive.MediaBridge, control_panel_component: VyasaWeb.ControlPanel, - mode_context_component: VyasaWeb.Content.ReadingContent, + mode_context_component: VyasaWeb.Context.Read, quick_actions: @quick_actions, control_panel_modes: ["read"], mode_actions: @mode_actions, diff --git a/lib/vyasa_web/components/source_content/reading_content.ex b/lib/vyasa_web/components/contexts/read.ex similarity index 89% rename from lib/vyasa_web/components/source_content/reading_content.ex rename to lib/vyasa_web/components/contexts/read.ex index 77d0ef05..894c65c3 100644 --- a/lib/vyasa_web/components/source_content/reading_content.ex +++ b/lib/vyasa_web/components/contexts/read.ex @@ -1,7 +1,6 @@ -defmodule VyasaWeb.Content.ReadingContent do +defmodule VyasaWeb.Context.Read do @moduledoc """ - Reading content shall be a slottable component that - handles what content to display when in reading mode. + The Read Context defines state handling related to the "Read" user mode. """ use VyasaWeb, :live_component @@ -28,7 +27,7 @@ defmodule VyasaWeb.Content.ReadingContent do params, socket ) do - IO.inspect(params, label: "TRACE: params passed to ReadingContent") + IO.inspect(params, label: "TRACE: params passed to ReadContext") { :ok, @@ -43,7 +42,7 @@ defmodule VyasaWeb.Content.ReadingContent do @impl true # received updates from parent liveview when a handshake is init with sesion, does a pub for the voice to use def update( - %{id: "reading-content"} = _props, + %{id: "read"} = _props, %{ assigns: %{ session: %{id: sess_id}, @@ -87,66 +86,60 @@ defmodule VyasaWeb.Content.ReadingContent do }) end - defp apply_action( - %Socket{} = socket, - :show_chapters, - %{"source_title" => source_title} = - params - ) do + %Socket{} = socket, + :show_chapters, + %{"source_title" => source_title} = + params + ) do IO.inspect(:show_chapters, label: "TRACE: apply action DM action show_chapters:") IO.inspect(params, label: "TRACE: apply action DM params:") IO.inspect(source_title, label: "TRACE: apply action DM params source_title:") with %Source{id: sid} = source <- Written.get_source_by_title(source_title), # when is more than 1 chapter - [%Chapter{} | [%Chapter{} | _]] = chapters <- Written.list_chapters_by_source(sid, @default_lang) do + [%Chapter{} | [%Chapter{} | _]] = chapters <- + Written.list_chapters_by_source(sid, @default_lang) do socket |> assign(:content_action, :show_chapters) |> assign(:page_title, to_title_case(source.title)) |> assign(:source, source) |> assign(:meta, %{ - title: to_title_case(source.title), - description: "Explore the #{to_title_case(source.title)}", - type: "website", - image: url(~p"/og/#{VyasaWeb.OgImageController.get_by_binding(%{source: source})}"), - url: url(socket, ~p"/explore/#{source.title}") - }) - |> maybe_stream_configure(:chapters, dom_id: &"Chapter-#{&1.no}") - |> stream(:chapters, chapters |> Enum.sort_by(fn chap -> chap.no end)) - + title: to_title_case(source.title), + description: "Explore the #{to_title_case(source.title)}", + type: "website", + image: url(~p"/og/#{VyasaWeb.OgImageController.get_by_binding(%{source: source})}"), + url: url(socket, ~p"/explore/#{source.title}") + }) + |> maybe_stream_configure(:chapters, dom_id: &"Chapter-#{&1.no}") + |> stream(:chapters, chapters |> Enum.sort_by(fn chap -> chap.no end)) else [%Chapter{} = chapter | _] -> - send(self(), {"helm", ~p"/explore/#{source_title}/#{chapter.no}/"}) - socket + socket _ -> raise VyasaWeb.ErrorHTML.FourOFour, message: "No Chapters here yet" end - end - defp apply_action( %Socket{} = socket, :show_verses, %{"source_title" => source_title, "chap_no" => chap_no} ) do - with %Source{id: sid} = source <- Written.get_source_by_title(source_title), %{verses: verses, translations: [ts | _], title: chap_title, body: chap_body} = chap <- Written.get_chapter(chap_no, sid, @default_lang) do fmted_title = to_title_case(source.title) - socket |> assign( :kv_verses, # creates a map of verse_id_to_verses - Enum.into(verses, %{},&({&1.id, &1}) - )) + Enum.into(verses, %{}, &{&1.id, &1}) + ) |> assign(:marks, [%Mark{state: :draft, order: 0}]) |> sync_session() |> assign(:content_action, :show_verses) @@ -210,9 +203,11 @@ defmodule VyasaWeb.Content.ReadingContent do socket end - defp sync_session(%Socket{assigns: %{session: %{id: sess_id}}} = socket) when is_binary(sess_id) do + defp sync_session(%Socket{assigns: %{session: %{id: sess_id}}} = socket) + when is_binary(sess_id) do Vyasa.PubSub.subscribe("written:session:" <> sess_id) Vyasa.PubSub.publish(:init, :written_handshake, "media:session:" <> sess_id) + socket |> sync_draft_reflector() end @@ -422,8 +417,9 @@ defmodule VyasaWeb.Content.ReadingContent do def render(assigns) do ~H"""
- Hello world, i'm the ReadingContent
- Session: <%= @session && @session.name %> Sangh: <%= @session && @session.sangh && @session.sangh.id %>
+ Hello world, i'm the ReadContext
+ Session: <%= @session && @session.name %> Sangh: <%= @session && @session.sangh && + @session.sangh.id %>
<%= @user_mode.mode_context_component %> <%= @user_mode.mode_context_component_selector %> <.button phx-click="foo" phx-target={@myself}> @@ -490,9 +486,11 @@ defmodule VyasaWeb.Content.ReadingContent do # Helper function that syncs and mutates Draft Reflector # Helper function that syncs and mutates Draft Reflector - defp mutate_draft_reflector(%{assigns: %{draft_reflector: %Vyasa.Sangh.Comment{} = dt, marks: marks}} = socket) do - + defp mutate_draft_reflector( + %{assigns: %{draft_reflector: %Vyasa.Sangh.Comment{} = dt, marks: marks}} = socket + ) do {:ok, com} = Vyasa.Sangh.update_comment(dt, %{marks: marks}) + socket |> assign(:draft_reflector, com) end @@ -500,8 +498,8 @@ defmodule VyasaWeb.Content.ReadingContent do # when session hasnt been initialised defp mutate_draft_reflector(socket) do socket - end + # currently naive hd lookup can be filter based on active toggle, # tree like comments can be used to store nested collapsible topics (personal mark collection e.g.) # currently marks merged in and swapped out probably can be singular data structure @@ -509,19 +507,28 @@ defmodule VyasaWeb.Content.ReadingContent do # if sangh_id is active open defp sync_draft_reflector(%{assigns: %{session: %{sangh: %{id: sangh_id}}}} = socket) do case Vyasa.Sangh.get_comments_by_session(sangh_id, %{traits: ["draft"]}) do - [%Vyasa.Sangh.Comment{marks: [ _ | _] = marks} = dt | _ ] -> + [%Vyasa.Sangh.Comment{marks: [_ | _] = marks} = dt | _] -> IO.inspect(marks, label: "is this triggering") + socket |> assign(draft_reflector: dt) |> assign(marks: marks) - [%Vyasa.Sangh.Comment{} = dt | _ ] -> + + [%Vyasa.Sangh.Comment{} = dt | _] -> socket |> assign(draft_reflector: dt) + _ -> - {:ok, com} = Vyasa.Sangh.create_comment(%{id: Ecto.UUID.generate(), session_id: sangh_id, traits: ["draft"]}) + {:ok, com} = + Vyasa.Sangh.create_comment(%{ + id: Ecto.UUID.generate(), + session_id: sangh_id, + traits: ["draft"] + }) + socket |> assign(draft_reflector: com) - end + end end defp sync_draft_reflector(%{assigns: %{session: _}} = socket) do diff --git a/lib/vyasa_web/components/source_content/chapters.ex b/lib/vyasa_web/components/contexts/read/chapters.ex similarity index 95% rename from lib/vyasa_web/components/source_content/chapters.ex rename to lib/vyasa_web/components/contexts/read/chapters.ex index 69fedbda..2682fe65 100644 --- a/lib/vyasa_web/components/source_content/chapters.ex +++ b/lib/vyasa_web/components/contexts/read/chapters.ex @@ -61,7 +61,7 @@ defmodule VyasaWeb.Content.Chapters do # IO.inspect(payload) # {:noreply, socket} # end - # TODO: consider if it's possible to shift this to the reading_content livecomponent + # TODO: consider if it's possible to shift this to the read-context livecomponent @impl true def handle_event("navigate_to_chapter", %{"target" => target} = _payload, socket) do IO.inspect(target, label: "TRACE: push patch to the following target by @myself:") diff --git a/lib/vyasa_web/components/source_content/sources.ex b/lib/vyasa_web/components/contexts/read/sources.ex similarity index 100% rename from lib/vyasa_web/components/source_content/sources.ex rename to lib/vyasa_web/components/contexts/read/sources.ex diff --git a/lib/vyasa_web/components/source_content/verse_matrix.ex b/lib/vyasa_web/components/contexts/read/verse_matrix.ex similarity index 100% rename from lib/vyasa_web/components/source_content/verse_matrix.ex rename to lib/vyasa_web/components/contexts/read/verse_matrix.ex diff --git a/lib/vyasa_web/components/source_content/verses.ex b/lib/vyasa_web/components/contexts/read/verses.ex similarity index 100% rename from lib/vyasa_web/components/source_content/verses.ex rename to lib/vyasa_web/components/contexts/read/verses.ex diff --git a/lib/vyasa_web/live/display_manager/display_live.ex b/lib/vyasa_web/live/display_manager/display_live.ex index 927e3761..b38bbc3d 100644 --- a/lib/vyasa_web/live/display_manager/display_live.ex +++ b/lib/vyasa_web/live/display_manager/display_live.ex @@ -38,16 +38,21 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do } end - defp sync_session(%{assigns: %{session: %Session{id: id, sangh: %{id: _sangh_id}} = sess}} = socket) when is_binary(id) do + defp sync_session( + %{assigns: %{session: %Session{id: id, sangh: %{id: _sangh_id}} = sess}} = socket + ) + when is_binary(id) do # currently needs name prerequisite to save socket |> push_event("initSession", sess) end - defp sync_session(%{assigns: %{session: %Session{id: id} = sess}} = socket) when is_binary(id) do + defp sync_session(%{assigns: %{session: %Session{id: id} = sess}} = socket) + when is_binary(id) do # initialises sangh if uninitiated (didnt init at Vyasa.Session) {:ok, sangh} = Sangh.create_session() sangh_sess = %{sess | sangh: sangh} + socket |> assign(session: sangh_sess) |> push_event("initSession", sangh_sess) @@ -166,15 +171,14 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do } } = socket ) do - send_update(component, id: selector) {:noreply, socket} end def handle_info({"helm", dest}, socket) do - {:noreply, socket - |> push_patch([to: dest, replace: true]) - } + {:noreply, + socket + |> push_patch(to: dest, replace: true)} end @impl true From ce82998d56d1dcc0ee05d016334593b5d6428bd0 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Mon, 23 Sep 2024 17:23:15 +0800 Subject: [PATCH 123/130] DisplayManager -> ModeManager --- lib/vyasa_web/components/layouts/app.html.heex | 2 +- .../display_live.ex => mode/manager_live.ex} | 4 ++-- .../display_live.html.heex => mode/manager_live.html.heex} | 0 lib/vyasa_web/router.ex | 7 ++++--- 4 files changed, 7 insertions(+), 6 deletions(-) rename lib/vyasa_web/live/{display_manager/display_live.ex => mode/manager_live.ex} (98%) rename lib/vyasa_web/live/{display_manager/display_live.html.heex => mode/manager_live.html.heex} (100%) diff --git a/lib/vyasa_web/components/layouts/app.html.heex b/lib/vyasa_web/components/layouts/app.html.heex index d18d9a50..76979145 100644 --- a/lib/vyasa_web/components/layouts/app.html.heex +++ b/lib/vyasa_web/components/layouts/app.html.heex @@ -23,6 +23,6 @@ <.flash_group flash={@flash} />
- <%= live_render(@socket, VyasaWeb.DisplayManager.DisplayLive, id: "DisplayManager", session: @session, sticky: true) %> + <%= live_render(@socket, VyasaWeb.Mode.ManagerLive, id: "ModeManager", session: @session, sticky: true) %> <%= @inner_content %> diff --git a/lib/vyasa_web/live/display_manager/display_live.ex b/lib/vyasa_web/live/mode/manager_live.ex similarity index 98% rename from lib/vyasa_web/live/display_manager/display_live.ex rename to lib/vyasa_web/live/mode/manager_live.ex index b38bbc3d..96e3b823 100644 --- a/lib/vyasa_web/live/display_manager/display_live.ex +++ b/lib/vyasa_web/live/mode/manager_live.ex @@ -1,4 +1,4 @@ -defmodule VyasaWeb.DisplayManager.DisplayLive do +defmodule VyasaWeb.Mode.ManagerLive do @moduledoc """ Testing out nested live_views """ @@ -197,7 +197,7 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do @impl true def handle_info(msg, socket) do - IO.inspect(msg, label: "[fallback clause] unexpected message in DisplayManager") + IO.inspect(msg, label: "[fallback clause] unexpected message in ModeManager") {:noreply, socket} end diff --git a/lib/vyasa_web/live/display_manager/display_live.html.heex b/lib/vyasa_web/live/mode/manager_live.html.heex similarity index 100% rename from lib/vyasa_web/live/display_manager/display_live.html.heex rename to lib/vyasa_web/live/mode/manager_live.html.heex diff --git a/lib/vyasa_web/router.ex b/lib/vyasa_web/router.ex index c7980b4f..f5c5f96a 100644 --- a/lib/vyasa_web/router.ex +++ b/lib/vyasa_web/router.ex @@ -38,9 +38,10 @@ 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 - live "/explore/", DisplayManager.DisplayLive, :show_sources - live "/explore/:source_title/", DisplayManager.DisplayLive, :show_chapters - live "/explore/:source_title/:chap_no", DisplayManager.DisplayLive, :show_verses + live "/explore/", Mode.ManagerLive, :show_sources + live "/explore/:source_title/", Mode.ManagerLive, :show_chapters + + live "/explore/:source_title/:chap_no", Mode.ManagerLive, :show_verses # live "/explore/:source_title/:chap_no/:verse_no", DisplayManager.DisplayLive, :show_verse end From 6a7f10e04d27a22654ac54a7200d668af579d6cd Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Mon, 23 Sep 2024 17:45:24 +0800 Subject: [PATCH 124/130] Rename Mode.ManagerLive -> ModeLive.Mediator --- lib/vyasa_web/components/layouts/app.html.heex | 2 +- .../live/{mode/manager_live.ex => mode_live/mediator.ex} | 4 ++-- .../manager_live.html.heex => mode_live/mediator.html.heex} | 0 lib/vyasa_web/router.ex | 6 +++--- 4 files changed, 6 insertions(+), 6 deletions(-) rename lib/vyasa_web/live/{mode/manager_live.ex => mode_live/mediator.ex} (98%) rename lib/vyasa_web/live/{mode/manager_live.html.heex => mode_live/mediator.html.heex} (100%) diff --git a/lib/vyasa_web/components/layouts/app.html.heex b/lib/vyasa_web/components/layouts/app.html.heex index 76979145..6c22cdcc 100644 --- a/lib/vyasa_web/components/layouts/app.html.heex +++ b/lib/vyasa_web/components/layouts/app.html.heex @@ -23,6 +23,6 @@ <.flash_group flash={@flash} />
- <%= live_render(@socket, VyasaWeb.Mode.ManagerLive, id: "ModeManager", session: @session, sticky: true) %> + <%= live_render(@socket, VyasaWeb.ModeLive.Mediator, id: "Mediator", session: @session, sticky: true) %> <%= @inner_content %> diff --git a/lib/vyasa_web/live/mode/manager_live.ex b/lib/vyasa_web/live/mode_live/mediator.ex similarity index 98% rename from lib/vyasa_web/live/mode/manager_live.ex rename to lib/vyasa_web/live/mode_live/mediator.ex index 96e3b823..3497e33a 100644 --- a/lib/vyasa_web/live/mode/manager_live.ex +++ b/lib/vyasa_web/live/mode_live/mediator.ex @@ -1,4 +1,4 @@ -defmodule VyasaWeb.Mode.ManagerLive do +defmodule VyasaWeb.ModeLive.Mediator do @moduledoc """ Testing out nested live_views """ @@ -197,7 +197,7 @@ defmodule VyasaWeb.Mode.ManagerLive do @impl true def handle_info(msg, socket) do - IO.inspect(msg, label: "[fallback clause] unexpected message in ModeManager") + IO.inspect(msg, label: "[fallback clause] unexpected message in ModeLive.Mediator") {:noreply, socket} end diff --git a/lib/vyasa_web/live/mode/manager_live.html.heex b/lib/vyasa_web/live/mode_live/mediator.html.heex similarity index 100% rename from lib/vyasa_web/live/mode/manager_live.html.heex rename to lib/vyasa_web/live/mode_live/mediator.html.heex diff --git a/lib/vyasa_web/router.ex b/lib/vyasa_web/router.ex index f5c5f96a..97c2e642 100644 --- a/lib/vyasa_web/router.ex +++ b/lib/vyasa_web/router.ex @@ -38,10 +38,10 @@ 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 - live "/explore/", Mode.ManagerLive, :show_sources - live "/explore/:source_title/", Mode.ManagerLive, :show_chapters + live "/explore/", ModeLive.Mediator, :show_sources + live "/explore/:source_title/", ModeLive.Mediator, :show_chapters - live "/explore/:source_title/:chap_no", Mode.ManagerLive, :show_verses + live "/explore/:source_title/:chap_no", ModeLive.Mediator, :show_verses # live "/explore/:source_title/:chap_no/:verse_no", DisplayManager.DisplayLive, :show_verse end From 778c718684ed48b41cdb1ef307d3f77b5d60ecec Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Mon, 23 Sep 2024 18:23:33 +0800 Subject: [PATCH 125/130] Shift all web modules to VyasaWeb --- assets/js/hooks/hoverune.js | 1 - docs/ritesh_roughwork.livemd | 4 ++-- lib/vyasa_web/components/action_bar.ex | 4 ++-- lib/vyasa_web/components/contexts/read.ex | 2 +- lib/vyasa_web/components/control_panel.ex | 4 ++-- lib/vyasa_web/components/hoverune.ex | 4 ++-- lib/vyasa_web/components/user_mode_components.ex | 5 +++-- lib/vyasa_web/live/mode_live/mediator.ex | 8 ++++++-- .../live/mode_live}/ui_state.ex | 4 ++-- .../live/mode_live}/user_mode.ex | 6 +++--- lib/vyasa_web/router.ex | 16 ---------------- 11 files changed, 23 insertions(+), 35 deletions(-) rename lib/{vyasa/display => vyasa_web/live/mode_live}/ui_state.ex (96%) rename lib/{vyasa/display => vyasa_web/live/mode_live}/user_mode.ex (96%) diff --git a/assets/js/hooks/hoverune.js b/assets/js/hooks/hoverune.js index b8588a05..21e7a411 100644 --- a/assets/js/hooks/hoverune.js +++ b/assets/js/hooks/hoverune.js @@ -90,7 +90,6 @@ export default HoveRune = { target: `#${this.eventTarget}`, payload: { binding: binding }, }); - // TODO: rename to targetId this.pushEventTo(`#${this.eventTarget}`, "bindHoveRune", { binding: binding, }); diff --git a/docs/ritesh_roughwork.livemd b/docs/ritesh_roughwork.livemd index 3c8b66d9..669b8482 100644 --- a/docs/ritesh_roughwork.livemd +++ b/docs/ritesh_roughwork.livemd @@ -26,7 +26,7 @@ loaded_voice = Vyasa.Repo.get(Vyasa.Medium.Voice, voice_id) loaded_voice.events -module = VyasaWeb.Content.ReadingContent +module = VyasaWeb.Context.Read module |> Atom.to_string() # Convert the module atom to a string |> String.split(".") # Split the string by "." @@ -36,7 +36,7 @@ module = VyasaWeb.Content.ReadingContent ``` ```elixir -alias Vyasa.Display.{UiState} +alias VyasaWeb.ModeLive.{UiState} mod = UiState mod.__info__(:functions) diff --git a/lib/vyasa_web/components/action_bar.ex b/lib/vyasa_web/components/action_bar.ex index 71b18b6b..8b8e194b 100644 --- a/lib/vyasa_web/components/action_bar.ex +++ b/lib/vyasa_web/components/action_bar.ex @@ -17,8 +17,8 @@ defmodule VyasaWeb.ActionBar do <> "::" <> """ use VyasaWeb, :live_component - alias Vyasa.Display.UserMode - import VyasaWeb.Display.UserMode.Components + alias VyasaWeb.ModeLive.UserMode + import VyasaWeb.UserMode.Components attr :mode, UserMode, required: true @impl true diff --git a/lib/vyasa_web/components/contexts/read.ex b/lib/vyasa_web/components/contexts/read.ex index 894c65c3..6c2be7bb 100644 --- a/lib/vyasa_web/components/contexts/read.ex +++ b/lib/vyasa_web/components/contexts/read.ex @@ -6,7 +6,7 @@ defmodule VyasaWeb.Context.Read do @default_lang "en" @default_voice_lang "sa" - alias Vyasa.Display.{UserMode} + alias VyasaWeb.ModeLive.{UserMode} alias Vyasa.{Written, Draft} alias Vyasa.Medium alias Vyasa.Medium.{Voice} diff --git a/lib/vyasa_web/components/control_panel.ex b/lib/vyasa_web/components/control_panel.ex index f9392920..a4f56bd9 100644 --- a/lib/vyasa_web/components/control_panel.ex +++ b/lib/vyasa_web/components/control_panel.ex @@ -6,10 +6,10 @@ defmodule VyasaWeb.ControlPanel do use VyasaWeb, :live_component use VyasaWeb, :html alias Phoenix.LiveView.Socket - alias Vyasa.Display.UserMode + alias VyasaWeb.ModeLive.UserMode # alias VyasaWeb.Display.UserMode.Components - import VyasaWeb.Display.UserMode.Components + import VyasaWeb.UserMode.Components alias VyasaWeb.HoveRune def mount(_, _, socket) do diff --git a/lib/vyasa_web/components/hoverune.ex b/lib/vyasa_web/components/hoverune.ex index 7b7de742..d6001a17 100644 --- a/lib/vyasa_web/components/hoverune.ex +++ b/lib/vyasa_web/components/hoverune.ex @@ -7,8 +7,8 @@ defmodule VyasaWeb.HoveRune do and we shall render those buttons using approate rendering functions defined elsewhere. """ use VyasaWeb, :live_component - alias Vyasa.Display.UserMode - import VyasaWeb.Display.UserMode.Components + alias VyasaWeb.ModeLive.UserMode + import VyasaWeb.UserMode.Components attr :user_mode, UserMode, required: true @impl true diff --git a/lib/vyasa_web/components/user_mode_components.ex b/lib/vyasa_web/components/user_mode_components.ex index f4176fc6..cc5f6499 100644 --- a/lib/vyasa_web/components/user_mode_components.ex +++ b/lib/vyasa_web/components/user_mode_components.ex @@ -1,6 +1,7 @@ -defmodule VyasaWeb.Display.UserMode.Components do +# TODO: rename +defmodule VyasaWeb.UserMode.Components do use VyasaWeb, :html - alias Vyasa.Display.UserMode + alias VyasaWeb.ModeLive.UserMode attr :action_event, :string, required: true attr :action_icon_name, :string, required: true diff --git a/lib/vyasa_web/live/mode_live/mediator.ex b/lib/vyasa_web/live/mode_live/mediator.ex index 3497e33a..206c2a18 100644 --- a/lib/vyasa_web/live/mode_live/mediator.ex +++ b/lib/vyasa_web/live/mode_live/mediator.ex @@ -1,10 +1,14 @@ defmodule VyasaWeb.ModeLive.Mediator do @moduledoc """ - Testing out nested live_views + In relation to the behavioural pattern of a Mediator (ref: https://refactoring.guru/design-patterns/mediator), + This mediator is intended to restrict what the mode-specific components can do. + + It shall maintain state that is mode-agnostic, such as the current mode, url_params and ui_state + and any mode-specific actions shall be deferred to the modules that are slotted in (and defined statically at the user_mode module). """ use VyasaWeb, :live_view on_mount VyasaWeb.Hook.UserAgentHook - alias Vyasa.Display.{UserMode, UiState} + alias VyasaWeb.ModeLive.{UserMode, UiState} alias Phoenix.LiveView.Socket alias VyasaWeb.Session alias Vyasa.Sangh diff --git a/lib/vyasa/display/ui_state.ex b/lib/vyasa_web/live/mode_live/ui_state.ex similarity index 96% rename from lib/vyasa/display/ui_state.ex rename to lib/vyasa_web/live/mode_live/ui_state.ex index cb7a80e9..d660f76c 100644 --- a/lib/vyasa/display/ui_state.ex +++ b/lib/vyasa_web/live/mode_live/ui_state.ex @@ -1,4 +1,4 @@ -defmodule Vyasa.Display.UiState do +defmodule VyasaWeb.ModeLive.UiState do @moduledoc """ UiState defines booleans and other UI-related aspects that need to be tracked. This shall only be a struct definition. If mediating state transitions becomes complex enough, then we shall @@ -9,7 +9,7 @@ defmodule Vyasa.Display.UiState do 2. allow UserModes to be defined with an initial UI state in mind """ alias Phoenix.LiveView.Socket - alias Vyasa.Display.UiState + alias VyasaWeb.ModeLive.UiState import Phoenix.Component, only: [assign: 2] diff --git a/lib/vyasa/display/user_mode.ex b/lib/vyasa_web/live/mode_live/user_mode.ex similarity index 96% rename from lib/vyasa/display/user_mode.ex rename to lib/vyasa_web/live/mode_live/user_mode.ex index 3f488a64..93a8e2e7 100644 --- a/lib/vyasa/display/user_mode.ex +++ b/lib/vyasa_web/live/mode_live/user_mode.ex @@ -1,4 +1,4 @@ -defmodule Vyasa.Display.UserMode do +defmodule VyasaWeb.ModeLive.UserMode do @moduledoc """ The UserMode struct is a way of representing user-modes and is intended to be used as a config. @@ -12,7 +12,7 @@ defmodule Vyasa.Display.UserMode do 1. read 3. discuss """ - alias Vyasa.Display.{UserMode, UiState} + alias VyasaWeb.ModeLive.{UserMode, UiState} @component_slots [:action_bar_component, :control_panel_component, :mode_context_component] @default_slot_selector "" @@ -115,7 +115,7 @@ defmodule Vyasa.Display.UserMode do ...> control_panel_component: nil, ...> mode_context_component: MyApp.ContextComponent ...> } - iex> Vyasa.Display.UserMode.maybe_hydrate_component_selectors(mode) + iex> VyasaWeb.ModeLive.UserMode.maybe_hydrate_component_selectors(mode) %UserMode{ action_bar_component: MyApp.ActionBar, action_bar_component_selector: "action-bar", diff --git a/lib/vyasa_web/router.ex b/lib/vyasa_web/router.ex index 97c2e642..cf2e0f8c 100644 --- a/lib/vyasa_web/router.ex +++ b/lib/vyasa_web/router.ex @@ -22,27 +22,11 @@ defmodule VyasaWeb.Router do get "/", PageController, :home - # live_session :gen_anon_session, - # on_mount: [{VyasaWeb.Session, :anon}] do - # live "/explore/", SourceLive.Index, :index - # live "/explore/:source_title/", SourceLive.Show, :show - # # live "/explore/:source_title/:chap_no", SourceLive.Chapter.Index, :index - # live "/explore/:source_title/:chap_no", SourceLive.Chapter.Index, :index - # live "/explore/:source_title/:chap_no/:verse_no", SourceLive.Chapter.ShowVerse, :show - # end - live_session :gen_sangh_session, on_mount: [{VyasaWeb.Session, :sangh}] do - # live "/explore/", SourceLive.Index, :index - # live "/explore/:source_title/", SourceLive.Show, :show - # live "/explore/:source_title/:chap_no", SourceLive.Chapter.Index, :index - # live "/explore/:source_title/:chap_no/:verse_no", SourceLive.Chapter.ShowVerse, :show - live "/explore/", ModeLive.Mediator, :show_sources live "/explore/:source_title/", ModeLive.Mediator, :show_chapters - live "/explore/:source_title/:chap_no", ModeLive.Mediator, :show_verses - # live "/explore/:source_title/:chap_no/:verse_no", DisplayManager.DisplayLive, :show_verse end live_admin "/admin" do From e1f622c474b3e831dcc91337adad18d7d6be2a34 Mon Sep 17 00:00:00 2001 From: ks0m1c_dharma Date: Mon, 23 Sep 2024 19:55:01 +0800 Subject: [PATCH 126/130] guard sangh_id existence on mount --- lib/vyasa/sangh.ex | 1 + lib/vyasa_web/live/display_manager/display_live.ex | 2 +- lib/vyasa_web/session.ex | 4 ++-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/vyasa/sangh.ex b/lib/vyasa/sangh.ex index d042f98c..8d0f5c40 100644 --- a/lib/vyasa/sangh.ex +++ b/lib/vyasa/sangh.ex @@ -312,6 +312,7 @@ defmodule Vyasa.Sangh do """ def get_session!(id), do: Repo.get!(Session, id) + def get_session(id), do: Repo.get(Session, id) @doc """ Creates a session. diff --git a/lib/vyasa_web/live/display_manager/display_live.ex b/lib/vyasa_web/live/display_manager/display_live.ex index 927e3761..a6632301 100644 --- a/lib/vyasa_web/live/display_manager/display_live.ex +++ b/lib/vyasa_web/live/display_manager/display_live.ex @@ -38,7 +38,7 @@ defmodule VyasaWeb.DisplayManager.DisplayLive do } end - defp sync_session(%{assigns: %{session: %Session{id: id, sangh: %{id: _sangh_id}} = sess}} = socket) when is_binary(id) do + defp sync_session(%{assigns: %{session: %Session{id: id, sangh: %{id: sangh_id}} = sess}} = socket) when is_binary(id) and is_binary(sangh_id) do # currently needs name prerequisite to save socket |> push_event("initSession", sess) diff --git a/lib/vyasa_web/session.ex b/lib/vyasa_web/session.ex index 75f977e3..8bc282cc 100644 --- a/lib/vyasa_web/session.ex +++ b/lib/vyasa_web/session.ex @@ -34,7 +34,7 @@ defmodule VyasaWeb.Session do atomised_sess = for {key, val} <- sess, into: %{} do hydrate_session(key, val) end - %{struct(%__MODULE__{}, atomised_sess ) | sangh: Vyasa.Sangh.get_session!(s_id)} + %{struct(%__MODULE__{}, atomised_sess ) | sangh: Vyasa.Sangh.get_session(s_id)} end # careful of client and server state race. id here is not SOT @@ -51,7 +51,7 @@ defmodule VyasaWeb.Session do defp hydrate_session("sangh", %{"id" => s_id}) do - {:sangh, Vyasa.Sangh.get_session!(s_id)} + {:sangh, Vyasa.Sangh.get_session(s_id)} end defp hydrate_session(key, val), do: {String.to_existing_atom(key), val} From f024f7fa18e39d456f339c514c399560716d0adc Mon Sep 17 00:00:00 2001 From: ks0m1c_dharma Date: Mon, 23 Sep 2024 20:11:45 +0800 Subject: [PATCH 127/130] Sheafu is up --- assets/js/hooks/index.js | 2 - assets/js/hooks/marginote.js | 35 ---- lib/vyasa/adapters/binding.ex | 6 +- lib/vyasa/sangh.ex | 164 +++++++++--------- lib/vyasa/sangh/comments.ex | 30 ++-- lib/vyasa/sangh/mark.ex | 6 +- lib/vyasa/sangh/session.ex | 4 +- lib/vyasa/written/verse.ex | 2 +- lib/vyasa_web/components/contexts/read.ex | 14 +- .../components/contexts/read/verse_matrix.ex | 28 +-- lib/vyasa_web/components/marginote.ex | 99 ----------- .../20240151122233_create_sangh_sessions.exs | 12 +- .../20240831122233_create_marks.exs | 4 +- 13 files changed, 135 insertions(+), 271 deletions(-) delete mode 100644 assets/js/hooks/marginote.js delete mode 100644 lib/vyasa_web/components/marginote.ex diff --git a/assets/js/hooks/index.js b/assets/js/hooks/index.js index 59716aab..58b507fd 100644 --- a/assets/js/hooks/index.js +++ b/assets/js/hooks/index.js @@ -9,7 +9,6 @@ import AudioPlayer from "./audio_player.js"; import ProgressBar from "./progress_bar.js"; import Floater from "./floater.js"; import ApplyModal from "./apply_modal.js"; -import MargiNote from "./marginote.js"; import HoveRune from "./hoverune.js"; import Scrolling from "./scrolling.js"; import ButtonClickRelayer from "./button_click_relayer.js"; @@ -25,7 +24,6 @@ let Hooks = { ProgressBar, Floater, ApplyModal, - MargiNote, HoveRune, Scrolling, ButtonClickRelayer, diff --git a/assets/js/hooks/marginote.js b/assets/js/hooks/marginote.js deleted file mode 100644 index 6e0e619c..00000000 --- a/assets/js/hooks/marginote.js +++ /dev/null @@ -1,35 +0,0 @@ -import { computePosition, offset, autoPlacement } from "floating-ui.dom.umd.min"; - -const findParents = (el, parents = []) => { - if (el && el.localName == "body") return parents - if (el && el.getAttribute("phx-hook") == "Marginote") return findParents(el.parentElement, parents.concat([el])) - if (!el) return parents - return findParents(el.parentElement, parents) -} - -export default MargiNote = { - func: 0, - mounted() { - const t = this.el - const marginoteParent = document.querySelector("[data-marginote='parent']") - t.addEventListener("click", ev => { - const selection = window.getSelection().toString() - - if (selection !== "") return - ev.stopPropagation() - - if (!marginoteParent) return - - const parents = findParents(t.parentElement, []).map(f => f.id.replace("marginote-id-", "")) - - - this.pushEvent("show-quoted-comment", {id: t.id, parents}, () => { - computePosition(this.el, marginoteParent, { - middleware: [offset(10), autoPlacement()], - }).then(({ x, y}) => { - this.pushEvent("adjust-marginote", {top: `${y}px`, left: `${x}px`}) - }) - }) - }) - }, -} diff --git a/lib/vyasa/adapters/binding.ex b/lib/vyasa/adapters/binding.ex index 1d203310..47c9dff0 100644 --- a/lib/vyasa/adapters/binding.ex +++ b/lib/vyasa/adapters/binding.ex @@ -7,7 +7,7 @@ defmodule Vyasa.Adapters.Binding do import Ecto.Changeset alias Vyasa.Written.{Source, Chapter, Verse, Translation} - alias Vyasa.Sangh.{Comment} + alias Vyasa.Sangh.{Sheaf} @primary_key {:id, Ecto.UUID, autogenerate: true} schema "bindings" do @@ -21,7 +21,7 @@ defmodule Vyasa.Adapters.Binding do belongs_to :chapter, Chapter, type: :integer, references: :no, foreign_key: :chapter_no belongs_to :source, Source, foreign_key: :source_id, type: :binary_id belongs_to :translation, Translation, foreign_key: :translation_id, type: :binary_id - belongs_to :comment, Comment, foreign_key: :comment_id, type: :binary_id + belongs_to :sheaf, Sheaf, foreign_key: :sheaf_id, type: :binary_id # window is essentially because bindings might only refer to a subset of a node # either by timestamping of events or through line no and character range @@ -110,7 +110,7 @@ defmodule Vyasa.Adapters.Binding do def field_lookup(%Chapter{}), do: :chapter_no def field_lookup(%Source{}), do: :source_id def field_lookup(%Translation{}), do: :translation_id - def field_lookup(%Comment{}), do: :comment_id + def field_lookup(%Sheaf{}), do: :sheaf_id def field_lookup(_), do: nil end diff --git a/lib/vyasa/sangh.ex b/lib/vyasa/sangh.ex index 8d0f5c40..aed6a3d1 100644 --- a/lib/vyasa/sangh.ex +++ b/lib/vyasa/sangh.ex @@ -6,77 +6,77 @@ defmodule Vyasa.Sangh do import Ecto.Query, warn: false import EctoLtree.Functions, only: [nlevel: 1] alias Vyasa.Repo - alias Vyasa.Sangh.Comment + alias Vyasa.Sangh.Sheaf @doc """ - Returns the list of comments within a specific session. + Returns the list of sheafs within a specific session. ## Examples - iex> list_comments_by_session() - [%Comment{}, ...] + iex> list_sheafs_by_session() + [%Sheaf{}, ...] """ - def list_comments_by_session(id) do - (from c in Comment, + def list_sheafs_by_session(id) do + (from c in Sheaf, where: c.session_id == ^id, select: c) |> Repo.all() end @doc """ - Creates a comment. + Creates a sheaf. ## Examples - iex> create_comment(%{field: new_value}) - {:ok, %Comment{}} + iex> create_sheaf(%{field: new_value}) + {:ok, %Sheaf{}} - iex> create_comment(%{field: bad_value}) + iex> create_sheaf(%{field: bad_value}) {:error, %Ecto.Changeset{}} """ - def create_comment(attrs \\ %{}) do - %Comment{} - |> Comment.changeset(attrs) + def create_sheaf(attrs \\ %{}) do + %Sheaf{} + |> Sheaf.changeset(attrs) |> Repo.insert() end @doc """ - Returns a single comment. + Returns a single sheaf. - Raises `Ecto.NoResultsError` if the Comment does not exist. + Raises `Ecto.NoResultsError` if the Sheaf does not exist. ## Examples - iex> get_comment!(123) - %Comment{} + iex> get_sheaf!(123) + %Sheaf{} - iex> get_comment!(456) + iex> get_sheaf!(456) ** (Ecto.NoResultsError) """ - def get_comment!(id), do: Repo.get!(Comment, id) + def get_sheaf!(id), do: Repo.get!(Sheaf, id) - def get_comment(id) do - (from c in Comment, + def get_sheaf(id) do + (from c in Sheaf, where: c.id == ^id, limit: 1) |> Repo.one() end - def get_descendents_comment(id) do + def get_descendents_sheaf(id) do query = - from c in Comment, + from c in Sheaf, as: :c, where: c.parent_id == ^id, order_by: [desc: c.inserted_at], inner_lateral_join: sc in subquery( - from sc in Comment, + from sc in Sheaf, where: sc.parent_id == parent_as(:c).id, select: %{count: count()} ), on: true, @@ -85,16 +85,16 @@ defmodule Vyasa.Sangh do end - def get_root_comments_by_comment(id) do + def get_root_sheafs_by_sheaf(id) do query = - from c in Comment, + from c in Sheaf, as: :c, - where: c.comment_id == ^id, + where: c.sheaf_id == ^id, where: nlevel(c.path) == 1, preload: [:initiator], order_by: [desc: c.inserted_at], inner_lateral_join: sc in subquery( - from sc in Comment, + from sc in Sheaf, where: sc.parent_id == parent_as(:c).id, select: %{count: count()} ), on: true, @@ -104,14 +104,14 @@ defmodule Vyasa.Sangh do end - def get_descendents_comment(id, page) do + def get_descendents_sheaf(id, page) do query = - from c in Comment, + from c in Sheaf, as: :c, where: c.parent_id == ^id, preload: [:initiator], inner_lateral_join: sc in subquery( - from sc in Comment, + from sc in Sheaf, select: %{count: count()} ), on: true, select_merge: %{child_count: sc.count} @@ -119,14 +119,14 @@ defmodule Vyasa.Sangh do Repo.Paginated.all(query, [page: page, asc: true]) end - def get_root_comments_by_session(id, page, sort_attribute \\ :inserted_at, limit \\ 12) do + def get_root_sheafs_by_session(id, page, sort_attribute \\ :inserted_at, limit \\ 12) do query = - from c in Comment, + from c in Sheaf, as: :c, where: c.session_id == ^id, where: nlevel(c.path) == 1, inner_lateral_join: sc in subquery( - from sc in Comment, + from sc in Sheaf, where: sc.parent_id == parent_as(:c).id, select: %{count: count()} ), on: true, @@ -135,8 +135,8 @@ defmodule Vyasa.Sangh do Repo.Paginated.all(query, page, sort_attribute, limit) end - def get_comments_by_session(id, %{traits: traits}) do - from(c in Comment, + def get_sheafs_by_session(id, %{traits: traits}) do + from(c in Sheaf, where: c.session_id == ^id and fragment("? @> ?", c.traits, ^traits), preload: [marks: [:binding]] ) @@ -144,35 +144,35 @@ defmodule Vyasa.Sangh do |> Repo.all() end - def get_comments_by_session(id) do - query = Comment + def get_sheafs_by_session(id) do + query = Sheaf |> where([c], c.session_id == ^id) |> order_by(desc: :inserted_at) Repo.all(query) end - def get_comment_count_by_session(id) do + def get_sheaf_count_by_session(id) do query = - Comment + Sheaf |> where([e], e.session_id == ^id) |> select([e], count(e)) Repo.one(query) end - # Gets child comments 1 level down only - def get_child_comments_by_session(id, path) do + # Gets child sheafs 1 level down only + def get_child_sheafs_by_session(id, path) do path = path <> ".*{1}" query = - from c in Comment, + from c in Sheaf, as: :c, where: c.session_id == ^id, where: fragment("? ~ ?", c.path, ^path), preload: [:initiator], inner_lateral_join: sc in subquery( - from sc in Comment, + from sc in Sheaf, where: sc.parent_id == parent_as(:c).id, select: %{count: count()} ), on: true, @@ -182,16 +182,16 @@ defmodule Vyasa.Sangh do end # Gets ancestors down up all levels only - # TODO: Get root comments together - def get_ancestor_comments_by_comment(comment_id, path) do + # TODO: Get root sheafs together + def get_ancestor_sheafs_by_sheaf(sheaf_id, path) do query = - from c in Comment, + from c in Sheaf, as: :c, - where: c.comment_id == ^comment_id, + where: c.sheaf_id == ^sheaf_id, where: fragment("? @> ?", c.path, ^path), preload: [:initiator], inner_lateral_join: sc in subquery( - from sc in Comment, + from sc in Sheaf, where: sc.parent_id == parent_as(:c).id, select: %{count: count()} ), on: true, @@ -201,84 +201,84 @@ defmodule Vyasa.Sangh do end # @doc """ - # Updates a comment. + # Updates a sheaf. # ## Examples - # iex> update_comment(comment, %{field: new_value}) - # {:ok, %Comment{}} + # iex> update_sheaf(sheaf, %{field: new_value}) + # {:ok, %Sheaf{}} - # iex> update_comment(comment, %{field: bad_value}) + # iex> update_sheaf(sheaf, %{field: bad_value}) # {:error, %Ecto.Changeset{}} # """ - def update_comment(%Comment{} = comment, attrs) do - comment - |> Comment.mutate_changeset(attrs) + def update_sheaf(%Sheaf{} = sheaf, attrs) do + sheaf + |> Sheaf.mutate_changeset(attrs) |> Repo.update() end # @doc """ - # Updates a comment. + # Updates a sheaf. # ## Examples - # iex> update_comment!(%{field: value}) - # %Comment{} + # iex> update_sheaf!(%{field: value}) + # %Sheaf{} # iex> Need to Catch error state # """ - def update_comment!(%Comment{} = comment, attrs) do - comment - |> Comment.mutate_changeset(attrs) + def update_sheaf!(%Sheaf{} = sheaf, attrs) do + sheaf + |> Sheaf.mutate_changeset(attrs) |> Repo.update!() end # @doc """ - # Deletes a comment. + # Deletes a sheaf. # ## Examples - # iex> delete_comment(comment) - # {:ok, %Comment{}} + # iex> delete_sheaf(sheaf) + # {:ok, %Sheaf{}} - # iex> delete_comment(comment) + # iex> delete_sheaf(sheaf) # {:error, %Ecto.Changeset{}} # """ - def delete_comment(%Comment{} = comment) do - Repo.delete(comment) + def delete_sheaf(%Sheaf{} = sheaf) do + Repo.delete(sheaf) end # @doc """ - # Returns an `%Ecto.Changeset{}` for tracking comment changes. + # Returns an `%Ecto.Changeset{}` for tracking sheaf changes. # ## Examples - # iex> change_comment(comment) - # %Ecto.Changeset{data: %Comment{}} + # iex> change_sheaf(sheaf) + # %Ecto.Changeset{data: %Sheaf{}} # """ - def change_comment(%Comment{} = comment, attrs \\ %{}) do - Comment.changeset(comment, attrs) + def change_sheaf(%Sheaf{} = sheaf, attrs \\ %{}) do + Sheaf.changeset(sheaf, attrs) end - def filter_root_comments_chrono(comments) do - comments + def filter_root_sheafs_chrono(sheafs) do + sheafs |> Enum.filter(&match?({{_}, _}, &1)) - |> sort_comments_chrono() + |> sort_sheafs_chrono() end - def filter_child_comments_chrono(comments, comment) do - comments - |> Enum.filter(fn i -> elem(i, 1).parent_id == elem(comment, 1).id end) - |> sort_comments_chrono() + def filter_child_sheafs_chrono(sheafs, sheaf) do + sheafs + |> Enum.filter(fn i -> elem(i, 1).parent_id == elem(sheaf, 1).id end) + |> sort_sheafs_chrono() end - defp sort_comments_chrono(comments) do - Enum.sort_by(comments, &elem(&1, 1).inserted_at, :desc) + defp sort_sheafs_chrono(sheafs) do + Enum.sort_by(sheafs, &elem(&1, 1).inserted_at, :desc) end diff --git a/lib/vyasa/sangh/comments.ex b/lib/vyasa/sangh/comments.ex index 686f844b..e786d56d 100644 --- a/lib/vyasa/sangh/comments.ex +++ b/lib/vyasa/sangh/comments.ex @@ -1,6 +1,6 @@ -defmodule Vyasa.Sangh.Comment do +defmodule Vyasa.Sangh.Sheaf do @moduledoc """ - Not your traditional comments, waypoints and containers for marks + Not your traditional sheafs, waypoints and containers for marks so that they can be referred to and moved around according to their context Can create a trail of marks and tied to session @@ -11,10 +11,10 @@ defmodule Vyasa.Sangh.Comment do use Ecto.Schema import Ecto.Changeset alias EctoLtree.LabelTree, as: Ltree - alias Vyasa.Sangh.{Comment, Session, Mark} + alias Vyasa.Sangh.{Sheaf, Session, Mark} @primary_key {:id, Ecto.UUID, autogenerate: false} - schema "comments" do + schema "sheafs" do field :body, :string field :active, :boolean, default: true #active in draft reflector field :path, Ltree @@ -23,40 +23,40 @@ defmodule Vyasa.Sangh.Comment do field :child_count, :integer, default: 0, virtual: true belongs_to :session, Session, references: :id, type: Ecto.UUID - belongs_to :parent, Comment, references: :id, type: Ecto.UUID + belongs_to :parent, Sheaf, references: :id, type: Ecto.UUID - has_many :marks, Mark, references: :id, foreign_key: :comment_id, on_replace: :delete_if_exists - #has_many :bindings, Binding, references: :id, foreign_key: :comment_bind_id, on_replace: :delete_if_exists + has_many :marks, Mark, references: :id, foreign_key: :sheaf_id, on_replace: :delete_if_exists + #has_many :bindings, Binding, references: :id, foreign_key: :sheaf_bind_id, on_replace: :delete_if_exists timestamps() end @doc false - def changeset(%Comment{} = comment, %{marks: [%Mark{} | _ ] = marks} = attrs) do - comment + def changeset(%Sheaf{} = sheaf, %{marks: [%Mark{} | _ ] = marks} = attrs) do + sheaf |> cast(attrs, [:id, :body, :active, :path, :session_id, :signature, :parent_id, :traits]) |> put_assoc(:marks, marks, with: &Mark.changeset/2) |> validate_required([:id, :session_id]) |> validate_include_subset(:traits, ["personal", "draft", "publish"]) end - def changeset(%Comment{} = comment, attrs) do - comment + def changeset(%Sheaf{} = sheaf, attrs) do + sheaf |> cast(attrs, [:id, :body, :active, :path, :session_id, :signature, :parent_id, :traits]) |> cast_assoc(:marks, with: &Mark.changeset/2) |> validate_required([:id, :session_id]) |> validate_include_subset(:traits, ["personal", "draft", "publish"]) end - def mutate_changeset(%Comment{} = comment, %{marks: [%Mark{} | _ ] = marks} = attrs) do - comment + def mutate_changeset(%Sheaf{} = sheaf, %{marks: [%Mark{} | _ ] = marks} = attrs) do + sheaf |> Vyasa.Repo.preload([:marks]) |> cast(attrs, [:id, :body, :active, :signature]) |> put_assoc(:marks, marks, with: &Mark.changeset/2) |> Map.put(:repo_opts, [on_conflict: {:replace_all_except, [:id]}, conflict_target: :id]) end - def mutate_changeset(%Comment{} = comment, attrs) do - comment + def mutate_changeset(%Sheaf{} = sheaf, attrs) do + sheaf |> cast(attrs, [:id, :body, :active]) |> Map.put(:repo_opts, [on_conflict: {:replace_all_except, [:id]}, conflict_target: :id]) end diff --git a/lib/vyasa/sangh/mark.ex b/lib/vyasa/sangh/mark.ex index c539de4e..e768647e 100644 --- a/lib/vyasa/sangh/mark.ex +++ b/lib/vyasa/sangh/mark.ex @@ -6,7 +6,7 @@ defmodule Vyasa.Sangh.Mark do use Ecto.Schema import Ecto.Changeset - alias Vyasa.Sangh.{Comment, Mark} + alias Vyasa.Sangh.{Sheaf, Mark} alias Vyasa.Adapters.Binding alias Utils.Time @@ -19,7 +19,7 @@ defmodule Vyasa.Sangh.Mark do field :state, Ecto.Enum, values: [:draft, :bookmark, :live] field :verse_id, :string, virtual: true - belongs_to :comment, Comment, foreign_key: :comment_id, type: :binary_id + belongs_to :sheaf, Sheaf, foreign_key: :sheaf_id, type: :binary_id belongs_to :binding, Binding, foreign_key: :binding_id, type: :binary_id timestamps() @@ -27,7 +27,7 @@ defmodule Vyasa.Sangh.Mark do def changeset(event, attrs) do event - |> cast(attrs, [:body, :order, :state, :comment_id, :binding_id]) + |> cast(attrs, [:body, :order, :state, :sheaf_id, :binding_id]) end def update_mark(%Mark{} = draft_mark, opts \\ []) do diff --git a/lib/vyasa/sangh/session.ex b/lib/vyasa/sangh/session.ex index b77789d6..1c0995ec 100644 --- a/lib/vyasa/sangh/session.ex +++ b/lib/vyasa/sangh/session.ex @@ -2,13 +2,13 @@ defmodule Vyasa.Sangh.Session do use Ecto.Schema import Ecto.Changeset - alias Vyasa.Sangh.{Comment} + alias Vyasa.Sangh.{Sheaf} @derive {Jason.Encoder, only: [:id]} @primary_key {:id, Ecto.UUID, autogenerate: true} schema "sessions" do - has_many :comments, Comment, references: :id, foreign_key: :session_id, on_replace: :delete_if_exists + has_many :sheafs, Sheaf, references: :id, foreign_key: :session_id, on_replace: :delete_if_exists timestamps(type: :utc_datetime) end diff --git a/lib/vyasa/written/verse.ex b/lib/vyasa/written/verse.ex index 95b56461..d393b341 100644 --- a/lib/vyasa/written/verse.ex +++ b/lib/vyasa/written/verse.ex @@ -9,7 +9,7 @@ defmodule Vyasa.Written.Verse do field :no, :integer field :body, :string field :binding, :map, virtual: true - field :comments, {:array, :map}, virtual: true, default: [] + field :sheafs, {:array, :map}, virtual: true, default: [] belongs_to :source, Source, type: Ecto.UUID belongs_to :chapter, Chapter, type: :integer, references: :no, foreign_key: :chapter_no diff --git a/lib/vyasa_web/components/contexts/read.ex b/lib/vyasa_web/components/contexts/read.ex index 6c2be7bb..e503edba 100644 --- a/lib/vyasa_web/components/contexts/read.ex +++ b/lib/vyasa_web/components/contexts/read.ex @@ -487,9 +487,9 @@ defmodule VyasaWeb.Context.Read do # Helper function that syncs and mutates Draft Reflector defp mutate_draft_reflector( - %{assigns: %{draft_reflector: %Vyasa.Sangh.Comment{} = dt, marks: marks}} = socket + %{assigns: %{draft_reflector: %Vyasa.Sangh.Sheaf{} = dt, marks: marks}} = socket ) do - {:ok, com} = Vyasa.Sangh.update_comment(dt, %{marks: marks}) + {:ok, com} = Vyasa.Sangh.update_sheaf(dt, %{marks: marks}) socket |> assign(:draft_reflector, com) @@ -501,26 +501,26 @@ defmodule VyasaWeb.Context.Read do end # currently naive hd lookup can be filter based on active toggle, - # tree like comments can be used to store nested collapsible topics (personal mark collection e.g.) + # tree like sheafs can be used to store nested collapsible topics (personal mark collection e.g.) # currently marks merged in and swapped out probably can be singular data structure # managing of lifecycle of marks # if sangh_id is active open defp sync_draft_reflector(%{assigns: %{session: %{sangh: %{id: sangh_id}}}} = socket) do - case Vyasa.Sangh.get_comments_by_session(sangh_id, %{traits: ["draft"]}) do - [%Vyasa.Sangh.Comment{marks: [_ | _] = marks} = dt | _] -> + case Vyasa.Sangh.get_sheafs_by_session(sangh_id, %{traits: ["draft"]}) do + [%Vyasa.Sangh.Sheaf{marks: [_ | _] = marks} = dt | _] -> IO.inspect(marks, label: "is this triggering") socket |> assign(draft_reflector: dt) |> assign(marks: marks) - [%Vyasa.Sangh.Comment{} = dt | _] -> + [%Vyasa.Sangh.Sheaf{} = dt | _] -> socket |> assign(draft_reflector: dt) _ -> {:ok, com} = - Vyasa.Sangh.create_comment(%{ + Vyasa.Sangh.create_sheaf(%{ id: Ecto.UUID.generate(), session_id: sangh_id, traits: ["draft"] diff --git a/lib/vyasa_web/components/contexts/read/verse_matrix.ex b/lib/vyasa_web/components/contexts/read/verse_matrix.ex index d587008c..22eecc03 100644 --- a/lib/vyasa_web/components/contexts/read/verse_matrix.ex +++ b/lib/vyasa_web/components/contexts/read/verse_matrix.ex @@ -49,7 +49,7 @@ defmodule VyasaWeb.Content.VerseMatrix do /> <.quick_draft_container :if={is_elem_bound_to_verse(@verse, elem)} - comments={@verse.comments} + sheafs={@verse.sheafs} show_current_marks?={@show_current_marks?} marks={@marks} quote={@verse.binding.window && @verse.binding.window.quote} @@ -96,7 +96,7 @@ defmodule VyasaWeb.Content.VerseMatrix do """ end - attr :comments, :list, default: [] + attr :sheafs, :list, default: [] attr :event_target, :string, required: true attr :quote, :string, default: nil attr :marks, :list, default: [] @@ -105,8 +105,8 @@ defmodule VyasaWeb.Content.VerseMatrix do attr :myself, :any def quick_draft_container(assigns) do - assigns = assigns |> assign(:elem_id, "comment-modal-#{Ecto.UUID.generate()}") - # TODO: i want a "current_comment" + assigns = assigns |> assign(:elem_id, "sheaf-modal-#{Ecto.UUID.generate()}") + # TODO: i want a "current_sheaf" ~H"""
<.current_marks myself={@myself} marks={@marks} show_current_marks?={@show_current_marks?} /> - <.bound_comments comments={@comments} /> + <.bound_sheafs sheafs={@sheafs} />
""" end - def bound_comments(assigns) do - assigns = assigns |> assign(:elem_id, "comment-modal-#{Ecto.UUID.generate()}") + def bound_sheafs(assigns) do + assigns = assigns |> assign(:elem_id, "sheaf-modal-#{Ecto.UUID.generate()}") ~H""" - <%= comment.body %> - <%= comment.signature %> + <%= sheaf.body %> - <%= sheaf.signature %> """ end @@ -232,7 +232,7 @@ defmodule VyasaWeb.Content.VerseMatrix do class="w-4 h-4 text-brand mr-2" /> - Current <%= if @form_type == :mark, do: "mark", else: "comment" %>'s selection + Current <%= if @form_type == :mark, do: "mark", else: "sheaf" %>'s selection
@@ -253,14 +253,14 @@ defmodule VyasaWeb.Content.VerseMatrix do
<.form for={%{}} - phx-submit={(@form_type == :mark && "createMark") || "createComment"} + phx-submit={(@form_type == :mark && "createMark") || "createSheaf"} phx-target={"#" <> @event_target} class="flex items-center" > @event_target, @@ -292,7 +292,7 @@ defmodule VyasaWeb.Content.VerseMatrix do type="button" phx-click={ JS.push("change_form_type", - value: %{type: if(@form_type == :mark, do: "comment", else: "mark")} + value: %{type: if(@form_type == :mark, do: "sheaf", else: "mark")} ) } phx-target={@myself} @@ -312,7 +312,7 @@ defmodule VyasaWeb.Content.VerseMatrix do """ end - def comment_mark_separator(assigns) do + def sheaf_mark_separator(assigns) do ~H""" ☙ ——— ›– ❊ –‹ ——— ❧ diff --git a/lib/vyasa_web/components/marginote.ex b/lib/vyasa_web/components/marginote.ex deleted file mode 100644 index 706b853c..00000000 --- a/lib/vyasa_web/components/marginote.ex +++ /dev/null @@ -1,99 +0,0 @@ -defmodule VyasaWeb.Marginote do - use VyasaWeb, :live_component - - @impl true - def update(assigns, socket) do - assigns = Enum.reject(assigns, fn {_k, v} -> is_nil(v) or v == [] end) - - {:ok, - socket - |> assign(assigns) - |> assign_new(:actions, fn -> [] end) - |> assign_new(:comments, fn -> [] end) - |> assign_new(:custom_style, fn -> [] end) - |> assign_new(:display, fn -> "hidden" end) - |> assign_new(:class, fn -> "" end)} - end - - @impl true - def handle_event("adjust", adjusted, socket) do - style = Enum.map(adjusted, fn {key, val} -> - "#{key}: #{val}" - end) - - {:noreply, assign(socket, custom_style: style)} - end - - @doc """ - Renders a marginote w action slots for interaction with marginote - """ - @impl true - def render(assigns) do - ~H""" -
List.flatten() |> Enum.join(";")} - data-marginote-id={Map.get(@last_created_comment, :id)} - data-marginote="parent"> -
-
-
-
-
- - @<%= c.initiator.username %> - <%= Timex.from_now(c.inserted_at) %> -
-
-
-
-

- <%= c.pointer.quote %> -

-
-

<%= c.body %>

-
- -
-
- - @<%= s.initiator.username %> - <%= Timex.from_now(s.inserted_at) %> -
-
-

<%= s.body %>

-
-
- - <.form - for={%{}} - class="flex items-center mt-4 mb-2" phx-submit="submit-quoted-comment"> - - - - -
-
-
-
-
- """ - end -end diff --git a/priv/repo/migrations/20240151122233_create_sangh_sessions.exs b/priv/repo/migrations/20240151122233_create_sangh_sessions.exs index d9761732..fb7bd251 100644 --- a/priv/repo/migrations/20240151122233_create_sangh_sessions.exs +++ b/priv/repo/migrations/20240151122233_create_sangh_sessions.exs @@ -11,20 +11,20 @@ defmodule Vyasa.Repo.Migrations.CreateSanghSessions do execute("CREATE EXTENSION ltree", "DROP EXTENSION ltree") - create table(:comments, primary_key: false) do + create table(:sheafs, primary_key: false) do add :id, :uuid, primary_key: true add :body, :text add :active, :boolean, default: false add :path, :ltree add :signature, :string add :session_id, references(:sessions, column: :id, type: :uuid) - add :parent_id, references(:comments, column: :id, type: :uuid) + add :parent_id, references(:sheafs, column: :id, type: :uuid) add :traits, :jsonb timestamps(type: :utc_datetime_usec) end - execute("CREATE INDEX comments_traits_index ON comments USING GIN(traits jsonb_path_ops)", "DROP INDEX comments_traits_index") + execute("CREATE INDEX sheafs_traits_index ON sheafs USING GIN(traits jsonb_path_ops)", "DROP INDEX sheafs_traits_index") create table(:bindings, primary_key: false) do @@ -34,13 +34,13 @@ defmodule Vyasa.Repo.Migrations.CreateSanghSessions do add :verse_id, references(:verses, column: :id, type: :uuid, on_delete: :nothing) add :chapter_no, references(:chapters, column: :no, type: :integer, with: [source_id: :source_id]) add :translation_id, references(:translations, column: :id, type: :uuid, on_delete: :nothing) - add :comment_id, references(:comments, column: :id, type: :uuid) + add :sheaf_id, references(:sheafs, column: :id, type: :uuid) add :source_id, references(:sources, column: :id, type: :uuid) add :window, :jsonb end - create index(:comments, [:path]) - create index(:comments, [:session_id]) + create index(:sheafs, [:path]) + create index(:sheafs, [:session_id]) create index(:bindings, [:chapter_no, :source_id]) end diff --git a/priv/repo/migrations/20240831122233_create_marks.exs b/priv/repo/migrations/20240831122233_create_marks.exs index be9f9989..9e52c8c3 100644 --- a/priv/repo/migrations/20240831122233_create_marks.exs +++ b/priv/repo/migrations/20240831122233_create_marks.exs @@ -10,13 +10,13 @@ defmodule Vyasa.Repo.Migrations.CreateMarks do add :state, :string add :order, :integer - add :comment_id, references(:comments, column: :id, type: :uuid, on_delete: :nothing) + add :sheaf_id, references(:sheafs, column: :id, type: :uuid, on_delete: :nothing) add :binding_id, references(:bindings, column: :id, type: :uuid, on_delete: :nothing) timestamps(type: :utc_datetime_usec) end - create index(:marks, [:comment_id]) + create index(:marks, [:sheaf_id]) create index(:marks, [:binding_id]) end From 3ebd5b10ef9e6ae78b096f44f8351a2c57a8e639 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Mon, 23 Sep 2024 20:54:18 +0800 Subject: [PATCH 128/130] Shed some weight --- assets/js/hooks/apply_modal.js | 15 --- assets/js/hooks/audio_player.js | 2 +- assets/js/hooks/floater.js | 116 +++++++++--------- assets/js/hooks/index.js | 2 - assets/js/hooks/media_bridge.js | 2 +- assets/js/hooks/youtube_player.js | 2 +- .../{uncategorised_utils.js => device.js} | 0 assets/js/utils/{time_utils.js => time.js} | 0 docs/schema/23_September_vyasa_erd.png | Bin 0 -> 408149 bytes .../static/corpus/kural}/kural.livemd | 0 scripts/README.org | 3 + ...Bookmarklet.js => genEventsBookmarklet.js} | 0 scripts/{ => srt_wrangler}/chalisa.json | 0 scripts/{ => srt_wrangler}/chalisa_2.srt | 0 .../chalisa_mapping_v1.json | 0 .../{ => srt_wrangler}/chalisa_scraped.json | 0 scripts/{ => srt_wrangler}/requirements.txt | 0 scripts/{ => srt_wrangler}/video_ir.py | 0 scripts/verses.livemd | 47 ------- scripts/wow.json | 1 - vyasa_blog/.dockerignore | 45 +++++++ 21 files changed, 108 insertions(+), 127 deletions(-) delete mode 100644 assets/js/hooks/apply_modal.js rename assets/js/utils/{uncategorised_utils.js => device.js} (100%) rename assets/js/utils/{time_utils.js => time.js} (100%) create mode 100644 docs/schema/23_September_vyasa_erd.png rename {scripts => priv/static/corpus/kural}/kural.livemd (100%) create mode 100644 scripts/README.org rename scripts/{genEventsYoutubePlayerBookmarklet.js => genEventsBookmarklet.js} (100%) rename scripts/{ => srt_wrangler}/chalisa.json (100%) rename scripts/{ => srt_wrangler}/chalisa_2.srt (100%) rename scripts/{ => srt_wrangler}/chalisa_mapping_v1.json (100%) rename scripts/{ => srt_wrangler}/chalisa_scraped.json (100%) rename scripts/{ => srt_wrangler}/requirements.txt (100%) rename scripts/{ => srt_wrangler}/video_ir.py (100%) delete mode 100644 scripts/verses.livemd delete mode 100644 scripts/wow.json create mode 100644 vyasa_blog/.dockerignore diff --git a/assets/js/hooks/apply_modal.js b/assets/js/hooks/apply_modal.js deleted file mode 100644 index ada9399b..00000000 --- a/assets/js/hooks/apply_modal.js +++ /dev/null @@ -1,15 +0,0 @@ -const ApplyModal = () => { - const modal = document.querySelector('[data-selector="vyasa_modal_message"]') - - if (!modal) return - - const encodedReturnTo = encodeURIComponent(document.location.pathname) - - modal.querySelectorAll('a[data-phx-link="redirect"]').forEach(val => { - const url = new URL(val.href, document.location.origin) - url.searchParams.set('return_to', encodedReturnTo) - val.href = `${url.href}` - }) -} - -export default ApplyModal diff --git a/assets/js/hooks/audio_player.js b/assets/js/hooks/audio_player.js index 614cf56a..8783af94 100644 --- a/assets/js/hooks/audio_player.js +++ b/assets/js/hooks/audio_player.js @@ -25,7 +25,7 @@ let execJS = (selector, attr) => { .forEach((el) => liveSocket.execJS(el, el.getAttribute(attr))); }; -import { formatDisplayTime, nowMs } from "../utils/time_utils.js"; +import { formatDisplayTime, nowMs } from "../utils/time.js"; AudioPlayer = { mounted() { diff --git a/assets/js/hooks/floater.js b/assets/js/hooks/floater.js index 37f5efd9..3c085f2e 100644 --- a/assets/js/hooks/floater.js +++ b/assets/js/hooks/floater.js @@ -1,7 +1,7 @@ /* * Ideally generic hook for floating logic. */ -import {isMobileDevice} from "../utils/uncategorised_utils.js"; +import { isMobileDevice } from "../utils/device.js"; import { computePosition, autoPlacement, @@ -11,58 +11,55 @@ import { Floater = { mounted() { - console.log("[floater] floater mounted") - console.log("[floater] dataset check: ", this.el.dataset) - const { - floaterId, - floaterReferenceSelector - } = this.el.dataset; + console.log("[floater] floater mounted"); + console.log("[floater] dataset check: ", this.el.dataset); + const { floaterId, floaterReferenceSelector } = this.el.dataset; }, - beforeUpdate() { // gets called synchronously, prior to update - console.log("[floater] Triggerred floater::beforeUpdate()") - const { - floater, - reference, - fallback, - } = this.getRelevantElements(); + beforeUpdate() { + // gets called synchronously, prior to update + console.log("[floater] Triggerred floater::beforeUpdate()"); + const { floater, reference, fallback } = this.getRelevantElements(); // TODO: this is hardcoded to the media bridge, refactor when more sane. const offsetHeight = fallback.offsetHeight; // so pretend it's lower by this amount - const isReferenceOutOfView = isElementOutOfViewport(reference, {top:0, bottom:offsetHeight, left: 0, right: 0}) + const isReferenceOutOfView = isElementOutOfViewport(reference, { + top: 0, + bottom: offsetHeight, + left: 0, + right: 0, + }); if (isReferenceOutOfView) { - console.log("[floater] Reference is out of viewport, should use fallback", { - floater, - reference, - fallback, - }) + console.log( + "[floater] Reference is out of viewport, should use fallback", + { + floater, + reference, + fallback, + }, + ); } - const target = (isMobileDevice() || isReferenceOutOfView) ? fallback : reference + const target = + isMobileDevice() || isReferenceOutOfView ? fallback : reference; this.alignFloaterToRef(floater, target); }, - updated() { // gets called when the elem changes - console.log("[floater] Triggerred floater::updated()") - const { - floater, - reference, - fallback, - } = this.getRelevantElements(); + updated() { + // gets called when the elem changes + console.log("[floater] Triggerred floater::updated()"); + const { floater, reference, fallback } = this.getRelevantElements(); }, alignFloaterToRef(floater, reference) { - const canBeAligned = floater && reference - if(!canBeAligned) { - console.log("[floater] Can't be aligned") - return + const canBeAligned = floater && reference; + if (!canBeAligned) { + console.log("[floater] Can't be aligned"); + return; } computePosition(reference, floater, { - placement: 'right', + placement: "right", // NOTE: order of middleware matters. middleware: [ autoPlacement({ - allowedPlacements: [ - "right", - "top-end" - ] + allowedPlacements: ["right", "top-end"], }), shift({ padding: 8, @@ -70,8 +67,8 @@ Floater = { }), offset(6), ], - }).then(({x, y}) => { - console.log("[floater] computed coordinates:", {x, y}) + }).then(({ x, y }) => { + console.log("[floater] computed coordinates:", { x, y }); Object.assign(floater.style, { left: `${x}px`, top: `${y}px`, @@ -84,44 +81,45 @@ Floater = { floaterReferenceSelector, floaterFallbackReferenceSelector, } = this.el.dataset; - const floater = document.getElementById(floaterId) - const reference = document.querySelector(floaterReferenceSelector) - const fallback = document.querySelector(floaterFallbackReferenceSelector) + const floater = document.getElementById(floaterId); + const reference = document.querySelector(floaterReferenceSelector); + const fallback = document.querySelector(floaterFallbackReferenceSelector); console.log("[floater] getRelevantElements", { floater, reference, fallback, isMobileDevice: isMobileDevice(), - }) + }); return { floater, reference, fallback, - } - - } -} + }; + }, +}; // offset: more positive is more in that direction. so if left = 2 vs left = 3, then the second left is more left than the first left lol. // offest is to be applied to the value of the rect so rect with offset top = 2 is as though the original left +2 in height -function isElementOutOfViewport(el, offsets = {top: 0, bottom:0, left: 0, right:0}) { +function isElementOutOfViewport( + el, + offsets = { top: 0, bottom: 0, left: 0, right: 0 }, +) { if (!el) { - console.log("[floater] el is null", el) - + console.log("[floater] el is null", el); } else { + const rect = el.getBoundingClientRect(); + const { top, bottom, left, right } = offsets; - const rect = el.getBoundingClientRect(); - const { top, bottom, left, right } = offsets; - - return ( - rect.top + top < 0 || + return ( + rect.top + top < 0 || rect.left + left < 0 || - rect.bottom + bottom > (window.innerHeight || document.documentElement.clientHeight) || - rect.right + right > (window.innerWidth || document.documentElement.clientWidth) - ); - + rect.bottom + bottom > + (window.innerHeight || document.documentElement.clientHeight) || + rect.right + right > + (window.innerWidth || document.documentElement.clientWidth) + ); } } diff --git a/assets/js/hooks/index.js b/assets/js/hooks/index.js index 58b507fd..215aac81 100644 --- a/assets/js/hooks/index.js +++ b/assets/js/hooks/index.js @@ -8,7 +8,6 @@ import MediaBridge from "./media_bridge.js"; import AudioPlayer from "./audio_player.js"; import ProgressBar from "./progress_bar.js"; import Floater from "./floater.js"; -import ApplyModal from "./apply_modal.js"; import HoveRune from "./hoverune.js"; import Scrolling from "./scrolling.js"; import ButtonClickRelayer from "./button_click_relayer.js"; @@ -23,7 +22,6 @@ let Hooks = { AudioPlayer, ProgressBar, Floater, - ApplyModal, HoveRune, Scrolling, ButtonClickRelayer, diff --git a/assets/js/hooks/media_bridge.js b/assets/js/hooks/media_bridge.js index 518193c4..f763242f 100644 --- a/assets/js/hooks/media_bridge.js +++ b/assets/js/hooks/media_bridge.js @@ -6,7 +6,7 @@ * * Event-handling is done using custom bridged events as a proxy. * */ -import { formatDisplayTime } from "../utils/time_utils.js"; +import { formatDisplayTime } from "../utils/time.js"; import { seekTimeBridge, playPauseBridge, diff --git a/assets/js/hooks/youtube_player.js b/assets/js/hooks/youtube_player.js index 4b55453f..6225d8ac 100644 --- a/assets/js/hooks/youtube_player.js +++ b/assets/js/hooks/youtube_player.js @@ -4,7 +4,7 @@ * */ import { seekTimeBridge, playPauseBridge } from "./mediaEventBridges"; -import { isMobileDevice } from "../utils/uncategorised_utils.js"; +import { isMobileDevice } from "../utils/device.js"; const isYouTubeFnCallable = (dataset) => { const { functionName, eventName } = dataset; diff --git a/assets/js/utils/uncategorised_utils.js b/assets/js/utils/device.js similarity index 100% rename from assets/js/utils/uncategorised_utils.js rename to assets/js/utils/device.js diff --git a/assets/js/utils/time_utils.js b/assets/js/utils/time.js similarity index 100% rename from assets/js/utils/time_utils.js rename to assets/js/utils/time.js diff --git a/docs/schema/23_September_vyasa_erd.png b/docs/schema/23_September_vyasa_erd.png new file mode 100644 index 0000000000000000000000000000000000000000..f90bc2392ac9909f689626d7e399f4a2b83e56d0 GIT binary patch literal 408149 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

R)p;XbSb`iC+5iL-y4%Xpv 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�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

;^Cr?vBy7|? zji|oR(s+8*D>qwkJ$;1dOwvEh7$%kYj;&~#_zlKK#y4|}4I6H#Lf!A;rywEuG!IK` zexm+Z_1wP!WX1`%klW;0x^Tm*Lpdgnz;+^HfG~{?1ZfZPu*!{;7@1_BreP`S{ z5flVuV2z(eeRGH$`UZX;^G&DIYjU_%J+)z_Nq@R8>4|s$bm;T6!ZgnCKS1OBUT_gFRYd}-PSPx<*Ga|n~d@)*CBV2cJ`>kz(f zlE&sQj&!*4-eXFll6ZA^lgElluB?kIFA)tSSH^{B{m;5^K3ET5OLN1U2mUy?jLg9d z5!tM*qk{szsutC{J?KQ+9eDT%VtHHtcG-8W8vc4h6c|Oz>9f}eb#QEDkjci=W00u1 zf;7SD@2Ch2yY*i{q1&DQ+m{`lF8^QIeO%BKy9qWGTig#a^H%B{_3w>LniJYeD-IoHXlD513`FfyF8j50Gq?w7l26LZ7l7xOF(>4=sqwsC3-dIc`r zj&0^AM@yop9vwnm*jXp4=$hh?)oJ{4J`L>feA`GuWp%r8QL`F^0(&y-$DwTu z!lRiBgL=LgD08oTS~xLuYfbrmTm|?2uf#6{(!3{ux|GJv&3FW83B=KMz!RfV>TTVO zxzEIj+>7Php@$YZozK?!GDF6hh`6|Hw_L;q6?_qp*1J!k##94k?tUzr?o5*drt4Z< zfO)ZL$a%G;X3P($u^GfV!7M0_`Li<4Coe)V?ARXlG8rRz2fM%XDZ5VQ`OWiRY!&6r z;v{YlSzX7|b7H#K5e@_IT1o`WURb@{DqCJJBEf|fOx3C-wBxZ^PW?~cj~7Ge-w&ZL zEwJ+ijF5J5*}9Z%-nEGRY%MMBKqFf>VuhY=k$3+E&Rse*$qsh8D2M+jRp?6Dj?(e9 zwc`4SS@Bw;lx@t}%v~{l4{P~)5570fy(4JVGV#$kz6mh1ua6QWh*KAwuAcrL-PRsh z>eMf=V4f0I_RNN!xqQL$Jx!%orFW-=b2{z8{il|^NU)6nEq75?Pc4F6?V&Ajg()(d zU!wn9I2r_$bOQ6FO?4B>NR^TB3{&cGmW=bQQi%MlJvS1fbK4KoXFInIgLYhvY?s#3 z8eLkTi~~bV`Kkpdt)#KeUgOr^fL?04JH=DPv#<)f;|~H8&j}<&&bA|y*mqL=Z|A&b z9^Xc$qh6F>h$Ba(jPObbLQ|iwHkX!`HjGx8noGZ0O)8MYCdunp8q6~GscLI!@s8*! z$L$Jua!sYMIyKk4Z<4q9Ux8G%pL7p-e4Q}Nj3#{Q?lq!0Sr9^KDKw!lu~3FKt2j(584)Ve8I`r|#5g3_!>Cc*r#A*bGsH zV>Lcw2dDqSn6p{z{H@z#zsXZl3?3agwc$lu>#T_@N<|&m@Z!hY4o>{9KX0x|3*jzW wZPWfgzUbdq`uBZ0{_p1rI>rBotL4igzZMzq;?Hv~Ou?URTXfXZ)b{!P2Rng~SO5S3 literal 0 HcmV?d00001 diff --git a/scripts/kural.livemd b/priv/static/corpus/kural/kural.livemd similarity index 100% rename from scripts/kural.livemd rename to priv/static/corpus/kural/kural.livemd diff --git a/scripts/README.org b/scripts/README.org new file mode 100644 index 00000000..4009ab69 --- /dev/null +++ b/scripts/README.org @@ -0,0 +1,3 @@ +#+title: Readme +* Purpose +This dir is for ad-hoc scripts. Any old scripts will be under the =old= subdir until it collects dust. diff --git a/scripts/genEventsYoutubePlayerBookmarklet.js b/scripts/genEventsBookmarklet.js similarity index 100% rename from scripts/genEventsYoutubePlayerBookmarklet.js rename to scripts/genEventsBookmarklet.js diff --git a/scripts/chalisa.json b/scripts/srt_wrangler/chalisa.json similarity index 100% rename from scripts/chalisa.json rename to scripts/srt_wrangler/chalisa.json diff --git a/scripts/chalisa_2.srt b/scripts/srt_wrangler/chalisa_2.srt similarity index 100% rename from scripts/chalisa_2.srt rename to scripts/srt_wrangler/chalisa_2.srt diff --git a/scripts/chalisa_mapping_v1.json b/scripts/srt_wrangler/chalisa_mapping_v1.json similarity index 100% rename from scripts/chalisa_mapping_v1.json rename to scripts/srt_wrangler/chalisa_mapping_v1.json diff --git a/scripts/chalisa_scraped.json b/scripts/srt_wrangler/chalisa_scraped.json similarity index 100% rename from scripts/chalisa_scraped.json rename to scripts/srt_wrangler/chalisa_scraped.json diff --git a/scripts/requirements.txt b/scripts/srt_wrangler/requirements.txt similarity index 100% rename from scripts/requirements.txt rename to scripts/srt_wrangler/requirements.txt diff --git a/scripts/video_ir.py b/scripts/srt_wrangler/video_ir.py similarity index 100% rename from scripts/video_ir.py rename to scripts/srt_wrangler/video_ir.py diff --git a/scripts/verses.livemd b/scripts/verses.livemd deleted file mode 100644 index 577e322f..00000000 --- a/scripts/verses.livemd +++ /dev/null @@ -1,47 +0,0 @@ -# verses - -```elixir -Mix.install([ - {:jason, "~> 1.4"} -]) -``` - -## Section - -```elixir -defmodule Gita do - @external_resource "/home/putra/vyasa/priv/static/corpus/gita/verse.json" - - @verse "/home/putra/vyasa/priv/static/corpus/gita/verse.json" - |> File.read!() - |> Jason.decode!() - - def verse(chapter_number) when is_integer(chapter_number) do - @verse - end - - def verse(_), do: nil -end - -File.cwd() -``` - -```elixir -# into chapter, into verses -verse = - "/home/putra/vyasa/priv/static/corpus/gita/verse.json" - |> File.read!() - |> Jason.decode!() - |> Enum.group_by(& &1["chapter_number"]) - |> Enum.map(fn {c, v} -> - {c, - v - |> Enum.sort(&(&1["verse_number"] <= &2["verse_number"]))} - end) - |> Enum.into(%{}) - -# |> Jason.encode!() - -# File.write!("sorted_verse.json", verse) -# File.cwd() -``` diff --git a/scripts/wow.json b/scripts/wow.json deleted file mode 100644 index 8c3f8cae..00000000 --- a/scripts/wow.json +++ /dev/null @@ -1 +0,0 @@ -[{"id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","events":[{"id":"e3a87697-cc39-4ccb-a0d4-cfa43ece3971","origin":66000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":13000,"verse_id":"01abd249-f2b6-44f6-98cc-34cf36395564","fragments":[]},{"id":"4e40238c-c3eb-4398-87b1-5bbfac8441ac","origin":49000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":17000,"verse_id":"ddfea826-fb8b-4442-8a1c-434eb6129dd3","fragments":[]},{"id":"1fd585e4-b3b8-48ee-89dc-c99520b0582d","origin":668000,"phase":"end","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":57088,"fragments":[]},{"id":"f67989a2-4193-4d44-8b04-6da27abe6299","origin":0,"phase":"start","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":33000,"fragments":[]},{"id":"6d739604-cf9d-49fb-97fd-252c83cc4c1a","origin":33000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":16000,"verse_id":"69a70209-0d9d-480f-8939-30e35fbacb12","fragments":[]},{"id":"bd3b5b8d-8d61-4a68-b697-cd5e9e46f3a6","origin":653000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":15000,"verse_id":"70f41097-a0ca-4b19-98ed-f8fac35139b3","fragments":[]},{"id":"ee59fb06-5a6c-43d3-b486-254abcd51021","origin":640000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":13000,"verse_id":"1e3525e7-2061-4a43-9e44-172765934444","fragments":[]},{"id":"c404ce32-948f-46b7-85f3-d95984cddb6d","origin":629000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":11000,"verse_id":"86bb76ea-6382-4ff6-afc7-59738e97e2e8","fragments":[]},{"id":"779fb0c4-accd-48e5-8458-154da3cf6982","origin":616000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":13000,"verse_id":"6e1b3253-f74a-468c-bac2-ac0c235e18fa","fragments":[]},{"id":"1661278b-84d5-4818-bf14-adabcbe7d1d7","origin":602000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":14000,"verse_id":"d7b4c586-1245-474f-86df-39820500f3d3","fragments":[]},{"id":"3b2f35c8-86df-4825-a8da-ddba7b4e806f","origin":588000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":14000,"verse_id":"29005595-957e-4e8a-a27e-7d4f515eb7c4","fragments":[]},{"id":"bbdeb861-e993-4d4c-a2de-2f9688c23cc9","origin":575000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":13000,"verse_id":"412e58c6-0ffb-4b6a-a37f-a77ca6def9ea","fragments":[]},{"id":"6b3952f7-8ef5-4261-8620-a6cd038bdc5c","origin":562000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":13000,"verse_id":"f55741da-c64c-4ee1-a64f-6b60527fb07b","fragments":[]},{"id":"a473cbb0-1b6b-4ede-a7ed-04cd97cbe00a","origin":549000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":13000,"verse_id":"dc178a03-322e-4312-92a4-18de5bd558ce","fragments":[]},{"id":"43daeee6-e5dd-489d-a2ad-f41c81741afe","origin":537000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":12000,"verse_id":"b30d8cfd-09dc-4ada-ae73-aa4cd63c715a","fragments":[]},{"id":"d2f1493a-6a5b-44d8-af72-a21696dff0cf","origin":524000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":13000,"verse_id":"a0e2320a-bbb1-483b-a2f5-5dfdcac5f582","fragments":[]},{"id":"4a897c47-2db1-4d06-9a86-d6c3e614589a","origin":511000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":13000,"verse_id":"5946cde6-0b5b-427b-aa7b-fa5e2034714a","fragments":[]},{"id":"669f09c7-25be-4e2d-b9bd-949a03bfde4c","origin":498000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":13000,"verse_id":"b33ede92-1824-4468-b77c-66deb9ae263e","fragments":[]},{"id":"8e6d9c09-f348-4a68-a9eb-7e0df53a64bd","origin":485000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":13000,"verse_id":"97b74546-3aa0-4342-9011-c0bff4487585","fragments":[]},{"id":"acb2c07f-9995-4b59-a8cf-2ce67626644f","origin":471000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":14000,"verse_id":"cc1ad682-aee3-40a3-b946-71daa0b2a03e","fragments":[]},{"id":"8e3074f6-4912-49ce-a857-542df33dcf05","origin":458000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":13000,"verse_id":"42a5685a-9319-4cf5-be9e-d0652241c1fe","fragments":[]},{"id":"340371da-3ca1-4415-926d-2894e79deec2","origin":446000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":12000,"verse_id":"ec3534f6-0d6e-488f-9bd4-d7039e4e1aa8","fragments":[]},{"id":"513b8cb1-f12e-4f0d-9879-0051effd1c81","origin":433000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":13000,"verse_id":"181f0d7d-8351-402c-ae3a-f64ab612a598","fragments":[]},{"id":"291e18e0-efe7-4cfe-b708-15112b55e399","origin":421000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":12000,"verse_id":"406e5251-fd59-4d1e-98a4-42c5c784d3c9","fragments":[]},{"id":"2ce9c2ec-6787-430b-ada6-b3a0d0fb9dab","origin":406000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":15000,"verse_id":"0f422b32-a617-4431-a805-f294d6e0099b","fragments":[]},{"id":"44c691c0-314f-4030-ab17-9976311fb2b3","origin":392000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":14000,"verse_id":"85d2520a-bbff-4377-a96c-1b81bc23218b","fragments":[]},{"id":"5209c7bf-4c3a-4081-ad13-d660a9c96f35","origin":378000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":14000,"verse_id":"abd7d110-c191-40e9-b0b4-b88279c8a25d","fragments":[]},{"id":"81f5d6fc-dffa-4591-977e-b536607acf6e","origin":365000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":13000,"verse_id":"03c8bd52-55ad-4859-b464-56ff4771e33e","fragments":[]},{"id":"42b8c7f7-9fdd-4e6f-9ef6-f616423922fa","origin":350000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":15000,"verse_id":"6422a2c3-adba-4046-ab82-a7fcb1948394","fragments":[]},{"id":"3ba097dc-b8bf-4b86-8e44-0a2dccac5385","origin":336000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":14000,"verse_id":"52aa5172-5dce-4801-a01b-c32d08382f96","fragments":[]},{"id":"a8d73c68-9de2-43c4-af74-95e15fccbf1a","origin":323000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":13000,"verse_id":"4c70d30b-fe95-43fd-b895-349eff5b901c","fragments":[]},{"id":"2f11b2d1-7471-4583-8f4a-08c89ddc2fd6","origin":307000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":16000,"verse_id":"af975dd8-b535-4386-b97b-e873a4177c3f","fragments":[]},{"id":"8d95c423-d7a9-4fb9-93b6-88aad89aeaa5","origin":294000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":13000,"verse_id":"7345ef82-77e9-4c14-9b8a-e5128443ebd0","fragments":[]},{"id":"72c7798f-ca8c-4658-8f35-f649b3762284","origin":280000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":14000,"verse_id":"4db83221-e9d1-4484-b3d1-13129bcc3ad5","fragments":[]},{"id":"bd8b8fc6-f71d-433d-8b99-d9a7ddf56bcc","origin":267000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":13000,"verse_id":"6ad3e0b3-e7ca-4985-9807-14b6ac5b4406","fragments":[]},{"id":"80a4691d-44b6-42a6-9467-5c7637da313c","origin":254000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":13000,"verse_id":"9eb3f8a5-41e4-4398-a0cc-56c23cb9f2b0","fragments":[]},{"id":"41fdf38e-f851-4f5d-ab22-f4d157fd9f2c","origin":242000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":12000,"verse_id":"26b7ba2f-92be-4b79-86d9-33928d5eca5a","fragments":[]},{"id":"84129291-4a45-43eb-b60d-4a3b0f3c3f5a","origin":229000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":13000,"verse_id":"b3be19c2-1440-4d47-b7b3-b680f46a972a","fragments":[]},{"id":"1a985717-350a-4076-a651-3970f46005a4","origin":216000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":13000,"verse_id":"d1cd7c12-4b80-4e1c-ae02-78f866ec8505","fragments":[]},{"id":"15679d10-dd9a-482c-9031-12d2fd0b21e5","origin":202000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":14000,"verse_id":"8cfcde75-6ed2-401a-9fe0-736027a284a2","fragments":[]},{"id":"0e5a079b-408b-4a9b-9efb-4d4e5e486090","origin":189000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":13000,"verse_id":"e9805667-81a4-44f5-8689-aad2ce95f784","fragments":[]},{"id":"cbc872ab-bb95-448d-85b2-deed60ce7125","origin":176000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":13000,"verse_id":"3e3a6794-1e98-4c1c-9390-073f7e449b20","fragments":[]},{"id":"545ff046-40a4-4aed-9c37-ca6f4627a4b9","origin":162000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":14000,"verse_id":"dcb41264-8d89-4eb8-89a3-7fc234fa997d","fragments":[]},{"id":"5a94b9c0-27f8-46c7-9c68-77bb68b895d7","origin":148000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":14000,"verse_id":"0c09222a-9a55-48a0-8f6d-e8744d7aaa65","fragments":[]},{"id":"78288c9c-1f21-453c-bd54-d098985f3bf6","origin":135000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":13000,"verse_id":"cba9c5a3-a89d-41d5-9997-ae2c1b3c9c4a","fragments":[]},{"id":"7c98f52f-70d1-47ac-b0ca-a95dd0cc6978","origin":120000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":15000,"verse_id":"2d15c9a6-d5f4-403d-828c-c0234f678dfe","fragments":[]},{"id":"fec23d11-d530-4274-9c6c-65f99f92561f","origin":106000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":14000,"verse_id":"e751150c-8107-4303-99b4-b8cac3e64230","fragments":[]},{"id":"fdbf27ca-ac01-4acc-95f9-d27b306a96b1","origin":92000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":14000,"verse_id":"596d0dfd-5b3d-4620-bba5-ecb2ecfb2520","fragments":[]},{"id":"db03ec1b-107e-4fa4-a6af-65a0a63ea2f3","origin":79000,"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","voice_id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","duration":13000,"verse_id":"6a26d480-1fdd-46c5-b699-93f0829254b9","fragments":[]}],"title":"gita","chapters":[{"no":2,"title":"सांख्ययोग","body":"The second chapter of the Bhagavad Gita is \"Sankhya Yoga\". This is the most important chapter of the Bhagavad Gita as Lord Krishna condenses the teachings of the entire Gita in this chapter. This chapter is the essence of the entire Gita. \n\"Sankhya Yoga\" can be categorized into 4 main topics - \n1. Arjuna completely surrenders himself to Lord Krishna and accepts his position as a disciple and Krishna as his Guru. He requests Krishna to guide him on how to dismiss his sorrow.\n2. Explanation of the main cause of all grief, which is ignorance of the true nature of Self.\n3. Karma Yoga - the discipline of selfless action without being attached to its fruits.\n4. Description of a Perfect Man - One whose mind is steady and one-pointed.","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd"},{"no":3,"title":"कर्मयोग","body":"The third chapter of the Bhagavad Gita is \"Karma Yoga\" or the \"Path of Selfless Service\". Here Lord Krishna emphasizes the importance of karma in life. He reveals that it is important for every human being to engage in some sort of activity in this material world. Further, he describes the kinds of actions that lead to bondage and the kinds that lead to liberation. Those persons who continue to perform their respective duties externally for the pleasure of the Supreme, without attachment to its rewards get liberation at the end.","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd"},{"no":4,"title":"ज्ञानकर्मसंन्यासयोग","body":"The fourth chapter of the Bhagavad Gita is \"Jnana Karma Sanyasa Yoga\". In this chapter, Krishna glorifies the Karma Yoga and imparts the Transcendental Knowledge (the knowledge of the soul and the Ultimate Truth) to Arjuna. He reveals the reason behind his appearance in this material world. He reveals that even though he is eternal, he reincarnates time after time to re-establish dharma and peace on this Earth. His births and activities are eternal and are never contaminated by material flaws. Those persons who know and understand this Truth engage in his devotion with full faith and eventually attain Him. They do not have to take birth in this world again.","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd"},{"no":5,"title":"कर्मसंन्यासयोग","body":"The fifth chapter of the Bhagavad Gita is \"Karma Sanyasa Yoga\". In this chapter, Krishna compares the paths of renunciation in actions (Karma Sanyas) and actions with detachment (Karma Yoga) and explains that both are means to reach the same goal and we can choose either. A wise person should perform his/her worldly duties without attachment to the fruits of his/her actions and dedicate them to God. This way they remain unaffected by sin and eventually attain liberation.","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd"},{"no":6,"title":"ध्यानयोग","body":"The sixth chapter of the Bhagavad Gita is \"Dhyana Yoga\". In this chapter, Krishna reveals the \"Yoga of Meditation\" and how to practise this Yoga. He discusses the role of action in preparing for Meditation, how performing duties in devotion purifies one's mind and heightens one's spiritual consciousness. He explains in detail the obstacles that one faces when trying to control their mind and the exact methods by which one can conquer their mind. He reveals how one can focus their mind on Paramatma and unite with the God.","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd"},{"no":7,"title":"ज्ञानविज्ञानयोग","body":"The seventh chapter of the Bhagavad Gita is \"Gyaan Vigyana Yoga \". In this chapter, Krishna reveals that he is the Supreme Truth, the principal cause and the sustaining force of everything. He reveals his illusionary energy in this material world called Maya, which is very difficult to overcome but those who surrender their minds unto Him attain Him easily. He also describes the four types of people who surrender to Him in devotion and the four kinds that don't. Krishna confirms that He is the Ultimate Reality and those who realize this Truth reach the pinnacle of spiritual realization and unite with the Lord.","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd"},{"no":8,"title":"अक्षरब्रह्मयोग","body":"The eighth chapter of the Bhagavad Gita is \"Akshara Brahma Yoga\". In this chapter, Krishna reveals the importance of the last thought before death. If we can remember Krishna at the time of death, we will certainly attain him. Thus, it is very important to be in constant awareness of the Lord at all times, thinking of Him and chanting His names at all times. By perfectly absorbing their mind in Him through constant devotion, one can go beyond this material existence to Lord's Supreme abode.","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd"},{"no":9,"title":"राजविद्याराजगुह्ययोग","body":"The ninth chapter of the Bhagavad Gita is \"Raja Vidya Yoga\". In this chapter, Krishna explains that He is Supreme and how this material existence is created, maintained and destroyed by His Yogmaya and all beings come and go under his supervision. He reveals the Role and the Importance of Bhakti (transcendental devotional service) towards our Spiritual Awakening. In such devotion, one must live for the God, offer everything that he possesses to Him and do everything for Him only. One who follows such devotion becomes free from the bonds of this material world and unites with the Lord.","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd"},{"no":1,"title":"अर्जुनविषादयोग","body":"The first chapter of the Bhagavad Gita - \"Arjuna Vishada Yoga\" introduces the setup, the setting, the characters and the circumstances that led to the epic battle of Mahabharata, fought between the Pandavas and the Kauravas. It outlines the reasons that led to the revelation of the of Bhagavad Gita.\nAs both armies stand ready for the battle, the mighty warrior Arjuna, on observing the warriors on both sides becomes increasingly sad and depressed due to the fear of losing his relatives and friends and the consequent sins attributed to killing his own relatives. So, he surrenders to Lord Krishna, seeking a solution. Thus, follows the wisdom of the Bhagavad Gita.","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd"},{"no":11,"title":"विश्वरूपदर्शनयोग","body":"The eleventh chapter of the Bhagavad Gita is \"Vishwaroopa Darshana Yoga\". In this chapter, Arjuna requests Krishna to reveal His Universal Cosmic Form that encompasses all the universes, the entire existence. Arjuna is granted divine vision to be able to see the entirety of creation in the body of the Supreme Lord Krishna.","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd"},{"no":12,"title":"भक्तियोग","body":"The twelfth chapter of the Bhagavad Gita is \"Bhakti Yoga\". In this chapter, Krishna emphasizes the superiority of Bhakti Yoga (the path of devotion) over all other types of spiritual disciplines and reveals various aspects of devotion. He further explains that the devotees who perform pure devotional service to Him, with their consciousness, merged in Him and all their actions dedicated to Him, are quickly liberated from the cycle of life and death. He also describes the various qualities of the devotees who are very dear to Him.","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd"},{"no":13,"title":"क्षेत्र-क्षेत्रज्ञविभागयोग","body":"The thirteenth chapter of the Bhagavad Gita is \"Ksetra Ksetrajna Vibhaaga Yoga\". The word \"kshetra\" means \"the field\", and the \"kshetrajna\" means \"the knower of the field\". We can think of our material body as the field and our immortal soul as the knower of the field. In this chapter, Krishna discriminates between the physical body and the immortal soul. He explains that the physical body is temporary and perishable whereas the soul is permanent and eternal. The physical body can be destroyed but the soul can never be destroyed. The chapter then describes God, who is the Supreme Soul. All the individual souls have originated from the Supreme Soul. One who clearly understands the difference between the body, the Soul and the Supreme Soul attains the realization of Brahman.","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd"},{"no":14,"title":"गुणत्रयविभागयोग","body":"The fourteenth chapter of the Bhagavad Gita is \"Gunatraya Vibhaga Yoga\". In this chapter, Krishna reveals the three gunas (modes) of the material nature - goodness, passion and ignorance which everything in the material existence is influenced by. He further explains the essential characteristics of each of these modes, their cause and how they influence a living entity affected by them. He then reveals the various characteristics of the persons who have gone beyond these gunas. The chapter ends with Krishna reminding us of the power of pure devotion to God and how attachment to God can help us transcend these gunas.","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd"},{"no":15,"title":"पुरुषोत्तमयोग","body":"The fifteenth chapter of the Bhagavad Gita is \"Purushottama Yoga\". In Sanskrit, Purusha means the \"All-pervading God\", and Purushottam means the timeless & transcendental aspect of God. Krishna reveals that the purpose of this Transcendental knowledge of the God is to detach ourselves from the bondage of the material world and to understand Krishna as the Supreme Divine Personality, who is the eternal controller and sustainer of the world. One who understands this Ultimate Truth surrenders to Him and engages in His devotional service.","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd"},{"no":16,"title":"दैवासुरसम्पद्विभागयोग","body":"The sixteenth chapter of the Bhagavad Gita is \"Daivasura Sampad Vibhaga Yoga\". In this chapter, Krishna describes explicitly the two kinds of natures among human beings - divine and demoniac. Those who possess demonaic qualities associate themselves with the modes of passion and ignorance do not follow the regulations of the scriptures and embrace materialistic views. These people attain lower births and further material bondage. But people who possess divine qualities, follow the instructions of the scriptures, associate themselves with the mode of goodness and purify the mind through spiritual practices. This leads to the enhancement of divine qualities and they eventually attain spiritual realization.","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd"},{"no":17,"title":"श्रद्धात्रयविभागयोग","body":"The seventeenth chapter of the Bhagavad Gita is \"Sraddhatraya Vibhaga Yoga\". In this chapter, Krishna describes the three types of faith corresponding to the three modes of the material nature. Lord Krishna further reveals that it is the nature of faith that determines the quality of life and the character of living entities. Those who have faith in passion and ignorance perform actions that yield temporary, material results while those who have faith in goodness perform actions in accordance with scriptural instructions and hence their hearts get further purified.","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd"},{"no":18,"title":"मोक्षसंन्यासयोग","body":"The eighteenth chapter of the Bhagavad Gita is \"Moksha Sanyas Yoga\". Arjuna requests the Lord to explain the difference between the two types of renunciations - sanyaas(renunciation of actions) and tyaag(renunciation of desires). Krishna explains that a sanyaasi is one who abandons family and society in order to practise spiritual discipline whereas a tyaagi is one who performs their duties without attachment to the rewards of their actions and dedicating them to the God. Krishna recommends the second kind of renunciation - tyaag. Krishna then gives a detailed analysis of the effects of the three modes of material nature. He declares that the highest path of spirituality is pure, unconditional loving service unto the Supreme Divine Personality, Krishna. If we always remember Him, keep chanting His name and dedicate all our actions unto Him, take refuge in Him and make Him our Supreme goal, then by His grace, we will surely overcome all obstacles and difficulties and be freed from this cycle of birth and death.","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd"},{"no":10,"title":"विभूतियोग","body":"The tenth chapter of the Bhagavad Gita is \"Vibhooti Yoga\". In this chapter, Krishna reveals Himself as the cause of all causes. He describes His various manifestations and opulences in order to increase Arjuna's Bhakti. Arjuna is fully convinced of Lord's paramount position and proclaims him to be the Supreme Personality. He prays to Krishna to describe more of His divine glories which are like nectar to hear.","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd"}],"verses":[{"no":44,"id":"6e1b3253-f74a-468c-bac2-ac0c235e18fa","body":"उत्सन्नकुलधर्माणां मनुष्याणां जनार्दन।\n\nनरकेऽनियतं वासो भवतीत्यनुशुश्रुम।।1.44।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":45,"id":"86bb76ea-6382-4ff6-afc7-59738e97e2e8","body":"अहो बत महत्पापं कर्तुं व्यवसिता वयम्।\n\nयद्राज्यसुखलोभेन हन्तुं स्वजनमुद्यताः।।1.45।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":46,"id":"1e3525e7-2061-4a43-9e44-172765934444","body":"यदि मामप्रतीकारमशस्त्रं शस्त्रपाणयः।\n\nधार्तराष्ट्रा रणे हन्युस्तन्मे क्षेमतरं भवेत्।।1.46।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":47,"id":"70f41097-a0ca-4b19-98ed-f8fac35139b3","body":"सञ्जय उवाच\n\nएवमुक्त्वाऽर्जुनः संख्ये रथोपस्थ उपाविशत्।\n\nविसृज्य सशरं चापं शोकसंविग्नमानसः।।1.47।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":1,"id":"1bb80ef8-6c85-4e81-8edc-5cb18bb64b74","body":"सञ्जय उवाच\n\nतं तथा कृपयाऽविष्टमश्रुपूर्णाकुलेक्षणम्।\n\nविषीदन्तमिदं वाक्यमुवाच मधुसूदनः।।2.1।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":2,"id":"9ec8cb9d-e772-4c05-b194-183f05b60812","body":"श्री भगवानुवाच\n\nकुतस्त्वा कश्मलमिदं विषमे समुपस्थितम्।\n\nअनार्यजुष्टमस्वर्ग्यमकीर्तिकरमर्जुन।।2.2।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":3,"id":"87d25193-abb0-41ee-ab19-a79b1ec57228","body":"क्लैब्यं मा स्म गमः पार्थ नैतत्त्वय्युपपद्यते।\n\nक्षुद्रं हृदयदौर्बल्यं त्यक्त्वोत्तिष्ठ परन्तप।।2.3।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":4,"id":"c301851e-cba8-49dc-bbf3-c008b3a156fa","body":"अर्जुन उवाच\n\nकथं भीष्ममहं संख्ये द्रोणं च मधुसूदन।\n\nइषुभिः प्रतियोत्स्यामि पूजार्हावरिसूदन।।2.4।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":5,"id":"b161333f-2b9b-4daa-82e9-a9e9df78a5b4","body":"गुरूनहत्वा हि महानुभावान्\n\nश्रेयो भोक्तुं भैक्ष्यमपीह लोके।\n\nहत्वार्थकामांस्तु गुरूनिहैव\n\nभुञ्जीय भोगान् रुधिरप्रदिग्धान्।।2.5।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":6,"id":"b63d09bc-7031-437f-8a68-9a0e57afaa87","body":"न चैतद्विद्मः कतरन्नो गरीयो\n\nयद्वा जयेम यदि वा नो जयेयुः।\n\nयानेव हत्वा न जिजीविषाम\n\nस्तेऽवस्थिताः प्रमुखे धार्तराष्ट्राः।।2.6।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":7,"id":"ca237316-a195-4e07-b164-6d8115bdb966","body":"कार्पण्यदोषोपहतस्वभावः\n\nपृच्छामि त्वां धर्मसंमूढचेताः।\n\nयच्छ्रेयः स्यान्निश्िचतं ब्रूहि तन्मे\n\nशिष्यस्तेऽहं शाधि मां त्वां प्रपन्नम्।।2.7।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":8,"id":"5958a6b6-7882-4064-a8e9-045f791b7ed4","body":"न हि प्रपश्यामि ममापनुद्या\n\nद्यच्छोकमुच्छोषणमिन्द्रियाणाम्।\n\nअवाप्य भूमावसपत्नमृद्धम्\n\nराज्यं सुराणामपि चाधिपत्यम्।।2.8।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":9,"id":"eda561f5-8625-411b-9e00-1b9bb45063c5","body":"सञ्जय उवाच\n\nएवमुक्त्वा हृषीकेशं गुडाकेशः परन्तप।\n\nन योत्स्य इति गोविन्दमुक्त्वा तूष्णीं बभूव ह।।2.9।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":10,"id":"eabff6ac-9fec-41da-b7aa-3826adde8aaf","body":"तमुवाच हृषीकेशः प्रहसन्निव भारत।\n\nसेनयोरुभयोर्मध्ये विषीदन्तमिदं वचः।।2.10।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":11,"id":"46c758c4-8ae4-49c2-8c00-491d15b4810e","body":"श्री भगवानुवाच\n\nअशोच्यानन्वशोचस्त्वं प्रज्ञावादांश्च भाषसे।\n\nगतासूनगतासूंश्च नानुशोचन्ति पण्डिताः।।2.11।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":12,"id":"dfd98140-1c87-47fc-9732-3e7b49b9a436","body":"न त्वेवाहं जातु नासं न त्वं नेमे जनाधिपाः।\n\nन चैव न भविष्यामः सर्वे वयमतः परम्।।2.12।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":13,"id":"31ffc781-e002-4ce9-bfde-7a888dba87a2","body":"देहिनोऽस्मिन्यथा देहे कौमारं यौवनं जरा।\n\nतथा देहान्तरप्राप्तिर्धीरस्तत्र न मुह्यति।।2.13।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":14,"id":"cae1dee0-ea63-42d9-a5a0-3101eb77b76d","body":"मात्रास्पर्शास्तु कौन्तेय शीतोष्णसुखदुःखदाः।\n\nआगमापायिनोऽनित्यास्तांस्तितिक्षस्व भारत।।2.14।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":15,"id":"3765b3ba-df95-4c68-ac68-ebce6ada8da9","body":"यं हि न व्यथयन्त्येते पुरुषं पुरुषर्षभ।\n\nसमदुःखसुखं धीरं सोऽमृतत्वाय कल्पते।।2.15।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":16,"id":"8082cafc-5ac0-4900-b840-a529f94ab320","body":"नासतो विद्यते भावो नाभावो विद्यते सतः।\n\nउभयोरपि दृष्टोऽन्तस्त्वनयोस्तत्त्वदर्शिभिः।।2.16।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":17,"id":"f4b2bb0a-5e00-403c-b731-dd8231738d39","body":"अविनाशि तु तद्विद्धि येन सर्वमिदं ततम्।\n\nविनाशमव्ययस्यास्य न कश्चित् कर्तुमर्हति।।2.17।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":18,"id":"9a8d43d9-ec17-4e12-98fc-3f89e41a3085","body":"अन्तवन्त इमे देहा नित्यस्योक्ताः शरीरिणः।\n\nअनाशिनोऽप्रमेयस्य तस्माद्युध्यस्व भारत।।2.18।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":19,"id":"723eccb3-208d-4368-b8f9-04c2d1be9061","body":"य एनं वेत्ति हन्तारं यश्चैनं मन्यते हतम्।\n\nउभौ तौ न विजानीतो नायं हन्ति न हन्यते।।2.19।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":20,"id":"50a37211-f02c-4528-9467-20456eba8f86","body":"न जायते म्रियते वा कदाचि\n\nन्नायं भूत्वा भविता वा न भूयः।\n\nअजो नित्यः शाश्वतोऽयं पुराणो\n\nन हन्यते हन्यमाने शरीरे।।2.20।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":21,"id":"889d5d38-194b-4d17-afa3-44457f055775","body":"वेदाविनाशिनं नित्यं य एनमजमव्ययम्।\n\nकथं स पुरुषः पार्थ कं घातयति हन्ति कम्।।2.21।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":22,"id":"ea800e17-b4b4-4cab-8fe1-d0887aa01569","body":"वासांसि जीर्णानि यथा विहाय\n\nनवानि गृह्णाति नरोऽपराणि।\n\nतथा शरीराणि विहाय जीर्णा\n\nन्यन्यानि संयाति नवानि देही।।2.22।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":23,"id":"e71956e3-054d-42f1-bda2-e26dc4bcd083","body":"नैनं छिन्दन्ति शस्त्राणि नैनं दहति पावकः।\n\nन चैनं क्लेदयन्त्यापो न शोषयति मारुतः।।2.23।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":24,"id":"5fbdcd4a-a2a5-426d-9636-1e0f8fbb8357","body":"अच्छेद्योऽयमदाह्योऽयमक्लेद्योऽशोष्य एव च।\n\nनित्यः सर्वगतः स्थाणुरचलोऽयं सनातनः।।2.24।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":25,"id":"33b9aab2-28f1-4ebc-a83b-3d9c2660878f","body":"अव्यक्तोऽयमचिन्त्योऽयमविकार्योऽयमुच्यते।\n\nतस्मादेवं विदित्वैनं नानुशोचितुमर्हसि।।2.25।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":26,"id":"c951b729-3c2b-493b-9ff6-bcf45e566236","body":"अथ चैनं नित्यजातं नित्यं वा मन्यसे मृतम्।\n\nतथापि त्वं महाबाहो नैवं शोचितुमर्हसि।।2.26।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":27,"id":"7ff2614c-fcd5-4e82-822c-408555e1be48","body":"जातस्य हि ध्रुवो मृत्युर्ध्रुवं जन्म मृतस्य च।\n\nतस्मादपरिहार्येऽर्थे न त्वं शोचितुमर्हसि।।2.27।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":28,"id":"62996c92-a97d-498a-91c8-900760314fe1","body":"अव्यक्तादीनि भूतानि व्यक्तमध्यानि भारत।\n\nअव्यक्तनिधनान्येव तत्र का परिदेवना।।2.28।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":29,"id":"088e8d44-15d6-41c6-a6e6-bbbb38b132bb","body":"आश्चर्यवत्पश्यति कश्चिदेन\n\nमाश्चर्यवद्वदति तथैव चान्यः।\n\nआश्चर्यवच्चैनमन्यः श्रृणोति\n\nश्रुत्वाप्येनं वेद न चैव कश्चित्।।2.29।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":30,"id":"32ed8e4d-2414-408d-bde6-0d3e36c20859","body":"देही नित्यमवध्योऽयं देहे सर्वस्य भारत।\n\nतस्मात्सर्वाणि भूतानि न त्वं शोचितुमर्हसि।।2.30।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":31,"id":"86557322-7023-4d53-b8ad-6fed34f9cb75","body":"स्वधर्ममपि चावेक्ष्य न विकम्पितुमर्हसि।\n\nधर्म्याद्धि युद्धाछ्रेयोऽन्यत्क्षत्रियस्य न विद्यते।।2.31।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":32,"id":"a408014f-6645-4d18-bea7-257232c8b06b","body":"यदृच्छया चोपपन्नं स्वर्गद्वारमपावृतम्।\n\nसुखिनः क्षत्रियाः पार्थ लभन्ते युद्धमीदृशम्।।2.32।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":33,"id":"eef4e73b-1ce7-4905-9460-f24c50d18200","body":"अथ चैत्त्वमिमं धर्म्यं संग्रामं न करिष्यसि।\n\nततः स्वधर्मं कीर्तिं च हित्वा पापमवाप्स्यसि।।2.33।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":34,"id":"79749b71-c2f4-4159-aaf9-75564004a9ca","body":"अकीर्तिं चापि भूतानि कथयिष्यन्ति तेऽव्ययाम्।\n\nसंभावितस्य चाकीर्तिर्मरणादतिरिच्यते।।2.34।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":35,"id":"4bf155b8-fe6b-430a-ae24-2bdd6b47406b","body":"भयाद्रणादुपरतं मंस्यन्ते त्वां महारथाः।\n\nयेषां च त्वं बहुमतो भूत्वा यास्यसि लाघवम्।।2.35।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":36,"id":"d0f5d082-7f10-4440-b972-69236f0e1e05","body":"अवाच्यवादांश्च बहून् वदिष्यन्ति तवाहिताः।\n\nनिन्दन्तस्तव सामर्थ्यं ततो दुःखतरं नु किम्।।2.36।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":37,"id":"bcff51af-3113-45d1-8a85-cbf7f5e036ea","body":"हतो वा प्राप्स्यसि स्वर्गं जित्वा वा भोक्ष्यसे महीम्।\n\nतस्मादुत्तिष्ठ कौन्तेय युद्धाय कृतनिश्चयः।।2.37।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":38,"id":"facd98b5-2d2a-4a16-9842-5476e8e07ce5","body":"सुखदुःखे समे कृत्वा लाभालाभौ जयाजयौ।\n\nततो युद्धाय युज्यस्व नैवं पापमवाप्स्यसि।।2.38।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":39,"id":"c92c51c6-8e9a-4a1e-9c7e-80907a3410a0","body":"एषा तेऽभिहिता सांख्ये बुद्धिर्योगे त्विमां श्रृणु।\n\nबुद्ध्यायुक्तो यया पार्थ कर्मबन्धं प्रहास्यसि।।2.39।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":40,"id":"05881db0-585a-49ba-8955-1213855c06b4","body":"नेहाभिक्रमनाशोऽस्ति प्रत्यवायो न विद्यते।\n\nस्वल्पमप्यस्य धर्मस्य त्रायते महतो भयात्।।2.40।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":41,"id":"0e09b5cf-812b-470b-9ed5-e6393a7b7fec","body":"व्यवसायात्मिका बुद्धिरेकेह कुरुनन्दन।\n\nबहुशाखा ह्यनन्ताश्च बुद्धयोऽव्यवसायिनाम्।।2.41।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":42,"id":"a06dbdaf-1f5e-430c-a19f-5f8e32fa2d14","body":"यामिमां पुष्पितां वाचं प्रवदन्त्यविपश्चितः।\n\nवेदवादरताः पार्थ नान्यदस्तीति वादिनः।।2.42।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":43,"id":"1ae9f05f-f76f-49e7-9e10-8aa04ae8213d","body":"कामात्मानः स्वर्गपरा जन्मकर्मफलप्रदाम्।\n\nक्रियाविशेषबहुलां भोगैश्वर्यगतिं प्रति।।2.43।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":44,"id":"dab23ee9-e8ed-49a7-8a86-acb47f730636","body":"भोगैश्वर्यप्रसक्तानां तयापहृतचेतसाम्।\n\nव्यवसायात्मिका बुद्धिः समाधौ न विधीयते।।2.44।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":45,"id":"31818d76-d20b-4e76-b498-ff40292a7c13","body":"त्रैगुण्यविषया वेदा निस्त्रैगुण्यो भवार्जुन।\n\nनिर्द्वन्द्वो नित्यसत्त्वस्थो निर्योगक्षेम आत्मवान्।।2.45।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":46,"id":"3a1ccc95-b7c0-4e34-8e4c-b0cda8fffc72","body":"यावानर्थ उदपाने सर्वतः संप्लुतोदके।\n\nतावान्सर्वेषु वेदेषु ब्राह्मणस्य विजानतः।।2.46।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":47,"id":"01f5c04e-ee58-46e4-99b4-f79833ad7f6b","body":"कर्मण्येवाधिकारस्ते मा फलेषु कदाचन।\n\nमा कर्मफलहेतुर्भूर्मा ते सङ्गोऽस्त्वकर्मणि।।2.47।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":48,"id":"215978ea-c60c-432f-8988-45d943ef38f4","body":"योगस्थः कुरु कर्माणि सङ्गं त्यक्त्वा धनञ्जय।\n\nसिद्ध्यसिद्ध्योः समो भूत्वा समत्वं योग उच्यते।।2.48।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":49,"id":"c343170b-857c-4c59-8a60-da7cdad205d9","body":"दूरेण ह्यवरं कर्म बुद्धियोगाद्धनञ्जय।\n\nबुद्धौ शरणमन्विच्छ कृपणाः फलहेतवः।।2.49।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":50,"id":"772f6539-7a5d-4324-b674-375c73bfdbd8","body":"बुद्धियुक्तो जहातीह उभे सुकृतदुष्कृते।\n\nतस्माद्योगाय युज्यस्व योगः कर्मसु कौशलम्।।2.50।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":51,"id":"875c3239-80df-49ca-a0fd-2c81f252dff9","body":"कर्मजं बुद्धियुक्ता हि फलं त्यक्त्वा मनीषिणः।\n\nजन्मबन्धविनिर्मुक्ताः पदं गच्छन्त्यनामयम्।।2.51।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":52,"id":"d81a7991-7d8a-421e-b824-7b8a12b5ef39","body":"यदा ते मोहकलिलं बुद्धिर्व्यतितरिष्यति।\n\nतदा गन्तासि निर्वेदं श्रोतव्यस्य श्रुतस्य च।।2.52।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":53,"id":"e9a55b2e-eedb-4f70-948d-407d4a490708","body":"श्रुतिविप्रतिपन्ना ते यदा स्थास्यति निश्चला।\n\nसमाधावचला बुद्धिस्तदा योगमवाप्स्यसि।।2.53।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":54,"id":"19acf0c1-7d94-4961-bd51-f044adc71f21","body":"अर्जुन उवाच\n\nस्थितप्रज्ञस्य का भाषा समाधिस्थस्य केशव।\n\nस्थितधीः किं प्रभाषेत किमासीत व्रजेत किम्।।2.54।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":55,"id":"9551bcc9-7889-41fd-b0ba-13f3cd12311f","body":"श्री भगवानुवाच\n\nप्रजहाति यदा कामान् सर्वान् पार्थ मनोगतान्।\n\nआत्मन्येवात्मना तुष्टः स्थितप्रज्ञस्तदोच्यते।।2.55।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":56,"id":"25649f9b-473c-4a72-90c2-1453804b0200","body":"दुःखेष्वनुद्विग्नमनाः सुखेषु विगतस्पृहः।\n\nवीतरागभयक्रोधः स्थितधीर्मुनिरुच्यते।।2.56।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":57,"id":"4de26bd1-020b-4ecb-aae3-a07c382e465c","body":"यः सर्वत्रानभिस्नेहस्तत्तत्प्राप्य शुभाशुभम्।\n\nनाभिनन्दति न द्वेष्टि तस्य प्रज्ञा प्रतिष्ठिता।।2.57।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":58,"id":"a335f9dc-daaf-42df-b316-306f96a6f7e5","body":"यदा संहरते चायं कूर्मोऽङ्गानीव सर्वशः।\n\nइन्द्रियाणीन्द्रियार्थेभ्यस्तस्य प्रज्ञा प्रतिष्ठिता।।2.58।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":59,"id":"de2a7eec-09f3-4bae-96d0-6a20f4a7d908","body":"विषया विनिवर्तन्ते निराहारस्य देहिनः।\n\nरसवर्जं रसोऽप्यस्य परं दृष्ट्वा निवर्तते।।2.59।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":60,"id":"4663f778-e4b0-4ea3-a2ad-97cf6412d2f0","body":"यततो ह्यपि कौन्तेय पुरुषस्य विपश्चितः।\n\nइन्द्रियाणि प्रमाथीनि हरन्ति प्रसभं मनः।।2.60।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":61,"id":"8c5f81ce-e84e-4d61-8f88-14d474b19f52","body":"तानि सर्वाणि संयम्य युक्त आसीत मत्परः।\n\nवशे हि यस्येन्द्रियाणि तस्य प्रज्ञा प्रतिष्ठिता।।2.61।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":62,"id":"c28df07d-e8c1-40d7-9b32-def9acc360cd","body":"ध्यायतो विषयान्पुंसः सङ्गस्तेषूपजायते।\n\nसङ्गात् संजायते कामः कामात्क्रोधोऽभिजायते।।2.62।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":63,"id":"f35c969b-298a-4844-81c7-8c88d8d27a52","body":"क्रोधाद्भवति संमोहः संमोहात्स्मृतिविभ्रमः।\n\nस्मृतिभ्रंशाद् बुद्धिनाशो बुद्धिनाशात्प्रणश्यति।।2.63।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":64,"id":"5361ca6d-749d-4c73-b7b6-d452a271b200","body":"रागद्वेषवियुक्तैस्तु विषयानिन्द्रियैश्चरन्।\n\nआत्मवश्यैर्विधेयात्मा प्रसादमधिगच्छति।।2.64।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":65,"id":"de1e463d-4008-4bd5-bcf3-07a9c6dda480","body":"प्रसादे सर्वदुःखानां हानिरस्योपजायते।\n\nप्रसन्नचेतसो ह्याशु बुद्धिः पर्यवतिष्ठते।।2.65।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":66,"id":"544fda97-5d4e-4eab-92ce-85c5ed1026f8","body":"नास्ति बुद्धिरयुक्तस्य न चायुक्तस्य भावना।\n\nन चाभावयतः शान्तिरशान्तस्य कुतः सुखम्।।2.66।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":67,"id":"84c3de24-696d-4071-b4ac-9d1cbbd0519c","body":"इन्द्रियाणां हि चरतां यन्मनोऽनुविधीयते।\n\nतदस्य हरति प्रज्ञां वायुर्नावमिवाम्भसि।।2.67।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":68,"id":"44f670f1-42ff-4a72-ab1d-d9c25361e3f7","body":"तस्माद्यस्य महाबाहो निगृहीतानि सर्वशः।\n\nइन्द्रियाणीन्द्रियार्थेभ्यस्तस्य प्रज्ञा प्रतिष्ठिता।।2.68।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":69,"id":"74adab12-23a8-4ce6-88c6-6cf637593661","body":"या निशा सर्वभूतानां तस्यां जागर्ति संयमी।\n\nयस्यां जाग्रति भूतानि सा निशा पश्यतो मुनेः।।2.69।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":70,"id":"ff8ea330-1ff2-4911-bd53-6a79796034a1","body":"आपूर्यमाणमचलप्रतिष्ठं\n\nसमुद्रमापः प्रविशन्ति यद्वत्।\n\nतद्वत्कामा यं प्रविशन्ति सर्वे\n\nस शान्तिमाप्नोति न कामकामी।।2.70।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":71,"id":"ca186f52-3f9d-49a2-b70f-ae765718851e","body":"विहाय कामान्यः सर्वान्पुमांश्चरति निःस्पृहः।\n\nनिर्ममो निरहंकारः स शांतिमधिगच्छति।।2.71।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":72,"id":"eb4ab2d8-eaef-4658-8137-33b2f394ae6b","body":"एषा ब्राह्मी स्थितिः पार्थ नैनां प्राप्य विमुह्यति।\n\nस्थित्वाऽस्यामन्तकालेऽपि ब्रह्मनिर्वाणमृच्छति।।2.72।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2},{"no":1,"id":"54a97e96-e0e7-49cf-83bf-50cb860af78d","body":"अर्जुन उवाच\n\nज्यायसी चेत्कर्मणस्ते मता बुद्धिर्जनार्दन।\n\nतत्किं कर्मणि घोरे मां नियोजयसि केशव।।3.1।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":3},{"no":2,"id":"838eef05-201f-4ec6-bf5e-30064750c199","body":"व्यामिश्रेणेव वाक्येन बुद्धिं मोहयसीव मे।\n\nतदेकं वद निश्िचत्य येन श्रेयोऽहमाप्नुयाम्।।3.2।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":3},{"no":3,"id":"c746f7a6-21f4-4bb3-a0ee-0e4914b30f6e","body":"श्री भगवानुवाच\n\nलोकेऽस्मिन्द्विविधा निष्ठा पुरा प्रोक्ता मयानघ।\n\nज्ञानयोगेन सांख्यानां कर्मयोगेन योगिनाम्।।3.3।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":3},{"no":4,"id":"451f198d-986d-47b6-a0db-64157271e6c2","body":"न कर्मणामनारम्भान्नैष्कर्म्यं पुरुषोऽश्नुते।\n\nन च संन्यसनादेव सिद्धिं समधिगच्छति।।3.4।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":3},{"no":5,"id":"9bfc2f71-e081-47c4-be7a-1e112975088e","body":"न हि कश्िचत्क्षणमपि जातु तिष्ठत्यकर्मकृत्।\n\nकार्यते ह्यवशः कर्म सर्वः प्रकृतिजैर्गुणैः।।3.5।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":3},{"no":6,"id":"3ea9d3ac-b67d-464a-8373-0fc418ae42aa","body":"कर्मेन्द्रियाणि संयम्य य आस्ते मनसा स्मरन्।\n\nइन्द्रियार्थान्विमूढात्मा मिथ्याचारः स उच्यते।।3.6।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":3},{"no":7,"id":"f388d0ca-7e57-47a0-aff2-8ecf9e1ef62a","body":"यस्त्विन्द्रियाणि मनसा नियम्यारभतेऽर्जुन।\n\nकर्मेन्द्रियैः कर्मयोगमसक्तः स विशिष्यते।।3.7।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":3},{"no":8,"id":"507d6df0-cbc4-4348-8b54-aa36ad69560e","body":"नियतं कुरु कर्म त्वं कर्म ज्यायो ह्यकर्मणः।\n\nशरीरयात्रापि च ते न प्रसिद्ध्येदकर्मणः।।3.8।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":3},{"no":9,"id":"a174c005-9f70-466d-9cb3-c346b66a5d26","body":"यज्ञार्थात्कर्मणोऽन्यत्र लोकोऽयं कर्मबन्धनः।\n\nतदर्थं कर्म कौन्तेय मुक्तसंगः समाचर।।3.9।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":3},{"no":10,"id":"78f89757-95cc-496e-b3c8-01240faee877","body":"सहयज्ञाः प्रजाः सृष्ट्वा पुरोवाच प्रजापतिः।\n\nअनेन प्रसविष्यध्वमेष वोऽस्त्विष्टकामधुक्।।3.10।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":3},{"no":11,"id":"bc855f6d-86ae-4d59-9220-8ca4996c78fe","body":"देवान्भावयतानेन ते देवा भावयन्तु वः।\n\nपरस्परं भावयन्तः श्रेयः परमवाप्स्यथ।।3.11।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":3},{"no":12,"id":"bcb7f35c-9987-4be4-9ce8-6c2710c6403d","body":"इष्टान्भोगान्हि वो देवा दास्यन्ते यज्ञभाविताः।\n\nतैर्दत्तानप्रदायैभ्यो यो भुङ्क्ते स्तेन एव सः।।3.12।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":3},{"no":13,"id":"57287a81-3902-4aee-929c-6ef6c1a9c6fe","body":"यज्ञशिष्टाशिनः सन्तो मुच्यन्ते सर्वकिल्बिषैः।\n\nभुञ्जते ते त्वघं पापा ये पचन्त्यात्मकारणात्।।3.13।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":3},{"no":14,"id":"cd332274-315c-4a7c-b1c4-dcb7701fc0d7","body":"अन्नाद्भवन्ति भूतानि पर्जन्यादन्नसम्भवः।\n\nयज्ञाद्भवति पर्जन्यो यज्ञः कर्मसमुद्भवः।।3.14।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":3},{"no":15,"id":"52d0109c-a15f-4747-a605-526642629baf","body":"कर्म ब्रह्मोद्भवं विद्धि ब्रह्माक्षरसमुद्भवम्।\n\nतस्मात्सर्वगतं ब्रह्म नित्यं यज्ञे प्रतिष्ठितम्।।3.15।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":3},{"no":16,"id":"c5f5f431-7242-486e-a407-f9d1404a222a","body":"एवं प्रवर्तितं चक्रं नानुवर्तयतीह यः।\n\nअघायुरिन्द्रियारामो मोघं पार्थ स जीवति।।3.16।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":3},{"no":17,"id":"8aba569d-d881-42b0-ae26-947a721268ee","body":"यस्त्वात्मरतिरेव स्यादात्मतृप्तश्च मानवः।\n\nआत्मन्येव च सन्तुष्टस्तस्य कार्यं न विद्यते।।3.17।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":3},{"no":18,"id":"34b000eb-4080-4e31-b5ff-891531fff353","body":"नैव तस्य कृतेनार्थो नाकृतेनेह कश्चन।\n\nन चास्य सर्वभूतेषु कश्िचदर्थव्यपाश्रयः।।3.18।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":3},{"no":19,"id":"4508b82d-58a4-4401-8152-93a67ff25352","body":"तस्मादसक्तः सततं कार्यं कर्म समाचर।\n\nअसक्तो ह्याचरन्कर्म परमाप्नोति पूरुषः।।3.19।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":3},{"no":20,"id":"ea13fd9e-29a3-4364-926e-1e2c051041d1","body":"कर्मणैव हि संसिद्धिमास्थिता जनकादयः।\n\nलोकसंग्रहमेवापि संपश्यन्कर्तुमर्हसि।।3.20।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":3},{"no":21,"id":"97c760a7-84f3-4e8e-9aad-13ae7cce68f3","body":"यद्यदाचरति श्रेष्ठस्तत्तदेवेतरो जनः।\n\nस यत्प्रमाणं कुरुते लोकस्तदनुवर्तते।।3.21।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":3},{"no":22,"id":"9c792f17-4d95-4033-8e43-3fe3da28a83b","body":"न मे पार्थास्ति कर्तव्यं त्रिषु लोकेषु किञ्चन।\n\nनानवाप्तमवाप्तव्यं वर्त एव च कर्मणि।।3.22।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":3},{"no":23,"id":"1a718e36-b3a5-449d-991e-b402afc5aad0","body":"यदि ह्यहं न वर्तेयं जातु कर्मण्यतन्द्रितः।\n\nमम वर्त्मानुवर्तन्ते मनुष्याः पार्थ सर्वशः।।3.23।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":3},{"no":24,"id":"c15597eb-9f24-4511-9b92-1cdd2978a732","body":"उत्सीदेयुरिमे लोका न कुर्यां कर्म चेदहम्।\n\nसङ्करस्य च कर्ता स्यामुपहन्यामिमाः प्रजाः।।3.24।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":3},{"no":25,"id":"4fff95f1-484a-4ea3-8b24-35abff9cd9ba","body":"सक्ताः कर्मण्यविद्वांसो यथा कुर्वन्ति भारत।\n\nकुर्याद्विद्वांस्तथासक्तश्िचकीर्षुर्लोकसंग्रहम्।।3.25।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":3},{"no":26,"id":"aa4b0bf1-aca4-449f-a0dd-f665396d4c9b","body":"न बुद्धिभेदं जनयेदज्ञानां कर्मसङ्गिनाम्।\n\nजोषयेत्सर्वकर्माणि विद्वान् युक्तः समाचरन्।।3.26।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":3},{"no":27,"id":"1d839df1-ced2-447d-9101-0bdd9de8b7f8","body":"प्रकृतेः क्रियमाणानि गुणैः कर्माणि सर्वशः।\n\nअहङ्कारविमूढात्मा कर्ताऽहमिति मन्यते।।3.27।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":3},{"no":28,"id":"12a26036-1357-43cb-8dc3-6ab83c04da03","body":"तत्त्ववित्तु महाबाहो गुणकर्मविभागयोः।\n\nगुणा गुणेषु वर्तन्त इति मत्वा न सज्जते।।3.28।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":3},{"no":29,"id":"768d52f2-47f9-4b74-8fc7-5696e59b081d","body":"प्रकृतेर्गुणसम्मूढाः सज्जन्ते गुणकर्मसु।\n\nतानकृत्स्नविदो मन्दान्कृत्स्नविन्न विचालयेत्।।3.29।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":3},{"no":30,"id":"c0b95dbf-6fa2-46a6-b21c-cde2cd386542","body":"मयि सर्वाणि कर्माणि संन्यस्याध्यात्मचेतसा।\n\nनिराशीर्निर्ममो भूत्वा युध्यस्व विगतज्वरः।।3.30।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":3},{"no":31,"id":"df8b88dd-3ea2-42dd-b4db-d7894333c29c","body":"ये मे मतमिदं नित्यमनुतिष्ठन्ति मानवाः।\n\nश्रद्धावन्तोऽनसूयन्तो मुच्यन्ते तेऽपि कर्मभिः।।3.31।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":3},{"no":32,"id":"7fa7d5d5-3656-4d4b-863d-2363893f8591","body":"ये त्वेतदभ्यसूयन्तो नानुतिष्ठन्ति मे मतम्।\n\nसर्वज्ञानविमूढांस्तान्विद्धि नष्टानचेतसः।।3.32।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":3},{"no":33,"id":"3c20c222-5106-489e-b520-f8ffd28eb687","body":"सदृशं चेष्टते स्वस्याः प्रकृतेर्ज्ञानवानपि।\n\nप्रकृतिं यान्ति भूतानि निग्रहः किं करिष्यति।।3.33।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":3},{"no":34,"id":"105a0a44-43c0-43d3-a28c-c3ce7285f215","body":"इन्द्रियस्येन्द्रियस्यार्थे रागद्वेषौ व्यवस्थितौ।\n\nतयोर्न वशमागच्छेत्तौ ह्यस्य परिपन्थिनौ।।3.34।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":3},{"no":35,"id":"3f884721-4f23-4f42-923e-024889cfd107","body":"श्रेयान्स्वधर्मो विगुणः परधर्मात्स्वनुष्ठितात्।\n\nस्वधर्मे निधनं श्रेयः परधर्मो भयावहः।।3.35।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":3},{"no":36,"id":"c174d056-0e1f-4644-b2ce-dc70f25fef52","body":"अर्जुन उवाच\n\nअथ केन प्रयुक्तोऽयं पापं चरति पूरुषः।\n\nअनिच्छन्नपि वार्ष्णेय बलादिव नियोजितः।।3.36।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":3},{"no":37,"id":"8257fe4a-eae5-4f66-8ca0-9f2cf0a14ecf","body":"श्री भगवानुवाच\n\nकाम एष क्रोध एष रजोगुणसमुद्भवः।\n\nमहाशनो महापाप्मा विद्ध्येनमिह वैरिणम्।।3.37।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":3},{"no":38,"id":"7231cdf9-cd5c-4937-999c-1a13d87fdf4d","body":"धूमेनाव्रियते वह्निर्यथाऽऽदर्शो मलेन च।\n\nयथोल्बेनावृतो गर्भस्तथा तेनेदमावृतम्।।3.38।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":3},{"no":39,"id":"d39e0668-f680-45a2-be95-262dcb10c54e","body":"आवृतं ज्ञानमेतेन ज्ञानिनो नित्यवैरिणा।\n\nकामरूपेण कौन्तेय दुष्पूरेणानलेन च।।3.39।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":3},{"no":40,"id":"59818bb1-d7fd-478f-865f-077ba51f83eb","body":"इन्द्रियाणि मनो बुद्धिरस्याधिष्ठानमुच्यते।\n\nएतैर्विमोहयत्येष ज्ञानमावृत्य देहिनम्।।3.40।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":3},{"no":41,"id":"ea7e9c89-7510-4937-8960-08d2608dc3f3","body":"तस्मात्त्वमिन्द्रियाण्यादौ नियम्य भरतर्षभ।\n\nपाप्मानं प्रजहि ह्येनं ज्ञानविज्ञाननाशनम्।।3.41।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":3},{"no":42,"id":"93fa1b63-0793-4d36-808d-a3769eaf0177","body":"इन्द्रियाणि पराण्याहुरिन्द्रियेभ्यः परं मनः।\n\nमनसस्तु परा बुद्धिर्यो बुद्धेः परतस्तु सः।।3.42।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":3},{"no":43,"id":"0546742c-44dd-4392-991b-805bce9b07c0","body":"एवं बुद्धेः परं बुद्ध्वा संस्तभ्यात्मानमात्मना।\n\nजहि शत्रुं महाबाहो कामरूपं दुरासदम्।।3.43।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":3},{"no":1,"id":"cd1f57c5-73fa-410a-9406-e07dd36adec5","body":"श्री भगवानुवाच\n\nइमं विवस्वते योगं प्रोक्तवानहमव्ययम्।\n\nविवस्वान् मनवे प्राह मनुरिक्ष्वाकवेऽब्रवीत्।।4.1।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":4},{"no":2,"id":"cc633312-4550-4b01-b9ef-f65d91ca7757","body":"एवं परम्पराप्राप्तमिमं राजर्षयो विदुः।\n\nस कालेनेह महता योगो नष्टः परन्तप।।4.2।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":4},{"no":3,"id":"6d1bcb1d-f7e7-48a5-b632-b0fe6f19ee99","body":"स एवायं मया तेऽद्य योगः प्रोक्तः पुरातनः।\n\nभक्तोऽसि मे सखा चेति रहस्यं ह्येतदुत्तमम्।।4.3।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":4},{"no":4,"id":"5252850a-0909-4bba-b3f2-8b832d1e894e","body":"अर्जुन उवाच\n\nअपरं भवतो जन्म परं जन्म विवस्वतः।\n\nकथमेतद्विजानीयां त्वमादौ प्रोक्तवानिति।।4.4।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":4},{"no":5,"id":"40ea73f4-f710-41ff-a605-d27cd9e785ed","body":"श्री भगवानुवाच\n\nबहूनि मे व्यतीतानि जन्मानि तव चार्जुन।\n\nतान्यहं वेद सर्वाणि न त्वं वेत्थ परन्तप।।4.5।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":4},{"no":6,"id":"96ddd749-fe39-4bd7-9c11-aad8f85bf394","body":"अजोऽपि सन्नव्ययात्मा भूतानामीश्वरोऽपि सन्।\n\nप्रकृतिं स्वामधिष्ठाय संभवाम्यात्ममायया।।4.6।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":4},{"no":7,"id":"d3855be9-bb50-4fd6-8cb9-f574dcdb1066","body":"यदा यदा हि धर्मस्य ग्लानिर्भवति भारत।\n\nअभ्युत्थानमधर्मस्य तदाऽऽत्मानं सृजाम्यहम्।।4.7।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":4},{"no":8,"id":"17a05444-00cf-45e9-be1f-dd29bbd238f0","body":"परित्राणाय साधूनां विनाशाय च दुष्कृताम्।\n\nधर्मसंस्थापनार्थाय संभवामि युगे युगे।।4.8।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":4},{"no":9,"id":"ab1f957c-cc82-481b-90ef-cdcebe756dda","body":"जन्म कर्म च मे दिव्यमेवं यो वेत्ति तत्त्वतः।\n\nत्यक्त्वा देहं पुनर्जन्म नैति मामेति सोऽर्जुन।।4.9।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":4},{"no":10,"id":"0a3475e0-9cd9-4f92-b84c-7deed717ac98","body":"वीतरागभयक्रोधा मन्मया मामुपाश्रिताः।\n\nबहवो ज्ञानतपसा पूता मद्भावमागताः।।4.10।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":4},{"no":11,"id":"dffd78a2-8745-41bb-bfdf-bb264434dfd1","body":"ये यथा मां प्रपद्यन्ते तांस्तथैव भजाम्यहम्।\n\nमम वर्त्मानुवर्तन्ते मनुष्याः पार्थ सर्वशः।।4.11।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":4},{"no":12,"id":"6712c7e5-fcde-49cd-8e80-bb42c782e817","body":"काङ्क्षन्तः कर्मणां सिद्धिं यजन्त इह देवताः।\n\nक्षिप्रं हि मानुषे लोके सिद्धिर्भवति कर्मजा।।4.12।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":4},{"no":13,"id":"d444dc75-55a8-43bf-bb68-17aebd4ce361","body":"चातुर्वर्ण्यं मया सृष्टं गुणकर्मविभागशः।\n\nतस्य कर्तारमपि मां विद्ध्यकर्तारमव्ययम्।।4.13।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":4},{"no":14,"id":"69818848-a6b3-4aee-a556-b5eb66d955ba","body":"न मां कर्माणि लिम्पन्ति न मे कर्मफले स्पृहा।\n\nइति मां योऽभिजानाति कर्मभिर्न स बध्यते।।4.14।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":4},{"no":15,"id":"3421ce94-b6a7-4f1e-96c8-6dd0df9fba8c","body":"एवं ज्ञात्वा कृतं कर्म पूर्वैरपि मुमुक्षुभिः।\n\nकुरु कर्मैव तस्मात्त्वं पूर्वैः पूर्वतरं कृतम्।।4.15।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":4},{"no":16,"id":"04ec7222-9859-4a18-8af0-225872332e59","body":"किं कर्म किमकर्मेति कवयोऽप्यत्र मोहिताः।\n\nतत्ते कर्म प्रवक्ष्यामि यज्ज्ञात्वा मोक्ष्यसेऽशुभात्।।4.16।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":4},{"no":17,"id":"84cdbe27-8222-4017-abb5-2b363765a031","body":"कर्मणो ह्यपि बोद्धव्यं बोद्धव्यं च विकर्मणः।\n\nअकर्मणश्च बोद्धव्यं गहना कर्मणो गतिः।।4.17।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":4},{"no":18,"id":"8ffd9d99-1499-4f73-9647-b22bce8f7321","body":"कर्मण्यकर्म यः पश्येदकर्मणि च कर्म यः।\n\nस बुद्धिमान् मनुष्येषु स युक्तः कृत्स्नकर्मकृत्।।4.18।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":4},{"no":19,"id":"b788536c-e3af-441c-83ef-65cb892692b5","body":"यस्य सर्वे समारम्भाः कामसङ्कल्पवर्जिताः।\n\nज्ञानाग्निदग्धकर्माणं तमाहुः पण्डितं बुधाः।।4.19।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":4},{"no":20,"id":"fe122d81-a6b5-4399-81de-82daf27b83ea","body":"त्यक्त्वा कर्मफलासङ्गं नित्यतृप्तो निराश्रयः।\n\nकर्मण्यभिप्रवृत्तोऽपि नैव किञ्चित्करोति सः।।4.20।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":4},{"no":21,"id":"6ff25359-2fc4-4207-8ffd-a80d1b3711e7","body":"निराशीर्यतचित्तात्मा त्यक्तसर्वपरिग्रहः।\n\nशारीरं केवलं कर्म कुर्वन्नाप्नोति किल्बिषम्।।4.21।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":4},{"no":22,"id":"f6823095-54cb-45a2-9abf-3351aadf257d","body":"यदृच्छालाभसन्तुष्टो द्वन्द्वातीतो विमत्सरः।\n\nसमः सिद्धावसिद्धौ च कृत्वापि न निबध्यते।।4.22।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":4},{"no":23,"id":"903e032d-b374-4db1-995b-b7a3bffbeb12","body":"गतसङ्गस्य मुक्तस्य ज्ञानावस्थितचेतसः।\n\nयज्ञायाचरतः कर्म समग्रं प्रविलीयते।।4.23।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":4},{"no":24,"id":"c3c65d77-38fe-4749-9029-de8bcb539ef2","body":"ब्रह्मार्पणं ब्रह्महविर्ब्रह्माग्नौ ब्रह्मणा हुतम्।\n\nब्रह्मैव तेन गन्तव्यं ब्रह्मकर्मसमाधिना।।4.24।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":4},{"no":25,"id":"a9ff04e0-0232-46a1-a5aa-2f363aa42741","body":"दैवमेवापरे यज्ञं योगिनः पर्युपासते।\n\nब्रह्माग्नावपरे यज्ञं यज्ञेनैवोपजुह्वति।।4.25।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":4},{"no":26,"id":"b48c00df-3a32-4c24-97cc-1d1d09172ca6","body":"श्रोत्रादीनीन्द्रियाण्यन्ये संयमाग्निषु जुह्वति।\n\nशब्दादीन्विषयानन्य इन्द्रियाग्निषु जुह्वति।।4.26।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":4},{"no":27,"id":"ef314589-2bd8-4db5-87ca-b5450d985a95","body":"सर्वाणीन्द्रियकर्माणि प्राणकर्माणि चापरे।\n\nआत्मसंयमयोगाग्नौ जुह्वति ज्ञानदीपिते।।4.27।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":4},{"no":28,"id":"cdb6c206-ba25-41d9-b4d3-d1725c82e1ae","body":"द्रव्ययज्ञास्तपोयज्ञा योगयज्ञास्तथापरे।\n\nस्वाध्यायज्ञानयज्ञाश्च यतयः संशितव्रताः।।4.28।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":4},{"no":29,"id":"e5cd6c7c-6b7f-4f49-bb04-d65e6ddae523","body":"अपाने जुह्वति प्राण प्राणेऽपानं तथाऽपरे।\n\nप्राणापानगती रुद्ध्वा प्राणायामपरायणाः।।4.29।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":4},{"no":30,"id":"501aff1e-6506-4191-8098-506cb57298b5","body":"अपरे नियताहाराः प्राणान्प्राणेषु जुह्वति।\n\nसर्वेऽप्येते यज्ञविदो यज्ञक्षपितकल्मषाः।।4.30।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":4},{"no":31,"id":"d40cf984-043c-439c-a3b2-741284d6a66b","body":"यज्ञशिष्टामृतभुजो यान्ति ब्रह्म सनातनम्।\n\nनायं लोकोऽस्त्ययज्ञस्य कुतो़ऽन्यः कुरुसत्तम।।4.31।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":4},{"no":32,"id":"3a801186-dea7-4172-83c3-07b204a93529","body":"एवं बहुविधा यज्ञा वितता ब्रह्मणो मुखे।\n\nकर्मजान्विद्धि तान्सर्वानेवं ज्ञात्वा विमोक्ष्यसे।।4.32।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":4},{"no":33,"id":"0b4654ed-5b17-44c3-969b-30db6b635418","body":"श्रेयान्द्रव्यमयाद्यज्ञाज्ज्ञानयज्ञः परन्तप।\n\nसर्वं कर्माखिलं पार्थ ज्ञाने परिसमाप्यते।।4.33।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":4},{"no":34,"id":"aaec5771-4324-49f3-bbbd-2f38d89d1474","body":"तद्विद्धि प्रणिपातेन परिप्रश्नेन सेवया।\n\nउपदेक्ष्यन्ति ते ज्ञानं ज्ञानिनस्तत्त्वदर्शिनः।।4.34।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":4},{"no":35,"id":"bb0aa388-97b8-4eef-9481-63ecaed9475c","body":"यज्ज्ञात्वा न पुनर्मोहमेवं यास्यसि पाण्डव।\n\nयेन भूतान्यशेषेण द्रक्ष्यस्यात्मन्यथो मयि।।4.35।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":4},{"no":36,"id":"6838eed2-09fe-449c-b0a6-aebca8dbc77c","body":"अपि चेदसि पापेभ्यः सर्वेभ्यः पापकृत्तमः।\n\nसर्वं ज्ञानप्लवेनैव वृजिनं सन्तरिष्यसि।।4.36।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":4},{"no":37,"id":"f9a44d02-4281-4637-89d3-f059446cbfef","body":"यथैधांसि समिद्धोऽग्निर्भस्मसात्कुरुतेऽर्जुन।\n\nज्ञानाग्निः सर्वकर्माणि भस्मसात्कुरुते तथा।।4.37।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":4},{"no":38,"id":"1536cb4c-e506-46f2-9927-26e13afadf9d","body":"न हि ज्ञानेन सदृशं पवित्रमिह विद्यते।\n\nतत्स्वयं योगसंसिद्धः कालेनात्मनि विन्दति।।4.38।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":4},{"no":39,"id":"978fd8fd-7769-4a2a-a523-966ff9816e5a","body":"श्रद्धावाँल्लभते ज्ञानं तत्परः संयतेन्द्रियः।\n\nज्ञानं लब्ध्वा परां शान्तिमचिरेणाधिगच्छति।।4.39।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":4},{"no":40,"id":"21a64351-3ae7-4087-a9aa-27c5fc331207","body":"अज्ञश्चाश्रद्दधानश्च संशयात्मा विनश्यति।\n\nनायं लोकोऽस्ति न परो न सुखं संशयात्मनः।।4.40।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":4},{"no":41,"id":"50606f91-4c84-4c4b-9fca-aab0eb2e0897","body":"योगसंन्यस्तकर्माणं ज्ञानसंछिन्नसंशयम्।\n\nआत्मवन्तं न कर्माणि निबध्नन्ति धनञ्जय।।4.41।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":4},{"no":42,"id":"b6a6a257-9e36-4de4-8a74-26e85f26e596","body":"तस्मादज्ञानसंभूतं हृत्स्थं ज्ञानासिनाऽऽत्मनः।\n\nछित्त्वैनं संशयं योगमातिष्ठोत्तिष्ठ भारत।।4.42।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":4},{"no":1,"id":"cb7c878e-341a-4bf1-a556-4ffdfb91a397","body":"अर्जुन उवाच\n\nसंन्यासं कर्मणां कृष्ण पुनर्योगं च शंससि।\n\nयच्छ्रेय एतयोरेकं तन्मे ब्रूहि सुनिश्िचतम्।।5.1।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":5},{"no":2,"id":"3be4adca-e113-4178-a6a1-67555eb15771","body":"श्री भगवानुवाच\n\nसंन्यासः कर्मयोगश्च निःश्रेयसकरावुभौ।\n\nतयोस्तु कर्मसंन्यासात्कर्मयोगो विशिष्यते।।5.2।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":5},{"no":3,"id":"4e3cace2-b6bf-4720-ad28-8d5e327f189d","body":"ज्ञेयः स नित्यसंन्यासी यो न द्वेष्टि न काङ्क्षति।\n\nनिर्द्वन्द्वो हि महाबाहो सुखं बन्धात्प्रमुच्यते।।5.3।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":5},{"no":4,"id":"ad479c8a-b83c-4798-ab53-7e812122c86e","body":"सांख्ययोगौ पृथग्बालाः प्रवदन्ति न पण्डिताः।\n\nएकमप्यास्थितः सम्यगुभयोर्विन्दते फलम्।।5.4।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":5},{"no":5,"id":"45132f52-d473-4e72-9127-7f4b965b9ec5","body":"यत्सांख्यैः प्राप्यते स्थानं तद्योगैरपि गम्यते।\n\nएकं सांख्यं च योगं च यः पश्यति स पश्यति।।5.5।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":5},{"no":6,"id":"a76b3325-e7c7-42f9-a336-3456585aded2","body":"संन्यासस्तु महाबाहो दुःखमाप्तुमयोगतः।\n\nयोगयुक्तो मुनिर्ब्रह्म नचिरेणाधिगच्छति।।5.6।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":5},{"no":7,"id":"92cfad7d-d41e-4d25-943a-100ec7e140b6","body":"योगयुक्तो विशुद्धात्मा विजितात्मा जितेन्द्रियः।\n\nसर्वभूतात्मभूतात्मा कुर्वन्नपि न लिप्यते।।5.7।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":5},{"no":8,"id":"2ed8882b-92da-41e5-8dc8-46c1e1323fe8","body":"नैव किंचित्करोमीति युक्तो मन्येत तत्त्ववित्।\n\nपश्यन् श्रृणवन्स्पृशञ्जिघ्रन्नश्नन्गच्छन्स्वपन् श्वसन्।।5.8।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":5},{"no":9,"id":"54ae2801-6adf-4b57-a257-2cbcdc930886","body":"प्रलपन्विसृजन्गृह्णन्नुन्मिषन्निमिषन्नपि।\n\nइन्द्रियाणीन्द्रियार्थेषु वर्तन्त इति धारयन्।।5.9।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":5},{"no":10,"id":"1a9c7852-9d67-4767-b517-617c3bb531a3","body":"ब्रह्मण्याधाय कर्माणि सङ्गं त्यक्त्वा करोति यः।\n\nलिप्यते न स पापेन पद्मपत्रमिवाम्भसा।।5.10।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":5},{"no":11,"id":"0ac470cf-b2e7-47f1-9c0e-b42a82354a64","body":"कायेन मनसा बुद्ध्या केवलैरिन्द्रियैरपि।\n\nयोगिनः कर्म कुर्वन्ति सङ्गं त्यक्त्वाऽऽत्मशुद्धये।।5.11।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":5},{"no":12,"id":"eb1089eb-ba46-4bc9-b551-2abaaea82b55","body":"युक्तः कर्मफलं त्यक्त्वा शान्तिमाप्नोति नैष्ठिकीम्।\n\nअयुक्तः कामकारेण फले सक्तो निबध्यते।।5.12।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":5},{"no":13,"id":"b5ad1ae5-dc3c-4ef6-8bae-f066db79aa34","body":"सर्वकर्माणि मनसा संन्यस्यास्ते सुखं वशी।\n\nनवद्वारे पुरे देही नैव कुर्वन्न कारयन्।।5.13।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":5},{"no":14,"id":"03e32632-6cac-40ac-8687-5dfb566297c1","body":"न कर्तृत्वं न कर्माणि लोकस्य सृजति प्रभुः।\n\nन कर्मफलसंयोगं स्वभावस्तु प्रवर्तते।।5.14।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":5},{"no":15,"id":"f8e65456-9fa2-4b39-8dd4-8223052e71d8","body":"नादत्ते कस्यचित्पापं न चैव सुकृतं विभुः।\n\nअज्ञानेनावृतं ज्ञानं तेन मुह्यन्ति जन्तवः।।5.15।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":5},{"no":16,"id":"ba719670-bc57-417b-bb60-ae7677ad8c1b","body":"ज्ञानेन तु तदज्ञानं येषां नाशितमात्मनः।\n\nतेषामादित्यवज्ज्ञानं प्रकाशयति तत्परम्।।5.16।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":5},{"no":17,"id":"582b9a3a-a381-4ddd-9392-af400fe26b76","body":"तद्बुद्धयस्तदात्मानस्तन्निष्ठास्तत्परायणाः।\n\nगच्छन्त्यपुनरावृत्तिं ज्ञाननिर्धूतकल्मषाः।।5.17।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":5},{"no":18,"id":"d9b4ce2a-cbd4-4d1b-a59c-faef51264759","body":"विद्याविनयसंपन्ने ब्राह्मणे गवि हस्तिनि।\n\nशुनि चैव श्वपाके च पण्डिताः समदर्शिनः।।5.18।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":5},{"no":19,"id":"bc26c24a-adb8-42fe-a79f-e9f27b8494c1","body":"इहैव तैर्जितः सर्गो येषां साम्ये स्थितं मनः।\n\nनिर्दोषं हि समं ब्रह्म तस्माद्ब्रह्मणि ते स्थिताः।।5.19।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":5},{"no":20,"id":"973a41e2-9761-4e38-9ad0-d3b46a421fa3","body":"न प्रहृष्येत्प्रियं प्राप्य नोद्विजेत्प्राप्य चाप्रियम्।\n\nस्थिरबुद्धिरसम्मूढो ब्रह्मविद्ब्रह्मणि स्थितः।।5.20।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":5},{"no":21,"id":"f17b58e5-3907-4378-962f-58a5147a29f7","body":"बाह्यस्पर्शेष्वसक्तात्मा विन्दत्यात्मनि यत्सुखम्।\n\nस ब्रह्मयोगयुक्तात्मा सुखमक्षयमश्नुते।।5.21।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":5},{"no":22,"id":"354b25b8-d37f-4ab4-9f80-08130561fef4","body":"ये हि संस्पर्शजा भोगा दुःखयोनय एव ते।\n\nआद्यन्तवन्तः कौन्तेय न तेषु रमते बुधः।।5.22।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":5},{"no":23,"id":"eb4681af-f393-4d6b-a7e1-fc3199b5605e","body":"शक्नोतीहैव यः सोढुं प्राक्शरीरविमोक्षणात्।\n\nकामक्रोधोद्भवं वेगं स युक्तः स सुखी नरः।।5.23।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":5},{"no":24,"id":"a3613543-6d57-4597-871e-7d1ddaf02726","body":"योऽन्तःसुखोऽन्तरारामस्तथान्तर्ज्योतिरेव यः।\n\nस योगी ब्रह्मनिर्वाणं ब्रह्मभूतोऽधिगच्छति।।5.24।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":5},{"no":25,"id":"682f785b-07ca-4b46-949d-be41d2f33d73","body":"लभन्ते ब्रह्मनिर्वाणमृषयः क्षीणकल्मषाः।\n\nछिन्नद्वैधा यतात्मानः सर्वभूतहिते रताः।।5.25।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":5},{"no":26,"id":"b887f7f1-111b-4838-a5ce-d0d2ae1a2574","body":"कामक्रोधवियुक्तानां यतीनां यतचेतसाम्।\n\nअभितो ब्रह्मनिर्वाणं वर्तते विदितात्मनाम्।।5.26।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":5},{"no":27,"id":"9af30add-37cd-4d48-89e5-1333fd0d6c58","body":"स्पर्शान्कृत्वा बहिर्बाह्यांश्चक्षुश्चैवान्तरे भ्रुवोः।\n\nप्राणापानौ समौ कृत्वा नासाभ्यन्तरचारिणौ।।5.27।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":5},{"no":28,"id":"edf8defd-eb8c-4faf-b768-5b419bde17e3","body":"यतेन्द्रियमनोबुद्धिर्मुनिर्मोक्षपरायणः।\n\nविगतेच्छाभयक्रोधो यः सदा मुक्त एव सः।।5.28।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":5},{"no":29,"id":"b468297f-7c4c-4836-b5f3-669a6c7603f9","body":"भोक्तारं यज्ञतपसां सर्वलोकमहेश्वरम्।\n\nसुहृदं सर्वभूतानां ज्ञात्वा मां शान्तिमृच्छति।।5.29।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":5},{"no":1,"id":"fcb13b11-b642-479f-a62b-94bbe96d93df","body":"श्री भगवानुवाच\n\nअनाश्रितः कर्मफलं कार्यं कर्म करोति यः।\n\nस संन्यासी च योगी च न निरग्निर्न चाक्रियः।।6.1।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":2,"id":"657a682e-efd6-48bb-a96f-9a04053e9f27","body":"यं संन्यासमिति प्राहुर्योगं तं विद्धि पाण्डव।\n\nन ह्यसंन्यस्तसङ्कल्पो योगी भवति कश्चन।।6.2।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":3,"id":"ec4c44be-65e9-4df9-9ffc-97a7af20dbf9","body":"आरुरुक्षोर्मुनेर्योगं कर्म कारणमुच्यते।\n\nयोगारूढस्य तस्यैव शमः कारणमुच्यते।।6.3।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":4,"id":"e8ee6511-91cd-476f-b895-43a2fc62621e","body":"यदा हि नेन्द्रियार्थेषु न कर्मस्वनुषज्जते।\n\nसर्वसङ्कल्पसंन्यासी योगारूढस्तदोच्यते।।6.4।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":5,"id":"e8cf25a3-2068-408e-8ea0-4c0c59f855b4","body":"उद्धरेदात्मनाऽऽत्मानं नात्मानमवसादयेत्।\n\nआत्मैव ह्यात्मनो बन्धुरात्मैव रिपुरात्मनः।।6.5।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":6,"id":"26ea3724-f3e2-4764-9a4e-9f024857f944","body":"बन्धुरात्माऽऽत्मनस्तस्य येनात्मैवात्मना जितः।\n\nअनात्मनस्तु शत्रुत्वे वर्तेतात्मैव शत्रुवत्।।6.6।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":7,"id":"51a7a326-f481-47d7-bbd3-234c3b84f09b","body":"जितात्मनः प्रशान्तस्य परमात्मा समाहितः।\n\nशीतोष्णसुखदुःखेषु तथा मानापमानयोः।।6.7।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":8,"id":"f2b98523-3018-49aa-b53b-e2951cf7eeaf","body":"ज्ञानविज्ञानतृप्तात्मा कूटस्थो विजितेन्द्रियः।\n\nयुक्त इत्युच्यते योगी समलोष्टाश्मकाञ्चनः।।6.8।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":9,"id":"19aad0dc-9c17-4eda-a9bd-9df65e1a6604","body":"सुहृन्मित्रार्युदासीनमध्यस्थद्वेष्यबन्धुषु।\n\nसाधुष्वपि च पापेषु समबुद्धिर्विशिष्यते।।6.9।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":10,"id":"5a800973-f8c0-4a5c-abad-0e82597eb70f","body":"योगी युञ्जीत सततमात्मानं रहसि स्थितः।\n\nएकाकी यतचित्तात्मा निराशीरपरिग्रहः।।6.10।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":11,"id":"0e78455e-179e-46fe-9a86-02071b15ff95","body":"शुचौ देशे प्रतिष्ठाप्य स्थिरमासनमात्मनः।\n\nनात्युच्छ्रितं नातिनीचं चैलाजिनकुशोत्तरम्।।6.11।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":12,"id":"bec2e641-e571-4268-a870-0cfb7e5ad2d3","body":"तत्रैकाग्रं मनः कृत्वा यतचित्तेन्द्रियक्रियः।\n\nउपविश्यासने युञ्ज्याद्योगमात्मविशुद्धये।।6.12।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":13,"id":"8bb9bf96-0ee9-4346-8585-ed090ec19f80","body":"समं कायशिरोग्रीवं धारयन्नचलं स्थिरः।\n\nसंप्रेक्ष्य नासिकाग्रं स्वं दिशश्चानवलोकयन्।।6.13।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":14,"id":"c8e21a31-522c-4db4-b470-c5b6532cd014","body":"प्रशान्तात्मा विगतभीर्ब्रह्मचारिव्रते स्थितः।\n\nमनः संयम्य मच्चित्तो युक्त आसीत मत्परः।।6.14।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":15,"id":"7dff1043-9445-4baa-ae38-60f4ce790bdc","body":"युञ्जन्नेवं सदाऽऽत्मानं योगी नियतमानसः।\n\nशान्तिं निर्वाणपरमां मत्संस्थामधिगच्छति।।6.15।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":16,"id":"db53a971-fcee-4b91-83eb-d8cfe7f60268","body":"नात्यश्नतस्तु योगोऽस्ति न चैकान्तमनश्नतः।\n\nन चातिस्वप्नशीलस्य जाग्रतो नैव चार्जुन।।6.16।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":17,"id":"8ad70b0d-1179-49bb-8093-9c2f368ba275","body":"युक्ताहारविहारस्य युक्तचेष्टस्य कर्मसु।\n\nयुक्तस्वप्नावबोधस्य योगो भवति दुःखहा।।6.17।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":18,"id":"589ead33-2ed0-4646-9e46-6696f4651fb5","body":"यदा विनियतं चित्तमात्मन्येवावतिष्ठते।\n\nनिःस्पृहः सर्वकामेभ्यो युक्त इत्युच्यते तदा।।6.18।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":19,"id":"ca3b3991-e41a-4710-9c56-52f1966ba683","body":"यथा दीपो निवातस्थो नेङ्गते सोपमा स्मृता।\n\nयोगिनो यतचित्तस्य युञ्जतो योगमात्मनः।।6.19।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":20,"id":"7c86903c-8d2b-4e69-8605-e2f35b3cde6a","body":"यत्रोपरमते चित्तं निरुद्धं योगसेवया।\n\nयत्र चैवात्मनाऽऽत्मानं पश्यन्नात्मनि तुष्यति।।6.20।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":21,"id":"97a3284e-baed-45bb-9df6-9e35803408d6","body":"सुखमात्यन्तिकं यत्तद्बुद्धिग्राह्यमतीन्द्रियम्।\n\nवेत्ति यत्र न चैवायं स्थितश्चलति तत्त्वतः।।6.21।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":22,"id":"fa21237a-5903-4d09-916f-c57eae10392a","body":"यं लब्ध्वा चापरं लाभं मन्यते नाधिकं ततः।\n\nयस्मिन्स्थितो न दुःखेन गुरुणापि विचाल्यते।।6.22।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":23,"id":"2be916b2-e07a-4bbd-93ba-c461daddf57d","body":"तं विद्याद् दुःखसंयोगवियोगं योगसंज्ञितम्।\n\nस निश्चयेन योक्तव्यो योगोऽनिर्विण्णचेतसा।।6.23।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":24,"id":"6e950f8c-2433-4534-9483-df4ec0b055c2","body":"सङ्कल्पप्रभवान्कामांस्त्यक्त्वा सर्वानशेषतः।\n\nमनसैवेन्द्रियग्रामं विनियम्य समन्ततः।।6.24।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":25,"id":"1099dbbb-1cea-43ab-abd9-ce0f15f6937c","body":"शनैः शनैरुपरमेद् बुद्ध्या धृतिगृहीतया।\n\nआत्मसंस्थं मनः कृत्वा न किञ्चिदपि चिन्तयेत्।।6.25।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":26,"id":"f71ce6fa-c0bd-4602-bec2-a52f4cfabdea","body":"यतो यतो निश्चरति मनश्चञ्चलमस्थिरम्।\n\nततस्ततो नियम्यैतदात्मन्येव वशं नयेत्।।6.26।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":27,"id":"4fb50443-2989-4536-a761-25e0d732a55c","body":"प्रशान्तमनसं ह्येनं योगिनं सुखमुत्तमम्।\n\nउपैति शान्तरजसं ब्रह्मभूतमकल्मषम्।।6.27।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":28,"id":"ad4ef8e9-f824-42e6-91c3-c9472b175bf0","body":"युञ्जन्नेवं सदाऽऽत्मानं योगी विगतकल्मषः।\n\nसुखेन ब्रह्मसंस्पर्शमत्यन्तं सुखमश्नुते।।6.28।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":29,"id":"f1f00d14-f79e-4a52-bdb3-6dbd6e8d375f","body":"सर्वभूतस्थमात्मानं सर्वभूतानि चात्मनि।\n\nईक्षते योगयुक्तात्मा सर्वत्र समदर्शनः।।6.29।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":30,"id":"94965602-f35a-485a-b556-5960c474d2f2","body":"यो मां पश्यति सर्वत्र सर्वं च मयि पश्यति।\n\nतस्याहं न प्रणश्यामि स च मे न प्रणश्यति।।6.30।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":31,"id":"aa04fb31-ac5a-44b4-a807-0002d9850935","body":"सर्वभूतस्थितं यो मां भजत्येकत्वमास्थितः।\n\nसर्वथा वर्तमानोऽपि स योगी मयि वर्तते।।6.31।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":32,"id":"e9a79307-7a8d-45d9-b3d2-48cd5eb6aa0e","body":"आत्मौपम्येन सर्वत्र समं पश्यति योऽर्जुन।\n\nसुखं वा यदि वा दुःखं सः योगी परमो मतः।।6.32।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":33,"id":"976684a1-7aba-4dc6-9993-3ced22ef9a90","body":"अर्जुन उवाच\n\nयोऽयं योगस्त्वया प्रोक्तः साम्येन मधुसूदन।\n\nएतस्याहं न पश्यामि चञ्चलत्वात् स्थितिं स्थिराम्।।6.33।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":34,"id":"88ab628d-3773-41e6-9d3e-1b6ff2c56523","body":"चञ्चलं हि मनः कृष्ण प्रमाथि बलवद्दृढम्।\n\nतस्याहं निग्रहं मन्ये वायोरिव सुदुष्करम्।।6.34।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":35,"id":"fdd34ce5-b3d6-43bc-b02d-b32fc4d6bc03","body":"श्री भगवानुवाच\n\nअसंशयं महाबाहो मनो दुर्निग्रहं चलं।\n\nअभ्यासेन तु कौन्तेय वैराग्येण च गृह्यते।।6.35।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":36,"id":"8aaaf597-a1c0-44ce-809a-11e1d5692b63","body":"असंयतात्मना योगो दुष्प्राप इति मे मतिः।\n\nवश्यात्मना तु यतता शक्योऽवाप्तुमुपायतः।।6.36।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":37,"id":"7f8da204-0f83-4977-94f8-698fa457396c","body":"अर्जुन उवाच\n\nअयतिः श्रद्धयोपेतो योगाच्चलितमानसः।\n\nअप्राप्य योगसंसिद्धिं कां गतिं कृष्ण गच्छति।।6.37।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":38,"id":"1d334ef5-ff7a-495b-9de8-2f0ae554647a","body":"कच्चिन्नोभयविभ्रष्टश्छिन्नाभ्रमिव नश्यति।\n\nअप्रतिष्ठो महाबाहो विमूढो ब्रह्मणः पथि।।6.38।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":39,"id":"a4c77334-7217-4801-ac85-64fa6c3cf844","body":"एतन्मे संशयं कृष्ण छेत्तुमर्हस्यशेषतः।\n\nत्वदन्यः संशयस्यास्य छेत्ता न ह्युपपद्यते।।6.39।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":40,"id":"b7b73288-fc34-427f-a20f-d67f629c1965","body":"श्री भगवानुवाच\n\nपार्थ नैवेह नामुत्र विनाशस्तस्य विद्यते।\n\nनहि कल्याणकृत्कश्िचद्दुर्गतिं तात गच्छति।।6.40।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":41,"id":"d61d1759-7549-43ac-8499-5d00b107e514","body":"प्राप्य पुण्यकृतां लोकानुषित्वा शाश्वतीः समाः।\n\nशुचीनां श्रीमतां गेहे योगभ्रष्टोऽभिजायते।।6.41।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":42,"id":"277cc25b-93df-4ac1-a87b-069e76f7b7d5","body":"अथवा योगिनामेव कुले भवति धीमताम्।\n\nएतद्धि दुर्लभतरं लोके जन्म यदीदृशम्।।6.42।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":43,"id":"98b79211-10e1-488a-9a02-517f2a2bde91","body":"तत्र तं बुद्धिसंयोगं लभते पौर्वदेहिकम्।\n\nयतते च ततो भूयः संसिद्धौ कुरुनन्दन।।6.43।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":44,"id":"6dab0e6e-4097-4f48-bdd0-5ac5ae4a383c","body":"पूर्वाभ्यासेन तेनैव ह्रियते ह्यवशोऽपि सः।\n\nजिज्ञासुरपि योगस्य शब्दब्रह्मातिवर्तते।।6.44।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":45,"id":"137c2cd7-8346-40db-ae27-45611f009edd","body":"प्रयत्नाद्यतमानस्तु योगी संशुद्धकिल्बिषः।\n\nअनेकजन्मसंसिद्धस्ततो याति परां गतिम्।।6.45।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":46,"id":"3fdd5da7-0d58-4ccc-891a-94d7e3178669","body":"तपस्विभ्योऽधिको योगी ज्ञानिभ्योऽपि मतोऽधिकः।\n\nकर्मिभ्यश्चाधिको योगी तस्माद्योगी भवार्जुन।।6.46।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":47,"id":"affcc29a-fad0-4f2f-9835-4ed4b2f37aee","body":"योगिनामपि सर्वेषां मद्गतेनान्तरात्मना।\n\nश्रद्धावान्भजते यो मां स मे युक्ततमो मतः।।6.47।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6},{"no":1,"id":"8068e1c3-4398-45fe-8ec7-69fb05fa737d","body":"श्री भगवानुवाच\n\nमय्यासक्तमनाः पार्थ योगं युञ्जन्मदाश्रयः।\n\nअसंशयं समग्रं मां यथा ज्ञास्यसि तच्छृणु।।7.1।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":7},{"no":2,"id":"3aeb9edf-83b9-4ff5-b083-a0a722420805","body":"ज्ञानं तेऽहं सविज्ञानमिदं वक्ष्याम्यशेषतः।\n\nयज्ज्ञात्वा नेह भूयोऽन्यज्ज्ञातव्यमवशिष्यते।।7.2।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":7},{"no":3,"id":"482868e8-a3b1-4b1c-9311-a03159248133","body":"मनुष्याणां सहस्रेषु कश्िचद्यतति सिद्धये।\n\nयततामपि सिद्धानां कश्िचन्मां वेत्ति तत्त्वतः।।7.3।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":7},{"no":4,"id":"50d5639f-2383-4609-b6be-e38c114d4ea1","body":"भूमिरापोऽनलो वायुः खं मनो बुद्धिरेव च।\n\nअहङ्कार इतीयं मे भिन्ना प्रकृतिरष्टधा।।7.4।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":7},{"no":5,"id":"dd89d0ea-420e-4f8e-b499-ccd54d55da58","body":"अपरेयमितस्त्वन्यां प्रकृतिं विद्धि मे पराम्।\n\nजीवभूतां महाबाहो ययेदं धार्यते जगत्।।7.5।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":7},{"no":6,"id":"f062b47a-da27-4c33-850b-7563b30e2fcb","body":"एतद्योनीनि भूतानि सर्वाणीत्युपधारय।\n\nअहं कृत्स्नस्य जगतः प्रभवः प्रलयस्तथा।।7.6।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":7},{"no":7,"id":"583111a7-2de1-4dae-95c4-662753f08785","body":"मत्तः परतरं नान्यत्किञ्चिदस्ति धनञ्जय।\n\nमयि सर्वमिदं प्रोतं सूत्रे मणिगणा इव।।7.7।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":7},{"no":8,"id":"2bb701a5-3944-4196-a0e6-3ee8b546cbff","body":"रसोऽहमप्सु कौन्तेय प्रभास्मि शशिसूर्ययोः।\n\nप्रणवः सर्ववेदेषु शब्दः खे पौरुषं नृषु।।7.8।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":7},{"no":9,"id":"530b1c97-9309-41fb-a1ad-fdbf9f5e2675","body":"पुण्यो गन्धः पृथिव्यां च तेजश्चास्मि विभावसौ।\n\nजीवनं सर्वभूतेषु तपश्चास्मि तपस्विषु।।7.9।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":7},{"no":10,"id":"e6f05ab8-b7e0-4423-80ca-b6a0a6bbbc34","body":"बीजं मां सर्वभूतानां विद्धि पार्थ सनातनम्।\n\nबुद्धिर्बुद्धिमतामस्मि तेजस्तेजस्विनामहम्।।7.10।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":7},{"no":11,"id":"7f9d27db-849b-47fa-8a27-b09733e34843","body":"बलं बलवतां चाहं कामरागविवर्जितम्।\n\nधर्माविरुद्धो भूतेषु कामोऽस्मि भरतर्षभ।।7.11।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":7},{"no":12,"id":"7daf3009-1bfc-47f2-a41e-380a7480de21","body":"ये चैव सात्त्विका भावा राजसास्तामसाश्च ये।\n\nमत्त एवेति तान्विद्धि नत्वहं तेषु ते मयि।।7.12।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":7},{"no":13,"id":"eae970a0-bdb2-4597-b790-59af5e853c3b","body":"त्रिभिर्गुणमयैर्भावैरेभिः सर्वमिदं जगत्।\n\nमोहितं नाभिजानाति मामेभ्यः परमव्ययम्।।7.13।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":7},{"no":14,"id":"9ffd3b14-480f-4b0b-9a5e-1cc2af494021","body":"दैवी ह्येषा गुणमयी मम माया दुरत्यया।\n\nमामेव ये प्रपद्यन्ते मायामेतां तरन्ति ते।।7.14।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":7},{"no":15,"id":"adb35a22-445d-43b4-a83c-44686770fcac","body":"न मां दुष्कृतिनो मूढाः प्रपद्यन्ते नराधमाः।\n\nमाययापहृतज्ञाना आसुरं भावमाश्रिताः।।7.15।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":7},{"no":16,"id":"2a97ba3b-9d5b-4769-960a-f0b4d80d48e0","body":"चतुर्विधा भजन्ते मां जनाः सुकृतिनोऽर्जुन।\n\nआर्तो जिज्ञासुरर्थार्थी ज्ञानी च भरतर्षभ।।7.16।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":7},{"no":17,"id":"9be20205-3d62-4a22-a976-18efc54f4d21","body":"तेषां ज्ञानी नित्ययुक्त एकभक्ितर्विशिष्यते।\n\nप्रियो हि ज्ञानिनोऽत्यर्थमहं स च मम प्रियः।।7.17।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":7},{"no":18,"id":"65f959e7-bf6b-44b1-9e09-3f8196a1f30a","body":"उदाराः सर्व एवैते ज्ञानी त्वात्मैव मे मतम्।\n\nआस्थितः स हि युक्तात्मा मामेवानुत्तमां गतिम्।।7.18।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":7},{"no":19,"id":"d0977ed7-9c15-4bbd-b164-8107ad4031b8","body":"बहूनां जन्मनामन्ते ज्ञानवान्मां प्रपद्यते।\n\nवासुदेवः सर्वमिति स महात्मा सुदुर्लभः।।7.19।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":7},{"no":20,"id":"3997044f-2e37-440d-ba02-20fe924f5ca8","body":"कामैस्तैस्तैर्हृतज्ञानाः प्रपद्यन्तेऽन्यदेवताः।\n\nतं तं नियममास्थाय प्रकृत्या नियताः स्वया।।7.20।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":7},{"no":21,"id":"2f4dc034-fd60-4ece-8404-3883563eb00c","body":"यो यो यां यां तनुं भक्तः श्रद्धयार्चितुमिच्छति।\n\nतस्य तस्याचलां श्रद्धां तामेव विदधाम्यहम्।।7.21।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":7},{"no":22,"id":"84156512-312f-45a3-8f88-8fe98f651290","body":"स तया श्रद्धया युक्तस्तस्याराधनमीहते।\n\nलभते च ततः कामान्मयैव विहितान् हि तान्।।7.22।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":7},{"no":23,"id":"c098b09a-6ec7-4ba1-aca7-84aa4a0e49ca","body":"अन्तवत्तु फलं तेषां तद्भवत्यल्पमेधसाम्।\n\nदेवान्देवयजो यान्ति मद्भक्ता यान्ति मामपि।।7.23।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":7},{"no":24,"id":"763a579d-348a-4a80-b192-4877f5bcdd17","body":"अव्यक्तं व्यक्ितमापन्नं मन्यन्ते मामबुद्धयः।\n\nपरं भावमजानन्तो ममाव्ययमनुत्तमम्।।7.24।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":7},{"no":25,"id":"148ac904-e0ac-416c-b0b8-1ec3361996de","body":"नाहं प्रकाशः सर्वस्य योगमायासमावृतः।\n\nमूढोऽयं नाभिजानाति लोको मामजमव्ययम्।।7.25।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":7},{"no":26,"id":"48de13bb-8f47-4a19-b70c-c3e1aa5e8dd5","body":"वेदाहं समतीतानि वर्तमानानि चार्जुन।\n\nभविष्याणि च भूतानि मां तु वेद न कश्चन।।7.26।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":7},{"no":27,"id":"2fc4263e-8c29-4aef-92ef-86129b32de0b","body":"इच्छाद्वेषसमुत्थेन द्वन्द्वमोहेन भारत।\n\nसर्वभूतानि संमोहं सर्गे यान्ति परन्तप।।7.27।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":7},{"no":28,"id":"850755ad-e551-45bd-a7e2-d39bebdc40c9","body":"येषां त्वन्तगतं पापं जनानां पुण्यकर्मणाम्।\n\nते द्वन्द्वमोहनिर्मुक्ता भजन्ते मां दृढव्रताः।।7.28।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":7},{"no":29,"id":"f61b78a7-c9eb-47d5-a65e-7edc8d38d415","body":"जरामरणमोक्षाय मामाश्रित्य यतन्ति ये।\n\nते ब्रह्म तद्विदुः कृत्स्नमध्यात्मं कर्म चाखिलम्।।7.29।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":7},{"no":30,"id":"677a6a16-0fa8-4e49-899b-b42836750d47","body":"साधिभूताधिदैवं मां साधियज्ञं च ये विदुः।\n\nप्रयाणकालेऽपि च मां ते विदुर्युक्तचेतसः।।7.30।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":7},{"no":1,"id":"25274219-660b-4b30-a437-e2eacf7b6aeb","body":"श्री भगवानुवाच\n\nअभयं सत्त्वसंशुद्धिः ज्ञानयोगव्यवस्थितिः।\n\nदानं दमश्च यज्ञश्च स्वाध्यायस्तप आर्जवम्।।16.1।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":16},{"no":2,"id":"11474b3a-8f82-4c0f-a6df-2f73a7ba25fa","body":"अहिंसा सत्यमक्रोधस्त्यागः शान्तिरपैशुनम्।दया भूतेष्वलोलुप्त्वं मार्दवं ह्रीरचापलम्।।16.2।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":16},{"no":3,"id":"73d08319-b1c0-4fb7-ad3d-1ab651342dd7","body":"तेजः क्षमा धृतिः शौचमद्रोहो नातिमानिता।\n\nभवन्ति सम्पदं दैवीमभिजातस्य भारत।।16.3।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":16},{"no":4,"id":"a4067eb1-edab-4f7b-9fb1-6f23df64d9f1","body":"दम्भो दर्पोऽभिमानश्च क्रोधः पारुष्यमेव च।अज्ञानं चाभिजातस्य पार्थ सम्पदमासुरीम्।।16.4।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":16},{"no":5,"id":"ba97db19-206a-4d1c-8e81-f46b38aee430","body":"दैवी सम्पद्विमोक्षाय निबन्धायासुरी मता।मा शुचः सम्पदं दैवीमभिजातोऽसि पाण्डव।।16.5।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":16},{"no":6,"id":"8b9d9e33-2d43-41eb-adb7-020908c884d0","body":"द्वौ भूतसर्गौ लोकेऽस्मिन् दैव आसुर एव च।दैवो विस्तरशः प्रोक्त आसुरं पार्थ मे श्रृणु।।16.6।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":16},{"no":7,"id":"291ef9e8-e626-4325-8f92-8a0284f82018","body":"प्रवृत्तिं च निवृत्तिं च जना न विदुरासुराः।न शौचं नापि चाचारो न सत्यं तेषु विद्यते।।16.7।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":16},{"no":8,"id":"23d16bb8-e908-41ae-b83e-7139bde883f2","body":"असत्यमप्रतिष्ठं ते जगदाहुरनीश्वरम्।अपरस्परसम्भूतं किमन्यत्कामहैतुकम्।।16.8।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":16},{"no":9,"id":"a55fdd54-c464-4ee8-a16d-54319115d6e5","body":"एतां दृष्टिमवष्टभ्य नष्टात्मानोऽल्पबुद्धयः।प्रभवन्त्युग्रकर्माणः क्षयाय जगतोऽहिताः।।16.9।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":16},{"no":10,"id":"5d3dceb6-9882-4921-a125-8778494d603a","body":"काममाश्रित्य दुष्पूरं दम्भमानमदान्विताः।मोहाद्गृहीत्वासद्ग्राहान्प्रवर्तन्तेऽशुचिव्रताः।।16.10।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":16},{"no":11,"id":"5ae70591-ad60-424a-b6d7-f61931d18680","body":"चिन्तामपरिमेयां च प्रलयान्तामुपाश्रिताः।कामोपभोगपरमा एतावदिति निश्िचताः।।16.11।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":16},{"no":12,"id":"4ec60503-7e6f-4677-bd47-ba71b9d3a24d","body":"आशापाशशतैर्बद्धाः कामक्रोधपरायणाः।ईहन्ते कामभोगार्थमन्यायेनार्थसञ्चयान्।।16.12।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":16},{"no":13,"id":"3e547c0b-7437-4d4c-b9b7-7f956e1255d1","body":"इदमद्य मया लब्धमिमं प्राप्स्ये मनोरथम्।इदमस्तीदमपि मे भविष्यति पुनर्धनम्।।16.13।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":16},{"no":14,"id":"b9d42d97-b1b8-4092-b26c-1b0d2168c509","body":"असौ मया हतः शत्रुर्हनिष्ये चापरानपि।ईश्वरोऽहमहं भोगी सिद्धोऽहं बलवान्सुखी।।16.14।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":16},{"no":15,"id":"bb7f3589-40df-41c0-8872-7fb35c28ecc5","body":"आढ्योऽभिजनवानस्मि कोऽन्योऽस्ति सदृशो मया।यक्ष्ये दास्यामि मोदिष्य इत्यज्ञानविमोहिताः।।16.15।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":16},{"no":16,"id":"1eb15d68-fe06-4ab5-a6e6-60fa228d755d","body":"अनेकचित्तविभ्रान्ता मोहजालसमावृताः।प्रसक्ताः कामभोगेषु पतन्ति नरकेऽशुचौ।।16.16।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":16},{"no":17,"id":"be29f00d-4d11-459b-ad62-c916f7a6b3a8","body":"आत्मसम्भाविताः स्तब्धा धनमानमदान्विताः।यजन्ते नामयज्ञैस्ते दम्भेनाविधिपूर्वकम्।।16.17।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":16},{"no":18,"id":"f0bccd5b-ce4d-4975-9077-3da3f019e0a6","body":"अहङ्कारं बलं दर्पं कामं क्रोधं च संश्रिताः।मामात्मपरदेहेषु प्रद्विषन्तोऽभ्यसूयकाः।।16.18।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":16},{"no":19,"id":"cc2fb620-17b3-4baa-b744-82fe5b37d496","body":"तानहं द्विषतः क्रूरान्संसारेषु नराधमान्।क्षिपाम्यजस्रमशुभानासुरीष्वेव योनिषु।।16.19।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":16},{"no":20,"id":"5c81fa67-e7f1-4eb1-a3e8-abb955296fe9","body":"असुरीं योनिमापन्ना मूढा जन्मनि जन्मनि।मामप्राप्यैव कौन्तेय ततो यान्त्यधमां गतिम्।।16.20।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":16},{"no":1,"id":"f62fc6b6-1deb-44af-9cc3-940b012566c9","body":"अर्जुन उवाच\n\nकिं तद्ब्रह्म किमध्यात्मं किं कर्म पुरुषोत्तम।\n\nअधिभूतं च किं प्रोक्तमधिदैवं किमुच्यते।।8.1।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":8},{"no":2,"id":"bfd92f8e-416c-4ef4-b5d2-fd56a4d85d34","body":"अधियज्ञः कथं कोऽत्र देहेऽस्मिन्मधुसूदन।\n\nप्रयाणकाले च कथं ज्ञेयोऽसि नियतात्मभिः।।8.2।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":8},{"no":3,"id":"d11ae6dd-3aa6-4a4e-9425-959caca4168e","body":"श्री भगवानुवाच\n\nअक्षरं ब्रह्म परमं स्वभावोऽध्यात्ममुच्यते।\n\nभूतभावोद्भवकरो विसर्गः कर्मसंज्ञितः।।8.3।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":8},{"no":4,"id":"db66e131-ed4f-4017-ae43-926c8b174560","body":"अधिभूतं क्षरो भावः पुरुषश्चाधिदैवतम्।\n\nअधियज्ञोऽहमेवात्र देहे देहभृतां वर।।8.4।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":8},{"no":5,"id":"8f69f498-e00b-4525-b608-e2f3be57ec04","body":"अन्तकाले च मामेव स्मरन्मुक्त्वा कलेवरम्।\n\nयः प्रयाति स मद्भावं याति नास्त्यत्र संशयः।।8.5।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":8},{"no":6,"id":"239bf6ea-51a8-4e7a-8e90-9b3ce6baf8e0","body":"यं यं वापि स्मरन्भावं त्यजत्यन्ते कलेवरम्।\n\nतं तमेवैति कौन्तेय सदा तद्भावभावितः।।8.6।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":8},{"no":7,"id":"1fad0af1-c9c1-4192-acfe-d3ce1f011fd3","body":"तस्मात्सर्वेषु कालेषु मामनुस्मर युध्य च।\n\nमय्यर्पितमनोबुद्धिर्मामेवैष्यस्यसंशयम्।।8.7।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":8},{"no":8,"id":"a3f1d504-c4a7-425a-b65f-7b6c57ab8dd1","body":"अभ्यासयोगयुक्तेन चेतसा नान्यगामिना।\n\nपरमं पुरुषं दिव्यं याति पार्थानुचिन्तयन्।।8.8।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":8},{"no":9,"id":"e5cb547e-675f-468a-a8c0-4867ac11f337","body":"कविं पुराणमनुशासितार\n\nमणोरणीयांसमनुस्मरेद्यः।\n\nसर्वस्य धातारमचिन्त्यरूप\n\nमादित्यवर्णं तमसः परस्तात्।।8.9।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":8},{"no":10,"id":"0e0cfdab-829f-4311-9de6-9518b4109689","body":"प्रयाणकाले मनसाऽचलेन\n\nभक्त्या युक्तो योगबलेन चैव।\n\nभ्रुवोर्मध्ये प्राणमावेश्य सम्यक्\n\nस तं परं पुरुषमुपैति दिव्यम्।।8.10।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":8},{"no":11,"id":"c4ef651d-0090-4281-aee2-6592b4d27ecf","body":"यदक्षरं वेदविदो वदन्ति\n\nविशन्ति यद्यतयो वीतरागाः।\n\nयदिच्छन्तो ब्रह्मचर्यं चरन्ति\n\nतत्ते पदं संग्रहेण प्रवक्ष्ये।।8.11।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":8},{"no":12,"id":"0347fe1d-a600-4cdf-bf2a-f732fb508311","body":"सर्वद्वाराणि संयम्य मनो हृदि निरुध्य च।\n\nमूर्ध्न्याधायात्मनः प्राणमास्थितो योगधारणाम्।।8.12।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":8},{"no":13,"id":"25099026-db50-4032-aa4d-698725d8b88d","body":"ओमित्येकाक्षरं ब्रह्म व्याहरन्मामनुस्मरन्।\n\nयः प्रयाति त्यजन्देहं स याति परमां गतिम्।।8.13।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":8},{"no":14,"id":"fb104c07-5616-4eeb-af59-e5989095e105","body":"अनन्यचेताः सततं यो मां स्मरति नित्यशः।\n\nतस्याहं सुलभः पार्थ नित्ययुक्तस्य योगिनः।।8.14।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":8},{"no":15,"id":"b76a21c8-b63f-4bfc-bd92-759689feb343","body":"मामुपेत्य पुनर्जन्म दुःखालयमशाश्वतम्।\n\nनाप्नुवन्ति महात्मानः संसिद्धिं परमां गताः।।8.15।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":8},{"no":16,"id":"e4144e50-3d78-4cb7-b97c-92a2fb152e81","body":"आब्रह्मभुवनाल्लोकाः पुनरावर्तिनोऽर्जुन।\n\nमामुपेत्य तु कौन्तेय पुनर्जन्म न विद्यते।।8.16।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":8},{"no":17,"id":"9350b5e5-fde6-4754-8081-bdd929315ab7","body":"सहस्रयुगपर्यन्तमहर्यद्ब्रह्मणो विदुः।\n\nरात्रिं युगसहस्रान्तां तेऽहोरात्रविदो जनाः।।8.17।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":8},{"no":18,"id":"d80da9c3-0025-4bce-9300-41142edb8a15","body":"अव्यक्ताद्व्यक्तयः सर्वाः प्रभवन्त्यहरागमे।\n\nरात्र्यागमे प्रलीयन्ते तत्रैवाव्यक्तसंज्ञके।।8.18।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":8},{"no":19,"id":"08699404-521c-42a4-9f3e-bab0a27c19f3","body":"भूतग्रामः स एवायं भूत्वा भूत्वा प्रलीयते।\n\nरात्र्यागमेऽवशः पार्थ प्रभवत्यहरागमे।।8.19।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":8},{"no":20,"id":"7ffc24ea-7aa3-4e9d-b7f8-02eb88070e4b","body":"परस्तस्मात्तु भावोऽन्योऽव्यक्तोऽव्यक्तात्सनातनः।\n\nयः स सर्वेषु भूतेषु नश्यत्सु न विनश्यति।।8.20।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":8},{"no":21,"id":"c1962daf-210b-465d-8bb4-8411bd416b7d","body":"अव्यक्तोऽक्षर इत्युक्तस्तमाहुः परमां गतिम्।\n\nयं प्राप्य न निवर्तन्ते तद्धाम परमं मम।।8.21।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":8},{"no":22,"id":"00a4718d-b576-4834-89c1-5977ec78580b","body":"पुरुषः स परः पार्थ भक्त्या लभ्यस्त्वनन्यया।\n\nयस्यान्तःस्थानि भूतानि येन सर्वमिदं ततम्।।8.22।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":8},{"no":23,"id":"8e5f6b17-3176-411f-ba14-c525bb691e2a","body":"यत्र काले त्वनावृत्तिमावृत्तिं चैव योगिनः।\n\nप्रयाता यान्ति तं कालं वक्ष्यामि भरतर्षभ।।8.23।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":8},{"no":24,"id":"650afe98-4471-4ea0-b712-f8142dca7c95","body":"अग्निर्ज्योतिरहः शुक्लः षण्मासा उत्तरायणम्।\n\nतत्र प्रयाता गच्छन्ति ब्रह्म ब्रह्मविदो जनाः।।8.24।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":8},{"no":25,"id":"b62e8557-fcea-4876-8abd-2cd54a4c196d","body":"धूमो रात्रिस्तथा कृष्णः षण्मासा दक्षिणायनम्।\n\nतत्र चान्द्रमसं ज्योतिर्योगी प्राप्य निवर्तते।।8.25।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":8},{"no":26,"id":"05ac7e3d-6ee1-4ffe-a2c9-3d581f215293","body":"शुक्लकृष्णे गती ह्येते जगतः शाश्वते मते।\n\nएकया यात्यनावृत्तिमन्ययाऽऽवर्तते पुनः।।8.26।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":8},{"no":27,"id":"27be8c7b-88ae-4092-b0a2-2e18839ef6f7","body":"नैते सृती पार्थ जानन्योगी मुह्यति कश्चन।\n\nतस्मात्सर्वेषु कालेषु योगयुक्तो भवार्जुन।।8.27।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":8},{"no":28,"id":"b6e16c54-e842-4fd0-8ef4-68f114126214","body":"वेदेषु यज्ञेषु तपःसु चैव\n\nदानेषु यत्पुण्यफलं प्रदिष्टम्।\n\nअत्येति तत्सर्वमिदं विदित्वा\n\nयोगी परं स्थानमुपैति चाद्यम्।।8.28।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":8},{"no":1,"id":"7e9c844e-8c37-4365-9159-b2827d29428a","body":"श्री भगवानुवाच\n\nइदं तु ते गुह्यतमं प्रवक्ष्याम्यनसूयवे।\n\nज्ञानं विज्ञानसहितं यज्ज्ञात्वा मोक्ष्यसेऽशुभात्।।9.1।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":9},{"no":2,"id":"466ba44f-ceab-41ef-bb3f-5f372d56fce4","body":"राजविद्या राजगुह्यं पवित्रमिदमुत्तमम्।\n\nप्रत्यक्षावगमं धर्म्यं सुसुखं कर्तुमव्ययम्।।9.2।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":9},{"no":3,"id":"3e0254f8-54df-44af-84ed-2bba880fdae9","body":"अश्रद्दधानाः पुरुषा धर्मस्यास्य परन्तप।\n\nअप्राप्य मां निवर्तन्ते मृत्युसंसारवर्त्मनि।।9.3।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":9},{"no":4,"id":"14251852-2581-43b8-987c-4a36e579790b","body":"मया ततमिदं सर्वं जगदव्यक्तमूर्तिना।\n\nमत्स्थानि सर्वभूतानि न चाहं तेष्ववस्थितः।।9.4।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":9},{"no":5,"id":"90b16cd1-f4a3-4455-9086-d2527b61e412","body":"न च मत्स्थानि भूतानि पश्य मे योगमैश्वरम्।\n\nभूतभृन्न च भूतस्थो ममात्मा भूतभावनः।।9.5।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":9},{"no":6,"id":"159aee8a-bea3-418f-ab44-8302872cb87f","body":"यथाऽऽकाशस्थितो नित्यं वायुः सर्वत्रगो महान्।\n\nतथा सर्वाणि भूतानि मत्स्थानीत्युपधारय।।9.6।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":9},{"no":7,"id":"1b86ecfb-d4f6-4936-9375-c404b583050c","body":"सर्वभूतानि कौन्तेय प्रकृतिं यान्ति मामिकाम्।\n\nकल्पक्षये पुनस्तानि कल्पादौ विसृजाम्यहम्।।9.7।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":9},{"no":8,"id":"a7963e16-39c0-4370-b3bd-61f72178485f","body":"प्रकृतिं स्वामवष्टभ्य विसृजामि पुनः पुनः।\n\nभूतग्राममिमं कृत्स्नमवशं प्रकृतेर्वशात्।।9.8।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":9},{"no":9,"id":"edf68454-2f02-4e9c-a827-799ece02398e","body":"न च मां तानि कर्माणि निबध्नन्ति धनञ्जय।\n\nउदासीनवदासीनमसक्तं तेषु कर्मसु।।9.9।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":9},{"no":10,"id":"445605a3-0497-46c0-8894-8bb9f1da2287","body":"मयाऽध्यक्षेण प्रकृतिः सूयते सचराचरम्।\n\nहेतुनाऽनेन कौन्तेय जगद्विपरिवर्तते।।9.10।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":9},{"no":11,"id":"ce0f57b3-ab25-420b-9fe3-6f9be51557d6","body":"अवजानन्ति मां मूढा मानुषीं तनुमाश्रितम्।\n\nपरं भावमजानन्तो मम भूतमहेश्वरम्।।9.11।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":9},{"no":12,"id":"b0618371-6d93-43a6-b766-86159710f4d3","body":"मोघाशा मोघकर्माणो मोघज्ञाना विचेतसः।\n\nराक्षसीमासुरीं चैव प्रकृतिं मोहिनीं श्रिताः।।9.12।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":9},{"no":13,"id":"84066a40-6e9f-4439-be9f-c582981bdfff","body":"महात्मानस्तु मां पार्थ दैवीं प्रकृतिमाश्रिताः।\n\nभजन्त्यनन्यमनसो ज्ञात्वा भूतादिमव्ययम्।।9.13।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":9},{"no":14,"id":"280e211c-a3bc-451a-a23f-4c6bb60a6463","body":"सततं कीर्तयन्तो मां यतन्तश्च दृढव्रताः।\n\nनमस्यन्तश्च मां भक्त्या नित्ययुक्ता उपासते।।9.14।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":9},{"no":15,"id":"0b23827a-6a95-4366-8448-c25e1173c9aa","body":"ज्ञानयज्ञेन चाप्यन्ये यजन्तो मामुपासते।\n\nएकत्वेन पृथक्त्वेन बहुधा विश्वतोमुखम्।।9.15।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":9},{"no":16,"id":"7dca6abe-d67b-44e1-8ba9-5d0e1f7364c9","body":"अहं क्रतुरहं यज्ञः स्वधाऽहमहमौषधम्।\n\nमंत्रोऽहमहमेवाज्यमहमग्निरहं हुतम्।।9.16।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":9},{"no":17,"id":"229faef1-a92b-403c-b080-1452e4dd2e6b","body":"पिताऽहमस्य जगतो माता धाता पितामहः।\n\nवेद्यं पवित्रमोंकार ऋक् साम यजुरेव च।।9.17।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":9},{"no":18,"id":"af8bba04-4d37-498d-9d8e-c59c01fca81b","body":"गतिर्भर्ता प्रभुः साक्षी निवासः शरणं सुहृत्।\n\nप्रभवः प्रलयः स्थानं निधानं बीजमव्ययम्।।9.18।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":9},{"no":19,"id":"6cbd4afd-15fb-4e90-a7f4-bad9a1645c3a","body":"तपाम्यहमहं वर्षं निगृह्णाम्युत्सृजामि च।\n\nअमृतं चैव मृत्युश्च सदसच्चाहमर्जुन।।9.19।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":9},{"no":20,"id":"dbd83a6b-b03f-4980-810e-7e5b84a17e91","body":"त्रैविद्या मां सोमपाः पूतपापा\n\nयज्ञैरिष्ट्वा स्वर्गतिं प्रार्थयन्ते।\n\nते पुण्यमासाद्य सुरेन्द्रलोक\n\nमश्नन्ति दिव्यान्दिवि देवभोगान्।।9.20।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":9},{"no":11,"id":"f7685c4e-b439-428f-bbe6-44b662018111","body":"दिव्यमाल्याम्बरधरं दिव्यगन्धानुलेपनम्।\n\nसर्वाश्चर्यमयं देवमनन्तं विश्वतोमुखम्।।11.11।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":21,"id":"4df0449b-fe2c-4124-ba86-fdbee2bab5d6","body":"ते तं भुक्त्वा स्वर्गलोकं विशालं\n\nक्षीणे पुण्ये मर्त्यलोकं विशन्ति।\n\nएव त्रयीधर्ममनुप्रपन्ना\n\nगतागतं कामकामा लभन्ते।।9.21।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":9},{"no":22,"id":"29f68db2-b452-4eec-9650-4b2b9e797212","body":"अनन्याश्चिन्तयन्तो मां ये जनाः पर्युपासते।\n\nतेषां नित्याभियुक्तानां योगक्षेमं वहाम्यहम्।।9.22।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":9},{"no":23,"id":"d1fe0519-ac5d-4a4d-bef5-e3ac8ff08bf1","body":"येऽप्यन्यदेवता भक्ता यजन्ते श्रद्धयाऽन्विताः।\n\nतेऽपि मामेव कौन्तेय यजन्त्यविधिपूर्वकम्।।9.23।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":9},{"no":24,"id":"1fa61656-62bd-4716-a067-bb33903c36b0","body":"अहं हि सर्वयज्ञानां भोक्ता च प्रभुरेव च।\n\nन तु मामभिजानन्ति तत्त्वेनातश्च्यवन्ति ते।।9.24।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":9},{"no":25,"id":"2cb67ffd-7d2d-4138-af4d-be865cc51c3f","body":"यान्ति देवव्रता देवान् पितृ़न्यान्ति पितृव्रताः।\n\nभूतानि यान्ति भूतेज्या यान्ति मद्याजिनोऽपि माम्।।9.25।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":9},{"no":26,"id":"249adef8-bf8b-4b92-905d-469d9fcdef7a","body":"पत्रं पुष्पं फलं तोयं यो मे भक्त्या प्रयच्छति।\n\nतदहं भक्त्युपहृतमश्नामि प्रयतात्मनः।।9.26।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":9},{"no":27,"id":"330a9121-d697-42d3-82a6-23ecb8276160","body":"यत्करोषि यदश्नासि यज्जुहोषि ददासि यत्।\n\nयत्तपस्यसि कौन्तेय तत्कुरुष्व मदर्पणम्।।9.27।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":9},{"no":28,"id":"1fd7d12c-cdea-4003-8a90-0aee97b04689","body":"शुभाशुभफलैरेवं मोक्ष्यसे कर्मबन्धनैः।\n\nसंन्यासयोगयुक्तात्मा विमुक्तो मामुपैष्यसि।।9.28।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":9},{"no":29,"id":"8c95e76d-e394-435e-ada3-6db03b22358f","body":"समोऽहं सर्वभूतेषु न मे द्वेष्योऽस्ति न प्रियः।\n\nये भजन्ति तु मां भक्त्या मयि ते तेषु चाप्यहम्।।9.29।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":9},{"no":30,"id":"a62d51b5-7af3-490e-a468-060ffd7559cb","body":"अपि चेत्सुदुराचारो भजते मामनन्यभाक्।\n\nसाधुरेव स मन्तव्यः सम्यग्व्यवसितो हि सः।।9.30।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":9},{"no":31,"id":"e36259b9-9748-484d-b743-9027f167fe58","body":"क्षिप्रं भवति धर्मात्मा शश्वच्छान्तिं निगच्छति।\n\nकौन्तेय प्रतिजानीहि न मे भक्तः प्रणश्यति।।9.31।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":9},{"no":32,"id":"f674d242-fe17-45e8-932f-7c30b3c15eb3","body":"मां हि पार्थ व्यपाश्रित्य येऽपि स्युः पापयोनयः।\n\nस्त्रियो वैश्यास्तथा शूद्रास्तेऽपि यान्ति परां गतिम्।।9.32।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":9},{"no":33,"id":"f4dbfaef-aa21-4490-8b0e-9853833c515e","body":"किं पुनर्ब्राह्मणाः पुण्या भक्ता राजर्षयस्तथा।\n\nअनित्यमसुखं लोकमिमं प्राप्य भजस्व माम्।।9.33।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":9},{"no":34,"id":"c9a1ce62-75cc-4839-b4de-9aeb34bfca0b","body":"मन्मना भव मद्भक्तो मद्याजी मां नमस्कुरु।\n\nमामेवैष्यसि युक्त्वैवमात्मानं मत्परायणः।।9.34।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":9},{"no":1,"id":"ca787a80-b57c-4cee-adda-c5de65755f58","body":"अर्जुन उवाच\n\nमदनुग्रहाय परमं गुह्यमध्यात्मसंज्ञितम्।\n\nयत्त्वयोक्तं वचस्तेन मोहोऽयं विगतो मम।।11.1।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":2,"id":"9f62498f-bac2-4de8-acd0-92f6b7d2c572","body":"भवाप्ययौ हि भूतानां श्रुतौ विस्तरशो मया।\n\nत्वत्तः कमलपत्राक्ष माहात्म्यमपि चाव्ययम्।।11.2।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":3,"id":"1e94c8ac-cf29-4467-9bfd-e16be8dd97f4","body":"एवमेतद्यथात्थ त्वमात्मानं परमेश्वर।\n\nद्रष्टुमिच्छामि ते रूपमैश्वरं पुरुषोत्तम।।11.3।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":4,"id":"1c1ff085-f0cb-4de6-a3af-49f7b6feaffe","body":"मन्यसे यदि तच्छक्यं मया द्रष्टुमिति प्रभो।\n\nयोगेश्वर ततो मे त्वं दर्शयाऽत्मानमव्ययम्।।11.4।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":5,"id":"d54516e1-8c6a-47c3-b84a-e348dc41ad63","body":"श्री भगवानुवाच\n\nपश्य मे पार्थ रूपाणि शतशोऽथ सहस्रशः।\n\nनानाविधानि दिव्यानि नानावर्णाकृतीनि च।।11.5।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":6,"id":"30e17677-ef5b-4779-9ea9-4d2c8d297e4d","body":"पश्यादित्यान्वसून्रुद्रानश्िवनौ मरुतस्तथा।\n\nबहून्यदृष्टपूर्वाणि पश्याऽश्चर्याणि भारत।।11.6।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":7,"id":"fb73eae2-21f7-495c-9e55-619df0adb096","body":"इहैकस्थं जगत्कृत्स्नं पश्याद्य सचराचरम्।\n\nमम देहे गुडाकेश यच्चान्यद्द्रष्टुमिच्छसि।।11.7।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":8,"id":"0976c84e-a1b4-4db9-ae3a-a1d3314fa709","body":"न तु मां शक्यसे द्रष्टुमनेनैव स्वचक्षुषा।\n\nदिव्यं ददामि ते चक्षुः पश्य मे योगमैश्वरम्।।11.8।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":9,"id":"9010984f-c3c2-4a9e-beb8-c6d5b4b434f2","body":"सञ्जय उवाच\n\nएवमुक्त्वा ततो राजन्महायोगेश्वरो हरिः।\n\nदर्शयामास पार्थाय परमं रूपमैश्वरम्।।11.9।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":10,"id":"e54b4349-25a7-42ef-85b0-f923370bc6c7","body":"अनेकवक्त्रनयनमनेकाद्भुतदर्शनम्।\n\nअनेकदिव्याभरणं दिव्यानेकोद्यतायुधम्।।11.10।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":1,"id":"cef1495e-b78d-4313-a2e4-d149ce1114c0","body":"श्री भगवानुवाच\n\nभूय एव महाबाहो श्रृणु मे परमं वचः।\n\nयत्तेऽहं प्रीयमाणाय वक्ष्यामि हितकाम्यया।।10.1।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":10},{"no":2,"id":"913d36c9-e549-474e-8b8e-194565119395","body":"न मे विदुः सुरगणाः प्रभवं न महर्षयः।\n\nअहमादिर्हि देवानां महर्षीणां च सर्वशः।।10.2।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":10},{"no":3,"id":"40ed54ba-ac4b-4550-b98d-8e5f3de9bbc2","body":"यो मामजमनादिं च वेत्ति लोकमहेश्वरम्।\n\nअसम्मूढः स मर्त्येषु सर्वपापैः प्रमुच्यते।।10.3।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":10},{"no":4,"id":"7f8168d6-090d-4722-84e2-81e975c255d2","body":"बुद्धिर्ज्ञानमसंमोहः क्षमा सत्यं दमः शमः।\n\nसुखं दुःखं भवोऽभावो भयं चाभयमेव च।।10.4।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":10},{"no":5,"id":"695529c3-74c1-46fc-b47e-b4685264c379","body":"अहिंसा समता तुष्टिस्तपो दानं यशोऽयशः।\n\nभवन्ति भावा भूतानां मत्त एव पृथग्विधाः।।10.5।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":10},{"no":6,"id":"b6a7a4d0-3600-4220-b690-2949b8eac1b6","body":"महर्षयः सप्त पूर्वे चत्वारो मनवस्तथा।\n\nमद्भावा मानसा जाता येषां लोक इमाः प्रजाः।।10.6।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":10},{"no":7,"id":"02b5a933-f002-46e7-a873-024eb26f0704","body":"एतां विभूतिं योगं च मम यो वेत्ति तत्त्वतः।\n\nसोऽविकम्पेन योगेन युज्यते नात्र संशयः।।10.7।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":10},{"no":8,"id":"07d8ff43-c6d0-440b-b8f0-8902c92a015b","body":"अहं सर्वस्य प्रभवो मत्तः सर्वं प्रवर्तते।\n\nइति मत्वा भजन्ते मां बुधा भावसमन्विताः।।10.8।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":10},{"no":9,"id":"d73010e7-2f5d-4bbb-b79f-efa4edaf918e","body":"मच्चित्ता मद्गतप्राणा बोधयन्तः परस्परम्।\n\nकथयन्तश्च मां नित्यं तुष्यन्ति च रमन्ति च।।10.9।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":10},{"no":10,"id":"b2ba1591-10a5-4d3e-83f3-c29826d787f6","body":"तेषां सततयुक्तानां भजतां प्रीतिपूर्वकम्।\n\nददामि बुद्धियोगं तं येन मामुपयान्ति ते।।10.10।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":10},{"no":11,"id":"1359b71c-df1d-4a0f-8e79-1729a628f835","body":"तेषामेवानुकम्पार्थमहमज्ञानजं तमः।\n\nनाशयाम्यात्मभावस्थो ज्ञानदीपेन भास्वता।।10.11।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":10},{"no":12,"id":"f8cb8f5d-be8b-426f-838c-5ba2a13ba0ca","body":"अर्जुन उवाच\n\nपरं ब्रह्म परं धाम पवित्रं परमं भवान्।\n\nपुरुषं शाश्वतं दिव्यमादिदेवमजं विभुम्।।10.12।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":10},{"no":13,"id":"1179983e-cc16-420b-a5a7-7370c2b3a660","body":"आहुस्त्वामृषयः सर्वे देवर्षिर्नारदस्तथा।\n\nअसितो देवलो व्यासः स्वयं चैव ब्रवीषि मे।।10.13।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":10},{"no":14,"id":"cc78a6ff-72b0-4839-a52e-6f62a5c18012","body":"सर्वमेतदृतं मन्ये यन्मां वदसि केशव।\n\nन हि ते भगवन् व्यक्ितं विदुर्देवा न दानवाः।।10.14।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":10},{"no":15,"id":"0343cc3a-b8d8-4ab7-8ba5-264f76cfe79e","body":"स्वयमेवात्मनाऽत्मानं वेत्थ त्वं पुरुषोत्तम।\n\nभूतभावन भूतेश देवदेव जगत्पते।।10.15।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":10},{"no":16,"id":"4f2926fc-d691-4b98-a4ef-112041ac437b","body":"वक्तुमर्हस्यशेषेण दिव्या ह्यात्मविभूतयः।\n\nयाभिर्विभूतिभिर्लोकानिमांस्त्वं व्याप्य तिष्ठसि।।10.16।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":10},{"no":17,"id":"79fa3330-158a-42a6-a69b-29a71663eba3","body":"कथं विद्यामहं योगिंस्त्वां सदा परिचिन्तयन्।\n\nकेषु केषु च भावेषु चिन्त्योऽसि भगवन्मया।।10.17।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":10},{"no":18,"id":"26e0df84-233c-4ccc-8e60-b3f02478d3ce","body":"विस्तरेणात्मनो योगं विभूतिं च जनार्दन।\n\nभूयः कथय तृप्तिर्हि श्रृण्वतो नास्ति मेऽमृतम्।।10.18।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":10},{"no":19,"id":"9f589873-4c8a-4c4b-b395-d28af229c797","body":"श्री भगवानुवाच\n\nहन्त ते कथयिष्यामि दिव्या ह्यात्मविभूतयः।\n\nप्राधान्यतः कुरुश्रेष्ठ नास्त्यन्तो विस्तरस्य मे।।10.19।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":10},{"no":20,"id":"888c3014-bcde-4306-b3b6-c8e331597a8e","body":"अहमात्मा गुडाकेश सर्वभूताशयस्थितः।\n\nअहमादिश्च मध्यं च भूतानामन्त एव च।।10.20।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":10},{"no":21,"id":"2f5cfba7-92bf-4609-a877-5d32d65a1334","body":"आदित्यानामहं विष्णुर्ज्योतिषां रविरंशुमान्।\n\nमरीचिर्मरुतामस्मि नक्षत्राणामहं शशी।।10.21।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":10},{"no":22,"id":"36251477-88cb-4b86-9a1a-d893e7f180c7","body":"वेदानां सामवेदोऽस्मि देवानामस्मि वासवः।\n\nइन्द्रियाणां मनश्चास्मि भूतानामस्मि चेतना।।10.22।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":10},{"no":23,"id":"9914b0f9-6f49-4abd-98af-0ce49a9394c4","body":"रुद्राणां शङ्करश्चास्मि वित्तेशो यक्षरक्षसाम्।\n\nवसूनां पावकश्चास्मि मेरुः शिखरिणामहम्।।10.23।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":10},{"no":24,"id":"3bfec114-1925-4361-841d-92d39c762006","body":"पुरोधसां च मुख्यं मां विद्धि पार्थ बृहस्पतिम्।\n\nसेनानीनामहं स्कन्दः सरसामस्मि सागरः।।10.24।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":10},{"no":25,"id":"7b206181-f336-48a5-9baf-fbeda2552cfa","body":"महर्षीणां भृगुरहं गिरामस्म्येकमक्षरम्।\n\nयज्ञानां जपयज्ञोऽस्मि स्थावराणां हिमालयः।।10.25।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":10},{"no":26,"id":"8e6fe99c-9837-4005-8fde-4bfdd0f694bb","body":"अश्वत्थः सर्ववृक्षाणां देवर्षीणां च नारदः।\n\nगन्धर्वाणां चित्ररथः सिद्धानां कपिलो मुनिः।।10.26।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":10},{"no":27,"id":"19f0cf00-a980-4a6b-9d47-e382acbdf10a","body":"उच्चैःश्रवसमश्वानां विद्धि माममृतोद्भवम्।\n\nऐरावतं गजेन्द्राणां नराणां च नराधिपम्।।10.27।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":10},{"no":28,"id":"761f67be-fe7d-43d6-903b-1d96f8a754ac","body":"आयुधानामहं वज्रं धेनूनामस्मि कामधुक्।\n\nप्रजनश्चास्मि कन्दर्पः सर्पाणामस्मि वासुकिः।।10.28।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":10},{"no":29,"id":"ee1a7b80-b5e6-4dec-83ef-60a94bb28335","body":"अनन्तश्चास्मि नागानां वरुणो यादसामहम्।\n\nपितृ़णामर्यमा चास्मि यमः संयमतामहम्।।10.29।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":10},{"no":30,"id":"97a09726-623e-4b2c-a8df-a911bd1f168a","body":"प्रह्लादश्चास्मि दैत्यानां कालः कलयतामहम्।\n\nमृगाणां च मृगेन्द्रोऽहं वैनतेयश्च पक्षिणाम्।।10.30।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":10},{"no":31,"id":"0345ba81-5063-4370-bf6b-461ed575fa79","body":"पवनः पवतामस्मि रामः शस्त्रभृतामहम्।\n\nझषाणां मकरश्चास्मि स्रोतसामस्मि जाह्नवी।।10.31।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":10},{"no":32,"id":"31956ef7-a336-4cdd-81be-514a36f99849","body":"सर्गाणामादिरन्तश्च मध्यं चैवाहमर्जुन।\n\nअध्यात्मविद्या विद्यानां वादः प्रवदतामहम्।।10.32।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":10},{"no":33,"id":"a7722982-c300-4896-8bfc-d1ada33e8f69","body":"अक्षराणामकारोऽस्मि द्वन्द्वः सामासिकस्य च।\n\nअहमेवाक्षयः कालो धाताऽहं विश्वतोमुखः।।10.33।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":10},{"no":34,"id":"fb5395da-5275-45e3-87be-751eda38c0c9","body":"मृत्युः सर्वहरश्चाहमुद्भवश्च भविष्यताम्।\n\nकीर्तिः श्रीर्वाक्च नारीणां स्मृतिर्मेधा धृतिः क्षमा।।10.34।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":10},{"no":35,"id":"0cb7bf5d-d182-425a-9d0d-b0e51ae54a1f","body":"बृहत्साम तथा साम्नां गायत्री छन्दसामहम्।\n\nमासानां मार्गशीर्षोऽहमृतूनां कुसुमाकरः।।10.35।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":10},{"no":36,"id":"24c13049-0da0-4b6e-b43e-843f36991fee","body":"द्यूतं छलयतामस्मि तेजस्तेजस्विनामहम्।\n\nजयोऽस्मि व्यवसायोऽस्मि सत्त्वं सत्त्ववतामहम्।।10.36।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":10},{"no":37,"id":"0473b1c8-2845-447a-b7df-8553cdd33a7e","body":"वृष्णीनां वासुदेवोऽस्मि पाण्डवानां धनंजयः।\n\nमुनीनामप्यहं व्यासः कवीनामुशना कविः।।10.37।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":10},{"no":38,"id":"5065637f-f759-418d-953a-9347fc01456d","body":"दण्डो दमयतामस्मि नीतिरस्मि जिगीषताम्।\n\nमौनं चैवास्मि गुह्यानां ज्ञानं ज्ञानवतामहम्।।10.38।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":10},{"no":39,"id":"53df9e90-f9db-478c-ba58-22ff5917271b","body":"यच्चापि सर्वभूतानां बीजं तदहमर्जुन।\n\nन तदस्ति विना यत्स्यान्मया भूतं चराचरम्।।10.39।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":10},{"no":40,"id":"06260a15-ca9b-4983-b8a4-f719ac7d31c4","body":"नान्तोऽस्ति मम दिव्यानां विभूतीनां परंतप।\n\nएष तूद्देशतः प्रोक्तो विभूतेर्विस्तरो मया।।10.40।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":10},{"no":41,"id":"0595f7c3-0c4f-4041-851a-e861f12339c1","body":"यद्यद्विभूतिमत्सत्त्वं श्रीमदूर्जितमेव वा।\n\nतत्तदेवावगच्छ त्वं मम तेजोंऽशसंभवम्।।10.41।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":10},{"no":42,"id":"42b378c5-fbc0-4eed-b3bc-69199b0780ba","body":"अथवा बहुनैतेन किं ज्ञातेन तवार्जुन।\n\nविष्टभ्याहमिदं कृत्स्नमेकांशेन स्थितो जगत्।।10.42।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":10},{"no":1,"id":"82c59ea6-2ef0-4a76-8feb-3adf2b075c39","body":"अर्जुन उवाच\n\nप्रकृतिं पुरुषं चैव क्षेत्रं क्षेत्रज्ञमेव च।\n\nएतद्वेदितुमिच्छामि ज्ञानं ज्ञेयं च केशव।।13.1।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":13},{"no":2,"id":"034de2d2-a4af-46e8-bd34-8ee8de9d2415","body":"श्री भगवानुवाचइदं शरीरं कौन्तेय क्षेत्रमित्यभिधीयते।एतद्यो वेत्ति तं प्राहुः क्षेत्रज्ञ इति तद्विदः।।13.2।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":13},{"no":3,"id":"a7104424-888b-41e5-89f8-bcd53da58130","body":"क्षेत्रज्ञं चापि मां विद्धि सर्वक्षेत्रेषु भारत।\n\nक्षेत्रक्षेत्रज्ञयोर्ज्ञानं यत्तज्ज्ञानं मतं मम।।13.3।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":13},{"no":4,"id":"503576fe-b39c-42d7-8880-d6aa3551d055","body":"तत्क्षेत्रं यच्च यादृक् च यद्विकारि यतश्च यत्।स च यो यत्प्रभावश्च तत्समासेन मे श्रृणु।।13.4।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":13},{"no":5,"id":"9213d1d8-61bd-42f5-9db8-294563ada483","body":"ऋषिभिर्बहुधा गीतं छन्दोभिर्विविधैः पृथक्।ब्रह्मसूत्रपदैश्चैव हेतुमद्भिर्विनिश्िचतैः।।13.5।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":13},{"no":6,"id":"0d307508-9e7a-49de-aac1-3a9baeeff8a0","body":"महाभूतान्यहङ्कारो बुद्धिरव्यक्तमेव च।इन्द्रियाणि दशैकं च पञ्च चेन्द्रियगोचराः।।13.6।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":13},{"no":7,"id":"9b8831ec-c453-4b2a-a771-1a3a9a327b80","body":"इच्छा द्वेषः सुखं दुःखं सङ्घातश्चेतनाधृतिः।एतत्क्षेत्रं समासेन सविकारमुदाहृतम्।।13.7।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":13},{"no":8,"id":"0267c904-3f21-46bc-a8b7-026aa7dd6390","body":"अमानित्वमदम्भित्वमहिंसा क्षान्तिरार्जवम्।आचार्योपासनं शौचं स्थैर्यमात्मविनिग्रहः।।13.8।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":13},{"no":12,"id":"ecdd10e6-53f7-4048-8c49-efdcd0630db1","body":"दिवि सूर्यसहस्रस्य भवेद्युगपदुत्थिता।\n\nयदि भाः सदृशी सा स्याद्भासस्तस्य महात्मनः।।11.12।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":13,"id":"4cf1b473-45f7-480d-83e7-78f00fe8ddba","body":"तत्रैकस्थं जगत्कृत्स्नं प्रविभक्तमनेकधा।\n\nअपश्यद्देवदेवस्य शरीरे पाण्डवस्तदा।।11.13।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":14,"id":"75011091-ad10-4332-bdce-a9f8e2d124ed","body":"ततः स विस्मयाविष्टो हृष्टरोमा धनञ्जयः।\n\nप्रणम्य शिरसा देवं कृताञ्जलिरभाषत।।11.14।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":15,"id":"9bd907ea-3592-4966-9437-1654deb57056","body":"अर्जुन उवाच\n\nपश्यामि देवांस्तव देव देहे\n\nसर्वांस्तथा भूतविशेषसङ्घान्।\n\nब्रह्माणमीशं कमलासनस्थ\n\nमृषींश्च सर्वानुरगांश्च दिव्यान्।।11.15।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":16,"id":"a446a263-8588-4e58-9b65-c96e30798f1c","body":"अनेकबाहूदरवक्त्रनेत्रं\n\nपश्यामि त्वां सर्वतोऽनन्तरूपम्।\n\nनान्तं न मध्यं न पुनस्तवादिं\n\nपश्यामि विश्वेश्वर विश्वरूप।।11.16।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":17,"id":"b0f9dd2e-480b-475d-9fc4-f7d397e97285","body":"किरीटिनं गदिनं चक्रिणं च\n\nतेजोराशिं सर्वतोदीप्तिमन्तम्।\n\nपश्यामि त्वां दुर्निरीक्ष्यं समन्ता\n\nद्दीप्तानलार्कद्युतिमप्रमेयम्।।11.17।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":18,"id":"d1ff9f9c-be0f-4c1e-b0ad-1f7de863da43","body":"त्वमक्षरं परमं वेदितव्यं\n\nत्वमस्य विश्वस्य परं निधानम्।\n\nत्वमव्ययः शाश्वतधर्मगोप्ता\n\nसनातनस्त्वं पुरुषो मतो मे।।11.18।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":19,"id":"70a18e99-5b7c-4a3e-96fd-3dc05f462fd0","body":"अनादिमध्यान्तमनन्तवीर्य\n\nमनन्तबाहुं शशिसूर्यनेत्रम्।\n\nपश्यामि त्वां दीप्तहुताशवक्त्रम्\n\nस्वतेजसा विश्वमिदं तपन्तम्।।11.19।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":20,"id":"92b8bca4-c76a-462e-b7ad-2fd79f4cfec7","body":"द्यावापृथिव्योरिदमन्तरं हि\n\nव्याप्तं त्वयैकेन दिशश्च सर्वाः।\n\nदृष्ट्वाऽद्भुतं रूपमुग्रं तवेदं\n\nलोकत्रयं प्रव्यथितं महात्मन्।।11.20।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":21,"id":"8bd73dd1-1a85-4781-b025-6c8e7d549035","body":"अमी हि त्वां सुरसङ्घाः विशन्ति\n\nकेचिद्भीताः प्राञ्जलयो गृणन्ति।\n\nस्वस्तीत्युक्त्वा महर्षिसिद्धसङ्घाः\n\nस्तुवन्ति त्वां स्तुतिभिः पुष्कलाभिः।।11.21।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":22,"id":"7ed029b9-9774-47d0-a691-cbad3d1475e3","body":"रुद्रादित्या वसवो ये च साध्या\n\nविश्वेऽश्िवनौ मरुतश्चोष्मपाश्च।\n\nगन्धर्वयक्षासुरसिद्धसङ्घा\n\nवीक्षन्ते त्वां विस्मिताश्चैव सर्वे।।11.22।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":23,"id":"15b573ba-95cd-4360-8ab1-cd5de5cec624","body":"रूपं महत्ते बहुवक्त्रनेत्रं\n\nमहाबाहो बहुबाहूरुपादम्।\n\nबहूदरं बहुदंष्ट्राकरालं\n\nदृष्ट्वा लोकाः प्रव्यथितास्तथाऽहम्।।11.23।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":24,"id":"1d268f01-dbd7-43a7-b345-3c20292cbe9b","body":"नभःस्पृशं दीप्तमनेकवर्णं\n\nव्यात्ताननं दीप्तविशालनेत्रम्।\n\nदृष्ट्वा हि त्वां प्रव्यथितान्तरात्मा\n\nधृतिं न विन्दामि शमं च विष्णो।।11.24।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":25,"id":"5f1e4093-65ff-4b3c-84c0-e2f25ab82ce8","body":"दंष्ट्राकरालानि च ते मुखानि\n\nदृष्ट्वैव कालानलसन्निभानि।\n\nदिशो न जाने न लभे च शर्म\n\nप्रसीद देवेश जगन्निवास।।11.25।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":26,"id":"d0b5dbb4-906c-4352-a0d0-e4bcc9326dc5","body":"अमी च त्वां धृतराष्ट्रस्य पुत्राः\n\nसर्वे सहैवावनिपालसङ्घैः।\n\nभीष्मो द्रोणः सूतपुत्रस्तथाऽसौ\n\nसहास्मदीयैरपि योधमुख्यैः।।11.26।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":27,"id":"2d73a142-d892-47bf-b443-a6be51f85b58","body":"वक्त्राणि ते त्वरमाणा विशन्ति\n\nदंष्ट्राकरालानि भयानकानि।\n\nकेचिद्विलग्ना दशनान्तरेषु\n\nसंदृश्यन्ते चूर्णितैरुत्तमाङ्गैः।।11.27।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":28,"id":"c787b66f-f4e5-42e6-85c5-6c2352866135","body":"यथा नदीनां बहवोऽम्बुवेगाः\n\nसमुद्रमेवाभिमुखाः द्रवन्ति।\n\nतथा तवामी नरलोकवीरा\n\nविशन्ति वक्त्राण्यभिविज्वलन्ति।।11.28।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":29,"id":"500d6fc0-eb98-45e5-848a-7463f9fd2da0","body":"यथा प्रदीप्तं ज्वलनं पतङ्गा\n\nविशन्ति नाशाय समृद्धवेगाः।\n\nतथैव नाशाय विशन्ति लोका\n\nस्तवापि वक्त्राणि समृद्धवेगाः।।11.29।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":30,"id":"eb26e3dd-f2e0-4530-871d-7c19ca596401","body":"लेलिह्यसे ग्रसमानः समन्ता\n\nल्लोकान्समग्रान्वदनैर्ज्वलद्भिः।\n\nतेजोभिरापूर्य जगत्समग्रं\n\nभासस्तवोग्राः प्रतपन्ति विष्णो।।11.30।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":31,"id":"1d2567fa-87f7-49f4-9383-f6473464d075","body":"आख्याहि मे को भवानुग्ररूपो\n\nनमोऽस्तु ते देववर प्रसीद।\n\nविज्ञातुमिच्छामि भवन्तमाद्यं\n\nन हि प्रजानामि तव प्रवृत्तिम्।।11.31।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":32,"id":"17e22576-ff23-4074-937b-d14243e7eabd","body":"श्री भगवानुवाच\n\nकालोऽस्मि लोकक्षयकृत्प्रवृद्धो\n\nलोकान्समाहर्तुमिह प्रवृत्तः।\n\nऋतेऽपि त्वां न भविष्यन्ति सर्वे\n\nयेऽवस्थिताः प्रत्यनीकेषु योधाः।।11.32।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":33,"id":"d41d460f-13b8-40dc-9c80-13afaa544b07","body":"तस्मात्त्वमुत्तिष्ठ यशो लभस्व\n\nजित्वा शत्रून् भुङ्क्ष्व राज्यं समृद्धम्।\n\nमयैवैते निहताः पूर्वमेव\n\nनिमित्तमात्रं भव सव्यसाचिन्।।11.33।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":34,"id":"cd772322-bee6-4d3f-87b7-6cf5b7b17de0","body":"द्रोणं च भीष्मं च जयद्रथं च\n\nकर्णं तथाऽन्यानपि योधवीरान्।\n\nमया हतांस्त्वं जहि मा व्यथिष्ठा\n\nयुध्यस्व जेतासि रणे सपत्नान्।।11.34।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":35,"id":"3c294240-88e4-46f2-82dd-9d4e2b6cb83d","body":"सञ्जय उवाच\n\nएतच्छ्रुत्वा वचनं केशवस्य\n\nकृताञ्जलिर्वेपमानः किरीटी।\n\nनमस्कृत्वा भूय एवाह कृष्णं\n\nसगद्गदं भीतभीतः प्रणम्य।।11.35।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":36,"id":"152e2660-3a43-4f5d-a518-0fece027e955","body":"अर्जुन उवाच\n\nस्थाने हृषीकेश तव प्रकीर्त्या\n\nजगत् प्रहृष्यत्यनुरज्यते च।\n\nरक्षांसि भीतानि दिशो द्रवन्ति\n\nसर्वे नमस्यन्ति च सिद्धसङ्घाः।।11.36।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":37,"id":"bce33ee1-7305-474e-8c38-ffe8c689422b","body":"कस्माच्च ते न नमेरन्महात्मन्\n\nगरीयसे ब्रह्मणोऽप्यादिकर्त्रे।\n\nअनन्त देवेश जगन्निवास\n\nत्वमक्षरं सदसत्तत्परं यत्।।11.37।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":38,"id":"9808ea78-15ac-490e-879c-374c6b9eee0d","body":"त्वमादिदेवः पुरुषः पुराण\n\nस्त्वमस्य विश्वस्य परं निधानम्।\n\nवेत्तासि वेद्यं च परं च धाम\n\nत्वया ततं विश्वमनन्तरूप।।11.38।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":39,"id":"0b1a01e7-1b78-4930-9c2b-0c19d6361cc4","body":"वायुर्यमोऽग्निर्वरुणः शशाङ्कः\n\nप्रजापतिस्त्वं प्रपितामहश्च।\n\nनमो नमस्तेऽस्तु सहस्रकृत्वः\n\nपुनश्च भूयोऽपि नमो नमस्ते।।11.39।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":40,"id":"dfa37a3b-7199-4a82-9cd3-903b74134626","body":"नमः पुरस्तादथ पृष्ठतस्ते\n\nनमोऽस्तु ते सर्वत एव सर्व।\n\nअनन्तवीर्यामितविक्रमस्त्वं\n\nसर्वं समाप्नोषि ततोऽसि सर्वः।।11.40।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":41,"id":"7b76ce4a-bafc-4773-bb92-eb6591ab96e8","body":"सखेति मत्वा प्रसभं यदुक्तं\n\nहे कृष्ण हे यादव हे सखेति।\n\nअजानता महिमानं तवेदं\n\nमया प्रमादात्प्रणयेन वापि।।11.41।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":42,"id":"bc1e76d0-732e-4baa-b327-b76adee41fee","body":"यच्चावहासार्थमसत्कृतोऽसि\n\nविहारशय्यासनभोजनेषु।\n\nएकोऽथवाप्यच्युत तत्समक्षं\n\nतत्क्षामये त्वामहमप्रमेयम्।।11.42।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":43,"id":"23f9ac85-b862-4dc2-a0ce-88e1b301acfe","body":"पितासि लोकस्य चराचरस्य\n\nत्वमस्य पूज्यश्च गुरुर्गरीयान्।\n\nन त्वत्समोऽस्त्यभ्यधिकः कुतोऽन्यो\n\nलोकत्रयेऽप्यप्रतिमप्रभाव।।11.43।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":44,"id":"95402e50-c408-4aed-a468-da5845e24954","body":"तस्मात्प्रणम्य प्रणिधाय कायं\n\nप्रसादये त्वामहमीशमीड्यम्।\n\nपितेव पुत्रस्य सखेव सख्युः\n\nप्रियः प्रियायार्हसि देव सोढुम्।।11.44।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":45,"id":"b84cba90-d310-47a4-92ba-ee59abbcbead","body":"अदृष्टपूर्वं हृषितोऽस्मि दृष्ट्वा\n\nभयेन च प्रव्यथितं मनो मे।\n\nतदेव मे दर्शय देव रूपं\n\nप्रसीद देवेश जगन्निवास।।11.45।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":46,"id":"f999f56b-5732-4865-8f39-e681e898bcff","body":"किरीटिनं गदिनं चक्रहस्त\n\nमिच्छामि त्वां द्रष्टुमहं तथैव।\n\nतेनैव रूपेण चतुर्भुजेन\n\nसहस्रबाहो भव विश्वमूर्ते।।11.46।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":47,"id":"6c93106c-7cce-4402-a5a6-fd57f0536392","body":"श्री भगवानुवाच\n\nमया प्रसन्नेन तवार्जुनेदं\n\nरूपं परं दर्शितमात्मयोगात्।\n\nतेजोमयं विश्वमनन्तमाद्यं\n\nयन्मे त्वदन्येन न दृष्टपूर्वम्।।11.47।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":48,"id":"7caaa0d0-5b2c-45dd-bf2b-e8fc5548187f","body":"न वेदयज्ञाध्ययनैर्न दानै\n\nर्न च क्रियाभिर्न तपोभिरुग्रैः।\n\nएवंरूपः शक्य अहं नृलोके\n\nद्रष्टुं त्वदन्येन कुरुप्रवीर।।11.48।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":49,"id":"d6340b17-fd81-4711-9318-6e918b953f39","body":"मा ते व्यथा मा च विमूढभावो\n\nदृष्ट्वा रूपं घोरमीदृङ्ममेदम्।\n\nव्यपेतभीः प्रीतमनाः पुनस्त्वं\n\nतदेव मे रूपमिदं प्रपश्य।।11.49।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":50,"id":"97845bcc-4dff-4383-aabb-1627b2aa5b7f","body":"सञ्जय उवाच\n\nइत्यर्जुनं वासुदेवस्तथोक्त्वा\n\nस्वकं रूपं दर्शयामास भूयः।\n\nआश्वासयामास च भीतमेनं\n\nभूत्वा पुनः सौम्यवपुर्महात्मा।।11.50।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":51,"id":"0d8aa9cd-555d-478a-ae01-1c58718aa797","body":"अर्जुन उवाच\n\nदृष्ट्वेदं मानुषं रूपं तवसौम्यं जनार्दन।\n\nइदानीमस्मि संवृत्तः सचेताः प्रकृतिं गतः।।11.51।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":52,"id":"e5daf41b-2972-4279-99e4-3b9a3ea2f46e","body":"श्री भगवानुवाच\n\nसुदुर्दर्शमिदं रूपं दृष्टवानसि यन्मम।\n\nदेवा अप्यस्य रूपस्य नित्यं दर्शनकाङ्क्षिणः।।11.52।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":53,"id":"a4d63391-a896-4575-bccf-294e84195350","body":"नाहं वेदैर्न तपसा न दानेन न चेज्यया।\n\nशक्य एवंविधो द्रष्टुं दृष्टवानसि मां यथा।।11.53।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":54,"id":"bfeb5944-6f3e-4dde-8f2d-d3335f5da2fd","body":"भक्त्या त्वनन्यया शक्यमहमेवंविधोऽर्जुन।\n\nज्ञातुं दृष्टुं च तत्त्वेन प्रवेष्टुं च परंतप।।11.54।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":55,"id":"5f6e2b3c-5182-4aec-a45b-4d164a13a24d","body":"मत्कर्मकृन्मत्परमो मद्भक्तः सङ्गवर्जितः।\n\nनिर्वैरः सर्वभूतेषु यः स मामेति पाण्डव।।11.55।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11},{"no":1,"id":"943062d6-db8c-451f-8a1a-5ab440c25fca","body":"अर्जुन उवाचएवं सततयुक्ता ये भक्तास्त्वां पर्युपासते।येचाप्यक्षरमव्यक्तं तेषां के योगवित्तमाः।।12.1।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":12},{"no":2,"id":"ccc49122-f213-47d0-9f20-96238c661a56","body":"श्री भगवानुवाचमय्यावेश्य मनो ये मां नित्ययुक्ता उपासते।श्रद्धया परयोपेतास्ते मे युक्ततमा मताः।।12.2।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":12},{"no":3,"id":"484ea20f-0670-4b19-8178-9b4905d95a5f","body":"ये त्वक्षरमनिर्देश्यमव्यक्तं पर्युपासते।सर्वत्रगमचिन्त्यं च कूटस्थमचलं ध्रुवम्।।12.3।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":12},{"no":4,"id":"75bdb63a-112c-4fce-ab4c-3763843a7aa0","body":"संनियम्येन्द्रियग्रामं सर्वत्र समबुद्धयः।ते प्राप्नुवन्ति मामेव सर्वभूतहिते रताः।।12.4।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":12},{"no":5,"id":"f4b7c25b-9549-489a-b06f-7604cd4bdfd6","body":"क्लेशोऽधिकतरस्तेषामव्यक्तासक्तचेतसाम्।\n\nअव्यक्ता हि गतिर्दुःखं देहवद्भिरवाप्यते।।12.5।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":12},{"no":6,"id":"1a05ccfc-f28b-4029-b611-dd4f5b3c90ba","body":"ये तु सर्वाणि कर्माणि मयि संन्यस्य मत्पराः।अनन्येनैव योगेन मां ध्यायन्त उपासते।।12.6।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":12},{"no":7,"id":"419d185a-f0ae-40d7-9655-f5c85c140785","body":"तेषामहं समुद्धर्ता मृत्युसंसारसागरात्।भवामि नचिरात्पार्थ मय्यावेशितचेतसाम्।।12.7।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":12},{"no":8,"id":"31a73c7f-1c57-4f80-8acd-2f516d7703f1","body":"मय्येव मन आधत्स्व मयि बुद्धिं निवेशय।निवसिष्यसि मय्येव अत ऊर्ध्वं न संशयः।।12.8।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":12},{"no":9,"id":"658ca2f0-2834-4a0a-8ef4-179bb36f80f4","body":"अथ चित्तं समाधातुं न शक्नोषि मयि स्थिरम्।अभ्यासयोगेन ततो मामिच्छाप्तुं धनञ्जय।।12.9।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":12},{"no":10,"id":"812cf6f1-9e8c-4170-b6ec-041ee58f1d3b","body":"अभ्यासेऽप्यसमर्थोऽसि मत्कर्मपरमो भव।मदर्थमपि कर्माणि कुर्वन् सिद्धिमवाप्स्यसि।।12.10।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":12},{"no":11,"id":"5e57c4c6-a158-4531-a44f-b34771d36fee","body":"अथैतदप्यशक्तोऽसि कर्तुं मद्योगमाश्रितः।सर्वकर्मफलत्यागं ततः कुरु यतात्मवान्।।12.11।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":12},{"no":12,"id":"868893cb-5aa6-4892-9cde-6320ac6b0039","body":"श्रेयो हि ज्ञानमभ्यासाज्ज्ञानाद्ध्यानं विशिष्यते।ध्यानात्कर्मफलत्यागस्त्यागाच्छान्तिरनन्तरम्।।12.12।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":12},{"no":13,"id":"0ae53c0d-16bc-4ac8-9a58-327a467f1ce2","body":"अद्वेष्टा सर्वभूतानां मैत्रः करुण एव च।निर्ममो निरहङ्कारः समदुःखसुखः क्षमी।।12.13।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":12},{"no":14,"id":"e3ddd578-e21b-446f-bf62-e5abcb001733","body":"सन्तुष्टः सततं योगी यतात्मा दृढनिश्चयः।मय्यर्पितमनोबुद्धिर्यो मद्भक्तः स मे प्रियः।।12.14।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":12},{"no":15,"id":"b95aa509-bcca-45b0-b53d-eea5a818e81a","body":"यस्मान्नोद्विजते लोको लोकान्नोद्विजते च यः।हर्षामर्षभयोद्वेगैर्मुक्तो यः स च मे प्रियः।।12.15।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":12},{"no":16,"id":"2feda9f4-bc7e-41a9-b839-5507d4154817","body":"अनपेक्षः शुचिर्दक्ष उदासीनो गतव्यथः।सर्वारम्भपरित्यागी यो मद्भक्तः स मे प्रियः।।12.16।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":12},{"no":17,"id":"b7cbbafc-1f53-4e25-8525-16b01e6ab1d2","body":"यो न हृष्यति न द्वेष्टि न शोचति न काङ्क्षति।शुभाशुभपरित्यागी भक्ितमान्यः स मे प्रियः।।12.17।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":12},{"no":18,"id":"aa2a2708-699b-41c0-9a02-7e8112553f22","body":"समः शत्रौ च मित्रे च तथा मानापमानयोः।शीतोष्णसुखदुःखेषु समः सङ्गविवर्जितः।।12.18।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":12},{"no":19,"id":"d91fac72-9ca0-45fb-b576-750ab3765387","body":"तुल्यनिन्दास्तुतिर्मौनी सन्तुष्टो येनकेनचित्।अनिकेतः स्थिरमतिर्भक्ितमान्मे प्रियो नरः।।12.19।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":12},{"no":20,"id":"c7cf4bfc-4049-48d9-8225-0a2404dd9d8a","body":"ये तु धर्म्यामृतमिदं यथोक्तं पर्युपासते।श्रद्दधाना मत्परमा भक्तास्तेऽतीव मे प्रियाः।।12.20।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":12},{"no":9,"id":"c463118a-f288-4ffd-bd6c-e1c8844341f9","body":"इन्द्रियार्थेषु वैराग्यमनहङ्कार एव च।जन्ममृत्युजराव्याधिदुःखदोषानुदर्शनम्।।13.9।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":13},{"no":10,"id":"dfe847ec-904f-4b25-abe4-3f3ec14e34ec","body":"असक्ितरनभिष्वङ्गः पुत्रदारगृहादिषु।नित्यं च समचित्तत्वमिष्टानिष्टोपपत्तिषु।।13.10।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":13},{"no":11,"id":"ac9410c9-4359-4fb2-8c3d-03a2b56a6dab","body":"मयि चानन्ययोगेन भक्ितरव्यभिचारिणी।विविक्तदेशसेवित्वमरतिर्जनसंसदि।।13.11।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":13},{"no":12,"id":"f07d3ff0-9e90-452f-9b11-3332dd888b56","body":"अध्यात्मज्ञाननित्यत्वं तत्त्वज्ञानार्थदर्शनम्।एतज्ज्ञानमिति प्रोक्तमज्ञानं यदतोन्यथा।।13.12।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":13},{"no":13,"id":"e4c71226-e29c-4f1e-a82b-6eb1a9e164e2","body":"ज्ञेयं यत्तत्प्रवक्ष्यामि यज्ज्ञात्वाऽमृतमश्नुते।अनादिमत्परं ब्रह्म न सत्तन्नासदुच्यते।।13.13।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":13},{"no":14,"id":"9a8d00db-0566-45a6-85bd-8f0a263fa0c7","body":"सर्वतः पाणिपादं तत्सर्वतोऽक्षिशिरोमुखम्।सर्वतः श्रुतिमल्लोके सर्वमावृत्य तिष्ठति।।13.14।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":13},{"no":15,"id":"67254093-453a-4224-9803-f9e01716aa66","body":"सर्वेन्द्रियगुणाभासं सर्वेन्द्रियविवर्जितम्।असक्तं सर्वभृच्चैव निर्गुणं गुणभोक्तृ च।।13.15।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":13},{"no":16,"id":"34baa555-0096-4783-a78b-968056656356","body":"बहिरन्तश्च भूतानामचरं चरमेव च।सूक्ष्मत्वात्तदविज्ञेयं दूरस्थं चान्तिके च तत्।।13.16।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":13},{"no":17,"id":"16cae6bf-71cf-4bae-af2e-d9950426282d","body":"अविभक्तं च भूतेषु विभक्तमिव च स्थितम्।भूतभर्तृ च तज्ज्ञेयं ग्रसिष्णु प्रभविष्णु च।।13.17।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":13},{"no":18,"id":"8b4527f5-a2ef-4fb1-92d2-307dab35bf54","body":"ज्योतिषामपि तज्ज्योतिस्तमसः परमुच्यते।ज्ञानं ज्ञेयं ज्ञानगम्यं हृदि सर्वस्य विष्ठितम्।।13.18।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":13},{"no":19,"id":"823ddee9-5d33-46ab-afc2-22bd6a7dea0f","body":"इति क्षेत्रं तथा ज्ञानं ज्ञेयं चोक्तं समासतः।मद्भक्त एतद्विज्ञाय मद्भावायोपपद्यते।।13.19।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":13},{"no":20,"id":"85b07d90-57c7-42f9-943d-06ac006365b0","body":"प्रकृतिं पुरुषं चैव विद्ध्यनादी उभावपि।विकारांश्च गुणांश्चैव विद्धि प्रकृतिसंभवान्।।13.20।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":13},{"no":21,"id":"49916c3e-6a93-405e-ae56-29688c87fb5e","body":"कार्यकारणकर्तृत्वे हेतुः प्रकृतिरुच्यते।पुरुषः सुखदुःखानां भोक्तृत्वे हेतुरुच्यते।।13.21।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":13},{"no":22,"id":"350d443d-fdd2-42d3-9a10-b814dee6e4b6","body":"पुरुषः प्रकृतिस्थो हि भुङ्क्ते प्रकृतिजान्गुणान्।कारणं गुणसङ्गोऽस्य सदसद्योनिजन्मसु।।13.22।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":13},{"no":23,"id":"a77b52eb-9917-46c8-99b5-3fccf2948907","body":"उपद्रष्टाऽनुमन्ता च भर्ता भोक्ता महेश्वरः।परमात्मेति चाप्युक्तो देहेऽस्मिन्पुरुषः परः।।13.23।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":13},{"no":24,"id":"4c9c44ca-0a45-43d7-a29e-d73eb0ac5ff4","body":"य एवं वेत्ति पुरुषं प्रकृतिं च गुणैःसह।सर्वथा वर्तमानोऽपि न स भूयोऽभिजायते।।13.24।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":13},{"no":25,"id":"b06b3748-68a6-4988-b878-ee0c91967f76","body":"ध्यानेनात्मनि पश्यन्ति केचिदात्मानमात्मना।अन्ये सांख्येन योगेन कर्मयोगेन चापरे।।13.25।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":13},{"no":26,"id":"98e12632-9e5b-4526-a3cc-2a3ef0e37eec","body":"अन्ये त्वेवमजानन्तः श्रुत्वाऽन्येभ्य उपासते।तेऽपि चातितरन्त्येव मृत्युं श्रुतिपरायणाः।।13.26।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":13},{"no":27,"id":"59bec441-3461-45d8-a67f-376b1b701311","body":"यावत्सञ्जायते किञ्चित्सत्त्वं स्थावरजङ्गमम्।क्षेत्रक्षेत्रज्ञसंयोगात्तद्विद्धि भरतर्षभ।।13.27।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":13},{"no":28,"id":"8fce1857-c107-4ed0-9895-7f141d66209d","body":"समं सर्वेषु भूतेषु तिष्ठन्तं परमेश्वरम्।विनश्यत्स्वविनश्यन्तं यः पश्यति स पश्यति।।13.28।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":13},{"no":29,"id":"5a3559ac-b0d7-44ea-832d-f91d4fbb2800","body":"समं पश्यन्हि सर्वत्र समवस्थितमीश्वरम्।न हिनस्त्यात्मनाऽऽत्मानं ततो याति परां गतिम्।।13.29।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":13},{"no":30,"id":"b9be5d34-8307-45cc-9c8e-f8414ecd6f66","body":"प्रकृत्यैव च कर्माणि क्रियमाणानि सर्वशः।यः पश्यति तथाऽऽत्मानमकर्तारं स पश्यति।।13.30।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":13},{"no":31,"id":"d6890a35-4467-4f8b-ae82-dd8dabb8b1aa","body":"यदा भूतपृथग्भावमेकस्थमनुपश्यति।तत एव च विस्तारं ब्रह्म सम्पद्यते तदा।।13.31।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":13},{"no":32,"id":"44574772-ddaf-4e11-a587-bc2849ddb290","body":"अनादित्वान्निर्गुणत्वात्परमात्मायमव्ययः।शरीरस्थोऽपि कौन्तेय न करोति न लिप्यते।।13.32।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":13},{"no":33,"id":"563367e5-45ad-464a-8226-8eb4b27d6c9a","body":"यथा सर्वगतं सौक्ष्म्यादाकाशं नोपलिप्यते।सर्वत्रावस्थितो देहे तथाऽऽत्मा नोपलिप्यते।।13.33।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":13},{"no":34,"id":"e5282a84-17f3-419e-aad0-986783ef20de","body":"यथा प्रकाशयत्येकः कृत्स्नं लोकमिमं रविः।क्षेत्रं क्षेत्री तथा कृत्स्नं प्रकाशयति भारत।।13.34।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":13},{"no":35,"id":"a7547558-f82c-4eb7-9edb-4affa40da9b1","body":"क्षेत्रक्षेत्रज्ञयोरेवमन्तरं ज्ञानचक्षुषा।भूतप्रकृतिमोक्षं च ये विदुर्यान्ति ते परम्।।13.35।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":13},{"no":1,"id":"d6344c64-886c-4b43-8dd5-d67a9391c26e","body":"श्री भगवानुवाचपरं भूयः प्रवक्ष्यामि ज्ञानानां ज्ञानमुत्तमम्।यज्ज्ञात्वा मुनयः सर्वे परां सिद्धिमितो गताः।।14.1।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":14},{"no":2,"id":"2fb7e953-2bc0-476f-aa30-7a25a4338f74","body":"इदं ज्ञानमुपाश्रित्य मम साधर्म्यमागताः।सर्गेऽपि नोपजायन्ते प्रलये न व्यथन्ति च।।14.2।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":14},{"no":3,"id":"87a369a5-7d5c-46e0-90b4-1360061637b7","body":"मम योनिर्महद्ब्रह्म तस्मिन् गर्भं दधाम्यहम्।संभवः सर्वभूतानां ततो भवति भारत।।14.3।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":14},{"no":4,"id":"59bb6c26-3b70-4b5f-81a5-ec814687ddfc","body":"सर्वयोनिषु कौन्तेय मूर्तयः सम्भवन्ति याः।तासां ब्रह्म महद्योनिरहं बीजप्रदः पिता।।14.4।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":14},{"no":5,"id":"de66d14e-9522-4c94-a796-6fea4a2a488b","body":"सत्त्वं रजस्तम इति गुणाः प्रकृतिसंभवाः।निबध्नन्ति महाबाहो देहे देहिनमव्ययम्।।14.5।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":14},{"no":6,"id":"cc3b8e0f-9d6a-407c-81cc-6153e915bbc7","body":"तत्र सत्त्वं निर्मलत्वात्प्रकाशकमनामयम्।सुखसङ्गेन बध्नाति ज्ञानसङ्गेन चानघ।।14.6।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":14},{"no":7,"id":"bfdba6d0-4bda-4b41-bddb-613706c21d8a","body":"रजो रागात्मकं विद्धि तृष्णासङ्गसमुद्भवम्।तन्निबध्नाति कौन्तेय कर्मसङ्गेन देहिनम्।।14.7।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":14},{"no":8,"id":"0ad90748-a201-4389-a1e5-95349bf39ec6","body":"तमस्त्वज्ञानजं विद्धि मोहनं सर्वदेहिनाम्।प्रमादालस्यनिद्राभिस्तन्निबध्नाति भारत।।14.8।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":14},{"no":9,"id":"7abc5622-278e-4dce-bd35-bf322f3d3974","body":"सत्त्वं सुखे सञ्जयति रजः कर्मणि भारत।ज्ञानमावृत्य तु तमः प्रमादे सञ्जयत्युत।।14.9।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":14},{"no":10,"id":"020a78c3-eec5-409d-8658-48c7efffa11e","body":"रजस्तमश्चाभिभूय सत्त्वं भवति भारत।रजः सत्त्वं तमश्चैव तमः सत्त्वं रजस्तथा।।14.10।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":14},{"no":11,"id":"cc8b0658-0b69-4f7f-92eb-68b5535eb1b3","body":"सर्वद्वारेषु देहेऽस्मिन्प्रकाश उपजायते।ज्ञानं यदा तदा विद्याद्विवृद्धं सत्त्वमित्युत।।14.11।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":14},{"no":12,"id":"15533e43-943a-4560-a7bd-6345aceabc20","body":"लोभः प्रवृत्तिरारम्भः कर्मणामशमः स्पृहा।रजस्येतानि जायन्ते विवृद्धे भरतर्षभ।।14.12।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":14},{"no":13,"id":"f3ea3e40-032f-402b-ab81-69546637580a","body":"अप्रकाशोऽप्रवृत्तिश्च प्रमादो मोह एव च।तमस्येतानि जायन्ते विवृद्धे कुरुनन्दन।।14.13।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":14},{"no":14,"id":"7a6abe23-974b-42dd-9f18-aa3d747a48e3","body":"यदा सत्त्वे प्रवृद्धे तु प्रलयं याति देहभृत्।तदोत्तमविदां लोकानमलान्प्रतिपद्यते।।14.14।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":14},{"no":15,"id":"1c05cc40-60a6-459b-a6a2-066dc8765155","body":"रजसि प्रलयं गत्वा कर्मसङ्गिषु जायते।तथा प्रलीनस्तमसि मूढयोनिषु जायते।।14.15।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":14},{"no":16,"id":"5343768a-4481-4494-9d76-af9ec51d8fd2","body":"कर्मणः सुकृतस्याहुः सात्त्विकं निर्मलं फलम्।रजसस्तु फलं दुःखमज्ञानं तमसः फलम्।।14.16।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":14},{"no":17,"id":"4243c7df-1ef3-4574-b72c-cbddec9a7316","body":"सत्त्वात्सञ्जायते ज्ञानं रजसो लोभ एव च।प्रमादमोहौ तमसो भवतोऽज्ञानमेव च।।14.17।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":14},{"no":18,"id":"db424e57-6be0-44c9-9cd5-c79b5c3f91d0","body":"ऊर्ध्वं गच्छन्ति सत्त्वस्था मध्ये तिष्ठन्ति राजसाः।जघन्यगुणवृत्तिस्था अधो गच्छन्ति तामसाः।।14.18।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":14},{"no":19,"id":"5a698d4f-6d00-4727-9e11-52822afdeaaa","body":"नान्यं गुणेभ्यः कर्तारं यदा द्रष्टानुपश्यति।गुणेभ्यश्च परं वेत्ति मद्भावं सोऽधिगच्छति।।14.19।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":14},{"no":20,"id":"6e814f50-3fe4-4043-bf96-ecffdd9b1ad5","body":"गुणानेतानतीत्य त्रीन्देही देहसमुद्भवान्।जन्ममृत्युजरादुःखैर्विमुक्तोऽमृतमश्नुते।।14.20।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":14},{"no":21,"id":"f5e1fa57-3a2a-43c3-b0f9-1844219c33c9","body":"अर्जुन उवाचकैर्लिंगैस्त्रीन्गुणानेतानतीतो भवति प्रभो।किमाचारः कथं चैतांस्त्रीन्गुणानतिवर्तते।।14.21।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":14},{"no":22,"id":"44b73d2f-b068-4968-87fa-b6cc21932ac7","body":"श्री भगवानुवाचप्रकाशं च प्रवृत्तिं च मोहमेव च पाण्डव।न द्वेष्टि सम्प्रवृत्तानि न निवृत्तानि काङ्क्षति।।14.22।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":14},{"no":23,"id":"879e9930-a0aa-4d97-a124-ba44e5f7562c","body":"उदासीनवदासीनो गुणैर्यो न विचाल्यते।गुणा वर्तन्त इत्येव योऽवतिष्ठति नेङ्गते।।14.23।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":14},{"no":24,"id":"a00d138b-41d6-4784-826f-a12d03872bf1","body":"समदुःखसुखः स्वस्थः समलोष्टाश्मकाञ्चनः।तुल्यप्रियाप्रियो धीरस्तुल्यनिन्दात्मसंस्तुतिः।।14.24।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":14},{"no":25,"id":"e59f9dc4-f21d-4e0e-a06c-c0b2688aba37","body":"मानापमानयोस्तुल्यस्तुल्यो मित्रारिपक्षयोः।सर्वारम्भपरित्यागी गुणातीतः स उच्यते।।14.25।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":14},{"no":26,"id":"934b4b4f-b416-4065-a4a1-3e1cf352946e","body":"मां च योऽव्यभिचारेण भक्ितयोगेन सेवते।स गुणान्समतीत्यैतान् ब्रह्मभूयाय कल्पते।।14.26।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":14},{"no":27,"id":"22e9c891-d4c9-4423-a6f1-bef7d9d80d34","body":"ब्रह्मणो हि प्रतिष्ठाऽहममृतस्याव्ययस्य च।शाश्वतस्य च धर्मस्य सुखस्यैकान्तिकस्य च।।14.27।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":14},{"no":1,"id":"82adab96-6f0d-445b-95d9-8f6e7c4d45f2","body":"श्री भगवानुवाचऊर्ध्वमूलमधःशाखमश्वत्थं प्राहुरव्ययम्।छन्दांसि यस्य पर्णानि यस्तं वेद स वेदवित्।।15.1।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":15},{"no":2,"id":"b7677f44-1f6c-454f-917d-2a9bcee06c2a","body":"अधश्चोर्ध्वं प्रसृतास्तस्य शाखा गुणप्रवृद्धा विषयप्रवालाः।अधश्च मूलान्यनुसन्ततानि कर्मानुबन्धीनि मनुष्यलोके।।15.2।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":15},{"no":3,"id":"464da921-ad7e-4135-86e0-0467ea53d96c","body":"न रूपमस्येह तथोपलभ्यते नान्तो न चादिर्न च संप्रतिष्ठा।अश्वत्थमेनं सुविरूढमूल मसङ्गशस्त्रेण दृढेन छित्त्वा।।15.3।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":15},{"no":4,"id":"ded766c5-dd6a-43ba-9620-f301967cb37e","body":"ततः पदं तत्परिमार्गितव्य यस्मिन्गता न निवर्तन्ति भूयः।तमेव चाद्यं पुरुषं प्रपद्ये यतः प्रवृत्तिः प्रसृता पुराणी।।15.4।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":15},{"no":5,"id":"b5e5396f-a86d-4576-bf51-b1aea042073d","body":"निर्मानमोहा जितसङ्गदोषा अध्यात्मनित्या विनिवृत्तकामाः।द्वन्द्वैर्विमुक्ताः सुखदुःखसंज्ञै र्गच्छन्त्यमूढाः पदमव्ययं तत्।।15.5।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":15},{"no":6,"id":"a57a924c-e68b-428f-9cfa-e6206f6fe1ef","body":"न तद्भासयते सूर्यो न शशाङ्को न पावकः।यद्गत्वा न निवर्तन्ते तद्धाम परमं मम।।15.6।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":15},{"no":7,"id":"75a54117-b4a7-4e21-b0e2-a7c63bb6d55c","body":"ममैवांशो जीवलोके जीवभूतः सनातनः।मनःषष्ठानीन्द्रियाणि प्रकृतिस्थानि कर्षति।।15.7।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":15},{"no":8,"id":"ce9e123d-fed0-4f07-99e8-52734c43a26e","body":"शरीरं यदवाप्नोति यच्चाप्युत्क्रामतीश्वरः।गृहीत्वैतानि संयाति वायुर्गन्धानिवाशयात्।।15.8।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":15},{"no":9,"id":"b94a714b-ac8c-43d7-b48e-cbe7baa97da7","body":"श्रोत्रं चक्षुः स्पर्शनं च रसनं घ्राणमेव च।अधिष्ठाय मनश्चायं विषयानुपसेवते।।15.9।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":15},{"no":10,"id":"571a39df-65d1-471e-b60d-5f4dbe42b484","body":"उत्क्रामन्तं स्थितं वापि भुञ्जानं वा गुणान्वितम्।विमूढा नानुपश्यन्ति पश्यन्ति ज्ञानचक्षुषः।।15.10।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":15},{"no":11,"id":"370b2019-2dd3-4c06-b2f5-e3a44105ff76","body":"यतन्तो योगिनश्चैनं पश्यन्त्यात्मन्यवस्थितम्।यतन्तोऽप्यकृतात्मानो नैनं पश्यन्त्यचेतसः।।15.11।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":15},{"no":12,"id":"c8f61942-b29a-4a09-b6cb-f63aacea8eb7","body":"यदादित्यगतं तेजो जगद्भासयतेऽखिलम्।यच्चन्द्रमसि यच्चाग्नौ तत्तेजो विद्धि मामकम्।।15.12।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":15},{"no":13,"id":"273e72c3-6598-45d8-9762-1bf6908210fe","body":"गामाविश्य च भूतानि धारयाम्यहमोजसा।पुष्णामि चौषधीः सर्वाः सोमो भूत्वा रसात्मकः।।15.13।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":15},{"no":14,"id":"91640054-5a04-4eb1-82d0-a8b1452c7493","body":"अहं वैश्वानरो भूत्वा प्राणिनां देहमाश्रितः।प्राणापानसमायुक्तः पचाम्यन्नं चतुर्विधम्।।15.14।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":15},{"no":15,"id":"2ae65380-9563-4813-98dc-aed39fffff51","body":"सर्वस्य चाहं हृदि सन्निविष्टो मत्तः स्मृतिर्ज्ञानमपोहनं च।वेदैश्च सर्वैरहमेव वेद्यो वेदान्तकृद्वेदविदेव चाहम्।।15.15।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":15},{"no":16,"id":"a46b0e46-9ada-4005-a5b3-4f813dd95b29","body":"द्वाविमौ पुरुषौ लोके क्षरश्चाक्षर एव च।क्षरः सर्वाणि भूतानि कूटस्थोऽक्षर उच्यते।।15.16।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":15},{"no":17,"id":"d4c25bc5-b590-48c4-97de-02019e174508","body":"उत्तमः पुरुषस्त्वन्यः परमात्मेत्युदाहृतः।यो लोकत्रयमाविश्य बिभर्त्यव्यय ईश्वरः।।15.17।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":15},{"no":18,"id":"7ffc7db8-e7fd-46dc-abd1-da8fcd84a3de","body":"यस्मात्क्षरमतीतोऽहमक्षरादपि चोत्तमः।अतोऽस्मि लोके वेदे च प्रथितः पुरुषोत्तमः।।15.18।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":15},{"no":19,"id":"31b19c76-7e85-4028-9ef1-fc71ac2f9cf8","body":"यो मामेवमसम्मूढो जानाति पुरुषोत्तमम्।स सर्वविद्भजति मां सर्वभावेन भारत।।15.19।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":15},{"no":20,"id":"cbac3656-94a0-408c-a4f2-1ab4fb5bc4c7","body":"इति गुह्यतमं शास्त्रमिदमुक्तं मयाऽनघ।एतद्बुद्ध्वा बुद्धिमान्स्यात्कृतकृत्यश्च भारत।।15.20।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":15},{"no":21,"id":"1004a521-8655-414f-9a99-09c101f02746","body":"त्रिविधं नरकस्येदं द्वारं नाशनमात्मनः।कामः क्रोधस्तथा लोभस्तस्मादेतत्त्रयं त्यजेत्।।16.21।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":16},{"no":22,"id":"8420efbf-d73c-4acf-947d-660adc50ae24","body":"एतैर्विमुक्तः कौन्तेय तमोद्वारैस्त्रिभिर्नरः।आचरत्यात्मनः श्रेयस्ततो याति परां गतिम्।।16.22।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":16},{"no":23,"id":"47ab9789-2c1e-49a6-b1bc-6d10f2e6c9ef","body":"यः शास्त्रविधिमुत्सृज्य वर्तते कामकारतः।न स सिद्धिमवाप्नोति न सुखं न परां गतिम्।।16.23।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":16},{"no":24,"id":"bb1e956e-a52f-4c98-9172-52fabfff0493","body":"तस्माच्छास्त्रं प्रमाणं ते कार्याकार्यव्यवस्थितौ।ज्ञात्वा शास्त्रविधानोक्तं कर्म कर्तुमिहार्हसि।।16.24।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":16},{"no":1,"id":"f7c8047d-05b0-4880-b331-f37a9cb018ae","body":"अर्जुन उवाचये शास्त्रविधिमुत्सृज्य यजन्ते श्रद्धयाऽन्विताः।तेषां निष्ठा तु का कृष्ण सत्त्वमाहो रजस्तमः।।17.1।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":17},{"no":2,"id":"c1fe0f6b-8458-408d-a36c-b1bf9372e1d4","body":"श्री भगवानुवाचत्रिविधा भवति श्रद्धा देहिनां सा स्वभावजा।सात्त्विकी राजसी चैव तामसी चेति तां श्रृणु।।17.2।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":17},{"no":3,"id":"f91ed34d-b640-4fe5-b3ee-ae04bde803b2","body":"सत्त्वानुरूपा सर्वस्य श्रद्धा भवति भारत।श्रद्धामयोऽयं पुरुषो यो यच्छ्रद्धः स एव सः।।17.3।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":17},{"no":4,"id":"29ec76c4-c5cf-4a17-95c7-fb03e3075cb2","body":"यजन्ते सात्त्विका देवान्यक्षरक्षांसि राजसाः।प्रेतान्भूतगणांश्चान्ये यजन्ते तामसा जनाः।।17.4।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":17},{"no":5,"id":"041e8aab-5f1f-4c10-9b02-3c906a596f05","body":"अशास्त्रविहितं घोरं तप्यन्ते ये तपो जनाः।दम्भाहङ्कारसंयुक्ताः कामरागबलान्विताः।।17.5।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":17},{"no":6,"id":"cc497d1f-d2d9-480a-8c8f-29e2929132c8","body":"कर्षयन्तः शरीरस्थं भूतग्राममचेतसः।मां चैवान्तःशरीरस्थं तान्विद्ध्यासुरनिश्चयान्।।17.6।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":17},{"no":7,"id":"c2cf691e-a480-49fd-a30d-f9e2710e5617","body":"आहारस्त्वपि सर्वस्य त्रिविधो भवति प्रियः।यज्ञस्तपस्तथा दानं तेषां भेदमिमं श्रृणु।।17.7।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":17},{"no":8,"id":"860ae181-f254-4cf8-bde4-588d76e84935","body":"आयुःसत्त्वबलारोग्यसुखप्रीतिविवर्धनाः।रस्याः स्निग्धाः स्थिरा हृद्या आहाराः सात्त्विकप्रियाः।।17.8।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":17},{"no":9,"id":"1856175b-01bc-422e-b609-60db4183916d","body":"कट्वम्ललवणात्युष्णतीक्ष्णरूक्षविदाहिनः।आहारा राजसस्येष्टा दुःखशोकामयप्रदाः।।17.9।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":17},{"no":10,"id":"aae17677-d9b7-4d5e-b4ac-93e930ebec8b","body":"यातयामं गतरसं पूति पर्युषितं च यत्।उच्छिष्टमपि चामेध्यं भोजनं तामसप्रियम्।।17.10।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":17},{"no":11,"id":"ac6fb0a9-5795-4010-92b8-f0f2b3eba464","body":"अफलाकाङ्क्षिभिर्यज्ञो विधिदृष्टो य इज्यते।यष्टव्यमेवेति मनः समाधाय स सात्त्विकः।।17.11।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":17},{"no":12,"id":"fd57746c-6533-44b5-b28c-9ec00ad7b166","body":"अभिसंधाय तु फलं दम्भार्थमपि चैव यत्।इज्यते भरतश्रेष्ठ तं यज्ञं विद्धि राजसम्।।17.12।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":17},{"no":13,"id":"21e8ccfb-c334-4a3a-b8ff-316ea56b0e56","body":"विधिहीनमसृष्टान्नं मन्त्रहीनमदक्षिणम्।श्रद्धाविरहितं यज्ञं तामसं परिचक्षते।।17.13।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":17},{"no":14,"id":"0f508367-e25a-49b8-ade3-dac3c0adc600","body":"देवद्विजगुरुप्राज्ञपूजनं शौचमार्जवम्।ब्रह्मचर्यमहिंसा च शारीरं तप उच्यते।।17.14।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":17},{"no":15,"id":"d7211823-a4b1-4572-8304-54f2f4a3b406","body":"अनुद्वेगकरं वाक्यं सत्यं प्रियहितं च यत्।स्वाध्यायाभ्यसनं चैव वाङ्मयं तप उच्यते।।17.15।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":17},{"no":16,"id":"ca0785fd-6edd-48f8-b1d3-a3ab53794192","body":"मनःप्रसादः सौम्यत्वं मौनमात्मविनिग्रहः।भावसंशुद्धिरित्येतत्तपो मानसमुच्यते।।17.16।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":17},{"no":17,"id":"5ab8f135-71fb-4e7f-90e2-2d8b6a0bba54","body":"श्रद्धया परया तप्तं तपस्तत्ित्रविधं नरैः।अफलाकाङ्क्षिभिर्युक्तैः सात्त्विकं परिचक्षते।।17.17।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":17},{"no":18,"id":"99e0810f-bd7a-4f7e-a65a-5089abb71345","body":"सत्कारमानपूजार्थं तपो दम्भेन चैव यत्।क्रियते तदिह प्रोक्तं राजसं चलमध्रुवम्।।17.18।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":17},{"no":19,"id":"1a4cfe3b-3d53-46fc-8da5-d18057971b95","body":"मूढग्राहेणात्मनो यत्पीडया क्रियते तपः।परस्योत्सादनार्थं वा तत्तामसमुदाहृतम्।।17.19।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":17},{"no":20,"id":"29a7ee4c-e28b-4500-b0d1-7a0a00be47d8","body":"दातव्यमिति यद्दानं दीयतेऽनुपकारिणे।देशे काले च पात्रे च तद्दानं सात्त्विकं स्मृतम्।।17.20।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":17},{"no":21,"id":"7eca52c1-f6a2-46fb-adeb-26598f9af09a","body":"यत्तु प्रत्युपकारार्थं फलमुद्दिश्य वा पुनः।दीयते च परिक्लिष्टं तद्दानं राजसं स्मृतम्।।17.21।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":17},{"no":22,"id":"5b3c53b6-8573-49d4-ac18-5ba0ec8c5911","body":"अदेशकाले यद्दानमपात्रेभ्यश्च दीयते।असत्कृतमवज्ञातं तत्तामसमुदाहृतम्।।17.22।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":17},{"no":23,"id":"8b2095f5-836f-4cdc-a1b7-ed872b949477","body":" तत्सदिति निर्देशो ब्रह्मणस्त्रिविधः स्मृतः।ब्राह्मणास्तेन वेदाश्च यज्ञाश्च विहिताः पुरा।।17.23।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":17},{"no":24,"id":"de2f7f82-2c3c-4da5-9fae-fef387fef10b","body":"तस्मादोमित्युदाहृत्य यज्ञदानतपःक्रियाः।प्रवर्तन्ते विधानोक्ताः सततं ब्रह्मवादिनाम्।।17.24।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":17},{"no":25,"id":"e5d18e47-058d-4ca0-bf24-7b477afeae7b","body":"तदित्यनभिसन्धाय फलं यज्ञतपःक्रियाः।दानक्रियाश्च विविधाः क्रियन्ते मोक्षकाङ्क्षि।।17.25।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":17},{"no":26,"id":"54d21952-655d-4f0c-a73e-d5da9883f718","body":"सद्भावे साधुभावे च सदित्येतत्प्रयुज्यते।प्रशस्ते कर्मणि तथा सच्छब्दः पार्थ युज्यते।।17.26।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":17},{"no":27,"id":"e63fa17e-fc9c-47f0-874d-2ebe25b7c4de","body":"यज्ञे तपसि दाने च स्थितिः सदिति चोच्यते।कर्म चैव तदर्थीयं सदित्येवाभिधीयते।।17.27।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":17},{"no":28,"id":"03123256-78df-48bb-8139-f427d76c4638","body":"अश्रद्धया हुतं दत्तं तपस्तप्तं कृतं च यत्।असदित्युच्यते पार्थ न च तत्प्रेत्य नो इह।।17.28।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":17},{"no":1,"id":"d8b98f1c-24a6-46b3-9829-c4235ee2a258","body":"अर्जुन उवाच\n\nसंन्यासस्य महाबाहो तत्त्वमिच्छामि वेदितुम्।\n\nत्यागस्य च हृषीकेश पृथक्केशिनिषूदन।।18.1।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":2,"id":"89771007-9661-48d7-9e4e-495c6eba7ed0","body":"श्री भगवानुवाच\n\nकाम्यानां कर्मणां न्यासं संन्यासं कवयो विदुः।\n\nसर्वकर्मफलत्यागं प्राहुस्त्यागं विचक्षणाः।।18.2।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":3,"id":"1a6c6f7c-6c76-46de-8f01-979281893c08","body":"त्याज्यं दोषवदित्येके कर्म प्राहुर्मनीषिणः।\n\nयज्ञदानतपःकर्म न त्याज्यमिति चापरे।।18.3।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":4,"id":"7138e681-9347-4697-bec3-c9895667163d","body":"निश्चयं श्रृणु मे तत्र त्यागे भरतसत्तम।त्यागो हि पुरुषव्याघ्र त्रिविधः संप्रकीर्तितः।।18.4।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":1,"id":"69a70209-0d9d-480f-8939-30e35fbacb12","body":"धृतराष्ट्र उवाच\n\nधर्मक्षेत्रे कुरुक्षेत्रे समवेता युयुत्सवः।\n\nमामकाः पाण्डवाश्चैव किमकुर्वत सञ्जय।।1.1।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":6,"id":"e567688b-5c07-4653-890b-fb0f4930170c","body":"एतान्यपि तु कर्माणि सङ्गं त्यक्त्वा फलानि च।कर्तव्यानीति मे पार्थ निश्िचतं मतमुत्तमम्।।18.6।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":7,"id":"7461ea59-79b2-4106-bf16-f60abbe3a4d0","body":"नियतस्य तु संन्यासः कर्मणो नोपपद्यते।मोहात्तस्य परित्यागस्तामसः परिकीर्तितः।।18.7।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":8,"id":"f0db2cf9-c6c2-4fba-8ce1-ddd2b4061cdd","body":"दुःखमित्येव यत्कर्म कायक्लेशभयात्त्यजेत्।स कृत्वा राजसं त्यागं नैव त्यागफलं लभेत्।।18.8।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":9,"id":"b19df000-264f-44ca-8a8c-07e3112cbf37","body":"कार्यमित्येव यत्कर्म नियतं क्रियतेऽर्जुन।सङ्गं त्यक्त्वा फलं चैव स त्यागः सात्त्विको मतः।।18.9।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":10,"id":"2a87a1fe-af64-4693-bea9-aae6bd620a19","body":"न द्वेष्ट्यकुशलं कर्म कुशले नानुषज्जते।त्यागी सत्त्वसमाविष्टो मेधावी छिन्नसंशयः।।18.10।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":11,"id":"c186d69d-245e-42f4-8eef-25f45dd31c81","body":"न हि देहभृता शक्यं त्यक्तुं कर्माण्यशेषतः।यस्तु कर्मफलत्यागी स त्यागीत्यभिधीयते।।18.11।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":12,"id":"19704918-15a9-43a7-8c2f-07d584604a92","body":"अनिष्टमिष्टं मिश्रं च त्रिविधं कर्मणः फलम्।भवत्यत्यागिनां प्रेत्य न तु संन्यासिनां क्वचित्।।18.12।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":13,"id":"38103671-ba5f-4cb0-980d-0161a6ac32bc","body":"पञ्चैतानि महाबाहो कारणानि निबोध मे।सांख्ये कृतान्ते प्रोक्तानि सिद्धये सर्वकर्मणाम्।।18.13।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":14,"id":"cf2d1f8d-498e-4dfe-bd23-a0c1c50f2f53","body":"अधिष्ठानं तथा कर्ता करणं च पृथग्विधम्।विविधाश्च पृथक्चेष्टा दैवं चैवात्र पञ्चमम्।।18.14।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":15,"id":"05fe6abe-58e0-466e-a508-bcddebd552be","body":"शरीरवाङ्मनोभिर्यत्कर्म प्रारभते नरः।न्याय्यं वा विपरीतं वा पञ्चैते तस्य हेतवः।।18.15।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":16,"id":"4883888e-50e2-429c-ae1d-07706d556bd8","body":"तत्रैवं सति कर्तारमात्मानं केवलं तु यः।पश्यत्यकृतबुद्धित्वान्न स पश्यति दुर्मतिः।।18.16।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":17,"id":"8712d396-5f06-4c59-8e2a-b2d9a75935de","body":"यस्य नाहंकृतो भावो बुद्धिर्यस्य न लिप्यते।हत्वापि स इमाँल्लोकान्न हन्ति न निबध्यते।।18.17।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":18,"id":"092908af-ee3a-41e7-b0ab-675d96a6ac12","body":"ज्ञानं ज्ञेयं परिज्ञाता त्रिविधा कर्मचोदना।करणं कर्म कर्तेति त्रिविधः कर्मसंग्रहः।।18.18।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":19,"id":"24e2add1-7f97-4763-8f55-c6b9747d35c7","body":"ज्ञानं कर्म च कर्ता च त्रिधैव गुणभेदतः।प्रोच्यते गुणसंख्याने यथावच्छृणु तान्यपि।।18.19।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":20,"id":"41347d17-aa6b-4f3c-82d0-ba188733e174","body":"सर्वभूतेषु येनैकं भावमव्ययमीक्षते।अविभक्तं विभक्तेषु तज्ज्ञानं विद्धि सात्त्विकम्।।18.20।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":21,"id":"4b84ed97-9289-4583-94eb-74ab7da860a9","body":"पृथक्त्वेन तु यज्ज्ञानं नानाभावान्पृथग्विधान्।वेत्ति सर्वेषु भूतेषु तज्ज्ञानं विद्धि राजसम्।।18.21।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":22,"id":"52aa5eff-3cdd-4104-9364-32c0bfe76b58","body":"यत्तु कृत्स्नवदेकस्मिन्कार्ये सक्तमहैतुकम्।अतत्त्वार्थवदल्पं च तत्तामसमुदाहृतम्।।18.22।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":23,"id":"7a119704-3904-44c5-8df9-9a2c85817cf5","body":"नियतं सङ्गरहितमरागद्वेषतः कृतम्।अफलप्रेप्सुना कर्म यत्तत्सात्त्विकमुच्यते।।18.23।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":24,"id":"62c29472-dc4b-4098-903c-bf03d8d39a9c","body":"यत्तु कामेप्सुना कर्म साहङ्कारेण वा पुनः।क्रियते बहुलायासं तद्राजसमुदाहृतम्।।18.24।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":25,"id":"2494d909-2e55-4719-b0bb-3dec51c49c67","body":"अनुबन्धं क्षयं हिंसामनपेक्ष्य च पौरुषम्।मोहादारभ्यते कर्म यत्तत्तामसमुच्यते।।18.25।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":26,"id":"5d6c2d3e-7109-4db3-acfb-3e460db57e18","body":"मुक्तसङ्गोऽनहंवादी धृत्युत्साहसमन्वितः।सिद्ध्यसिद्ध्योर्निर्विकारः कर्ता सात्त्विक उच्यते।।18.26।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":27,"id":"83fed3a8-22e3-4920-8922-e269ff7ea5fb","body":"रागी कर्मफलप्रेप्सुर्लुब्धो हिंसात्मकोऽशुचिः।हर्षशोकान्वितः कर्ता राजसः परिकीर्तितः।।18.27।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":28,"id":"ffdb8882-2b5d-4f2c-8f84-e3eecf7c1caa","body":"अयुक्तः प्राकृतः स्तब्धः शठो नैष्कृतिकोऽलसः।विषादी दीर्घसूत्री च कर्ता तामस उच्यते।।18.28।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":29,"id":"e24d54f4-0128-482f-9a22-a4428e3ee5bf","body":"बुद्धेर्भेदं धृतेश्चैव गुणतस्त्रिविधं श्रृणु।प्रोच्यमानमशेषेण पृथक्त्वेन धनञ्जय।।18.29।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":30,"id":"38e7ab47-75a6-426c-a731-51f8a3d573f2","body":"प्रवृत्तिं च निवृत्तिं च कार्याकार्ये भयाभये।बन्धं मोक्षं च या वेत्ति बुद्धिः सा पार्थ सात्त्विकी।।18.30।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":31,"id":"6c938330-0ac8-4143-91ac-043aca00ffc1","body":"यया धर्ममधर्मं च कार्यं चाकार्यमेव च।अयथावत्प्रजानाति बुद्धिः सा पार्थ राजसी।।18.31।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":32,"id":"9bcbbd34-e416-4a08-a720-6371f58beab2","body":"अधर्मं धर्ममिति या मन्यते तमसाऽऽवृता।सर्वार्थान्विपरीतांश्च बुद्धिः सा पार्थ तामसी।।18.32।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":33,"id":"883b3150-28bd-47f7-baa2-cc237962bb1d","body":"धृत्या यया धारयते मनःप्राणेन्द्रियक्रियाः।योगेनाव्यभिचारिण्या धृतिः सा पार्थ सात्त्विकी।।18.33।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":34,"id":"9e9cb18e-30dc-4698-891f-9c74370ed54f","body":"यया तु धर्मकामार्थान् धृत्या धारयतेऽर्जुन।प्रसङ्गेन फलाकाङ्क्षी धृतिः सा पार्थ राजसी।।18.34।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":35,"id":"08f32d49-713a-4b9f-a048-981eec914f8b","body":"यया स्वप्नं भयं शोकं विषादं मदमेव च।न विमुञ्चति दुर्मेधा धृतिः सा पार्थ तामसी।।18.35।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":36,"id":"04bd5fd5-4903-41dc-9964-de7b76d348bb","body":"सुखं त्विदानीं त्रिविधं श्रृणु मे भरतर्षभ।अभ्यासाद्रमते यत्र दुःखान्तं च निगच्छति।।18.36।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":37,"id":"4b1b1521-f5ee-4fcc-a131-31981d686e61","body":"यत्तदग्रे विषमिव परिणामेऽमृतोपमम्।तत्सुखं सात्त्विकं प्रोक्तमात्मबुद्धिप्रसादजम्।।18.37।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":38,"id":"c6c7eeab-bed0-4b79-a24d-afcb2f778bbf","body":"विषयेन्द्रियसंयोगाद्यत्तदग्रेऽमृतोपमम्।परिणामे विषमिव तत्सुखं राजसं स्मृतम्।।18.38।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":39,"id":"49e10ebb-2ac4-4889-b8ed-df5a089e1bc7","body":"यदग्रे चानुबन्धे च सुखं मोहनमात्मनः।निद्रालस्यप्रमादोत्थं तत्तामसमुदाहृतम्।।18.39।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":40,"id":"9907a528-5725-4f63-b205-9af9ac0dc787","body":"न तदस्ति पृथिव्यां वा दिवि देवेषु वा पुनः।सत्त्वं प्रकृतिजैर्मुक्तं यदेभिः स्यात्ित्रभिर्गुणैः।।18.40।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":41,"id":"a5490071-f30e-41dc-852c-5ed9dfb2c556","body":"ब्राह्मणक्षत्रियविशां शूद्राणां च परंतप।कर्माणि प्रविभक्तानि स्वभावप्रभवैर्गुणैः।।18.41।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":42,"id":"b384c40c-9c95-4077-b842-ab4deb515aab","body":"शमो दमस्तपः शौचं क्षान्तिरार्जवमेव च।ज्ञानं विज्ञानमास्तिक्यं ब्रह्मकर्म स्वभावजम्।।18.42।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":43,"id":"268c599a-0d8a-4a21-a574-f3c15ea27c1b","body":"शौर्यं तेजो धृतिर्दाक्ष्यं युद्धे चाप्यपलायनम्।दानमीश्वरभावश्च क्षात्रं कर्म स्वभावजम्।।18.43।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":44,"id":"8d7ebb10-b197-4311-8d47-cf638aad71c3","body":"कृषिगौरक्ष्यवाणिज्यं वैश्यकर्म स्वभावजम्।परिचर्यात्मकं कर्म शूद्रस्यापि स्वभावजम्।।18.44।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":45,"id":"ee8459a0-c9d3-40bf-97f6-3c1b65e4d9d7","body":"स्वे स्वे कर्मण्यभिरतः संसिद्धिं लभते नरः।स्वकर्मनिरतः सिद्धिं यथा विन्दति तच्छृणु।।18.45।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":46,"id":"b30cc11d-c798-4d21-9d20-f203b470e6ec","body":"यतः प्रवृत्तिर्भूतानां येन सर्वमिदं ततम्।स्वकर्मणा तमभ्यर्च्य सिद्धिं विन्दति मानवः।।18.46।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":47,"id":"d0689df5-32ad-47e0-a4c5-18e9fd40561f","body":"श्रेयान्स्वधर्मो विगुणः परधर्मात्स्वनुष्ठितात्।स्वभावनियतं कर्म कुर्वन्नाप्नोति किल्बिषम्।।18.47।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":48,"id":"1afc8249-e12c-4a88-a7ce-9304f199c3eb","body":"सहजं कर्म कौन्तेय सदोषमपि न त्यजेत्।सर्वारम्भा हि दोषेण धूमेनाग्निरिवावृताः।।18.48।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":49,"id":"9000a17e-72aa-4694-aa10-e284e91fcf85","body":"असक्तबुद्धिः सर्वत्र जितात्मा विगतस्पृहः।नैष्कर्म्यसिद्धिं परमां संन्यासेनाधिगच्छति।।18.49।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":50,"id":"036d05aa-2906-4a00-8ba6-0e927d259e9f","body":"सिद्धिं प्राप्तो यथा ब्रह्म तथाप्नोति निबोध मे।समासेनैव कौन्तेय निष्ठा ज्ञानस्य या परा।।18.50।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":51,"id":"9451bb38-35bf-4765-b42b-a063da9230f1","body":"बुद्ध्या विशुद्धया युक्तो धृत्याऽऽत्मानं नियम्य च।शब्दादीन् विषयांस्त्यक्त्वा रागद्वेषौ व्युदस्य च।।18.51।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":52,"id":"8b04d5bd-b349-4a1f-b78d-5cbe5f81790f","body":"विविक्तसेवी लघ्वाशी यतवाक्कायमानसः।ध्यानयोगपरो नित्यं वैराग्यं समुपाश्रितः।।18.52।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":53,"id":"b11ef93e-9678-477f-b99a-e241098684ce","body":"अहङ्कारं बलं दर्पं कामं क्रोधं परिग्रहम्।विमुच्य निर्ममः शान्तो ब्रह्मभूयाय कल्पते।।18.53।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":54,"id":"3cfb7b03-8f53-4c48-ba17-8913d0669249","body":"ब्रह्मभूतः प्रसन्नात्मा न शोचति न काङ्क्षति।समः सर्वेषु भूतेषु मद्भक्तिं लभते पराम्।।18.54।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":55,"id":"5d93bd86-b025-4fa6-9636-7d8872922ad2","body":"भक्त्या मामभिजानाति यावान्यश्चास्मि तत्त्वतः।ततो मां तत्त्वतो ज्ञात्वा विशते तदनन्तरम्।।18.55।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":56,"id":"46bb1bf8-6e9c-4fc1-a976-a9c284f05062","body":"सर्वकर्माण्यपि सदा कुर्वाणो मद्व्यपाश्रयः।मत्प्रसादादवाप्नोति शाश्वतं पदमव्ययम्।।18.56।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":57,"id":"7e94928d-aba4-4c2e-bc09-9848723db261","body":"चेतसा सर्वकर्माणि मयि संन्यस्य मत्परः।बुद्धियोगमुपाश्रित्य मच्चित्तः सततं भव।।18.57।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":58,"id":"11243cb2-0995-49e9-baf1-a69303eedbd0","body":"मच्चित्तः सर्वदुर्गाणि मत्प्रसादात्तरिष्यसि।अथ चेत्त्वमहङ्कारान्न श्रोष्यसि विनङ्क्ष्यसि।।18.58।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":59,"id":"00007043-9cb4-4dee-8922-22c402287fb6","body":"यदहङ्कारमाश्रित्य न योत्स्य इति मन्यसे।मिथ्यैष व्यवसायस्ते प्रकृतिस्त्वां नियोक्ष्यति।।18.59।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":60,"id":"29720149-cdfc-48d3-b051-2b8b0e3e3b49","body":"स्वभावजेन कौन्तेय निबद्धः स्वेन कर्मणा।कर्तुं नेच्छसि यन्मोहात्करिष्यस्यवशोऽपि तत्।।18.60।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":61,"id":"6d271439-d77a-4a57-ac63-38e48c20d8aa","body":"ईश्वरः सर्वभूतानां हृद्देशेऽर्जुन तिष्ठति।भ्रामयन्सर्वभूतानि यन्त्रारूढानि मायया।।18.61।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":62,"id":"335a0c21-88b0-436b-9072-1def28331371","body":"तमेव शरणं गच्छ सर्वभावेन भारत।तत्प्रसादात्परां शान्तिं स्थानं प्राप्स्यसि शाश्वतम्।।18.62।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":63,"id":"89dff36d-6732-4dd3-893b-52e7bef987a5","body":"इति ते ज्ञानमाख्यातं गुह्याद्गुह्यतरं मया।विमृश्यैतदशेषेण यथेच्छसि तथा कुरु।।18.63।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":64,"id":"865a8d0e-964e-46a3-9f08-62443f3f8fa9","body":"सर्वगुह्यतमं भूयः श्रृणु मे परमं वचः।इष्टोऽसि मे दृढमिति ततो वक्ष्यामि ते हितम्।।18.64।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":65,"id":"63199d05-40ed-400e-b26c-c09413239c67","body":"मन्मना भव मद्भक्तो मद्याजी मां नमस्कुरु।मामेवैष्यसि सत्यं ते प्रतिजाने प्रियोऽसि मे।।18.65।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":66,"id":"59073c43-0062-4d64-b27f-abe14cc3010b","body":"सर्वधर्मान्परित्यज्य मामेकं शरणं व्रज।अहं त्वा सर्वपापेभ्यो मोक्षयिष्यामि मा शुचः।।18.66।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":67,"id":"28c4fce3-c025-45e7-9dea-a809255102fb","body":"इदं ते नातपस्काय नाभक्ताय कदाचन।न चाशुश्रूषवे वाच्यं न च मां योऽभ्यसूयति।।18.67।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":68,"id":"24ced4fc-3555-441a-a4de-8d1c96d893c2","body":"य इमं परमं गुह्यं मद्भक्तेष्वभिधास्यति।भक्ितं मयि परां कृत्वा मामेवैष्यत्यसंशयः।।18.68।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":69,"id":"758426e6-ecd2-4c40-b357-6e0250a0867d","body":"न च तस्मान्मनुष्येषु कश्िचन्मे प्रियकृत्तमः।भविता न च मे तस्मादन्यः प्रियतरो भुवि।।18.69।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":70,"id":"007e7d55-2d76-450c-9156-a345d8fa45ed","body":"अध्येष्यते च य इमं धर्म्यं संवादमावयोः।ज्ञानयज्ञेन तेनाहमिष्टः स्यामिति मे मतिः।।18.70।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":71,"id":"64894682-3157-4402-95f1-1f3cc6f1e1ba","body":"श्रद्धावाननसूयश्च श्रृणुयादपि यो नरः।सोऽपि मुक्तः शुभाँल्लोकान्प्राप्नुयात्पुण्यकर्मणाम्।।18.71।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":72,"id":"b42a3ee8-4c54-42f4-98fc-e05bff8ceb1b","body":"कच्चिदेतच्छ्रुतं पार्थ त्वयैकाग्रेण चेतसा।कच्चिदज्ञानसंमोहः प्रनष्टस्ते धनञ्जय।।18.72।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":73,"id":"9fe35f6a-cb87-42d2-90ff-e6c0a29957d1","body":"अर्जुन उवाचनष्टो मोहः स्मृतिर्लब्धा त्वत्प्रसादान्मयाच्युत।स्थितोऽस्मि गतसन्देहः करिष्ये वचनं तव।।18.73।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":74,"id":"a43c0d08-502a-4979-9ca7-5cfb1ec2f79a","body":"सञ्जय उवाचइत्यहं वासुदेवस्य पार्थस्य च महात्मनः।संवादमिममश्रौषमद्भुतं रोमहर्षणम्।।18.74।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":75,"id":"bd16afb8-1b3c-4343-84b8-bd0e61decb6c","body":"व्यासप्रसादाच्छ्रुतवानेतद्गुह्यमहं परम्।योगं योगेश्वरात्कृष्णात्साक्षात्कथयतः स्वयम्।।18.75।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":76,"id":"547194eb-3f9b-491b-bb35-7710aab69422","body":"राजन्संस्मृत्य संस्मृत्य संवादमिममद्भुतम्।केशवार्जुनयोः पुण्यं हृष्यामि च मुहुर्मुहुः।।18.76।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":77,"id":"c7918bfa-ad9a-4310-992d-7bbd63be7844","body":"तच्च संस्मृत्य संस्मृत्य रूपमत्यद्भुतं हरेः।\n\nविस्मयो मे महान् राजन् हृष्यामि च पुनः पुनः।।18.77।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":78,"id":"93a6f80b-a612-4830-8546-cd3065e69c5e","body":"यत्र योगेश्वरः कृष्णो यत्र पार्थो धनुर्धरः।\n\nतत्र श्रीर्विजयो भूतिर्ध्रुवा नीतिर्मतिर्मम।।18.78।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":5,"id":"b8b85872-e571-477e-8e0b-f0b6c019baba","body":"यज्ञदानतपःकर्म न त्याज्यं कार्यमेव तत्।यज्ञो दानं तपश्चैव पावनानि मनीषिणाम्।।18.5।।","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18},{"no":2,"id":"ddfea826-fb8b-4442-8a1c-434eb6129dd3","body":"सञ्जय उवाच\n\nदृष्ट्वा तु पाण्डवानीकं व्यूढं दुर्योधनस्तदा।\n\nआचार्यमुपसङ्गम्य राजा वचनमब्रवीत्।।1.2।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":3,"id":"01abd249-f2b6-44f6-98cc-34cf36395564","body":"पश्यैतां पाण्डुपुत्राणामाचार्य महतीं चमूम्।\n\nव्यूढां द्रुपदपुत्रेण तव शिष्येण धीमता।।1.3।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":4,"id":"6a26d480-1fdd-46c5-b699-93f0829254b9","body":"अत्र शूरा महेष्वासा भीमार्जुनसमा युधि।\n\nयुयुधानो विराटश्च द्रुपदश्च महारथः।।1.4।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":5,"id":"596d0dfd-5b3d-4620-bba5-ecb2ecfb2520","body":"धृष्टकेतुश्चेकितानः काशिराजश्च वीर्यवान्।\n\nपुरुजित्कुन्तिभोजश्च शैब्यश्च नरपुङ्गवः।।1.5।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":6,"id":"e751150c-8107-4303-99b4-b8cac3e64230","body":"युधामन्युश्च विक्रान्त उत्तमौजाश्च वीर्यवान्।\n\nसौभद्रो द्रौपदेयाश्च सर्व एव महारथाः।।1.6।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":7,"id":"2d15c9a6-d5f4-403d-828c-c0234f678dfe","body":"अस्माकं तु विशिष्टा ये तान्निबोध द्विजोत्तम।\n\nनायका मम सैन्यस्य संज्ञार्थं तान्ब्रवीमि ते।।1.7।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":8,"id":"cba9c5a3-a89d-41d5-9997-ae2c1b3c9c4a","body":"भवान्भीष्मश्च कर्णश्च कृपश्च समितिञ्जयः।\n\nअश्वत्थामा विकर्णश्च सौमदत्तिस्तथैव च।।1.8।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":9,"id":"0c09222a-9a55-48a0-8f6d-e8744d7aaa65","body":"अन्ये च बहवः शूरा मदर्थे त्यक्तजीविताः।\n\nनानाशस्त्रप्रहरणाः सर्वे युद्धविशारदाः।।1.9।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":10,"id":"dcb41264-8d89-4eb8-89a3-7fc234fa997d","body":"अपर्याप्तं तदस्माकं बलं भीष्माभिरक्षितम्।\n\nपर्याप्तं त्विदमेतेषां बलं भीमाभिरक्षितम्।।1.10।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":11,"id":"3e3a6794-1e98-4c1c-9390-073f7e449b20","body":"अयनेषु च सर्वेषु यथाभागमवस्थिताः।\n\nभीष्ममेवाभिरक्षन्तु भवन्तः सर्व एव हि।।1.11।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":12,"id":"e9805667-81a4-44f5-8689-aad2ce95f784","body":"तस्य संजनयन्हर्षं कुरुवृद्धः पितामहः।\n\nसिंहनादं विनद्योच्चैः शङ्खं दध्मौ प्रतापवान्।।1.12।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":13,"id":"8cfcde75-6ed2-401a-9fe0-736027a284a2","body":"ततः शङ्खाश्च भेर्यश्च पणवानकगोमुखाः।\n\nसहसैवाभ्यहन्यन्त स शब्दस्तुमुलोऽभवत्।।1.13।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":14,"id":"d1cd7c12-4b80-4e1c-ae02-78f866ec8505","body":"ततः श्वेतैर्हयैर्युक्ते महति स्यन्दने स्थितौ।\n\nमाधवः पाण्डवश्चैव दिव्यौ शङ्खौ प्रदध्मतुः।।1.14।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":15,"id":"b3be19c2-1440-4d47-b7b3-b680f46a972a","body":"पाञ्चजन्यं हृषीकेशो देवदत्तं धनंजयः।\n\nपौण्ड्रं दध्मौ महाशङ्खं भीमकर्मा वृकोदरः।।1.15।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":16,"id":"26b7ba2f-92be-4b79-86d9-33928d5eca5a","body":"अनन्तविजयं राजा कुन्तीपुत्रो युधिष्ठिरः।\n\nनकुलः सहदेवश्च सुघोषमणिपुष्पकौ।।1.16।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":17,"id":"9eb3f8a5-41e4-4398-a0cc-56c23cb9f2b0","body":"काश्यश्च परमेष्वासः शिखण्डी च महारथः।\n\nधृष्टद्युम्नो विराटश्च सात्यकिश्चापराजितः।।1.17।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":18,"id":"6ad3e0b3-e7ca-4985-9807-14b6ac5b4406","body":"द्रुपदो द्रौपदेयाश्च सर्वशः पृथिवीपते।\n\nसौभद्रश्च महाबाहुः शङ्खान्दध्मुः पृथक्पृथक्।।1.18।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":19,"id":"4db83221-e9d1-4484-b3d1-13129bcc3ad5","body":"स घोषो धार्तराष्ट्राणां हृदयानि व्यदारयत्।\n\nनभश्च पृथिवीं चैव तुमुलो व्यनुनादयन्।।1.19।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":20,"id":"7345ef82-77e9-4c14-9b8a-e5128443ebd0","body":"अथ व्यवस्थितान् दृष्ट्वा धार्तराष्ट्रान्कपिध्वजः।\n\nप्रवृत्ते शस्त्रसंपाते धनुरुद्यम्य पाण्डवः।।1.20।।\n","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":21,"id":"af975dd8-b535-4386-b97b-e873a4177c3f","body":"हृषीकेशं तदा वाक्यमिदमाह महीपते अर्जुन उवाच\n\nसेनयोरुभयोर्मध्ये रथं स्थापय मेऽच्युत।।1.21।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":22,"id":"4c70d30b-fe95-43fd-b895-349eff5b901c","body":"यावदेतान्निरीक्षेऽहं योद्धुकामानवस्थितान्।\n\nकैर्मया सह योद्धव्यमस्मिन्रणसमुद्यमे।।1.22।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":23,"id":"52aa5172-5dce-4801-a01b-c32d08382f96","body":"योत्स्यमानानवेक्षेऽहं य एतेऽत्र समागताः।\n\nधार्तराष्ट्रस्य दुर्बुद्धेर्युद्धे प्रियचिकीर्षवः।।1.23।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":24,"id":"6422a2c3-adba-4046-ab82-a7fcb1948394","body":"संजय उवाच\n\nएवमुक्तो हृषीकेशो गुडाकेशेन भारत।\n\nसेनयोरुभयोर्मध्ये स्थापयित्वा रथोत्तमम्।।1.24।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":25,"id":"03c8bd52-55ad-4859-b464-56ff4771e33e","body":"भीष्मद्रोणप्रमुखतः सर्वेषां च महीक्षिताम्।\n\nउवाच पार्थ पश्यैतान्समवेतान्कुरूनिति।।1.25।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":26,"id":"abd7d110-c191-40e9-b0b4-b88279c8a25d","body":"तत्रापश्य त्स्थितान् पार्थः पितृ़नथ पितामहान्।\n\nआचार्यान् मातुलान् भ्रातृ़न् पुत्रान् पौत्रान् सखींस् तथा।।1.26।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":27,"id":"85d2520a-bbff-4377-a96c-1b81bc23218b","body":"श्वशुरान्सुहृदश्चैव सेनयोरुभयोरपि।\n\nतान्समीक्ष्य स कौन्तेयः सर्वान्बन्धूनवस्थितान्।।1.27।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":28,"id":"0f422b32-a617-4431-a805-f294d6e0099b","body":"कृपया परयाऽऽविष्टो विषीदन्न् इदम् अब्रवीत्।\n\nअर्जुन उवाच\n\nदृष्ट्वेमं स्वजनं कृष्ण युयुत्सुं समुपस्थितम्।।1.28।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":29,"id":"406e5251-fd59-4d1e-98a4-42c5c784d3c9","body":"सीदन्ति मम गात्राणि मुखं च परिशुष्यति।\n\nवेपथुश्च शरीरे मे रोमहर्षश्च जायते।।1.29।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":30,"id":"181f0d7d-8351-402c-ae3a-f64ab612a598","body":"गाण्डीवं स्रंसते हस्तात्त्वक्चैव परिदह्यते।\n\nन च शक्नोम्यवस्थातुं भ्रमतीव च मे मनः।।1.30।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":31,"id":"ec3534f6-0d6e-488f-9bd4-d7039e4e1aa8","body":"निमित्तानि च पश्यामि विपरीतानि केशव।\n\nन च श्रेयोऽनुपश्यामि हत्वा स्वजनमाहवे।।1.31।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":32,"id":"42a5685a-9319-4cf5-be9e-d0652241c1fe","body":"न काङ्क्षे विजयं कृष्ण न च राज्यं सुखानि च।\n\nकिं नो राज्येन गोविन्द किं भोगैर्जीवितेन वा।।1.32।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":33,"id":"cc1ad682-aee3-40a3-b946-71daa0b2a03e","body":"येषामर्थे काङ्क्षितं नो राज्यं भोगाः सुखानि च।\n\nत इमेऽवस्थिता युद्धे प्राणांस्त्यक्त्वा धनानि च।।1.33।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":34,"id":"97b74546-3aa0-4342-9011-c0bff4487585","body":"आचार्याः पितरः पुत्रास्तथैव च पितामहाः।\n\nमातुलाः श्चशुराः पौत्राः श्यालाः सम्बन्धिनस्तथा।।1.34।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":35,"id":"b33ede92-1824-4468-b77c-66deb9ae263e","body":"एतान्न हन्तुमिच्छामि घ्नतोऽपि मधुसूदन।\n\nअपि त्रैलोक्यराज्यस्य हेतोः किं नु महीकृते।।1.35।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":36,"id":"5946cde6-0b5b-427b-aa7b-fa5e2034714a","body":"निहत्य धार्तराष्ट्रान्नः का प्रीतिः स्याज्जनार्दन।\n\nपापमेवाश्रयेदस्मान्हत्वैतानाततायिनः।।1.36।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":37,"id":"a0e2320a-bbb1-483b-a2f5-5dfdcac5f582","body":"तस्मान्नार्हा वयं हन्तुं धार्तराष्ट्रान्स्वबान्धवान्।\n\nस्वजनं हि कथं हत्वा सुखिनः स्याम माधव।।1.37।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":38,"id":"b30d8cfd-09dc-4ada-ae73-aa4cd63c715a","body":"यद्यप्येते न पश्यन्ति लोभोपहतचेतसः।\n\nकुलक्षयकृतं दोषं मित्रद्रोहे च पातकम्।।1.38।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":39,"id":"dc178a03-322e-4312-92a4-18de5bd558ce","body":"कथं न ज्ञेयमस्माभिः पापादस्मान्निवर्तितुम्।\n\nकुलक्षयकृतं दोषं प्रपश्यद्भिर्जनार्दन।।1.39।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":40,"id":"f55741da-c64c-4ee1-a64f-6b60527fb07b","body":"कुलक्षये प्रणश्यन्ति कुलधर्माः सनातनाः।\n\nधर्मे नष्टे कुलं कृत्स्नमधर्मोऽभिभवत्युत।।1.40।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":41,"id":"412e58c6-0ffb-4b6a-a37f-a77ca6def9ea","body":"अधर्माभिभवात्कृष्ण प्रदुष्यन्ति कुलस्त्रियः।\n\nस्त्रीषु दुष्टासु वार्ष्णेय जायते वर्णसङ्करः।।1.41।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":42,"id":"29005595-957e-4e8a-a27e-7d4f515eb7c4","body":"सङ्करो नरकायैव कुलघ्नानां कुलस्य च।\n\nपतन्ति पितरो ह्येषां लुप्तपिण्डोदकक्रियाः।।1.42।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1},{"no":43,"id":"d7b4c586-1245-474f-86df-39820500f3d3","body":"दोषैरेतैः कुलघ्नानां वर्णसङ्करकारकैः।\n\nउत्साद्यन्ते जातिधर्माः कुलधर्माश्च शाश्वताः।।1.43।।\n ","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1}],"translations":[{"id":"37ce6a04-4307-4949-a38e-7a03d564657d","type":"verses","target":{"id":"c4f1bb16-8c28-468c-a59e-9aa49d81bd27","title":null,"body":"By renouncing the fruits of their actions, the intelligent ones, endowed with the power of determination and freed from the bonds of birth, go to a place that is free from illness.","translit_title":null,"body_translit":"karma-jaṁ buddhi-yuktā hi phalaṁ tyaktvā manīṣhiṇaḥ\njanma-bandha-vinirmuktāḥ padaṁ gachchhanty-anāmayam\n","body_translit_meant":"karma-jam—born of fruitive actions; buddhi-yuktāḥ—endowed with equanimity of intellect; hi—as; phalam—fruits; tyaktvā—abandoning; manīṣhiṇaḥ—the wise; janma-bandha-vinirmuktāḥ—freedom from the bondage of life and death; padam—state; gachchhanti—attain; anāmayam—devoid of sufferings\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"875c3239-80df-49ca-a0fd-2c81f252dff9"},{"id":"ce3eda37-d217-4259-9677-f7007e78dd57","type":"verses","target":{"id":"feadcc4d-ac32-4959-b4eb-3a3c1b347a6c","title":null,"body":"Then, mounted on a mighty chariot, yoked with white horses, Madhava (Krishna) and the son of Pandu (Arjuna) blew their heavenly conch shells.","translit_title":null,"body_translit":"tataḥ śhvetairhayairyukte mahati syandane sthitau\nmādhavaḥ pāṇḍavaśhchaiva divyau śhaṅkhau pradadhmatuḥ\n","body_translit_meant":"tataḥ—then; śhvetaiḥ—by white; hayaiḥ—horses; yukte—yoked; mahati—glorious; syandane—chariot; sthitau—seated; mādhavaḥ—Shree Krishna, the husband of the goddess of fortune, Lakshmi; pāṇḍavaḥ—Arjun; cha—and; eva—also; divyau—Divine; śhaṅkhau—conch shells; pradadhmatuḥ—blew\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"d1cd7c12-4b80-4e1c-ae02-78f866ec8505"},{"id":"4515cd4f-953f-4de9-82e3-281544cb6afc","type":"verses","target":{"id":"dfa44672-7340-42e6-b01d-9a730860fafa","title":null,"body":"Sanjaya said, \"O descendant of Bharata (Dhrtarastra)! Thus instructed by Gudakesa (Arjuna), Hrsikesa halted the best chariot at a place in between the two armies, in front of Bhisma and Drona and all the rulers of the earth. He then said, 'O son of Prtha! Behold these Kurus, assembled.\"","translit_title":null,"body_translit":"sañjaya uvācha\nevam ukto hṛiṣhīkeśho guḍākeśhena bhārata\nsenayor ubhayor madhye sthāpayitvā rathottamam\n","body_translit_meant":"sañjayaḥ uvācha—Sanjay said; evam—thus; uktaḥ—addressed; hṛiṣhīkeśhaḥ—Shree Krishna, the Lord of the senses; guḍākeśhena—by Arjun, the conqueror of sleep; bhārata—descendant of Bharat; senayoḥ—armies; ubhayoḥ—the two; madhye—between; sthāpayitvā—having drawn; ratha-uttamam—magnificent chariot\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"6422a2c3-adba-4046-ab82-a7fcb1948394"},{"id":"17ebb48d-34ee-4352-9c12-7f8534395507","type":"verses","target":{"id":"39449b68-18ce-4c34-99df-30c66938edee","title":null,"body":"O slayer of Mandhu (Krsna)! I do not desire to slay these men, even though they slay me, not even for the sake of the kingdom of the three worlds, let alone for the sake of the earth.","translit_title":null,"body_translit":"āchāryāḥ pitaraḥ putrās tathaiva cha pitāmahāḥ\nmātulāḥ śhvaśhurāḥ pautrāḥ śhyālāḥ sambandhinas tathā\n","body_translit_meant":"āchāryāḥ—teachers; pitaraḥ—fathers; putrāḥ—sons; tathā—as well; eva—indeed; cha—also; pitāmahāḥ—grandfathers; mātulāḥ—maternal uncles; śhvaśhurāḥ—fathers-in-law; pautrāḥ—grandsons; śhyālāḥ—brothers-in-law; sambandhinaḥ—kinsmen; tathā—as well; \n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"97b74546-3aa0-4342-9011-c0bff4487585"},{"id":"ea0bac47-f0c8-4838-95c2-b2fcff294492","type":"verses","target":{"id":"58448bd2-82f7-4ce1-9e04-545c26ec71cc","title":null,"body":"O Janardana! Dwelling in hell is certain for men whose family duties have fallen into disuse; this we have heard.","translit_title":null,"body_translit":"utsanna-kula-dharmāṇāṁ manuṣhyāṇāṁ janārdana\nnarake ‘niyataṁ vāso bhavatītyanuśhuśhruma\n","body_translit_meant":"utsanna—destroyed; kula-dharmāṇām—whose family traditions; manuṣhyāṇām—of such human beings; janārdana—he who looks after the public, Shree Krishna; narake—in hell; aniyatam—indefinite; vāsaḥ—dwell; bhavati—is; iti—thus; anuśhuśhruma—I have heard from the learned\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"6e1b3253-f74a-468c-bac2-ac0c235e18fa"},{"id":"45edfb80-ec0a-43d8-abe8-e388c53b5694","type":"verses","target":{"id":"8f17deb2-c34e-4932-becc-a39d3c373ce5","title":null,"body":"Do not stoop to unmanliness, O son of Kunti! It does not befit you. Shunning the petty weakness of heart, arise, O scorcher of foes!","translit_title":null,"body_translit":"klaibyaṁ mā sma gamaḥ pārtha naitat tvayyupapadyate\nkṣhudraṁ hṛidaya-daurbalyaṁ tyaktvottiṣhṭha parantapa\n","body_translit_meant":"klaibyam—unmanliness; mā sma—do not; gamaḥ—yield to; pārtha—Arjun, the son of Pritha; na—not; etat—this; tvayi—to you; upapadyate—befitting; kṣhudram—petty; hṛidaya—heart; daurbalyam—weakness; tyaktvā—giving up; uttiṣhṭha—arise; param-tapa—conqueror of enemies\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"87d25193-abb0-41ee-ab19-a79b1ec57228"},{"id":"29ea310b-1f6e-4e47-aa05-42ba4f341e20","type":"verses","target":{"id":"80e16098-41a0-4f9a-8822-ea5efe00c9d3","title":null,"body":"Just as boyhood, youth, and old age come to the embodied soul in this body, so too is the attainment of another body; the wise man is not deluded by this.","translit_title":null,"body_translit":"dehino ’smin yathā dehe kaumāraṁ yauvanaṁ jarā\ntathā dehāntara-prāptir dhīras tatra na muhyati\n","body_translit_meant":"dehinaḥ—of the embodied; asmin—in this; yathā—as; dehe—in the body; kaumāram—childhood; yauvanam—youth; jarā—old age; tathā—similarly; deha-antara—another body; prāptiḥ—achieves; dhīraḥ—the wise; tatra—thereupon; na muhyati—are not deluded\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"31ffc781-e002-4ce9-bfde-7a888dba87a2"},{"id":"b6cf8be5-cdfb-4145-ba7d-161701f788d3","type":"verses","target":{"id":"0ab17cef-9c24-4c1f-9675-9d754e740978","title":null,"body":"Weapons cannot cut This; fire cannot burn This; water cannot make This wet; and the wind cannot make This dry.","translit_title":null,"body_translit":"nainaṁ chhindanti śhastrāṇi nainaṁ dahati pāvakaḥ\nna chainaṁ kledayantyāpo na śhoṣhayati mārutaḥ\n","body_translit_meant":"na—not; enam—this soul; chhindanti—shred; śhastrāṇi—weapons; na—nor; enam—this soul; dahati—burns; pāvakaḥ—fire; na—not; cha—and; enam—this soul; kledayanti—moisten; āpaḥ—water; na—nor; śhoṣhayati—dry; mārutaḥ—wind\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"e71956e3-054d-42f1-bda2-e26dc4bcd083"},{"id":"eae84b23-7033-4e5b-8c10-b5559d9079ed","type":"verses","target":{"id":"abeed16a-65dc-4732-8b9b-6d3e8a90a15e","title":null,"body":"On the other hand, if you do not fight this righteous war, then you will incur sin by shirking your own duty and forfeiting your fame.","translit_title":null,"body_translit":"atha chet tvam imaṁ dharmyaṁ saṅgrāmaṁ na kariṣhyasi\ntataḥ sva-dharmaṁ kīrtiṁ cha hitvā pāpam avāpsyasi\n","body_translit_meant":"atha chet—if, however; tvam—you; imam—this; dharmyam saṅgrāmam—righteous war; na—not; kariṣhyasi—act; tataḥ—then; sva-dharmam—one’s duty in accordance with the Vedas; kīrtim—reputation; cha—and; hitvā—abandoning; pāpam—sin; avāpsyasi—will incur\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"eef4e73b-1ce7-4905-9460-f24c50d18200"},{"id":"16caf2d4-47f5-4619-b2f1-0ebd0cd3d622","type":"verses","target":{"id":"76c1503b-d1de-4933-a498-ed0a33e3ea80","title":null,"body":"-. O son of Prtha! Those whose very nature is desire, whose goal is heaven, who esteem only the Vedic declaration [of fruits], who declare that there is nothing else, who proclaim this flowery speech about the paths to the lordship of the objects of enjoyment—paths that are full of different actions—and who desire action alone as a fruit of their birth—they are men without insight.","translit_title":null,"body_translit":"kāmātmānaḥ svarga-parā \n\n janma-karma-phala-pradām\n\n kriyā-viśeṣa-bahulāṁ\n\n bhogaiśvarya-gatiṁ prati\n","body_translit_meant":"kāmaātmānaḥ—desirous of sense gratification; svarga-parāḥ—aiming to achieve heavenly planets; janma-karma-phala-pradām—resulting in fruitive action, good birth, etc.; kriyā-viśeṣa—pompous ceremonies; bahulām—various; bhoga—sense enjoyment; aiśvarya—opulence; gatim—progress; prati—towards.","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"1ae9f05f-f76f-49e7-9e10-8aa04ae8213d"},{"id":"572eb743-7af1-4364-8f93-de9e45f82008","type":"verses","target":{"id":"571636d6-b191-49f7-b9fd-5b11e3589ef5","title":null,"body":"Hrsikesa (Krsna) blew the Pancajanya; Dhananjaya (Arjuna) blew the Devadatta; and Bhima, of the terrible deeds, blew the mighty conchshell, Paundra.","translit_title":null,"body_translit":"pāñchajanyaṁ hṛiṣhīkeśho devadattaṁ dhanañjayaḥ\npauṇḍraṁ dadhmau mahā-śhaṅkhaṁ bhīma-karmā vṛikodaraḥ\n","body_translit_meant":"pāñchajanyam—the conch shell named Panchajanya; hṛiṣhīka-īśhaḥ—Shree Krishna, the Lord of the mind and senses; devadattam—the conch shell named Devadutta; dhanam-jayaḥ—Arjun, the winner of wealth; pauṇḍram—the conch named Paundra; dadhmau—blew; mahā-śhaṅkham—mighty conch; bhīma-karmā—one who performs herculean tasks; vṛika-udaraḥ—Bheem, the voracious eater\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"b3be19c2-1440-4d47-b7b3-b680f46a972a"},{"id":"12f48190-3445-46a6-a7c9-257f00fcbfa7","type":"verses","target":{"id":"980b6db8-2359-486f-9377-467ec9b4e664","title":null,"body":"There in both the armies, the son of Prtha observed his fathers, paternal grandfathers, teachers, maternal uncles, brothers, sons, sons' sons, and comrades, fathers-in-law, and also friends.","translit_title":null,"body_translit":"bhīṣhma-droṇa-pramukhataḥ sarveṣhāṁ cha mahī-kṣhitām\nuvācha pārtha paśhyaitān samavetān kurūn iti\n","body_translit_meant":"bhīṣhma—Grandsire Bheeshma; droṇa—Dronacharya; pramukhataḥ—in the presence; sarveṣhām—all; cha—and; mahī-kṣhitām—other kings; uvācha—said; pārtha—Arjun, the son of Pritha; paśhya—behold; etān—these; samavetān—gathered; kurūn—descendants of Kuru; iti—thus\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"03c8bd52-55ad-4859-b464-56ff4771e33e"},{"id":"08e52bec-c363-4b4f-95e5-1629e57aba5b","type":"verses","target":{"id":"1777c781-b698-4875-aa03-0bccffa1aadb","title":null,"body":"What joy would we gain by slaying Dhrtarastra's sons, O Janardana?","translit_title":null,"body_translit":"etān na hantum ichchhāmi ghnato ’pi madhusūdana\napi trailokya-rājyasya hetoḥ kiṁ nu mahī-kṛite\n","body_translit_meant":"etān—these; na—not; hantum—to slay; ichchhāmi—I wish; ghnataḥ—killed; api—even though; madhusūdana—Shree Krishna, killer of the demon Madhu; api—even though; trai-lokya-rājyasya—dominion over three worlds; hetoḥ—for the sake of; kim nu—what to speak of; mahī-kṛite—for the earth\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"b33ede92-1824-4468-b77c-66deb9ae263e"},{"id":"6f445a62-ea15-4a6f-9b6d-aa4432888764","type":"verses","target":{"id":"cd86f3a6-2184-4bb4-8fad-883d2a260e33","title":null,"body":"Alas! What a great sin have we resolved to commit! For, out of greed for the joy of the kingdom, we are striving to slay our own kinfolk!","translit_title":null,"body_translit":"aho bata mahat pāpaṁ kartuṁ vyavasitā vayam\nyad rājya-sukha-lobhena hantuṁ sva-janam udyatāḥ\n","body_translit_meant":"aho—alas; bata—how; mahat—great; pāpam—sins; kartum—to perform; vyavasitāḥ—have decided; vayam—we; yat—because; rājya-sukha-lobhena—driven by the desire for kingly pleasure; hantum—to kill; sva-janam—kinsmen; udyatāḥ—intending;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"86bb76ea-6382-4ff6-afc7-59738e97e2e8"},{"id":"f2bfb31e-23f2-42b4-a364-08c3514ebc79","type":"verses","target":{"id":"f39e03cf-b11f-40ea-a978-ba5a42455c83","title":null,"body":"With my very nature, overpowered by the taint of pity, and with my mind, utterly confused as to the right action at this present juncture, I ask you: Tell me definitely what would be good for me; I am your pupil; please teach me, who is taking refuge in You.","translit_title":null,"body_translit":"kārpaṇya-doṣhopahata-svabhāvaḥ\npṛichchhāmi tvāṁ dharma-sammūḍha-chetāḥ\nyach-chhreyaḥ syānniśhchitaṁ brūhi tanme\nśhiṣhyaste ’haṁ śhādhi māṁ tvāṁ prapannam\n","body_translit_meant":"kārpaṇya-doṣha—the flaw of cowardice; upahata—besieged; sva-bhāvaḥ—nature; pṛichchhāmi—I am asking; tvām—to you; dharma—duty; sammūḍha—confused; chetāḥ—in heart; yat—what; śhreyaḥ—best; syāt—may be; niśhchitam—decisively; brūhi—tell; tat—that; me—to me; śhiṣhyaḥ—disciple; te—your; aham—I; śhādhi—please instruct; mām—me; tvām—unto you; prapannam—surrendered\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"ca237316-a195-4e07-b164-6d8115bdb966"},{"id":"6d13aae8-c436-41a8-8663-92b4810c5545","type":"verses","target":{"id":"2527f9ec-8c3a-4154-8c34-1f23b03343d9","title":null,"body":"And know That to be indestructible, by Which all this (universe) is pervaded; no one is capable of causing destruction to this unchanging One.","translit_title":null,"body_translit":"avināśhi tu tadviddhi yena sarvam idaṁ tatam\nvināśham avyayasyāsya na kaśhchit kartum arhati\n","body_translit_meant":"avināśhi—indestructible; tu—indeed; tat—that; viddhi—know; yena—by whom; sarvam—entire; idam—this; tatam—pervaded; vināśham—destruction; avyayasya—of the imperishable; asya—of it; na kaśhchit—no one; kartum—to cause; arhati—is able\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"f4b2bb0a-5e00-403c-b731-dd8231738d39"},{"id":"0140e74e-d2dc-4037-a38b-da09a27fae86","type":"verses","target":{"id":"5c5987e5-b742-4672-a2d4-ae8189cdba35","title":null,"body":"Death is certain indeed for what is born; and birth is certain for the dead. Therefore, you should not lament over something that is unavoidable.","translit_title":null,"body_translit":"jātasya hi dhruvo mṛityur dhruvaṁ janma mṛitasya cha\ntasmād aparihārye ’rthe na tvaṁ śhochitum arhasi\n","body_translit_meant":"jātasya—for one who has been born; hi—for; dhruvaḥ—certain; mṛityuḥ—death; dhruvam—certain; janma—birth; mṛitasya—for the dead; cha—and; tasmāt—therefore; aparihārye arthe—in this inevitable situation; na—not; tvam—you; śhochitum—lament; arhasi—befitting\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"7ff2614c-fcd5-4e82-822c-408555e1be48"},{"id":"952cfa2e-bb5e-4232-af67-0024ce87cc0d","type":"verses","target":{"id":"b616414b-29f7-49cf-9578-a5195a4a4b01","title":null,"body":"If you are slain, you shall attain heaven; or if you conquer, you shall enjoy the earth. Therefore, O son of Kunti, stand up with resolution made in favor of fighting the battle.","translit_title":null,"body_translit":"hato vā prāpsyasi swargaṁ jitvā vā bhokṣhyase mahīm\ntasmād uttiṣhṭha kaunteya yuddhāya kṛita-niśhchayaḥ\n","body_translit_meant":"hataḥ—slain; vā—or; prāpsyasi—you will attain; swargam—celestial abodes; jitvā—by achieving victory; vā—or; bhokṣhyase—you shall enjoy; mahīm—the kingdom on earth; tasmāt—therefore; uttiṣhṭha—arise; kaunteya—Arjun, the son of Kunti; yuddhāya—for fight; kṛita-niśhchayaḥ—with determination\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"bcff51af-3113-45d1-8a85-cbf7f5e036ea"},{"id":"ad999a10-3045-4deb-aa89-fd11aec37df0","type":"verses","target":{"id":"7d01d8f5-fa90-4fec-aa5f-dcf81803064a","title":null,"body":"Let your claim rest on action alone and never on the fruits; you should never be the cause of the fruits of action; let not your attachment be to inaction.","translit_title":null,"body_translit":"karmaṇy-evādhikāras te mā phaleṣhu kadāchana\nmā karma-phala-hetur bhūr mā te saṅgo ’stvakarmaṇi\n","body_translit_meant":"karmaṇi—in prescribed duties; eva—only; adhikāraḥ—right; te—your; mā—not; phaleṣhu—in the fruits; kadāchana—at any time; mā—never; karma-phala—results of the activities; hetuḥ—cause; bhūḥ—be; mā—not; te—your; saṅgaḥ—attachment; astu—must be; akarmaṇi—in inaction\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"01f5c04e-ee58-46e4-99b4-f79833ad7f6b"},{"id":"43a15ad4-85b9-498b-9caa-e8389fd7500a","type":"verses","target":{"id":"e14fdadf-38ca-4d1f-88ec-c3bac84c49d8","title":null,"body":"Kunti's son, the king Yudhisthira, blew the Anantavijaya; Nakula and Sahadeva blew the Sughosa and Manipuspaka, respectively.","translit_title":null,"body_translit":"anantavijayaṁ rājā kuntī-putro yudhiṣhṭhiraḥ\nnakulaḥ sahadevaśhcha sughoṣha-maṇipuṣhpakau\n","body_translit_meant":"ananta-vijayam—the conch named Anantavijay; rājā—king; kuntī-putraḥ—son of Kunti; yudhiṣhṭhiraḥ—Yudhishthir; nakulaḥ—Nakul; sahadevaḥ—Sahadev; cha—and; sughoṣha-maṇipuṣhpakau—the conche shells named Sughosh and Manipushpak;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"26b7ba2f-92be-4b79-86d9-33928d5eca5a"},{"id":"905e3d9c-9d10-4dba-b081-f8d4c47846cb","type":"verses","target":{"id":"6b0bea3e-9030-49f2-94b3-1a97d53d4d2b","title":null,"body":"Noticing all those kinsmen arrayed in the army, the son of Kunti was overwhelmed with immense compassion and, despondent, he uttered this:","translit_title":null,"body_translit":"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","body_translit_meant":"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","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"abd7d110-c191-40e9-b0b4-b88279c8a25d"},{"id":"06bcbd83-8b94-4219-a137-7c930e13f778","type":"verses","target":{"id":"afcd1404-903e-436d-86b4-2f030574deef","title":null,"body":"Nothing but sin would slay these desperadoes and take hold of us; therefore, we should not slay Dhrtarastra's sons, our own relatives.","translit_title":null,"body_translit":"nihatya dhārtarāṣhṭrān naḥ kā prītiḥ syāj janārdana\npāpam evāśhrayed asmān hatvaitān ātatāyinaḥ\n","body_translit_meant":"nihatya—by killing; dhārtarāṣhṭrān—the sons of Dhritarashtra; naḥ—our; kā—what; prītiḥ—pleasure; syāt—will there be; janārdana—he who looks after the public, Shree Krishna; pāpam—vices; eva—certainly; āśhrayet—must come upon; asmān—us; hatvā—by killing; etān—all these; ātatāyinaḥ—aggressors;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"5946cde6-0b5b-427b-aa7b-fa5e2034714a"},{"id":"94a52b8d-9f2d-45e1-a979-1fba135deb23","type":"verses","target":{"id":"a76ad15d-58ac-48d9-b983-5d64bc26d761","title":null,"body":"It would be more beneficial for me if Dhrtarastra's men, with weapons in their hands, should slay me, unresisting and unarmed.","translit_title":null,"body_translit":"yadi mām apratīkāram aśhastraṁ śhastra-pāṇayaḥ\ndhārtarāṣhṭrā raṇe hanyus tan me kṣhemataraṁ bhavet\n","body_translit_meant":"yadi—if; mām—me; apratīkāram—unresisting; aśhastram—unarmed; śhastra-pāṇayaḥ—those with weapons in hand; dhārtarāṣhṭrāḥ—the sons of Dhritarashtra; raṇe—on the battlefield; hanyuḥ—shall kill; tat—that; me—to me; kṣhema-taram—better; bhavet—would be\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"1e3525e7-2061-4a43-9e44-172765934444"},{"id":"0a7e7169-f7cb-4a05-aad3-f96885c16778","type":"verses","target":{"id":"d34b439e-5163-49db-9a3f-8e9542d4393b","title":null,"body":"I do not clearly see what would drive out my grief, the scorcher of my senses, even after achieving a prosperous and unrivaled kingship on this earth and also the overlordship of the gods in the heavens.","translit_title":null,"body_translit":"na hi prapaśhyāmi mamāpanudyād\nyach-chhokam uchchhoṣhaṇam-indriyāṇām\navāpya bhūmāv-asapatnamṛiddhaṁ\nrājyaṁ surāṇāmapi chādhipatyam\n","body_translit_meant":"na—not; hi—certainly; prapaśhyāmi—I see; mama—my; apanudyāt—drive away; yat—which; śhokam—anguish; uchchhoṣhaṇam—is drying up; indriyāṇām—of the senses; avāpya—after achieving; bhūmau—on the earth; asapatnam—unrivalled; ṛiddham—prosperous; rājyam—kingdom; surāṇām—like the celestial gods; api—even; cha—also; ādhipatyam—sovereignty\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"5958a6b6-7882-4064-a8e9-045f791b7ed4"},{"id":"7badef36-5c66-442e-ad7f-a9e8acf51320","type":"verses","target":{"id":"df1a247c-58e9-4ebb-8834-0b118712b534","title":null,"body":"These physical bodies, which have an end and suffer destruction, are declared to belong to the eternal, embodied Soul, which is indestructible and incomprehensible. Therefore, fight, O descendant of Bharata!","translit_title":null,"body_translit":"antavanta ime dehā nityasyoktāḥ śharīriṇaḥ\nanāśhino ’prameyasya tasmād yudhyasva bhārata\n","body_translit_meant":"anta-vantaḥ—having an end; ime—these; dehāḥ—material bodies; nityasya—eternally; uktāḥ—are said; śharīriṇaḥ—of the embodied soul; anāśhinaḥ—indestructible; aprameyasya—immeasurable; tasmāt—therefore; yudhyasva—fight; bhārata—descendant of Bharat, Arjun\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"9a8d43d9-ec17-4e12-98fc-3f89e41a3085"},{"id":"0db2fa30-17a1-4651-89d3-7b9f5a59891e","type":"verses","target":{"id":"5f793786-9ed1-4b72-ac06-e9c7f2d97246","title":null,"body":"O descendant of Bharata! The beings have an unmanifest beginning, a manifest middle, and an unmanifest end. Therefore, why mourn?","translit_title":null,"body_translit":"avyaktādīni bhūtāni vyakta-madhyāni bhārata\navyakta-nidhanānyeva tatra kā paridevanā\n","body_translit_meant":"avyakta-ādīni—unmanifest before birth; bhūtāni—created beings; vyakta—manifest; madhyāni—in the middle; bhārata—Arjun, scion of Bharat; avyakta—unmanifest; nidhanāni—on death; eva—indeed; tatra—therefore; kā—why; paridevanā—grieve\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"62996c92-a97d-498a-91c8-900760314fe1"},{"id":"ccbd60f7-75b7-4ea2-8a37-7b0161ae64d8","type":"verses","target":{"id":"3d61e428-374d-4c71-a0c6-79e6a2ae2a8d","title":null,"body":"Viewing pleasure and pain, gain and loss, victory and defeat alike, you should get yourself ready for the battle. Thus, you will not incur sin.","translit_title":null,"body_translit":"sukha-duḥkhe same kṛitvā lābhālābhau jayājayau\ntato yuddhāya yujyasva naivaṁ pāpam avāpsyasi\n","body_translit_meant":"sukha—happiness; duḥkhe—in distress; same kṛitvā—treating alike; lābha-alābhau—gain and loss; jaya-ajayau—victory and defeat; tataḥ—thereafter; yuddhāya—for fighting; yujyasva—engage; na—never; evam—thus; pāpam—sin; avāpsyasi—shall incur\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"facd98b5-2d2a-4a16-9842-5476e8e07ce5"},{"id":"2879012a-3adc-47c4-a149-8ba3e91b9a9d","type":"verses","target":{"id":"bcf9924e-1097-4dab-8d01-013c9cc1e43c","title":null,"body":"O Dhananjaya! Establish yourself in the Yoga, perform actions while abandoning attachment, and remain even-minded in success and failure; for, even-mindedness is said to be the Yoga.","translit_title":null,"body_translit":"yoga-sthaḥ kuru karmāṇi saṅgaṁ tyaktvā dhanañjaya\nsiddhy-asiddhyoḥ samo bhūtvā samatvaṁ yoga uchyate\n","body_translit_meant":"yoga-sthaḥ—being steadfast in yog; kuru—perform; karmāṇi—duties; saṅgam—attachment; tyaktvā—having abandoned; dhanañjaya—Arjun; siddhi-asiddhyoḥ—in success and failure; samaḥ—equipoised; bhūtvā—becoming; samatvam—equanimity; yogaḥ—Yog; uchyate—is called\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"215978ea-c60c-432f-8988-45d943ef38f4"},{"id":"ca16a644-d028-42bd-ba64-bae7bc5b3f22","type":"verses","target":{"id":"8ec2cc65-9b16-4eaf-b56a-fc2ee340f5fa","title":null,"body":"And the king of Kasi, a great archer, and Sikhandin, a mighty warrior; Dhrstadyumna and the king of Virata, and the unconquered Satyaki;","translit_title":null,"body_translit":"kāśhyaśhcha parameṣhvāsaḥ śhikhaṇḍī cha mahā-rathaḥ\ndhṛiṣhṭadyumno virāṭaśhcha sātyakiśh chāparājitaḥ\n","body_translit_meant":"kāśhyaḥ—King of Kashi; cha—and; parama-iṣhu-āsaḥ—the excellent archer; śhikhaṇḍī—Shikhandi; cha—also; mahā-rathaḥ—warriors who could single handedly match the strength of ten thousand ordinary warriors; dhṛiṣhṭadyumnaḥ—Dhrishtadyumna; virāṭaḥ—Virat; cha—and; sātyakiḥ—Satyaki; cha—and; aparājitaḥ—invincible;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"9eb3f8a5-41e4-4398-a0cc-56c23cb9f2b0"},{"id":"3dafceb8-be82-4b92-a9b2-eb5127865e7f","type":"verses","target":{"id":"2d3cd93f-2b29-46fb-a965-42bb8c85854d","title":null,"body":"Arjuna said, \"O Krishna! On seeing these war-mongering kinsfolk of mine arrayed in the armies, my limbs fail and my mouth goes dry.\"","translit_title":null,"body_translit":"śhvaśhurān suhṛidaśh chaiva senayor ubhayor api\ntān samīkṣhya sa kaunteyaḥ sarvān bandhūn avasthitān\n","body_translit_meant":"ś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","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"85d2520a-bbff-4377-a96c-1b81bc23218b"},{"id":"0ca5afff-c1f0-474c-87a1-13fcaa141e63","type":"verses","target":{"id":"260d8dfe-a486-4f34-b059-75d429171ad5","title":null,"body":"How could we be truly happy, O Madhava, after slaying our own kinsmen?","translit_title":null,"body_translit":"tasmān nārhā vayaṁ hantuṁ dhārtarāṣhṭrān sa-bāndhavān \nsva-janaṁ hi kathaṁ hatvā sukhinaḥ syāma mādhava\n","body_translit_meant":"tasmāt—hence; na—never; arhāḥ—behoove; vayam—we; hantum—to kill; dhārtarāṣhṭrān—the sons of Dhritarashtra; sva-bāndhavān—along with friends; sva-janam—kinsmen; hi—certainly; katham—how; hatvā—by killing; sukhinaḥ—happy; syāma—will we become; mādhava—Shree Krishna, the husband of Yogmaya\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"a0e2320a-bbb1-483b-a2f5-5dfdcac5f582"},{"id":"7d8519aa-2aa8-4c2b-bddb-890234ffa149","type":"verses","target":{"id":"79416907-2c0d-4b83-ba70-be2b48f13035","title":null,"body":"Sanjaya said, Having said this much about the battle, and letting his bow and arrows fall, Arjuna sat down on the back of the chariot, his mind agitated with grief.","translit_title":null,"body_translit":"sañjaya uvācha\nevam uktvārjunaḥ saṅkhye rathopastha upāviśhat\nvisṛijya sa-śharaṁ chāpaṁ śhoka-saṁvigna-mānasaḥ\n","body_translit_meant":"sañjayaḥ uvācha—Sanjay said; evam uktvā—speaking thus; arjunaḥ—Arjun; saṅkhye—in the battlefield; ratha upasthe—on the chariot; upāviśhat—sat; visṛijya—casting aside; sa-śharam—along with arrows; chāpam—the bow; śhoka—with grief; saṁvigna—distressed; mānasaḥ—mind\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"70f41097-a0ca-4b19-98ed-f8fac35139b3"},{"id":"2c60db4e-dfea-4029-908f-0db054235765","type":"verses","target":{"id":"4d5fb6d4-f5fb-448e-aae9-f59534fc2fdd","title":null,"body":"It is indeed good to go about begging in this world without killing the elders of great dignity; however, I would not enjoy, with greed for wealth, the blood-stained objects of pleasure by killing my elders.","translit_title":null,"body_translit":"gurūnahatvā hi mahānubhāvān\nśhreyo bhoktuṁ bhaikṣhyamapīha loke\nhatvārtha-kāmāṁstu gurūnihaiva\nbhuñjīya bhogān rudhira-pradigdhān\n","body_translit_meant":"gurūn—teachers; ahatvā—not killing; hi—certainly; mahā-anubhāvān—noble elders; śhreyaḥ—better; bhoktum—to enjoy life; bhaikṣhyam—by begging; api—even; iha loke—in this world; hatvā—killing; artha—gain; kāmān—desiring; tu—but; gurūn—noble elders; iha—in this world; eva—certainly; bhuñjīya—enjoy; bhogān—pleasures; rudhira—blood; pradigdhān—tainted with\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"b161333f-2b9b-4daa-82e9-a9e9df78a5b4"},{"id":"94f5fd3a-b3ed-4826-9cb1-96ab86dae9d0","type":"verses","target":{"id":"57dcb9ae-dbda-4cf5-8df3-6f87d327da0c","title":null,"body":"O best among persons! That wise person becomes immortal, whom these situations do not trouble, and to whom pleasure and pain are equal.","translit_title":null,"body_translit":"yaṁ hi na vyathayantyete puruṣhaṁ puruṣharṣhabha\nsama-duḥkha-sukhaṁ dhīraṁ so ’mṛitatvāya kalpate\n","body_translit_meant":"yam—whom; hi—verily; na—not; vyathayanti—distressed; ete—these; puruṣham—person; puruṣha-ṛiṣhabha—the noblest amongst men, Arjun; sama—equipoised; duḥkha—distress; sukham—happiness; dhīram—steady; saḥ—that person; amṛitatvāya—for liberation; kalpate—becomes eligible\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"3765b3ba-df95-4c68-ac68-ebce6ada8da9"},{"id":"9dd83dd4-738e-4336-9a6f-db5ec68c3c4a","type":"verses","target":{"id":"0d4337b3-b979-40a8-8ffc-e40a29b3591a","title":null,"body":"This is declared to be non-evident, imponderable, and unchangeable. Therefore, understanding this as such, you should not lament.","translit_title":null,"body_translit":"avyakto ’yam achintyo ’yam avikāryo ’yam uchyate\ntasmādevaṁ viditvainaṁ nānuśhochitum arhasi\n","body_translit_meant":"avyaktaḥ—unmanifested; ayam—this soul; achintyaḥ—inconceivable; ayam—this soul; avikāryaḥ—unchangeable; ayam—this soul; uchyate—is said; tasmāt—therefore; evam—thus; viditvā—having known; enam—this soul; na—not; anuśhochitum—to grieve; arhasi—befitting\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"33b9aab2-28f1-4ebc-a83b-3d9c2660878f"},{"id":"30aeba54-d899-464e-be50-ad21d005b46f","type":"verses","target":{"id":"0aa64ea1-4bc7-4009-ab7a-0930de662208","title":null,"body":"The mighty charioteers will think of you as having withdrawn from the battle out of fear; having been highly esteemed by these men, you will be viewed lightly.","translit_title":null,"body_translit":"bhayād raṇād uparataṁ mansyante tvāṁ mahā-rathāḥ\nyeṣhāṁ cha tvaṁ bahu-mato bhūtvā yāsyasi lāghavam\n","body_translit_meant":"bhayāt—out of fear; raṇāt—from the battlefield; uparatam—have fled; maṁsyante—will think; tvām—you; mahā-rathāḥ—warriors who could single handedly match the strength of ten thousand ordinary warriors; yeṣhām—for whom; cha—and; tvam—you; bahu-mataḥ—high esteemed; bhūtvā—having been; yāsyasi—you will loose; lāghavam—decreased in value\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"4bf155b8-fe6b-430a-ae24-2bdd6b47406b"},{"id":"04d63124-83f7-4cd3-9b21-2e01e34c8d33","type":"verses","target":{"id":"c17ffd24-3378-4c78-997a-9e9e221dea31","title":null,"body":"The Vedas bind through the three strands. Therefore, O Arjuna, be free from the three strands, free from the pairs of opposites; be established in this eternal Being; be free from acquisition and preservation; and possess the Self.","translit_title":null,"body_translit":"trai-guṇya-viṣhayā vedā nistrai-guṇyo bhavārjuna\nnirdvandvo nitya-sattva-stho niryoga-kṣhema ātmavān\n","body_translit_meant":"trai-guṇya—of the three modes of material nature; viṣhayāḥ—subject matter; vedāḥ—Vedic scriptures; nistrai-guṇyaḥ—above the three modes of material nature, transcendental; bhava—be; arjuna—Arjun; nirdvandvaḥ—free from dualities; nitya-sattva-sthaḥ—eternally fixed in truth; niryoga-kṣhemaḥ—unconcerned about gain and preservation; ātma-vān—situated in the self\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"31818d76-d20b-4e76-b498-ff40292a7c13"},{"id":"2b78af43-9810-404c-a500-c79563aab2c3","type":"verses","target":{"id":"c55b2b07-5034-41fc-a02d-edc4deddf89e","title":null,"body":"The Pancala king, a mighty archer, and Draupad's five sons, as well as the mighty-armed son of Subhadra, each blew their own conch-shells individually.","translit_title":null,"body_translit":"drupado draupadeyāśhcha sarvaśhaḥ pṛithivī-pate\nsaubhadraśhcha mahā-bāhuḥ śhaṅkhāndadhmuḥ pṛithak pṛithak\n","body_translit_meant":"drupadaḥ—Drupad; draupadeyāḥ—the five sons of Draupadi; cha—and; sarvaśhaḥ—all; pṛithivī-pate—Ruler of the earth; saubhadraḥ—Abhimanyu, the son of Subhadra; cha—also; mahā-bāhuḥ—the mighty-armed; śhaṅkhān—conch shells; dadhmuḥ—blew; pṛithak pṛithak—individually\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"6ad3e0b3-e7ca-4985-9807-14b6ac5b4406"},{"id":"53b716b8-ac21-4318-b448-96e327df1fdc","type":"verses","target":{"id":"050c9010-0686-4db6-84b5-71af70715a86","title":null,"body":"Shivers and goosebumps arise in my body; the Gandiva slips from my hand and my skin is burning all over.","translit_title":null,"body_translit":"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","body_translit_meant":"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","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"0f422b32-a617-4431-a805-f294d6e0099b"},{"id":"f03fc89f-2fc2-4b54-85c9-18288a2d649b","type":"verses","target":{"id":"18742dd0-c4a7-4ed7-acad-cfb92c7ebadf","title":null,"body":"Of course, these (Dhrtarastra's sons), with their intellects overpowered by greed, do not see the evil consequences ensuing from the ruin of the family and the sin of cheating friends.","translit_title":null,"body_translit":"yady apy ete na paśhyanti lobhopahata-chetasaḥ\nkula-kṣhaya-kṛitaṁ doṣhaṁ mitra-drohe cha pātakam\n","body_translit_meant":"yadi api—even though; ete—they; na—not; paśhyanti—see; lobha—greed; upahata—overpowered; chetasaḥ—thoughts; kula-kṣhaya-kṛitam—in annihilating their relatives; doṣham—fault; mitra-drohe—to wreak treachery upon friends; cha—and; pātakam—sin;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"b30d8cfd-09dc-4ada-ae73-aa4cd63c715a"},{"id":"58b74d7d-0db8-46c3-aad6-45c0cbaf0900","type":"verses","target":{"id":"a80067e4-aa9c-4de7-b651-52bcbb1c5984","title":null,"body":"Sanjaya said, \"O scorcher of foes, Dhrtarastra! Having spoken to Hrsikesa, the master of sense-organs, Govinda, in this manner, and having declared, 'I will not fight,' Gudakesa became silent!\"","translit_title":null,"body_translit":"sañjaya uvācha\nevam-uktvā hṛiṣhīkeśhaṁ guḍākeśhaḥ parantapa\nna yotsya iti govindam uktvā tūṣhṇīṁ babhūva ha\n","body_translit_meant":"sañjayaḥ uvācha—Sanjay said; evam—thus; uktvā—having spoken; hṛiṣhīkeśham—to Shree Krishna, the master of the mind and senses; guḍākeśhaḥ—Arjun, the conquerer of sleep; parantapaḥ—Arjun, the chastiser of the enemies; na yotsye—I shall not fight; iti—thus; govindam—Krishna, the giver of pleasure to the senses; uktvā—having addressed; tūṣhṇīm—silent; babhūva—became ha\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"eda561f5-8625-411b-9e00-1b9bb45063c5"},{"id":"63e97fa4-af70-4add-815d-1500725d64b7","type":"verses","target":{"id":"e6da2ff2-ed51-4007-9042-1d07139c37de","title":null,"body":"Whoever views This as the slayer and whoever believes This to be the slain, both of them do not understand: This does not slay, nor is This slain.","translit_title":null,"body_translit":"ya enaṁ vetti hantāraṁ yaśh chainaṁ manyate hatam\nubhau tau na vijānīto nāyaṁ hanti na hanyate\n","body_translit_meant":"yaḥ—one who; enam—this; vetti—knows; hantāram—the slayer; yaḥ—one who; cha—and; enam—this; manyate—thinks; hatam—slain; ubhau—both; tau—they; na—not; vijānītaḥ—in knowledge; na—neither; ayam—this; hanti—slays; na—nor; hanyate—is killed\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"723eccb3-208d-4368-b8f9-04c2d1be9061"},{"id":"3d98dc88-895a-4555-8346-cb3e5897df61","type":"verses","target":{"id":"40b4c1df-fe70-47a4-8a94-c7de2dda1dfe","title":null,"body":"This someone observes as a wonder; similarly, another speaks of This as a wonder; another hears This as a wonder; but even after hearing, not even one understands This.","translit_title":null,"body_translit":"āśhcharya-vat paśhyati kaśhchid enan\nāśhcharya-vad vadati tathaiva chānyaḥ\nāśhcharya-vach chainam anyaḥ śhṛiṇoti\nśhrutvāpyenaṁ veda na chaiva kaśhchit\n","body_translit_meant":"āśhcharya-vat—as amazing; paśhyati—see; kaśhchit—someone; enam—this soul; āśhcharya-vat—as amazing; vadati—speak of; tathā—thus; eva—indeed; cha—and; anyaḥ—other; āśhcharya-vat—similarly amazing; cha—also; enam—this soul; anyaḥ—others; śhṛiṇoti—hear; śhrutvā—having heard; api—even; enam—this soul; veda—understand; na—not; cha—and; eva—even; kaśhchit—some\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"088e8d44-15d6-41c6-a6e6-bbbb38b132bb"},{"id":"ac122fce-6921-4cbc-895e-5509fa05d8a3","type":"verses","target":{"id":"10dfced3-6f69-46a9-a409-38e35693c302","title":null,"body":"Listen, how this knowledge, imparted to you for your Sankhya, is also for the Yoga; endowed with this knowledge, you shall cast off the bondage of action, O son of Prtha!","translit_title":null,"body_translit":"eṣhā te ’bhihitā sānkhye\nbuddhir yoge tvimāṁ śhṛiṇu\nbuddhyā yukto yayā pārtha\nkarma-bandhaṁ prahāsyasi\n","body_translit_meant":"eṣhā—hitherto; te—to you; abhihitā—explained; sānkhye—by analytical knowledge; buddhiḥ yoge—by the yog of intellect; tu—indeed; imām—this; śhṛiṇu—listen; buddhyā—by understanding; yuktaḥ—united; yayā—by which; pārtha—Arjun, the son of Pritha; karma-bandham—bondage of karma; prahāsyasi—you shall be released from\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"c92c51c6-8e9a-4a1e-9c7e-80907a3410a0"},{"id":"49fcb99a-8fd9-4bcd-8e92-6339665aa61f","type":"verses","target":{"id":"adf7d6d1-577a-40f0-8182-ea065de9e4a5","title":null,"body":"O Dhananjaya! The inferior action stays away at a distance due to the yoga of one's contact with the determining faculty; in the determining faculty, you must seek refuge; wretched are those who are the cause of the fruits of action.","translit_title":null,"body_translit":"dūreṇa hy-avaraṁ karma buddhi-yogād dhanañjaya\nbuddhau śharaṇam anvichchha kṛipaṇāḥ phala-hetavaḥ\n","body_translit_meant":"dūreṇa—(discrad) from far away; hi—certainly; avaram—inferior; karma—reward-seeking actions; buddhi-yogāt—with the intellect established in Divine knowledge; dhanañjaya—Arjun; buddhau—divine knowledge and insight; śharaṇam—refuge; anvichchha—seek; kṛipaṇāḥ—miserly; phala-hetavaḥ—those seeking fruits of their work\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"c343170b-857c-4c59-8a60-da7cdad205d9"},{"id":"63a9ba14-be8a-4ba8-910c-2f29be456ae7","type":"verses","target":{"id":"fc88a7f6-c571-40a6-af6a-e927aa3d2580","title":null,"body":"Leaving their taste behind, the sense-objects retreat from the embodied one who abstains from food; his taste too disappears when he beholds the Supreme.","translit_title":null,"body_translit":"viṣhayā vinivartante nirāhārasya dehinaḥ\nrasa-varjaṁ raso ’pyasya paraṁ dṛiṣhṭvā nivartate\n","body_translit_meant":"viṣhayāḥ—objects for senses; vinivartante—restrain; nirāhārasya—practicing self restraint; dehinaḥ—for the embodied; rasa-varjam—cessation of taste; rasaḥ—taste; api—however; asya—person’s; param—the Supreme; dṛiṣhṭvā—on realization; nivartate—ceases to be\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"de2a7eec-09f3-4bae-96d0-6a20f4a7d908"},{"id":"9e480461-e6e0-4b43-8014-07e760fce081","type":"verses","target":{"id":"a463121a-f8ba-452e-afd1-e50c286e41f8","title":null,"body":"Whether we should conquer in the battle, or they should conquer us—we do not know which is better for us. For, having killed whom, we would not wish to live at all, the same persons stand before us as Dhrtarastra's men.","translit_title":null,"body_translit":"na chaitadvidmaḥ kataranno garīyo\nyadvā jayema yadi vā no jayeyuḥ\nyāneva hatvā na jijīviṣhāmas\nte ’vasthitāḥ pramukhe dhārtarāṣhṭrāḥ\n","body_translit_meant":"na—not; cha—and; etat—this; vidmaḥ—we know; katarat—which; naḥ—for us; garīyaḥ—is preferable; yat vā—whether; jayema—we may conquer; yadi—if; vā—or; naḥ—us; jayeyuḥ—they may conquer; yān—whom; eva—certainly; hatvā—after killing; na—not; jijīviṣhāmaḥ—we desire to live; te—they; avasthitāḥ—are standing; pramukhe—before us; dhārtarāṣhṭrāḥ—the sons of Dhritarashtra\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"b63d09bc-7031-437f-8a68-9a0e57afaa87"},{"id":"7cb0fc2a-7036-4b41-9387-d15294133e93","type":"verses","target":{"id":"7649131c-b47a-40c1-961c-92120ee811cf","title":null,"body":"Birth does not happen to what is non-existent, and destruction to what is existent; the finality of these two has been seen by the seers of reality.","translit_title":null,"body_translit":"nāsato vidyate bhāvo nābhāvo vidyate sataḥ\nubhayorapi dṛiṣhṭo ’nta stvanayos tattva-darśhibhiḥ\n","body_translit_meant":"na—no; asataḥ—of the temporary; vidyate—there is; bhāvaḥ—is; na—no; abhāvaḥ—cessation; vidyate—is; sataḥ—of the eternal; ubhayoḥ—of the two; api—also; dṛiṣhṭaḥ—observed; antaḥ—conclusion; tu—verily; anayoḥ—of these; tattva—of the truth; darśhibhiḥ—by the seers\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"8082cafc-5ac0-4900-b840-a529f94ab320"},{"id":"469471e7-87c5-4190-b364-9f99b6d9e267","type":"verses","target":{"id":"06ef141a-abdd-4841-a059-ae7adb114160","title":null,"body":"On the other hand, if you deem this as being born constantly or as dying constantly, even then, O mighty-armed one, you should not lament.","translit_title":null,"body_translit":"atha chainaṁ nitya-jātaṁ nityaṁ vā manyase mṛitam\ntathāpi tvaṁ mahā-bāho naivaṁ śhochitum arhasi\n","body_translit_meant":"atha—if, however; cha—and; enam—this soul; nitya-jātam—taking constant birth; nityam—always; vā—or; manyase—you think; mṛitam—dead; tathā api—even then; tvam—you; mahā-bāho—mighty-armed one, Arjun; na—not; evam—like this; śhochitum—grieve; arhasi—befitting\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"c951b729-3c2b-493b-9ff6-bcf45e566236"},{"id":"84c5ce8a-a662-41e2-bfdc-05cc4ae4ed84","type":"verses","target":{"id":"87ebe8e7-ba96-4e0b-b96e-71052c0c8589","title":null,"body":"Your enemies will slander your abilities and speak of you in many sayings that should not be spoken. Is there anything more painful than that?","translit_title":null,"body_translit":"avāchya-vādānśh cha bahūn vadiṣhyanti tavāhitāḥ\nnindantastava sāmarthyaṁ tato duḥkhataraṁ nu kim\n","body_translit_meant":"avāchya-vādān—using harsh words; cha—and; bahūn—many; vadiṣhyanti—will say; tava—your; ahitāḥ—enemies; nindantaḥ—defame; tava—your; sāmarthyam—might; tataḥ—than that; duḥkha-taram—more painful; nu—indeed; kim—what\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"d0f5d082-7f10-4440-b972-69236f0e1e05"},{"id":"7052541f-79a8-46d2-8007-9b7dbca1c500","type":"verses","target":{"id":"0bf34391-281e-451b-bf71-e0aba8618bf7","title":null,"body":"What portion of a reservoir, flooded with water everywhere, is useful for a man in thirst? That much portion alone in all the Vedas is useful for an intelligent student of the Vedas.","translit_title":null,"body_translit":"yāvān artha udapāne sarvataḥ samplutodake\ntāvānsarveṣhu vedeṣhu brāhmaṇasya vijānataḥ\n","body_translit_meant":"yāvān—whatever; arthaḥ—purpose; uda-pāne—a well of water; sarvataḥ—in all respects; sampluta-udake—by a large lake; tāvān—that many; sarveṣhu—in all; vedeṣhu—Vedas; brāhmaṇasya—one who realizes the Absolute Truth; vijānataḥ—who is in complete knowledge\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"3a1ccc95-b7c0-4e34-8e4c-b0cda8fffc72"},{"id":"e18f9882-4a4b-434b-95ae-6a88f45ee01b","type":"verses","target":{"id":"5e45ee33-fc41-465c-8c18-f78a81f8c6b0","title":null,"body":"He whose mind is undisturbed amidst sorrows, who is free from desire amidst pleasures, and from whom longing, fear, and wrath have departed—he is said to be a firm-minded sage.","translit_title":null,"body_translit":"duḥkheṣhv-anudvigna-manāḥ sukheṣhu vigata-spṛihaḥ\nvīta-rāga-bhaya-krodhaḥ sthita-dhīr munir uchyate\n","body_translit_meant":"duḥkheṣhu—amidst miseries; anudvigna-manāḥ—one whose mind is undisturbed; sukheṣhu—in pleasure; vigata-spṛihaḥ—without craving; vīta—free from; rāga—attachment; bhaya—fear; krodhaḥ—anger; sthita-dhīḥ—enlightened person; muniḥ—a sage; uchyate—is called\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"25649f9b-473c-4a72-90c2-1453804b0200"},{"id":"eea55e7c-d70a-4ebb-831f-2714c52203a2","type":"verses","target":{"id":"4c854bd7-c8a7-4b80-8265-3c1eb75b51a8","title":null,"body":"The ability to make decisions is not for one who is not a master of Yoga; and concentration of the mind is not for one who is not a master of Yoga; and peace is not for one who does not concentrate; whence could happiness come to one who has no peace?","translit_title":null,"body_translit":"nāsti buddhir-ayuktasya na chāyuktasya bhāvanā\nna chābhāvayataḥ śhāntir aśhāntasya kutaḥ sukham\n","body_translit_meant":"na—not; asti—is; buddhiḥ—intellect; ayuktasya—not united; na—not; cha—and; ayuktasya—not united; bhāvanā—contemplation; na—nor; cha—and; abhāvayataḥ—for those not united; śhāntiḥ—peace; aśhāntasya—of the unpeaceful; kutaḥ—where; sukham—happiness\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"544fda97-5d4e-4eab-92ce-85c5ed1026f8"},{"id":"58b2cf50-5320-4f93-ab2e-2d62764d6ae1","type":"verses","target":{"id":"507c5c2f-a94b-4c68-a939-d6d6e3f657b4","title":null,"body":"You seem to be confounding my intellect with Your seemingly confusing speech. Therefore, tell me with certainty that one thing by which I may attain the good (emancipation).","translit_title":null,"body_translit":"vyāmiśhreṇeva vākyena buddhiṁ mohayasīva me\ntad ekaṁ vada niśhchitya yena śhreyo ’ham āpnuyām\n","body_translit_meant":"vyāmiśhreṇa iva—by your apparently ambiguous; vākyena—words; buddhim—intellect; mohayasi—I am getting bewildered; iva—as it were; me—my; tat—therefore; ekam—one; vada—please tell; niśhchitya—decisively; yena—by which; śhreyaḥ—the highest good; aham—I; āpnuyām—may attain\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"838eef05-201f-4ec6-bf5e-30064750c199"},{"id":"48a0ac10-b68c-4605-a1ef-1b166eb7ec78","type":"verses","target":{"id":"5875f24d-fc2b-413a-bd2c-183b916c6fb4","title":null,"body":"The devas, gratified with necessary action, will grant you the things sacrificed. Therefore, whoever enjoys their gifts without offering them to these devas is surely a thief.","translit_title":null,"body_translit":"iṣhṭān bhogān hi vo devā dāsyante yajña-bhāvitāḥ\ntair dattān apradāyaibhyo yo bhuṅkte stena eva saḥ\n","body_translit_meant":"iṣhṭān—desired; bhogān—necessities of life; hi—certainly; vaḥ—unto you; devāḥ—the celestial gods; dāsyante—will grant; yajña-bhāvitāḥ—satisfied by sacrifice; taiḥ—by them; dattān—things granted; apradāya—without offering; ebhyaḥ—to them; yaḥ—who; bhuṅkte—enjoys; stenaḥ—thieves; eva—verily; saḥ—they\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"bcb7f35c-9987-4be4-9ce8-6c2710c6403d"},{"id":"7840bf80-8a8d-4fad-9e1f-6343743c3ccc","type":"verses","target":{"id":"ce383df9-eef5-4c10-bdef-603b3a7674db","title":null,"body":"O descendant of Bharata, Hrsikesa, as if smiling, spoke to him who was sinking in despondency between two armies.","translit_title":null,"body_translit":"tam-uvācha hṛiṣhīkeśhaḥ prahasanniva bhārata\nsenayorubhayor-madhye viṣhīdantam-idaṁ vachaḥ\n","body_translit_meant":"tam—to him; uvācha—said; hṛiṣhīkeśhaḥ—Shree Krishna, the master of mind and senses; prahasan—smilingly; iva—as if; bhārata—Dhritarashtra, descendant of Bharat; senayoḥ—of the armies; ubhayoḥ—of both; madhye—in the midst of; viṣhīdantam—to the grief-stricken; idam—this; vachaḥ—words\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"eabff6ac-9fec-41da-b7aa-3826adde8aaf"},{"id":"d0c26de0-39f3-49a4-8fbd-9d26e95c036c","type":"verses","target":{"id":"4c61d22e-d2cc-4beb-80d2-5a3cc094e633","title":null,"body":"This is neither born nor ever dies; nor, having not been at one time, will it come to be again. It is unborn, destructionless, eternal, and ancient, and is not slain even when the body is slain.","translit_title":null,"body_translit":"na jāyate mriyate vā kadāchin\nnāyaṁ bhūtvā bhavitā vā na bhūyaḥ\najo nityaḥ śhāśhvato ’yaṁ purāṇo\nna hanyate hanyamāne śharīre\n","body_translit_meant":"na jāyate—is not born; mriyate—dies; vā—or; kadāchit—at any time; na—not; ayam—this; bhūtvā—having once existed; bhavitā—will be; vā—or; na—not; bhūyaḥ—further; ajaḥ—unborn; nityaḥ—eternal; śhāśhvataḥ—immortal; ayam—this; purāṇaḥ—the ancient; na hanyate—is not destroyed; hanyamāne—is destroyed; śharīre—when the body\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"50a37211-f02c-4528-9467-20456eba8f86"},{"id":"2a954a4f-2729-4cce-964e-5ba83c6f168c","type":"verses","target":{"id":"8d8efda1-2af4-48c3-a1dc-06fb7f27d39e","title":null,"body":"O descendant of Bharata! This embodied One in the body of everyone is ever incapable of being slain. Therefore, you should not lament over all beings.","translit_title":null,"body_translit":"dehī nityam avadhyo ’yaṁ dehe sarvasya bhārata\ntasmāt sarvāṇi bhūtāni na tvaṁ śhochitum arhasi\n","body_translit_meant":"dehī—the soul that dwells within the body; nityam—always; avadhyaḥ—immortal; ayam—this soul; dehe—in the body; sarvasya—of everyone; bhārata—descendant of Bharat, Arjun; tasmāt—therefore; sarvāṇi—for all; bhūtāni—living entities; na—not; tvam—you; śhochitum—mourn; arhasi—should\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"32ed8e4d-2414-408d-bde6-0d3e36c20859"},{"id":"a701eba0-5e1c-444f-a755-307d8bbd6027","type":"verses","target":{"id":"f4ddb845-00e6-4460-94d5-5e88098b35b5","title":null,"body":"Here, there is no loss due to transgression, and there is no contrary downward course (sin); even a little of this righteous thing can save one from great danger.","translit_title":null,"body_translit":"nehābhikrama-nāśho ’sti pratyavāyo na vidyate\nsvalpam apyasya dharmasya trāyate mahato bhayāt\n","body_translit_meant":"na—not; iha—in this; abhikrama—efforts; nāśhaḥ—loss; asti—there is; pratyavāyaḥ—adverse result; na—not; vidyate—is; su-alpam—a little; api—even; asya—of this; dharmasya—occupation; trāyate—saves; mahataḥ—from great; bhayāt—danger\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"05881db0-585a-49ba-8955-1213855c06b4"},{"id":"fa2aa0b9-0497-400d-bafb-5e04f43741bd","type":"verses","target":{"id":"a2d8ac45-30c5-432c-a5ca-ed6e97c51fc3","title":null,"body":"Whoever is endowed with the faculty of determination casts off both good and bad actions. Therefore, strive for Yoga, which is proficiency in action.","translit_title":null,"body_translit":"buddhi-yukto jahātīha ubhe sukṛita-duṣhkṛite\ntasmād yogāya yujyasva yogaḥ karmasu kauśhalam\n","body_translit_meant":"buddhi-yuktaḥ—endowed with wisdom; jahāti—get rid of; iha—in this life; ubhe—both; sukṛita-duṣhkṛite—good and bad deeds; tasmāt—therefore; yogāya—for Yog; yujyasva—strive for; yogaḥ—yog is; karmasu kauśhalam—the art of working skillfully\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"772f6539-7a5d-4324-b674-375c73bfdbd8"},{"id":"3956a517-800f-4d8a-85e3-9f14718ba18c","type":"verses","target":{"id":"c4f51279-b492-4efd-9bd6-b2aca519e67b","title":null,"body":"For, the turbulent sense-organs can forcibly carry away even the mind of this discerning person, O son of Kunti!","translit_title":null,"body_translit":"yatato hyapi kaunteya puruṣhasya vipaśhchitaḥ\nindriyāṇi pramāthīni haranti prasabhaṁ manaḥ\n","body_translit_meant":"yatataḥ—while practicing self-control; hi—for; api—even; kaunteya—Arjun, the son of Kunti; puruṣhasya—of a person; vipaśhchitaḥ—one endowed with discrimination; indriyāṇi—the senses; pramāthīni—turbulent; haranti—carry away; prasabham—forcibly; manaḥ—the mind\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"4663f778-e4b0-4ea3-a2ad-97cf6412d2f0"},{"id":"5a2af26d-6ba6-4259-ba01-199f5a9464a6","type":"verses","target":{"id":"f37fb6de-a51c-43cf-93bb-c6b5ab85ad42","title":null,"body":"Just as waters enter into the ocean which is being filled continuously yet firmly established, so too he into whom all objects of desire enter—he attains peace; not he who longs for the objects of desire.","translit_title":null,"body_translit":"āpūryamāṇam achala-pratiṣhṭhaṁ\nsamudram āpaḥ praviśhanti yadvat\ntadvat kāmā yaṁ praviśhanti sarve\nsa śhāntim āpnoti na kāma-kāmī\n","body_translit_meant":"āpūryamāṇam—filled from all sides; achala-pratiṣhṭham—undisturbed; samudram—ocean; āpaḥ—waters; praviśhanti—enter; yadvat—as; tadvat—likewise; kāmāḥ—desires; yam—whom; praviśhanti—enter; sarve—all; saḥ—that person; śhāntim—peace; āpnoti—attains; na—not; kāma-kāmī—one who strives to satisfy desires\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"ff8ea330-1ff2-4911-bd53-6a79796034a1"},{"id":"20870160-b7cb-4b42-8776-cbc7efe4349d","type":"verses","target":{"id":"9c5dc306-59fa-415a-ba8c-efd3188391c2","title":null,"body":"The Bhagavat said, \"The two-fold path in this world—the one with Yoga of knowledge for men of reflection and the other with Yoga of action for men of Yoga—has been declared by Me to be one, O sinless one!\"","translit_title":null,"body_translit":"śhrī bhagavān uvācha\nloke’smin dvi-vidhā niṣhṭhā purā proktā mayānagha\njñāna-yogena sāṅkhyānāṁ karma-yogena yoginām\n","body_translit_meant":"śhrī-bhagavān uvācha—the Blessed Lord said; loke—in the world; asmin—this; dvi-vidhā—two kinds of; niṣhṭhā—faith; purā—previously; proktā—explained; mayā—by me (Shree Krishna); anagha—sinless; jñāna-yogena—through the path of knowledge; sānkhyānām—for those inclined toward contemplation; karma-yogena—through the path of action; yoginām—of the yogis\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"c746f7a6-21f4-4bb3-a0ee-0e4914b30f6e"},{"id":"ae61b0ee-11fb-4574-b51c-bc887d45757e","type":"verses","target":{"id":"63b041f2-0f2f-478c-a69b-f85896b49f8c","title":null,"body":"The righteous persons, who eat the remnants of the actions to be performed necessarily, are freed from all sins. But those who cook, intending for their own selves, are sinners and consume sin.","translit_title":null,"body_translit":"yajña-śhiṣhṭāśhinaḥ santo muchyante sarva-kilbiṣhaiḥ\nbhuñjate te tvaghaṁ pāpā ye pachantyātma-kāraṇāt\n","body_translit_meant":"yajña-śhiṣhṭa—of remnants of food offered in sacrifice; aśhinaḥ—eaters; santaḥ—saintly persons; muchyante—are released; sarva—all kinds of; kilbiṣhaiḥ—from sins; bhuñjate—enjoy; te—they; tu—but; agham—sins; pāpāḥ—sinners; ye—who; pachanti—cook (food); ātma-kāraṇāt—for their own sake\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"57287a81-3902-4aee-929c-6ef6c1a9c6fe"},{"id":"d691669e-9b29-4fa0-bb49-086cffb332cb","type":"verses","target":{"id":"a8d4fecf-bc1c-443a-94a4-2d1415327ba8","title":null,"body":"-. O son of Prtha! Those whose very nature is desire, whose goal is heaven, who esteem only the Vedic declaration [of fruits], who declare that there is nothing else, who proclaim this flowery speech about the paths to the lordship of the objects of enjoyment—paths that are full of different actions—and who desire action alone as a fruit of their birth—they are men without insight.","translit_title":null,"body_translit":"yāmimāṁ puṣhpitāṁ vāchaṁ pravadanty-avipaśhchitaḥ\nveda-vāda-ratāḥ pārtha nānyad astīti vādinaḥ\n kāmātmānaḥ swarga-parā janma-karma-phala-pradām\nkriyā-viśheṣha-bahulāṁ bhogaiśhwarya-gatiṁ prati\n","body_translit_meant":"yām imām—all these; puṣhpitām—flowery; vācham—words; pravadanti—speak; avipaśhchitaḥ—those with limited understanding; veda-vāda-ratāḥ—attached to the flowery words of the Vedas; pārtha—Arjun, the son of Pritha; na anyat—no other; asti—is; iti—thus; vādinaḥ—advocate;\n kāma-ātmānaḥ—desirous of sensual pleasure; swarga-parāḥ—aiming to achieve the heavenly planets; janma-karma-phala—high birth and fruitive results; pradāṁ—awarding; kriyā-viśheṣha—pompous ritualistic ceremonies; bahulām—various; bhoga—gratification; aiśhwarya—luxury; gatim—progress; prati—toward\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"a06dbdaf-1f5e-430c-a19f-5f8e32fa2d14"},{"id":"266fe420-07c9-4fee-875b-69629b73863d","type":"verses","target":{"id":"dc84deef-8b1e-41e6-97ab-fa23f40478aa","title":null,"body":"When your determining faculty surpasses the impenetrable thicket of delusion, then you will attain an attitude of futility regarding what needs to be heard and what has been heard.","translit_title":null,"body_translit":"yadā te moha-kalilaṁ buddhir vyatitariṣhyati\ntadā gantāsi nirvedaṁ śhrotavyasya śhrutasya cha\n","body_translit_meant":"yadā—when; te—your; moha—delusion; kalilam—quagmire; buddhiḥ—intellect; vyatitariṣhyati—crosses; tadā—then; gantāsi—you shall acquire; nirvedam—indifferent; śhrotavyasya—to what is yet to be heard; śhrutasya—to what has been heard; cha—and\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"d81a7991-7d8a-421e-b824-7b8a12b5ef39"},{"id":"b8a53380-7e02-4a30-95da-a9069780d874","type":"verses","target":{"id":"890558e5-8114-422f-898f-4a404a16064f","title":null,"body":"In a person meditating on sense-objects, attachment to them is born in succession; from attachment springs passion; from passion arises wrath.","translit_title":null,"body_translit":"dhyāyato viṣhayān puṁsaḥ saṅgas teṣhūpajāyate\nsaṅgāt sañjāyate kāmaḥ kāmāt krodho ’bhijāyate\n","body_translit_meant":"dhyāyataḥ—contemplating; viṣhayān—sense objects; puṁsaḥ—of a person; saṅgaḥ—attachment; teṣhu—to them (sense objects); upajāyate—arises; saṅgāt—from attachment; sañjāyate—develops; kāmaḥ—desire; kāmāt—from desire; krodhaḥ—anger; abhijāyate—arises\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"c28df07d-e8c1-40d7-9b32-def9acc360cd"},{"id":"7af9c436-65f0-4b8d-a485-fdd7dbabcd00","type":"verses","target":{"id":"1d4b6758-d37f-485d-9d9e-229416cd90c8","title":null,"body":"O son of Prtha! This is the Brahmanic state; having attained this, one never gets deluded again. Even by remaining in this [state] for a while, one attains at the time of death the Brahman, the Transcendent One.","translit_title":null,"body_translit":"eṣhā brāhmī sthitiḥ pārtha naināṁ prāpya vimuhyati\nsthitvāsyām anta-kāle ’pi brahma-nirvāṇam ṛichchhati\n","body_translit_meant":"eṣhā—such; brāhmī sthitiḥ—state of God-realization; pārtha—Arjun, the son of Pritha; na—never; enām—this; prāpya—having attained; vimuhyati—is deluded; sthitvā—being established; asyām—in this; anta-kāle—at the hour of death; api—even; brahma-nirvāṇam—liberation from Maya; ṛichchhati—attains\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"eb4ab2d8-eaef-4658-8137-33b2f394ae6b"},{"id":"a281e272-821b-4e79-9a64-450755b335f1","type":"verses","target":{"id":"c5db3dff-08f6-4544-9ae0-f3fab2fbf84d","title":null,"body":"You must perform the action that has been enjoined upon you. For, action is superior to inaction; and even the maintenance of your body cannot be properly accomplished through inaction.","translit_title":null,"body_translit":"niyataṁ kuru karma tvaṁ karma jyāyo hyakarmaṇaḥ\nśharīra-yātrāpi cha te na prasiddhyed akarmaṇaḥ\n","body_translit_meant":"niyatam—constantly; kuru—perform; karma—Vedic duties; tvam—you; karma—action; jyāyaḥ—superior; hi—certainly; akarmaṇaḥ—than inaction; śharīra—bodily; yātrā—maintenance; api—even; cha—and; te—your; na prasiddhyet—would not be possible; akarmaṇaḥ—inaction\n ","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"507d6df0-cbc4-4348-8b54-aa36ad69560e"},{"id":"19f4fb7e-a634-4b34-8c04-6acc9920c275","type":"verses","target":{"id":"156b8c13-57a8-4fbf-af6c-aac93cdbb778","title":null,"body":"No purpose is served for him by what he has done or by what he has not done. For him, there is hardly any dependence on any purpose among all beings.","translit_title":null,"body_translit":"naiva tasya kṛitenārtho nākṛiteneha kaśhchana\nna chāsya sarva-bhūteṣhu kaśhchid artha-vyapāśhrayaḥ\n","body_translit_meant":"na—not; eva—indeed; tasya—his; kṛitena—by discharge of duty; arthaḥ—gain; na—not; akṛitena—without discharge of duty; iha—here; kaśhchana—whatsoever; na—never; cha—and; asya—of that person; sarva-bhūteṣhu—among all living beings; kaśhchit—any; artha—necessity; vyapāśhrayaḥ—to depend upon\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"34b000eb-4080-4e31-b5ff-891531fff353"},{"id":"cfc6684a-5520-416a-82c7-907762ba72bc","type":"verses","target":{"id":"0763dda3-0e5f-4f21-9e9f-f81b9126c124","title":null,"body":"But, O mighty-armed one, the one who knows the true nature of the strands and their respective divisions of work, realizes: 'The strands are in their respective purposes.' And thus, he is not attached.","translit_title":null,"body_translit":"tattva-vit tu mahā-bāho guṇa-karma-vibhāgayoḥ\nguṇā guṇeṣhu vartanta iti matvā na sajjate\n","body_translit_meant":"tattva-vit—the knower of the Truth; tu—but; mahā-bāho—mighty-armed one; guṇa-karma—from guṇas and karma; vibhāgayoḥ—distinguish; guṇāḥ—modes of material nature in the shape of the senses, mind, etc; guṇeṣhu—modes of material nature in the shape of objects of perception; vartante—are engaged; iti—thus; matvā—knowing; na—never; sajjate—becomes attached\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"12a26036-1357-43cb-8dc3-6ab83c04da03"},{"id":"50c3b3d9-2f04-41ec-94ed-4902ec02ddca","type":"verses","target":{"id":"25a7e2ed-cc17-4373-9caa-87f4543bac1b","title":null,"body":"As fire is concealed by smoke, a mirror by dirt, and an embryo by its membrane-cover, so He is concealed by this foe.","translit_title":null,"body_translit":"dhūmenāvriyate vahnir yathādarśho malena cha\nyatholbenāvṛito garbhas tathā tenedam āvṛitam\n","body_translit_meant":"dhūmena—by smoke; āvriyate—is covered; vahniḥ—fire; yathā—just as; ādarśhaḥ—mirror; malena—by dust; cha—also; yathā—just as; ulbena—by the womb; āvṛitaḥ—is covered; garbhaḥ—embryo; tathā—similarly; tena—by that (desire); idam—this; āvṛitam—is covered\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"7231cdf9-cd5c-4937-999c-1a13d87fdf4d"},{"id":"4b992a1b-b9db-4c4b-80e6-121ad8b6c413","type":"verses","target":{"id":"9553b92f-932e-4330-a8e9-fe717fb34645","title":null,"body":"When your determining faculty, which had been previously confused by your hearing of scriptural declarations of fruits, stands stable in concentration, then you shall attain Yoga.","translit_title":null,"body_translit":"śhruti-vipratipannā te yadā sthāsyati niśhchalā\nsamādhāv-achalā buddhis tadā yogam avāpsyasi\n","body_translit_meant":"śhruti-vipratipannā—not allured by the fruitive sections of the Vedas; te—your; yadā—when; sthāsyati—remains; niśhchalā—steadfast; samādhau—in divine consciousness; achalā—steadfast; buddhiḥ—intellect; tadā—at that time; yogam—Yog; avāpsyasi—you will attain\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"e9a55b2e-eedb-4f70-948d-407d4a490708"},{"id":"42cf0662-5f18-4b31-8e97-4ef21f575285","type":"verses","target":{"id":"3668a1a0-6db8-472b-8363-ea7193c0c866","title":null,"body":"From wrath comes delusion; from delusion, the loss of memory; from the loss of memory, the loss of capacity to decide; due to the loss of capacity to decide, he perishes outright.","translit_title":null,"body_translit":"krodhād bhavati sammohaḥ sammohāt smṛiti-vibhramaḥ\nsmṛiti-bhranśhād buddhi-nāśho buddhi-nāśhāt praṇaśhyati\n","body_translit_meant":"krodhāt—from anger; bhavati—comes; sammohaḥ—clouding of judgement; sammohāt—from clouding of judgement; smṛiti—memory; vibhramaḥ—bewilderment; smṛiti-bhranśhāt—from bewilderment of memory; buddhi-nāśhaḥ—destruction of intellect; buddhi-nāśhāt—from destruction of intellect; praṇaśhyati—one is ruined\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"f35c969b-298a-4844-81c7-8c88d8d27a52"},{"id":"811d3236-1b95-4ba8-a343-9c0b6597bb7d","type":"verses","target":{"id":"ec9dfc07-0dbc-49ce-9916-1c9404906800","title":null,"body":"Having created creatures formerly [at the time of creation], together with the necessary action, the Lord of creatures declared: \"By means of this, you shall propagate yourselves; and let this be your wish-fulfilling cow.\"","translit_title":null,"body_translit":"saha-yajñāḥ prajāḥ sṛiṣhṭvā purovācha prajāpatiḥ\nanena prasaviṣhyadhvam eṣha vo ’stviṣhṭa-kāma-dhuk\n","body_translit_meant":"saha—along with; yajñāḥ—sacrifices; prajāḥ—humankind; sṛiṣhṭvā—created; purā—in beginning; uvācha—said; prajā-patiḥ—Brahma; anena—by this; prasaviṣhyadhvam—increase prosperity; eṣhaḥ—these; vaḥ—your; astu—shall be; iṣhṭa-kāma-dhuk—bestower of all wishes\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"78f89757-95cc-496e-b3c8-01240faee877"},{"id":"3f7a13ed-17f4-4b2b-be35-869f5a2f47e2","type":"verses","target":{"id":"fb7df0fe-1bb1-4e31-8431-e238dc241bb9","title":null,"body":"Janaka and others attained emancipation through action alone. Moreover, you should act with the intention of upholding the world.","translit_title":null,"body_translit":"karmaṇaiva hi sansiddhim āsthitā janakādayaḥ\nloka-saṅgraham evāpi sampaśhyan kartum arhasi\n","body_translit_meant":"karmaṇā—by the performance of prescribed duties; eva—only; hi—certainly; sansiddhim—perfection; āsthitāḥ—attained; janaka-ādayaḥ—King Janak and other kings; loka-saṅgraham—for the welfare of the masses; eva api—only; sampaśhyan—considering; kartum—to perform; arhasi—you should;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"ea13fd9e-29a3-4364-926e-1e2c051041d1"},{"id":"30cefb28-e559-497a-a35b-b9d15eac67b0","type":"verses","target":{"id":"68f3f37f-ae27-447a-b2f0-e1f640fc2c09","title":null,"body":"Renouncing all actions in Me, with a mind that concentrates on the Self; being free from the act of resting and from the sense of possession; and consequently being free from mental fever; you should fight.","translit_title":null,"body_translit":"mayi sarvāṇi karmāṇi sannyasyādhyātma-chetasā\nnirāśhīr nirmamo bhūtvā yudhyasva vigata-jvaraḥ\n","body_translit_meant":"mayi—unto me; sarvāṇi—all; karmāṇi—works; sannyasya—renouncing completely; adhyātma-chetasā—with the thoughts resting on God; nirāśhīḥ—free from hankering for the results of the actions; nirmamaḥ—without ownership; bhūtvā—so being; yudhyasva—fight; vigata-jvaraḥ—without mental fever\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"c0b95dbf-6fa2-46a6-b21c-cde2cd386542"},{"id":"b49e14f1-5dd1-416b-b9f3-42a38a4315ae","type":"verses","target":{"id":"6f01fcba-62f2-44da-97fe-adf69445a5e5","title":null,"body":"It is said to be based on the sense-organs, the mind, and the intellect. With these, it deludes the embodied by concealing knowledge.","translit_title":null,"body_translit":"indriyāṇi mano buddhir asyādhiṣhṭhānam uchyate\netair vimohayatyeṣha jñānam āvṛitya dehinam\n","body_translit_meant":"indriyāṇi—the senses; manaḥ—the mind; buddhiḥ—the intellect; asya—of this; adhiṣhṭhānam—dwelling place; uchyate—are said to be; etaiḥ—by these; vimohayati—deludes; eṣhaḥ—this; jñānam—knowledge; āvṛitya—clouds; dehinam—the embodied soul\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"59818bb1-d7fd-478f-865f-077ba51f83eb"},{"id":"47598739-889b-46c1-8ce0-efacf59ea9cf","type":"verses","target":{"id":"5bf129f8-8389-460b-8d69-c44d5a0069cc","title":null,"body":"The Bhagavat said, \"O Arjuna, many births of Mine as well as yours have passed. All of them I know, but you do not, O scorcher of foes!\"","translit_title":null,"body_translit":"śhrī bhagavān uvācha\nbahūni me vyatītāni janmāni tava chārjuna\ntānyahaṁ veda sarvāṇi na tvaṁ vettha parantapa\n\n","body_translit_meant":"śhrī-bhagavān uvācha—the Supreme Lord said; bahūni—many; me—of mine; vyatītāni—have passed; janmāni—births; tava—of yours; cha—and; arjuna—Arjun; tāni—them; aham—I; veda—know; sarvāṇi—all; na—not; tvam—you; vettha—know; parantapa—Arjun, the scorcher of foes\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"40ea73f4-f710-41ff-a605-d27cd9e785ed"},{"id":"89fadc3d-67f8-4dae-8b81-3d9438b22867","type":"verses","target":{"id":"a7efc467-5bf6-4daf-b712-aecffaad8c16","title":null,"body":"Realizing in this fashion, ancient seekers of salvation also undertook action. Hence, you too should, by all means, perform the action that was performed by the ancients.","translit_title":null,"body_translit":"evaṁ jñātvā kṛitaṁ karma pūrvair api mumukṣhubhiḥ\nkuru karmaiva tasmāttvaṁ pūrvaiḥ pūrvataraṁ kṛitam\n\n","body_translit_meant":"evam—thus; jñātvā—knowing; kṛitam—performed; karma—actions; pūrvaiḥ—of ancient times; api—indeed; mumukṣhubhiḥ—seekers of liberation; kuru—should perform; karma—duty; eva—certainly; tasmāt—therefore; tvam—you; pūrvaiḥ—of those ancient sages; pūrva-taram—in ancient times; kṛitam—performed\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"3421ce94-b6a7-4f1e-96c8-6dd0df9fba8c"},{"id":"84603cd2-3bb1-44fe-9774-a9600a71b037","type":"verses","target":{"id":"fb6acd25-ff79-4001-b30e-ddf860495b15","title":null,"body":"Certain other men of Yoga are completely devoted to yajna, connected with the devas, and offer that yajna, simply as a yajna, into the insatiable fire of the Brahman.","translit_title":null,"body_translit":"daivam evāpare yajñaṁ yoginaḥ paryupāsate\nbrahmāgnāvapare yajñaṁ yajñenaivopajuhvati\n\n","body_translit_meant":"daivam—the celestial gods; eva—indeed; apare—others; yajñam—sacrifice; yoginaḥ—spiritual practioners; paryupāsate—worship; brahma—of the Supreme Truth; agnau—in the fire; apare—others; yajñam—sacrifice; yajñena—by sacrifice; eva—indeed; upajuhvati—offer\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"a9ff04e0-0232-46a1-a5aa-2f363aa42741"},{"id":"551067ee-0ecb-4153-884f-04daf8a05d5a","type":"verses","target":{"id":"6afc3e92-2609-4578-b25f-1666fbefd0c6","title":null,"body":"Arjuna said, \"O Kesava! What is the meaning of sthita-prajna (a man-of-stabilized-intellect) when applied to a man fixed in concentration? What does sthira-dhih (the fixed-minded) imply? Where does the fixed-minded abide? And what is their goal?\"","translit_title":null,"body_translit":"arjuna uvācha\nsthita-prajñasya kā bhāṣhā samādhi-sthasya keśhava\nsthita-dhīḥ kiṁ prabhāṣheta kim āsīta vrajeta kim\n","body_translit_meant":"arjunaḥ uvācha—Arjun said; sthita-prajñasya—one with steady intellect; kā—what; bhāṣhā—talk; samādhi-sthasya—situated in divine consciousness; keśhava—Shree Krishna, killer of the Keshi Demon; sthita-dhīḥ—enlightened person; kim—what; prabhāṣheta—talks; kim—how; āsīta—sits; vrajeta—walks; kim—how\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"19acf0c1-7d94-4961-bd51-f044adc71f21"},{"id":"e032ec86-c52e-440f-a5a0-a598bbfaefe5","type":"verses","target":{"id":"c342c364-c537-4e6f-99a4-726d00417670","title":null,"body":"On the contrary, one who moves about and consumes the sense-objects through their sense-organs, freed from desire and hatred and controlled in the Self—such a one, with a disciplined mind, attains serenity of disposition.","translit_title":null,"body_translit":"rāga-dveṣha-viyuktais tu viṣhayān indriyaiśh charan\nātma-vaśhyair-vidheyātmā prasādam adhigachchhati\n","body_translit_meant":"rāga—attachment; dveṣha—aversion; viyuktaiḥ—free; tu—but; viṣhayān—objects of the senses; indriyaiḥ—by the senses; charan—while using; ātma-vaśhyaiḥ—controlling one’s mind; vidheya-ātmā—one who controls the mind; prasādam—the Grace of God; adhigachchhati—attains\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"5361ca6d-749d-4c73-b7b6-d452a271b200"},{"id":"4cf3149f-1dbc-4bb0-9b55-0907de1cf23d","type":"chapters","target":{"id":"5d165206-aea2-444f-b308-d14fac12ce17","title":"Path of Selfless Service","body":"The third chapter of the Bhagavad Gita is \"Karma Yoga\" or the \"Path of Selfless Service\". Here Lord Krishna emphasizes the importance of karma in life. He reveals that it is important for every human being to engage in some sort of activity in this material world. Further, he describes the kinds of actions that lead to bondage and the kinds that lead to liberation. Those persons who continue to perform their respective duties externally for the pleasure of the Supreme, without attachment to its rewards get liberation at the end.","translit_title":"Karm Yog","body_translit":null,"body_translit_meant":null,"body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":3,"lang":"en"},{"id":"995af5e9-799b-4e8e-99e0-df9139e1d676","type":"verses","target":{"id":"adba29c1-eabc-41e6-8fa0-a1b0f0f2e95e","title":null,"body":"But, controlling the sense-organs with the mind, whoever undertakes the Yoga of action with the action-senses, he, the detached one, is superior, O Arjuna!","translit_title":null,"body_translit":"yas tvindriyāṇi manasā niyamyārabhate ’rjuna\nkarmendriyaiḥ karma-yogam asaktaḥ sa viśhiṣhyate\n","body_translit_meant":"yaḥ—who; tu—but; indriyāṇi—the senses; manasā—by the mind; niyamya—control; ārabhate—begins; arjuna—Arjun; karma-indriyaiḥ—by the working senses; karma-yogam—karm yog; asaktaḥ—without attachment; saḥ—they; viśhiṣhyate—are superior\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"f388d0ca-7e57-47a0-aff2-8ecf9e1ef62a"},{"id":"182da31a-6ad9-402e-95e4-c3a7b339cfbb","type":"verses","target":{"id":"d25db50a-b552-40d6-9d03-166138dfe152","title":null,"body":"But the man who simply rejoices in the Self, is satisfied in the Self, and delights in the Self alone—there exists no action for him to be performed.","translit_title":null,"body_translit":"yas tvātma-ratir eva syād ātma-tṛiptaśh cha mānavaḥ\nātmanyeva cha santuṣhṭas tasya kāryaṁ na vidyate\n","body_translit_meant":"yaḥ—who; tu—but; ātma-ratiḥ—rejoice in the self; eva—certainly; syāt—is; ātma-tṛiptaḥ—self-satisfied; cha—and; mānavaḥ—human being; ātmani—in the self; eva—certainly; cha—and; santuṣhṭaḥ—satisfied; tasya—his; kāryam—duty; na—not; vidyate—exist\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"8aba569d-d881-42b0-ae26-947a721268ee"},{"id":"08402da7-fb0a-4164-818c-bb2154c5e918","type":"verses","target":{"id":"b56bbbc1-bcfe-4aa5-bc41-73781c64f4fe","title":null,"body":"The actions are performed part by part by the strands of Prakriti; yet, the person, having his self (mind) deluded with egoity, imagines, 'I am the sole doer.'","translit_title":null,"body_translit":"prakṛiteḥ kriyamāṇāni guṇaiḥ karmāṇi sarvaśhaḥ\nahankāra-vimūḍhātmā kartāham iti manyate\n","body_translit_meant":"prakṛiteḥ—of material nature; kriyamāṇāni—carried out; guṇaiḥ—by the three modes; karmāṇi—activities; sarvaśhaḥ—all kinds of; ahankāra-vimūḍha-ātmā—those who are bewildered by the ego and misidentify themselves with the body; kartā—the doer; aham—I; iti—thus; manyate—thinks\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"1d839df1-ced2-447d-9101-0bdd9de8b7f8"},{"id":"6608d6dc-d313-4cf5-9084-122cee9429a1","type":"verses","target":{"id":"525c2e76-6144-4618-bfb4-f4640e00d7d3","title":null,"body":"The Bhagavat said, \"This desire, this wrath, born of the Rajas-strand, is a swallower of festivity and a mighty bestower of sins. Know this to be the enemy here.\"","translit_title":null,"body_translit":"śhrī bhagavān uvācha\nkāma eṣha krodha eṣha rajo-guṇa-samudbhavaḥ\nmahāśhano mahā-pāpmā viddhyenam iha vairiṇam\n","body_translit_meant":"śhri-bhagavān uvācha—the Supreme Lord said; kāmaḥ—desire; eṣhaḥ—this; krodhaḥ—wrath; eṣhaḥ—this; rajaḥ-guṇa—the mode of passion; samudbhavaḥ—born of; mahā-aśhanaḥ—all-devouring; mahā-pāpmā—greatly sinful; viddhi—know; enam—this; iha—in the material world; vairiṇam—the enemy\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"8257fe4a-eae5-4f66-8ca0-9f2cf0a14ecf"},{"id":"922ff9a5-14fa-400f-95ad-607d9a0fdded","type":"verses","target":{"id":"ba9cc897-32ab-44b5-b219-8569f8d8f290","title":null,"body":"Thus, the regal sages knew this, which was received in regular succession. Over time, however, this Yoga has been lost, O scorcher of enemies!","translit_title":null,"body_translit":"evaṁ paramparā-prāptam imaṁ rājarṣhayo viduḥ\nsa kāleneha mahatā yogo naṣhṭaḥ parantapa\n\n","body_translit_meant":"evam—thus; paramparā—in a continuous tradition; prāptam—received; imam—this (science); rāja-ṛiṣhayaḥ—the saintly kings; viduḥ—understood; saḥ—that; kālena—with the long passage of time; iha—in this world; mahatā—great; yogaḥ—the science of Yog; naṣhṭaḥ—lost; parantapa—Arjun, the scorcher of foes\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"cc633312-4550-4b01-b9ef-f65d91ca7757"},{"id":"978a5efe-d805-4348-9c5e-9e9843194464","type":"verses","target":{"id":"426db13b-66c9-44a5-8675-9224629587b6","title":null,"body":"Those who desire success in their actions perform sacrifices, intending them for the deities. For, the success born of ritualistic actions is quick in the world of men.","translit_title":null,"body_translit":"kāṅkṣhantaḥ karmaṇāṁ siddhiṁ yajanta iha devatāḥ\nkṣhipraṁ hi mānuṣhe loke siddhir bhavati karmajā\n\n","body_translit_meant":"kāṅkṣhantaḥ—desiring; karmaṇām—material activities; siddhim—success; yajante—worship; iha—in this world; devatāḥ—the celestial gods; kṣhipram—quickly; hi—certainly; mānuṣhe—in human society; loke—within this world; siddhiḥ—rewarding; bhavati—manifest; karma-jā—from material activities\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"6712c7e5-fcde-49cd-8e80-bb42c782e817"},{"id":"a4eff4b8-6c47-4e7c-9cd1-4c8ad59002ef","type":"verses","target":{"id":"c68f47bd-4c12-4f6f-8db1-8d02960ceb10","title":null,"body":"The Bhagavat said, \"O son of Prtha! When a man casts off all desires existing in his mind and remains content in the Self by the self (mind), then he is called a man of stabilized intellect.\"","translit_title":null,"body_translit":"śhrī bhagavān uvācha\nprajahāti yadā kāmān sarvān pārtha mano-gatān\nātmany-evātmanā tuṣhṭaḥ sthita-prajñas tadochyate\n","body_translit_meant":"śhrī-bhagavān uvācha—The Supreme Lord said; prajahāti—discards; yadā—when; kāmān—selfish desires; sarvān—all; pārtha—Arjun, the son of Pritha; manaḥ-gatān—of the mind; ātmani—of the self; eva—only; ātmanā—by the purified mind; tuṣhṭaḥ—satisfied; sthita-prajñaḥ—one with steady intellect; tadā—at that time; uchyate—is said\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"9551bcc9-7889-41fd-b0ba-13f3cd12311f"},{"id":"657904cc-5057-4002-946d-95f4ea57ea50","type":"verses","target":{"id":"c8570e27-e040-4b29-8974-56c3185069d4","title":null,"body":"Upon attaining serenity, all miseries are extinguished in succession; the ability to make decisions is quickly stabilized in the mind of one who is serene.","translit_title":null,"body_translit":"prasāde sarva-duḥkhānāṁ hānir asyopajāyate\nprasanna-chetaso hyāśhu buddhiḥ paryavatiṣhṭhate\n","body_translit_meant":"prasāde—by divine grace; sarva—all; duḥkhānām—of sorrows; hāniḥ—destruction; asya—his; upajāyate—comes; prasanna-chetasaḥ—with a tranquil mind; hi—indeed; āśhu—soon; buddhiḥ—intellect; paryavatiṣhṭhate—becomes firmly established\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"de1e463d-4008-4bd5-bcf3-07a9c6dda480"},{"id":"737829d3-cff4-4534-81f9-5117460d2aa3","type":"verses","target":{"id":"ee5fd2bd-72d6-40a3-8f04-9c933179e119","title":null,"body":"Arjuna said, \"O Janardana, if you hold knowledge to be superior to action, then why do you engage me in such terrible action, O Kesava?\"","translit_title":null,"body_translit":"arjuna uvācha\njyāyasī chet karmaṇas te matā buddhir janārdana\ntat kiṁ karmaṇi ghore māṁ niyojayasi keśhava\n","body_translit_meant":"arjunaḥ uvācha—Arjun said; jyāyasī—superior; chet—if; karmaṇaḥ—than fruitive action; te—by you; matā—is considered; buddhiḥ—intellect; janārdana—he who looks after the public, Krishna; tat—then; kim—why; karmaṇi—action; ghore—terrible; mām—me; niyojayasi—do you engage; keśhava—Krishna, the killer of the demon named Keshi;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"54a97e96-e0e7-49cf-83bf-50cb860af78d"},{"id":"7b072b99-ce3f-4207-9b50-3505d1904b23","type":"verses","target":{"id":"2584600f-eabd-4449-97a5-42bfd3c84777","title":null,"body":"'You should gratify the devas with this, and let the devas gratify you; thus, mutually gratifying each other, you will attain the highest good.'","translit_title":null,"body_translit":"devān bhāvayatānena te devā bhāvayantu vaḥ\nparasparaṁ bhāvayantaḥ śhreyaḥ param avāpsyatha\n","body_translit_meant":"devān—celestial gods; bhāvayatā—will be pleased; anena—by these (sacrifices); te—those; devāḥ—celestial gods; bhāvayantu—will be pleased; vaḥ—you; parasparam—one another; bhāvayantaḥ—pleasing one another; śhreyaḥ—prosperity; param—the supreme; avāpsyatha—shall achieve\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"bc855f6d-86ae-4d59-9220-8ca4996c78fe"},{"id":"841115c7-3e75-49a0-b1c5-e02e8775d24c","type":"verses","target":{"id":"34b16fb3-7fb2-4721-9579-df2f812718f1","title":null,"body":"Whatever a great man does, others of lesser stature follow suit; whatever standard he sets, the world follows it.","translit_title":null,"body_translit":"yad yad ācharati śhreṣhṭhas tat tad evetaro janaḥ\nsa yat pramāṇaṁ kurute lokas tad anuvartate\n","body_translit_meant":"yat yat—whatever; ācharati—does; śhreṣhṭhaḥ—the best; tat tat—that (alone); eva—certainly; itaraḥ—common; janaḥ—people; saḥ—they; yat—whichever; pramāṇam—standard; kurute—perform; lokaḥ—world; tat—that; anuvartate—pursues\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"97c760a7-84f3-4e8e-9aad-13ae7cce68f3"},{"id":"fe5e520a-9431-4b14-99ee-fc79f6546166","type":"verses","target":{"id":"7ffc0e3e-85e8-421c-a4fc-e00bc65c8704","title":null,"body":"Those who constantly follow this doctrine of Mine, with faith and without finding fault, are freed from the results of all actions.","translit_title":null,"body_translit":"ye me matam idaṁ nityam anutiṣhṭhanti mānavāḥ\nśhraddhāvanto ’nasūyanto muchyante te ’pi karmabhiḥ\n","body_translit_meant":"ye—who; me—my; matam—teachings; idam—these; nityam—constantly; anutiṣhṭhanti—abide by; mānavāḥ—human beings; śhraddhā-vantaḥ—with profound faith; anasūyantaḥ—free from cavilling; muchyante—become free; te—those; api—also; karmabhiḥ—from the bondage of karma\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"df8b88dd-3ea2-42dd-b4db-d7894333c29c"},{"id":"995f11af-93d0-445a-8fc5-50e24b4dd03b","type":"verses","target":{"id":"186a6386-bb9c-49b3-8868-3ad2ea1b8d56","title":null,"body":"Therefore, O best among the Bharatas, you must avoid this sinful one, destroying knowledge and action, by controlling completely the sense-organs in the beginning itself.","translit_title":null,"body_translit":"tasmāt tvam indriyāṇyādau niyamya bharatarṣhabha\npāpmānaṁ prajahi hyenaṁ jñāna-vijñāna-nāśhanam\n","body_translit_meant":"tasmāt—therefore; tvam—you; indriyāṇi—senses; ādau—in the very beginning; niyamya—having controlled; bharata-ṛiṣhabha—Arjun, the best of the Bharatas; pāpmānam—the sinful; prajahi—slay; hi—certainly; enam—this; jñāna—knowledge; vijñāna—realization; nāśhanam—the destroyer\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"ea7e9c89-7510-4937-8960-08d2608dc3f3"},{"id":"5e9b080c-dce1-498f-b757-7623f971c83c","type":"verses","target":{"id":"1a1b21d1-bcfc-4a0f-9433-fbdbac4d2907","title":null,"body":"Though I am unborn and changeless Self, though I am the Lord of all beings, yet, presiding over My own nature, I take birth by My own trick of illusion.","translit_title":null,"body_translit":"ajo ’pi sannavyayātmā bhūtānām īśhvaro ’pi san\nprakṛitiṁ svām adhiṣhṭhāya sambhavāmyātma-māyayā\n\n","body_translit_meant":"ajaḥ—unborn; api—although; san—being so; avyaya ātmā—Imperishable nature; bhūtānām—of (all) beings; īśhvaraḥ—the Lord; api—although; san—being; prakṛitim—nature; svām—of myself; adhiṣhṭhāya—situated; sambhavāmi—I manifest; ātma-māyayā—by my Yogmaya power\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"96ddd749-fe39-4bd7-9c11-aad8f85bf394"},{"id":"78a027f6-8f74-4f30-a0ba-be66a50119b2","type":"verses","target":{"id":"7ab99b70-de9c-408d-ae51-626a6a2759aa","title":null,"body":"Even the wise are perplexed about what is action and what is non-action; I shall properly teach you the action, by knowing which you will be freed from evil.","translit_title":null,"body_translit":"kiṁ karma kim akarmeti kavayo ’pyatra mohitāḥ\ntat te karma pravakṣhyāmi yaj jñātvā mokṣhyase ’śhubhāt\n\n","body_translit_meant":"kim—what; karma—action; kim—what; akarma—inaction; iti—thus; kavayaḥ—the wise; api—even; atra—in this; mohitāḥ—are confused; tat—that; te—to you; karma—action; pravakṣhyāmi—I shall explain; yat—which; jñātvā—knowing; mokṣhyase—you may free yourself; aśhubhāt—from inauspiciousness\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"04ec7222-9859-4a18-8af0-225872332e59"},{"id":"83d48580-4a5c-4c90-9815-b7437bae6e91","type":"verses","target":{"id":"962d4e2f-1e56-4dff-96c0-2e73e73ebf47","title":null,"body":"He who has no desire for anything, and who neither rejoices nor hates upon obtaining this or that, good or bad—his intellect is properly stabilized.","translit_title":null,"body_translit":"yaḥ sarvatrānabhisnehas tat tat prāpya śhubhāśhubham\nnābhinandati na dveṣhṭi tasya prajñā pratiṣhṭhitā\n","body_translit_meant":"yaḥ—who; sarvatra—in all conditions; anabhisnehaḥ—unattached; tat—that; tat—that; prāpya—attaining; śhubha—good; aśhubham—evil; na—neither; abhinandati—delight in; na—nor; dveṣhṭi—dejected by; tasya—his; prajñā—knowledge; pratiṣhṭhitā—is fixed\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"4de26bd1-020b-4ecb-aae3-a07c382e465c"},{"id":"cd087c87-f32e-438c-92a2-fe01e0dee51f","type":"verses","target":{"id":"7d2ee4bd-a2e1-461e-8161-f385de0e7615","title":null,"body":"That mind, which is directed to follow the wandering sense-organs—that mind carries away his knowledge just as the wind carries away a ship on the waters.","translit_title":null,"body_translit":"indriyāṇāṁ hi charatāṁ yan mano ’nuvidhīyate\ntadasya harati prajñāṁ vāyur nāvam ivāmbhasi\n","body_translit_meant":"indriyāṇām—of the senses; hi—indeed; charatām—roaming; yat—which; manaḥ—the mind; anuvidhīyate—becomes constantly engaged; tat—that; asya—of that; harati—carries away; prajñām—intellect; vāyuḥ—wind; nāvam—boat; iva—as; ambhasi—on the water\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"84c3de24-696d-4071-b4ac-9d1cbbd0519c"},{"id":"1033dbe5-3fcd-4e67-876b-92230dfe0adf","type":"verses","target":{"id":"1d9dfc98-9377-4e6f-b1c6-d46e3c147f40","title":null,"body":"The world is fettered by action which is different from Yajna-action; therefore, O son of Kunti, free from attachment, perform Yajna-action properly.","translit_title":null,"body_translit":"yajñārthāt karmaṇo ’nyatra loko ’yaṁ karma-bandhanaḥ\ntad-arthaṁ karma kaunteya mukta-saṅgaḥ samāchara\n","body_translit_meant":"yajña-arthāt—for the sake of sacrifice; karmaṇaḥ—than action; anyatra—else; lokaḥ—material world; ayam—this; karma-bandhanaḥ—bondage through one’s work; tat—that; artham—for the sake of; karma—action; kaunteya—Arjun, the son of Kunti; mukta-saṅgaḥ—free from attachment; samāchara—perform properly\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"a174c005-9f70-466d-9cb3-c346b66a5d26"},{"id":"8df12a32-93da-43ed-91f4-28c93b009686","type":"verses","target":{"id":"631aab25-8d8c-49fd-a39d-e33e19353843","title":null,"body":"Therefore, always remaining unattached, you should perform the action that is to be performed; for, the person performing action without attachment attains the Supreme.","translit_title":null,"body_translit":"tasmād asaktaḥ satataṁ kāryaṁ karma samāchara\nasakto hyācharan karma param āpnoti pūruṣhaḥ\n","body_translit_meant":"tasmāt—therefore; asaktaḥ—without attachment; satatam—constantly; kāryam—duty; karma—action; samāchara—perform; asaktaḥ—unattached; hi—certainly; ācharan—performing; karma—work; param—the Supreme; āpnoti—attains; pūruṣhaḥ—a person\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"4508b82d-58a4-4401-8152-93a67ff25352"},{"id":"be403cca-2a14-46fd-8060-394320a16419","type":"verses","target":{"id":"c3a81378-b51e-4e64-bcea-4c85207f76a8","title":null,"body":"Men, completely deluded by the strands of Prakrti, are attached to the actions of those strands. Those who know fully should not confuse them, whereas the dullards who do not know fully.","translit_title":null,"body_translit":"prakṛiter guṇa-sammūḍhāḥ sajjante guṇa-karmasu\ntān akṛitsna-vido mandān kṛitsna-vin na vichālayet\n","body_translit_meant":"prakṛiteḥ—of material nature; guṇa—by the modes of material nature; sammūḍhāḥ—deluded; sajjante—become attached; guṇa-karmasu—to results of actions; tān—those; akṛitsna-vidaḥ—persons without knowledge; mandān—the ignorant; kṛitsna-vit—persons with knowledge; na vichālayet—should not unsettle\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"768d52f2-47f9-4b74-8fc7-5696e59b081d"},{"id":"4a0a6a44-1cf8-4116-87f1-0e5a056f2ed3","type":"verses","target":{"id":"5fe5f098-434a-4c27-8e2e-24a91b889655","title":null,"body":"O son of Kunti! The knowledge of the wise is concealed by this eternal foe, which appears desirable yet is insatiable like fire.","translit_title":null,"body_translit":"āvṛitaṁ jñānam etena jñānino nitya-vairiṇā\nkāma-rūpeṇa kaunteya duṣhpūreṇānalena cha\n","body_translit_meant":"āvṛitam—covered; jñānam—knowledge; etena—by this; jñāninaḥ—of the wise; nitya-vairiṇā—by the perpetual enemy; kāma-rūpeṇa—in the form of desires; kaunteya—Arjun the son of Kunti; duṣhpūreṇa—insatiable; analena—like fire; cha—and\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"d39e0668-f680-45a2-be95-262dcb10c54e"},{"id":"5eff1a3e-f42c-499b-918b-8739bd06d2a5","type":"verses","target":{"id":"b1eb5647-1e3e-408c-a0cc-3d6fdc279415","title":null,"body":"Arjuna said, \"Your birth is later, while the birth of Vivasvat is earlier; how am I then to understand that You had properly taught him this in the beginning?\"","translit_title":null,"body_translit":"arjuna uvācha\naparaṁ bhavato janma paraṁ janma vivasvataḥ\nkatham etad vijānīyāṁ tvam ādau proktavān iti\n\n","body_translit_meant":"arjunaḥ uvācha—Arjun said; aparam—later; bhavataḥ—your; janma—birth; param—prior; janma—birth; vivasvataḥ—Vivasvan, the sun-god; katham—how; etat—this; vijānīyām—am I to understand; tvam—you; ādau—in the beginning; proktavān—taught; iti—thus\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"5252850a-0909-4bba-b3f2-8b832d1e894e"},{"id":"645071c9-53b1-4f7d-88cf-d4309f333442","type":"verses","target":{"id":"961cc786-0786-4f89-a6f9-68181f89b4c7","title":null,"body":"Actions do not stain me, nor do I have a desire for the fruits of them either. Whoever understands me in this way is not bound by their actions.","translit_title":null,"body_translit":"na māṁ karmāṇi limpanti na me karma-phale spṛihā\niti māṁ yo ’bhijānāti karmabhir na sa badhyate\n\n","body_translit_meant":"na—not; mām—me; karmāṇi—activities; limpanti—taint; na—nor; me—my; karma-phale—the fruits of action; spṛihā—desire; iti—thus; mām—me; yaḥ—who; abhijānāti—knows; karmabhiḥ—result of action; na—never; saḥ—that person; badhyate—is bound\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"69818848-a6b3-4aee-a556-b5eb66d955ba"},{"id":"514d6ca9-bd48-486f-ae82-cd4ffc11415b","type":"verses","target":{"id":"8d18d430-4eb8-45c3-ac7a-8d54123d9b06","title":null,"body":"The Brahman-oblation that is to be offered to the Brahman is poured into the Brahman-fire by the Brahman; it is nothing but the Brahman that is to be attained by one whose deep contemplation is the Brahman-action.","translit_title":null,"body_translit":"brahmārpaṇaṁ brahma havir brahmāgnau brahmaṇā hutam\nbrahmaiva tena gantavyaṁ brahma-karma-samādhinā\n\n","body_translit_meant":"brahma—Brahman; arpaṇam—the ladle and other offerings; brahma—Brahman; haviḥ—the oblation; brahma—Brahman; agnau—in the sacrificial fire; brahmaṇā—by that person; hutam—offered; brahma—Brahman; eva—certainly; tena—by that; gantavyam—to be attained; brahma—Brahman; karma—offering; samādhinā—those completely absorbed in God-consciousness\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"c3c65d77-38fe-4749-9029-de8bcb539ef2"},{"id":"30f0442b-d900-45c8-86a2-04f5cf9e31f1","type":"verses","target":{"id":"50698578-9d49-412a-badc-fa9dc1f6d1cd","title":null,"body":"When he withdraws all his senses from sense-objects, just as a tortoise withdraws all its limbs, then he is declared to be a man of stabilized intellect.","translit_title":null,"body_translit":"yadā sanharate chāyaṁ kūrmo ’ṅgānīva sarvaśhaḥ\nindriyāṇīndriyārthebhyas tasya prajñā pratiṣhṭhitā\n","body_translit_meant":"yadā—when; sanharate—withdraw; cha—and; ayam—this; kūrmaḥ—tortoise; aṅgāni—limbs; iva—as; sarvaśhaḥ—fully; indriyāṇi—senses; indriya-arthebhyaḥ—from the sense objects; tasya—his; prajñā—divine wisdom; pratiṣhṭhitā—fixed in\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"a335f9dc-daaf-42df-b316-306f96a6f7e5"},{"id":"14420324-d4da-4a14-aee4-4913391520be","type":"verses","target":{"id":"ebf78766-a759-4c4c-9fdb-b9bbc0860073","title":null,"body":"Therefore, O mighty-armed one, the intellect of that person is stabilized, all of whose sense-organs, starting from the sense-objects, have been well restrained.","translit_title":null,"body_translit":"tasmād yasya mahā-bāho nigṛihītāni sarvaśhaḥ\nindriyāṇīndriyārthebhyas tasya prajñā pratiṣhṭhitā\n","body_translit_meant":"tasmāt—therefore; yasya—whose; mahā-bāho—mighty-armed one; nigṛihītāni—restrained; sarvaśhaḥ—completely; indriyāṇi—senses; indriya-arthebhyaḥ—from sense objects; tasya—of that person; prajñā—transcendental knowledge; pratiṣhṭhitā—remains fixed\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"44f670f1-42ff-4a72-ab1d-d9c25361e3f7"},{"id":"a5b9a938-fef5-48de-9416-a70cfb575495","type":"verses","target":{"id":"28d9a048-9ed5-479b-a934-c15da5c12dbc","title":null,"body":"A person attains actionlessness not just by abstaining from actions, but also by renunciation, he attains success (emancipation).","translit_title":null,"body_translit":"na karmaṇām anārambhān naiṣhkarmyaṁ puruṣho ’śhnute\nna cha sannyasanād eva siddhiṁ samadhigachchhati\n","body_translit_meant":"na—not; karmaṇām—of actions; anārambhāt—by abstaining from; naiṣhkarmyam—freedom from karmic reactions; puruṣhaḥ—a person; aśhnute—attains; na—not; cha—and; sannyasanāt—by renunciation; eva—only; siddhim—perfection; samadhigachchhati—attains\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"451f198d-986d-47b6-a0db-64157271e6c2"},{"id":"a57c0021-65ce-4c31-90cf-627344624d07","type":"verses","target":{"id":"e1e1db65-49de-4891-a3c0-02718371d1b8","title":null,"body":"From food arise the things that are born; from the rain-cloud the food arises; from the sacrifice the rain-cloud arises; the sacrifice arises from action.","translit_title":null,"body_translit":"annād bhavanti bhūtāni parjanyād anna-sambhavaḥ\nyajñād bhavati parjanyo yajñaḥ karma-samudbhavaḥ\n","body_translit_meant":"annāt—from food; bhavanti—subsist; bhūtāni—living beings; parjanyāt—from rains; anna—of food grains; sambhavaḥ—production; yajñāt—from the performance of sacrifice; bhavati—becomes possible; parjanyaḥ—rain; yajñaḥ—performance of sacrifice; karma—prescribed duties; samudbhavaḥ—born of\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"cd332274-315c-4a7c-b1c4-dcb7701fc0d7"},{"id":"df8d5a5c-c0e5-4026-82ed-b3147340794f","type":"verses","target":{"id":"7579bdad-cedd-4a91-8b2c-66cb74760ebe","title":null,"body":"These worlds would perish if I were not to perform action; and I would be the cause of confusion; I would destroy these people.","translit_title":null,"body_translit":"utsīdeyur ime lokā na kuryāṁ karma ched aham\nsankarasya cha kartā syām upahanyām imāḥ prajāḥ\n","body_translit_meant":"utsīdeyuḥ—would perish; ime—all these; lokāḥ—worlds; na—not; kuryām—I perform; karma—prescribed duties; chet—if; aham—I; sankarasya—of uncultured population; cha—and; kartā—responsible; syām—would be; upahanyām—would destroy; imāḥ—all these; prajāḥ—living entities\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"c15597eb-9f24-4511-9b92-1cdd2978a732"},{"id":"34a21adf-c80e-421d-97fb-7419bfd1a5f2","type":"verses","target":{"id":"fe7319ca-1da3-4248-b29b-c748a483f5b0","title":null,"body":"For a man of worldly life, there are clearly fixed likes and dislikes with regard to the objects of each of his sense organs. These are the obstacles for him; the wise would not come under their control.","translit_title":null,"body_translit":"indriyasyendriyasyārthe rāga-dveṣhau vyavasthitau\ntayor na vaśham āgachchhet tau hyasya paripanthinau\n","body_translit_meant":"indriyasya—of the senses; indriyasya arthe—in the sense objects; rāga—attachment; dveṣhau—aversion; vyavasthitau—situated; tayoḥ—of them; na—never; vaśham—be controlled; āgachchhet—should become; tau—those; hi—certainly; asya—for him; paripanthinau—foes\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"105a0a44-43c0-43d3-a28c-c3ce7285f215"},{"id":"bd52a68a-71c0-47ce-9ed8-d3d10a3a9ede","type":"verses","target":{"id":"cd36411c-ebcd-4ded-a66c-f3d74394a9d8","title":null,"body":"Whoever knows correctly the divine birth and action of Mine, he, upon abandoning the body, does not go to rebirth, but goes to Me, O Arjuna!","translit_title":null,"body_translit":"janma karma cha me divyam evaṁ yo vetti tattvataḥ\ntyaktvā dehaṁ punar janma naiti mām eti so ’rjuna\n\n","body_translit_meant":"janma—birth; karma—activities; cha—and; me—of mine; divyam—divine; evam—thus; yaḥ—who; vetti—know; tattvataḥ—in truth; tyaktvā—having abandoned; deham—the body; punaḥ—again; janma—birth; na—never; eti—takes; mām—to me; eti—comes; saḥ—he; arjuna—Arjun\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"ab1f957c-cc82-481b-90ef-cdcebe756dda"},{"id":"2c6e4769-1a88-4f2f-890b-59bbb306177a","type":"verses","target":{"id":"d9e9368e-7cd3-4e1d-a5c1-b9d8eabdb077","title":null,"body":"He whose every exertion is devoid of intention for desirable objects, and whose actions are burnt up by the fire of wisdom—the wise call such a person a man of learning.","translit_title":null,"body_translit":"yasya sarve samārambhāḥ kāma-saṅkalpa-varjitāḥ\njñānāgni-dagdha-karmāṇaṁ tam āhuḥ paṇḍitaṁ budhāḥ\n\n","body_translit_meant":"yasya—whose; sarve—every; samārambhāḥ—undertakings; kāma—desire for material pleasures; saṅkalpa—resolve; varjitāḥ—devoid of; jñāna—divine knowledge; agni—in the fire; dagdha—burnt; karmāṇam—actions; tam—him; āhuḥ—address; paṇḍitam—a sage; budhāḥ—the wise\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"b788536c-e3af-441c-83ef-65cb892692b5"},{"id":"b63ed9ac-70ee-4dcc-868d-9cd168939c0a","type":"verses","target":{"id":"b685e957-5a47-4876-8768-1fac1abc8c6d","title":null,"body":"Some sages offer the prana into the apana; likewise, others offer the apana into the prana. Having controlled both the courses of the prana and apana, the same sages, with their desires fulfilled by the above activities, and with their food restricted, offer the pranas into pranas. All these persons know what sacrifices are and have their sins destroyed by them.","translit_title":null,"body_translit":"apāne juhvati prāṇaṁ prāṇe ’pānaṁ tathāpare\nprāṇāpāna-gatī ruddhvā prāṇāyāma-parāyaṇāḥ\n apare niyatāhārāḥ prāṇān prāṇeṣhu juhvati\nsarve ’pyete yajña-vido yajña-kṣhapita-kalmaṣhāḥ\n","body_translit_meant":"apāne—the incoming breath; juhvati—offer; prāṇam—the outgoing breath; prāṇe—in the outgoing breath; apānam—incoming breath; tathā—also; apare—others; prāṇa—of the outgoing breath; apāna—and the incoming breath; gatī—movement; ruddhvā—blocking; prāṇa-āyāma—control of breath; parāyaṇāḥ—wholly devoted\n apare—others; niyata—having controlled; āhārāḥ—food intake; prāṇān—life-breaths; prāṇeṣhu—life-energy; juhvati—sacrifice; sarve—all; api—also; ete—these; yajña-vidaḥ—knowers of sacrifices; yajña-kṣhapita—being cleansed by performances of sacrifices; kalmaṣhāḥ—of impurities\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"e5cd6c7c-6b7f-4f49-bb04-d65e6ddae523"},{"id":"8f9d88c5-b473-421d-af32-233c6677b6af","type":"verses","target":{"id":"b3f385a4-c85f-44ed-b1d7-87463d5ee409","title":null,"body":"Restraining the same organs by the mind, the master of Yoga would sit, making Me their goal; for the intellect of that person is stabilized whose sense-organs are under control.","translit_title":null,"body_translit":"tāni sarvāṇi sanyamya yukta āsīta mat-paraḥ\nvaśhe hi yasyendriyāṇi tasya prajñā pratiṣhṭhitā\n","body_translit_meant":"tāni—them; sarvāṇi—all; sanyamya—subduing; yuktaḥ—united; āsīta—seated; mat-paraḥ—toward me (Shree Krishna); vaśhe—control; hi—certainly; yasya—whose; indriyāṇi—senses; tasya—their; prajñā—perfect knowledge pratiṣhṭhitā\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"8c5f81ce-e84e-4d61-8f88-14d474b19f52"},{"id":"ebe30956-c3d3-48e7-a1df-05118da99f35","type":"verses","target":{"id":"332496bf-0caf-478d-917c-58ccff894b4c","title":null,"body":"That person, who, by abandoning all desires, consumes [objects] without longing, without a sense of ownership, and without egotism, attains peace.","translit_title":null,"body_translit":"vihāya kāmān yaḥ sarvān pumānśh charati niḥspṛihaḥ\nnirmamo nirahankāraḥ sa śhāntim adhigachchhati\n","body_translit_meant":"vihāya—giving up; kāmān—material desires; yaḥ—who; sarvān—all; pumān—a person; charati—lives; niḥspṛihaḥ—free from hankering; nirmamaḥ—without a sense of proprietorship; nirahankāraḥ—without egoism; saḥ—that person; śhāntim—perfect peace; adhigachchhati—attains\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"ca186f52-3f9d-49a2-b70f-ae765718851e"},{"id":"c0570b86-9376-4b52-b518-19a7b5693310","type":"verses","target":{"id":"cf941b68-9e6c-4cee-87a5-57fd538f1bdb","title":null,"body":"Controlling their organs of action, whoever sits with their mind pondering over sense objects—that person is a man of deluded soul and is called a man of deluded action.","translit_title":null,"body_translit":"karmendriyāṇi sanyamya ya āste manasā smaran\nindriyārthān vimūḍhātmā mithyāchāraḥ sa uchyate\n","body_translit_meant":"karma-indriyāṇi—the organs of action; sanyamya—restrain; yaḥ—who; āste—remain; manasā—in the mind; smaran—to remember; indriya-arthān—sense objects; vimūḍha-ātmā—the deluded; mithyā-āchāraḥ—hypocrite; saḥ—they; uchyate—are called\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"3ea9d3ac-b67d-464a-8373-0fc418ae42aa"},{"id":"0920db4c-e58f-4cbf-bcac-eba14d851f3f","type":"verses","target":{"id":"41cdc3a9-0862-4eae-82b1-d9ac264a2b31","title":null,"body":"Whoever does not keep the wheel of life rolling, which has been set in motion in this world, is a man of sinful life, rejoicing in the senses; and he lives in vain, O son of Prtha!","translit_title":null,"body_translit":"evaṁ pravartitaṁ chakraṁ nānuvartayatīha yaḥ\naghāyur indriyārāmo moghaṁ pārtha sa jīvati\n","body_translit_meant":"evam—thus; pravartitam—set into motion; chakram—cycle; na—not; anuvartayati—follow; iha—in this life; yaḥ—who; agha-āyuḥ—sinful living; indriya-ārāmaḥ—for the delight of their senses; mogham—vainly; pārtha—Arjun, the son of Pritha; saḥ—they; jīvati—live\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"c5f5f431-7242-486e-a407-f9d1404a222a"},{"id":"d67a8e85-7b35-4fdc-84e3-f978b0fbc7e2","type":"verses","target":{"id":"d8192149-1b62-4172-9573-dbb731dcfc4b","title":null,"body":"Let the wise master of Yoga fulfill (or destroy) all actions by performing them all, and let him not create any disturbance in the minds of the ignorant persons attached to action.","translit_title":null,"body_translit":"na buddhi-bhedaṁ janayed ajñānāṁ karma-saṅginām\njoṣhayet sarva-karmāṇi vidvān yuktaḥ samācharan\n","body_translit_meant":"na—not; buddhi-bhedam—discord in the intellects; janayet—should create; ajñānām—of the ignorant; karma-saṅginām—who are attached to fruitive actions; joṣhayet—should inspire (them) to perform; sarva—all; karmāṇi—prescribed; vidvān—the wise; yuktaḥ—enlightened; samācharan—performing properly\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"aa4b0bf1-aca4-449f-a0dd-f665396d4c9b"},{"id":"0a4031af-fac7-4877-86d5-c18a2590d1c4","type":"verses","target":{"id":"040e7a45-fb3a-44f6-a531-dfa0d4c780b2","title":null,"body":"Arjuna said, \"Then, what induces this person of the world to commit sin, even though they do not desire it, as if they are being overpowered by a force?\"","translit_title":null,"body_translit":"arjuna uvācha\natha kena prayukto ’yaṁ pāpaṁ charati pūruṣhaḥ\nanichchhann api vārṣhṇeya balād iva niyojitaḥ\n","body_translit_meant":"arjunaḥ uvācha—Arjun said; atha—then; kena—by what; prayuktaḥ—impelled; ayam—one; pāpam—sins; charati—commit; pūruṣhaḥ—a person; anichchhan—unwillingly; api—even; vārṣhṇeya—he who belongs to the Vrishni clan, Shree Krishna; balāt—by force; iva—as if; niyojitaḥ—engaged\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"c174d056-0e1f-4644-b2ce-dc70f25fef52"},{"id":"0f98739c-6ead-460f-b315-287008a7d34f","type":"verses","target":{"id":"663b3cba-fdde-4161-976a-42202b9ac3bf","title":null,"body":"The Bhagavad said, \"This changeless Yoga I had properly taught thus to Vivasvat; Vivasvat correctly told it to Manu; and Manu declared it to Iksvaku.\"","translit_title":null,"body_translit":"śhrī bhagavān uvācha\nimaṁ vivasvate yogaṁ proktavān aham avyayam\nvivasvān manave prāha manur ikṣhvākave ’bravīt\n","body_translit_meant":"śhrī-bhagavān uvācha—the Supreme Lord Shree Krishna said; imam—this; vivasvate—to the Sun-god; yogam—the science of Yog; proktavān—taught; aham—I; avyayam—eternal; vivasvān—Sun-god; manave—to Manu, the original progenitor of humankind; prāha—told; manuḥ—Manu; ikṣhvākave—to Ikshvaku, first king of the Solar dynasty; abravīt—instructed\t\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"cd1f57c5-73fa-410a-9406-e07dd36adec5"},{"id":"0b4a24be-ddc1-48de-bfc4-6663897fe564","type":"verses","target":{"id":"036f4c9d-7f13-42c6-9a1c-f7dc57d8ffd5","title":null,"body":"The way in which people resort to Me, in the same way I favor them. O son of Prtha, all kinds of people follow My path.","translit_title":null,"body_translit":"ye yathā māṁ prapadyante tāns tathaiva bhajāmyaham\nmama vartmānuvartante manuṣhyāḥ pārtha sarvaśhaḥ\n\n","body_translit_meant":"ye—who; yathā—in whatever way; mām—unto me; prapadyante—surrender; tān—them; tathā—so; eva—certainly; bhajāmi—reciprocate; aham—I; mama—my; vartma—path; anuvartante—follow; manuṣhyāḥ—men; pārtha—Arjun, the son of Pritha; sarvaśhaḥ—in all respects\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"dffd78a2-8745-41bb-bfdf-bb264434dfd1"},{"id":"756c1bfd-eb86-46b3-9794-fb0f47316297","type":"verses","target":{"id":"0c3d94b6-00dd-4a33-92b1-5d80a4f2a546","title":null,"body":"Having rid of cravings, controlling the mind and body, abandoning all sense of possession, and performing actions with the body alone, one does not incur any sin.","translit_title":null,"body_translit":"nirāśhīr yata-chittātmā tyakta-sarva-parigrahaḥ\nśhārīraṁ kevalaṁ karma kurvan nāpnoti kilbiṣham\n\n","body_translit_meant":"nirāśhīḥ—free from expectations; yata—controlled; chitta-ātmā—mind and intellect; tyakta—having abandoned; sarva—all; parigrahaḥ—the sense of ownership; śhārīram—bodily; kevalam—only; karma—actions; kurvan—performing; na—never; āpnoti—incurs; kilbiṣham—sin\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"6ff25359-2fc4-4207-8ffd-a80d1b3711e7"},{"id":"15388ebe-2cd2-401d-a561-edad4443e301","type":"verses","target":{"id":"85d24332-e111-4b9d-a2fa-dde5320a13bc","title":null,"body":"What is night for every other being, in that a man of self-restraint is awake; wherein every other being is awake, that is night for the sage who sees the truth.","translit_title":null,"body_translit":"yā niśhā sarva-bhūtānāṁ tasyāṁ jāgarti sanyamī\nyasyāṁ jāgrati bhūtāni sā niśhā paśhyato muneḥ\n","body_translit_meant":"yā—which; niśhā—night; sarva-bhūtānām—of all living beings; tasyām—in that; jāgarti—is awake; sanyamī—self-controlled; yasyām—in which; jāgrati—are awake; bhūtāni—creatures; sā—that; niśhā—night; paśhyataḥ—see; muneḥ—sage\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"74adab12-23a8-4ce6-88c6-6cf637593661"},{"id":"2a131ff0-8f45-492e-a211-ae480e8381f1","type":"verses","target":{"id":"aa00e153-a8ef-443f-a217-91cc40b1daf0","title":null,"body":"For, no one can ever remain, even for a moment, as a non-performer of action; because everyone, not being master of themselves, is forced to perform action by the strands born of the Prakriti (Material cause).","translit_title":null,"body_translit":"na hi kaśhchit kṣhaṇam api jātu tiṣhṭhatyakarma-kṛit\nkāryate hyavaśhaḥ karma sarvaḥ prakṛiti-jair guṇaiḥ\n","body_translit_meant":"na—not; hi—certainly; kaśhchit—anyone; kṣhaṇam—a moment; api—even; jātu—ever; tiṣhṭhati—can remain; akarma-kṛit—without action; kāryate—are performed; hi—certainly; avaśhaḥ—helpless; karma—work; sarvaḥ—all; prakṛiti-jaiḥ—born of material nature; guṇaiḥ—by the qualities\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"9bfc2f71-e081-47c4-be7a-1e112975088e"},{"id":"355a6036-bf33-4ba6-b652-908b70d15ac3","type":"verses","target":{"id":"0edaf4f9-8126-4722-963c-8498a3782b83","title":null,"body":"Action arises from the Brahman; you should know this; the Brahman arises from that which does not stream forth; therefore, the all-pervading Brahman is permanently based on the sacrifice.","translit_title":null,"body_translit":"karma brahmodbhavaṁ viddhi brahmākṣhara-samudbhavam\ntasmāt sarva-gataṁ brahma nityaṁ yajñe pratiṣhṭhitam\n","body_translit_meant":"karma—duties; brahma—in the Vedas; udbhavam—manifested; viddhi—you should know; brahma—The Vedas; akṣhara—from the Imperishable (God); samudbhavam—directly manifested; tasmāt—therefore; sarva-gatam—all-pervading; brahma—The Lord; nityam—eternally; yajñe—in sacrifice; pratiṣhṭhitam—established\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"52d0109c-a15f-4747-a605-526642629baf"},{"id":"e8a9f395-9165-45b1-b778-45463834873f","type":"verses","target":{"id":"452c0e2b-3813-42c6-b8ef-4638941a85b0","title":null,"body":"Therefore, just as the unwise persons, being attached to action, do, O son of Prtha, so the wise should perform, but being unattached and desiring to hold the world together.","translit_title":null,"body_translit":"saktāḥ karmaṇyavidvānso yathā kurvanti bhārata\nkuryād vidvāns tathāsaktaśh chikīrṣhur loka-saṅgraham\n","body_translit_meant":"saktāḥ—attached; karmaṇi—duties; avidvānsaḥ—the ignorant; yathā—as much as; kurvanti—act; bhārata—scion of Bharat (Arjun); kuryāt—should do; vidvān—the wise; tathā—thus; asaktaḥ—unattached; chikīrṣhuḥ—wishing; loka-saṅgraham—welfare of the world\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"4fff95f1-484a-4ea3-8b24-35abff9cd9ba"},{"id":"f9f9ee35-cd55-4a56-ba3f-7caa1f097d37","type":"verses","target":{"id":"1fbccef8-265f-4503-b8e6-fb5ab6d61411","title":null,"body":"Better is one's own duty, even if it lacks merit, than the well-performed duty of another; it is better to suffer ruin in one's own duty than to gain success in another's.","translit_title":null,"body_translit":"śhreyān swa-dharmo viguṇaḥ para-dharmāt sv-anuṣhṭhitāt\nswa-dharme nidhanaṁ śhreyaḥ para-dharmo bhayāvahaḥ\n","body_translit_meant":"śhreyān—better; swa-dharmaḥ—personal duty; viguṇaḥ—tinged with faults; para-dharmāt—than another’s prescribed duties; su-anuṣhṭhitāt—perfectly done; swa-dharme—in one’s personal duties; nidhanam—death; śhreyaḥ—better; para-dharmaḥ—duties prescribed for others; bhaya-āvahaḥ—fraught with fear\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"3f884721-4f23-4f42-923e-024889cfd107"},{"id":"bb994cc2-6614-4657-bc6a-8126e38a397b","type":"chapters","target":{"id":"5c175e6c-9cdc-4720-a5f9-79a5af3bf3f6","title":"Path of Knowledge and the Disciplines of Action","body":"The fourth chapter of the Bhagavad Gita is \"Jnana Karma Sanyasa Yoga\". In this chapter, Krishna glorifies the Karma Yoga and imparts the Transcendental Knowledge (the knowledge of the soul and the Ultimate Truth) to Arjuna. He reveals the reason behind his appearance in this material world. He reveals that even though he is eternal, he reincarnates time after time to re-establish dharma and peace on this Earth. His births and activities are eternal and are never contaminated by material flaws. Those persons who know and understand this Truth engage in his devotion with full faith and eventually attain Him. They do not have to take birth in this world again.","translit_title":"Jñāna Karm Sanyās Yog","body_translit":null,"body_translit_meant":null,"body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":4,"lang":"en"},{"id":"afad75d4-2c50-4234-acc8-40022d2c6621","type":"verses","target":{"id":"bdee2762-4287-4c9d-9e29-78668cae7db1","title":null,"body":"Many persons, who are free from passion, fear, and anger; are full of Me; take refuge in Me; and have become pure through the austerity of wisdom—they have come to My being.","translit_title":null,"body_translit":"vīta-rāga-bhaya-krodhā man-mayā mām upāśhritāḥ\nbahavo jñāna-tapasā pūtā mad-bhāvam āgatāḥ\n\n","body_translit_meant":"vīta—freed from; rāga—attachment; bhaya—fear; krodhāḥ—and anger; mat-mayā—completely absorbed in me; mām—in me; upāśhritāḥ—taking refuge (of); bahavaḥ—many (persons); jñāna—of knowledge; tapasā—by the fire of knowledge; pūtāḥ—purified; mat-bhāvam—my divine love; āgatāḥ—attained\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"0a3475e0-9cd9-4f92-b84c-7deed717ac98"},{"id":"cb2cc9f8-bd80-4df3-abdf-9a2de402f08a","type":"verses","target":{"id":"7bf9cfb7-6c71-4e33-ae03-c1a726a7f386","title":null,"body":"By abandoning attachment to the fruits of actions, remaining ever content and depending on nothing, that person, even though they are engaged in action, does not perform anything at all.","translit_title":null,"body_translit":"tyaktvā karma-phalāsaṅgaṁ nitya-tṛipto nirāśhrayaḥ\nkarmaṇyabhipravṛitto ’pi naiva kiñchit karoti saḥ\n\n","body_translit_meant":"tyaktvā—having given up; karma-phala-āsaṅgam—attachment to the fruits of action; nitya—always; tṛiptaḥ—satisfied; nirāśhrayaḥ—without dependence; karmaṇi—in activities; abhipravṛittaḥ—engaged; api—despite; na—not; eva—certainly; kiñchit—anything; karoti—do; saḥ—that person\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"fe122d81-a6b5-4399-81de-82daf27b83ea"},{"id":"1342d19e-fb92-45f9-8fc2-46e7aeffaf4e","type":"verses","target":{"id":"05e87ac4-5003-4d66-8771-7f1fd7d6ff3b","title":null,"body":"The eaters of the sacrifice-ordained nectar attain the eternal Brahman. This world is not for a non-sacrificer; how can there be the other? O best of the Kurus!","translit_title":null,"body_translit":"yajña-śhiṣhṭāmṛita-bhujo yānti brahma sanātanam\nnāyaṁ loko ’styayajñasya kuto ’nyaḥ kuru-sattama\n\n","body_translit_meant":"yajña-śhiṣhṭa amṛita-bhujaḥ—they partake of the nectarean remnants of sacrifice; yānti—go; brahma—the Absolute Truth; sanātanam—eternal; na—never; ayam—this; lokaḥ—planet; asti—is; ayajñasya—for one who performs no sacrifice; kutaḥ—how; anyaḥ—other (world); kuru-sat-tama—best of the Kurus, Arjun\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"d40cf984-043c-439c-a3b2-741284d6a66b"},{"id":"39f9e325-e19f-4c62-b603-a8e26a2c2f8f","type":"verses","target":{"id":"d18d6dc0-43b5-468b-928a-2365cfa0747d","title":null,"body":"O son of Prtha! For Me, there is nothing to be done in the three worlds, nor is there anything yet to be attained; and yet I am engaged in action.","translit_title":null,"body_translit":"na me pārthāsti kartavyaṁ triṣhu lokeṣhu kiñchana\nnānavāptam avāptavyaṁ varta eva cha karmaṇi\n","body_translit_meant":"na—not; me—mine; pārtha—Arjun; asti—is; kartavyam—duty; triṣhu—in the three; lokeṣhu—worlds; kiñchana—any; na—not; anavāptam—to be attained; avāptavyam—to be gained; varte—I am engaged; eva—yet; cha—also; karmaṇi—in prescribed duties\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"9c792f17-4d95-4033-8e43-3fe3da28a83b"},{"id":"00b42073-286d-4595-bc4d-c9c698b59f0b","type":"verses","target":{"id":"ba4492ce-0f63-41e0-8e17-4f1f132d0004","title":null,"body":"But those who, finding fault, do not follow this doctrine of Mine - be sure that these men are highly deluded in all branches of knowledge and are lost and brainless.","translit_title":null,"body_translit":"ye tvetad abhyasūyanto nānutiṣhṭhanti me matam\nsarva-jñāna-vimūḍhāns tān viddhi naṣhṭān achetasaḥ\n","body_translit_meant":"ye—those; tu—but; etat—this; abhyasūyantaḥ—cavilling; na—not; anutiṣhṭhanti—follow; me—my; matam—teachings; sarva-jñāna—in all types of knowledge; vimūḍhān—deluded; tān—they are; viddhi—know; naṣhṭān—ruined; achetasaḥ—devoid of discrimination\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"7fa7d5d5-3656-4d4b-863d-2363893f8591"},{"id":"240da823-867c-45db-b11d-0fd92a693827","type":"verses","target":{"id":"71505989-ad1c-4e2f-a680-ed1411725b22","title":null,"body":"It is said that the sense-organs are different from their objects; the mind is different from the sense-organs; the intellect is different from the mind; and That (Self) is different from the intellect.","translit_title":null,"body_translit":"indriyāṇi parāṇyāhur indriyebhyaḥ paraṁ manaḥ\nmanasas tu parā buddhir yo buddheḥ paratas tu saḥ\n","body_translit_meant":"indriyāṇi—senses; parāṇi—superior; āhuḥ—are said; indriyebhyaḥ—than the senses; param—superior; manaḥ—the mind; manasaḥ—than the mind; tu—but; parā—superior; buddhiḥ—intellect; yaḥ—who; buddheḥ—than the intellect; parataḥ—more superior; tu—but; saḥ—that (soul)\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"93fa1b63-0793-4d36-808d-a3769eaf0177"},{"id":"403265a2-8a0d-4953-b1cc-58b99f98cce7","type":"verses","target":{"id":"2fa829e5-30ab-4520-aa5a-3bfbbfb06a51","title":null,"body":"For, whenever there is a decay of righteousness and the rise of unrighteousness, then, O descendant of Bharata, I send forth that which the Self is unimportant.","translit_title":null,"body_translit":"yadā yadā hi dharmasya glānir bhavati bhārata\nabhyutthānam adharmasya tadātmānaṁ sṛijāmyaham\n\n","body_translit_meant":"yadā yadā—whenever; hi—certainly; dharmasya—of righteousness; glāniḥ—decline; bhavati—is; bhārata—Arjun, descendant of Bharat; abhyutthānam—increase; adharmasya—of unrighteousness; tadā—at that time; ātmānam—self; sṛijāmi—manifest; aham—I\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"d3855be9-bb50-4fd6-8cb9-f574dcdb1066"},{"id":"0e30ad7b-c19e-41d6-bbdd-17c5aa70da80","type":"verses","target":{"id":"cf33f93c-171a-42be-8f86-2a0cba849a2c","title":null,"body":"Something has to be understood about good action; something has to be understood about wrong action; and something has to be understood about non-action. It is difficult to comprehend the way of action.","translit_title":null,"body_translit":"karmaṇo hyapi boddhavyaṁ boddhavyaṁ cha vikarmaṇaḥ\nakarmaṇaśh cha boddhavyaṁ gahanā karmaṇo gatiḥ\n\n","body_translit_meant":"karmaṇaḥ—recommended action; hi—certainly; api—also; boddhavyam—should be known; boddhavyam—must understand; cha—and; vikarmaṇaḥ—forbidden action; akarmaṇaḥ—inaction; cha—and; boddhavyam—must understand; gahanā—profound; karmaṇaḥ—of action; gatiḥ—the true path\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"84cdbe27-8222-4017-abb5-2b363765a031"},{"id":"6b331666-97fd-4ac7-bd7b-7595e4097086","type":"verses","target":{"id":"d4a302a0-da6d-47c9-b480-ea7f8af372c7","title":null,"body":"Some others offer all the actions of their sense-organs and the actions of their life-breath into the fire of the Yoga of self-control, ignited by wisdom.","translit_title":null,"body_translit":"sarvāṇīndriya-karmāṇi prāṇa-karmāṇi chāpare\nātma-sanyama-yogāgnau juhvati jñāna-dīpite\n\n","body_translit_meant":"sarvāṇi—all; indriya—the senses; karmāṇi—functions; prāṇa-karmāṇi—functions of the life breath; cha—and; apare—others; ātma-sanyama yogāgnau—in the fire of the controlled mind; juhvati—sacrifice; jñāna-dīpite—kindled by knowledge\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"ef314589-2bd8-4db5-87ca-b5450d985a95"},{"id":"9304ee51-d4ae-4d4c-a336-698b9b3a6b01","type":"verses","target":{"id":"0f8dc2e2-1c98-4fdf-90e4-1b8cd54b69ee","title":null,"body":"Just as a fire that is well-inflamed reduces fuel to ashes, so too does the fire of knowledge reduce all actions to ashes.","translit_title":null,"body_translit":"yathaidhānsi samiddho ’gnir bhasma-sāt kurute ’rjuna\njñānāgniḥ sarva-karmāṇi bhasma-sāt kurute tathā\n\n","body_translit_meant":"yathā—as; edhānsi—firewood; samiddhaḥ—blazing; agniḥ—fire; bhasma-sāt—to ashes; kurute—turns; arjuna—Arjun; jñāna-agniḥ—the fire of knowledge; sarva-karmāṇi—all reactions from material activities; bhasma-sāt—to ashes; kurute—it turns; tathā—similarly\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"f9a44d02-4281-4637-89d3-f059446cbfef"},{"id":"7114144e-6bb0-446f-9942-cb7becd6411f","type":"verses","target":{"id":"0e974a3b-d51d-4db5-93df-d48bdad20e4c","title":null,"body":"That person may be considered a man of permanent renunciation, who neither hates nor desires. For, O mighty-armed one! He who is free from the pairs of opposites is easily released from bondage of action.","translit_title":null,"body_translit":"jñeyaḥ sa nitya-sannyāsī yo na dveṣhṭi na kāṅkṣhati\nnirdvandvo hi mahā-bāho sukhaṁ bandhāt pramuchyate\n\n","body_translit_meant":"jñeyaḥ—should be considered; saḥ—that person; nitya—always; sanyāsī—practising renunciation; yaḥ—who; na—never; dveṣhṭi—hate; na—nor; kāṅkṣhati—desire; nirdvandvaḥ—free from all dualities; hi—certainly; mahā-bāho—mighty-armed one; sukham—easily; bandhāt—from bondage; pramuchyate—is liberated\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"4e3cace2-b6bf-4720-ad28-8d5e327f189d"},{"id":"72e66b3b-4f06-4513-8ae6-b6082ded0377","type":"verses","target":{"id":"0d1beeb4-6d7a-4630-b432-13df89794aee","title":null,"body":"Having renounced all actions by mind, a man of self-control dwells happily in his body, a nine-windowed mansion, neither performing nor causing others to perform any actions.","translit_title":null,"body_translit":"sarva-karmāṇi manasā sannyasyāste sukhaṁ vaśhī\nnava-dvāre pure dehī naiva kurvan na kārayan\n\n","body_translit_meant":"sarva—all; karmāṇi—activities; manasā—by the mind; sannyasya—having renounced; āste—remains; sukham—happily; vaśhī—the self-controlled; nava-dvāre—of nine gates; pure—in the city; dehī—the embodied being; na—never; eva—certainly; kurvan—doing anything; na—not; kārayan—causing to be done\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"b5ad1ae5-dc3c-4ef6-8bae-f066db79aa34"},{"id":"03a99677-5d4a-4620-bc6d-9e1ef7abb7d2","type":"verses","target":{"id":"e66501d0-061c-4fb8-b638-8530bab4c88b","title":null,"body":"For, if I were ever not to work unwearied, all men would follow My path, O son of Prtha!","translit_title":null,"body_translit":"yadi hyahaṁ na varteyaṁ jātu karmaṇyatandritaḥ\nmama vartmānuvartante manuṣhyāḥ pārtha sarvaśhaḥ\n","body_translit_meant":"yadi—if; hi—certainly; aham—I; na—not; varteyam—thus engage; jātu—ever; karmaṇi—in the performance of prescribed duties; atandritaḥ—carefully; mama—my; vartma—path; anuvartante—follow; manuṣhyāḥ—all men; pārtha—Arjun, the son of Pritha; sarvaśhaḥ—in all respects\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"1a718e36-b3a5-449d-991e-b402afc5aad0"},{"id":"c6b6233b-f82b-4a22-b83c-53fb2a43a916","type":"verses","target":{"id":"6e52a81c-1b24-4c2d-8f83-00740c1b05ed","title":null,"body":"Even a man of knowledge acts in accordance with his own Prakriti; the elements return to Prakriti; what will restraint avail?","translit_title":null,"body_translit":"sadṛiśhaṁ cheṣhṭate svasyāḥ prakṛiter jñānavān api\nprakṛitiṁ yānti bhūtāni nigrahaḥ kiṁ kariṣhyati\n","body_translit_meant":"sadṛiśham—accordingly; cheṣhṭate—act; svasyāḥ—by their own; prakṛiteḥ—modes of nature; jñāna-vān—the wise; api—even; prakṛitim—nature; yānti—follow; bhūtāni—all living beings; nigrahaḥ—repression; kim—what; kariṣhyati—will do\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"3c20c222-5106-489e-b520-f8ffd28eb687"},{"id":"9824dafc-ed62-4b79-aa97-821241986d07","type":"verses","target":{"id":"4d63cb05-0696-488d-b9ee-11029b5cbbcf","title":null,"body":"Thus, being conscious that it is different from the intellect, and steadying the self with the self, kill the foe that is of the form of desire and that is hard to approach.","translit_title":null,"body_translit":"evaṁ buddheḥ paraṁ buddhvā sanstabhyātmānam ātmanā\njahi śhatruṁ mahā-bāho kāma-rūpaṁ durāsadam\n","body_translit_meant":"evam—thus; buddheḥ—than the intellect; param—superior; buddhvā—knowing; sanstabhya—subdue; ātmānam—the lower self (senses, mind, and intellect); ātmanā—by higher self (soul); jahi—kill; śhatrum—the enemy; mahā-bāho—mighty-armed one; kāma-rūpam—in the form of desire; durāsadam—formidable\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"0546742c-44dd-4392-991b-805bce9b07c0"},{"id":"01b72fcb-8f9a-4f49-9aa8-00e01e1a0477","type":"verses","target":{"id":"d05a35f7-76af-487e-9515-16d229a23008","title":null,"body":"For the protection of the good people, and for the destruction of evildoers, and for the purpose of firmly establishing righteousness, I take birth in every age.","translit_title":null,"body_translit":"paritrāṇāya sādhūnāṁ vināśhāya cha duṣhkṛitām\ndharma-sansthāpanārthāya sambhavāmi yuge yuge\n\n","body_translit_meant":"paritrāṇāya—to protect; sādhūnām—the righteous; vināśhāya—to annihilate; cha—and; duṣhkṛitām—the wicked; dharma—the eternal religion; sansthāpana-arthāya—to reestablish; sambhavāmi—I appear; yuge yuge—age after age\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"17a05444-00cf-45e9-be1f-dd29bbd238f0"},{"id":"46284a1f-b26e-4a19-b45b-660d7bd82566","type":"verses","target":{"id":"22b8c472-960d-4026-98a6-fb3abfc0bea7","title":null,"body":"He who finds non-action in action, and action in non-action, is an intelligent one among men and is said to be a performer or destroyer of all actions.","translit_title":null,"body_translit":"karmaṇyakarma yaḥ paśhyed akarmaṇi cha karma yaḥ\nsa buddhimān manuṣhyeṣhu sa yuktaḥ kṛitsna-karma-kṛit\n\n","body_translit_meant":"karmaṇi—action; akarma—in inaction; yaḥ—who; paśhyet—see; akarmaṇi—inaction; cha—also; karma—action; yaḥ—who; saḥ—they; buddhi-mān—wise; manuṣhyeṣhu—amongst humans; saḥ—they; yuktaḥ—yogis; kṛitsna-karma-kṛit—performers all kinds of actions\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"8ffd9d99-1499-4f73-9647-b22bce8f7321"},{"id":"44cafc8a-80f9-4443-ba2d-60825c33f6a0","type":"verses","target":{"id":"82bf7d42-3bd2-4de2-9989-29949dff1e06","title":null,"body":"These are the performers of sacrifices with material objects, the performers of sacrifices with penance, and the performers of sacrifices with Yoga. Likewise, there are other ascetics with rigid vows whose sacrifices are the svadhyaya-knowledge.","translit_title":null,"body_translit":"dravya-yajñās tapo-yajñā yoga-yajñās tathāpare\nswādhyāya-jñāna-yajñāśh cha yatayaḥ sanśhita-vratāḥ\n\n","body_translit_meant":"dravya-yajñāḥ—offering one’s own wealth as sacrifice; tapaḥ-yajñāḥ—offering severe austerities as sacrifice; yoga-yajñāḥ—performance of eight-fold path of yogic practices as sacrifice; tathā—thus; apare—others; swādhyāya—cultivating knowledge by studying the scriptures; jñāna-yajñāḥ—those offer cultivation of transcendental knowledge as sacrifice; cha—also; yatayaḥ—these ascetics; sanśhita-vratāḥ—observing strict vows\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"cdb6c206-ba25-41d9-b4d3-d1725c82e1ae"},{"id":"337e52d1-262b-4cff-9fd0-b0676eb3763e","type":"verses","target":{"id":"8f66abaa-6647-4937-abc5-7d3caba1b8a7","title":null,"body":"In this world, there exists no purifier comparable to knowledge. One who becomes perfect in Yoga finds this, of their own accord, in their Self in due course.","translit_title":null,"body_translit":"na hi jñānena sadṛiśhaṁ pavitramiha vidyate\ntatsvayaṁ yogasansiddhaḥ kālenātmani vindati\n\n","body_translit_meant":"na—not; hi—certainly; jñānena—with divine knowledge; sadṛiśham—like; pavitram—pure; iha—in this world; vidyate—exists; tat—that; svayam—oneself; yoga—practice of yog; sansiddhaḥ—he who has attained perfection; kālena—in course of time; ātmani—wihtin the heart; vindati—finds\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"1536cb4c-e506-46f2-9927-26e13afadf9d"},{"id":"a6cf4b63-7b63-4ce2-8b51-0f3df85e9b81","type":"verses","target":{"id":"c14ea310-8214-45ca-b369-d0e71d8dd414","title":null,"body":"The childish, and not the wise, proclaim the paths of knowledge and Yoga to be different. He who has properly resorted to even one of these two, gets the fruit of both.","translit_title":null,"body_translit":"sānkhya-yogau pṛithag bālāḥ pravadanti na paṇḍitāḥ\nekamapyāsthitaḥ samyag ubhayor vindate phalam\n\n","body_translit_meant":"sānkhya—renunciation of actions; yogau—karm yog; pṛithak—different; bālāḥ—the ignorant; pravadanti—say; na—never; paṇḍitāḥ—the learned; ekam—in one; api—even; āsthitaḥ—being situated; samyak—completely; ubhayoḥ—of both; vindate—achieve; phalam—the result\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"ad479c8a-b83c-4798-ab53-7e812122c86e"},{"id":"c1c40a27-b982-4b57-8add-92052e4647fe","type":"verses","target":{"id":"024935ea-f5f5-4ff9-a15b-7d53fc26bfbc","title":null,"body":"The Lord (Self) acquires neither the state of being a creator of the world, nor the actions, nor the connection with the fruits of their actions. But it is the inherent nature [in It] that exerts.","translit_title":null,"body_translit":"na kartṛitvaṁ na karmāṇi lokasya sṛijati prabhuḥ\nna karma-phala-saṅyogaṁ svabhāvas tu pravartate\n\n","body_translit_meant":"na—neither; kartṛitvam—sense of doership; na—nor; karmāṇi—actions; lokasya—of the people; sṛijati—creates; prabhuḥ—God; na—nor; karma-phala—fruits of actions; sanyogam—connection; svabhāvaḥ—one’s nature; tu—but; pravartate—is enacted\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"03e32632-6cac-40ac-8687-5dfb566297c1"},{"id":"05ef6d04-63e8-4200-a375-65788581331b","type":"verses","target":{"id":"2508b71c-4b0b-40c6-af98-a0e45b1d45dc","title":null,"body":"The same ancient Yoga has now been taught to you by Me, on the grounds that you are both My devotee and friend. This is the highest secret.","translit_title":null,"body_translit":"sa evāyaṁ mayā te ’dya yogaḥ proktaḥ purātanaḥ\nbhakto ’si me sakhā cheti rahasyaṁ hyetad uttamam\n\n","body_translit_meant":"saḥ—that; eva—certainly; ayam—this; mayā—by me; te—unto you; adya—today; yogaḥ—the science of Yog; proktaḥ—reveal; purātanaḥ—ancient; bhaktaḥ—devotee; asi—you are; me—my; sakhā—friend; cha—and; iti—therefore; rahasyam—secret; hi—certainly; etat—this; uttamam—supreme\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"6d1bcb1d-f7e7-48a5-b632-b0fe6f19ee99"},{"id":"a1355891-8f19-4956-b3d4-67d642f7ef2d","type":"verses","target":{"id":"930ce887-c1b1-4d60-bc41-daf6cef89875","title":null,"body":"I have created the four-fold caste structure according to the division of their respective qualities and actions. Though I am the creator of this, know Me as the changeless, non-creator.","translit_title":null,"body_translit":"chātur-varṇyaṁ mayā sṛiṣhṭaṁ guṇa-karma-vibhāgaśhaḥ\ntasya kartāram api māṁ viddhyakartāram avyayam\n\n","body_translit_meant":"chātuḥ-varṇyam—the four categories of occupations; mayā—by me; sṛiṣhṭam—were created; guṇa—of quality; karma—and activities; vibhāgaśhaḥ—according to divisions; tasya—of that; kartāram—the creator; api—although; mām—me; viddhi—know; akartāram—non-doer; avyayam—unchangeable\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"d444dc75-55a8-43bf-bb68-17aebd4ce361"},{"id":"d1d4daf7-fa9d-4c90-ad13-1ca1dd71ff17","type":"verses","target":{"id":"95bd2123-d8b5-4859-92cf-bd9ec6b94179","title":null,"body":"The action is completely dissolved in the case of the person who undertakes it for the sake of sacrifice; who is free from attachment and has been liberated; and whose mind is fixed in wisdom.","translit_title":null,"body_translit":"gata-saṅgasya muktasya jñānāvasthita-chetasaḥ\nyajñāyācharataḥ karma samagraṁ pravilīyate\n\n","body_translit_meant":"gata-saṅgasya—free from material attachments; muktasya—of the liberated; jñāna-avasthita—established in divine knowledge; chetasaḥ—whose intellect; yajñāya—as a sacrifice (to God); ācharataḥ—performing; karma—action; samagram—completely; pravilīyate—are freed\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"903e032d-b374-4db1-995b-b7a3bffbeb12"},{"id":"37b23a2e-a81f-43c2-82dd-9a9525ef2cb8","type":"verses","target":{"id":"bda46156-496d-4e1d-a050-47e5760997ad","title":null,"body":"The sacrifice of knowledge is superior to the sacrifice of material things. O son of Prtha, destroyer of enemies! All actions, leaving nothing behind, come to an end in knowledge.","translit_title":null,"body_translit":"śhreyān dravya-mayād yajñāj jñāna-yajñaḥ parantapa\nsarvaṁ karmākhilaṁ pārtha jñāne parisamāpyate\n\n","body_translit_meant":"śhreyān—superior; dravya-mayāt—of material possessions; yajñāt—than the sacrifice; jñāna-yajñaḥ—sacrifice performed in knowledge; parantapa—subduer of enemies, Arjun; sarvam—all; karma—works; akhilam—all; pārtha—Arjun, the son of Pritha; jñāne—in knowledge; parisamāpyate—culminate\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"0b4654ed-5b17-44c3-969b-30db6b635418"},{"id":"9090eb8b-b549-4c2d-a151-f93d2b91624b","type":"verses","target":{"id":"e3504f36-8a67-40a1-9bbb-974479502c4a","title":null,"body":"Taking, rejecting, receiving, opening, and closing the eyes, bear in mind that the sense-organs are on their respective objects; and","translit_title":null,"body_translit":"pralapan visṛjan gṛhṇann unmiṣan nimiṣann api indriyāṇīndriyārtheṣu vartanta iti dhārayan","body_translit_meant":"pralapan—by talking; visṛjan—by giving up; gṛhṇan—by accepting; unmiṣan—opening; nimiṣan—closing; api—in spite of; indriyāṇi—the senses; indriya-artheṣu—in sense gratification; vartante—let them be so engaged; iti—thus; dhārayan—considering.","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"54ae2801-6adf-4b57-a257-2cbcdc930886"},{"id":"b3657b5d-bae4-4541-b5fa-d4b05e911d98","type":"verses","target":{"id":"53e82897-9c87-48c5-8ec3-3ca4c76bf846","title":null,"body":"The one who knows Brahman, who is disillusioned, established in Brahman, and has a firm intellect, would neither rejoice upon meeting a friend nor get agitated upon meeting a foe.","translit_title":null,"body_translit":"ihaiva tair jitaḥ sargo yeṣhāṁ sāmye sthitaṁ manaḥ\nnirdoṣhaṁ hi samaṁ brahma tasmād brahmaṇi te sthitāḥ\n\n","body_translit_meant":"iha eva—in this very life; taiḥ—by them; jitaḥ—conquer; sargaḥ—the creation; yeṣhām—whose; sāmye—in equanimity; sthitam—situated; manaḥ—mind; nirdoṣham—flawless; hi—certainly; samam—in equality; brahma—God; tasmāt—therefore; brahmaṇi—in the Absolute Truth; te—they; sthitāḥ—are seated\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"bc26c24a-adb8-42fe-a79f-e9f27b8494c1"},{"id":"9687c7da-1f01-408f-a1b1-a56d395cd188","type":"verses","target":{"id":"b50d8c5e-c86e-4658-b20d-c3ba681a0c0b","title":null,"body":"There is no such translation for this shloka.","translit_title":null,"body_translit":"bhoktāraṁ yajña-tapasāṁ sarva-loka-maheśhvaram\nsuhṛidaṁ sarva-bhūtānāṁ jñātvā māṁ śhāntim ṛichchhati\n\n","body_translit_meant":"bhoktāram—the enjoyer; yajña—sacrifices; tapasām—austerities; sarva-loka—of all worlds; mahā-īśhvaram—the Supreme Lord; su-hṛidam—the selfless Friend; sarva—of all; bhūtānām—the living beings; jñātvā—having realized; mām—me (Lord Krishna); śhāntim—peace; ṛichchhati—attains\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"b468297f-7c4c-4836-b5f3-669a6c7603f9"},{"id":"e7e16202-5daa-41f8-a981-4880060f22e8","type":"verses","target":{"id":"eb15e1c5-d3ab-403c-a24d-9b7602438c70","title":null,"body":"He whose self is satisfied with knowledge and with what consists of varied thoughts; who remains peak-like and has completely subdued his senses; and to whom a clod, a stone, and a piece of gold are the same—that man of Yoga is called a master of Yoga.","translit_title":null,"body_translit":"jñāna-vijñāna-tṛiptātmā kūṭa-stho vijitendriyaḥ\nyukta ityuchyate yogī sama-loṣhṭāśhma-kāñchanaḥ\n","body_translit_meant":"jñāna—knowledge; vijñāna—realized knowledge, wisdom from within; tṛipta ātmā—one fully satisfied; kūṭa-sthaḥ—undisturbed; vijita-indriyaḥ—one who has conquered the senses; yuktaḥ—one who is in constant communion with the Supreme; iti—thus; uchyate—is said; yogī—a yogi; sama—looks equally; loṣhṭra—pebbles; aśhma—stone; kāñchanaḥ—gold\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"f2b98523-3018-49aa-b53b-e2951cf7eeaf"},{"id":"1b5dddec-69f2-40cf-9778-7f6585fc5cbb","type":"verses","target":{"id":"5d00b359-4ed2-44c6-ada9-b0232bdc53e6","title":null,"body":"When his mind, well-controlled, is established in nothing but the Self, and he is free from craving for any desired object—at that time he is called a master of Yoga.","translit_title":null,"body_translit":"yadā viniyataṁ chittam ātmanyevāvatiṣhṭhate\nniḥspṛihaḥ sarva-kāmebhyo yukta ityuchyate tadā\n","body_translit_meant":"yadā—when; viniyatam—fully controlled; chittam—the mind; ātmani—of the self; eva—certainly; avatiṣhṭhate—stays; nispṛihaḥ—free from cravings: sarva; kāmebhyaḥ—for yearning of the senses; yuktaḥ—situated in perfect Yog; iti—thus; uchyate—is said; tadā—then\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"589ead33-2ed0-4646-9e46-6696f4651fb5"},{"id":"0f70daa9-67e2-49fa-955b-9cbc10768167","type":"verses","target":{"id":"0b12994d-8e4c-4307-a049-383d24af061f","title":null,"body":"Remaining content with the gain brought by chance, transcending the dualities (pairs of opposites), entertaining no jealousy, and remaining equal in success and in failure, he does not get bound, even when he acts.","translit_title":null,"body_translit":"yadṛichchhā-lābha-santuṣhṭo dvandvātīto vimatsaraḥ\nsamaḥ siddhāvasiddhau cha kṛitvāpi na nibadhyate\n\n","body_translit_meant":"yadṛichchhā—which comes of its own accord; lābha—gain; santuṣhṭaḥ—contented; dvandva—duality; atītaḥ—surpassed; vimatsaraḥ—free from envy; samaḥ—equipoised; siddhau—in success; asiddhau—failure; cha—and; kṛitvā—performing; api—even; na—never; nibadhyate—is bound\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"f6823095-54cb-45a2-9abf-3351aadf257d"},{"id":"7a0c9dc3-fb06-4895-a680-5b21fab12eec","type":"verses","target":{"id":"200e87b4-5d4e-42f7-9c30-4b125ee2e92d","title":null,"body":"Thus, sacrifices of many varieties have been elaborated upon by the mouth of the Brahman. Know them all as having sprung from actions. By knowing thus, you shall be liberated.","translit_title":null,"body_translit":"evaṁ bahu-vidhā yajñā vitatā brahmaṇo mukhe\nkarma-jān viddhi tān sarvān evaṁ jñātvā vimokṣhyase\n\n","body_translit_meant":"evam—thus; bahu-vidhāḥ—various kinds of; yajñāḥ—sacrifices; vitatāḥ—have been described; brahmaṇaḥ—of the Vedas; mukhe—through the mouth; karma-jān—originating from works; viddhi—know; tān—them; sarvān—all; evam—thus; jñātvā—having known; vimokṣhyase—you shall be liberated\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"3a801186-dea7-4172-83c3-07b204a93529"},{"id":"dc41b471-1b3b-440b-bc44-781cf2dc147f","type":"verses","target":{"id":"f91f84c8-eba7-4065-8bdd-1722195913f5","title":null,"body":"Therefore, thus cutting off, by means of the sword of knowledge, the doubt that has sprung from ignorance and exists in your heart, practice the Yoga! Stand up, O descendant of Bharata!","translit_title":null,"body_translit":"tasmād ajñāna-sambhūtaṁ hṛit-sthaṁ jñānāsinātmanaḥ\nchhittvainaṁ sanśhayaṁ yogam ātiṣhṭhottiṣhṭha bhārata\n\n","body_translit_meant":"tasmāt—therefore; ajñāna-sambhūtam—born of ignorance; hṛit-stham—situated in the heart; jñāna—of knowledge; asinā—with the sword; ātmanaḥ—of the self; chhittvā—cut asunder; enam—this; sanśhayam—doubt; yogam—in karm yog; ātiṣhṭha—take shelter; uttiṣhṭha—arise; bhārata—Arjun, descendant of Bharat\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"b6a6a257-9e36-4de4-8a74-26e85f26e596"},{"id":"cad53af1-98c1-4eb2-bdbe-0c8b12137899","type":"verses","target":{"id":"3ab711f3-8fea-40ab-8aca-f335ed91816b","title":null,"body":"A master of Yoga, knowing the reality, would think, 'I do not perform any action at all.' For, he who, while seeing, hearing, touching, smelling, eating, going, sleeping, and breathing;","translit_title":null,"body_translit":"naiva kiñchit karomīti yukto manyeta tattva-vit\npaśhyañ śhṛiṇvan spṛiśhañjighrann aśhnangachchhan svapañśhvasan\n pralapan visṛijan gṛihṇann unmiṣhan nimiṣhann api\nindriyāṇīndriyārtheṣhu vartanta iti dhārayan\n","body_translit_meant":"na—not; eva—certainly; kiñchit—anything; karomi—I do; iti—thus; yuktaḥ—steadfast in karm yog; manyeta—thinks; tattva-vit—one who knows the truth; paśhyan—seeing; śhṛiṇvan—hearing; spṛiśhan—touching; jighran—smelling; aśhnan—eating; gachchhan—moving; svapan—sleeping; śhvasan—breathing;\n pralapan—talking; visṛijan—giving up; gṛihṇan—accepting; unmiṣhan—opening (the eyes); nimiṣhan—closing (the eyes); api—although; indriyāṇi—the senses; indriya-artheṣhu—in sense-objects; vartante—moving; iti—thus; dhārayan—convinced\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"2ed8882b-92da-41e5-8dc8-46c1e1323fe8"},{"id":"5e359b95-b4c3-4459-8876-08d1429c1e22","type":"verses","target":{"id":"86a6f15d-4be3-4ac9-af70-ba34b2abe487","title":null,"body":"The wise, by nature, look equally upon a Brahmana, rich in learning and humility, a cow, an elephant, and even a dog and a dog-cooker (an outcaste).","translit_title":null,"body_translit":"vidyā-vinaya-sampanne brāhmaṇe gavi hastini\nśhuni chaiva śhva-pāke cha paṇḍitāḥ sama-darśhinaḥ\n\n","body_translit_meant":"vidyā—divine knowledge; vinaya—humbleness; sampanne—equipped with; brāhmaṇe—a Brahmin; gavi—a cow; hastini—an elephant; śhuni—a dog; cha—and; eva—certainly; śhva-pāke—a dog-eater; cha—and; paṇḍitāḥ—the learned; sama-darśhinaḥ—see with equal vision\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"d9b4ce2a-cbd4-4d1b-a59c-faef51264759"},{"id":"3166401d-cd94-412b-98dd-d7b9e536484f","type":"verses","target":{"id":"f8349842-b76c-4982-a6ea-6716826ed3ef","title":null,"body":"Having known Me as the Enjoyer of the fruits of sacrifices and austerities, as the great Lord of all the worlds, and as the Friend of all beings, he attains peace.","translit_title":null,"body_translit":"yatendriya-mano-buddhir munir mokṣa-parāyaṇaḥ vigatecchā-bhaya-krodho yaḥ sadā mukta eva saḥ","body_translit_meant":"yata—controlled; indriya—senses; manaḥ—mind; buddhiḥ—intelligence; muniḥ—the transcendentalist; mokṣa—liberation; parāyaṇaḥ—being so destined; vigata—discarded; icchā—wishes; bhaya—fear; krodhaḥ—anger; yaḥ—one who; sadā—always; muktaḥ—liberated; eva—certainly; saḥ—he is","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"edf8defd-eb8c-4faf-b768-5b419bde17e3"},{"id":"e565c277-602d-4e8c-81e1-047e205083f6","type":"verses","target":{"id":"f465ce11-dcd0-4fa8-ab6e-cb41d601fba9","title":null,"body":"The thinking of the person, with a subdued mind and thus with complete calmness, remains in equilibrium in the case of others and himself, in cold and heat, in pleasure and pain, as well as in honor and dishonor.","translit_title":null,"body_translit":"jitātmanaḥ praśhāntasya paramātmā samāhitaḥ\nśhītoṣhṇa-sukha-duḥkheṣhu tathā mānāpamānayoḥ\n","body_translit_meant":"jita-ātmanaḥ—one who has conquered one’s mind; praśhāntasya—of the peaceful; parama-ātmā—God; samāhitaḥ—steadfast; śhīta—in cold; uṣhṇa—heat; sukha—happiness; duḥkheṣhu—and distress; tathā—also; māna—in honor; apamānayoḥ—and dishonor\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"51a7a326-f481-47d7-bbd3-234c3b84f09b"},{"id":"8b573dbb-45bc-479b-84c0-5e535de1d872","type":"verses","target":{"id":"7d70d4cc-42b7-48f6-9986-b1d5c3c721d7","title":null,"body":"The Yoga becomes a misery-killer for him whose effort for food is appropriate, exertion in activities is proper, and whose sleep and waking are proportionate.","translit_title":null,"body_translit":"yuktāhāra-vihārasya yukta-cheṣhṭasya karmasu\nyukta-svapnāvabodhasya yogo bhavati duḥkha-hā\n","body_translit_meant":"yukta—moderate; āhāra—eating; vihārasya—recreation; yukta cheṣhṭasya karmasu—balanced in work; yukta—regulated; svapna-avabodhasya—sleep and wakefulness; yogaḥ—Yog; bhavati—becomes; duḥkha-hā—the slayer of sorrows\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"8ad70b0d-1179-49bb-8093-9c2f368ba275"},{"id":"da02c5f9-a409-40b6-8af5-9ca21b5e1b9f","type":"verses","target":{"id":"e239b13b-f4b7-4a75-8678-393f2bcfac21","title":null,"body":"Indeed, the Supreme Bliss comes to this highly tranquil-minded man of Yoga, whose passions remain stilled, who has become one with the Brahman, and who is free from sins.","translit_title":null,"body_translit":"praśhānta-manasaṁ hyenaṁ yoginaṁ sukham uttamam\nupaiti śhānta-rajasaṁ brahma-bhūtam akalmaṣham\n","body_translit_meant":"praśhānta—peaceful; manasam—mind; hi—certainly; enam—this; yoginam—yogi; sukham uttamam—the highest bliss; upaiti—attains; śhānta-rajasam—whose passions are subdued; brahma-bhūtam—endowed with God-realization; akalmaṣham—without sin\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"4fb50443-2989-4536-a761-25e0d732a55c"},{"id":"6cf99b96-74e4-412f-b9d1-bac32d54b1de","type":"verses","target":{"id":"fd31d2f0-9b29-4bcf-b99c-668916542887","title":null,"body":"Others offer their sense-organs such as the sense of hearing and the rest into the fires of restraint; others offer objects such as sound and the rest into the fires of their sense-organs.","translit_title":null,"body_translit":"śhrotrādīnīndriyāṇyanye sanyamāgniṣhu juhvati\nśhabdādīn viṣhayānanya indriyāgniṣhu juhvati\n\n","body_translit_meant":"śhrotra-ādīni—such as the hearing process; indriyāṇi—senses; anye—others; sanyama—restraint; agniṣhu—in the sacrficial fire; juhvati—sacrifice; śhabda-ādīn—sound vibration, etc; viṣhayān—objects of sense-gratification; anye—others; indriya—of the senses; agniṣhu—in the fire; juhvati—sacrifice\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"b48c00df-3a32-4c24-97cc-1d1d09172ca6"},{"id":"60cfdb74-376b-4c0d-907f-84205e7643f9","type":"verses","target":{"id":"7f063606-4035-493c-b0b5-445125b1a13a","title":null,"body":"Even if you are the highest sinner among all sinners, you can cross over the ocean of all sins by the boat of knowledge.","translit_title":null,"body_translit":"api ched asi pāpebhyaḥ sarvebhyaḥ pāpa-kṛit-tamaḥ\nsarvaṁ jñāna-plavenaiva vṛijinaṁ santariṣhyasi\n\n","body_translit_meant":"api—even; chet—if; asi—you are; pāpebhyaḥ—sinners; sarvebhyaḥ—of all; pāpa-kṛit-tamaḥ—most sinful; sarvam—all; jñāna-plavena—by the boat of divine knowledge; eva—certainly; vṛijinam—sin; santariṣhyasi—you shall cross over\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"6838eed2-09fe-449c-b0a6-aebca8dbc77c"},{"id":"4120d89a-600a-4bf5-a9f1-d8d53c648372","type":"verses","target":{"id":"845a08d0-409e-4420-b9b9-4d3904d02d6a","title":null,"body":"The Bhagavat said, \"Both renunciation and the Yoga of action effect salvation; however, of these two, the Yoga of action is superior to renunciation of action.\"","translit_title":null,"body_translit":"śhrī bhagavān uvācha\nsannyāsaḥ karma-yogaśh cha niḥśhreyasa-karāvubhau\ntayos tu karma-sannyāsāt karma-yogo viśhiṣhyate\n\n","body_translit_meant":"śhrī-bhagavān uvācha—the Supreme Lord said; sanyāsaḥ—renunciation; karma-yogaḥ—working in devotion; cha—and; niḥśhreyasa-karau—lead to the supreme goal; ubhau—both; tayoḥ—of the two; tu—but; karma-sanyāsāt—renunciation of actions; karma-yogaḥ—working in devotion; viśhiṣhyate—is superior\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"3be4adca-e113-4178-a6a1-67555eb15771"},{"id":"98013ea9-7a40-444d-bc08-a4cd5411ad0d","type":"verses","target":{"id":"2128c354-e058-40dc-9547-b3cdd0dda37c","title":null,"body":"Having abandoned attachment to the fruit of actions, the master of Yoga attains the highest Peace. But, one who is not a master of Yoga and is attached to the fruit of action, is bound by their actions born of desire.","translit_title":null,"body_translit":"yuktaḥ karma-phalaṁ tyaktvā śhāntim āpnoti naiṣhṭhikīm\nayuktaḥ kāma-kāreṇa phale sakto nibadhyate\n\n","body_translit_meant":"yuktaḥ—one who is united in consciousness with God; karma-phalam—the results of all activities; tyaktvā—giving up; śhāntim—peace; āpnoti—attains; naiṣhṭhikīm—everlasting; ayuktaḥ—one who is not united with God in consciousness; kāma-kāreṇa—impelled by desires; phale—in the result; saktaḥ—attached; nibadhyate—becomes entangled\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"eb1089eb-ba46-4bc9-b551-2abaaea82b55"},{"id":"6e195820-3553-4b1e-bd0c-ab81a7168f1f","type":"verses","target":{"id":"c963f7c9-1a4b-497e-8e63-96596019bc4e","title":null,"body":"Whosoever, right here, before abandoning the body, is capable of bearing the force sprung from desire and wrath—he is considered to be a man of Yoga and a happy man.","translit_title":null,"body_translit":"ye hi sansparśha-jā bhogā duḥkha-yonaya eva te\nādyantavantaḥ kaunteya na teṣhu ramate budhaḥ\n\n","body_translit_meant":"ye—which; hi—verily; sansparśha-jāḥ—born of contact with the sense objects; bhogāḥ—pleasures; duḥkha—misery; yonayaḥ—source of; eva—verily; te—they are; ādya-antavantaḥ—having beginning and end; kaunteya—Arjun, the son of Kunti; na—never; teṣhu—in those; ramate—takes delight; budhaḥ—the wise\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"354b25b8-d37f-4ab4-9f80-08130561fef4"},{"id":"ce3042de-838b-42d5-9371-8f0d5e24e220","type":"verses","target":{"id":"8999eb15-51d0-4f19-8c7f-60d45da7aa33","title":null,"body":"The Bhagavad said, \"He who performs his bounden action without depending on its fruit is the man of renunciation and the man of Yoga, not he who simply remains without his fires and actions.\"","translit_title":null,"body_translit":"śhrī bhagavān uvācha\nanāśhritaḥ karma-phalaṁ kāryaṁ karma karoti yaḥ\nsa sannyāsī cha yogī cha na niragnir na chākriyaḥ\n","body_translit_meant":"śhrī-bhagavān uvācha—the Supreme Lord said; anāśhritaḥ—not desiring; karma-phalam—results of actions; kāryam—obligatory; karma—work; karoti—perform; yaḥ—one who; saḥ—that person; sanyāsī—in the renounced order; cha—and; yogī—yogi; cha—and; na—not; niḥ—without; agniḥ—fire; na—not; cha—also; akriyaḥ—without activity\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"fcb13b11-b642-479f-a62b-94bbe96d93df"},{"id":"2344b4f1-c49c-4a0d-88c3-3a9b85e5b502","type":"verses","target":{"id":"2267c4d3-f2e4-4f78-8d7e-6ea048bab61c","title":null,"body":"Setting up in a clean place his own suitable, firm seat predominantly made of cloth, skin, and kusa-grass, neither too high nor too low for him;","translit_title":null,"body_translit":"śhuchau deśhe pratiṣhṭhāpya sthiram āsanam ātmanaḥ\nnātyuchchhritaṁ nāti-nīchaṁ chailājina-kuśhottaram\n","body_translit_meant":"śhuchau—in a clean; deśhe—place; pratiṣhṭhāpya—having established; sthiram—steadfast; āsanam—seat; ātmanaḥ—his own; na—not; ati—too; uchchhritam—high; na—not; ati—too; nīcham—low; chaila—cloth; ajina—a deerskin; kuśha—kuśh grass; uttaram—one over the other\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"0e78455e-179e-46fe-9a86-02071b15ff95"},{"id":"9d7e3f21-44d3-424d-97d0-01521fc1ef25","type":"verses","target":{"id":"8109ed18-bd50-454a-a59f-4396eed3a446","title":null,"body":"Where he realizes the limitless Bliss, which is to be grasped by intellect and is beyond the senses; remaining where he does not depart from the Reality.","translit_title":null,"body_translit":"sukham ātyantikaṁ yat tad buddhi-grāhyam atīndriyam\nvetti yatra na chaivāyaṁ sthitaśh chalati tattvataḥ\n","body_translit_meant":"sukham—happiness; ātyantikam—limitless; yat—which; tat—that; buddhi—by intellect; grāhyam—grasp; atīndriyam—transcending the senses; vetti—knows; yatra—wherein; na—never; cha—and; eva—certainly; ayam—he; sthitaḥ—situated; chalati—deviates; tattvataḥ—from the Eternal Truth\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"97a3284e-baed-45bb-9df6-9e35803408d6"},{"id":"d44657e7-1902-4771-a289-2cb44fabfe40","type":"verses","target":{"id":"ac69d9e2-37eb-45fd-9ae3-f85651efcb3c","title":null,"body":"He who is firmly established in the oneness of Me, experiences Me immanent in all beings—that man of Yoga is never stained, no matter what stage he may be in.","translit_title":null,"body_translit":"sarva-bhūta-sthitaṁ yo māṁ bhajatyekatvam āsthitaḥ\nsarvathā vartamāno ’pi sa yogī mayi vartate\n","body_translit_meant":"sarva-bhūta-sthitam—situated in all beings; yaḥ—who; mām—me; bhajati—worships; ekatvam—in unity; āsthitaḥ—established; sarvathā—in all kinds of; varta-mānaḥ—remain; api—although; saḥ—he; yogī—a yogi; mayi—in me; vartate—dwells\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"aa04fb31-ac5a-44b4-a807-0002d9850935"},{"id":"fc5f9a53-6031-4d88-bd57-59088eec3887","type":"verses","target":{"id":"ce66fc12-a6e4-4307-8de0-b843cad65291","title":null,"body":"- . [Some sages] offer the prana into the apana; likewise, others offer the apana into the prana. Having controlled both the courses of the prana and apana, the same sages, with their desires fulfilled by the above activities, and with their food restricted, offer the pranas into pranas. All these persons know what sacrifices are and have their sins destroyed by them.","translit_title":null,"body_translit":"apare niyatāhārāḥ prāṇān prāṇeṣu juhvati\n\nsarve py 'ete yajña-vido yajña-kṣapita-kalmaṣāḥ \n","body_translit_meant":"apare—others; niyata—controlled; āhārāḥ—eating; prāṇān—outgoing air; prāṇeṣu—in the outgoing air; sarve—all; api—although apparently different; ete—all these; yajñavidaḥ—conversant with the purpose of performing; yajña—sacrifices; kṣapita—being cleansed of the result of such performances; kalmaṣāḥ—sinful reactions; juhvati—sacrifices.","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"501aff1e-6506-4191-8098-506cb57298b5"},{"id":"344140dd-a961-4822-aba6-6c5e58432827","type":"verses","target":{"id":"4bf42b09-05d0-4e92-b38e-13d5f8ff9d1d","title":null,"body":"But he who is ignorant and has no faith, perishes, with his mind full of doubts. Neither this world nor the other, nor happiness is for a person who is by nature full of doubts.","translit_title":null,"body_translit":"ajñaśh chāśhraddadhānaśh cha sanśhayātmā vinaśhyati\nnāyaṁ loko ’sti na paro na sukhaṁ sanśhayātmanaḥ\n\n","body_translit_meant":"ajñaḥ—the ignorant; cha—and; aśhraddadhānaḥ—without faith; cha—and; sanśhaya—skeptical; ātmā—a person; vinaśhyati—falls down; na—never; ayam—in this; lokaḥ—world; asti—is; na—not; paraḥ—in the next; na—not; sukham—happiness; sanśhaya-ātmanaḥ—for the skeptical soul\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"21a64351-3ae7-4087-a9aa-27c5fc331207"},{"id":"3ce8334e-1ce0-47d6-adc5-0b248c38a6b8","type":"verses","target":{"id":"02a2d2cc-3ce6-41ee-95ca-5e3adeb13816","title":null,"body":"O mighty-armed Arjuna! Renunciation is indeed hard to attain, except through Yoga; the sage who is the master of Yoga quickly attains the Brahman.","translit_title":null,"body_translit":"sannyāsas tu mahā-bāho duḥkham āptum ayogataḥ\nyoga-yukto munir brahma na chireṇādhigachchhati\n\n","body_translit_meant":"sanyāsaḥ—renunciation; tu—but; mahā-bāho—mighty-armed one; duḥkham—distress; āptum—attains; ayogataḥ—without karm yog; yoga-yuktaḥ—one who is adept in karm yog; muniḥ—a sage; brahma—Brahman; na chireṇa—quickly; adhigachchhati—goes\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"a76b3325-e7c7-42f9-a336-3456585aded2"},{"id":"8abb7eaf-6ac0-4ca8-b032-d3eadddb82d4","type":"verses","target":{"id":"4a0fc7ef-9b46-4a2a-a45a-89e13864aab9","title":null,"body":"In the case of those whose illusion has been destroyed by Self-knowledge, that knowledge illuminates itself, like the sun.","translit_title":null,"body_translit":"jñānena tu tad ajñānaṁ yeṣhāṁ nāśhitam ātmanaḥ\nteṣhām āditya-vaj jñānaṁ prakāśhayati tat param\n\n","body_translit_meant":"jñānena—by divine knowledge; tu—but; tat—that; ajñānam—ignorance; yeṣhām—whose; nāśhitam—has been destroyed; ātmanaḥ—of the self; teṣhām—their; āditya-vat—like the sun; jñānam—knowledge; prakāśhayati—illumines; tat—that; param—Supreme Entity\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"ba719670-bc57-417b-bb60-ae7677ad8c1b"},{"id":"8c9a3f83-6cb8-475b-b8cd-7d860a58ec83","type":"verses","target":{"id":"da1a77af-06b5-49f6-9cf1-c076e840a5d5","title":null,"body":"Warding off external contacts; keeping the sense of sight between the two wandering ones; counterbalancing both the forward and backward moving forces that travel within what is crooked;","translit_title":null,"body_translit":"kāma-krodha-viyuktānāṁ yatīnāṁ yata-chetasām\nabhito brahma-nirvāṇaṁ vartate viditātmanām\n\n","body_translit_meant":"kāma—desires; krodha—anger; vimuktānām—of those who are liberated; yatīnām—of the saintly persons; yata-chetasām—those self-realized persons who have subdued their mind; abhitaḥ—from every side; brahma—spiritual; nirvāṇam—liberation from material existence; vartate—exists; vidita-ātmanām—of those who are self-realized\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"b887f7f1-111b-4838-a5ce-d0d2ae1a2574"},{"id":"e1c91943-c34a-4217-ae33-d7f67c25c146","type":"verses","target":{"id":"db77a216-06cc-4149-9409-ec043a4eb930","title":null,"body":"Let a person lift themselves by themselves and let them not depress themselves. For, the self alone is the friend of the self and the self alone is the foe of the self.","translit_title":null,"body_translit":"uddhared ātmanātmānaṁ nātmānam avasādayet\nātmaiva hyātmano bandhur ātmaiva ripur ātmanaḥ\n","body_translit_meant":"uddharet—elevate; ātmanā—through the mind; ātmānam—the self; na—not; ātmānam—the self; avasādayet—degrade; ātmā—the mind; eva—certainly; hi—indeed; ātmanaḥ—of the self; bandhuḥ—friend; ātmā—the mind; eva—certainly; ripuḥ—enemy; ātmanaḥ—of the self\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"e8cf25a3-2068-408e-8ea0-4c0c59f855b4"},{"id":"60b5e09d-15ce-4239-a5c8-46e624a0f443","type":"verses","target":{"id":"9365bbd2-9649-442e-ab27-59604fb897df","title":null,"body":"Yoking his mind incessantly in this manner, My devotee, with their mind not attached to anything else, realizes peace which culminates in nirvana and ends in Me.","translit_title":null,"body_translit":"yuñjann evaṁ sadātmānaṁ yogī niyata-mānasaḥ\nśhantiṁ nirvāṇa-paramāṁ mat-sansthām adhigachchhati\n","body_translit_meant":"yuñjan—keeping the mind absorbed in God; evam—thus; sadā—constantly; ātmānam—the mind; yogī—a yogi; niyata-mānasaḥ—one with a disciplined mind; śhāntim—peace; nirvāṇa—liberation from the material bondage; paramām—supreme; mat-sansthām—abides in me; adhigachchhati—attains\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"7dff1043-9445-4baa-ae38-60f4ce790bdc"},{"id":"9c2616cd-3b09-498c-b257-fce752eaab82","type":"verses","target":{"id":"8e33727b-3c18-4b6e-9d64-0c573454545a","title":null,"body":"Very slowly remain still, keeping the mind well established in the Self by means of the intellect held in steadiness; and let him not think of anything (object).","translit_title":null,"body_translit":"śhanaiḥ śhanair uparamed buddhyā dhṛiti-gṛihītayā\nātma-sansthaṁ manaḥ kṛitvā na kiñchid api chintayet\n","body_translit_meant":"śhanaiḥ—gradually; śhanaiḥ—gradually; uparamet—attain peace; buddhyā—by intellect; dhṛiti-gṛihītayā—achieved through determination of resolve that is in accordance with scriptures; ātma-sanstham—fixed in God; manaḥ—mind; kṛitvā—having made; na—not; kiñchit—anything; api—even; chintayet—should think of\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"1099dbbb-1cea-43ab-abd9-ce0f15f6937c"},{"id":"c9dd23dc-ed2c-4f4e-9ece-fe6fedd701e4","type":"verses","target":{"id":"a24d69d3-4a5e-4964-b0fd-e3ab54ca6ca2","title":null,"body":"The Bhagavat said, O mighty-armed one! No doubt, the mind is unsteady and hard to control. But it can be controlled through practice and an attitude of desirelessness, O son of Kunti!","translit_title":null,"body_translit":"śhrī bhagavān uvācha\nasanśhayaṁ mahā-bāho mano durnigrahaṁ chalam\nabhyāsena tu kaunteya vairāgyeṇa cha gṛihyate\n","body_translit_meant":"śhrī-bhagavān uvācha—Lord Krishna said; asanśhayam—undoubtedly; mahā-bāho—mighty-armed one; manaḥ—the mind; durnigraham—difficult to restrain; chalam—restless; abhyāsena—by practice; tu—but; kaunteya—Arjun, the son of Kunti; vairāgyeṇa—by detachment; cha—and; gṛihyate—can be controlled\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"fdd34ce5-b3d6-43bc-b02d-b32fc4d6bc03"},{"id":"835499e1-cfd3-432a-8649-2cd255ebcd35","type":"verses","target":{"id":"684e9880-f59f-4ded-9923-6fcc3e08aaea","title":null,"body":"Learn this from those endowed with knowledge, through prostration, inquiry, and service offered to them. Those who are endowed with knowledge and are capable of showing the truth will give you the truth nearby.","translit_title":null,"body_translit":"tad viddhi praṇipātena paripraśhnena sevayā\nupadekṣhyanti te jñānaṁ jñāninas tattva-darśhinaḥ\n\n","body_translit_meant":"tat—the Truth; viddhi—try to learn; praṇipātena—by approaching a spiritual master; paripraśhnena—by humble inquiries; sevayā—by rendering service; upadekṣhyanti—can impart; te—unto you; jñānam—knowledge; jñāninaḥ—the enlightened; tattva-darśhinaḥ—those who have realized the Truth\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"aaec5771-4324-49f3-bbbd-2f38d89d1474"},{"id":"6048bf07-bcfa-482a-9109-cb4ba86abbd2","type":"chapters","target":{"id":"91ea1d05-5d78-43a0-8119-e97e1a547d0f","title":"Path of Renunciation","body":"The fifth chapter of the Bhagavad Gita is \"Karma Sanyasa Yoga\". In this chapter, Krishna compares the paths of renunciation in actions (Karma Sanyas) and actions with detachment (Karma Yoga) and explains that both are means to reach the same goal and we can choose either. A wise person should perform his/her worldly duties without attachment to the fruits of his/her actions and dedicate them to God. This way they remain unaffected by sin and eventually attain liberation.","translit_title":"Karm Sanyās Yog","body_translit":null,"body_translit_meant":null,"body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":5,"lang":"en"},{"id":"e8154791-2898-465f-ab0d-20a72e07edb3","type":"verses","target":{"id":"40c20e41-827b-48df-a60b-80d4866d815a","title":null,"body":"Who performs actions by offering them to the Brahman and giving up attachment—they are not stained by sin, just as a lotus leaf is not stained by water.","translit_title":null,"body_translit":"brahmaṇyādhāya karmāṇi saṅgaṁ tyaktvā karoti yaḥ\nlipyate na sa pāpena padma-patram ivāmbhasā\n\n","body_translit_meant":"brahmaṇi—to God; ādhāya—dedicating; karmāṇi—all actions; saṅgam—attachment; tyaktvā—abandoning; karoti—performs; yaḥ—who; lipyate—is affected; na—never; saḥ—that person; pāpena—by sin; padma-patram—a lotus leaf; iva—like; ambhasā—by water\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"1a9c7852-9d67-4767-b517-617c3bb531a3"},{"id":"93464720-0c4d-4ec9-b085-71f4f97c770e","type":"verses","target":{"id":"37f99754-5c21-4cd9-b716-4d9fb8115091","title":null,"body":"He who, with his mind not attached to external contacts, finds happiness in the Self—that person, with his mind engaged in Yoga, easily pervades the Brahman, suffering no loss.","translit_title":null,"body_translit":"na prahṛiṣhyet priyaṁ prāpya nodvijet prāpya chāpriyam\nsthira-buddhir asammūḍho brahma-vid brahmaṇi sthitaḥ\n\n","body_translit_meant":"na—neither; prahṛiṣhyet—rejoice; priyam—the pleasant; prāpya—obtaining; na—nor; udvijet—become disturbed; prāpya—attaining; cha—also; apriyam—the unpleasant; sthira-buddhiḥ—steady intellect; asammūḍhaḥ—firmly situated; brahma-vit—having a firm understanding of divine knowledge; brahmaṇi—established in God; sthitaḥ—situated\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"973a41e2-9761-4e38-9ad0-d3b46a421fa3"},{"id":"eaffdd9d-9ed0-4bae-a47f-f1304732bf93","type":"verses","target":{"id":"47553b4b-bed7-43b1-a93c-be74b6a15e2b","title":null,"body":"He whose mind is equal in the case of friend, companion, enemy, the indifferent one, the one who remains in the middle, the foe, the relative, the righteous, and also the sinful—he excels [all].","translit_title":null,"body_translit":"suhṛin-mitrāryudāsīna-madhyastha-dveṣhya-bandhuṣhu\nsādhuṣhvapi cha pāpeṣhu sama-buddhir viśhiṣhyate\n","body_translit_meant":"su-hṛit—toward the well-wishers; mitra—friends; ari—enemies; udāsīna—neutral persons; madhya-stha—mediators; dveṣhya—the envious; bandhuṣhu—relatives; sādhuṣhu—pious; api—as well as; cha—and; pāpeṣhu—the sinners; sama-buddhiḥ—of impartial intellect; viśhiṣhyate—is distinguished\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"19aad0dc-9c17-4eda-a9bd-9df65e1a6604"},{"id":"72ed901a-4d76-4138-992c-05f046faaeca","type":"verses","target":{"id":"5fcf5dfc-90a2-4320-89d1-af0f81a84fc8","title":null,"body":"Just as a lamp in a windless place does not shake, this simile is recalled in the case of the man of Yoga, with a subdued mind, practicing Yoga in the Self.","translit_title":null,"body_translit":"yathā dīpo nivāta-stho neṅgate sopamā smṛitā\nyogino yata-chittasya yuñjato yogam ātmanaḥ\n","body_translit_meant":"yathā—as; dīpaḥ—a lamp; nivāta-sthaḥ—in a windless place; na—does not; iṅgate—flickers; sā—this; upamā—analogy; smṛitā—is considered; yoginaḥ—of a yogi; yata-chittasya—whose mind is disciplined; yuñjataḥ—steadily practicing; yogam—in meditation; ātmanaḥ—on the Supreme\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"ca3b3991-e41a-4710-9c56-52f1966ba683"},{"id":"e591998f-5fec-4d72-a357-c092b47b9d65","type":"verses","target":{"id":"91099db5-6a31-447e-be11-c52662aa8498","title":null,"body":"He who has yoked himself in Yoga and observes everything truly perceives the Self to be abiding in all beings and all beings to be abiding in the Self.","translit_title":null,"body_translit":"sarva-bhūta-stham ātmānaṁ sarva-bhūtāni chātmani\nīkṣhate yoga-yuktātmā sarvatra sama-darśhanaḥ\n","body_translit_meant":"sarva-bhūta-stham—situated in all living beings; ātmānam—Supreme Soul; sarva—all; bhūtāni—living beings; cha—and; ātmani—in God; īkṣhate—sees; yoga-yukta-ātmā—one united in consciousness with God; sarvatra—everywhere; sama-darśhanaḥ—equal vision\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"f1f00d14-f79e-4a52-bdb3-6dbd6e8d375f"},{"id":"3a29ebff-adae-48ed-b1da-b60a02151a9f","type":"verses","target":{"id":"77e34ec8-1814-4676-9959-abe5646e1d15","title":null,"body":"Please dispel this doubt of mine completely. But for You, O Krsna, no one else is capable of eradicating this doubt.","translit_title":null,"body_translit":"etan me sanśhayaṁ kṛiṣhṇa chhettum arhasyaśheṣhataḥ\ntvad-anyaḥ sanśhayasyāsya chhettā na hyupapadyate\n","body_translit_meant":"etat—this; me—my; sanśhayam—doubt; kṛiṣhṇa—Krishna; chhettum—to dispel; arhasi—you can; aśheṣhataḥ—completely; tvat—than you; anyaḥ—other; sanśhayasya—of doubt; asya—this; chhettā—a dispeller; na—never; hi—certainly; upapadyate—is fit\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"a4c77334-7217-4801-ac85-64fa6c3cf844"},{"id":"45c8dfe6-08fa-484f-9e4e-5b4d5886bdfd","type":"chapters","target":{"id":"2fb5ad8b-8dc2-4f05-855b-4b9a39356253","title":"Self-Knowledge and Enlightenment","body":"The seventh chapter of the Bhagavad Gita is \"Gyaan Vigyana Yoga \". In this chapter, Krishna reveals that he is the Supreme Truth, the principal cause and the sustaining force of everything. He reveals his illusionary energy in this material world called Maya, which is very difficult to overcome but those who surrender their minds unto Him attain Him easily. He also describes the four types of people who surrender to Him in devotion and the four kinds that don't. Krishna confirms that He is the Ultimate Reality and those who realize this Truth reach the pinnacle of spiritual realization and unite with the Lord.","translit_title":"Jñāna Vijñāna Yog","body_translit":null,"body_translit_meant":null,"body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":7,"lang":"en"},{"id":"5762c596-ee30-4291-b6ee-79b086d602a3","type":"verses","target":{"id":"cde6dfad-1e01-4b64-954f-1f37e7b563f3","title":null,"body":"By knowing this, you will not be deluded again, O son of Pandu; and by this means, you will see all beings without exception in yourself, that is, in Me.","translit_title":null,"body_translit":"yaj jñātvā na punar moham evaṁ yāsyasi pāṇḍava\nyena bhūtānyaśheṣheṇa drakṣhyasyātmanyatho mayi\n\n","body_translit_meant":"yat—which; jñātvā—having known; na—never; punaḥ—again; moham—delusion; evam—like this; yāsyasi—you shall get; pāṇḍava—Arjun, the son of Pandu; yena—by this; bhūtāni—living beings; aśheṣhāṇi—all; drakṣhyasi—you will see; ātmani—within me (Shree Krishna); atho—that is to say; mayi—in me\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"bb0aa388-97b8-4eef-9481-63ecaed9475c"},{"id":"bcaf9631-d036-453b-b5af-0844f07ee070","type":"verses","target":{"id":"7adb71b7-00ff-4e14-b00a-e785d8042487","title":null,"body":"Arjuna said, \"O Krsna, you commend both renunciation of action and the Yoga of action; which one of these two is superior?\" Please tell me that for certain.","translit_title":null,"body_translit":"arjuna uvācha\nsannyāsaṁ karmaṇāṁ kṛiṣhṇa punar yogaṁ cha śhansasi\nyach chhreya etayor ekaṁ tan me brūhi su-niśhchitam\n\n","body_translit_meant":"arjunaḥ uvācha—Arjun said; sanyāsam—renunciation; karmaṇām—of actions; kṛiṣhṇa—Shree Krishna; punaḥ—again; yogam—about karm yog; cha—also; śhansasi—you praise; yat—which; śhreyaḥ—more beneficial; etayoḥ—of the two; ekam—one; tat—that; me—unto me; brūhi—please tell; su-niśhchitam—conclusively\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"cb7c878e-341a-4bf1-a556-4ffdfb91a397"},{"id":"6d674cc5-dba8-460e-8364-1977c5dd1fe8","type":"verses","target":{"id":"b89a7467-637c-465e-b228-196d1670663f","title":null,"body":"Having given up attachment, the men of Yoga perform action just with the body, with the mind, with intellect, and also with their sense-organs, for attaining the Self.","translit_title":null,"body_translit":"kāyena manasā buddhyā kevalair indriyair api\nyoginaḥ karma kurvanti saṅgaṁ tyaktvātma-śhuddhaye\n\n","body_translit_meant":"kāyena—with the body; manasā—with the mind; buddhyā—with the intellect; kevalaiḥ—only; indriyaiḥ—with the senses; api—even; yoginaḥ—the yogis; karma—actions; kurvanti—perform; saṅgam—attachment; tyaktvā—giving up; ātma—of the self; śhuddhaye—for the purification\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"0ac470cf-b2e7-47f1-9c0e-b42a82354a64"},{"id":"e39f0653-1a2d-43fa-9879-75ab4eef40e4","type":"verses","target":{"id":"d88ada0c-63f4-4b06-99cf-73439fc50ab1","title":null,"body":"The enjoyments that arise from contact [with objects] are nothing but sources of misery, having both a beginning and an end. Therefore, an intelligent person does not take delight in them, O son of Kunti!","translit_title":null,"body_translit":"bāhya-sparśheṣhvasaktātmā vindatyātmani yat sukham\nsa brahma-yoga-yuktātmā sukham akṣhayam aśhnute\n\n","body_translit_meant":"bāhya-sparśheṣhu—external sense pleasure; asakta-ātmā—those who are unattached; vindati—find; ātmani—in the self; yat—which; sukham—bliss; saḥ—that person; brahma-yoga yukta-ātmā—those who are united with God through yog; sukham—happiness; akṣhayam—unlimited; aśhnute—experiences\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"f17b58e5-3907-4378-962f-58a5147a29f7"},{"id":"f4b311dd-71ab-4809-9563-5573d9198a1a","type":"chapters","target":{"id":"5e5ec36a-1982-421f-9fd7-595bdb70cac1","title":"Path of Meditation","body":"The sixth chapter of the Bhagavad Gita is \"Dhyana Yoga\". In this chapter, Krishna reveals the \"Yoga of Meditation\" and how to practise this Yoga. He discusses the role of action in preparing for Meditation, how performing duties in devotion purifies one's mind and heightens one's spiritual consciousness. He explains in detail the obstacles that one faces when trying to control their mind and the exact methods by which one can conquer their mind. He reveals how one can focus their mind on Paramatma and unite with the God.","translit_title":"Dhyān Yog","body_translit":null,"body_translit_meant":null,"body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":6,"lang":"en"},{"id":"db3eec91-d83d-44c9-9c24-562a91ca460d","type":"verses","target":{"id":"b1f95c86-e1c8-4132-8173-139ea82b2032","title":null,"body":"Let the man of Yoga always yoke the self (mind) by remaining alone in a lonely place, controlling his mind and body, without desire and without a sense of possession.","translit_title":null,"body_translit":"yogī yuñjīta satatam ātmānaṁ rahasi sthitaḥ\nekākī yata-chittātmā nirāśhīr aparigrahaḥ\n","body_translit_meant":"yogī—a yogi; yuñjīta—should remain engaged in meditation; satatam—constantly; ātmānam—self; rahasi—in seclusion; sthitaḥ—remaining; ekākī—alone; yata-chitta-ātmā—with a controlled mind and body; nirāśhīḥ—free from desires; aparigrahaḥ—free from desires for possessions for enjoyment\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"5a800973-f8c0-4a5c-abad-0e82597eb70f"},{"id":"38790d2a-82b5-4aaa-8846-1cd2d43eef84","type":"verses","target":{"id":"b4f2525c-02bb-4740-8c58-b6e8a69dad68","title":null,"body":"Where the mind, restrained through yoga practice, remains still; and where, observing, the yogi finds satisfaction in the Self alone, by perceiving only the Self within.","translit_title":null,"body_translit":"yatroparamate chittaṁ niruddhaṁ yoga-sevayā\nyatra chaivātmanātmānaṁ paśhyann ātmani tuṣhyati\n","body_translit_meant":"yatra—when; uparamate—rejoice inner joy; chittam—the mind; niruddham—restrained; yoga-sevayā—by the practice of yog; yatra—when; cha—and; eva—certainly; ātmanā—through the purified mind; ātmānam—the soul; paśhyan—behold; ātmani—in the self; tuṣhyati—is satisfied\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"7c86903c-8d2b-4e69-8605-e2f35b3cde6a"},{"id":"a94d91ba-9ac2-447b-8c37-7c0820454313","type":"verses","target":{"id":"0afb2815-f371-4bd3-a4a9-5eba98075b82","title":null,"body":"He who observes Me in all and observes all in Me—for him, I am not lost, and he too is not lost for me.","translit_title":null,"body_translit":"yo māṁ paśhyati sarvatra sarvaṁ cha mayi paśhyati\ntasyāhaṁ na praṇaśhyāmi sa cha me na praṇaśhyati\n","body_translit_meant":"yaḥ—who; mām—me; paśhyati—see; sarvatra—everywhere; sarvam—everything; cha—and; mayi—in me; paśhyati—see; tasya—for him; aham—I; na—not; praṇaśhyāmi—lost; saḥ—that person; cha—and; me—to me; na—nor; praṇaśhyati—lost\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"94965602-f35a-485a-b556-5960c474d2f2"},{"id":"ab9357b6-1dfe-452b-9cad-45e6efdc9f37","type":"verses","target":{"id":"9a9f0fda-bfde-4238-b73e-5d7dd79b9c37","title":null,"body":"The Bhagavat said, \"O dear Partha! Neither in this world nor in the other is there destruction for him. Certainly, no one who performs an auspicious act ever comes to a grievous state.\"","translit_title":null,"body_translit":"śhrī bhagavān uvācha\npārtha naiveha nāmutra vināśhas tasya vidyate\nna hi kalyāṇa-kṛit kaśhchid durgatiṁ tāta gachchhati\n","body_translit_meant":"śhrī-bhagavān uvācha—the Supreme Lord said; pārtha—Arjun, the son of Pritha; na eva—never; iha—in this world; na—never; amutra—in the next world; vināśhaḥ—destruction; tasya—his; vidyate—exists; na—never; hi—certainly; kalyāṇa-kṛit—one who strives for God-realization; kaśhchit—anyone; durgatim—evil destination; tāta—my friend; gachchhati—goes\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"b7b73288-fc34-427f-a20f-d67f629c1965"},{"id":"174caabe-9483-420c-9fba-4ca0f5d0dcc5","type":"verses","target":{"id":"b9515712-fd93-4afd-8f1d-0b48678d297e","title":null,"body":"He who has faith gains knowledge, if he is solely intent upon it and has his sense-organs well-controlled. Having gained the knowledge, he soon attains the Supreme Peace.","translit_title":null,"body_translit":"śhraddhāvān labhate jñānaṁ tat-paraḥ sanyatendriyaḥ\njñānaṁ labdhvā parāṁ śhāntim achireṇādhigachchhati\n\n","body_translit_meant":"śhraddhā-vān—a faithful person; labhate—achieves; jñānam—divine knowledge; tat-paraḥ—devoted (to that); sanyata—controlled; indriyaḥ—senses; jñānam—transcendental knowledge; labdhvā—having achieved; parām—supreme; śhāntim—peace; achireṇa—without delay; adhigachchhati—attains\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"978fd8fd-7769-4a2a-a523-966ff9816e5a"},{"id":"f8086b16-4f77-4358-a23a-a463ba115dec","type":"verses","target":{"id":"f41baa3e-9807-4b09-a187-318ef37c9570","title":null,"body":"Those who are knowledgeable reach the same state as those who practice Yoga; so whoever sees the knowledge-path and the Yoga as one, sees correctly.","translit_title":null,"body_translit":"\nyat sānkhyaiḥ prāpyate sthānaṁ tad yogair api gamyate\nekaṁ sānkhyaṁ cha yogaṁ cha yaḥ paśhyati sa paśhyati\n\n","body_translit_meant":"yat—what; sānkhyaiḥ—by means of karm sanyās; prāpyate—is attained; sthānam—place; tat—that; yogaiḥ—by working in devotion; api—also; gamyate—is attained; ekam—one; sānkhyam—renunciation of actions; cha—and; yogam—karm yog; cha—and; yaḥ—who; paśhyati—sees; saḥ—that person; paśhyati—actually sees\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"45132f52-d473-4e72-9127-7f4b965b9ec5"},{"id":"ea6e6100-d73f-4a63-a1b9-7b9716c13729","type":"verses","target":{"id":"66fa1bf6-d6c6-46e8-9c58-fcedd40d8ff5","title":null,"body":"The Omnimanifest Soul takes neither sin nor merit born of any action upon itself. But, perfect knowledge is clouded by Illusion, and thus the creatures are deluded.","translit_title":null,"body_translit":"nādatte kasyachit pāpaṁ na chaiva sukṛitaṁ vibhuḥ\najñānenāvṛitaṁ jñānaṁ tena muhyanti jantavaḥ\n\n","body_translit_meant":"na—not; ādatte—accepts; kasyachit—anyone’s; pāpam—sin; na—not; cha—and; eva—certainly; su-kṛitam—virtuous deeds; vibhuḥ—the omnipresent God; ajñānena—by ignorance; āvṛitam—covered; jñānam—knowledge; tena—by that; muhyanti—are deluded; jantavaḥ—the living entities\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"f8e65456-9fa2-4b39-8dd4-8223052e71d8"},{"id":"3e98d576-159d-42f0-b8fb-9e88356fe063","type":"verses","target":{"id":"ee6ca91a-57ed-4a86-8f53-bcca50cb624e","title":null,"body":"At all times, there is the transcendent Brahman for the ascetics who have severed their connection with desire and anger, who have controlled their minds and have realized their Self.","translit_title":null,"body_translit":"labhante brahma-nirvāṇam ṛiṣhayaḥ kṣhīṇa-kalmaṣhāḥ\nchhinna-dvaidhā yatātmānaḥ sarva-bhūta-hite ratāḥ\n\n","body_translit_meant":"labhante—achieve; brahma-nirvāṇam—liberation from material existence; ṛiṣhayaḥ—holy persons; kṣhīṇa-kalmaṣhāḥ—whose sins have been purged; chhinna—annihilated; dvaidhāḥ—doubts; yata-ātmānaḥ—whose minds are disciplined; sarva-bhūta—for all living entities; hite—in welfare work; ratāḥ—rejoice\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"682f785b-07ca-4b46-949d-be41d2f33d73"},{"id":"34d45980-d6a0-41dc-a2ef-3653cbfdf8d0","type":"verses","target":{"id":"f4808c71-69b8-4fd0-a81f-b98f4de8ffe9","title":null,"body":"When a person indulges neither in what is desired by the senses nor in the actions for it, then, being a man who has renounced all intentions, he is said to have mounted on the path of Yoga.","translit_title":null,"body_translit":"yadā hi nendriyārtheṣhu na karmasv-anuṣhajjate\nsarva-saṅkalpa-sannyāsī yogārūḍhas tadochyate\n","body_translit_meant":"yadā—when; hi—certainly; na—not; indriya-artheṣhu—for sense-objects; na—not; karmasu—to actions; anuṣhajjate—is attachment; sarva-saṅkalpa—all desires for the fruits of actions; sanyāsī—renouncer; yoga-ārūḍhaḥ—elevated in the science of Yog; tadā—at that time; uchyate—is said\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"e8ee6511-91cd-476f-b895-43a2fc62621e"},{"id":"71eff903-b4a3-464e-935f-50605f4817ca","type":"verses","target":{"id":"1e7d1136-d2d8-4d8e-bb84-dfaff05c2da9","title":null,"body":"Being calm-minded, fearless, and firmly devoted to celibacy; controlling the mind completely; let the master of Yoga remain, fixing his mind on Me and having Me as his supreme goal.","translit_title":null,"body_translit":"praśhāntātmā vigata-bhīr brahmachāri-vrate sthitaḥ\nmanaḥ sanyamya mach-chitto yukta āsīta mat-paraḥ\n","body_translit_meant":"praśhānta—serene; ātmā—mind; vigata-bhīḥ—fearless; brahmachāri-vrate—in the vow of celibacy; sthitaḥ—situated; manaḥ—mind; sanyamya—having controlled; mat-chittaḥ—meditate on me (Shree Krishna); yuktaḥ—engaged; āsīta—should sit; mat-paraḥ—having me as the supreme goal\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"c8e21a31-522c-4db4-b470-c5b6532cd014"},{"id":"a7cb8e7e-7205-464b-bf0e-49da0c65659b","type":"verses","target":{"id":"310db2f2-cfdf-43e8-bb95-3d57b24976b6","title":null,"body":"In order to renounce completely all desires that are born of intention, let a person restrain the group of sense-organs from all sides by mind alone.","translit_title":null,"body_translit":"saṅkalpa-prabhavān kāmāns tyaktvā sarvān aśheṣhataḥ\nmanasaivendriya-grāmaṁ viniyamya samantataḥ\n","body_translit_meant":"saṅkalpa—a resolve; prabhavān—born of; kāmān—desires; tyaktvā—having abandoned; sarvān—all; aśheṣhataḥ—completely; manasā—through the mind; eva—certainly; indriya-grāmam—the group of senses; viniyamya—restraining; samantataḥ—from all sides;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"6e950f8c-2433-4534-9483-df4ec0b055c2"},{"id":"ee8f4742-0902-4170-861a-67fb1f259321","type":"verses","target":{"id":"1da2aeb1-ae3d-4c5b-bd83-36533729bcaa","title":null,"body":"O Krsna! The mind is indeed unsteady, destructive, strong, and obstinate; I believe it is very difficult to control it, just as it is to control the wind.","translit_title":null,"body_translit":"chañchalaṁ hi manaḥ kṛiṣhṇa pramāthi balavad dṛiḍham\ntasyāhaṁ nigrahaṁ manye vāyor iva su-duṣhkaram\n","body_translit_meant":"chañchalam—restless; hi—certainly; manaḥ—mind; kṛiṣhṇa—Shree Krishna; pramāthi—turbulent; bala-vat—strong; dṛiḍham—obstinate; tasya—its; aham—I; nigraham—control; manye—think; vāyoḥ—of the wind; iva—like; su-duṣhkaram—difficult to perform\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"88ab628d-3773-41e6-9d3e-1b6ff2c56523"},{"id":"e5f9e53a-781e-4af2-b7c6-6f7f13bb4f15","type":"verses","target":{"id":"c547edd0-8623-4b44-bb38-39d268fced5e","title":null,"body":"Not being a master of himself, he is only dragged by that former practice (its mental impression); only a seeker of the knowledge of Yoga passes beyond what strengthens the [sacred] text.","translit_title":null,"body_translit":"pūrvābhyāsena tenaiva hriyate hyavaśho ’pi saḥ\njijñāsur api yogasya śhabda-brahmātivartate\n","body_translit_meant":"pūrva—past; abhyāsena—discipline; tena—by that; eva—certainly; hriyate—is attracted; hi—surely; avaśhaḥ—helplessly; api—although; saḥ—that person; jijñāsuḥ—inquisitive; api—even; yogasya—about yog; śhabda-brahma—fruitive portion of the Vedas; ativartate—transcends\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"6dab0e6e-4097-4f48-bdd0-5ac5ae4a383c"},{"id":"489d6971-d3c2-4a74-a7c1-9b0ef0b28504","type":"verses","target":{"id":"88d3bd67-c5ce-4883-b238-34c164b3f3ba","title":null,"body":"O Dhananjaya! Actions do not bind him who has renounced all actions through Yoga; who has cut off his doubts by the sword of knowledge; and who is a master of his own self.","translit_title":null,"body_translit":"yoga-sannyasta-karmāṇaṁ jñāna-sañchhinna-sanśhayam\nātmavantaṁ na karmāṇi nibadhnanti dhanañjaya\n\n","body_translit_meant":"yoga-sannyasta-karmāṇam—those who renounce ritualistic karm, dedicating their body, mind, and soul to God; jñāna—by knowledge; sañchhinna—dispelled; sanśhayam—doubts; ātma-vantam—situated in knowledge of the self; na—not; karmāṇi—actions; nibadhnanti—bind; dhanañjaya—Arjun, the conqueror of wealth\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"50606f91-4c84-4c4b-9fca-aab0eb2e0897"},{"id":"67a7fe89-1afb-40b7-9bf8-2c69e54927ec","type":"verses","target":{"id":"d3e206ae-97b4-4aed-83a9-f41cbe8e8e2d","title":null,"body":"A master of yoga, whose self (mind and intellect) is very pure, the sense-organs are controlled, and the soul is realized to be the soul of all beings—he is not stained, even though he is a performer of actions.","translit_title":null,"body_translit":"yoga-yukto viśhuddhātmā vijitātmā jitendriyaḥ\nsarva-bhūtātma-bhūtātmā kurvann api na lipyate\n\n","body_translit_meant":"yoga-yuktaḥ—united in consciousness with God; viśhuddha-ātmā—one with purified intellect; vijita-ātmā—one who has conquered the mind; jita-indriyaḥ—having conquered the senses; sarva-bhūta-ātma-bhūta-ātmā—one who sees the Soul of all souls in every living being; kurvan—performing; api—although; na—never; lipyate—entangled\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"92cfad7d-d41e-4d25-943a-100ec7e140b6"},{"id":"85a3c0a5-7130-4993-bd5e-9f2c951f1789","type":"verses","target":{"id":"54e7e7df-7add-4fd4-b4dd-6358a5a65c2a","title":null,"body":"Those who have their intellect and self (mind) devoted to This; who have established themselves in This and have This [alone] as their supreme goal; and who have washed off their sins through [perfect] knowledge—they reach a state from which there is no more return.","translit_title":null,"body_translit":"tad-buddhayas tad-ātmānas tan-niṣhṭhās tat-parāyaṇāḥ\ngachchhantyapunar-āvṛittiṁ jñāna-nirdhūta-kalmaṣhāḥ\n\n","body_translit_meant":"tat-buddhayaḥ—those whose intellect is directed toward God; tat-ātmānaḥ—those whose heart (mind and intellect) is solely absorbed in God; tat-niṣhṭhāḥ—those whose intellect has firm faith in God; tat-parāyaṇāḥ—those who strive after God as the supreme goal and refuge; gachchhanti—go; apunaḥ-āvṛittim—not returning; jñāna—by knowledge; nirdhūta—dispelled; kalmaṣhāḥ—sins\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"582b9a3a-a381-4ddd-9392-af400fe26b76"},{"id":"82447dbd-93af-4416-abdc-d893ee5f0ccb","type":"verses","target":{"id":"de9090f2-0adf-4ebd-9582-718b3e69b4be","title":null,"body":"The sage, who has controlled his sense-organs, mind, and intellect; whose chief aim is emancipation; and from whom desire, fear, and wrath have departed—he remains ever free.","translit_title":null,"body_translit":"sparśhān kṛitvā bahir bāhyānśh chakṣhuśh chaivāntare bhruvoḥ\nprāṇāpānau samau kṛitvā nāsābhyantara-chāriṇau\n yatendriya-mano-buddhir munir mokṣha-parāyaṇaḥ\nvigatechchhā-bhaya-krodho yaḥ sadā mukta eva saḥ\n","body_translit_meant":"sparśhān—contacts (through senses); kṛitvā—keeping; bahiḥ—outside; bāhyān—external; chakṣhuḥ—eyes; cha—and; eva—certainly; antare—between; bhruvoḥ—of the eyebrows; prāṇa-apānau—the outgoing and incoming breaths; samau—equal; kṛitvā—keeping; nāsa-abhyantara—within the nostrils; chāriṇau—moving; \n yata—controlled; indriya—senses; manaḥ—mind; buddhiḥ—intellect; muniḥ—the sage; mokṣha—liberation; parāyaṇaḥ—dedicated; vigata—free; ichchhā—desires; bhaya—fear; krodhaḥ—anger; yaḥ—who; sadā—always; muktaḥ—liberated; eva—certainly; saḥ—that person\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"9af30add-37cd-4d48-89e5-1333fd0d6c58"},{"id":"2aea57e4-34fe-4018-b6cb-7a49eec2f190","type":"verses","target":{"id":"3f49f119-d87e-4cb9-89ce-5cd4e190e214","title":null,"body":"The Self is the friend of that Self by which the Self has been verily subdued; but in the case of a person with an unsubdued Self, the Self alone would abide in enmity like an enemy.","translit_title":null,"body_translit":"bandhur ātmātmanas tasya yenātmaivātmanā jitaḥ\nanātmanas tu śhatrutve vartetātmaiva śhatru-vat\n","body_translit_meant":"bandhuḥ—friend; ātmā—the mind; ātmanaḥ—for the person; tasya—of him; yena—by whom; ātmā—the mind; eva—certainly; ātmanā—for the person; jitaḥ—conquered; anātmanaḥ—of those with unconquered mind; tu—but; śhatrutve—for an enemy; varteta—remains; ātmā—the mind; eva—as; śhatru-vat—like an enemy\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"26ea3724-f3e2-4764-9a4e-9f024857f944"},{"id":"7c947ce8-a87f-4060-94f2-b6b09ffbc54a","type":"verses","target":{"id":"9f026918-616f-449c-899a-8711fb0b797a","title":null,"body":"Yoga is neither for him who eats too much, nor for him who totally abstains from eating, nor for him who is prone to sleeping too much, nor for him who keeps awake too much.","translit_title":null,"body_translit":"nātyaśhnatastu yogo ’sti na chaikāntam anaśhnataḥ\nna chāti-svapna-śhīlasya jāgrato naiva chārjuna\n","body_translit_meant":"na—not; ati—too much; aśhnataḥ—of one who eats; tu—however; yogaḥ—Yog; asti—there is; na—not; cha—and; ekāntam—at all; anaśhnataḥ—abstaining from eating; na—not; cha—and; ati—too much; svapna-śhīlasya—of one who sleeps; jāgrataḥ—of one who does not sleep enough; na—not; eva—certainly; cha—and; arjuna—Arjun\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"db53a971-fcee-4b91-83eb-d8cfe7f60268"},{"id":"5cda959f-b653-4f99-898a-05121ca3025a","type":"verses","target":{"id":"227099b8-524e-486b-b3d2-03248d31ee04","title":null,"body":"By whatever things the shaky and unsteady mind strays, let him restrain it from those things and bring it back under the control of the Self alone.","translit_title":null,"body_translit":"yato yato niśhcharati manaśh chañchalam asthiram\ntatas tato niyamyaitad ātmanyeva vaśhaṁ nayet\n","body_translit_meant":"yataḥ yataḥ—whenever and wherever; niśhcharati—wanders; manaḥ—the mind; chañchalam—restless; asthiram—unsteady; tataḥ tataḥ—from there; niyamya—having restrained; etat—this; ātmani—on God; eva—certainly; vaśham—control; nayet—should bring\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"f71ce6fa-c0bd-4602-bec2-a52f4cfabdea"},{"id":"d31d4c9d-3f84-4aa6-9ac0-02faa4bf31a8","type":"verses","target":{"id":"571ffca1-67ff-410d-9d11-708cc54ee00c","title":null,"body":"My belief is that attaining Yoga is difficult for a person with an uncontrolled mind; but it is possible to attain by proper means with a subdued self.","translit_title":null,"body_translit":"asaṅyatātmanā yogo duṣhprāpa iti me matiḥ\nvaśhyātmanā tu yatatā śhakyo ’vāptum upāyataḥ\n","body_translit_meant":"asanyata-ātmanā—one whose mind is unbridled; yogaḥ—Yog; duṣhprāpaḥ—difficult to attain; iti—thus; me—my; matiḥ—opinion; vaśhya-ātmanā—by one whose mind is controlled; tu—but; yatatā—one who strives; śhakyaḥ—possible; avāptum—to achieve; upāyataḥ—by right means\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"8aaaf597-a1c0-44ce-809a-11e1d5692b63"},{"id":"a477baa6-00d1-480d-b7ca-3e25831fa1f9","type":"verses","target":{"id":"b7bc4560-b45f-4327-8a63-035927f3385a","title":null,"body":"He, whose pleasure, delight, and light are all within—O son of Prtha!—he attains the supreme Yoga, becoming the Brahman himself.","translit_title":null,"body_translit":"śhaknotīhaiva yaḥ soḍhuṁ prāk śharīra-vimokṣhaṇāt\nkāma-krodhodbhavaṁ vegaṁ sa yuktaḥ sa sukhī naraḥ\n\n","body_translit_meant":"śhaknoti—is able; iha eva—in the present body; yaḥ—who; soḍhum—to withstand; prāk—before; śharīra—the body; vimokṣhaṇāt—giving up; kāma—desire; krodha—anger; udbhavam—generated from; vegam—forces; saḥ—that person; yuktaḥ—yogi; saḥ—that person; sukhī—happy; naraḥ—person\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"eb4681af-f393-4d6b-a7e1-fc3199b5605e"},{"id":"281b2f2e-b96c-49f2-9e74-fb5db4f7f66b","type":"verses","target":{"id":"a4a0aeff-295d-41b5-83f6-444e20bb0125","title":null,"body":"What the learned call renunciation, O son of Pandu, know that to be the same as the Yoga. For, without renouncing intention for fruit, one does not become a man of Yoga.","translit_title":null,"body_translit":"yaṁ sannyāsam iti prāhur yogaṁ taṁ viddhi pāṇḍava\nna hyasannyasta-saṅkalpo yogī bhavati kaśhchana\n","body_translit_meant":"yam—what; sanyāsam—renunciation; iti—thus; prāhuḥ—they say; yogam—yog; tam—that; viddhi—know; pāṇḍava—Arjun, the son of Pandu; na—not; hi—certainly; asannyasta—without giving up; saṅkalpaḥ—desire; yogī—a yogi; bhavati—becomes; kaśhchana—anyone\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"657a682e-efd6-48bb-a96f-9a04053e9f27"},{"id":"51b6e318-8a65-4337-8aeb-0f6b93075cef","type":"verses","target":{"id":"1370ff13-0fcf-4129-8658-4f8c1ae63844","title":null,"body":"Sitting there on the seat and making the mind single-pointed, let him, with the activities of his mind and senses subdued, practice Yoga for self-purification.","translit_title":null,"body_translit":"tatraikāgraṁ manaḥ kṛitvā yata-chittendriya-kriyaḥ\nupaviśhyāsane yuñjyād yogam ātma-viśhuddhaye\n","body_translit_meant":"tatra—there; eka-agram—one-pointed; manaḥ—mind; kṛitvā—having made; yata-chitta—controlling the mind; indriya—senses; kriyaḥ—activities; upaviśhya—being seated; āsane—on the seat; yuñjyāt yogam—should strive to practice yog; ātma viśhuddhaye—for purification of the mind; \n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"bec2e641-e571-4268-a870-0cfb7e5ad2d3"},{"id":"d697258c-d1f6-4a09-a53c-e2c2ea093c9f","type":"verses","target":{"id":"4a3b72a7-a4a2-41d1-99de-d303aa686903","title":null,"body":"And having attained it, he does not think of any other gain as superior to that; being established in it, he is not shaken much by misery, however powerful it may be.","translit_title":null,"body_translit":"yaṁ labdhvā chāparaṁ lābhaṁ manyate nādhikaṁ tataḥ\nyasmin sthito na duḥkhena guruṇāpi vichālyate\n","body_translit_meant":"yam—which; labdhvā—having gained; cha—and; aparam—any other; lābham—gain; manyate—considers; na—not; adhikam—greater; tataḥ—than that; yasmin—in which; sthitaḥ—being situated; na—never; duḥkhena—by sorrow; guruṇā—(by) the greatest; api—even; vichālyate—is shaken\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"fa21237a-5903-4d09-916f-c57eae10392a"},{"id":"ee2c0262-2a9f-4b14-82bf-e67d26c8d757","type":"verses","target":{"id":"2c5b873c-c645-43f9-af3d-85610b13c632","title":null,"body":"Whoever finds pleasure or pain equally in all, as if it were in themselves—that person is considered to be a great man of Yoga, O Arjuna!","translit_title":null,"body_translit":"ātmaupamyena sarvatra samaṁ paśhyati yo ’rjuna\nsukhaṁ vā yadi vā duḥkhaṁ sa yogī paramo mataḥ\n","body_translit_meant":"ātma-aupamyena—similar to oneself; sarvatra—everywhere; samam—equally; paśhyati—see; yaḥ—who; arjuna—Arjun; sukham—joy; vā—or; yadi—if; vā—or; duḥkham—sorrow; saḥ—such; yogī—a yogi; paramaḥ—highest; mataḥ—is considered\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"e9a79307-7a8d-45d9-b3d2-48cd5eb6aa0e"},{"id":"8853c76d-9f0b-4e88-a9d2-4946f311bdf5","type":"verses","target":{"id":"78e79575-0875-4fca-a34d-80353bdfad99","title":null,"body":"Or, he is born nowhere else but in the family of the intelligent men of Yoga; for, this birth is more difficult to obtain in the world.","translit_title":null,"body_translit":"atha vā yoginām eva kule bhavati dhīmatām\netad dhi durlabhataraṁ loke janma yad īdṛiśham\n","body_translit_meant":"atha vā—else; yoginām—of those endowed with divine wisdom; eva—certainly; kule—in the family; bhavati—take birth; dhī-matām—of the wise; etat—this; hi—certainly; durlabha-taram—very rare; loke—in this world; janma—birth; yat—which; īdṛiśham—like this\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"277cc25b-93df-4ac1-a87b-069e76f7b7d5"},{"id":"5504798f-bef1-4b28-bb1e-c2d9075559a3","type":"verses","target":{"id":"c3688c5d-f59e-46cf-b890-efbb9554320b","title":null,"body":"Among thousands of men, perhaps one makes an effort for the determined knowledge. Among those, even though they make an effort, perhaps one realizes Me correctly with the determined knowledge.","translit_title":null,"body_translit":"manuṣhyāṇāṁ sahasreṣhu kaśhchid yatati siddhaye\nyatatām api siddhānāṁ kaśhchin māṁ vetti tattvataḥ\n","body_translit_meant":"manuṣhyāṇām—of men; sahasreṣhu—out of many thousands; kaśhchit—someone; yatati—strives; siddhaye—for perfection; yatatām—of those who strive; api—even; siddhānām—of those who have achieved perfection; kaśhchit—someone; mām—me; vetti—knows; tattvataḥ—in truth\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"482868e8-a3b1-4b1c-9311-a03159248133"},{"id":"3f222453-974d-4dba-8e51-3a7255354dc7","type":"verses","target":{"id":"3fcdf556-95ac-4191-8c97-5e6830f5b025","title":null,"body":"O son of Kunti! I am the taste in waters, the light in the moon and sun, the best hymn (OM) in the entire Vedas, the sound that exists in the ether, and the manly vigor in men.","translit_title":null,"body_translit":"raso ’ham apsu kaunteya prabhāsmi śhaśhi-sūryayoḥ\npraṇavaḥ sarva-vedeṣhu śhabdaḥ khe pauruṣhaṁ nṛiṣhu\n","body_translit_meant":"rasaḥ—taste; aham—I; apsu—in water; kaunteya—Arjun, the son of Kunti; prabhā—the radiance; asmi—I am; śhaśhi-sūryayoḥ—of the moon and the sun; praṇavaḥ—the sacred syllable Om; sarva—in all; vedeṣhu—Vedas; śhabdaḥ—sound; khe—in ether; pauruṣham—ability; nṛiṣhu—in humans\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"2bb701a5-3944-4196-a0e6-3ee8b546cbff"},{"id":"8590ef58-bab9-44ba-a5bd-fa1a37059035","type":"verses","target":{"id":"68e3d40f-edd1-4e8a-8332-b6206bc06b1a","title":null,"body":"All these are indeed noble persons. But the man of wisdom is considered as the very Soul of Mine. For, with his self (mind) that has mastered the Yoga, he has resorted to Me alone as his most supreme goal.","translit_title":null,"body_translit":"udārāḥ sarva evaite jñānī tvātmaiva me matam\nāsthitaḥ sa hi yuktātmā mām evānuttamāṁ gatim\n","body_translit_meant":"udārāḥ—noble; sarve—all; eva—indeed; ete—these; jñānī—those in knowledge; tu—but; ātmā eva—my very self; me—my; matam—opinion; āsthitaḥ—situated; saḥ—he; hi—certainly; yukta-ātmā—those who are united; mām—in me; eva—certainly; anuttamām—the supreme; gatim—goal\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"65f959e7-bf6b-44b1-9e09-3f8196a1f30a"},{"id":"dddb8080-0c0d-469f-a768-14b1ba7a135f","type":"verses","target":{"id":"96fa4831-f6c0-4feb-a8b7-087503392178","title":null,"body":"The seers, whose doubts have decayed; by whom dualities have been cut off; whose minds are controlled; and who delight in the welfare of all; they attain the Brahman, the Transcendent One.","translit_title":null,"body_translit":"yo 'ntaḥ-sukho 'ntar-ārāmas tathāntar-jyotir eva yaḥ\nsa yogī brahma-nirvāṇaṁ brahma-bhūto 'dhigachchhati\n\n","body_translit_meant":"yaḥ—who; antaḥ-sukhaḥ—happy within the self; antaḥ-ārāmaḥ—enjoying within the self; tathā; antaḥ-jyotiḥ—illumined by the inner light; eva—certainly; yaḥ—who; saḥ; yogī—yogi; brahma-nirvāṇam—liberation from material existence; brahmabhūtaḥ— united with the Lord; adhigachchhati—attains\n\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"a3613543-6d57-4597-871e-7d1ddaf02726"},{"id":"e01c4ba3-33ae-43c2-b469-c9a33663285f","type":"verses","target":{"id":"d098075b-ce7a-4066-986e-871f9b900aa8","title":null,"body":"For a sage, who is desirous of mounting upon the Yoga, action is said to be the cause; for the same sage, when he has mounted upon the Yoga, stillness is said to be the cause.","translit_title":null,"body_translit":"ārurukṣhor muner yogaṁ karma kāraṇam uchyate\nyogārūḍhasya tasyaiva śhamaḥ kāraṇam uchyate\n","body_translit_meant":"ārurukṣhoḥ—a beginner; muneḥ—of a sage; yogam—Yog; karma—working without attachment; kāraṇam—the cause; uchyate—is said; yoga ārūḍhasya—of those who are elevated in Yog; tasya—their; eva—certainly; śhamaḥ—meditation; kāraṇam—the cause; uchyate—is said\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"ec4c44be-65e9-4df9-9ffc-97a7af20dbf9"},{"id":"157eb97c-d5a6-477f-8869-44034d33bd2d","type":"verses","target":{"id":"97b04c50-b94a-4dd2-a8b3-a44c0d47962e","title":null,"body":"Holding the body, head, and neck erect and motionless; remaining firm; looking properly at one's own nose-tip; and not looking in different directions.","translit_title":null,"body_translit":"samaṁ kāya-śhiro-grīvaṁ dhārayann achalaṁ sthiraḥ\nsamprekṣhya nāsikāgraṁ svaṁ diśhaśh chānavalokayan\n","body_translit_meant":"samam—straight; kāya—body; śhiraḥ—head; grīvam—neck; dhārayan—holding; achalam—unmoving; sthiraḥ—still; samprekṣhya—gazing; nāsika-agram—at the tip of the nose; svam—own; diśhaḥ—directions; cha—and; anavalokayan—not looking\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"8bb9bf96-0ee9-4346-8585-ed090ec19f80"},{"id":"17c97f67-b658-4a94-887f-36359dcf8362","type":"verses","target":{"id":"13e41c8d-6eab-4095-9950-c27a0168a74b","title":null,"body":"That he would realize to be the cause for his cessation of contact with misery and to be the one made known by Yoga. With determination, that is to be yoked in Yoga by a person of undepressed mind (or of the depressed mind).","translit_title":null,"body_translit":"taṁ vidyād duḥkha-sanyoga-viyogaṁ yogasaṅjñitam\nsa niśhchayena yoktavyo yogo ’nirviṇṇa-chetasā\n","body_translit_meant":"tam—that; vidyāt—you should know; duḥkha-sanyoga-viyogam—state of severance from union with misery; yoga-saṁjñitam—is known as yog; saḥ—that; niśhchayena—resolutely; yoktavyaḥ—should be practiced; yogaḥ—yog; anirviṇṇa-chetasā—with an undeviating mind\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"2be916b2-e07a-4bbd-93ba-c461daddf57d"},{"id":"dc55e547-e752-45d9-9e32-93b95633c76f","type":"verses","target":{"id":"b9208429-1bbd-461e-853d-62d041a6f33a","title":null,"body":"Arjuna said, \"O slayer of Mandhu, this Yoga of equanimity which You have spoken of, I do not find a proper foundation for it due to the unsteadiness of the mind.\"","translit_title":null,"body_translit":"arjuna uvācha\nyo ’yaṁ yogas tvayā proktaḥ sāmyena madhusūdana\netasyāhaṁ na paśhyāmi chañchalatvāt sthitiṁ sthirām\n","body_translit_meant":"arjunaḥ uvācha—Arjun said; yaḥ—which; ayam—this; yogaḥ—system of Yog; tvayā—by you; proktaḥ—described; sāmyena—by equanimity; madhu-sūdana—Shree Krishna, the killer of the demon named Madhu; etasya—of this; aham—I; na—do not; paśhyāmi—see; chañchalatvāt—due to restlessness; sthitim—situation; sthirām—steady\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"976684a1-7aba-4dc6-9993-3ced22ef9a90"},{"id":"c4a814da-c459-4161-b651-e56a9c75a77c","type":"verses","target":{"id":"5f4921e7-9a0e-412d-820a-fa77c457bb24","title":null,"body":"There, in that life, he regains the link of mentality transmitted from his former body. Consequently, once again he strives for full success, O rejoicer of the Kurus!","translit_title":null,"body_translit":"tatra taṁ buddhi-sanyogaṁ labhate paurva-dehikam\nyatate cha tato bhūyaḥ sansiddhau kuru-nandana\n","body_translit_meant":"tatra—there; tam—that; buddhi-sanyogam—reawaken their wisdom; labhate—obtains; paurva-dehikam—from the previous lives; yatate—strives; cha—and; tataḥ—thereafter; bhūyaḥ—again; sansiddhau—for perfection; kuru-nandana—Arjun, descendant of the Kurus\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"98b79211-10e1-488a-9a02-517f2a2bde91"},{"id":"d200921a-3635-4fe8-885d-1431a48c0984","type":"verses","target":{"id":"5a5d0e9f-e082-4b44-9c07-135e184b0137","title":null,"body":"My nature is divided into eight parts: Earth, Water, Fire, Wind, Ether, Mind, Intellect, and Ego.","translit_title":null,"body_translit":"bhūmir-āpo ’nalo vāyuḥ khaṁ mano buddhir eva cha\nahankāra itīyaṁ me bhinnā prakṛitir aṣhṭadhā\n","body_translit_meant":"bhūmiḥ—earth; āpaḥ—water; analaḥ—fire; vāyuḥ—air; kham—space; manaḥ—mind; buddhiḥ—intellect; eva—certainly; cha—and; ahankāraḥ—ego; iti—thus; iyam—all these; me—my; bhinnā—divisions; prakṛitiḥ—material energy; aṣhṭadhā—eightfold\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"50d5639f-2383-4609-b6be-e38c114d4ea1"},{"id":"19072572-c431-4f9a-8eba-534c12f423c1","type":"verses","target":{"id":"cf343db1-694d-4819-8a46-c5e43e3fc867","title":null,"body":"I am the pure scent in the earth; I am also the radiance in the sun; I am the life in all beings and the austerity in the ascetics.","translit_title":null,"body_translit":"puṇyo gandhaḥ pṛithivyāṁ cha tejaśh chāsmi vibhāvasau\njīvanaṁ sarva-bhūteṣhu tapaśh chāsmi tapasviṣhu\n","body_translit_meant":"puṇyaḥ—pure; gandhaḥ—fragrance; pṛithivyām—of the earth; cha—and; tejaḥ—brilliance; cha—and; asmi—I am; vibhāvasau—in the fire; jīvanam—the life-force; sarva—in all; bhūteṣhu—beings; tapaḥ—penance; cha—and; asmi—I am; tapasviṣhu—of the ascetics\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"530b1c97-9309-41fb-a1ad-fdbf9f5e2675"},{"id":"3cbc8b0d-6320-41d3-96b6-963ba34c8f27","type":"verses","target":{"id":"d6828054-7dd2-4d25-b45a-a54a880c76d3","title":null,"body":"At the end of many births, one attains Me with the conviction that 'All is Vasudeva'- that noble soul is very difficult to attain.","translit_title":null,"body_translit":"bahūnāṁ janmanām ante jñānavān māṁ prapadyate\nvāsudevaḥ sarvam iti sa mahātmā su-durlabhaḥ\n","body_translit_meant":"bahūnām—many; janmanām—births; ante—after; jñāna-vān—one who is endowed with knowledge; mām—unto me; prapadyate—surrenders; vāsudevaḥ—Shree Krishna, the son of Vasudev; sarvam—all; iti—that; saḥ—that; mahā-ātmā—great soul; su-durlabhaḥ—very rare\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"d0977ed7-9c15-4bbd-b164-8107ad4031b8"},{"id":"e9ffb4e2-68d6-4f89-ab49-7e5fc1f4b74d","type":"verses","target":{"id":"8414041a-5b29-4949-b10f-1cee7c086398","title":null,"body":"Thus, yoking the self always, the man of Yoga, with a subdued mind, easily attains complete union, that is, the Brahman.","translit_title":null,"body_translit":"yuñjann evaṁ sadātmānaṁ yogī vigata-kalmaṣhaḥ\nsukhena brahma-sansparśham atyantaṁ sukham aśhnute\n","body_translit_meant":"yuñjan—uniting (the self with God); evam—thus; sadā—always; ātmānam—the self; yogī—a yogi; vigata—freed from; kalmaṣhaḥ—sins; sukhena—easily; brahma-sansparśham—constantly in touch with the Supreme; atyantam—the highest; sukham—bliss; aśhnute—attains\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"ad4ef8e9-f824-42e6-91c3-c9472b175bf0"},{"id":"016f00b6-c6f8-4d09-88fa-d4940bb112e7","type":"verses","target":{"id":"9bd750b8-8d1b-456e-99c4-0de9be956127","title":null,"body":"Does he, fallen from both, get lost like a broken cloud? Or, O mighty-armed one! Having no support, does he meet total destruction?","translit_title":null,"body_translit":"kachchin nobhaya-vibhraṣhṭaśh chhinnābhram iva naśhyati\napratiṣhṭho mahā-bāho vimūḍho brahmaṇaḥ pathi\n","body_translit_meant":"kachchit—whether; na—not; ubhaya—both; vibhraṣhṭaḥ—deviated from; chhinna—broken; abhram—cloud; iva—like; naśhyati—perishes; apratiṣhṭhaḥ—without any support; mahā-bāho—mighty-armed Krishna; vimūḍhaḥ—bewildered; brahmaṇaḥ—of God-realization; pathi—one on the path\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"1d334ef5-ff7a-495b-9de8-2f0ae554647a"},{"id":"9b0b714a-db80-41ae-bf1e-77d44762ad02","type":"verses","target":{"id":"f2ec5057-e27a-452d-b978-27813280f51f","title":null,"body":"This is My divine play, composed of the strands of illusion, and it is hard to cross over. Those who take refuge in Me alone, they cross over the illusion.","translit_title":null,"body_translit":"daivī hyeṣhā guṇa-mayī mama māyā duratyayā\nmām eva ye prapadyante māyām etāṁ taranti te\n","body_translit_meant":"daivī—divine; hi—certainly; eṣhā—this; guṇa-mayī—consisting of the three modes of nature; mama—my; māyā—one of God’s energies. It that veils God’s true nature from souls who have not yet attained the eligibility for God-realization; duratyayā—very difficult to overcome; mām—unto me; eva—certainly; ye—who; prapadyante—surrender; māyām etām—this Maya; taranti—cross over; te—they\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"9ffd3b14-480f-4b0b-9a5e-1cc2af494021"},{"id":"affd2acf-545b-4532-a559-30fa553b13a6","type":"verses","target":{"id":"24cc3def-9ead-425c-a7b7-e9d5756eabae","title":null,"body":"Those of poor intellect are not aware of My higher, unchanging, and supreme nature; and thus, they consider Me, the Unmanifest, to be manifest.","translit_title":null,"body_translit":"avyaktaṁ vyaktim āpannaṁ manyante mām abuddhayaḥ\nparaṁ bhāvam ajānanto mamāvyayam anuttamam\n","body_translit_meant":"avyaktam—formless; vyaktim—possessing a personality; āpannam—to have assumed; manyante—think; mām—me; abuddhayaḥ—less intelligent; param—Supreme; bhāvam—nature; ajānantaḥ—not understanding; mama—my; avyayam—imperishable; anuttamam—excellent\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"763a579d-348a-4a80-b192-4877f5bcdd17"},{"id":"2a77a345-ca8e-4785-ad70-74bbb6d32afd","type":"verses","target":{"id":"860e6bac-4b3d-455d-a1e7-eb5286041029","title":null,"body":"Who is the Lord of Sacrifices, and how? Who is in this body? O slayer of Madhu, how can the self-controlled realize You at the time of their journey (i.e., death)?","translit_title":null,"body_translit":"adhiyajñaḥ kathaṁ ko ’tra dehe ’smin madhusūdana\nprayāṇa-kāle cha kathaṁ jñeyo ’si niyatātmabhiḥ\n","body_translit_meant":"adhiyajñaḥ—the Lord all sacrificial performances; katham—how; kaḥ—who; atra—here; dehe—in body; asmin—this; madhusūdana—Shree Krishna, the killer of the demon named Madhu; prayāṇa-kāle—at the time of death; cha—and; katham—how; jñeyaḥ—to be known; asi—are (you); niyata-ātmabhiḥ—by those of steadfast mind\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"bfd92f8e-416c-4ef4-b5d2-fd56a4d85d34"},{"id":"e2c0145f-6802-4db8-9404-48fed0e042af","type":"verses","target":{"id":"efe7b348-f440-42e0-bf77-38c56074497b","title":null,"body":"Properly controlling all the gates of the body; restraining the mind firmly in the heat; fixing one's own prana in the head; taking refuge in the firmness of Yoga.","translit_title":null,"body_translit":"sarva-dvārāṇi sanyamya mano hṛidi nirudhya cha\nmūrdhnyādhāyātmanaḥ prāṇam āsthito yoga-dhāraṇām\n","body_translit_meant":"sarva-dvārāṇi—all gates; sanyamya—restraining; manaḥ—the mind; hṛidi—in the heart region; nirudhya—confining; cha—and; mūrdhni—in the head; ādhāya—establish; ātmanaḥ—of the self; prāṇam—the life breath; āsthitaḥ—situated (in); yoga-dhāraṇām—the yogic concentration\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"0347fe1d-a600-4cdf-bf2a-f732fb508311"},{"id":"112c8cb2-0bde-4b73-9f99-854432a73fb1","type":"verses","target":{"id":"0683be27-c792-427d-ab0d-a3ab96e1d45b","title":null,"body":"O son of Prtha, the Supreme Soul is attainable through devotion that admits no other things; having attained it, the men of Yoga do not get birth again; within it exist the beings, and everything is well established in it, O Arjuna!","translit_title":null,"body_translit":"puruṣhaḥ sa paraḥ pārtha bhaktyā labhyas tvananyayā\nyasyāntaḥ-sthāni bhūtāni yena sarvam idaṁ tatam\n","body_translit_meant":"puruṣhaḥ—the Supreme Divine Personality; saḥ—he; paraḥ—greatest; pārtha—Arjun, the son of Pritha; bhaktyā—through devotion; labhyaḥ—is attainable; tu—indeed; ananyayā—without another; yasya—of whom; antaḥ-sthāni—situated within; bhūtāni—beings; yena—by whom; sarvam—all; idam—this; tatam—is pervaded\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"00a4718d-b576-4834-89c1-5977ec78580b"},{"id":"5a8b67a5-ac6b-4b10-a2bc-81ea951fbcb9","type":"verses","target":{"id":"b1b19fad-c8f1-4e9d-8065-913e3ecb1a5e","title":null,"body":"Just as the mighty wind exists in the ether, always moving therein everywhere, in the same manner all beings exist in Me. Be sure of it.","translit_title":null,"body_translit":"yathākāśha-sthito nityaṁ vāyuḥ sarvatra-go mahān\ntathā sarvāṇi bhūtāni mat-sthānītyupadhāraya\n","body_translit_meant":"yathā—as; ākāśha-sthitaḥ—rests in the sky; nityam—always; vāyuḥ—the wind; sarvatra-gaḥ—blowing everywhere; mahān—mighty; tathā—likewise; sarvāṇi bhūtāni—all living beings; mat-sthāni—rest in me; iti—thus; upadhāraya—know\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"159aee8a-bea3-418f-ab44-8302872cb87f"},{"id":"c9be77b5-fc23-4704-b97c-652b1f37e882","type":"verses","target":{"id":"685b6d80-2cf2-4298-b2c2-e0548a1e0734","title":null,"body":"I am determination; I am sacrifice; I am Svadha; I am the juice of the herb; I am the Vedic hymn; I am also the clarified butter; I am the sacrificial fire; and I am the act of offering.","translit_title":null,"body_translit":"ahaṁ kratur ahaṁ yajñaḥ svadhāham aham auṣhadham\nmantro ’ham aham evājyam aham agnir ahaṁ hutam\n","body_translit_meant":"aham—I; kratuḥ—Vedic ritual; aham—I; yajñaḥ—sacrifice; svadhā—oblation; aham—I; aham—I; auṣhadham—medicinal herb; mantraḥ—Vedic mantra; aham—I; aham—I; eva—also; ājyam—clarified butter; aham—I; agniḥ—fire; aham—I; hutam—the act offering;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"7dca6abe-d67b-44e1-8ba9-5d0e1f7364c9"},{"id":"ea71188c-3a8a-449d-9e62-75fe4a8fd785","type":"verses","target":{"id":"7d63e287-e3e0-4ded-b1b4-35d73195be06","title":null,"body":"Arjuna said, \"A person who has faith and is desirous of reaching the path of the good, but whose mind has been severed from Yoga—to which goal does he go, having failed to attain success in Yoga? O Krsna!\"","translit_title":null,"body_translit":"arjuna uvācha\nayatiḥ śhraddhayopeto yogāch chalita-mānasaḥ\naprāpya yoga-sansiddhiṁ kāṅ gatiṁ kṛiṣhṇa gachchhati\n","body_translit_meant":"arjunaḥ uvācha—Arjun said; ayatiḥ—lax; śhraddhayā—with faith; upetaḥ—possessed; yogāt—from Yog; chalita-mānasaḥ—whose mind becomes deviated; aprāpya—failing to attain; yoga-sansiddhim—the highest perfection in yog; kām—which; gatim—destination; kṛiṣhṇa—Shree Krishna; gachchhati—goes\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"7f8da204-0f83-4977-94f8-698fa457396c"},{"id":"9dec9ccb-5ce0-4b8c-8f20-d89ba93460b7","type":"verses","target":{"id":"d52a1116-57d6-45f2-8e81-de56244e85d8","title":null,"body":"He who has faith and serves Me with his inner self devoted to Me, is considered by Me to be the best of all yogis.","translit_title":null,"body_translit":"yoginām api sarveṣhāṁ mad-gatenāntar-ātmanā\nśhraddhāvān bhajate yo māṁ sa me yuktatamo mataḥ\n","body_translit_meant":"yoginām—of all yogis; api—however; sarveṣhām—all types of; mat-gatena—absorbed in me (God); antaḥ—inner; ātmanā—with the mind; śhraddhā-vān—with great faith; bhajate—engage in devotion; yaḥ—who; mām—to me; saḥ—he; me—by me; yukta-tamaḥ—the highest yogi; mataḥ—is considered\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"affcc29a-fad0-4f2f-9835-4ed4b2f37aee"},{"id":"67c0cf57-abf5-4709-9793-8dd477c88c01","type":"verses","target":{"id":"fca35166-b205-48cc-ba96-6e2d6d80b3a0","title":null,"body":"Being deluded by these three strands of nature, this entire world does not recognize Me, who am eternal and transcend these strands.","translit_title":null,"body_translit":"tribhir guṇa-mayair bhāvair ebhiḥ sarvam idaṁ jagat\nmohitaṁ nābhijānāti māmebhyaḥ param avyayam\n","body_translit_meant":"tribhiḥ—by three; guṇa-mayaiḥ—consisting of the modes of material nature; bhāvaiḥ—states; ebhiḥ—all these; sarvam—whole; idam—this; jagat—universe; mohitam—deluded; na—not; abhijānāti—know; mām—me; ebhyaḥ—these; param—the supreme; avyayam—imperishable\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"eae970a0-bdb2-4597-b790-59af5e853c3b"},{"id":"0f0cad0a-cc5c-4d26-8fd7-27b8068b12d8","type":"verses","target":{"id":"96fe2a28-8e5a-4b95-9ec1-09a50da0ed66","title":null,"body":"But the fruit of those of poor intellect is finite; those who perform sacrifices aiming at the gods go to the gods, and My devotees come to Me.","translit_title":null,"body_translit":"antavat tu phalaṁ teṣhāṁ tad bhavatyalpa-medhasām\ndevān deva-yajo yānti mad-bhaktā yānti mām api\n","body_translit_meant":"anta-vat—perishable; tu—but; phalam—fruit; teṣhām—by them; tat—that; bhavati—is; alpa-medhasām—people of small understanding; devān—to the celestial gods; deva-yajaḥ—the worshipers of the celestial gods; yānti—go; mat—my; bhaktāḥ—devotees; yānti—go; mām—to me; api—whereas\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"c098b09a-6ec7-4ba1-aca7-84aa4a0e49ca"},{"id":"4cf8d600-dc94-461a-8837-94728cc528b8","type":"verses","target":{"id":"7fc0356d-5c3f-4b13-b87b-12c7b108303c","title":null,"body":"Arjuna said, \"What is Brahman? What is known as the Lord of the Self (Adhyatma)? What is action? O Best of Persons, what is said to be the Lord of material things (Adhibhuta)? What is called the Lord of divinities (Adhidaiva)?\"","translit_title":null,"body_translit":"arjuna uvācha\nkiṁ tad brahma kim adhyātmaṁ kiṁ karma puruṣhottama\nadhibhūtaṁ cha kiṁ proktam adhidaivaṁ kim uchyate\n","body_translit_meant":"arjunaḥ uvācha—Arjun said; kim—what; tat—that; brahma—Brahman; kim—what; adhyātmam—the individual soul; kim—what; karma—the principle of karma; puruṣha-uttama—Shree Krishna, the Supreme Divine Personality; adhibhūtam—the material manifestation; cha—and; kim—what; proktam—is called; adhidaivam—the Lord of the celestial gods; kim—what; uchyate—is called; \n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"f62fc6b6-1deb-44af-9cc3-940b012566c9"},{"id":"51cbe86f-1bee-4568-8a46-8cac1dd714e6","type":"verses","target":{"id":"abcb3921-960f-4568-9e01-4ac5f07bd2f3","title":null,"body":"That Unchanging One which the Vedic knowers speak of; which the passion-free ascetics enter into, seeking which they practice celibacy (or spiritual life); that Goal together with the means [to reach it] I shall tell you.","translit_title":null,"body_translit":"yad akṣharaṁ veda-vido vadanti\nviśhanti yad yatayo vīta-rāgāḥ\nyad ichchhanto brahmacharyaṁ charanti\ntat te padaṁ saṅgraheṇa pravakṣhye\n","body_translit_meant":"yat—which; akṣharam—Imperishable; veda-vidaḥ—scholars of the Vedas; vadanti—describe; viśhanti—enter; yat—which; yatayaḥ—great ascetics; vīta-rāgāḥ—free from attachment; yat—which; ichchhantaḥ—desiring; brahmacharyam—celibacy; charanti—practice; tat—that; te—to you; padam—goal; saṅgraheṇa—briefly; pravakṣhye—I shall explain\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"c4ef651d-0090-4281-aee2-6592b4d27ecf"},{"id":"e301c85d-c0f2-4602-963f-12db2b7990d3","type":"verses","target":{"id":"e9348f57-552c-4707-9469-26b1712b977d","title":null,"body":"The scriptures speak of This as Unmanifest and Changeless, and declare This to be the highest Goal. Having attained it, people do not return; this is My highest abode.","translit_title":null,"body_translit":"avyakto ’kṣhara ityuktas tam āhuḥ paramāṁ gatim\nyaṁ prāpya na nivartante tad dhāma paramaṁ mama\n","body_translit_meant":"avyaktaḥ—unmanifest; akṣharaḥ—imperishable; iti—thus; uktaḥ—is said; tam—that; āhuḥ—is called; paramām—the supreme; gatim—destination; yam—which; prāpya—having reached; na—never; nivartante—come back; tat—that; dhāma—abode; paramam—the supreme; mama—my\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"c1962daf-210b-465d-8bb4-8411bd416b7d"},{"id":"c9643a7b-1a96-49b0-9bab-735de61ee306","type":"verses","target":{"id":"215db807-8efc-4769-97bd-a5e28c04dad1","title":null,"body":"O scorcher of foes! Those who have no faith in this Dharma do not attain Me and remain eternally in the cycle of mundane existence, fraught with death.","translit_title":null,"body_translit":"aśhraddadhānāḥ puruṣhā dharmasyāsya parantapa\naprāpya māṁ nivartante mṛityu-samsāra-vartmani\n","body_translit_meant":"aśhraddadhānāḥ—people without faith; puruṣhāḥ—(such) persons; dharmasya—of dharma; asya—this; parantapa—Arjun, conqueror the enemies; aprāpya—without attaining; mām—me; nivartante—come back; mṛityu—death; samsāra—material existence; vartmani—in the path\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"3e0254f8-54df-44af-84ed-2bba880fdae9"},{"id":"9b4f4841-fbac-4867-8357-ab287c1cf8ee","type":"verses","target":{"id":"85544bdc-6abf-4de8-8a6c-a8ec89c715b6","title":null,"body":"O son of Prtha! The great-souled men, however, taking hold of the divine nature and having nothing else in their minds, adore Me, viewing Me as the imperishable prime cause of beings.","translit_title":null,"body_translit":"mahātmānas tu māṁ pārtha daivīṁ prakṛitim āśhritāḥ\nbhajantyananya-manaso jñātvā bhūtādim avyayam\n","body_translit_meant":"mahā-ātmānaḥ—the great souls; tu—but; mām—me; pārtha—Arjun, the son of Pritha; daivīm prakṛitim—divine energy; āśhritāḥ—take shelter of; bhajanti—engage in devotion; ananya-manasaḥ—with mind fixed exclusively; jñātvā—knowing; bhūta—all creation; ādim—the origin; avyayam—imperishable\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"84066a40-6e9f-4439-be9f-c582981bdfff"},{"id":"13447b6d-0163-4c80-8189-6404d6f14c7d","type":"verses","target":{"id":"86d2810e-8002-49b2-86f4-a63596f9677c","title":null,"body":"Having attained the worlds of those who perform pious acts, and having resided there for years of eternity, the one who has fallen from Yoga is born again in the house of the pure and wealthy.","translit_title":null,"body_translit":"prāpya puṇya-kṛitāṁ lokān uṣhitvā śhāśhvatīḥ samāḥ\nśhuchīnāṁ śhrīmatāṁ gehe yoga-bhraṣhṭo’bhijāyate\n","body_translit_meant":"prāpya—attain; puṇya-kṛitām—of the virtuous; lokān—abodes; uṣhitvā—after dwelling; śhāśhvatīḥ—many; samāḥ—ages; śhuchīnām—of the pious; śhrī-matām—of the prosperous; gehe—in the house; yoga-bhraṣhṭaḥ—the unsuccessful yogis; abhijāyate—take birth; \n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"d61d1759-7549-43ac-8499-5d00b107e514"},{"id":"3bc32bb2-9c85-4ad1-8f33-f2eca610f37d","type":"verses","target":{"id":"60f0a01f-6916-4a5f-8ae6-64d8dc860836","title":null,"body":"I shall teach you this knowledge in full, together with action; for a person who has known this, there remains nothing else to be known in this world.","translit_title":null,"body_translit":"jñānaṁ te ’haṁ sa-vijñānam idaṁ vakṣhyāmyaśheṣhataḥ\nyaj jñātvā neha bhūyo ’nyaj jñātavyam-avaśhiṣhyate\n","body_translit_meant":"jñānam—knowledge; te—unto you; aham—I; sa—with; vijñānam—wisdom; idam—this; vakṣhyāmi—shall reveal; aśheṣhataḥ—in full; yat—which; jñātvā—having known; na—not; iha—in this world; bhūyaḥ—further; anyat—anything else; jñātavyam—to be known; avaśhiṣhyate—remains\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"3aeb9edf-83b9-4ff5-b083-a0a722420805"},{"id":"df76bf74-3726-45d3-b7c8-2239aeeddf5d","type":"verses","target":{"id":"c4c1803c-4d32-47cf-b931-6578e567004c","title":null,"body":"There is nothing beyond Me, O Dhananjaya; all this is strung on Me, just as pearls are strung on a string.","translit_title":null,"body_translit":"mattaḥ parataraṁ nānyat kiñchid asti dhanañjaya\nmayi sarvam idaṁ protaṁ sūtre maṇi-gaṇā iva\n","body_translit_meant":"mattaḥ—than me; para-taram—superior; na—not; anyat kiñchit—anything else; asti—there is; dhanañjaya—Arjun, conqueror of wealth; mayi—in me; sarvam—all; idam—which we see; protam—is strung; sūtre—on a thread; maṇi-gaṇāḥ—beads; iva—like\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"583111a7-2de1-4dae-95c4-662753f08785"},{"id":"21fb343a-cb45-4d9e-9b3b-aac9a086d0dc","type":"verses","target":{"id":"cf0caf43-005c-40c9-8014-41363ce225b2","title":null,"body":"Of them, the man of wisdom, being always attached to Me with single-pointed devotion, excels. For, I am dear to the man of wisdom above all personal gains, and he is dear to Me.","translit_title":null,"body_translit":"teṣhāṁ jñānī nitya-yukta eka-bhaktir viśhiṣhyate\npriyo hi jñānino ’tyartham ahaṁ sa cha mama priyaḥ\n","body_translit_meant":"teṣhām—amongst these; jñānī—those who are situated in knowledge; nitya-yuktaḥ—ever steadfast; eka—exclusively; bhaktiḥ—devotion; viśhiṣhyate—highest; priyaḥ—very dear; hi—certainly; jñāninaḥ—to the person in knowledge; atyartham—highly; aham—I; saḥ—he; cha—and; mama—to me; priyaḥ—dear\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"9be20205-3d62-4a22-a976-18efc54f4d21"},{"id":"eb0ab766-2bfa-4bc0-80b9-eaee6a55f5f7","type":"verses","target":{"id":"c04b8655-5e7c-44bc-9613-be0678c938d0","title":null,"body":"O descendant of Bharata, O scorcher of foes! At the time of creation, all beings become deluded due to the illusion of pairs of opposites arising from desire and hatred.","translit_title":null,"body_translit":"ichchhā-dveṣha-samutthena dvandva-mohena bhārata\nsarva-bhūtāni sammohaṁ sarge yānti parantapa\n","body_translit_meant":"ichchhā—desire; dveṣha—aversion; samutthena—arise from; dvandva—of duality; mohena—from the illusion; bhārata—Arjun, descendant of Bharat; sarva—all; bhūtāni—living beings; sammoham—into delusion; sarge—since birth; yānti—enter; parantapa—Arjun, conqueror of enemies\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"2fc4263e-8c29-4aef-92ef-86129b32de0b"},{"id":"7f5fb570-52d1-4663-9ae8-b078e5149157","type":"verses","target":{"id":"412afce4-4011-47f3-a13a-24e6a7e5b68b","title":null,"body":"Whosoever, at the time of death, remembering Me alone, sets forth, abandoning their body behind, they attain My being. There is no doubt about it.","translit_title":null,"body_translit":"anta-kāle cha mām eva smaran muktvā kalevaram\nyaḥ prayāti sa mad-bhāvaṁ yāti nāstyatra sanśhayaḥ\n","body_translit_meant":"anta-kāle—at the time of death; cha—and; mām—me; eva—alone; smaran—remembering; muktvā—relinquish; kalevaram—the body; yaḥ—who; prayāti—goes; saḥ—he; mat-bhāvam—Godlike nature; yāti—achieves; na—no; asti—there is; atra—here; sanśhayaḥ—doubt\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"8f69f498-e00b-4525-b608-e2f3be57ec04"},{"id":"037beeea-de47-43a3-a4c9-ebbb4032df49","type":"verses","target":{"id":"461eba84-858e-4747-a15d-fe184ffa0001","title":null,"body":"Having attained Me, the men of great soul who have achieved the supreme perfection do not get the transient birth, a storehouse of all troubles.","translit_title":null,"body_translit":"mām upetya punar janma duḥkhālayam aśhāśhvatam\nnāpnuvanti mahātmānaḥ sansiddhiṁ paramāṁ gatāḥ\n","body_translit_meant":"mām—me; upetya—having attained; punaḥ—again; janma—birth; duḥkha-ālayam—place full of miseries; aśhāśhvatam—temporary; na—never; āpnuvanti—attain; mahā-ātmānaḥ—the great souls; sansiddhim—perfection; paramām—highest; gatāḥ—having achieved\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"b76a21c8-b63f-4bfc-bd92-759689feb343"},{"id":"1c525737-8e8d-49e3-9c99-195dd55c128f","type":"verses","target":{"id":"e9b7a0ad-4026-41a8-a242-0b5745bbee27","title":null,"body":"The southern course of the sun, consisting of six months, is smoke, night, and darkness. Departing in it, the yogi attains the light of the moon and returns.","translit_title":null,"body_translit":"dhūmo rātris tathā kṛiṣhṇaḥ ṣhaṇ-māsā dakṣhiṇāyanam\ntatra chāndramasaṁ jyotir yogī prāpya nivartate\n","body_translit_meant":"dhūmaḥ—smoke; rātriḥ—night; tathā—and; kṛiṣhṇaḥ—the dark fortnight of the moon; ṣhaṭ-māsāḥ—six months; dakṣhiṇa-ayanam—the sun’s southern course; tatra—there; chāndra-masam—lunar; jyotiḥ—light; yogī—a yogi; prāpya—attain; nivartate—comes back;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"b62e8557-fcea-4876-8abd-2cd54a4c196d"},{"id":"abdb4575-503c-4fb0-95ae-d55c49fca8b1","type":"verses","target":{"id":"567c327c-3ab5-4d41-ad61-c6330b0476d1","title":null,"body":"Taking hold of My own nature, I again and again send forth this entire host of beings, which is powerless under the control of My nature.","translit_title":null,"body_translit":"prakṛitiṁ svām avaṣhṭabhya visṛijāmi punaḥ punaḥ\nbhūta-grāmam imaṁ kṛitsnam avaśhaṁ prakṛiter vaśhāt\n","body_translit_meant":"prakṛitim—the material energy; svām—my own; avaṣhṭabhya—presiding over; visṛijāmi—generate; punaḥ punaḥ—again and again; bhūta-grāmam—myriad forms; imam—these; kṛitsnam—all; avaśham—beyond their control; prakṛiteḥ—nature; vaśhāt—force\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"a7963e16-39c0-4370-b3bd-61f72178485f"},{"id":"fda9dbdd-af1f-439a-8627-e66c5eef05d9","type":"verses","target":{"id":"68bacc39-ea0c-46e7-81b3-a233b3d4aa98","title":null,"body":"After that, the assiduous man of Yoga, having his sins completely cleansed and being perfected through many births, reaches the Supreme Goal.","translit_title":null,"body_translit":"prayatnād yatamānas tu yogī sanśhuddha-kilbiṣhaḥ\naneka-janma-sansiddhas tato yāti parāṁ gatim\n","body_translit_meant":"prayatnāt—with great effort; yatamānaḥ—endeavoring; tu—and; yogī—a yogi; sanśhuddha—purified; kilbiṣhaḥ—from material desires; aneka—after many, many; janma—births; sansiddhaḥ—attain perfection; tataḥ—then; yāti—attains; parām—the highest; gatim—path\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"137c2cd7-8346-40db-ae27-45611f009edd"},{"id":"180fbbb6-fbb6-4a77-81c7-63fb40b9d681","type":"verses","target":{"id":"62e7d825-f596-43bf-9ae3-6e77054d7ef9","title":null,"body":"O son of Prtha! Know Me as the eternal seed of all beings; I am the intellect of the intellectuals and the brilliance of the brilliant.","translit_title":null,"body_translit":"bījaṁ māṁ sarva-bhūtānāṁ viddhi pārtha sanātanam\nbuddhir buddhimatām asmi tejas tejasvinām aham\n","body_translit_meant":"bījam—the seed; mām—me; sarva-bhūtānām—of all beings; viddhi—know; pārtha—Arjun, the son of Pritha; sanātanam—the eternal; buddhiḥ—intellect; buddhi-matām—of the intelligent; asmi—(I) am; tejaḥ—splendor; tejasvinām—of the splendid; aham—I\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"e6f05ab8-b7e0-4423-80ca-b6a0a6bbbc34"},{"id":"71996417-f73f-4495-9fc5-ed76d050abc8","type":"verses","target":{"id":"a52bc43e-51f5-4670-9e1c-ccf78ed23844","title":null,"body":"Being robbed of their wisdom by innumerable desires and controlled by their own nature, persons take refuge in other deities, following one or the other religious regulations.","translit_title":null,"body_translit":"kāmais tais tair hṛita-jñānāḥ prapadyante ’nya-devatāḥ\ntaṁ taṁ niyamam āsthāya prakṛityā niyatāḥ svayā\n","body_translit_meant":"kāmaiḥ—by material desires; taiḥ taiḥ—by various; hṛita-jñānāḥ—whose knowledge has been carried away; prapadyante—surrender; anya—to other; devatāḥ—celestial gods; tam tam—the various; niyamam—rules and regulations; āsthāya—following; prakṛityā—by nature; niyatāḥ—controlled; svayā—by their own\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"3997044f-2e37-440d-ba02-20fe924f5ca8"},{"id":"b9ede707-ec15-49aa-951e-fde241ea1d5d","type":"verses","target":{"id":"6811d346-4316-480b-85e4-45e235c2672a","title":null,"body":"Those who realize Me as one [identical] with what governs the beings, deities, and with what governs the sacrifices—they, even at the moment of their departure, experience Me, having mastered the Yoga.","translit_title":null,"body_translit":"sādhibhūtādhidaivaṁ māṁ sādhiyajñaṁ cha ye viduḥ\nprayāṇa-kāle ’pi cha māṁ te vidur yukta-chetasaḥ\n","body_translit_meant":"sa-adhibhūta—governing principle of the field of matter; adhidaivam—governing principle of the celestial gods; mām—me; sa-adhiyajñam—governing principle of the Lord all sacrificial performances; cha—and; ye—who; viduḥ—know; prayāṇa—of death; kāle—at the time; api—even; cha—and; mām—me; te—they; viduḥ—know; yukta-chetasaḥ—in full consciousness of me\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"677a6a16-0fa8-4e49-899b-b42836750d47"},{"id":"5e2a4447-9475-4982-bb98-5558f33a71a5","type":"verses","target":{"id":"dd552601-1705-4ef6-93bf-d99af1ed811d","title":null,"body":"He who is engaged in reflecting on the Supreme Divine Soul with his mind, remaining fixed in the practice of yoga and not focusing on any other object, that person attains the Supreme, O son of Prtha!","translit_title":null,"body_translit":"abhyāsa-yoga-yuktena chetasā nānya-gāminā\nparamaṁ puruṣhaṁ divyaṁ yāti pārthānuchintayan\n","body_translit_meant":"abhyāsa-yoga—by practice of yog; yuktena—being constantly engaged in remembrance; chetasā—by the mind; na anya-gāminā—without deviating; paramam puruṣham—the Supreme Divine Personality; divyam—divine; yāti—one attains; pārtha—Arjun, the son of Pritha; anuchintayan—constant remembrance\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"a3f1d504-c4a7-425a-b65f-7b6c57ab8dd1"},{"id":"2f98076a-6c80-4523-b1ce-e0851913c019","type":"verses","target":{"id":"612d48f2-5120-4815-9542-770fac13264a","title":null,"body":"As the day approaches, all manifestations emerge from the unmanifest, and as the night approaches, they dissolve into the same, which is known as the 'unmanifest.'","translit_title":null,"body_translit":"avyaktād vyaktayaḥ sarvāḥ prabhavantyahar-āgame\nrātryāgame pralīyante tatraivāvyakta-sanjñake\n","body_translit_meant":"avyaktāt—from the unmanifested; vyaktayaḥ—the manifested; sarvāḥ—all; prabhavanti—emanate; ahaḥ-āgame—at the advent of Brahma’s day; rātri-āgame—at the fall of Brahma’s night; pralīyante—they dissolve; tatra—into that; eva—certainly; avyakta-sanjñake—in that which is called the unmanifest\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"d80da9c3-0025-4bce-9300-41142edb8a15"},{"id":"fd512bc0-9df8-4f5f-9fa3-8da54f7a56a3","type":"verses","target":{"id":"e0cbbafb-a008-4fd8-9007-963c6606bcaf","title":null,"body":"Having understood all this, the Yogin goes beyond whatever fruit of merit is ordained in the scriptures in case of reciting the Vedas, performing sacrifices, observing austerities, and donating gifts; and he goes to the Supreme Primeval Abode.","translit_title":null,"body_translit":"vedeṣhu yajñeṣhu tapaḥsu chaiva\ndāneṣhu yat puṇya-phalaṁ pradiṣhṭam\natyeti tat sarvam idaṁ viditvā\nyogī paraṁ sthānam upaiti chādyam\n","body_translit_meant":"vedeṣhu—in the study of the Vedas; yajñeṣhu—in performance of sacrifices; tapaḥsu—in austerities; cha—and; eva—certainly; dāneṣhu—in giving charities; yat—which; puṇya-phalam—fruit of merit; pradiṣhṭam—is gained; atyeti—surpasses; tat sarvam—all; idam—this; viditvā—having known; yogī—a yogi; param—Supreme; sthānam—Abode; upaiti—achieves; cha—and; ādyam—original\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"b6e16c54-e842-4fd0-8ef4-68f114126214"},{"id":"8d48bec5-0267-42ad-8f0a-a88ff89d18d5","type":"verses","target":{"id":"ad15e413-d0d9-488b-bef4-5737f3c55400","title":null,"body":"This entire universe is pervaded by Me, having an unmanifest form; all beings exist in Me, and I do not exist in them.","translit_title":null,"body_translit":"mayā tatam idaṁ sarvaṁ jagad avyakta-mūrtinā\nmat-sthāni sarva-bhūtāni na chāhaṁ teṣhvavasthitaḥ\n","body_translit_meant":"mayā—by me; tatam—pervaded; idam—this; sarvam—entire; jagat—cosmic manifestation; avyakta-mūrtinā—the unmanifested form; mat-sthāni—in me; sarva-bhūtāni—all living beings; na—not; cha—and; aham—I; teṣhu—in them; avasthitaḥ—dwell\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"14251852-2581-43b8-987c-4a36e579790b"},{"id":"93c10ef6-8712-44fe-84c9-87e7ed8ac0e9","type":"verses","target":{"id":"2786827e-2344-4939-9ad5-4d4f47594909","title":null,"body":"Ever speaking of My glory, striving with firm resolve, paying homage to Me, and being permanently endowed with devotion, they worship Me.","translit_title":null,"body_translit":"satataṁ kīrtayanto māṁ yatantaśh cha dṛiḍha-vratāḥ\nnamasyantaśh cha māṁ bhaktyā nitya-yuktā upāsate\n","body_translit_meant":"satatam—always; kīrtayantaḥ—singing divine glories; mām—me; yatantaḥ—striving; cha—and; dṛiḍha-vratāḥ—with great determination; namasyantaḥ—humbly bowing down; cha—and; mām—me; bhaktyā—loving devotion; nitya-yuktāḥ—constantly united; upāsate—worship\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"280e211c-a3bc-451a-a23f-4c6bb60a6463"},{"id":"d0aacea7-b04f-4a93-8803-df8601886ce7","type":"verses","target":{"id":"cd4b2ab6-42ae-4c2f-8181-a851161b6145","title":null,"body":"The person of Yoga is superior to the persons of austerities and is considered superior even to the persons of knowledge; and the person of Yoga is superior to the persons of action. Therefore, O Arjuna! you should become a person of Yoga.","translit_title":null,"body_translit":"tapasvibhyo ’dhiko yogī\njñānibhyo ’pi mato ’dhikaḥ\nkarmibhyaśh chādhiko yogī\ntasmād yogī bhavārjuna\n","body_translit_meant":"tapasvibhyaḥ—than the ascetics; adhikaḥ—superior; yogī—a yogi; jñānibhyaḥ—than the persons of learning; api—even; mataḥ—considered; adhikaḥ—superior; karmibhyaḥ—than the ritualistic performers; cha—and; adhikaḥ—superior; yogī—a yogi; tasmāt—therefore; yogī—a yogi; bhava—just become; arjuna—Arjun\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"3fdd5da7-0d58-4ccc-891a-94d7e3178669"},{"id":"3d419f96-8659-420b-9880-7325fbf1f313","type":"verses","target":{"id":"e8d999dd-3831-4e11-8fdd-052d896eba3f","title":null,"body":"Of the strong, I am the strength that is free from desire and attachment. O best of the Bharatas, in all beings, I am the desire that is not contrary to dharma.","translit_title":null,"body_translit":"balaṁ balavatāṁ chāhaṁ kāma-rāga-vivarjitam\ndharmāviruddho bhūteṣhu kāmo ’smi bharatarṣhabha\n","body_translit_meant":"balam—strength; bala-vatām—of the strong; cha—and; aham—I; kāma—desire; rāga—passion; vivarjitam—devoid of; dharma-aviruddhaḥ—not conflicting with dharma; bhūteṣhu—in all beings; kāmaḥ—sexual activity; asmi—(I) am; bharata-ṛiṣhabha—Arjun, the best of the Bharats\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"7f9d27db-849b-47fa-8a27-b09733e34843"},{"id":"d9bd7f1e-699c-4e41-9e57-505d3274a2c7","type":"verses","target":{"id":"2ddcedbe-2a79-49dd-abd1-019ff92f722a","title":null,"body":"Whatever form of deity a devotee, whomever they may be, desires to worship with faith, I assume that form which is firm and is according to their faith.","translit_title":null,"body_translit":"yo yo yāṁ yāṁ tanuṁ bhaktaḥ śhraddhayārchitum ichchhati\ntasya tasyāchalāṁ śhraddhāṁ tām eva vidadhāmyaham\n","body_translit_meant":"yaḥ yaḥ—whoever; yām yām—whichever; tanum—form; bhaktaḥ—devotee; śhraddhayā—with faith; architum—to worship; ichchhati—desires; tasya tasya—to him; achalām—steady; śhraddhām—faith; tām—in that; eva—certainly; vidadhāmi—bestow; aham—I\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"2f4dc034-fd60-4ece-8404-3883563eb00c"},{"id":"c78c84c9-a621-4641-b201-02a0f50610e3","type":"verses","target":{"id":"30b7d743-f84c-406b-b218-0a8e3aa9ba0c","title":null,"body":"He who meditates continuously on the Ancient Seer, the Ruler, the subtler than the subtle, the supporter of all, the unimaginably formed, the sun-colored, and that which is beyond darkness;","translit_title":null,"body_translit":"kaviṁ purāṇam anuśhāsitāram\naṇor aṇīyānsam anusmared yaḥ\nsarvasya dhātāram achintya-rūpam\nāditya-varṇaṁ tamasaḥ parastāt\n","body_translit_meant":"kavim—poet; purāṇam—ancient; anuśhāsitāram—the controller; aṇoḥ—than the atom; aṇīyānsam—smaller; anusmaret—always remembers; yaḥ—who; sarvasya—of everything; dhātāram—the support; achintya—inconceivable; rūpam—divine form; āditya-varṇam—effulgent like the sun; tamasaḥ—to the darkness of ignorance; parastāt—beyond;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"e5cb547e-675f-468a-a8c0-4867ac11f337"},{"id":"f871686e-37ec-4f45-9e6e-dd0985d5f939","type":"verses","target":{"id":"c95e7e5b-cc84-4ec9-802b-a332a2283af3","title":null,"body":"Being born and reborn, the same multitude of beings is dissolved when night approaches and is born again, willy-nilly, when day approaches, O son of Prtha!","translit_title":null,"body_translit":"bhūta-grāmaḥ sa evāyaṁ bhūtvā bhūtvā pralīyate\nrātryāgame ’vaśhaḥ pārtha prabhavatyahar-āgame\n","body_translit_meant":"bhūta-grāmaḥ—the multitude of beings; saḥ—these; eva—certainly; ayam—this; bhūtvā bhūtvā—repeatedly taking birth; pralīyate—dissolves; rātri-āgame—with the advent of night; avaśhaḥ—helpless; pārtha—Arjun, the son of Pritha; prabhavati—become manifest; ahaḥ-āgame—with the advent of day\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"08699404-521c-42a4-9f3e-bab0a27c19f3"},{"id":"34e51717-2a96-453f-923f-20d5444370f2","type":"verses","target":{"id":"d61db9e1-0b38-4a7d-933c-c606664390ce","title":null,"body":"O Dhananjaya! These acts do not bind me, remaining as if unconcerned and unattached in these actions.","translit_title":null,"body_translit":"na cha māṁ tāni karmāṇi nibadhnanti dhanañjaya\nudāsīna-vad āsīnam asaktaṁ teṣhu karmasu\n","body_translit_meant":"na—none; cha—as; mām—me; tāni—those; karmāṇi—actions; nibadhnanti—bind; dhanañjaya—Arjun, conqueror of wealth; udāsīna-vat—as neutral; āsīnam—situated; asaktam—detached; teṣhu—those; karmasu—actions\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"edf68454-2f02-4e9c-a827-799ece02398e"},{"id":"d49cc4f2-5d27-4302-9d5b-5fe02426a0ee","type":"verses","target":{"id":"be255ff4-c7bc-4f09-96a9-37d02bc1c1f1","title":null,"body":"I give heat; I withhold and also send forth rains; I am immortality and also death, the real and the unreal, O Arjuna!","translit_title":null,"body_translit":"tapāmyaham ahaṁ varṣhaṁ nigṛihṇāmyutsṛijāmi cha\namṛitaṁ chaiva mṛityuśh cha sad asach chāham arjuna\n","body_translit_meant":"tapāmi—radiate heat; aham—I; aham—I; varṣham—rain; nigṛihṇāmi—withhold; utsṛijāmi—send forth; cha—and; amṛitam—immortality; cha—and; eva—also; mṛityuḥ—death; cha—and; sat—eternal spirit; asat—temporary matter; cha—and; aham—I; arjuna—Arjun\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"6cbd4afd-15fb-4e90-a7f4-bad9a1645c3a"},{"id":"9ecbbd17-9b38-4cfe-b3ac-b29cd8f42a67","type":"verses","target":{"id":"1a7eccec-63cc-4b6b-949f-88a64540b26b","title":null,"body":"I am the same in all beings; none is hateful to Me and none is dear; but whoever worships Me with devotion, they are in Me and I am in them.","translit_title":null,"body_translit":"samo ’haṁ sarva-bhūteṣhu na me dveṣhyo ’sti na priyaḥ\nye bhajanti tu māṁ bhaktyā mayi te teṣhu chāpyaham\n","body_translit_meant":"samaḥ—equally disposed; aham—I; sarva-bhūteṣhu—to all living beings; na—no one; me—to me; dveṣhyaḥ—inimical; asti—is; na—not; priyaḥ—dear; ye—who; bhajanti—worship with love; tu—but; mām—me; bhaktyā—with devotion; mayi—reside in me; te—such persons; teṣhu—in them; cha—and; api—also; aham—I\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"8c95e76d-e394-435e-ada3-6db03b22358f"},{"id":"96e9a699-75e9-4ddd-8807-0e5a3f7091c2","type":"verses","target":{"id":"278e1488-e2bc-4b21-9e06-02b5d25eacc3","title":null,"body":"Whoever knows Me as the unborn and beginningless Absolute Lord of the universe, that person, not deluded among mortals, is freed from all sins.","translit_title":null,"body_translit":"yo māmajam anādiṁ cha vetti loka-maheśhvaram\nasammūḍhaḥ sa martyeṣhu sarva-pāpaiḥ pramuchyate\n","body_translit_meant":"verseyaḥ—who; mām—me; ajam—unborn; anādim—beginningless; cha—and; vetti—know; loka—of the universe; mahā-īśhvaram—the Supreme Lord; asammūḍhaḥ—undeluded; saḥ—they; martyeṣhu—among mortals; sarva-pāpaiḥ—from all evils; pramuchyate—are freed from-3\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"40ed54ba-ac4b-4550-b98d-8e5f3de9bbc2"},{"id":"d4925297-390d-4a36-830e-177fe01f8e08","type":"verses","target":{"id":"a29881ab-aff7-4eeb-ac46-abfe9ed0f7f6","title":null,"body":"The Bhagavat said, \"O son of Prtha, hear from Me how, with your mind attached to Me, practicing yoga, and taking refuge in Me, you shall understand Me fully, without any doubt.\"","translit_title":null,"body_translit":"śhrī bhagavān uvācha\nmayyāsakta-manāḥ pārtha yogaṁ yuñjan mad-āśhrayaḥ\nasanśhayaṁ samagraṁ māṁ yathā jñāsyasi tach chhṛiṇu\n","body_translit_meant":"śhrī-bhagavān uvācha—the Supreme Lord said; mayi—to me; āsakta-manāḥ—with the mind attached; pārtha—Arjun, the son of Pritha; yogam—bhakti yog; yuñjan—practicing; mat-āśhrayaḥ—surrendering to me; asanśhayam—free from doubt; samagram—completely; mām—me; yathā—how; jñāsyasi—you shall know; tat—that; śhṛiṇu—listen\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"8068e1c3-4398-45fe-8ec7-69fb05fa737d"},{"id":"a303ccdd-b0ab-4f3e-a091-cafc081e628b","type":"verses","target":{"id":"2a227724-8592-4a1d-a001-c263ff7af931","title":null,"body":"All beings are born from this womb; hence, keep them close. I am the origin and dissolution of the entire world.","translit_title":null,"body_translit":"etad-yonīni bhūtāni sarvāṇītyupadhāraya\nahaṁ kṛitsnasya jagataḥ prabhavaḥ pralayas tathā\n","body_translit_meant":"etat yonīni—these two (energies) are the source of; bhūtāni—living beings; sarvāṇi—all; iti—that; upadhāraya—know; aham—I; kṛitsnasya—entire; jagataḥ—creation; prabhavaḥ—the source; pralayaḥ—dissolution; tathā—and\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"f062b47a-da27-4c33-850b-7563b30e2fcb"},{"id":"5a14ff00-5aa4-474e-8468-ac43a4035300","type":"verses","target":{"id":"dc46a16d-4262-4528-aeab-73a427eb6139","title":null,"body":"Men of good action who always worship Me are of four types: the afflicted, the seeker of knowledge, the seeker of wealth, and the man of wisdom, O best among the Bharatas!","translit_title":null,"body_translit":"chatur-vidhā bhajante māṁ janāḥ sukṛitino ’rjuna\nārto jijñāsur arthārthī jñānī cha bharatarṣhabha\n","body_translit_meant":"chatuḥ-vidhāḥ—four kinds; bhajante—worship; mām—me; janāḥ—people; su-kṛitinaḥ—those who are pious; arjuna—Arjun; ārtaḥ—the distressed; jijñāsuḥ—the seekers of knowledge; artha-arthī—the seekers of material gain; jñānī—those who are situated in knowledge; cha—and; bharata-ṛiṣhabha—The best amongst the Bharatas, Arjun\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"2a97ba3b-9d5b-4769-960a-f0b4d80d48e0"},{"id":"9e1c0506-566f-4394-b9b1-56bdb3e9c001","type":"verses","target":{"id":"e0daea6a-649d-4f99-a728-716379e67741","title":null,"body":"O Arjuna, I know the beings that have gone, that are present, and those yet to be born; but no one knows Me.","translit_title":null,"body_translit":"vedāhaṁ samatītāni vartamānāni chārjuna\nbhaviṣhyāṇi cha bhūtāni māṁ tu veda na kaśhchana\n","body_translit_meant":"veda—know; aham—I; samatītāni—the past; vartamānāni—the present; cha—and; arjuna—Arjun; bhaviṣhyāṇi—the future; cha—also; bhūtāni—all living beings; mām—me; tu—but; veda—knows; na kaśhchana—no one\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"48de13bb-8f47-4a19-b70c-c3e1aa5e8dd5"},{"id":"edb8ab49-cc39-4fcb-8906-735e4f1ef515","type":"verses","target":{"id":"10a0cd53-39fe-40ad-be7e-22e5f0a545b5","title":null,"body":"The changing nature is the lord of the material beings; the Person alone is the lord of the divinities; I am alone the Lord of sacrifices, and I, the best of the embodied souls, dwell in this body.","translit_title":null,"body_translit":"adhibhūtaṁ kṣharo bhāvaḥ puruṣhaśh chādhidaivatam\nadhiyajño ’ham evātra dehe deha-bhṛitāṁ vara\n","body_translit_meant":"adhibhūtam—the ever changing physical manifestation; kṣharaḥ—perishable; bhāvaḥ—nature; puruṣhaḥ—the cosmic personality of God, encompassing the material creation; cha—and; adhidaivatam—the Lord of the celestial gods; adhiyajñaḥ—the Lord of all sacrifices; aham—I; eva—certainly; atra—here; dehe—in the body; deha-bhṛitām—of the embodied; vara—O best\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"db66e131-ed4f-4017-ae43-926c8b174560"},{"id":"4fb3b7b1-1789-4428-9a77-d7c0390f5f46","type":"verses","target":{"id":"8e0eb8ff-9ce1-49ab-b9c4-349b516196ee","title":null,"body":"And whoever constantly bears Me in mind, never attached to any other object—for this yogi, ever devoted, I am easy to attain, O son of Prtha!","translit_title":null,"body_translit":"ananya-chetāḥ satataṁ yo māṁ smarati nityaśhaḥ\ntasyāhaṁ sulabhaḥ pārtha nitya-yuktasya yoginaḥ\n","body_translit_meant":"ananya-chetāḥ—without deviation of the mind; satatam—always; yaḥ—who; mām—me; smarati—remembers; nityaśhaḥ—regularly; tasya—to him; aham—I; su-labhaḥ—easily attainable; pārtha—Arjun, the son of Pritha; nitya—constantly; yuktasya—engaged; yoginaḥ—of the yogis\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"fb104c07-5616-4eeb-af59-e5989095e105"},{"id":"3d0669fc-8ab0-4b8e-b2ea-21124c2e93f7","type":"verses","target":{"id":"2e9ded82-b750-4cae-9aec-dabb070b299d","title":null,"body":"The northern course consisting of six months is fire, light, day, and bright. Departing in it, the Brahman-knowing men attain Brahman.","translit_title":null,"body_translit":"agnir jyotir ahaḥ śhuklaḥ ṣhaṇ-māsā uttarāyaṇam\ntatra prayātā gachchhanti brahma brahma-vido janāḥ\n","body_translit_meant":"agniḥ—fire; jyotiḥ—light; ahaḥ—day; śhuklaḥ—the bright fortnight of the moon; ṣhaṭ-māsāḥ—six months; uttara-ayanam—the sun’s northern course; tatra—there; prayātāḥ—departed; gachchhanti—go; brahma—Brahman; brahma-vidaḥ—those who know the Brahman; janāḥ—persons;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"650afe98-4471-4ea0-b712-f8142dca7c95"},{"id":"67ebdeed-d596-433b-9551-0e4e7027bb2d","type":"verses","target":{"id":"70cc7f13-cb44-46e8-9cb4-3eac3186928d","title":null,"body":"O son of Kunti! On account of Me, who remain only as an observer and the prime cause, My nature gives birth to both the moving and the unmoving; hence, this world moves in a circle.","translit_title":null,"body_translit":"mayādhyakṣheṇa prakṛitiḥ sūyate sa-charācharam\nhetunānena kaunteya jagad viparivartate\n","body_translit_meant":"mayā—by me; adhyakṣheṇa—direction; prakṛitiḥ—material energy; sūyate—brings into being; sa—both; chara-acharam—the animate and the inanimate; hetunā—reason; anena—this; kaunteya—Arjun, the son of Kunti; jagat—the material world; viparivartate—undergoes the changes\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"445605a3-0497-46c0-8894-8bb9f1da2287"},{"id":"eaea090f-9476-4fdf-b0a8-319b450bb297","type":"verses","target":{"id":"2d576d8c-39d9-4ec2-ae2f-260fbdf22cde","title":null,"body":"The masters of the three Vedas, the soma-drinkers, purified of their sins, aspire for the heavenly goal by offering sacrifices to Me. They attain the meritorious world of the Lord of Gods and taste in the heavens the heavenly pleasures of the gods.","translit_title":null,"body_translit":"trai-vidyā māṁ soma-pāḥ pūta-pāpā\nyajñair iṣhṭvā svar-gatiṁ prārthayante\nte puṇyam āsādya surendra-lokam\naśhnanti divyān divi deva-bhogān\n","body_translit_meant":"trai-vidyāḥ—the science of karm kāṇḍ (Vedic Rituals); mām—me; soma-pāḥ—drinkers of the Soma juice; pūta—purified; pāpāḥ—sins; yajñaiḥ—through sacrifices; iṣhṭvā—worship; svaḥ-gatim—way to the abode of the king of heaven; prārthayante—seek; te—they; puṇyam—pious; āsādya—attain; sura-indra—of Indra; lokam—abode; aśhnanti—enjoy; divyān—celestial; divi—in heaven; deva-bhogān—the pleasures of the celestial gods\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"dbd83a6b-b03f-4980-810e-7e5b84a17e91"},{"id":"0709bbb0-32e9-43d2-8dd1-69aa968e4429","type":"verses","target":{"id":"87adcb7f-abcb-41dd-8b31-1a094f650e74","title":null,"body":"This is My lower nature. My superior nature, which has become the individual Soul and by which this world is maintained, is not different from this. O mighty-armed Arjuna, you must know this.","translit_title":null,"body_translit":"apareyam itas tvanyāṁ prakṛitiṁ viddhi me parām\njīva-bhūtāṁ mahā-bāho yayedaṁ dhāryate jagat\n","body_translit_meant":"aparā—inferior; iyam—this; itaḥ—besides this; tu—but; anyām—another; prakṛitim—energy; viddhi—know; me—my; parām—superior; jīva-bhūtām—living beings; mahā-bāho—mighty-armed one; yayā—by whom; idam—this; dhāryate—the basis; jagat—the material world\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"dd89d0ea-420e-4f8e-b499-ccd54d55da58"},{"id":"2950c0ea-40ce-4f35-ab44-4f3098794a96","type":"verses","target":{"id":"e4e87bac-62da-4bd1-bb72-d50d217ca79d","title":null,"body":"The deluded evil-doers, the vilest of men, who are robbed of knowledge by the trick of illusion and have taken refuge in the demonic nature—they do not resort to Me.","translit_title":null,"body_translit":"na māṁ duṣhkṛitino mūḍhāḥ prapadyante narādhamāḥ\nmāyayāpahṛita-jñānā āsuraṁ bhāvam āśhritāḥ\n","body_translit_meant":"na—not; mām—unto me; duṣhkṛitinaḥ—the evil doers; mūḍhāḥ—the ignorant; prapadyante—surrender; nara-adhamāḥ—one who lazily follows one’s lower nature; māyayā—by God’s material energy; apahṛita jñānāḥ—those with deluded intellect; āsuram—demoniac; bhāvam—nature; āśhritāḥ—surrender\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"adb35a22-445d-43b4-a83c-44686770fcac"},{"id":"3d5ce537-c4cf-4b33-b847-c238f90e7968","type":"verses","target":{"id":"242705a5-7339-41ce-9bcd-7b513a22178d","title":null,"body":"Being surrounded by the trick of yoga-illusion, I am not clear to all; hence, this deluded world of perceivers does not recognize Me, the unborn and undying.","translit_title":null,"body_translit":"nāhaṁ prakāśhaḥ sarvasya yoga-māyā-samāvṛitaḥ\nmūḍho ’yaṁ nābhijānāti loko mām ajam avyayam\n","body_translit_meant":"na—not; aham—I; prakāśhaḥ—manifest; sarvasya—to everyone; yoga-māyā—God’s supreme (divine) energy; samāvṛitaḥ—veiled; mūḍhaḥ—deluded; ayam—these; na—not; abhijānāti—know; lokaḥ—persons; mām—me; ajam—unborn; avyayam—immutable\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"148ac904-e0ac-416c-b0b8-1ec3361996de"},{"id":"a9c4498f-cea9-462c-b7ac-a9ee7b7a1e90","type":"verses","target":{"id":"e0bb8507-ff58-4dbd-88c0-db993d51016b","title":null,"body":"The Bhagavat said, \"The immutable Absolute is the Brahman. Its intrinsic nature is called the Lord of the Self. The emitting activity that causes the birth of both the animate and inanimate is named 'action'.\"","translit_title":null,"body_translit":"śhrī bhagavān uvācha\nakṣharaṁ brahma paramaṁ svabhāvo ’dhyātmam uchyate\nbhūta-bhāvodbhava-karo visargaḥ karma-sanjñitaḥ\n","body_translit_meant":"śhrī-bhagavān uvācha—the Blessed Lord said; akṣharam—indestructible; brahma—Brahman; paramam—the Supreme; svabhāvaḥ—nature; adhyātmam—one’s own self; uchyate—is called; bhūta-bhāva-udbhava-karaḥ—Actions pertaining to the material personality of living beings, and its development; visargaḥ—creation; karma—fruitive activities; sanjñitaḥ—are called\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"d11ae6dd-3aa6-4a4e-9425-959caca4168e"},{"id":"5feb1d1a-5e23-4125-a441-f25f4b84c86d","type":"verses","target":{"id":"a0ec0612-69ad-4453-83cd-3b39174b1789","title":null,"body":"Reciting the single-syllabled Om, the very Brahman; meditating on Me; whoever travels well, casting away their body—surely they attain My State.","translit_title":null,"body_translit":"oṁ ityekākṣharaṁ brahma vyāharan mām anusmaran\nyaḥ prayāti tyajan dehaṁ sa yāti paramāṁ gatim\n","body_translit_meant":"om—sacred syllable representing the formless aspect of God; iti—thus; eka-akṣharam—one syllabled; brahma—the Absolute Truth; vyāharan—chanting; mām—me (Shree Krishna); anusmaran—remembering; yaḥ—who; prayāti—departs; tyajan—quitting; deham—the body; saḥ—he; yāti—attains; paramām—the supreme; gatim—goal\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"25099026-db50-4032-aa4d-698725d8b88d"},{"id":"78d29e64-a9f5-4caf-9ea2-c372fe1af7b5","type":"verses","target":{"id":"8af89617-bf4d-49c2-b3d2-f55d8c4659bc","title":null,"body":"Departing at what times the Yogis attain the non-return or the return only—those times I shall declare to you, O chief of the Bharatas!","translit_title":null,"body_translit":"yatra kāle tvanāvṛittim āvṛittiṁ chaiva yoginaḥ\nprayātā yānti taṁ kālaṁ vakṣhyāmi bharatarṣhabha\n","body_translit_meant":"yatra—where; kāle—time; tu—certainly; anāvṛittim—no return; āvṛittim—return; cha—and; eva—certainly; yoginaḥ—a yogi; prayātāḥ—having departed; yānti—attain; tam—that; kālam—time; vakṣhyāmi—I shall describe; bharata-ṛiṣhabha—Arjun, the best of the Bharatas;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"8e5f6b17-3176-411f-ba14-c525bb691e2a"},{"id":"5b2c27b5-e274-41e0-9843-d8521112fb83","type":"verses","target":{"id":"a1b86cd7-288b-4273-b480-ce5a4eabb258","title":null,"body":"Yet, the beings do not exist in Me. Look at My Sovereign Yoga. My Self is the sustainer of the beings; it does not exist in them, and causes them to be born.","translit_title":null,"body_translit":"na cha mat-sthāni bhūtāni paśhya me yogam aiśhwaram\nbhūta-bhṛin na cha bhūta-stho mamātmā bhūta-bhāvanaḥ\n","body_translit_meant":"na—never; cha—and; mat-sthāni—abide in me; bhūtāni—all living beings; paśhya—behold; me—my; yogam aiśhwaram—divine energy; bhūta-bhṛit—the sustainer of all living beings; na—never; cha—yet; bhūta-sthaḥ—dwelling in; mama—my; ātmā—self; bhūta-bhāvanaḥ—the creator of all beings\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"90b16cd1-f4a3-4455-9086-d2527b61e412"},{"id":"cc7c2328-10c2-4670-bc6e-0a557447aa6a","type":"verses","target":{"id":"1b5ba20d-3e95-4d7a-bd14-f77abc06387d","title":null,"body":"Some worship Me by knowledge-sacrifice, and others by offering sacrifices; thus, they worship Me, the Universally-Faced, either as One or as Many.","translit_title":null,"body_translit":"jñāna-yajñena chāpyanye yajanto mām upāsate\nekatvena pṛithaktvena bahudhā viśhvato-mukham\n","body_translit_meant":"jñāna-yajñena—yajña of cultivating knowledge; cha—and; api—also; anye—others; yajantaḥ—worship; mām—me; upāsate—worship; ekatvena—undifferentiated oneness; pṛithaktvena—separately; bahudhā—various; viśhwataḥ-mukham—the cosmic form\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"0b23827a-6a95-4366-8448-c25e1173c9aa"},{"id":"6924b7b6-2201-4258-bb77-f9e091db3ad4","type":"verses","target":{"id":"fd7f9510-cb46-4b10-b4f3-1797e26732ff","title":null,"body":"The devotees of the gods attain the gods; the devotees of the ancestors attain the ancestors; those who perform sacrifices for the spirits attain the spirits; and those who perform sacrifices for Me attain Me.","translit_title":null,"body_translit":"yānti deva-vratā devān pitṝīn yānti pitṛi-vratāḥ\nbhūtāni yānti bhūtejyā yānti mad-yājino ’pi mām\n","body_translit_meant":"yānti—go; deva-vratāḥ—worshipers of celestial gods; devān—amongst the celestial gods; pitṝīn—to the ancestors; yānti—go; pitṛi-vratā—worshippers of ancestors; bhūtāni—to the ghosts; yānti—go; bhūta-ijyāḥ—worshippers of ghosts; yānti—go; mat—my; yājinaḥ—devotees; api—and; mām—to me\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"2cb67ffd-7d2d-4138-af4d-be865cc51c3f"},{"id":"bdb053b4-5b82-410f-ad63-9f4f712a81b2","type":"verses","target":{"id":"330615ca-c958-4372-9912-6257efa4ea6e","title":null,"body":"Whatever beings are there—whether they are of the Sattva, Rajas, or Tamas strands—be sure that they are from Me; I am not in them, but they are within Me.","translit_title":null,"body_translit":"ye chaiva sāttvikā bhāvā rājasās tāmasāśh cha ye\nmatta eveti tān viddhi na tvahaṁ teṣhu te mayi\n","body_translit_meant":"ye—whatever; cha—and; eva—certainly; sāttvikāḥ—in the mode of goodness; bhāvāḥ—states of material existence; rājasāḥ—in the mode of passion; tāmasāḥ—in the mode of ignorance; cha—and; ye—whatever; mattaḥ—from me; eva—certainly; iti—thus; tān—those; viddhi—know; na—not; tu—but; aham—I; teṣhu—in them; te—they; mayi—in me\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"7daf3009-1bfc-47f2-a41e-380a7480de21"},{"id":"1411ce11-325d-4baf-b739-5e3a959a0ef9","type":"verses","target":{"id":"c4ae8d7d-4c40-4182-9a52-711a8383a906","title":null,"body":"Endowed with that faith, he seeks to worship that deity and thereby receives his desired objects, which are ordained by none other than Me.","translit_title":null,"body_translit":"sa tayā śhraddhayā yuktas tasyārādhanam īhate\nlabhate cha tataḥ kāmān mayaiva vihitān hi tān\n","body_translit_meant":"saḥ—he; tayā—with that; śhraddhayā—faith; yuktaḥ—endowed with; tasya—of that; ārādhanam—worship; īhate—tries to engange in; labhate—obtains; cha—and; tataḥ—from that; kāmān—desires; mayā—by me; eva—alone; vihitān—granted; hi—certainly; tān—those\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"84156512-312f-45a3-8f88-8fe98f651290"},{"id":"c9bc83d3-28fc-4d7d-ac27-e6c20a74eb32","type":"chapters","target":{"id":"6e8ce1b1-177c-491e-9534-40db3384e5da","title":"Path of the Eternal God","body":"The eighth chapter of the Bhagavad Gita is \"Akshara Brahma Yoga\". In this chapter, Krishna reveals the importance of the last thought before death. If we can remember Krishna at the time of death, we will certainly attain him. Thus, it is very important to be in constant awareness of the Lord at all times, thinking of Him and chanting His names at all times. By perfectly absorbing their mind in Him through constant devotion, one can go beyond this material existence to Lord's Supreme abode.","translit_title":"Akṣhar Brahma Yog","body_translit":null,"body_translit_meant":null,"body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":8,"lang":"en"},{"id":"c182a0bd-d3fe-468d-977b-bc7366219e14","type":"verses","target":{"id":"172dfbbf-3e10-4418-b517-6a789a5325d8","title":null,"body":"That person, endowed with a steady mind, devotion, and the power of yoga, reaches the Supreme Divine Soul at the time of departure, by properly fixing the life-breath between their eyebrows.","translit_title":null,"body_translit":"prayāṇa-kāle manasāchalena\nbhaktyā yukto yoga-balena chaiva\nbhruvor madhye prāṇam āveśhya samyak\nsa taṁ paraṁ puruṣham upaiti divyam\n","body_translit_meant":"prayāṇa-kāle—at the time of death; manasā—mind; achalena—steadily; bhaktyā—remembering with great devotion; yuktaḥ—united; yoga-balena—through the power of yog; cha—and; eva—certainly; bhruvoḥ—the two eyebrows; madhye—between; prāṇam—life airs; āveśhya—fixing; samyak—completely; saḥ—he; tam—him; param puruṣham—the Supreme Divine Lord; upaiti—attains; divyam—divine\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"0e0cfdab-829f-4311-9de6-9518b4109689"},{"id":"786ca7dd-95e9-4bb7-ac14-9a49291ac576","type":"verses","target":{"id":"5fbf1d2a-e899-412a-95e4-4fbfa3c1c9f6","title":null,"body":"But there exists another Being which is beyond this, and It is both manifest and unmanifest and is eternal. It is this Being that does not perish while all other beings perish.","translit_title":null,"body_translit":"paras tasmāt tu bhāvo ’nyo ’vyakto ’vyaktāt sanātanaḥ\nyaḥ sa sarveṣhu bhūteṣhu naśhyatsu na vinaśhyati\n","body_translit_meant":"paraḥ—transcendental; tasmāt—than that; tu—but; bhāvaḥ—creation; anyaḥ—another; avyaktaḥ—unmanifest; avyaktāt—to the unmanifest; sanātanaḥ—eternal; yaḥ—who; saḥ—that; sarveṣhu—all; bhūteṣhu—in beings; naśhyatsu—cease to exist; na—never; vinaśhyati—is annihilated\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"7ffc24ea-7aa3-4e9d-b7f8-02eb88070e4b"},{"id":"8bf061d8-e347-460e-9ddc-8b9d58dfd2b2","type":"chapters","target":{"id":"16977732-a4ba-4cd4-99cb-73f82dc2a34a","title":"Yoga through the King of Sciences","body":"The ninth chapter of the Bhagavad Gita is \"Raja Vidya Yoga\". In this chapter, Krishna explains that He is Supreme and how this material existence is created, maintained and destroyed by His Yogmaya and all beings come and go under his supervision. He reveals the Role and the Importance of Bhakti (transcendental devotional service) towards our Spiritual Awakening. In such devotion, one must live for the God, offer everything that he possesses to Him and do everything for Him only. One who follows such devotion becomes free from the bonds of this material world and unites with the Lord.","translit_title":"Rāja Vidyā Yog","body_translit":null,"body_translit_meant":null,"body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":9,"lang":"en"},{"id":"f25fa6f0-2079-4b1a-990e-9938d64314ce","type":"verses","target":{"id":"fb5abead-a68f-4177-b68d-4ae20ab034cc","title":null,"body":"O son of Kunti, all beings pass into My nature at the end of the Kalpa (the age of universe); I send them forth again at the beginning of the [next] Kalpa.","translit_title":null,"body_translit":"sarva-bhūtāni kaunteya prakṛitiṁ yānti māmikām\nkalpa-kṣhaye punas tāni kalpādau visṛijāmyaham\n","body_translit_meant":"sarva-bhūtāni—all living beings; kaunteya—Arjun, the son of Kunti; prakṛitim—primordial material energy; yānti—merge; māmikām—my; kalpa-kṣhaye—at the end of a kalpa; punaḥ—again; tāni—them; kalpa-ādau—at the beginning of a kalpa; visṛijāmi—manifest; aham—I\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"1b86ecfb-d4f6-4936-9375-c404b583050c"},{"id":"fd7654ff-7086-43cf-9a15-2abed0d567af","type":"verses","target":{"id":"d3690a78-70bd-46f2-a491-77ee74bfe175","title":null,"body":"I am the father, the mother, the sustainer, and the paternal grandparent of this world; I am the sacred object of knowledge, the syllable Om, the Rk, the Saman, and the Yajus as well.","translit_title":null,"body_translit":"pitāham asya jagato mātā dhātā pitāmahaḥ\nvedyaṁ pavitram oṁkāra ṛik sāma yajur eva cha\n","body_translit_meant":"pitā—Father; aham—I; asya—of this; jagataḥ—universe; mātā—Mother; dhātā—Sustainer; pitāmahaḥ—Grandsire; vedyam—the goal of knowledge; pavitram—the purifier; om-kāra—the sacred syllable Om; ṛik—the Rig Veda; sāma—the Sama Veda; yajuḥ—the Yajur Veda; eva—also; cha—and\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"229faef1-a92b-403c-b080-1452e4dd2e6b"},{"id":"3feb81fc-3b7f-49bb-aa3d-a5be0474432c","type":"verses","target":{"id":"bb1c4f37-7013-484c-aa52-6917cda90cc0","title":null,"body":"Whatever you do, whatever you eat, whatever oblation you offer, whatever gift you make, and whatever austerity you perform, O son of Kunti, do that as an offering to Me.","translit_title":null,"body_translit":"yat karoṣhi yad aśhnāsi yaj juhoṣhi dadāsi yat\nyat tapasyasi kaunteya tat kuruṣhva mad-arpaṇam\n","body_translit_meant":"yat—whatever; karoṣhi—you do; yat—whatever; aśhnāsi—you eat; yat—whatever; juhoṣhi—offer to the sacred fire; dadāsi—bestow as a gift; yat—whatever; yat—whatever; tapasyasi—austerities you perform; kaunteya—Arjun, the son of Kunti; tat—them; kuruṣhva—do; mad arpaṇam—as an offering to me\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"330a9121-d697-42d3-82a6-23ecb8276160"},{"id":"331729fb-f87c-45bf-b547-8d4c5d3ecd93","type":"verses","target":{"id":"96e3c678-76c5-4d2e-a402-8d0e1f763c70","title":null,"body":"But those men of virtuous deeds, whose sin has come to an end—they, being free from the delusion of pairs [of opposites], worship Me with a firm resolve.","translit_title":null,"body_translit":"yeṣhāṁ tvanta-gataṁ pāpaṁ janānāṁ puṇya-karmaṇām\nte dvandva-moha-nirmuktā bhajante māṁ dṛiḍha-vratāḥ\n","body_translit_meant":"yeṣhām—whose; tu—but; anta-gatam—completely destroyed; pāpam—sins; janānām—of persons; puṇya—pious; karmaṇām—activities; te—they; dvandva—of dualities; moha—illusion; nirmuktāḥ—free from; bhajante—worship;mām; dṛiḍha-vratāḥ—with determination\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"850755ad-e551-45bd-a7e2-d39bebdc40c9"},{"id":"82854dfd-60e7-490b-bfee-08d39489e9be","type":"verses","target":{"id":"50ff6648-19ef-467e-90ea-b734a78cba22","title":null,"body":"And also remembering whatever being one has been constantly thinking about, a person leaves his body at the end [of his life], O son of Kunti! That being alone he attains.","translit_title":null,"body_translit":"yaṁ yaṁ vāpi smaran bhāvaṁ tyajatyante kalevaram\ntaṁ tam evaiti kaunteya sadā tad-bhāva-bhāvitaḥ\n","body_translit_meant":"yam yam—whatever; vā—or; api—even; smaran—remembering; bhāvam—remembrance; tyajati—gives up; ante—in the end; kalevaram—the body; tam—to that; tam—to that; eva—certainly; eti—gets; kaunteya—Arjun, the son of Kunti; sadā—always; tat—that; bhāva-bhāvitaḥ—absorbed in contemplation\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"239bf6ea-51a8-4e7a-8e90-9b3ce6baf8e0"},{"id":"d765b431-97a3-4946-9a1a-e9af421acc04","type":"verses","target":{"id":"847bafa3-ae19-44b1-8218-564e13e036e7","title":null,"body":"Till the Brahman is attained, people return from each and every world, O Arjuna! But there is no return for one who has attained Me, O son of Kunti!","translit_title":null,"body_translit":"ā-brahma-bhuvanāl lokāḥ punar āvartino ’rjuna\nmām upetya tu kaunteya punar janma na vidyate\n","body_translit_meant":"ā-brahma-bhuvanāt—up to the abode of Brahma; lokāḥ—worlds; punaḥ āvartinaḥ—subject to rebirth; arjuna—Arjun; mām—mine; upetya—having attained; tu—but; kaunteya—Arjun, the son of Kunti; punaḥ janma—rebirth; na—never; vidyate—is\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"e4144e50-3d78-4cb7-b97c-92a2fb152e81"},{"id":"ca8c4c33-2398-46d7-bc08-ebd1e58534eb","type":"verses","target":{"id":"20071340-ae19-4b63-85b6-05f95a7546d7","title":null,"body":"For, these two bright and dark paths are considered to be perpetual for the world. One attains non-return by the first of these, and one returns back by the other.","translit_title":null,"body_translit":"śhukla-kṛiṣhṇe gatī hyete jagataḥ śhāśhvate mate\nekayā yātyanāvṛittim anyayāvartate punaḥ\n","body_translit_meant":"śhukla—bright; kṛiṣhṇe—dark; gatī—paths; hi—certainly; ete—these; jagataḥ—of the material world; śhāśhvate—eternal; mate—opinion; ekayā—by one; yāti—goes; anāvṛittim—to non return; anyayā—by the other; āvartate—comes back; punaḥ—again\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"05ac7e3d-6ee1-4ffe-a2c9-3d581f215293"},{"id":"e3e55a1f-612a-4fe6-860a-caa1de3691a4","type":"verses","target":{"id":"75edd587-9acd-43ae-b0f4-65f747814d6c","title":null,"body":"This shines among the sciences; it is the secret of monarchs; it is a supreme purifier, comprehensible by immediate perception, righteous, easy to do, and imperishable.","translit_title":null,"body_translit":"rāja-vidyā rāja-guhyaṁ pavitram idam uttamam\npratyakṣhāvagamaṁ dharmyaṁ su-sukhaṁ kartum avyayam\n","body_translit_meant":"rāja-vidyā—the king of sciences; rāja-guhyam—the most profound secret; pavitram—pure; idam—this; uttamam—highest; pratyakṣha—directly perceptible; avagamam—directly realizable; dharmyam—virtuous; su-sukham—easy; kartum—to practice; avyayam—everlasting\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"466ba44f-ceab-41ef-bb3f-5f372d56fce4"},{"id":"ee62b684-4f28-4c6e-abdc-7301c32a9027","type":"verses","target":{"id":"324c8e97-2bbf-45ac-8589-035f9b2b6a80","title":null,"body":"They are of futile aspirations, futile actions, futile knowledge, and wrong intellect; and they take recourse only to the delusive nature that is both demoniac and devilish.","translit_title":null,"body_translit":"moghāśhā mogha-karmāṇo mogha-jñānā vichetasaḥ\nrākṣhasīm āsurīṁ chaiva prakṛitiṁ mohinīṁ śhritāḥ\n","body_translit_meant":"mogha-āśhāḥ—of vain hopes; mogha-karmāṇaḥ—of vain actions; mogha-jñānāḥ—of baffled knowledge; vichetasaḥ—deluded; rākṣhasīm—demoniac; āsurīm—atheistic; cha—and; eva—certainly; prakṛitim—material energy; mohinīm—bewildered; śhritāḥ—take shelter\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"b0618371-6d93-43a6-b766-86159710f4d3"},{"id":"a8a0ced4-ae65-4077-9d18-cab459a7fcb7","type":"verses","target":{"id":"ab94b4a3-2dcb-449b-ad0a-c9e0d53fd48e","title":null,"body":"Those men who, having nothing else as their goal, worship Me everywhere and are constantly thinking of Me alone; to them, who are fully and constantly attached to Me, I bear acquisition and the security of acquisition.","translit_title":null,"body_translit":"ananyāśh chintayanto māṁ ye janāḥ paryupāsate\nteṣhāṁ nityābhiyuktānāṁ yoga-kṣhemaṁ vahāmyaham\n","body_translit_meant":"ananyāḥ—always; chintayantaḥ—think of; mām—me; ye—those who; janāḥ—persons; paryupāsate—worship exclusively; teṣhām—of them; nitya abhiyuktānām—who are always absorbed; yoga—supply spiritual assets; kṣhemam—protect spiritual assets; vahāmi—carry; aham—I\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"29f68db2-b452-4eec-9650-4b2b9e797212"},{"id":"d6fe687b-2a88-4659-ad2c-e14586ef8367","type":"verses","target":{"id":"2e3fca98-8d8f-4122-982d-c7f8d83a8ef4","title":null,"body":"O son of Prtha, even those who are of sinful birth, women, men of working class, and the members of the fourth caste—even they, having taken refuge in Me, attain the highest goal.","translit_title":null,"body_translit":"māṁ hi pārtha vyapāśhritya ye ’pi syuḥ pāpa-yonayaḥ\nstriyo vaiśhyās tathā śhūdrās te ’pi yānti parāṁ gatim\n","body_translit_meant":"mām—in me; hi—certainly; pārtha—Arjun, the son of Pritha; vyapāśhritya—take refuge; ye—who; api—even; syuḥ—may be; pāpa yonayaḥ—of low birth; striyaḥ—women; vaiśhyāḥ—mercantile people; tathā—and; śhūdrāḥ—manual workers; te api—even they; yānti—go; parām—the supreme; gatim—destination\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"f674d242-fe17-45e8-932f-7c30b3c15eb3"},{"id":"4dcd63e3-c50a-4077-85f3-ef38809d5839","type":"verses","target":{"id":"0e0f25f2-e4d2-4d15-aab0-77336105ad2e","title":null,"body":"The ancient Seven Great Sages and also the Four Manus, from whom these creatures in this world are offspring—they have been born from My mental dispositions.","translit_title":null,"body_translit":"maharṣhayaḥ sapta pūrve chatvāro manavas tathā\nmad-bhāvā mānasā jātā yeṣhāṁ loka imāḥ prajāḥ\n","body_translit_meant":"mahā-ṛiṣhayaḥ—the great Sages; sapta—seven; pūrve—before; chatvāraḥ—four; manavaḥ—Manus; tathā—also; mat bhāvāḥ—are born from me; mānasāḥ—mind; jātāḥ—born; yeṣhām—from them; loke—in the world; imāḥ—all these; prajāḥ—people\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"b6a7a4d0-3600-4220-b690-2949b8eac1b6"},{"id":"69cc5c35-7226-4dbf-8b4b-59e49df5da73","type":"verses","target":{"id":"a6db7d4b-5e4d-4593-91dd-2925158eafad","title":null,"body":"Those who, relying on Me, strive to achieve freedom from old age and death, realize all to be the Brahman and realize all the actions governing the Self.","translit_title":null,"body_translit":"jarā-maraṇa-mokṣhāya mām āśhritya yatanti ye\nte brahma tadviduḥ kṛitsnam adhyātmaṁ karma chākhilam\n","body_translit_meant":"jarā—from old age; maraṇa—and death; mokṣhāya—for liberation; mām—me; āśhritya—take shelter in; yatanti—strive; ye—who; te—they; brahma—Brahman; tat—that; viduḥ—know; kṛitsnam—everything; adhyātmam—the individual self; karma—karmic action; cha—and; akhilam—entire\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"f61b78a7-c9eb-47d5-a65e-7edc8d38d415"},{"id":"21b3d20b-b348-400b-b002-1b80827eb613","type":"verses","target":{"id":"9bddf793-1267-4095-bdd1-b299c3ad3d02","title":null,"body":"Therefore, at all times keep Me in your mind and fight; then, having your mind and intellect dedicated to Me, you will undoubtedly attain Me alone.","translit_title":null,"body_translit":"tasmāt sarveṣhu kāleṣhu mām anusmara yudhya cha\nmayyarpita-mano-buddhir mām evaiṣhyasyasanśhayam\n","body_translit_meant":"tasmāt—therefore; sarveṣhu—in all; kāleṣhu—times; mām—me; anusmara—remember; yudhya—fight; cha—and; mayi—to me; arpita—surrender; manaḥ—mind; buddhiḥ—intellect; mām—to me; eva—surely; eṣhyasi—you shall attain; asanśhayaḥ—without a doubt\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"1fad0af1-c9c1-4192-acfe-d3ce1f011fd3"},{"id":"16bec5fa-2822-4a1e-8ad5-6c831f556185","type":"verses","target":{"id":"3603b2b3-28ac-4534-927e-db6e2afabef5","title":null,"body":"Those who know the day of Brahma as encompassing one thousand yugas (world-ages), and night [also] as encompassing one thousand yugas—those people know the day and night of Brahma.","translit_title":null,"body_translit":"sahasra-yuga-paryantam ahar yad brahmaṇo viduḥ\nrātriṁ yuga-sahasrāntāṁ te ’ho-rātra-vido janāḥ\n","body_translit_meant":"sahasra—one thousand; yuga—age; paryantam—until; ahaḥ—one day; yat—which; brahmaṇaḥ—of Brahma; viduḥ—know; rātrim—night; yuga-sahasra-antām—lasts one thousand yugas; te—they; ahaḥ-rātra-vidaḥ—those who know his day and night; janāḥ—people\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"9350b5e5-fde6-4754-8081-bdd929315ab7"},{"id":"6c0a9c25-d6e3-4b80-a971-e5aa8218ef7f","type":"verses","target":{"id":"7c0faf1b-257b-4794-ada7-8adcd4005bfa","title":null,"body":"O son of Prtha, no Yogin, knowing these two courses, gets deluded. Therefore, O Arjuna, practice Yoga connected with all times.","translit_title":null,"body_translit":"naite sṛitī pārtha jānan yogī muhyati kaśhchana\ntasmāt sarveṣhu kāleṣhu yoga-yukto bhavārjuna\n","body_translit_meant":"na—never; ete—these two; sṛitī—paths; pārtha—Arjun, the son of Pritha; jānan—knowing; yogī—a yogi; muhyati—bewildered; kaśhchana—any; tasmāt—therefore; sarveṣhu kāleṣhu—always; yoga-yuktaḥ—situated in Yog; bhava—be; arjuna—Arjun\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"27be8c7b-88ae-4092-b0a2-2e18839ef6f7"},{"id":"b61bd62e-a6a7-4cb9-83c5-370028cc149c","type":"verses","target":{"id":"019a9d6d-b3a7-43c6-a481-393fbc94788a","title":null,"body":"The Bhagavat said, \"To you, who are entertaining no displeasure, I shall clearly declare this most secret knowledge, together with action, by knowing which you shall be free from evil.\"","translit_title":null,"body_translit":"śhrī bhagavān uvācha\nidaṁ tu te guhyatamaṁ pravakṣhyāmyanasūyave\njñānaṁ vijñāna-sahitaṁ yaj jñātvā mokṣhyase ’śhubhāt\n","body_translit_meant":"śhrī-bhagavān uvācha—the Supreme Lord said; idam—this; tu—but; te—to you; guhya-tamam—the most confidential; pravakṣhyāmi—I shall impart; anasūyave—nonenvious; jñānam—knowledge; vijñāna—realized knowledge; sahitam—with; yat—which; jñātvā—knowing; mokṣhyase—you will be released; aśhubhāt—miseries of material existence\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"7e9c844e-8c37-4365-9159-b2827d29428a"},{"id":"3b55692a-3c2c-4dd4-8cec-e94c25b29605","type":"verses","target":{"id":"6c97676a-19b9-4406-b310-951cc178f402","title":null,"body":"Unaware of My immutable, highest Absolute Supreme nature, the deluded ones disregard Me, dwelling in the human body.","translit_title":null,"body_translit":"avajānanti māṁ mūḍhā mānuṣhīṁ tanum āśhritam\nparaṁ bhāvam ajānanto mama bhūta-maheśhvaram\n","body_translit_meant":"avajānanti—disregard; mām—me; mūḍhāḥ—dim-witted; mānuṣhīm—human; tanum—form; āśhritam—take on; param—divine; bhāvam—personality; ajānantaḥ—not knowing; mama—my; bhūta—all beings; mahā-īśhvaram—the Supreme Lord\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"ce0f57b3-ab25-420b-9fe3-6f9be51557d6"},{"id":"bf380c13-c0a9-4a6e-9a90-3213fb417c53","type":"verses","target":{"id":"4e52eb1d-0a9f-41b3-82eb-615d0edec126","title":null,"body":"Having enjoyed that vast world of heaven, they, when their merit is exhausted, enter the world of mortals. Thus, those who long for pleasure and continuously take refuge in the code of conduct prescribed by the Three Vedas, attain the state of going and coming.","translit_title":null,"body_translit":"te taṁ bhuktvā swarga-lokaṁ viśhālaṁ\nkṣhīṇe puṇye martya-lokaṁ viśhanti\nevaṁ trayī-dharmam anuprapannā\ngatāgataṁ kāma-kāmā labhante\n","body_translit_meant":"te—they; tam—that; bhuktvā—having enjoyed; swarga-lokam—heaven; viśhālam—vast; kṣhīṇe—at the exhaustion of; puṇye—stock of merits; martya-lokam—to the earthly plane; viśhanti—return; evam—thus; trayī dharmam—the karm-kāṇḍ portion of the three Vedas; anuprapannāḥ—follow; gata-āgatam—repeated coming and going; kāma-kāmāḥ—desiring objects of enjoyments; labhante—attain\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"4df0449b-fe2c-4124-ba86-fdbee2bab5d6"},{"id":"60df572a-30a0-4dbd-b74f-b4edc4e337cd","type":"verses","target":{"id":"c0933dff-e7b2-4c97-af96-8a7f485e3395","title":null,"body":"Quickly he becomes righteous-minded and attains permanent peace. O son of Kunti! I swear that my devotee never gets lost.","translit_title":null,"body_translit":"kṣhipraṁ bhavati dharmātmā śhaśhvach-chhāntiṁ nigachchhati\nkaunteya pratijānīhi na me bhaktaḥ praṇaśhyati\n","body_translit_meant":"kṣhipram—quickly; bhavati—become; dharma-ātmā—virtuous; śhaśhvat-śhāntim—lasting peace; nigachchhati—attain; kaunteya—Arjun, the son of Kunti; pratijānīhi—declare; na—never; me—my; bhaktaḥ—devotee; praṇaśhyati—perishes\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"e36259b9-9748-484d-b743-9027f167fe58"},{"id":"d1ec6939-8c63-45cf-9877-eba1861eaffa","type":"verses","target":{"id":"eec54625-7db9-405c-a3fe-de77075539da","title":null,"body":"[Also], non-injury, equanimity, contentment, austerity, charity, repute, and ill-repute—all these diverse dispositions of beings emanate from none other than Me.","translit_title":null,"body_translit":"ahiṁsā samatā tuṣṭis tapo dānaṁ yaśo 'yaśaḥ bhavanti bhāvā bhūtānāṁ matta eva pṛthag-vidhāḥ","body_translit_meant":"ahiṁsā—nonviolence; samatā—equilibrium; tuṣṭiḥ—satisfaction; tapaḥ—penance; dānam—charity; yaśaḥ—fame; ayaśaḥ—infamy; bhavanti—become; bhāvāḥ—natures; bhūtānām—of living entities; mattaḥ—from Me; eva—certainly; pṛthakvidhāḥ—differently arranged.","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"695529c3-74c1-46fc-b47e-b4685264c379"},{"id":"1c8a3c60-ba86-4f2a-b65c-5ae9c38d1824","type":"verses","target":{"id":"bf49adcc-c107-47ac-baaf-dabbe9684a3a","title":null,"body":"I am the method, the nourisher, the lord, the witness, the abode, the refuge, the good-hearted friend, the origin, the dissolution, the sustenance, the repository, and the imperishable seed of the world.","translit_title":null,"body_translit":"gatir bhartā prabhuḥ sākṣhī nivāsaḥ śharaṇaṁ suhṛit\nprabhavaḥ pralayaḥ sthānaṁ nidhānaṁ bījam avyayam\n","body_translit_meant":"gatiḥ—the supreme goal; bhartā—sustainer; prabhuḥ—master; sākṣhī—witness; nivāsaḥ—abode; śharaṇam—shelter; su-hṛit—friend; prabhavaḥ—the origin; pralayaḥ—dissolution; sthānam—store house; nidhānam—resting place; bījam—seed; avyayam—imperishable\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"af8bba04-4d37-498d-9d8e-c59c01fca81b"},{"id":"fad25daf-ad1d-44ea-9900-9c69ad4cca0c","type":"verses","target":{"id":"86519c23-9088-4f93-aaad-c193c62a9042","title":null,"body":"Thus, you shall be freed from the good and evil results which are the action-bonds. Having your innate nature immersed in the Yoga of renunciation and, thus, being fully liberated, you shall attain Me.","translit_title":null,"body_translit":"śhubhāśhubha-phalair evaṁ mokṣhyase karma-bandhanaiḥ\nsannyāsa-yoga-yuktātmā vimukto mām upaiṣhyasi\n","body_translit_meant":"śhubha aśhubha phalaiḥ—from good and bad results; evam—thus; mokṣhyase—you shall be freed; karma—work; bandhanaiḥ—from the bondage; sanyāsa-yoga—renunciation of selfishness; yukta-ātmā—having the mind attached to me; vimuktaḥ—liberated; mām—to me; upaiṣhyasi—you shall reach\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"1fd7d12c-cdea-4003-8a90-0aee97b04689"},{"id":"d5145633-9c7e-4eb6-90bc-fae793a21076","type":"verses","target":{"id":"c331fc41-5021-42bf-8d22-1b120eb88d9a","title":null,"body":"Neither the hosts of gods nor the great sages know My origin, for I am the first in every respect among the gods and great sages.","translit_title":null,"body_translit":"na me viduḥ sura-gaṇāḥ prabhavaṁ na maharṣhayaḥ\naham ādir hi devānāṁ maharṣhīṇāṁ cha sarvaśhaḥ\n","body_translit_meant":"na—neither; me—my; viduḥ—know; sura-gaṇāḥ—the celestial gods; prabhavam—origin; na—nor; mahā-ṛiṣhayaḥ—the great sages; aham—I; ādiḥ—the source; hi—certainly; devānām—of the celestial gods; mahā-ṛiṣhīṇām—of the great seers; cha—also; sarvaśhaḥ—in every way\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"913d36c9-e549-474e-8b8e-194565119395"},{"id":"8dab02f6-bf22-47e5-bc6b-0216d0262bb6","type":"verses","target":{"id":"5af46ec4-d8c7-42bd-ba33-1e9b2d9a2df1","title":null,"body":"Arjuna said, \"You are the Supreme Brahman, the Supreme Abode, and the Supreme Purifier. All the seers, as well as the divine seer Narada, Asita Devala, and Vyasa, describe You as the Eternal Divine Soul, the Unborn, and the All-Manifesting First-God. You too have said this to me.\"","translit_title":null,"body_translit":"arjuna uvācha\nparaṁ brahma paraṁ dhāma pavitraṁ paramaṁ bhavān\npuruṣhaṁ śhāśhvataṁ divyam ādi-devam ajaṁ vibhum\n","body_translit_meant":"arjunaḥ uvācha—Arjun said; param—Supreme; brahma—Brahman; param—Supreme; dhāma—Abode; pavitram—purifier; paramam—Supreme; bhavān—you; puruṣham—personality; śhāśhvatam—Eternal; divyam—Divine; ādi-devam—the Primal Being; ajam—the Unborn; vibhum—the Great;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"f8cb8f5d-be8b-426f-838c-5ba2a13ba0ca"},{"id":"326db66f-77fd-45a8-9b05-4742ca6d8ad1","type":"verses","target":{"id":"28813068-d6f4-4d02-810c-cc401c653b49","title":null,"body":"Of the Vedas, I am the Samaveda; of the gods, I am Vasava (Indra); of the sense-organs, I am the mind; of the beings, I am the consciousness.","translit_title":null,"body_translit":"vedānāṁ sāma-vedo ’smi devānām asmi vāsavaḥ\nindriyāṇāṁ manaśh chāsmi bhūtānām asmi chetanā\n","body_translit_meant":"vedānām—amongst the Vedas; sāma-vedaḥ—the Sāma Veda; asmi—I am; devānām—of all the celestial gods; asmi—I am; vāsavaḥ̣—Indra; indriyāṇām—of amongst the senses; manaḥ—the mind; ca—and; asmi—I am; bhūtānām—amongst the living beings; asmi—I am; chetanā—consciousness\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"36251477-88cb-4b86-9a1a-d893e7f180c7"},{"id":"4d33c7ee-a745-443e-ad3a-be6da3f1cdd2","type":"verses","target":{"id":"e7a9425a-449f-4c15-b0da-ac6e118aa678","title":null,"body":"Of the creations, I am the beginning, the end, and the middle, O Arjuna! Of the sciences, I am the science of the Self; of arguers, I am the argument.","translit_title":null,"body_translit":"sargāṇām ādir antaśh cha madhyaṁ chaivāham arjuna\nadhyātma-vidyā vidyānāṁ vādaḥ pravadatām aham\n","body_translit_meant":"sargāṇām—of all creations; ādiḥ—the beginning; antaḥ—end; cha—and; madhyam—middle; cha—and; eva—indeed; aham—I; arjuna—Arjun; adhyātma-vidyā—science of spirituality; vidyānām—amongst sciences; vādaḥ—the logical conclusion; pravadatām—of debates; aham—I\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"31956ef7-a336-4cdd-81be-514a36f99849"},{"id":"594e6c83-1ffb-4315-ba0e-daddbb12d84b","type":"verses","target":{"id":"4780b941-3f2a-4af2-9d42-b5cee13f61c5","title":null,"body":"Or, O Arjuna! Why this detailed explanation? I remain, pervading this entire universe with a single fraction of Myself.","translit_title":null,"body_translit":"atha vā bahunaitena kiṁ jñātena tavārjuna\nviṣhṭabhyāham idaṁ kṛitsnam ekānśhena sthito jagat\n","body_translit_meant":"athavā—or; bahunā—detailed; etena—by this; kim—what; jñātena tava—can be known by you; arjuna—Arjun; viṣhṭabhya—pervade and support; aham—I; idam—this; kṛitsnam—entire; eka—by one; anśhena—fraction; sthitaḥ—am situated; jagat—creation\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"42b378c5-fbc0-4eed-b3bc-69199b0780ba"},{"id":"e56183b0-8e7e-49a6-955f-b3a25ae378c8","type":"verses","target":{"id":"2e52d3cc-ee27-4ce5-8168-b0a6027eb52a","title":null,"body":"It has many mouths and eyes, wondrous sights, heavenly ornaments, and weapons held ready;","translit_title":null,"body_translit":"aneka-vaktra-nayanam anekādbhuta-darśhanam\naneka-divyābharaṇaṁ divyānekodyatāyudham\n","body_translit_meant":"aneka—many; vaktra—faces; nayanam—eyes; aneka—many; adbhuta—wonderful; darśhanam—had a vision of; aneka—many; divya—divine; ābharaṇam—ornaments; divya—divine; aneka—many; udyata—uplifted; āyudham—weapons;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"e54b4349-25a7-42ef-85b0-f923370bc6c7"},{"id":"909d4ea1-fc61-4446-8e92-8429e87e66d9","type":"verses","target":{"id":"4fb21526-0b0a-45c3-9310-050431a63308","title":null,"body":"This space between heaven and earth, as well as all the directions, is pervaded singly by You; seeing this wondrous form of Yours, O Exalted Soul, the triple world is greatly frightened.","translit_title":null,"body_translit":"dyāv ā-pṛithivyor idam antaraṁ hi\nvyāptaṁ tvayaikena diśhaśh cha sarvāḥ\ndṛiṣhṭvādbhutaṁ rūpam ugraṁ tavedaṁ\nloka-trayaṁ pravyathitaṁ mahātman\n","body_translit_meant":"dyau-ā-pṛithivyoḥ—between heaven and earth; idam—this; antaram—space between; hi—indeed; vyāptam—pervaded; tvayā—by you; ekena—alone; diśhaḥ—directions; cha—and; sarvāḥ—all; dṛiṣhṭvā—seeing; adbhutam—wondrous; rūpam—form; ugram—terrible; tava—your; idam—this; loka—worlds; trayam—three; pravyathitam—trembling; mahā-ātman—The greatest of all beings\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"92b8bca4-c76a-462e-b7ad-2fd79f4cfec7"},{"id":"2ee28b22-69a2-4ca5-be32-6f39736c9186","type":"verses","target":{"id":"f12986c5-3c27-41d4-8898-0ab0eee6244c","title":null,"body":"O son of Kunti! Even those who are devotees of other gods and worship them with faith, worship Me alone, but following non-injunctive practices.","translit_title":null,"body_translit":"ye ’pyanya-devatā-bhaktā yajante śhraddhayānvitāḥ\nte ’pi mām eva kaunteya yajantyavidhi-pūrvakam\n","body_translit_meant":"ye—those who; api—although; anya—other; devatā—celestial gods; bhaktāḥ—devotees; yajante—worship; śhraddhayā anvitāḥ—faithfully; te—they; api—also; mām—me; eva—only; kaunteya—Arjun, the son of Kunti; yajanti—worship; avidhi-pūrvakam—by the wrong method\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"d1fe0519-ac5d-4a4d-bef5-e3ac8ff08bf1"},{"id":"d6036e0e-f86e-465b-814b-bb071fac6177","type":"verses","target":{"id":"1da3ec2b-b943-4432-abaa-c34b8776ca9d","title":null,"body":"Certainly, it should be so in the case of the pious men of the priestly class and devoted royal seers. Having come to this transient and joyless world, you should be devoted to Me.","translit_title":null,"body_translit":"kiṁ punar brāhmaṇāḥ puṇyā bhaktā rājarṣhayas tathā\nanityam asukhaṁ lokam imaṁ prāpya bhajasva mām\n","body_translit_meant":"kim—what; punaḥ—then; brāhmaṇāḥ—sages; puṇyāḥ—meritorius; bhaktāḥ—devotees; rāja-ṛiṣhayaḥ—saintly kings; tathā—and; anityam—transient; asukham—joyless; lokam—world; imam—this; prāpya—having achieved; bhajasva—engage in devotion; mām—unto me\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"f4dbfaef-aa21-4490-8b0e-9853833c515e"},{"id":"4a5f972c-ce81-4c4b-a3ea-a236e2776aad","type":"verses","target":{"id":"bf8a38be-ebbd-416c-802a-06350c9bf912","title":null,"body":"He who knows correctly this extensively manifesting power and My Yogic power—he is endowed with unwavering Yoga; there is no doubt about it.","translit_title":null,"body_translit":"etāṁ vibhūtiṁ yogaṁ cha mama yo vetti tattvataḥ\nso ’vikampena yogena yujyate nātra sanśhayaḥ\n","body_translit_meant":"etām—these; vibhūtim—glories; yogam—divine powers; cha—and; mama—my; yaḥ—those who; vetti—know; tattvataḥ—in truth; saḥ—they; avikalpena—unwavering; yogena—in bhakti yog; yujyate—becomes united; na—never; atra—here; sanśhayaḥ—doubt\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"02b5a933-f002-46e7-a873-024eb26f0704"},{"id":"ec055f8c-7cf8-4bbb-99ac-a44540c7cd6f","type":"verses","target":{"id":"2bc4a098-c2e9-4de0-9673-3aacaaa6fec7","title":null,"body":"O Mighty Yogin! How should I know you, meditating on you? In what various forms, O Bhagavat, should I contemplate you?","translit_title":null,"body_translit":"kathaṁ vidyām ahaṁ yogins tvāṁ sadā parichintayan\nkeṣhu keṣhu cha bhāveṣhu chintyo ’si bhagavan mayā\n","body_translit_meant":"katham—how; vidyām aham—shall I know; yogin—the Supreme Master of Yogmaya; tvām—you; sadā—always; parichintayan—meditating; keṣhu—in what; keṣhu—in what; cha—and; bhāveṣhu—forms; chintyaḥ asi—to be thought of; bhagavan—the Supreme Divine Personality; mayā—by me\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"79fa3330-158a-42a6-a69b-29a71663eba3"},{"id":"dfbac014-b739-4481-a419-70aef395cdbc","type":"verses","target":{"id":"2968e0e0-d953-4ba8-8182-7d18908fccf3","title":null,"body":"Of the horses, you should know Me to be the nectar-born Uccaihsravas (Indra's horse); of the best elephants, the Airavata (Indra's elephant); and of the men, their king.","translit_title":null,"body_translit":"uchchaiḥśhravasam aśhvānāṁ viddhi mām amṛitodbhavam\nairāvataṁ gajendrāṇāṁ narāṇāṁ cha narādhipam\n","body_translit_meant":"uchchaiḥśhravasam—Uchchaihshrava; aśhvānām—amongst horses; viddhi—know; mām—me; amṛita-udbhavam—begotten from the churning of the ocean of nectar; airāvatam—Airavata; gaja-indrāṇām—amongst all lordly elephants; narāṇām—amongst humans; cha—and; nara-adhipam—the king\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"19f0cf00-a980-4a6b-9d47-e382acbdf10a"},{"id":"0eeec60e-781f-450f-9ec9-435246d2854e","type":"verses","target":{"id":"07e5eb3f-554c-4091-9807-3a4720058647","title":null,"body":"Of the Vrsnis, I am the son of Vasudeva; of the sons of Pandu, I am Dhananjaya (Arjuna); of the sages, I am Vyasa; and of the seers, I am Usanas.","translit_title":null,"body_translit":"vṛiṣhṇīnāṁ vāsudevo ’smi pāṇḍavānāṁ dhanañjayaḥ\nmunīnām apyahaṁ vyāsaḥ kavīnām uśhanā kaviḥ\n","body_translit_meant":"vṛiṣhṇīnām—amongst the descendants of Vrishni; vāsudevaḥ—Krishna, the son of Vasudev; asmi—I am; pāṇḍavānām—amongst the Pandavas; dhanañjayaḥ—Arjun, the conqueror of wealth; munīnām—amongst the sages; api—also; aham—I; vyāsaḥ—Ved Vyas; kavīnām—amongst the great thinkers; uśhanā—Shukracharya; kaviḥ—the thinker\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"0473b1c8-2845-447a-b7df-8553cdd33a7e"},{"id":"9839f468-8125-4f4a-bdfe-1e1855bf2fe4","type":"verses","target":{"id":"09ea4ced-6e2a-4297-83e1-67e6f5bad484","title":null,"body":"The Bhagavat said, \"Behold, O son of Prtha, My divine forms in hundreds and thousands, of varied nature, colors, and shapes.\"","translit_title":null,"body_translit":"śhrī-bhagavān uvācha\npaśhya me pārtha rūpāṇi śhataśho ’tha sahasraśhaḥ\nnānā-vidhāni divyāni nānā-varṇākṛitīni cha\n","body_translit_meant":"śhrī-bhagavān uvācha—the Supreme Lord said; paśhya—behold; me—my; pārtha—Arjun, the son of Pritha; rūpāṇi—forms; śhataśhaḥ—by the hundreds; atha—and; sahasraśhaḥ—thousands; nānā-vidhāni—various; divyāni—divine; nānā—various; varṇa—colors; ākṛitīni—shapes; cha—and\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"d54516e1-8c6a-47c3-b84a-e348dc41ad63"},{"id":"edd701e5-0dc0-43c6-9283-2a1484bf1c85","type":"verses","target":{"id":"4aa50b89-d6ec-4f37-8978-d714c1e0a800","title":null,"body":"Arjuna said, \"O God! In Your body, I behold all gods and hosts of different kinds of beings—the Lord Brahma seated on the lotus-seat, and all the sages and glowing serpents.\"","translit_title":null,"body_translit":"arjuna uvācha\npaśhyāmi devāns tava deva dehe\nsarvāns tathā bhūta-viśheṣha-saṅghān\nbrahmāṇam īśhaṁ kamalāsana-stham\nṛiṣhīnśh cha sarvān uragānśh cha divyān\n","body_translit_meant":"arjunaḥ uvācha—Arjun said; paśhyāmi—I behold; devān—all the gods; tava—your; deva—Lord; dehe—within the body; sarvān—all; tathā—as well as; bhūta viśheṣha-saṅghān—hosts of different beings; brahmāṇam—Lord Brahma; īśham—Shiv; kamala-āsana-stham—seated on the lotus flower; ṛiṣhīn—sages; cha—and; sarvān—all; uragān—serpents; cha—and; divyān—divine\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"9bd907ea-3592-4966-9437-1654deb57056"},{"id":"39910c76-b2f1-437e-9be0-c3c6efe8a7ba","type":"verses","target":{"id":"030a029c-5b9f-4f70-aef0-157412626a35","title":null,"body":"By merely seeing Your faces, which are frightening with tusks and look like the fire of destruction, I do not know the arters and get no peace. Have mercy, O Lord of gods! O Abode of the Universe!","translit_title":null,"body_translit":"danṣhṭrā-karālāni cha te mukhāni\ndṛiṣhṭvaiva kālānala-sannibhāni\ndiśho na jāne na labhe cha śharma\nprasīda deveśha jagan-nivāsa\n","body_translit_meant":"danṣhṭrā—teeth; karālāni—terrible; cha—and; te—your; mukhāni—mouths; dṛiṣhṭvā—having seen; eva—indeed; kāla-anala—the fire of annihilation; sannibhāni—resembling; diśhaḥ—the directions; na—not; jāne—know; na—not; labhe—I obtain; cha—and; śharma—peace; prasīda—have mercy; deva-īśha—The Lord of lords; jagat-nivāsa—The shelter of the universe\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"5f1e4093-65ff-4b3c-84c0-e2f25ab82ce8"},{"id":"85da9142-9559-4a24-a642-ff3616ac6697","type":"verses","target":{"id":"371d8b9d-f6c8-460e-972d-8163f26a6901","title":null,"body":"For I am the enjoyer and the Lord of all sacrifices, yet they do not recognize Me correctly and thus they turn away.","translit_title":null,"body_translit":"ahaṁ hi sarva-yajñānāṁ bhoktā cha prabhureva cha\nna tu mām abhijānanti tattvenātaśh chyavanti te\n","body_translit_meant":"aham—I; hi—verily; sarva—of all; yajñānām—sacrifices; bhoktā—the enjoyer; cha—and; prabhuḥ—the Lord; eva—only; cha—and; na—not; tu—but; mām—me; abhijānanti—realize; tattvena—divine nature; ataḥ—therefore; chyavanti—fall down (wander in samsara); te—they\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"1fa61656-62bd-4716-a067-bb33903c36b0"},{"id":"2746570c-ef5b-4d47-9ecc-928a4e640624","type":"verses","target":{"id":"4f188b36-a394-4925-8d73-916d6b9151d0","title":null,"body":"Fix your mind on Me; be devoted to Me; offer sacrifice to Me; pay homage to Me. Thus, having your self fixed and Me as your supreme goal, you will certainly attain Me.","translit_title":null,"body_translit":"man-manā bhava mad-bhakto mad-yājī māṁ namaskuru\nmām evaiṣhyasi yuktvaivam ātmānaṁ mat-parāyaṇaḥ\n","body_translit_meant":"mat-manāḥ—always think of me; bhava—be; mat—my; bhaktaḥ—devotee; mat—my; yājī—worshipper; mām—to me; namaskuru—offer obeisances; mām—to me; eva—certainly; eṣhyasi—you will come; yuktvā—united with me; evam—thus; ātmānam—your mind and body; mat-parāyaṇaḥ—having dedicated to me\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"c9a1ce62-75cc-4839-b4de-9aeb34bfca0b"},{"id":"c22561fb-7b49-4549-b25d-009dc33b69bd","type":"verses","target":{"id":"e59c0f4c-f79e-4c94-a67f-be4e3a904670","title":null,"body":"'He is the source of all, and from Him all comes forth' - Thus viewing, the wise revere Me with devotion.","translit_title":null,"body_translit":"ahaṁ sarvasya prabhavo mattaḥ sarvaṁ pravartate\niti matvā bhajante māṁ budhā bhāva-samanvitāḥ\n","body_translit_meant":"aham—I; sarvasya—of all creation; prabhavaḥ—the origin of; mattaḥ—from me; sarvam—everything; pravartate—proceeds; iti—thus; matvā—having known; bhajante—worship; mām—me; budhāḥ—the wise; bhāva-samanvitāḥ—endowed with great faith and devotion\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"07d8ff43-c6d0-440b-b8f0-8902c92a015b"},{"id":"78aa1e81-5ba3-4ff4-92f0-fb869df7798e","type":"verses","target":{"id":"4594b486-434e-431c-bfa8-aa4b5b7f369d","title":null,"body":"In detail, please expound once again Your own Yogic power and the manifesting power. O Janardana! I don't feel contented in hearing Your nectar-like exposition.","translit_title":null,"body_translit":"vistareṇātmano yogaṁ vibhūtiṁ cha janārdana\nbhūyaḥ kathaya tṛiptir hi śhṛiṇvato nāsti me ’mṛitam\n","body_translit_meant":"vistareṇa—in detail; ātmanaḥ—your; yogam—divine glories; vibhūtim—opulences; cha—also; janaārdana—Shree Krishna, he who looks after the public; bhūyaḥ—again; kathaya—describe; tṛiptiḥ—satisfaction; hi—because; śhṛiṇvataḥ—hearing; na—not; asti—is; me—my; amṛitam—nectar\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"26e0df84-233c-4ccc-8e60-b3f02478d3ce"},{"id":"29d5672f-f4f4-429e-aefe-4f8eb047ac49","type":"verses","target":{"id":"de7f065d-6210-4d94-9bf2-d8657a2226c2","title":null,"body":"Of the weapons, I am the Vajra of Indra; of the cows, I am the Wish-fulfilling Cow of the heavens; of the progenitors, I am Kandarpa (the god of love); of the serpents, I am Vasuki.","translit_title":null,"body_translit":"āyudhānām ahaṁ vajraṁ dhenūnām asmi kāmadhuk\nprajanaśh chāsmi kandarpaḥ sarpāṇām asmi vāsukiḥ\n","body_translit_meant":"āyudhānām—amongst weapons; aham—I; vajram—the Vajra (thunderbolt); dhenūnām—amongst cows; asmi—I am; kāma-dhuk—Kamdhenu; prajanaḥ—amongst causes for procreation; cha—and; asmi—I am; kandarpaḥ—Kaamdev, the god of love; sarpāṇām—amongst serpents; asmi—I am; vāsukiḥ—serpent Vasuki\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"761f67be-fe7d-43d6-903b-1d96f8a754ac"},{"id":"22d0b13f-f368-4428-adf8-973627cc0f3e","type":"verses","target":{"id":"95bfbd71-91f6-47fa-a63a-6864ba157780","title":null,"body":"I am the punishment of the punishers; I am the political wisdom of those seeking victory; I am also the silence of the secret ones; I am the knowledge of the knowers.","translit_title":null,"body_translit":"daṇḍo damayatām asmi nītir asmi jigīṣhatām\nmaunaṁ chaivāsmi guhyānāṁ jñānaṁ jñānavatām aham\n","body_translit_meant":"daṇḍaḥ—punishment; damayatām—amongst means of preventing lawlessness; asmi—I am; nītiḥ—proper conduct; asmi—I am; jigīṣhatām—amongst those who seek victory; maunam—silence; cha—and; eva—also; asmi—I am; guhyānām—amongst secrets; jñānam—wisdom; jñāna-vatām—in the wise; aham—I\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"5065637f-f759-418d-953a-9347fc01456d"},{"id":"4105dd40-15d0-4993-acb4-a5715263469a","type":"verses","target":{"id":"d173e25a-db47-4f4b-bb55-01561356618c","title":null,"body":"I have listened in detail from You, O Lotus-eyed One, about the origin and dissolution of beings, as well as Your inexhaustible greatness.","translit_title":null,"body_translit":"bhavāpyayau hi bhūtānāṁ śhrutau vistaraśho mayā\ntvattaḥ kamala-patrākṣha māhātmyam api chāvyayam\n","body_translit_meant":"bhava—appearance; apyayau—disappearance; hi—indeed; bhūtānām—of all living beings; śhrutau—have heard; vistaraśhaḥ—in detail; mayā—by me; tvattaḥ—from you; kamala-patra-akṣha—lotus-eyed one; māhātmyam—greatness; api—also; cha—and; avyayam—eternal\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"9f62498f-bac2-4de8-acd0-92f6b7d2c572"},{"id":"70adc869-a017-4d82-84e7-c4748debf076","type":"verses","target":{"id":"b8990df8-c87a-4079-bb0e-a25b91f708b7","title":null,"body":"If the splendour of a thousand suns were to burst forth at once in the sky, would that be equal to the splendour of that Mighty Self?","translit_title":null,"body_translit":"divi sūrya-sahasrasya bhaved yugapad utthitā\nyadi bhāḥ sadṛiśhī sā syād bhāsas tasya mahātmanaḥ\n","body_translit_meant":"divi—in the sky; sūrya—suns; sahasrasya—thousand; bhavet—were; yugapat—simultaneously; utthitā—rising; yadi—if; bhāḥ—splendor; sadṛiśhī—like; sā—that; syāt—would be; bhāsaḥ—splendor; tasya—of them; mahā-ātmanaḥ—the great personality\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"ecdd10e6-53f7-4048-8c49-efdcd0630db1"},{"id":"cb5d6439-7172-452c-aaf5-e0247e0ee071","type":"verses","target":{"id":"a1eecdae-fac2-48d6-a88c-32d125d1ca85","title":null,"body":"The Rudras, the Adityas, the Vasus, the Sadhyas, the Visvadevas, the twin Asvins, and the Maruts, the Manes, the hosts of the Gandharvas, the Yaksas, the demons, and the perfected ones—all gaze upon You in amazement.","translit_title":null,"body_translit":"rudrādityā vasavo ye cha sādhyā\nviśhve ’śhvinau marutaśh choṣhmapāśh cha\ngandharva-yakṣhāsura-siddha-saṅghā\nvīkṣhante tvāṁ vismitāśh chaiva sarve\n","body_translit_meant":"rudra—a form of Lord Shiv; ādityāḥ—the Adityas; vasavaḥ—the Vasus; ye—these; cha—and; sādhyāḥ—the Sadhyas; viśhve—the Vishvadevas; aśhvinau—the Ashvini kumars; marutaḥ—the Maruts; cha—and; uṣhma-pāḥ—the ancestors; cha—and; gandharva—Gandharvas; yakṣha—the Yakshas; asura—the demons; siddha—the perfected beings; saṅghāḥ—the assemblies; vīkṣhante—are beholding; tvām—you; vismitāḥ—in wonder; cha—and; eva—verily; sarve—all\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"7ed029b9-9774-47d0-a691-cbad3d1475e3"},{"id":"84263681-a860-4e72-9f46-cb63b07f4a2c","type":"verses","target":{"id":"02e8571b-0649-4b48-8b22-93108140d27e","title":null,"body":"Whoever offers Me a leaf, a flower, a fruit, or even a little water with devotion, I accept that offering of devotion from one who has a well-controlled mind.","translit_title":null,"body_translit":"patraṁ puṣhpaṁ phalaṁ toyaṁ yo me bhaktyā prayachchhati\ntadahaṁ bhaktyupahṛitam aśhnāmi prayatātmanaḥ\n","body_translit_meant":"patram—a leaf; puṣhpam—a flower; phalam—a fruit; toyam—water; yaḥ—who; me—to me; bhaktyā—with devotion; prayachchhati—offers; tat—that; aham—I; bhakti-upahṛitam—offered with devotion; aśhnāmi—partake; prayata-ātmanaḥ—one in pure consciousness\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"249adef8-bf8b-4b92-905d-469d9fcdef7a"},{"id":"f5a3e525-0bdf-4117-9ec2-736537b7dc76","type":"chapters","target":{"id":"57f916a2-1626-4f67-ac35-07abd55e238d","title":"Yoga through Appreciating the Infinite Opulences of God","body":"The tenth chapter of the Bhagavad Gita is \"Vibhooti Yoga\". In this chapter, Krishna reveals Himself as the cause of all causes. He describes His various manifestations and opulences in order to increase Arjuna's Bhakti. Arjuna is fully convinced of Lord's paramount position and proclaims him to be the Supreme Personality. He prays to Krishna to describe more of His divine glories which are like nectar to hear.","translit_title":"Vibhūti Yog","body_translit":null,"body_translit_meant":null,"body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":10,"lang":"en"},{"id":"f6134f3e-6e7d-412c-8163-1b3cdac35d01","type":"verses","target":{"id":"c007885a-7d8c-4ec4-bc37-9f4eba3e1b3d","title":null,"body":"To these persons, who thus mingle with Me and revere Me with love, I grant the knowledge-Yoga by which they can reach Me.","translit_title":null,"body_translit":"teṣhāṁ satata-yuktānāṁ bhajatāṁ prīti-pūrvakam\ndadāmi buddhi-yogaṁ taṁ yena mām upayānti te\n","body_translit_meant":"teṣhām—to them; satata-yuktānām—ever steadfast; bhajatām—who engage in devotion; prīti-pūrvakam—with love; dadāmi—I give; buddhi-yogam—divine knowledge; tam—that; yena—by which; mām—to me; upayānti—come; te—they\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"b2ba1591-10a5-4d3e-83f3-c29826d787f6"},{"id":"95b353a4-4000-49ea-959b-0d2ed541ce6e","type":"verses","target":{"id":"f545ba70-27e8-421b-a807-1211eea25129","title":null,"body":"O conqueror of sleep! I am the Soul residing in the hearts of all beings; I am the beginning, the middle, and the very end of all beings.","translit_title":null,"body_translit":"aham ātmā guḍākeśha sarva-bhūtāśhaya-sthitaḥ\naham ādiśh cha madhyaṁ cha bhūtānām anta eva cha\n","body_translit_meant":"aham—I; ātmā—soul; guḍākeśha—Arjun, the conqueror of sleep; sarva-bhūta—of all living entities; āśhaya-sthitaḥ—seated in the heart; aham—I; ādiḥ—the beginning; cha—and; madhyam—middle; cha—and; bhūtānām—of all beings; antaḥ—end; eva—even; cha—also\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"888c3014-bcde-4306-b3b6-c8e331597a8e"},{"id":"b5618a3f-0f96-480c-affc-63894bf7b7bc","type":"verses","target":{"id":"024891cc-2f6d-4a84-aae6-6a84086c25ee","title":null,"body":"No translation is available for this sloka.","translit_title":null,"body_translit":"prahlādaśh chāsmi daityānāṁ kālaḥ kalayatām aham\nmṛigāṇāṁ cha mṛigendro ’haṁ vainateyaśh cha pakṣhiṇām\n","body_translit_meant":"prahlādaḥ—Prahlad; cha—and; asmi—I am; daityānām—of the demons; kālaḥ—time; kalayatām—of all that controls; aham—I; mṛigāṇām—amongst animals; cha—and; mṛiga-indraḥ—the lion; aham—I; vainateyaḥ—Garud; cha—and; pakṣhiṇām—amongst birds\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"97a09726-623e-4b2c-a8df-a911bd1f168a"},{"id":"6ba8e235-c591-4ddf-a318-f4f9f119fc77","type":"verses","target":{"id":"81392a52-3002-4f7d-9e54-cba288b3b4ef","title":null,"body":"O scorcher of foes! There is no end to My extraordinary manifesting power. The above details of My manifesting power have been declared by Me only as examples.","translit_title":null,"body_translit":"nānto ’sti mama divyānāṁ vibhūtīnāṁ parantapa\neṣha tūddeśhataḥ prokto vibhūter vistaro mayā\n","body_translit_meant":"na—not; antaḥ—end; asti—is; mama—my; divyānām—divine; vibhūtīnām—manifestations; parantapa—Arjun, the conqueror of the enemies; eṣhaḥ—this; tu—but; uddeśhataḥ—just one portion; proktaḥ—declared; vibhūteḥ—of (my) glories; vistaraḥ—the breath of the topic; mayā—by me\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"06260a15-ca9b-4983-b8a4-f719ac7d31c4"},{"id":"17b77e6f-bfe8-4a69-8928-cf22d15f6405","type":"verses","target":{"id":"09971e47-c07e-49bf-a885-75ca1c2b35aa","title":null,"body":"Now, behold the entire universe, including the moving and the unmoving, and whatsoever else you desire to see—all established in Me, O Gudakesa (Arjuna)!","translit_title":null,"body_translit":"ihaika-sthaṁ jagat kṛitsnaṁ paśhyādya sa-charācharam\nmama dehe guḍākeśha yach chānyad draṣhṭum ichchhasi\n","body_translit_meant":"iha—here; eka-stham—assembled together; jagat—the universe; kṛitsnam—entire; paśhya—behold; adya—now; sa—with; chara—the moving; acharam—the non- moving; mama—my; dehe—in this form; guḍākeśha—Arjun, the conqueror of sleep; yat—whatever; cha—also; anyat—else; draṣhṭum—to see; ichchhasi—you wish\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"fb73eae2-21f7-495c-9e55-619df0adb096"},{"id":"2d6d316b-03c8-47fc-9646-18305d3ea4bb","type":"verses","target":{"id":"83b79b36-5ec7-4e91-b365-eae1688ec53d","title":null,"body":"I behold You as having crowns, clubs, and discs; as a mass of radiance, shining on all sides, hard to look at and blazing like burning fire and the sun on each side; and as an immeasurable one.","translit_title":null,"body_translit":"kirīṭinaṁ gadinaṁ chakriṇaṁ cha\ntejo-rāśhiṁ sarvato dīptimantam\npaśhyāmi tvāṁ durnirīkṣhyaṁ samantād\ndīptānalārka-dyutim aprameyam\n","body_translit_meant":"kirīṭinam—adorned with a crown; gadinam—with club; chakriṇam—with discs; cha—and; tejaḥ-rāśhim—abode of splendor; sarvataḥ—everywhere; dīpti-mantam—shining; paśhyāmi—I see; tvām—you; durnirīkṣhyam—difficult to look upon; samantāt—in all directions; dīpta-anala—blazing fire; arka—like the sun; dyutim—effulgence; aprameyam—immeasurable\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"b0f9dd2e-480b-475d-9fc4-f7d397e97285"},{"id":"42d47d24-a1df-455d-b944-5a95a8f23980","type":"verses","target":{"id":"fe7995bd-8ed8-4763-aefc-4392a90bb45c","title":null,"body":"They hurry into Your fearsome mouths, with tusks that terrify; some of them, stuck between Your teeth, are clearly visible with their heads crushed.","translit_title":null,"body_translit":"vaktrāṇi te tvaramāṇā viśanti daṁṣṭrā-karālāni bhayānakāni kecid vilagnā daśanāntareṣu sandṛśyante cūrṇitair uttamāṅgaiḥ","body_translit_meant":"vaktrāṇi—mouths; te—Your; tvaramāṇāḥ—fearful; viśanti—entering; daṁṣṭrā—teeth; karālāni—terrible; bhayānakāni—very fearful; kecit—some of them; vilagnāḥ—being attacked; daśanāntareṣu—between the teeth; sandṛśyante—being seen; cūrṇitaiḥ—smashed; uttama-aṅgaiḥ—by the head","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"2d73a142-d892-47bf-b443-a6be51f85b58"},{"id":"d696cd05-2791-4562-a565-2c2387ab33f0","type":"verses","target":{"id":"1c8d5870-7f23-4bfd-9fdc-103e51a5d112","title":null,"body":"Even if an incorrigible evil-doer worships Me, not resorting to any other [goal], he should be deemed to be righteous; for, he has properly undertaken his task.","translit_title":null,"body_translit":"api chet su-durāchāro bhajate mām ananya-bhāk\nsādhur eva sa mantavyaḥ samyag vyavasito hi saḥ\n","body_translit_meant":"api—even; chet—if; su-durāchāraḥ—the vilest sinners; bhajate—worship; mām—me; ananya-bhāk—exclusive devotion; sādhuḥ—righteous; eva—certainly; saḥ—that person; mantavyaḥ—is to be considered; samyak—properly; vyavasitaḥ—resolve; hi—certainly; saḥ—that person\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"a62d51b5-7af3-490e-a468-060ffd7559cb"},{"id":"2e979d2f-7a48-457a-82fd-711fc3ffe8c5","type":"verses","target":{"id":"3500e979-69bf-4ded-b046-fdd0aeb19825","title":null,"body":"Intellect, knowledge, steadiness, patience, truth, control over sense-organs, tranquility of mind, pleasure, pain, birth, death, fear, and courage.","translit_title":null,"body_translit":"buddhir jñānam asammohaḥ kṣhamā satyaṁ damaḥ śhamaḥ\nsukhaṁ duḥkhaṁ bhavo ’bhāvo bhayaṁ chābhayameva cha\n","body_translit_meant":"buddhiḥ—intellect; jñānam—knowledge; asammohaḥ—clarity of thought; kṣhamā—forgiveness; satyam—truthfulness; damaḥ—control over the senses; śhamaḥ—control of the mind; sukham—joy; duḥkham—sorrow; bhavaḥ—birth; abhāvaḥ—death; bhayam—fear; cha—and; abhayam—courage; eva—certainly; cha—and;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"7f8168d6-090d-4722-84e2-81e975c255d2"},{"id":"6a05c7b6-db46-4ec7-894f-ef3c011ec4d2","type":"verses","target":{"id":"216f1d83-a310-43f0-8d32-7ced4bb6674a","title":null,"body":"What You tell me, I take all to be true, O Kesava! For, O Bhagavat, neither the gods nor the great sages know Your manifestation.","translit_title":null,"body_translit":"sarvam etad ṛitaṁ manye yan māṁ vadasi keśhava\nna hi te bhagavan vyaktiṁ vidur devā na dānavāḥ\n","body_translit_meant":"sarvam—everything; etat—this; ṛitam—truth; manye—I accept; yat—which; mām—me; vadasi—you tell; keśhava—Shree Krishna, the killer of the demon named Keshi; na—neither; hi—verily; te—your; bhagavan—the Supreme Lord; vyaktim—personality; viduḥ—can understand; devāḥ—the celestial gods; na—nor; dānavāḥ—the demons\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"cc78a6ff-72b0-4839-a52e-6f62a5c18012"},{"id":"cbd3fe60-c90a-492f-9fc7-0f5fc612cda4","type":"verses","target":{"id":"96a988aa-837f-48f7-8628-c175805191cd","title":null,"body":"Of the royal priests, I am the chief, viz., Brhaspati (the priest of gods), O son of Prtha; you should know that. Of the army generals, I am Skanda [the War-god]; of the water reservoirs, I am the ocean.","translit_title":null,"body_translit":"purodhasāṁ cha mukhyaṁ māṁ viddhi pārtha bṛihaspatim\nsenānīnām ahaṁ skandaḥ sarasām asmi sāgaraḥ\n","body_translit_meant":"purodhasām—amongst priests; cha—and; mukhyam—the chiefs; mām—me; viddhi—know; pārtha—Arjun, the son of Pritha; bṛihaspatim—Brihaspati; senānīnām—warrior chief; aham—I; skandaḥ—Kartikeya; sarasām—amongst reservoirs of water; asmi—I am; sāgaraḥ—the ocean\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"3bfec114-1925-4361-841d-92d39c762006"},{"id":"1a772a14-f8fd-475d-b1af-b214752b99a7","type":"verses","target":{"id":"2bb7ff9c-6a47-4675-b151-5f7aec9a8f2b","title":null,"body":"I am the Death that carries away all and also the Birth of all that are to be born; of the wives of men, I am Fame, Fortune, Speech, Memory, Wisdom, Constancy, and Patience.","translit_title":null,"body_translit":"mṛityuḥ sarva-haraśh chāham udbhavaśh cha bhaviṣhyatām\nkīrtiḥ śhrīr vāk cha nārīṇāṁ smṛitir medhā dhṛitiḥ kṣhamā\n","body_translit_meant":"mṛityuḥ—death; sarva-haraḥ—all-devouring; cha—and; aham—I; udbhavaḥ—the origin; cha—and; bhaviṣhyatām—those things that are yet to be; kīrtiḥ—fame; śhrīḥ—prospective; vāk—fine speech; cha—and; nārīṇām—amongst feminine qualities; smṛitiḥ—memory; medhā—intelligence; dhṛitiḥ—courage; kṣhamā—forgiveness\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"fb5395da-5275-45e3-87be-751eda38c0c9"},{"id":"53cc41ca-bfff-4b61-9d1a-c4c42d4deef6","type":"chapters","target":{"id":"aa34d4c9-88ab-4c32-b322-fe3da10e6a7c","title":"Yoga through Beholding the Cosmic Form of God","body":"The eleventh chapter of the Bhagavad Gita is \"Vishwaroopa Darshana Yoga\". In this chapter, Arjuna requests Krishna to reveal His Universal Cosmic Form that encompasses all the universes, the entire existence. Arjuna is granted divine vision to be able to see the entirety of creation in the body of the Supreme Lord Krishna.","translit_title":"Viśhwarūp Darśhan Yog","body_translit":null,"body_translit_meant":null,"body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":11,"lang":"en"},{"id":"f0a1f9d6-9e23-4c47-b944-981c1aa5e041","type":"verses","target":{"id":"ec66ca74-4663-4d98-ab59-755bda3e27e8","title":null,"body":"Sanjaya said, \"O king! Having thus stated, Hari, the mighty Lord of the Yogins, showed to the son of Prtha His own Supreme Lordly form.\"","translit_title":null,"body_translit":"sañjaya uvācha\nevam uktvā tato rājan mahā-yogeśhvaro hariḥ\ndarśhayām āsa pārthāya paramaṁ rūpam aiśhwaram\n","body_translit_meant":"sañjayaḥ uvācha—Sanjay said; evam—thus; uktvā—having spoken; tataḥ—then; rājan—King; mahā-yoga-īśhvaraḥ—the Supreme Lord of Yog; hariḥ—Shree Krishna; darśhayām āsa—displayed; pārthāya—to Arjun; paramam—divine; rūpam aiśhwaram—opulence\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"9010984f-c3c2-4a9e-beb8-c6d5b4b434f2"},{"id":"35e779fc-9338-416b-9670-05269b279973","type":"verses","target":{"id":"2f98e523-ea55-4ab1-a4c8-5467e2597d74","title":null,"body":"I observe You with no beginning, no middle, and no end; having infinite creative power and infinite arms; with the moon and the sun as Your eyes and the blazing fire as Your mouth; and scorching this universe with Your radiance.","translit_title":null,"body_translit":"स्वतेजसा विश्वमिदं तपन्तम् || 19||\n","body_translit_meant":"anādi-madhyāntam ananta-vīryam\nananta-bāhuṁ śhaśhi-sūrya-netram\npaśhyāmi tvāṁ dīpta-hutāśha-vaktraṁ\nsva-tejasā viśhvam idaṁ tapantam\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"70a18e99-5b7c-4a3e-96fd-3dc05f462fd0"},{"id":"c2d3737b-8300-4a6e-95ef-0f435c3dabd3","type":"verses","target":{"id":"cbb88d8f-198b-4eba-af06-a677f400f121","title":null,"body":"Just as moths, with full speed, enter into the flaming fire for their own destruction, in the same manner the worlds also enter, with full speed, into the mouths of Yours for their own destruction.","translit_title":null,"body_translit":"yathā pradīptaṁ jvalanaṁ pataṅgā\nviśhanti nāśhāya samṛiddha-vegāḥ\ntathaiva nāśhāya viśhanti lokās\ntavāpi vaktrāṇi samṛiddha-vegāḥ\n","body_translit_meant":"yathā—as; pradīptam—blazing; jvalanam—fire; pataṅgāḥ—moths; viśhanti—enter; nāśhāya—to be perished; samṛiddha vegāḥ—with great speed; tathā eva—similarly; nāśhāya—to be perished; viśhanti—enter; lokāḥ—these people; tava—your; api—also; vaktrāṇi—mouths; samṛiddha-vegāḥ—with great speed\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"500d6fc0-eb98-45e5-848a-7463f9fd2da0"},{"id":"4ce6289d-ae4d-4bdb-a893-3f1a1ed6a096","type":"verses","target":{"id":"653421e4-4cff-486d-bcfd-d90ff3aea2f8","title":null,"body":"The Bhagavat said, \"O mighty-armed Arjuna! Listen to My best message once more, which I shall declare to you with good intention, for you are dear to Me.\"","translit_title":null,"body_translit":"śhrī bhagavān uvācha\nbhūya eva mahā-bāho śhṛiṇu me paramaṁ vachaḥ\nyatte ’haṁ prīyamāṇāya vakṣhyāmi hita-kāmyayā\n","body_translit_meant":"śhrī-bhagavān uvācha—the Blessed Lord said; bhūyaḥ—again; eva—verily; mahā-bāho—mighty armed one; śhṛiṇu—hear; me—my; paramam—divine; vachaḥ—teachings; yat—which; te—to you; aham—I; prīyamāṇāya—you are my beloved confidant; vakṣhyāmi—say; hita-kāmyayā—for desiring your welfare\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"cef1495e-b78d-4313-a2e4-d149ce1114c0"},{"id":"ade28ca7-4dce-4604-a905-a15da6a14e1b","type":"verses","target":{"id":"4df9eafd-b8c5-4d24-8286-f232be1bfc96","title":null,"body":"Out of compassion only towards these men, I, who remain as their very Self, destroy with the shining light of wisdom, their darkness born of ignorance.","translit_title":null,"body_translit":"teṣhām evānukampārtham aham ajñāna-jaṁ tamaḥ\nnāśhayāmyātma-bhāva-stho jñāna-dīpena bhāsvatā\n","body_translit_meant":"teṣhām—for them; eva—only; anukampā-artham—out of compassion; aham—I; ajñāna-jam—born of ignorance; tamaḥ—darkness; nāśhayāmi—destroy; ātma-bhāva—within their hearts; sthaḥ—dwelling; jñāna—of knowledge; dīpena—with the lamp; bhāsvatā—luminous\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"1359b71c-df1d-4a0f-8e79-1729a628f835"},{"id":"64d508af-1a76-4c7b-aa7e-c0bcd2465031","type":"verses","target":{"id":"9cea96ca-8777-4970-8915-6fee5a775acb","title":null,"body":"Of the sons of Aditi, I am Vishnu; of the luminaries, the radiant Sun; of the Maruts, I am Marici; of the stars, I am the Moon.","translit_title":null,"body_translit":"ādityānām ahaṁ viṣhṇur jyotiṣhāṁ ravir anśhumān\nmarīchir marutām asmi nakṣhatrāṇām ahaṁ śhaśhī\n","body_translit_meant":"ādityānām—amongst the twelve sons of Aditi; aham—I; viṣhṇuḥ—Lord Vishnu; jyotiṣhām—amongst luminous objects; raviḥ—the sun; anśhu-mān—radiant; marīchiḥ—Marichi; marutām—of the Maruts; asmi—(I) am; nakṣhatrāṇām—amongst the stars; aham—I; śhaśhī—the moon\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"2f5cfba7-92bf-4609-a877-5d32d65a1334"},{"id":"47de9443-6b6a-4542-9cef-64749e91792b","type":"verses","target":{"id":"619ec5db-9766-46fe-8006-0a6545f8a35b","title":null,"body":"Of the progeny of Diti, I am Prahlada; of the measuring ones, I am the shark; of rivers, I am the daughter of Jahnu—the Ganga.","translit_title":null,"body_translit":"pavanaḥ pavatām asmi rāmaḥ śhastra-bhṛitām aham\njhaṣhāṇāṁ makaraśh chāsmi srotasām asmi jāhnavī\n","body_translit_meant":"pavanaḥ—the wind; pavatām—of all that purifies; asmi—I am; rāmaḥ—Ram; śhastra-bhṛitām—of the carriers of weapons; aham—I am; jhaṣhāṇām—of all acquatics; makaraḥ—crocodile; cha—also; asmi—I am; srotasām—of flowing rivers; asmi—I am; jāhnavī—the Ganges\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"0345ba81-5063-4370-bf6b-461ed575fa79"},{"id":"56c783a3-519f-474b-a3a1-04b0f8db36a6","type":"verses","target":{"id":"0a2ff82b-a3c0-44ad-a5f9-6f55f3a30cf9","title":null,"body":"Whatever being exists with manifesting power, beauty, and vigor, be sure that it is born only from a bit of My illumination.","translit_title":null,"body_translit":"yad yad vibhūtimat sattvaṁ śhrīmad ūrjitam eva vā\ntat tad evāvagachchha tvaṁ mama tejo ’nśha-sambhavam\n","body_translit_meant":"yat yat—whatever; vibhūtimat—opulent; sattvam—being; śhrī-mat—beautiful; ūrjitam—glorious; eva—also; vā—or; tat tat—all that; eva—only; avagachchha—know; tvam—you; mama—my; tejaḥ-anśha-sambhavam—splendor; anśha—a part; sambhavam—born of\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"0595f7c3-0c4f-4041-851a-e861f12339c1"},{"id":"353818c9-5e7f-4d89-ba1d-7c2e4cefb035","type":"verses","target":{"id":"8b8f3c5d-b644-4bae-bc15-ef36a1935574","title":null,"body":"As You describe Yourself to be the Supreme Lord, it must be so. O Supreme Self, I desire to behold Your divine form.","translit_title":null,"body_translit":"evam etad yathāttha tvam ātmānaṁ parameśhvara\ndraṣhṭum ichchhāmi te rūpam aiśhwaraṁ puruṣhottama\n","body_translit_meant":"evam—thus; etat—this; yathā—as; āttha—have spoken; tvam—you; ātmānam—yourself; parama-īśhvara—Supreme Lord; draṣhṭum—to see; ichchhāmi—I desire; te—your; rūpam—form; aiśhwaram—divine; puruṣha-uttama—Shree Krishna, the Supreme Divine Personality\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"1e94c8ac-cf29-4467-9bfd-e16be8dd97f4"},{"id":"140eccb4-fd25-4628-bdd4-654865c41bec","type":"verses","target":{"id":"e58c4cc1-f570-4325-bc9b-e4c09b44bdd0","title":null,"body":"At that time, the son of Pandu beheld, in the body of the God-of-Gods, the entire universe, united yet divided into many groups.","translit_title":null,"body_translit":"tatraika-sthaṁ jagat kṛitsnaṁ pravibhaktam anekadhā\napaśhyad deva-devasya śharīre pāṇḍavas tadā\n","body_translit_meant":"tatra—there; eka-stham—established in one place; jagat—the universe; kṛitsnam—entire; pravibhaktam—divided; anekadhā—many; apaśhyat—could see; deva-devasya—of the God of gods; śharīre—in the body; pāṇḍavaḥ—Arjun; tadā—at that time\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"4cf1b473-45f7-480d-83e7-78f00fe8ddba"},{"id":"4032392d-a93b-4c2e-94cf-b17ea52e1685","type":"verses","target":{"id":"7254e1b1-3274-4669-8dc1-d7a97db65df5","title":null,"body":"O Mighty-armed One! Having seen Your mighty form, with its many faces and eyes, many arms, thighs, feet, and bellies, and its terrible array of tusks, the worlds are frightened, as am I.","translit_title":null,"body_translit":"rūpaṁ mahat te bahu-vaktra-netraṁ\nmahā-bāho bahu-bāhūru-pādam\nbahūdaraṁ bahu-danṣhṭrā-karālaṁ\ndṛiṣhṭvā lokāḥ pravyathitās tathāham\n","body_translit_meant":"rūpam—form; mahat—magnificent; te—your; bahu—many; vaktra—mouths; netram—eyes; mahā-bāho—mighty-armed Lord; bahu—many; bāhu—arms; ūru—thighs; pādam—legs; bahu-udaram—many stomachs; bahu-danṣhṭrā—many teeth; karālam—terrifying; dṛiṣhṭvā—seeing; lokāḥ—all the worlds; pravyathitāḥ—terror-stricken; tathā—so also; aham—I\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"15b573ba-95cd-4360-8ab1-cd5de5cec624"},{"id":"8b54c8c6-b3f9-4414-a349-8f94f7a9eefa","type":"verses","target":{"id":"8332fdce-9572-4f15-a8ee-59b7547947f2","title":null,"body":"Therefore, stand up, win glory, and vanquish your foes; enjoy the rich kingdom; for these foes have already been killed by Myself; be a mere token cause in their destruction, O ambidextrous archer!","translit_title":null,"body_translit":"tasmāt tvam uttiṣhṭha yaśho labhasva\njitvā śhatrūn bhuṅkṣhva rājyaṁ samṛiddham\nmayaivaite nihatāḥ pūrvam eva\nnimitta-mātraṁ bhava savya-sāchin\n","body_translit_meant":"tasmāt—therefore; tvam—you; uttiṣhṭha—arise; yaśhaḥ—honor; labhasva—attain; jitvā—conquer; śhatrūn—foes; bhuṅkṣhva—enjoy; rājyam—kingdom; samṛiddham—prosperous; mayā—by me; eva—indeed; ete—these; nihatāḥ—slain; pūrvam—already; eva nimitta-mātram—only an instrument; bhava—become; savya-sāchin—Arjun, the one who can shoot arrows with both hands\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"d41d460f-13b8-40dc-9c80-13afaa544b07"},{"id":"963f1194-bebf-410b-b810-ad1927c2dd4d","type":"verses","target":{"id":"739f8e80-fafb-4651-b6c3-3f0b2987ff4f","title":null,"body":"Having their minds fixed on Me, having their lives gone into Me, enlightening one another, and constantly talking about Me, they are pleased and delighted.","translit_title":null,"body_translit":"mach-chittā mad-gata-prāṇā bodhayantaḥ parasparam\nkathayantaśh cha māṁ nityaṁ tuṣhyanti cha ramanti cha\n","body_translit_meant":"mat-chittāḥ—those with minds fixed on me; mat-gata-prāṇāḥ—those who have surrendered their lives to me; bodhayantaḥ—enlightening (with divine knowledge of God); parasparam—one another; kathayantaḥ—speaking; cha—and; mām—about me; nityam—continously; tuṣhyanti—satisfaction; cha—and; ramanti—(they) delight; cha—also\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"d73010e7-2f5d-4bbb-b79f-efa4edaf918e"},{"id":"700ec028-3dfa-464f-9580-c95f5b0d6927","type":"verses","target":{"id":"6ac3db40-2d7a-400e-ba2f-15511659263c","title":null,"body":"The Bhagavat said, \"Yes, O best among the Kurus! I shall expound to you only the chief, auspicious manifesting powers of Mine, for there would be no end to My details.\"","translit_title":null,"body_translit":"śhrī bhagavān uvācha\nhanta te kathayiṣhyāmi divyā hyātma-vibhūtayaḥ\nprādhānyataḥ kuru-śhreṣhṭha nāstyanto vistarasya me\n","body_translit_meant":"śhrī-bhagavān uvācha—the Blessed Lord spoke; hanta—yes; te—to you; kathayiṣhyāmi—I shall describe; divyāḥ—divine; hi—certainly; ātma-vibhūtayaḥ—my divine glories; prādhānyataḥ—salient; kuru-śhreṣhṭha—best of the Kurus; na—not; asti—is; antaḥ—limit; vistarasya—extensive glories; me—my\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"9f589873-4c8a-4c4b-b395-d28af229c797"},{"id":"30e96e75-8aa2-48e2-8075-1db293b47295","type":"verses","target":{"id":"313fa385-b1c7-4532-8f75-5d7e7a02f7b0","title":null,"body":"Of the snakes, I am Ananta; of the water-beings, I am Varuna; of the manes, I am Aryaman; of the controllers, I am Yama (the Death-god).","translit_title":null,"body_translit":"anantaśh chāsmi nāgānāṁ varuṇo yādasām aham\npitṝīṇām aryamā chāsmi yamaḥ sanyamatām aham\n","body_translit_meant":"anantaḥ—Anant; cha—and; asmi—I am; nāgānām—amongst snakes; varuṇaḥ—the celestial god of the ocean; yādasām—amongst aquatics; aham—I; pitṝīṇām—amongst the departed ancestors; aryamā—Aryama; cha—and; asmi—am; yamaḥ—the celestial god of death; sanyamatām—amongst dispensers of law; aham—I\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"ee1a7b80-b5e6-4dec-83ef-60a94bb28335"},{"id":"e283820b-18fb-4a61-8e39-278962a1722f","type":"verses","target":{"id":"3405fc4c-f0e6-49d9-a240-a05958651406","title":null,"body":"Further, O Arjuna, I am the seed of all beings; there is no being, whether moving or non-moving, that can exist without Me.","translit_title":null,"body_translit":"yach chāpi sarva-bhūtānāṁ bījaṁ tad aham arjuna\nna tad asti vinā yat syān mayā bhūtaṁ charācharam\n","body_translit_meant":"yat—which; cha—and; api—also; sarva-bhūtānām—of all living beings; bījam—generating seed; tat—that; aham—I; arjuna—Arjun; na—not; tat—that; asti—is; vinā—without; yat—which; syāt—may exist; mayā—me; bhūtam—creature; chara-acharam—moving and nonmoving\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"53df9e90-f9db-478c-ba58-22ff5917271b"},{"id":"cbb2fb7d-55fb-4a01-8490-ebcf2fb23416","type":"verses","target":{"id":"67e0af1f-1b83-4129-9794-f777a8ec5af7","title":null,"body":"But you cannot see Me with just this eye of yours; therefore, I give you the divine eye. Now, behold My divine form.","translit_title":null,"body_translit":"na tu māṁ śhakyase draṣhṭum anenaiva sva-chakṣhuṣhā\ndivyaṁ dadāmi te chakṣhuḥ paśhya me yogam aiśhwaram\n","body_translit_meant":"na—not; tu—but; mām—me; śhakyase—you can; draṣhṭum—to see; anena—with these; eva—even; sva-chakṣhuṣhā—with your physical eyes; divyam—divine; dadāmi—I give; te—to you; chakṣhuḥ—eyes; paśhya—behold; me—my; yogam aiśhwaram—majestic opulence\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"0976c84e-a1b4-4db9-ae3a-a1d3314fa709"},{"id":"32c6d791-6ee0-4339-9a2c-d51fdc006cd6","type":"verses","target":{"id":"7b329c9a-6328-4007-b693-6d7d929b94ca","title":null,"body":"You are the imperishable, the Supreme Being to be known; You are the ultimate place of rest for this universe; You are changeless and the guardian of the pious acts of the Satvatas; You are the everlasting Soul, I believe.","translit_title":null,"body_translit":"tvam akṣharaṁ paramaṁ veditavyaṁ\ntvam asya viśhvasya paraṁ nidhānam\ntvam avyayaḥ śhāśhvata-dharma-goptā\nsanātanas tvaṁ puruṣho mato me\n","body_translit_meant":"tvam—you; akṣharam—the imperishable; paramam—the supreme being; veditavyam—worthy of being known; tvam—you; asya—of this; viśhwasya—of the creation; param—supreme; nidhānam—support; tvam—you; avyayaḥ—eternal; śhāśhvata-dharma-goptā—protector of the eternal religion; sanātanaḥ—everlasting; tvam—you; puruṣhaḥ—the Supreme Divine Person; mataḥ me—my opinion\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"d1ff9f9c-be0f-4c1e-b0ad-1f7de863da43"},{"id":"7b5fdb68-46af-44eb-8506-88330ca0f371","type":"verses","target":{"id":"a45ebe2c-647f-43e5-a530-461264d3cee3","title":null,"body":"Just as many water-rapids of the rivers race heading towards the ocean, in the same manner these heroes of the world of men enter into Your mouths, flaming all around.","translit_title":null,"body_translit":"yathā nadīnāṁ bahavo ’mbu-vegāḥ\nsamudram evābhimukhā dravanti\ntathā tavāmī nara-loka-vīrā\nviśhanti vaktrāṇy abhivijvalanti\n","body_translit_meant":"yathā—as; nadīnām—of the rivers; bahavaḥ—many; ambu-vegāḥ—water waves; samudram—the ocean; eva—indeed; abhimukhāḥ—toward; dravanti—flowing rapidly; tathā—similarly; tava—your; amī—these; nara-loka-vīrāḥ—kings of human society; viśhanti—enter; vaktrāṇi—mouths; abhivijvalanti—blazing;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"c787b66f-f4e5-42e6-85c5-6c2352866135"},{"id":"6d85aca7-c258-4fb1-81fd-3be5f1d368e6","type":"verses","target":{"id":"8362493b-c7d9-4c63-a20b-b8191bdc7360","title":null,"body":"You are the Primal God; You are the Ancient Soul; You are the transcendent place of rest for this universe; You are the knower and the knowable; You are the Highest Abode; and the universe with its infinite forms is pervaded by You.","translit_title":null,"body_translit":"tvam ādi-devaḥ puruṣhaḥ purāṇas\ntvam asya viśhvasya paraṁ nidhānam\nvettāsi vedyaṁ cha paraṁ cha dhāma\ntvayā tataṁ viśhvam ananta-rūpa\n","body_translit_meant":"tvam—you; ādi-devaḥ—the original Divine God; puruṣhaḥ—personality; purāṇaḥ—primeval; tvam—you; asya—of (this); viśhwasya—universe; param—Supreme; nidhānam—resting place; vettā—the knower; asi—you are; vedyam—the object of knowledge; cha—and; param—Supreme; cha—and; dhāma—Abode; tvayā—by you; tatam—pervaded; viśhwam—the universe; ananta-rūpa—posessor of infinite forms\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"9808ea78-15ac-490e-879c-374c6b9eee0d"},{"id":"3da4f061-95cb-4af7-af52-ac5e0c1ccdd8","type":"verses","target":{"id":"320b480e-6d3e-4778-a25c-7bbda7f9e669","title":null,"body":"Who, by properly restraining the group of sense-organs, remain equanimous at all stages and find pleasure in the welfare of all beings—they attain nothing but Me.","translit_title":null,"body_translit":"sanniyamyendriya-grāmaṁ sarvatra sama-buddhayaḥ te prāpnuvanti mām eva sarva-bhūta-hite ratāḥ","body_translit_meant":"sanniyamya-controlling; indriya-grāmam—all the senses; sarvatra—everywhere; sama-buddayaḥ—equally disposed; te-they; prāpnuvanti—achieve; mām—unto Me; eva—certainly; sarva-bhūtahite—all living entities' welfare; ratāḥ—engaged.","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"75bdb63a-112c-4fce-ab4c-3763843a7aa0"},{"id":"654b3b2f-3c70-4c7b-8f1c-c455cd3f637c","type":"verses","target":{"id":"79485b91-cf73-4fea-9c82-5119318b27f4","title":null,"body":"Arjuna said, \"You are the Supreme Brahman, the Supreme Abode, and the Supreme Purifier. All the seers, as well as the divine seer Narada, Asita Devala, and Vyasa, describe You as the Eternal Divine Soul, the Unborn, and the All-Manifesting First-God. You too have said this to me.\"","translit_title":null,"body_translit":"āhus tvām ṛiṣhayaḥ sarve devarṣhir nāradas tathā\nasito devalo vyāsaḥ svayaṁ chaiva bravīṣhi me\n","body_translit_meant":"āhuḥ—(they) declare; tvām—you; ṛiṣhayaḥ—sages; sarve—all; deva-ṛiṣhiḥ-nāradaḥ—devarṣhi Narad; tathā—also; asitaḥ—Asit; devalaḥ—Deval; vyāsaḥ—Vyās; svayam—personally; cha—and; eva—even; bravīṣhī—you are declaring; me—to me\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"1179983e-cc16-420b-a5a7-7370c2b3a660"},{"id":"6970ba4e-e8c6-46a0-a4ef-e5723dc8320d","type":"verses","target":{"id":"e2bd0051-84d4-4553-b2d9-7c8beefcdb04","title":null,"body":"And of the Rudras, I am Sankara; of the Yaksas and the Raksas, I am the Lord of Wealth (Kubera); of the Vasus, I am the Fire-God; of the mountains, I am Meru.","translit_title":null,"body_translit":"rudrāṇāṁ śhaṅkaraśh chāsmi vitteśho yakṣha-rakṣhasām\nvasūnāṁ pāvakaśh chāsmi meruḥ śhikhariṇām aham\n","body_translit_meant":"rudrāṇām—amongst the Rudras; śhaṅkaraḥ—Lord Shiv; cha—and; asmi—I am; vitta-īśhaḥ—the god of wealth and the treasurer of the celestial gods; yakṣha—amongst the semi-divine demons; rakṣhasām—amongst the demons; vasūnām—amongst the Vasus; pāvakaḥ—Agni (fire); cha—and; asmi—I am; meruḥ—Mount Meru; śhikhariṇām—amongst the mountains; aham—I am\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"9914b0f9-6f49-4abd-98af-0ce49a9394c4"},{"id":"80c6f858-5b90-4eed-a558-05dcf70069a7","type":"verses","target":{"id":"65b97ca7-00c1-4ceb-8ca3-a3eb3d810d05","title":null,"body":"Of the syllables, I am A; of the compounds, the Dvandva; none but Me is immortal Time; I am the dispenser of fruits of actions, facing on all sides.","translit_title":null,"body_translit":"अहमेवाक्षय: कालो धाताहं विश्वतोमुख: || 33||\n\nakṣharāṇām a-kāro ’smi dvandvaḥ sāmāsikasya cha\naham evākṣhayaḥ kālo dhātāhaṁ viśhvato-mukhaḥ\n","body_translit_meant":"akṣharāṇām—amongst all letters; a-kāraḥ—the beginning letter “A”; asmi—I am; dvandvaḥ—the dual; sāmāsikasya—amongst grammatical compounds; cha—and; aham—I; eva—only; akṣhayaḥ—endless; kālaḥ—time; dhātā—amongst the creators; aham—I; viśhwataḥ-mukhaḥ—Brahma\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"a7722982-c300-4896-8bfc-d1ada33e8f69"},{"id":"990f97ec-ded4-4c64-9f05-6a35c3ff9a77","type":"verses","target":{"id":"30a992ff-a7bf-4cfa-aea3-b937452859bf","title":null,"body":"Behold the Adityas, the Vasus, the Rudras, the twin Ashvins, and the Maruts; O son of Pandu, behold also many wonders that had never been seen before.","translit_title":null,"body_translit":"paśhyādityān vasūn rudrān aśhvinau marutas tathā\nbahūny adṛiṣhṭa-pūrvāṇi paśhyāśhcharyāṇi bhārata\n","body_translit_meant":"paśhya—behold; ādityān—the (twelve) sons of Aditi; vasūn—the (eight) Vasus; rudrān—the (eleven) Rudras; aśhvinau—the (twin) Ashvini Kumars; marutaḥ—the (forty-nine) Maruts; tathā—and; bahūni—many; adṛiṣhṭa—never revealed; pūrvāṇi—before; paśhya—behold; āśhcharyāṇi—marvels; bhārata—Arjun, scion of the Bharatas\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"30e17677-ef5b-4779-9ea9-4d2c8d297e4d"},{"id":"947e5083-7016-4a67-8e2c-b49cedb23cc0","type":"verses","target":{"id":"3448d556-4621-4cf5-b3ad-de93220a8b7b","title":null,"body":"I behold You with many arms, bellies, mouths, and eyes, and with infinite forms on all sides; I find neither the end nor the center nor the beginning of You, O Lord of the Universe, O Universal-Formed One!","translit_title":null,"body_translit":"aneka-bāhūdara-vaktra-netraṁ\npaśhyāmi tvāṁ sarvato ’nanta-rūpam\nnāntaṁ na madhyaṁ na punas tavādiṁ\npaśhyāmi viśhveśhvara viśhva-rūpa\n","body_translit_meant":"aneka—infinite; bāhu—arms; udara—stomachs; vaktra—faces; netram—eyes; paśhyāmi—I see; tvām—you; sarvataḥ—in every direction; ananta-rūpam—inifinite forms; na antam—without end; na—not; madhyam—middle; na—no; punaḥ—again; tava—your; ādim—beginning; paśhyāmi—I see; viśhwa-īśhwara—The Lord of the universe; viśhwa-rūpa—universal form\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"a446a263-8588-4e58-9b65-c96e30798f1c"},{"id":"3e4a58d4-da95-40e5-89bf-1f6c94015eb1","type":"verses","target":{"id":"36cb3f10-e378-4269-bf08-df72101726ce","title":null,"body":"All these sons of Dhrtarastra, along with the entire host of kings, Bhisma, Drona, and the son of the charioteer (Karna), together with the chief warriors of ours as well;","translit_title":null,"body_translit":"amī cha tvāṁ dhṛitarāśhtrasya putrāḥ\nsarve sahaivāvani-pāla-saṅghaiḥ\nbhīṣhmo droṇaḥ sūta-putras tathāsau\nsahāsmadīyair api yodha-mukhyaiḥ\n vaktrāṇi te tvaramāṇā viśhanti\ndanṣhṭrā-karālāni bhayānakāni\nkechid vilagnā daśhanāntareṣhu\nsandṛiśhyante chūrṇitair uttamāṅgaiḥ\n","body_translit_meant":"amī—these; cha—and; tvām—you; dhṛitarāśhtrasya—of Dhritarashtra; putrāḥ—sons; sarve—all; saha—with; eva—even; avani-pāla—their allied kings; sanghaiḥ—assembly; bhīṣhmaḥ—Bheeshma; droṇaḥ—Dronacharya; sūta-putraḥ—Karna; tathā—and also; asau—this; saha—with; asmadīyaiḥ—from our side; api—also; yodha-mukhyaiḥ—generals;\n vaktrāṇi—mouths; te—your; tvaramāṇāḥ—rushing; viśhanti—enter; danṣhṭrā—teeth; karālāni—terrible; bhayānakāni—fearsome; kechit—some; vilagnāḥ—getting stuck; daśhana-antareṣhu—between the teeth; sandṛiśhyante—are seen; chūrṇitaiḥ—getting smashed; uttama-aṅgaiḥ—heads\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"d0b5dbb4-906c-4352-a0d0-e4bcc9326dc5"},{"id":"f687e4cc-a6a4-4d4a-9cd5-f85d9ab362a8","type":"verses","target":{"id":"a89d0b82-b914-4d58-9541-a24485ee6739","title":null,"body":"Arjuna said, \"O Lord of sense-organs (Krsna)! The universe is rightly rejoicing and feeling exceedingly delighted by Your high glory; the demons are fleeing in fear in all directions; and the hosts of the perfected ones are bowing down to You.\"","translit_title":null,"body_translit":"arjuna uvācha\nsthāne hṛiṣhīkeśha tava prakīrtyā\njagat prahṛiṣhyaty anurajyate cha\nrakṣhānsi bhītāni diśho dravanti\nsarve namasyanti cha siddha-saṅghāḥ\n","body_translit_meant":"arjunaḥ uvācha—Arjun said; sthāne—it is but apt; hṛiṣhīka-īśha—Shree Krishna, the master of the senses; tava—your; prakīrtyā—in praise; jagat—the universe; prahṛiṣhyati—rejoices; anurajyate—be enamored; cha—and; rakṣhānsi—the demons; bhītāni—fearfully; diśhaḥ—in all directions; dravanti—flee; sarve—all; namasyanti—bow down; cha—and; siddha-saṅghāḥ—hosts of perfected saints\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"152e2660-3a43-4f5d-a518-0fece027e955"},{"id":"12c54885-424d-4573-a9d5-7dd768304b47","type":"verses","target":{"id":"212e43bd-abb7-48d1-80eb-795143ccd8a1","title":null,"body":"Of them, with their minds completely entered into Me, I soon become a redeemer from the ocean of the cycle of death, O son of Prtha!","translit_title":null,"body_translit":"teṣhām ahaṁ samuddhartā mṛityu-saṁsāra-sāgarāt\nbhavāmi na chirāt pārtha mayy āveśhita-chetasām\n","body_translit_meant":"teṣhām—of those; aham—I; samuddhartā—the deliverer; mṛityu-saṁsāra-sāgarāt—from the ocean of birth and death; bhavāmi—(I) become; na—not; chirāt—after a long time; pārtha—Arjun, the son of Pritha; mayi—with me; āveśhita chetasām—of those whose consciousness is united\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"419d185a-f0ae-40d7-9655-f5c85c140785"},{"id":"4a85ca4a-70b2-487a-9115-6b6fecfd0e89","type":"verses","target":{"id":"e3d7582c-0ad0-4313-b204-b391a7117f26","title":null,"body":"Only yourself know yourself by yourself, O Supreme Purusha, Creator of all beings, Lord of beings, God of gods, Lord of the universe!","translit_title":null,"body_translit":"swayam evātmanātmānaṁ vettha tvaṁ puruṣhottama\nbhūta-bhāvana bhūteśha deva-deva jagat-pate\n","body_translit_meant":"swayam—yourself; eva—indeed; ātmanā—by yourself; ātmānam—yourself; vettha—know; tvam—you; puruṣha-uttama—the Supreme Personality; bhūta-bhāvana—the Creator of all beings; bhūta-īśha—the Lord of everything; deva-deva—the God of gods; jagat-pate—the Lord of the universe\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"0343cc3a-b8d8-4ab7-8ba5-264f76cfe79e"},{"id":"ab8e94fa-83e3-440c-aecb-41dca308554d","type":"verses","target":{"id":"a6284a64-eb70-4ec6-876f-6289a2e56c28","title":null,"body":"Of the great seers, I am Bhrgu; of the words, I am the single-syllable (Om); of the sacrifices [performed with external objects], I am the sacrifice of muttered prayer; of the immovables, I am the Himalayan range.","translit_title":null,"body_translit":"maharṣhīṇāṁ bhṛigur ahaṁ girām asmyekam akṣharam\nyajñānāṁ japa-yajño ’smi sthāvarāṇāṁ himālayaḥ\n","body_translit_meant":"mahā-ṛiṣhīṇām—among the great seers; bhṛiguḥ—Bhrigu; aham—I; girām—amongst chants; asmi—I am; ekam akṣharam—the syllable Om; yajñānām—of sacrifices; japa-yajñaḥ—sacrifice of the devotional repetition of the divine names of God; asmi—I am; sthāvarāṇām—amongst immovable things; himālayaḥ—the Himalayas\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"7b206181-f336-48a5-9baf-fbeda2552cfa"},{"id":"f374fa37-05bf-4cc3-9042-eafbd0c535bd","type":"verses","target":{"id":"03c133cf-332a-4d50-8edb-4f992607102a","title":null,"body":"Likewise, of the modes of singing, I am the Brhatsaman; of the metres, I am the Gayatri; of the months, I am Margasirsa; of the seasons, I am the season abounding with flowers.","translit_title":null,"body_translit":"bṛihat-sāma tathā sāmnāṁ gāyatrī chhandasām aham\nmāsānāṁ mārga-śhīrṣho ’ham ṛitūnāṁ kusumākaraḥ\n","body_translit_meant":"bṛihat-sāma—the Brihatsama; tathā—also; sāmnām—amongst the hymns in the Sama Veda; gāyatrī—the Gayatri mantra; chhandasām—amongst poetic meters; aham—I; māsānām—of the twelve months; mārga-śhīrṣhaḥ—the month of November-December; aham—I; ṛitūnām—of all seasons; kusuma-ākaraḥ—spring\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"0cb7bf5d-d182-425a-9d0d-b0e51ae54a1f"},{"id":"39c18d91-fe5a-43a8-962f-194e7fcc0c07","type":"verses","target":{"id":"2ba452ee-23d6-47a3-ba97-65c39494fae1","title":null,"body":"Arjuna said, \"My delusion has completely gone, thanks to the great and mysterious discourse, which is termed as a science governing the soul, and which You have delivered to me as a favor.\"","translit_title":null,"body_translit":"arjuna uvācha\nmad-anugrahāya paramaṁ guhyam adhyātma-sanjñitam\nyat tvayoktaṁ vachas tena moho ’yaṁ vigato mama\n","body_translit_meant":"arjunaḥ uvācha—Arjun said; mat-anugrahāya—out of compassion to me; paramam—supreme; guhyam—confidential; adhyātma-sanjñitam—about spiritual knowledge; yat—which; tvayā—by you; uktam—spoken; vachaḥ—words; tena—by that; mohaḥ—illusion; ayam—this; vigataḥ—is dispelled; mama—my\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"ca787a80-b57c-4cee-adda-c5de65755f58"},{"id":"0bd3b559-6712-48d4-b872-a38de306c56a","type":"verses","target":{"id":"248ed0e7-16be-4a37-b6a4-66ec75c85d9e","title":null,"body":"It wears heavenly garlands and garments, is anointed with heavenly sandal paste, is wondrous, radiant, and infinite, and has faces in all directions.","translit_title":null,"body_translit":"divya-mālyāmbara-dharaṁ divya-gandhānulepanam\nsarvāśhcharya-mayaṁ devam anantaṁ viśhvato-mukham\n","body_translit_meant":"divya—divine; mālya—garlands; āmbara—garments; dharam—wearing; divya—divine; gandha—fragrances; anulepanam—anointed with; sarva—all; āśhcharya-mayam—wonderful; devam—Lord; anantam—unlimited; viśhwataḥ—all sides; mukham—face\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"f7685c4e-b439-428f-bbe6-44b662018111"},{"id":"5247dae7-f582-4cd8-a49d-6336733a1b71","type":"verses","target":{"id":"8c64cf65-e883-4d3a-aaa1-2ef7c880e3f8","title":null,"body":"These hosts of gods enter into You; some, frightened, recite [hymns] with folded palms; simply crying 'Hail!', the hosts of great seers praise You with excellent praising hymns.","translit_title":null,"body_translit":"amī hi tvāṁ sura-saṅghā viśhanti\nkechid bhītāḥ prāñjalayo gṛiṇanti\nsvastīty uktvā maharṣhi-siddha-saṅghāḥ\nstuvanti tvāṁ stutibhiḥ puṣhkalābhiḥ\n","body_translit_meant":"amī—these; hi—indeed; tvām—you; sura-saṅghāḥ—assembly of celestial gods; viśhanti—are entering; kechit—some; bhītāḥ—in fear; prāñjalayaḥ—with folded hands; gṛiṇanti—praise; svasti—auspicious; iti—thus; uktvā—reciting; mahā-ṛiṣhi—great sages; siddha-saṅghāḥ—perfect beings; stuvanti—are extolling; tvām—you; stutibhiḥ—with prayers; puṣhkalābhiḥ—hymns\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"8bd73dd1-1a85-4781-b025-6c8e7d549035"},{"id":"74b50556-cf60-418a-9ba6-023756c2fd19","type":"verses","target":{"id":"5951e4f7-8ed2-4149-8928-3c8f377e5485","title":null,"body":"Please tell me who You are with a terrible form, O Best of gods! Salutations to You; please be merciful. I am desirous of knowing You, the Primal One, in detail, for I do not clearly comprehend Your actions.","translit_title":null,"body_translit":"ākhyāhi me ko bhavān ugra-rūpo\nnamo ’stu te deva-vara prasīda\nvijñātum ichchhāmi bhavantam ādyaṁ\nna hi prajānāmi tava pravṛittim\n","body_translit_meant":"ākhyāhi—tell; me—me; kaḥ—who; bhavān—you; ugra-rūpaḥ—fierce form; namaḥ astu—I bow; te—to you; deva-vara—God of gods; prasīda—be merciful; vijñātum—to know; ichchhāmi—I wish; bhavantam—you; ādyam—the primeval; na—not; hi—because; prajānāmi—comprehend; tava—your; pravṛittim—workings\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"1d2567fa-87f7-49f4-9383-f6473464d075"},{"id":"d06ae8e9-1f8c-4738-9670-27c4ef091a6b","type":"verses","target":{"id":"8c2e9ecc-c0cc-415b-ba15-6968ed1be87f","title":null,"body":"Taking You as a companion, not knowing Your greatness, and out of carelessness or even affection, whatever I have importunately called You—O Krsna, O Yadava, O Comrade—","translit_title":null,"body_translit":"sakheti matvā prasabhaṁ yad uktaṁ\nhe kṛiṣhṇa he yādava he sakheti\najānatā mahimānaṁ tavedaṁ\nmayā pramādāt praṇayena vāpi\n","body_translit_meant":"sakhā—friend; iti—as; matvā—thinking; prasabham—presumptuously; yat—whatever; uktam—addressed; he kṛiṣhṇa—O Shree Krishna; he yādava—O Shree Krishna, who was born in the Yadu clan; he sakhe—O my dear mate; iti—thus; ajānatā—in ignorance; mahimānam—majesty; tava—your; idam—this; mayā—by me; pramādāt—out of negligence; praṇayena—out of affection; vā api—or else; \n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"7b76ce4a-bafc-4773-bb92-eb6591ab96e8"},{"id":"f6a9eb28-eabb-4493-8c46-56bebf219bdf","type":"verses","target":{"id":"2c060ce6-f748-4828-8fb6-e75078496a03","title":null,"body":"Arjuna said, \"On seeing this gentle human form of Yours, O Janardana, I have now regained my nature and collected my thinking faculty.\"","translit_title":null,"body_translit":"arjuna uvācha\ndṛiṣhṭvedaṁ mānuṣhaṁ rūpaṁ tava saumyaṁ janārdana\nidānīm asmi saṁvṛittaḥ sa-chetāḥ prakṛitiṁ gataḥ\n","body_translit_meant":"arjunaḥ uvācha—Arjun said; dṛiṣhṭvā—seeing; idam—this; mānuṣham—human; rūpam—form; tava—your; saumyam—gentle; janārdana—he who looks after the public, Krishna; idānīm—now; asmi—I am; saṁvṛittaḥ—composed; sa-chetāḥ—in my mind; prakṛitim—to normality; gataḥ—have become\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"0d8aa9cd-555d-478a-ae01-1c58718aa797"},{"id":"7410fcf8-e8e3-4056-8dea-c6ca6898434e","type":"verses","target":{"id":"7662992d-6c63-4154-b526-3c06b3a9aac9","title":null,"body":"You alone are capable of fully declaring the auspicious manifesting powers of Yours, through which manifesting power You remain pervading these worlds.","translit_title":null,"body_translit":"vaktum arhasyaśheṣheṇa divyā hyātma-vibhūtayaḥ\nyābhir vibhūtibhir lokān imāṁs tvaṁ vyāpya tiṣhṭhasi\n","body_translit_meant":"vaktum—to describe; arhasi—please do; aśheṣheṇa—completely; divyāḥ—divine; hi—indeed; ātma—your own; vibhūtayaḥ—opulences; yābhiḥ—by which; vibhūtibhiḥ—opulences; lokān—all worlds; imān—these; tvam—you; vyāpya—pervade; tiṣhṭhasi—reside;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"4f2926fc-d691-4b98-a4ef-112041ac437b"},{"id":"00b03333-bc82-419c-b77f-07544f165224","type":"verses","target":{"id":"8022b3c3-de45-41e3-ad41-ffb822e20184","title":null,"body":"Of all trees, I am the Pipal tree; of the divine seers, Narada; of the Gandharvas, Citraratha; and of the perfected ones, the sage Kapila.","translit_title":null,"body_translit":"aśhvatthaḥ sarva-vṛikṣhāṇāṁ devarṣhīṇāṁ cha nāradaḥ\ngandharvāṇāṁ chitrarathaḥ siddhānāṁ kapilo muniḥ\n","body_translit_meant":"aśhvatthaḥ—the banyan tree; sarva-vṛikṣhāṇām—amongst all trees; deva-ṛiṣhīṇām—amongst celestial sages; cha—and; nāradaḥ—Narad; gandharvāṇām—amongst the gandharvas; chitrarathaḥ—Chitrarath; siddhānām—of all those who are perfected; kapilaḥ muniḥ—sage Kapil\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"8e6fe99c-9837-4005-8fde-4bfdd0f694bb"},{"id":"e9c8d98c-2b7c-4320-a942-99f7b2231fb0","type":"verses","target":{"id":"6dbd3a23-fa58-4d43-b4cf-bc132f3b6c12","title":null,"body":"I am the destroyer of the fraudulent; I am the brilliance of the brilliant; I am the victory; I am the determination; I am the strength of the strong.","translit_title":null,"body_translit":"dyūtaṁ chhalayatām asmi tejas tejasvinām aham\njayo ’smi vyavasāyo ’smi sattvaṁ sattvavatām aham\n","body_translit_meant":"dyūtam—gambling; chhalayatām—of all cheats; asmi—I am; tejaḥ—the splendor; tejasvinām—of the splendid; aham—I; jayaḥ—victory; asmi—I am; vyavasāyaḥ—firm resolve; asmi—I am; sattvam—virtue; sattva-vatām—of the virtuous; aham—I\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"24c13049-0da0-4b6e-b43e-843f36991fee"},{"id":"bc155d8f-f10b-437a-9c7f-3bec06154a26","type":"verses","target":{"id":"f126c2b3-87f1-402a-94ed-af39b2d382ca","title":null,"body":"O Master! If you think it is possible for me to behold that form, then, O Lord of the Yogis, please show me Your Immortal Self.","translit_title":null,"body_translit":"manyase yadi tach chhakyaṁ mayā draṣhṭum iti prabho\nyogeśhvara tato me tvaṁ darśhayātmānam avyayam\n","body_translit_meant":"manyase—you think; yadi—if; tat—that; śhakyam—possible; mayā—by me; draṣhṭum—to behold; iti—thus; prabho—Lord; yoga-īśhvara—Lord of all mystic powers; tataḥ—then; me—to me; tvam—you; darśhaya—reveal; ātmānam—yourself; avyayam—imperishable\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"1c1ff085-f0cb-4de6-a3af-49f7b6feaffe"},{"id":"f16e660a-5402-48e1-af5a-4438677bd1f5","type":"verses","target":{"id":"5d28a89e-6104-4806-9a46-5bfc3289b60d","title":null,"body":"Then, possessed by amazement and with his body hair standing on end, Dhananjaya, with his head bowed to the God and with folded hands, spoke to Him.","translit_title":null,"body_translit":"tataḥ sa vismayāviṣhṭo hṛiṣhṭa-romā dhanañjayaḥ\npraṇamya śhirasā devaṁ kṛitāñjalir abhāṣhata\n","body_translit_meant":"tataḥ—then; saḥ—he; vismaya-āviṣhṭaḥ—full of wonder; hṛiṣhṭa-romā—with hair standing on end; dhanañjayaḥ—Arjun, the conqueror of wealth; praṇamya—bow down; śhirasā—with (his) head; devam—the Lord; kṛita-añjaliḥ—with folded hands; abhāṣhata—he addressed\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"75011091-ad10-4332-bdce-a9f8e2d124ed"},{"id":"3e531df5-396f-4929-bc53-7a0f628ba34a","type":"verses","target":{"id":"9980cd49-9add-4c7c-a2c9-837353687e48","title":null,"body":"As I observe You, touching the sky, blazing, with many colors, mouths wide open, eyes blazing and large, I am terrified in my inner soul and I do not find courage and peace, O Visnu!","translit_title":null,"body_translit":"nabhaḥ-spṛiśhaṁ dīptam aneka-varṇaṁ\nvyāttānanaṁ dīpta-viśhāla-netram\ndṛiṣhṭvā hi tvāṁ pravyathitāntar-ātmā\ndhṛitiṁ na vindāmi śhamaṁ cha viṣhṇo\n","body_translit_meant":"nabhaḥ-spṛiśham—touching the sky; dīptam—effulgent; aneka—many; varṇam—colors; vyātta—open; ānanam—mouths; dīpta—blazing; viśhāla—enormous; netram—eyes; dṛiṣhṭvā—seeing; hi—indeed; tvām—you; pravyathitāntar-ātmā—my heart is trembling with fear; dhṛitim—firmness; na—not; vindāmi—I find; śhamam—mental peace; cha—and; viṣhṇo—Lord Vishnu\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"1d268f01-dbd7-43a7-b345-3c20292cbe9b"},{"id":"3f445a53-f8e5-4858-84cc-7f4e119628fb","type":"verses","target":{"id":"9e6e607b-ddaf-4c81-876d-00e6391d03eb","title":null,"body":"Slay Drona, Bhisma, Jayadratha, and Karna, as well as the other heroes of the world—all already slain by Me. Do not be distressed; fight, and you shall vanquish your enemies in the battle.","translit_title":null,"body_translit":"droṇaṁ cha bhīṣhmaṁ cha jayadrathaṁ cha\nkarṇaṁ tathānyān api yodha-vīrān\nmayā hatāṁs tvaṁ jahi mā vyathiṣhṭhā\nyudhyasva jetāsi raṇe sapatnān\n","body_translit_meant":"droṇam—Dronacharya; cha—and; bhīṣhmam—Bheeshma; cha—and; jayadratham—Jayadratha; cha—and; karṇam—Karn; tathā—also; anyān—others; api—also; yodha-vīrān—brave warriors; mayā—by me; hatān—already killed; tvam—you; jahi—slay; mā—not; vyathiṣhṭhāḥ—be disturbed; yudhyasva—fight; jetā asi—you shall be victorious; raṇe—in battle; sapatnān—enemies\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"cd772322-bee6-4d3f-87b7-6cf5b7b17de0"},{"id":"b9219647-6020-4f6a-b32d-1fe3d028c8ef","type":"verses","target":{"id":"5ff48cff-b38b-4830-ae28-b446d8372cb2","title":null,"body":"Hence, paying homage and prostrating my body, I solicit grace from You, the praiseworthy Lord. O God! Be pleased to bear with me, just as a beloved father would with his beloved son, and just as a dear friend would with his dear friend.","translit_title":null,"body_translit":"tasmāt praṇamya praṇidhāya kāyaṁ\nprasādaye tvām aham īśham īḍyam\npiteva putrasya sakheva sakhyuḥ\npriyaḥ priyāyārhasi deva soḍhum\n","body_translit_meant":"tasmāt—therefore; praṇamya—bowing down; praṇidhāya—prostrating; kāyam—the body; prasādaye—to implore grace; tvām—your; aham—I; īśham—the Supreme Lord; īḍyam—adorable; pitā—father; iva—as; putrasya—with a son; sakhā—friend; iva—as; sakhyuḥ—with a friend; priyaḥ—a lover; priyāyāḥ—with the beloved; arhasi—you should; deva—Lord; soḍhum—forgive\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"95402e50-c408-4aed-a468-da5845e24954"},{"id":"c8d1a40d-db3a-404c-801e-2284b4ee5aa7","type":"verses","target":{"id":"9a987dc8-d51f-4498-9a42-75420e6649c2","title":null,"body":"But, through an unwavering devotion, it is possible to know, observe, and even enter into Me, O Arjuna! O scorcher of foes!","translit_title":null,"body_translit":"bhaktyā tv ananyayā śhakya aham evaṁ-vidho ’rjuna\njñātuṁ draṣhṭuṁ cha tattvena praveṣhṭuṁ cha parantapa\n","body_translit_meant":"bhaktyā—by devotion; tu—alone; ananyayā—unalloyed; śhakyaḥ—possible; aham—I; evam-vidhaḥ—like this; arjuna—Arjun; jñātum—to be known; draṣhṭum—to be seen; cha—and; tattvena—truly; praveṣhṭum—to enter into (union with me); cha—and; parantapa—scorcher of foes\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"bfeb5944-6f3e-4dde-8f2d-d3335f5da2fd"},{"id":"d9c921ab-05b7-4d36-a138-859a8353afe1","type":"verses","target":{"id":"b4253b5a-a172-491f-8668-e0ee42ef3b75","title":null,"body":"Devouring, on all sides with Your blazing mouths, the entire worlds, You are licking up; Your terrible rays scorch the entire universe, filling it with their radiance, O Vishnu!","translit_title":null,"body_translit":"lelihyase grasamānaḥ samantāl\nlokān samagrān vadanair jvaladbhiḥ\ntejobhir āpūrya jagat samagraṁ\nbhāsas tavogrāḥ pratapanti viṣhṇo\n","body_translit_meant":"lelihyase—you are licking; grasamānaḥ—devouring; samantāt—on all sides; lokān—worlds; samagrān—all; vadanaiḥ—with mouths; jvaladbhiḥ—blazing; tejobhiḥ—by effulgence; āpūrya—filled with; jagat—the universe; samagram—all; bhāsaḥ—rays; tava—your; ugrāḥ—fierce; pratapanti—scorching; viṣhṇo—Lord Vishnu\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"eb26e3dd-f2e0-4530-871d-7c19ca596401"},{"id":"c334900d-686a-49d4-a5a0-5b4c191e3cd9","type":"verses","target":{"id":"c2c57596-ac6a-476e-980e-bcf58a27421e","title":null,"body":"Salutations to You in front and behind; salutations to You on all sides, O One Who is All! You are of infinite might and immeasurable power; and You pervade all, and thus You are all.","translit_title":null,"body_translit":"namaḥ purastād atha pṛiṣhṭhatas te\nnamo ’stu te sarvata eva sarva\nananta-vīryāmita-vikramas tvaṁ\nsarvaṁ samāpnoṣhi tato ’si sarvaḥ\n","body_translit_meant":"namaḥ—offering salutations; purastāt—from the front; atha—and; pṛiṣhṭhataḥ—the rear; te—to you; namaḥ astu—I offer my salutations; te—to you; sarvataḥ—from all sides; eva—indeed; sarva—all; ananta-vīrya—infinite power; amita-vikramaḥ—infinite valor and might; tvam—you; sarvam—everything; samāpnoṣhi—pervade; tataḥ—thus; asi—(you) are; sarvaḥ—everything\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"dfa37a3b-7199-4a82-9cd3-903b74134626"},{"id":"b4ae2297-11eb-4b08-86dc-12220666b224","type":"verses","target":{"id":"d3952c30-2af8-4287-9fac-3c2b8f6af777","title":null,"body":"Having said this to Arjuna, Vasudeva revealed His own tiny form; assuming His gentle body once again, the Mighty Soul (Krsna) consoled the frightened Arjuna.","translit_title":null,"body_translit":"sañjaya uvācha\nity arjunaṁ vāsudevas tathoktvā\nsvakaṁ rūpaṁ darśhayām āsa bhūyaḥ\nāśhvāsayām āsa cha bhītam enaṁ\nbhūtvā punaḥ saumya-vapur mahātmā\n","body_translit_meant":"sañjayaḥ uvācha—Sanjay said; iti—thus; arjunam—to Arjun; vāsudevaḥ—Krishna, the son of Vasudev; tathā—in that way; uktvā—having spoken; svakam—his personal; rūpam—form; darśhayām āsa—displayed; bhūyaḥ—again; āśhvāsayām āsa—consoled; cha—and; bhītam—frightened; enam—him; bhūtvā—becoming; punaḥ—again; saumya-vapuḥ—the gentle (two-armed) form; mahā-ātmā—the compassionate\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"97845bcc-4dff-4383-aabb-1627b2aa5b7f"},{"id":"64a206c6-1e0a-4926-8bb9-6d7bdc189f13","type":"verses","target":{"id":"02e689be-0a1e-42ac-ae5e-bf4242f68ed5","title":null,"body":"Those who contemplate on the Unmanifest, which is motionless, undefinable, all-pervading, unthinkable, peak-like, unmoving, and fixed.","translit_title":null,"body_translit":"ye tv akṣharam anirdeśhyam avyaktaṁ paryupāsate\nsarvatra-gam achintyañcha kūṭa-stham achalandhruvam\n sanniyamyendriya-grāmaṁ sarvatra sama-buddhayaḥ\nte prāpnuvanti mām eva sarva-bhūta-hite ratāḥ\n","body_translit_meant":"ye—who; tu—but; akṣharam—the imperishable; anirdeśhyam—the indefinable; avyaktam—the unmanifest; paryupāsate—worship; sarvatra-gam—the all-pervading; achintyam—the unthinkable; cha—and; kūṭa-stham—the unchanging; achalam—the immovable; dhruvam—the eternal; \n sanniyamya—restraining; indriya-grāmam—the senses; sarvatra—everywhere; sama-buddhayaḥ—even-minded; te—they; prāpnuvanti—attain; mām—me; eva—also; sarva-bhūta-hite—in the welfare of all beings; ratāḥ—engaged\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"484ea20f-0670-4b19-8178-9b4905d95a5f"},{"id":"26e6399a-1ac8-44fd-b322-2631a7426846","type":"verses","target":{"id":"628db549-d490-4d91-9faa-b0e8a3f3946a","title":null,"body":"He, who is not a hater but a compassionate friend of every being; who is free from the sense of 'mine' and the sense of 'I'; who is even-minded in pain and pleasure and is endowed with forbearance;","translit_title":null,"body_translit":"adveṣhṭā sarva-bhūtānāṁ maitraḥ karuṇa eva cha\nnirmamo nirahankāraḥ sama-duḥkha-sukhaḥ kṣhamī\n","body_translit_meant":"adveṣhṭā—free from malice; sarva-bhūtānām—toward all living beings; maitraḥ—friendly; karuṇaḥ—compassionate; eva—indeed; cha—and; nirmamaḥ—free from attachment to possession; nirahankāraḥ—free from egoism; sama—equipoised; duḥkha—distress; sukhaḥ—happiness; kṣhamī—forgiving;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"0ae53c0d-16bc-4ac8-9a58-327a467f1ce2"},{"id":"465bdd93-221d-49a8-b517-aad649b07966","type":"verses","target":{"id":"d67c8326-5232-445f-88dc-d742d01f61dc","title":null,"body":"No translation of this sloka is available.","translit_title":null,"body_translit":"arjuna uvācha\nprakṛitiṁ puruṣhaṁ chaiva kṣhetraṁ kṣhetra-jñam eva cha\netad veditum ichchhāmi jñānaṁ jñeyaṁ cha keśhava\n","body_translit_meant":"arjunaḥ uvācha—Arjun said; prakṛitim—material nature; puruṣham—the enjoyer; cha—and; eva—indeed; kṣhetram—the field of activities; kṣhetra-jñam—the knower of the field; eva—even; cha—also; etat—this; veditum—to know; ichchhāmi—I wish; jñānam—knowledge; jñeyam—the goal of knowledge; cha—and; keśhava—Krishna, the killer of the demon named Keshi\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"82c59ea6-2ef0-4a76-8feb-3adf2b075c39"},{"id":"37dde69c-0fe2-42f7-beae-e9a43295a185","type":"verses","target":{"id":"a2671dce-7217-4984-8d39-e8897c0edabc","title":null,"body":"And an unwavering devotion to Me, with the Yoga of non-duality; taking refuge in a solitary place; disinterest in a crowd of people;","translit_title":null,"body_translit":"mayi chānanya-yogena bhaktir avyabhichāriṇī\nvivikta-deśha-sevitvam aratir jana-sansadi\n","body_translit_meant":"mayi—toward me; cha—also; ananya-yogena—exclusively united; bhaktiḥ—devotion; avyabhichāriṇī—constant; vivikta—solitary; deśha—places; sevitvam—inclination for; aratiḥ—aversion; jana-sansadi—for mundane society;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"ac9410c9-4359-4fb2-8c3d-03a2b56a6dab"},{"id":"4d249a29-daee-428c-9b9f-fe0f923c2fd1","type":"verses","target":{"id":"1c85a723-702d-4a4d-a5b9-85d53bd437e3","title":null,"body":"In creating the process of cause and effect, the material cause is said to be the basis; and in experiencing pleasure and pain, the soul is said to be the basis.","translit_title":null,"body_translit":"kārya-kāraṇa-kartṛitve hetuḥ prakṛitir uchyate\npuruṣhaḥ sukha-duḥkhānāṁ bhoktṛitve hetur uchyate\n","body_translit_meant":"kārya—effect; kāraṇa—cause; kartṛitve—in the matter of creation; hetuḥ—the medium; prakṛitiḥ—the material energy; uchyate—is said to be; puruṣhaḥ—the individual soul; sukha-duḥkhānām—of happiness and distress; bhoktṛitve—in experiencing; hetuḥ—is responsible; uchyate—is said to be\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"49916c3e-6a93-405e-ae56-29688c87fb5e"},{"id":"9a54635e-c905-4b02-9ff7-d9a74cae6970","type":"verses","target":{"id":"e6b478cc-4067-4d11-bb43-d88265766f87","title":null,"body":"The Bhagavat said, \"I am Time, the world-destroyer, engaged here in withdrawing the worlds that are overgrown. Even without you (your fighting), all the warriors standing in the rival armies would cease to be.\"","translit_title":null,"body_translit":"śhrī-bhagavān uvācha\nkālo ’smi loka-kṣhaya-kṛit pravṛiddho\nlokān samāhartum iha pravṛittaḥ\nṛite ’pi tvāṁ na bhaviṣhyanti sarve\nye ’vasthitāḥ pratyanīkeṣhu yodhāḥ\n","body_translit_meant":"śhrī-bhagavān uvācha—the Supreme Lord said; kālaḥ—time; asmi—I am; loka-kṣhaya-kṛit—the source of destruction of the worlds; pravṛiddhaḥ—mighty; lokān—the worlds; samāhartum—annihilation; iha—this world; pravṛittaḥ—participation; ṛite—without; api—even; tvām—you; na bhaviṣhyanti—shall cease to exist; sarve—all; ye—who; avasthitāḥ—arrayed; prati-anīkeṣhu—in the opposing army; yodhāḥ—the warriors\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"17e22576-ff23-4074-937b-d14243e7eabd"},{"id":"23f8b3e2-7b1f-4c0c-94df-afd5fbc96e4a","type":"verses","target":{"id":"e3bedd5e-4415-46e4-aa05-1acf6e8c7381","title":null,"body":"Whatever disrespect I have shown to You, making fun of You in the course of play, or while on the bed, or on the seat, or at meals, either alone or in the presence of respectable persons—for that, I beg pardon of You, the Unconceivable One, O Acyuta!","translit_title":null,"body_translit":"yach chāvahāsārtham asat-kṛito ’si\nvihāra-śhayyāsana-bhojaneṣhu\neko ’tha vāpy achyuta tat-samakṣhaṁ\ntat kṣhāmaye tvām aham aprameyam\n","body_translit_meant":"yat—whatever; cha—also; avahāsa-artham—humorously; asat-kṛitaḥ—disrespectfully; asi—you were; vihāra—while at play; śhayyā—while resting; āsana—while sitting; bhojaneṣhu—while eating; ekaḥ—(when) alone; athavā—or; api—even; achyuta—Krishna, the infallible one; tat-samakṣham—before others; tat—all that; kṣhāmaye—beg for forgiveness; tvām—from you; aham—I; aprameyam—immeasurable\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"bc1e76d0-732e-4baa-b327-b76adee41fee"},{"id":"2df608d7-eb33-4bcc-b429-39be980d855b","type":"verses","target":{"id":"aca90757-ed43-4e51-a080-1f93ebbbe386","title":null,"body":"The Bhagavat said, \"This form of Mine, which you have just observed, is extremely difficult to behold; even the gods are ever eager to behold it.\"","translit_title":null,"body_translit":"śhrī-bhagavān uvācha\nsu-durdarśham idaṁ rūpaṁ dṛiṣhṭavān asi yan mama\ndevā apy asya rūpasya nityaṁ darśhana-kāṅkṣhiṇaḥ\n","body_translit_meant":"śhrī-bhagavān uvācha—the Supreme Lord said; su-durdarśham—exceedingly difficult to behold; idam—this; rūpam—form; dṛiṣhṭavān asi—that you are seeing; yat—which; mama—of mine; devāḥ—the celestial gods; api—even; asya—this; rūpasya—form; nityam—eternally; darśhana-kāṅkṣhiṇaḥ—aspiring to see;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"e5daf41b-2972-4279-99e4-3b9a3ea2f46e"},{"id":"6657902f-7ab6-4b1b-8521-e5a9131a5ed5","type":"verses","target":{"id":"1fb4beae-5704-4581-a0bd-7c6fbec5e134","title":null,"body":"But the trouble is much greater for those who have their minds fixed on the Unmanifest, for it is difficult for those with physical bodies to attain the Unmanifest goal.","translit_title":null,"body_translit":"kleśho ’dhikataras teṣhām avyaktāsakta-chetasām\navyaktā hi gatir duḥkhaṁ dehavadbhir avāpyate\n","body_translit_meant":"kleśhaḥ—tribulations; adhika-taraḥ—full of; teṣhām—of those; avyakta—to the unmanifest; āsakta—attached; chetasām—whose minds; avyaktā—the unmanifest; hi—indeed; gatiḥ—path; duḥkham—exceeding difficulty; deha-vadbhiḥ—for the embodied; avāpyate—is reached\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"f4b7c25b-9549-489a-b06f-7604cd4bdfd6"},{"id":"cf507c4d-190e-491f-9ca0-1344e5d61526","type":"verses","target":{"id":"7311e41f-0b3e-4f9b-9a64-e7cc8144b80e","title":null,"body":"He, on account of whom the world does not become agitated; who also does not become agitated on account of the world; who is free from joy and impatience, fear and anxiety—he is dear to Me.","translit_title":null,"body_translit":"yasmān nodvijate loko lokān nodvijate cha yaḥ\nharṣhāmarṣha-bhayodvegair mukto yaḥ sa cha me priyaḥ\n","body_translit_meant":"yasmāt—by whom; na—not; udvijate—are agitated; lokaḥ—people; lokāt—from people; na—not; udvijate—are disturbed; cha—and; yaḥ—who; harṣha—pleasure; amarṣha—pain; bhaya—fear; udvegaiḥ—anxiety; muktaḥ—freed; yaḥ—who; saḥ—they; cha—and; me—to me; priyaḥ—very dear\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"b95aa509-bcca-45b0-b53d-eea5a818e81a"},{"id":"e06c1d16-e899-4410-b064-36d72ffe70e2","type":"verses","target":{"id":"8d29401e-b273-4f03-8d5a-d5ca64443920","title":null,"body":"O descendant of Bharata! You should know Me to be the one who sensitizes the fields of all. The knowledge of the field and the one who sensitizes it—that knowledge is, in fact, the understanding of Me.","translit_title":null,"body_translit":"kṣhetra-jñaṁ chāpi māṁ viddhi sarva-kṣhetreṣhu bhārata\nkṣhetra-kṣhetrajñayor jñānaṁ yat taj jñānaṁ mataṁ mama\n","body_translit_meant":"kṣhetra-jñam—the knower of the field; cha—also; api—only; mām—me; viddhi—know; sarva—all; kṣhetreṣhu—in individual fields of activities; bhārata—scion of Bharat; kṣhetra—the field of activities; kṣhetra-jñayoḥ—of the knower of the field; jñānam—understanding of; yat—which; tat—that; jñānam—knowledge; matam—opinion; mama—my\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"a7104424-888b-41e5-89f8-bcd53da58130"},{"id":"6e61ecba-7298-40c0-acd7-42be726f5f86","type":"verses","target":{"id":"a7f895b5-5dbb-4c27-8515-b32f91f9f1df","title":null,"body":"I shall describe that which is to be known, by knowing which one attains freedom from death: the Supreme Brahman is beginningless and is said to be neither existent nor non-existent.","translit_title":null,"body_translit":"jñeyaṁ yat tat pravakṣhyāmi yaj jñātvāmṛitam aśhnute\nanādi mat-paraṁ brahma na sat tan nāsad uchyate\n","body_translit_meant":"jñeyam—ought to be known; yat—which; tat—that; pravakṣhyāmi—I shall now reveal; yat—which; jñātvā—knowing; amṛitam—immortality; aśhnute—one achieves; anādi—beginningless; mat-param—subordinate to me; brahma—Brahman; na—not; sat—existent; tat—that; na—not; asat—non-existent; uchyate—is called\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"e4c71226-e29c-4f1e-a82b-6eb1a9e164e2"},{"id":"bf20d18f-393b-4d96-8fdc-f8d1cb3aba3c","type":"verses","target":{"id":"fadeec53-3130-425a-935a-8bb9cbb18474","title":null,"body":"The Supreme Soul in this corporeal body is called the Spectator, the Assenter, the Supporter, the Experiencer, the Mighty Lord, and also the Supreme Self.","translit_title":null,"body_translit":"upadraṣhṭānumantā cha bhartā bhoktā maheśhvaraḥ\nparamātmeti chāpy ukto dehe ’smin puruṣhaḥ paraḥ\n","body_translit_meant":"upadraṣhṭā—the witness; anumantā—the permitter; cha—and; bhartā—the supporter; bhoktā—the transcendental enjoyer; mahā-īśhvaraḥ—the ultimate controller; parama-ātmā—Superme Soul; iti—that; cha api—and also; uktaḥ—is said; dehe—within the body; asmin—this; puruṣhaḥ paraḥ—the Supreme Lord\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"a77b52eb-9917-46c8-99b5-3fccf2948907"},{"id":"04a0d685-bcb4-4931-b5c7-43380c3c2a6c","type":"verses","target":{"id":"229d39ec-3d66-4bd3-9072-4a4ea7b18f8e","title":null,"body":"Sanjaya said, On hearing this speech of Kesava, the crowned-prince Arjuna had his palms folded; trembling, he prostrated himself to Krsna; stammering, and very much afraid, he bowed down and spoke to Him again.","translit_title":null,"body_translit":"sañjaya uvācha\netach chhrutvā vachanaṁ keśhavasya\nkṛitāñjalir vepamānaḥ kirīṭī\nnamaskṛitvā bhūya evāha kṛiṣhṇaṁ\nsa-gadgadaṁ bhīta-bhītaḥ praṇamya\n","body_translit_meant":"sañjayaḥ uvācha—Sanjay said; etat—thus; śhrutvā—hearing; vachanam—words; keśhavasya—of Shree Krishna; kṛita-añjaliḥ—with joined palms; vepamānaḥ—trembling; kirītī—the crowned one, Arjun; namaskṛitvā—with palms joined; bhūyaḥ—again; eva—indeed; āha—spoke; kṛiṣhṇam—to Shree Krishna; sa-gadgadam—in a faltering voice; bhīta-bhītaḥ—overwhelmed with fear; praṇamya—bowed down\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"3c294240-88e4-46f2-82dd-9d4e2b6cb83d"},{"id":"54b3b7b7-404c-49ea-b5e8-4621c857c91f","type":"verses","target":{"id":"98b05d47-1ae7-433b-b6c4-3be1e8510393","title":null,"body":"I am thrilled by what I have not seen before; my mind is greatly distressed with fear; show me Your usual form, O God! Lord of gods! O Abode of the worlds!","translit_title":null,"body_translit":"adṛiṣhṭa-pūrvaṁ hṛiṣhito ’smi dṛiṣhṭvā\nbhayena cha pravyathitaṁ mano me\ntad eva me darśhaya deva rūpaṁ\nprasīda deveśha jagan-nivāsa\n","body_translit_meant":"adṛiṣhṭa-pūrvam—that which has not been seen before; hṛiṣhitaḥ—great joy; asmi—I am; dṛiṣhṭvā—having seen; bhayena—with fear; cha—yet; pravyathitam—trembles; manaḥ—mind; me—my; tat—that; eva—certainly; me—to me; darśhaya—show; deva—Lord; rūpam—form; prasīda—please have mercy; deva-īśha—God of gods; jagat-nivāsa—abode of the universe\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"b84cba90-d310-47a4-92ba-ee59abbcbead"},{"id":"c5ae8184-e521-4028-85b4-e659138ba811","type":"verses","target":{"id":"855fa13b-8667-480e-9778-1849dac6b125","title":null,"body":"He who performs actions for Me, who regards Me as his supreme goal, who is devoted to Me, who is free from attachment, and who is free from hatred towards all beings—he attains Me, O son of Pandu!","translit_title":null,"body_translit":"mat-karma-kṛin mat-paramo mad-bhaktaḥ saṅga-varjitaḥ\nnirvairaḥ sarva-bhūteṣhu yaḥ sa mām eti pāṇḍava\n","body_translit_meant":"mat-karma-kṛit—perform duties for my sake; mat-paramaḥ—considering me the Supreme; mat-bhaktaḥ—devoted to me; saṅga-varjitaḥ—free from attachment; nirvairaḥ—without malice; sarva-bhūteṣhu—toward all entities; yaḥ—who; saḥ—he; mām—to me; eti—comes; pāṇḍava—Arjun, the son of Pandu\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"5f6e2b3c-5182-4aec-a45b-4d164a13a24d"},{"id":"ab721bd2-54dd-429e-8a8a-fc5bd6dd1c3a","type":"verses","target":{"id":"1994161d-0186-495b-9ae0-f0327c83b930","title":null,"body":"Hence, fix your mind on nothing but Me; cause your thought to settle in Me. Thus, resorting to the best Yoga, you will dwell in Me alone.","translit_title":null,"body_translit":"mayy eva mana ādhatsva mayi buddhiṁ niveśhaya\nnivasiṣhyasi mayy eva ata ūrdhvaṁ na sanśhayaḥ\n","body_translit_meant":"mayi—on me; eva—alone; manaḥ—mind; ādhatsva—fix; mayi—on me; buddhim—intellect; niveśhaya—surrender; nivasiṣhyasi—you shall always live; mayi—in me; eva—alone; ataḥ ūrdhvam—thereafter; na—not; sanśhayaḥ—doubt\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"31a73c7f-1c57-4f80-8acd-2f516d7703f1"},{"id":"19494df2-7af0-41f0-b686-74ef69e451c2","type":"verses","target":{"id":"31e28744-c063-4ebe-a578-fc1bed4d4052","title":null,"body":"He who feels alike to the foe and the friend, to honor and dishonor, to cold and heat, to pleasure and pain; who is totally free from attachment;","translit_title":null,"body_translit":"samaḥ śhatrau cha mitre cha tathā mānāpamānayoḥ\nśhītoṣhṇa-sukha-duḥkheṣhu samaḥ saṅga-vivarjitaḥ\n","body_translit_meant":"samaḥ—alike; śhatrau—to a foe; cha—and; mitre—to a friend; cha tathā—as well as; māna-apamānayoḥ—in honor and dishonor; śhīta-uṣhṇa—in cold and heat; sukha-duḥkheṣhu—in joy and sorrow; samaḥ—equipoised; saṅga-vivarjitaḥ—free from all unfavorable association;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"aa2a2708-699b-41c0-9a02-7e8112553f22"},{"id":"0a8801f9-de14-4c20-beee-b7e616fac4ed","type":"verses","target":{"id":"7f017473-17d8-4dd4-9248-65005d68a70d","title":null,"body":"The five great elements, egotism, the intellect, the unmanifest, and the ten organs and the five objects of the senses.","translit_title":null,"body_translit":"mahā-bhūtāny ahankāro buddhir avyaktam eva cha\nindriyāṇi daśhaikaṁ cha pañcha chendriya-gocharāḥ\n","body_translit_meant":"mahā-bhūtāni—the (five) great elements; ahankāraḥ—the ego; buddhiḥ—the intellect; avyaktam—the unmanifested primordial matter; eva—indeed; cha—and; indriyāṇi—the senses; daśha-ekam—eleven; cha—and; pañcha—five; cha—and; indriya-go-charāḥ—the (five) objects of the senses;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"0d307508-9e7a-49de-aac1-3a9baeeff8a0"},{"id":"1ddd7129-36bb-453f-936e-89ec708aeca1","type":"verses","target":{"id":"1e4a1863-eb6a-4da7-937b-e5fba0f1a89a","title":null,"body":"It is without and within every being, unmoving yet moving; due to its subtle nature, it is incomprehensible; it exists far away yet is near.","translit_title":null,"body_translit":"bahir antaśh cha bhūtānām acharaṁ charam eva cha\nsūkṣhmatvāt tad avijñeyaṁ dūra-sthaṁ chāntike cha tat\n","body_translit_meant":"bahiḥ—outside; antaḥ—inside; cha—and; bhūtānām—all living beings; acharam—not moving; charam—moving; eva—indeed; cha—and; sūkṣhmatvāt—due to subtlety; tat—he; avijñeyam—incomprehensible; dūra-stham—very far away; cha—and; antike—very near; cha—also; tat—he\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"34baa555-0096-4783-a78b-968056656356"},{"id":"e7bf9ef6-3e5f-4192-a26b-d5d8d3fe8a4e","type":"verses","target":{"id":"5e2f5ac6-1343-4ea5-8ddc-c465585a2021","title":null,"body":"But others, who have no knowledge of this nature, listen from others and reflect [accordingly]; they too, being devoted to what they have heard, do cross over death.","translit_title":null,"body_translit":"anye tv evam ajānantaḥ śhrutvānyebhya upāsate\nte ’pi chātitaranty eva mṛityuṁ śhruti-parāyaṇāḥ\n","body_translit_meant":"anye—others; tu—still; evam—thus; ajānantaḥ—those who are unaware (of spiritual paths); śhrutvā—by hearing; anyebhyaḥ—from others; upāsate—begin to worship; te—they; api—also; cha—and; atitaranti—cross over; eva—even; mṛityum—death; śhruti-parāyaṇāḥ—devotion to hearing (from saints)\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"98e12632-9e5b-4526-a3cc-2a3ef0e37eec"},{"id":"60ced62e-371e-4a01-81d5-d095a93137e1","type":"verses","target":{"id":"e234cdd4-04ed-45cb-bbc9-89ac56129bb7","title":null,"body":"But, you should also know that Tamas is born of ignorance and deludes all the Embodied; it binds them with negligence, laziness, and sleep, O descendant of Bharata!","translit_title":null,"body_translit":"tamas tv ajñāna-jaṁ viddhi mohanaṁ sarva-dehinām\npramādālasya-nidrābhis tan nibadhnāti bhārata\n","body_translit_meant":"tamaḥ—mode of ignorance; tu—but; ajñāna-jam—born of ignorance; viddhi—know; mohanam—illusion; sarva-dehinām—for all the embodied souls; pramāda—negligence; ālasya—laziness; nidrābhiḥ—and sleep; tat—that; nibadhnāti—binds; bhārata—Arjun, the son of Bharat\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"0ad90748-a201-4389-a1e5-95349bf39ec6"},{"id":"23614e35-9cc8-4ec2-962a-9f0c8db5133e","type":"verses","target":{"id":"94ca9ad9-e3dd-4764-ba2e-178f9fb93036","title":null,"body":"O Mighty One! Why should they not bow down to You, the Primal Creator, Who is greater than even Brahma (personal god)? O Endless One, O Lord of gods, O Abode of the universe! You are unalterable, existent, non-existent, and also that which is beyond both.","translit_title":null,"body_translit":"kasmāch cha te na nameran mahātman\ngarīyase brahmaṇo ’py ādi-kartre\nananta deveśha jagan-nivāsa\ntvam akṣharaṁ sad-asat tat paraṁ yat\n","body_translit_meant":"kasmāt—why; cha—and; te—you; na nameran—should they not bow down; mahā-ātman—The Great one; garīyase—who are greater; brahmaṇaḥ—than Brahma; api—even; ādi-kartre—to the original creator; ananta—The limitless One; deva-īśha—Lord of the devatās; jagat-nivāsa—Refuge of the universe; tvam—you; akṣharam—the imperishable; sat-asat—manifest and non-manifest; tat—that; param—beyond; yat—which\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"bce33ee1-7305-474e-8c38-ffe8c689422b"},{"id":"6703261b-31a9-4dd8-b76b-a430f0c66041","type":"verses","target":{"id":"397c8934-c85e-421a-b5eb-9a231be10710","title":null,"body":"The Bhagavat said, \"Being gracious towards you, I have shown you, O Arjuna, this supreme form, as a result of your concentration on the Self. This form of Mine, full of universal splendour, unending and primal, has never been seen before by anyone other than yourself.\"","translit_title":null,"body_translit":"śhrī-bhagavān uvācha\nmayā prasannena tavārjunedaṁ\nrūpaṁ paraṁ darśhitam ātma-yogāt\ntejo-mayaṁ viśhvam anantam ādyaṁ\nyan me tvad anyena na dṛiṣhṭa-pūrvam\n","body_translit_meant":"śhrī-bhagavān uvācha—the Blessed Lord said; mayā—by me; prasannena—being pleased; tava—with you; arjuna—Arjun; idam—this; rūpam—form; param—divine; darśhitam—shown; ātma-yogāt—by my Yogmaya power; tejaḥ-mayam—resplendent; viśhwam—cosmic; anantam—unlimited; ādyam—primeval; yat—which; me—my; tvat anyena—other than you; na dṛiṣhṭa-pūrvam—no one has ever seen\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"6c93106c-7cce-4402-a5a6-fd57f0536392"},{"id":"8e1fec69-3256-4311-b266-9a3500272e0b","type":"chapters","target":{"id":"146a5d4a-3eed-4194-b2d7-8eb9e2bcb8ca","title":"The Yoga of Devotion","body":"The twelfth chapter of the Bhagavad Gita is \"Bhakti Yoga\". In this chapter, Krishna emphasizes the superiority of Bhakti Yoga (the path of devotion) over all other types of spiritual disciplines and reveals various aspects of devotion. He further explains that the devotees who perform pure devotional service to Him, with their consciousness, merged in Him and all their actions dedicated to Him, are quickly liberated from the cycle of life and death. He also describes the various qualities of the devotees who are very dear to Him.","translit_title":"Bhakti Yog","body_translit":null,"body_translit_meant":null,"body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":12,"lang":"en"},{"id":"71cb3228-990f-44fa-a093-a5059c1168b6","type":"verses","target":{"id":"1997cd59-273d-4fbc-9b18-e3e75112eefd","title":null,"body":"If you are incapable of doing a steady practice, then have Me as your chief aim in performing actions. Even by performing actions for Me, you shall attain success.","translit_title":null,"body_translit":"abhyāse ’py asamartho ’si mat-karma-paramo bhava\nmad-artham api karmāṇi kurvan siddhim avāpsyasi\n","body_translit_meant":"abhyāse—in practice; api—if; asamarthaḥ—unable; asi—you; mat-karma paramaḥ—devotedly work for me; bhava—be; mat-artham—for my sake; api—also; karmāṇi—work; kurvan—performing; siddhim—perfection; avāpsyasi—you shall achieve\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"812cf6f1-9e8c-4170-b6ec-041ee58f1d3b"},{"id":"9180d8cb-aa61-4147-8d72-1f204f033729","type":"verses","target":{"id":"c149a061-95b4-47ea-b523-d7a5ca521419","title":null,"body":"Those who, as instructed above, resort to this duty that leads to immortality, who have faith in it and have Me as their only goal—those devotees are exceedingly dear to Me.","translit_title":null,"body_translit":"ye tu dharmyāmṛitam idaṁ yathoktaṁ paryupāsate\nśhraddadhānā mat-paramā bhaktās te ’tīva me priyāḥ\n","body_translit_meant":"ye—who; tu—indeed; dharma—of wisdom; amṛitam—nectar; idam—this; yathā—as; uktam—declared; paryupāsate—exclusive devotion; śhraddadhānāḥ—with faith; mat-paramāḥ—intent on me as the supreme goal; bhaktāḥ—devotees; te—they; atīva—exceedingly; me—to me; priyāḥ—dear\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"c7cf4bfc-4049-48d9-8225-0a2404dd9d8a"},{"id":"0ae85716-c39d-4681-b255-ad5bb01c8c7e","type":"verses","target":{"id":"af6f0924-c886-4346-9e6f-453f973d08d7","title":null,"body":"Absence of pride, absence of hypocrisy, harmlessness, patience, uprightness, service to the preceptor, purity of mind and body, steadfastness, and self-control.","translit_title":null,"body_translit":"amānitvam adambhitvam ahinsā kṣhāntir ārjavam\nāchāryopāsanaṁ śhauchaṁ sthairyam ātma-vinigrahaḥ\n","body_translit_meant":"amānitvam—humbleness; adambhitvam—freedom from hypocrisy; ahinsā—non-violence; kṣhāntiḥ—forgiveness; ārjavam—simplicity; āchārya-upāsanam—service of the Guru; śhaucham—cleanliness of body and mind; sthairyam—steadfastness; ātma-vinigrahaḥ—self-control;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"0267c904-3f21-46bc-a8b7-026aa7dd6390"},{"id":"eb140968-4108-405e-9816-a60f6d3ef6c3","type":"verses","target":{"id":"240a2001-1d27-487f-b2e5-55260004a276","title":null,"body":"This is the Light of all lights, stated to be beyond darkness; it is to be known by the above knowledge; it is to be attained only through knowledge; and it distinctly remains in the heart of all.","translit_title":null,"body_translit":"jyotiṣhām api taj jyotis tamasaḥ param uchyate\njñānaṁ jñeyaṁ jñāna-gamyaṁ hṛidi sarvasya viṣhṭhitam\n","body_translit_meant":"jyotiṣhām—in all luminarie; api—and; tat—that; jyotiḥ—the source of light; tamasaḥ—the darkness; param—beyond; uchyate—is said (to be); jñānam—knowledge; jñeyam—the object of knowledge; jñāna-gamyam—the goal of knowledge; hṛidi—within the heart; sarvasya—of all living beings; viṣhṭhitam—dwells\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"8b4527f5-a2ef-4fb1-92d2-307dab35bf54"},{"id":"116f4ad5-4307-47d7-be9f-fefc91421309","type":"verses","target":{"id":"164b72a3-cf38-49f1-b825-64affc9f7d3d","title":null,"body":"Whoever perceives the Supreme Lord as abiding and non-perishing in all beings, even as they perish, perceives properly.","translit_title":null,"body_translit":"samaṁ sarveṣhu bhūteṣhu tiṣhṭhantaṁ parameśhvaram\nvinaśhyatsv avinaśhyantaṁ yaḥ paśhyati sa paśhyati\n","body_translit_meant":"samam—equally; sarveṣhu—in all; bhūteṣhu—beings; tiṣhṭhan-tam—accompanying; parama-īśhvaram—Supreme Soul; vinaśhyatsu—amongst the perishable; avinaśhyantam—the imperishable; yaḥ—who; paśhyati—see; saḥ—they; paśhyati—perceive\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"8fce1857-c107-4ed0-9895-7f141d66209d"},{"id":"3642e264-1b95-4a7d-95df-2241a21d96a1","type":"verses","target":{"id":"f85ab8d3-b020-4890-a374-9aea1f8d5bbd","title":null,"body":"O descendant of Bharata! The Sattva increases by overpowering the Rajas and the Tamas; the Rajas increases by overpowering the Sattva and the Tamas; and the Tamas increases likewise by overpowering the Sattva and the Rajas.","translit_title":null,"body_translit":"rajas tamaśh chābhibhūya sattvaṁ bhavati bhārata\nrajaḥ sattvaṁ tamaśh chaiva tamaḥ sattvaṁ rajas tathā\n","body_translit_meant":"rajaḥ—mode of passion; tamaḥ—mode of ignorance; cha—and; abhibhūya—prevails; sattvam—mode of goodness; bhavati—becomes; bhārata—Arjun, the son of Bharat; rajaḥ—mode of passion; sattvam—mode of goodness; tamaḥ—mode of ignorance; cha—and; eva—indeed; tamaḥ—mode of ignorance; sattvam—mode of goodness; rajaḥ—mode of passion; tathā—also\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"020a78c3-eec5-409d-8658-48c7efffa11e"},{"id":"dfeae9dc-3011-41bb-a559-b5412f94d963","type":"verses","target":{"id":"d298a48f-8109-468b-a5e0-ae64de8f580d","title":null,"body":"You are Vayu, Yama, Agni, Varuna, the Moon, Prajapati, and the great-paternal-grandfather; I offer salutations to You a thousand times, and again, even more salutations to You.","translit_title":null,"body_translit":"vāyur yamo ’gnir varuṇaḥ śhaśhāṅkaḥ\nprajāpatis tvaṁ prapitāmahaśh cha\nnamo namas te ’stu sahasra-kṛitvaḥ\npunaśh cha bhūyo ’pi namo namas te\n","body_translit_meant":"vāyuḥ—the god of wind; yamaḥ—the god of death; agniḥ—the god of fire; varuṇaḥ—the god of water; śhaśha-aṅkaḥ—the moon-God; prajāpatiḥ—Brahma; tvam—you; prapitāmahaḥ—the great-grandfather; cha—and; namaḥ—my salutations; namaḥ—my salutations; te—unto you; astu—let there be; sahasra-kṛitvaḥ—a thousand times; punaḥ cha—and again; bhūyaḥ—again; api—also; namaḥ—(offering) my salutations; namaḥ te—offering my salutations unto you\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"0b1a01e7-1b78-4930-9c2b-0c19d6361cc4"},{"id":"8e5085c4-9c89-44b4-8447-f18c47eec221","type":"verses","target":{"id":"51213cd6-9b0e-419f-8e89-155101332082","title":null,"body":"Let there be no distress or bewilderment in you upon seeing this terrifying and violent form of Mine; be free from fear, and with a cheerful heart, behold again this form of Mine which is the same as before.","translit_title":null,"body_translit":"mā te vyathā mā cha vimūḍha-bhāvo\ndṛiṣhṭvā rūpaṁ ghoram īdṛiṅ mamedam\nvyapeta-bhīḥ prīta-manāḥ punas tvaṁ\ntad eva me rūpam idaṁ prapaśhya\n","body_translit_meant":"mā te—you shout not be; vyathā—afraid; mā—not; cha—and; vimūḍha-bhāvaḥ—bewildered state; dṛiṣhṭvā—on seeing; rūpam—form; ghoram—terrible; īdṛik—such; mama—of mine; idam—this; vyapeta-bhīḥ—free from fear; prīta-manāḥ—cheerful mind; punaḥ—again; tvam—you; tat eva—that very; me—my; rūpam—form; idam—this; prapaśhya—behold\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"d6340b17-fd81-4711-9318-6e918b953f39"},{"id":"30346082-80aa-4e63-9f8f-82d0ab686845","type":"verses","target":{"id":"17731ce4-5376-42b5-a609-07bbc69e9ce0","title":null,"body":"The Bhagavat said, \"Those who, causing their mind to enter into Me well, remain permanently attached to Me, and are endowed with an extraordinary faith, worship Me—they are considered by Me to be the best among the masters of Yoga.\"","translit_title":null,"body_translit":"śhrī-bhagavān uvācha\nmayy āveśhya mano ye māṁ nitya-yuktā upāsate\nśhraddhayā parayopetās te me yuktatamā matāḥ\n","body_translit_meant":"śhrī-bhagavān uvācha—the Blessed Lord said; mayi—on me; āveśhya—fix; manaḥ—the mind; ye—those; mām—me; nitya yuktāḥ—always engaged; upāsate—worship; śhraddhayā—with faith; parayā—best; upetāḥ—endowed; te—they; me—by me; yukta-tamāḥ—situated highest in Yog; matāḥ—I consider\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"ccc49122-f213-47d0-9f20-96238c661a56"},{"id":"60de91d4-f9c7-4c53-ad8c-d2da3b99a4c7","type":"verses","target":{"id":"3bda6b1c-01e2-42b5-b086-58dfbcced323","title":null,"body":"For, knowledge is superior to practice; due to knowledge, meditation becomes pre-eminent; from meditation arises the renunciation of the fruits of actions; and peace follows renunciation.","translit_title":null,"body_translit":"śhreyo hi jñānam abhyāsāj jñānād dhyānaṁ viśhiṣhyate\ndhyānāt karma-phala-tyāgas tyāgāch chhāntir anantaram\n","body_translit_meant":"śhreyaḥ—better; hi—for; jñānam—knowledge; abhyāsāt—than (mechanical) practice; jñānāt—than knowledge; dhyānam—meditation; viśhiṣhyate—better; dhyānāt—than meditation; karma-phala-tyāgaḥ—renunciation of the fruits of actions; tyāgāt—renunciation; śhāntiḥ—peace; anantaram—immediately\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"868893cb-5aa6-4892-9cde-6320ac6b0039"},{"id":"f09b7b97-2866-4c44-8e4d-37a621c6a4de","type":"chapters","target":{"id":"fe0bc5f8-60cf-4423-b56d-82981872d869","title":"Yoga through Distinguishing the Field and the Knower of the Field","body":"The thirteenth chapter of the Bhagavad Gita is \"Ksetra Ksetrajna Vibhaaga Yoga\". The word \"kshetra\" means \"the field\", and the \"kshetrajna\" means \"the knower of the field\". We can think of our material body as the field and our immortal soul as the knower of the field. In this chapter, Krishna discriminates between the physical body and the immortal soul. He explains that the physical body is temporary and perishable whereas the soul is permanent and eternal. The physical body can be destroyed but the soul can never be destroyed. The chapter then describes God, who is the Supreme Soul. All the individual souls have originated from the Supreme Soul. One who clearly understands the difference between the body, the Soul and the Supreme Soul attains the realization of Brahman.","translit_title":"Kṣhetra Kṣhetrajña Vibhāg Yog","body_translit":null,"body_translit_meant":null,"body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":13,"lang":"en"},{"id":"6493005e-e5a1-4d51-b600-f8587db52fdd","type":"verses","target":{"id":"a7e64ccd-6e4f-4c92-9353-2b5b4148b82b","title":null,"body":"Absence of desire for sense-objects, and also absence of egotism; pondering over the evils of birth, death, old age, sickness, and sorrow;","translit_title":null,"body_translit":"indriyārtheṣhu vairāgyam anahankāra eva cha\njanma-mṛityu-jarā-vyādhi-duḥkha-doṣhānudarśhanam\n","body_translit_meant":"indriya-artheṣhu—toward objects of the senses; vairāgyam—dispassion; anahankāraḥ—absence of egotism; eva cha—and also; janma—of birth; mṛityu—death; jarā—old age; vyādhi—disease; duḥkha—evils; doṣha—faults; anudarśhanam—perception;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"c463118a-f288-4ffd-bd6c-e1c8844341f9"},{"id":"5d25f847-ae54-45c2-8831-907e4f5efcce","type":"verses","target":{"id":"0ca19829-c107-471d-a918-dfe870ca94e5","title":null,"body":"This field, as well as the knowledge and what is to be known, are all mentioned collectively; clearly understanding this, My devotee becomes worthy of My state.","translit_title":null,"body_translit":"iti kṣhetraṁ tathā jñānaṁ jñeyaṁ choktaṁ samāsataḥ\nmad-bhakta etad vijñāya mad-bhāvāyopapadyate\n","body_translit_meant":"iti—thus; kṣhetram—the nature of the field; tathā—and; jñānam—the meaning of knowledge; jñeyam—the object of knowledge; cha—and; uktam—revealed; samāsataḥ—in summary; mat-bhaktaḥ—my devotee; etat—this; vijñāya—having understood; mat-bhāvāya—my divine nature; upapadyate—attain\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"823ddee9-5d33-46ab-afc2-22bd6a7dea0f"},{"id":"b4418ced-7f67-42a8-a905-317990b96211","type":"verses","target":{"id":"1ed440f8-dcb7-45b4-83ba-73080a006fc0","title":null,"body":"Whoever, perceiving the Lord as abiding in all alike, does not harm themselves by themselves, they attain, on that account, the Supreme Goal.","translit_title":null,"body_translit":"samaṁ paśhyan hi sarvatra samavasthitam īśhvaram\nna hinasty ātmanātmānaṁ tato yāti parāṁ gatim\n","body_translit_meant":"samam—equally; paśhyan—see; hi—indeed; sarvatra—everywhere; samavasthitam—equally present; īśhvaram—God as the Supreme soul; na—do not; hinasti—degrade; ātmanā—by one’s mind; ātmānam—the self; tataḥ—thereby; yāti—reach; parām—the supreme; gatim—destination\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"5a3559ac-b0d7-44ea-832d-f91d4fbb2800"},{"id":"03e28b4d-2803-40ba-ad85-1f430c8561dc","type":"verses","target":{"id":"6d646b14-7336-409a-a16d-9bf34b4f013c","title":null,"body":"You are the father of the world of the moving and the unmoving; you are the great preceptor of this universe; in the triad of worlds, there is no one equal to you—how can there be anyone else superior, having greatness not comprehended?","translit_title":null,"body_translit":"pitāsi lokasya charācharasya\ntvam asya pūjyaśh cha gurur garīyān\nna tvat-samo ’sty abhyadhikaḥ kuto ’nyo\nloka-traye ’py apratima-prabhāva\n","body_translit_meant":"pitā—the father; asi—you are; lokasya—of the entire universe; chara—moving; acharasya—nonmoving; tvam—you; asya—of this; pūjyaḥ—worshipable; cha—and; guruḥ—spiritual master; garīyān—glorious; na—not; tvat-samaḥ—equal to you; asti—is; abhyadhikaḥ—greater; kutaḥ—who is?; anyaḥ—other; loka-traye—in the three worlds; api—even; apratima-prabhāva—possessor of incomparable power\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"23f9ac85-b862-4dc2-a0ce-88e1b301acfe"},{"id":"a55039bc-9e56-4ab3-b0fd-0b307d720811","type":"verses","target":{"id":"8597ecac-abed-4c87-ac7b-0da2961ecf54","title":null,"body":"Neither by reciting the Vedas, nor by observing austerity, nor by giving gifts, nor by performing sacrifice, can I be seen in this way as you have seen Me now.","translit_title":null,"body_translit":"nāhaṁ vedair na tapasā na dānena na chejyayā\nśhakya evaṁ-vidho draṣhṭuṁ dṛiṣhṭavān asi māṁ yathā\n","body_translit_meant":"na—never; aham—I; vedaiḥ—by study of the Vedas; na—never; tapasā—by serious penances; na—never; dānena—by charity; na—never; cha—also; ijyayā—by worship; śhakyaḥ—it is possible; evam-vidhaḥ—like this; draṣhṭum—to see; dṛiṣhṭavān—seeing; asi—you are; mām—me; yathā—as\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"a4d63391-a896-4575-bccf-294e84195350"},{"id":"678c5ec6-1876-47ae-a065-39f7b65d6aad","type":"verses","target":{"id":"b8345da4-b941-4b19-ab5e-5753c3136367","title":null,"body":"On the other hand, those who, having renounced all their actions in Me, have Me as their sole goal; and revere Me, meditating on Me through that Yoga alone, which admits no other element but Me in it;","translit_title":null,"body_translit":"ye tu sarvāṇi karmāṇi mayi sannyasya mat-paraḥ\nananyenaiva yogena māṁ dhyāyanta upāsate\n","body_translit_meant":"ye—who; tu—but; sarvāṇi—all; karmāṇi—actions; mayi—to me; sannyasya—dedicating; mat-paraḥ—regarding me as the Supreme goal; ananyena—exclusively; eva—certainly; yogena—with devotion; mām—me; dhyāyantaḥ—meditating; upāsate—worship;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"1a05ccfc-f28b-4029-b611-dd4f5b3c90ba"},{"id":"b9c38228-2cba-4b12-a0b0-a2beee621836","type":"verses","target":{"id":"f2b5e14f-189a-438d-a4a0-a0a2edabcc98","title":null,"body":"He who does not expect anything, who is pure, dexterous, unconcerned, and untroubled, and who has renounced all his undertakings all around—that devotee of Mine is dear to Me.","translit_title":null,"body_translit":"anapekṣhaḥ śhuchir dakṣha udāsīno gata-vyathaḥ\nsarvārambha-parityāgī yo mad-bhaktaḥ sa me priyaḥ\n","body_translit_meant":"anapekṣhaḥ—indifferent to worldly gain; śhuchiḥ—pure; dakṣhaḥ—skillful; udāsīnaḥ—without cares; gata-vyathaḥ—untroubled; sarva-ārambha—of all undertakings; parityāgī—renouncer; saḥ—who; mat-bhaktaḥ—my devotee; saḥ—he; me—to ne; priyaḥ—very dear\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"2feda9f4-bc7e-41a9-b839-5507d4154817"},{"id":"0a65441d-12f0-4f99-82a7-0d8b90e68c9f","type":"verses","target":{"id":"4202a781-78b6-4142-a826-fa289ad088c1","title":null,"body":"This has been sung many times by sages, and also has been clearly decided in the various Vedas in different contexts by means of their words that are suggestive of the Brahman (i.e. in the Upanishads) and are full of reasoning.","translit_title":null,"body_translit":"ṛiṣhibhir bahudhā gītaṁ chhandobhir vividhaiḥ pṛithak\nbrahma-sūtra-padaiśh chaiva hetumadbhir viniśhchitaiḥ\n","body_translit_meant":"ṛiṣhibhiḥ—by great sages; bahudhā—in manifold ways; gītam—sung; chhandobhiḥ—in Vedic hymns; vividhaiḥ—various; pṛithak—variously; brahma-sūtra—the Brahma Sūtra; padaiḥ—by the hymns; cha—and; eva—especially; hetu-madbhiḥ—with logic; viniśhchitaiḥ—conclusive evidence\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"9213d1d8-61bd-42f5-9db8-294563ada483"},{"id":"1c3e939d-69f1-44b6-a97c-d5c223a0c61c","type":"verses","target":{"id":"b4b4ef3e-f16c-4a2d-b726-69a7568b5938","title":null,"body":"It illuminates all the senses; yet it has no sense organs; it is unattached, yet supports all; it is free from the bonds, yet enjoys the bonds.","translit_title":null,"body_translit":"sarvendriya-guṇābhāsaṁ sarvendriya-vivarjitam\nasaktaṁ sarva-bhṛich chaiva nirguṇaṁ guṇa-bhoktṛi cha\n","body_translit_meant":"sarva—all; indriya—senses; guṇa—sense-objects; ābhāsam—the perciever; sarva—all; indriya—senses; vivarjitam—devoid of; asaktam—unattached; sarva-bhṛit—the sustainer of all; cha—yet; eva—indeed; nirguṇam—beyond the three modes of material nature; guṇa-bhoktṛi—the enjoyer of the three modes of material nature; cha—although\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"67254093-453a-4224-9803-f9e01716aa66"},{"id":"bf8f7666-ed69-4c51-a189-6f995096630c","type":"verses","target":{"id":"ec1ca246-e770-48ac-9920-d98a05860259","title":null,"body":"However, some yogis perceive the Self as the Self within the self through meditation, others through knowledge-yoga, and still others through action-yoga.","translit_title":null,"body_translit":"dhyānenātmani paśhyanti kechid ātmānam ātmanā\nanye sānkhyena yogena karma-yogena chāpare\n","body_translit_meant":"dhyānena—through meditation; ātmani—within one’s heart; paśhyanti—percieve; kechit—some; ātmānam—the Supreme soul; ātmanā—by the mind; anye—others; sānkhyena—through cultivation of knowledge; yogena—the yog system; karma-yogena—union with God with through path of action; cha—and; apare—others\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"b06b3748-68a6-4988-b878-ee0c91967f76"},{"id":"08b87af9-6eb4-4aa0-ab89-b0a67e755a07","type":"verses","target":{"id":"61ab2cd5-b513-448a-82df-67e660757b17","title":null,"body":"Those who thus understand, with the knowledge-eye, the inner Soul of the Field and the Field-sensitizer, as well as the deliverance from the Material Cause of the elements—they attain the Supreme.","translit_title":null,"body_translit":"kṣhetra-kṣhetrajñayor evam antaraṁ jñāna-chakṣhuṣhā\nbhūta-prakṛiti-mokṣhaṁ cha ye vidur yānti te param\n","body_translit_meant":"kṣhetra—the body; kṣhetra-jñayoḥ—of the knower of the body; evam—thus; antaram—the difference; jñāna-chakṣhuṣhā—with the eyes of knowledge; bhūta—the living entity; prakṛiti-mokṣham—release from material nature; cha—and; ye—who; viduḥ—know; yānti—approach; te—they; param—the Supreme\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"a7547558-f82c-4eb7-9edb-4affa40da9b1"},{"id":"5b557ca7-4360-4778-958b-3eff23760102","type":"verses","target":{"id":"8aa562fc-e54b-472d-82a8-15a6c840da58","title":null,"body":"You should know that Rajas is of the nature of desire and is a source of craving-attachment; and it binds the embodied one by attachment to action, O son of Kunti!","translit_title":null,"body_translit":"rajo rāgātmakaṁ viddhi tṛiṣhṇā-saṅga-samudbhavam\ntan nibadhnāti kaunteya karma-saṅgena dehinam\n","body_translit_meant":"rajaḥ—mode of passion; rāga-ātmakam—of the nature of passion; viddhi—know; tṛiṣhṇā—desires; saṅga—association; samudbhavam—arises from; tat—that; nibadhnāti—binds; kaunteya—Arjun, the son of Kunti; karma-saṅgena—through attachment to fruitive actions; dehinam—the embodied soul\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"bfdba6d0-4bda-4b41-bddb-613706c21d8a"},{"id":"70894562-f58f-4a15-ad72-b0020c5ee876","type":"verses","target":{"id":"411ecca5-64c8-4f0f-a7c8-2db61f35fd3e","title":null,"body":"I desire to see You in the same manner, wearing a crown, holding the club and the discus in Your hands; please be with the same form having four hands, O Thousand-armed One! O Universal Form!","translit_title":null,"body_translit":"kirīṭinaṁ gadinaṁ chakra-hastam\nichchhāmi tvāṁ draṣhṭum ahaṁ tathaiva\ntenaiva rūpeṇa chatur-bhujena\nsahasra-bāho bhava viśhva-mūrte\n","body_translit_meant":"kirīṭinam—wearing the crown; gadinam—carrying the mace; chakra-hastam—disc in hand; ichchhāmi—I wish; tvām—you; draṣhṭum—to see; aham—I; tathā eva—similarly; tena eva—in that; rūpeṇa—form; chatuḥ-bhujena—four-armed; sahasra-bāho—thousand-armed one; bhava—be; viśhwa-mūrte—universal form\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"f999f56b-5732-4865-8f39-e681e898bcff"},{"id":"c66ca8d7-b894-4307-9283-477310b92bd8","type":"verses","target":{"id":"67a94615-92c6-40a4-9f12-eb5c583dbe69","title":null,"body":"In case you are not able to cause your mind to enter completely into Me, then, O Dhananjaya! Seek to attain Me through the practice of Yoga.","translit_title":null,"body_translit":"atha chittaṁ samādhātuṁ na śhaknoṣhi mayi sthiram\nabhyāsa-yogena tato mām ichchhāptuṁ dhanañjaya\n","body_translit_meant":"atha—if; chittam—mind; samādhātum—to fix; na śhaknoṣhi—(you) are unable; mayi—on me; sthiram—steadily; abhyāsa-yogena—by uniting with God through repeated practice; tataḥ—then; mām—me; ichchhā—desire; āptum—to attain; dhanañjaya—Arjun, the conqueror of wealth\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"658ca2f0-2834-4a0a-8ef4-179bb36f80f4"},{"id":"6d6e2c9e-017e-4ca2-807f-f52511662098","type":"verses","target":{"id":"ad89fcab-dc4a-4299-95e0-126acb52b145","title":null,"body":"To whom blame and praise are equal; who is silent (does not over-speak) and is content with whatever comes to him; who has no fixed thoughts in the mundane life; who is yet steady-minded in spiritual practice and is full of devotion—that man is dear to Me.","translit_title":null,"body_translit":"tulya-nindā-stutir maunī santuṣhṭo yena kenachit\naniketaḥ sthira-matir bhaktimān me priyo naraḥ\n","body_translit_meant":"tulya—alike; nindā-stutiḥ—reproach and praise; maunī—silent contemplation; santuṣhṭaḥ—contented; yena kenachit—with anything; aniketaḥ—without attachment to the place of residence; sthira—firmly fixed; matiḥ—intellect; bhakti-mān—full of devotion; me—to me; priyaḥ—very dear; naraḥ—a person\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"d91fac72-9ca0-45fb-b576-750ab3765387"},{"id":"5a3936f1-4498-40da-99bd-4b372e7df921","type":"verses","target":{"id":"7b647580-1caa-48e8-b90b-e5a3271e4531","title":null,"body":"The desire, the hatred, the pleasure, the pain, the aggregate, the sensibility, and the feeling of satisfaction (or self-find): This, together with its modifications, is collectively called 'the Field'.","translit_title":null,"body_translit":"ichchhā dveṣhaḥ sukhaṁ duḥkhaṁ saṅghātaśh chetanā dhṛitiḥ\netat kṣhetraṁ samāsena sa-vikāram udāhṛitam\n","body_translit_meant":"ichchhā—desire; dveṣhaḥ—aversion; sukham—happiness; duḥkham—misery; saṅghātaḥ—the aggregate; chetanā—the consciousness; dhṛitiḥ—the will; etat—all these; kṣhetram—the field of activities; samāsena—comprise of; sa-vikāram—with modifications; udāhṛitam—are said\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"9b8831ec-c453-4b2a-a771-1a3a9a327b80"},{"id":"a94e5877-21e1-4d13-847b-e33cfe98b80f","type":"verses","target":{"id":"392ac7d8-82d6-4868-b970-7cdb5a324be3","title":null,"body":"It remains undistinguished among the distinguished beings, and appears as if distinguished. It is to be known as the supporter of beings, and also as their swallower and originator.","translit_title":null,"body_translit":"avibhaktaṁ cha bhūteṣhu vibhaktam iva cha sthitam\nbhūta-bhartṛi cha taj jñeyaṁ grasiṣhṇu prabhaviṣhṇu cha\n","body_translit_meant":"avibhaktam—indivisible; cha—although; bhūteṣhu—amongst living beings; vibhaktam—divided; iva—apparently; cha—yet; sthitam—situated; bhūta-bhartṛi—the sustainer of all beings; cha—also; tat—that; jñeyam—to be known; grasiṣhṇu—the annihilator; prabhaviṣhṇu—the creator; cha—and\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"16cae6bf-71cf-4bae-af2e-d9950426282d"},{"id":"5d3931b6-e041-4b87-a09d-1bfb0ad57ac4","type":"verses","target":{"id":"13c226a9-d3cb-4011-9c35-7742344cd494","title":null,"body":"Whatever living being is born, stationary or moving, you should know that all this has a close connection with the Field and the Field-sensitizer, O best of the Bharatas!","translit_title":null,"body_translit":"yāvat sañjāyate kiñchit sattvaṁ sthāvara-jaṅgamam\nkṣhetra-kṣhetrajña-sanyogāt tad viddhi bharatarṣhabha\n","body_translit_meant":"yāvat—whatever; sañjāyate—manifesting; kiñchit—anything; sattvam—being; sthāvara—unmoving; jaṅgamam—moving; kṣhetra—field of activities; kṣhetra-jña—knower of the field; sanyogāt—combination of; tat—that; viddhi—know; bharata-ṛiṣhabha—best of the Bharatas\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"59bec441-3461-45d8-a67f-376b1b701311"},{"id":"56c45c31-85e2-4dda-a7ec-61a3a9b7cfc7","type":"chapters","target":{"id":"36ef4dda-2112-421d-9bb0-d753e46bd2fe","title":"Yoga through Understanding the Three Modes of Material Nature","body":"The fourteenth chapter of the Bhagavad Gita is \"Gunatraya Vibhaga Yoga\". In this chapter, Krishna reveals the three gunas (modes) of the material nature - goodness, passion and ignorance which everything in the material existence is influenced by. He further explains the essential characteristics of each of these modes, their cause and how they influence a living entity affected by them. He then reveals the various characteristics of the persons who have gone beyond these gunas. The chapter ends with Krishna reminding us of the power of pure devotion to God and how attachment to God can help us transcend these gunas.","translit_title":"Guṇa Traya Vibhāg Yog","body_translit":null,"body_translit_meant":null,"body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":14,"lang":"en"},{"id":"1289653a-b634-4c18-8912-4a45a7df9c81","type":"verses","target":{"id":"bdebc1ec-3280-475b-87d8-e289d3f613e0","title":null,"body":"O descendant of Bharata! The Sattva fully dominates the Embodied in the field of happiness; the Rajas in action; but the Tamas also totally dominates in the field of negligence, by veiling knowledge.","translit_title":null,"body_translit":"sattvaṁ sukhe sañjayati rajaḥ karmaṇi bhārata\njñānam āvṛitya tu tamaḥ pramāde sañjayaty uta\n","body_translit_meant":"sattvam—mode of goodness; sukhe—to happiness; sañjayati—binds; rajaḥ—mode of passion; karmaṇi—toward actions; bhārata—Arjun, the son of Bharat; jñānam—wisdom; āvṛitya—clouds; tu—but; tamaḥ—mode of ignorance; pramāde—to delusion; sañjayati—binds; uta—indeed\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"7abc5622-278e-4dce-bd35-bf322f3d3974"},{"id":"e2ae571f-6d20-4aee-a773-7cb3da63126c","type":"verses","target":{"id":"aadcd009-f316-477f-aa36-9a571a9d73c9","title":null,"body":"When the Perceiver (the Self) finds no agent other than the Strands, and realizes That which is beyond the Strands, then he attains My state.","translit_title":null,"body_translit":"nānyaṁ guṇebhyaḥ kartāraṁ yadā draṣhṭānupaśhyati\nguṇebhyaśh cha paraṁ vetti mad-bhāvaṁ so ’dhigachchhati\n","body_translit_meant":"na—no; anyam—other; guṇebhyaḥ—of the guṇas; kartāram—agents of action; yadā—when; draṣhṭā—the seer; anupaśhyati—see; guṇebhyaḥ—to the modes of nature; cha—and; param—transcendental; vetti—know; mat-bhāvam—my divine nature; saḥ—they; adhigachchhati—attain\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"5a698d4f-6d00-4727-9e11-52822afdeaaa"},{"id":"d9425b12-466f-4818-83a2-d1126fa22beb","type":"verses","target":{"id":"c8a2d570-3169-4e3b-8fe7-c12d6de4785d","title":null,"body":"Not by the knowledge of the Vedas and sacrifices, nor by making gifts, nor by the rituals, nor by severe austerities, can I be seen in this form in the world of men by anyone other than yourself, O great hero of the Kurus!","translit_title":null,"body_translit":"na veda-yajñādhyayanair na dānair\nna cha kriyābhir na tapobhir ugraiḥ\nevaṁ-rūpaḥ śhakya ahaṁ nṛi-loke\ndraṣhṭuṁ tvad anyena kuru-pravīra\n","body_translit_meant":"na—not; veda-yajña—by performance of sacrifice; adhyayanaiḥ—by study of the Vedas; na—nor; dānaiḥ—by charity; na—nor; cha—and; kriyābhiḥ—by rituals; na—not; tapobhiḥ—by austerities; ugraiḥ—severe; evam-rūpaḥ—in this form; śhakyaḥ—possible; aham—I; nṛi-loke—in the world of the mortals; draṣhṭum—to be seen; tvat—than you; anyena—by another; kuru-pravīra—the best of the Kuru warriors\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"7caaa0d0-5b2c-45dd-bf2b-e8fc5548187f"},{"id":"b0447e56-7b0f-4350-a1be-63a47d7c7d6e","type":"verses","target":{"id":"928281f6-492b-4ff3-8dd6-9ee90ff93944","title":null,"body":"Arjuna said: Who are the best knowers of yoga, those who are constantly attached to You and worship You, or those who worship the motionless Unmanifest?","translit_title":null,"body_translit":"arjuna uvācha\nevaṁ satata-yuktā ye bhaktās tvāṁ paryupāsate\nye chāpy akṣharam avyaktaṁ teṣhāṁ ke yoga-vittamāḥ\n","body_translit_meant":"arjunaḥ uvācha—Arjun said; evam—thus; satata—steadfastly; yuktāḥ—devoted; ye—those; bhaktāḥ—devotees; tvām—you; paryupāsate—worship; ye—those; cha—and; api—also; akṣharam—the imperishable; avyaktam—the formless Brahman; teṣhām—of them; ke—who; yoga-vit-tamāḥ—more perfect in Yog\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"943062d6-db8c-451f-8a1a-5ab440c25fca"},{"id":"8678a9b9-d144-43eb-aa86-4582ab645a0c","type":"verses","target":{"id":"543c366c-1acf-488b-beba-0cc662c8bdfc","title":null,"body":"Now, if you are not capable of doing this either, then take refuge in My Yoga, renouncing the fruits of all action, with your mind subdued.","translit_title":null,"body_translit":"athaitad apy aśhakto ’si kartuṁ mad-yogam āśhritaḥ\nsarva-karma-phala-tyāgaṁ tataḥ kuru yatātmavān\n","body_translit_meant":"atha—if; etat—this; api—even; aśhaktaḥ—unable; asi—you are; kartum—to work; mad-yogam—with devotion to me; āśhritaḥ—taking refuge; sarva-karma—of all actions; phala-tyāgam—to renounce the fruits; tataḥ—then; kuru—do; yata-ātma-vān—be situated in the self\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"5e57c4c6-a158-4531-a44f-b34771d36fee"},{"id":"0c0b0c37-d1dd-4045-818a-6a04b913b161","type":"verses","target":{"id":"7c679049-19d7-4146-89ef-9b256753b473","title":null,"body":"Non-attachment, detachment towards one's children, wives, houses, and the like; and a constant even-mindedness in the occurrence of desirable and undesirable things.","translit_title":null,"body_translit":"asaktir anabhiṣhvaṅgaḥ putra-dāra-gṛihādiṣhu\nnityaṁ cha sama-chittatvam iṣhṭāniṣhṭopapattiṣhu\n","body_translit_meant":"asaktiḥ—non-attachment; anabhiṣhvaṅgaḥ—absence of craving; putra—children; dāra—spouse; gṛiha-ādiṣhu—home, etc; nityam—constant; cha—and; sama-chittatvam—even-mindedness; iṣhṭa—the desirable; aniṣhṭa—undesirable; upapattiṣhu—having obtained;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"dfe847ec-904f-4b25-abe4-3f3ec14e34ec"},{"id":"a2bb3c37-faa6-476c-81d7-6b3e3634888c","type":"verses","target":{"id":"1cfe0c63-6ea8-42a3-b85f-ac46407c9ecc","title":null,"body":"Both the Material Cause and the Soul are beginningless; you should know this. You should also know that the modifications and strands are born from the Material Cause.","translit_title":null,"body_translit":"prakṛitiṁ puruṣhaṁ chaiva viddhy anādī ubhāv api\nvikārānśh cha guṇānśh chaiva viddhi prakṛiti-sambhavān\n","body_translit_meant":"prakṛitim—material nature; puruṣham—the individual souls; cha—and; eva—indeed; viddhi—know; anādī—beginningless; ubhau—both; api—and; vikārān—transformations (of the body); cha—also; guṇān—the three modes of nature; cha—and; eva—indeed; viddhi—know; prakṛiti—material energy; sambhavān—produced by\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"85b07d90-57c7-42f9-943d-06ac006365b0"},{"id":"3ad6e4ec-1a38-4eac-a0b4-bc7316076ec7","type":"verses","target":{"id":"812d2106-f1a0-46e8-91f6-5a31726ca2d6","title":null,"body":"Whoever views all actions as being performed (or all objects as being created) by the Material Cause itself, and at the same time views their own Self as a non-performer (or non-creator) - they view properly.","translit_title":null,"body_translit":"prakṛityaiva cha karmāṇi kriyamāṇāni sarvaśhaḥ\nyaḥ paśhyati tathātmānam akartāraṁ sa paśhyati\n","body_translit_meant":"prakṛityā—by material nature; eva—truly; cha—also; karmāṇi—actions; kriyamāṇāni—are performed; sarvaśhaḥ—all; yaḥ—who; paśhyati—see; tathā—also; ātmānam—(embodied) soul; akartāram—actionless; saḥ—they; paśhyati—see\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"b9be5d34-8307-45cc-9c8e-f8414ecd6f66"},{"id":"222634b7-3d9d-4fab-9ae1-b2948e9da10c","type":"verses","target":{"id":"d4d66434-dcaa-45a4-81c9-d560365768bd","title":null,"body":"Holding onto this knowledge, they have attained a state with attributes common to Me; they are neither born at the time of creation nor grieve at the time of dissolution.","translit_title":null,"body_translit":"idaṁ jñānam upāśhritya mama sādharmyam āgatāḥ\nsarge ’pi nopajāyante pralaye na vyathanti cha\n","body_translit_meant":"idam—this; jñānam—wisdom; upāśhritya—take refuge in; mama—mine; sādharmyam—of similar nature; āgatāḥ—having attained; sarge—at the time of creation; api—even; na—not; upajāyante—are born; pralaye—at the time of dissolution; na-vyathanti—they will not experience misery; cha—and\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"2fb7e953-2bc0-476f-aa30-7a25a4338f74"},{"id":"ddcede5c-ffd7-40d0-8a21-7004a978890a","type":"verses","target":{"id":"942479cb-81a3-45ce-aee2-a59680469065","title":null,"body":"Greed, exertion, undertaking of actions, restlessness, and craving—these are born when Rajas predominates, O chief of the Bharatas!","translit_title":null,"body_translit":"lobhaḥ pravṛittir ārambhaḥ karmaṇām aśhamaḥ spṛihā\nrajasy etāni jāyante vivṛiddhe bharatarṣhabha\n\n","body_translit_meant":"lobhaḥ—greed; pravṛittiḥ—activity; ārambhaḥ—exertion; karmaṇām—for fruitive actions; aśhamaḥ—restlessness; spṛihā—craving; rajasi—of the mode of passion; etāni—these; jāyante—develop; vivṛiddhe—when predominates; bharata-ṛiṣhabha—the best of the Bharatas, Arjun;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"15533e43-943a-4560-a7bd-6345aceabc20"},{"id":"51f94a02-ea89-451e-9753-6fac9a1ffd82","type":"verses","target":{"id":"125aba70-0613-4cd9-9565-34a874c55bcd","title":null,"body":"The Bhagavat said, \"O son of Pandu! He neither abhors nor craves for illumination, exertion, and delusion, as and when they arise or cease to be.\"","translit_title":null,"body_translit":"śhrī-bhagavān uvācha\nprakāśhaṁ cha pravṛittiṁ cha moham eva cha pāṇḍava\nna dveṣhṭi sampravṛittāni na nivṛittāni kāṅkṣhati\n\n","body_translit_meant":"śhrī-bhagavān uvācha—the Supreme Divine Personality said; prakāśham—illumination; cha—and; pravṛittim—activity; cha—and; moham—delusion; eva—even; cha—and; pāṇḍava—Arjun, the son of Pandu; na dveṣhṭi—do not hate; sampravṛittāni—when present; na—nor; nivṛittāni—when absent; kāṅkṣhati—longs;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"44b73d2f-b068-4968-87fa-b6cc21932ac7"},{"id":"4d7c258c-c062-4379-8f57-1ac1c47cc2c7","type":"verses","target":{"id":"d6274729-11bb-4d89-a39c-afc68bc8c93d","title":null,"body":"Who remains well-content and is a practitioner of Yoga at all times; who is self-controlled and is firmly resolute; and who has offered to Me their mind and intellect-that devotee of Mine is dear to Me.","translit_title":null,"body_translit":"santuṣhṭaḥ satataṁ yogī yatātmā dṛiḍha-niśhchayaḥ\nmayy arpita-mano-buddhir yo mad-bhaktaḥ sa me priyaḥ\n","body_translit_meant":"santuṣhṭaḥ—contented; satatam—steadily; yogī—united in devotion; yata-ātmā—self-controlled; dṛiḍha-niśhchayaḥ—firm in conviction; mayi—to me; arpita—dedicated; manaḥ—mind; buddhiḥ—intellect; yaḥ—who; mat-bhaktaḥ—my devotees; saḥ—they; me—to me; priyaḥ—very dear\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"e3ddd578-e21b-446f-bf62-e5abcb001733"},{"id":"d1cda6a2-9181-4c48-bbbe-643eb38fd045","type":"verses","target":{"id":"616d525d-9272-4bf5-93bb-f5b40879cbbb","title":null,"body":"The Bhagavat said, \"O son of Kunti! This physical body is called the 'field' (decayer-cum-protector); He who sensitizes it—His knowers call Him properly the 'Field-sensitizer'.","translit_title":null,"body_translit":"śhrī-bhagavān uvācha\nidaṁ śharīraṁ kaunteya kṣhetram ity abhidhīyate\netad yo vetti taṁ prāhuḥ kṣhetra-jña iti tad-vidaḥ\n","body_translit_meant":"śhrī-bhagavān uvācha—the Supreme Divine Lord said; idam—this; śharīram—body; kaunteya—Arjun, the son of Kunti; kṣhetram—the field of activities; iti—thus; abhidhīyate—is termed as; etat—this; yaḥ—one who; vetti—knows; tam—that person; prāhuḥ—is called; kṣhetra-jñaḥ—the knower of the field; iti—thus; tat-vidaḥ—those who discern the truth\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"034de2d2-a4af-46e8-bd34-8ee8de9d2415"},{"id":"8ffce294-afaa-4565-a9cc-c646bd584718","type":"verses","target":{"id":"98c4133e-a96c-4e8f-9fd2-97fe7c3eee0e","title":null,"body":"Constancy in Self-knowledge, and viewing things with the aim of knowing the Reality—all this is declared to be conducive to true knowledge, and what is opposed to this is conducive to wrong knowledge.","translit_title":null,"body_translit":"adhyātma-jñāna-nityatvaṁ tattva-jñānārtha-darśhanam\netaj jñānam iti proktam ajñānaṁ yad ato ’nyathā\n","body_translit_meant":"adhyātma—spiritual; jñāna—knowledge; nityatvam—constancy; tattva-jñāna—knowledge of spiritual principles; artha—for; darśhanam—philosophy; etat—all this; jñānam—knowledge; iti—thus; proktam—declared; ajñānam—ignorance; yat—what; ataḥ—to this; anyathā—contrary\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"f07d3ff0-9e90-452f-9b11-3332dd888b56"},{"id":"ea7ee60e-bfc9-47d9-8684-ca834ac610dc","type":"verses","target":{"id":"20f99be1-9262-4a39-9e9a-92fe7efd3b63","title":null,"body":"For, the soul, seated on the material cause, enjoys the strands born of the material cause; His attachment to the strands is the cause of his births in good and evil wombs.","translit_title":null,"body_translit":"puruṣhaḥ prakṛiti-stho hi bhuṅkte prakṛiti-jān guṇān\nkāraṇaṁ guṇa-saṅgo ’sya sad-asad-yoni-janmasu\n","body_translit_meant":"puruṣhaḥ—the individual soul; prakṛiti-sthaḥ—seated in the material energy; hi—indeed; bhuṅkte—desires to enjoy; prakṛiti-jān—produced by the material energy; guṇān—the three modes of nature; kāraṇam—the cause; guṇa-saṅgaḥ—the attachment (to three guṇas); asya—of its; sat-asat-yoni—in superior and inferior wombs; janmasu—of birth\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"350d443d-fdd2-42d3-9a10-b814dee6e4b6"},{"id":"931a6e47-647f-4db5-baf7-7de9af5905cf","type":"verses","target":{"id":"513cc207-5a76-4877-be83-0da70e2d40d9","title":null,"body":"Because this is beginningless, and because this has no qualities, this Supreme Self is changeless and it neither acts nor gets stained [by actions], even though it dwells in the body, O son of Kunti!","translit_title":null,"body_translit":"anāditvān nirguṇatvāt paramātmāyam avyayaḥ\nśharīra-stho ’pi kaunteya na karoti na lipyate\n","body_translit_meant":"anāditvāt—being without beginning; nirguṇatvāt—being devoid of any material qualities; parama—the Supreme; ātmā—soul; ayam—this; avyayaḥ—imperishable; śharīra-sthaḥ—dwelling in the body; api—although; kaunteya—Arjun, the the son of Kunti; na—neither; karoti—acts; na—nor; lipyate—is tainted\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"44574772-ddaf-4e11-a587-bc2849ddb290"},{"id":"80165b43-da1d-44ed-8caf-f45ab73ada90","type":"verses","target":{"id":"b9759a26-3d21-42e0-9b77-ea197696d1c1","title":null,"body":"O son of Kunti! Whatever manifestations spring up in all the wombs, the mighty Brahman is the womb, and I am the father who sows the seed.","translit_title":null,"body_translit":"sarva-yoniṣhu kaunteya mūrtayaḥ sambhavanti yāḥ\ntāsāṁ brahma mahad yonir ahaṁ bīja-pradaḥ pitā\n","body_translit_meant":"sarva—all; yoniṣhu—species of life; kaunteya—Arjun, the son of Kunti; mūrtayaḥ—forms; sambhavanti—are produced; yāḥ—which; tāsām—of all of them; brahma-mahat—great material nature; yoniḥ—womb; aham—I; bīja-pradaḥ—seed-giving; pitā—Father\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"59bb6c26-3b70-4b5f-81a5-ec814687ddfc"},{"id":"dc8d9529-4189-40a2-9681-fb0b4070ee2d","type":"verses","target":{"id":"7fd07aa8-2675-471a-bf29-1434005fd731","title":null,"body":"But if the body-bearer dies when sattva is on the increase, then he attains to the spotless worlds of those who know the highest.","translit_title":null,"body_translit":"yadā sattve pravṛiddhe tu pralayaṁ yāti deha-bhṛit\ntadottama-vidāṁ lokān amalān pratipadyate\n","body_translit_meant":"yadā—when; sattve—in the mode of goodness; pravṛiddhe—when premodinates; tu—indeed; pralayam—death; yāti—reach; deha-bhṛit—the embodied; tadā—then; uttama-vidām—of the learned; lokān—abodes; amalān—pure; pratipadyate—attains;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"7a6abe23-974b-42dd-9f18-aa3d747a48e3"},{"id":"93472a80-449a-4182-8202-4a0c0a8cfe6d","type":"verses","target":{"id":"f157d0ea-fbe3-4020-8c04-2ddbe399c873","title":null,"body":"To whom pain, pleasure, and sleep are all the same; to whom a cold, a stone, and a lump of gold are all the same; to whom both the pleasant and unpleasant things are equal; who is firm-minded; to whom blame and personal commendation are equal.","translit_title":null,"body_translit":"sama-duḥkha-sukhaḥ sva-sthaḥ sama-loṣhṭāśhma-kāñchanaḥ\ntulya-priyāpriyo dhīras tulya-nindātma-sanstutiḥ\n","body_translit_meant":"sama—alike; duḥkha—distress; sukhaḥ—happiness; sva-sthaḥ—established in the self; sama—equally; loṣhṭa—a clod; aśhma—stone; kāñchanaḥ—gold; tulya—of equal value; priya—pleasant; apriyaḥ—unpleasant; dhīraḥ—steady; tulya—the same; nindā—blame; ātma-sanstutiḥ—praise;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"a00d138b-41d6-4784-826f-a12d03872bf1"},{"id":"b6d493d3-6881-4302-b0ef-b25fe3061ba0","type":"verses","target":{"id":"c41394e1-c9cb-4d6d-acd0-a86c4c1fc115","title":null,"body":"But the Highest Person, distinct from both [this], is spoken of as the Supreme Self, which, being the changeless Lord, sustains the triad of the world by entering into it.","translit_title":null,"body_translit":"uttamaḥ puruṣhas tv anyaḥ paramātmety udāhṛitaḥ\nyo loka-trayam āviśhya bibharty avyaya īśhvaraḥ\n\n","body_translit_meant":"uttamaḥ—the Supreme; puruṣhaḥ—Divine Personality; tu—but; anyaḥ—besides; parama-ātmā—the Supreme Soul; iti—thus; udāhṛitaḥ—is said; yaḥ—who; loka trayam—the three worlds; āviśhya—enters; bibharti—supports; avyayaḥ—indestructible; īśhvaraḥ—the controller\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"d4c25bc5-b590-48c4-97de-02019e174508"},{"id":"eb149333-126b-4fce-8a89-11ce6052025d","type":"verses","target":{"id":"f5438249-4bf5-45dc-91f2-538de2c8bf58","title":null,"body":"He who neither delights nor hates, nor grieves nor craves; who has renounced both the good and the bad results [of actions] and is full of devotion [to Me]—he is dear to Me.","translit_title":null,"body_translit":"yo na hṛiṣhyati na dveṣhṭi na śhochati na kāṅkṣhati\nśhubhāśhubha-parityāgī bhaktimān yaḥ sa me priyaḥ\n","body_translit_meant":"yaḥ—who; na—neither; hṛiṣhyati—rejoice; na—nor; dveṣhṭi—despair; na—neither; śhochati—lament; na—nor; kāṅkṣhati—hanker for gain; śhubha-aśhubha-parityāgī—who renounce both good and evil deeds; bhakti-mān—full of devotion; yaḥ—who; saḥ—that person; me—to me; priyaḥ—very dear\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"b7cbbafc-1f53-4e25-8525-16b01e6ab1d2"},{"id":"6ae3d25f-d8c7-43f1-940b-2690a8e5a61e","type":"verses","target":{"id":"12dfaa03-2a15-40d7-9e70-6fadfcbc720a","title":null,"body":"What is that Field and what is its nature? Why does it undergo modifications, where does it come from, and what is its purpose? Who is the Field-sensitizer and what is His nature? Listen to all this from Me collectively.","translit_title":null,"body_translit":"tat kṣhetraṁ yach cha yādṛik cha yad-vikāri yataśh cha yat\nsa cha yo yat-prabhāvaśh cha tat samāsena me śhṛiṇu\n","body_translit_meant":"tat—that; kṣhetram—field of activities; yat—what; cha—and; yādṛik—its nature; cha—and; yat-vikāri—how change takes place in it; yataḥ—from what; cha—also; yat—what; saḥ—he; cha—also; yaḥ—who; yat-prabhāvaḥ—what his powers are; cha—and; tat—that; samāsena—in summary; me—from me; śhṛiṇu—listen\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"503576fe-b39c-42d7-8880-d6aa3551d055"},{"id":"1a11c92a-27fb-4dce-90c0-82ea3432e111","type":"verses","target":{"id":"a0270652-2e73-4212-8efc-da60db333fd3","title":null,"body":"It has hands and feet of all, has eyes, heads, and faces of all, has ears of all in the world; It envelops all.","translit_title":null,"body_translit":"sarvataḥ pāṇi-pādaṁ tat sarvato ’kṣhi-śhiro-mukham\nsarvataḥ śhrutimal loke sarvam āvṛitya tiṣhṭhati\n","body_translit_meant":"sarvataḥ—everywhere; pāṇi—hands; pādam—feet; tat—that; sarvataḥ—everywhere; akṣhi—eyes; śhiraḥ—heads; mukham—faces; sarvataḥ—everywhere; śhruti-mat—having ears; loke—in the universe; sarvam—everything; āvṛitya—pervades; tiṣhṭhati—exists\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"9a8d00db-0566-45a6-85bd-8f0a263fa0c7"},{"id":"c156cb8a-b079-48fe-aac9-7df240e8af9e","type":"verses","target":{"id":"4bd96201-dd12-44f6-99db-ecedbae9e82f","title":null,"body":"He who knows, in this manner, the Soul and the Material Cause together with their strands—he is not reborn, even though he may act in various ways.","translit_title":null,"body_translit":"ya evaṁ vetti puruṣhaṁ prakṛitiṁ cha guṇaiḥ saha\nsarvathā vartamāno ’pi na sa bhūyo ’bhijāyate\n","body_translit_meant":"yaḥ—who; evam—thus; vetti—understand; puruṣham—Puruṣh; prakṛitim—the material nature; cha—and; guṇaiḥ—the three modes of nature; saha—with; sarvathā—in every way; vartamānaḥ—situated; api—although; na—not; saḥ—they; bhūyaḥ—again; abhijāyate—take birth\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"4c9c44ca-0a45-43d7-a29e-d73eb0ac5ff4"},{"id":"7dc49db5-def3-4b7c-bf6e-e77f2a49d806","type":"verses","target":{"id":"d42948c7-5797-4f70-9b29-6d415bfe1e32","title":null,"body":"Just as a single sun illuminates this entire world, so too does the Lord of the Field illuminate the entire Field, O descendant of Bharata!","translit_title":null,"body_translit":"yathā prakāśhayaty ekaḥ kṛitsnaṁ lokam imaṁ raviḥ\nkṣhetraṁ kṣhetrī tathā kṛitsnaṁ prakāśhayati bhārata\n","body_translit_meant":"yathā—as; prakāśhayati—illumines; ekaḥ—one; kṛitsnam—entire; lokam—solar system; imam—this; raviḥ—sun; kṣhetram—the body; kṣhetrī—the soul; tathā—so; kṛitsnam—entire; prakāśhayati—illumine; bhārata—Arjun, the son of Bharat\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"e5282a84-17f3-419e-aad0-986783ef20de"},{"id":"802622b7-8d8f-4a98-baeb-295e0b972710","type":"verses","target":{"id":"52e6ef2e-5aec-40df-8dc8-7b374d052885","title":null,"body":"Among them, the Sattva, being free from impurity, is illuminating and health-giving; and it binds the embodied one with attachment to happiness and also with attachment to knowledge, O sinless one!","translit_title":null,"body_translit":"tatra sattvaṁ nirmalatvāt prakāśhakam anāmayam\nsukha-saṅgena badhnāti jñāna-saṅgena chānagha\n","body_translit_meant":"tatra—amongst these; sattvam—mode of goodness; nirmalatvāt—being purest; prakāśhakam—illuminating; anāmayam—healthy and full of well-being; sukha—happiness; saṅgena—attachment; badhnāti—binds; jñāna—knowledge; saṅgena—attachment; cha—also; anagha—Arjun, the sinless one\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"cc3b8e0f-9d6a-407c-81cc-6153e915bbc7"},{"id":"3848416d-13ef-4cd9-b72c-49b4a574358a","type":"verses","target":{"id":"57e47d77-3b48-4569-858c-7f0a2b297f96","title":null,"body":"It is said that the fruit of good action is spotless and of the Sattva nature; whereas the fruit of Rajas is pain, and the fruit of Tamas is ignorance.","translit_title":null,"body_translit":"karmaṇaḥ sukṛitasyāhuḥ sāttvikaṁ nirmalaṁ phalam\nrajasas tu phalaṁ duḥkham ajñānaṁ tamasaḥ phalam\n\n","body_translit_meant":"karmaṇaḥ—of action; su-kṛitasya—pure; āhuḥ—is said; sāttvikam—mode of goodness; nirmalam—pure; phalam—result; rajasaḥ—mode of passion; tu—indeed; phalam—result; duḥkham—pain; ajñānam—ignorance; tamasaḥ—mode of ignorance; phalam—result\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"5343768a-4481-4494-9d76-af9ec51d8fd2"},{"id":"f9c79466-2a01-4a1d-ab7b-af1902e8dadb","type":"verses","target":{"id":"39bccd28-e1c7-4ccb-a971-c5e78b685ea4","title":null,"body":"Whoever serves me alone with an unwavering devotion to yoga, they will transcend these strands and become Brahman.","translit_title":null,"body_translit":"māṁ cha yo ’vyabhichāreṇa bhakti-yogena sevate\nsa guṇān samatītyaitān brahma-bhūyāya kalpate\n\n","body_translit_meant":"mām—me; cha—only; yaḥ—who; avyabhichāreṇa—unalloyed; bhakti-yogena—through devotion; sevate—serve; saḥ—they; guṇān—the three modes of material nature; samatītya—rise above; etān—these; brahma-bhūyāya—level of Brahman; kalpate—comes to\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"934b4b4f-b416-4065-a4a1-3e1cf352946e"},{"id":"af80d3e1-07c2-4dfa-95e4-ce54932bb079","type":"verses","target":{"id":"b2b7c2ea-ab40-4f11-86f8-c6c56fdcc331","title":null,"body":"A portion of My own Self, having become the eternal individual Soul in the world of the living beings, draws [into service] the sense organs, of which the sixth is the mind, and which rest in Prakriti.","translit_title":null,"body_translit":"mamaivānśho jīva-loke jīva-bhūtaḥ sanātanaḥ\nmanaḥ-ṣhaṣhṭhānīndriyāṇi prakṛiti-sthāni karṣhati\n","body_translit_meant":"mama—my; eva—only; anśhaḥ—fragmental part; jīva-loke—in the material world; jīva-bhūtaḥ—the embodied souls; sanātanaḥ—eternal; manaḥ—with the mind; ṣhaṣhṭhāni—the six; indriyāṇi—senses; prakṛiti-sthāni—bound by material nature; karṣhati—struggling\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"75a54117-b4a7-4e21-b0e2-a7c63bb6d55c"},{"id":"d1ca0d0d-f552-4c58-a893-b3247378a6e6","type":"verses","target":{"id":"96f3031f-78fb-4daf-8247-e5c46bea4edf","title":null,"body":"When he perceives the mutual difference of beings as abiding in One, and its expansion from That alone, at that time he becomes the Brahman.","translit_title":null,"body_translit":"yadā bhūta-pṛithag-bhāvam eka-stham anupaśhyati\ntata eva cha vistāraṁ brahma sampadyate tadā\n","body_translit_meant":"yadā—when; bhūta—living entities; pṛithak-bhāvam—diverse variety; eka-stham—situated in the same place; anupaśhyati—see; tataḥ—thereafter; eva—indeed; cha—and; vistāram—born from; brahma—Brahman; sampadyate—(they) attain; tadā—then\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"d6890a35-4467-4f8b-ae82-dd8dabb8b1aa"},{"id":"60be83e8-fbb3-4a25-8d90-848cfebcb74a","type":"verses","target":{"id":"e172717f-4760-49b5-977e-0b8ea967cc98","title":null,"body":"The mighty Brahman is a womb for Me; and in it I lay seed; from which is the birth of all beings, O descendant of Bharata!","translit_title":null,"body_translit":"mama yonir mahad brahma tasmin garbhaṁ dadhāmy aham\nsambhavaḥ sarva-bhūtānāṁ tato bhavati bhārata\n","body_translit_meant":"mama—my; yoniḥ—womb; mahat brahma—the total material substance, prakṛiti; tasmin—in that; garbham—womb; dadhāmi—impregnate; aham—I; sambhavaḥ—birth; sarva-bhūtānām—of all living beings; tataḥ—thereby; bhavati—becomes; bhārata—Arjun, the son of Bharat; \n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"87a369a5-7d5c-46e0-90b4-1360061637b7"},{"id":"b3585856-565c-412a-ad8a-67e3fcdc0a88","type":"verses","target":{"id":"e03a8012-bea1-463e-b704-6023b6c143ac","title":null,"body":"Absence of mental illumination, lack of exertion, negligence, and mere delusion—these are born when Tamas predominates, O darling of the Kurus!","translit_title":null,"body_translit":"aprakāśho ’pravṛittiśh cha pramādo moha eva cha\ntamasy etāni jāyante vivṛiddhe kuru-nandana\n\n","body_translit_meant":"aprakāśhaḥ—nescience; apravṛittiḥ—inertia; cha—and; pramādaḥ—negligence; mohaḥ—delusion; eva—indeed; cha—also; tamasi—mode of ignorance; etāni—these; jāyante—manifest; vivṛiddhe—when dominates; kuru-nandana—the joy of the Kurus, Arjun\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"f3ea3e40-032f-402b-ab81-69546637580a"},{"id":"abd6327f-6b6f-4f9e-aa1b-a6034c0e5b95","type":"verses","target":{"id":"1e205b4c-53b0-46e5-b67f-6f913397e1fa","title":null,"body":"He who, sitting like an unconcerned person, is not perturbed by the strands; who is ignorant of the existence of the strands; or who remains simply aware that the strands alone exist; who is not shaken;","translit_title":null,"body_translit":"udāsīna-vad āsīno guṇair yo na vichālyate\nguṇā vartanta ity evaṁ yo ’vatiṣhṭhati neṅgate\n","body_translit_meant":"udāsīna-vat—neutral; āsīnaḥ—situated; guṇaiḥ—to the modes of material nature; yaḥ—who; na—not; vichālyate—are disturbed; guṇāḥ—modes of material nature; vartante—act; iti-evam—knowing it in this way; yaḥ—who; avatiṣhṭhati—established in the self; na—not; iṅgate—wavering\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"879e9930-a0aa-4d97-a124-ba44e5f7562c"},{"id":"fffdc559-1b71-47fc-a244-29d7979a6a88","type":"verses","target":{"id":"2b821aea-99fa-4a62-8fbe-07eccebe50da","title":null,"body":"Then, that Abode must be sought, having reached which one would not return. The Yogin would attain nothing but that Primal Person, from Whom the old activity (world creation) commences.","translit_title":null,"body_translit":"tataḥ padaṁ tat parimārgitavyaṁ\nyasmin gatā na nivartanti bhūyaḥ\ntam eva chādyaṁ puruṣhaṁ prapadye\nyataḥ pravṛittiḥ prasṛitā purāṇī\n","body_translit_meant":"tataḥ—then; padam—place; tat—that; parimārgitavyam—one must search out; yasmin—where; gatāḥ—having gone; na—not; nivartanti—return; bhūyaḥ—again; tam—to him; eva—certainly; cha—and; ādyam—original; puruṣham—the Supreme Lord; prapadye—take refuge; yataḥ—whence; pravṛittiḥ—the activity; prasṛitā—streamed forth; purāṇi—very old\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"ded766c5-dd6a-43ba-9620-f301967cb37e"},{"id":"1c1e6d8e-b50b-444a-9c27-cf584b58e7c1","type":"verses","target":{"id":"59dff79a-af90-41a9-a5d4-0ae87834d206","title":null,"body":"Being the digestive fire dwelling within the bodies of living creatures, and being in association with the upward and downward winds [of the body], I digest the four kinds of food.","translit_title":null,"body_translit":"ahaṁ vaiśhvānaro bhūtvā prāṇināṁ deham āśhritaḥ\nprāṇāpāna-samāyuktaḥ pachāmy annaṁ chatur-vidham\n\n","body_translit_meant":"aham—I; vaiśhvānaraḥ—fire of digestion; bhūtvā—becoming; prāṇinām—of all living beings; deham—the body; āśhritaḥ—situated; prāṇa-apāna—outgoing and incoming breath; samāyuktaḥ—keeping in balance; pachāmi—I digest; annam—foods; chatuḥ-vidham—the four kinds\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"91640054-5a04-4eb1-82d0-a8b1452c7493"},{"id":"0833372c-e5f1-4a86-89c4-745c74b2b903","type":"verses","target":{"id":"f99def8e-0cfe-4e5a-a4cb-23b5a75b37e9","title":null,"body":"Harmlessness, truth, absence of anger, renunciation, absence of attachment, absence of slander, compassion for living beings, and absence of greed, gentleness, modesty, and absence of thoughtlessness;","translit_title":null,"body_translit":"ahinsā satyam akrodhas tyāgaḥ śhāntir apaiśhunam\ndayā bhūteṣhv aloluptvaṁ mārdavaṁ hrīr achāpalam\n","body_translit_meant":"ahinsā—non-violence; satyam—truthfulness; akrodhaḥ—absence of anger; tyāgaḥ—renunciation; śhāntiḥ—peacefulness; apaiśhunam—restraint from fault-finding; dayā—compassion; bhūteṣhu—toward all living beings; aloluptvam—absence of covetousness; mārdavam—gentleness; hrīḥ—modesty; achāpalam—lack of fickleness;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"11474b3a-8f82-4c0f-a6df-2f73a7ba25fa"},{"id":"b1510c9f-60be-4558-8dd5-03743d199ccb","type":"verses","target":{"id":"f8b4174e-ad37-4c52-8634-10bbffd593f7","title":null,"body":"Bound by hundreds of ropes of longing, devoted to their desire and anger, they seek, by unjust means, hoards of wealth for the gratification of their desires.","translit_title":null,"body_translit":"āśhā-pāśha-śhatair baddhāḥ kāma-krodha-parāyaṇāḥ\nīhante kāma-bhogārtham anyāyenārtha-sañchayān\n","body_translit_meant":"āśhā-pāśha—bondage of desires; śhataiḥ—by hundreds; baddhāḥ—bound; kāma—lust; krodha—anger; parāyaṇāḥ—dedicated to; īhante—strive; kāma—lust; bhoga—gratification of the senses; artham—for; anyāyena—by unjust means; artha—wealth; sañchayān—to accumulate\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"4ec60503-7e6f-4677-bd47-ba71b9d3a24d"},{"id":"9d44cf7f-ba31-4229-957f-9a026cb78634","type":"verses","target":{"id":"ff510220-eb55-4697-afa0-8f5752f2a244","title":null,"body":"O son of Kunti! A man who has deserted these three gates of darkness does what is good for his Self and thereby reaches the highest goal.","translit_title":null,"body_translit":"etair vimuktaḥ kaunteya tamo-dvārais tribhir naraḥ\nācharaty ātmanaḥ śhreyas tato yāti parāṁ gatim\n","body_translit_meant":"etaiḥ—from this; vimuktaḥ—freed; kaunteya—Arjun, the son of Kunti; tamaḥ-dvāraiḥ—gates to darkness; tribhiḥ—three; naraḥ—a person; ācharati—endeavor; ātmanaḥ—soul; śhreyaḥ—welfare; tataḥ—thereby; yāti—attain; parām—supreme; gatim—goal\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"8420efbf-d73c-4acf-947d-660adc50ae24"},{"id":"aa89a138-f343-4991-8347-b9fcf6b42072","type":"verses","target":{"id":"c21426f4-b440-40c5-94c6-9cab8e933bdd","title":null,"body":"Just as the all-pervasive Ether is not stained due to its subtlety, in the same way the Self, abiding in the body everywhere, is not stained.","translit_title":null,"body_translit":"yathā sarva-gataṁ saukṣhmyād ākāśhaṁ nopalipyate\nsarvatrāvasthito dehe tathātmā nopalipyate\n","body_translit_meant":"yathā—as; sarva-gatam—all-pervading; saukṣhmyāt—due to subtlety; ākāśham—the space; na—not; upalipyate—is contaminated; sarvatra—everywhere; avasthitaḥ—situated; dehe—the body; tathā—similarly; ātmā—the soul; na—not; upalipyate—is contaminated\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"563367e5-45ad-464a-8226-8eb4b27d6c9a"},{"id":"4b08f82f-fb3b-4cf4-a7db-400031c73db1","type":"verses","target":{"id":"ec023ea8-6a56-41a2-b03c-a6c4d765b182","title":null,"body":"The strands, namely the sattva, rajas, and tamas, born from the prime cause (the said mother), bind the changeless embodied soul to the body, O mighty-armed one!","translit_title":null,"body_translit":"sattvaṁ rajas tama iti guṇāḥ prakṛiti-sambhavāḥ\nnibadhnanti mahā-bāho dehe dehinam avyayam\n","body_translit_meant":"sattvam—mode of goodness; rajaḥ—mode of passion; tamaḥ—mode of ignorance; iti—thus; guṇāḥ—modes; prakṛiti—material nature; sambhavāḥ—consists of; nibadhnanti—bind; mahā-bāho—mighty-armed one; dehe—in the body; dehinam—the embodied soul; avyayam—eternal\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"de66d14e-9522-4c94-a796-6fea4a2a488b"},{"id":"29e1adc3-b5be-485b-abf8-d03edd0b8a76","type":"verses","target":{"id":"2290f2ca-7281-405a-a8e2-fd5a7c5d011d","title":null,"body":"By meeting death when Rajas is on the increase, he is born among those who are attached to action; likewise, by meeting death when Tamas is on the increase, he is born in the wombs of the deluded.","translit_title":null,"body_translit":"rajasi pralayaṁ gatvā karma-saṅgiṣhu jāyate\ntathā pralīnas tamasi mūḍha-yoniṣhu jāyate\n","body_translit_meant":"rajasi—in the mode of passion; pralayam—death; gatvā—attaining; karma-saṅgiṣhu—among people driven by work; jāyate—are born; tathā—likewise; pralīnaḥ—dying; tamasi—in the mode of ignorance; mūḍha-yoniṣhu—in the animal kingdom; jāyate—takes birth\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"1c05cc40-60a6-459b-a6a2-066dc8765155"},{"id":"7307623f-e30d-466e-ae20-ea32cf0730c3","type":"verses","target":{"id":"4a0d792b-8b07-4e3b-b450-0db0790a776a","title":null,"body":"Who remains equal to honor and dishonor, and equal to the sides of both the friend and the foe; and who has given up all fruits of his actions—he is said to have transcended the bonds.","translit_title":null,"body_translit":"mānāpamānayos tulyas tulyo mitrāri-pakṣhayoḥ\nsarvārambha-parityāgī guṇātītaḥ sa uchyate\n","body_translit_meant":"māna—honor; apamānayoḥ—dishonor; tulyaḥ—equal; tulyaḥ—equal; mitra—friend; ari—foe; pakṣhayoḥ—to the parties; sarva—all; ārambha—enterprises; parityāgī—renouncer; guṇa-atītaḥ—risen above the three modes of material nature; saḥ—they; uchyate—are said to have\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"e59f9dc4-f21d-4e0e-a06c-c0b2688aba37"},{"id":"eda84ae0-0a6b-4637-a9e8-d8c8f6c9c588","type":"verses","target":{"id":"ce8bfba4-88cc-4b16-8df2-4f77ba94ef7d","title":null,"body":"The sun does not illuminate That; nor the moon nor the fire; That is My Supreme Abode, having gone to Which they (Yogins) never return.","translit_title":null,"body_translit":"na tad bhāsayate sūryo na śhaśhāṅko na pāvakaḥ\nyad gatvā na nivartante tad dhāma paramaṁ mama\n\n","body_translit_meant":"na—neither; tat—that; bhāsayate—illumine; sūryaḥ—the sun; na—nor; śhaśhāṅkaḥ—the moon; na—nor; pāvakaḥ—fire; yat—where; gatvā—having gone; na—never; nivartante—they return; tat—that; dhāma—abode; paramam—supreme; mama—mine\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"a57a924c-e68b-428f-9cfa-e6206f6fe1ef"},{"id":"d18fa52c-c2a8-4fc4-b19a-2e591b7b8e65","type":"verses","target":{"id":"f98214d0-4f96-4afa-bb57-6da964d3e771","title":null,"body":"There are two people in the world: the perishable and the imperishable. The perishable is all elements, and the one that speaks is called the imperishable.","translit_title":null,"body_translit":"dvāv imau puruṣhau loke kṣharaśh chākṣhara eva cha\nkṣharaḥ sarvāṇi bhūtāni kūṭa-stho ’kṣhara uchyate\n","body_translit_meant":"dvau—two; imau—these; puruṣhau—beings; loke—in creation; kṣharaḥ—the perishable; cha—and; akṣharaḥ—the imperishable; eva—even; cha—and; kṣharaḥ—the perishable; sarvāṇi—all; bhūtāni—beings; kūṭa-sthaḥ—the liberated; akṣharaḥ—the imperishable; uchyate—is said\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"a46b0e46-9ada-4005-a5b3-4f813dd95b29"},{"id":"9bfbf8db-4b91-46c9-a3ea-0c08b3ee9c1e","type":"verses","target":{"id":"09d92a81-9ba2-4d25-b5fa-9c50a4c3268b","title":null,"body":"Ostentation, arrogance, pride, anger, and harshness, as well as ignorance, are characteristics of a person born of demoniac wealth, O son of Prtha!","translit_title":null,"body_translit":"dambho darpo ’bhimānaśh cha krodhaḥ pāruṣhyam eva cha\najñānaṁ chābhijātasya pārtha sampadam āsurīm\n","body_translit_meant":"dambhaḥ—hypocrisy; darpaḥ—arrogance; abhimānaḥ—conceit; cha—and; krodhaḥ—anger; pāruṣhyam—harshness; eva—certainly; cha—and; ajñānam—ignorance; cha—and; abhijātasya—of those who possess; pārtha—Arjun, the son of Pritha; sampadam—qualities; āsurīm—demoniac\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"a4067eb1-edab-4f7b-9fb1-6f23df64d9f1"},{"id":"8c8b0e64-c128-4328-9c97-ab2608f27c32","type":"verses","target":{"id":"06c9b768-8454-450d-bf5f-685d98da6c65","title":null,"body":"'I have slain that enemy; and I shall slay others too; I am the Lord; I am a man of pleasure; I am victorious, powerful, and content.'","translit_title":null,"body_translit":"asau mayā hataḥ śhatrur haniṣhye chāparān api\nīśhvaro ’ham ahaṁ bhogī siddho ’haṁ balavān sukhī\n","body_translit_meant":"asau—that; mayā—by me; hataḥ—has been destroyed; śhatruḥ—enemy; haniṣhye—I shall destroy; cha—and; aparān—others; api—also; īśhvaraḥ—God; aham—I; aham—I; bhogī—the enjoyer; siddhaḥ—powerful; aham—I; bala-vān—powerful; sukhī—happy;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"b9d42d97-b1b8-4092-b26c-1b0d2168c509"},{"id":"ff4b6c00-6828-4c09-bc05-212a168ea568","type":"verses","target":{"id":"c3bd9936-ab57-49af-9f03-95c4096e625e","title":null,"body":"Therefore, by considering the scripture as your authority in determining what should be done and what should not be done, you should perform actions laid down by the regulations of the scriptures.","translit_title":null,"body_translit":"tasmāch chhāstraṁ pramāṇaṁ te kāryākārya-vyavasthitau\njñātvā śhāstra-vidhānoktaṁ karma kartum ihārhasi\n","body_translit_meant":"tasmāt—therefore; śhāstram—scriptures; pramāṇam—authority; te—your; kārya—duty; akārya—forbidden action; vyavasthitau—in determining; jñātvā—having understood; śhāstra—scriptures; vidhāna—injunctions; uktam—as revealed; karma—actions; kartum—perform; iha—in this world; arhasi—you should\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"bb1e956e-a52f-4c98-9172-52fabfff0493"},{"id":"a4e6697a-0da9-4c29-937b-097ac603cf53","type":"verses","target":{"id":"4eeb41f8-7fe1-46be-bfad-189bf6fa06f8","title":null,"body":"The Bhagavat said: Further, once again I shall explain the supreme knowledge, the best among knowledges, by knowing which all the seers have gone from here to the Supreme Success.","translit_title":null,"body_translit":"śhrī-bhagavān uvācha\nparaṁ bhūyaḥ pravakṣhyāmi jñānānāṁ jñānam uttamam\nyaj jñātvā munayaḥ sarve parāṁ siddhim ito gatāḥ\n","body_translit_meant":"śhrī-bhagavān uvācha—the Divine Lord said; param—supreme; bhūyaḥ—again; pravakṣhyāmi—I shall explain; jñānānām—of all knowledge; jñānam uttamam—the supreme wisdom; yat—which; jñātvā—knowing; munayaḥ—saints; sarve—all; parām—highest; siddhim—perfection; itaḥ—through this; gatāḥ—attained\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"d6344c64-886c-4b43-8dd5-d67a9391c26e"},{"id":"bc7869fe-dfb0-4bbe-b29a-da5d4c464d34","type":"verses","target":{"id":"ccbe7cd0-db98-401c-b5b0-2588da8ff6c5","title":null,"body":"When the knowledge-light arises in all the gates of this body, then one should also know that the Sattva has predominantly increased.","translit_title":null,"body_translit":"sarva-dvāreṣhu dehe ’smin prakāśha upajāyate\njñānaṁ yadā tadā vidyād vivṛiddhaṁ sattvam ity uta\n","body_translit_meant":"sarva—all; dvāreṣhu—through the gates; dehe—body; asmin—in this; prakāśhaḥ—illumination; upajāyate—manifest; jñānam—knowledge; yadā—when; tadā—then; vidyāt—know; vivṛiddham—predominates; sattvam—mode of goodness; iti—thus; uta—certainly;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"cc8b0658-0b69-4f7f-92eb-68b5535eb1b3"},{"id":"57a3ae7f-527d-416c-a2ff-d825b300fd83","type":"verses","target":{"id":"21bcc03e-f1d4-44de-ba3d-09281ffc72ab","title":null,"body":"Arjuna said, \"O Master! With what characteristic marks does he who has transcended these three strands exist? What is his behavior? How does he pass beyond these three strands?\"","translit_title":null,"body_translit":"arjuna uvācha\nkair liṅgais trīn guṇān etān atīto bhavati prabho\nkim āchāraḥ kathaṁ chaitāns trīn guṇān ativartate\n","body_translit_meant":"arjunaḥ uvācha—Arjun inquired; kaiḥ—by what; liṅgaiḥ—symptoms; trīn—three; guṇān—modes of material nature; etān—these; atītaḥ—having transcended; bhavati—is; prabho—Lord; kim—what; āchāraḥ—conduct; katham—how; cha—and; etān—these; trīn—three; guṇān—modes of material nature; ativartate—transcend\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"f5e1fa57-3a2a-43c3-b0f9-1844219c33c9"},{"id":"eafab713-64b7-4ebf-ab27-134e3b83571c","type":"verses","target":{"id":"0e598c98-58af-47da-9879-8aae57bfc6c6","title":null,"body":"Of which tree, the branches spreading downward and upward, well-developed with strands, have sense objects as sprouts; and its roots below in the human world, stretching successively, have actions as their sub-knots.","translit_title":null,"body_translit":"adhaśh chordhvaṁ prasṛitās tasya śhākhā\nguṇa-pravṛiddhā viṣhaya-pravālāḥ\nadhaśh cha mūlāny anusantatāni\nkarmānubandhīni manuṣhya-loke\n","body_translit_meant":"adhaḥ—downward; cha—and; ūrdhvam—upward; prasṛitāḥ—extended; tasya—its; śhākhāḥ—branches; guṇa—modes of material nature; pravṛiddhāḥ—nourished; viṣhaya—objects of the senses; pravālāḥ—buds; adhaḥ—downward; cha—and; mūlāni—roots; anusantatāni—keep growing; karma—actions; anubandhīni—bound; manuṣhya-loke—in the world of humans\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"b7677f44-1f6c-454f-917d-2a9bcee06c2a"},{"id":"88315409-90d6-4c66-bda1-4c4d4c15a7d5","type":"verses","target":{"id":"882bfea4-e76e-4607-8061-8e364ecf4fb8","title":null,"body":"That light which is found in the sun, which is in the moon, and which is also in fire—illuminating the entire world—know that light to be of Mine.","translit_title":null,"body_translit":"yad āditya-gataṁ tejo jagad bhāsayate ’khilam\nyach chandramasi yach chāgnau tat tejo viddhi māmakam\n","body_translit_meant":"yat—which; āditya-gatam—in the sun; tejaḥ—brilliance; jagat—solar system; bhāsayate—illuminates; akhilam—entire; yat—which; chandramasi—in the moon; yat—which; cha—also; agnau—in the fire; tat—that; tejaḥ—brightness; viddhi—know; māmakam—mine\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"c8f61942-b29a-4a09-b6cb-f63aacea8eb7"},{"id":"63e29a20-3f99-494d-a2ec-3644e6bf8ecf","type":"chapters","target":{"id":"10cdd958-4c87-4da6-b5bf-040c37e734cb","title":"Yoga through Discerning the Divine and Demoniac Natures","body":"The sixteenth chapter of the Bhagavad Gita is \"Daivasura Sampad Vibhaga Yoga\". In this chapter, Krishna describes explicitly the two kinds of natures among human beings - divine and demoniac. Those who possess demonaic qualities associate themselves with the modes of passion and ignorance do not follow the regulations of the scriptures and embrace materialistic views. These people attain lower births and further material bondage. But people who possess divine qualities, follow the instructions of the scriptures, associate themselves with the mode of goodness and purify the mind through spiritual practices. This leads to the enhancement of divine qualities and they eventually attain spiritual realization.","translit_title":"Daivāsura Sampad Vibhāg Yog","body_translit":null,"body_translit_meant":null,"body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":16,"lang":"en"},{"id":"77314215-fb5a-4501-81f3-41cd3a6dda77","type":"verses","target":{"id":"d0e9d1be-1272-469d-b050-67f03ac18f9f","title":null,"body":"Holding to their insatiable desires, being possessed by hypocrisy, avarice, and pride, and holding evil intentions, these cruel men wander with impure resolves.","translit_title":null,"body_translit":"kāmam āśhritya duṣhpūraṁ dambha-māna-madānvitāḥ\nmohād gṛihītvāsad-grāhān pravartante ’śhuchi-vratāḥ\n","body_translit_meant":"kāmam—lust; āśhritya—harboring; duṣhpūram—insatiable; dambha—hypocrisy; māna—arrogance; mada-anvitāḥ—clinging to false tenets; mohāt—the illusioned; gṛihītvā—being attracted to; asat—impermanent; grāhān—things; pravartante—they flourish; aśhuchi-vratāḥ—with impure resolve\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"5d3dceb6-9882-4921-a125-8778494d603a"},{"id":"e51e9860-745a-435d-b22d-8cdb5282996b","type":"verses","target":{"id":"cd52b52d-9908-4578-9f5f-dddc2df6a2ac","title":null,"body":"Having come to the demoniac womb, birth after birth, and not attaining Me at all, these deluded persons, therefore, pass to the lowest state, O son of Kunti!","translit_title":null,"body_translit":"āsurīṁ yonim āpannā mūḍhā janmani janmani\nmām aprāpyaiva kaunteya tato yānty adhamāṁ gatim\n","body_translit_meant":"āsurīm—demoniac; yonim—wombs; āpannāḥ—gaining; mūḍhāḥ—the ignorant; janmani janmani—in birth after birth; mām—me; aprāpya—failing to reach; eva—even; kaunteya—Arjun, the son of Kunti; tataḥ—thereafter; yānti—go; adhamām—abominable; gatim—destination\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"5c81fa67-e7f1-4eb1-a3e8-abb955296fe9"},{"id":"8f843a82-0339-4d30-acd2-1e8e1c4eec6f","type":"verses","target":{"id":"377ee42c-dd5b-4907-84c7-38a0357e225b","title":null,"body":"Those who unintelligently emaciate the conglomeration of elements in their physical body and emaciate Me, dwelling within the physical body—know them to be of a demoniac resolve.","translit_title":null,"body_translit":"karṣhayantaḥ śharīra-sthaṁ bhūta-grāmam achetasaḥ\nmāṁ chaivāntaḥ śharīra-sthaṁ tān viddhy āsura-niśhchayān\n","body_translit_meant":"karṣhayantaḥ—torment; śharīra-stham—within the body; bhūta-grāmam—elements of the body; achetasaḥ—senseless; mām—me; cha—and; eva—even; antaḥ—within; śharīra-stham—dwelling in the body; tān—them; viddhi—know; āsura-niśhchayān—of demoniacal resolves\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"cc497d1f-d2d9-480a-8c8f-29e2929132c8"},{"id":"95778396-bc45-402e-adb4-0f9b48670d42","type":"verses","target":{"id":"2299634f-b3ee-46c7-893e-305319c20362","title":null,"body":"From Sattva arises wisdom; from Rajas, only greed; and from Tamas arise negligence, delusion, and ignorance.","translit_title":null,"body_translit":"sattvāt sañjāyate jñānaṁ rajaso lobha eva cha\npramāda-mohau tamaso bhavato ’jñānam eva cha\n","body_translit_meant":"sattvāt—from the mode of goodness; sañjāyate—arises; jñānam—knowledge; rajasaḥ—from the mode of passion; lobhaḥ—greed; eva—indeed; cha—and; pramāda—negligence; mohau—delusion; tamasaḥ—from the mode of ignorance; bhavataḥ—arise; ajñānam—ignorance; eva—indeed; cha—and\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"4243c7df-1ef3-4574-b72c-cbddec9a7316"},{"id":"e7bb0042-ddd2-49c1-af41-f88613cc2673","type":"verses","target":{"id":"d1dbbe7e-7b1f-4cdf-9732-c14be8c34e71","title":null,"body":"'I' am the support for the immortal and changeless Brahman and for its eternal attribute, the unalloyed happiness.","translit_title":null,"body_translit":"brahmaṇo hi pratiṣhṭhāham amṛitasyāvyayasya cha\nśhāśhvatasya cha dharmasya sukhasyaikāntikasya cha\n","body_translit_meant":"brahmaṇaḥ—of Brahman; hi—only; pratiṣhṭhā—the basis; aham—I; amṛitasya—of the immortal; avyayasya—of the imperishable; cha—and; śhāśhvatasya—of the eternal; cha—and; dharmasya—of the dharma; sukhasya—of bliss; aikāntikasya—unending; cha—and\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"22e9c891-d4c9-4423-a6f1-bef7d9d80d34"},{"id":"90517b6a-863a-484e-b438-9f8959d9b6a8","type":"verses","target":{"id":"64c09ff4-062f-4d76-afb2-0513fd2640f8","title":null,"body":"Whatever body He attains to and also from whatever He goes up, the Lord proceeds taking them with Him just as the wind takes odours from their receptacle.","translit_title":null,"body_translit":"śharīraṁ yad avāpnoti yach chāpy utkrāmatīśhvaraḥ\ngṛihītvaitāni sanyāti vāyur gandhān ivāśhayāt\n","body_translit_meant":"śharīram—the body; yat—as; avāpnoti—carries; yat—as; cha api—also; utkrāmati—leaves; īśhvaraḥ—the Lord of the material body, the embodied soul; gṛihītvā—taking; etāni—these; sanyāti—goes away; vāyuḥ—the air; gandhān—fragrance; iva—like; āśhayāt—from seats\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"ce9e123d-fed0-4f07-99e8-52734c43a26e"},{"id":"e99989c7-14a6-4ecc-95ad-4d53f2299ed3","type":"verses","target":{"id":"8d1e2969-4473-4d66-862b-7250ef8698b4","title":null,"body":"Because I have transcended both the perishable and the imperishable, I am acclaimed in the world and in the Vedas as the highest of persons.","translit_title":null,"body_translit":"yasmāt kṣharam atīto ’ham akṣharād api chottamaḥ\nato ’smi loke vede cha prathitaḥ puruṣhottamaḥ\n\n","body_translit_meant":"yasmāt—hence; kṣharam—to the perishable; atītaḥ—transcendental; aham—I; akṣharāt—to the imperishable; api—even; cha—and; uttamaḥ—transcendental; ataḥ—therefore; asmi—I am; loke—in the world; vede—in the Vedas; cha—and; prathitaḥ—celebrated; puruṣha-uttamaḥ—as the Supreme Divine Personality\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"7ffc7db8-e7fd-46dc-abd1-da8fcd84a3de"},{"id":"dc5d31f4-3526-4c87-b789-65bd2b59601f","type":"verses","target":{"id":"18f90af1-a156-4224-ae5f-4eabcbb1bf79","title":null,"body":"There are two types of creations of beings in this world: the divine and the demoniac. The divine one has been described in detail; hear now the demoniac one from Me, O son of Prtha!","translit_title":null,"body_translit":"dvau bhūta-sargau loke ’smin daiva āsura eva cha\ndaivo vistaraśhaḥ prokta āsuraṁ pārtha me śhṛiṇu\n","body_translit_meant":"dvau—two; bhūta-sargau—of created living beings; loke—in the world; asmin—this; daivaḥ—divine; āsuraḥ—demoniac; eva—certainly; cha—and; daivaḥ—the divine; vistaraśhaḥ—at great length; proktaḥ—said; āsuram—the demoniac; pārtha—Arjun, the son of Pritha; me—from me; śhṛiṇu—hear\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"8b9d9e33-2d43-41eb-adb7-020908c884d0"},{"id":"4c596138-ee4c-4915-bd20-b297695767ba","type":"verses","target":{"id":"38a664ec-8af0-4c2d-8304-d408795680c5","title":null,"body":"Endowed with many thoughts, highly confused, enslaved by their delusion, and addicted to the gratification of desires, they fall into the hellish and foul.","translit_title":null,"body_translit":"aneka-citta-vibhrāntā moha-jāla-samāvṛtāḥ prasaktāḥ kāma-bhogeṣu patanti narake 'śucau","body_translit_meant":"aneka—numerous; citta-vibhrāntāḥ—perplexed by anxieties; moha—of illusions; jāla—by a network; samāvṛtāḥ—surrounded; prasaktāḥ—attached; kāma—lust; bhogeṣu—sense gratification; patanti—glides down; narake—into hell; aśucau—unclean.","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"1eb15d68-fe06-4ab5-a6e6-60fa228d755d"},{"id":"186030ac-0a3f-4cbe-931a-ea4e97dc0e2e","type":"chapters","target":{"id":"5ad89913-eadc-4243-9949-7a962c42f346","title":"Yoga through Discerning the Three Divisions of Faith","body":"The seventeenth chapter of the Bhagavad Gita is \"Sraddhatraya Vibhaga Yoga\". In this chapter, Krishna describes the three types of faith corresponding to the three modes of the material nature. Lord Krishna further reveals that it is the nature of faith that determines the quality of life and the character of living entities. Those who have faith in passion and ignorance perform actions that yield temporary, material results while those who have faith in goodness perform actions in accordance with scriptural instructions and hence their hearts get further purified.","translit_title":"Śhraddhā Traya Vibhāg Yog","body_translit":null,"body_translit_meant":null,"body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":17,"lang":"en"},{"id":"d5bcb468-4000-4713-ad3d-0f1a6fee0914","type":"verses","target":{"id":"9abaa1ef-7737-4554-9213-8fbae1abb0a1","title":null,"body":"What is old, tasteless, foul-smelling, and stale; what is also left over after eating, and is impure - such food is dear to the men of Tamas (Strand).","translit_title":null,"body_translit":"yāta-yāmaṁ gata-rasaṁ pūti paryuṣhitaṁ cha yat\nuchchhiṣhṭam api chāmedhyaṁ bhojanaṁ tāmasa-priyam\n","body_translit_meant":"yāta-yāmam—stale foods; gata-rasam—tasteless; pūti—putrid; paryuṣhitam—polluted; cha—and; yat—which; uchchhiṣhṭam—left over; api—also; cha—and; amedhyam—impure; bhojanam—foods; tāmasa—to persons in the mode of ignorance; priyam—dear\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"aae17677-d9b7-4d5e-b4ac-93e930ebec8b"},{"id":"8ca594a3-c040-4582-a993-4cbbf829d823","type":"verses","target":{"id":"b946fbe3-6baf-45a4-a421-1b3616e81d78","title":null,"body":"A gift that is given with the thought that 'one must give' and is given in an appropriate place and at the right time to a worthy person who is unable to repay—that gift is considered to be of the Sattva.","translit_title":null,"body_translit":"dātavyam iti yad dānaṁ dīyate ‘nupakāriṇe\ndeśhe kāle cha pātre cha tad dānaṁ sāttvikaṁ smṛitam\n","body_translit_meant":"dātavyam—worthy of charity; iti—thus; yat—which; dānam—charity; dīyate—is given; anupakāriṇe—to one who cannot give in return; deśhe—in the proper place; kāle—at the proper time; cha—and; pātre—to a worthy person; cha—and; tat—that; dānam—charity; sāttvikam—in the mode of goodness; smṛitam—is stated to be\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"29a7ee4c-e28b-4500-b0d1-7a0a00be47d8"},{"id":"dc85dbc2-0c39-450d-afc9-1f0c78dccad0","type":"verses","target":{"id":"acc2ef64-485f-44b3-a05b-653b0d0d94b4","title":null,"body":"Those established in Sattva ascend; those given to Rajas remain in the middle; those given to Tamas, established in the tendencies of bad qualities, descend.","translit_title":null,"body_translit":"ūrdhvaṁ gachchhanti sattva-sthā madhye tiṣhṭhanti rājasāḥ\njaghanya-guṇa-vṛitti-sthā adho gachchhanti tāmasāḥ\n","body_translit_meant":"ūrdhvam—upward; gachchhanti—rise; sattva-sthāḥ—those situated in the mode of goodness; madhye—in the middle; tiṣhṭhanti—stay; rājasāḥ—those in the mode of passion; jaghanya—abominable; guṇa—quality; vṛitti-sthāḥ—engaged in activities; adhaḥ—down; gachchhanti—go; tāmasāḥ—those in the mode of ignorance\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"db424e57-6be0-44c9-9cd5-c79b5c3f91d0"},{"id":"4b0bb863-492f-467c-bb46-cdc930d7c311","type":"verses","target":{"id":"4019eee8-3161-4617-9682-14979599a053","title":null,"body":"Presiding over the ear, the eye, the sense of touch, the sense of taste, the sense of smell, and the mind, He enjoys the sense objects.","translit_title":null,"body_translit":"śhrotraṁ chakṣhuḥ sparśhanaṁ cha rasanaṁ ghrāṇam eva cha\nadhiṣhṭhāya manaśh chāyaṁ viṣhayān upasevate\n","body_translit_meant":"śhrotram—ears; chakṣhuḥ—eyes; sparśhanam—the sense of touch; cha—and; rasanam—tongue; ghrāṇam—nose; eva—also; cha—and; adhiṣhṭhāya—grouped around; manaḥ—mind; cha—also; ayam—they; viṣhayān—sense objects; upasevate—savors\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"b94a714b-ac8c-43d7-b48e-cbe7baa97da7"},{"id":"974d9d71-cc53-48de-a753-ebe441569ea9","type":"verses","target":{"id":"4aee1cb2-90e6-41a8-8844-a4f9cb7844f1","title":null,"body":"He who, not being deluded, thus knows Me as the Highest of persons—he knows all and serves Me with his entire being, O descendant of Bharata!","translit_title":null,"body_translit":"yo mām evam asammūḍho jānāti puruṣhottamam\nsa sarva-vid bhajati māṁ sarva-bhāvena bhārata\n\n","body_translit_meant":"yaḥ—who; mām—me; evam—thus; asammūḍhaḥ—without a doubt; jānāti—know; puruṣha-uttamam—the Supreme Divine Personality; saḥ—they; sarva-vit—those with complete knowledge; bhajati—worship; mām—me; sarva-bhāvena—with one’s whole being; bhārata—Arjun, the son of Bharat\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"31b19c76-7e85-4028-9ef1-fc71ac2f9cf8"},{"id":"62804f90-b4be-4550-923b-2fe899aeb063","type":"verses","target":{"id":"41906d18-417a-4f8b-bba6-edc39b90432f","title":null,"body":"The demoniac do not know the origin and the dissolution; neither purity, nor good conduct, nor truth exists in them.","translit_title":null,"body_translit":"pravṛittiṁ cha nivṛittiṁ cha janā na vidur āsurāḥ\nna śhauchaṁ nāpi chāchāro na satyaṁ teṣhu vidyate\n","body_translit_meant":"pravṛittim—proper actions; cha—and; nivṛittim—improper actions; cha—and; janāḥ—persons; na—not; viduḥ—comprehend; āsurāḥ—those possessing demoniac nature; na—neither; śhaucham—purity; na—nor; api—even; cha—and; āchāraḥ—conduct; na—nor; satyam—truthfulness; teṣhu—in them; vidyate—exist\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"291ef9e8-e626-4325-8f92-8a0284f82018"},{"id":"95951c83-ba8f-47c7-aae3-98642091d08e","type":"verses","target":{"id":"fbd60b67-f93b-4de4-9dca-78adff237060","title":null,"body":"Self-conceited, stubborn, filled with pride and arrogance of wealth, they pretend to perform sacrifices hypocritically, not following the injunctions of the Vedas.","translit_title":null,"body_translit":"ātma-sambhāvitāḥ stabdhā dhana-māna-madānvitāḥ\nyajante nāma-yajñais te dambhenāvidhi-pūrvakam\n","body_translit_meant":"ātma-sambhāvitāḥ—self-conceited; stabdhāḥ—stubborn; dhana—wealth; māna—pride; mada—arrogance; anvitāḥ—full of; yajante—perform sacrifice; nāma—in name only; yajñaiḥ—sacrifices; te—they; dambhena—ostentatiously; avidhi-pūrvakam—with no regards to the rules of the scriptures\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"be29f00d-4d11-459b-ad62-c916f7a6b3a8"},{"id":"2795505b-b244-4921-bdfe-b9807832f546","type":"verses","target":{"id":"b93c72d9-5870-4f84-9982-8a5a23a48c49","title":null,"body":"Arjuna said: \"What is the state of those who remain faithful but neglect the scriptural injunctions—is it sattva, rajas, or tamas? O Krsna!\"","translit_title":null,"body_translit":"arjuna uvācha\nye śhāstra-vidhim utsṛijya yajante śhraddhayānvitāḥ\nteṣhāṁ niṣhṭhā tu kā kṛiṣhṇa sattvam āho rajas tamaḥ\n","body_translit_meant":"arjunaḥ uvācha—Arjun said; ye—who; śhāstra-vidhim—scriptural injunctions; utsṛijya—disregard; yajante—worship; śhraddhayā-anvitāḥ—with faith; teṣhām—their; niṣhṭhā—faith; tu—indeed; kā—what; kṛiṣhṇa—Krishna; sattvam—mode of goodness; āho—or; rajaḥ—mode of passion; tamaḥ—mode of ignorance\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"f7c8047d-05b0-4880-b331-f37a9cb018ae"},{"id":"3035e584-8e84-49e5-8dbf-c782323a87eb","type":"verses","target":{"id":"1ff63034-9c09-4d07-89f4-1bc0b8f0697f","title":null,"body":"That sacrifice of the Sattva (Strand) is offered, as prescribed, by those who desire no reward, steadying their minds with the thought that it is simply something to be offered.","translit_title":null,"body_translit":"aphalākāṅkṣhibhir yajño vidhi-driṣhṭo ya ijyate\nyaṣhṭavyam eveti manaḥ samādhāya sa sāttvikaḥ\n","body_translit_meant":"aphala-ākāṅkṣhibhiḥ—without expectation of any reward; yajñaḥ—sacrifice; vidhi-driṣhṭaḥ—that is in accordance with the scriptural injunctions; yaḥ—which; ijyate—is performed; yaṣhṭavyam-eva-iti—ought to be offered; manaḥ—mind; samādhāya—with conviction; saḥ—that; sāttvikaḥ—of the nature of goodness\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"ac6fb0a9-5795-4010-92b8-f0f2b3eba464"},{"id":"bf87ab19-f3bc-4eb0-b1f9-2da70051378f","type":"verses","target":{"id":"5fe999ea-4353-42b3-8452-59bf285fe285","title":null,"body":"But what is given in return for a favor, or with the expectation of a reward, and which is done with much agitation—that gift is said to be of the Rajas.","translit_title":null,"body_translit":"yat tu pratyupakārārthaṁ phalam uddiśhya vā punaḥ\ndīyate cha parikliṣhṭaṁ tad dānaṁ rājasaṁ smṛitam\n","body_translit_meant":"yat—which; tu—but; prati-upakāra-artham—with the hope of a return; phalam—reward; uddiśhya—expectation; vā—or; punaḥ—again; dīyate—is given; cha—and; parikliṣhṭam—reluctantly; tat—that; dānam—charity; rājasam—in the mode of passion; smṛitam—is said to be\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"7eca52c1-f6a2-46fb-adeb-26598f9af09a"},{"id":"9c8956ce-831c-4eba-8a3d-d8c876b4375c","type":"verses","target":{"id":"e15de3e0-8910-458a-8f52-0ec6acf6849b","title":null,"body":"\"This is a thing to be performed\" - just on that ground, whatever usual action is performed, relinquishing attachment and also fruit - that act of relinquishment is deemed to be of the Sattva (strand).","translit_title":null,"body_translit":"kāryam ity eva yat karma niyataṁ kriyate ‘rjuna\nsaṅgaṁ tyaktvā phalaṁ chaiva sa tyāgaḥ sāttviko mataḥ\n","body_translit_meant":"kāryam—as a duty; iti—as; eva—indeed; yat—which; karma niyatam—obligatory actions; kriyate—are performed; arjuna—Arjun; saṅgam—attachment; tyaktvā—relinquishing; phalam—reward; cha—and; eva—certainly; saḥ—such; tyāgaḥ—renunciation of desires for enjoying the fruits of actions; sāttvikaḥ—in the mode of goodness; mataḥ—considered\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"b19df000-264f-44ca-8a8c-07e3112cbf37"},{"id":"1a1bcd3e-9a73-4fe7-afb7-e3cf55f8eccc","type":"verses","target":{"id":"2aa07b11-6565-4bc7-bf76-5e4ff7e782cc","title":null,"body":"Transcending these three strands, from which the body [etc.] is born, the embodied (the soul) is freed from birth, death, old age, and sorrow, and attains immortality.","translit_title":null,"body_translit":"guṇān etān atītya trīn dehī deha-samudbhavān\njanma-mṛityu-jarā-duḥkhair vimukto ’mṛitam aśhnute\n","body_translit_meant":"guṇān—the three modes of material nature; etān—these; atītya—transcending; trīn—three; dehī—the embodied; deha—body; samudbhavān—produced of; janma—birth; mṛityu—death; jarā—old age; duḥkhaiḥ—misery; vimuktaḥ—freed from; amṛitam—immortality; aśhnute—attains\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"6e814f50-3fe4-4043-bf96-ecffdd9b1ad5"},{"id":"d5022ff0-a957-4b91-81c7-282add699a57","type":"verses","target":{"id":"9d8d58dc-be0a-42ee-bf84-a65a6206044a","title":null,"body":"The Bhagavat said, [The scriptures] speak of a non-perishing holy fig tree, whose roots are high and branches are low, and of which the [Vedic] hymns are the leaves. He who knows this tree is the knower of the Vedas.","translit_title":null,"body_translit":"śhrī-bhagavān uvācha\nūrdhva-mūlam adhaḥ-śhākham aśhvatthaṁ prāhur avyayam\nchhandānsi yasya parṇāni yas taṁ veda sa veda-vit\n","body_translit_meant":"śhrī-bhagavān uvācha—the Supreme Divine Personality said; ūrdhva-mūlam—with roots above; adhaḥ—downward; śhākham—branches; aśhvattham—the sacred fig tree; prāhuḥ—they speak; avyayam—eternal; chhandānsi—Vedic mantras; yasya—of which; parṇāni—leaves; yaḥ—who; tam—that; veda—knows; saḥ—he; veda-vit—the knower of the Vedas\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"82adab96-6f0d-445b-95d9-8f6e7c4d45f2"},{"id":"f5bc71e8-4e16-424a-8dac-f8830610cf5c","type":"verses","target":{"id":"7bb08d98-dd1e-4e91-98fb-d6538de05f78","title":null,"body":"The exerting men of Yoga perceive Him dwelling in the Self; [however], the unintelligent men, with their uncontrolled selves, do not perceive Him, even though they exert.","translit_title":null,"body_translit":"yatanto yoginaśh chainaṁ paśhyanty ātmany avasthitam\nyatanto ‘py akṛitātmāno nainaṁ paśhyanty achetasaḥ\n","body_translit_meant":"yatantaḥ—striving; yoginaḥ—yogis; cha—too; enam—this (the soul); paśhyanti—see; ātmani—in the body; avasthitam—enshrined; yatantaḥ—strive; api—even though; akṛita-ātmānaḥ—those whose minds are not purified; na—not; enam—this; paśhyanti—cognize; achetasaḥ—unaware\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"370b2019-2dd3-4c06-b2f5-e3a44105ff76"},{"id":"eb0f8c2a-acd8-4b87-af10-3b7e01960c27","type":"verses","target":{"id":"7cc07128-681b-4844-ba4c-c3033afc39aa","title":null,"body":"Clinging to this view, the inauspicious men of ruined souls, poor intellect, and cruel deeds strive to destroy the world.","translit_title":null,"body_translit":"etāṁ dṛiṣhṭim avaṣhṭabhya naṣhṭātmāno ’lpa-buddhayaḥ\nprabhavanty ugra-karmāṇaḥ kṣhayāya jagato ’hitāḥ\n","body_translit_meant":"etām—such; dṛiṣhṭim—views; avaṣhṭabhya—holding; naṣhṭa—misdirected; ātmānaḥ—souls; alpa-buddhayaḥ—of small intellect; prabhavanti—arise; ugra—cruel; karmāṇaḥ—actions; kṣhayāya—destruction; jagataḥ—of the world; ahitāḥ—enemies\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"a55fdd54-c464-4ee8-a16d-54319115d6e5"},{"id":"8570c18f-a5ed-4898-83b1-bde5ecb79bb6","type":"verses","target":{"id":"d54fdaff-fdf5-470f-ac56-be7653fdc983","title":null,"body":"These hateful, cruel, and base men, I hurl incessantly into the inauspicious, demoniac wombs, alone in the cycle of birth and death.","translit_title":null,"body_translit":"tān ahaṁ dviṣhataḥ krūrān sansāreṣhu narādhamān\nkṣhipāmy ajasram aśhubhān āsurīṣhv eva yoniṣhu\n","body_translit_meant":"tān—these; aham—I; dviṣhataḥ—hateful; krūrān—cruel; sansāreṣhu—in the material world; nara-adhamān—the vile and vicious of humankind; kṣhipāmi—I hurl; ajasram—again and again; aśhubhān—inauspicious; āsurīṣhu—demoniac; eva—indeed; yoniṣhu—in to the wombs;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"cc2fb620-17b3-4baa-b744-82fe5b37d496"},{"id":"53364239-890e-4cd1-a527-0c5bc4dd776b","type":"verses","target":{"id":"c5624e79-cb7b-441d-9cdf-94a624e607f2","title":null,"body":"Corresponding to one's own sattva, O descendant of Bharata, everybody has faith. The person predominantly consists of faith. Whatever one has faith in, that he becomes certainly.","translit_title":null,"body_translit":"sattvānurūpā sarvasya śhraddhā bhavati bhārata\nśhraddhā-mayo ‘yaṁ puruṣho yo yach-chhraddhaḥ sa eva saḥ\n","body_translit_meant":"sattva-anurūpā—conforming to the nature of one’s mind; sarvasya—all; śhraddhā—faith; bhavati—is; bhārata—Arjun, the scion of Bharat; śhraddhāmayaḥ—possessing faith; ayam—that; puruṣhaḥ—human being; yaḥ—who; yat-śhraddhaḥ—whatever the nature of their faith; saḥ—their; eva—verily; saḥ—they\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"f91ed34d-b640-4fe5-b3ee-ae04bde803b2"},{"id":"c9d54aba-7eae-425d-a096-9c109fba4cdd","type":"verses","target":{"id":"34e1a173-5db3-4b52-a94c-c1ebf97dbd43","title":null,"body":"They declare that sacrifice to be of the Tamas (Strand) which is devoid of scriptural injunction, in which there is no recitation of Vedic hymns, where no food and sacrificial fee are distributed, and which is completely devoid of faith.","translit_title":null,"body_translit":"vidhi-hīnam asṛiṣhṭānnaṁ mantra-hīnam adakṣhiṇam\nśhraddhā-virahitaṁ yajñaṁ tāmasaṁ parichakṣhate\n","body_translit_meant":"vidhi-hīnam—without scriptural direction; asṛiṣhṭa-annam—without distribution of prasādam; mantra-hīnam—with no chanting of the Vedic hymns; adakṣhiṇam—with no remunerations to the priests; śhraddhā—faith; virahitam—without; yajñam—sacrifice; tāmasam—in the mode of ignorance; parichakṣhate—is to be considered\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"21e8ccfb-c334-4a3a-b8ff-316ea56b0e56"},{"id":"5ece3efb-0310-4516-906d-1ee94d198c4c","type":"verses","target":{"id":"18e33ea8-6777-4b1e-b185-c32118109065","title":null,"body":"OM TAT SAT: This is held to be the three-fold indication of Brahman. Through this, the Vedas and sacrifices were fashioned by Brahma in the past.","translit_title":null,"body_translit":"oṁ tat sad iti nirdeśho brahmaṇas tri-vidhaḥ smṛitaḥ\nbrāhmaṇās tena vedāśh cha yajñāśh cha vihitāḥ purā\n","body_translit_meant":"om tat sat—syllables representing aspects of transcendence; iti—thus; nirdeśhaḥ—symbolic representatives; brahmaṇaḥ—the Supreme Absolute Truth; tri-vidhaḥ—of three kinds; smṛitaḥ—have been declared; brāhmaṇāḥ—the priests; tena—from them; vedāḥ—scriptures; cha—and; yajñāḥ—sacrifice; cha—and; vihitāḥ—came about; purā—from the beginning of creation\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"8b2095f5-836f-4cdc-a1b7-ed872b949477"},{"id":"2897c63d-b29b-4524-bbea-495578bc31e5","type":"verses","target":{"id":"b654e2ad-c977-43ba-8811-9a51740cf202","title":null,"body":"The man of renunciation, who is well-possessed of Sattva, is wise and has his doubts destroyed—he does not hate unskilled action and does not cling to skilled action.","translit_title":null,"body_translit":"na dveṣhṭy akuśhalaṁ karma kuśhale nānuṣhajjate\ntyāgī sattva-samāviṣhṭo medhāvī chhinna-sanśhayaḥ\n","body_translit_meant":"na—neither; dveṣhṭi—hate; akuśhalam—disagreeable; karma—work; kuśhale—to an agreeable; na—nor; anuṣhajjate—seek; tyāgī—one who renounces desires for enjoying the fruits of actions; sattva—in the mode of goodness; samāviṣhṭaḥ—endowed with; medhāvī—intelligent; chhinna-sanśhayaḥ—those who have no doubts\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"2a87a1fe-af64-4693-bea9-aae6bd620a19"},{"id":"c3cdc7dc-14df-45c2-ad55-9f23a1ed1ed1","type":"chapters","target":{"id":"f9d8628a-0191-4132-9526-f2e6e25e9d76","title":"The Yoga of the Supreme Divine Personality","body":"The fifteenth chapter of the Bhagavad Gita is \"Purushottama Yoga\". In Sanskrit, Purusha means the \"All-pervading God\", and Purushottam means the timeless & transcendental aspect of God. Krishna reveals that the purpose of this Transcendental knowledge of the God is to detach ourselves from the bondage of the material world and to understand Krishna as the Supreme Divine Personality, who is the eternal controller and sustainer of the world. One who understands this Ultimate Truth surrenders to Him and engages in His devotional service.","translit_title":"Puruṣhottam Yog","body_translit":null,"body_translit_meant":null,"body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":15,"lang":"en"},{"id":"1832ee44-2f82-43d5-afa6-f71a17a46fcd","type":"verses","target":{"id":"9ad4b757-6538-4daf-b9f5-7bc5270b3b55","title":null,"body":"The deluded do not perceive Him; [but] the men of knowledge-eye do see Him, as He dwells, rises up, or enjoys what is endowed with strands.","translit_title":null,"body_translit":"utkrāmantaṁ sthitaṁ vāpi bhuñjānaṁ vā guṇānvitam\nvimūḍhā nānupaśhyanti paśhyanti jñāna-chakṣhuṣhaḥ\n","body_translit_meant":"utkrāmantam—departing; sthitam—residing; vā api—or even; bhuñjānam—enjoys; vā—or; guṇa-anvitam—under the spell of the modes of material nature; vimūḍhāḥ—the ignorant; na—not; anupaśhyanti—percieve; paśhyanti—behold; jñāna-chakṣhuṣhaḥ—those who possess the eyes of knowledge\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"571a39df-65d1-471e-b60d-5f4dbe42b484"},{"id":"813ac3c0-5e6d-41af-bd8d-f96cf02e3a99","type":"verses","target":{"id":"70943315-3973-40a1-8716-b7312412d2ff","title":null,"body":"Thus, O sinless one, I have imparted to you the most secret scripture; by understanding this, let a man become wise and also become one who has accomplished what needs to be accomplished, O descendant of Bharata!","translit_title":null,"body_translit":"iti guhyatamaṁ śhāstram idam uktaṁ mayānagha\netad buddhvā buddhimān syāt kṛita-kṛityaśh cha bhārata\n","body_translit_meant":"iti—these; guhya-tamam—most secret; śhāstram—Vedic scriptures; idam—this; uktam—spoken; mayā—by me; anagha—Arjun, the sinless one; etat—this; buddhvā—understanding; buddhi-mān—enlightened; syāt—one becomes; kṛita-kṛityaḥ—who fulfills all that is to be accomplished; cha—and; bhārata—Arjun, the son of Bharat\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"cbac3656-94a0-408c-a4f2-1ab4fb5bc4c7"},{"id":"85d6cf07-4731-4fc5-9dd0-b9d2ba25f6b3","type":"verses","target":{"id":"894c023b-e181-4696-81c0-c23b51063d45","title":null,"body":"They say that this world is without truth; has no basis; and has no Lord; this is not born on the basis of the mutual cause-and-effect-relation [of the things]; it has nothing [beyond] and has no cause.","translit_title":null,"body_translit":"asatyam apratiṣhṭhaṁ te jagad āhur anīśhvaram\naparaspara-sambhūtaṁ kim anyat kāma-haitukam\n","body_translit_meant":"asatyam—without absolute truth; apratiṣhṭham—without any basis; te—they; jagat—the world; āhuḥ—say; anīśhvaram—without a God; aparaspara—without cause; sambhūtam—created; kim—what; anyat—other; kāma-haitukam—for sexual gratification only\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"23d16bb8-e908-41ae-b83e-7139bde883f2"},{"id":"73882a5f-bc16-451c-97e0-1e430f242557","type":"verses","target":{"id":"44b9eeef-5280-434e-b0d5-d000239f5340","title":null,"body":"Clinging fast to egotism, force, pride, craving, and anger, these envious people hate Me in the bodies of their own and of others.","translit_title":null,"body_translit":"ahankāraṁ balaṁ darpaṁ kāmaṁ krodhaṁ cha sanśhritāḥ\nmām ātma-para-deheṣhu pradviṣhanto ’bhyasūyakāḥ\n","body_translit_meant":"ahankāram—egotism; balam—strength; darpam—arrogance; kāmam—desire; krodham—anger; cha—and; sanśhritāḥ—covered by; mām—me; ātma-para-deheṣhu—within one’s own and bodies of others; pradviṣhantaḥ—abuse; abhyasūyakāḥ—the demoniac\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"f0bccd5b-ce4d-4975-9077-3da3f019e0a6"},{"id":"b20050da-124e-4f38-90c5-09647e930d84","type":"verses","target":{"id":"6938739d-5350-4c7d-8b47-596c680fd29a","title":null,"body":"The Bhagavat said, \"The faith of the embodied persons is born of their nature and is of three kinds [viz.]: that which is made of Sattva; that which is made of Rajas; and that which is made of Tamas. Listen about them.\"","translit_title":null,"body_translit":"śhrī-bhagavān uvācha\ntri-vidhā bhavati śhraddhā dehināṁ sā svabhāva-jā\nsāttvikī rājasī chaiva tāmasī cheti tāṁ śhṛiṇu\n","body_translit_meant":"śhrī-bhagavān uvācha—the Supreme Personality said; tri-vidhā—of three kinds; bhavati—is; śhraddhā—faith; dehinām—embodied beings; sā—which; sva-bhāva-jā—born of one’s innate nature; sāttvikī—of the mode of goodness; rājasī—of the mode of passion; cha—and; eva—certainly; tāmasī—of the mode of ignorance; cha—and; iti—thus; tām—about this; śhṛiṇu—hear\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"c1fe0f6b-8458-408d-a36c-b1bf9372e1d4"},{"id":"f6890174-2824-4636-abb1-a45407acad19","type":"verses","target":{"id":"ae83ae67-972d-46db-9a9b-0fa6845038f5","title":null,"body":"What is offered aiming at fruit and also only for the sake of display—know that sacrifice to be of the Rajas strand and to be transitory and impermanent.","translit_title":null,"body_translit":"abhisandhāya tu phalaṁ dambhārtham api chaiva yat\nijyate bharata-śhreṣhṭha taṁ yajñaṁ viddhi rājasam\n","body_translit_meant":"abhisandhāya—motivated by; tu—but; phalam—the result; dambha—pride; artham—for the sake of; api—also; cha—and; eva—certainly; yat—that which; ijyate—is performed; bharata-śhreṣhṭha—Arjun, the best of the Bharatas; tam—that; yajñam—sacrifice; viddhi—know; rājasam—in the mode of passion\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"fd57746c-6533-44b5-b28c-9ec00ad7b166"},{"id":"50106e59-ae46-4040-bc36-e5da21ef98b6","type":"verses","target":{"id":"1e58d25b-af1c-4a8a-be31-e3de479a88ae","title":null,"body":"The gift which is given at an inappropriate place, time, and to unworthy persons, and which is converted into a bad act and is disrespected—that is declared to be of the Tamas.","translit_title":null,"body_translit":"adeśha-kāle yad dānam apātrebhyaśh cha dīyate\nasat-kṛitam avajñātaṁ tat tāmasam udāhṛitam\n","body_translit_meant":"adeśha—at the wrong place; kāle—at the wrong time; yat—which; dānam—charity; apātrebhyaḥ—to unworthy persons; cha—and; dīyate—is given; asat-kṛitam—without respect; avajñātam—with contempt; tat—that; tāmasam—of the nature of nescience; udāhṛitam—is held to be\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"5b3c53b6-8573-49d4-ac18-5ba0ec8c5911"},{"id":"a7ca1262-af62-48ae-83d5-d4ee665dea62","type":"verses","target":{"id":"8fbf1f6e-65d0-4640-b4e0-7961d93df951","title":null,"body":"Arjuna said, O Mighty-armed One! I desire to know, in detail, the distinctive nature of renunciation and relinquishment, O Hrsikesa! O Slayer of Kesin!","translit_title":null,"body_translit":"arjuna uvācha\nsannyāsasya mahā-bāho tattvam ichchhāmi veditum\ntyāgasya cha hṛiṣhīkeśha pṛithak keśhi-niṣhūdana\n","body_translit_meant":"arjunaḥ uvācha—Arjun said; sanyāsasya—of renunciation of actions; mahā-bāho—mighty-armed one; tattvam—the truth; ichchhāmi—I wish; veditum—to understand; tyāgasya—of renunciation of desires for enjoying the fruits of actions; cha—and; hṛiṣhīkeśha—Krishna, the Lord of the senses; pṛithak—distinctively; keśhī-niṣhūdana—Krishna, the killer of the Keshi demon\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"d8b98f1c-24a6-46b3-9829-c4235ee2a258"},{"id":"9bde8439-e7ad-4a2b-8a43-e9813f5224d6","type":"verses","target":{"id":"1bd49cf3-61fd-403b-9109-7a5a5fdf23ca","title":null,"body":"The nature of this is not perceived in that way, nor its end, nor its beginning, nor its center (middle). Cutting this holy fig tree, with its firmly and variedly grown roots, by means of the sharp (or strong) axe of non-attachment;","translit_title":null,"body_translit":"na rūpam asyeha tathopalabhyate\nnānto na chādir na cha sampratiṣhṭhā\naśhvattham enaṁ su-virūḍha-mūlam\nasaṅga-śhastreṇa dṛiḍhena chhittvā\n\n","body_translit_meant":"na—not; rūpam—form; asya—of this; iha—in this world; tathā—as such; upalabhyate—is perceived; na—neither; antaḥ—end; na—nor; cha—also; ādiḥ—beginning; na—never; cha—also; sampratiṣhṭhā—the basis; aśhvattham—sacred fig tree; enam—this; su-virūḍha-mūlam—deep-rooted; asaṅga-śhastreṇa—by the axe of detachment; dṛiḍhena—strong; chhittvā—having cut down;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"464da921-ad7e-4135-86e0-0467ea53d96c"},{"id":"d1f90f94-dbf9-4db2-b56a-feb08a9bd3cb","type":"verses","target":{"id":"bfb13d95-b6bf-416c-bb73-6badc5f0e969","title":null,"body":"And, penetrating the earth, I support all beings with My energy; being the sap-filled moon, I nourish all plants.","translit_title":null,"body_translit":"gām āviśhya cha bhūtāni dhārayāmy aham ojasā\npuṣhṇāmi chauṣhadhīḥ sarvāḥ somo bhūtvā rasātmakaḥ\n\n","body_translit_meant":"gām—earth; āviśhya—permeating; cha—and; bhūtāni—living beings; dhārayāmi—sustain; aham—I; ojasā—energy; puṣhṇāmi—nourish; cha—and; auṣhadhīḥ—plants; sarvāḥ—all; somaḥ—the moon; bhūtvā—becoming; rasa-ātmakaḥ—supplying the juice of life\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"273e72c3-6598-45d8-9762-1bf6908210fe"},{"id":"07ec4619-b77c-43ff-9110-84f71864fd11","type":"verses","target":{"id":"7c9b8f23-a4fe-44e6-9a07-1fddd1418e16","title":null,"body":"The Bhagavat said: Fearlessness, complete purity of the Sattva, steadfastness in knowledge-Yoga, charity, self-restraint, Vedic sacrifice, recitation of scriptures, austerity, and uprightness.","translit_title":null,"body_translit":"śhrī-bhagavān uvācha\nabhayaṁ sattva-sanśhuddhir jñāna-yoga-vyavasthitiḥ\ndānaṁ damaśh cha yajñaśh cha svādhyāyas tapa ārjavam\n","body_translit_meant":"śhrī-bhagavān uvācha—the Supreme Divine Personality said; abhayam—fearlessness; sattva-sanśhuddhiḥ—purity of mind; jñāna—knowledge; yoga—spiritual; vyavasthitiḥ—steadfastness; dānam—charity; damaḥ—control of the senses; cha—and; yajñaḥ—performance of sacrifice; cha—and; svādhyāyaḥ—study of sacred books; tapaḥ—austerity; ārjavam—straightforwardness;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"25274219-660b-4b30-a437-e2eacf7b6aeb"},{"id":"bbc672de-ed22-4693-afb1-d6f05ade68ee","type":"verses","target":{"id":"bf48a2d9-09a8-4d2f-b709-7ce4fd6fd189","title":null,"body":"Adhering to their ultimate and unending anxiety; viewing the gratification of their desires as their highest goal; believing that this is all that exists;","translit_title":null,"body_translit":"chintām aparimeyāṁ cha pralayāntām upāśhritāḥ\nkāmopabhoga-paramā etāvad iti niśhchitāḥ\n","body_translit_meant":"chintām—anxieties; aparimeyām—endless; cha—and; pralaya-antām—until death; upāśhritāḥ—taking refuge; kāma-upabhoga—gratification of desires; paramāḥ—the purpose of life; etāvat—still; iti—thus; niśhchitāḥ—with complete assurance\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"5ae70591-ad60-424a-b6d7-f61931d18680"},{"id":"766925f9-3718-4760-975e-fda85000a7a0","type":"verses","target":{"id":"87adb5f6-e6c7-4416-8bf5-e88528738dca","title":null,"body":"To the hell, there are three gates that ruin the Self: desire, anger, and greed. Hence, one should avoid these three.","translit_title":null,"body_translit":"tri-vidhaṁ narakasyedaṁ dvāraṁ nāśhanam ātmanaḥ\nkāmaḥ krodhas tathā lobhas tasmād etat trayaṁ tyajet\n","body_translit_meant":"tri-vidham—three types of; narakasya—to the hell; idam—this; dvāram—gates; nāśhanam—destruction; ātmanaḥ—self; kāmaḥ—lust; krodhaḥ—anger; tathā—and; lobhaḥ—greed; tasmāt—therefore; etat—these; trayam—three; tyajet—should abandon\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"1004a521-8655-414f-9a99-09c101f02746"},{"id":"133ea604-69af-4ebd-8e2e-d6043e39e634","type":"verses","target":{"id":"79cf7c7a-dc9c-4868-a6c7-d600693624da","title":null,"body":"Those men who practise terrible austerities not as enjoined in the scriptures, who are bound by hypocrisy and conceit, and are impelled by the force of passion for desired objects;","translit_title":null,"body_translit":"aśhāstra-vihitaṁ ghoraṁ tapyante ye tapo janāḥ\ndambhāhankāra-sanyuktāḥ kāma-rāga-balānvitāḥ\n","body_translit_meant":"aśhāstra-vihitam—not enjoined by the scriptures; ghoram—stern; tapyante—perform; ye—who; tapaḥ—austerities; janāḥ—people; dambha—hypocrisy; ahankāra—egotism; sanyuktāḥ—possessed of; kāma—desire; rāga—attachment; bala—force; anvitāḥ—impelled by;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"041e8aab-5f1f-4c10-9b02-3c906a596f05"},{"id":"6536acf4-bd45-4f85-aea1-0c7e96f34dd0","type":"verses","target":{"id":"a78533fe-d39c-451c-acbf-e609fb044ea2","title":null,"body":"The unoffending speech which is true, pleasant, and beneficial; as well as the practice of regular recitation of the Vedas—all this is said to be an austerity of the speech-sense.","translit_title":null,"body_translit":"anudvega-karaṁ vākyaṁ satyaṁ priya-hitaṁ cha yat\nsvādhyāyābhyasanaṁ chaiva vāṅ-mayaṁ tapa uchyate\n","body_translit_meant":"anudvega-karam—not causing distress; vākyam—words; satyam—truthful; priya- hitam—beneficial; cha—and; yat—which; svādhyāya-abhyasanam—recitation of the Vedic scriptures; cha eva—as well as; vāṅ-mayam—of speech; tapaḥ—austerity; uchyate—are declared as\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"d7211823-a4b1-4572-8304-54f2f4a3b406"},{"id":"936f604e-6f25-4551-89db-582fb567ca71","type":"verses","target":{"id":"2a290d3c-ab1c-4aab-832a-de949d156e45","title":null,"body":"With the utterance of TAT, and without aiming for the fruit, those who seek emancipation perform acts of sacrifice, austerity, and various acts of giving.","translit_title":null,"body_translit":"tad ity anabhisandhāya phalaṁ yajña-tapaḥ-kriyāḥ\ndāna-kriyāśh cha vividhāḥ kriyante mokṣha-kāṅkṣhibhiḥ\n","body_translit_meant":"tat—the syllable Tat; iti—thus; anabhisandhāya—without desiring; phalam—fruitive rewards; yajña—sacrifice; tapaḥ—austerity; kriyāḥ—acts; dāna—charity; kriyāḥ—acts; cha—and; vividhāḥ—various; kriyante—are done; mokṣha-kāṅkṣhibhiḥ—by seekers of freedom from material entanglements\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"e5d18e47-058d-4ca0-bf24-7b477afeae7b"},{"id":"aa541830-179f-4102-a920-027fe8ee534e","type":"verses","target":{"id":"78cb563b-d0dd-4fc3-83c1-7089cbdf9f12","title":null,"body":"O best of Bharata's descendants! Listen to My considered view about relinquishing: Indeed, the act of relinquishing is rightly spoken to be threefold, O best among men!","translit_title":null,"body_translit":"niśhchayaṁ śhṛiṇu me tatra tyāge bharata-sattama\ntyāgo hi puruṣha-vyāghra tri-vidhaḥ samprakīrtitaḥ\n","body_translit_meant":"niśhchayam—conclusion; śhṛiṇu—hear; me—my; tatra—there; tyāge—about renunciation of desires for enjoying the fruits of actions; bharata-sat-tama—best of the Bharatas; tyāgaḥ—renunciation of desires for enjoying the fruits of actions; hi—indeed; puruṣha-vyāghra—tiger amongst men; tri-vidhaḥ—of three kinds; samprakīrtitaḥ—declared\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"7138e681-9347-4697-bec3-c9895667163d"},{"id":"37712157-f234-43a3-9847-24f05b7d9a71","type":"verses","target":{"id":"425f5228-b6d4-4317-8934-207e19f13bc8","title":null,"body":"Those who are rid of pride and delusion, have put down the evils of attachment, remain constantly in their own nature of the Self, have their desires completely departed, and are fully liberated from the pairs known as pleasures and pains—these undeluded men go to that changeless Abode.","translit_title":null,"body_translit":"nirmāna-mohā jita-saṅga-doṣhā\nadhyātma-nityā vinivṛitta-kāmāḥ\ndvandvair vimuktāḥ sukha-duḥkha-sanjñair\ngachchhanty amūḍhāḥ padam avyayaṁ tat\n","body_translit_meant":"niḥ—free from; māna—vanity; mohāḥ—delusion; jita—having overcome; saṅga—attachment; doṣhāḥ—evils; adhyātma-nityāḥ—dwelling constantly in the self and God; vinivṛitta—freed from; kāmāḥ—desire to enjoy senses; dvandvaiḥ—from the dualities; vimuktāḥ—liberated; sukha-duḥkha—pleasure and pain; saṁjñaiḥ—known as; gachchhanti—attain; amūḍhāḥ—unbewildered; padam—abode; avyayam—eternal; tat—that\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"b5e5396f-a86d-4576-bf51-b1aea042073d"},{"id":"0c5f9799-dcb6-44e1-8540-dd8d780c1282","type":"verses","target":{"id":"ddd78dfc-16d8-4d76-a140-73a4add382c5","title":null,"body":"I am entered in the hearts of all; from Me come the faculties of memory, knowledge, and discernment; none but Me is to be known by means of all the Vedas, and I am alone the author of the final part of the Vedas and also the author of the Vedas themselves.","translit_title":null,"body_translit":"sarvasya chāhaṁ hṛidi sanniviṣhṭo\nmattaḥ smṛitir jñānam apohanaṁ cha\nvedaiśh cha sarvair aham eva vedyo\nvedānta-kṛid veda-vid eva chāham\n\n","body_translit_meant":"sarvasya—of all living beings; cha—and; aham—I; hṛidi—in the hearts; sanniviṣhṭaḥ—seated; mattaḥ—from me; smṛitiḥ—memory; jñānam—knowledge; apohanam—forgetfulness; cha—as well as; vedaiḥ—by the Vedas; cha—and; sarvaiḥ—all; aham—I; eva—alone; vedyaḥ—to be known; vedānta-kṛit—the author of the Vedānt; veda-vit—the knower of the meaning of the Vedas; eva—alone; cha—and; aham—I\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"2ae65380-9563-4813-98dc-aed39fffff51"},{"id":"f1a2b14e-959f-4278-b45c-14f84b3a9376","type":"verses","target":{"id":"2912ce0d-b30d-45aa-bf1b-4d53f495aaf4","title":null,"body":"Vital power, forgiveness, fortitude, contentment, absence of treachery, and absence of excessive pride—these are in the person who is born for divine wealth, O Descendant of Bharata!","translit_title":null,"body_translit":"tejaḥ kṣhamā dhṛitiḥ śhaucham adroho nāti-mānitā\nbhavanti sampadaṁ daivīm abhijātasya bhārata\n","body_translit_meant":"tejaḥ—vigor; kṣhamā—forgiveness; dhṛitiḥ—fortitude; śhaucham—cleanliness; adrohaḥ—bearing enmity toward none; na—not; ati-mānitā—absence of vanity; bhavanti—are; sampadam—qualities; daivīm—godly; abhijātasya—of those endowed with; bhārata—scion of Bharat\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"73d08319-b1c0-4fb7-ad3d-1ab651342dd7"},{"id":"5140e88b-79bc-4a86-ade9-75130d10313c","type":"verses","target":{"id":"9f6142af-2d42-4c3f-b1ca-1b3cc6b400fa","title":null,"body":"'I have gained this today; I will attain this object of my desire in the future; this is mine now; and this wealth will also be mine soon.'","translit_title":null,"body_translit":"idam adya mayā labdham imaṁ prāpsye manoratham\nidam astīdam api me bhaviṣhyati punar dhanam\n","body_translit_meant":"idam—this; adya—today; mayā—by me; labdham—gained; imam—this; prāpsye—I shall acquire; manaḥ-ratham—desire; idam—this; asti—is; idam—this; api—also; me—mine; bhaviṣhyati—in future; punaḥ—again; dhanam—wealth;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"3e547c0b-7437-4d4c-b9b7-7f956e1255d1"},{"id":"20180990-af76-4b47-ac60-52e6f0e93a50","type":"verses","target":{"id":"526c9d73-777a-4d04-bda5-c5ae5321453f","title":null,"body":"He who neglects the injunctions of the scriptures and acts according to his own will, attains neither success nor happiness nor the highest goal of emancipation.","translit_title":null,"body_translit":"yaḥ śhāstra-vidhim utsṛijya vartate kāma-kārataḥ\nna sa siddhim avāpnoti na sukhaṁ na parāṁ gatim\n","body_translit_meant":"yaḥ—who; śhāstra-vidhim—scriptural injunctions; utsṛijya—discarding; vartate—act; kāma-kārataḥ—under the impulse of desire; na—neither; saḥ—they; siddhim—perfection; avāpnoti—attain; na—nor; sukham—happiness; na—nor; parām—the supreme; gatim—goal\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"47ab9789-2c1e-49a6-b1bc-6d10f2e6c9ef"},{"id":"c6419e4d-a4ec-46cd-8127-313ea2be8b64","type":"verses","target":{"id":"779e9b0e-54c8-41e4-9c6f-c093526c3f19","title":null,"body":"Further, the food which is dear to all is of three kinds. So too are their sacrifice, austerity, and charity. Listen to this distinction of them.","translit_title":null,"body_translit":"āhāras tv api sarvasya tri-vidho bhavati priyaḥ\nyajñas tapas tathā dānaṁ teṣhāṁ bhedam imaṁ śhṛiṇu\n","body_translit_meant":"āhāraḥ—food; tu—indeed; api—even; sarvasya—of all; tri-vidhaḥ—of three kinds; bhavati—is; priyaḥ—dear; yajñaḥ—sacrifice; tapaḥ—austerity; tathā—and; dānam—charity; teṣhām—of them; bhedam—distinctions; imam—this; śhṛiṇu—hear\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"c2cf691e-a480-49fd-a30d-f9e2710e5617"},{"id":"360d9294-ed33-4c5f-98d3-d57bc3011650","type":"verses","target":{"id":"12775e81-9685-4565-b23a-1c7613b940c3","title":null,"body":"This three-fold austerity, observed with best faith, by men who are masters of Yoga and have no desire for its fruits—they call it to be of the Sattva.","translit_title":null,"body_translit":"śhraddhayā parayā taptaṁ tapas tat tri-vidhaṁ naraiḥ\naphalākāṅkṣhibhir yuktaiḥ sāttvikaṁ parichakṣhate\n","body_translit_meant":"śhraddhayā—with faith; parayā—transcendental; taptam—practiced; tapaḥ—austerity; tat—that; tri-vidham—three-fold; naraiḥ—by persons; aphala-ākāṅkṣhibhiḥ—without yearning for material rewards; yuktaiḥ—steadfast; sāttvikam—in the mode of goodness; parichakṣhate—are designated\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"5ab8f135-71fb-4e7f-90e2-2d8b6a0bba54"},{"id":"06d12aad-3612-40b6-b9c6-d93115d0d775","type":"verses","target":{"id":"d4fb6fcf-4db1-48aa-8d59-3dff86a0f151","title":null,"body":"Steadfastness is performing sacrifice, austerity, and giving gifts; this act is hence justly called SAT.","translit_title":null,"body_translit":"yajñe tapasi dāne cha sthitiḥ sad iti chochyate\nkarma chaiva tad-arthīyaṁ sad ity evābhidhīyate\n","body_translit_meant":"yajñe—in sacrifice; tapasi—in penance; dāne—in charity; cha—and; sthitiḥ—established in steadiness; sat—the syllable Sat; iti—thus; cha—and; uchyate—is pronounced; karma—action; cha—and; eva—indeed; tat-arthīyam—for such purposes; sat—the syllable Sat; iti—thus; eva—indeed; abhidhīyate—is described\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"e63fa17e-fc9c-47f0-874d-2ebe25b7c4de"},{"id":"232c6cad-7e31-48d9-8d57-89c71e0e1811","type":"verses","target":{"id":"4c4602ac-7bc0-4232-8c3e-64ebae6eb8b0","title":null,"body":"Certain wise men declare that the harmful action should be relinquished, while others say that the actions of performing sacrifices, giving gifts, and observing austerities should not be relinquished.","translit_title":null,"body_translit":"tyājyaṁ doṣha-vad ity eke karma prāhur manīṣhiṇaḥ\nyajña-dāna-tapaḥ-karma na tyājyam iti chāpare\n","body_translit_meant":"tyājyam—should be given up; doṣha-vat—as evil; iti—thus; eke—some; karma—actions; prāhuḥ—declare; manīṣhiṇaḥ—the learned; yajña—sacrifice; dāna—charity; tapaḥ—penance; karma—acts; na—never; tyājyam—should be abandoned; iti—thus; cha—and; apare—others\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"1a6c6f7c-6c76-46de-8f01-979281893c08"},{"id":"44bdc6ab-692a-42f1-a692-988d2d578e79","type":"verses","target":{"id":"a711a3b9-7923-4f3b-8442-4218c7a53276","title":null,"body":"The divine wealth is meant for total emancipation, and the demoniac one for complete bondage. Grieve not, O son of Pandu, for the divine wealth you are born.","translit_title":null,"body_translit":"daivī sampad vimokṣhāya nibandhāyāsurī matā\nmā śhuchaḥ sampadaṁ daivīm abhijāto ’si pāṇḍava\n","body_translit_meant":"daivī—divine; sampat—qualities; vimokṣhāya—toward liberation; nibandhāya—to bondage; āsurī—demoniac qualities; matā—are considered; mā—do not; śhuchaḥ—grieve; sampadam—virtues; daivīm—saintly; abhijātaḥ—born; asi—you are; pāṇḍava—Arjun, the son of Pandu\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"ba97db19-206a-4d1c-8e81-f46b38aee430"},{"id":"0a084cf8-4535-426f-91a7-d490a37cdb95","type":"verses","target":{"id":"d335d9b5-5e54-428e-95e5-875d663a7e43","title":null,"body":"'I am wealthy; I am of noble birth; who else is equal to me? I shall perform sacrifices; I shall give gifts; and I shall rejoice' - deluded by these wrong ideas;","translit_title":null,"body_translit":"āḍhyo ’bhijanavān asmi ko ’nyo ’sti sadṛiśho mayā\nyakṣhye dāsyāmi modiṣhya ity ajñāna-vimohitāḥ\n aneka-chitta-vibhrāntā moha-jāla-samāvṛitāḥ\nprasaktāḥ kāma-bhogeṣhu patanti narake ’śhuchau\n","body_translit_meant":"āḍhyaḥ—wealthy; abhijana-vān—having highly placed relatives; asmi—me; kaḥ—who; anyaḥ—else; asti—is; sadṛiśhaḥ—like; mayā—to me; yakṣhye—I shall perform sacrifices; dāsyāmi—I shall give alms; modiṣhye—I shall rejoice; iti—thus; ajñāna—ignorance; vimohitāḥ—deluded\n aneka—many; chitta—imaginings; vibhrāntāḥ—led astray; moha—delusion; jāla—mesh; samāvṛitāḥ—enveloped; prasaktāḥ—addicted; kāma-bhogeṣhu—gratification of sensuous pleasures; patanti—descend; narake—to hell; aśhuchau—murky\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"bb7f3589-40df-41c0-8872-7fb35c28ecc5"},{"id":"a9f1404d-a89c-4e49-80d6-ca69f285c89d","type":"verses","target":{"id":"f9d04cac-dbc5-4c12-8177-b8a7ab53c64d","title":null,"body":"The foods killed by men of the Rajas strand are those that are bitter, sour, salty, very hot, harsh, dry, and burning; and which cause pain, grief, and disease.","translit_title":null,"body_translit":"kaṭv-amla-lavaṇāty-uṣhṇa- tīkṣhṇa-rūkṣha-vidāhinaḥ\nāhārā rājasasyeṣhṭā duḥkha-śhokāmaya-pradāḥ\n","body_translit_meant":"kaṭu—bitter; amla—sour; lavaṇa—salty; ati-uṣhṇa—very hot; tīkṣhṇa—pungent; rūkṣha—dry; vidāhinaḥ—chiliful; āhārāḥ—food; rājasasya—to persons in the mode of passion; iṣhṭāḥ—dear; duḥkha—pain; śhoka—grief; āmaya—disease; pradāḥ—produce\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"1856175b-01bc-422e-b609-60db4183916d"},{"id":"3c8c3bd0-2030-4c78-80ea-14b54e4e601a","type":"verses","target":{"id":"fff44b45-ca6b-446f-aeeb-c44eea76d166","title":null,"body":"What austerity is practised with foolish obstinacy and self-torture only in order to destroy others—that is declared to be of the Tamas.","translit_title":null,"body_translit":"mūḍha-grāheṇātmano yat pīḍayā kriyate tapaḥ\nparasyotsādanārthaṁ vā tat tāmasam udāhṛitam\n","body_translit_meant":"mūḍha—those with confused notions; grāheṇa—with endeavor; ātmanaḥ—one’s own self; yat—which; pīḍayā—torturing; kriyate—is performed; tapaḥ—austerity; parasya—of others; utsādana-artham—for harming; vā—or; tat—that; tāmasam—in the mode of ignorance; udāhṛitam—is described to be\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"1a4cfe3b-3d53-46fc-8da5-d18057971b95"},{"id":"f9e9f823-dc22-4f34-938a-aa268f84d710","type":"verses","target":{"id":"c2423ea8-e8d6-4a08-b397-eea50d0b9c5e","title":null,"body":"The renunciation of the enjoined action does not make sense; and completely relinquishing it, out of ignorance, is proclaimed on all sides as an act of Tamas (Strand).","translit_title":null,"body_translit":"niyatasya tu sannyāsaḥ karmaṇo nopapadyate\nmohāt tasya parityāgas tāmasaḥ parikīrtitaḥ\n","body_translit_meant":"niyatasya—of prescribed duties; tu—but; sanyāsaḥ—renunciation; karmaṇaḥ—actions; na—never; upapadyate—to be performed; mohāt—deluded; tasya—of that; parityāgaḥ—renunciation; tāmasaḥ—in the mode of ignorance; parikīrtitaḥ—has been declared\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"7461ea59-79b2-4106-bf16-f60abbe3a4d0"},{"id":"023d38f2-30e2-4faa-b343-d2572b460a50","type":"verses","target":{"id":"1a1a707f-32db-4df7-ac45-60ab490194bf","title":null,"body":"He whose mental disposition is not dominated by the sense of 'I', and whose intellect is not stained—he, even if he slays these worlds, does not [really] slay any and is not fettered.","translit_title":null,"body_translit":"yasya nāhankṛito bhāvo buddhir yasya na lipyate\nhatvā ‘pi sa imāl lokān na hanti na nibadhyate\n","body_translit_meant":"yasya—whose; na ahankṛitaḥ—free from the ego of being the doer; bhāvaḥ—nature; buddhiḥ—intellect; yasya—whose; na lipyate—unattached; hatvā—slay; api—even; saḥ—they; imān—this; lokān—living beings; na—neither; hanti—kill; na—nor; nibadhyate—get bound\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"8712d396-5f06-4c59-8e2a-b2d9a75935de"},{"id":"03085c7b-66f4-49c0-aabc-f6d2a6d64394","type":"verses","target":{"id":"18e3a77a-b2ea-466a-8311-18dc2d21a337","title":null,"body":"The agent, who is a man of passion, who craves the fruit of his actions, and is avaricious; who is injurious by nature, impure, and is overpowered by joy and grief—that agent is proclaimed to be of the Rajas (Strand).","translit_title":null,"body_translit":"rāgī karma-phala-prepsur lubdho hinsātmako ‘śhuchiḥ\nharṣha-śhokānvitaḥ kartā rājasaḥ parikīrtitaḥ\n","body_translit_meant":"rāgī—craving; karma-phala—fruit of work; prepsuḥ—covet; lubdhaḥ—greedy; hinsā-ātmakaḥ—violent-natured; aśhuchiḥ—impure; harṣha-śhoka-anvitaḥ—moved by joy and sorrow; kartā—performer; rājasaḥ—in the mode of passion; parikīrtitaḥ—is declared\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"83fed3a8-22e3-4920-8922-e269ff7ea5fb"},{"id":"353ca24a-68ab-4b76-aee8-8fb8e5e61f90","type":"verses","target":{"id":"1a52544e-1a8f-49d5-bc59-33954a46eb33","title":null,"body":"[The happiness] which is like poison in the moment but is like nectar in the result—that happiness, born of serenity of the soul and intellect, you must know to be of the sattva (strand).","translit_title":null,"body_translit":"yat tad agre viṣam iva pariṇāme 'mṛtopamam tat sukhaṁ sāttvikaṁ proktam ātma-buddhi-prasāda-jam","body_translit_meant":"yat—that which; tat—that; agre—in the beginning; viṣam iva—like poison; pariṇāme—at the end; amṛta—nectar; upamam—compared to; tat—that; sukham—happiness; sāttvikam—in the mode of goodness; proktam—is said; ātma—self; buddhi—intelligence; prasāda-jam—satisfactory.","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"4b1b1521-f5ee-4fcc-a131-31981d686e61"},{"id":"ca2680b3-0e9f-4caa-a4d0-d3bc38eb820f","type":"verses","target":{"id":"7424a1eb-2aa2-4434-a33a-e4df111f3887","title":null,"body":"Better is one's own prescribed duties, born of one's nature, even though it is devoid of excellence, than another's duty well executed; the doer of duty, dependent on one's own nature, does not incur sin.","translit_title":null,"body_translit":"śhreyān swa-dharmo viguṇaḥ para-dharmāt sv-anuṣhṭhitāt\nsvabhāva-niyataṁ karma kurvan nāpnoti kilbiṣham\n","body_translit_meant":"śhreyān—better; swa-dharmaḥ—one’s own prescribed occupational duty; viguṇaḥ—imperfectly done; para-dharmāt—than another’s dharma; su-anuṣhṭhitāt—perfectly done; svabhāva-niyatam—according to one’s innate nature; karma—duty; kurvan—by performing; na āpnoti—does not incur; kilbiṣham—sin\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"d0689df5-32ad-47e0-a4c5-18e9fd40561f"},{"id":"938f1812-dc32-41de-be03-a70bdd2788b9","type":"verses","target":{"id":"fb64e8e9-d99d-49fc-8845-136e1a97402d","title":null,"body":"The men of the Sattva strand perform sacrifices intending for the gods; the men of the Rajas strand do so for the spirits and demons; and the men of the Tamas strand perform sacrifices intending for the imps, the dead, and the ghosts.","translit_title":null,"body_translit":"yajante sāttvikā devān yakṣha-rakṣhānsi rājasāḥ\npretān bhūta-gaṇānśh chānye yajante tāmasā janāḥ\n","body_translit_meant":"yajante—worship; sāttvikāḥ—those in the mode of goodness; devān—celestial gods; yakṣha—semi-celestial beings who exude power and wealth; rakṣhānsi—powerful beings who embody sensual enjoyment, revenge, and wrath; rājasāḥ—those in the mode of passion; pretān-bhūta-gaṇān—ghosts and spirits; cha—and; anye—others; yajante—worship; tāmasāḥ—those in the mode of ignorance; janāḥ—persons\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"29ec76c4-c5cf-4a17-95c7-fb03e3075cb2"},{"id":"5134aee2-5024-48c0-97fe-0eaf0051641e","type":"verses","target":{"id":"fd9c64d1-7ba3-4e21-861e-cc32aa94058b","title":null,"body":"The worship of the gods, the twice-born, the elders, and the wise; purity, honesty, continence, and harmlessness—all this is said to be bodily austerity.","translit_title":null,"body_translit":"deva-dwija-guru-prājña- pūjanaṁ śhaucham ārjavam\nbrahmacharyam ahinsā cha śhārīraṁ tapa uchyate\n","body_translit_meant":"deva—the Supreme Lord; dwija—the Brahmins; guru—the spiritual master; prājña—the elders; pūjanam—worship; śhaucham—cleanliness; ārjavam—simplicity; brahmacharyam—celibacy; ahinsā—non-violence; cha—and; śhārīram—of the body; tapaḥ—austerity; uchyate—is declared as\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"0f508367-e25a-49b8-ade3-dac3c0adc600"},{"id":"1a27b862-235e-44d2-a3f7-dc7fbdd1a7f2","type":"verses","target":{"id":"5402300f-9dce-4219-bc82-9e22ebfadd3d","title":null,"body":"Therefore, the scripture-prescribed acts of sacrifice, gift, and austerity of those who are habituated to having Brahman-discourses invariably commence with the utterance of OM.","translit_title":null,"body_translit":"tasmād oṁ ity udāhṛitya yajña-dāna-tapaḥ-kriyāḥ\npravartante vidhānoktāḥ satataṁ brahma-vādinām\n","body_translit_meant":"tasmāt—therefore; om—sacred syllable om; iti—thus; udāhṛitya—by uttering; yajña—sacrifice; dāna—charity; tapaḥ—penance; kriyāḥ—performing; pravartante—begin; vidhāna-uktāḥ—according to the prescriptions of Vedic injunctions; satatam—always; brahma-vādinām—expounders of the Vedas\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"de2f7f82-2c3c-4da5-9fae-fef387fef10b"},{"id":"e9980d84-f423-42a0-b7e6-818505b90d47","type":"verses","target":{"id":"8ea1b14c-4c49-4076-b78f-10f8952e157b","title":null,"body":"The Bhagavat said, \"The seers understand the act of renouncing desire-motivated actions as renunciation; the experts declare the relinquishment of the fruits of all actions to be relinquishment.\"","translit_title":null,"body_translit":"śhrī-bhagavān uvācha\nkāmyānāṁ karmaṇāṁ nyāsaṁ sannyāsaṁ kavayo viduḥ\nsarva-karma-phala-tyāgaṁ prāhus tyāgaṁ vichakṣhaṇāḥ\n","body_translit_meant":"śhrī-bhagavān uvācha—the Supreme Divine Personality said; kāmyānām—desireful; karmaṇām—of actions; nyāsam—giving up; sanyāsam—renunciation of actions; kavayaḥ—the learned; viduḥ—to understand; sarva—all; karma-phala—fruits of actions; tyāgam—renunciation of desires for enjoying the fruits of actions; prāhuḥ—declare; tyāgam—renunciation of desires for enjoying the fruits of actions; vichakṣhaṇāḥ—the wise\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"89771007-9661-48d7-9e4e-495c6eba7ed0"},{"id":"5b96256d-3535-4340-8600-9d3c4ce07e74","type":"verses","target":{"id":"f3ad714d-9f91-4843-8132-d85add12e6ae","title":null,"body":"The three-fold fruit of action—the undesired, the desired, and the mixed—accrues even after death to those who are not men of renunciation, but never to those who are men of renunciation.","translit_title":null,"body_translit":"aniṣhṭam iṣhṭaṁ miśhraṁ cha tri-vidhaṁ karmaṇaḥ phalam\nbhavaty atyāgināṁ pretya na tu sannyāsināṁ kvachit\n","body_translit_meant":"aniṣhṭam—unpleasant; iṣhṭam—pleasant; miśhram—mixed; cha—and; tri-vidham—three-fold; karmaṇaḥ phalam—fruits of actions; bhavati—accrue; atyāginām—to those who are attached to persona reward; pretya—after death; na—not; tu—but; sanyāsinām—for the renouncers of actions; kvachit—ever\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"19704918-15a9-43a7-8c2f-07d584604a92"},{"id":"3f560ff0-b3d2-408b-9488-d6a0b147789d","type":"verses","target":{"id":"5a6ac13b-4c83-4096-b26d-9de1dddb2309","title":null,"body":"That [instrument-of-knowledge], because of which one, not realizing the whole, gets indulged without reason in a particular activity, and which is unconcerned with the real nature of things and is insignificant—that is declared to be of the Tamas (Strand).","translit_title":null,"body_translit":"yat tu kṛitsna-vad ekasmin kārye saktam ahaitukam\natattvārtha-vad alpaṁ cha tat tāmasam udāhṛitam\n","body_translit_meant":"yat—which; tu—but; kṛitsna-vat—as if it encompasses the whole; ekasmin—in single; kārye—action; saktam—engrossed; ahaitukam—without a reason; atattva-artha-vat—not based on truth; alpam—fragmental; cha—and; tat—that; tāmasam—in the mode of ignorance; udāhṛitam—is said to be\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"52aa5eff-3cdd-4104-9364-32c0bfe76b58"},{"id":"4894d183-5b00-4e26-97ed-2449997b8c3f","type":"verses","target":{"id":"bd365deb-abcb-4228-9da9-8c936b710bdc","title":null,"body":"The intellect which, containing darkness (ignorance), conceives the unrighteous one as righteous and all things topsy-turvy—that intellect is deemed to be of the Tamas (Strand).","translit_title":null,"body_translit":"adharmaṁ dharmam iti yā manyate tamasāvṛitā\nsarvārthān viparītānśh cha buddhiḥ sā pārtha tāmasī\n","body_translit_meant":"adharmam—irreligion; dharmam—religion; iti—thus; yā—which; manyate—imagines; tamasa-āvṛitā—shrouded in darkness; sarva-arthān—all things; viparītān—opposite; cha—and; buddhiḥ—intellect; sā—that; pārtha—Arjun, the son of Pritha; tāmasī—of the nature of ignorance\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"9bcbbd34-e416-4a08-a720-6371f58beab2"},{"id":"fb220ffa-549c-4cc2-ba31-72fecc13fde7","type":"verses","target":{"id":"6b972bed-586c-4b27-ae64-02c27d7888e3","title":null,"body":"Quietude, self-control, purity, forbearance, straightforwardness, knowledge, wisdom, and faith in another world are the duties of the Brahmanas, born of their nature.","translit_title":null,"body_translit":"śhamo damas tapaḥ śhauchaṁ kṣhāntir ārjavam eva cha\njñānaṁ vijñānam āstikyaṁ brahma-karma svabhāva-jam\n","body_translit_meant":"śhamaḥ—tranquility; damaḥ—restraint; tapaḥ—austerity; śhaucham—purity; kṣhāntiḥ—patience; ārjavam—integrity; eva—certainly; cha—and; jñānam—knowledge; vijñānam—wisdom; āstikyam—belief in a hereafter; brahma—of the priestly class; karma—work; svabhāva-jam—born of one’s intrinsic qualities\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"b384c40c-9c95-4077-b842-ab4deb515aab"},{"id":"69a692a4-177f-4a34-b401-ce092e73b5b0","type":"verses","target":{"id":"f7737509-7bf5-4c0c-892d-755c72bec6bc","title":null,"body":"The foods that increase life, energy, strength, good health, happiness, and satisfaction; which are delicious, soft, substantial, and pleasant to the heart (stomach); they are dear to the men of the Sattva strand.","translit_title":null,"body_translit":"āyuḥ-sattva-balārogya-sukha-prīti-vivardhanāḥ\nrasyāḥ snigdhāḥ sthirā hṛidyā āhārāḥ sāttvika-priyāḥ\n","body_translit_meant":"āyuḥ sattva—which promote longevity; bala—strength; ārogya—health; sukha—happiness; prīti—satisfaction; vivardhanāḥ—increase; rasyāḥ—juicy; snigdhāḥ—succulent; sthirāḥ—nourishing; hṛidyāḥ—pleasing to the heart; āhārāḥ—food; sāttvika-priyāḥ—dear to those in the mode of goodness\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"860ae181-f254-4cf8-bde4-588d76e84935"},{"id":"e4286999-6d6a-4512-aa6e-aa30770dd681","type":"verses","target":{"id":"5c5560e1-cb5b-42b8-addb-9e18027c0420","title":null,"body":"The austerity that is practiced for gaining respect, honor, and reverence, and with sheer show—that is called here [austerity] of the Rajas, and it is unstable and impermanent.","translit_title":null,"body_translit":"satkāra-māna-pūjārthaṁ tapo dambhena chaiva yat\nkriyate tad iha proktaṁ rājasaṁ chalam adhruvam\n","body_translit_meant":"sat-kāra—respect; māna—honor; pūjā—adoration; artham—for the sake of; tapaḥ—austerity; dambhena—with ostentation; cha—also; eva—certainly; yat—which; kriyate—is performed; tat—that; iha—in this world; proktam—is said; rājasam—in the mode of passion; chalam—flickering; adhruvam—temporary\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"99e0810f-bd7a-4f7e-a65a-5089abb71345"},{"id":"e26c25c1-a7ef-423d-a604-450a37d37782","type":"verses","target":{"id":"fbe99863-8aea-4579-8ab8-47ad4602a0ad","title":null,"body":"Without faith, whatever oblation is offered, whatever gift is made, whatever austerity is practiced, and whatever action is undertaken, that is called ASAT and it is of no avail after one's death or in this world.","translit_title":null,"body_translit":"aśhraddhayā hutaṁ dattaṁ tapas taptaṁ kṛitaṁ cha yat\nasad ity uchyate pārtha na cha tat pretya no iha\n","body_translit_meant":"aśhraddhayā—without faith; hutam—sacrifice; dattam—charity; tapaḥ—penance; taptam—practiced; kṛitam—done; cha—and; yat—which; asat—perishable; iti—thus; uchyate—are termed as; pārtha—Arjun, the son of Pritha; na—not; cha—and; tat—that; pretya—in the next world; na u—not; iha—in this world\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"03123256-78df-48bb-8139-f427d76c4638"},{"id":"0b60e554-e19b-4540-ba0d-44e1dd74131e","type":"verses","target":{"id":"d20c1761-24fd-4405-809a-032159f3dfa1","title":null,"body":"Even these actions should be performed by relinquishing attachment and the fruits thereof; this is my considered best opinion, O son of Prtha!","translit_title":null,"body_translit":"etāny api tu karmāṇi saṅgaṁ tyaktvā phalāni cha\nkartavyānīti me pārtha niśhchitaṁ matam uttamam\n","body_translit_meant":"etāni—these; api tu—must certainly be; karmāṇi—activities; saṅgam—attachment; tyaktvā—giving up; phalāni—rewards; cha—and; kartavyāni—should be done as duty; iti—such; me—my; pārtha—Arjun, the son of Pritha; niśhchitam—definite; matam—opinion; uttamam—supreme\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"e567688b-5c07-4653-890b-fb0f4930170c"},{"id":"002107aa-f9f4-4bff-8738-a2a6cfe254c3","type":"verses","target":{"id":"0009e806-20b9-448f-a029-bec0b48ddc28","title":null,"body":"But this being the case, whoever views himself as the sole agent due to their imperfect intellect—they, the defective-minded ones, do not view things rightly.","translit_title":null,"body_translit":"tatraivaṁ sati kartāram ātmānaṁ kevalaṁ tu yaḥ\npaśhyaty akṛita-buddhitvān na sa paśhyati durmatiḥ\n","body_translit_meant":"tatra—there; evam sati—in spite of this; kartāram—the doer; ātmānam—the soul; kevalam—only; tu—but; yaḥ—who; paśhyati—see; akṛita-buddhitvāt—with impure intellect; na—not; saḥ—they; paśhyati—see; durmatiḥ—foolish\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"4883888e-50e2-429c-ae1d-07706d556bd8"},{"id":"edb8bf7a-25d0-4071-b5fe-2c98c9984649","type":"verses","target":{"id":"50ba0f0a-b3fc-4334-8a7e-55fb81a686f8","title":null,"body":"The agent who is free from attachment, who does not make any speech of egoism, who is full of contentment and enthusiasm, and who does not change mentally in success or failure—that agent is said to be of the Sattva nature.","translit_title":null,"body_translit":"mukta-saṅgo ‘nahaṁ-vādī dhṛity-utsāha-samanvitaḥ\nsiddhy-asiddhyor nirvikāraḥ kartā sāttvika uchyate\n","body_translit_meant":"mukta-saṅgaḥ—free from worldly attachment; anaham-vādī—free from ego; dhṛiti—strong resolve; utsāha—zeal; samanvitaḥ—endowed with; siddhi-asiddhyoḥ—in success and failure; nirvikāraḥ—unaffected; kartā—worker; sāttvikaḥ—in the mode of goodness; uchyate—is said to be\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"5d6c2d3e-7109-4db3-acfb-3e460db57e18"},{"id":"d0f7c941-f5ad-48c2-91e8-27af7cec5601","type":"verses","target":{"id":"41b108b7-1a44-42e8-8ac5-c2c5c663d9d9","title":null,"body":"O best among the Bharatas! Now, you must also listen to Me about the three-fold happiness, wherein one delights in practice and attains the end of suffering.","translit_title":null,"body_translit":"sukhaṁ tv idānīṁ tri-vidhaṁ śhṛiṇu me bharatarṣhabha\nabhyāsād ramate yatra duḥkhāntaṁ cha nigachchhati\n yat tad agre viṣham iva pariṇāme ‘mṛitopamam\ntat sukhaṁ sāttvikaṁ proktam ātma-buddhi-prasāda-jam\n","body_translit_meant":"sukham—happiness; tu—but; idānīm—now; tri-vidham—of three kinds; śhṛiṇu—hear; me—from me; bharata-ṛiṣhabha—Arjun, the best of the Bharatas; abhyāsāt—by practice; ramate—rejoices; yatra—in which; duḥkha-antam—end of all suffering; cha—and; nigachchhati—reaches\n yat—which; tat—that; agre—at first; viṣham iva—like poison; pariṇāme—in the end; amṛita-upamam—like nectar; tat—that; sukham—happiness; sāttvikam—in the mode of goodness; proktam—is said to be; ātma-buddhi—situated in self-knowledge; prasāda-jam—generated by the pure intellect\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"04bd5fd5-4903-41dc-9964-de7b76d348bb"},{"id":"d5251f36-e056-46a8-bcfc-8290e373d78b","type":"verses","target":{"id":"abc5769d-72a9-433c-86e4-3404907a2fc7","title":null,"body":"From whence the activities of the beings arise, and by which this universe is pervaded—worshipping That by one's own prescribed action, one attains success.","translit_title":null,"body_translit":"yataḥ pravṛittir bhūtānāṁ yena sarvam idaṁ tatam\nsva-karmaṇā tam abhyarchya siddhiṁ vindati mānavaḥ\n","body_translit_meant":"yataḥ—from whom; pravṛittiḥ—have come into being; bhūtānām—of all living entities; yena—by whom; sarvam—all; idam—this; tatam—pervaded; sva-karmaṇā—by one’s natural occupation; tam—him; abhyarchya—by worshipping; siddhim—perfection; vindati—attains; mānavaḥ—a person\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"b30cc11d-c798-4d21-9d20-f203b470e6ec"},{"id":"9b172cf9-fa44-4741-9cf2-0d271f057c2e","type":"verses","target":{"id":"dd3b43d3-5998-4295-a866-bb9abbe0f428","title":null,"body":"Performing all his actions all the time and taking refuge in Me, he attains, through My grace, the eternal, changeless state.","translit_title":null,"body_translit":"sarva-karmāṇy api sadā kurvāṇo mad-vyapāśhrayaḥ\nmat-prasādād avāpnoti śhāśhvataṁ padam avyayam\n","body_translit_meant":"sarva—all; karmāṇi—actions; api—though; sadā—always; kurvāṇaḥ—performing; mat-vyapāśhrayaḥ—take full refuge in me; mat-prasādāt—by my grace; avāpnoti—attain; śhāśhvatam—the eternal; padam—abode; avyayam—imperishable\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"46bb1bf8-6e9c-4fc1-a976-a9c284f05062"},{"id":"87ac57f8-901a-4ad5-ace5-7f75e29ddaf5","type":"verses","target":{"id":"2ce59b7a-4987-4169-9e3c-7e9bed6cfb83","title":null,"body":"The serenity of mind, the stillness, the taciturnity, the self-control, the purity of thought—all this is called mental austerity.","translit_title":null,"body_translit":"manaḥ-prasādaḥ saumyatvaṁ maunam ātma-vinigrahaḥ\nbhāva-sanśhuddhir ity etat tapo mānasam uchyate\n","body_translit_meant":"manaḥ-prasādaḥ—serenity of thought; saumyatvam—gentleness; maunam—silence; ātma-vinigrahaḥ—self-control; bhāva-sanśhuddhiḥ—purity of purpose; iti—thus; etat—these; tapaḥ—austerity; mānasam—of the mind; uchyate—are declared as\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"ca0785fd-6edd-48f8-b1d3-a3ab53794192"},{"id":"2f5f2c14-13e1-4f6b-a6c5-878c5a047895","type":"verses","target":{"id":"b908d589-650f-4927-be7e-de1d25450b1d","title":null,"body":"In the sense of 'right' (or 'manifesting as being') and in the sense of 'proper' (or 'manifesting perfectly'), this word SAT is employed. Likewise, the word SAT is used with regard to the praiseworthy act; O son of Prtha!","translit_title":null,"body_translit":"sad-bhāve sādhu-bhāve cha sad ity etat prayujyate\npraśhaste karmaṇi tathā sach-chhabdaḥ pārtha yujyate\n","body_translit_meant":"sat-bhāve—with the intention of eternal existence and goodness; sādhu-bhāve—with auspicious intention; cha—also; sat—the syllable Sat; iti—thus; etat—this; prayujyate—is used; praśhaste—auspicious; karmaṇi—action; tathā—also; sat-śhabdaḥ—the word “Sat”; pārtha—Arjun, the son of Pritha; yujyate—is used;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"54d21952-655d-4f0c-a73e-d5da9883f718"},{"id":"4a53b325-68e7-4f12-a817-5aa24d4bf4bf","type":"chapters","target":{"id":"2135a723-0032-4746-9456-2324e8e46d4d","title":"Arjuna's Dilemma","body":"The first chapter of the Bhagavad Gita - \"Arjuna Vishada Yoga\" introduces the setup, the setting, the characters and the circumstances that led to the epic battle of Mahabharata, fought between the Pandavas and the Kauravas. It outlines the reasons that led to the revelation of the of Bhagavad Gita.\nAs both armies stand ready for the battle, the mighty warrior Arjuna, on observing the warriors on both sides becomes increasingly sad and depressed due to the fear of losing his relatives and friends and the consequent sins attributed to killing his own relatives. So, he surrenders to Lord Krishna, seeking a solution. Thus, follows the wisdom of the Bhagavad Gita.","translit_title":"Arjun Viṣhād Yog","body_translit":null,"body_translit_meant":null,"body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1,"lang":"en"},{"id":"a47cfb85-e026-407a-8a50-8633a1591f5b","type":"verses","target":{"id":"561b4e75-3d90-441d-a6bd-31254e0fb0b1","title":null,"body":"O Arjuna! Whatever action is undertaken with the body, speech, or mind, whether it is lawful or otherwise, its factors are these five.","translit_title":null,"body_translit":"śharīra-vāṅ-manobhir yat karma prārabhate naraḥ\nnyāyyaṁ vā viparītaṁ vā pañchaite tasya hetavaḥ\n","body_translit_meant":"śharīra-vāk-manobhiḥ—with body, speech, or mind; yat—which; karma—action; prārabhate—performs; naraḥ—a person; nyāyyam—proper; vā—or; viparītam—improper; vā—or; pañcha—five; ete—these; tasya—their; hetavaḥ—factors;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"05fe6abe-58e0-466e-a508-bcddebd552be"},{"id":"f24c53b3-96ec-4256-9360-d3f9070c9ed3","type":"verses","target":{"id":"b2a8ae7b-8e61-4480-8a7a-2275c283b705","title":null,"body":"The object which is gained, due to ignorance, without considering the result, the loss, the injury to others, and one's own strength—that is declared to be of the Tamas (Strand).","translit_title":null,"body_translit":"anubandhaṁ kṣhayaṁ hinsām anapekṣhya cha pauruṣham\nmohād ārabhyate karma yat tat tāmasam uchyate\n","body_translit_meant":"anubandham—consequences; kṣhayam—loss; hinsām—injury; anapekṣhya—by disregarding; cha—and; pauruṣham—one’s own ability; mohāt—out of delusion; ārabhyate—is begun; karma—action; yat—which; tat—that; tāmasam—in the mode of ignorance; uchyate—is declared to be\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"2494d909-2e55-4719-b0bb-3dec51c49c67"},{"id":"672e0feb-f4b0-4fe2-85ef-09e8e86898f7","type":"verses","target":{"id":"8e038448-87e6-4961-8a04-aa04b08dd56d","title":null,"body":"The contentment where a foolish man does not give up his sleep, fear, grief, despondency, and arrogance—that contentment is deemed to be of the Tamas (Strand).","translit_title":null,"body_translit":"yayā svapnaṁ bhayaṁ śhokaṁ viṣhādaṁ madam eva cha\nna vimuñchati durmedhā dhṛitiḥ sā pārtha tāmasī\n","body_translit_meant":"yayā—in which; svapnam—dreaming; bhayam—fearing; śhokam—grieving; viṣhādam—despair; madam—conceit; eva—indeed; cha—and; na—not; vimuñchati—give up; durmedhā—unintelligent; dhṛitiḥ—resolve; sā—that; pārtha—Arjun, the son of Pritha; tāmasī—in the mode of ignorance\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"08f32d49-713a-4b9f-a048-981eec914f8b"},{"id":"97a8e3a9-cf53-48d7-8d27-bd58c28b5ca3","type":"verses","target":{"id":"25f0d23d-b6b2-4a3d-a1a0-37ad70e4a5a5","title":null,"body":"A person, devoted to their own respective action, attains success. How one attains success through devotion to their own action, that you must hear from Me.","translit_title":null,"body_translit":"sve sve karmaṇy abhirataḥ sansiddhiṁ labhate naraḥ\nsva-karma-nirataḥ siddhiṁ yathā vindati tach chhṛiṇu\n","body_translit_meant":"sve sve—respectively; karmaṇi—work; abhirataḥ—fulfilling; sansiddhim—perfection; labhate—achieve; naraḥ—a person; sva-karma—to one’s own prescribed duty; nirataḥ—engaged; siddhim—perfection; yathā—as; vindati—attains; tat—that; śhṛiṇu—hear\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"ee8459a0-c9d3-40bf-97f6-3c1b65e4d9d7"},{"id":"82c68cd6-4576-458b-bf03-08f25bd3a4d2","type":"verses","target":{"id":"373687e4-5d9a-4505-a939-3ffe23fb3b78","title":null,"body":"Through devotion he comes to know of Me: Who I am and how, in fact, I am—having correctly known Me, he enters into Me. Then afterwards,","translit_title":null,"body_translit":"bhaktyā mām abhijānāti yāvān yaśh chāsmi tattvataḥ\ntato māṁ tattvato jñātvā viśhate tad-anantaram\n","body_translit_meant":"bhaktyā—by loving devotion; mām—me; abhijānāti—one comes to know; yāvān—as much as; yaḥ cha asmi—as I am; tattvataḥ—in truth; tataḥ—then; mām—me; tattvataḥ—in truth; jñātvā—having known; viśhate—enters; tat-anantaram—thereafter\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"5d93bd86-b025-4fa6-9636-7d8872922ad2"},{"id":"61449f5e-7202-4c32-88f2-1e75fa5f50e1","type":"verses","target":{"id":"eb4eb7bf-dddc-4ecb-b10f-f86d6eeca18d","title":null,"body":"Fix your mind on Me; be devoted to Me; offer oblations to Me and bow down to Me; you will come to Me alone. I promise you this truly, for you are dear to Me.","translit_title":null,"body_translit":"man-manā bhava mad-bhakto mad-yājī māṁ namaskuru\nmām evaiṣhyasi satyaṁ te pratijāne priyo ‘si me\n","body_translit_meant":"mat-manāḥ—thinking of me; bhava—be; mat-bhaktaḥ—my devotee; mat-yājī—worship me; mām—to me; namaskuru—offer obeisance; mām—to me; eva—certainly; eṣhyasi—you will come; satyam—truly; te—to you; pratijāne—I promise; priyaḥ—dear; asi—you are; me—to me\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"63199d05-40ed-400e-b26c-c09413239c67"},{"id":"592b78ba-31c8-47ac-99c2-3e31906aad71","type":"chapters","target":{"id":"83c3e1d3-15ae-4ba5-a23c-b8d494a8806d","title":"Yoga through the Perfection of Renunciation and Surrender","body":"The eighteenth chapter of the Bhagavad Gita is \"Moksha Sanyas Yoga\". Arjuna requests the Lord to explain the difference between the two types of renunciations - sanyaas(renunciation of actions) and tyaag(renunciation of desires). Krishna explains that a sanyaasi is one who abandons family and society in order to practise spiritual discipline whereas a tyaagi is one who performs their duties without attachment to the rewards of their actions and dedicating them to the God. Krishna recommends the second kind of renunciation - tyaag. Krishna then gives a detailed analysis of the effects of the three modes of material nature. He declares that the highest path of spirituality is pure, unconditional loving service unto the Supreme Divine Personality, Krishna. If we always remember Him, keep chanting His name and dedicate all our actions unto Him, take refuge in Him and make Him our Supreme goal, then by His grace, we will surely overcome all obstacles and difficulties and be freed from this cycle of birth and death.","translit_title":"Mokṣha Sanyās Yog","body_translit":null,"body_translit_meant":null,"body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":18,"lang":"en"},{"id":"623e7329-c964-49ec-97d8-e9865c63e8ed","type":"verses","target":{"id":"fd39d5f9-8c48-4c8f-a89f-94314e643fa7","title":null,"body":"He who would, out of fear of bodily exertion, relinquish an action just because it is painful—that person, having thus made relinquishment an act of the Rajas (Strand), would not at all gain the fruit of that relinquishment.","translit_title":null,"body_translit":"duḥkham ity eva yat karma kāya-kleśha-bhayāt tyajet\nsa kṛitvā rājasaṁ tyāgaṁ naiva tyāga-phalaṁ labhet\n","body_translit_meant":"duḥkham—troublesome; iti—as; eva—indeed; yat—which; karma—duties; kāya—bodily; kleśha—discomfort; bhayāt—out of fear; tyajet—giving up; saḥ—they; kṛitvā—having done; rājasam—in the mode of passion; tyāgam—renunciation of desires for enjoying the fruits of actions; na—never; eva—certainly; tyāga—renunciation of desires for enjoying the fruits of actions; phalam—result; labhet—attain\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"f0db2cf9-c6c2-4fba-8ce1-ddd2b4061cdd"},{"id":"89151393-b939-40ff-904d-77df5085f133","type":"verses","target":{"id":"044968c4-9a39-48f2-bb23-531d5a9680a7","title":null,"body":"The instrument of knowledge, the object of knowledge, and the knowing subject—the prompting in action, consisting of these threefold elements—is the proper grasping of action with threefold elements, namely, the instrument, the object, and the agent.","translit_title":null,"body_translit":"jñānaṁ jñeyaṁ parijñātā tri-vidhā karma-chodanā\nkaraṇaṁ karma karteti tri-vidhaḥ karma-saṅgrahaḥ\n","body_translit_meant":"jñānam—knowledge; jñeyam—the object of knowledge; parijñātā—the knower; tri-vidhā—three factors; karma-chodanā—factors that induce action; karaṇam—the instrumens of action; karma—the act; kartā—the doer; iti—thus; tri-vidhaḥ—threefold; karma-saṅgrahaḥ—constituents of action\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"092908af-ee3a-41e7-b0ab-675d96a6ac12"},{"id":"d2dad180-e4bd-4d63-b424-f1373c85e814","type":"verses","target":{"id":"8389613f-f8e9-4628-9548-06359db80506","title":null,"body":"The agent who does not exert is vulgar, obstinate, and deceitful; they are a man of wickedness and are lazy, sorrowful, and procrastinating—such an agent is said to be of the Tamas strand.","translit_title":null,"body_translit":"ayuktaḥ prākṛitaḥ stabdhaḥ śhaṭho naiṣhkṛitiko ‘lasaḥ\nviṣhādī dīrgha-sūtrī cha kartā tāmasa uchyate\n","body_translit_meant":"ayuktaḥ—undisciplined; prākṛitaḥ—vulgar; stabdhaḥ—obstinate; śhaṭhaḥ—cunning; naiṣhkṛitikaḥ—dishonest or vile; alasaḥ—slothful; viṣhādī—unhappy and morose; dīrgha-sūtrī—procrastinating; cha—and; kartā—performer; tāmasaḥ—in the mode of ignorance; uchyate—is said to be\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"ffdb8882-2b5d-4f2c-8f84-e3eecf7c1caa"},{"id":"d656df72-8610-4cf5-b847-8170fbca420f","type":"verses","target":{"id":"b3edfe04-b5ff-4260-9f46-59cd10e51ae0","title":null,"body":"[The happiness] which is like nectar at its due time due to the contact between the senses and sense-objects; but which is like poison at the time of its result—that is considered to be of the Rajas (Strand).","translit_title":null,"body_translit":"viṣhayendriya-sanyogād yat tad agre ’mṛitopamam\npariṇāme viṣham iva tat sukhaṁ rājasaṁ smṛitam\n","body_translit_meant":"viṣhaya—with the sense objects; indriya—the senses; sanyogāt—from the contact; yat—which; tat—that; agre—at first; amṛita-upamam—like nectar; pariṇāme—at the end; viṣham iva—like poison; tat—that; sukham—happiness; rājasam—in the mode of passion; smṛitam—is said to be\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"c6c7eeab-bed0-4b79-a24d-afcb2f778bbf"},{"id":"0474e37a-97a7-41bf-95d9-5e0635cddf47","type":"verses","target":{"id":"3df6e422-6cc6-4863-9c76-61e850b35445","title":null,"body":"O son of Kunti! One should not give up their nature-born duty, even if it appears to be defective. For, all beginnings are enveloped by harm, just as fire is by smoke.","translit_title":null,"body_translit":"saha-jaṁ karma kaunteya sa-doṣham api na tyajet\nsarvārambhā hi doṣheṇa dhūmenāgnir ivāvṛitāḥ\n","body_translit_meant":"saha-jam—born of one’s nature; karma—duty; kaunteya—Arjun, the son of Kunti; sa-doṣham—with defects; api—even if; na tyajet—one should not abandon; sarva-ārambhāḥ—all endeavors; hi—indeed; doṣheṇa—with evil; dhūmena—with smoke; agniḥ—fire; iva—as; āvṛitāḥ—veiled\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"1afc8249-e12c-4a88-a7ce-9304f199c3eb"},{"id":"fc2fc45c-bd03-4061-a2ad-25b79fc2cab4","type":"verses","target":{"id":"e6c6f836-804e-4d4f-a1f9-3abf7957ad77","title":null,"body":"Having your thought-organ turned towards Me, you shall pass over all obstacles by My Grace. On the other hand, if you don't give up your sense of ego, you will not liberate yourself; instead, you will perish.","translit_title":null,"body_translit":"mach-chittaḥ sarva-durgāṇi mat-prasādāt tariṣhyasi\natha chet tvam ahankārān na śhroṣhyasi vinaṅkṣhyasi\n","body_translit_meant":"mat-chittaḥ—by always remembering me; sarva—all; durgāṇi—obstacles; mat-prasādāt—by my grace; tariṣhyasi—you shall overcome; atha—but; chet—if; tvam—you; ahankārāt—due to pride; na śhroṣhyasi—do not listen; vinaṅkṣhyasi—you will perish\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"11243cb2-0995-49e9-baf1-a69303eedbd0"},{"id":"23e8b4af-a692-4b8a-a833-a3dedadcbb0d","type":"verses","target":{"id":"949659f6-fa8a-4095-8e99-eb3b30f9af5f","title":null,"body":"Whoever declares this highest secret to My devotees, cultivating an utmost devotion towards Me and not entertaining any doubt, shall reach Me.","translit_title":null,"body_translit":"ya idaṁ paramaṁ guhyaṁ mad-bhakteṣhv abhidhāsyati\nbhaktiṁ mayi parāṁ kṛitvā mām evaiṣhyaty asanśhayaḥ\n","body_translit_meant":"yaḥ—who; idam—this; paramam—most; guhyam—confidential knowledge; mat-bhakteṣhu—amongst my devotees; abhidhāsyati—teaches; bhaktim—greatest act of love; mayi—to me; parām—transcendental; kṛitvā—doing; mām—to me; eva—certainly; eṣhyati—comes; asanśhayaḥ—without doubt\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"24ced4fc-3555-441a-a4de-8d1c96d893c2"},{"id":"ef6ba001-769c-4561-88b6-ed390168c782","type":"verses","target":{"id":"6467faa9-476a-48f4-8e3f-b237fb04feb3","title":null,"body":"Indeed, to relinquish actions entirely is not possible for a body-bearing one; but whoever relinquishes the fruits of actions, he is said to be a man of [true] relinquishment.","translit_title":null,"body_translit":"na hi deha-bhṛitā śhakyaṁ tyaktuṁ karmāṇy aśheṣhataḥ\nyas tu karma-phala-tyāgī sa tyāgīty abhidhīyate\n","body_translit_meant":"na—not; hi—indeed; deha-bhṛitā—for the embodied being; śhakyam—possible; tyaktum—to give up; karmāṇi—activities; aśheṣhataḥ—entirely; yaḥ—who; tu—but; karma-phala—fruits of actions; tyāgī—one who renounces all desires for enjoying the fruits of actions; saḥ—they; tyāgī—one who renounces all desires for enjoying the fruits of actions; iti—as; abhidhīyate—are said\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"c186d69d-245e-42f4-8eef-25f45dd31c81"},{"id":"d646143f-19a6-474a-959b-19932c593501","type":"verses","target":{"id":"c7cf579e-7a6e-4b6f-b552-295e773251e0","title":null,"body":"That instrument of knowledge, by means of which one considers the varied natures of different sorts in all beings as truly distinct—that is regarded to be of the Rajas strand.","translit_title":null,"body_translit":"pṛithaktvena tu yaj jñānaṁ nānā-bhāvān pṛithag-vidhān\nvetti sarveṣhu bhūteṣhu taj jñānaṁ viddhi rājasam\n","body_translit_meant":"pṛithaktvena—unconnected; tu—however; yat—which; jñānam—knowledge; nānā-bhāvān—manifold entities; pṛithak-vidhān—of diversity; vetti—consider; sarveṣhu—in all; bhūteṣhu—living entities; tat—that; jñānam—knowledge; viddhi—know; rājasam—in the mode of passion\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"4b84ed97-9289-4583-94eb-74ab7da860a9"},{"id":"8839350a-3157-40a7-b03a-5b315bfe05d8","type":"verses","target":{"id":"18d9dcf7-e792-451f-a0a9-0fc5705a8b42","title":null,"body":"The intellect, by means of which one decides incorrectly between the righteous and the unrighteous, and what is a proper action and an improper one—that intellect is of the Rajas, O son of Prtha!","translit_title":null,"body_translit":"yayā dharmam adharmaṁ cha kāryaṁ chākāryam eva cha\nayathāvat prajānāti buddhiḥ sā pārtha rājasī\n","body_translit_meant":"yayā—by which; dharmam—righteousness; adharmam—unrighteousness; cha—and; kāryam—right conduct; cha—and; akāryam—wrong conduct; eva—certainly; cha—and; ayathā-vat—confused; prajānāti—distinguish; buddhiḥ—intellect; sā—that; pārtha—Arjun, the son of Pritha; rājasī—in the mode of passion\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"6c938330-0ac8-4143-91ac-043aca00ffc1"},{"id":"f4c3d6b6-ef23-4af4-b659-ad816c812f91","type":"verses","target":{"id":"f986da58-6ec5-4567-a818-9b98247c51e2","title":null,"body":"The duties of the Brahmanas, the Kshatriyas, the Vaishyas, and the Shudras are properly classified according to the qualities that are the sources of their nature, O scorcher of foes!","translit_title":null,"body_translit":"brāhmaṇa-kṣhatriya-viśhāṁ śhūdrāṇāṁ cha parantapa\nkarmāṇi pravibhaktāni svabhāva-prabhavair guṇaiḥ\n","body_translit_meant":"brāhmaṇa—of the priestly class; kṣhatriya—the warrior and administrative class; viśhām—the mercantile and farming class; śhūdrāṇām—of the worker class; cha—and; parantapa—Arjun, subduer of the enemies; karmāṇi—duties; pravibhaktāni—distributed; svabhāva-prabhavaiḥ-guṇaiḥ—work based on one’s nature and guṇas\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"a5490071-f30e-41dc-852c-5ed9dfb2c556"},{"id":"b3d6651d-4d4a-44cf-b5c5-a405eeb444d0","type":"verses","target":{"id":"74873c79-0b9f-4678-9c13-ff549dec67aa","title":null,"body":"He who has attained a completely pure intellect by firmly controlling his mind and renouncing sense-objects, sound, and driving out desire and hatred;","translit_title":null,"body_translit":"buddhyā viśhuddhayā yukto dhṛityātmānaṁ niyamya cha\nśhabdādīn viṣhayāns tyaktvā rāga-dveṣhau vyudasya cha\n","body_translit_meant":"buddhyā—intellect; viśhuddhayā—purified; yuktaḥ—endowed with; dhṛityā—by determination; ātmānam—the intellect; niyamya—restraining; cha—and; śhabda-ādīn viṣhayān—sound and other objects of the senses; tyaktvā—abandoning; rāga-dveṣhau—attachment and aversion; vyudasya—casting aside; cha—and;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"9451bb38-35bf-4765-b42b-a063da9230f1"},{"id":"7fba3b9d-6fed-463c-86e8-9ae28bd8c9a3","type":"verses","target":{"id":"c4cfc888-778d-4c62-a0d5-9ed533c5c6fc","title":null,"body":"O Arjuna! This Lord dwells in the hearts of all beings, causing, by His trick of illusion, all beings to whirl round as if they are mounted on a revolving mechanical contrivance.","translit_title":null,"body_translit":"īśhvaraḥ sarva-bhūtānāṁ hṛid-deśhe ‘rjuna tiṣhṭhati\nbhrāmayan sarva-bhūtāni yantrārūḍhāni māyayā\n","body_translit_meant":"īśhvaraḥ—the Supreme Lord; sarva-bhūtānām—in all living being; hṛit-deśhe—in the hearts; arjuna—Arjun; tiṣhṭhati—dwells; bhrāmayan—causing to wander; sarva-bhūtāni—all living beings; yantra ārūḍhani—seated on a machine; māyayā—made of the material energy\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"6d271439-d77a-4a57-ac63-38e48c20d8aa"},{"id":"caaa3337-9e15-401b-b2ae-a48177186d34","type":"verses","target":{"id":"f035a892-cf5a-40aa-a3ee-48a80417532b","title":null,"body":"A man who would at least hear this with faith and without indignation—he too, freed from sins, will attain the auspicious worlds of those who have performed meritorious acts.","translit_title":null,"body_translit":"śhraddhāvān anasūyaśh cha śhṛiṇuyād api yo naraḥ\nso ‘pi muktaḥ śhubhāl lokān prāpnuyāt puṇya-karmaṇām\n","body_translit_meant":"śhraddhā-vān—faithful; anasūyaḥ—without envy; cha—and; śhṛiṇuyāt—listen; api—certainly; yaḥ—who; naraḥ—a person; saḥ—that person; api—also; muktaḥ—liberated; śhubhān—the auspicious; lokān—abodes; prāpnuyāt—attain; puṇya-karmaṇām—of the pious\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"64894682-3157-4402-95f1-1f3cc6f1e1ba"},{"id":"5498be5b-adab-4f93-b4d8-120f1b03ed09","type":"verses","target":{"id":"9880a73d-2712-4691-8da1-b600917f0705","title":null,"body":"O mighty-armed one! Learn from Me these five causes, declared in the conclusion of deliberations on proper knowledge, for the accomplishment of all actions.","translit_title":null,"body_translit":"pañchaitāni mahā-bāho kāraṇāni nibodha me\nsānkhye kṛitānte proktāni siddhaye sarva-karmaṇām\n","body_translit_meant":"pañcha—five; etāni—these; mahā-bāho—mighty-armed one; kāraṇāni—causes; nibodha—listen; me—from me; sānkhye—of Sānkya; kṛita-ante—stop reactions of karmas; proktāni—explains; siddhaye—for the accomplishment; sarva—all; karmaṇām—of karmas\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"38103671-ba5f-4cb0-980d-0161a6ac32bc"},{"id":"c097ae8b-1736-4715-bcd3-632bd33cdbe4","type":"verses","target":{"id":"0e8c9738-5d10-4ba6-b9ae-cd94560cc4e8","title":null,"body":"The object that has been acquired with determination, without attachment and without desire or hatred, by one who does not crave to reap the fruit of their action - that is declared to be of the Sattva (Strand).","translit_title":null,"body_translit":"niyataṁ saṅga-rahitam arāga-dveṣhataḥ kṛitam\naphala-prepsunā karma yat tat sāttvikam uchyate\n","body_translit_meant":"niyatam—in accordance with scriptures; saṅga-rahitam—free from attachment; arāga-dveṣhataḥ—free from attachment and aversion; kṛitam—done; aphala-prepsunā—without desire for rewards; karma—action; yat—which; tat—that; sāttvikam—in the mode of goodness; uchyate—is called\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"7a119704-3904-44c5-8df9-9a2c85817cf5"},{"id":"c04d3cfd-ec04-48b4-8410-d61a633e7914","type":"verses","target":{"id":"de85c37c-fdf6-4b06-bbff-47f99645322a","title":null,"body":"The unfailing content, by which one restrains, through Yoga, the activities of the mind, the living breath, and the senses, is considered to be of the Sattva (strand).","translit_title":null,"body_translit":"dhṛityā yayā dhārayate manaḥ-prāṇendriya-kriyāḥ\nyogenāvyabhichāriṇyā dhṛitiḥ sā pārtha sāttvikī\n","body_translit_meant":"dhṛityā—by determining; yayā—which; dhārayate—sustains; manaḥ—of the mind; prāṇa—life-airs; indriya—senses; kriyāḥ—activities; yogena—through Yog; avyabhichāriṇyā—with steadfastness; dhṛitiḥ—determination; sā—that; pārtha—Arjun, the son of Pritha; sāttvikī—in the mode of goodness\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"883b3150-28bd-47f7-baa2-cc237962bb1d"},{"id":"57ec4002-cc7e-4fb6-aa97-a174748e96fa","type":"verses","target":{"id":"5d4f041f-15ac-4e6a-b62d-acd861a55e42","title":null,"body":"Heroic deeds, fiery energy, firmness, dexterity, and also non-attachment form the duties of the Ksatriyas, born of their nature, in battle, giving gifts, and overlordship.","translit_title":null,"body_translit":"śhauryaṁ tejo dhṛitir dākṣhyaṁ yuddhe chāpy apalāyanam\ndānam īśhvara-bhāvaśh cha kṣhātraṁ karma svabhāva-jam\n","body_translit_meant":"śhauryam—valor; tejaḥ—strength; dhṛitiḥ—fortitude; dākṣhyam yuddhe—skill in weaponry; cha—and; api—also; apalāyanam—not fleeing; dānam—large-heartedness; īśhvara—leadership; bhāvaḥ—qualities; cha—and; kṣhātram—of the warrior and administrative class; karma—work; svabhāva-jam—born of one’s intrinsic qualities\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"268c599a-0d8a-4a21-a574-f3c15ea27c1b"},{"id":"7694ee55-8b23-4f81-94e7-648ae63b60ae","type":"verses","target":{"id":"953ed01e-5d76-4eed-a0c5-03bb168b67d9","title":null,"body":"Relinquishing egotism, violence, pride, desire, wrath, and the sense of possession - he, the unselfish and calm one, is capable of becoming the Brahman.","translit_title":null,"body_translit":"ahankāraṁ balaṁ darpaṁ kāmaṁ krodhaṁ parigraham\nvimuchya nirmamaḥ śhānto brahma-bhūyāya kalpate\n","body_translit_meant":"ahankāram—egotism; balam—violence; darpam—arrogance; kāmam—desire; krodham—anger; parigraham—selfishness; vimuchya—being freed from; nirmamaḥ—without possessiveness of property; śhāntaḥ—peaceful; brahma-bhūyāya—union with Brahman; kalpate—is fit\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"b11ef93e-9678-477f-b99a-e241098684ce"},{"id":"0934d24e-3460-49c3-8594-3fe9151d9801","type":"verses","target":{"id":"054784c4-d187-46e0-bedd-3ecc276e61ec","title":null,"body":"Thus, the path of wisdom, a better secret than all other secrets, has been expounded to you by Me; comprehend it fully and then act as you wish.","translit_title":null,"body_translit":"iti te jñānam ākhyātaṁ guhyād guhyataraṁ mayā\nvimṛiśhyaitad aśheṣheṇa yathechchhasi tathā kuru\n","body_translit_meant":"iti—thus; te—to you; jñānam—knowledge; ākhyātam—explained; guhyāt—than secret knowledge; guhya-taram—still more secret knowledge; mayā—by me; vimṛiśhya—pondering; etat—on this; aśheṣheṇa—completely; yathā—as; ichchhasi—you wish; tathā—so; kuru—do\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"89dff36d-6732-4dd3-893b-52e7bef987a5"},{"id":"d81cf5c7-4b48-49d5-8807-0cf194baabdd","type":"verses","target":{"id":"ac553c51-f666-494e-8b10-114da0f1eead","title":null,"body":"Arjuna said, \"My delusion is destroyed; I have regained my recollection through your grace, O Acyuta! I stand firm, free of doubts; I shall execute your command.\"","translit_title":null,"body_translit":"arjuna uvācha\nnaṣhṭo mohaḥ smṛitir labdhā tvat-prasādān mayāchyuta\nsthito ‘smi gata-sandehaḥ kariṣhye vachanaṁ tava\n","body_translit_meant":"arjunaḥ uvācha—Arjun said; naṣhṭaḥ—dispelled; mohaḥ—illusion; smṛitiḥ—memory; labdhā—regained; tvat-prasādāt—by your grace; mayā—by me; achyuta—Shree Krishna, the infallible one; sthitaḥ—situated; asmi—I am; gata-sandehaḥ—free from doubts; kariṣhye—I shall act; vachanam—instructions; tava—your\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"9fe35f6a-cb87-42d2-90ff-e6c0a29957d1"},{"id":"1d8f79ee-23aa-4a39-a9fe-3316abd04b00","type":"verses","target":{"id":"b71f8a17-599b-430a-8b89-04c838553d5c","title":null,"body":"The basis, the agent, the various instruments, the distinct activities of various kinds, and Destiny, which is the fifth factor, are all present.","translit_title":null,"body_translit":"adhiṣhṭhānaṁ tathā kartā karaṇaṁ cha pṛithag-vidham\nvividhāśh cha pṛithak cheṣhṭā daivaṁ chaivātra pañchamam\n","body_translit_meant":"adhiṣhṭhānam—the body; tathā—also; kartā—the doer (soul); karaṇam—senses; cha—and; pṛithak-vidham—various kinds; vividhāḥ—many; cha—and; pṛithak—distinct; cheṣhṭāḥ—efforts; daivam—Divine Providence; cha eva atra—these certainly are (causes); pañchamam—the fifth\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"cf2d1f8d-498e-4dfe-bd23-a0c1c50f2f53"},{"id":"738fb260-662d-4eb7-9178-26deed7c23c3","type":"verses","target":{"id":"b4ec9425-90d7-42fc-b8d7-e821bdf76d3d","title":null,"body":"The object which is abundant in afflictions and which is further desired by one who craves to attain the desired thing with the feeling of 'I'—that is considered to be of the Rajas (Strand).","translit_title":null,"body_translit":"yat tu kāmepsunā karma sāhankāreṇa vā punaḥ\nkriyate bahulāyāsaṁ tad rājasam udāhṛitam\n","body_translit_meant":"yat—which; tu—but; kāma-īpsunā—prompted by selfish desire; karma—action; sa-ahaṅkāreṇa—with pride; vā—or; punaḥ—again; kriyate—enacted; bahula-āyāsam—stressfully; tat—that; rājasam—in the nature of passion; udāhṛitam—is said to be\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"62c29472-dc4b-4098-903c-bf03d8d39a9c"},{"id":"0ba31f7d-b891-4f48-bd73-df475c2ea302","type":"verses","target":{"id":"c77a6430-5b2a-41a5-b8a5-e91d43396c02","title":null,"body":"O Arjuna! The contentment by which one restrains one's bounden duty, pleasure, and wealth, and consequently desires the fruits of action—that contentment is of the Rajas strand, O son of Prtha!","translit_title":null,"body_translit":"yayā tu dharma-kāmārthān dhṛityā dhārayate ‘rjuna\nprasaṅgena phalākāṅkṣhī dhṛitiḥ sā pārtha rājasī\n","body_translit_meant":"yayā—by which; tu—but; dharma-kāma-arthān—duty, pleasures, and wealth; dhṛityā—through steadfast will; dhārayate—holds; arjuna—Arjun; prasaṅgena—due of attachment; phala-ākāṅkṣhī—desire for rewards; dhṛitiḥ—determination; sā—that; pārtha—Arjun, the son of Pritha; rājasī—in the mode of passion\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"9e9cb18e-30dc-4698-891f-9c74370ed54f"},{"id":"e1c81f97-0c3e-4478-a0bd-ca031d1cbc2c","type":"verses","target":{"id":"6767dace-1e13-419d-aea6-b159bc5413de","title":null,"body":"Ploughing, tending to cattle, and trading are the actions of the Vaisyas, born of their nature. The action of service is of the Sudras, born of their nature.","translit_title":null,"body_translit":"kṛiṣhi-gau-rakṣhya-vāṇijyaṁ vaiśhya-karma svabhāva-jam\nparicharyātmakaṁ karma śhūdrasyāpi svabhāva-jam\n","body_translit_meant":"kṛiṣhi—agriculture; gau-rakṣhya—dairy farming; vāṇijyam—commerce; vaiśhya—of the mercantile and farming class; karma—work; svabhāva-jam—born of one’s intrinsic qualities; paricharyā—serving through work; ātmakam—natural; karma—duty; śhūdrasya—of the worker class; api—and; svabhāva-jam—born of one’s intrinsic qualities\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"8d7ebb10-b197-4311-8d47-cf638aad71c3"},{"id":"c23e5478-d513-4ed5-b589-d890bd10e528","type":"verses","target":{"id":"5eda6307-ac46-430a-a3e2-9deb4dc41339","title":null,"body":"Having become the Brahman, the serene-minded one neither grieves nor rejoices; remaining equal to all beings, he gains the highest devotion to Me.","translit_title":null,"body_translit":"brahma-bhūtaḥ prasannātmā na śhochati na kāṅkṣhati\nsamaḥ sarveṣhu bhūteṣhu mad-bhaktiṁ labhate parām\n","body_translit_meant":"brahma-bhūtaḥ—one situated in Brahman; prasanna-ātmā—mentally serene; na—neither; śhochati—grieving; na—nor; kāṅkṣhati—desiring; samaḥ—equitably disposed; sarveṣhu—toward all; bhūteṣhu—living beings; mat-bhaktim—devotion to me; labhate—attains; parām—supreme\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"3cfb7b03-8f53-4c48-ba17-8913d0669249"},{"id":"15f069d0-4bb7-4b98-86b2-0fcc0cbbc11d","type":"verses","target":{"id":"f706e769-d7ba-4bd7-a0c9-ed0f0be7d8e6","title":null,"body":"Yet again, you must listen to My ultimate, supreme message—the highest secret of all. You are My dear one and have a firm intellect, so I shall tell you what is good for you.","translit_title":null,"body_translit":"sarva-guhyatamaṁ bhūyaḥ śhṛiṇu me paramaṁ vachaḥ\niṣhṭo ‘si me dṛiḍham iti tato vakṣhyāmi te hitam\n","body_translit_meant":"sarva-guhya-tamam—the most confidential of all; bhūyaḥ—again; śhṛiṇu—hear; me—by me; paramam—supreme; vachaḥ—instruction; iṣhṭaḥ asi—you are dear; me—to me; dṛiḍham—very; iti—thus; tataḥ—because; vakṣhyāmi—I am speaking; te—for your; hitam—benefit\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"865a8d0e-964e-46a3-9f08-62443f3f8fa9"},{"id":"d54be3b8-1bdd-4af4-a47e-6d1b268f17a9","type":"verses","target":{"id":"da4d410c-e98b-4110-a3d9-128ff54aa6cb","title":null,"body":"Sanjaya said: Thus, I have heard this wonderful and thrilling dialogue between Vasudeva and the mighty-minded son of Prtha.","translit_title":null,"body_translit":"sañjaya uvācha\nity ahaṁ vāsudevasya pārthasya cha mahātmanaḥ\nsaṁvādam imam aśhrauṣham adbhutaṁ roma-harṣhaṇam\n","body_translit_meant":"sañjayaḥ uvācha—Sanjay said; iti—thus; aham—I; vāsudevasya—of Shree Krishna; pārthasya—Arjun; cha—and; mahā-ātmanaḥ—the noble hearted soul; saṁvādam—conversation; imam—this; aśhrauṣham—have heard; adbhutam—wonderful; roma-harṣhaṇam—which causes the hair to stand on end\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"a43c0d08-502a-4979-9ca7-5cfb1ec2f79a"},{"id":"b8619539-f669-4060-a3ea-4df9d32a0ae5","type":"verses","target":{"id":"c3b31125-ff33-4e4a-861c-4254d05aa933","title":null,"body":"The instrument of knowledge, the object, and the agent are just three kinds due to the differences in the strands—thus it is declared in enumerating the strands. You must also listen to these [from Me] as they are.","translit_title":null,"body_translit":"jñānaṁ karma cha kartā cha tridhaiva guṇa-bhedataḥ\nprochyate guṇa-saṅkhyāne yathāvach chhṛiṇu tāny api\n","body_translit_meant":"jñānam—knowledge; karma—action; cha—and; kartā—doer; cha—also; tridhā—of three kinds; eva—certainly; guṇa-bhedataḥ—distinguished according to the three modes of material nature; prochyate—are declared; guṇa-saṅkhyāne—Sānkhya philosophy, which describes the modes of material nature; yathā-vat—as they are; śhṛiṇu—listen; tāni—them; api—also\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"24e2add1-7f97-4763-8f55-c6b9747d35c7"},{"id":"7ec2722a-ec60-45d8-9356-f9167ecc54df","type":"verses","target":{"id":"02409910-0554-4ec6-a594-ac43cf674dd1","title":null,"body":"You must listen to Me as I expound the three-fold division of the intellect and content, both completely and individually, based on the Strands, O Dhananjaya!","translit_title":null,"body_translit":"buddher bhedaṁ dhṛiteśh chaiva guṇatas tri-vidhaṁ śhṛiṇu\nprochyamānam aśheṣheṇa pṛithaktvena dhanañjaya\n","body_translit_meant":"buddheḥ—of intellect; bhedam—the distinctions; dhṛiteḥ—of determination; cha—and; eva—certainly; guṇataḥ tri-vidham—according to the three modes of material nature; śhṛiṇu—hear; prochyamānam—described; aśheṣheṇa—in detail; pṛithaktvena—distinctly; dhanañjaya—conqueror of wealth, Arjun\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"e24d54f4-0128-482f-9a22-a4428e3ee5bf"},{"id":"d7521169-d98d-4404-97ad-ed817836ad5f","type":"verses","target":{"id":"ac8aa7ca-7960-4d92-8e11-597f2c758dfc","title":null,"body":"The happiness that, both initially and subsequently, is of the nature of deluding the Self; and which results from sleep, indolence, and heedlessness—that is stated to be of the Tamas (Strand).","translit_title":null,"body_translit":"yad agre chānubandhe cha sukhaṁ mohanam ātmanaḥ\nnidrālasya-pramādotthaṁ tat tāmasam udāhṛitam\n","body_translit_meant":"yat—which; agre—from beginning; cha—and; anubandhe—to end; cha—and; sukham—happiness; mohanam—illusory; ātmanaḥ—of the self; nidrā—sleep; ālasya—indolence; pramāda—negligence; uttham—derived from; tat—that; tāmasam—in the mode of ignorance; udāhṛitam—is said to be\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"49e10ebb-2ac4-4889-b8ed-df5a089e1bc7"},{"id":"7b9bb7c7-4368-4bb0-a0c5-ee5a120838be","type":"verses","target":{"id":"365a9be7-cf04-43fc-8a77-087ecef14d1f","title":null,"body":"He, whose mind entertains no attachment to anything, who is self-controlled and is free from craving—he attains, by means of renunciation, the supreme success of actionlessness.","translit_title":null,"body_translit":"asakta-buddhiḥ sarvatra jitātmā vigata-spṛihaḥ\nnaiṣhkarmya-siddhiṁ paramāṁ sannyāsenādhigachchhati\n","body_translit_meant":"asakta-buddhiḥ—those whose intellect is unattached; sarvatra—everywhere; jita-ātmā—who have mastered their mind; vigata-spṛihaḥ—free from desires; naiṣhkarmya-siddhim—state of actionlessness; paramām—highest; sanyāsena—by the practice of renunciation; adhigachchhati—attain\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"9000a17e-72aa-4694-aa10-e284e91fcf85"},{"id":"9b63ece9-f64b-4fb6-a927-38f58c4b971d","type":"verses","target":{"id":"3b05fc01-7d96-404d-91d7-e09233d2f605","title":null,"body":"In case, holding fast to the sense of ego, you think, 'I shall not fight,' that resolve of yours will be useless. Your own natural condition will incite you to fight.","translit_title":null,"body_translit":"yad ahankāram āśhritya na yotsya iti manyase\nmithyaiṣha vyavasāyas te prakṛitis tvāṁ niyokṣhyati\n","body_translit_meant":"yat—if; ahankāram—motivated by pride; āśhritya—taking shelter; na yotsye—I shall not fight; iti—thus; manyase—you think; mithyā eṣhaḥ—this is all false; vyavasāyaḥ—determination; te—your; prakṛitiḥ—material nature; tvām—you; niyokṣhyati—will engage\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"00007043-9cb4-4dee-8922-22c402287fb6"},{"id":"adfe39dd-d88e-485d-b802-113d5dcaa635","type":"verses","target":{"id":"7d878364-a571-4d69-ad07-5516f64463eb","title":null,"body":"And, except for him, there would be no one among men who is the best performer of what is dear to Me; and there shall be no one else dearer to Me on earth.","translit_title":null,"body_translit":"na cha tasmān manuṣhyeṣhu kaśhchin me priya-kṛittamaḥ\nbhavitā na cha me tasmād anyaḥ priyataro bhuvi\n","body_translit_meant":"na—no; cha—and; tasmāt—than them; manuṣhyeṣhu—amongst human beings; kaśhchit—anyone; me—to me; priya-kṛit-tamaḥ—more dear; bhavitā—will be; na—never; cha—and; me—to me; tasmāt—than them; anyaḥ—another; priya-taraḥ—dearer; bhuvi—on this earth\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"758426e6-ecd2-4c40-b357-6e0250a0867d"},{"id":"6b7c08bd-0386-4302-a18a-c07ca59cd4a9","type":"verses","target":{"id":"dac9b46b-a5a5-4632-ba00-83ad9e1eb5e7","title":null,"body":"That instrument of knowledge, by means of which one perceives the singular, immutable existence in all beings, the unclassified among the classified ones—that you must know to be born of the Sattva (Strand).","translit_title":null,"body_translit":"sarva-bhūteṣhu yenaikaṁ bhāvam avyayam īkṣhate\navibhaktaṁ vibhakteṣhu taj jñānaṁ viddhi sāttvikam\n","body_translit_meant":"sarva-bhūteṣhu—within all living beings; yena—by which; ekam—one; bhāvam—nature; avyayam—imperishable; īkṣhate—one sees; avibhaktam—undivided; vibhakteṣhu—in diversity; tat—that; jñānam—knowledge; viddhi—understand; sāttvikam—in the mode of goodness\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"41347d17-aa6b-4f3c-82d0-ba188733e174"},{"id":"306a4e03-7b50-42b2-b4dd-65831253e961","type":"verses","target":{"id":"f1e71436-eaed-4fb9-81cb-dc39ed05a1cc","title":null,"body":"The intellect which knows the activity and the cessation from activity, the proper and improper actions, the fear and non-fear, and the bondage and emancipation—that intellect is considered to be of the Sattva (Strand).","translit_title":null,"body_translit":"pravṛittiṁ cha nivṛittiṁ cha kāryākārye bhayābhaye\nbandhaṁ mokṣhaṁ cha yā vetti buddhiḥ sā pārtha sāttvikī\n","body_translit_meant":"pravṛittim—activities; cha—and; nivṛittim—renuncation from action; cha—and; kārya—proper action; akārye—improper action; bhaya—fear; abhaye—without fear; bandham—what is binding; mokṣham—what is liberating; cha—and; yā—which; vetti—understands; buddhiḥ—intellect; sā—that; pārtha—son of Pritha; sāttvikī—in the nature of goodness\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"38e7ab47-75a6-426c-a731-51f8a3d573f2"},{"id":"cd4cf33a-aea0-477e-8bd6-660572f4f8c0","type":"verses","target":{"id":"b1257a48-ef91-480e-bb74-d7e46e85ff46","title":null,"body":"Whether on earth or among the gods in heaven, there is not a single being that is free from these three strands born of material nature.","translit_title":null,"body_translit":"na tad asti pṛithivyāṁ vā divi deveṣhu vā punaḥ\nsattvaṁ prakṛiti-jair muktaṁ yad ebhiḥ syāt tribhir guṇaiḥ\n","body_translit_meant":"na—no; tat—that; asti—exists; pṛithivyām—on earth; vā—or; divi—the higher celestial abodes; deveṣhu—amongst the celestial gods; vā—or; punaḥ—again; sattvam—existence; prakṛiti-jaiḥ—born of material nature; muktam—liberated; yat—that; ebhiḥ—from the influence of these; syāt—is; tribhiḥ—three; guṇaiḥ—modes of material nature\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"9907a528-5725-4f63-b205-9af9ac0dc787"},{"id":"cedf141a-1560-4c69-9809-f6f3ba25eaef","type":"verses","target":{"id":"f8e26fe7-6d4e-4126-b71c-620ffacdead9","title":null,"body":"Having attained success, how one attains Brahman—an attainment which is confirmed to be the final beatitude of true knowledge—that you must learn from Me briefly.","translit_title":null,"body_translit":"siddhiṁ prāpto yathā brahma tathāpnoti nibodha me\nsamāsenaiva kaunteya niṣhṭhā jñānasya yā parā\n","body_translit_meant":"siddhim—perfection; prāptaḥ—attained; yathā—how; brahma—Brahman; tathā—also; āpnoti—attain; nibodha—hear; me—from me; samāsena—briefly; eva—indeed; kaunteya—Arjun, the son of Kunti; niṣhṭhā—firmly fixed; jñānasya—of knowledge; yā—which; parā—transcendental\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"036d05aa-2906-4a00-8ba6-0e927d259e9f"},{"id":"862abfc4-1ce6-45be-8f66-fb61d90c0736","type":"verses","target":{"id":"5cc73167-719e-4c1c-b465-b288fd2c33ef","title":null,"body":"O son of Kunti! Being firmly bound by your own duty, born of your own nature, and thus not being independent, you would perform what you do not wish to do, due to your delusion.","translit_title":null,"body_translit":"swbhāva-jena kaunteya nibaddhaḥ svena karmaṇā\nkartuṁ nechchhasi yan mohāt kariṣhyasy avaśho ’pi tat\n","body_translit_meant":"swabhāva-jena—born of one’s own material nature; kaunteya—Arjun, the son of Kunti; nibaddhaḥ—bound; svena—by your own; karmaṇā—actions; kartum—to do; na—not; ichchhasi—you wish; yat—which; mohāt—out of delusion; kariṣhyasi—you will do; avaśhaḥ—helplessly; api—even though; tat—that\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"29720149-cdfc-48d3-b051-2b8b0e3e3b49"},{"id":"f07d9692-0fa9-4f01-adf7-ed5f2f28650b","type":"verses","target":{"id":"65d05346-0c47-4fd0-81bd-768fe92c9c60","title":null,"body":"Whoever would learn this sacred dialogue of both of us, by them I am delighted through the knowledge-sacrifice: This is my opinion.","translit_title":null,"body_translit":"adhyeṣhyate cha ya imaṁ dharmyaṁ saṁvādam āvayoḥ\njñāna-yajñena tenāham iṣhṭaḥ syām iti me matiḥ\n","body_translit_meant":"adhyeṣhyate—study; cha—and; yaḥ—who; imam—this; dharmyam—sacred; saṁvādam—dialogue; āvayoḥ—of ours; jñāna—of knowledge; yajñena-tena—through the sacrifice of knowledge; aham—I; iṣhṭaḥ—worshipped; syām—shall be; iti—such; me—my; matiḥ—opinion\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"007e7d55-2d76-450c-9156-a345d8fa45ed"},{"id":"b3fa2ecb-5356-492a-9f35-3ecc267c9366","type":"verses","target":{"id":"d221b1c7-0884-4a3f-9703-cd9bfda15897","title":null,"body":"Who enjoys solitude, eats sparingly, has controlled their speech, body, and mind; who is devoted to the practice of meditation and yoga; and who has taken refuge in perpetual desirelessness;","translit_title":null,"body_translit":"vivikta-sevī laghv-āśhī yata-vāk-kāya-mānasaḥ\ndhyāna-yoga-paro nityaṁ vairāgyaṁ samupāśhritaḥ\n","body_translit_meant":"vivikta-sevī—relishing solitude; laghu-āśhī—eating light; yata—controls; vāk—speech; kāya—body; mānasaḥ—and mind; dhyāna-yoga-paraḥ—engaged in meditation; nityam—always; vairāgyam—dispassion; samupāśhritaḥ—having taken shelter of;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"8b04d5bd-b349-4a1f-b78d-5cbe5f81790f"},{"id":"ca149896-002a-4afc-b4a8-71ef36b89368","type":"verses","target":{"id":"840748b4-f636-4f37-a936-8812841107c6","title":null,"body":"To Him alone, O descendant of Bharata, you must go for refuge with all your thoughts. Through My grace, you will attain success and the eternal abode.","translit_title":null,"body_translit":"tam eva śharaṇaṁ gachchha sarva-bhāvena bhārata\ntat-prasādāt parāṁ śhāntiṁ sthānaṁ prāpsyasi śhāśhvatam\n","body_translit_meant":"tam—unto him; eva—only; śharaṇam gachchha—surrender; sarva-bhāvena—whole-heartedly; bhārata—Arjun, the son of Bharat; tat-prasādāt—by his grace; parām—supreme; śhāntim—peace; sthānam—the abode; prāpsyasi—you will attain; śhāśhvatam—eternal\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"335a0c21-88b0-436b-9072-1def28331371"},{"id":"bbc1de28-a26c-4f97-8cde-b87177842f07","type":"verses","target":{"id":"22a8bfe5-c0bc-4c32-9ef7-1965743d60e5","title":null,"body":"O son of Prtha! Have you heard this with an attentive mind? O Dhananjaya! Has your strong delusion, born of ignorance, been completely destroyed?","translit_title":null,"body_translit":"kachchid etach chhrutaṁ pārtha tvayaikāgreṇa chetasā\nkachchid ajñāna-sammohaḥ pranaṣhṭas te dhanañjaya\n","body_translit_meant":"kachchit—whether; etat—this; śhrutam—heard; pārtha—Arjun, the son of Pritha; tvayā—by you; eka-agreṇa chetasā—with a concentrated mind; kachchit—whether; ajñāna—ignorance; sammohaḥ—delusion; pranaṣhṭaḥ—destroyed; te—your; dhanañjaya—Arjun, conqueror of wealth\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"b42a3ee8-4c54-42f4-98fc-e05bff8ceb1b"},{"id":"e3c84bfb-c48b-483b-a2be-72ddec85d20b","type":"verses","target":{"id":"9177e6ea-73ea-4361-a536-5cd89d18f573","title":null,"body":"Hence, O descendant of Bharata, renounce all actions in Me by your mind and take hold of the knowledge-Yoga. Always keep your thought-organ directed towards Me.","translit_title":null,"body_translit":"chetasā sarva-karmāṇi mayi sannyasya mat-paraḥ\nbuddhi-yogam upāśhritya mach-chittaḥ satataṁ bhava\n","body_translit_meant":"chetasā—by consciousness; sarva-karmāṇi—every activity; mayi—to me; sannyasya—dedicating; mat-paraḥ—having me as the supreme goal; buddhi-yogam—having the intellect united with God; upāśhritya—taking shelter of; mat-chittaḥ—consciousness absorbed in me; satatam—always; bhava—be\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"7e94928d-aba4-4c2e-bc09-9848723db261"},{"id":"1486af81-31a4-46e0-b201-b03e6b5e6133","type":"verses","target":{"id":"658851e9-958c-42c2-ade4-433577890949","title":null,"body":"This knowledge is for you, and it should never be imparted to one who does not observe austerities; to one who has no devotion; to one who has no desire to listen; and to one who is indignant towards Me.","translit_title":null,"body_translit":"idaṁ te nātapaskyāya nābhaktāya kadāchana\nna chāśhuśhruṣhave vāchyaṁ na cha māṁ yo ‘bhyasūtayi\n","body_translit_meant":"idam—this; te—by you; na—never; atapaskāya—to those who are not austere; na—never; abhaktāya—to those who are not devoted; kadāchana—at any time; na—never; cha—also; aśhuśhrūṣhave—to those who are averse to listening (to spiritual topics); vāchyam—to be spoken; na—never; cha—also; mām—toward me; yaḥ—who; abhyasūyati—those who are envious\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"28c4fce3-c025-45e7-9dea-a809255102fb"},{"id":"8cf776bf-55d3-44a4-a4f3-50f6a263109d","type":"verses","target":{"id":"c88a81e4-2f15-412f-9ae3-178efa1c2b17","title":null,"body":"O great king! On recalling in my mind that extremely wonderful, supreme form of Hari, I am amazed and experience joy again and again.","translit_title":null,"body_translit":"tach cha sansmṛitya saṁsmṛitya rūpam aty-adbhutaṁ hareḥ\nvismayo ye mahān rājan hṛiṣhyāmi cha punaḥ punaḥ\n","body_translit_meant":"tat—that; cha—and; sansmṛitya saṁsmṛitya—remembering repeatedly; rūpam—cosmic form; ati—most; adbhutam—wonderful; hareḥ—of Lord Krishna; vismayaḥ—astonishment; me—my; mahān—great; rājan—King; hṛiṣhyāmi—I am thrilled with joy; cha—and; punaḥ punaḥ—over and over again\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"c7918bfa-ad9a-4310-992d-7bbd63be7844"},{"id":"094143cd-3242-4d42-ba89-903a840e1ebe","type":"verses","target":{"id":"cb8aa135-98a6-40e7-b3e9-6906671256f6","title":null,"body":"Abandon all attributes and come to Me as your only refuge; I will rescue you from all sins; do not be sorrowful.","translit_title":null,"body_translit":"sarva-dharmān parityajya mām ekaṁ śharaṇaṁ vraja\nahaṁ tvāṁ sarva-pāpebhyo mokṣhayiṣhyāmi mā śhuchaḥ\n","body_translit_meant":"sarva-dharmān—all varieties of dharmas; parityajya—abandoning; mām—unto me; ekam—only; śharaṇam—take refuge; vraja—take; aham—I; tvām—you; sarva—all; pāpebhyaḥ—from sinful reactions; mokṣhayiṣhyāmi—shall liberate; mā—do not; śhuchaḥ—fear\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"59073c43-0062-4d64-b27f-abe14cc3010b"},{"id":"2ff97d97-94c3-40d8-942d-7f96041503de","type":"verses","target":{"id":"a64f519d-80d5-4625-bc8c-bc56d13339b9","title":null,"body":"O King! By repeatedly recollecting this wonderful, pious dialogue between Kesava and Arjuna, I am filled with delight again and again.","translit_title":null,"body_translit":"rājan sansmṛitya sansmṛitya saṁvādam imam adbhutam\nkeśhavārjunayoḥ puṇyaṁ hṛiṣhyāmi cha muhur muhuḥ\n","body_translit_meant":"rājan—King; sansmṛitya saṁsmṛitya—repeatedly recalling; saṁvādam—dialogue; imam—this; adbhutam—astonishing; keśhava-arjunayoḥ—between Lord Shree Krishna and Arjun; puṇyam—pious; hṛiṣhyāmi—I rejoice; cha—and; muhuḥ muhuḥ—repeatedly\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"547194eb-3f9b-491b-bb35-7710aab69422"},{"id":"fe8b417c-84ef-40f3-932c-5883ce6a8dd9","type":"verses","target":{"id":"a0c01932-a338-4d0f-b2ae-303a6787076a","title":null,"body":"Through the grace of Vyasa, I have heard this highly secret supreme Yoga from Krsna, the Lord of Yogis, while He was imparting it personally.","translit_title":null,"body_translit":"vyāsa-prasādāch chhrutavān etad guhyam ahaṁ param\nyogaṁ yogeśhvarāt kṛiṣhṇāt sākṣhāt kathayataḥ svayam\n","body_translit_meant":"vyāsa-prasādāt—by the grace of Ved Vyas; śhrutavān—have heard; etat—this; guhyam—secret; aham—I; param—supreme; yogam—Yog; yoga-īśhvarāt—from the Lod of Yog; kṛiṣhṇāt—from Shree Krishna; sākṣhāt—directly; kathayataḥ—speaking; svayam—himself\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"bd16afb8-1b3c-4343-84b8-bd0e61decb6c"},{"id":"6b7f3422-59f3-4e10-996b-c2d4482fe525","type":"verses","target":{"id":"243fbcfd-9a09-425c-a466-92d8442e1434","title":null,"body":"Where Krishna, the Lord of Yogis, remains, where the son of Prtha holds his bow, there lies fortune, victory, prosperity, and firm justice—so I believe.","translit_title":null,"body_translit":"yatra yogeśhvaraḥ kṛiṣhṇo yatra pārtho dhanur-dharaḥ\ntatra śhrīr vijayo bhūtir dhruvā nītir matir mama\n","body_translit_meant":"yatra—wherever; yoga-īśhvaraḥ—Shree Krishna, the Lord of Yog; kṛiṣhṇaḥ—Shree Krishna; yatra—wherever; pārthaḥ—Arjun, the son of Pritha; dhanuḥ-dharaḥ—the supreme archer; tatra—there; śhrīḥ—opulence; vijayaḥ—victory; bhūtiḥ—prosperity; dhruvā—unending; nītiḥ—righteousness; matiḥ mama—my opinion\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"93a6f80b-a612-4830-8546-cd3065e69c5e"},{"id":"11287743-5e22-4d32-82ba-cb3047881849","type":"verses","target":{"id":"2048f6f9-b0f1-4271-8bae-159cbeb60fc4","title":null,"body":"The actions of Vedic sacrifice, gift, and austerity should not be relinquished and they must necessarily be performed; for the men of wisdom, the Vedic sacrifice, gift, and austerity are the means of purification.","translit_title":null,"body_translit":"yajña-dāna-tapaḥ-karma na tyājyaṁ kāryam eva tat\nyajño dānaṁ tapaśh chaiva pāvanāni manīṣhiṇām\n","body_translit_meant":"yajña—sacrifice; dāna—charity; tapaḥ—penance; karma—actions; na—never; tyājyam—should be abandoned; kāryam eva—must certainly be performed; tat—that; yajñaḥ—sacrifice; dānam—charity; tapaḥ—penance; cha—and; eva—indeed; pāvanāni—purifying; manīṣhiṇām—for the wise\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"b8b85872-e571-477e-8e0b-f0b6c019baba"},{"id":"11652e7e-6b15-45ee-98a6-e54269e0d5c3","type":"verses","target":{"id":"85c83733-a7d7-43d8-a6d4-c1b99b260183","title":null,"body":"Dhritarashtra said, \"O Sanjaya, what did my sons and the sons of Pandu do in the Kurukshetra, the field of righteousness, where the entire warring class had assembled?\"","translit_title":null,"body_translit":"dhṛitarāśhtra uvācha\ndharma-kṣhetre kuru-kṣhetre samavetā yuyutsavaḥ\nmāmakāḥ pāṇḍavāśhchaiva kimakurvata sañjaya\n","body_translit_meant":"dhṛitarāśhtraḥ uvācha—Dhritarashtra said; dharma-kṣhetre—the land of dharma; kuru-kṣhetre—at Kurukshetra; samavetāḥ—having gathered; yuyutsavaḥ—desiring to fight; māmakāḥ—my sons; pāṇḍavāḥ—the sons of Pandu; cha—and; eva—certainly; kim—what; akurvata—did they do; sañjaya—Sanjay\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"69a70209-0d9d-480f-8939-30e35fbacb12"},{"id":"45b177b8-5afe-435e-99dd-e98e57ab6b69","type":"verses","target":{"id":"9f130e48-fde3-4cbc-b698-0b3710bcf4c1","title":null,"body":"Sanjaya said: Seeing the army of the sons of Pandu marshaled in military array, the prince Duryodhana approached the teacher Drona and spoke these words at that time:","translit_title":null,"body_translit":"sañjaya uvācha\ndṛiṣhṭvā tu pāṇḍavānīkaṁ vyūḍhaṁ duryodhanastadā\nāchāryamupasaṅgamya rājā vachanamabravīt\n","body_translit_meant":"sanjayaḥ uvācha—Sanjay said; dṛiṣhṭvā—on observing; tu—but; pāṇḍava-anīkam—the Pandava army; vyūḍham—standing in a military formation; duryodhanaḥ—King Duryodhan; tadā—then; āchāryam—teacher; upasaṅgamya—approached; rājā—the king; vachanam—words; abravīt—spoke\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"ddfea826-fb8b-4442-8a1c-434eb6129dd3"},{"id":"01271da5-9c60-407d-b315-8f84959248f5","type":"verses","target":{"id":"c5492e11-fa1c-4ead-a74e-bf5742ec02fa","title":null,"body":"O teacher! Behold this mighty army of the sons of Pandu, marshaled in a military array by Drupada's son, your intelligent pupil.","translit_title":null,"body_translit":"paśhyaitāṁ pāṇḍu-putrāṇām āchārya mahatīṁ chamūm\nvyūḍhāṁ drupada-putreṇa tava śhiṣhyeṇa dhīmatā\n","body_translit_meant":"paśhya—behold; etām—this; pāṇḍu-putrāṇām—of the sons of Pandu; āchārya—respected teacher; mahatīm—mighty; chamūm—army; vyūḍhām—arrayed in a military formation; drupada-putreṇa—son of Drupad, Dhrishtadyumna; tava—by your; śhiṣhyeṇa—disciple; dhī-matā—intelligent\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"01abd249-f2b6-44f6-98cc-34cf36395564"},{"id":"ad0abec1-3a14-4090-825b-fed149b040a4","type":"verses","target":{"id":"01f24005-e49d-4ffb-b617-809ef8636221","title":null,"body":"Here are the heroes and mighty archers, comparable in war to Bhima and Arjuna: Yuyudhana, the king of the Virata country, and Drupada, the mighty warrior.","translit_title":null,"body_translit":"atra śhūrā maheṣhvāsā bhīmārjuna-samā yudhi\nyuyudhāno virāṭaśhcha drupadaśhcha mahā-rathaḥ\n","body_translit_meant":"atra—here; śhūrāḥ—powerful warriors; mahā-iṣhu-āsāḥ—great bowmen; bhīma-arjuna-samāḥ—equal to Bheem and Arjun; yudhi—in military prowess; yuyudhānaḥ—Yuyudhan; virāṭaḥ—Virat; cha—and; drupadaḥ—Drupad; cha—also; mahā-rathaḥ—warriors who could single handedly match the strength of ten thousand ordinary warriors;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"6a26d480-1fdd-46c5-b699-93f0829254b9"},{"id":"de41ad3a-ede8-4ed6-9e5e-a6cee9478229","type":"verses","target":{"id":"abdb84d5-e251-49c3-9c74-51b82b9807b7","title":null,"body":"Dhrstaketu, Cekitana, the valorous king of Kasi, Kuntibhoja, the conqueror of many, and the Sibi king, the best among men;","translit_title":null,"body_translit":"dhṛiṣhṭaketuśhchekitānaḥ kāśhirājaśhcha vīryavān\npurujit kuntibhojaśhcha śhaibyaśhcha nara-puṅgavaḥ\n","body_translit_meant":"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","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"596d0dfd-5b3d-4620-bba5-ecb2ecfb2520"},{"id":"97947c67-9619-4c98-859d-9774dfca782a","type":"verses","target":{"id":"5ecb9234-9157-45c6-9d8e-0a03663669a5","title":null,"body":"And Yudhamanyu, the heroic, and Uttamaujas, the valiant, the son of Subhadra, and the sons of Draupadi—all of them are indeed mighty warriors.","translit_title":null,"body_translit":"yudhāmanyuśhcha vikrānta uttamaujāśhcha vīryavān\nsaubhadro draupadeyāśhcha sarva eva mahā-rathāḥ\n","body_translit_meant":"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","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"e751150c-8107-4303-99b4-b8cac3e64230"},{"id":"ac049946-3a9f-4867-a0e5-474d0d19b4dd","type":"verses","target":{"id":"8b9e162c-89ee-4a50-9093-30f2f87af94a","title":null,"body":"O best among the twice-born! Please take note of the most distinguished amongst us, who are the generals of my army and who are accepted as leaders by the heroes in my mighty army; I shall name them to you.","translit_title":null,"body_translit":"asmākaṁ tu viśhiṣhṭā ye tānnibodha dwijottama\nnāyakā mama sainyasya sanjñārthaṁ tānbravīmi te\n","body_translit_meant":"asmākam—ours; tu—but; viśhiṣhṭāḥ—special; ye—who; tān—them; nibodha—be informed; dwija-uttama—best of Brahmnis; nāyakāḥ—principal generals; mama—our; sainyasya—of army; sanjñā-artham—for information; tān—them; bravīmi—I recount; te—unto you\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"2d15c9a6-d5f4-403d-828c-c0234f678dfe"},{"id":"bedb5a9c-5b21-4c1b-97a2-82c020d953de","type":"verses","target":{"id":"a379c1aa-baa6-4819-ad96-d4e0023885e0","title":null,"body":"Your good self, Bhisma, Karna, Krpa, Salya, Jayadratha, Asvatthaman, Vikarna, and Somadatta's son, the valiant ones.","translit_title":null,"body_translit":"bhavānbhīṣhmaśhcha karṇaśhcha kṛipaśhcha samitiñjayaḥ\naśhvatthāmā vikarṇaśhcha saumadattis tathaiva cha\n","body_translit_meant":"bhavān—yourself; bhīṣhmaḥ—Bheeshma; cha—and; karṇaḥ—Karna; cha—and; kṛipaḥ—Kripa; cha—and; samitim-jayaḥ—victorious in battle; aśhvatthāmā—Ashvatthama; vikarṇaḥ—Vikarna; cha—and; saumadattiḥ—Bhurishrava; tathā—thus; eva—even; cha—also\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"cba9c5a3-a89d-41d5-9997-ae2c1b3c9c4a"},{"id":"f1cff40f-3c50-47b7-8e9b-e95363a9fe8e","type":"verses","target":{"id":"7c2460ad-fab7-4188-b652-b906ab50e38d","title":null,"body":"And many other heroes, giving up their lives for my sake, fighting with various weapons, all highly skilled in different forms of warfare.","translit_title":null,"body_translit":"anye cha bahavaḥ śhūrā madarthe tyaktajīvitāḥ\nnānā-śhastra-praharaṇāḥ sarve yuddha-viśhāradāḥ\n","body_translit_meant":"anye—others; cha—also; bahavaḥ—many; śhūrāḥ—heroic warriors; mat-arthe—for my sake; tyakta-jīvitāḥ—prepared to lay down their lives; nānā-śhastra-praharaṇāḥ—equipped with various kinds of weapons; sarve—all; yuddha-viśhāradāḥ—skilled in the art of warfare\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"0c09222a-9a55-48a0-8f6d-e8744d7aaa65"},{"id":"99f3b593-4983-4e60-8fc4-b7f6c9a7122d","type":"verses","target":{"id":"c02509ed-2116-42b2-a3e3-21b8f1f7530b","title":null,"body":"Thus, the army guarded by Bhima is unlimited for us, whereas the army guarded by Bhisma is sufficient for them, the Pandavas.","translit_title":null,"body_translit":"aparyāptaṁ tadasmākaṁ balaṁ bhīṣhmābhirakṣhitam\nparyāptaṁ tvidameteṣhāṁ balaṁ bhīmābhirakṣhitam\n","body_translit_meant":"aparyāptam—unlimited; tat—that; asmākam—ours; balam—strength; bhīṣhma—by Grandsire Bheeshma; abhirakṣhitam—safely marshalled; paryāptam—limited; tu—but; idam—this; eteṣhām—their; balam—strength; bhīma—Bheem; abhirakṣhitam—carefully marshalled\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"dcb41264-8d89-4eb8-89a3-7fc234fa997d"},{"id":"e94cb390-f288-4623-b77d-8b5fc04c4fcc","type":"verses","target":{"id":"b8197c14-9a85-43c5-8997-0bf2e57cff22","title":null,"body":"Resonating in both the sky and the earth, the tumultuous sound shattered the hearts of Dhrtarastra's men.","translit_title":null,"body_translit":"sa ghoṣho dhārtarāṣhṭrāṇāṁ hṛidayāni vyadārayat\nnabhaśhcha pṛithivīṁ chaiva tumulo nunādayan\n","body_translit_meant":"saḥ—that; ghoṣhaḥ—sound; dhārtarāṣhṭrāṇām—of Dhritarashtra’s sons; hṛidayāni—hearts; vyadārayat—shattered; nabhaḥ—the sky; cha—and; pṛithivīm—the earth; cha—and; eva—certainly; tumulaḥ—terrific sound; abhyanunādayan—thundering\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"4db83221-e9d1-4484-b3d1-13129bcc3ad5"},{"id":"9fc4a07e-83d9-4118-96fb-53739847f5ca","type":"verses","target":{"id":"8cc74da1-5d23-4954-a7b2-b7737f853216","title":null,"body":"O king! Then, observing Dhrtarastra's men arrayed when the armed clash had virtually begun, at that time, Pandu's son, the monkey-bannered one (Arjuna), raising his bow, spoke these sentences.","translit_title":null,"body_translit":"atha vyavasthitān dṛiṣhṭvā dhārtarāṣhṭrān kapi-dhwajaḥ\npravṛitte śhastra-sampāte dhanurudyamya pāṇḍavaḥ\n","body_translit_meant":"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","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"7345ef82-77e9-4c14-9b8a-e5128443ebd0"},{"id":"145922a2-0332-40f9-a84f-510cc9ca9911","type":"verses","target":{"id":"373d95bf-bbe6-43bc-bb4c-261f59ecb865","title":null,"body":"I am unable even to stand steady; my mind seems to be confused; and I see adverse omens, O Kesava!","translit_title":null,"body_translit":"sīdanti mama gātrāṇi mukhaṁ cha pariśhuṣhyati\nvepathuśh cha śharīre me roma-harṣhaśh cha jāyate\n","body_translit_meant":"sīdanti—quivering; mama—my; gātrāṇi—limbs; mukham—mouth; cha—and; pariśhuṣhyati—is drying up\nvepathuḥ—shuddering; cha—and; śharīre—on the body; me—my; roma-harṣhaḥ—standing of bodily hair on end; cha—also; jāyate—is happening;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"406e5251-fd59-4d1e-98a4-42c5c784d3c9"},{"id":"4d865622-81c8-4b22-90db-15c957686aad","type":"verses","target":{"id":"d485119e-a5da-41e1-bc59-cce33d1dd346","title":null,"body":"I do not foresee any good in killing my own kinsmen in the battle. O Krsna! I neither wish for victory, nor kingdom, nor the pleasures thereof.","translit_title":null,"body_translit":"gāṇḍīvaṁ sraṁsate hastāt tvak chaiva paridahyate\nna cha śhaknomy avasthātuṁ bhramatīva cha me manaḥ\n","body_translit_meant":"gāṇḍīvam—Arjun’s bow; sraṁsate—is slipping; hastāt—from (my) hand; tvak—skin; cha—and; eva—indeed; paridahyate—is burning all over; na—not; cha—and; śhaknomi—am able; avasthātum—remain steady; bhramati iva—whirling like; cha—and; me—my; manaḥ—mind;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"181f0d7d-8351-402c-ae3a-f64ab612a598"},{"id":"84196984-5b99-436f-9c50-c5c8c9a3acd2","type":"verses","target":{"id":"49656168-2d4e-437a-bf6b-d27f8d170993","title":null,"body":"But, perceiving clearly the evil consequences ensuing from the ruin of the family, should we not have sense enough to refrain from this sinful act, O Janardana?","translit_title":null,"body_translit":"kathaṁ na jñeyam asmābhiḥ pāpād asmān nivartitum\nkula-kṣhaya-kṛitaṁ doṣhaṁ prapaśhyadbhir janārdana\n","body_translit_meant":"katham—why; na—not; jñeyam—should be known; asmābhiḥ—we; pāpāt—from sin; asmāt—these; nivartitum—to turn away; kula-kṣhaya—killing the kindered; kṛitam—done; doṣham—crime; prapaśhyadbhiḥ—who can see; janārdana—he who looks after the public, Shree Krishna\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"dc178a03-322e-4312-92a4-18de5bd558ce"},{"id":"9fcb4bb2-7a24-47e7-8775-bd5664122b3b","type":"verses","target":{"id":"d3b134a4-6399-43f9-814a-a2e4e384428e","title":null,"body":"When a family ruins, the eternal duties of the family perish; when the duties perish, impiety inevitably dominates the entire family.","translit_title":null,"body_translit":"kula-kṣhaye praṇaśhyanti kula-dharmāḥ sanātanāḥ\ndharme naṣhṭe kulaṁ kṛitsnam adharmo ’bhibhavaty uta\n","body_translit_meant":"kula-kṣhaye—in the destruction of a dynasty; praṇaśhyanti—are vanquished; kula-dharmāḥ—family traditions; sanātanāḥ—eternal; dharme—religion; naṣhṭe—is destroyed; kulam—family; kṛitsnam—the whole; adharmaḥ—irreligion; abhibhavati—overcome; uta—indeed\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"f55741da-c64c-4ee1-a64f-6b60527fb07b"},{"id":"510228f7-8496-4922-93be-7d81b6c627eb","type":"chapters","target":{"id":"d78a2d64-5356-412e-a9d1-1c42398942a1","title":"Transcendental Knowledge","body":"The second chapter of the Bhagavad Gita is \"Sankhya Yoga\". This is the most important chapter of the Bhagavad Gita as Lord Krishna condenses the teachings of the entire Gita in this chapter. This chapter is the essence of the entire Gita. \n\"Sankhya Yoga\" can be categorized into 4 main topics - \n1. Arjuna completely surrenders himself to Lord Krishna and accepts his position as a disciple and Krishna as his Guru. He requests Krishna to guide him on how to dismiss his sorrow.\n2. Explanation of the main cause of all grief, which is ignorance of the true nature of Self.\n3. Karma Yoga - the discipline of selfless action without being attached to its fruits.\n4. Description of a Perfect Man - One whose mind is steady and one-pointed.","translit_title":"Sānkhya Yog","body_translit":null,"body_translit_meant":null,"body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":2,"lang":"en"},{"id":"fd9e2bc1-518d-40fe-8e48-52b509768d5c","type":"verses","target":{"id":"cd9f6c9c-6d4b-46d0-9623-f9214873c8ef","title":null,"body":"Stationed firmly in all their respective paths, each one of them should guard Bhisma above all, without exception.","translit_title":null,"body_translit":"ayaneṣhu cha sarveṣhu yathā-bhāgamavasthitāḥ\nbhīṣhmamevābhirakṣhantu bhavantaḥ sarva eva hi\n","body_translit_meant":"ayaneṣhu—at the strategic points; cha—also; sarveṣhu—all; yathā-bhāgam—in respective position; avasthitāḥ—situated; bhīṣhmam—to Grandsire Bheeshma; eva—only; abhirakṣhantu—defend; bhavantaḥ—you; sarve—all; eva hi—even as\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"3e3a6794-1e98-4c1c-9390-073f7e449b20"},{"id":"c3c85826-5847-4aaa-acb3-d3fbe2df1823","type":"verses","target":{"id":"b81607af-e028-4ef6-adaf-b93a4beba9f3","title":null,"body":"Arjuna said, O Acyuta! Please halt my chariot at a central place between the two armies, so that I may scrutinize these men who are standing with a desire to fight and with whom I have to engage in this great war-effort.","translit_title":null,"body_translit":"hṛiṣhīkeśhaṁ tadā vākyam idam āha mahī-pate\narjuna uvācha\nsenayor ubhayor madhye rathaṁ sthāpaya me ’chyuta\n","body_translit_meant":"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","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"af975dd8-b535-4386-b97b-e873a4177c3f"},{"id":"cc618a4c-1c23-4aa6-92b3-0eb8d6efc81f","type":"verses","target":{"id":"90c8163d-b43d-4521-a968-b4f9cc3944e7","title":null,"body":"O Govinda! What use is the kingdom to us? What use are its pleasures and life even?","translit_title":null,"body_translit":"nimittāni cha paśhyāmi viparītāni keśhava\nna cha śhreyo ’nupaśhyāmi hatvā sva-janam āhave\n","body_translit_meant":"nimittāni—omens; cha—and; paśhyāmi—I see; viparītāni—misfortune; keśhava—Shree Krishna, killer of the Keshi demon; na—not; cha—also; śhreyaḥ—good; anupaśhyāmi—I foresee; hatvā—from killing; sva-janam—kinsmen; āhave—in battle\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"ec3534f6-0d6e-488f-9bd4-d7039e4e1aa8"},{"id":"7b13bee0-fb5b-4d76-baca-68f6955a8d46","type":"verses","target":{"id":"3cec6e77-d80c-4588-b7be-1c14bd425f47","title":null,"body":"O Krsna, due to the domination of impiety, the women of the family become corrupt. O member of the Vrsni-clan, when the women become corrupt, there arises the intermixture of castes.","translit_title":null,"body_translit":"adharmābhibhavāt kṛiṣhṇa praduṣhyanti kula-striyaḥ\nstrīṣhu duṣhṭāsu vārṣhṇeya jāyate varṇa-saṅkaraḥ\n","body_translit_meant":"adharma—irreligion; abhibhavāt—preponderance; kṛiṣhṇa—Shree Krishna; praduṣhyanti—become immoral; kula-striyaḥ—women of the family; strīṣhu—of women; duṣhṭāsu—become immoral; vārṣhṇeya—descendant of Vrishni; jāyate—are born; varṇa-saṅkaraḥ—unwanted progeny\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"412e58c6-0ffb-4b6a-a37f-a77ca6def9ea"},{"id":"f89ed7ff-7e95-47e6-900d-1ba1eb911027","type":"verses","target":{"id":"ad60cd72-ce74-40b6-852f-c2ca53fd52cf","title":null,"body":"Sanjaya said: To him, who was thus possessed by compassion, whose eyes were confused and filled with tears, and who was sinking in despondency, Madhusudana spoke the following words.","translit_title":null,"body_translit":"sañjaya uvācha\ntaṁ tathā kṛipayāviṣhṭamaśhru pūrṇākulekṣhaṇam\nviṣhīdantamidaṁ vākyam uvācha madhusūdanaḥ\n","body_translit_meant":"sañjayaḥ uvācha—Sanjay said; tam—to him (Arjun); tathā—thus; kṛipayā—with pity; āviṣhṭam—overwhelmed; aśhru-pūrṇa—full of tears; ākula—distressed; īkṣhaṇam—eyes; viṣhīdantam—grief-stricken; idam—these; vākyam—words; uvācha—said; madhusūdanaḥ—Shree Krishn, slayer of the Madhu demon\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"1bb80ef8-6c85-4e81-8edc-5cb18bb64b74"},{"id":"41910bd5-90bb-41f3-9c2d-346ece6b7593","type":"verses","target":{"id":"cfba4d39-7521-4254-9e2f-99703c0b8b3a","title":null,"body":"While lamenting for those who cannot be lamented on and those who do not deserve to be lamented on, you do not speak like a wise man! The learned do not lament for those who have departed life and those who have not departed life.","translit_title":null,"body_translit":"śhrī bhagavān uvācha\naśhochyān-anvaśhochas-tvaṁ prajñā-vādānśh cha bhāṣhase\ngatāsūn-agatāsūnśh-cha nānuśhochanti paṇḍitāḥ\n","body_translit_meant":"śhrī-bhagavān uvācha—the Supreme Lord said; aśhochyān—not worthy of grief; anvaśhochaḥ—are mourning; tvam—you; prajñā-vādān—words of wisdom; cha—and; bhāṣhase—speaking; gata āsūn—the dead; agata asūn—the living; cha—and; na—never; anuśhochanti—lament; paṇḍitāḥ—the wise\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"46c758c4-8ae4-49c2-8c00-491d15b4810e"},{"id":"2ec61c1b-4ca7-42e6-b5ef-2a52e1b707c3","type":"verses","target":{"id":"73cc37ca-80d7-4bab-86ca-0658468da736","title":null,"body":"Whoever realizes this to be changeless, destructionless, unborn, and immutable, how can that person be slain? How can they slay anyone else? O son of Prtha!","translit_title":null,"body_translit":"vedāvināśhinaṁ nityaṁ ya enam ajam avyayam\nkathaṁ sa puruṣhaḥ pārtha kaṁ ghātayati hanti kam\n","body_translit_meant":"veda—knows; avināśhinam—imperishable; nityam—eternal; yaḥ—who; enam—this; ajam—unborn; avyayam—immutable; katham—how; saḥ—that; puruṣhaḥ—person; pārtha—Parth; kam—whom; ghātayati—causes to be killed; hanti—kills; kam—whom\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"889d5d38-194b-4d17-afa3-44457f055775"},{"id":"cb44a11c-5937-48c6-b347-5f47d9bbec34","type":"verses","target":{"id":"a373561b-4480-4965-94c8-0d077b4030f9","title":null,"body":"Further, considering your own duty, you should not waver. Indeed, for a Kshatriya there is no duty superior to fighting a righteous war.","translit_title":null,"body_translit":"swa-dharmam api chāvekṣhya na vikampitum arhasi\ndharmyāddhi yuddhāch chhreyo ’nyat kṣhatriyasya na vidyate\n","body_translit_meant":"swa-dharmam—one’s duty in accordance with the Vedas; api—also; cha—and; avekṣhya—considering; na—not; vikampitum—to waver; arhasi—should; dharmyāt—for righteousness; hi—indeed; yuddhāt—than fighting; śhreyaḥ—better; anyat—another; kṣhatriyasya—of a warrior; na—not; vidyate—exists\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"86557322-7023-4d53-b8ad-6fed34f9cb75"},{"id":"80852d26-b0ba-4f53-98a9-17cf47a16b2b","type":"verses","target":{"id":"8057521c-be52-4251-9401-7a68a67b737d","title":null,"body":"O source of joy to the Kurus! The knowledge in the form of determination is one; however, the knowledge (thoughts) of those who lack determination has many branches and has no end.","translit_title":null,"body_translit":"vyavasāyātmikā buddhir ekeha kuru-nandana\nbahu-śhākhā hyanantāśh cha buddhayo ’vyavasāyinām\n","body_translit_meant":"vyavasāya-ātmikā—resolute; buddhiḥ—intellect; ekā—single; iha—on this path; kuru-nandana—descendent of the Kurus; bahu-śhākhāḥ—many-branched; hi—indeed; anantāḥ—endless; cha—also; buddhayaḥ—intellect; avyavasāyinām—of the irresolute\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"0e09b5cf-812b-470b-9ed5-e6393a7b7fec"},{"id":"2ec664cc-4973-4a39-8c61-6c7c9fa7b2d9","type":"verses","target":{"id":"97bab069-4c52-419a-9dc0-bac37beb6964","title":null,"body":"Generating joy in him, the powerful paternal grandfather (Bhisma), the senior-most among the Kurus, roared like a lion and blew his conchshell loudly.","translit_title":null,"body_translit":"tasya sañjanayan harṣhaṁ kuru-vṛiddhaḥ pitāmahaḥ\nsiṁha-nādaṁ vinadyochchaiḥ śhaṅkhaṁ dadhmau pratāpavān\n","body_translit_meant":"tasya—his; sañjanayan—causing; harṣham—joy; kuru-vṛiddhaḥ—the grand old man of the Kuru dynasty (Bheeshma); pitāmahaḥ—grandfather; sinha-nādam—lion’s roar; vinadya—sounding; uchchaiḥ—very loudly; śhaṅkham—conch shell; dadhmau—blew; pratāpa-vān—the glorious\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"e9805667-81a4-44f5-8689-aad2ce95f784"},{"id":"7bde02fd-61a6-4eb8-a8df-a15019b63a09","type":"verses","target":{"id":"ee6376ad-2b85-451e-801e-a9b11579490e","title":null,"body":"I shall scrutinize those who are ready to fight, who have assembled here and are eager to achieve in the battle what is dear to the evil-minded son of Dhrtarastra.","translit_title":null,"body_translit":"yāvadetān nirīkṣhe ’haṁ yoddhu-kāmān avasthitān\nkairmayā saha yoddhavyam asmin raṇa-samudyame\n","body_translit_meant":"yāvat—as many as; etān—these; nirīkṣhe—look; aham—I; yoddhu-kāmān—for the battle; avasthitān—arrayed; kaiḥ—with whom; mayā—by me; saha—together; yoddhavyam—must fight; asmin—in this; raṇa-samudyame—great combat\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"4c70d30b-fe95-43fd-b895-349eff5b901c"},{"id":"fc3c6369-e474-4a61-99a5-cd865e88d62d","type":"verses","target":{"id":"d0ecc6e1-dd3c-4603-a0d8-81b304736418","title":null,"body":"For whose sake we seek kingdom, its pleasures and happiness, the very same persons now stand arrayed to fight, giving up their lives and wealth.","translit_title":null,"body_translit":"na kāṅkṣhe vijayaṁ kṛiṣhṇa na cha rājyaṁ sukhāni cha\nkiṁ no rājyena govinda kiṁ bhogair jīvitena vā\n","body_translit_meant":"na—nor; kāṅkṣhe—do I desire; vijayam—victory; kṛiṣhṇa—Krishna; na—nor; cha—as well; rājyam—kingdom; sukhāni—happiness; cha—also; kim—what; naḥ—to us; rājyena—by kingdom; govinda—Krishna, he who gives pleasure to the senses, he who is fond of cows; kim—what?; bhogaiḥ—pleasures; jīvitena—life; vā—or;\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"42a5685a-9319-4cf5-be9e-d0652241c1fe"},{"id":"3cd72a16-e52b-4e23-8d4a-73f8188085b1","type":"verses","target":{"id":"021da1e9-49f7-4024-9324-3001eef92c37","title":null,"body":"The intermixture leads the family-ruiners and their families to nothing but hell; for, their ancestors (their individual souls) fall down [in hell], being deprived of the rites of offering rice-balls and water [intended for them].","translit_title":null,"body_translit":"saṅkaro narakāyaiva kula-ghnānāṁ kulasya cha\npatanti pitaro hy eṣhāṁ lupta-piṇḍodaka-kriyāḥ\n","body_translit_meant":"saṅkaraḥ—unwanted children; narakāya—hellish; eva—indeed; kula-ghnānām—for those who destroy the family; kulasya—of the family; cha—also; patanti—fall; pitaraḥ—ancestors; hi—verily; eṣhām—their; lupta—deprived of; piṇḍodaka-kriyāḥ—performances of sacrificial offerings\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"29005595-957e-4e8a-a27e-7d4f515eb7c4"},{"id":"37bb2676-9a3c-4773-9886-d96c861c9856","type":"verses","target":{"id":"3ea8a745-33cc-4279-98a9-8fb2d2ca9e48","title":null,"body":"Arjuna said, \"How can I fight in battle with arrows against Bhisma and Drona, both of whom are worthy of reverence? O slayer of Mandhu, O slayer of foes!\"","translit_title":null,"body_translit":"arjuna uvācha\nkathaṁ bhīṣhmam ahaṁ sankhye droṇaṁ cha madhusūdana\niṣhubhiḥ pratiyotsyāmi pūjārhāvari-sūdana\n","body_translit_meant":"arjunaḥ uvācha—Arjun said; katham—how; bhīṣhmam—Bheeshma; aham—I; sankhye—in battle; droṇam—Dronacharya; cha—and; madhu-sūdana—Shree Krishn, slayer of the Madhu demon; iṣhubhiḥ—with arrows; pratiyotsyāmi—shall I shoot; pūjā-arhau—worthy of worship; ari-sūdana—destroyer of enemies\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"c301851e-cba8-49dc-bbf3-c008b3a156fa"},{"id":"18db5f52-fd01-48e1-ac17-c295aad124a1","type":"verses","target":{"id":"7597cbd8-2c8d-4f88-8fcd-17f8853f4b00","title":null,"body":"O son of Kunti! The touches with the matras cause feelings of cold and heat, pleasure and pain; they are of the nature of coming and going and are transient. Bear them, O Descendant of Bharata!","translit_title":null,"body_translit":"mātrā-sparśhās tu kaunteya śhītoṣhṇa-sukha-duḥkha-dāḥ\nāgamāpāyino ’nityās tans-titikṣhasva bhārata\n","body_translit_meant":"mātrā-sparśhāḥ—contact of the senses with the sense objects; tu—indeed; kaunteya—Arjun, the son of Kunti; śhīta—winter; uṣhṇa—summer; sukha—happiness; duḥkha—distress; dāḥ—give; āgama—come; apāyinaḥ—go; anityāḥ—non-permanent; tān—them; titikṣhasva—tolerate; bhārata—descendant of the Bharat\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"cae1dee0-ea63-42d9-a5a0-3101eb77b76d"},{"id":"b83e3923-500a-47ea-95cb-e061a90c442b","type":"verses","target":{"id":"0a578ed8-a253-460a-b12b-d688d4551689","title":null,"body":"This cannot be cut; this cannot be burnt; this cannot be made wet nor dried; this is eternal, all-pervading, stable, immovable, and everlasting.","translit_title":null,"body_translit":"achchhedyo ’yam adāhyo ’yam akledyo ’śhoṣhya eva cha\nnityaḥ sarva-gataḥ sthāṇur achalo ’yaṁ sanātanaḥ\n","body_translit_meant":"achchhedyaḥ—unbreakable; ayam—this soul; adāhyaḥ—incombustible; ayam—this soul; akledyaḥ—cannot be dampened; aśhoṣhyaḥ—cannot be dried; eva—indeed; cha—and; nityaḥ—everlasting; sarva-gataḥ—all-pervading; sthāṇuḥ—unalterable; achalaḥ—immutable; ayam—this soul; sanātanaḥ—primordial\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"5fbdcd4a-a2a5-426d-9636-1e0f8fbb8357"},{"id":"7be9ec1e-78f9-49b5-923c-a49a091a11ae","type":"verses","target":{"id":"a4a73d81-202b-45c3-a5af-9098bbcfe090","title":null,"body":"The creatures will speak of your endless ill-fame; and for one who has been highly esteemed, ill-fame is worse than death.","translit_title":null,"body_translit":"akīrtiṁ chāpi bhūtāni\nkathayiṣhyanti te ’vyayām\nsambhāvitasya chākīrtir\nmaraṇād atirichyate\n","body_translit_meant":"akīrtim—infamy; cha—and; api—also; bhūtāni—people; kathayiṣhyanti—will speak; te—of your; avyayām—everlasting; sambhāvitasya—of a respectable person; cha—and; akīrtiḥ—infamy; maraṇāt—than death; atirichyate—is greater\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"79749b71-c2f4-4159-aaf9-75564004a9ca"},{"id":"bde76fdd-610f-48c9-a3e7-4b94de1123c7","type":"verses","target":{"id":"2f9aa6e9-7a7c-48b6-8841-865d86298114","title":null,"body":"Those who are very attached to the ownership of enjoyable objects and whose minds have been carried away by that (flowery speech) - their knowledge, in the form of determination, is not prescribed for concentration.","translit_title":null,"body_translit":"bhogaiśwvarya-prasaktānāṁ tayāpahṛita-chetasām\nvyavasāyātmikā buddhiḥ samādhau na vidhīyate\n","body_translit_meant":"bhoga—gratification; aiśhwarya—luxury; prasaktānām—whose minds are deeply attached; tayā—by that; apahṛita-chetasām—bewildered in intellect; vyavasāya-ātmikā—resolute; buddhiḥ—intellect; samādhau—fulfilment; na—never; vidhīyate—occurs\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"dab23ee9-e8ed-49a7-8a86-acb47f730636"},{"id":"6303d86e-0c5c-4fdb-8253-dd505afed032","type":"verses","target":{"id":"690ee163-625d-4145-aee8-b00e87abdc36","title":null,"body":"Then, all of a sudden, the conch-shells, drums, tambourines, trumpets, and cow-horns sounded in unison; the sound was tumultuous.","translit_title":null,"body_translit":"tataḥ śhaṅkhāśhcha bheryaśhcha paṇavānaka-gomukhāḥ\nsahasaivābhyahanyanta sa śhabdastumulo ’bhavat\n","body_translit_meant":"tataḥ—thereafter; śhaṅkhāḥ—conches; cha—and; bheryaḥ—bugles; cha—and; paṇava-ānaka—drums and kettledrums; go-mukhāḥ—trumpets; sahasā—suddenly; eva—indeed; abhyahanyanta—blared forth; saḥ—that; śhabdaḥ—sound; tumulaḥ—overwhelming; abhavat—was\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"8cfcde75-6ed2-401a-9fe0-736027a284a2"},{"id":"cdc48e96-b19f-4b5d-8921-18cd463f1ff4","type":"verses","target":{"id":"6d641b19-72b6-4a74-b428-066675c035aa","title":null,"body":"Sanjaya said, \"O descendant of Bharata (Dhrtarastra)! Thus instructed by Gudakesa (Arjuna), Hrsikesa halted the best chariot at a place in between the two armies, in front of Bhisma and Drona and all the rulers of the earth. He then said, 'O son of Prtha! Behold these Kurus, assembled.'\"","translit_title":null,"body_translit":"yotsyamānān avekṣhe ’haṁ ya ete ’tra samāgatāḥ\ndhārtarāṣhṭrasya durbuddher yuddhe priya-chikīrṣhavaḥ\n","body_translit_meant":"yotsyamānān—those who have come to fight; avekṣhe aham—I desire to see; ye—who; ete—those; atra—here; samāgatāḥ—assembled; dhārtarāṣhṭrasya—of Dhritarashtra’s son; durbuddheḥ—evil-minded; yuddhe—in the fight; priya-chikīrṣhavaḥ—wishing to please\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"52aa5172-5dce-4801-a01b-c32d08382f96"},{"id":"d0dd2642-0853-416f-9677-54b6319743df","type":"verses","target":{"id":"70234f31-10fe-4109-a4b3-8a8b76d98b2e","title":null,"body":"These are our teachers, fathers, sons, paternal grandfathers, maternal uncles, fathers-in-law, sons' sons, wives' brothers, and other relatives.","translit_title":null,"body_translit":"yeṣhām arthe kāṅkṣhitaṁ no rājyaṁ bhogāḥ sukhāni cha\nta ime ’vasthitā yuddhe prāṇāṁs tyaktvā dhanāni cha\n","body_translit_meant":"yeṣhām—for whose; arthe—sake; kāṅkṣhitam—coveted for; naḥ—by us; rājyam—kingdom; bhogāḥ—pleasures; sukhāni—happiness; cha—also; te—they; ime—these; avasthitāḥ—situated; yuddhe—for battle; prāṇān—lives; tyaktvā—giving up; dhanāni—wealth; cha—also\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"cc1ad682-aee3-40a3-b946-71daa0b2a03e"},{"id":"29723994-15b5-4b50-b9dc-e0ce76feccaf","type":"verses","target":{"id":"1d3d0740-deec-4df2-85c9-00f7051642b8","title":null,"body":"On account of these evils of the family-ruiners that cause the intermixing of castes, the eternal caste-duties and family-duties fall into disuse.","translit_title":null,"body_translit":"doṣhair etaiḥ kula-ghnānāṁ varṇa-saṅkara-kārakaiḥ\nutsādyante jāti-dharmāḥ kula-dharmāśh cha śhāśhvatāḥ\n","body_translit_meant":"doṣhaiḥ—through evil deeds; etaiḥ—these; kula-ghnānām—of those who destroy the family; varṇa-saṅkara—unwanted progeny; kārakaiḥ—causing; utsādyante—are ruined; jāti-dharmāḥ—social and family welfare activities; kula-dharmāḥ—family traditions; cha—and; śhāśhvatāḥ—eternal\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"d7b4c586-1245-474f-86df-39820500f3d3"},{"id":"2a54e3d2-5251-4d03-b99c-64cae869eed5","type":"verses","target":{"id":"63ca9e9a-f411-42c5-986b-d37271ee228d","title":null,"body":"The Bhagavat said, \"O Arjuna! At this critical moment, whence did this sinful act come to you, which is practiced by men of low birth and leads to hell, and is inglorious?\"","translit_title":null,"body_translit":"śhrī bhagavān uvācha\nkutastvā kaśhmalamidaṁ viṣhame samupasthitam\nanārya-juṣhṭamaswargyam akīrti-karam arjuna\n","body_translit_meant":"śhrī-bhagavān uvācha—the Supreme Lord said; kutaḥ—wherefrom; tvā—to you; kaśhmalam—delusion; idam—this; viṣhame—in this hour of peril; samupasthitam—overcome; anārya—crude person; juṣhṭam—practiced; aswargyam—which does not lead to the higher abodes; akīrti-karam—leading to disgrace; arjuna—Arjun\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"9ec8cb9d-e772-4c05-b194-183f05b60812"},{"id":"8ce55800-1a7d-449b-b8de-be7514ad95c4","type":"verses","target":{"id":"92460583-2d82-4dc3-a203-ed0b8642e904","title":null,"body":"Never indeed at any time did I not exist, nor you, nor these kings; and never shall we all not exist hereafter.","translit_title":null,"body_translit":"na tvevāhaṁ jātu nāsaṁ na tvaṁ neme janādhipāḥ\nna chaiva na bhaviṣhyāmaḥ sarve vayamataḥ param\n","body_translit_meant":"na—never; tu—however; eva—certainly; aham—I; jātu—at any time; na—nor; āsam—exist; na—nor; tvam—you; na—nor; ime—these; jana-adhipāḥ—kings; na—never; cha—also; eva—indeed; na bhaviṣhyāmaḥ—shall not exist; sarve vayam—all of us; ataḥ—from now; param—after\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"dfd98140-1c87-47fc-9732-3e7b49b9a436"},{"id":"651b0d0a-6271-4e0f-988e-8acaa525e487","type":"verses","target":{"id":"e2450822-7b4b-4c3f-a4e7-088ccb9eb413","title":null,"body":"Just as a man rejects tattered garments and takes on new ones, so too, the embodied Self, discarding worn-out bodies, rightly obtains new ones.","translit_title":null,"body_translit":"vāsānsi jīrṇāni yathā vihāya\nnavāni gṛihṇāti naro ’parāṇi\ntathā śharīrāṇi vihāya jīrṇānya\nnyāni sanyāti navāni dehī\n","body_translit_meant":"vāsānsi—garments; jīrṇāni—worn-out; yathā—as; vihāya—sheds; navāni—new; gṛihṇāti—accepts; naraḥ—a person; aparāṇi—others; tathā—likewise; śharīrāṇi—bodies; vihāya—casting off; jirṇāni—worn-out; anyāni—other; sanyāti—enters; navāni—new; dehī—the embodied soul\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"ea800e17-b4b4-4cab-8fe1-d0887aa01569"},{"id":"1e906921-551c-411e-8ba2-21727c1e588e","type":"verses","target":{"id":"7e49e44c-cd9d-418e-bb70-ec804725e053","title":null,"body":"O son of Prtha! By good fortune, Ksatriyas, desirous of happiness, get a war of this type, which has come of its own accord and which is an open door to heaven.","translit_title":null,"body_translit":"yadṛichchhayā chopapannaṁ swarga-dvāram apāvṛitam\nsukhinaḥ kṣhatriyāḥ pārtha labhante yuddham īdṛiśham\n","body_translit_meant":"yadṛichchhayā—unsought; cha—and; upapannam—come; swarga—celestial abodes; dvāram—door; apāvṛitam—wide open; sukhinaḥ—happy; kṣhatriyāḥ—warriors; pārtha—Arjun, the son of Pritha; labhante—obtain; yuddham—war; īdṛiśham—such\n","body_meant":null},"source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","lang":"en","verse_id":"a408014f-6645-4d18-bea7-257232c8b06b"}],"inserted_at":"2024-03-04T05:41:45Z","updated_at":"2024-03-04T05:41:45Z","voices":[{"id":"0a0a5aff-4199-4c68-bc56-16b3389fbe88","source_id":"69a3b7f2-dea4-46aa-8cc6-0a73073dfdfd","chapter_no":1,"lang":"sa","duration":725088,"inserted_at":"2024-03-04T05:42:11Z","updated_at":"2024-03-04T05:42:11Z"}]},{"id":"63918acd-77a9-451a-b8d1-8d5b73208eae","events":[{"id":"03221a08-2c02-45f8-bed1-2f5323c7017f","origin":582000,"phase":"end","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","voice_id":"b1db78be-0bdf-443c-afdf-3221bac38758","duration":-279,"fragments":[]},{"id":"8d6d2726-fbb0-46f3-bead-2025632a93c3","origin":540000,"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","voice_id":"b1db78be-0bdf-443c-afdf-3221bac38758","duration":42000,"verse_id":"590e9499-6a23-4639-86d3-7cee87ed9e33","fragments":[]},{"id":"c1e60b96-c0d6-4907-b051-122186b271e8","origin":521000,"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","voice_id":"b1db78be-0bdf-443c-afdf-3221bac38758","duration":19000,"verse_id":"781359e2-d9be-445e-93fd-be4b3cd6e6c5","fragments":[]},{"id":"8a4edac0-82a3-4bf0-80d9-67f80327862f","origin":511000,"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","voice_id":"b1db78be-0bdf-443c-afdf-3221bac38758","duration":10000,"verse_id":"3bc5500b-11d9-4c25-bd49-e59a3f108438","fragments":[]},{"id":"7d584b22-f417-44db-9060-a032597cdb32","origin":496000,"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","voice_id":"b1db78be-0bdf-443c-afdf-3221bac38758","duration":15000,"verse_id":"10c0e5d1-a980-40a4-93c3-340125418909","fragments":[]},{"id":"f4a12cf7-7638-4950-9a75-238c52bc7772","origin":485000,"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","voice_id":"b1db78be-0bdf-443c-afdf-3221bac38758","duration":11000,"verse_id":"c60856d1-96ec-45a8-995a-f6c9ece0f4c5","fragments":[]},{"id":"7ee31473-8bd1-4758-8ba1-344a90a9fc27","origin":474000,"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","voice_id":"b1db78be-0bdf-443c-afdf-3221bac38758","duration":11000,"verse_id":"e3426478-9c02-448e-a809-12d83c159876","fragments":[]},{"id":"9c2c10a4-c560-422b-b49c-45d4f5c7239c","origin":463000,"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","voice_id":"b1db78be-0bdf-443c-afdf-3221bac38758","duration":11000,"verse_id":"aabc2359-c3ba-414d-a239-21dc807d4f02","fragments":[]},{"id":"a9e76cb0-c1b3-4084-b351-d6ff87e6711d","origin":448000,"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","voice_id":"b1db78be-0bdf-443c-afdf-3221bac38758","duration":15000,"verse_id":"211ef76b-7d16-4ba6-ae3e-4ad9168776d9","fragments":[]},{"id":"4eb0ea3d-dbcc-4c36-abf3-2d12548c6c28","origin":437000,"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","voice_id":"b1db78be-0bdf-443c-afdf-3221bac38758","duration":11000,"verse_id":"7426a349-a5a3-4c69-ba47-029972a27a34","fragments":[]},{"id":"9f59d697-6c1a-4edf-ab5b-acc5f123c166","origin":427000,"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","voice_id":"b1db78be-0bdf-443c-afdf-3221bac38758","duration":10000,"verse_id":"3d1a9d0f-e3bb-48e9-95e7-b29add4da464","fragments":[]},{"id":"f5d1e5bb-a826-48e8-9fa8-a9636a9d7824","origin":416000,"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","voice_id":"b1db78be-0bdf-443c-afdf-3221bac38758","duration":11000,"verse_id":"d3050e93-4cfd-4359-9080-a7c10f357a95","fragments":[]},{"id":"c6057280-cc68-4880-90e7-0f92477be759","origin":401000,"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","voice_id":"b1db78be-0bdf-443c-afdf-3221bac38758","duration":15000,"verse_id":"29619bbe-dce7-43f9-880b-2b7722f882ad","fragments":[]},{"id":"888c211b-2900-4ba4-89bd-59a6f1f8e2d6","origin":390000,"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","voice_id":"b1db78be-0bdf-443c-afdf-3221bac38758","duration":11000,"verse_id":"22a61863-a1e9-4c1b-88d3-075ea036dae5","fragments":[]},{"id":"667dff9c-08fc-4242-bcfc-0e41059269e9","origin":379000,"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","voice_id":"b1db78be-0bdf-443c-afdf-3221bac38758","duration":11000,"verse_id":"be459a03-8948-4d09-88a1-460693996c7a","fragments":[]},{"id":"473c6884-1d8c-430d-8861-37cf5c98ebb2","origin":369000,"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","voice_id":"b1db78be-0bdf-443c-afdf-3221bac38758","duration":10000,"verse_id":"1eb31077-ca41-4555-b5bf-055cfb48bbea","fragments":[]},{"id":"46b269bd-b5e7-489d-bd62-64be978107f6","origin":353000,"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","voice_id":"b1db78be-0bdf-443c-afdf-3221bac38758","duration":16000,"verse_id":"eaf587e3-ab71-4300-8724-81de3c26e132","fragments":[]},{"id":"71e9242d-ddc5-4216-9699-08585dda98d7","origin":342000,"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","voice_id":"b1db78be-0bdf-443c-afdf-3221bac38758","duration":11000,"verse_id":"10659d92-a997-4643-816b-b4804269bdb3","fragments":[]},{"id":"f0a637d3-98ff-445f-b1e3-b96f515ff1c6","origin":332000,"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","voice_id":"b1db78be-0bdf-443c-afdf-3221bac38758","duration":10000,"verse_id":"a341fd1a-51e5-4dd2-af9c-5cb2ab3735a8","fragments":[]},{"id":"e79bd4a8-d688-4a04-9ab2-46ac9aee690b","origin":321000,"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","voice_id":"b1db78be-0bdf-443c-afdf-3221bac38758","duration":11000,"verse_id":"3884f287-7adc-4858-8320-c1604441e952","fragments":[]},{"id":"6871fa44-aff1-4a33-b5ef-8fd1e3bcf661","origin":305000,"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","voice_id":"b1db78be-0bdf-443c-afdf-3221bac38758","duration":16000,"verse_id":"7bf7fb11-d3c8-4565-8d47-a27ea5ffac6a","fragments":[]},{"id":"74bb220f-f518-4151-86c2-cf84c78d08fc","origin":295000,"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","voice_id":"b1db78be-0bdf-443c-afdf-3221bac38758","duration":10000,"verse_id":"8f3f3932-62c2-4057-bb3e-a16e72e78c32","fragments":[]},{"id":"b67f7708-4e60-4668-aec3-1bbd111e3277","origin":178000,"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","voice_id":"b1db78be-0bdf-443c-afdf-3221bac38758","duration":11000,"verse_id":"724537e1-bd29-4472-abf3-61d0c9210333","fragments":[]},{"id":"c4610a1e-5c34-4f8c-aa6e-7579d70ab553","origin":56000,"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","voice_id":"b1db78be-0bdf-443c-afdf-3221bac38758","duration":11000,"verse_id":"1ca1a37c-0b45-4c38-bb67-f5e541734ba3","fragments":[]},{"id":"0efdd2b6-f73b-4a38-a070-b41e9ff1bb74","origin":284000,"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","voice_id":"b1db78be-0bdf-443c-afdf-3221bac38758","duration":11000,"verse_id":"6cd4eb41-6f94-44a6-9017-695958404872","fragments":[]},{"id":"53d24fba-05fd-4a10-befe-f874dc7b30e4","origin":163000,"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","voice_id":"b1db78be-0bdf-443c-afdf-3221bac38758","duration":15000,"verse_id":"df702f27-b10b-49fe-8ed3-8abc6bba6fd3","fragments":[]},{"id":"0d6cc843-2898-4558-8a20-00f46603c1f2","origin":24000,"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","voice_id":"b1db78be-0bdf-443c-afdf-3221bac38758","duration":32000,"verse_id":"5c2c9d91-3843-4c37-a3a1-b0771f8d2b46","fragments":[]},{"id":"44f66ef9-4db8-4fd5-80be-5f839d8d4f97","origin":273000,"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","voice_id":"b1db78be-0bdf-443c-afdf-3221bac38758","duration":11000,"verse_id":"5739ba57-099b-4c91-b944-e5d8527beba3","fragments":[]},{"id":"575f696b-754d-42de-a75b-6226bb139f07","origin":152000,"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","voice_id":"b1db78be-0bdf-443c-afdf-3221bac38758","duration":11000,"verse_id":"9a61968f-55d8-4934-b618-af1e70a64aa7","fragments":[]},{"id":"db18ef59-2381-431a-a40a-c7394f538f23","origin":2000,"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","voice_id":"b1db78be-0bdf-443c-afdf-3221bac38758","duration":22000,"verse_id":"7d9d588a-34fc-4f19-b974-fc32b49b6a61","fragments":[]},{"id":"93cebd7a-91fa-47c9-a931-dd6bf8504d74","origin":258000,"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","voice_id":"b1db78be-0bdf-443c-afdf-3221bac38758","duration":15000,"verse_id":"45dc6035-f86d-4eab-8189-5e6a736e71af","fragments":[]},{"id":"c52340b2-70ff-4efd-afdb-95922c7326bb","origin":141000,"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","voice_id":"b1db78be-0bdf-443c-afdf-3221bac38758","duration":11000,"verse_id":"aa3ad88b-0de1-443e-b471-c08a44e67c61","fragments":[]},{"id":"0a91a04d-26a8-41b7-afcf-594952319c6b","origin":0,"phase":"start","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","voice_id":"b1db78be-0bdf-443c-afdf-3221bac38758","duration":2000,"fragments":[]},{"id":"0602d5d3-4d2e-436e-a974-f96270b66c30","origin":247000,"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","voice_id":"b1db78be-0bdf-443c-afdf-3221bac38758","duration":11000,"verse_id":"0eef65de-3568-4400-bf1f-ab79528b558a","fragments":[]},{"id":"307f6612-7a6c-4356-a488-6a9071944f5d","origin":130000,"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","voice_id":"b1db78be-0bdf-443c-afdf-3221bac38758","duration":11000,"verse_id":"c2bca16a-0551-43e2-8691-2a3ef05cd02e","fragments":[]},{"id":"b329a6a5-db10-4f47-853e-9c24ef81e35a","origin":234000,"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","voice_id":"b1db78be-0bdf-443c-afdf-3221bac38758","duration":13000,"verse_id":"0e09590b-482b-4c17-921a-f132ca77f409","fragments":[]},{"id":"b323b763-ca29-4ac7-bb2b-d1d06c384a1e","origin":115000,"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","voice_id":"b1db78be-0bdf-443c-afdf-3221bac38758","duration":15000,"verse_id":"43904bde-7edb-459f-b0ef-a79376136773","fragments":[]},{"id":"3cb19a6d-0b49-4b52-8159-51e703b477bc","origin":225000,"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","voice_id":"b1db78be-0bdf-443c-afdf-3221bac38758","duration":9000,"verse_id":"ec4fc18b-bc77-446b-9cd2-b1ac4e76914a","fragments":[]},{"id":"c37f01ae-f887-4442-b57b-454d174ca7e4","origin":104000,"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","voice_id":"b1db78be-0bdf-443c-afdf-3221bac38758","duration":11000,"verse_id":"20355a80-2b36-4878-9a37-57a3af761cc1","fragments":[]},{"id":"d6468086-12db-459a-9e72-73c5d936bb58","origin":210000,"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","voice_id":"b1db78be-0bdf-443c-afdf-3221bac38758","duration":15000,"verse_id":"9dffe22e-18ff-42a7-866d-788367fd7cf8","fragments":[]},{"id":"6ada1c30-4087-448a-9cf3-41f1ecacaa66","origin":93000,"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","voice_id":"b1db78be-0bdf-443c-afdf-3221bac38758","duration":11000,"verse_id":"34cf99d3-254d-4c70-86c2-7ee49551d2c6","fragments":[]},{"id":"b14112e3-8e4d-443f-8647-d021cdfd71c7","origin":199000,"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","voice_id":"b1db78be-0bdf-443c-afdf-3221bac38758","duration":11000,"verse_id":"73c7b613-0557-4791-b48d-b6953d262e9e","fragments":[]},{"id":"d04fd0a4-ce19-40ca-9b24-a7bbd05574d3","origin":83000,"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","voice_id":"b1db78be-0bdf-443c-afdf-3221bac38758","duration":10000,"verse_id":"48d3cef3-7462-44a7-90ff-739178515994","fragments":[]},{"id":"19ad43dc-9a48-4734-a90c-3ee4883dbd1a","origin":189000,"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","voice_id":"b1db78be-0bdf-443c-afdf-3221bac38758","duration":10000,"verse_id":"5f1bb06e-40e5-4ecb-8f36-4c84456c9ce8","fragments":[]},{"id":"928eed93-1fb9-4c62-8b74-2ffd6eb4bc5f","origin":67000,"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","voice_id":"b1db78be-0bdf-443c-afdf-3221bac38758","duration":16000,"verse_id":"5e016d02-6e48-4ca1-970f-37fdb7fa5c74","fragments":[]}],"title":"hanuman_chalisa","chapters":[{"no":1,"title":"Hanuman Chalisa","body":"The Hanuman Chalisa, composed by Goswami Tulsidas, is a 40-verse hymn dedicated to Lord Hanuman, highlighting his unwavering devotion to Lord Rama. It is a testament to Hanuman's strength, wisdom, and courage, as well as his role in Lord Rama's epic battles against evil. Reciting this hymn is believed to bestow blessings and protection from Hanuman, fostering spiritual growth and devotion to Lord Rama.","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae"}],"verses":[{"no":5,"id":"48d3cef3-7462-44a7-90ff-739178515994","body":"महाबीर बिक्रम बजरङ्गी ।\n\nकुमति निवार सुमति के सङ्गी ॥३॥","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","chapter_no":1},{"no":6,"id":"34cf99d3-254d-4c70-86c2-7ee49551d2c6","body":"कञ्चन बरन बिराज सुबेसा ।\n\nकानन कुण्डल कुञ्चित केसा ॥४॥","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","chapter_no":1},{"no":7,"id":"20355a80-2b36-4878-9a37-57a3af761cc1","body":"हाथ बज्र औ ध्वजा बिराजै ।\n\nकाँधे मूँज जनेउ साजै ॥५॥","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","chapter_no":1},{"no":8,"id":"43904bde-7edb-459f-b0ef-a79376136773","body":"सङ्कर सुवन केसरीनन्दन ।\n\nतेज प्रताप महा जग बन्दन ॥६॥","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","chapter_no":1},{"no":9,"id":"c2bca16a-0551-43e2-8691-2a3ef05cd02e","body":"बिद्यावान गुनी अति चातुर ।\n\nराम काज करिबे को आतुर ॥७॥","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","chapter_no":1},{"no":10,"id":"aa3ad88b-0de1-443e-b471-c08a44e67c61","body":"प्रभु चरित्र सुनिबे को रसिया ।\n\nराम लखन सीता मन बसिया ॥८॥","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","chapter_no":1},{"no":11,"id":"9a61968f-55d8-4934-b618-af1e70a64aa7","body":"सूक्ष्म रूप धरि सियहिं दिखावा ।\n\nबिकट रूप धरि लङ्क जरावा ॥९॥","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","chapter_no":1},{"no":12,"id":"df702f27-b10b-49fe-8ed3-8abc6bba6fd3","body":"भीम रूप धरि असुर सँहारे ।\n\nरामचन्द्र के काज सँवारे ॥१०॥","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","chapter_no":1},{"no":13,"id":"724537e1-bd29-4472-abf3-61d0c9210333","body":"लाय सञ्जीवन लखन जियाये ।\n\nश्रीरघुबीर हरषि उर लाये ॥११॥","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","chapter_no":1},{"no":14,"id":"5f1bb06e-40e5-4ecb-8f36-4c84456c9ce8","body":"रघुपति कीह्नी बहुत बड़ाई ।\n\nतुम मम प्रिय भरतहि सम भाई ॥१२॥","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","chapter_no":1},{"no":15,"id":"73c7b613-0557-4791-b48d-b6953d262e9e","body":"सहस बदन तुह्मारो जस गावैं ।\n\nअस कहि श्रीपति कण्ठ लगावैं ॥१३॥","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","chapter_no":1},{"no":16,"id":"9dffe22e-18ff-42a7-866d-788367fd7cf8","body":"सनकादिक ब्रह्मादि मुनीसा ।\n\nनारद सारद सहित अहीसा ॥१४॥","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","chapter_no":1},{"no":17,"id":"ec4fc18b-bc77-446b-9cd2-b1ac4e76914a","body":"जम कुबेर दिगपाल जहाँ ते ।\n\nकबि कोबिद कहि सके कहाँ ते ॥१५॥","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","chapter_no":1},{"no":21,"id":"5739ba57-099b-4c91-b944-e5d8527beba3","body":"प्रभु मुद्रिका मेलि मुख माहीं ।\n\nजलधि लाँघि गये अचरज नाहीं ॥१९॥","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","chapter_no":1},{"no":22,"id":"6cd4eb41-6f94-44a6-9017-695958404872","body":"दुर्गम काज जगत के जेते ।\n\nसुगम अनुग्रह तुह्मरे तेते ॥२०॥","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","chapter_no":1},{"no":20,"id":"45dc6035-f86d-4eab-8189-5e6a736e71af","body":"जुग सहस्र जोजन पर भानु ।\n\nलील्यो ताहि मधुर फल जानू ॥१८॥","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","chapter_no":1},{"no":18,"id":"0e09590b-482b-4c17-921a-f132ca77f409","body":"तुम उपकार सुग्रीवहिं कीह्ना ।\n\nराम मिलाय राज पद दीह्ना ॥१६॥","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","chapter_no":1},{"no":19,"id":"0eef65de-3568-4400-bf1f-ab79528b558a","body":"तुह्मरो मन्त्र बिभीषन माना ।\n\nलङ्केस्वर भए सब जग जाना ॥१७॥","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","chapter_no":1},{"no":1,"id":"7d9d588a-34fc-4f19-b974-fc32b49b6a61","body":"श्रीगुरु चरन सरोज रज निज मनु मुकुरु सुधारि ।\n\nबरनउँ रघुबर बिमल जसु जो दायकु फल चारि ॥","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","chapter_no":1},{"no":23,"id":"8f3f3932-62c2-4057-bb3e-a16e72e78c32","body":"राम दुआरे तुम रखवारे ।\n\nहोत न आज्ञा बिनु पैसारे ॥२१॥","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","chapter_no":1},{"no":2,"id":"5c2c9d91-3843-4c37-a3a1-b0771f8d2b46","body":"बुद्धिहीन तनु जानिके सुमिरौं पवन-कुमार ।\n\nबल बुधि बिद्या देहु मोहिं हरहु कलेस बिकार ॥","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","chapter_no":1},{"no":3,"id":"1ca1a37c-0b45-4c38-bb67-f5e541734ba3","body":"॥चौपाई॥\n\nजय हनुमान ज्ञान गुन सागर ।\n\nजय कपीस तिहुँ लोक उजागर ॥१॥","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","chapter_no":1},{"no":4,"id":"5e016d02-6e48-4ca1-970f-37fdb7fa5c74","body":"राम दूत अतुलित बल धामा ।\n\nअञ्जनि-पुत्र पवनसुत नामा ॥२॥","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","chapter_no":1},{"no":24,"id":"7bf7fb11-d3c8-4565-8d47-a27ea5ffac6a","body":"सब सुख लहै तुह्मारी सरना ।\n\nतुम रच्छक काहू को डर ना ॥२२॥","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","chapter_no":1},{"no":25,"id":"3884f287-7adc-4858-8320-c1604441e952","body":"आपन तेज सह्मारो आपै ।\n\nतीनों लोक हाँक तें काँपै ॥२३॥","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","chapter_no":1},{"no":26,"id":"a341fd1a-51e5-4dd2-af9c-5cb2ab3735a8","body":"भूत पिसाच निकट नहिं आवै ।\n\nमहाबीर जब नाम सुनावै ॥२४॥","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","chapter_no":1},{"no":27,"id":"10659d92-a997-4643-816b-b4804269bdb3","body":"नासै रोग हरै सब पीरा ।\n\nजपत निरन्तर हनुमत बीरा ॥२५॥","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","chapter_no":1},{"no":28,"id":"eaf587e3-ab71-4300-8724-81de3c26e132","body":"सङ्कट तें हनुमान छुड़ावै ।\n\nमन क्रम बचन ध्यान जो लावै ॥२६॥","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","chapter_no":1},{"no":29,"id":"1eb31077-ca41-4555-b5bf-055cfb48bbea","body":"सब पर राम तपस्वी राजा ।\n\nतिन के काज सकल तुम साजा ॥२७॥","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","chapter_no":1},{"no":30,"id":"be459a03-8948-4d09-88a1-460693996c7a","body":"और मनोरथ जो कोई लावै ।\n\nसोई अमित जीवन फल पावै ॥२८॥","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","chapter_no":1},{"no":31,"id":"22a61863-a1e9-4c1b-88d3-075ea036dae5","body":"चारों जुग परताप तुह्मारा ।\n\nहै परसिद्ध जगत उजियारा ॥२९॥","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","chapter_no":1},{"no":32,"id":"29619bbe-dce7-43f9-880b-2b7722f882ad","body":"साधु सन्त के तुम रखवारे ।\n\nअसुर निकन्दन राम दुलारे ॥३०॥","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","chapter_no":1},{"no":33,"id":"d3050e93-4cfd-4359-9080-a7c10f357a95","body":"अष्टसिद्धि नौ निधि के दाता ।\n\nअस बर दीन जानकी माता ॥३१॥","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","chapter_no":1},{"no":34,"id":"3d1a9d0f-e3bb-48e9-95e7-b29add4da464","body":"राम रसायन तुह्मरे पासा ।\n\nसदा रहो रघुपति के दासा ॥३२॥","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","chapter_no":1},{"no":35,"id":"7426a349-a5a3-4c69-ba47-029972a27a34","body":"तुह्मरे भजन राम को पावै ।\n\nजनम जनम के दुख बिसरावै ॥३३॥","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","chapter_no":1},{"no":36,"id":"211ef76b-7d16-4ba6-ae3e-4ad9168776d9","body":"अन्त काल रघुबर पुर जाई ।\n\nजहाँ जन्म हरिभक्त कहाई ॥३४॥","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","chapter_no":1},{"no":37,"id":"aabc2359-c3ba-414d-a239-21dc807d4f02","body":"और देवता चित्त न धरई ।\n\nहनुमत सेइ सर्ब सुख करई ॥३५॥","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","chapter_no":1},{"no":38,"id":"e3426478-9c02-448e-a809-12d83c159876","body":"सङ्कट कटै मिटै सब पीरा ।\n\nजो सुमिरै हनुमत बलबीरा ॥३६॥","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","chapter_no":1},{"no":39,"id":"c60856d1-96ec-45a8-995a-f6c9ece0f4c5","body":"जय जय जय हनुमान गोसाईं ।\n\nकृपा करहु गुरुदेव की नाईं ॥३७॥","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","chapter_no":1},{"no":40,"id":"10c0e5d1-a980-40a4-93c3-340125418909","body":"जो सत बार पाठ कर कोई ।\n\nछूटहि बन्दि महा सुख होई ॥३८॥","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","chapter_no":1},{"no":41,"id":"3bc5500b-11d9-4c25-bd49-e59a3f108438","body":"जो यह पढ़ै हनुमान चालीसा ।\n\nहोय सिद्धि साखी गौरीसा ॥३९॥","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","chapter_no":1},{"no":42,"id":"781359e2-d9be-445e-93fd-be4b3cd6e6c5","body":"तुलसीदास सदा हरि चेरा ।\n\nकीजै नाथ हृदय महँ डेरा ॥४०॥","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","chapter_no":1},{"no":43,"id":"590e9499-6a23-4639-86d3-7cee87ed9e33","body":"॥दोहा॥\n\nपवनतनय सङ्कट हरन मङ्गल मूरति रूप ।\n\nराम लखन सीता सहित हृदय बसहु सुर भूप ॥","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","chapter_no":1}],"translations":[{"id":"aca90d6a-ef14-44db-b173-0864bfb6be5e","type":"verses","target":{"id":"4a8820eb-5695-46f7-a3ef-4e488a802111","title":null,"body":"प्रभु चरित्र सुनिबे को रसिया ।\n\nराम लखन सीता मन बसिया ॥८॥","translit_title":null,"body_translit":"prabhu caritra sunibe ko rasiyā .\n\nrāma lakhana sītā mana basiyā ..8..","body_translit_meant":"You feel extremely delighted in listening to Lord Rama’s doings and conduct. Lord Rama, Mother Sita, and Lord Laxmana dwell forever in your heart.","body_meant":null},"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","lang":"en","verse_id":"aa3ad88b-0de1-443e-b471-c08a44e67c61"},{"id":"8d05b844-67c0-4d38-8768-2fcac604b6a2","type":"verses","target":{"id":"625ea688-4a87-4797-b378-d042cf6b729d","title":null,"body":"जुग सहस्र जोजन पर भानु ।\n\nलील्यो ताहि मधुर फल जानू ॥१८॥","translit_title":null,"body_translit":"juga sahasra jojana para bhānu .\n\nlīlyo tāhi madhura phala jānū ..18..","body_translit_meant":"You swallowed the sun, located thousands of miles away, mistaking it to be a sweet, red fruit!","body_meant":null},"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","lang":"en","verse_id":"45dc6035-f86d-4eab-8189-5e6a736e71af"},{"id":"c2db4eb0-ecac-48e7-b5f7-b54682087e70","type":"verses","target":{"id":"f4b4fddf-989c-4fe2-a979-5e604731210d","title":null,"body":"और मनोरथ जो कोई लावै ।\n\nसोई अमित जीवन फल पावै ॥२८॥","translit_title":null,"body_translit":"aura manoratha jo koī lāvai .\n\nsoī amita jīvana phala pāvai ..28..","body_translit_meant":"One who comes to you with any longing or a sincere desire obtains the abundance of the manifested fruit, which remains undying throughout life.","body_meant":null},"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","lang":"en","verse_id":"be459a03-8948-4d09-88a1-460693996c7a"},{"id":"a329991b-7c97-443d-ad80-a78160ab20e2","type":"verses","target":{"id":"4b400751-0d24-43af-8460-8aa8e73f537d","title":null,"body":"भीम रूप धरि असुर सँहारे ।\n\nरामचन्द्र के काज सँवारे ॥१०॥","translit_title":null,"body_translit":"bhīma rūpa dhari asura sam̐hāre .\n\nrāmacandra ke kāja sam̐vāre ..10..","body_translit_meant":"Taking the massive form (like that of Bheema), you slaughtered the demons. This is how, you completed Lord Rama’s tasks, successfully.","body_meant":null},"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","lang":"en","verse_id":"df702f27-b10b-49fe-8ed3-8abc6bba6fd3"},{"id":"7a553e52-aa1e-46f7-a3f5-e0797b9452a2","type":"verses","target":{"id":"571bc4dd-920a-4298-a653-29fbdc4b583b","title":null,"body":"तुलसीदास सदा हरि चेरा ।\n\nकीजै नाथ हृदय महँ डेरा ॥४०॥","translit_title":null,"body_translit":"tulasīdāsa sadā hari cerā .\n\nkījai nātha hṛdaya maham̐ ḍerā ..40..","body_translit_meant":"O Lord Hanuman, may I always remain a servant, a devotee to Lord Sri Ram, says Tulsidas. And, may you always reside in my heart.","body_meant":null},"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","lang":"en","verse_id":"781359e2-d9be-445e-93fd-be4b3cd6e6c5"},{"id":"95450897-e910-4b0b-9de0-55251e22cbbd","type":"verses","target":{"id":"099a7265-27e9-4232-8fa1-2f999385577b","title":null,"body":"दुर्गम काज जगत के जेते ।\n\nसुगम अनुग्रह तुह्मरे तेते ॥२०॥","translit_title":null,"body_translit":"durgama kāja jagata ke jete .\n\nsugama anugraha tuhmare tete ..20..","body_translit_meant":"All difficult tasks of this world become easy, with your grace.","body_meant":null},"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","lang":"en","verse_id":"6cd4eb41-6f94-44a6-9017-695958404872"},{"id":"59aea9e8-994f-4b48-9fce-b26257c953a0","type":"verses","target":{"id":"d14751a5-8c51-4ab1-8115-846f07c3c503","title":null,"body":"जो यह पढ़ै हनुमान चालीसा ।\n\nहोय सिद्धि साखी गौरीसा ॥३९॥","translit_title":null,"body_translit":"jo yaha par̤hai hanumāna cālīsā .\n\nhoya siddhi sākhī gaurīsā ..39..","body_translit_meant":"One who reads and recites this Hanuman Chalisa, all his works get accomplished. Lord Shiva, himself, is the witness to it.","body_meant":null},"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","lang":"en","verse_id":"3bc5500b-11d9-4c25-bd49-e59a3f108438"},{"id":"b237e858-ca2f-4219-9a57-a6c84d1ab16d","type":"verses","target":{"id":"d694bcca-14d9-4d82-a232-418182384725","title":null,"body":"जो सत बार पाठ कर कोई ।\n\nछूटहि बन्दि महा सुख होई ॥३८॥","translit_title":null,"body_translit":"jo sata bāra pāṭha kara koī .\n\nchūṭahi bandi mahā sukha hoī ..38..","body_translit_meant":"One who recites this Chalisa a hundred times is released from all bondages and will attain great bliss.","body_meant":null},"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","lang":"en","verse_id":"10c0e5d1-a980-40a4-93c3-340125418909"},{"id":"735a97b2-b1cc-4400-a269-cde7b47e712d","type":"verses","target":{"id":"228c3e29-0638-4898-b7cb-973d1a3819c2","title":null,"body":"साधु सन्त के तुम रखवारे ।\n\nअसुर निकन्दन राम दुलारे ॥३०॥","translit_title":null,"body_translit":"sādhu santa ke tuma rakhavāre .\n\nasura nikandana rāma dulāre ..30..","body_translit_meant":"You are the guardian of saints and sages; the destroyer of demons and adored by Lord Rama.","body_meant":null},"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","lang":"en","verse_id":"29619bbe-dce7-43f9-880b-2b7722f882ad"},{"id":"74b13089-002b-40d1-97d0-58e7bfc2a796","type":"verses","target":{"id":"40fe718f-2b68-4d76-85d0-1da0e4ed9189","title":null,"body":"श्रीगुरु चरन सरोज रज निज मनु मुकुरु सुधारि ।\n\nबरनउँ रघुबर बिमल जसु जो दायकु फल चारि ॥","translit_title":null,"body_translit":"śrīguru carana saroja raja nija manu mukuru sudhāri .\n\nbaranaüm̐ raghubara bimala jasu jo dāyaku phala cāri ..","body_translit_meant":"Having polished the mirror of my heart with the dust of my Guru’s lotus feet, I recite the divine fame of the greatest king of Raghukul dynasty, which bestows us with the fruit of all the four efforts.","body_meant":null},"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","lang":"en","verse_id":"7d9d588a-34fc-4f19-b974-fc32b49b6a61"},{"id":"376f51fd-36f2-4e32-9386-c608057c0651","type":"verses","target":{"id":"9f4ab1a3-25b6-4eff-812c-90dcdfbd871e","title":null,"body":"सूक्ष्म रूप धरि सियहिं दिखावा ।\n\nबिकट रूप धरि लङ्क जरावा ॥९॥","translit_title":null,"body_translit":"sūkṣma rūpa dhari siyahiṃ dikhāvā .\n\nbikaṭa rūpa dhari laṅka jarāvā ..9..","body_translit_meant":"Taking the subtle form, you appeared in front of Mother Sita. And, taking the formidable form, you burnt the Lanka (Ravana’s kingdom).","body_meant":null},"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","lang":"en","verse_id":"9a61968f-55d8-4934-b618-af1e70a64aa7"},{"id":"b42733bc-4c9f-4c4c-b266-3cc891d4e743","type":"verses","target":{"id":"41859170-f2a0-4ae3-ab64-b7b6ad8e82a8","title":null,"body":"प्रभु मुद्रिका मेलि मुख माहीं ।\n\nजलधि लाँघि गये अचरज नाहीं ॥१९॥","translit_title":null,"body_translit":"prabhu mudrikā meli mukha māhīṃ .\n\njaladhi lām̐ghi gaye acaraja nāhīṃ ..19..","body_translit_meant":"Keeping the ring in your mouth, which was given to you by Lord Rama, you crossed over the ocean, to no astonishment, whatsoever.","body_meant":null},"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","lang":"en","verse_id":"5739ba57-099b-4c91-b944-e5d8527beba3"},{"id":"efb1ee0d-a334-4fd4-8ebb-b7f9a8971260","type":"verses","target":{"id":"a0afdd0a-8534-469f-b102-1c5172491aad","title":null,"body":"चारों जुग परताप तुह्मारा ।\n\nहै परसिद्ध जगत उजियारा ॥२९॥","translit_title":null,"body_translit":"cāroṃ juga paratāpa tuhmārā .\n\nhai parasiddha jagata ujiyārā ..29..","body_translit_meant":"Your splendor fills all the four ages. And, your glory is renowned throughout the world.","body_meant":null},"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","lang":"en","verse_id":"22a61863-a1e9-4c1b-88d3-075ea036dae5"},{"id":"17bcd053-ee03-4b48-b17b-4575a7a419f4","type":"verses","target":{"id":"98d0b0ef-bd00-4df3-94d2-755154ffae5c","title":null,"body":"महाबीर बिक्रम बजरङ्गी ।\n\nकुमति निवार सुमति के सङ्गी ॥३॥","translit_title":null,"body_translit":"mahābīra bikrama bajaraṅgī .\n\nkumati nivāra sumati ke saṅgī ..3..","body_translit_meant":"Great hero, you are as mighty as a thunderbolt. you remove evil intellect and are the companion of those having good ones.","body_meant":null},"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","lang":"en","verse_id":"48d3cef3-7462-44a7-90ff-739178515994"},{"id":"ea6725c1-1261-42eb-82db-e7614188a809","type":"verses","target":{"id":"881657b2-b80e-4616-a7e9-52c4f6d28637","title":null,"body":"सहस बदन तुह्मारो जस गावैं ।\n\nअस कहि श्रीपति कण्ठ लगावैं ॥१३॥","translit_title":null,"body_translit":"sahasa badana tuhmāro jasa gāvaiṃ .\n\nasa kahi śrīpati kaṇṭha lagāvaiṃ ..13..","body_translit_meant":"Saying this, Lord Rama drew you to himself and embraced you. Sages like Sanaka, Gods like Brahma and sages like Narada and even the thousand-mouthed serpent sing your fame!","body_meant":null},"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","lang":"en","verse_id":"73c7b613-0557-4791-b48d-b6953d262e9e"},{"id":"c48539d3-c2e6-4feb-a5d9-987932e63187","type":"verses","target":{"id":"5349d2cc-9e37-4f02-990b-c5ae7d19690d","title":null,"body":"आपन तेज सह्मारो आपै ।\n\nतीनों लोक हाँक तें काँपै ॥२३॥","translit_title":null,"body_translit":"āpana teja sahmāro āpai .\n\ntīnoṃ loka hām̐ka teṃ kām̐pai ..23..","body_translit_meant":"You alone can withstand your magnificence. All the three worlds start trembling at one roar of yours.","body_meant":null},"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","lang":"en","verse_id":"3884f287-7adc-4858-8320-c1604441e952"},{"id":"8cfb8210-c066-4fcc-9761-9d35cce14d4e","type":"verses","target":{"id":"20210370-ec30-4d96-9bdf-a173fdc64eaf","title":null,"body":"॥चौपाई॥\n\nजय हनुमान ज्ञान गुन सागर ।\n\nजय कपीस तिहुँ लोक उजागर ॥१॥","translit_title":null,"body_translit":"jaya hanumāna jñāna guna sāgara .\n\njaya kapīsa tihum̐ loka ujāgara ..1..","body_translit_meant":"Victory to Lord Hanuman, the ocean of wisdom and virtue. Victory to the Lord who is supreme among the monkeys, illuminator of the three worlds.","body_meant":null},"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","lang":"en","verse_id":"1ca1a37c-0b45-4c38-bb67-f5e541734ba3"},{"id":"71f11fd5-592a-4e6a-9f38-f3263ec57c1d","type":"verses","target":{"id":"b493f467-f147-4f2d-8b4c-8b43596f8ae9","title":null,"body":"लाय सञ्जीवन लखन जियाये ।\n\nश्रीरघुबीर हरषि उर लाये ॥११॥","translit_title":null,"body_translit":"lāya sañjīvana lakhana jiyāye .\n\nśrīraghubīra haraṣi ura lāye ..11..","body_translit_meant":"Bringing the magic-herb (sanjivani), you revived Lord Laxmana.","body_meant":null},"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","lang":"en","verse_id":"724537e1-bd29-4472-abf3-61d0c9210333"},{"id":"2dbddf28-921e-4afa-b30d-763a1ad23ae8","type":"verses","target":{"id":"2a3ade26-7d0f-463b-a53b-695306dac0f4","title":null,"body":"राम दुआरे तुम रखवारे ।\n\nहोत न आज्ञा बिनु पैसारे ॥२१॥","translit_title":null,"body_translit":"rāma duāre tuma rakhavāre .\n\nhota na ājñā binu paisāre ..21..","body_translit_meant":"You are the guardian at Lord Rama’s door. Nobody can move forward without your permission which means that Lord Rama’s darshans (to get the sight of) are possible only with your blessings.","body_meant":null},"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","lang":"en","verse_id":"8f3f3932-62c2-4057-bb3e-a16e72e78c32"},{"id":"952d2801-b978-4866-bd60-5e139ecade38","type":"verses","target":{"id":"e1bf1d20-ec04-4001-b163-6e34c0cf51a6","title":null,"body":"अष्टसिद्धि नौ निधि के दाता ।\n\nअस बर दीन जानकी माता ॥३१॥","translit_title":null,"body_translit":"aṣṭasiddhi nau nidhi ke dātā .\n\nasa bara dīna jānakī mātā ..31..","body_translit_meant":"You have been blessed by Mother Janaki to give boon further, to the deserving ones, wherein you can grant the siddhis (eight different powers) and the nidhis (nine different kinds of wealth).","body_meant":null},"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","lang":"en","verse_id":"d3050e93-4cfd-4359-9080-a7c10f357a95"},{"id":"501a5700-a4a8-4693-8ec1-13cdac9ed91c","type":"verses","target":{"id":"5f21ddb8-925d-4ca4-8501-079577b3543f","title":null,"body":"॥दोहा॥\n\nपवनतनय सङ्कट हरन मङ्गल मूरति रूप ।\n\nराम लखन सीता सहित हृदय बसहु सुर भूप ॥","translit_title":null,"body_translit":"pavanatanaya saṅkaṭa harana maṅgala mūrati rūpa .\n\nrāma lakhana sītā sahita hṛdaya basahu sura bhūpa ..","body_translit_meant":"O the Son of Wind, you are the destroyer of all sorrows. you are the embodiment of fortune and prosperity.\n\nWith Lord Rama, Laxmana and Mother Sita, dwell in my heart, always.","body_meant":null},"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","lang":"en","verse_id":"590e9499-6a23-4639-86d3-7cee87ed9e33"},{"id":"6751b0bd-ee8f-4032-997c-b7278c47cac5","type":"verses","target":{"id":"1435297c-950c-4363-bbd4-6f595c82d78b","title":null,"body":"राम रसायन तुह्मरे पासा ।\n\nसदा रहो रघुपति के दासा ॥३२॥","translit_title":null,"body_translit":"rāma rasāyana tuhmare pāsā .\n\nsadā raho raghupati ke dāsā ..32..","body_translit_meant":"You have the essence of Ram bhakti, may you always remain the humble and devoted servant of Raghupati.","body_meant":null},"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","lang":"en","verse_id":"3d1a9d0f-e3bb-48e9-95e7-b29add4da464"},{"id":"fa43e3ca-3bc5-4bf7-8ca7-1c667f8182b3","type":"verses","target":{"id":"497b171b-7522-4008-8ced-f173360d5779","title":null,"body":"तुह्मरे भजन राम को पावै ।\n\nजनम जनम के दुख बिसरावै ॥३३॥","translit_title":null,"body_translit":"tuhmare bhajana rāma ko pāvai .\n\njanama janama ke dukha bisarāvai ..33..","body_translit_meant":"When one sings your praise, your name, he gets to meet Lord Rama and finds relief from the sorrows of many lifetimes.","body_meant":null},"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","lang":"en","verse_id":"7426a349-a5a3-4c69-ba47-029972a27a34"},{"id":"e4ea9934-c4a4-4775-b60a-9839211dcbea","type":"verses","target":{"id":"01caaed7-2a88-468e-a5f6-1bfc25344440","title":null,"body":"राम दूत अतुलित बल धामा ।\n\nअञ्जनि-पुत्र पवनसुत नामा ॥२॥","translit_title":null,"body_translit":"rāma dūta atulita bala dhāmā .\n\nañjani-putra pavanasuta nāmā ..2..","body_translit_meant":"you are Lord Rama’s emissary,‌ the abode of matchless power, Mother Anjani’s son and also popular as the ‘Son of the Wind’.","body_meant":null},"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","lang":"en","verse_id":"5e016d02-6e48-4ca1-970f-37fdb7fa5c74"},{"id":"2dffddbd-f9b5-4cf5-aaa6-89e0d30b589b","type":"verses","target":{"id":"b4f28001-6495-4669-a9fc-4a16e19b4a8a","title":null,"body":"सङ्कर सुवन केसरीनन्दन ।\n\nतेज प्रताप महा जग बन्दन ॥६॥","translit_title":null,"body_translit":"saṅkara suvana kesarīnandana .\n\nteja pratāpa mahā jaga bandana ..6..","body_translit_meant":"You are the embodiment of Lord Shiva and vanar-raj Kesari’s son. There is no limit or end to your glory, your magnificence. The whole universe worships you.","body_meant":null},"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","lang":"en","verse_id":"43904bde-7edb-459f-b0ef-a79376136773"},{"id":"7ab520e0-7946-4bf0-81ca-0f53ad9dc909","type":"verses","target":{"id":"b0db3340-b532-43d9-a14d-18a9406bd3d8","title":null,"body":"तुम उपकार सुग्रीवहिं कीह्ना ।\n\nराम मिलाय राज पद दीह्ना ॥१६॥","translit_title":null,"body_translit":"tuma upakāra sugrīvahiṃ kīhnā .\n\nrāma milāya rāja pada dīhnā ..16..","body_translit_meant":"You helped Sugriva by introducing him to Lord Rama and regaining his crown. Therefore, you gave him the Kingship (the dignity of being called a king).","body_meant":null},"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","lang":"en","verse_id":"0e09590b-482b-4c17-921a-f132ca77f409"},{"id":"4abbf41d-8623-4ae1-bc72-ffdf3e1d99a6","type":"verses","target":{"id":"78e167df-fb5e-45e7-95c3-4ee94c7b76b2","title":null,"body":"सङ्कट तें हनुमान छुड़ावै ।\n\nमन क्रम बचन ध्यान जो लावै ॥२६॥","translit_title":null,"body_translit":"saṅkaṭa teṃ hanumāna chur̤āvai .\n\nmana krama bacana dhyāna jo lāvai ..26..","body_translit_meant":"Whoever meditates upon or worships you with thought, word, and deed, gets freedom from all kinds of crisis and affliction.","body_meant":null},"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","lang":"en","verse_id":"eaf587e3-ab71-4300-8724-81de3c26e132"},{"id":"64a59b50-0c7f-4aef-8261-e4195973dcf6","type":"verses","target":{"id":"47b23309-79a2-48e3-ac5b-5238a16e5a3b","title":null,"body":"सङ्कट कटै मिटै सब पीरा ।\n\nजो सुमिरै हनुमत बलबीरा ॥३६॥","translit_title":null,"body_translit":"saṅkaṭa kaṭai miṭai saba pīrā .\n\njo sumirai hanumata balabīrā ..36..","body_translit_meant":"All troubles cease for the one who remembers the powerful lord, Lord Hanuman and all his pains also come to an end.","body_meant":null},"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","lang":"en","verse_id":"e3426478-9c02-448e-a809-12d83c159876"},{"id":"051436c2-4407-4717-add0-d7a9246046ad","type":"verses","target":{"id":"0f63934c-9564-4b98-8050-91eaedc4e4f9","title":null,"body":"रघुपति कीह्नी बहुत बड़ाई ।\n\nतुम मम प्रिय भरतहि सम भाई ॥१२॥","translit_title":null,"body_translit":"raghupati kīhnī bahuta bar̤āī .\n\ntuma mama priya bharatahi sama bhāī ..12..","body_translit_meant":"Raghupati, Lord Rama praised you greatly and overflowing in gratitude, said that you are a dear brother to him just as Bharat is.","body_meant":null},"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","lang":"en","verse_id":"5f1bb06e-40e5-4ecb-8f36-4c84456c9ce8"},{"id":"36352002-bd93-4e80-9bd1-b35cb8ed05f9","type":"verses","target":{"id":"018bdb10-5d56-4753-b28a-466279804b7d","title":null,"body":"सब सुख लहै तुह्मारी सरना ।\n\nतुम रच्छक काहू को डर ना ॥२२॥","translit_title":null,"body_translit":"saba sukha lahai tuhmārī saranā .\n\ntuma racchaka kāhū ko ḍara nā ..22..","body_translit_meant":"Those who take refuge in you, find all the comforts and happiness. When we have a protector like you, we do not need to get scared of anybody or anything.","body_meant":null},"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","lang":"en","verse_id":"7bf7fb11-d3c8-4565-8d47-a27ea5ffac6a"},{"id":"459138e7-8275-4bc2-96e6-495a793d6bba","type":"verses","target":{"id":"105f1b3a-2c1a-4297-a653-e33509fe5457","title":null,"body":"हाथ बज्र औ ध्वजा बिराजै ।\n\nकाँधे मूँज जनेउ साजै ॥५॥","translit_title":null,"body_translit":"hātha bajra au dhvajā birājai .\n\nkām̐dhe mūm̐ja janeu sājai ..5..","body_translit_meant":"In your hands, shine a mace and a flag of righteousness. A sacred thread adorns your right shoulder.","body_meant":null},"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","lang":"en","verse_id":"20355a80-2b36-4878-9a37-57a3af761cc1"},{"id":"dd683f55-fcf5-4aa1-8d7c-09b4a0b823a6","type":"verses","target":{"id":"10b409b0-d6f2-49b4-8338-8c2fca225621","title":null,"body":"जम कुबेर दिगपाल जहाँ ते ।\n\nकबि कोबिद कहि सके कहाँ ते ॥१५॥","translit_title":null,"body_translit":"jama kubera digapāla jahām̐ te .\n\nkabi kobida kahi sake kahām̐ te ..15..","body_translit_meant":"Yama, Kubera and the guardians of the four quarters; poets and scholars – none can express your glory.","body_meant":null},"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","lang":"en","verse_id":"ec4fc18b-bc77-446b-9cd2-b1ac4e76914a"},{"id":"326d6158-e61c-424d-8679-1db4a248e70e","type":"verses","target":{"id":"18b0c324-6f7e-4d80-bbf8-ff4908fe20bd","title":null,"body":"नासै रोग हरै सब पीरा ।\n\nजपत निरन्तर हनुमत बीरा ॥२५॥","translit_title":null,"body_translit":"nāsai roga harai saba pīrā .\n\njapata nirantara hanumata bīrā ..25..","body_translit_meant":"O Hanuman! All diseases and all kinds of pain get eradicated when one recites or chants your name. Therefore, chanting your name regularly is considered to be very significant.","body_meant":null},"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","lang":"en","verse_id":"10659d92-a997-4643-816b-b4804269bdb3"},{"id":"6a0faec3-4849-4f16-a40b-f345e6463902","type":"verses","target":{"id":"f2a074f7-f636-4aa8-9c6e-6c86473ba568","title":null,"body":"और देवता चित्त न धरई ।\n\nहनुमत सेइ सर्ब सुख करई ॥३५॥","translit_title":null,"body_translit":"aura devatā citta na dharaī .\n\nhanumata sei sarba sukha karaī ..35..","body_translit_meant":"It is not needed to serve any other deity or god. Service to Lord Hanuman gives all the comforts.","body_meant":null},"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","lang":"en","verse_id":"aabc2359-c3ba-414d-a239-21dc807d4f02"},{"id":"71fe13a4-094f-4d56-994f-fd14962d0638","type":"verses","target":{"id":"65fb24b2-ec90-4875-96d0-e63483da2eaa","title":null,"body":"बुद्धिहीन तनु जानिके सुमिरौं पवन-कुमार ।\n\nबल बुधि बिद्या देहु मोहिं हरहु कलेस बिकार ॥","translit_title":null,"body_translit":"buddhihīna tanu jānike sumirauṃ pavana-kumāra .\n\nbala budhi bidyā dehu mohiṃ harahu kalesa bikāra ..","body_translit_meant":"Knowing that this mind of mine has less intelligence, I remember the ‘Son of Wind’ who, granting me strength, wisdom and all kinds of knowledge, removes all my suffering and shortcomings.","body_meant":null},"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","lang":"en","verse_id":"5c2c9d91-3843-4c37-a3a1-b0771f8d2b46"},{"id":"5d5b3084-56ee-43a9-965f-27fdb82955d2","type":"verses","target":{"id":"b30027d2-7cdb-46b6-a33b-d1b558a4ffaa","title":null,"body":"कञ्चन बरन बिराज सुबेसा ।\n\nकानन कुण्डल कुञ्चित केसा ॥४॥","translit_title":null,"body_translit":"kañcana barana birāja subesā .\n\nkānana kuṇḍala kuñcita kesā ..4..","body_translit_meant":"your skin is golden in color and you are adorned with beautiful clothes. you have adorning earrings in your ears and your hair is curly and thick.","body_meant":null},"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","lang":"en","verse_id":"34cf99d3-254d-4c70-86c2-7ee49551d2c6"},{"id":"82fbd929-5074-4bc0-b742-932b8e717b00","type":"verses","target":{"id":"d181ceb9-b20d-4bca-81c3-f11fa5f5b448","title":null,"body":"सनकादिक ब्रह्मादि मुनीसा ।\n\nनारद सारद सहित अहीसा ॥१४॥","translit_title":null,"body_translit":"sanakādika brahmādi munīsā .\n\nnārada sārada sahita ahīsā ..14..","body_translit_meant":"Sanak, Sanandan and the other Rishis and great saints; Brahma – the god, Narada, Saraswati – the Mother Divine and the King of serpents sing your glory.","body_meant":null},"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","lang":"en","verse_id":"9dffe22e-18ff-42a7-866d-788367fd7cf8"},{"id":"624ddfc0-9d78-49ef-9788-f88140cb44ba","type":"verses","target":{"id":"6159f87e-a32f-41e4-b066-7e1ad3be7198","title":null,"body":"भूत पिसाच निकट नहिं आवै ।\n\nमहाबीर जब नाम सुनावै ॥२४॥","translit_title":null,"body_translit":"bhūta pisāca nikaṭa nahiṃ āvai .\n\nmahābīra jaba nāma sunāvai ..24..","body_translit_meant":"O Mahaveer! No ghosts or evil spirits come near the ones who remember your name. Therefore, just remembering your name does everything!","body_meant":null},"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","lang":"en","verse_id":"a341fd1a-51e5-4dd2-af9c-5cb2ab3735a8"},{"id":"b7661c2b-4bd7-4786-9bd5-434ea0cabeb0","type":"verses","target":{"id":"11f6188e-fc70-48b6-ac48-569a6ddc71e1","title":null,"body":"अन्त काल रघुबर पुर जाई ।\n\nजहाँ जन्म हरिभक्त कहाई ॥३४॥","translit_title":null,"body_translit":"anta kāla raghubara pura jāī .\n\njahām̐ janma haribhakta kahāī ..34..","body_translit_meant":"By your grace, one will go to the immortal abode of Lord Rama after death and remain devoted to him.","body_meant":null},"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","lang":"en","verse_id":"211ef76b-7d16-4ba6-ae3e-4ad9168776d9"},{"id":"4be18305-b383-42ad-be9e-e3e9665bc4fa","type":"chapters","target":{"id":"b7b9358f-d423-46ad-8691-4ad05d836206","title":"Hanuman Chalisa","body":"The Hanuman Chalisa, composed by Goswami Tulsidas, is a 40-verse hymn dedicated to Lord Hanuman, highlighting his unwavering devotion to Lord Rama. It is a testament to Hanuman's strength, wisdom, and courage, as well as his role in Lord Rama's epic battles against evil. Reciting this hymn is believed to bestow blessings and protection from Hanuman, fostering spiritual growth and devotion to Lord Rama.","translit_title":null,"body_translit":null,"body_translit_meant":null,"body_meant":null},"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","chapter_no":1,"lang":"en"},{"id":"ad04803b-fb3e-4bbd-9555-a4b798d65b42","type":"verses","target":{"id":"8f3f47bd-fdc9-4ef6-97e0-2cb624724593","title":null,"body":"बिद्यावान गुनी अति चातुर ।\n\nराम काज करिबे को आतुर ॥७॥","translit_title":null,"body_translit":"bidyāvāna gunī ati cātura .\n\nrāma kāja karibe ko ātura ..7..","body_translit_meant":"You are the wisest of the wise, virtuous and (morally) clever. You are always eager to do Lord Rama’s works.","body_meant":null},"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","lang":"en","verse_id":"c2bca16a-0551-43e2-8691-2a3ef05cd02e"},{"id":"8ac1c93a-9b2e-4ca7-8e7a-b165b54f0bbe","type":"verses","target":{"id":"0e7130be-4a07-415c-98de-fcf13f6184ac","title":null,"body":"तुह्मरो मन्त्र बिभीषन माना ।\n\nलङ्केस्वर भए सब जग जाना ॥१७॥","translit_title":null,"body_translit":"tuhmaro mantra bibhīṣana mānā .\n\nlaṅkesvara bhae saba jaga jānā ..17..","body_translit_meant":"Likewise, complying with your preachings, even Vibhishana became the King of Lanka.","body_meant":null},"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","lang":"en","verse_id":"0eef65de-3568-4400-bf1f-ab79528b558a"},{"id":"2a8b7284-433b-414a-9420-5c8728dca98c","type":"verses","target":{"id":"5fbb493b-2866-4426-b6bd-b9c6e4f9bbed","title":null,"body":"सब पर राम तपस्वी राजा ।\n\nतिन के काज सकल तुम साजा ॥२७॥","translit_title":null,"body_translit":"saba para rāma tapasvī rājā .\n\ntina ke kāja sakala tuma sājā ..27..","body_translit_meant":"Lord Rama is the greatest ascetic amongst all the kings. But, it’s only you who carried out all the tasks of Lord Sri Rama.","body_meant":null},"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","lang":"en","verse_id":"1eb31077-ca41-4555-b5bf-055cfb48bbea"},{"id":"38b18c0c-25ff-4ba8-87c2-9fd55aa295c7","type":"verses","target":{"id":"f9f6231f-49e8-4f6e-8843-7f80a5bc70b7","title":null,"body":"जय जय जय हनुमान गोसाईं ।\n\nकृपा करहु गुरुदेव की नाईं ॥३७॥","translit_title":null,"body_translit":"jaya jaya jaya hanumāna gosāīṃ .\n\nkṛpā karahu gurudeva kī nāīṃ ..37..","body_translit_meant":"O Lord Hanuman! Praises and glory to you O mighty lord, please bestow your grace as our supreme guru.","body_meant":null},"source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","lang":"en","verse_id":"c60856d1-96ec-45a8-995a-f6c9ece0f4c5"}],"inserted_at":"2024-03-04T05:42:11Z","updated_at":"2024-03-04T05:42:11Z","voices":[{"id":"b1db78be-0bdf-443c-afdf-3221bac38758","source_id":"63918acd-77a9-451a-b8d1-8d5b73208eae","chapter_no":1,"lang":"sa","duration":581721,"inserted_at":"2024-03-04T05:42:11Z","updated_at":"2024-03-04T05:42:11Z"}]}] \ No newline at end of file diff --git a/vyasa_blog/.dockerignore b/vyasa_blog/.dockerignore new file mode 100644 index 00000000..61a73933 --- /dev/null +++ b/vyasa_blog/.dockerignore @@ -0,0 +1,45 @@ +# This file excludes paths from the Docker build context. +# +# By default, Docker's build context includes all files (and folders) in the +# current directory. Even if a file isn't copied into the container it is still sent to +# the Docker daemon. +# +# There are multiple reasons to exclude files from the build context: +# +# 1. Prevent nested folders from being copied into the container (ex: exclude +# /assets/node_modules when copying /assets) +# 2. Reduce the size of the build context and improve build time (ex. /build, /deps, /doc) +# 3. Avoid sending files containing sensitive information +# +# More information on using .dockerignore is available here: +# https://docs.docker.com/engine/reference/builder/#dockerignore-file + +.dockerignore + +# Ignore git, but keep git HEAD and refs to access current commit hash if needed: +# +# $ cat .git/HEAD | awk '{print ".git/"$2}' | xargs cat +# d0b8727759e1e0e7aa3d41707d12376e373d5ecc +.git +!.git/HEAD +!.git/refs + +# Common development/test artifacts +/cover/ +/doc/ +/test/ +/tmp/ +.elixir_ls + +# Mix artifacts +/_build/ +/deps/ +*.ez + +# Generated on crash by the VM +erl_crash.dump + +# Static artifacts - These should be fetched and built inside the Docker image +/assets/node_modules/ +/priv/static/assets/ +/priv/static/cache_manifest.json From a6841ff2938b8ed50de214e64b6a819f5bff6510 Mon Sep 17 00:00:00 2001 From: Ritesh Kumar Date: Mon, 23 Sep 2024 21:43:19 +0800 Subject: [PATCH 129/130] Cleanup lib/vyasa --- config/config.exs | 7 +- config/dev.exs | 5 +- config/prod.exs | 3 +- lib/utils/struct.ex | 16 +- lib/vyasa/adapters/README.org | 7 + lib/vyasa/corpus/engine/fallback.ex | 9 +- lib/vyasa/corpus/engine/shlokam.ex | 86 +-- lib/vyasa/corpus/gita.ex | 59 +- lib/vyasa/corpus/migrator/dump.ex | 8 +- lib/vyasa/draft.ex | 1 + lib/vyasa/medium/event.ex | 2 +- lib/vyasa/medium/ext/s3client.ex | 2 +- lib/vyasa/medium/store.ex | 34 +- lib/vyasa/medium/video.ex | 2 +- lib/vyasa/medium/writer.ex | 41 +- .../parser/{ua_parser.ex => user_agent.ex} | 2 +- lib/vyasa/repo/filter.ex | 2 - lib/vyasa/repo/paginated.ex | 166 +++-- lib/vyasa/sangh.ex | 157 +++-- lib/vyasa/sangh/comments.ex | 83 --- lib/vyasa/sangh/mark.ex | 7 +- lib/vyasa/sangh/session.ex | 15 +- lib/vyasa/sangh/sheaf.ex | 96 +++ lib/vyasa/written.ex | 8 +- lib/vyasa/written/chapter.ex | 10 +- lib/vyasa/written/text.ex | 2 + lib/vyasa/written/translation.ex | 36 +- lib/vyasa/written/verse.ex | 1 - lib/vyasa_cli.ex | 11 +- lib/vyasa_web/admin.ex | 48 +- .../components/contexts/read/verses.ex | 1 - lib/vyasa_web/components/draft_matrix.ex | 42 +- lib/vyasa_web/components/layouts.ex | 1 - .../components/layouts/app.html.heex | 12 +- .../layouts/display_manager.html.heex | 2 +- .../components/layouts/root.html.heex | 8 +- lib/vyasa_web/components/youtube_player.ex | 46 +- .../controllers/error_html/404.html.heex | 654 +++++++++--------- .../controllers/fallback_controller.ex | 2 +- .../controllers/og_image_controller.ex | 11 +- .../controllers/page_html/home.html.heex | 626 +++++++++-------- lib/vyasa_web/live/hooks/user_agent_hook.ex | 2 +- lib/vyasa_web/live/media_live/media_bridge.ex | 11 +- .../live/media_live/media_bridge.html.heex | 62 +- .../live/mode_live/mediator.html.heex | 190 ++--- lib/vyasa_web/session.ex | 33 +- ...121234321_create_tables_for_gita_clone.exs | 21 +- .../20240131122233_gen_media_events.exs | 16 +- .../20240151122233_create_sangh_sessions.exs | 20 +- .../20240831122233_create_marks.exs | 4 +- priv/repo/seeds.exs | 4 +- test/vyasa/sangh_test.exs | 2 - 52 files changed, 1427 insertions(+), 1269 deletions(-) create mode 100644 lib/vyasa/adapters/README.org rename lib/vyasa/parser/{ua_parser.ex => user_agent.ex} (95%) delete mode 100644 lib/vyasa/sangh/comments.ex create mode 100644 lib/vyasa/sangh/sheaf.ex diff --git a/config/config.exs b/config/config.exs index 04108797..bb8e4e69 100644 --- a/config/config.exs +++ b/config/config.exs @@ -31,7 +31,7 @@ config :vyasa, VyasaWeb.Endpoint, # at the `config/runtime.exs`. config :vyasa, Vyasa.Mailer, adapter: Swoosh.Adapters.Local -#S3 Object Storage Services +# S3 Object Storage Services config :ex_aws, access_key_id: [{:system, "AWS_ACCESS_KEY_ID"}, :instance_role], secret_access_key: [{:system, "AWS_SECRET_ACCESS_KEY"}, :instance_role], @@ -47,7 +47,10 @@ config :esbuild, args: ~w(js/app.js --bundle --target=es2017 --outdir=../priv/static/assets --external:/fonts/* --external:/images/*), cd: Path.expand("../assets", __DIR__), - env: %{"NODE_PATH" => "#{Path.expand("../deps", __DIR__)}:#{Path.expand("../assets/vendor", __DIR__)}"} + env: %{ + "NODE_PATH" => + "#{Path.expand("../deps", __DIR__)}:#{Path.expand("../assets/vendor", __DIR__)}" + } ] # Configure tailwind (the version is required) diff --git a/config/dev.exs b/config/dev.exs index a1d3f71f..a2da328e 100644 --- a/config/dev.exs +++ b/config/dev.exs @@ -37,7 +37,8 @@ config :vyasa, VyasaWeb.Endpoint, debug_errors: true, secret_key_base: "TSFFKfQoGKCAjI5yxwt9DmxwnJg1U7CnuCsxpWjr+DqXs8EavSxtO3l3wk2PquSW", watchers: [ - esbuild: {Esbuild, :install_and_run, [:default, ~w(--sourcemap=inline --watch --loader:.ttf=file)]}, + esbuild: + {Esbuild, :install_and_run, [:default, ~w(--sourcemap=inline --watch --loader:.ttf=file)]}, tailwind: {Tailwind, :install_and_run, [:default, ~w(--watch)]} ] @@ -64,7 +65,7 @@ config :vyasa, VyasaWeb.Endpoint, # configured to run both http and https servers on # different ports. # -#config :ssl, cacertfile: 'priv/cacerts.pem' +# config :ssl, cacertfile: 'priv/cacerts.pem' # Watch static and templates for browser reloading. config :vyasa, VyasaWeb.Endpoint, diff --git a/config/prod.exs b/config/prod.exs index 940e53be..8b7cccf5 100644 --- a/config/prod.exs +++ b/config/prod.exs @@ -10,7 +10,8 @@ config :vyasa, VyasaWeb.Endpoint, force_ssl: [ host: nil, rewrite_on: [:x_forwarded_port, :x_forwarded_proto], - hsts: false] + hsts: false + ] # Configures Swoosh API Client config :swoosh, api_client: Swoosh.ApiClient.Finch, finch_name: Vyasa.Finch diff --git a/lib/utils/struct.ex b/lib/utils/struct.ex index e866f364..3e6ba54e 100644 --- a/lib/utils/struct.ex +++ b/lib/utils/struct.ex @@ -7,18 +7,20 @@ defmodule Utils.Struct do """ def get_in(struct, keys) when is_list(keys) do do_get_in(struct, keys) - end + end - defp do_get_in(nil, _keys), do: nil - defp do_get_in(value, []), do: value - defp do_get_in(map, [key | rest_keys]) when is_map(map) do + defp do_get_in(nil, _keys), do: nil + defp do_get_in(value, []), do: value + + defp do_get_in(map, [key | rest_keys]) when is_map(map) do map |> Map.get(key) |> do_get_in(rest_keys) - end - defp do_get_in(struct, [key | rest_keys]) do + end + + defp do_get_in(struct, [key | rest_keys]) do struct |> Map.get(key) |> do_get_in(rest_keys) - end + end end diff --git a/lib/vyasa/adapters/README.org b/lib/vyasa/adapters/README.org new file mode 100644 index 00000000..14f2aab8 --- /dev/null +++ b/lib/vyasa/adapters/README.org @@ -0,0 +1,7 @@ +#+title: Readme + +* Purpose +Adapters are modules that align to the [[https://refactoring.guru/design-patterns/adapter]["Adapter" structural pattern]]. +It's not necessary that they must interface to an external service or anything. + +Currently only Binding module satisfies this and it's because it serves as a glue between different structs. diff --git a/lib/vyasa/corpus/engine/fallback.ex b/lib/vyasa/corpus/engine/fallback.ex index a926c218..b0b06bcc 100644 --- a/lib/vyasa/corpus/engine/fallback.ex +++ b/lib/vyasa/corpus/engine/fallback.ex @@ -2,7 +2,7 @@ defmodule Vyasa.Corpus.Engine.Fallback do @url "https://archive.org/wayback/available?url=" def run(path) do - #storage opts + # storage opts @url |> fetch_url(path) |> IO.inspect() @@ -11,13 +11,13 @@ defmodule Vyasa.Corpus.Engine.Fallback do def fetch_url(url, path \\ "") do case Req.get(url <> path, conn_opts()) do - {:ok, %{body: %{"archived_snapshots" => - %{"closest" => - %{"url" => url}}}}} -> + {:ok, %{body: %{"archived_snapshots" => %{"closest" => %{"url" => url}}}}} -> {:ok, url} + {:ok, %{body: %{"archived_snapshots" => %{}}}} -> IO.inspect("Not Found", label: :fallback_err) {:err, :not_found} + {:error, reason} -> IO.inspect(reason, label: :fallback_err) {:err, :fallback_failed} @@ -42,5 +42,4 @@ defmodule Vyasa.Corpus.Engine.Fallback do end defp conn_opts(), do: [connect_options: [transport_opts: [cacerts: :public_key.cacerts_get()]]] - end diff --git a/lib/vyasa/corpus/engine/shlokam.ex b/lib/vyasa/corpus/engine/shlokam.ex index 7c461d97..9eb311a2 100644 --- a/lib/vyasa/corpus/engine/shlokam.ex +++ b/lib/vyasa/corpus/engine/shlokam.ex @@ -3,7 +3,7 @@ defmodule Vyasa.Corpus.Engine.Shlokam do alias Vyasa.Corpus.Engine.Fallback def run(path, opts \\ []) do - #storage opts + # storage opts @url |> fetch_tree(path) |> scrape() @@ -11,11 +11,15 @@ defmodule Vyasa.Corpus.Engine.Shlokam do end def fetch_tree(url, path \\ "") do - case Req.get!(url <> path, connect_options: [transport_opts: [cacerts: :public_key.cacerts_get()]]) do + case Req.get!(url <> path, + connect_options: [transport_opts: [cacerts: :public_key.cacerts_get()]] + ) do %{body: body} -> - {:ok, body - |> Floki.parse_document!() - |> Floki.find(".uncode_text_column")} + {:ok, + body + |> Floki.parse_document!() + |> Floki.find(".uncode_text_column")} + %{status: 301, headers: header} -> header |> Keyword.get(:location) @@ -33,51 +37,52 @@ defmodule Vyasa.Corpus.Engine.Shlokam do {"div", _, [{"h3", [], ["Description"]} | para]}, acc -> # IO.inspect(rem, label: "div") desc = - para - |> Floki.text() + para + |> Floki.text() - %{acc | description: desc} + %{acc | description: desc} - {"div", _, [{"h3", _, _} = h3_tree]}, acc -> + {"div", _, [{"h3", _, _} = h3_tree]}, acc -> title = - h3_tree - |> Floki.text() + h3_tree + |> Floki.text() - %{acc | title: title} + %{acc | title: title} - {"div", _, [{"div", [{"class", "verse_sanskrit"}], _verse} | _] = verse_tree}, acc -> + {"div", _, [{"div", [{"class", "verse_sanskrit"}], _verse} | _] = verse_tree}, acc -> [curr | [%{"count" => count} | _] = verses] = - Enum.reduce(verse_tree, [], fn - # n case verse break - {"hr", [{"class", "verse_separator"}], []}, [curr | [%{"count" => c} | _] = acc] -> - [Map.put(curr, "count", c + 1) | acc] + Enum.reduce(verse_tree, [], fn + # n case verse break + {"hr", [{"class", "verse_separator"}], []}, [curr | [%{"count" => c} | _] = acc] -> + [Map.put(curr, "count", c + 1) | acc] - # init verse break - {"hr", [{"class", "verse_separator"}], []}, [curr | acc] -> - [Map.put(curr, "count", 1) | acc] + # init verse break + {"hr", [{"class", "verse_separator"}], []}, [curr | acc] -> + [Map.put(curr, "count", 1) | acc] - # n case after verse break - {"div", [{"class", class}], _} = c_tree, [%{"count" => _} | _] = acc -> - [%{class => c_tree |> Floki.text()} | acc] + # n case after verse break + {"div", [{"class", class}], _} = c_tree, [%{"count" => _} | _] = acc -> + [%{class => c_tree |> Floki.text()} | acc] - # n case before verse break - {"div", [{"class", class}], _} = c_tree, [curr | acc] when is_map(curr)-> - [Map.put(curr, class, c_tree |> Floki.text()) | acc] + # n case before verse break + {"div", [{"class", class}], _} = c_tree, [curr | acc] when is_map(curr) -> + [Map.put(curr, class, c_tree |> Floki.text()) | acc] - # init - {"div", [{"class", class}], _} = c_tree, [] -> - [%{class => c_tree |> Floki.text()}] + # init + {"div", [{"class", class}], _} = c_tree, [] -> + [%{class => c_tree |> Floki.text()}] - others, acc -> - IO.inspect(others) - acc - end) + others, acc -> + IO.inspect(others) + acc + end) - #formatting & tying loose ends - clean_verses = [Map.put(curr, "count", count + 1)| verses] - |> Enum.reverse() + # formatting & tying loose ends + clean_verses = + [Map.put(curr, "count", count + 1) | verses] + |> Enum.reverse() - %{acc | verses: clean_verses} + %{acc | verses: clean_verses} _, acc -> acc @@ -93,6 +98,7 @@ defmodule Vyasa.Corpus.Engine.Shlokam do def store(tree, text, nil) do # TODO parsing logic into text indexer structs and db insert ops json = Jason.encode!(tree) + Application.app_dir(:vyasa, "priv") |> Path.join("/static/corpus/shlokam.org/#{text}.json") |> tap(&File.touch(&1)) @@ -102,6 +108,7 @@ defmodule Vyasa.Corpus.Engine.Shlokam do def store(tree, text, file_path) do # TODO parsing logic into text indexer structs and db insert ops json = Jason.encode!(tree) + file_path |> Path.join("/shlokam.org") |> tap(&File.mkdir(&1)) @@ -109,7 +116,4 @@ defmodule Vyasa.Corpus.Engine.Shlokam do |> tap(&File.touch(&1)) |> tap(&File.write!(&1, json)) end - - - - end +end diff --git a/lib/vyasa/corpus/gita.ex b/lib/vyasa/corpus/gita.ex index f375d448..1ff4c4d6 100644 --- a/lib/vyasa/corpus/gita.ex +++ b/lib/vyasa/corpus/gita.ex @@ -1,42 +1,46 @@ defmodule Vyasa.Corpus.Gita.Chapter do defstruct chapter_number: 1, - chapter_summary: "The first chapter of the Bhagavad Gita - \"Arjuna Vishada Yoga\" introduces the setup, the setting, the characters and the circumstances that led to the epic battle of Mahabharata, fought between the Pandavas and the Kauravas. It outlines the reasons that led to the revelation of the of Bhagavad Gita.\nAs both armies stand ready for the battle, the mighty warrior Arjuna, on observing the warriors on both sides becomes increasingly sad and depressed due to the fear of losing his relatives and friends and the consequent sins attributed to killing his own relatives. So, he surrenders to Lord Krishna, seeking a solution. Thus, follows the wisdom of the Bhagavad Gita.", - chapter_summary_hindi: "भगवद गीता का पहला अध्याय अर्जुन विशाद योग उन पात्रों और परिस्थितियों का परिचय कराता है जिनके कारण पांडवों और कौरवों के बीच महाभारत का महासंग्राम हुआ। यह अध्याय उन कारणों का वर्णन करता है जिनके कारण भगवद गीता का ईश्वरावेश हुआ। जब महाबली योद्धा अर्जुन दोनों पक्षों पर युद्ध के लिए तैयार खड़े योद्धाओं को देखते हैं तो वह अपने ही रिश्तेदारों एवं मित्रों को खोने के डर तथा फलस्वरूप पापों के कारण दुखी और उदास हो जाते हैं। इसलिए वह श्री कृष्ण को पूरी तरह से आत्मसमर्पण करते हैं। इस प्रकार, भगवद गीता के ज्ञान का प्रकाश होता है।" , - id: 1, - image_name: "arjuna-vishada-yoga", - name: "अर्जुनविषादयोग", - name_meaning: "Arjuna's Dilemma", - name_translation: "Arjuna Visada Yoga", - name_transliterated: "Arjun Viṣhād Yog", - verses_count: 47 + chapter_summary: + "The first chapter of the Bhagavad Gita - \"Arjuna Vishada Yoga\" introduces the setup, the setting, the characters and the circumstances that led to the epic battle of Mahabharata, fought between the Pandavas and the Kauravas. It outlines the reasons that led to the revelation of the of Bhagavad Gita.\nAs both armies stand ready for the battle, the mighty warrior Arjuna, on observing the warriors on both sides becomes increasingly sad and depressed due to the fear of losing his relatives and friends and the consequent sins attributed to killing his own relatives. So, he surrenders to Lord Krishna, seeking a solution. Thus, follows the wisdom of the Bhagavad Gita.", + chapter_summary_hindi: + "भगवद गीता का पहला अध्याय अर्जुन विशाद योग उन पात्रों और परिस्थितियों का परिचय कराता है जिनके कारण पांडवों और कौरवों के बीच महाभारत का महासंग्राम हुआ। यह अध्याय उन कारणों का वर्णन करता है जिनके कारण भगवद गीता का ईश्वरावेश हुआ। जब महाबली योद्धा अर्जुन दोनों पक्षों पर युद्ध के लिए तैयार खड़े योद्धाओं को देखते हैं तो वह अपने ही रिश्तेदारों एवं मित्रों को खोने के डर तथा फलस्वरूप पापों के कारण दुखी और उदास हो जाते हैं। इसलिए वह श्री कृष्ण को पूरी तरह से आत्मसमर्पण करते हैं। इस प्रकार, भगवद गीता के ज्ञान का प्रकाश होता है।", + id: 1, + image_name: "arjuna-vishada-yoga", + name: "अर्जुनविषादयोग", + name_meaning: "Arjuna's Dilemma", + name_translation: "Arjuna Visada Yoga", + name_transliterated: "Arjun Viṣhād Yog", + verses_count: 47 end defmodule Vyasa.Corpus.Gita.Verse do defstruct chapter_id: 1, - chapter_number: 1, - externalId: 1, - id: 1, - text: "धृतराष्ट्र उवाच\n\nधर्मक्षेत्रे कुरुक्षेत्रे समवेता युयुत्सवः।\n\nमामकाः पाण्डवाश्चैव किमकुर्वत सञ्जय।।1.1।।\n ", - title: "Verse 1", - verse_number: 1, - verse_order: 1, - transliteration: "dhṛitarāśhtra uvācha\ndharma-kṣhetre kuru-kṣhetre samavetā yuyutsavaḥ\nmāmakāḥ pāṇḍavāśhchaiva kimakurvata sañjaya\n", - word_meanings: "dhṛitarāśhtraḥ uvācha—Dhritarashtra said; dharma-kṣhetre—the land of dharma; kuru-kṣhetre—at Kurukshetra; samavetāḥ—having gathered; yuyutsavaḥ—desiring to fight; māmakāḥ—my sons; pāṇḍavāḥ—the sons of Pandu; cha—and; eva—certainly; kim—what; akurvata—did they do; sañjaya—Sanjay\n" + chapter_number: 1, + externalId: 1, + id: 1, + text: "धृतराष्ट्र उवाच\n\nधर्मक्षेत्रे कुरुक्षेत्रे समवेता युयुत्सवः।\n\nमामकाः पाण्डवाश्चैव किमकुर्वत सञ्जय।।1.1।।\n ", + title: "Verse 1", + verse_number: 1, + verse_order: 1, + transliteration: + "dhṛitarāśhtra uvācha\ndharma-kṣhetre kuru-kṣhetre samavetā yuyutsavaḥ\nmāmakāḥ pāṇḍavāśhchaiva kimakurvata sañjaya\n", + word_meanings: + "dhṛitarāśhtraḥ uvācha—Dhritarashtra said; dharma-kṣhetre—the land of dharma; kuru-kṣhetre—at Kurukshetra; samavetāḥ—having gathered; yuyutsavaḥ—desiring to fight; māmakāḥ—my sons; pāṇḍavāḥ—the sons of Pandu; cha—and; eva—certainly; kim—what; akurvata—did they do; sañjaya—Sanjay\n" end defmodule Vyasa.Corpus.Gita do alias Vyasa.Corpus.Gita @chapters Path.join(:code.priv_dir(:vyasa), "static/corpus/gita/chapters.json") - |> tap(&(@external_resource &1)) - |> File.read!() - |> Jason.decode!(keys: :atoms) - |> Enum.map(&struct!(Gita.Chapter, &1)) + |> tap(&(@external_resource &1)) + |> File.read!() + |> Jason.decode!(keys: :atoms) + |> Enum.map(&struct!(Gita.Chapter, &1)) @verses Path.join(:code.priv_dir(:vyasa), "static/corpus/gita/sorted_verses.json") - |> tap(&(@external_resource &1)) - |> File.read!() - |> Jason.decode!(keys: :atoms) + |> tap(&(@external_resource &1)) + |> File.read!() + |> Jason.decode!(keys: :atoms) def chapters() do @chapters @@ -59,12 +63,9 @@ defmodule Vyasa.Corpus.Gita do def verse(chapter_no, verse_no) when is_binary(verse_no) and is_binary(chapter_no) do @verses[String.to_atom(chapter_no)] |> Enum.find(fn %{:verse_number => verse_num} -> Integer.to_string(verse_num) === verse_no end) - end - def verse(_,_) do + def verse(_, _) do %Vyasa.Corpus.Gita.Verse{} - end - end diff --git a/lib/vyasa/corpus/migrator/dump.ex b/lib/vyasa/corpus/migrator/dump.ex index 96517872..5473821b 100644 --- a/lib/vyasa/corpus/migrator/dump.ex +++ b/lib/vyasa/corpus/migrator/dump.ex @@ -4,6 +4,7 @@ defmodule Vyasa.Corpus.Migrator.Dump do def table(mod) do Code.ensure_loaded?(mod) assoc = mod.__schema__(:associations) + mod |> Repo.all() |> Repo.preload(assoc) @@ -16,7 +17,7 @@ defmodule Vyasa.Corpus.Migrator.Dump do end def save(mod) do - Path.expand("#{mod}/#{System.os_time}.json", "data") + Path.expand("#{mod}/#{System.os_time()}.json", "data") |> tap(&File.mkdir_p!(Path.dirname(&1))) |> File.open!([:write]) |> IO.binwrite(table(mod)) @@ -36,12 +37,12 @@ defmodule Vyasa.Corpus.Migrator.Dump do defp process_struct(%{__struct__: struct} = s) do associations = struct.__schema__(:associations) + s |> Map.from_struct() |> Enum.map(&process_field(associations, &1)) - |> Enum.reject(fn {_k,v} -> is_nil(v) end) + |> Enum.reject(fn {_k, v} -> is_nil(v) end) |> Enum.into(%{}) - end defp process_field(associations, {k, v}) when is_list(v) and is_struct(hd(v)) do @@ -73,5 +74,4 @@ defmodule Vyasa.Corpus.Migrator.Dump do end defp process_field(_associations, {k, v}), do: {k, v} - end diff --git a/lib/vyasa/draft.ex b/lib/vyasa/draft.ex index 1e90739e..29df5131 100644 --- a/lib/vyasa/draft.ex +++ b/lib/vyasa/draft.ex @@ -1,6 +1,7 @@ defmodule Vyasa.Draft do @moduledoc """ The Drafting Context for all your marking and binding needs + User-generated artefacts like marks and sheafs that are around the written context are interacted with via this Draft context. """ import Ecto.Query, warn: false diff --git a/lib/vyasa/medium/event.ex b/lib/vyasa/medium/event.ex index dbd35628..fe323f6e 100644 --- a/lib/vyasa/medium/event.ex +++ b/lib/vyasa/medium/event.ex @@ -34,6 +34,6 @@ defmodule Vyasa.Medium.Event do def frag_changeset(frag, attrs) do frag - |> cast(attrs, [:offset, :duration,:quote]) + |> cast(attrs, [:offset, :duration, :quote]) end end diff --git a/lib/vyasa/medium/ext/s3client.ex b/lib/vyasa/medium/ext/s3client.ex index 77975fb1..84ad59eb 100644 --- a/lib/vyasa/medium/ext/s3client.ex +++ b/lib/vyasa/medium/ext/s3client.ex @@ -12,7 +12,7 @@ defmodule Vyasa.Medium.Ext.S3Client do with {:ok, resp} <- Finch.build(method, url, headers, body) |> Finch.request(Vyasa.Finch) do - IO + IO {:ok, %{status_code: resp.status, body: resp.body, headers: resp.headers}} else {:error, reason} -> diff --git a/lib/vyasa/medium/store.ex b/lib/vyasa/medium/store.ex index 509e291d..0de6a822 100644 --- a/lib/vyasa/medium/store.ex +++ b/lib/vyasa/medium/store.ex @@ -9,7 +9,7 @@ defmodule Vyasa.Medium.Store do @bucket "vyasa" def path(st) when is_struct(st) do - #input and output paths + # input and output paths {local_path(st), path_constructor(st)} end @@ -38,7 +38,7 @@ defmodule Vyasa.Medium.Store do end def hydrate([%Medium.Voice{} | _] = voices) do - Enum.map(voices, &(%{&1 | file_path: get!(&1)})) + Enum.map(voices, &%{&1 | file_path: get!(&1)}) end def hydrate(%Medium.Voice{} = voice) do @@ -48,7 +48,8 @@ defmodule Vyasa.Medium.Store do def hydrate(rt), do: rt def download(%Medium.Voice{file_path: url} = v) do - bin = Finch.build(:get, url) + bin = + Finch.build(:get, url) |> Finch.request!(Vyasa.Finch) |> Map.get(:body) @@ -57,7 +58,6 @@ defmodule Vyasa.Medium.Store do |> File.write!(bin) end - def s3_config do %{ region: System.fetch_env!("AWS_DEFAULT_REGION"), @@ -75,16 +75,19 @@ defmodule Vyasa.Medium.Store do defp signer(:headandget, path) do ExAws.S3.head_object("orbistertius", path) |> ExAws.request!() + ## with 200 signer(:get, path) ## else (pass signer link of fallback image function or nil) end - defp signer(action, path) do - ExAws.Config.new(:s3, s3_config()) |> - ExAws.S3.presigned_url(action, @bucket, path, - [expires_in: 88888, virtual_host: false, query_params: [{"ContentType", "application/octet-stream"}]]) + ExAws.Config.new(:s3, s3_config()) + |> ExAws.S3.presigned_url(action, @bucket, path, + expires_in: 88888, + virtual_host: false, + query_params: [{"ContentType", "application/octet-stream"}] + ) end defp local_path(%Medium.Voice{file_path: local_path}) do @@ -92,20 +95,23 @@ defmodule Vyasa.Medium.Store do end defp path_constructor(%Medium.Voice{__meta__: %{source: type}, id: id}) do - "#{type}/#{id}.mp3" #default to mp3 ext for now + # default to mp3 ext for now + "#{type}/#{id}.mp3" end - defp path_constructor(%Medium.Voice{__meta__: %{source: type}, source: %{title: st}, meta: %{artists: [ artist | _]}}) do + defp path_constructor(%Medium.Voice{ + __meta__: %{source: type}, + source: %{title: st}, + meta: %{artists: [artist | _]} + }) do "#{type}#{unless is_nil(st), - do: "/#{st}"}#{unless is_nil(artist), - do: "/#{artist}"}" + do: "/#{st}"}#{unless is_nil(artist), + do: "/#{artist}"}" end - # defp path_suffix(full, prefix) do # base = byte_size(prefix) # <<_::binary-size(base), rest::binary>> = full # rest # end - end diff --git a/lib/vyasa/medium/video.ex b/lib/vyasa/medium/video.ex index c1d8375e..02158a4d 100644 --- a/lib/vyasa/medium/video.ex +++ b/lib/vyasa/medium/video.ex @@ -12,7 +12,7 @@ defmodule Vyasa.Medium.Video do belongs_to :voice, Voice, references: :id, foreign_key: :voice_id, type: :binary_id timestamps(type: :utc_datetime) - end + end @doc false def changeset(video, attrs) do diff --git a/lib/vyasa/medium/writer.ex b/lib/vyasa/medium/writer.ex index bddbccd5..4453bbb7 100644 --- a/lib/vyasa/medium/writer.ex +++ b/lib/vyasa/medium/writer.ex @@ -1,4 +1,8 @@ defmodule Vyasa.Medium.Writer do + @moduledoc """ + This module helps wraps all the writing responsibilities and allows us to treat the writing as a black-box. + Essentially, this handles the writing to minio/aws (any s3-compatible store) without the user of this module's functions caring how or why. + """ @behaviour Phoenix.LiveView.UploadWriter alias Vyasa.Medium.Store @@ -6,19 +10,29 @@ defmodule Vyasa.Medium.Writer do @impl true def init(struct) do {local_path, ext_path} = Store.path(struct) + with {:ok, file} <- File.open(local_path, [:binary, :write]), - %{bucket: bucket} = config <- Store.s3_config(), - s3_op <- ExAws.S3.initiate_multipart_upload(bucket, ext_path) do - {:ok, %{file: file, path: local_path, key: ext_path, chunk: 1, s3_op: s3_op, s3_config: ExAws.Config.new(:s3, config)}} + %{bucket: bucket} = config <- Store.s3_config(), + s3_op <- ExAws.S3.initiate_multipart_upload(bucket, ext_path) do + {:ok, + %{ + file: file, + path: local_path, + key: ext_path, + chunk: 1, + s3_op: s3_op, + s3_config: ExAws.Config.new(:s3, config) + }} end end def run(struct) do {local_path, ext_path} = Store.path(struct) + with fs <- ExAws.S3.Upload.stream_file(local_path), %{bucket: bucket} = cfg <- Store.s3_config(), - req <- ExAws.S3.upload(fs, bucket, ext_path), - {:ok, %{status_code: 200, body: body}} <- ExAws.request(req, config: cfg) do + req <- ExAws.S3.upload(fs, bucket, ext_path), + {:ok, %{status_code: 200, body: body}} <- ExAws.request(req, config: cfg) do {:ok, body} else {:err, err} -> {:err, err} @@ -35,18 +49,25 @@ defmodule Vyasa.Medium.Writer do case IO.binwrite(state.file, data) do :ok -> part = ExAws.S3.Upload.upload_chunk!({data, state.chunk}, state.s3_op, state.s3_config) - {:ok, %{state | chunk: state.chunk+1, parts: [part | state.parts]}} - {:error, reason} -> {:error, reason, state} + {:ok, %{state | chunk: state.chunk + 1, parts: [part | state.parts]}} + + {:error, reason} -> + {:error, reason, state} end end @impl true def close(state, _reason) do - case {File.close(state.file), ExAws.S3.Upload.complete(state.parts, state.s3_op, state.s3_config)} do + case {File.close(state.file), + ExAws.S3.Upload.complete(state.parts, state.s3_op, state.s3_config)} do {:ok, {:ok, _}} -> {:ok, state} - {{:error, reason}, _} -> {:error, reason} - {_,{:error, reason}} -> {:error, reason} + + {{:error, reason}, _} -> + {:error, reason} + + {_, {:error, reason}} -> + {:error, reason} end end end diff --git a/lib/vyasa/parser/ua_parser.ex b/lib/vyasa/parser/user_agent.ex similarity index 95% rename from lib/vyasa/parser/ua_parser.ex rename to lib/vyasa/parser/user_agent.ex index 3daec781..54a5ac6c 100644 --- a/lib/vyasa/parser/ua_parser.ex +++ b/lib/vyasa/parser/user_agent.ex @@ -1,4 +1,4 @@ -defmodule Vyasa.UserAgentParser do +defmodule Vyasa.Parser.UserAgent do @moduledoc """ Uses the UA Parser library to determine the device type from a user agent string. """ diff --git a/lib/vyasa/repo/filter.ex b/lib/vyasa/repo/filter.ex index c5bafde5..c67b4273 100644 --- a/lib/vyasa/repo/filter.ex +++ b/lib/vyasa/repo/filter.ex @@ -10,7 +10,6 @@ defmodule Vyasa.Repo.Filter do end for op <- [:!=, :<, :<=, :==, :>, :>=, :ilike, :in, :like] do - def where(query, {as, field}, unquote(op), value) do query |> where([{^as, x}], custom_where(x, field, value, unquote(op))) @@ -21,5 +20,4 @@ defmodule Vyasa.Repo.Filter do |> where([o], custom_where(o, field_name, value, unquote(op))) end end - end diff --git a/lib/vyasa/repo/paginated.ex b/lib/vyasa/repo/paginated.ex index a5806a96..d57fcd86 100644 --- a/lib/vyasa/repo/paginated.ex +++ b/lib/vyasa/repo/paginated.ex @@ -3,6 +3,7 @@ defmodule Vyasa.Repo.Paginated do alias Vyasa.Repo def query_builder(query, opts \\ []) + def query_builder(query, opts) do sort_attribute = Keyword.get(opts, :sort_attribute, :inserted_at) limit = Keyword.get(opts, :limit, 12) @@ -10,19 +11,24 @@ defmodule Vyasa.Repo.Paginated do filter = Keyword.get(opts, :filter, nil) page = Keyword.get(opts, :page, nil) - query |> maybe_ascend(sort_attribute, ascending?) - |> limit(^(limit + 1)) # last element not forwarded to client check downstream exists + # last element not forwarded to client check downstream exists + |> limit(^(limit + 1)) |> maybe_filter(sort_attribute, ascending?, filter) |> maybe_page(limit, page) end - def query_builder(query, page, attr, limit), do: query_builder(query, [sort_attribute: attr, limit: limit, page: page]) + def query_builder(query, page, attr, limit), + do: query_builder(query, sort_attribute: attr, limit: limit, page: page) + + # named binding + defp maybe_ascend(query, {as, field}, false), + do: from([{^as, x}] in query, order_by: [{:desc, field(x, ^field)}]) + + defp maybe_ascend(query, {as, field}, true), + do: from([{^as, x}] in query, order_by: [{:asc, field(x, ^field)}]) - #named binding - defp maybe_ascend(query, {as, field}, false), do: from([{^as, x}] in query, order_by: [{:desc, field(x, ^field)}]) - defp maybe_ascend(query, {as, field}, true), do: from([{^as, x}] in query, order_by: [{:asc, field(x, ^field)}]) defp maybe_ascend(query, attr, false), do: query |> order_by(desc: ^attr) defp maybe_ascend(query, attr, true), do: query |> order_by(asc: ^attr) defp maybe_ascend(query, _attr, nil), do: query @@ -32,20 +38,25 @@ defmodule Vyasa.Repo.Paginated do defp maybe_filter(query, attr, true, filter), do: query |> Repo.Filter.where(attr, :>, filter) defp maybe_page(query, _limit, nil), do: query - defp maybe_page(query, limit, page) when is_binary(page), do: maybe_page(query, limit, String.to_integer(page)) - defp maybe_page(query, limit, page), do: query |> offset(^(limit * (page - 1))) + defp maybe_page(query, limit, page) when is_binary(page), + do: maybe_page(query, limit, String.to_integer(page)) + + defp maybe_page(query, limit, page), do: query |> offset(^(limit * (page - 1))) def all(query, opts) when is_list(opts) do limit = Keyword.get(opts, :limit, 12) - sort = case Keyword.get(opts, :sort_attribute, :inserted_at) do - {key, sort_attr} -> [key, sort_attr] - sort_attr -> [sort_attr] - end - dao = query - |> query_builder(opts) - |> Repo.all() + sort = + case Keyword.get(opts, :sort_attribute, :inserted_at) do + {key, sort_attr} -> [key, sort_attr] + sort_attr -> [sort_attr] + end + + dao = + query + |> query_builder(opts) + |> Repo.all() count = length(dao) @@ -53,81 +64,108 @@ defmodule Vyasa.Repo.Paginated do # page-based {:ok, page} -> if Keyword.get(opts, :aggregate, true) do - total = Repo.aggregate(query, :count, List.last(sort)) + total = Repo.aggregate(query, :count, List.last(sort)) page_response(dao, page, total, limit) else page_response(dao, page, nil, limit) end :error -> - cond do - count > limit -> - [ _ | [head| _] = resp ] = dao |> Enum.reverse() - %{data: resp |> Enum.reverse(), # remove last element - meta: %{ - pagination: %{ - downstream: true, - count: limit, - cursor: get_in(head, sort |> Enum.map(&Access.key(&1))) |> mutate_meta_attr}}} + cond do + count > limit -> + [_ | [head | _] = resp] = dao |> Enum.reverse() + # remove last element + %{ + data: resp |> Enum.reverse(), + meta: %{ + pagination: %{ + downstream: true, + count: limit, + cursor: get_in(head, sort |> Enum.map(&Access.key(&1))) |> mutate_meta_attr + } + } + } count != 0 -> - [head | _ ] = dao |> Enum.reverse() - %{data: dao, + [head | _] = dao |> Enum.reverse() + + %{ + data: dao, meta: %{ pagination: %{ count: count, downstream: false, - cursor: get_in(head, sort |> Enum.map(&Access.key(&1))) |> mutate_meta_attr}}} + cursor: get_in(head, sort |> Enum.map(&Access.key(&1))) |> mutate_meta_attr + } + } + } count == 0 -> - %{data: [], + %{ + data: [], meta: %{ pagination: %{ count: 0, downstream: false, cursor: Keyword.get(opts, :filter, nil) |> mutate_meta_attr - }}} + } + } + } end - end + end end - def all(query, page, attr, limit), do: all(query, [sort_attribute: attr, limit: limit, page: page]) + def all(query, page, attr, limit), + do: all(query, sort_attribute: attr, limit: limit, page: page) + + def page_response(dao, page, total, limit) when is_binary(page), + do: page_response(dao, String.to_integer(page), total, limit) + + def page_response(dao, page, total, limit) when is_binary(limit), + do: page_response(dao, page, total, String.to_integer(limit)) - def page_response(dao, page, total, limit) when is_binary(page), do: page_response(dao, String.to_integer(page), total, limit) - def page_response(dao, page, total, limit) when is_binary(limit), do: page_response(dao, page, total, String.to_integer(limit)) def page_response(dao, page, total, limit) do count = length(dao) + if(count > limit) do - %{ - data: dao |> Enum.reverse() |> tl() |> Enum.reverse(), # remove last element - meta: %{ - pagination: %{ - downstream: true, - upstream: page > 1, - current: page, - total: total, - count: count, - start: (page - 1) * limit + 1 , - end: (page - 1) * limit + limit - }}} - else - %{ - data: dao, # remove last element - meta: %{ - pagination: %{ - downstream: false, - upstream: page > 1, - current: page, - count: count, - total: total, - start: (if count == 0, do: (page - 1) * limit + count, else: (page - 1) * limit + 1), - end: (page - 1) * limit + count - }}} - end - end + %{ + # remove last element + data: dao |> Enum.reverse() |> tl() |> Enum.reverse(), + meta: %{ + pagination: %{ + downstream: true, + upstream: page > 1, + current: page, + total: total, + count: count, + start: (page - 1) * limit + 1, + end: (page - 1) * limit + limit + } + } + } + else + %{ + # remove last element + data: dao, + meta: %{ + pagination: %{ + downstream: false, + upstream: page > 1, + current: page, + count: count, + total: total, + start: if(count == 0, do: (page - 1) * limit + count, else: (page - 1) * limit + 1), + end: (page - 1) * limit + count + } + } + } + end + end + defp mutate_meta_attr(%DateTime{} = dt), do: DateTime.to_unix(dt, :second) + # seconds from unix time + defp mutate_meta_attr(%NaiveDateTime{} = dt), + do: NaiveDateTime.diff(dt, ~N[1970-01-01 00:00:00]) - defp mutate_meta_attr(%DateTime{} = dt), do: DateTime.to_unix(dt, :second) - defp mutate_meta_attr(%NaiveDateTime{} = dt), do: NaiveDateTime.diff(dt, ~N[1970-01-01 00:00:00]) # seconds from unix time - defp mutate_meta_attr(attr), do: attr + defp mutate_meta_attr(attr), do: attr end diff --git a/lib/vyasa/sangh.ex b/lib/vyasa/sangh.ex index aed6a3d1..7986e1f8 100644 --- a/lib/vyasa/sangh.ex +++ b/lib/vyasa/sangh.ex @@ -8,7 +8,6 @@ defmodule Vyasa.Sangh do alias Vyasa.Repo alias Vyasa.Sangh.Sheaf - @doc """ Returns the list of sheafs within a specific session. @@ -19,9 +18,10 @@ defmodule Vyasa.Sangh do """ def list_sheafs_by_session(id) do - (from c in Sheaf, + from(c in Sheaf, where: c.session_id == ^id, - select: c) + select: c + ) |> Repo.all() end @@ -62,75 +62,82 @@ defmodule Vyasa.Sangh do def get_sheaf!(id), do: Repo.get!(Sheaf, id) def get_sheaf(id) do - (from c in Sheaf, + from(c in Sheaf, where: c.id == ^id, - limit: 1) + limit: 1 + ) |> Repo.one() end - def get_descendents_sheaf(id) do query = from c in Sheaf, - as: :c, - where: c.parent_id == ^id, - order_by: [desc: c.inserted_at], - inner_lateral_join: sc in subquery( - from sc in Sheaf, - where: sc.parent_id == parent_as(:c).id, - select: %{count: count()} - ), on: true, - select_merge: %{child_count: sc.count} + as: :c, + where: c.parent_id == ^id, + order_by: [desc: c.inserted_at], + inner_lateral_join: + sc in subquery( + from sc in Sheaf, + where: sc.parent_id == parent_as(:c).id, + select: %{count: count()} + ), + on: true, + select_merge: %{child_count: sc.count} + Repo.all(query) end - def get_root_sheafs_by_sheaf(id) do query = from c in Sheaf, - as: :c, - where: c.sheaf_id == ^id, - where: nlevel(c.path) == 1, - preload: [:initiator], - order_by: [desc: c.inserted_at], - inner_lateral_join: sc in subquery( - from sc in Sheaf, - where: sc.parent_id == parent_as(:c).id, - select: %{count: count()} - ), on: true, - select_merge: %{child_count: sc.count} + as: :c, + where: c.sheaf_id == ^id, + where: nlevel(c.path) == 1, + preload: [:initiator], + order_by: [desc: c.inserted_at], + inner_lateral_join: + sc in subquery( + from sc in Sheaf, + where: sc.parent_id == parent_as(:c).id, + select: %{count: count()} + ), + on: true, + select_merge: %{child_count: sc.count} Repo.all(query) - end def get_descendents_sheaf(id, page) do query = from c in Sheaf, - as: :c, - where: c.parent_id == ^id, - preload: [:initiator], - inner_lateral_join: sc in subquery( - from sc in Sheaf, - select: %{count: count()} - ), on: true, - select_merge: %{child_count: sc.count} - - Repo.Paginated.all(query, [page: page, asc: true]) + as: :c, + where: c.parent_id == ^id, + preload: [:initiator], + inner_lateral_join: + sc in subquery( + from sc in Sheaf, + select: %{count: count()} + ), + on: true, + select_merge: %{child_count: sc.count} + + Repo.Paginated.all(query, page: page, asc: true) end def get_root_sheafs_by_session(id, page, sort_attribute \\ :inserted_at, limit \\ 12) do query = from c in Sheaf, - as: :c, - where: c.session_id == ^id, - where: nlevel(c.path) == 1, - inner_lateral_join: sc in subquery( - from sc in Sheaf, - where: sc.parent_id == parent_as(:c).id, - select: %{count: count()} - ), on: true, - select_merge: %{child_count: sc.count} + as: :c, + where: c.session_id == ^id, + where: nlevel(c.path) == 1, + inner_lateral_join: + sc in subquery( + from sc in Sheaf, + where: sc.parent_id == parent_as(:c).id, + select: %{count: count()} + ), + on: true, + select_merge: %{child_count: sc.count} Repo.Paginated.all(query, page, sort_attribute, limit) end @@ -145,9 +152,10 @@ defmodule Vyasa.Sangh do end def get_sheafs_by_session(id) do - query = Sheaf - |> where([c], c.session_id == ^id) - |> order_by(desc: :inserted_at) + query = + Sheaf + |> where([c], c.session_id == ^id) + |> order_by(desc: :inserted_at) Repo.all(query) end @@ -156,27 +164,29 @@ defmodule Vyasa.Sangh do query = Sheaf |> where([e], e.session_id == ^id) - |> select([e], count(e)) + |> select([e], count(e)) + Repo.one(query) end - # Gets child sheafs 1 level down only def get_child_sheafs_by_session(id, path) do path = path <> ".*{1}" query = from c in Sheaf, - as: :c, - where: c.session_id == ^id, - where: fragment("? ~ ?", c.path, ^path), - preload: [:initiator], - inner_lateral_join: sc in subquery( - from sc in Sheaf, - where: sc.parent_id == parent_as(:c).id, - select: %{count: count()} - ), on: true, - select_merge: %{child_count: sc.count} + as: :c, + where: c.session_id == ^id, + where: fragment("? ~ ?", c.path, ^path), + preload: [:initiator], + inner_lateral_join: + sc in subquery( + from sc in Sheaf, + where: sc.parent_id == parent_as(:c).id, + select: %{count: count()} + ), + on: true, + select_merge: %{child_count: sc.count} Repo.all(query) end @@ -186,16 +196,18 @@ defmodule Vyasa.Sangh do def get_ancestor_sheafs_by_sheaf(sheaf_id, path) do query = from c in Sheaf, - as: :c, - where: c.sheaf_id == ^sheaf_id, - where: fragment("? @> ?", c.path, ^path), - preload: [:initiator], - inner_lateral_join: sc in subquery( - from sc in Sheaf, - where: sc.parent_id == parent_as(:c).id, - select: %{count: count()} - ), on: true, - select_merge: %{child_count: sc.count} + as: :c, + where: c.sheaf_id == ^sheaf_id, + where: fragment("? @> ?", c.path, ^path), + preload: [:initiator], + inner_lateral_join: + sc in subquery( + from sc in Sheaf, + where: sc.parent_id == parent_as(:c).id, + select: %{count: count()} + ), + on: true, + select_merge: %{child_count: sc.count} Repo.all(query) end @@ -281,7 +293,6 @@ defmodule Vyasa.Sangh do Enum.sort_by(sheafs, &elem(&1, 1).inserted_at, :desc) end - alias Vyasa.Sangh.Session @doc """ diff --git a/lib/vyasa/sangh/comments.ex b/lib/vyasa/sangh/comments.ex deleted file mode 100644 index e786d56d..00000000 --- a/lib/vyasa/sangh/comments.ex +++ /dev/null @@ -1,83 +0,0 @@ -defmodule Vyasa.Sangh.Sheaf do - @moduledoc """ - Not your traditional sheafs, waypoints and containers for marks - so that they can be referred to and moved around according to their context - - Can create a trail of marks and tied to session - Can seperate marks into bundle collapsible categories - - Sangh session Ids is SOT on shared and individual context - """ - use Ecto.Schema - import Ecto.Changeset - alias EctoLtree.LabelTree, as: Ltree - alias Vyasa.Sangh.{Sheaf, Session, Mark} - - @primary_key {:id, Ecto.UUID, autogenerate: false} - schema "sheafs" do - field :body, :string - field :active, :boolean, default: true #active in draft reflector - field :path, Ltree - field :signature, :string - field :traits, {:array, :string}, default: [] - field :child_count, :integer, default: 0, virtual: true - - belongs_to :session, Session, references: :id, type: Ecto.UUID - belongs_to :parent, Sheaf, references: :id, type: Ecto.UUID - - has_many :marks, Mark, references: :id, foreign_key: :sheaf_id, on_replace: :delete_if_exists - #has_many :bindings, Binding, references: :id, foreign_key: :sheaf_bind_id, on_replace: :delete_if_exists - timestamps() - end - - @doc false - def changeset(%Sheaf{} = sheaf, %{marks: [%Mark{} | _ ] = marks} = attrs) do - sheaf - |> cast(attrs, [:id, :body, :active, :path, :session_id, :signature, :parent_id, :traits]) - |> put_assoc(:marks, marks, with: &Mark.changeset/2) - |> validate_required([:id, :session_id]) - |> validate_include_subset(:traits, ["personal", "draft", "publish"]) - end - - def changeset(%Sheaf{} = sheaf, attrs) do - sheaf - |> cast(attrs, [:id, :body, :active, :path, :session_id, :signature, :parent_id, :traits]) - |> cast_assoc(:marks, with: &Mark.changeset/2) - |> validate_required([:id, :session_id]) - |> validate_include_subset(:traits, ["personal", "draft", "publish"]) - end - - def mutate_changeset(%Sheaf{} = sheaf, %{marks: [%Mark{} | _ ] = marks} = attrs) do - sheaf - |> Vyasa.Repo.preload([:marks]) - |> cast(attrs, [:id, :body, :active, :signature]) - |> put_assoc(:marks, marks, with: &Mark.changeset/2) - |> Map.put(:repo_opts, [on_conflict: {:replace_all_except, [:id]}, conflict_target: :id]) - end - - def mutate_changeset(%Sheaf{} = sheaf, attrs) do - sheaf - |> cast(attrs, [:id, :body, :active]) - |> Map.put(:repo_opts, [on_conflict: {:replace_all_except, [:id]}, conflict_target: :id]) - end - - defp validate_include_subset(changeset, field, data, opts \\ []) do - validate_change changeset, field, {:superset, data}, fn _, value -> - element_type = - case Map.fetch!(changeset.types, field) do - {:array, element_type} -> - element_type - type -> - {:array, element_type} = Ecto.Type.type(type) - element_type - end - - Enum.map(data, &Ecto.Type.include?(element_type, &1, value)) - |> Enum.member?(true) - |> case do - false -> [{field, {Keyword.get(opts, :message, "has an invalid entry"), [validation: :superset, enum: data]}}] - _ -> [] - end - end - end -end diff --git a/lib/vyasa/sangh/mark.ex b/lib/vyasa/sangh/mark.ex index e768647e..b18a8551 100644 --- a/lib/vyasa/sangh/mark.ex +++ b/lib/vyasa/sangh/mark.ex @@ -1,6 +1,11 @@ defmodule Vyasa.Sangh.Mark do @moduledoc """ - Interpretation & bounding of binding + Interpretation & bounding of binding. + We can mark anything that we can create a binding for. + + A mark should be seen as a single interpretation of a binding. + example: for text X, verse Y, we can have many marks, each offerring their own interpretation of Y. + An analogy for it would be "we left a mark on something...". """ use Ecto.Schema diff --git a/lib/vyasa/sangh/session.ex b/lib/vyasa/sangh/session.ex index 1c0995ec..ebf8c8a0 100644 --- a/lib/vyasa/sangh/session.ex +++ b/lib/vyasa/sangh/session.ex @@ -1,14 +1,23 @@ defmodule Vyasa.Sangh.Session do + @moduledoc """ + A Sangh Session is similar to a game-room or a whiteboard session or book-club. + The word "Sangh" here refers to assembly of people. + + Not to be confused with the web-browser / user-sessions. + """ + use Ecto.Schema import Ecto.Changeset - alias Vyasa.Sangh.{Sheaf} + alias Vyasa.Sangh.{Sheaf} @derive {Jason.Encoder, only: [:id]} @primary_key {:id, Ecto.UUID, autogenerate: true} schema "sessions" do - - has_many :sheafs, Sheaf, references: :id, foreign_key: :session_id, on_replace: :delete_if_exists + has_many :sheafs, Sheaf, + references: :id, + foreign_key: :session_id, + on_replace: :delete_if_exists timestamps(type: :utc_datetime) end diff --git a/lib/vyasa/sangh/sheaf.ex b/lib/vyasa/sangh/sheaf.ex new file mode 100644 index 00000000..f9934f36 --- /dev/null +++ b/lib/vyasa/sangh/sheaf.ex @@ -0,0 +1,96 @@ +defmodule Vyasa.Sangh.Sheaf do + @moduledoc """ + The Sheaf module represents a container for marks within a session, functioning as a waypoint and organizer for these marks based on their context. + A Sheaf is designed to facilitate the management of marks by allowing them to be categorized into collapsible bundles and creating trails tied to specific sessions. This module acts as a mediator for handling marks, enabling their movement and reference according to the current context. + + Not your traditional sheafs, waypoints and containers for marks + so that they can be referred to and moved around according to their context + + Can create a trail of marks and tied to session + Can seperate marks into bundle collapsible categories + + Sangh session Ids is SOT on shared and individual context + """ + use Ecto.Schema + import Ecto.Changeset + alias EctoLtree.LabelTree, as: Ltree + alias Vyasa.Sangh.{Sheaf, Session, Mark} + + @primary_key {:id, Ecto.UUID, autogenerate: false} + schema "sheafs" do + field :body, :string + # active in draft reflector + field :active, :boolean, default: true + field :path, Ltree + field :signature, :string + field :traits, {:array, :string}, default: [] + field :child_count, :integer, default: 0, virtual: true + + belongs_to :session, Session, references: :id, type: Ecto.UUID + belongs_to :parent, Sheaf, references: :id, type: Ecto.UUID + + has_many :marks, Mark, references: :id, foreign_key: :sheaf_id, on_replace: :delete_if_exists + + # has_many :bindings, Binding, references: :id, foreign_key: :sheaf_bind_id, on_replace: :delete_if_exists + timestamps() + end + + @doc false + def changeset(%Sheaf{} = sheaf, %{marks: [%Mark{} | _] = marks} = attrs) do + sheaf + |> cast(attrs, [:id, :body, :active, :path, :session_id, :signature, :parent_id, :traits]) + |> put_assoc(:marks, marks, with: &Mark.changeset/2) + |> validate_required([:id, :session_id]) + |> validate_include_subset(:traits, ["personal", "draft", "publish"]) + end + + def changeset(%Sheaf{} = sheaf, attrs) do + sheaf + |> cast(attrs, [:id, :body, :active, :path, :session_id, :signature, :parent_id, :traits]) + |> cast_assoc(:marks, with: &Mark.changeset/2) + |> validate_required([:id, :session_id]) + |> validate_include_subset(:traits, ["personal", "draft", "publish"]) + end + + def mutate_changeset(%Sheaf{} = sheaf, %{marks: [%Mark{} | _] = marks} = attrs) do + sheaf + |> Vyasa.Repo.preload([:marks]) + |> cast(attrs, [:id, :body, :active, :signature]) + |> put_assoc(:marks, marks, with: &Mark.changeset/2) + |> Map.put(:repo_opts, on_conflict: {:replace_all_except, [:id]}, conflict_target: :id) + end + + def mutate_changeset(%Sheaf{} = sheaf, attrs) do + sheaf + |> cast(attrs, [:id, :body, :active]) + |> Map.put(:repo_opts, on_conflict: {:replace_all_except, [:id]}, conflict_target: :id) + end + + defp validate_include_subset(changeset, field, data, opts \\ []) do + validate_change(changeset, field, {:superset, data}, fn _, value -> + element_type = + case Map.fetch!(changeset.types, field) do + {:array, element_type} -> + element_type + + type -> + {:array, element_type} = Ecto.Type.type(type) + element_type + end + + Enum.map(data, &Ecto.Type.include?(element_type, &1, value)) + |> Enum.member?(true) + |> case do + false -> + [ + {field, + {Keyword.get(opts, :message, "has an invalid entry"), + [validation: :superset, enum: data]}} + ] + + _ -> + [] + end + end) + end +end diff --git a/lib/vyasa/written.ex b/lib/vyasa/written.ex index d036469c..d76527be 100644 --- a/lib/vyasa/written.ex +++ b/lib/vyasa/written.ex @@ -146,9 +146,11 @@ defmodule Vyasa.Written do from(c in Chapter, where: c.source_id == ^sid, join: ts in assoc(c, :translations), - on: ts.source_id == ^sid and ts.lang == ^lang) - |> select_merge([c, t], %{ - c | translations: [t] + on: ts.source_id == ^sid and ts.lang == ^lang + ) + |> select_merge([c, t], %{ + c + | translations: [t] }) |> Repo.all() end diff --git a/lib/vyasa/written/chapter.ex b/lib/vyasa/written/chapter.ex index c24df42a..db33b0b7 100644 --- a/lib/vyasa/written/chapter.ex +++ b/lib/vyasa/written/chapter.ex @@ -7,13 +7,19 @@ defmodule Vyasa.Written.Chapter do @primary_key false schema "chapters" do - field :no, :integer, primary_key: :true + field :no, :integer, primary_key: true field :key, :string field :body, :string field :title, :string belongs_to :chapter, Chapter, references: :no, foreign_key: :parent_no - belongs_to :source, Source, references: :id, foreign_key: :source_id, type: :binary_id, primary_key: :true + + belongs_to :source, Source, + references: :id, + foreign_key: :source_id, + type: :binary_id, + primary_key: true + has_many :verses, Verse, references: :no, foreign_key: :chapter_no has_many :translations, Translation, references: :no, foreign_key: :chapter_no has_many :voices, Voice, references: :no, foreign_key: :chapter_no diff --git a/lib/vyasa/written/text.ex b/lib/vyasa/written/text.ex index 2bd99d9f..4e766c20 100644 --- a/lib/vyasa/written/text.ex +++ b/lib/vyasa/written/text.ex @@ -1,3 +1,5 @@ +# TODO: REMOVE THIS +# DEPRECATED: migration file needs to be updated before removing this defmodule Vyasa.Written.Text do use Ecto.Schema import Ecto.Changeset diff --git a/lib/vyasa/written/translation.ex b/lib/vyasa/written/translation.ex index 1aa9bc6c..916af705 100644 --- a/lib/vyasa/written/translation.ex +++ b/lib/vyasa/written/translation.ex @@ -8,7 +8,7 @@ defmodule Vyasa.Written.Translation do field :lang, :string # target table field :type, :string - #polymorphic shape of target + # polymorphic shape of target embeds_one :target, Target, on_replace: :delete do # for chapter field(:title, :string) @@ -22,7 +22,6 @@ defmodule Vyasa.Written.Translation do # media end - belongs_to :verse, Verse, references: :id, type: Ecto.UUID belongs_to :chapter, Chapter, references: :no, foreign_key: :chapter_no, type: :integer belongs_to :source, Source, references: :id, type: Ecto.UUID @@ -34,10 +33,10 @@ defmodule Vyasa.Written.Translation do # map and that will do the db seeding, as opposed to the 3-step seeding approach that is being # done now. - @doc false def changeset(translation, %{"type" => type} = attrs) do IO.inspect(translation) + # %{translation | type: type, verse_id: verse_id, source_id: s_id, chap_no: } # <== DON'T DO THIS. this will create extra associations to chap, but in this fn we only want verse-assocs translation |> cast(attrs, [:lang, :type, :verse_id, :chapter_no, :source_id]) @@ -45,7 +44,11 @@ defmodule Vyasa.Written.Translation do |> validate_required([:lang]) end - def gen_changeset(translation, attrs, %Verse{id: verse_id, __meta__: %{source: type}, source_id: s_id}) do + def gen_changeset(translation, attrs, %Verse{ + id: verse_id, + __meta__: %{source: type}, + source_id: s_id + }) do # %{translation | type: type, verse_id: verse_id, source_id: s_id, chap_no: } # <== DON'T DO THIS. this will create extra associations to chap, but in this fn we only want verse-assocs %{translation | type: type, verse_id: verse_id, source_id: s_id} |> cast(attrs, [:lang]) @@ -53,7 +56,11 @@ defmodule Vyasa.Written.Translation do |> validate_required([:lang]) end - def gen_changeset(translation, attrs, %Chapter{no: c_no, __meta__: %{source: type}, source_id: s_id}) do + def gen_changeset(translation, attrs, %Chapter{ + no: c_no, + __meta__: %{source: type}, + source_id: s_id + }) do %{translation | type: type, chapter_no: c_no, source_id: s_id} |> cast(attrs, [:lang]) |> typed_target_switch(type) @@ -62,7 +69,6 @@ defmodule Vyasa.Written.Translation do |> foreign_key_constraint(:s_id) end - def gen_changeset(translation, attrs, _parent) do translation |> cast(attrs, [:lang, :body]) @@ -70,13 +76,15 @@ defmodule Vyasa.Written.Translation do end def typed_target_switch(changeset, type) when type in ["chapters", "verses"] do - #changeset |> validate_inclusion(:type, ["chapters", "verses"]) - target_changeset = case type do - "chapters" -> - &chapter_changeset(&1, &2) - "verses" -> - &verse_changeset(&1, &2) - end + # changeset |> validate_inclusion(:type, ["chapters", "verses"]) + target_changeset = + case type do + "chapters" -> + &chapter_changeset(&1, &2) + + "verses" -> + &verse_changeset(&1, &2) + end cast_embed(changeset, :target, with: target_changeset) end @@ -90,6 +98,6 @@ defmodule Vyasa.Written.Translation do def verse_changeset(structure, attrs) do structure - |> cast(attrs, [:body, :body_meant ,:body_translit, :body_translit_meant]) + |> cast(attrs, [:body, :body_meant, :body_translit, :body_translit_meant]) end end diff --git a/lib/vyasa/written/verse.ex b/lib/vyasa/written/verse.ex index d393b341..26f916be 100644 --- a/lib/vyasa/written/verse.ex +++ b/lib/vyasa/written/verse.ex @@ -14,7 +14,6 @@ defmodule Vyasa.Written.Verse do belongs_to :source, Source, type: Ecto.UUID belongs_to :chapter, Chapter, type: :integer, references: :no, foreign_key: :chapter_no has_many :translations, Translation - end @doc false diff --git a/lib/vyasa_cli.ex b/lib/vyasa_cli.ex index e5666e72..8872d96a 100644 --- a/lib/vyasa_cli.ex +++ b/lib/vyasa_cli.ex @@ -1,17 +1,18 @@ defmodule VyasaCLI do - def main(args \\ []) do + def main(args \\ []) do IO.inspect(args) + args |> parse_args() |> response() |> IO.puts() end - defp parse_args([command | ["--" <> _] = args]) do {opts, _, _} = args |> OptionParser.parse(switches: [storage: :string]) + {command, opts} end @@ -22,19 +23,19 @@ defmodule VyasaCLI do {command, arg, opts} end + defp response({"fetch", "shlokam.org/" <> path, opts}) do Vyasa.Corpus.Engine.Shlokam.run(path, opts) end defp response({"fetch", _, _}) do - "Unsupported domain + "Unsupported domain Try one of the following: shlokam.org/ " end defp response(_) do - "Command doesnt belong to us " + "Command doesnt belong to us " end - end diff --git a/lib/vyasa_web/admin.ex b/lib/vyasa_web/admin.ex index 9db70436..047201ce 100644 --- a/lib/vyasa_web/admin.ex +++ b/lib/vyasa_web/admin.ex @@ -1,21 +1,19 @@ defmodule VyasaWeb.Admin.Written.Verse do - use LiveAdmin.Resource, schema: Vyasa.Written.Verse + use LiveAdmin.Resource, schema: Vyasa.Written.Verse end defmodule VyasaWeb.Admin.Medium.Event do - use LiveAdmin.Resource, schema: Vyasa.Medium.Event, + use LiveAdmin.Resource, + schema: Vyasa.Medium.Event, hidden_fields: [:fragments], immutable_fields: [:source_id], actions: [:next, :prev], render_with: :render_field - - def render_field(record, field, session) do VyasaWeb.Admin.Render.event(record, field, session) end - # def silence(%{voice: _v} = e, _sess) do # e = %{e | voice: nil} # {:ok, e} @@ -30,43 +28,48 @@ defmodule VyasaWeb.Admin.Medium.Event do end end - defmodule VyasaWeb.Admin.Render do use Phoenix.Component def event(%{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 %> - - """ + assigns = %{assigns | origin: floor(o / 1000), voice: Vyasa.Medium.Store.hydrate(v)} + + ~H""" + <%= @phase %> + + """ end def event(%{verse: %Vyasa.Written.Verse{} = v} = assigns, :verse_id, _session) do assigns = %{assigns | verse: v |> Vyasa.Repo.preload(:translations)} + ~H""" -

-
- <%= List.first(@verse.translations).target.body_translit %> -
- """ +
+ <%= @verse.body %> +
+
+ <%= List.first(@verse.translations).target.body_translit %> +
+ """ end - def event(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 + + bin when is_binary(bin) -> + bin + _ -> record |> Map.fetch!(field) @@ -76,5 +79,4 @@ defmodule VyasaWeb.Admin.Render do end end end - end diff --git a/lib/vyasa_web/components/contexts/read/verses.ex b/lib/vyasa_web/components/contexts/read/verses.ex index c9535c10..3d58084c 100644 --- a/lib/vyasa_web/components/contexts/read/verses.ex +++ b/lib/vyasa_web/components/contexts/read/verses.ex @@ -70,7 +70,6 @@ defmodule VyasaWeb.Content.Verses do """ end - # @impl true # def handle_event("reportVideoStatus", payload, socket) do # IO.inspect(payload) diff --git a/lib/vyasa_web/components/draft_matrix.ex b/lib/vyasa_web/components/draft_matrix.ex index 2381065d..fcf491b1 100644 --- a/lib/vyasa_web/components/draft_matrix.ex +++ b/lib/vyasa_web/components/draft_matrix.ex @@ -6,18 +6,19 @@ defmodule VyasaWeb.DraftMatrix do assigns = Enum.reject(assigns, fn {_k, v} -> is_nil(v) or v == [] end) {:ok, - socket - |> assign(assigns) - |> assign_new(:actions, fn -> [] end) - |> assign_new(:marks, fn -> [] end) - |> assign_new(:custom_style, fn -> [] end)} + socket + |> assign(assigns) + |> assign_new(:actions, fn -> [] end) + |> assign_new(:marks, fn -> [] end) + |> assign_new(:custom_style, fn -> [] end)} end @impl true def handle_event("adjust", adjusted, socket) do - style = Enum.map(adjusted, fn {key, val} -> - "#{key}: #{val}" - end) + style = + Enum.map(adjusted, fn {key, val} -> + "#{key}: #{val}" + end) {:noreply, assign(socket, custom_style: style)} end @@ -28,16 +29,19 @@ defmodule VyasaWeb.DraftMatrix do @impl true def render(assigns) do ~H""" -
List.flatten() |> Enum.join(";")}> - <.form for={%{}} phx-submit="create_mark"> - - -
- """ +
List.flatten() |> Enum.join(";")} + > + <.form for={%{}} phx-submit="create_mark"> + + +
+ """ end end diff --git a/lib/vyasa_web/components/layouts.ex b/lib/vyasa_web/components/layouts.ex index 1dce99eb..179c9a1b 100644 --- a/lib/vyasa_web/components/layouts.ex +++ b/lib/vyasa_web/components/layouts.ex @@ -18,7 +18,6 @@ defmodule VyasaWeb.Layouts do IO.puts("Contents map for meta contents:") IO.inspect(contents) - contents |> Enum.map(&define_name/1) |> List.flatten() diff --git a/lib/vyasa_web/components/layouts/app.html.heex b/lib/vyasa_web/components/layouts/app.html.heex index 6c22cdcc..18e9fea2 100644 --- a/lib/vyasa_web/components/layouts/app.html.heex +++ b/lib/vyasa_web/components/layouts/app.html.heex @@ -2,7 +2,7 @@
- +

v<%= Application.spec(:vyasa, :vsn) %> @@ -13,7 +13,7 @@ href="https://github.com/ve1ld/vyasa" class="rounded-lg bg-zinc-100 px-2 py-1 hover:bg-zinc-200/80" > - /vyasa + /vyasa

@@ -23,6 +23,10 @@ <.flash_group flash={@flash} />
- <%= live_render(@socket, VyasaWeb.ModeLive.Mediator, id: "Mediator", session: @session, sticky: true) %> - <%= @inner_content %> + <%= live_render(@socket, VyasaWeb.ModeLive.Mediator, + id: "Mediator", + session: @session, + sticky: true + ) %> + <%= @inner_content %> diff --git a/lib/vyasa_web/components/layouts/display_manager.html.heex b/lib/vyasa_web/components/layouts/display_manager.html.heex index e86bbdd2..c25717ed 100644 --- a/lib/vyasa_web/components/layouts/display_manager.html.heex +++ b/lib/vyasa_web/components/layouts/display_manager.html.heex @@ -1,3 +1,3 @@
- <%= @inner_content %> + <%= @inner_content %>
diff --git a/lib/vyasa_web/components/layouts/root.html.heex b/lib/vyasa_web/components/layouts/root.html.heex index 8f313da7..9a1a7e38 100644 --- a/lib/vyasa_web/components/layouts/root.html.heex +++ b/lib/vyasa_web/components/layouts/root.html.heex @@ -1,9 +1,6 @@ - + @@ -11,7 +8,8 @@ <%= assigns[:page_title] || "Vyasa" %> - + <.meta_tags contents={assigns[:meta]} /> diff --git a/lib/vyasa_web/components/youtube_player.ex b/lib/vyasa_web/components/youtube_player.ex index 72efbd72..444bb06e 100644 --- a/lib/vyasa_web/components/youtube_player.ex +++ b/lib/vyasa_web/components/youtube_player.ex @@ -1,33 +1,31 @@ defmodule VyasaWeb.YouTubePlayer do - use VyasaWeb, :live_component - - @impl true - def update(params, socket) do - {:ok, socket - |> assign(params) - } - end + use VyasaWeb, :live_component + @impl true + def update(params, socket) do + {:ok, + socket + |> assign(params)} + end - @impl true - def render(assigns) do - ~H""" -
-
-
- """ - end + @impl true + def render(assigns) do + ~H""" +
+
+
+ """ + end @impl true def handle_event("reportVideoStatus", payload, socket) do IO.inspect(payload) {:noreply, socket} end - - end +end diff --git a/lib/vyasa_web/controllers/error_html/404.html.heex b/lib/vyasa_web/controllers/error_html/404.html.heex index 21ce5381..72bd3448 100644 --- a/lib/vyasa_web/controllers/error_html/404.html.heex +++ b/lib/vyasa_web/controllers/error_html/404.html.heex @@ -1,339 +1,339 @@ - - - - - 404 - <%= assigns[:reason] && @reason.message || "Not Found" %> - - - -
- -
-
-
-
- Error 404 - Not Found - <%= assigns[:reason] && @reason.message || "Slipped down the wrong rabbithole" %> + hr { + margin: auto; + width: 40%; + } + + + + + 404 - <%= (assigns[:reason] && @reason.message) || "Not Found" %> + + +
+ +
+
+
+
+ Error 404 - Not Found + + <%= (assigns[:reason] && @reason.message) || "Slipped down the wrong rabbithole" %> + +
+
+
+
+

+
-
-
-

-
-
- -
-
- - + diff --git a/lib/vyasa_web/controllers/fallback_controller.ex b/lib/vyasa_web/controllers/fallback_controller.ex index 30883c17..88041b43 100644 --- a/lib/vyasa_web/controllers/fallback_controller.ex +++ b/lib/vyasa_web/controllers/fallback_controller.ex @@ -32,6 +32,6 @@ defmodule VyasaWeb.FallbackController do |> put_status(:not_found) |> put_resp_content_type("image/svg+xml") # path to default logo svg - |> send_file(200, :code.priv_dir(:vyasa) |> Path.join("/static/images/logo.svg")) + |> send_file(200, :code.priv_dir(:vyasa) |> Path.join("/static/images/logo.svg")) end end diff --git a/lib/vyasa_web/controllers/og_image_controller.ex b/lib/vyasa_web/controllers/og_image_controller.ex index 6b73723d..531f500e 100644 --- a/lib/vyasa_web/controllers/og_image_controller.ex +++ b/lib/vyasa_web/controllers/og_image_controller.ex @@ -67,20 +67,17 @@ defmodule VyasaWeb.OgImageController do %{text: "#{Recase.to_title(title)} Chapter #{c_no}\n\ #{c_title}\n #{t_title} - ", - lang: lang - } + ", lang: lang} end def template(%Binding{chapter: %{no: c_no, title: c_title}, source: %{title: title, lang: lang}}) do %{text: "#{Recase.to_title(title)} Chapter #{c_no}\n\ #{c_title} \n - ", - lang: lang - } + ", lang: lang} end - def template(%Binding{source: %{title: title, lang: lang}}), do: %{text: "#{Recase.to_title(title)}", lang: lang} + def template(%Binding{source: %{title: title, lang: lang}}), + do: %{text: "#{Recase.to_title(title)}", lang: lang} def template(_) do @fallback_text diff --git a/lib/vyasa_web/controllers/page_html/home.html.heex b/lib/vyasa_web/controllers/page_html/home.html.heex index d0d5deda..6ba5be71 100644 --- a/lib/vyasa_web/controllers/page_html/home.html.heex +++ b/lib/vyasa_web/controllers/page_html/home.html.heex @@ -1,336 +1,336 @@ <.flash_group flash={@flash} />