diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index eb4b1ad..190f23c 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -1,4 +1,10 @@ module ApplicationHelper + def locale_collection + I18n.available_locales.map do |locale| + [t("locales.#{locale}"), locale] + end + end + def action_buttons(conference, record, actions = [:index, :show, :edit, :destroy]) klass = record.class output = '' diff --git a/config/initializers/assets.rb b/config/initializers/assets.rb index 2d9ae76..417380f 100644 --- a/config/initializers/assets.rb +++ b/config/initializers/assets.rb @@ -5,6 +5,10 @@ Rails.application.config.assets.version = '1.0' # Add additional assets to the asset load path # Rails.application.config.assets.paths << Emoji.images_path +Rails.application.config.assets.paths << 'lib/initfest/assets/images' +Rails.application.config.assets.paths << 'lib/initfest/assets/javascripts' +Rails.application.config.assets.paths << 'lib/initfest/assets/stylesheets' +Rails.application.config.assets.precompile << /\.(?:png|jpg|jpeg|gif)\z/ # Precompile additional assets. # application.js, application.css, and all non-JS/CSS in app/assets folder are already added. diff --git a/config/locales/simple_form.bg.yml b/config/locales/simple_form.bg.yml index 0290bdb..a093d19 100644 --- a/config/locales/simple_form.bg.yml +++ b/config/locales/simple_form.bg.yml @@ -30,23 +30,13 @@ bg: biography: Опишете се с няколко изречения, говорейки за себе си в трето лице :) github: Потребителското Ви име в Github twitter: Потребителското Ви име в Twitter - lecture: - title: Заглавието на лекцията Ви - subtitle: Подзаглавието на лекцията Ви (ако има такова) - track_id: Потокът от лекции, в който искате да попадне лекцията Ви - length: Продължителността на лекция може да бъде от 40 до 45 минути - language: Език, на който ще бъде водена лекцията - abstract: Резюме на лекцията, което да може да бъде прочетено от посетителите (1 абзац) - description: Подробно описание на лекцията (няколко абзаца) + event: + title: Заглавието на събитието Ви + subtitle: Подзаглавието на събитието Ви (ако има такова) + track: Потокът от лекции, в който искате да попадне събитието Ви + length: Продължителността на събитието може да бъде от 40 до 45 минути + language: Език, на който ще бъде водено събитието + abstract: Резюме на събитието, което да може да бъде прочетено от посетителите (1 абзац) + description: Подробно описание на събитието (няколко абзаца) notes: Забележки, които искате да споделите с организаторския екип - agreement: Отбележете съгласни ли сте с това лекцията Ви да бъде записана и публикувана под лиценз CC-BY-ND (Creative Commons – Attribution – No Derivatives) - workshop: - title: Заглавието на уъркшопа Ви - subtitle: Подзаглавието на уъркшопа Ви (ако има такова) - track_id: Потокът от уъркшопи, в който искате да попадне уъркшопа Ви - length: Продължителността на всеки уъркшоп може да бъде от 30 до 120 минути - language: Език, на който ще бъде воден уъркшопа - abstract: Резюме на уъркшопа, което да може да бъде прочетено от посетителите (1 абзац) - description: Подробно описание на уъркшопа (няколко абзаца) - notes: Забележки, които искате да споделите с организаторския екип - agreement: Отбележете съгласни ли сте с това уъркшопът Ви да бъде записан и публикуван под лиценз CC-BY-ND (Creative Commons – Attribution – No Derivatives) + agreement: Отбележете съгласни ли сте с това събитието Ви да бъде записано и публикувано под лиценз CC-BY-ND (Creative Commons – Attribution – No Derivatives) \ No newline at end of file diff --git a/config/locales/views.bg.yml b/config/locales/views.bg.yml index bcb1c79..70e16d4 100644 --- a/config/locales/views.bg.yml +++ b/config/locales/views.bg.yml @@ -5,3 +5,77 @@ bg: see_details: Повече информация user: info: Информация за потребител + welcome: + submit_event: "Предложи %{event_type}" + home_title: "%{conference} - зов за лектори" + what_we_ask: 'Бихме искали да получим предложенията Ви за лекции и уъркшопи, принадлежащи към следните категории до 30 септември 2014г.:' + license_notice: 'Имайте предвид, че презентациите ви впоследствие ще бъдат публикувани с лиценз CC-BY-ND (Creative Commons – Attribution – No derivatives).' + submit_event: Предложи %{event_type} + resend_instructions_header: Повторно изпращане на инструкции за потвърждаване на акаунт + resend_instructions_btn: Изпрати отново инструкциите + + enter: Вход + login: Вход + registration: Регистрация + lostpass: Забравена парола? + did_not_get_confirmation: Не сте получили инструкции за потвърждение? + did_not_get_unlock: Не сте получили инструкции за отключване? + change_pass: Промяна на парола + send_lostpass_instructions: Изпрати ми инструкции за промяна на парола + + login_data: Данни за вход в системата + login_with: "Влез с %{with}" + + speaker_profile: Лекторски профил + please_fill_in_your_speaker_profile: Моля, попълнете данните в лекторския си профил. + expected_validation: "Очаква се потвърждение на: %{email}" + pass_update_hint1: Не попълвайте, ако не желаете да промените паролата си + pass_update_hint2: Попълнете, ако искате да промените паролата или e-mail адреса си. + update: Обнови + + resend_unlock_instructions_title: Изпрати отново инструкции за отключване + + edit_speaker_profile: Редакция на профил + + edit_workshop: Редакция на уъркшоп + + edit_title: "поток: „%{track}“, продължителност: %{len} мин." + abstract: Резюме + description: Описание + edit: Редактирай + + new_workshop_title: Предложи нов уъркшоп + + my_workshops: Моите предложения за уъркшопи + no_workshops_submitted: Все още не сте предложили уъркшоп + + edit_talk: Редакция на лекция + + submit_talk_header: Предложи нова лекция + + my_talks: Моите предложения за лекции + no_talks_submitted: Все още не сте предложили лекция + + hello: "Здравейте, %{name}" + account_locked: Акаунтът Ви беше заключен поради голям брой неуспешни опити за влизане в него. + click_to_unlock: 'Кликнете линкът отдолу, за да го отключите:' + + welcome: "Добре дошли, %{name}" + confirm_by_clicking: Можете да потвърдите акаунта си, като кликнете на линка отдолу + + someone_requested_passreset: Някой поиска линк за промяна на парола на акаунта Ви. Паролата може да бъде променена от линкът отдолу. + do_not_want_pass_reset1: Ако не желаете да смените паролата си, моля изтрийте това писмо. + do_not_want_pass_reset2: Паролата Ви няма да бъде променена, докато не кликнете горния линк и не въведете нова парола. + + home: Начало + talks: Лекции + workshops: Уъркшопи + logout: Изход + + of_motto: да споделим свободата + + meta_data: "Език: %{language}, поток: „%{track}“, продължителност: %{length} мин." + suggestion_and_speaker_count: "%{suggestions} предложения от %{speakers} лектори" + + lecture_was_successfully_confirmed: "Лекцията беше потвърдена успешно" + workshop_was_successfully_confirmed: "Уъркшопът беше потвърден успешно" diff --git a/lib/initfest/assets/images/initfest/bg_BG.png b/lib/initfest/assets/images/initfest/bg_BG.png new file mode 100644 index 0000000..0469f06 Binary files /dev/null and b/lib/initfest/assets/images/initfest/bg_BG.png differ diff --git a/lib/initfest/assets/images/initfest/en_US.png b/lib/initfest/assets/images/initfest/en_US.png new file mode 100644 index 0000000..ff701e1 Binary files /dev/null and b/lib/initfest/assets/images/initfest/en_US.png differ diff --git a/lib/initfest/assets/images/initfest/logo.png b/lib/initfest/assets/images/initfest/logo.png new file mode 100644 index 0000000..b994965 Binary files /dev/null and b/lib/initfest/assets/images/initfest/logo.png differ diff --git a/lib/initfest/assets/images/initfest/navbg.jpg b/lib/initfest/assets/images/initfest/navbg.jpg new file mode 100644 index 0000000..9efb776 Binary files /dev/null and b/lib/initfest/assets/images/initfest/navbg.jpg differ diff --git a/lib/initfest/assets/javascripts/initfest/application.js b/lib/initfest/assets/javascripts/initfest/application.js new file mode 100644 index 0000000..646c5ab --- /dev/null +++ b/lib/initfest/assets/javascripts/initfest/application.js @@ -0,0 +1,15 @@ +// This is a manifest file that'll be compiled into application.js, which will include all the files +// listed below. +// +// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, +// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path. +// +// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the +// compiled file. +// +// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details +// about supported directives. +// +//= require jquery +//= require jquery_ujs +//= require_tree . diff --git a/lib/initfest/assets/stylesheets/initfest/_forms.scss b/lib/initfest/assets/stylesheets/initfest/_forms.scss new file mode 100644 index 0000000..f8e21f3 --- /dev/null +++ b/lib/initfest/assets/stylesheets/initfest/_forms.scss @@ -0,0 +1,137 @@ +.alert-error { + color: red; +} + +.input { + position: relative; + margin: 0 0 1em 0; + border-top: 0.1em dotted #999; + padding: 1em 0; +} + +.input label { + font-size: 1em; + display: block; + width: 12em; + float: left; +} + +.input { + input.string, input.email, input.password, select.select, input.numeric { + font-size: 1em; + width: 20em; + float: left; + } + + textarea { + height: 15em; + width: 45em; + } + + img { + padding: 5px; + display: block; + border: 1px solid #CCC; + background-color: #F1F1F1; + margin-left: 12em; + margin-bottom: 10px; + } + +} + +.input label.boolean { + margin-left: 12em; +} + +.input .hint, .input .error { + display: block; + clear: both; + font-size: 0.75em; + font-style: italic; + width: 20em; + margin: 0 0 0 16em; + padding: 1em 0 0 0; +} + +.input .error { + font-style: normal; + padding: 1em 0 0 0; + color: #F00; +} + +.input .error::before { + content: "⇧"; + display: inline-block; + font-size: 2em; + margin: 0 0.2em 0 0; + transform: translate(0, 0.1em); +} + +.btn { + display: block; + margin: 2em 0 0 13em; +} + +/* styling of the button */ +.btn { + background: #233e83; + padding: 0.4em 0.8em; + border-radius: 0.2em; + color: #FFF; + border: none; + border-bottom: 0.2em solid #7A95DC; + cursor: pointer; + transition: background 200ms, border 200ms, transform 200ms; + -webkit-transition: background 200ms, border 200ms, transform 200ms; +} + +.btn:hover { + background: #152551; +} + +.btn:active { + background: #597AD2; + border-bottom: 0.2em solid #000; + transform: translate(0, 0.1em); + -webkit-transform: translate(0, 0.1em); +} + +.centered { + text-align: center; +} + +.large { + padding: 30px; +} + +.btn-link { + background: #233e83; + padding: 0.4em 0.8em; + border-radius: 0.2em; + color: #FFF; + border: none; + border-bottom: 0.2em solid #7A95DC; + cursor: pointer; + transition: background 200ms, border 200ms, transform 200ms; + -webkit-transition: background 200ms, border 200ms, transform 200ms; +} + +.btn-link:link, .btn-link:active, .btn-link:visited { + color: #FFF; + text-decoration: none; + } + +.btn-link:hover { + background: #152551; +} + +.btn-link:active { + background: #597AD2; + border-bottom: 0.2em solid #000; + transform: translate(0, 0.1em); + -webkit-transform: translate(0, 0.1em); +} + +.btn-link-large { + font-size: 2em; +} diff --git a/lib/initfest/assets/stylesheets/initfest/application.scss b/lib/initfest/assets/stylesheets/initfest/application.scss new file mode 100644 index 0000000..3f41adc --- /dev/null +++ b/lib/initfest/assets/stylesheets/initfest/application.scss @@ -0,0 +1,8 @@ +@import "font-awesome-sprockets"; +@import "font-awesome"; + +@import 'initfest/styles'; +@import 'initfest/forms'; +@import 'initfest/flash_messages'; + +nav { background-image: image-url('initfest/navbg.jpg'); } diff --git a/lib/initfest/assets/stylesheets/initfest/flash_messages.scss b/lib/initfest/assets/stylesheets/initfest/flash_messages.scss new file mode 100644 index 0000000..477d46d --- /dev/null +++ b/lib/initfest/assets/stylesheets/initfest/flash_messages.scss @@ -0,0 +1,18 @@ +#flash_messages { + border: 1px solid #CCC; + background-color: #F1F1F1; + padding: 10px; + margin: 20px 100px 10px 100px; + + div { + text-align: center; + } + + .notice { + color: green; + } + + .alert { + color: orange; + } +} \ No newline at end of file diff --git a/lib/initfest/assets/stylesheets/initfest/styles.css b/lib/initfest/assets/stylesheets/initfest/styles.css new file mode 100644 index 0000000..91b14af --- /dev/null +++ b/lib/initfest/assets/stylesheets/initfest/styles.css @@ -0,0 +1,827 @@ +/* cyrillic-ext */ +@font-face { + font-family: 'Arimo'; + font-style: normal; + font-weight: 400; + src: local('Arimo'), url(http://fonts.gstatic.com/s/arimo/v8/an78_18DAUCSU6a4qacRuA.woff2) format('woff2'); + unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; +} +/* cyrillic */ +@font-face { + font-family: 'Arimo'; + font-style: normal; + font-weight: 400; + src: local('Arimo'), url(http://fonts.gstatic.com/s/arimo/v8/4NN7UQ_VsRBn7NDD9HKUPw.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Arimo'; + font-style: normal; + font-weight: 400; + src: local('Arimo'), url(http://fonts.gstatic.com/s/arimo/v8/ye-fuRt_0mKrPeIp6Mwa8A.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Arimo'; + font-style: normal; + font-weight: 400; + src: local('Arimo'), url(http://fonts.gstatic.com/s/arimo/v8/VF6T-UwCT6WyIiUKP6AykQ.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'Arimo'; + font-style: normal; + font-weight: 400; + src: local('Arimo'), url(http://fonts.gstatic.com/s/arimo/v8/eSHy7hCA8QR4qTF-59v60g.woff2) format('woff2'); + unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Arimo'; + font-style: normal; + font-weight: 400; + src: local('Arimo'), url(http://fonts.gstatic.com/s/arimo/v8/V41d6938Z8eBLYL302F8Ig.woff2) format('woff2'); + unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Arimo'; + font-style: normal; + font-weight: 400; + src: local('Arimo'), url(http://fonts.gstatic.com/s/arimo/v8/chnpHRvNNCWcZBKRQ4gVug.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Arimo'; + font-style: normal; + font-weight: 700; + src: local('Arimo Bold'), local('Arimo-Bold'), url(http://fonts.gstatic.com/s/arimo/v8/ar6XjGD_YvbpY9XD5YxKTBTbgVql8nDJpwnrE27mub0.woff2) format('woff2'); + unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; +} +/* cyrillic */ +@font-face { + font-family: 'Arimo'; + font-style: normal; + font-weight: 700; + src: local('Arimo Bold'), local('Arimo-Bold'), url(http://fonts.gstatic.com/s/arimo/v8/XzFO_hPcAZmADxw_2htokBTbgVql8nDJpwnrE27mub0.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Arimo'; + font-style: normal; + font-weight: 700; + src: local('Arimo Bold'), local('Arimo-Bold'), url(http://fonts.gstatic.com/s/arimo/v8/Tq4Zh2K0uru54pu6hyua9BTbgVql8nDJpwnrE27mub0.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Arimo'; + font-style: normal; + font-weight: 700; + src: local('Arimo Bold'), local('Arimo-Bold'), url(http://fonts.gstatic.com/s/arimo/v8/gRIQMcBGUlcKSvTGaO9yHBTbgVql8nDJpwnrE27mub0.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'Arimo'; + font-style: normal; + font-weight: 700; + src: local('Arimo Bold'), local('Arimo-Bold'), url(http://fonts.gstatic.com/s/arimo/v8/u0Tw4Txbkc9Av4uzN1j1aBTbgVql8nDJpwnrE27mub0.woff2) format('woff2'); + unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Arimo'; + font-style: normal; + font-weight: 700; + src: local('Arimo Bold'), local('Arimo-Bold'), url(http://fonts.gstatic.com/s/arimo/v8/XCmwOdi6K62tkWaszbVGURTbgVql8nDJpwnrE27mub0.woff2) format('woff2'); + unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Arimo'; + font-style: normal; + font-weight: 700; + src: local('Arimo Bold'), local('Arimo-Bold'), url(http://fonts.gstatic.com/s/arimo/v8/27rE5lMk9EHpLbxiIuGd0BTbgVql8nDJpwnrE27mub0.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Arimo'; + font-style: italic; + font-weight: 400; + src: local('Arimo Italic'), local('Arimo-Italic'), url(http://fonts.gstatic.com/s/arimo/v8/-lqiBwxkYHykb59Lvn7rk_Y6323mHUZFJMgTvxaG2iE.woff2) format('woff2'); + unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; +} +/* cyrillic */ +@font-face { + font-family: 'Arimo'; + font-style: italic; + font-weight: 400; + src: local('Arimo Italic'), local('Arimo-Italic'), url(http://fonts.gstatic.com/s/arimo/v8/tvCMF1Qlf0MEvcc7JEzrhfY6323mHUZFJMgTvxaG2iE.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Arimo'; + font-style: italic; + font-weight: 400; + src: local('Arimo Italic'), local('Arimo-Italic'), url(http://fonts.gstatic.com/s/arimo/v8/aKQL0kir7sjNM0_YzHc9yvY6323mHUZFJMgTvxaG2iE.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Arimo'; + font-style: italic; + font-weight: 400; + src: local('Arimo Italic'), local('Arimo-Italic'), url(http://fonts.gstatic.com/s/arimo/v8/c6Ldt38oFMowvdIZIi9CaPY6323mHUZFJMgTvxaG2iE.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'Arimo'; + font-style: italic; + font-weight: 400; + src: local('Arimo Italic'), local('Arimo-Italic'), url(http://fonts.gstatic.com/s/arimo/v8/Phj51JGRBuPcxq7i7-qcHPY6323mHUZFJMgTvxaG2iE.woff2) format('woff2'); + unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Arimo'; + font-style: italic; + font-weight: 400; + src: local('Arimo Italic'), local('Arimo-Italic'), url(http://fonts.gstatic.com/s/arimo/v8/-CSRdP_Aes2aBSIDGwIm6vY6323mHUZFJMgTvxaG2iE.woff2) format('woff2'); + unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Arimo'; + font-style: italic; + font-weight: 400; + src: local('Arimo Italic'), local('Arimo-Italic'), url(http://fonts.gstatic.com/s/arimo/v8/W9ndJDdcIndrj-dqFXLbVvY6323mHUZFJMgTvxaG2iE.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000; +} + +body { + width: 100%; + height: 100%; + margin: 0; + padding: 0; + font-size: 16px; + font-family: 'Arimo', sans-serif; +} +@media all and (max-width: 400px) { + body { + font-size: 14px; + } +} +.content { + max-width: 960px; + margin: 0 auto; + position: relative; +} +p { + margin: 0 0 1em 0; + padding: 0; + line-height: 1.5em; + font-weight: 300; +} +h1.big { + font-size: 2.4em; + margin-top: 0; + margin-bottom: 0.6em; + padding-top: 0; +} +a { + color: #000; +} +a:hover { + color: #7789b5; +} +a img { + border: none; +} +h3 small { + font-size: 0.65em; +} +.tac { + text-align: center; +} +@media all and (max-width: 960px) { + .content { + padding: 0 1em; + } +} +.left { float: left; } +.right { float: right; } +.cf::after, .cf::before { + content: " "; + clear: both; + display: block; +} + +/* Navigation */ +nav { + position: relative; + height: 84px; + background: url("../img/navbg.jpg") repeat-x; +} +nav ul { + float: right; + list-style: none; + margin: 0; + padding: 0; +} +nav ul li { + position: relative; +} + +nav .menu > li { + float: left; + margin: 0; + padding: 0; +} + +nav .menu > li { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + transition: border-top 200ms; + -webkit-transition: border-top 200ms; + border-top: 0 solid #FFF; +} + +nav .menu > li:hover { + border-top: 0.4em solid #A8D6FF; +} + +.menu li.fa::before { + display: block; + padding: 30px 4px 0 4px; +} + + +.menu li.fa a { + padding-top: 0; + position: absolute; + display: block; + top: 0; + left: 0; + height: 52px; + width: 10px; +} + +nav ul a { + color: #000; + text-decoration: none; + display: block; + padding: 1.5em 0.4em; +} + +nav ul .sub-menu { + display: none; + position: absolute; + background: #fff; + width: 200px; + left: 50%; + margin-left: -100px; + box-shadow: 0 3px 5px -3px #000 +} + +nav ul li:hover .sub-menu { + display: block; + position: absolute; +} + +nav ul .sub-menu li, +nav ul .sub-menu li a { display: block; width: 100%; } + +nav ul .sub-menu li a { padding: 1em 0; text-align: center; } + +nav ul .sub-menu li { border-bottom: 1px solid #ccc; } + +nav ul .separator { + display: block; + width: 0.05em; + background: #B7B7B7; + height: 2em; + margin: 1.1em 0.4em 0 0.4em; +} +nav .logo { + display: block; + position: absolute; + top: 0; + left: 0; +} +nav .selected { + font-weight: bold; +} +@media all and (max-width: 840px) { + nav .logo { + display: none; + } + nav .logo img { + display: block; + max-height: 100%; + } + nav { + height: auto; + background: none; + padding: 0.4em 0; + border-bottom: 0.2em solid #d7ecff; + } + nav ul { + float: none; + } + nav ul a { + padding: 0.2em; + } + nav ul .separator { + display: block; + width: 0.05em; + background: #B7B7B7; + height: 1em; + margin: 0.2em 0.2em 0 0.2em; + } + nav ul a:hover { + border-top: 0 solid #A8D6FF; + } + nav .fa-twitter, nav .fa-facebook, nav .fa-rss { + display: none; + } +} + +/* Banner */ + +.banner { + height: 258px; + background: url("../img/banner.jpg") no-repeat; + background-size: cover; + padding: 0.2em 0 0 0; +} +.banner img { + display: block; + max-width: 100%; + height: 247px; + margin: 0 auto; +} +@media all and (max-width: 840px) { + .banner { display: none; } +} + +/* Grid */ +.grid { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + width: 100%; +} +.grid::after { + content: " "; + clear: both; + display: block; +} +.grid .col2 { + width: 50%; + float: left; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.grid .col2+.col2, .grid .col3+.col3, .grid .col4+.col4 { + padding: 0 0 0 1em; +} +.grid .col3 { + width: 33%; + float: left; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.grid .col3:nth-child(3n + 1) { + clear: both; + padding: 0; +} +.grid .col4 { + width: 25%; + float: left; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.grid .col4:nth-child(4n + 1) { + clear: both; + padding: 0; +} +.grid .col-left { + width: 70%; + float: left; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 0 1.6em 0 0; +} +.grid .col-right { + width: 30%; + float: left; + margin-bottom: 2em; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.grid .col-right .content { + width: 100%; +} + +@media all and (max-width: 600px) { + .grid .col2, .grid .col3, .grid .col4, .grid .col-left, .grid .col-right { + width: 100%; + float: none; + padding: 0 0 1em 0; + } + .grid .col2+.col2, .grid .col3+.col3, .grid .col4+.col4 { + padding: 0; + } +} + +/* Separator */ +.separator { + width: 100%; + margin: 1.8em 0; + height: 0.1em; + background: #7789b5; +} + +/* News */ +h4 { + margin: 1em 0 0 0; + padding: 0; + height: 70px; +} + +p.info + p { + height: 240px; + overflow: hidden; +} + +.entry-content { + padding: 0 0 2em 0; +} +.info { + color: #8F8F8F; + font-size: 0.6em; + margin: 0 0 1em 0; +} +.button { + display: inline-block; + padding: 0.4em 0.6em; + border-radius: 0.4em; + background: #DEDEDE; + font-size: 0.8em; + margin: 1em 0 1em 0; + text-decoration: none; + border-bottom: 0.15em solid #999; +} + +/* Footer */ + +footer { + margin: -0.3em 0 0; + padding-top: 1em; + padding-bottom: 1em; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + background: #ddd; +} + +footer h3 { + font-weight: bold; + font-size: 1em; +} + +footer .content li { + list-style: none; + margin-bottom: 11px; +} + +footer .content li a { + margin-left: 4px; + color: #000; + font-size: 16px; + text-decoration: underline; +} + +#copyright { + width: 75%; + margin: 15px auto 0; + padding-top: 40px; + border-top: 1px solid #999; + text-align: center; + font-size: 16px; +} + +/* Sub navigation */ +.subnav { + margin-top: 1.6em; + list-style: none; + padding-left: 0; +} +.subnav .menu { + margin-left: -2.2em; +} +.subnav li { + float: left; + padding: 0; + margin: 0 1em 0 0; + list-style: none outside; +} +.subnav li.selected { + font-weight: bold; +} +.subnav a { + text-decoration: none; +} +@media all and (max-width: 960px) { + .subnav { + padding: 0 1em; + } +} + +/* Speaker */ +.speaker { + position: relative; + margin: 0 0 2em 0; +} +.speaker::after { + content: " "; + clear: both; + display: block; +} +.speaker > img { +/* width: 100px; */ + float: left; + padding: 0.3em; + background: #FFF; + -moz-box-shadow: 0px 0px 1px 1px #999; + -webkit-box-shadow: 0px 0px 1px 1px #999; + box-shadow: 0px 0px 1px 1px #999; + margin: 0 1em 2em 0; +} +.speaker .icons { + text-align: center; + display: inline-block; + margin: 0 0 0 0.1em; +} +.speaker .icons a { + display: inline-block; + margin: 0 0.3em 0 0; +} +.speaker h3 { + margin: 0 0 0.4em 0; + padding: 0; +} + +/* Sponsors */ +.sponsors-item { + padding: 0 0 2em 0; +} +.sponsors-item .col2 > img { + display: inline-block; + margin: 0 0 2em 0; +} + +.sponsors-frontpage a { + display: inline-block; + padding: 0 2.2em 1em 0; +} + +/* Plugins */ +.gmp_map_opts { + float: none !important; + margin-top: 2em !important; +} + + +/********************************************* + * GLOBAL STYLES (Small style changes) + *********************************************/ + +h1 { font-size: 1.8em; } +h2 { font-size: 1.8em; } +h3 { font-size: 1.6em; } +h4 { font-size: 1.4em; } +h5 { font-size: 1.2em; } +h6 { font-size: 1.0em; } + +h1, h2, h3, h4, h5, h6 { font-weight: normal; } + +a { color: #428bca; text-decoration: none; } +a:hover { text-decoration: underline; } + + +/********************************************* + * Navigation + *********************************************/ + +nav .menu > li { margin: 1px 10px; } + +/********************************************* + * Tagline & Sponsors + *********************************************/ + +.col2.tagline { width: 70%; } + +.col2.sponsors { width: 30%; } + +.separator { margin: 2.4em 0; height: 1px; background: #DBDBDB; } + +section.content.grid.homepage { margin-top: 2em; } + +a.footer { color: #333; } + +a.button { text-decoration: none; color: #333; } + +a.button:hover { opacity: 0.8; } + +/********************************************* + * Team members + *********************************************/ + +.members { + margin: 0 0 2em 0; +} +.member { + margin: 0 0 1em 0; +} +.member a { + display: block; +} +.member a > img { + width: 100px; + max-width: 100%; + padding: 0.3em; + background: #FFF; + -moz-box-shadow: 0px 0px 1px 1px #999; + -webkit-box-shadow: 0px 0px 1px 1px #999; + box-shadow: 0px 0px 1px 1px #999; +} +.member span { + display: block; +} + +.member .icons a { + display: inline-block; + margin: 0 0.3em 0 0; +} + +/* from the old site */ +.program a:visited { + color:#004B91; +} + +.program table { + width: 99%; +} + +.program h2 { +} + +.program table, .program td, .program tr, .program th { + border: 0; +} +.program table td.time { + width: 130px; + vertical-align: baseline; +} +.program table caption { + font-size: 120%; + font-weight: bold; +} +.program table td, .program table th { + padding: 1em 0; +} +/********************************************* + * Team members + *********************************************/ +.schedule { + width: 100%; + font-size: 0.8em; + margin: 0 0 3em 0; + clear: both; +} +.schedule-legend { + width: 300px; +} +.schedule th, .schedule td { + border-bottom: 1px solid #000; + border-right: 1px dotted #999; + padding: 0.6em 0.4em; + text-align: center; + vertical-align: middle; +} +.schedule-legend td { + padding: 0.4em; +} +.schedule a { + border-bottom: dotted 1px #000; + color: #000; +} +.schedule a:hover { + border-bottom: none; +} +.schedule tr td:first-child { + min-width: 82px; +} +.schedule-day { + font-weight: bold; +} +.schedule-empty { + background: #FFF; +} +.schedule-social { + background: #EDD7A7; +} +.schedule-technical { + background: #A4D183; +} +.schedule-workshop { + background: #E2E0E9; +} +.schedule-en::after { + content: " "; + background: url('../img/en_US.png'); + width: 16px; + height: 11px; + display: block; + margin: 0.3em auto 0.3em auto; +} +.schedule-bg::after { + content: " "; + background: url('../img/bg_BG.png'); + width: 16px; + height: 11px; + display: block; + margin: 0.3em auto 0.3em auto; +} +.schedule-civic { + background: #E8AAAB; +} +.schedule-advanced-technical { + background: #91C4DF; +} +.schedule-open-biz { + background: #DECDCB; +} +.schedule-misc { + background: #B0E9EC; +} +.schedule-open-art { + background: #ED9134; +} +.schedule-avatar { + float: left; + padding: 0.3em; + background: #FFF; + -moz-box-shadow: 0px 0px 1px 1px #999; + -webkit-box-shadow: 0px 0px 1px 1px #999; + box-shadow: 0px 0px 1px 1px #999; + margin: 0 1em 2em 0; +} + +p img { + max-width: 100%; +} + +.front-page-sponsors { + text-align: center; +} +.front-page-big-title h1 { + font-size: 1.4em; + text-align: center; +} +.content.front-page-big-title { + padding: 1em 0 0 0; +} + +section.entry-meta { + font-size: 0.8em; + padding: 0 0 2em 0; + color: #999; +} +footer.entry-footer { + padding: 1em; + border-radius: 0.4em; + background: #F0F0F0; + font-size: 0.8em; +} +.alignright { + display: inline; + float: right; + margin-left: 1.625em; +} diff --git a/lib/initfest/views/devise/confirmations/new.slim b/lib/initfest/views/devise/confirmations/new.slim new file mode 100644 index 0000000..d0dad8b --- /dev/null +++ b/lib/initfest/views/devise/confirmations/new.slim @@ -0,0 +1,15 @@ +- content_for(:title) { ":: #{t :resend_instructions_header}" } + +h2.entry-title = t :resend_instructions_header + += simple_form_for(resource, wrapper: :default, as: :user, url: user_confirmation_path) do |f| + = f.error_notification + = f.full_error :confirmation_token + + .form-inputs + = f.input :email, required: true, autofocus: true, hint: false + + .form-actions + = f.button :submit, t(:resend_instructions_btn) + +== render 'devise/shared/links' diff --git a/lib/initfest/views/devise/passwords/edit.slim b/lib/initfest/views/devise/passwords/edit.slim new file mode 100644 index 0000000..a49e4bc --- /dev/null +++ b/lib/initfest/views/devise/passwords/edit.slim @@ -0,0 +1,18 @@ +- content_for(:title) { ":: #{t :change_pass}" } + +h2.entry-title = t :change_pass + += simple_form_for(resource, wrapper: :default, as: :user, url: user_password_path, html: { method: :put }) do |f| + = f.error_notification + + = f.input :reset_password_token, as: :hidden + = f.full_error :reset_password_token + + .form-inputs + = f.input :password, required: true, autofocus: true + = f.input :password_confirmation, required: true + + .form-actions + = f.button :submit, t(:change_pass) + += render 'devise/shared/links' diff --git a/lib/initfest/views/devise/passwords/new.slim b/lib/initfest/views/devise/passwords/new.slim new file mode 100644 index 0000000..55f2297 --- /dev/null +++ b/lib/initfest/views/devise/passwords/new.slim @@ -0,0 +1,14 @@ +- content_for(:title) { ":: #{t :lostpass}" } + +h2.entry-title = t :lostpass + += simple_form_for(resource, wrapper: :default, as: :user, url: user_password_path) do |f| + = f.error_notification + + .form-inputs + = f.input :email, required: true, autofocus: true, hint: false + + .form-actions + = f.button :submit, t(:send_lostpass_instructions) + +== render 'devise/shared/links' diff --git a/lib/initfest/views/devise/registrations/edit.slim b/lib/initfest/views/devise/registrations/edit.slim new file mode 100644 index 0000000..6bfc02b --- /dev/null +++ b/lib/initfest/views/devise/registrations/edit.slim @@ -0,0 +1,25 @@ +- content_for(:title) { t :edit_speaker_profile } + += simple_form_for(resource, wrapper: :default, as: :user, url: user_registration_path, html: { method: :put, multipart: true }) do |f| + .form_inputs + / h2 + / - if current_user.personal_profile(current_conference).present? + / = link_to t(:personal_profile), edit_personal_profile_path + / - else + / = link_to t(:personal_profile), new_personal_profile_path + + .form-inputs + h3.entry-title = t :login_data + = f.input :email, required: true + = f.input :language, collection: I18n.available_locales, required: true + + - if devise_mapping.confirmable? && resource.pending_reconfirmation? + p + = t :expected_validation, email: resource.unconfirmed_email + + = f.input :password, autocomplete: "off", hint: t(:pass_update_hint1), required: false + = f.input :password_confirmation, required: false + = f.input :current_password, hint: t(:pass_update_hint2), required: true + + .form-actions + = f.button :submit, t(:update) diff --git a/lib/initfest/views/devise/registrations/new.slim b/lib/initfest/views/devise/registrations/new.slim new file mode 100644 index 0000000..bb5f2c2 --- /dev/null +++ b/lib/initfest/views/devise/registrations/new.slim @@ -0,0 +1,16 @@ +- content_for(:title) { ":: #{t :registration}" } + +h2.entry-title = t :registration + += simple_form_for(resource, wrapper: :default, as: :user, url: user_registration_path) do |f| + = f.error_notification + + .form-inputs + = f.input :email, required: true, autofocus: true + = f.input :password, required: true + = f.input :password_confirmation, required: true + + .form-actions + = f.button :submit + +== render 'devise/shared/links' diff --git a/lib/initfest/views/devise/sessions/new.slim b/lib/initfest/views/devise/sessions/new.slim new file mode 100644 index 0000000..db5c6aa --- /dev/null +++ b/lib/initfest/views/devise/sessions/new.slim @@ -0,0 +1,14 @@ +- content_for(:title) { "#{t :login}" } + +h2.entry-title = t :login + += simple_form_for(resource, wrapper: :default, as: :user, url: user_session_path) do |f| + .form-inputs + = f.input :email, required: false, autofocus: true, hint: false + = f.input :password, required: false, hint: false + = f.input :remember_me, as: :boolean, wrapper: :default if devise_mapping.rememberable? + + .form-actions + = f.button :submit, t(:login) + +== render 'devise/shared/links' diff --git a/lib/initfest/views/devise/shared/_links.slim b/lib/initfest/views/devise/shared/_links.slim new file mode 100644 index 0000000..fc5cdbd --- /dev/null +++ b/lib/initfest/views/devise/shared/_links.slim @@ -0,0 +1,15 @@ +- if controller_name != 'sessions' + = link_to t(:enter), new_user_session_path + br + +- if devise_mapping.registerable? && controller_name != 'registrations' + = link_to t(:registration), new_user_registration_path + br + +- if devise_mapping.recoverable? && controller_name != 'passwords' && controller_name != 'registrations' + = link_to t(:lostpass), new_user_password_path + br + +- if devise_mapping.confirmable? && controller_name != 'confirmations' + = link_to t(:did_not_get_confirmation), new_user_confirmation_path + br diff --git a/lib/initfest/views/layouts/public/application.html.erb b/lib/initfest/views/layouts/public/application.html.erb new file mode 100644 index 0000000..dbd8cbe --- /dev/null +++ b/lib/initfest/views/layouts/public/application.html.erb @@ -0,0 +1,22 @@ + + + + + <% if content_for? :title %> + <%= yield :title %> | + <% end %> + <%= current_conference.try :title %> + + + <%= stylesheet_link_tag "initfest/application", media: "all" %> + <%= javascript_include_tag "initfest/application" %> + <%= csrf_meta_tags %> + + + <%= render 'public/shared/nav' %> +
+ <%= render 'public/shared/flash_messages' unless flash.empty? %> + <%= yield %> +
+ + diff --git a/lib/initfest/views/public/events/_event_type.slim b/lib/initfest/views/public/events/_event_type.slim new file mode 100644 index 0000000..8c51604 --- /dev/null +++ b/lib/initfest/views/public/events/_event_type.slim @@ -0,0 +1 @@ +=> link_to t('views.welcome.submit_event', event_type: event_type.name.mb_chars.downcase), new_event_path(type: event_type.id), class: 'btn-link btn-link-large' diff --git a/lib/initfest/views/public/events/_track.slim b/lib/initfest/views/public/events/_track.slim new file mode 100644 index 0000000..1818ca1 --- /dev/null +++ b/lib/initfest/views/public/events/_track.slim @@ -0,0 +1,6 @@ +li + p + strong + = track.name + span<> – + = track.description diff --git a/lib/initfest/views/public/events/index.slim b/lib/initfest/views/public/events/index.slim new file mode 100644 index 0000000..a3222a3 --- /dev/null +++ b/lib/initfest/views/public/events/index.slim @@ -0,0 +1,14 @@ +h1.entry-title = t :home_title, conference: current_conference.title + += simple_format current_conference.description + +p = t :what_we_ask + +ul + = render partial: 'track', collection: current_conference.tracks + +p = t :license_notice + +- if current_conference.call_for_participation.in_progress? + .centered.large + = render partial: 'event_type', collection: current_conference.event_types diff --git a/lib/initfest/views/public/events/new.slim b/lib/initfest/views/public/events/new.slim new file mode 100644 index 0000000..6446c7b --- /dev/null +++ b/lib/initfest/views/public/events/new.slim @@ -0,0 +1,24 @@ += simple_form_for @event, wrapper: :default do |form| + = form.input :event_type_id, as: :hidden, wrapper: false + + h2= t('submit_event', event_type: @event.event_type.name) + + p + = form.error_notification + + .form-inputs + = form.input :title, autofocus: true + = form.input :subtitle + = form.association :track, wrapper: :default, collection: current_conference.tracks + + -# TODO length is different for different types of events (translation problem) + = form.input :length + + = form.input :language, as: :radio_buttons, collection: locale_collection, include_blank: false, wrapper: :default, checked: current_user.language + = form.input :abstract + = form.input :description + = form.input :notes + + = form.input :agreement, as: :boolean, wrapper: :default + + = form.button :submit diff --git a/lib/initfest/views/public/personal_profiles/_form.slim b/lib/initfest/views/public/personal_profiles/_form.slim new file mode 100644 index 0000000..00ec2e1 --- /dev/null +++ b/lib/initfest/views/public/personal_profiles/_form.slim @@ -0,0 +1,20 @@ += simple_form_for @profile, wrapper: :default, url: personal_profile_path do |f| + = f.error_notification + + .form-inputs + .input.file.required.personal_profile_picture + = image_tag(@profile.picture.medium.url) if @profile.picture? + = f.input :picture, as: :file, required: true, wrapper: false + + = f.hidden_field :picture_cache, class: 'image_preview', wrapper: false + = f.input :first_name, autofocus: true + = f.input :last_name + = f.input :public_email + = f.input :organisation + = f.input :github + = f.input :twitter + = f.input :mobile_phone, input_html: {value: @profile.mobile_phone.try(:phony_formatted, format: :international)} + = f.input :biography + + .form-actions + = f.button :submit diff --git a/lib/initfest/views/public/personal_profiles/edit.slim b/lib/initfest/views/public/personal_profiles/edit.slim new file mode 100644 index 0000000..d48bae0 --- /dev/null +++ b/lib/initfest/views/public/personal_profiles/edit.slim @@ -0,0 +1,5 @@ +- content_for(:title) { ":: #{t :personal_profile}" } + +h2.entry-title = t :personal_profile + += render 'form' diff --git a/lib/initfest/views/public/personal_profiles/new.slim b/lib/initfest/views/public/personal_profiles/new.slim new file mode 100644 index 0000000..d48bae0 --- /dev/null +++ b/lib/initfest/views/public/personal_profiles/new.slim @@ -0,0 +1,5 @@ +- content_for(:title) { ":: #{t :personal_profile}" } + +h2.entry-title = t :personal_profile + += render 'form' diff --git a/lib/initfest/views/public/shared/_flash_messages.slim b/lib/initfest/views/public/shared/_flash_messages.slim new file mode 100644 index 0000000..c94abd1 --- /dev/null +++ b/lib/initfest/views/public/shared/_flash_messages.slim @@ -0,0 +1,3 @@ +div#flash_messages + - flash.each do |key, value| + = content_tag :div, value, class: "flash #{key}" diff --git a/lib/initfest/views/public/shared/_nav.slim b/lib/initfest/views/public/shared/_nav.slim new file mode 100644 index 0000000..17df5c0 --- /dev/null +++ b/lib/initfest/views/public/shared/_nav.slim @@ -0,0 +1,31 @@ +nav + .content.cf + = link_to root_path, class: 'logo' do + = image_tag 'initfest/logo.png', alt: 'OpenFest' + + div + ul.menu + li + = link_to t('views.navigation.submit_event'), events_path + / li + / a href="#" = t('views.navigation.become_a_volunteer') + / li + / a href="#" = t('views.navigation.become_a_sponsor') + + - unless user_signed_in? + == content_tag :li, class: [('current_page_item' if controller_name == 'sessions')] do + = link_to t(:login), new_user_session_path + - else + == content_tag :li, class: [('current_page_item' if controller_name == 'registrations')] do + = link_to t(:edit_speaker_profile), edit_user_registration_path + li + = link_to t(:logout), destroy_user_session_path, method: :delete + li + - if I18n.locale == :bg + = link_to url_for(request.query_parameters.merge(locale: 'en')), hreflang: 'en' do + img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAIAAAD5gJpuAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHzSURBVHjaYkxOP8IAB//+Mfz7w8Dwi4HhP5CcJb/n/7evb16/APL/gRFQDiAAw3JuAgAIBEDQ/iswEERjGzBQLEru97ll0g0+3HvqMn1SpqlqGsZMsZsIe0SICA5gt5a/AGIEarCPtFh+6N/ffwxA9OvP/7//QYwff/6fZahmePeB4dNHhi+fGb59Y4zyvHHmCEAAAW3YDzQYaJJ93a+vX79aVf58//69fvEPlpIfnz59+vDhw7t37968efP3b/SXL59OnjwIEEAsDP+YgY53b2b89++/awvLn98MDi2cVxl+/vl6mituCtBghi9f/v/48e/XL86krj9XzwEEEENy8g6gu22rfn78+NGs5Ofr16+ZC58+fvyYwX8rxOxXr169fPny+fPn1//93bJlBUAAsQADZMEBxj9/GBxb2P/9+S/R8u3vzxuyaX8ZHv3j8/YGms3w8ycQARmi2eE37t4ACCDGR4/uSkrKAS35B3TT////wADOgLOBIaXIyjBlwxKAAGKRXjCB0SOEaeu+/y9fMnz4AHQxCP348R/o+l+//sMZQBNLEvif3AcIIMZbty7Ly6t9ZmXl+fXj/38GoHH/UcGfP79//BBiYHjy9+8/oUkNAAHEwt1V/vI/KBY/QSISFqM/GBg+MzB8A6PfYC5EFiDAABqgW776MP0rAAAAAElFTkSuQmCC" title="English" alt="English" + - elsif I18n.locale == :en + = link_to url_for(request.query_parameters.merge(locale: 'bg')), hreflang: 'bg' do + img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAALCAIAAAD5gJpuAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFgSURBVHjaYvz69SsDEvj37x+ERGbAwZ9//wACiAUoysXFBST///8P0QOm//+HU0jgxYsXAAHEAlP0H5nxHxtgZGQEWgIQQCx3Pt2RYZL5+/8vQobh/z8gBIN/MAhErEwst77dAgggRoZmhjKXskefH/359weIfv/7DUJ/f//6CyR//fr7C8j99QdEyvPKH5x0ECAAhWOQAgAMg7D+/8nWNVMQDwmCvWTessZJ9VWHCIns0yWxc/MF4FgMUgCAYRBmpf9/sDqY2yWEQBbEYcK0ZuKxIY0FGZ98Z/8KFlcAsTAcYZDX/M369tefv3/+/AGSIJf8+fMbxPgDYoC4QOP//JER+XPqIANAALH83M7ALPvn3z2gcSBTQK4AOwRKQhh/fjP8+cuo8reOgQEggFiA0cP0+w+DpCRQDijK8AekE+SuP38YICQQ/f0LQUDFAAHECIznf0iIAZWLJgUEAAEGADzQZYYqa4w6AAAAAElFTkSuQmCC" title="Български" alt="Български" + - else + = I18n.locale.inspect