sharkey-web 3.3.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/.gitignore +24 -0
- data/Gemfile +4 -0
- data/LICENSE.md +19 -0
- data/README.md +188 -0
- data/Rakefile +8 -0
- data/bin/sharkey-web +9 -0
- data/config.ru +3 -0
- data/lib/sharkey.rb +12 -0
- data/lib/sharkey/app.rb +526 -0
- data/lib/sharkey/importerexporter.rb +79 -0
- data/lib/sharkey/models.rb +295 -0
- data/lib/sharkey/public/css/loading.gif +0 -0
- data/lib/sharkey/public/css/magicsuggest.css +232 -0
- data/lib/sharkey/public/css/nprogress.css +74 -0
- data/lib/sharkey/public/css/styles.css +263 -0
- data/lib/sharkey/public/css/ui.fancytree.css +545 -0
- data/lib/sharkey/public/data/sentences.txt +5 -0
- data/lib/sharkey/public/fonts/Quadrata.eot +0 -0
- data/lib/sharkey/public/fonts/Quadrata.svg +613 -0
- data/lib/sharkey/public/fonts/Quadrata.ttf +0 -0
- data/lib/sharkey/public/fonts/Quadrata.woff +0 -0
- data/lib/sharkey/public/fonts/Quadrata.zip +0 -0
- data/lib/sharkey/public/images/loader.gif +0 -0
- data/lib/sharkey/public/images/sharkey-logo.png +0 -0
- data/lib/sharkey/public/images/sharkey.png +0 -0
- data/lib/sharkey/public/js/ajaxmanager.js +67 -0
- data/lib/sharkey/public/js/keybindings.js +92 -0
- data/lib/sharkey/public/js/lib/bootstrap.min.js +6 -0
- data/lib/sharkey/public/js/lib/jquery-1.9.1.min.js +5 -0
- data/lib/sharkey/public/js/lib/jquery-ui.js +16150 -0
- data/lib/sharkey/public/js/lib/jquery.bootstrap-autohidingnavbar.js +213 -0
- data/lib/sharkey/public/js/lib/jquery.fancytree-all.js +6424 -0
- data/lib/sharkey/public/js/lib/jquery.tagcloud.js +92 -0
- data/lib/sharkey/public/js/lib/magicsuggest.js +1468 -0
- data/lib/sharkey/public/js/lib/mousetrap.min.js +9 -0
- data/lib/sharkey/public/js/lib/nprogress.js +476 -0
- data/lib/sharkey/public/js/page-add-link-autofill.js +102 -0
- data/lib/sharkey/public/js/page-add-link.js +156 -0
- data/lib/sharkey/public/js/page-categories.js +348 -0
- data/lib/sharkey/public/js/page-edit-link.js +103 -0
- data/lib/sharkey/public/js/page-links.js +54 -0
- data/lib/sharkey/public/js/page-settings.js +93 -0
- data/lib/sharkey/public/js/page-tagcloud.js +35 -0
- data/lib/sharkey/public/js/page-tags.js +287 -0
- data/lib/sharkey/public/js/scripts.js +147 -0
- data/lib/sharkey/public/themes/amelia/style.css +7 -0
- data/lib/sharkey/public/themes/bootstrap/style.css +5785 -0
- data/lib/sharkey/public/themes/cerulean/style.css +7 -0
- data/lib/sharkey/public/themes/cosmo/style.css +7 -0
- data/lib/sharkey/public/themes/cyborg/style.css +7 -0
- data/lib/sharkey/public/themes/darkly/style.css +7 -0
- data/lib/sharkey/public/themes/facebook-like/README.md +6 -0
- data/lib/sharkey/public/themes/facebook-like/style.css +6085 -0
- data/lib/sharkey/public/themes/flatly/style.css +7 -0
- data/lib/sharkey/public/themes/fonts/glyphicons-halflings-regular.eot +0 -0
- data/lib/sharkey/public/themes/fonts/glyphicons-halflings-regular.svg +229 -0
- data/lib/sharkey/public/themes/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/lib/sharkey/public/themes/fonts/glyphicons-halflings-regular.woff +0 -0
- data/lib/sharkey/public/themes/holo-like/README.md +5 -0
- data/lib/sharkey/public/themes/holo-like/style.css +5997 -0
- data/lib/sharkey/public/themes/journal/style.css +7 -0
- data/lib/sharkey/public/themes/lumen/style.css +7 -0
- data/lib/sharkey/public/themes/readable/style.css +7 -0
- data/lib/sharkey/public/themes/simplex/style.css +7 -0
- data/lib/sharkey/public/themes/slate/style.css +7 -0
- data/lib/sharkey/public/themes/spacelab/style.css +7 -0
- data/lib/sharkey/public/themes/superhero/style.css +7 -0
- data/lib/sharkey/public/themes/united/style.css +7 -0
- data/lib/sharkey/public/themes/yeti/style.css +7 -0
- data/lib/sharkey/setting.rb +74 -0
- data/lib/sharkey/version.rb +5 -0
- data/lib/sharkey/views/404.slim +4 -0
- data/lib/sharkey/views/about.slim +7 -0
- data/lib/sharkey/views/add_link.slim +157 -0
- data/lib/sharkey/views/categories.slim +101 -0
- data/lib/sharkey/views/category.slim +22 -0
- data/lib/sharkey/views/centered.slim +49 -0
- data/lib/sharkey/views/dashboard.slim +107 -0
- data/lib/sharkey/views/dashboard_index.slim +26 -0
- data/lib/sharkey/views/edit_link.slim +121 -0
- data/lib/sharkey/views/help.slim +74 -0
- data/lib/sharkey/views/keybindings.slim +58 -0
- data/lib/sharkey/views/link.slim +30 -0
- data/lib/sharkey/views/links.slim +22 -0
- data/lib/sharkey/views/navbar.slim +68 -0
- data/lib/sharkey/views/settings.slim +74 -0
- data/lib/sharkey/views/settings_index.slim +220 -0
- data/lib/sharkey/views/single_category.slim +37 -0
- data/lib/sharkey/views/single_link.slim +95 -0
- data/lib/sharkey/views/single_tag.slim +33 -0
- data/lib/sharkey/views/tag.slim +22 -0
- data/lib/sharkey/views/tagcloud.slim +54 -0
- data/lib/sharkey/views/tags.slim +99 -0
- data/sharkey-web.gemspec +44 -0
- metadata +324 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/ Layout for simple, centered information
|
|
2
|
+
doctype html
|
|
3
|
+
html
|
|
4
|
+
head
|
|
5
|
+
meta charset="utf-8"
|
|
6
|
+
title Sharkey
|
|
7
|
+
|
|
8
|
+
/ Bootstrap
|
|
9
|
+
(Poor Man's Theme Support)
|
|
10
|
+
link[
|
|
11
|
+
rel="stylesheet" media="screen, projection"
|
|
12
|
+
href="/themes/#{Sharkey::Setting['theme']}/style.css"
|
|
13
|
+
]
|
|
14
|
+
|
|
15
|
+
/ Misc. Styles
|
|
16
|
+
- if Sharkey::Setting['loading_bar'] == 'true'
|
|
17
|
+
link rel="stylesheet" href="/css/nprogress.css"
|
|
18
|
+
|
|
19
|
+
link rel="stylesheet" href="/css/magicsuggest.css"
|
|
20
|
+
|
|
21
|
+
/ Custom Styles
|
|
22
|
+
link rel="stylesheet" media="screen, projection" href="/css/styles.css"
|
|
23
|
+
|
|
24
|
+
/[if lt IE 9]
|
|
25
|
+
script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"
|
|
26
|
+
|
|
27
|
+
/ jQuery
|
|
28
|
+
script src="/js/lib/jquery-1.9.1.min.js"
|
|
29
|
+
script src="/js/lib/jquery-ui.js"
|
|
30
|
+
|
|
31
|
+
/ Bootstrap
|
|
32
|
+
script src="/js/lib/bootstrap.min.js"
|
|
33
|
+
|
|
34
|
+
/ Misc. Scripts
|
|
35
|
+
- if Sharkey::Setting['loading_bar'] == 'true'
|
|
36
|
+
script src="/js/lib/nprogress.js"
|
|
37
|
+
|
|
38
|
+
/ Custom Scripts
|
|
39
|
+
script src="/js/scripts.js"
|
|
40
|
+
|
|
41
|
+
body
|
|
42
|
+
== slim(:navbar, locals: { page: page })
|
|
43
|
+
|
|
44
|
+
.container-fluid
|
|
45
|
+
.row
|
|
46
|
+
/ The actual content
|
|
47
|
+
.col-md-8.col-sm-offset-2.main
|
|
48
|
+
== yield
|
|
49
|
+
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/
|
|
2
|
+
Layout for the main dashboard
|
|
3
|
+
|
|
4
|
+
doctype html
|
|
5
|
+
html
|
|
6
|
+
head
|
|
7
|
+
meta charset="utf-8"
|
|
8
|
+
|
|
9
|
+
/!
|
|
10
|
+
.
|
|
11
|
+
mmm mmm m mm m m mmmmm mmm m mm
|
|
12
|
+
# ' ' # #' ' # # # # # ' # #' #
|
|
13
|
+
'''m m'''# # # # # # # m'''# # #
|
|
14
|
+
'mmm' 'mm'# # 'mm'# # # # 'mm'# # #
|
|
15
|
+
sharkey link: the best thing since Delicious
|
|
16
|
+
.
|
|
17
|
+
|
|
18
|
+
title Sharkey
|
|
19
|
+
|
|
20
|
+
/ Bootstrap
|
|
21
|
+
(Poor Man's Theme Support)
|
|
22
|
+
link[
|
|
23
|
+
rel="stylesheet" media="screen, projection"
|
|
24
|
+
href="/themes/#{Sharkey::Setting['theme']}/style.css"
|
|
25
|
+
]
|
|
26
|
+
|
|
27
|
+
/ Misc. Styles
|
|
28
|
+
- if Sharkey::Setting['loading_bar'] == 'true'
|
|
29
|
+
link rel="stylesheet" href="/css/nprogress.css"
|
|
30
|
+
|
|
31
|
+
link rel="stylesheet" href="/css/magicsuggest.css"
|
|
32
|
+
link rel="stylesheet" href="/css/ui.fancytree.css"
|
|
33
|
+
|
|
34
|
+
/ Custom Styles
|
|
35
|
+
link rel="stylesheet" media="screen, projection" href="/css/styles.css"
|
|
36
|
+
|
|
37
|
+
/[if lt IE 9]
|
|
38
|
+
script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"
|
|
39
|
+
|
|
40
|
+
/ jQuery
|
|
41
|
+
script src="/js/lib/jquery-1.9.1.min.js"
|
|
42
|
+
script src="/js/lib/jquery-ui.js"
|
|
43
|
+
|
|
44
|
+
/ Bootstrap
|
|
45
|
+
script src="/js/lib/bootstrap.min.js"
|
|
46
|
+
|
|
47
|
+
/ Misc. Scripts
|
|
48
|
+
- if Sharkey::Setting['loading_bar'] == 'true'
|
|
49
|
+
script src="/js/lib/nprogress.js"
|
|
50
|
+
|
|
51
|
+
/ Custom Scripts
|
|
52
|
+
script src="/js/scripts.js"
|
|
53
|
+
|
|
54
|
+
body
|
|
55
|
+
== slim(:navbar, locals: { page: page })
|
|
56
|
+
|
|
57
|
+
.container-fluid
|
|
58
|
+
.row
|
|
59
|
+
|
|
60
|
+
/ The sidebar
|
|
61
|
+
.col-sm-3.col-md-2.sidebar#the-sidebar
|
|
62
|
+
ul.nav.nav-sidebar
|
|
63
|
+
li class="#{ if page == 'home' then 'active' end }"
|
|
64
|
+
a href="/"
|
|
65
|
+
span> class="glyphicon glyphicon-tasks"
|
|
66
|
+
| Dashboard
|
|
67
|
+
|
|
68
|
+
ul.nav.nav-sidebar
|
|
69
|
+
li class="#{ if page == 'links' then 'active' end }"
|
|
70
|
+
a#keybind-links href="/links"
|
|
71
|
+
span> class="glyphicon glyphicon-link"
|
|
72
|
+
| Links
|
|
73
|
+
span.badge.pull-right = Sharkey::Link.all.size
|
|
74
|
+
li class="#{ if page == 'favorites' then 'active' end }"
|
|
75
|
+
a#keybind-favorites href="/favorites"
|
|
76
|
+
span> class="glyphicon glyphicon-star"
|
|
77
|
+
| Favorites
|
|
78
|
+
span.badge.pull-right = Sharkey::Link.all(favorite: true).size
|
|
79
|
+
|
|
80
|
+
li
|
|
81
|
+
a href="/random"
|
|
82
|
+
span> class="glyphicon glyphicon-random"
|
|
83
|
+
| Random Link
|
|
84
|
+
|
|
85
|
+
ul.nav.nav-sidebar
|
|
86
|
+
li class="#{ if page == 'tags' then 'active' end }"
|
|
87
|
+
a#keybind-tags href="/tags"
|
|
88
|
+
span> class="glyphicon glyphicon-tags"
|
|
89
|
+
| Tags
|
|
90
|
+
span.badge.pull-right = Sharkey::Tag.all.size
|
|
91
|
+
|
|
92
|
+
li class="#{ if page == 'tagcloud' then 'active' end }"
|
|
93
|
+
a#keybind-tags href="/tagcloud"
|
|
94
|
+
span> class="glyphicon glyphicon-cloud"
|
|
95
|
+
| Tag Cloud
|
|
96
|
+
|
|
97
|
+
ul.nav.nav-sidebar
|
|
98
|
+
li class="#{ if page == 'categories' then 'active' end }"
|
|
99
|
+
a#keybind-categories href="/categories"
|
|
100
|
+
span> class="glyphicon glyphicon-book"
|
|
101
|
+
| Categories
|
|
102
|
+
span.badge.pull-right = Sharkey::Category.all.size
|
|
103
|
+
|
|
104
|
+
/ The actual content
|
|
105
|
+
.col-sm-9.col-sm-offset-3.col-md-10.col-md-offset-2.main
|
|
106
|
+
== yield
|
|
107
|
+
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/
|
|
2
|
+
The main Page
|
|
3
|
+
|
|
4
|
+
h1.page-header Dashboard
|
|
5
|
+
|
|
6
|
+
p Welcome to Sharkey Link!
|
|
7
|
+
|
|
8
|
+
p You have...
|
|
9
|
+
|
|
10
|
+
ul
|
|
11
|
+
- if Sharkey::Link.all.size == 0
|
|
12
|
+
li no links;
|
|
13
|
+
- else
|
|
14
|
+
li #{Sharkey::Link.all.size} links;
|
|
15
|
+
|
|
16
|
+
- if Sharkey::Tag.all.size == 0
|
|
17
|
+
li no tags;
|
|
18
|
+
- else
|
|
19
|
+
li #{Sharkey::Tag.all.size} tags;
|
|
20
|
+
|
|
21
|
+
h2.sub-header Awesome!
|
|
22
|
+
|
|
23
|
+
p Sweet, beibeh!
|
|
24
|
+
|
|
25
|
+
p [insert awesome statistics here]
|
|
26
|
+
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/ The 'Edit Button' dialog
|
|
2
|
+
It will only get shown when requested by a button
|
|
3
|
+
Expects a local variable `link` with a.. link.
|
|
4
|
+
|
|
5
|
+
.modal.fade.input-link#edit-link tabindex="-1" role="dialog" aria-labelledby="input-link-label" aria-hidden="true"
|
|
6
|
+
.modal-dialog
|
|
7
|
+
.modal-content
|
|
8
|
+
.modal-header
|
|
9
|
+
button.close type="button" data-dismiss="modal" aria-hidden="true"
|
|
10
|
+
| ×
|
|
11
|
+
|
|
12
|
+
h4.modal-title.input-link-label
|
|
13
|
+
| Edit link
|
|
14
|
+
|
|
15
|
+
p.random-sentence
|
|
16
|
+
| ...#{random_sentence}
|
|
17
|
+
|
|
18
|
+
.modal-body
|
|
19
|
+
/ Form that creates a Link
|
|
20
|
+
It's 'action' will get changed by the JavaScript
|
|
21
|
+
to conform to the API like '/update/link/:id'
|
|
22
|
+
form.form-horizontal role="form" action="/update/link" method="POST"
|
|
23
|
+
|
|
24
|
+
.form-group
|
|
25
|
+
label.col-sm-2.control-label for="input-link-url"
|
|
26
|
+
| URL
|
|
27
|
+
.col-sm-10
|
|
28
|
+
input.form-control type="text" id="input-link-url" name="url" placeholder="URL" required="true" autofocus="true"
|
|
29
|
+
|
|
30
|
+
.form-group
|
|
31
|
+
.col-sm-offset-2.col-sm-10
|
|
32
|
+
button.btn.btn-primary type="submit"
|
|
33
|
+
span.glyphicon.glyphicon-flash
|
|
34
|
+
'
|
|
35
|
+
| Edit link
|
|
36
|
+
|
|
37
|
+
.form-group
|
|
38
|
+
label.col-sm-2.control-label for="input-link-title"
|
|
39
|
+
| Title
|
|
40
|
+
.col-sm-10
|
|
41
|
+
input.form-control type="text" id="input-link-title" name="title" placeholder="title"
|
|
42
|
+
|
|
43
|
+
.form-group
|
|
44
|
+
label.col-sm-2.control-label for="input-link-tags"
|
|
45
|
+
| Tags
|
|
46
|
+
.col-sm-10
|
|
47
|
+
input.form-control.tagsinput type="text" id="input-link-tags" name="tags" placeholder="tag (comma-separated)"
|
|
48
|
+
|
|
49
|
+
.form-group
|
|
50
|
+
label.col-sm-2.control-label for="input-links-url"
|
|
51
|
+
| Comments
|
|
52
|
+
.col-sm-10
|
|
53
|
+
textarea.form-control[
|
|
54
|
+
type="textarea"
|
|
55
|
+
id="input-link-comment"
|
|
56
|
+
name="comment"
|
|
57
|
+
placeholder="express yourself"
|
|
58
|
+
]
|
|
59
|
+
|
|
60
|
+
.form-group
|
|
61
|
+
label.col-sm-2.control-label for="input-link-category-one"
|
|
62
|
+
| Category
|
|
63
|
+
.col-sm-10
|
|
64
|
+
select.form-control id="input-link-category-one" name="category" placeholder="Category"
|
|
65
|
+
ruby:
|
|
66
|
+
# This magic function shows all Categories in
|
|
67
|
+
# hierarchical order. Just like:
|
|
68
|
+
#
|
|
69
|
+
# parent
|
|
70
|
+
# - child
|
|
71
|
+
# - other_child
|
|
72
|
+
# - - other_other_child
|
|
73
|
+
# other_parent
|
|
74
|
+
# - another_child
|
|
75
|
+
|
|
76
|
+
def select_options
|
|
77
|
+
$output = "<option value=''>(none)</option>"
|
|
78
|
+
|
|
79
|
+
def recursive_childs(count, category)
|
|
80
|
+
$output << "<option value='#{category.id}'>#{'- ' * count}#{category.name}</option>"
|
|
81
|
+
|
|
82
|
+
category.childs.each do |child|
|
|
83
|
+
recursive_childs(count + 1, child)
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
Sharkey::Category.orphans.each do |orphan|
|
|
88
|
+
recursive_childs(0, orphan)
|
|
89
|
+
end
|
|
90
|
+
return $output
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
== select_options
|
|
94
|
+
|
|
95
|
+
.col-sm-offset-2.col-sm-10
|
|
96
|
+
button.btn.btn-default.new-category
|
|
97
|
+
span> class="glyphicon glyphicon-book"
|
|
98
|
+
| New Category
|
|
99
|
+
|
|
100
|
+
form.form-horizontal.new-category-form role="form" action="/category" method="POST"
|
|
101
|
+
.form-group
|
|
102
|
+
|
|
103
|
+
label.col-sm-2.control-label for="new-category-name"
|
|
104
|
+
| Name
|
|
105
|
+
.col-sm-10
|
|
106
|
+
input.form-control.new-category-name type="text" name="name" placeholder="New category name" required="true" autofocus="true"
|
|
107
|
+
|
|
108
|
+
label.col-sm-2.control-label for="new-category-parent"
|
|
109
|
+
| Parent
|
|
110
|
+
.col-sm-10
|
|
111
|
+
select.form-control.new-category-parent name="parent" placeholder="Parent"
|
|
112
|
+
== select_options
|
|
113
|
+
|
|
114
|
+
button.btn.btn-default.new-category-button type="submit"
|
|
115
|
+
span> class="glyphicon glyphicon-book"
|
|
116
|
+
| Create Category
|
|
117
|
+
|
|
118
|
+
/ If you ever want to add a footer some day,
|
|
119
|
+
just uncomment these two lines
|
|
120
|
+
.modal-footer
|
|
121
|
+
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
h1.page-header
|
|
2
|
+
| Help
|
|
3
|
+
|
|
4
|
+
markdown:
|
|
5
|
+
Welcome to `sharkey` help!
|
|
6
|
+
For info on it's creation and contact, see the _About_ section.
|
|
7
|
+
|
|
8
|
+
h2.sub-header
|
|
9
|
+
| Intro
|
|
10
|
+
|
|
11
|
+
markdown:
|
|
12
|
+
`sharkey` is a cute web-based personal bookmarking service.
|
|
13
|
+
|
|
14
|
+
* **Bookmarking** means it _saves your links_, allows you to _tag them_, arrange
|
|
15
|
+
in _categories_ and, most important of all, _keep track of what you should visit later_.
|
|
16
|
+
* **Personal** means _you control your own data_. Everything is stored on your
|
|
17
|
+
computer and _you can import/export/delete as you please_. It is like the anti-social
|
|
18
|
+
cousin of [Delicious][delicious].
|
|
19
|
+
* **Web-based** means it runs on your browser. _You don't need an internet connection_,
|
|
20
|
+
though! It doesn't mean you access a site to use it - it runs on _your computer_.
|
|
21
|
+
It just happens that I prefer to make sites instead of designing windows and buttons
|
|
22
|
+
and stuff.
|
|
23
|
+
* **Cute** means it has a nice appearance. It comes with _lots of themes_ and you can
|
|
24
|
+
even customize it _with your own themes_ too.
|
|
25
|
+
|
|
26
|
+
h2.sub-header
|
|
27
|
+
| Example
|
|
28
|
+
|
|
29
|
+
markdown:
|
|
30
|
+
If you're unsure on how to start using `sharkey`, here's how I do it.
|
|
31
|
+
|
|
32
|
+
I have lots of tabs opened in my browser. Some of them has sites I want to see later,
|
|
33
|
+
others are just there because... well, I might need them some day.
|
|
34
|
+
|
|
35
|
+
So I start organizing them. I create some tags and categories, placing links
|
|
36
|
+
more or less like the following:
|
|
37
|
+
|
|
38
|
+
table.table.table-hover
|
|
39
|
+
thead
|
|
40
|
+
tr
|
|
41
|
+
th site
|
|
42
|
+
th category
|
|
43
|
+
th tags
|
|
44
|
+
tbody
|
|
45
|
+
tr
|
|
46
|
+
td a youtube video I can't see right now
|
|
47
|
+
td Video > Youtube
|
|
48
|
+
td watch-later
|
|
49
|
+
tr
|
|
50
|
+
td funny images I might link to some friends later
|
|
51
|
+
td Images > Funny
|
|
52
|
+
td link-later
|
|
53
|
+
tr
|
|
54
|
+
td news site I visit regularly
|
|
55
|
+
td News
|
|
56
|
+
td daily
|
|
57
|
+
tr
|
|
58
|
+
td page with important download link
|
|
59
|
+
td Download > Image/Video/Document
|
|
60
|
+
td download-later, important
|
|
61
|
+
tr
|
|
62
|
+
td great online game I recently discovered (and might link to friends later)
|
|
63
|
+
td Game > Online
|
|
64
|
+
td game-later, link-later
|
|
65
|
+
|
|
66
|
+
markdown:
|
|
67
|
+
So, in general, _tags are for quick finding things_ and _categories are
|
|
68
|
+
for organized classifying_.
|
|
69
|
+
|
|
70
|
+
Since `sharkey` has a [Tag Cloud](/tagcloud), it becomes easy to find, say,
|
|
71
|
+
sites I need to visit daily or important things I must see later.
|
|
72
|
+
|
|
73
|
+
And on the [Categories Page](/categories), they're listed like folders on the computer,
|
|
74
|
+
just how Firefox or Chrome displays it's bookmarks.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
|
|
2
|
+
/ Helper that shows the Keybindings
|
|
3
|
+
.modal.fade#keybindings tabindex="-1" role="dialog" aria-labelledby="keybinding-label" aria-hidden="true"
|
|
4
|
+
.modal-dialog
|
|
5
|
+
.modal-content
|
|
6
|
+
.modal-header
|
|
7
|
+
button.close type="button" data-dismiss="modal" aria-hidden="true"
|
|
8
|
+
| ×
|
|
9
|
+
h3.modal-title#input-link-label
|
|
10
|
+
| Key Bindings
|
|
11
|
+
|
|
12
|
+
.modal-body
|
|
13
|
+
|
|
14
|
+
table.table.table-striped.table-hover
|
|
15
|
+
thead
|
|
16
|
+
tr
|
|
17
|
+
th key
|
|
18
|
+
th action
|
|
19
|
+
tbody
|
|
20
|
+
tr
|
|
21
|
+
td
|
|
22
|
+
kbd a
|
|
23
|
+
td Add single Link
|
|
24
|
+
tr
|
|
25
|
+
td
|
|
26
|
+
kbd m
|
|
27
|
+
td Add multiple Links
|
|
28
|
+
tr
|
|
29
|
+
td
|
|
30
|
+
kbd d
|
|
31
|
+
td Go to the Dashboard
|
|
32
|
+
tr
|
|
33
|
+
td
|
|
34
|
+
kbd s
|
|
35
|
+
td Go to Settings
|
|
36
|
+
tr
|
|
37
|
+
td
|
|
38
|
+
kbd h
|
|
39
|
+
td Show Help
|
|
40
|
+
tr
|
|
41
|
+
td
|
|
42
|
+
kbd l
|
|
43
|
+
td Show Links
|
|
44
|
+
tr
|
|
45
|
+
td
|
|
46
|
+
kbd t
|
|
47
|
+
td Show Tags
|
|
48
|
+
tr
|
|
49
|
+
td
|
|
50
|
+
kbd c
|
|
51
|
+
td Show Categories
|
|
52
|
+
tr
|
|
53
|
+
td
|
|
54
|
+
kbd k
|
|
55
|
+
td Show this window
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/
|
|
2
|
+
Layout for a page of a single Link
|
|
3
|
+
|
|
4
|
+
== slim(:navbar, locals: { page: "link" })
|
|
5
|
+
|
|
6
|
+
.col-md.12
|
|
7
|
+
.container
|
|
8
|
+
|
|
9
|
+
- if link.title
|
|
10
|
+
h1 Title: #{link.title}
|
|
11
|
+
h2
|
|
12
|
+
a href="#{link.url}" target="_blank"
|
|
13
|
+
| URL: #{link.url}
|
|
14
|
+
|
|
15
|
+
- else
|
|
16
|
+
h1
|
|
17
|
+
a href="#{link.url}" target="_blank"
|
|
18
|
+
| Title: #{link.url}
|
|
19
|
+
|
|
20
|
+
- if link.tags.empty?
|
|
21
|
+
p
|
|
22
|
+
em No Tags
|
|
23
|
+
|
|
24
|
+
- else
|
|
25
|
+
p Tags:
|
|
26
|
+
|
|
27
|
+
- link.tags.each do |tag|
|
|
28
|
+
a.link-tag href="/tag/#{tag.id}" title="#{tag.name}"
|
|
29
|
+
span.badge = tag.name
|
|
30
|
+
|