card-mod-bookmarks 0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/README.md +68 -0
- data/lib/card/bookmark.rb +66 -0
- data/set/abstract/01_bookmarker.rb +1 -0
- data/set/abstract/accountable.rb +3 -0
- data/set/abstract/bookmarkable.rb +42 -0
- data/set/abstract/title_with_bookmark.haml +3 -0
- data/set/right/account.rb +6 -0
- data/set/right/bookmarkers/toggle.haml +5 -0
- data/set/right/bookmarkers.rb +17 -0
- data/set/right/bookmarks.rb +15 -0
- data/set/self/anonymous.rb +7 -0
- data/set/self/bookmarked.rb +20 -0
- metadata +86 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 1c6a2b131d1140a546ee8c12b5b947deba44b681666eccbb8c7c4f46c927ba39
|
4
|
+
data.tar.gz: fe66a0b037a7257d68f31bdeb828c675541ab12136e53926f8174c49f86c6979
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 549367ca28dba27ad03eccdd327cc7623403bb54a3992c527205cac4f45e89e27dd9a6236e8159d2d2bb27bb546a5cc91a99e429cc723cc2a86b4811049a3296
|
7
|
+
data.tar.gz: b4988234f764262a848cb8eee1fed09d346343ce9213575500784b8f01a7035e87eece0b03a2942e0107c28b1545bd5ec2732bb7c22837f7b14886b4092c3144
|
data/README.md
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
<!--
|
2
|
+
# @title README - mod: bookmarks
|
3
|
+
-->
|
4
|
+
|
5
|
+
# Bookmarks mod
|
6
|
+
|
7
|
+
This mod provides functionality for:
|
8
|
+
|
9
|
+
- bookmarking / unbookmarking cards with a single click
|
10
|
+
- db storage of those bookmarks for signed-in users
|
11
|
+
- session storage for non-signed in users
|
12
|
+
- saving session bookmarks in db when users create accounts
|
13
|
+
- navigating one's bookmarked content
|
14
|
+
- letting users "follow" cards they have bookmarked
|
15
|
+
|
16
|
+
## Sets modified
|
17
|
+
|
18
|
+
### Abstract::Bookmarkable
|
19
|
+
|
20
|
+
By including this set (via `include_set Abstract::Bookmarkable`), a set is made
|
21
|
+
bookmarkable. It has a `:toggle_bookmark` event that can be triggered using the
|
22
|
+
standard trigger API. Eg `card.update! trigger: :toggle_bookmark`.
|
23
|
+
|
24
|
+
It also provides a `#currently_bookmarked?` method, as well as the following
|
25
|
+
views:
|
26
|
+
|
27
|
+
- :bookmark - shows the toggleable bookmark icon and the number of bookmarkers
|
28
|
+
- :title_with_bookmark - prepends the bookmark view to a title.
|
29
|
+
- :box_top - uses :title_with_bookmark in boxes
|
30
|
+
- :bar_left - uses :title_with_bookmark in bars
|
31
|
+
|
32
|
+
### Abstract::Bookmarker
|
33
|
+
|
34
|
+
A bookmarker is a user that bookmarks. Any set that includes this one will be
|
35
|
+
able to bookmark other sets.
|
36
|
+
|
37
|
+
### Abstract::Accountable
|
38
|
+
|
39
|
+
Extended to include `Abstract::Bookmarker`. Because most user sets already
|
40
|
+
include `Abstract::Accountable`, monkeys will seldom need to
|
41
|
+
include `Abstract::Bookmarker` explicitly.
|
42
|
+
|
43
|
+
### Right::Account (Cards that end in +*account)
|
44
|
+
|
45
|
+
Extended with `:save_session_bookmarks` event so that session bookmarks can be
|
46
|
+
saved when an account is created.
|
47
|
+
|
48
|
+
### Right::Bookmarkers (Cards that end in +bookmarkers)
|
49
|
+
|
50
|
+
Searches that handle counting number of bookmarkers that have bookmarked a given
|
51
|
+
card.
|
52
|
+
|
53
|
+
### Right::Bookmarks (Cards that end in +bookmarks)
|
54
|
+
|
55
|
+
These are the cards that actually store the bookmarks. For example, if `Joe
|
56
|
+
User` bookmarks the card named `Pineapple`, then `Joe User+bookmarks` will
|
57
|
+
be a list of cards that contains the item `Pineapple`
|
58
|
+
|
59
|
+
### Self::Anonymous (the card "Anonymous")
|
60
|
+
|
61
|
+
When a user is not signed in, the "Anonymous" card acts as their user card.
|
62
|
+
This mod extends that card to allow for anonymous bookmarks to be stored in
|
63
|
+
the session.
|
64
|
+
|
65
|
+
### Self::Bookmarked (the card "Bookmarked")
|
66
|
+
|
67
|
+
This card is created as a follow option, making it possible to follow cards
|
68
|
+
that you have bookmarked.
|
@@ -0,0 +1,66 @@
|
|
1
|
+
class Card
|
2
|
+
module Bookmark
|
3
|
+
class << self
|
4
|
+
CURRENT_IDS_KEY = "BM-current_ids".freeze
|
5
|
+
CURRENT_BOOKMARKS_KEY = "BM-current_bookmarks".freeze
|
6
|
+
|
7
|
+
def ok?
|
8
|
+
Auth.current.respond_to?(:bookmarks_card)
|
9
|
+
end
|
10
|
+
|
11
|
+
# @return Hash key is type_id, value is list of ids
|
12
|
+
def current_bookmarks
|
13
|
+
cache.fetch CURRENT_BOOKMARKS_KEY do
|
14
|
+
ok? ? bookmark_hash_for_list_card(current_list_card) : {}
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# @param list_card [Card] +bookmarks card for (eg) user
|
19
|
+
# @return [Hash]. keys are type_ids, values are list of bookmarked card ids
|
20
|
+
def bookmark_hash_for_list_card list_card
|
21
|
+
list_card.item_cards.each_with_object({}) do |item, hash|
|
22
|
+
hash[item.type_id] ||= []
|
23
|
+
hash[item.type_id] << item.id
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def current_list_card
|
28
|
+
Auth.current.bookmarks_card if ok?
|
29
|
+
end
|
30
|
+
|
31
|
+
def current_ids
|
32
|
+
cache.fetch CURRENT_IDS_KEY do # MOVE to session?
|
33
|
+
ok? ? current_list_card.item_ids : []
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def bookmark_hash
|
38
|
+
ok? ? yield : {}
|
39
|
+
end
|
40
|
+
|
41
|
+
def id_restriction bookmarked=true
|
42
|
+
if current_ids.empty?
|
43
|
+
yield [] if bookmarked
|
44
|
+
else
|
45
|
+
yield([(bookmarked ? "in" : "not in")] + current_ids)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def cache
|
50
|
+
Card.cache.soft
|
51
|
+
end
|
52
|
+
|
53
|
+
def clear
|
54
|
+
cache.delete CURRENT_IDS_KEY
|
55
|
+
cache.delete CURRENT_BOOKMARKS_KEY
|
56
|
+
end
|
57
|
+
|
58
|
+
def add_sort_join rel, join_field
|
59
|
+
rel.joins(
|
60
|
+
"LEFT JOIN counts cts " \
|
61
|
+
"ON #{join_field} = cts.left_id AND cts.right_id = #{Card::BookmarkersID}"
|
62
|
+
)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
card_accessor :bookmarks, type: PointerID
|
@@ -0,0 +1,42 @@
|
|
1
|
+
card_accessor :bookmarkers, type: :search_type
|
2
|
+
|
3
|
+
event :toggle_bookmark, :prepare_to_validate, on: :save, trigger: :required do
|
4
|
+
toggle_bookmarks_item
|
5
|
+
list = Card::Bookmark.current_list_card
|
6
|
+
if Auth.signed_in?
|
7
|
+
list.save!
|
8
|
+
else
|
9
|
+
# when using save!, session card was getting saved to db
|
10
|
+
list.store_in_session
|
11
|
+
abort :triumph
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def currently_bookmarked?
|
16
|
+
Card::Bookmark.current_ids.include? id
|
17
|
+
end
|
18
|
+
|
19
|
+
format :html do
|
20
|
+
view :bookmark, wrap: :slot do
|
21
|
+
link_to_view :bookmark, field_nest(:bookmarkers, view: :toggle),
|
22
|
+
path: { action: :update, card: { trigger: :toggle_bookmark } }
|
23
|
+
end
|
24
|
+
|
25
|
+
view :title_with_bookmark, template: :haml
|
26
|
+
|
27
|
+
view :box_top do
|
28
|
+
render :title_with_bookmark
|
29
|
+
end
|
30
|
+
|
31
|
+
view :bar_left do
|
32
|
+
render :title_with_bookmark
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def toggle_bookmarks_item
|
39
|
+
action = currently_bookmarked? ? :drop : :add
|
40
|
+
Card::Bookmark.current_list_card.send "#{action}_item", name
|
41
|
+
Card::Bookmark.clear
|
42
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# cache # of users who have bookmarked this metric/topic/whatever(=left)
|
2
|
+
include_set Abstract::ListRefCachedCount,
|
3
|
+
type_to_count: :user,
|
4
|
+
list_field: :bookmarks,
|
5
|
+
count_trait: :bookmarkers
|
6
|
+
|
7
|
+
def active?
|
8
|
+
left&.currently_bookmarked?
|
9
|
+
end
|
10
|
+
|
11
|
+
format :html do
|
12
|
+
view :toggle, cache: :never, template: :haml
|
13
|
+
|
14
|
+
def bookmark_status_class
|
15
|
+
card.active? ? "active-bookmark" : "inactive-bookmark"
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
include_set Abstract::FollowOption
|
2
|
+
|
3
|
+
restrictive_follow_opts position: 3
|
4
|
+
|
5
|
+
follower_candidate_ids do |card|
|
6
|
+
Card.search({ right_plus: [:bookmarks, { refer_to: card.name }], return: :id },
|
7
|
+
"bookmarked follower candidate ids for #{card.name}")
|
8
|
+
end
|
9
|
+
|
10
|
+
def title
|
11
|
+
'Following content you bookmarked'
|
12
|
+
end
|
13
|
+
|
14
|
+
def label
|
15
|
+
'follow if I bookmarked'
|
16
|
+
end
|
17
|
+
|
18
|
+
def description set_card
|
19
|
+
"#{set_card.follow_label} I bookmarked"
|
20
|
+
end
|
metadata
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: card-mod-bookmarks
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '0.1'
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Philipp Kühl
|
8
|
+
- Ethan McCutchen
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2021-10-26 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: card
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ">="
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '0'
|
21
|
+
type: :runtime
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '0'
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: card-mod-counts
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ">="
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '0'
|
35
|
+
type: :runtime
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
description: WikiRate.org is driving development on this to-be-generalized decko bookmarking
|
43
|
+
tool.
|
44
|
+
email:
|
45
|
+
- info@decko.org
|
46
|
+
executables: []
|
47
|
+
extensions: []
|
48
|
+
extra_rdoc_files: []
|
49
|
+
files:
|
50
|
+
- README.md
|
51
|
+
- lib/card/bookmark.rb
|
52
|
+
- set/abstract/01_bookmarker.rb
|
53
|
+
- set/abstract/accountable.rb
|
54
|
+
- set/abstract/bookmarkable.rb
|
55
|
+
- set/abstract/title_with_bookmark.haml
|
56
|
+
- set/right/account.rb
|
57
|
+
- set/right/bookmarkers.rb
|
58
|
+
- set/right/bookmarkers/toggle.haml
|
59
|
+
- set/right/bookmarks.rb
|
60
|
+
- set/self/anonymous.rb
|
61
|
+
- set/self/bookmarked.rb
|
62
|
+
homepage: http://decko.org
|
63
|
+
licenses:
|
64
|
+
- GPL-3.0
|
65
|
+
metadata:
|
66
|
+
card-mod: bookmarks
|
67
|
+
post_install_message:
|
68
|
+
rdoc_options: []
|
69
|
+
require_paths:
|
70
|
+
- lib
|
71
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '2.5'
|
76
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - ">="
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '0'
|
81
|
+
requirements: []
|
82
|
+
rubygems_version: 3.2.28
|
83
|
+
signing_key:
|
84
|
+
specification_version: 4
|
85
|
+
summary: bookmarking on decko cards
|
86
|
+
test_files: []
|