dokno 1.1.0 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +6 -6
- data/app/assets/javascripts/dokno.js +67 -31
- data/app/assets/stylesheets/dokno/application.css +1 -1
- data/app/controllers/dokno/application_controller.rb +1 -1
- data/app/controllers/dokno/articles_controller.rb +19 -11
- data/app/controllers/dokno/categories_controller.rb +10 -7
- data/app/controllers/dokno/pagination_concern.rb +5 -5
- data/app/controllers/dokno/user_concern.rb +6 -4
- data/app/helpers/dokno/application_helper.rb +1 -1
- data/app/models/dokno/application_record.rb +3 -0
- data/app/models/dokno/article.rb +91 -42
- data/app/models/dokno/category.rb +24 -45
- data/app/views/dokno/_article_formatting.html.erb +17 -18
- data/app/views/dokno/_article_panel.html.erb +10 -19
- data/app/views/dokno/_panel_formatting.html.erb +47 -57
- data/app/views/dokno/articles/_article_form.html.erb +49 -10
- data/app/views/dokno/articles/show.html.erb +48 -45
- data/app/views/dokno/categories/_category_form.html.erb +18 -7
- data/app/views/dokno/categories/index.html.erb +59 -40
- data/app/views/layouts/dokno/application.html.erb +36 -35
- data/app/views/partials/_category_header.html.erb +30 -0
- data/app/views/partials/_form_errors.html.erb +0 -1
- data/app/views/partials/_logs.html.erb +7 -5
- data/app/views/partials/_pagination.html.erb +20 -18
- data/config/routes.rb +1 -1
- data/db/migrate/20201203190330_baseline.rb +4 -4
- data/db/migrate/20201211192306_add_review_due_at_to_articles.rb +6 -0
- data/db/migrate/20201213165700_add_starred_to_article.rb +5 -0
- data/lib/dokno/config/config.rb +53 -40
- data/lib/dokno/engine.rb +5 -5
- data/lib/dokno/version.rb +1 -1
- data/lib/generators/dokno/templates/config/initializers/dokno.rb +18 -5
- metadata +82 -11
@@ -0,0 +1,30 @@
|
|
1
|
+
<div class="no-print flex items-center mb-10">
|
2
|
+
<% if Dokno::Category.exists? %>
|
3
|
+
<div class="w-1/2 pr-5">
|
4
|
+
<select aria-label="Category" name="category" id="category" size="1" class="rounded text-xl shadow-inner bg-gray-100 p-2 w-full max-w-full" onchange="applyCategoryCriteria(this.value, elem('#search_term').value, '<%= @order %>');">
|
5
|
+
<option value="">Uncategorized</option>
|
6
|
+
|
7
|
+
<optgroup label="Categories">
|
8
|
+
<% cache Dokno::Category do %>
|
9
|
+
<%= Dokno::Category.select_option_markup.html_safe %>
|
10
|
+
<% end %>
|
11
|
+
</optgroup>
|
12
|
+
</select>
|
13
|
+
</div>
|
14
|
+
|
15
|
+
<script>
|
16
|
+
// Client-side select of cached select list
|
17
|
+
selectOption('category', '<%= j @category&.code %>');
|
18
|
+
</script>
|
19
|
+
<% end %>
|
20
|
+
|
21
|
+
<% if Dokno::Article.exists? %>
|
22
|
+
<div class="relative w-<%= Dokno::Category.exists? ? '1/2 pl-5' : 'full' %>">
|
23
|
+
<i data-feather="search" class="absolute ml-4 mt-3 inline-block text-gray-300" title="Search"></i>
|
24
|
+
<input title="Press / to search" onsearch="applyCategoryCriteria('<%= @category&.code %>', this.value, '<%= @order %>');" onfocus="disableSearchHotkey();" onblur="enableSearchHotkey();" placeholder="Search<%= @category.present? ? ' under this category' : ', hotkey /' %>" type="search" name="search_term" id="search_term" value="<%= @search_term %>" class="pl-12 pr-8 py-2 rounded text-xl shadow-inner bg-gray-100 w-full" />
|
25
|
+
<% if @category.present? %><div title="Press / to search" class="absolute -ml-6 mt-2 inline-block text-gray-300 font-semibold">/</div><% end %>
|
26
|
+
</div>
|
27
|
+
<% end %>
|
28
|
+
</div>
|
29
|
+
|
30
|
+
<script> enableSearchHotkey(); </script>
|
@@ -2,7 +2,7 @@
|
|
2
2
|
<div class="py-10 px-16 text-gray-200 bg-gray-900">
|
3
3
|
<div class="w-full max-w-screen-xl m-auto">
|
4
4
|
<div class="text-xl text-gray-600 cursor-pointer" onclick="toggleVisibility('change-log');">
|
5
|
-
Change
|
5
|
+
Change history for this article
|
6
6
|
|
7
7
|
<div class="inline toggle-visibility-indicator-container change-log">
|
8
8
|
<i data-feather="chevron-left" class="inline toggle-visibility-indicator change-log"></i>
|
@@ -20,7 +20,7 @@
|
|
20
20
|
<% end %>
|
21
21
|
|
22
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
|
23
|
+
<div class="w-<%= log.diff_left != log.diff_right ? '11/12' : 'full' %>">
|
24
24
|
<%= time_ago_in_words log.created_at %> ago
|
25
25
|
<% if log.username.present? %>
|
26
26
|
by <%= log.username %>
|
@@ -31,9 +31,11 @@
|
|
31
31
|
<% end %>
|
32
32
|
</div>
|
33
33
|
|
34
|
-
|
35
|
-
|
36
|
-
|
34
|
+
<% if log.diff_left != log.diff_right %>
|
35
|
+
<div class="w-1/12 text-right toggle-visibility-indicator-container article-diff-<%= log.id %>">
|
36
|
+
<i data-feather="chevron-left" class="inline toggle-visibility-indicator article-diff-<%= log.id %>"></i>
|
37
|
+
</div>
|
38
|
+
<% end %>
|
37
39
|
</div>
|
38
40
|
|
39
41
|
<% if log.diff_left != log.diff_right %>
|
@@ -1,29 +1,31 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
<% if @total_pages > 1 %>
|
2
|
+
<span class="mr-5">
|
3
|
+
<% if @page > 1 %>
|
4
|
+
<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>
|
5
|
+
<% end %>
|
5
6
|
|
6
|
-
|
7
|
+
<span class="mr-1 inline-block">Page</span>
|
7
8
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
<input type="text" name="page" id="page" value="<%= @page %>" onclick="this.select();" class="w-10 text-center bg-gray-200 rounded" />
|
9
|
+
<%= form_with(url: article_index_path(@category&.code), method: :get, class: 'inline') do %>
|
10
|
+
<input type="hidden" name="search_term" value="<%= @search_term %>">
|
11
|
+
<input type="hidden" name="order" value="<%= @order %>">
|
12
|
+
<input aria-label="Page" type="text" name="page" value="<%= @page %>" onclick="this.select();" class="w-10 text-center bg-gray-200 rounded" />
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
|
14
|
+
<span class="mx-1 inline-block">of</span>
|
15
|
+
<span class="text-center inline-block"><%= @total_pages %></span>
|
16
|
+
<% end %>
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
</span>
|
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
|
+
<% end %>
|
22
23
|
|
23
24
|
<span class="text-gray-400">
|
24
25
|
<%= @total_records %>
|
25
|
-
<%= 'uncategorized' if @category.blank? && @search_term.blank? %>
|
26
|
+
<%= 'uncategorized' if !current_page?(up_for_review_path) && @category.blank? && @search_term.blank? %>
|
26
27
|
<%= 'article'.pluralize(@total_records) %>
|
28
|
+
<%= 'up for review' if current_page?(up_for_review_path) %>
|
27
29
|
|
28
30
|
<% if @search_term.present? %>
|
29
31
|
containing <span class="font-serif">“</span><%= @search_term %><span class="font-serif">”</span>
|
data/config/routes.rb
CHANGED
@@ -3,8 +3,8 @@ Dokno::Engine.routes.draw do
|
|
3
3
|
resources :articles
|
4
4
|
|
5
5
|
get '/(:cat_code)', to: 'categories#index', as: :article_index
|
6
|
+
get '/up_for_review', to: 'categories#index', as: :up_for_review
|
6
7
|
get 'article_panel/(:slug)', to: 'articles#panel', as: :panel
|
7
|
-
post 'article_log', to: 'articles#article_log', as: :article_log
|
8
8
|
post 'article_preview', to: 'articles#preview', as: :preview
|
9
9
|
post 'article_status', to: 'articles#status', as: :status
|
10
10
|
root 'categories#index'
|
@@ -13,12 +13,12 @@ class Baseline < ActiveRecord::Migration[6.0]
|
|
13
13
|
t.string "slug"
|
14
14
|
t.string "title"
|
15
15
|
t.text "markdown"
|
16
|
-
t.datetime "created_at", precision: 6, null: false
|
17
|
-
t.datetime "updated_at", precision: 6, null: false
|
18
16
|
t.text "summary"
|
19
17
|
t.boolean "active", default: true
|
20
18
|
t.bigint "views", default: 0
|
21
19
|
t.datetime "last_viewed_at"
|
20
|
+
t.datetime "created_at", precision: 6, null: false
|
21
|
+
t.datetime "updated_at", precision: 6, null: false
|
22
22
|
t.index ["slug"], name: "index_dokno_articles_on_slug", unique: true
|
23
23
|
end
|
24
24
|
|
@@ -32,10 +32,10 @@ class Baseline < ActiveRecord::Migration[6.0]
|
|
32
32
|
|
33
33
|
create_table "dokno_categories", force: :cascade do |t|
|
34
34
|
t.string "name"
|
35
|
-
t.datetime "created_at", precision: 6, null: false
|
36
|
-
t.datetime "updated_at", precision: 6, null: false
|
37
35
|
t.bigint "category_id"
|
38
36
|
t.string "code", null: false
|
37
|
+
t.datetime "created_at", precision: 6, null: false
|
38
|
+
t.datetime "updated_at", precision: 6, null: false
|
39
39
|
t.index ["category_id"], name: "index_dokno_categories_on_category_id"
|
40
40
|
t.index ["code"], name: "index_dokno_categories_on_code", unique: true
|
41
41
|
t.index ["name"], name: "index_dokno_categories_on_name", unique: true
|
data/lib/dokno/config/config.rb
CHANGED
@@ -1,4 +1,8 @@
|
|
1
1
|
module Dokno
|
2
|
+
module Error
|
3
|
+
class Config < StandardError; end
|
4
|
+
end
|
5
|
+
|
2
6
|
def self.configure
|
3
7
|
yield config
|
4
8
|
config.validate
|
@@ -8,62 +12,71 @@ module Dokno
|
|
8
12
|
@config ||= Config.new
|
9
13
|
end
|
10
14
|
|
11
|
-
def self.config=(val)
|
12
|
-
@config = val
|
13
|
-
end
|
14
|
-
|
15
15
|
class Config
|
16
|
-
#
|
17
|
-
|
16
|
+
# Dokno configuration options
|
17
|
+
#
|
18
|
+
# app_name (String)
|
19
|
+
# Host app name for display within the mounted dashboard
|
20
|
+
# tag_whitelist (Enumerable)
|
21
|
+
# Determines which HTML tags are allowed in Article markdown
|
22
|
+
# attr_whitelist (Enumerable)
|
23
|
+
# Determines which HTML attributes are allowed in Article markdown
|
24
|
+
# app_user_object (String)
|
25
|
+
# Host app's user object
|
26
|
+
# app_user_auth_method (Symbol)
|
27
|
+
# Host app's user object method to be used for edit authorization.
|
28
|
+
# Should return boolean
|
29
|
+
# app_user_name_method (Symbol)
|
30
|
+
# Host app's user object method that returns the authenticated user's name or other
|
31
|
+
# identifier that will be included in change log events.
|
32
|
+
# Should return a string
|
33
|
+
# article_review_period (ActiveSupport::Duration)
|
34
|
+
# The amount of time before articles should be reviewed for accuracy/relevance
|
35
|
+
# article_review_prompt_days (Integer)
|
36
|
+
# The number of days prior to an article being up for review that users should be prompted
|
18
37
|
|
19
|
-
|
38
|
+
attr_accessor :app_name
|
20
39
|
attr_accessor :tag_whitelist
|
21
|
-
|
22
|
-
# (Enumerable) Determines which HTML attributes are allowed in Article markdown
|
23
40
|
attr_accessor :attr_whitelist
|
24
|
-
|
25
|
-
# (String) Host application's user object
|
26
41
|
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
42
|
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
43
|
attr_accessor :app_user_name_method
|
44
|
+
attr_accessor :article_review_period
|
45
|
+
attr_accessor :article_review_prompt_days
|
35
46
|
|
36
47
|
# Defaults
|
37
|
-
TAG_WHITELIST
|
38
|
-
ATTR_WHITELIST
|
39
|
-
APP_USER_OBJECT
|
40
|
-
APP_USER_AUTH_METHOD
|
41
|
-
APP_USER_NAME_METHOD
|
48
|
+
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]
|
49
|
+
ATTR_WHITELIST = %w[src alt title href target]
|
50
|
+
APP_USER_OBJECT = 'current_user'
|
51
|
+
APP_USER_AUTH_METHOD = :admin?
|
52
|
+
APP_USER_NAME_METHOD = :name
|
53
|
+
ARTICLE_REVIEW_PERIOD = 1.year
|
54
|
+
ARTICLE_REVIEW_PROMPT_DAYS = 30
|
42
55
|
|
43
56
|
def initialize
|
44
|
-
self.app_name
|
45
|
-
self.tag_whitelist
|
46
|
-
self.attr_whitelist
|
47
|
-
self.app_user_object
|
48
|
-
self.app_user_auth_method
|
49
|
-
self.app_user_name_method
|
57
|
+
self.app_name = Rails.application.class.module_parent.name.underscore.humanize.upcase
|
58
|
+
self.tag_whitelist = TAG_WHITELIST
|
59
|
+
self.attr_whitelist = ATTR_WHITELIST
|
60
|
+
self.app_user_object = APP_USER_OBJECT
|
61
|
+
self.app_user_auth_method = APP_USER_AUTH_METHOD
|
62
|
+
self.app_user_name_method = APP_USER_NAME_METHOD
|
63
|
+
self.article_review_period = ARTICLE_REVIEW_PERIOD
|
64
|
+
self.article_review_prompt_days = ARTICLE_REVIEW_PROMPT_DAYS
|
50
65
|
end
|
51
66
|
|
52
67
|
def validate
|
53
|
-
|
54
|
-
|
68
|
+
validate_config_option(option: 'tag_whitelist', expected_class: Enumerable, example: '%w[a p strong]')
|
69
|
+
validate_config_option(option: 'attr_whitelist', expected_class: Enumerable, example: '%w[class href]')
|
70
|
+
validate_config_option(option: 'app_user_object', expected_class: String, example: 'current_user')
|
71
|
+
validate_config_option(option: 'app_user_auth_method', expected_class: Symbol, example: ':admin?')
|
72
|
+
validate_config_option(option: 'app_user_name_method', expected_class: Symbol, example: ':name')
|
73
|
+
validate_config_option(option: 'article_review_period', expected_class: ActiveSupport::Duration, example: '1.year')
|
74
|
+
validate_config_option(option: 'article_review_prompt_days', expected_class: Integer, example: '30')
|
55
75
|
end
|
56
76
|
|
57
|
-
def
|
58
|
-
return unless !
|
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"
|
77
|
+
def validate_config_option(option:, expected_class:, example:)
|
78
|
+
return unless !send(option.to_sym).is_a? expected_class
|
79
|
+
raise Error::Config, "#{config_error_prefix} #{option} must be #{expected_class}, e.g. #{example}"
|
67
80
|
end
|
68
81
|
|
69
82
|
def config_error_prefix
|
data/lib/dokno/engine.rb
CHANGED
@@ -4,10 +4,6 @@ module Dokno
|
|
4
4
|
class Engine < ::Rails::Engine
|
5
5
|
isolate_namespace Dokno
|
6
6
|
|
7
|
-
initializer 'Dokno precompile', group: :all do |app|
|
8
|
-
app.config.assets.precompile << "dokno_manifest.js"
|
9
|
-
end
|
10
|
-
|
11
7
|
config.generators do |g|
|
12
8
|
g.test_framework :rspec
|
13
9
|
end
|
@@ -18,8 +14,12 @@ module Dokno
|
|
18
14
|
end
|
19
15
|
end
|
20
16
|
|
17
|
+
initializer 'Dokno precompile', group: :all do |app|
|
18
|
+
app.config.assets.precompile << "dokno_manifest.js"
|
19
|
+
end
|
20
|
+
|
21
21
|
initializer 'local_helper.action_controller' do
|
22
|
-
ActiveSupport.on_load :
|
22
|
+
ActiveSupport.on_load :action_controller_base do
|
23
23
|
helper Dokno::ApplicationHelper
|
24
24
|
end
|
25
25
|
end
|
data/lib/dokno/version.rb
CHANGED
@@ -1,14 +1,27 @@
|
|
1
1
|
Dokno.configure do |config|
|
2
|
-
|
3
|
-
|
2
|
+
# To control the permitted HTML tags and attributes within articles,
|
3
|
+
# uncomment and change the defaults.
|
4
|
+
# (Enumerable) tag_whitelist
|
5
|
+
# (Enumerable) attr_whitelist
|
6
|
+
# config.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]
|
7
|
+
# config.attr_whitelist = %w[src alt title href target]
|
4
8
|
|
5
9
|
# To restrict Dokno data modification and include indentifying information
|
6
10
|
# in change log entries, provide the appropriate user values for your app below.
|
7
11
|
# (String) app_user_object
|
8
12
|
# (Symbol) app_user_auth_method
|
9
13
|
# (Symbol) app_user_name_method
|
14
|
+
# config.app_user_object = 'current_user'
|
15
|
+
# config.app_user_auth_method = :admin?
|
16
|
+
# config.app_user_name_method = :name
|
10
17
|
|
11
|
-
#
|
12
|
-
#
|
13
|
-
#
|
18
|
+
# To control the amount of time before a created/updated article is flagged
|
19
|
+
# for accuracy/relevance review, uncomment and change the default.
|
20
|
+
# (ActiveSupport::Duration) article_review_period
|
21
|
+
# config.article_review_period = 1.year
|
22
|
+
|
23
|
+
# To control the number of days prior to an article being up for review
|
24
|
+
# that users should be prompted to re-review, uncomment and change the default.
|
25
|
+
# (Integer) article_review_prompt_days
|
26
|
+
# config.article_review_prompt_days = 30
|
14
27
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dokno
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Courtney Payne
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-12-
|
11
|
+
date: 2020-12-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: diffy
|
@@ -38,6 +38,34 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '3.5'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bullet
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '6.1'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '6.1'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: capybara
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '3.34'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '3.34'
|
41
69
|
- !ruby/object:Gem::Dependency
|
42
70
|
name: database_cleaner-active_record
|
43
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -52,6 +80,20 @@ dependencies:
|
|
52
80
|
- - "~>"
|
53
81
|
- !ruby/object:Gem::Version
|
54
82
|
version: '1.8'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: faker
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '2.15'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '2.15'
|
55
97
|
- !ruby/object:Gem::Dependency
|
56
98
|
name: pg
|
57
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -86,6 +128,20 @@ dependencies:
|
|
86
128
|
- - "~>"
|
87
129
|
- !ruby/object:Gem::Version
|
88
130
|
version: '3.9'
|
131
|
+
- !ruby/object:Gem::Dependency
|
132
|
+
name: puma
|
133
|
+
requirement: !ruby/object:Gem::Requirement
|
134
|
+
requirements:
|
135
|
+
- - "~>"
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
version: '5.1'
|
138
|
+
type: :development
|
139
|
+
prerelease: false
|
140
|
+
version_requirements: !ruby/object:Gem::Requirement
|
141
|
+
requirements:
|
142
|
+
- - "~>"
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: '5.1'
|
89
145
|
- !ruby/object:Gem::Dependency
|
90
146
|
name: rails
|
91
147
|
requirement: !ruby/object:Gem::Requirement
|
@@ -127,47 +183,59 @@ dependencies:
|
|
127
183
|
- !ruby/object:Gem::Version
|
128
184
|
version: 4.0.1
|
129
185
|
- !ruby/object:Gem::Dependency
|
130
|
-
name:
|
186
|
+
name: selenium-webdriver
|
131
187
|
requirement: !ruby/object:Gem::Requirement
|
132
188
|
requirements:
|
133
189
|
- - "~>"
|
134
190
|
- !ruby/object:Gem::Version
|
135
|
-
version:
|
191
|
+
version: '3.142'
|
192
|
+
- - ">="
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: 3.142.7
|
136
195
|
type: :development
|
137
196
|
prerelease: false
|
138
197
|
version_requirements: !ruby/object:Gem::Requirement
|
139
198
|
requirements:
|
140
199
|
- - "~>"
|
141
200
|
- !ruby/object:Gem::Version
|
142
|
-
version:
|
201
|
+
version: '3.142'
|
202
|
+
- - ">="
|
203
|
+
- !ruby/object:Gem::Version
|
204
|
+
version: 3.142.7
|
143
205
|
- !ruby/object:Gem::Dependency
|
144
|
-
name:
|
206
|
+
name: simplecov
|
145
207
|
requirement: !ruby/object:Gem::Requirement
|
146
208
|
requirements:
|
147
209
|
- - "~>"
|
148
210
|
- !ruby/object:Gem::Version
|
149
|
-
version:
|
211
|
+
version: 0.19.1
|
150
212
|
type: :development
|
151
213
|
prerelease: false
|
152
214
|
version_requirements: !ruby/object:Gem::Requirement
|
153
215
|
requirements:
|
154
216
|
- - "~>"
|
155
217
|
- !ruby/object:Gem::Version
|
156
|
-
version:
|
218
|
+
version: 0.19.1
|
157
219
|
- !ruby/object:Gem::Dependency
|
158
|
-
name:
|
220
|
+
name: webdrivers
|
159
221
|
requirement: !ruby/object:Gem::Requirement
|
160
222
|
requirements:
|
161
223
|
- - "~>"
|
162
224
|
- !ruby/object:Gem::Version
|
163
|
-
version: '
|
225
|
+
version: '4.4'
|
226
|
+
- - ">="
|
227
|
+
- !ruby/object:Gem::Version
|
228
|
+
version: 4.4.1
|
164
229
|
type: :development
|
165
230
|
prerelease: false
|
166
231
|
version_requirements: !ruby/object:Gem::Requirement
|
167
232
|
requirements:
|
168
233
|
- - "~>"
|
169
234
|
- !ruby/object:Gem::Version
|
170
|
-
version: '
|
235
|
+
version: '4.4'
|
236
|
+
- - ">="
|
237
|
+
- !ruby/object:Gem::Version
|
238
|
+
version: 4.4.1
|
171
239
|
description: Dokno allows you to easily mount a self-contained knowledgebase / wiki
|
172
240
|
/ help system to your Rails app.
|
173
241
|
email:
|
@@ -210,11 +278,14 @@ files:
|
|
210
278
|
- app/views/dokno/categories/index.html.erb
|
211
279
|
- app/views/dokno/categories/new.html.erb
|
212
280
|
- app/views/layouts/dokno/application.html.erb
|
281
|
+
- app/views/partials/_category_header.html.erb
|
213
282
|
- app/views/partials/_form_errors.html.erb
|
214
283
|
- app/views/partials/_logs.html.erb
|
215
284
|
- app/views/partials/_pagination.html.erb
|
216
285
|
- config/routes.rb
|
217
286
|
- db/migrate/20201203190330_baseline.rb
|
287
|
+
- db/migrate/20201211192306_add_review_due_at_to_articles.rb
|
288
|
+
- db/migrate/20201213165700_add_starred_to_article.rb
|
218
289
|
- lib/dokno.rb
|
219
290
|
- lib/dokno/config/config.rb
|
220
291
|
- lib/dokno/engine.rb
|