nesta-plugin-taggr 0.0.2
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 +4 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +14 -0
- data/README.md +65 -0
- data/Rakefile +2 -0
- data/lib/nesta-plugin-taggr/init.rb +70 -0
- data/lib/nesta-plugin-taggr/version.rb +7 -0
- data/lib/nesta-plugin-taggr.rb +3 -0
- data/nesta-plugin-taggr.gemspec +20 -0
- metadata +53 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 2a335bab9b637d404c7bce30e7d452435c1f866b
|
4
|
+
data.tar.gz: 0b016e8ba799d52327cc2911ad6249c2824bce84
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 26f6cbd6cb8689249424c152219ba222cdbc26dbe49d330cf5ace1377f006b54095ee7ea798b76c1a5382e2b0d1828d8a989ac3a40f0a8198ef85b3b43121e97
|
7
|
+
data.tar.gz: 2a97554587957d03eb19aca297c60894cae0975243faa92916fbefa904c010c843573da01df4cf4cd418bf91d29eba8b097d61a786ce02ed8c4cff7cc2e58f30
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
data/README.md
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
README
|
2
|
+
======
|
3
|
+
|
4
|
+
nesta-plugin-taggr is a plugin for the Nesta CMS to support 'tags' metadata
|
5
|
+
|
6
|
+
Installation
|
7
|
+
------------
|
8
|
+
|
9
|
+
To install it as a gem add `nesta-plugin-taggr` to the `Gemfile` in your Nesta
|
10
|
+
project, and then re-run `bundle`:
|
11
|
+
|
12
|
+
gem 'nesta-plugin-taggr', git: "git://github.com/dansunotori/nesta-plugin-taggr.git"
|
13
|
+
|
14
|
+
Usage examples
|
15
|
+
--------------
|
16
|
+
|
17
|
+
My page has tags!
|
18
|
+
|
19
|
+
- unless @page.tags.empty?
|
20
|
+
- @page.tags.each do |tag|
|
21
|
+
%a.btn.btn-info.btn-xs{ :href => "/tag?q=#{tag}", role: 'button' }= tag
|
22
|
+
|
23
|
+
Tag cloud buttons with Bootstrap. `tag_cloud` returns an array of `[tag, global_count]` pairs sorted by tag alphabetically.
|
24
|
+
|
25
|
+
.panel
|
26
|
+
- min_weight = 0
|
27
|
+
- btn_class = [ 'btn-xs', 'btn-sm', '', 'btn-lg' ]
|
28
|
+
- cloud = tag_cloud.select { |k,v| v > min_weight }
|
29
|
+
- max_weight = cloud.max_by{|k,v| v}[1] - min_weight
|
30
|
+
- cloud.each do |key, value|
|
31
|
+
- weight = ((value * 1.0 / max_weight) * 4).ceil - 1
|
32
|
+
%a{ :class => "tagcloud btn btn-info #{btn_class[weight]}", href: "/tag?q=#{key}", role: 'button' }= key
|
33
|
+
|
34
|
+
Similar articles are sorted by relevance in descending order; similarity is a number of common tags.
|
35
|
+
|
36
|
+
%ul.list-group
|
37
|
+
- @page.similar_articles_by_tags.first(3).each do |article, similarity|
|
38
|
+
%li.list-group-item
|
39
|
+
%a{ :href => article.abspath }= article.heading
|
40
|
+
|
41
|
+
To search for a tag create `/content/pages/tag.haml`. For safety in this example I'm not displaying a tag if it's not found.
|
42
|
+
|
43
|
+
- if (results = pages_by_tag( params[:q] )) && !results.empty?
|
44
|
+
%h1 Pages tagged '#{params[:q]}'
|
45
|
+
%section.articles= article_summaries(results)
|
46
|
+
- else
|
47
|
+
%h1 Oops!
|
48
|
+
%h3 Looks like there's no such tag.
|
49
|
+
|
50
|
+
Configuration
|
51
|
+
-------------
|
52
|
+
|
53
|
+
None so far
|
54
|
+
|
55
|
+
Usage Notes
|
56
|
+
-----------
|
57
|
+
Tags are down-cased.
|
58
|
+
|
59
|
+
If you're using `nesta-plugin-search` you'll need to add your `/tag` page to ignore list in `config.yaml`.
|
60
|
+
|
61
|
+
search_ignore_list:
|
62
|
+
- /
|
63
|
+
- /tag
|
64
|
+
|
65
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
module Nesta
|
2
|
+
# module Plugin
|
3
|
+
# module Taggr
|
4
|
+
# module Helpers
|
5
|
+
# If your plugin needs any helper methods,
|
6
|
+
# add them here...
|
7
|
+
# end
|
8
|
+
# end
|
9
|
+
# end
|
10
|
+
|
11
|
+
class App
|
12
|
+
# helpers Nesta::Plugin::Taggr::Helpers
|
13
|
+
helpers do
|
14
|
+
def tag_cloud
|
15
|
+
$tag_cloud ||= Nesta::Page.tag_cloud
|
16
|
+
end
|
17
|
+
|
18
|
+
def pages_by_tag(tag)
|
19
|
+
Nesta::Page.pages_by_tag(tag)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
class Page
|
25
|
+
@@tag_cloud = {}
|
26
|
+
|
27
|
+
# return hash of tags
|
28
|
+
def self.tag_cloud
|
29
|
+
@@tag_cloud = init_tag_cloud() if @@tag_cloud.nil? || @@tag_cloud.empty?
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.pages_by_tag(tag)
|
33
|
+
Page.find_all.select { |page| page.tags.include?( tag ) }.sort { |x, y| y.date <=> x.date } unless tag.nil? || tag.empty?
|
34
|
+
end
|
35
|
+
|
36
|
+
def tags
|
37
|
+
tag_strings
|
38
|
+
end
|
39
|
+
|
40
|
+
def similar_pages_by_tags
|
41
|
+
similar_pages = Hash.new(0)
|
42
|
+
Page.find_all.each do |page|
|
43
|
+
similar_pages[page] = (self.tags & page.tags).size unless page == self
|
44
|
+
end
|
45
|
+
similar_pages.reject { |page, similarity| similarity == 0 }.sort_by { |page, similarity| similarity }.reverse
|
46
|
+
end
|
47
|
+
|
48
|
+
def similar_articles_by_tags
|
49
|
+
similar_articles = Hash.new(0)
|
50
|
+
Page.find_articles.each do |page|
|
51
|
+
similar_articles[page] = (self.tags & page.tags).size unless page == self
|
52
|
+
end
|
53
|
+
similar_articles.reject { |page, similarity| similarity == 0 }.sort_by { |page, similarity| similarity }.reverse
|
54
|
+
end
|
55
|
+
|
56
|
+
private
|
57
|
+
def self.init_tag_cloud
|
58
|
+
cloud = Hash.new(0)
|
59
|
+
Page.find_all.each do |page|
|
60
|
+
page.tags.each { |t| cloud[t] += 1 }
|
61
|
+
end
|
62
|
+
cloud.sort
|
63
|
+
end
|
64
|
+
|
65
|
+
def tag_strings
|
66
|
+
strings = metadata('tags')
|
67
|
+
strings.nil? ? [] : strings.split(',').map { |string| string.strip.downcase }.reject { |s| s.empty? }
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "nesta-plugin-taggr/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "nesta-plugin-taggr"
|
7
|
+
s.version = Nesta::Plugin::Taggr::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Alexander Golev"]
|
10
|
+
s.email = ["sasha.golev@gmail.com"]
|
11
|
+
s.licenses = ['MIT']
|
12
|
+
s.homepage = "http://github.com/dansunotori/search-plugin-taggr"
|
13
|
+
s.summary = %q{Tag support plugin for Nesta CMS}
|
14
|
+
s.description = %q{Adds support for 'tags' metadata.}
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
end
|
metadata
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: nesta-plugin-taggr
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Alexander Golev
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-03-06 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Adds support for 'tags' metadata.
|
14
|
+
email:
|
15
|
+
- sasha.golev@gmail.com
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- .gitignore
|
21
|
+
- Gemfile
|
22
|
+
- Gemfile.lock
|
23
|
+
- README.md
|
24
|
+
- Rakefile
|
25
|
+
- lib/nesta-plugin-taggr.rb
|
26
|
+
- lib/nesta-plugin-taggr/init.rb
|
27
|
+
- lib/nesta-plugin-taggr/version.rb
|
28
|
+
- nesta-plugin-taggr.gemspec
|
29
|
+
homepage: http://github.com/dansunotori/search-plugin-taggr
|
30
|
+
licenses:
|
31
|
+
- MIT
|
32
|
+
metadata: {}
|
33
|
+
post_install_message:
|
34
|
+
rdoc_options: []
|
35
|
+
require_paths:
|
36
|
+
- lib
|
37
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - '>='
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - '>='
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
47
|
+
requirements: []
|
48
|
+
rubyforge_project:
|
49
|
+
rubygems_version: 2.2.2
|
50
|
+
signing_key:
|
51
|
+
specification_version: 4
|
52
|
+
summary: Tag support plugin for Nesta CMS
|
53
|
+
test_files: []
|