Mercurial > zeropaste
changeset 469:68231013b01b bootstrap-4
Now with more bootstrap than ever
author | nanaya <me@nanaya.pro> |
---|---|
date | Sun, 23 Feb 2020 22:25:50 +0900 |
parents | 802dcd44188e |
children | c1e191d1b02a |
files | Gemfile Gemfile.lock app/assets/stylesheets/_bootstrap-zp.scss app/assets/stylesheets/application.scss app/helpers/application_helper.rb app/javascript/src/main.coffee app/views/layouts/_alerts.html.erb app/views/layouts/application.html.erb app/views/pastes/new.html.erb app/views/pastes/show.html.erb config/locales/en.yml config/webpack/environment.js package.json yarn.lock |
diffstat | 14 files changed, 153 insertions(+), 214 deletions(-) [+] |
line wrap: on
line diff
--- a/Gemfile Sun Feb 23 20:23:09 2020 +0900 +++ b/Gemfile Sun Feb 23 22:25:50 2020 +0900 @@ -2,6 +2,7 @@ gem "rails", "~> 6.0.0" gem "sass-rails" +gem "autoprefixer-rails" gem "webpacker" # Bundle edge Rails instead:
--- a/Gemfile.lock Sun Feb 23 20:23:09 2020 +0900 +++ b/Gemfile.lock Sun Feb 23 22:25:50 2020 +0900 @@ -61,10 +61,13 @@ minitest (~> 5.1) tzinfo (~> 1.1) zeitwerk (~> 2.2) + autoprefixer-rails (9.7.4) + execjs builder (3.2.4) concurrent-ruby (1.1.6) crass (1.0.6) erubi (1.9.0) + execjs (2.7.0) ffi (1.12.2) ffi (1.12.2-java) globalid (0.4.2) @@ -171,6 +174,7 @@ DEPENDENCIES activerecord-jdbcpostgresql-adapter + autoprefixer-rails jruby-openssl newrelic_rpm pg
--- a/app/assets/stylesheets/_bootstrap-zp.scss Sun Feb 23 20:23:09 2020 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,58 +0,0 @@ -/*! - * Bootstrap v3.3.5 (http://getbootstrap.com) - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * - * Modified for Zeropaste - */ - -// Core variables and mixins -@import "bootstrap-sass/assets/stylesheets/bootstrap/variables"; -@import "bootstrap-sass/assets/stylesheets/bootstrap/mixins"; - -// Reset and dependencies -@import "bootstrap-sass/assets/stylesheets/bootstrap/normalize"; -@import "bootstrap-sass/assets/stylesheets/bootstrap/print"; -// @import "bootstrap-sass/assets/stylesheets/bootstrap/glyphicons"; - -// Core CSS -@import "bootstrap-sass/assets/stylesheets/bootstrap/scaffolding"; -@import "bootstrap-sass/assets/stylesheets/bootstrap/type"; -@import "bootstrap-sass/assets/stylesheets/bootstrap/code"; -@import "bootstrap-sass/assets/stylesheets/bootstrap/grid"; -@import "bootstrap-sass/assets/stylesheets/bootstrap/tables"; -@import "bootstrap-sass/assets/stylesheets/bootstrap/forms"; -@import "bootstrap-sass/assets/stylesheets/bootstrap/buttons"; - -// Components -@import "bootstrap-sass/assets/stylesheets/bootstrap/component-animations"; -// @import "bootstrap-sass/assets/stylesheets/bootstrap/dropdowns"; -// @import "bootstrap-sass/assets/stylesheets/bootstrap/button-groups"; -@import "bootstrap-sass/assets/stylesheets/bootstrap/input-groups"; -@import "bootstrap-sass/assets/stylesheets/bootstrap/navs"; -@import "bootstrap-sass/assets/stylesheets/bootstrap/navbar"; -// @import "bootstrap-sass/assets/stylesheets/bootstrap/breadcrumbs"; -// @import "bootstrap-sass/assets/stylesheets/bootstrap/pagination"; -// @import "bootstrap-sass/assets/stylesheets/bootstrap/pager"; -// @import "bootstrap-sass/assets/stylesheets/bootstrap/labels"; -// @import "bootstrap-sass/assets/stylesheets/bootstrap/badges"; -// @import "bootstrap-sass/assets/stylesheets/bootstrap/jumbotron"; -// @import "bootstrap-sass/assets/stylesheets/bootstrap/thumbnails"; -@import "bootstrap-sass/assets/stylesheets/bootstrap/alerts"; -// @import "bootstrap-sass/assets/stylesheets/bootstrap/progress-bars"; -// @import "bootstrap-sass/assets/stylesheets/bootstrap/media"; -// @import "bootstrap-sass/assets/stylesheets/bootstrap/list-group"; -// @import "bootstrap-sass/assets/stylesheets/bootstrap/panels"; -// @import "bootstrap-sass/assets/stylesheets/bootstrap/responsive-embed"; -// @import "bootstrap-sass/assets/stylesheets/bootstrap/wells"; -// @import "bootstrap-sass/assets/stylesheets/bootstrap/close"; - -// Components w/ JavaScript -@import "bootstrap-sass/assets/stylesheets/bootstrap/modals"; -// @import "bootstrap-sass/assets/stylesheets/bootstrap/tooltip"; -// @import "bootstrap-sass/assets/stylesheets/bootstrap/popovers"; -// @import "bootstrap-sass/assets/stylesheets/bootstrap/carousel"; - -// Utility classes -@import "bootstrap-sass/assets/stylesheets/bootstrap/utilities"; -// @import "bootstrap-sass/assets/stylesheets/bootstrap/responsive-utilities";
--- a/app/assets/stylesheets/application.scss Sun Feb 23 20:23:09 2020 +0900 +++ b/app/assets/stylesheets/application.scss Sun Feb 23 22:25:50 2020 +0900 @@ -1,53 +1,31 @@ -@import "bootstrap-zp"; +@import "bootstrap/scss/bootstrap"; @import "highlight.js/scss/default"; .input-url1 { display: none !important; } -// overrides bootstrap -.form-control { - font-size: 16px; -} - -.form-group--narrow { - max-width: 300px; -} - .paste-paste { resize: vertical; font-family: $font-family-monospace; } +.paste-content { + border: none; + background-color: #fff; + padding: 0px; + margin: 0px; +} + .paste-show { padding: $grid-gutter-width/2; margin-bottom: $grid-gutter-width/2; border-width: 0px 1px 1px 1px; border-style: solid; - border-color: $nav-tabs-active-link-hover-border-color; - border-radius: 0px 0px $border-radius-base $border-radius-base; - - &__content { - border: none; - background-color: #fff; - padding: 0px; - margin: 0px; - } - - &__footer { - padding-bottom: $grid-gutter-width/2; - } -} - -.radio-container { - margin-top: -10px; + border-color: $nav-tabs-border-color; + border-radius: 0px 0px $border-radius $border-radius; } .zp-hl { background-color: #fff; padding: 0px; } - -.zp-header { - margin-top: 0px; -} -
--- a/app/helpers/application_helper.rb Sun Feb 23 20:23:09 2020 +0900 +++ b/app/helpers/application_helper.rb Sun Feb 23 22:25:50 2020 +0900 @@ -9,7 +9,7 @@ end def error_class(object, attribute) - "has-error" if object.errors.include? attribute + "is-invalid" if object.errors.include? attribute end def with_host(url)
--- a/app/javascript/src/main.coffee Sun Feb 23 20:23:09 2020 +0900 +++ b/app/javascript/src/main.coffee Sun Feb 23 22:25:50 2020 +0900 @@ -1,7 +1,4 @@ -import 'bootstrap/js/transition' -import 'bootstrap/js/collapse' -import 'bootstrap/js/modal' -import 'bootstrap/js/tab' +import 'bootstrap' import hljs from 'highlight.js' import * as commonmark from 'commonmark'
--- a/app/views/layouts/_alerts.html.erb Sun Feb 23 20:23:09 2020 +0900 +++ b/app/views/layouts/_alerts.html.erb Sun Feb 23 22:25:50 2020 +0900 @@ -1,12 +1,12 @@ <% if notice %> - <div class="alert alert-info"> + <div class="alert alert-info" role="alert"> <strong><%= t(".info") %>:</strong> <%= notice %> </div> <% end %> <% if alert %> - <div class="alert alert-danger"> + <div class="alert alert-danger" role="alert"> <strong><%= t(".error") %>:</strong> <%= alert %> </div>
--- a/app/views/layouts/application.html.erb Sun Feb 23 20:23:09 2020 +0900 +++ b/app/views/layouts/application.html.erb Sun Feb 23 22:25:50 2020 +0900 @@ -7,32 +7,41 @@ <%= stylesheet_link_tag "application", :media => "all" %> </head> <body> - <nav class="navbar navbar-default navbar-static-top"> + <nav class="navbar navbar-expand-lg navbar-light bg-light"> <div class="container"> - <div class="navbar-header"> - <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar-menu"> - <span class="sr-only">Toggle navigation</span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </button> - <%= link_to "Zeropaste", root_path, :class => "navbar-brand" %> - </div> + <%= link_to "Zeropaste", root_path, :class => "navbar-brand" %> + + <button + type="button" + class="navbar-toggler" + data-toggle="collapse" + data-target="#navbar-menu" + aria-controls="navbar-menu" + aria-expanded="false" + aria-label="<%= t('.toggle_nav') %>" + > + <span class="navbar-toggler-icon"></span> + </button> <div class="collapse navbar-collapse" id="navbar-menu"> - <ul class="nav navbar-nav navbar-right"> - <li> - <%= link_to t(".about"), "#", - :data => { :toggle => "modal", - :target => "#modal-about" } + <ul class="navbar-nav ml-auto"> + <li class="nav-item"> + <%= link_to t(".about"), "#", { + data: { + toggle: "modal", + target: "#modal-about", + }, + class: 'nav-link', + } %> </li> - <li> - <a href="https://bitbucket.org/nanayapro/zeropaste"><%= t(".source") %></a> + <li class="nav-item"> + <a class="nav-link" href="https://bitbucket.org/nanayapro/zeropaste"><%= t(".source") %></a> </li> - <li> + <li class="nav-item"> <%= link_to t(".donate"), - "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=GV9AHVHQAHXLJ" + "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=GV9AHVHQAHXLJ", + class: 'nav-link' %> </li> </ul> @@ -41,8 +50,8 @@ </nav> <div class="container"> - <div class="row"><div class="col-xs-12"> - <h1 class="h2 zp-header page-header"><%= content_for :title %></h1> + <div class="row"><div class="col-12"> + <h1 class="h2 pt-3 pb-1"><%= content_for :title %></h1> </div></div> <%= render "layouts/alerts" %> @@ -51,7 +60,7 @@ </div> - <div class="modal fade" id="modal-about" tabindex="-1" role="dialog" aria-labelledby="about-modal-label"> + <div class="modal fade" id="modal-about" tabindex="-1" role="dialog" aria-labelledby="about-modal-label" aria-hidden="true"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> @@ -62,7 +71,7 @@ <%= render "layouts/about" %> </div> <div class="modal-footer"> - <button type="button" class="btn btn-default" data-dismiss="modal"> + <button type="button" class="btn btn-secondary" data-dismiss="modal"> <%= t("buttons.close") %> </button> </div>
--- a/app/views/pastes/new.html.erb Sun Feb 23 20:23:09 2020 +0900 +++ b/app/views/pastes/new.html.erb Sun Feb 23 22:25:50 2020 +0900 @@ -3,41 +3,56 @@ <%= form_for @paste do |f| %> <%= render "shared/filter_spam" %> - <div class="form-group <%= error_class f.object, :paste %>"> - <%= f.text_area :paste, :autofocus => true, :class => "form-control paste-paste js-paste-paste", :rows => 20 %> + <div class="form-group"> + <%= f.text_area :paste, + autofocus: true, + class: "form-control paste-paste js-paste-paste #{error_class f.object, :paste}", + rows: 20 + %> </div> - <div class="row"><div class="col-xs-12"> - <%= link_to t(".preview_md"), "#", - :class => "btn btn-default js-paste-preview-md pull-right" - %> + <div class="row"><div class="col-12"> + <button type="button" class="btn btn-secondary ml-auto d-block js-paste-preview-md"> + <%= t(".preview_md") %> + </button> </div></div> - <div class="form-group <%= error_class f.object, :key %> form-group--narrow"> - <%= f.label :key, t(".deletion_key") %> - <%= f.text_field :key, :autocomplete => "off", :class => "form-control" %> + <div class="form-group row"> + <%= f.label :key, t('.deletion_key'), class: 'col-sm-2 col-form-label' %> + + <div class="col-auto"> + <%= f.text_field :key, + autocomplete: 'off', + class: "form-control #{error_class f.object, :key}" + %> + </div> </div> - <div class="form-group"> - <label><%= t(".privacy.label") %></label> + <div class="form-group row"> + <label class="col-sm-2 col-form-label pt-0"> + <%= t(".privacy.label") %> + </label> - <div class="radio-container"> + <div class="col-sm-10"> <% paste_privacy_options.each do |label, value| %> - <div class="radio"> - <label> - <%= f.radio_button :is_private, value %> + <label class="custom-control custom-radio mb-0"> + <%= f.radio_button :is_private, value, class: 'custom-control-input' %> + + <span class="custom-control-label"> <%= t(".privacy.#{label}") %> - </label> - </div> + </span> + </label> <% end %> </div> </div> - <div class="form-group form-group--narrow"> - <%= f.label :language %> + <div class="form-group row"> + <%= f.label :language, class: 'col-sm-2 col-form-label' %> - <%= f.select :language, [], { :prompt => t(".language_none") }, :class => "form-control" %> + <div class="col-auto"> + <%= f.select :language, [], { prompt: t(".language_none") }, class: 'custom-select' %> + </div> </div> <div class="form-group"> @@ -53,7 +68,7 @@ <div class="modal-body js-paste-preview-md-box"> </div> <div class="modal-footer"> - <button type="button" class="btn btn-default" data-dismiss="modal"> + <button type="button" class="btn btn-secondary" data-dismiss="modal"> <%= t("buttons.close") %> </button> </div>
--- a/app/views/pastes/show.html.erb Sun Feb 23 20:23:09 2020 +0900 +++ b/app/views/pastes/show.html.erb Sun Feb 23 22:25:50 2020 +0900 @@ -1,71 +1,65 @@ <% provide :title, "Paste ##{@paste.id}" %> -<div class="row"><div class="col-xs-12"> - <ul class="nav nav-tabs" role="tablist"> - <% [ - { :title => t(".plain"), :target => "pl", :active => true }, - { :title => t(".highlight"), :target => "hl" }, - { :title => t(".markdown"), :target => "md" } - ].each do |el| %> - <li role="presentation" class="<%= "active" if el[:active] %>"> - <%= link_to el[:title], "##{el[:target]}", - :data => { - :mode => el[:target], - :toggle => "tab" - }, - :aria => { :controls => el[:target] }, - :role => "tab", - :class => "js-show-tab" - %> - </li> - <% end %> - </ul> -</div></div> +<ul class="nav nav-tabs" role="tablist"> + <% [ + { title: t(".plain"), target: 'pl', active: true }, + { title: t(".highlight"), target: 'hl' }, + { title: t(".markdown"), target: 'md' } + ].each do |el| %> + <li class="nav-item"> + <%= link_to el[:title], "##{el[:target]}", + data: { + mode: el[:target], + toggle: 'tab', + }, + aria: { controls: el[:target] }, + role: 'tab', + class: "nav-link #{"active" if el[:active]} js-show-tab" + %> + </li> + <% end %> +</ul> -<div class="row js-showing-paste"><div class="col-xs-12"><div class="paste-show"> +<div class="js-showing-paste paste-show"> <div class="tab-content"> <div role="tabpanel" class="tab-pane active" id="pl"> - <pre class="paste-show__content"><code class="js-paste-pl"><%= @paste.paste %></code></pre> + <pre class="paste-content"><code class="js-paste-pl"><%= @paste.paste %></code></pre> </div> <div role="tabpanel" class="tab-pane" id="hl"> - <pre class="paste-show__content"><code class="js-paste-hl zp-hl lang-<%= @paste.language.try(:parameterize) %>"></code></pre> + <pre class="paste-content"><code class="js-paste-hl zp-hl lang-<%= @paste.language.try(:parameterize) %>"></code></pre> </div> <div role="tabpanel" class="tab-pane" id="md"> <div class="js-paste-md"></div> </div> </div> -</div></div></div> +</div> -<div class="row"><div class="col-xs-12"> - <%= form_for @paste, :method => :delete, :authenticity_token => false do |f| %> - <div class="form-group form-group--narrow <%= error_class f.object, :key %>"> - <div class="input-group"> - <%= f.text_field :key, - :value => nil, - :placeholder => t("pastes.new.deletion_key"), - :autofocus => f.object.errors.any?, - :autocomplete => "off", - :class => "form-control" - %> +<%= form_for @paste, method: :delete, authenticity_token: false, html: { class: 'form-row' } do |f| %> + <div class="col-auto my-1"> + <%= f.text_field :key, + value: nil, + placeholder: t('pastes.new.deletion_key'), + autofocus: f.object.errors.any?, + autocomplete: 'off', + class: "form-control w-auto #{error_class f.object, :key}" + %> + </div> - <span class="input-group-btn"> - <%= f.button t(".delete"), :class => "btn btn-danger" %> - </span> - </div> - </div> - <% end %> -</div></div> + <div class="col-auto my-1"> + <%= f.button t(".delete"), class: 'btn btn-danger' %> + </div> +<% end %> -<ul class="nav nav-pills paste-show__footer"> - <li role="presentation"> - <%= link_to t(".raw"), paste_path(@paste, :txt) %> - </li> - <li role="presentation"> - <%= link_to t(".derive"), root_path(:base => @paste) %> - </li> - <li role="presentation"> - <%= link_to t(".more"), root_path %> - </li> -</ul> +<div class="row mt-4"> + <% [ + [t('.raw'), paste_path(@paste, :txt)], + [t('.derive'), root_path(:base => @paste)], + [t('.more'), root_path], + ].each do |label, url| %> + <div class="col-auto"> + <%= link_to label, url %> + </div> + <% end %> +</div>
--- a/config/locales/en.yml Sun Feb 23 20:23:09 2020 +0900 +++ b/config/locales/en.yml Sun Feb 23 22:25:50 2020 +0900 @@ -13,6 +13,7 @@ about: About donate: Donate source: Source + toggle_nav: Toggle navigation pastes: new:
--- a/config/webpack/environment.js Sun Feb 23 20:23:09 2020 +0900 +++ b/config/webpack/environment.js Sun Feb 23 22:25:50 2020 +0900 @@ -5,8 +5,6 @@ environment.plugins.append('Provide', new webpack.ProvidePlugin({ $: 'jquery', - jQuery: 'jquery', - Popper: ['popper.js', 'default'] }) )
--- a/package.json Sun Feb 23 20:23:09 2020 +0900 +++ b/package.json Sun Feb 23 22:25:50 2020 +0900 @@ -3,13 +3,13 @@ "private": true, "dependencies": { "@rails/webpacker": "4.2.2", - "bootstrap": "3", - "bootstrap-sass": "^3.4.1", + "bootstrap": "4.4.1", "coffee-loader": "^0.9.0", - "coffeescript": "1.12.7", + "coffeescript": "2.5.1", "commonmark": "^0.29.1", "highlight.js": "^9.18.1", - "jquery": "^3.4.1" + "jquery": "^3.4.1", + "popper.js": "^1.16.1" }, "version": "0.1.0", "devDependencies": {
--- a/yarn.lock Sun Feb 23 20:23:09 2020 +0900 +++ b/yarn.lock Sun Feb 23 22:25:50 2020 +0900 @@ -1369,15 +1369,10 @@ resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= -bootstrap-sass@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/bootstrap-sass/-/bootstrap-sass-3.4.1.tgz#6843c73b1c258a0ac5cb2cc6f6f5285b664a8e9a" - integrity sha512-p5rxsK/IyEDQm2CwiHxxUi0MZZtvVFbhWmyMOt4lLkA4bujDA1TGoKT0i1FKIWiugAdP+kK8T5KMDFIKQCLYIA== - -bootstrap@3: - version "3.4.1" - resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-3.4.1.tgz#c3a347d419e289ad11f4033e3c4132b87c081d72" - integrity sha512-yN5oZVmRCwe5aKwzRj6736nSmKDX7pLYwsXiCj/EYmo16hODaBiT4En5btW/jhBF/seV+XMx3aYwukYC3A49DA== +bootstrap@4.4.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.4.1.tgz#8582960eea0c5cd2bede84d8b0baf3789c3e8b01" + integrity sha512-tbx5cHubwE6e2ZG7nqM3g/FZ5PQEDMWmMGNrCUBVRPHXTJaH7CBDdsLeu3eCh3B1tzAxTnAbtmrzvWEvT2NNEA== brace-expansion@^1.1.7: version "1.1.11" @@ -1778,10 +1773,10 @@ dependencies: loader-utils "^1.0.2" -coffeescript@1.12.7: - version "1.12.7" - resolved "https://registry.yarnpkg.com/coffeescript/-/coffeescript-1.12.7.tgz#e57ee4c4867cf7f606bfc4a0f2d550c0981ddd27" - integrity sha512-pLXHFxQMPklVoEekowk8b3erNynC+DVJzChxS/LCBBgR6/8AJkHivkm//zbowcfc7BTCAjryuhx6gPqPRfsFoA== +coffeescript@2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/coffeescript/-/coffeescript-2.5.1.tgz#b2442a1f2c806139669534a54adc35010559d16a" + integrity sha512-J2jRPX0eeFh5VKyVnoLrfVFgLZtnnmp96WQSLAS8OrLm2wtQLcnikYKe1gViJKDH7vucjuhHvBKKBP3rKcD1tQ== collection-visit@^1.0.0: version "1.0.0" @@ -5076,6 +5071,11 @@ dependencies: ts-pnp "^1.1.6" +popper.js@^1.16.1: + version "1.16.1" + resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b" + integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ== + portfinder@^1.0.25: version "1.0.25" resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.25.tgz#254fd337ffba869f4b9d37edc298059cb4d35eca"