dokno 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +130 -0
- data/Rakefile +22 -0
- data/app/assets/config/dokno_manifest.js +3 -0
- data/app/assets/javascripts/dokno.js +144 -0
- data/app/assets/javascripts/dokno/application.js +15 -0
- data/app/assets/javascripts/feather.min.js +13 -0
- data/app/assets/javascripts/init.js +5 -0
- data/app/assets/stylesheets/dokno/application.css +137 -0
- data/app/assets/stylesheets/dokno/tailwind.min.css +1 -0
- data/app/controllers/dokno/application_controller.rb +7 -0
- data/app/controllers/dokno/articles_controller.rb +115 -0
- data/app/controllers/dokno/categories_controller.rb +63 -0
- data/app/controllers/dokno/pagination_concern.rb +15 -0
- data/app/controllers/dokno/user_concern.rb +38 -0
- data/app/helpers/dokno/application_helper.rb +17 -0
- data/app/models/dokno/application_record.rb +5 -0
- data/app/models/dokno/article.rb +215 -0
- data/app/models/dokno/article_slug.rb +7 -0
- data/app/models/dokno/category.rb +100 -0
- data/app/models/dokno/log.rb +7 -0
- data/app/views/dokno/_article_formatting.html.erb +89 -0
- data/app/views/dokno/_article_panel.html.erb +112 -0
- data/app/views/dokno/_panel_formatting.html.erb +95 -0
- data/app/views/dokno/_reset_formatting.html.erb +55 -0
- data/app/views/dokno/articles/_article_form.html.erb +60 -0
- data/app/views/dokno/articles/edit.html.erb +7 -0
- data/app/views/dokno/articles/new.html.erb +7 -0
- data/app/views/dokno/articles/show.html.erb +130 -0
- data/app/views/dokno/categories/_category_form.html.erb +33 -0
- data/app/views/dokno/categories/edit.html.erb +7 -0
- data/app/views/dokno/categories/index.html.erb +96 -0
- data/app/views/dokno/categories/new.html.erb +7 -0
- data/app/views/layouts/dokno/application.html.erb +100 -0
- data/app/views/partials/_form_errors.html.erb +18 -0
- data/app/views/partials/_logs.html.erb +52 -0
- data/app/views/partials/_pagination.html.erb +35 -0
- data/config/routes.rb +11 -0
- data/db/migrate/20201203190330_baseline.rb +62 -0
- data/lib/dokno.rb +4 -0
- data/lib/dokno/config/config.rb +73 -0
- data/lib/dokno/engine.rb +27 -0
- data/lib/dokno/version.rb +3 -0
- data/lib/generators/dokno/install/install_generator.rb +13 -0
- data/lib/generators/dokno/templates/config/dokno_template.md +5 -0
- data/lib/generators/dokno/templates/config/initializers/dokno.rb +14 -0
- data/lib/tasks/dokno_tasks.rake +4 -0
- metadata +253 -0
@@ -0,0 +1,18 @@
|
|
1
|
+
<div id="error_explanation" class="bg-white mb-10">
|
2
|
+
<i data-feather="alert-octagon" class="float-right"></i>
|
3
|
+
<h2 class="font-semibold">
|
4
|
+
There
|
5
|
+
<% if errors.count == 1 %>
|
6
|
+
is a problem
|
7
|
+
<% else %>
|
8
|
+
are <%= pluralize(errors.count, "problem") %>
|
9
|
+
<% end %>
|
10
|
+
that must be resolved before saving:
|
11
|
+
</h2>
|
12
|
+
|
13
|
+
<ul class="mt-5 list-disc list-inside bg-gray-100 p-5 rounded">
|
14
|
+
<% errors.full_messages.each do |message| %>
|
15
|
+
<li><%= message %></li>
|
16
|
+
<% end %>
|
17
|
+
</ul>
|
18
|
+
</div>
|
@@ -0,0 +1,52 @@
|
|
1
|
+
<% if article&.logs.present? %>
|
2
|
+
<div class="py-10 px-16 text-gray-200 bg-gray-900">
|
3
|
+
<div class="w-full max-w-screen-xl m-auto">
|
4
|
+
<div class="text-xl text-gray-600 cursor-pointer" onclick="toggleVisibility('change-log');">
|
5
|
+
Change log for this article
|
6
|
+
|
7
|
+
<div class="inline toggle-visibility-indicator-container change-log">
|
8
|
+
<i data-feather="chevron-left" class="inline toggle-visibility-indicator change-log"></i>
|
9
|
+
</div>
|
10
|
+
</div>
|
11
|
+
|
12
|
+
<div id="change-log" class="bg-gray-800 px-10 mt-8 rounded hidden text-gray-500">
|
13
|
+
<ul>
|
14
|
+
<% article.logs.includes(article: :categories).each do |log| %>
|
15
|
+
<li class="my-10">
|
16
|
+
<div>
|
17
|
+
<% if article.blank? %>
|
18
|
+
<div class="text-white text-xl"><a href="<%= article_path log.article.slug %>" title="View Article"><%= log.article.title %></a></div>
|
19
|
+
<div class="mb-5"><%= log.article.category_name_list %></div>
|
20
|
+
<% end %>
|
21
|
+
|
22
|
+
<div class="text-gray-500 bg-gray-700 p-5 pr-10 rounded <%= 'cursor-pointer' if log.diff_left != log.diff_right %> flex items-center" onclick="toggleVisibility('article-diff-<%= log.id %>');" title="Show / Hide Diff">
|
23
|
+
<div class="w-4/5">
|
24
|
+
<%= time_ago_in_words log.created_at %> ago
|
25
|
+
<% if log.username.present? %>
|
26
|
+
by <%= log.username %>
|
27
|
+
<% end %>
|
28
|
+
|
29
|
+
<% if log.meta.present? %>
|
30
|
+
<br /><span class="text-gray-300"><%= log.meta %></span>
|
31
|
+
<% end %>
|
32
|
+
</div>
|
33
|
+
|
34
|
+
<div class="w-1/5 text-right toggle-visibility-indicator-container article-diff-<%= log.id %>">
|
35
|
+
<% if log.diff_left != log.diff_right %><i data-feather="chevron-left" class="inline toggle-visibility-indicator article-diff-<%= log.id %>"></i><% end %>
|
36
|
+
</div>
|
37
|
+
</div>
|
38
|
+
|
39
|
+
<% if log.diff_left != log.diff_right %>
|
40
|
+
<div id="article-diff-<%= log.id %>" class="flex hidden">
|
41
|
+
<div class="w-1/2 p-5">Before:<br /><%= log.diff_left.html_safe %></div>
|
42
|
+
<div class="w-1/2 p-5">After:<br /><%= log.diff_right.html_safe %></div>
|
43
|
+
</div>
|
44
|
+
<% end %>
|
45
|
+
</div>
|
46
|
+
</li>
|
47
|
+
<% end %>
|
48
|
+
</ul>
|
49
|
+
</div>
|
50
|
+
</div>
|
51
|
+
</div>
|
52
|
+
<% end %>
|
@@ -0,0 +1,35 @@
|
|
1
|
+
<span class="mr-5">
|
2
|
+
<% if @page > 1 %>
|
3
|
+
<span class="mr-1 inline-block"><a href="?search_term=<%= CGI.escape @search_term.to_s %>&order=<%= @order %>&page=<%= (@page - 1) %>"><i data-feather="arrow-left" class="h-5 inline-block" title="Previous page"></i></a></span>
|
4
|
+
<% end %>
|
5
|
+
|
6
|
+
<span class="mr-1 inline-block">Page</span>
|
7
|
+
|
8
|
+
<%= form_with(url: article_index_path, method: :get, class: 'inline') do %>
|
9
|
+
<input type="hidden" name="id" value="<%= @category&.id %>">
|
10
|
+
<input type="hidden" name="search_term" value="<%= @search_term %>">
|
11
|
+
<input type="hidden" name="order" value="<%= @order %>">
|
12
|
+
<input type="text" name="page" id="page" value="<%= @page %>" onclick="this.select();" class="w-10 text-center bg-gray-200 rounded" />
|
13
|
+
|
14
|
+
<span class="mx-1 inline-block">of</span>
|
15
|
+
<span class="text-center inline-block"><%= @total_pages %></span>
|
16
|
+
<% end %>
|
17
|
+
|
18
|
+
<% if @page < @total_pages %>
|
19
|
+
<span class="ml-1 inline-block"><a href="?search_term=<%= CGI.escape @search_term.to_s %>&order=<%= @order %>&page=<%= (@page + 1) %>"><i data-feather="arrow-right" class="h-5 inline-block" title="Next page"></i></a></span>
|
20
|
+
<% end %>
|
21
|
+
</span>
|
22
|
+
|
23
|
+
<span class="text-gray-400">
|
24
|
+
<%= @total_records %>
|
25
|
+
<%= 'uncategorized' if @category.blank? && @search_term.blank? %>
|
26
|
+
<%= 'article'.pluralize(@total_records) %>
|
27
|
+
|
28
|
+
<% if @search_term.present? %>
|
29
|
+
containing <span class="font-serif">“</span><%= @search_term %><span class="font-serif">”</span>
|
30
|
+
<% end %>
|
31
|
+
|
32
|
+
<% if @category.present? %>
|
33
|
+
in <%= "#{(children_count = @category.branch.count) == 1 ? 'this' : children_count} #{'category'.pluralize(children_count)}" %>
|
34
|
+
<% end %>
|
35
|
+
</span>
|
data/config/routes.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
Dokno::Engine.routes.draw do
|
2
|
+
resources :categories, except: [:show]
|
3
|
+
resources :articles
|
4
|
+
|
5
|
+
get '/(:cat_code)', to: 'categories#index', as: :article_index
|
6
|
+
get 'article_panel/(:slug)', to: 'articles#panel', as: :panel
|
7
|
+
post 'article_log', to: 'articles#article_log', as: :article_log
|
8
|
+
post 'article_preview', to: 'articles#preview', as: :preview
|
9
|
+
post 'article_status', to: 'articles#status', as: :status
|
10
|
+
root 'categories#index'
|
11
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
class Baseline < ActiveRecord::Migration[6.0]
|
2
|
+
def change
|
3
|
+
create_table "dokno_article_slugs", force: :cascade do |t|
|
4
|
+
t.string "slug", null: false
|
5
|
+
t.bigint "article_id"
|
6
|
+
t.datetime "created_at", precision: 6, null: false
|
7
|
+
t.datetime "updated_at", precision: 6, null: false
|
8
|
+
t.index ["article_id"], name: "index_dokno_article_slugs_on_article_id"
|
9
|
+
t.index ["slug"], name: "index_dokno_article_slugs_on_slug", unique: true
|
10
|
+
end
|
11
|
+
|
12
|
+
create_table "dokno_articles", force: :cascade do |t|
|
13
|
+
t.string "slug"
|
14
|
+
t.string "title"
|
15
|
+
t.text "markdown"
|
16
|
+
t.datetime "created_at", precision: 6, null: false
|
17
|
+
t.datetime "updated_at", precision: 6, null: false
|
18
|
+
t.text "summary"
|
19
|
+
t.boolean "active", default: true
|
20
|
+
t.bigint "views", default: 0
|
21
|
+
t.datetime "last_viewed_at"
|
22
|
+
t.index ["slug"], name: "index_dokno_articles_on_slug", unique: true
|
23
|
+
end
|
24
|
+
|
25
|
+
create_table "dokno_articles_categories", id: false, force: :cascade do |t|
|
26
|
+
t.bigint "article_id"
|
27
|
+
t.bigint "category_id"
|
28
|
+
t.index ["article_id", "category_id"], name: "index_dokno_articles_categories_on_article_id_and_category_id", unique: true
|
29
|
+
t.index ["article_id"], name: "index_dokno_articles_categories_on_article_id"
|
30
|
+
t.index ["category_id"], name: "index_dokno_articles_categories_on_category_id"
|
31
|
+
end
|
32
|
+
|
33
|
+
create_table "dokno_categories", force: :cascade do |t|
|
34
|
+
t.string "name"
|
35
|
+
t.datetime "created_at", precision: 6, null: false
|
36
|
+
t.datetime "updated_at", precision: 6, null: false
|
37
|
+
t.bigint "category_id"
|
38
|
+
t.string "code", null: false
|
39
|
+
t.index ["category_id"], name: "index_dokno_categories_on_category_id"
|
40
|
+
t.index ["code"], name: "index_dokno_categories_on_code", unique: true
|
41
|
+
t.index ["name"], name: "index_dokno_categories_on_name", unique: true
|
42
|
+
end
|
43
|
+
|
44
|
+
create_table "dokno_logs", force: :cascade do |t|
|
45
|
+
t.bigint "article_id"
|
46
|
+
t.string "username"
|
47
|
+
t.text "meta"
|
48
|
+
t.text "diff_left"
|
49
|
+
t.text "diff_right"
|
50
|
+
t.datetime "created_at", precision: 6, null: false
|
51
|
+
t.datetime "updated_at", precision: 6, null: false
|
52
|
+
t.index ["article_id"], name: "index_dokno_logs_on_article_id"
|
53
|
+
t.index ["username"], name: "index_dokno_logs_on_username"
|
54
|
+
end
|
55
|
+
|
56
|
+
add_foreign_key "dokno_article_slugs", "dokno_articles", column: "article_id"
|
57
|
+
add_foreign_key "dokno_articles_categories", "dokno_articles", column: "article_id"
|
58
|
+
add_foreign_key "dokno_articles_categories", "dokno_categories", column: "category_id"
|
59
|
+
add_foreign_key "dokno_categories", "dokno_categories", column: "category_id"
|
60
|
+
add_foreign_key "dokno_logs", "dokno_articles", column: "article_id"
|
61
|
+
end
|
62
|
+
end
|
data/lib/dokno.rb
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
module Dokno
|
2
|
+
def self.configure
|
3
|
+
yield config
|
4
|
+
config.validate
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.config
|
8
|
+
@config ||= Config.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.config=(val)
|
12
|
+
@config = val
|
13
|
+
end
|
14
|
+
|
15
|
+
class Config
|
16
|
+
# (String) Host application name for display within the mounted dashboard
|
17
|
+
attr_accessor :app_name
|
18
|
+
|
19
|
+
# (Enumerable) Determines which HTML tags are allowed in Article markdown
|
20
|
+
attr_accessor :tag_whitelist
|
21
|
+
|
22
|
+
# (Enumerable) Determines which HTML attributes are allowed in Article markdown
|
23
|
+
attr_accessor :attr_whitelist
|
24
|
+
|
25
|
+
# (String) Host application's user object
|
26
|
+
attr_accessor :app_user_object
|
27
|
+
|
28
|
+
# (Symbol) Host application's user object method that should be used to authorize users to edit Dokno data
|
29
|
+
# Should return boolean.
|
30
|
+
attr_accessor :app_user_auth_method
|
31
|
+
|
32
|
+
# (Symbol) Host application's user object method that should return the authenticated user's name or other
|
33
|
+
# identifier that will be included in change log events. Should return a string.
|
34
|
+
attr_accessor :app_user_name_method
|
35
|
+
|
36
|
+
# Defaults
|
37
|
+
TAG_WHITELIST = %w[code img h1 h2 h3 h4 h5 h6 a em u i b strong ol ul li table thead tbody tfoot tr th td blockquote hr br p]
|
38
|
+
ATTR_WHITELIST = %w[src alt title href target]
|
39
|
+
APP_USER_OBJECT = 'current_user'
|
40
|
+
APP_USER_AUTH_METHOD = 'admin?'
|
41
|
+
APP_USER_NAME_METHOD = 'name'
|
42
|
+
|
43
|
+
def initialize
|
44
|
+
self.app_name = Rails.application.class.module_parent.name.underscore.humanize.upcase
|
45
|
+
self.tag_whitelist = TAG_WHITELIST
|
46
|
+
self.attr_whitelist = ATTR_WHITELIST
|
47
|
+
self.app_user_object = APP_USER_OBJECT
|
48
|
+
self.app_user_auth_method = APP_USER_AUTH_METHOD
|
49
|
+
self.app_user_name_method = APP_USER_NAME_METHOD
|
50
|
+
end
|
51
|
+
|
52
|
+
def validate
|
53
|
+
validate_tag_whitelist
|
54
|
+
validate_attr_whitelist
|
55
|
+
end
|
56
|
+
|
57
|
+
def validate_tag_whitelist
|
58
|
+
return unless !tag_whitelist.is_a?(Enumerable)
|
59
|
+
|
60
|
+
raise "#{config_error_prefix} tag_whitelist must be Enumerable"
|
61
|
+
end
|
62
|
+
|
63
|
+
def validate_attr_whitelist
|
64
|
+
return unless !attr_whitelist.is_a?(Enumerable)
|
65
|
+
|
66
|
+
raise "#{config_error_prefix} attr_whitelist must be Enumerable"
|
67
|
+
end
|
68
|
+
|
69
|
+
def config_error_prefix
|
70
|
+
"Dokno configuration error (check config/initializers/dokno.rb):"
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
data/lib/dokno/engine.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
require_relative 'config/config'
|
2
|
+
|
3
|
+
module Dokno
|
4
|
+
class Engine < ::Rails::Engine
|
5
|
+
isolate_namespace Dokno
|
6
|
+
|
7
|
+
initializer 'Dokno precompile', group: :all do |app|
|
8
|
+
app.config.assets.precompile << "dokno_manifest.js"
|
9
|
+
end
|
10
|
+
|
11
|
+
config.generators do |g|
|
12
|
+
g.test_framework :rspec
|
13
|
+
end
|
14
|
+
|
15
|
+
initializer :append_migrations do |app|
|
16
|
+
config.paths["db/migrate"].expanded.each do |expanded_path|
|
17
|
+
app.config.paths["db/migrate"] << expanded_path
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
initializer 'local_helper.action_controller' do
|
22
|
+
ActiveSupport.on_load :action_controller do
|
23
|
+
helper Dokno::ApplicationHelper
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Dokno
|
2
|
+
module Generators
|
3
|
+
class InstallGenerator < Rails::Generators::Base
|
4
|
+
source_root File.expand_path('../../templates', __FILE__)
|
5
|
+
|
6
|
+
desc 'Copies the Dokno configuration templates to the host app'
|
7
|
+
def copy_initializer
|
8
|
+
template 'config/initializers/dokno.rb', 'config/initializers/dokno.rb'
|
9
|
+
template 'config/dokno_template.md', 'config/dokno_template.md'
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
Dokno.configure do |config|
|
2
|
+
config.tag_whitelist = Dokno::Config::TAG_WHITELIST
|
3
|
+
config.attr_whitelist = Dokno::Config::ATTR_WHITELIST
|
4
|
+
|
5
|
+
# To restrict Dokno data modification and include indentifying information
|
6
|
+
# in change log entries, provide the appropriate user values for your app below.
|
7
|
+
# (String) app_user_object
|
8
|
+
# (Symbol) app_user_auth_method
|
9
|
+
# (Symbol) app_user_name_method
|
10
|
+
|
11
|
+
# config.app_user_object = 'current_user'
|
12
|
+
# config.app_user_auth_method = :admin?
|
13
|
+
# config.app_user_name_method = :name
|
14
|
+
end
|
metadata
ADDED
@@ -0,0 +1,253 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: dokno
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Courtney Payne
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-12-03 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: diffy
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.4'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.4'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: redcarpet
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '3.5'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '3.5'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: database_cleaner-active_record
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.8'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.8'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: pg
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.2'
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: 1.2.3
|
65
|
+
type: :development
|
66
|
+
prerelease: false
|
67
|
+
version_requirements: !ruby/object:Gem::Requirement
|
68
|
+
requirements:
|
69
|
+
- - "~>"
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: '1.2'
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: 1.2.3
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: pry-byebug
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - "~>"
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '3.9'
|
82
|
+
type: :development
|
83
|
+
prerelease: false
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - "~>"
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '3.9'
|
89
|
+
- !ruby/object:Gem::Dependency
|
90
|
+
name: rails
|
91
|
+
requirement: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - "~>"
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: 6.0.3
|
96
|
+
- - ">="
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: 6.0.3.4
|
99
|
+
type: :development
|
100
|
+
prerelease: false
|
101
|
+
version_requirements: !ruby/object:Gem::Requirement
|
102
|
+
requirements:
|
103
|
+
- - "~>"
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: 6.0.3
|
106
|
+
- - ">="
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: 6.0.3.4
|
109
|
+
- !ruby/object:Gem::Dependency
|
110
|
+
name: rspec-rails
|
111
|
+
requirement: !ruby/object:Gem::Requirement
|
112
|
+
requirements:
|
113
|
+
- - "~>"
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
version: '4.0'
|
116
|
+
- - ">="
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: 4.0.1
|
119
|
+
type: :development
|
120
|
+
prerelease: false
|
121
|
+
version_requirements: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - "~>"
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '4.0'
|
126
|
+
- - ">="
|
127
|
+
- !ruby/object:Gem::Version
|
128
|
+
version: 4.0.1
|
129
|
+
- !ruby/object:Gem::Dependency
|
130
|
+
name: simplecov
|
131
|
+
requirement: !ruby/object:Gem::Requirement
|
132
|
+
requirements:
|
133
|
+
- - "~>"
|
134
|
+
- !ruby/object:Gem::Version
|
135
|
+
version: 0.19.1
|
136
|
+
type: :development
|
137
|
+
prerelease: false
|
138
|
+
version_requirements: !ruby/object:Gem::Requirement
|
139
|
+
requirements:
|
140
|
+
- - "~>"
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: 0.19.1
|
143
|
+
- !ruby/object:Gem::Dependency
|
144
|
+
name: bullet
|
145
|
+
requirement: !ruby/object:Gem::Requirement
|
146
|
+
requirements:
|
147
|
+
- - "~>"
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '6.1'
|
150
|
+
type: :development
|
151
|
+
prerelease: false
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
requirements:
|
154
|
+
- - "~>"
|
155
|
+
- !ruby/object:Gem::Version
|
156
|
+
version: '6.1'
|
157
|
+
- !ruby/object:Gem::Dependency
|
158
|
+
name: faker
|
159
|
+
requirement: !ruby/object:Gem::Requirement
|
160
|
+
requirements:
|
161
|
+
- - "~>"
|
162
|
+
- !ruby/object:Gem::Version
|
163
|
+
version: '2.15'
|
164
|
+
type: :development
|
165
|
+
prerelease: false
|
166
|
+
version_requirements: !ruby/object:Gem::Requirement
|
167
|
+
requirements:
|
168
|
+
- - "~>"
|
169
|
+
- !ruby/object:Gem::Version
|
170
|
+
version: '2.15'
|
171
|
+
description: Dokno allows you to easily mount a self-contained knowledgebase / wiki
|
172
|
+
/ help system to your Rails app where you and your users can author articles relevant
|
173
|
+
to your app.
|
174
|
+
email:
|
175
|
+
- cpayne624@gmail.com
|
176
|
+
executables: []
|
177
|
+
extensions: []
|
178
|
+
extra_rdoc_files: []
|
179
|
+
files:
|
180
|
+
- MIT-LICENSE
|
181
|
+
- README.md
|
182
|
+
- Rakefile
|
183
|
+
- app/assets/config/dokno_manifest.js
|
184
|
+
- app/assets/javascripts/dokno.js
|
185
|
+
- app/assets/javascripts/dokno/application.js
|
186
|
+
- app/assets/javascripts/feather.min.js
|
187
|
+
- app/assets/javascripts/init.js
|
188
|
+
- app/assets/stylesheets/dokno/application.css
|
189
|
+
- app/assets/stylesheets/dokno/tailwind.min.css
|
190
|
+
- app/controllers/dokno/application_controller.rb
|
191
|
+
- app/controllers/dokno/articles_controller.rb
|
192
|
+
- app/controllers/dokno/categories_controller.rb
|
193
|
+
- app/controllers/dokno/pagination_concern.rb
|
194
|
+
- app/controllers/dokno/user_concern.rb
|
195
|
+
- app/helpers/dokno/application_helper.rb
|
196
|
+
- app/models/dokno/application_record.rb
|
197
|
+
- app/models/dokno/article.rb
|
198
|
+
- app/models/dokno/article_slug.rb
|
199
|
+
- app/models/dokno/category.rb
|
200
|
+
- app/models/dokno/log.rb
|
201
|
+
- app/views/dokno/_article_formatting.html.erb
|
202
|
+
- app/views/dokno/_article_panel.html.erb
|
203
|
+
- app/views/dokno/_panel_formatting.html.erb
|
204
|
+
- app/views/dokno/_reset_formatting.html.erb
|
205
|
+
- app/views/dokno/articles/_article_form.html.erb
|
206
|
+
- app/views/dokno/articles/edit.html.erb
|
207
|
+
- app/views/dokno/articles/new.html.erb
|
208
|
+
- app/views/dokno/articles/show.html.erb
|
209
|
+
- app/views/dokno/categories/_category_form.html.erb
|
210
|
+
- app/views/dokno/categories/edit.html.erb
|
211
|
+
- app/views/dokno/categories/index.html.erb
|
212
|
+
- app/views/dokno/categories/new.html.erb
|
213
|
+
- app/views/layouts/dokno/application.html.erb
|
214
|
+
- app/views/partials/_form_errors.html.erb
|
215
|
+
- app/views/partials/_logs.html.erb
|
216
|
+
- app/views/partials/_pagination.html.erb
|
217
|
+
- config/routes.rb
|
218
|
+
- db/migrate/20201203190330_baseline.rb
|
219
|
+
- lib/dokno.rb
|
220
|
+
- lib/dokno/config/config.rb
|
221
|
+
- lib/dokno/engine.rb
|
222
|
+
- lib/dokno/version.rb
|
223
|
+
- lib/generators/dokno/install/install_generator.rb
|
224
|
+
- lib/generators/dokno/templates/config/dokno_template.md
|
225
|
+
- lib/generators/dokno/templates/config/initializers/dokno.rb
|
226
|
+
- lib/tasks/dokno_tasks.rake
|
227
|
+
homepage: https://github.com/cpayne624/dokno
|
228
|
+
licenses:
|
229
|
+
- MIT
|
230
|
+
metadata:
|
231
|
+
bug_tracker_uri: https://github.com/cpayne624/dokno/issues
|
232
|
+
changelog_uri: https://github.com/cpayne624/dokno/blob/master/CHANGELOG.md
|
233
|
+
post_install_message:
|
234
|
+
rdoc_options: []
|
235
|
+
require_paths:
|
236
|
+
- lib
|
237
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
238
|
+
requirements:
|
239
|
+
- - ">="
|
240
|
+
- !ruby/object:Gem::Version
|
241
|
+
version: '0'
|
242
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
243
|
+
requirements:
|
244
|
+
- - ">="
|
245
|
+
- !ruby/object:Gem::Version
|
246
|
+
version: '0'
|
247
|
+
requirements: []
|
248
|
+
rubygems_version: 3.1.4
|
249
|
+
signing_key:
|
250
|
+
specification_version: 4
|
251
|
+
summary: Dokno (dough-no) is a lightweight mountable Rails Engine for storing and
|
252
|
+
managing your app's domain knowledge.
|
253
|
+
test_files: []
|