Merge remote-tracking branch 'upstream/master' into side-menu

This commit is contained in:
Tommy Miland 2019-03-13 08:58:40 +01:00
commit 1cef19a213
16 changed files with 188 additions and 67 deletions

View File

@ -50,6 +50,7 @@
"Autoplay: ": "تشغيل تلقائى: ",
"Autoplay next video: ": "شغل الفيديو التالى تلقائى: ",
"Listen by default: ": "تشغيل النسخة السمعية تلقائى: ",
"Proxy videos? ": "",
"Default speed: ": "السرعة الإفتراضية: ",
"Preferred video quality: ": "الجودة المفضلة للفيديوهات: ",
"Player volume: ": "صوت المشغل: ",
@ -102,6 +103,7 @@
"Released under the AGPLv3 by Omar Roth.": "تم الإنشاء تحت AGPLv3 بواسطة عمر روث.",
"Source available here.": "الأكواد متوفرة هنا.",
"View JavaScript license information.": "مشاهدة معلومات حول تراخيص الجافاسكريبت.",
"View privacy policy.": "",
"Trending": "الشائع",
"Watch video on Youtube": "مشاهدة الفيديو على اليوتيوب",
"Genre: ": "النوع: ",

View File

@ -50,6 +50,7 @@
"Autoplay: ": "Automatisch abspielen: ",
"Autoplay next video: ": "nächstes Video automatisch abspielen: ",
"Listen by default: ": "Nur Ton als Standard: ",
"Proxy videos? ": "",
"Default speed: ": "Standardgeschwindigkeit: ",
"Preferred video quality: ": "Bevorzugte Videoqualität: ",
"Player volume: ": "Playerlautstärke: ",
@ -102,6 +103,7 @@
"Released under the AGPLv3 by Omar Roth.": "Veröffentlicht unter AGPLv3 von Omar Roth.",
"Source available here.": "Quellcode verfügbar hier.",
"View JavaScript license information.": "Javascript Lizenzinformationen anzeigen.",
"View privacy policy.": "",
"Trending": "Trending",
"Watch video on Youtube": "Video auf YouTube ansehen",
"Genre: ": "Genre: ",

View File

@ -50,6 +50,7 @@
"Autoplay: ": "Autoplay: ",
"Autoplay next video: ": "Autoplay next video: ",
"Listen by default: ": "Listen by default: ",
"Proxy videos? ": "Proxy videos? ",
"Default speed: ": "Default speed: ",
"Preferred video quality: ": "Preferred video quality: ",
"Player volume: ": "Player volume: ",
@ -100,6 +101,7 @@
"Released under the AGPLv3 by Omar Roth.": "Released under the AGPLv3 by Omar Roth.",
"Source available here.": "Source available here.",
"View JavaScript license information.": "View JavaScript license information.",
"View privacy policy.": "View privacy policy.",
"Trending": "Trending",
"Watch video on Youtube": "Watch video on Youtube",
"Genre: ": "Genre: ",

View File

@ -50,6 +50,7 @@
"Autoplay: ": "",
"Autoplay next video: ": "",
"Listen by default: ": "",
"Proxy videos? ": "",
"Default speed: ": "",
"Preferred video quality: ": "",
"Player volume: ": "",
@ -100,6 +101,7 @@
"Released under the AGPLv3 by Omar Roth.": "",
"Source available here.": "",
"View JavaScript license information.": "",
"View privacy policy.": "",
"Trending": "",
"Watch video on Youtube": "",
"Genre: ": "",

View File

@ -50,6 +50,7 @@
"Autoplay: ": "Lire Automatiquement : ",
"Autoplay next video: ": "Lire automatiquement la vidéo suivante : ",
"Listen by default: ": "Audio Uniquement par défaut : ",
"Proxy videos? ": "",
"Default speed: ": "Vitesse par défaut : ",
"Preferred video quality: ": "Qualité vidéo souhaitée : ",
"Player volume: ": "Volume du lecteur : ",
@ -100,6 +101,7 @@
"Released under the AGPLv3 by Omar Roth.": "Publié sous licence AGPLv3 par Omar Roth.",
"Source available here.": "Code Source.",
"View JavaScript license information.": "Voir les informations des licences JavaScript.",
"View privacy policy.": "",
"Trending": "Tendances",
"Watch video on Youtube": "Voir la vidéo sur Youtube",
"Genre: ": "Genre : ",

