dokno 1.3.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/app/assets/javascripts/dokno.js +3 -8
- data/app/controllers/dokno/articles_controller.rb +4 -4
- data/app/controllers/dokno/categories_controller.rb +4 -3
- data/app/controllers/dokno/pagination_concern.rb +5 -5
- data/app/controllers/dokno/user_concern.rb +1 -1
- data/app/helpers/dokno/application_helper.rb +1 -1
- data/app/models/dokno/application_record.rb +3 -0
- data/app/models/dokno/article.rb +4 -4
- data/app/models/dokno/category.rb +16 -38
- data/app/views/dokno/articles/_article_form.html.erb +3 -3
- data/app/views/dokno/articles/show.html.erb +8 -3
- data/app/views/dokno/categories/_category_form.html.erb +17 -6
- data/app/views/dokno/categories/index.html.erb +28 -7
- data/app/views/layouts/dokno/application.html.erb +6 -23
- data/app/views/partials/_category_header.html.erb +6 -5
- data/lib/dokno/engine.rb +1 -1
- data/lib/dokno/version.rb +1 -1
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f136bc4f785f0f392e5e76d19b55d74ae59f59f96f144049cb9e288aaaaeced5
|
4
|
+
data.tar.gz: 117835447f5ef02db4c18de8453f7053a977cec6349528a6b3d15250da42ae0a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a49495dd1c51f2eac0508d8df2a7bc34f97a8f7cfa2699f36a3cebfbcc3b5012c7ccf80f1bcc730815a644b08ac4021e02fa0f5fd2b39bac1c86d8c0cbbed13b
|
7
|
+
data.tar.gz: ebe01549788e0f4ab21eb36b1b11a0b7d21518dc4626cba64543e6c3ca66a6de8ea7bc311df6490489df22f51f239b0cb544af79bb2ce7af146a6938be829b8b
|
@@ -46,7 +46,7 @@ function applyCategoryCriteria(category_code, term, order) {
|
|
46
46
|
|
47
47
|
function goToPage(url) {
|
48
48
|
var param_join = url.indexOf('?') >= 0 ? '&' : '?';
|
49
|
-
location.href=url + param_join + '_=' + Math.round(new Date().getTime());
|
49
|
+
location.href = url + param_join + '_=' + Math.round(new Date().getTime());
|
50
50
|
}
|
51
51
|
|
52
52
|
function reloadPage() {
|
@@ -74,14 +74,9 @@ function sendRequest(url, data, callback, method) {
|
|
74
74
|
request.send(JSON.stringify(data));
|
75
75
|
}
|
76
76
|
|
77
|
-
function
|
77
|
+
function setArticleStatus(slug, active) {
|
78
78
|
const callback = function(_data) { reloadPage(); }
|
79
|
-
sendRequest(dokno__base_path + 'article_status', { slug: slug, active:
|
80
|
-
}
|
81
|
-
|
82
|
-
function activateArticle(slug) {
|
83
|
-
const callback = function(_data) { reloadPage(); }
|
84
|
-
sendRequest(dokno__base_path + 'article_status', { slug: slug, active: true }, callback, 'POST');
|
79
|
+
sendRequest(dokno__base_path + 'article_status', { slug: slug, active: active }, callback, 'POST');
|
85
80
|
}
|
86
81
|
|
87
82
|
function deleteArticle(id) {
|
@@ -60,10 +60,10 @@ module Dokno
|
|
60
60
|
@article.categories = Category.where(code: params[:category_code])
|
61
61
|
redirect_to article_path @article.slug
|
62
62
|
else
|
63
|
-
flash.now[:red]
|
64
|
-
@category_codes
|
65
|
-
@reset_review_date
|
66
|
-
@review_notes
|
63
|
+
flash.now[:red] = 'Article could not be updated'
|
64
|
+
@category_codes = params[:category_code]
|
65
|
+
@reset_review_date = params[:reset_review_date]
|
66
|
+
@review_notes = params[:review_notes]
|
67
67
|
render :edit
|
68
68
|
end
|
69
69
|
end
|
@@ -6,9 +6,10 @@ module Dokno
|
|
6
6
|
before_action :fetch_category, only: [:index, :edit, :update]
|
7
7
|
|
8
8
|
def index
|
9
|
-
@search_term
|
10
|
-
@order
|
11
|
-
@order
|
9
|
+
@search_term = params[:search_term]
|
10
|
+
@order = params[:order]&.strip
|
11
|
+
@order = 'updated' unless %w(updated newest views alpha).include?(@order)
|
12
|
+
@show_up_for_review = can_edit? && !request.path.include?(up_for_review_path)
|
12
13
|
|
13
14
|
articles = if request.path.include? up_for_review_path
|
14
15
|
Article.up_for_review(order: @order&.to_sym)
|
@@ -3,11 +3,11 @@ module Dokno
|
|
3
3
|
extend ActiveSupport::Concern
|
4
4
|
|
5
5
|
def paginate(records, max_per_page: 10)
|
6
|
-
@page
|
7
|
-
@total_records
|
8
|
-
@total_pages
|
9
|
-
@total_pages
|
10
|
-
@page
|
6
|
+
@page = params[:page].to_i
|
7
|
+
@total_records = records.size
|
8
|
+
@total_pages = (@total_records.to_f / max_per_page).ceil
|
9
|
+
@total_pages = 1 unless @total_pages.positive?
|
10
|
+
@page = 1 unless @page.positive? && @page <= @total_pages
|
11
11
|
|
12
12
|
records.offset((@page - 1) * max_per_page).limit(max_per_page)
|
13
13
|
end
|
@@ -28,7 +28,7 @@ module Dokno
|
|
28
28
|
def can_edit?
|
29
29
|
# Allow editing by default if host app user object is not configured
|
30
30
|
return true unless sanitized_user_obj_string.present?
|
31
|
-
return false unless user
|
31
|
+
return false unless user&.respond_to? Dokno.config.app_user_auth_method.to_sym
|
32
32
|
|
33
33
|
user.send(Dokno.config.app_user_auth_method.to_sym)
|
34
34
|
end
|
@@ -9,7 +9,7 @@ module Dokno
|
|
9
9
|
|
10
10
|
return "Dokno article slug '#{slug}' not found" if article.blank?
|
11
11
|
|
12
|
-
%Q(<a href="javascript:;" onclick="doknoOpenPanel('#{j article.slug}');">#{link_text.presence || article.title}</a>).html_safe
|
12
|
+
%Q(<a class="dokno-link" href="javascript:;" onclick="doknoOpenPanel('#{j article.slug}');">#{link_text.presence || article.title}</a>).html_safe
|
13
13
|
end
|
14
14
|
end
|
15
15
|
end
|
data/app/models/dokno/article.rb
CHANGED
@@ -3,9 +3,6 @@ require 'redcarpet'
|
|
3
3
|
|
4
4
|
module Dokno
|
5
5
|
class Article < ApplicationRecord
|
6
|
-
include Engine.routes.url_helpers
|
7
|
-
include ActionView::Helpers::DateHelper
|
8
|
-
|
9
6
|
has_and_belongs_to_many :categories
|
10
7
|
has_many :logs, dependent: :destroy
|
11
8
|
has_many :article_slugs, dependent: :destroy
|
@@ -76,7 +73,10 @@ module Dokno
|
|
76
73
|
.where(dokno_articles_categories: { article_id: id })
|
77
74
|
.all
|
78
75
|
.map do |category|
|
79
|
-
|
76
|
+
next if context_category_id == category.id
|
77
|
+
|
78
|
+
"<a class='underline' href='#{article_index_path(category.code)}?search_term="\
|
79
|
+
"#{CGI.escape(search_term.to_s)}&order=#{CGI.escape(order.to_s)}'>#{category.name}</a>"
|
80
80
|
end.compact
|
81
81
|
|
82
82
|
return '' if names.blank?
|
@@ -1,41 +1,33 @@
|
|
1
1
|
module Dokno
|
2
2
|
class Category < ApplicationRecord
|
3
|
-
belongs_to :parent,
|
4
|
-
|
5
|
-
primary_key: 'id',
|
6
|
-
foreign_key: 'category_id',
|
7
|
-
optional: true,
|
8
|
-
inverse_of: :children
|
9
|
-
has_many :children,
|
10
|
-
class_name: 'Dokno::Category',
|
11
|
-
primary_key: 'id',
|
12
|
-
foreign_key: 'category_id',
|
13
|
-
dependent: :nullify,
|
14
|
-
inverse_of: :parent
|
3
|
+
belongs_to :parent, class_name: 'Dokno::Category', primary_key: 'id', foreign_key: 'category_id', inverse_of: :children, optional: true
|
4
|
+
has_many :children, class_name: 'Dokno::Category', primary_key: 'id', foreign_key: 'category_id', inverse_of: :parent, dependent: :nullify
|
15
5
|
|
16
6
|
has_and_belongs_to_many :articles
|
17
7
|
|
8
|
+
before_validation :set_code
|
18
9
|
validates :name, :code, presence: true, uniqueness: true
|
19
10
|
validate :circular_parent_check
|
20
11
|
|
21
|
-
before_validation :set_code
|
22
|
-
|
23
12
|
scope :alpha_order, -> { order(:name) }
|
24
13
|
|
25
|
-
|
26
|
-
|
27
|
-
crumbs = [name]
|
14
|
+
def breadcrumb(**args)
|
15
|
+
crumbs = [(category_link(self, args) unless args[:hide_self])]
|
28
16
|
parent_category_id = category_id
|
29
17
|
|
30
18
|
loop do
|
31
19
|
break if parent_category_id.blank?
|
32
20
|
|
33
|
-
parent_category =
|
34
|
-
crumbs.prepend parent_category
|
21
|
+
parent_category = Category.find(parent_category_id)
|
22
|
+
crumbs.prepend category_link(parent_category, args)
|
35
23
|
parent_category_id = parent_category.category_id
|
36
24
|
end
|
37
25
|
|
38
|
-
crumbs.join(
|
26
|
+
crumbs.compact.join(" > ").html_safe
|
27
|
+
end
|
28
|
+
|
29
|
+
def category_link(category, args={})
|
30
|
+
%(<a href="#{article_index_path(category.code)}?search_term=#{CGI.escape(args[:search_term].to_s)}&order=#{CGI.escape(args[:order].to_s)}">#{category.name}</a>)
|
39
31
|
end
|
40
32
|
|
41
33
|
# All Articles in the Category, including all child Categories
|
@@ -73,26 +65,14 @@ module Dokno
|
|
73
65
|
categories.flatten
|
74
66
|
end
|
75
67
|
|
76
|
-
def self.select_option_markup(selected_category_codes: nil,
|
68
|
+
def self.select_option_markup(selected_category_codes: nil, context_category: nil, level: 0)
|
77
69
|
return '' if level.positive? && context_category.blank?
|
78
70
|
|
79
71
|
options = []
|
80
72
|
level_categories = where(category_id: context_category&.id).alpha_order
|
81
|
-
|
82
73
|
level_categories.each do |category|
|
83
|
-
options << option_markup(
|
84
|
-
|
85
|
-
selected_category_codes: selected_category_codes,
|
86
|
-
exclude_category_id: exclude_category_id,
|
87
|
-
level: level
|
88
|
-
)
|
89
|
-
|
90
|
-
options << select_option_markup(
|
91
|
-
selected_category_codes: selected_category_codes,
|
92
|
-
exclude_category_id: exclude_category_id,
|
93
|
-
context_category: category,
|
94
|
-
level: (level + 1)
|
95
|
-
)
|
74
|
+
options << option_markup(category: category, selected_category_codes: selected_category_codes, level: level)
|
75
|
+
options << select_option_markup(selected_category_codes: selected_category_codes, context_category: category, level: (level + 1))
|
96
76
|
end
|
97
77
|
|
98
78
|
options.join
|
@@ -100,9 +80,7 @@ module Dokno
|
|
100
80
|
|
101
81
|
private
|
102
82
|
|
103
|
-
def self.option_markup(category:, selected_category_codes:,
|
104
|
-
return '' if category.id == exclude_category_id
|
105
|
-
|
83
|
+
def self.option_markup(category:, selected_category_codes:, level: 0)
|
106
84
|
selected = selected_category_codes&.include?(category.code)
|
107
85
|
article_count = category.articles_in_branch.size
|
108
86
|
%(<option value="#{category.code}" #{'selected="selected"' if selected}>#{(' ' * level)}#{category.name}#{' (' + article_count.to_s + ')' if article_count.positive?}</option>)
|
@@ -36,9 +36,9 @@
|
|
36
36
|
</div>
|
37
37
|
|
38
38
|
<% if Dokno::Category.exists? %>
|
39
|
-
<div class="mb-5">
|
40
|
-
<div class="text-lg font-semibold"><label for="
|
41
|
-
<select name="category_code[]" id="category_code" multiple="multiple" size="<%= (cat_count = Dokno::Category.count) <=
|
39
|
+
<div class="mb-5 w-2/3">
|
40
|
+
<div class="text-lg font-semibold"><label for="category_code"><%= 'Category'.pluralize article.categories.count %></label></div>
|
41
|
+
<select name="category_code[]" id="category_code" multiple="multiple" size="<%= (cat_count = Dokno::Category.count) <= 9 ? (cat_count + 1).to_s : '10' %>" class="rounded text-xl shadow-inner bg-gray-100 p-2 w-full mt-2 w-full max-w-full">
|
42
42
|
<option></option>
|
43
43
|
<%= Dokno::Category.select_option_markup(selected_category_codes: @category_codes).html_safe %>
|
44
44
|
</select>
|
@@ -2,7 +2,12 @@
|
|
2
2
|
|
3
3
|
<% if @category.present? %>
|
4
4
|
<div class="no-print text-gray-500 mb-5">
|
5
|
-
<div>
|
5
|
+
<div>
|
6
|
+
<% if request.referrer&.include? article_index_path %>
|
7
|
+
<a class="fixed left-0 ml-6" title="Back" href="javascript:history.back();"><i data-feather="chevrons-left" class="text-gray-300 h-5 align-text-bottom inline"></i></a>
|
8
|
+
<% end %>
|
9
|
+
<span class="text-gray-500 mr-1">Under</span> <%= @category.breadcrumb(search_term: @search_term, order: @order) %>
|
10
|
+
</div>
|
6
11
|
</div>
|
7
12
|
<% end %>
|
8
13
|
|
@@ -126,9 +131,9 @@
|
|
126
131
|
<button title="Edit article" class="bg-blue-900 text-gray-300 hover:text-white rounded mr-5 py-2 px-3 font-bold text-sm" onclick="location.href='<%= edit_article_path(@article.slug) %>';"><i data-feather="edit-2" class="inline h-5"></i> EDIT</button>
|
127
132
|
|
128
133
|
<% if @article.active %>
|
129
|
-
<button title="Deactivate article" id="article-deactivate-button" class="bg-yellow-700 text-gray-300 hover:text-white rounded mr-5 py-2 px-3 font-bold text-base" onclick="
|
134
|
+
<button title="Deactivate article" id="article-deactivate-button" class="bg-yellow-700 text-gray-300 hover:text-white rounded mr-5 py-2 px-3 font-bold text-base" onclick="setArticleStatus('<%= @article.slug %>', false);"><i data-feather="file-minus" class="inline h-5"></i> DEACTIVATE</button>
|
130
135
|
<% else %>
|
131
|
-
<button title="Re-activate article" id="article-activate-button" class="bg-green-700 text-gray-300 hover:text-white rounded mr-5 py-2 px-3 font-bold text-base" onclick="
|
136
|
+
<button title="Re-activate article" id="article-activate-button" class="bg-green-700 text-gray-300 hover:text-white rounded mr-5 py-2 px-3 font-bold text-base" onclick="setArticleStatus('<%= @article.slug %>', true);"><i data-feather="file-plus" class="inline h-5"></i> RE-ACTIVATE</button>
|
132
137
|
<% end %>
|
133
138
|
<button title="Permanently delete article" class="bg-red-700 text-gray-300 hover:text-white rounded py-2 px-3 font-bold text-base" onclick="deleteArticle('<%= @article.id %>');"><i data-feather="slash" class="inline h-5"></i> DELETE</button>
|
134
139
|
</div>
|
@@ -10,13 +10,20 @@
|
|
10
10
|
</div>
|
11
11
|
|
12
12
|
<% if Dokno::Category.exists? %>
|
13
|
-
<div class="mb-5">
|
13
|
+
<div class="mb-5 w-1/2">
|
14
14
|
<div class="text-lg font-semibold"><label for="parent_category_code">Parent Category</label></div>
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
|
16
|
+
<select name="parent_category_code" id="parent_category_code" size="1" class="rounded text-xl shadow-inner bg-gray-100 p-2 w-full max-w-full">
|
17
|
+
<option value="">No Parent Category</option>
|
18
|
+
|
19
|
+
<optgroup label="Categories">
|
20
|
+
<% cache Dokno::Category do %>
|
21
|
+
<%= Dokno::Category.select_option_markup.html_safe %>
|
22
|
+
<% end %>
|
23
|
+
</optgroup>
|
18
24
|
</select>
|
19
|
-
|
25
|
+
|
26
|
+
<div class="text-gray-500 mt-2">
|
20
27
|
The existing category to which this category belongs.
|
21
28
|
<% if (article_count = category.articles.count).positive? %>
|
22
29
|
There <%= article_count > 1 ? "are #{article_count} articles" : 'is an article' %> currently in this category.
|
@@ -35,4 +42,8 @@
|
|
35
42
|
</div>
|
36
43
|
</section>
|
37
44
|
|
38
|
-
<script>
|
45
|
+
<script>
|
46
|
+
// Client-side select of cached select list
|
47
|
+
selectOption('parent_category_code', '<%= j @parent_category_code %>');
|
48
|
+
elem('input#name').focus();
|
49
|
+
</script>
|
@@ -1,6 +1,27 @@
|
|
1
|
+
<% if !current_page?(up_for_review_path) && (@category.blank? || @search_term.present?) %>
|
2
|
+
<div class="text-center m-auto mb-10 w-full max-w-screen-xl">
|
3
|
+
<% if @search_term.present? %>
|
4
|
+
<div class="text-gray-600 text-2xl uppercase">
|
5
|
+
<%= @total_records.positive? ? "#{@total_records} #{'article'.pluralize(@total_records)}" : 'No articles' %>
|
6
|
+
found containing the search term
|
7
|
+
<div class="text-4xl leading-tight"><span class="font-serif">“</span> <%= @search_term %> <span class="font-serif">”</span> </div>
|
8
|
+
</div>
|
9
|
+
<% else %>
|
10
|
+
<div class="text-gray-600 text-2xl">
|
11
|
+
Browse or search
|
12
|
+
<% if (article_count = Dokno::Article.count) > 1 %>
|
13
|
+
<%= number_with_delimiter(article_count, delimiter: ',') %> articles in
|
14
|
+
<% end %>
|
15
|
+
the
|
16
|
+
</div>
|
17
|
+
<div class="text-gray-800 text-4xl leading-tight uppercase"><%= Dokno.config.app_name %> knowledgebase</div>
|
18
|
+
<% end %>
|
19
|
+
</div>
|
20
|
+
<% end %>
|
21
|
+
|
1
22
|
<% if @category&.parent.present? %>
|
2
23
|
<div class="text-gray-500 mb-5">
|
3
|
-
<div
|
24
|
+
<div><span class="text-gray-500 mr-1">Under</span> <%= @category.breadcrumb(search_term: @search_term, order: @order, hide_self: true) %></div>
|
4
25
|
</div>
|
5
26
|
<% end %>
|
6
27
|
|
@@ -51,12 +72,6 @@
|
|
51
72
|
</div>
|
52
73
|
</div>
|
53
74
|
<div class="dokno-article-summary w-2/3 <% unless article.active %>text-gray-500 italic<% end %>">
|
54
|
-
<% unless article.active %>
|
55
|
-
<div class="bg-yellow-700 p-4 mb-5 rounded text-lg border-t-4 border-yellow-900 text-white font-base not-italic">
|
56
|
-
<i data-feather="info" class="inline-block"></i> This article is no longer active
|
57
|
-
</div>
|
58
|
-
<% end %>
|
59
|
-
|
60
75
|
<div class="dokno-article-content-highlight mb-2"><%= article.summary.presence || 'No summary provided' %></div>
|
61
76
|
|
62
77
|
<div class="text-base text-gray-500">
|
@@ -75,6 +90,12 @@
|
|
75
90
|
</div>
|
76
91
|
<% end %>
|
77
92
|
|
93
|
+
<% if !article.active %>
|
94
|
+
<div class="bg-yellow-700 p-4 mt-5 rounded text-lg border-t-4 border-yellow-900 text-white font-base not-italic">
|
95
|
+
<i data-feather="info" class="inline-block mr-1"></i> This article is no longer active
|
96
|
+
</div>
|
97
|
+
<% end %>
|
98
|
+
|
78
99
|
<% if article.up_for_review? %>
|
79
100
|
<div class="bg-<%= article.review_due_days.negative? ? 'red' : 'gray' %>-800 p-4 mt-5 rounded text-lg border-t-4 border-<%= article.review_due_days.negative? ? 'red' : 'gray' %>-900 text-white font-base not-italic">
|
80
101
|
<i data-feather="bell" class="inline-block mr-1"></i> <%= article.review_due_days_string %>
|
@@ -16,6 +16,7 @@
|
|
16
16
|
</head>
|
17
17
|
<body class="bg-white font-sans font-light subpixel-antialiased text-lg">
|
18
18
|
|
19
|
+
|
19
20
|
<nav id="dokno-nav-container" class="bg-blue-900 text-white py-10 px-16 text-lg">
|
20
21
|
<div class="flex items-center m-auto w-full max-w-screen-xl">
|
21
22
|
<div class="w-1/3">
|
@@ -42,6 +43,7 @@
|
|
42
43
|
</div>
|
43
44
|
</nav>
|
44
45
|
|
46
|
+
|
45
47
|
<% flash.each do |type, msg| %>
|
46
48
|
<div class="bg-<%= type %>-800 text-lg text-white font-base py-10 px-16 text-center">
|
47
49
|
<i data-feather="<%= (type == 'green' ? 'smile' : (type == 'yellow' ? 'info' : (type == 'gray' ? 'bell' : 'frown'))) %>" class="inline mr-1"></i>
|
@@ -49,33 +51,14 @@
|
|
49
51
|
</div>
|
50
52
|
<% end %>
|
51
53
|
|
52
|
-
<main class="py-10 px-16">
|
53
|
-
<% if !current_page?(up_for_review_path) && @article.blank? && (@category.blank? || @search_term.present?) %>
|
54
|
-
<div class="text-center m-auto mb-10 w-full max-w-screen-xl">
|
55
|
-
<% if @search_term.present? %>
|
56
|
-
<div class="text-gray-600 text-2xl uppercase">
|
57
|
-
<%= @total_records.positive? ? "#{@total_records} #{'article'.pluralize(@total_records)}" : 'No articles' %>
|
58
|
-
found containing the search term
|
59
|
-
<div class="text-4xl leading-tight"><span class="font-serif">“</span> <%= @search_term %> <span class="font-serif">”</span> </div>
|
60
|
-
</div>
|
61
|
-
<% else %>
|
62
|
-
<div class="text-gray-600 text-2xl">
|
63
|
-
Browse or search
|
64
|
-
<% if (article_count = Dokno::Article.count) > 1 %>
|
65
|
-
<%= number_with_delimiter(article_count, delimiter: ',') %> articles in
|
66
|
-
<% end %>
|
67
|
-
the
|
68
|
-
</div>
|
69
|
-
<div class="text-gray-800 text-4xl leading-tight uppercase"><%= Dokno.config.app_name %> knowledgebase</div>
|
70
|
-
<% end %>
|
71
|
-
</div>
|
72
|
-
<% end %>
|
73
54
|
|
55
|
+
<main class="py-10 px-16">
|
74
56
|
<div id="dokno-content-container" class="w-full max-w-screen-xl m-auto print-this">
|
75
57
|
<%= yield %>
|
76
58
|
</div>
|
77
59
|
</main>
|
78
60
|
|
61
|
+
|
79
62
|
<footer id="dokno-footer-container">
|
80
63
|
<% if @article.present? && action_name == 'show' %>
|
81
64
|
<div id="dokno-article-log-container" data-category-id="<%= @category&.id %>" data-article-id="<%= @article.id %>">
|
@@ -83,7 +66,7 @@
|
|
83
66
|
</div>
|
84
67
|
<% end %>
|
85
68
|
|
86
|
-
<% if
|
69
|
+
<% if @show_up_for_review && (up_for_review_count = Dokno::Article.up_for_review.count).positive? %>
|
87
70
|
<div id="dokno-articles-up-for-review-container">
|
88
71
|
<div class="py-10 px-16 bg-gray-900">
|
89
72
|
<div class="w-full max-w-screen-xl m-auto">
|
@@ -119,7 +102,7 @@
|
|
119
102
|
<%= javascript_include_tag 'init' %>
|
120
103
|
|
121
104
|
<% if @search_term.present? %>
|
122
|
-
<script>highlightTerm(['<%= j @search_term.strip %>'], 'dokno-article-content-highlight')
|
105
|
+
<script> highlightTerm(['<%= j @search_term.strip %>'], 'dokno-article-content-highlight'); </script>
|
123
106
|
<% end %>
|
124
107
|
</body>
|
125
108
|
</html>
|
@@ -11,6 +11,11 @@
|
|
11
11
|
</optgroup>
|
12
12
|
</select>
|
13
13
|
</div>
|
14
|
+
|
15
|
+
<script>
|
16
|
+
// Client-side select of cached select list
|
17
|
+
selectOption('category', '<%= j @category&.code %>');
|
18
|
+
</script>
|
14
19
|
<% end %>
|
15
20
|
|
16
21
|
<% if Dokno::Article.exists? %>
|
@@ -22,8 +27,4 @@
|
|
22
27
|
<% end %>
|
23
28
|
</div>
|
24
29
|
|
25
|
-
<script>
|
26
|
-
// Client-side select of cached select list
|
27
|
-
selectOption('category', '<%= j @category&.code %>');
|
28
|
-
enableSearchHotkey();
|
29
|
-
</script>
|
30
|
+
<script> enableSearchHotkey(); </script>
|
data/lib/dokno/engine.rb
CHANGED
data/lib/dokno/version.rb
CHANGED
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
|
-
autorequire:
|
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
|
@@ -300,7 +300,7 @@ licenses:
|
|
300
300
|
metadata:
|
301
301
|
bug_tracker_uri: https://github.com/cpayne624/dokno/issues
|
302
302
|
changelog_uri: https://github.com/cpayne624/dokno/blob/master/CHANGELOG.md
|
303
|
-
post_install_message:
|
303
|
+
post_install_message:
|
304
304
|
rdoc_options: []
|
305
305
|
require_paths:
|
306
306
|
- lib
|
@@ -315,8 +315,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
315
315
|
- !ruby/object:Gem::Version
|
316
316
|
version: '0'
|
317
317
|
requirements: []
|
318
|
-
rubygems_version: 3.
|
319
|
-
signing_key:
|
318
|
+
rubygems_version: 3.1.4
|
319
|
+
signing_key:
|
320
320
|
specification_version: 4
|
321
321
|
summary: Dokno (dough-no) is a lightweight mountable Rails Engine for storing and
|
322
322
|
managing your app's domain knowledge.
|