Project

magick_pen

0.0
No commit activity in last 3 years
No release in over 3 years
The part of the erb file enclosed in <vue-magick-pen> tags can be edited.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

>= 6.0, < 6.2
 Project Readme

Magick Pen

Magick Penは、Railsプロジェクトに組み込んで利用できるGemのプラグインです。 テンプレートファイル(.erbファイル)の任意の部分を <vue-magick-pen> 〜 </vue-magick-pen> で囲むだけで、Webページから直接変更ができるようになります。

また、変更内容を履歴管理していますので、過去の内容に戻すことも簡単です。

Installation

あなたのRailsプロジェクトの Gemfiie に magick_penを追加します。

gem 'magick_pen'

bundleを更新して、Magick Penのインストールとmaigrationを以下の手順で実行します。

$ bundle
$ rails g magick_pen:install --with-migrate

準備

ここでは、Rails Sprocketsを使ってアセットコンパイルして利用する方法を説明します。

app/assets/stylesheets/application.css

nodeモジュールからmagick penのcssを読み込みます。

/*
 * This is a manifest file that'll be compiled into application.css, which will include all the files
 * listed below.
 *
 
 *= require "vue-magick-pen/dist/vue-magick-pen"  
 */

app/assets/javascripts/application.js

nodeモジュールからvue.jsと magick penのVueコンポーネントを読み込みます。

/*

//= require vue/dist/vue
//= require vue-magick-pen/dist/vue-magick-pen.umd

*/

app/views/layouts/application.html.erb

  <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
  <%= javascript_include_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>

layouts/application.html.erb から application.jsと application.cssを読み込めば準備は完了です。

ページを作成する

app/views/xxxxx/index.html.erb

任意のコントローラー、アクションを作成し、テンプレートファイルをマークアップします。

<div id="magick-pen">
    <h1>Title</h1>
    <div>
        <magick-pen pen-key="snippet-1">
            Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
            Mauris pellentesque malesuada convallis.
            Quisque condimentum ac odio ut congue. Integer ultrices a erat sed hendrerit.
        </magick-pen>
    </div>

    <div>
        <magick-pen pen-key="snippet-2">
            Lorem ipsum dolor sit amet, consectetur adipiscing elit.
            Mauris pellentesque malesuada convallis.
            Quisque condimentum ac odio ut congue. Integer ultrices a erat sed hendrerit.
        </magick-pen>
    </div>
</div>

<%= render partial: 'magick_pen/load', locals: { editable: true } %>

マークアップのルールは以下の通りです。

  • id="magick-pen" で 囲った部分が有効になります。この範囲内であれば、何か所でも Magick Pen を埋め込めます。
  • Magick Penを埋め込みたい部分を <vue-magick-pen> 〜 </vue-magick-pen> で囲みます。
  • この時、キーとなる文字列を pen-key属性に設定して下さい。
  • pen-key は (コントローラー名+アクション名) のスコープでユニークとなるようにして下さい。別コントローラー、別アクションであれば、同じpen-keyでも別物として扱われます。
  • ページフッターやサイドバーなどサイト全体で共通に扱いたい部分にMagick Penを埋め込みたい場合は、pen-keyにプレフィックス 'g-' を付けて下さい (例:g-snippet-1)。
  • ファイルの最後に <%= render partial: 'magick_pen/load', locals: { editable: true } %> を記述します。
  • editableが falseであれば、何もなかったように普通にページが表示されます。trueであれば編集可能になります。ユーザー権限などに応じてeditableの値をコントロールして下さい。
  • id="magick-pen" の値を変更したい場合は、'magick_pen/load' の locals に、elementを渡すことができます。
<div id="page">
    <!- your markup -->
</div>
<%= render partial: 'magick_pen/load', locals: { editable: true, element: '#page" } %>

Magick Penは多言語対応になっていますので、ボタン名に日本語が表示されない場合は、config/application.rbに以下の設定をします。

  class Application < Rails::Application
    :
    :    
    I18n.available_locales = %i(ja en)
    I18n.enforce_available_locales = true
    I18n.default_locale = :ja
  end

デザインの適用

FontAwesome 5 を導入することをお奨めします。FontAwesomeが利用できる環境であればそのままボタン等にアイコンが表示されます。

Bootstrap 4 、または、Bulma を採用している場合は、各CSSフレームワークのデザインに準じて表示されます。独自デザインを適用する場合はCSSの調整が必要になります。

デザインを修正するには、app/magick_pen/config.rb を適宜変更をして下さい。config.rbには、 Magick Pen内で使用するボタンのクラス名やラベル名、アイコンのクラス名が定義されています。

module MagickPen
  class Config
    def self.default
      {
          date_format: "YYYY/MM/DD HH:mm",
          select: {
              class: "magick-pen-select",
              label: {
                  version: I18n.t('magick_pen.version'),
                  original: I18n.t('magick_pen.original'),
                  current: I18n.t('magick_pen.current'),
              }
          },
          buttons: {
              # Button Class - compatible with Bootstrap and  Bulma)
              # Icon Class - compatible with Fontawesome 5
              edit: {
                  class: "btn btn-primary btn-sm button is-primary is-small",
                  icon: "fas fa-edit",
                  label: I18n.t('magick_pen.buttons.edit')
              },
              update: {
                  class: "btn btn-primary btn-sm button is-primary is-small",
                  icon: "fas fa-upload",
                  label:I18n.t('magick_pen.buttons.update')
              },
              cancel: {
                  class: "btn btn-secondary btn-sm button is-light is-small",
                  icon: "fas fa-times",
                  label: I18n.t('magick_pen.buttons.cancel')
              },
              preview: {
                  class: "btn btn-primary btn-sm button is-primary is-small",
                  icon: "fas fa-eye",
                  label: I18n.t('magick_pen.buttons.preview')
              }
          }
      }
    end
  end
end

サンプルプロジェクト

こちら にサンプルのRailsプロジェクトがあります。

動作環境

  • Ruby 2.6 〜 3.0
  • Rails 6.0 / 6.1

License

The gem is available as open source under the terms of the MIT License.