View File

@ -50,6 +50,7 @@
"Autoplay: ": "Riproduzione automatica: ",
"Autoplay next video: ": "Riproduci automaticamente il prossimo video: ",
"Listen by default: ": "Modalità solo audio come predefinita: ",
"Proxy videos? ": "",
"Default speed: ": "Velocità di riproduzione predefinita: ",
"Preferred video quality: ": "Preferenza sulla qualità video: ",
"Player volume: ": "Volume di riproduzione: ",
@ -100,6 +101,7 @@
"Released under the AGPLv3 by Omar Roth.": "Pubblicato con licenza AGPLv3 da Omar Roth.",
"Source available here.": "Codice sorgente.",
"View JavaScript license information.": "Guarda le informazioni di licenza del codice JavaScript.",
"View privacy policy.": "",
"Trending": "Tendenze",
"Watch video on Youtube": "Guarda il video su YouTube",
"Genre: ": "Genere: ",

View File

@ -10,7 +10,7 @@
"newest": "nyeste",
"oldest": "eldste",
"popular": "populært",
"last": "",
"last": "siste",
"Next page": "Neste side",
"Previous page": "Forrige side",
"Clear watch history?": "Tøm visningshistorikk?",
@ -50,6 +50,7 @@
"Autoplay: ": "Autoavspilling: ",
"Autoplay next video: ": "Autospill neste video: ",
"Listen by default: ": "Lytt som forvalg: ",
"Proxy videos? ": "",
"Default speed: ": "Forvalgt hastighet: ",
"Preferred video quality: ": "Foretrukket videokvalitet: ",
"Player volume: ": "Avspillerlydstyrke: ",
@ -83,7 +84,7 @@
"Administrator preferences": "Administratorinnstillinger",
"Default homepage: ": "Forvalgt hjemmeside: ",
"Feed menu: ": "Flyt-meny: ",
"Top enabled? ": "",
"Top enabled? ": "Topp påskrudd? ",
"CAPTCHA enabled? ": "CAPTCHA påskrudd? ",
"Login enabled? ": "Innlogging påskrudd? ",
"Registration enabled? ": "Registrering påskrudd? ",
@ -100,6 +101,7 @@
"Released under the AGPLv3 by Omar Roth.": "Utgitt med AGPLv3+lisens av Omar Roth.",
"Source available here.": "Kildekode tilgjengelig her.",
"View JavaScript license information.": "Vis JavaScript-lisensinfo.",
"View privacy policy.": "",
"Trending": "Trendsettende",
"Watch video on Youtube": "Vis video på YouTube",
"Genre: ": "Sjanger: ",
@ -285,7 +287,7 @@
"`x` marked it with a ❤": "`x` levnet et ❤",
"Audio mode": "Lydmodus",
"Video mode": "Video-modus",
"Videos": "",
"Playlists": "",
"Current version: ": ""
"Videos": "Videoer",
"Playlists": "Spillelister",
"Current version: ": "Nåværende versjon: "
}

View File

@ -50,6 +50,7 @@
"Autoplay: ": "Automatisch afspelen: ",
"Autoplay next video: ": "Automatisch volgende video afspelen: ",
"Listen by default: ": "Standaard luisteren: ",
"Proxy videos? ": "",
"Default speed: ": "Standaard snelheid: ",
"Preferred video quality: ": "Video kwaliteit voorkeur: ",
"Player volume: ": "Afspeler volume: ",
@ -100,6 +101,7 @@
"Released under the AGPLv3 by Omar Roth.": "Uitgegeven onder AGPLv3 door Omar Roth.",
"Source available here.": "Bron beschikbaar hier.",
"View JavaScript license information.": "Bekijk JavaScript licentie informatie.",
"View privacy policy.": "",
"Trending": "Trending",
"Watch video on Youtube": "Bekijk video op Youtube",
"Genre: ": "Genre: ",

View File

