index.html 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  1. {% load socialaccount %}
  2. {% load static %}
  3. <!doctype html>
  4. <html lang="en">
  5. <head>
  6. <meta charset="utf-8">
  7. <meta name="keywords" content="youtube, playlists, videos, delete videos, delete playlists, delete multiple videos, move multiple videos, merge playlists, video manager, playlist manager, youtube playlists, untube, google">
  8. <meta name="viewport" content="width=device-width, initial-scale=1">
  9. <meta name="description" content="UnTube is a simple Youtube playlist manager. Modify and keep track of your YouTube playlists with ease.">
  10. <meta name="author" content="Mohammed Abu Bakar Khan">
  11. <title>UnTube - A Youtube Playlist Manager</title>
  12. <link rel="canonical" href="https://getbootstrap.com/docs/5.0/examples/carousel/">
  13. <link href="https://fonts.googleapis.com/css2?family=Fredoka+One&family=Open+Sans&display=swap" rel="stylesheet">
  14. <link href="{% static 'fontawesome-free-5.15.3-web/css/all.min.css' %}" rel="stylesheet">
  15. <!-- Bootstrap core CSS -->
  16. <link href="{% static 'bootstrap5.0.1/css/bootstrap.min.css' %}" rel="stylesheet">
  17. <style>
  18. .bd-placeholder-img {
  19. font-size: 1.125rem;
  20. text-anchor: middle;
  21. -webkit-user-select: none;
  22. -moz-user-select: none;
  23. user-select: none;
  24. }
  25. @media (min-width: 768px) {
  26. .bd-placeholder-img-lg {
  27. font-size: 3.5rem;
  28. }
  29. }
  30. </style>
  31. <link href="https://fonts.googleapis.com/css2?family=Fredoka+One&family=Open+Sans&display=swap" rel="stylesheet">
  32. <!-- Custom styles for this template -->
  33. <link href="{% static 'css/carousel.css' %}" rel="stylesheet">
  34. </head>
  35. <body style="font-family: 'Fredoka One',serif; background-color: #FDF4DC;">
  36. <main>
  37. <div class="container py-4">
  38. {% if messages %}
  39. {% for message in messages %}
  40. <div class="alert alert-success alert-dismissible fade show" role="alert">
  41. {{ message }}
  42. <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
  43. </div>
  44. {% endfor %}
  45. {% endif %}
  46. <div class="p-5 mb-4 bg-light rounded-3">
  47. <div class="container-fluid py-5">
  48. <h1 class="display-5 fw-bold">UnTube</h1>
  49. <p class="col-md-8 fs-4">A simple Youtube playlist manager to help you modify and keep track of your YouTube playlists with ease.</p>
  50. <a class="btn btn-danger btn-lg" href="{% provider_login_url 'google' %}">Login with Google</a>
  51. <a class="btn btn-primary btn-lg" href="#more">Tell me more</a>
  52. </div>
  53. </div>
  54. <footer class="mastfoot mt-auto">
  55. <div class="d-flex justify-content-center text-dark">
  56. <h5>Made with <i class="fas fa-heart" style="color: #e25555;"></i> & <i class="fas fa-mug-hot" style="color: brown;"></i> by <a href="https://github.com/sleepytaco" target="_blank" style="text-decoration: none;"><span style="border-bottom: 3px #d56b6b dashed;">Mohammed Khan</span></a> </h5>
  57. </div>
  58. </footer>
  59. </div>
  60. <!-- Marketing messaging and featurettes
  61. ================================================== -->
  62. <!-- Wrap the rest of the page in another container to center all the content. -->
  63. <div class="container marketing">
  64. <!-- START THE FEATURETTES -->
  65. <hr class="featurette-divider" id="more">
  66. <div class="row featurette">
  67. <div class="col-md-7 order-md-2">
  68. <h1>UnTube automatically gets statistics for every playlist.</h1>
  69. <p class="lead">For every playlist, statistics like playlist duration, number of unavailable videos, or whether the playlist has any duplicate videos are automatically generated.</p>
  70. </div>
  71. <div class="col-md-5 order-md-1">
  72. <div class="text-center">
  73. <img src="{% static 'assets/imgs/playlist_stats.PNG' %}" class="rounded" style="max-width:100%; height: auto">
  74. </div>
  75. </div>
  76. </div>
  77. <hr class="featurette-divider">
  78. <div class="row featurette">
  79. <div class="col-md-7">
  80. <h1 class="">Ideal for people with a lot of playlists on YouTube.</h1>
  81. <p class="lead">UnTube offers features like bulk deletion as well as copying and moving videos from one playlist to multiple other playlists at once.</p>
  82. </div>
  83. <div class="col-md-5">
  84. <div class="text-center">
  85. <img src="{% static 'assets/imgs/features.gif' %}" class="rounded" style="max-width:100%; height: auto">
  86. </div>
  87. </div>
  88. </div>
  89. <hr class="featurette-divider">
  90. <div class="row featurette">
  91. <div class="col-md-7 order-md-2">
  92. <h1 class="">Organize and search for playlists and videos in your collection.</h1>
  93. <p class="lead">
  94. UnTube organizes your playlists into specific categories. Further, you can create your own categories by tagging playlists.
  95. Since UnTube stores a reference to all the videos in your playlists, you can easily search for the videos you want.
  96. </p>
  97. </div>
  98. <div class="col-md-5 order-md-1">
  99. <div class="text-center">
  100. <img src="{% static 'assets/imgs/organize.gif' %}" class="rounded" style="max-width:100%; height: auto">
  101. </div>
  102. </div>
  103. </div>
  104. <hr class="featurette-divider">
  105. <div class="row featurette">
  106. <div class="col-md-7">
  107. <h1 class="">Mark playlists as watching</h1>
  108. <p class="lead">A small tool to keep track of the duration left for a playlist by letting you mark videos as watched.
  109. Might serve as a motivator to finish any kind of academic playlist <i class="far fa-smile-wink fa-lg"></i> </p>
  110. </div>
  111. <div class="col-md-5">
  112. <div class="text-center">
  113. <img src="{% static 'assets/imgs/watching.gif' %}" class="rounded" style=" max-width:100%; height: auto">
  114. </div>
  115. </div>
  116. </div>
  117. <hr class="featurette-divider">
  118. <div class="row featurette">
  119. <div class="col-md-7 order-md-2">
  120. <h1 class="">
  121. And lastly, you can import playlists you do not own into your collection.</h1>
  122. <p class="lead">
  123. All the features above would still apply to playlists you do not own.
  124. That means you can mark imported playlists as watching, tag them and also copy videos from imported playlists
  125. into your own playlists.
  126. </p>
  127. </div>
  128. <div class="col-md-5 order-md-1">
  129. <div class="text-center">
  130. <img src="{% static 'assets/imgs/import.gif' %}" class="rounded" style="max-width:100%; height: auto">
  131. </div>
  132. </div>
  133. </div>
  134. <hr class="featurette-divider">
  135. <div class="row featurette justify-content-center">
  136. <div class="col-md d-flex flex-column justify-content-center">
  137. <h1>
  138. Some more features:
  139. </h1>
  140. <h3>
  141. <span style="border-bottom: 4px #c2d56b dashed;">merging multiple playlists into one</span>,
  142. </h3>
  143. <h3>
  144. <span style="border-bottom: 4px #c2d56b dashed;">deleting multiple playlists at once</span>,
  145. </h3>
  146. <h3>
  147. <span style="border-bottom: 4px #c2d56b dashed;">auto-update your playlists with YouTube</span>,
  148. </h3>
  149. <h3>
  150. <span style="border-bottom: 4px #c2d56b dashed;">pin and like playlists/videos</span>,
  151. </h3>
  152. <h3>
  153. <span style="border-bottom: 4px #c2d56b dashed;">storing names of videos that go unavailable</span>
  154. </h3>
  155. </div>
  156. <div class="col-md d-flex flex-column justify-content-center">
  157. <h1>About:</h1>
  158. <h3>
  159. This app was made possible because of the <a href="https://developers.google.com/youtube/v3/" target="_blank" style="text-decoration: none;"><span style="border-bottom: 4px #d56b80 dashed;">YouTube Data API</span></a>. By logging in with Google I get access to your
  160. public Google account information <i class="fa fa-plus"></i> the permission to modify your YouTube data. That means you can manage
  161. your private playlists on UnTube.
  162. </h3>
  163. </div>
  164. </div>
  165. <hr class="featurette-divider">
  166. <!-- /END THE FEATURETTES -->
  167. </div><!-- /.container -->
  168. <!-- FOOTER -->
  169. <footer class="container">
  170. <p class="float-end h4 text-dark"><a href="#" style="color: black"><i class="fas fa-angle-double-up fa-lg"></i></a></p>
  171. <p class="text-dark">
  172. <i class="far fa-copyright"></i> 2021–2022
  173. <a href="https://github.com/sleepytaco" target="_blank" style="text-decoration: none; color: black">
  174. Mohammed Khan
  175. </a>
  176. <!--
  177. <small><i class="fas fa-circle fa-sm"></i></small>
  178. Loved what I made?
  179. <a href="https://www.buymeacoffee.com/mohammedabkhan" style="text-decoration: none" target="_blank">
  180. <span style="border-bottom: 3px #d56b6b dashed;">You can support me by buying me some coffee <i class="far fa-smile"></i> </span>
  181. </a>
  182. -->
  183. <small><i class="fas fa-circle fa-sm"></i></small>
  184. <i class="fab fa-github fa-lg" style="color: black;"></i>
  185. <small><i class="fas fa-circle fa-sm"></i></small>
  186. <a {% if request.session.liked_untube %}hx-post="{% url 'unlike_untube' %}"{% else %}hx-post="{% url 'like_untube' %}"{% endif %} hx-trigger="click" hx-swap="outerHTML" style="text-decoration: none; color: black">
  187. <i class="fas fa-heart" {% if request.session.liked_untube %}style="color: #d02e2e"{% endif %}></i> {{ likes }} likes {% if not request.session.liked_untube %}(click it){% endif %}
  188. </a>
  189. <small><i class="fas fa-circle fa-sm"></i></small>
  190. <a href="#" style="text-decoration: none; color: black">
  191. <i class="fas fa-users"></i> {{ users_joined }} users joined
  192. </a>
  193. </p>
  194. </footer>
  195. </main>
  196. <script src="{% static 'htmx/htmx.min.js' %}" type="application/javascript"></script>
  197. <script src="{% static 'bootstrap5.0.1/js/bootstrap.bundle.min.js' %}" type="application/javascript"></script>
  198. <script type="application/javascript">
  199. // send csrf_token when htmx does a post request
  200. document.body.addEventListener('htmx:configRequest', (event) => {
  201. event.detail.headers['X-CSRFToken'] = '{{ csrf_token }}';
  202. })
  203. </script>
  204. </body>
  205. </html>