@ -50,12 +50,13 @@
"Autoplay: ": "Autoodtwarzanie: ",
"Autoplay next video: ": "Odtwórz następny film: ",
"Listen by default: ": "Tryb dźwiękowy: ",
"Proxy videos? ": "",
"Default speed: ": "Domyślna prędkość: ",
"Preferred video quality: ": "Preferowana jakość filmów: ",
"Player volume: ": "Głośność odtwarzacza: ",
"Default comments: ": "Domyślne komentarze: ",
"Default captions: ": "Domyślne napisy: ",
"Fallback captions: ": "Rezerwowe napisy: ",
"Fallback captions: ": "Zastępcze napisy: ",
"Show related videos? ": "Pokaż powiązane filmy? ",
"Visual preferences": "Preferencje Wizualne",
"Dark mode: ": "Ciemny motyw: ",
@ -63,13 +64,13 @@
"Subscription preferences": "Preferencje subskrybcji",
"Redirect homepage to feed: ": "Przekieruj stronę główną do subskrybcji: ",
"Number of videos shown in feed: ": "Liczba filmów widoczna na stronie subskrybcji: ",
"Sort videos by: ": "Sortuj filmy po: ",
"published": "czasie publikacji",
"published - reverse": "czasie publikacji od najstarszych",
"Sort videos by: ": "Sortuj filmy: ",
"published": "po czasie publikacji",
"published - reverse": "po czasie publikacji od najstarszych",
"alphabetically": "alfabetycznie",
"alphabetically - reverse": "alfabetycznie od tyłu",
"channel name": "nazwie kanału",
"channel name - reverse": "nazwie kanału od tyłu",
"channel name": "po nazwie kanału",
"channel name - reverse": "po nazwie kanału od tyłu",
"Only show latest video from channel: ": "Pokazuj tylko najnowszy film z kanału: ",
"Only show latest unwatched video from channel: ": "Pokazuj tylko najnowszy nie obejrzany film z kanału: ",
"Only show unwatched: ": "Pokazuj tylko nie obejrzane: ",
@ -80,14 +81,14 @@
"Manage subscriptions": "Organizuj subskrybcje",
"Watch history": "Historia",
"Delete account": "Usuń konto",
"Administrator preferences": "",
"Default homepage: ": "",
"Administrator preferences": "Preferencje administratora",
"Default homepage: ": "Domyślna strona główna: ",
"Feed menu: ": "",
"Top enabled? ": "",
"CAPTCHA enabled? ": "",
"Login enabled? ": "",
"Registration enabled? ": "",
"Report statistics? ": "",
"CAPTCHA enabled? ": "CAPTCHA aktywna? ",
"Login enabled? ": "Logowanie włączone? ",
"Registration enabled? ": "Rejestracja włączona? ",
"Report statistics? ": "Raportować statystyki? ",
"Save preferences": "Zapisz preferencje",
"Subscription manager": "Manager subskrybcji",
"`x` subscriptions": "`x` subskrybcji",
@ -100,6 +101,7 @@
"Released under the AGPLv3 by Omar Roth.": "Wydano na licencji AGPLv3 przez Omar Roth.",
"Source available here.": "Kod źródłowy dostępny tutaj.",
"View JavaScript license information.": "Wyświetl informację o licencji JavaScript.",
"View privacy policy.": "",
"Trending": "Na czasie",
"Watch video on Youtube": "Zobacz film na YouTube",
"Genre: ": "Gatunek: ",
@ -155,20 +157,20 @@
"Token is expired, please try again": "Token wygasł, spróbuj ponownie",
"English": "angielski",
"English (auto-generated)": "angielski (automatycznie generowane)",
"Afrikaans": "",
"Afrikaans": "afrykanerski",
"Albanian": "albański",
"Amharic": "",
"Amharic": "amharski",
"Arabic": "arabski",
"Armenian": "",
"Azerbaijani": "",
"Bangla": "",
"Basque": "",
"Armenian": "armeński",
"Azerbaijani": "azerski",
"Bangla": "bengalski",
"Basque": "baskijski",
"Belarusian": "białoruski",
"Bosnian": "bośniacki",
"Bulgarian": "bułgarski",
"Burmese": "birmański",
"Catalan": "kataloński",
"Cebuano": "",
"Cebuano": "cebuański",
"Chinese (Simplified)": "chiński (uproszczony)",
"Chinese (Traditional)": "chiński (tradycyjny)",
"Corsican": "korsykański",
@ -185,28 +187,28 @@
"Georgian": "gruziński",
"German": "niemiecki",
"Greek": "grecki",
"Gujarati": "",
"Haitian Creole": "",
"Hausa": "",
"Gujarati": "gudźarati",
"Haitian Creole": "kreolski haitański",
"Hausa": "hausa",
"Hawaiian": "hawajski",
"Hebrew": "hebrajski",
"Hindi": "hindi",
"Hmong": "",
"Hmong": "hmong",
"Hungarian": "węgierski",
"Icelandic": "islandzki",
"Igbo": "",
"Igbo": "ibo",
"Indonesian": "indonezyjski",
"Irish": "irlandzki",
"Italian": "włoski",
"Japanese": "japoński",
"Javanese": "jawajski",
"Kannada": "",
"Kannada": "kannada",
"Kazakh": "kazachski",
"Khmer": "",
"Khmer": "khmerski",
"Korean": "koreański",
"Kurdish": "kurdyjski",
"Kyrgyz": "kirgiski",
"Lao": "",
"Lao": "laotański",
"Latin": "łaciński",
"Latvian": "łotewski",
"Lithuanian": "litewski",
@ -214,51 +216,51 @@
"Macedonian": "macedoński",
"Malagasy": "malgaski",
"Malay": "malajski",
"Malayalam": "",
"Malayalam": "malajalam",
"Maltese": "maltański",
"Maori": "",
"Marathi": "",
"Maori": "maoryski",
"Marathi": "marathi",
"Mongolian": "mongolski",
"Nepali": "nepalski",
"Norwegian": "norweski",
"Nyanja": "",
"Pashto": "",
"Nyanja": "njandża",
"Pashto": "paszto",
"Persian": "perski",
"Polish": "polski",
"Portuguese": "portugalski",
"Punjabi": "",
"Punjabi": "pendżabski",
"Romanian": "rumuński",
"Russian": "rosyjski",
"Samoan": "",
"Scottish Gaelic": "",
"Samoan": "samoański",
"Scottish Gaelic": "gaelicki szkocki",
"Serbian": "serbski",
"Shona": "",
"Sindhi": "",
"Sinhala": "",
"Shona": "shona",
"Sindhi": "sindhi",
"Sinhala": "syngaleski",
"Slovak": "słowacki",
"Slovenian": "słoweński",
"Somali": "somalijski",
"Southern Sotho": "",
"Southern Sotho": "sotho południowy",
"Spanish": "hiszpański",
"Spanish (Latin America)": "hiszpański (ameryka łacińska)",
"Sundanese": "",
"Swahili": "",
"Sundanese": "sundajski",
"Swahili": "suahili",
"Swedish": "szwedzki",
"Tajik": "",
"Tamil": "",
"Telugu": "",
"Tajik": "tadżycki",
"Tamil": "tamilski",
"Telugu": "telugu",
"Thai": "tajski",
"Turkish": "turecki",
"Ukrainian": "ukraiński",
"Urdu": "",
"Urdu": "urdu",
"Uzbek": "uzbecki",
"Vietnamese": "wietnamski",
"Welsh": "walijski",
"Western Frisian": "",
"Xhosa": "",
"Yiddish": "",
"Yoruba": "",
"Zulu": "",
"Western Frisian": "zachodniofryzyjski",
"Xhosa": "xhosa",
"Yiddish": "jidysz",
"Yoruba": "joruba",
"Zulu": "zuluski",
"`x` years": "`x` lat",
"`x` months": "`x` miesięcy",
"`x` weeks": "`x` tygodni",
@ -272,7 +274,7 @@
"About": "Informacje",
"Rating: ": "Ocena: ",
"Language: ": "Język: ",
"Default": "",
"Default": "Domyślnie",
"Music": "Muzyka",
"Gaming": "Gry",
"News": "Wiadomości",
@ -282,10 +284,10 @@
"%A %B %-d, %Y": "",
"(edited)": "(edytowany)",
"Youtube permalink of the comment": "Odnośnik bezpośredni do komentarza na YouTube",
"`x` marked it with a ❤": "",
"`x` marked it with a ❤": "'x' oznaczonych ❤",
"Audio mode": "Tryb audio",
"Video mode": "Tryb wideo",
"Videos": "",
"Playlists": "",
"Current version: ": ""
"Videos": "Filmy",
"Playlists": "Playlisty",
"Current version: ": "Aktualna wersja: "
}

View File

@ -50,6 +50,7 @@
"Autoplay: ": "Автовоспроизведение: ",
"Autoplay next video: ": "Автовоспроизведение следующего видео: ",
"Listen by default: ": "Режим \"только аудио\" по-умолчанию: ",
"Proxy videos? ": "",
"Default speed: ": "Скорость по-умолчанию: ",
"Preferred video quality: ": "Предпочтительное качество видео: ",
"Player volume: ": "Громкость воспроизведения: ",
@ -102,6 +103,7 @@
"Released under the AGPLv3 by Omar Roth.": "Распространяется Omar Roth по AGPLv3.",
"Source available here.": "Исходный код доступен здесь.",
"View JavaScript license information.": "Посмотреть лицензии JavaScript кода.",
"View privacy policy.": "",
"Trending": "В тренде",
"Watch video on Youtube": "Смотреть на YouTube",
"Genre: ": "Жанр: ",

View File

@ -17,6 +17,7 @@
require "digest/md5"
require "file_utils"
require "kemal"
require "markdown"
require "openssl/hmac"
require "option_parser"
require "pg"
@ -291,6 +292,11 @@ get "/" do |env|
end
end
get "/privacy" do |env|
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
templated "privacy"
end
get "/licenses" do |env|
locale = LOCALES[env.get("preferences").as(Preferences).locale]?
rendered "licenses"
@ -1225,6 +1231,10 @@ post "/preferences" do |env|
listen ||= "off"
listen = listen == "on"
local = env.params.body["local"]?.try &.as(String)
local ||= "off"
local = local == "on"
speed = env.params.body["speed"]?.try &.as(String).to_f?
speed ||= DEFAULT_USER_PREFERENCES.speed
@ -1286,6 +1296,7 @@ post "/preferences" do |env|
"autoplay" => autoplay,
"continue" => continue,
"listen" => listen,
"local" => local,
"speed" => speed,
"quality" => quality,
"volume" => volume,

View File

@ -31,6 +31,7 @@ DEFAULT_USER_PREFERENCES = Preferences.from_json({
"video_loop" => false,
"autoplay" => false,
"continue" => false,
"local" => false,
"listen" => false,
"speed" => 1.0,
"quality" => "hd720",
@ -80,6 +81,10 @@ class Preferences
type: Bool,
default: DEFAULT_USER_PREFERENCES.continue,
},
local: {
type: Bool,
default: DEFAULT_USER_PREFERENCES.local,
},
listen: {
type: Bool,
default: DEFAULT_USER_PREFERENCES.listen,

View File

@ -747,10 +747,11 @@ def process_video_params(query, preferences)
# region ||= preferences.region
autoplay ||= preferences.autoplay.to_unsafe
continue ||= preferences.continue.to_unsafe
related_videos ||= preferences.related_videos.to_unsafe
listen ||= preferences.listen.to_unsafe
local ||= preferences.local.to_unsafe
preferred_captions ||= preferences.captions
quality ||= preferences.quality
related_videos ||= preferences.related_videos.to_unsafe
speed ||= preferences.speed
video_loop ||= preferences.video_loop.to_unsafe
volume ||= preferences.volume
@ -758,10 +759,11 @@ def process_video_params(query, preferences)
autoplay ||= DEFAULT_USER_PREFERENCES.autoplay.to_unsafe
continue ||= DEFAULT_USER_PREFERENCES.continue.to_unsafe
related_videos ||= DEFAULT_USER_PREFERENCES.related_videos.to_unsafe
listen ||= DEFAULT_USER_PREFERENCES.listen.to_unsafe
local ||= DEFAULT_USER_PREFERENCES.local.to_unsafe
preferred_captions ||= DEFAULT_USER_PREFERENCES.captions
quality ||= DEFAULT_USER_PREFERENCES.quality
related_videos ||= DEFAULT_USER_PREFERENCES.related_videos.to_unsafe
speed ||= DEFAULT_USER_PREFERENCES.speed
video_loop ||= DEFAULT_USER_PREFERENCES.video_loop.to_unsafe
volume ||= DEFAULT_USER_PREFERENCES.volume

View File

@ -28,6 +28,11 @@ function update_value(element) {
<input name="continue" id="continue" type="checkbox" <% if preferences.continue %>checked<% end %>>
</div>
<div class="pure-control-group">
<label for="local"><%= translate(locale, "Proxy videos? ") %></label>
<input name="local" id="local" type="checkbox" <% if preferences.local %>checked<% end %>>
</div>
<div class="pure-control-group">
<label for="listen"><%= translate(locale, "Listen by default: ") %></label>
<input name="listen" id="listen" type="checkbox" <% if preferences.listen %>checked<% end %>>

View File

@ -0,0 +1,75 @@
<% content_for "header" do %>
<title>Privacy Policy - Invidious</title>
<% end %>
<div class="h-box">
<%= Markdown.to_html(<<-END_PRIVACY_POLICY
## Privacy
This document concerns what data you provide to this website, the purpose of the data, how the data is stored, and how the data can be removed.
### Data you directly provide
Data that you provide to the website for the purpose of the site's operation (for example: an account name, account password, or channel subscription) will be stored in the website's database until the user decides to remove it. This data will not be intentionally shared with anyone or anything.
Information stored about a registered user is limited to:
- a list of session tokens for remaining logged in across devices
- the last time an account was updated (to provide accurate notifications)
- a list of video IDs identifying notifications from a user's subscriptions
- a list of channel UCIDs the user is subscribed to
- a user ID (for persistent storage of subscriptions and preferences)
- a json object containing user preferences
- a hashed password if applicable (not present on google accounts)
- a randomly generated token for providing an RSS feed of a user's subscriptions
- a list of video IDs identifying watched videos
The above list reflects [this code](https://github.com/omarroth/invidious/blob/master/src/invidious/users.cr#L14-L51).
Users can clear their watch history using the [clear watch history](/clear_watch_history) page.
If a user is logged in with a Google account, no password will ever be stored. This website uses the session token provided by Google to identify a user, but does not store the information required to make requests on a user's behalf without their knowledge or consent.
### Data you passively provide
When you request any resource from this website (for example: a page, a font, an image, or an API endpoint) information about the request may be logged.
Information about a request is limited to:
- the time the request was made
- the status code of the response
- the method of the request
- the requested URL
- how long it took to complete the request.
No identifying information is logged, such as the visitor's cookie, user-agent, or IP address. Here are a couple lines to serve as an example:
```
2019-01-19 16:37:47 +00:00 200 GET /api/v1/comments/xrlETJYzH-c?format=html&hl=en-US 1345.88ms
2019-01-19 16:37:53 +00:00 200 GET /vi/r5P-f5arPXE/maxres.jpg 1085.41ms
2019-01-19 16:37:54 +00:00 200 GET /watch 7.04ms
```
This website does not store the visitor's user-agent or IP address and does not use fingerprinting, advertisements, or tracking of any form.
This website provides links to googlevideo.com to provide audio and video playback. googlevideo.com is owned by Google and is subject to their [privacy policy](https://policies.google.com/privacy).
### Data stored in your browser
This website uses browser cookies to authenticate registered users. This data consists of:
- An account token to keep you logged into the website between visits, which is sent when any page is loaded while you are logged in
This website also provides an option to store site preferences, such as the theme or locale, without an account. Using this feature will store a cookie in the visitor's browser containing their preferences. This cookie is sent on every request and does not contain any identifying information.
You can remove this data from your browser by logging out of this website, or by using your browser's cookie-related controls to delete the data.
### Removal of data
To remove data stored in your browser, you can log out of the website, or you can use your browser's cookie-related controls to delete the data.
To remove data that has been stored in the website's database, you can use the [delete my account](/delete_account) page.
END_PRIVACY_POLICY
)
%>
</div>

View File

@ -209,14 +209,17 @@
<a rel="jslicense" href="/licenses">
<%= translate(locale, "View JavaScript license information.") %>
</a>
</div>
/
<i class="icon ion-ios-paper"></i>
<a href="/privacy">
<%= translate(locale, "View privacy policy.") %>
</a>
</div>
<div class="pure-u-1 pure-u-md-1-3">
<i class="icon ion-logo-github"></i>
<%= translate(locale, "Current version: ") %>
<%= CURRENT_VERSION %>-
<%= CURRENT_COMMIT %>
<%= translate(locale, "Current version: ") %> <%= CURRENT_VERSION %>-<%= CURRENT_COMMIT %>
<i class="icon ion-logo-github"></i>
<%= CURRENT_BRANCH %>
<%= CURRENT_BRANCH %></div>
</div>
</div>
</div>