iconly 1.0.0
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/MIT-LICENSE +20 -0
- data/README.md +76 -0
- data/Rakefile +33 -0
- data/app/assets/config/iconly_manifest.js +2 -0
- data/app/assets/images/iconly/Noto-Sans-700.eot +0 -0
- data/app/assets/images/iconly/Noto-Sans-700.svg +336 -0
- data/app/assets/images/iconly/Noto-Sans-700.ttf +0 -0
- data/app/assets/images/iconly/Noto-Sans-700.woff +0 -0
- data/app/assets/images/iconly/Noto-Sans-700.woff2 +0 -0
- data/app/assets/images/iconly/Noto-Sans-regular.eot +0 -0
- data/app/assets/images/iconly/Noto-Sans-regular.svg +335 -0
- data/app/assets/images/iconly/Noto-Sans-regular.ttf +0 -0
- data/app/assets/images/iconly/Noto-Sans-regular.woff +0 -0
- data/app/assets/images/iconly/Noto-Sans-regular.woff2 +0 -0
- data/app/assets/images/iconly/Source-Sans-Pro-600.eot +0 -0
- data/app/assets/images/iconly/Source-Sans-Pro-600.svg +339 -0
- data/app/assets/images/iconly/Source-Sans-Pro-600.ttf +0 -0
- data/app/assets/images/iconly/Source-Sans-Pro-600.woff +0 -0
- data/app/assets/images/iconly/Source-Sans-Pro-600.woff2 +0 -0
- data/app/assets/images/iconly/Source-Sans-Pro-regular.eot +0 -0
- data/app/assets/images/iconly/Source-Sans-Pro-regular.svg +345 -0
- data/app/assets/images/iconly/Source-Sans-Pro-regular.ttf +0 -0
- data/app/assets/images/iconly/Source-Sans-Pro-regular.woff +0 -0
- data/app/assets/images/iconly/Source-Sans-Pro-regular.woff2 +0 -0
- data/app/assets/images/iconly/favicon.png +0 -0
- data/app/assets/images/iconly/iconly.eot +0 -0
- data/app/assets/images/iconly/iconly.svg +157 -0
- data/app/assets/images/iconly/iconly.ttf +0 -0
- data/app/assets/images/iconly/iconly.woff +0 -0
- data/app/assets/javascripts/iconly/application.js +24 -0
- data/app/assets/javascripts/iconly/iconly.coffee +5 -0
- data/app/assets/javascripts/iconly/jquery.sticky.js +268 -0
- data/app/assets/javascripts/iconly/package.coffee +25 -0
- data/app/assets/javascripts/iconly/project.coffee +68 -0
- data/app/assets/javascripts/iconly/scroller.coffee +17 -0
- data/app/assets/stylesheets/iconly/application.scss +21 -0
- data/app/assets/stylesheets/iconly/buttons.scss +314 -0
- data/app/assets/stylesheets/iconly/file_input.scss +25 -0
- data/app/assets/stylesheets/iconly/header.scss +179 -0
- data/app/assets/stylesheets/iconly/iconly.scss.erb +61 -0
- data/app/assets/stylesheets/iconly/layout.scss +269 -0
- data/app/assets/stylesheets/iconly/overrides.scss +58 -0
- data/app/assets/stylesheets/iconly/typography.scss.erb +48 -0
- data/app/controllers/iconly/application_controller.rb +8 -0
- data/app/controllers/iconly/packages_controller.rb +54 -0
- data/app/controllers/iconly/project_icons_controller.rb +24 -0
- data/app/controllers/iconly/projects_controller.rb +67 -0
- data/app/helpers/iconly/application_helper.rb +35 -0
- data/app/helpers/iconly/packages_helper.rb +29 -0
- data/app/helpers/iconly/project_icons_helper.rb +4 -0
- data/app/helpers/iconly/projects_helper.rb +4 -0
- data/app/helpers/iconly/sessions_helper.rb +43 -0
- data/app/jobs/iconly/application_job.rb +4 -0
- data/app/mailers/iconly/application_mailer.rb +6 -0
- data/app/models/iconly/application_record.rb +5 -0
- data/app/models/iconly/icon.rb +44 -0
- data/app/models/iconly/package.rb +5 -0
- data/app/models/iconly/project.rb +5 -0
- data/app/models/iconly/project/downloader.rb +50 -0
- data/app/models/iconly/project/font_generator.rb +65 -0
- data/app/models/iconly/project_icon.rb +23 -0
- data/app/models/iconly/user.rb +5 -0
- data/app/uploaders/iconly/svg_uploader.rb +51 -0
- data/app/views/iconly/packages/_form.html.erb +48 -0
- data/app/views/iconly/packages/new.html.erb +5 -0
- data/app/views/iconly/projects/_form.html.erb +25 -0
- data/app/views/iconly/projects/_packages.html.erb +91 -0
- data/app/views/iconly/projects/edit.html.erb +5 -0
- data/app/views/iconly/projects/index.html.erb +37 -0
- data/app/views/iconly/projects/new.html.erb +5 -0
- data/app/views/iconly/projects/show.html.erb +53 -0
- data/app/views/layouts/iconly/_footer.html.erb +18 -0
- data/app/views/layouts/iconly/_header.html.erb +89 -0
- data/app/views/layouts/iconly/application.html.erb +29 -0
- data/config/fontcustom/fontcustom_manifest.yml +53 -0
- data/config/fontcustom/templates/iconly.css +28 -0
- data/config/routes.rb +13 -0
- data/db/migrate/20170130210746_enable_uuid_extension.rb +5 -0
- data/db/migrate/20170130211049_create_iconly_users.rb +9 -0
- data/db/migrate/20170130220400_create_iconly_packages.rb +12 -0
- data/db/migrate/20170131002414_create_iconly_icons.rb +13 -0
- data/db/migrate/20170131081131_create_iconly_projects.rb +11 -0
- data/db/migrate/20170131084626_create_iconly_project_icons.rb +10 -0
- data/db/migrate/20170203144731_add_icon_count_to_packages.rb +5 -0
- data/lib/iconly.rb +22 -0
- data/lib/iconly/concerns/models/package.rb +41 -0
- data/lib/iconly/concerns/models/project.rb +27 -0
- data/lib/iconly/concerns/models/user.rb +23 -0
- data/lib/iconly/engine.rb +5 -0
- data/lib/iconly/version.rb +3 -0
- data/lib/iconly/zip_file_generator.rb +58 -0
- data/lib/tasks/iconly_tasks.rake +4 -0
- metadata +374 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
module Iconly
|
|
2
|
+
class Project
|
|
3
|
+
class Downloader
|
|
4
|
+
def initialize(project)
|
|
5
|
+
@project = project
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def call
|
|
9
|
+
return unless @project.icons.any?
|
|
10
|
+
generate
|
|
11
|
+
zip_file_path
|
|
12
|
+
rescue => e
|
|
13
|
+
Rails.logger.error e
|
|
14
|
+
nil
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
private
|
|
18
|
+
|
|
19
|
+
def generate
|
|
20
|
+
with_glyphs do |path|
|
|
21
|
+
Project::FontGenerator.new(path, output_path).call
|
|
22
|
+
end
|
|
23
|
+
ZipFileGenerator.new(output_path, zip_file_path).write
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def with_glyphs
|
|
27
|
+
Dir.mktmpdir do |dir|
|
|
28
|
+
FileUtils.cp @project.icons.map(&:svg_path), dir
|
|
29
|
+
yield dir if block_given?
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def output_path
|
|
34
|
+
@output_path ||= Dir.mktmpdir
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def svg_path
|
|
38
|
+
unless @svg_path
|
|
39
|
+
icon = @project.icons.first
|
|
40
|
+
@svg_path = File.dirname(Rails.root.join("public#{icon.svg.url}"))
|
|
41
|
+
end
|
|
42
|
+
@svg_path
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def zip_file_path
|
|
46
|
+
@zip_file_path ||= File.join(Iconly.downloads_folder, "#{@project.slug}_#{Time.current.to_i}.zip")
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
module Iconly
|
|
2
|
+
class Project
|
|
3
|
+
class FontGenerator
|
|
4
|
+
include FileUtils::Verbose
|
|
5
|
+
|
|
6
|
+
FONT_NAME = 'iconly'.freeze
|
|
7
|
+
|
|
8
|
+
def initialize(vectors_path, output_path, font_name = nil)
|
|
9
|
+
@vectors_path = vectors_path
|
|
10
|
+
@output_path = output_path
|
|
11
|
+
@font_name = font_name || FONT_NAME
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def call
|
|
15
|
+
input = {
|
|
16
|
+
vectors: @vectors_path,
|
|
17
|
+
templates: templates_path
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
raw_options = {
|
|
21
|
+
debug: Rails.env.development?,
|
|
22
|
+
input: input,
|
|
23
|
+
templates: %w(iconly.css),
|
|
24
|
+
font_name: @font_name,
|
|
25
|
+
css_selector: ".#{@font_name}-{{glyph}}",
|
|
26
|
+
no_hash: true,
|
|
27
|
+
verbose: true,
|
|
28
|
+
manifest: manifest_path,
|
|
29
|
+
output: {
|
|
30
|
+
fonts: output_fonts_path,
|
|
31
|
+
css: @output_path
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
run_generators raw_options
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
private
|
|
39
|
+
|
|
40
|
+
def run_generators(raw_options)
|
|
41
|
+
options = Fontcustom::Options.new(raw_options).options
|
|
42
|
+
manifest = Fontcustom::Manifest.new(manifest_path, options)
|
|
43
|
+
|
|
44
|
+
Fontcustom::Generator::Font.new(manifest.manifest).generate
|
|
45
|
+
Fontcustom::Generator::Template.new(manifest.manifest).generate
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def output_fonts_path
|
|
49
|
+
File.join(@output_path, 'fonts')
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def manifest_path
|
|
53
|
+
File.join(config_folder, 'fontcustom_manifest.yml')
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def templates_path
|
|
57
|
+
File.join(config_folder, 'templates')
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def config_folder
|
|
61
|
+
File.expand_path('../../../../../config/fontcustom', __FILE__)
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module Iconly
|
|
2
|
+
class ProjectIcon < ApplicationRecord
|
|
3
|
+
belongs_to :project, class_name: 'Project'
|
|
4
|
+
belongs_to :icon, class_name: 'Icon'
|
|
5
|
+
|
|
6
|
+
def self.all_projects(user_id, term = nil)
|
|
7
|
+
user_projects = Project.owned_by(user_id)
|
|
8
|
+
icons = includes(:icon, :project)
|
|
9
|
+
.joins(:icon, :project)
|
|
10
|
+
.merge(user_projects)
|
|
11
|
+
icons = icons.merge(Icon.search(term)) if term.present?
|
|
12
|
+
project_icons = icons
|
|
13
|
+
.order('iconly_projects.name')
|
|
14
|
+
.group_by(&:project)
|
|
15
|
+
|
|
16
|
+
if term.blank?
|
|
17
|
+
projects_without_icons = user_projects.without_icons
|
|
18
|
+
projects_without_icons.each { |p| project_icons[p] = [] }
|
|
19
|
+
end
|
|
20
|
+
project_icons
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
module Iconly
|
|
2
|
+
class SvgUploader < CarrierWave::Uploader::Base
|
|
3
|
+
CarrierWave::SanitizedFile.sanitize_regexp = /[^[:word:]\.\-\+]/
|
|
4
|
+
|
|
5
|
+
# Include RMagick or MiniMagick support:
|
|
6
|
+
# include CarrierWave::RMagick
|
|
7
|
+
# include CarrierWave::MiniMagick
|
|
8
|
+
|
|
9
|
+
# Choose what kind of storage to use for this uploader:
|
|
10
|
+
storage :file
|
|
11
|
+
# storage :fog
|
|
12
|
+
|
|
13
|
+
# Override the directory where uploaded files will be stored.
|
|
14
|
+
# This is a sensible default for uploaders that are meant to be mounted:
|
|
15
|
+
def store_dir
|
|
16
|
+
"uploads/packages/#{model.package.to_param}/icons"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Provide a default URL as a default if there hasn't been a file uploaded:
|
|
20
|
+
# def default_url
|
|
21
|
+
# # For Rails 3.1+ asset pipeline compatibility:
|
|
22
|
+
# # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_'))
|
|
23
|
+
#
|
|
24
|
+
# "/images/fallback/" + [version_name, "default.png"].compact.join('_')
|
|
25
|
+
# end
|
|
26
|
+
|
|
27
|
+
# Process files as they are uploaded:
|
|
28
|
+
# process scale: [200, 300]
|
|
29
|
+
#
|
|
30
|
+
# def scale(width, height)
|
|
31
|
+
# # do something
|
|
32
|
+
# end
|
|
33
|
+
|
|
34
|
+
# Create different versions of your uploaded files:
|
|
35
|
+
# version :thumb do
|
|
36
|
+
# process resize_to_fit: [50, 50]
|
|
37
|
+
# end
|
|
38
|
+
|
|
39
|
+
# Add a white list of extensions which are allowed to be uploaded.
|
|
40
|
+
# For images you might use something like this:
|
|
41
|
+
def extension_whitelist
|
|
42
|
+
%w(svg)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Override the filename of the uploaded files:
|
|
46
|
+
# Avoid using model.id or version_name here, see uploader/store.rb for details.
|
|
47
|
+
# def filename
|
|
48
|
+
# "something.jpg" if original_filename
|
|
49
|
+
# end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<div class="row">
|
|
2
|
+
<div class="col-md-6">
|
|
3
|
+
<%= form_for package, html: { multipart: true } do |f| %>
|
|
4
|
+
<% if package.errors.any? %>
|
|
5
|
+
<div class="alert alert-danger">
|
|
6
|
+
<ul>
|
|
7
|
+
<% package.errors.full_messages.each do |message| %>
|
|
8
|
+
<li><%= message %></li>
|
|
9
|
+
<% end %>
|
|
10
|
+
</ul>
|
|
11
|
+
</div>
|
|
12
|
+
<% end %>
|
|
13
|
+
|
|
14
|
+
<div class="form-group">
|
|
15
|
+
<%= f.label :name %>
|
|
16
|
+
<%= f.text_field :name, class: 'form-control', placeholder: 'Choose a name' %>
|
|
17
|
+
</div>
|
|
18
|
+
|
|
19
|
+
<div class="form-group">
|
|
20
|
+
<%= f.label :icon_files, 'Icons' %>
|
|
21
|
+
<div class="card">
|
|
22
|
+
<div class="card-block text-center pt-4 pb-4">
|
|
23
|
+
<div class="package-files">
|
|
24
|
+
<div class="in" id="package-files">No files selected</div>
|
|
25
|
+
</div>
|
|
26
|
+
<button class="btn btn-smt btn-custom btn-white btn-file">
|
|
27
|
+
Add files ...
|
|
28
|
+
<%= f.file_field :icon_files, type: :file, multiple: true, class: 'form-control' %>
|
|
29
|
+
</button>
|
|
30
|
+
</div>
|
|
31
|
+
</div>
|
|
32
|
+
</div>
|
|
33
|
+
|
|
34
|
+
<div class="actions mt-5">
|
|
35
|
+
<%= f.submit 'Save', class: 'btn btn-success' %> or
|
|
36
|
+
<%= link_to 'Cancel', path_after_create_package, class: 'text-danger' %>
|
|
37
|
+
</div>
|
|
38
|
+
<% end %>
|
|
39
|
+
</div>
|
|
40
|
+
</div>
|
|
41
|
+
|
|
42
|
+
<% content_for :script do %>
|
|
43
|
+
<script>
|
|
44
|
+
$(function() {
|
|
45
|
+
iconly.Package.start('#package_icon_files', '#package-files');
|
|
46
|
+
});
|
|
47
|
+
</script>
|
|
48
|
+
<% end %>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<div class="row">
|
|
2
|
+
<div class="col-sm-6">
|
|
3
|
+
<%= form_for project do |f| %>
|
|
4
|
+
<% if project.errors.any? %>
|
|
5
|
+
<div class="alert alert-danger">
|
|
6
|
+
<ul>
|
|
7
|
+
<% project.errors.full_messages.each do |message| %>
|
|
8
|
+
<li><%= message %></li>
|
|
9
|
+
<% end %>
|
|
10
|
+
</ul>
|
|
11
|
+
</div>
|
|
12
|
+
<% end %>
|
|
13
|
+
|
|
14
|
+
<div class="form-group">
|
|
15
|
+
<%= f.label :name %>
|
|
16
|
+
<%= f.text_field :name, class: 'form-control', placeholder: 'Choose a name' %>
|
|
17
|
+
</div>
|
|
18
|
+
|
|
19
|
+
<div class="actions mt-5">
|
|
20
|
+
<%= f.submit 'Save', class: 'btn btn-success' %> or
|
|
21
|
+
<%= link_to 'Cancel', cancel_path, class: 'text-danger' %>
|
|
22
|
+
</div>
|
|
23
|
+
<% end %>
|
|
24
|
+
</div>
|
|
25
|
+
</div>
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
<div class="row">
|
|
2
|
+
<div class="col-md-2 hidden-sm-down">
|
|
3
|
+
<div class="sidebar" id="sticky-packages">
|
|
4
|
+
<h4 class="text-pale brd-btm">
|
|
5
|
+
Packages
|
|
6
|
+
<span class="badge badge-pale float-right"><%= packages.size %></span>
|
|
7
|
+
</h4>
|
|
8
|
+
|
|
9
|
+
<table>
|
|
10
|
+
<% packages.each do |package, _| %>
|
|
11
|
+
<tr>
|
|
12
|
+
<td>
|
|
13
|
+
<%= link_to package.name, "##{package.to_param}", 'data-scroll-to' => package.to_param, class: 'text-pale text-bold' %>
|
|
14
|
+
</td>
|
|
15
|
+
<td class="text-right">
|
|
16
|
+
<span class="badge badge-pale"><%= package.icon_count %></span>
|
|
17
|
+
</td>
|
|
18
|
+
</tr>
|
|
19
|
+
<% end %>
|
|
20
|
+
</table>
|
|
21
|
+
</div>
|
|
22
|
+
</div>
|
|
23
|
+
|
|
24
|
+
<div class="col-md-8 col-sm-12 project-pkg-<%= project.present? %>">
|
|
25
|
+
<% packages.each do |package, icons| %>
|
|
26
|
+
|
|
27
|
+
<div class="row">
|
|
28
|
+
<div class="col-md-8">
|
|
29
|
+
<h3 class="font-bold" id="<%= package.to_param %>"><%= package.name %></h3>
|
|
30
|
+
</div>
|
|
31
|
+
<div class="col-md-4 text-right inline-links">
|
|
32
|
+
<% if my_package?(package) %>
|
|
33
|
+
<%= link_to_share package %>
|
|
34
|
+
|
|
35
|
+
<%= link_to package_path(package),
|
|
36
|
+
method: :delete,
|
|
37
|
+
class: 'text-danger mt-05 list-inline-item text-sm',
|
|
38
|
+
title: 'Delete package',
|
|
39
|
+
data: { confirm: 'You sure you want to delete this package?', toggle: 'iconly-tooltip' } do %>
|
|
40
|
+
<span class="iconly-trash text-pale"></span>
|
|
41
|
+
<% end %>
|
|
42
|
+
<% end %>
|
|
43
|
+
</div>
|
|
44
|
+
</div>
|
|
45
|
+
|
|
46
|
+
<div class="card mb-4">
|
|
47
|
+
<div class="card-block">
|
|
48
|
+
<% icons.each do |icon| %>
|
|
49
|
+
<%= icon_svg icon, project_icons %>
|
|
50
|
+
<% end %>
|
|
51
|
+
</div>
|
|
52
|
+
</div>
|
|
53
|
+
<% end %>
|
|
54
|
+
|
|
55
|
+
<% if packages.blank? %>
|
|
56
|
+
<div class="jumbotron text-center">
|
|
57
|
+
<i class="iconly-baby2 mr-05 font-lg"></i>
|
|
58
|
+
<h3 class="mb-4">Can't find that icon ...</h3>
|
|
59
|
+
<%= link_to 'Clear search', project_path(project), class: 'btn btn-lg btn-primary' %>
|
|
60
|
+
</div>
|
|
61
|
+
<% end %>
|
|
62
|
+
</div>
|
|
63
|
+
|
|
64
|
+
<div class="col-md-2 hidden-sm-down project-pkg-true">
|
|
65
|
+
<div id="sticky-project-icons">
|
|
66
|
+
<h4 class="text-pale brd-btm">
|
|
67
|
+
Project Icons
|
|
68
|
+
<span class="badge badge-pale float-right" id="project-icons-count"><%= project.icons.size %></span>
|
|
69
|
+
</h4>
|
|
70
|
+
<div id="project-icons">
|
|
71
|
+
<% project.icons.each do |icon| %>
|
|
72
|
+
<div class="btn btn-svg btn-sm float-left remove" title="Remove from project" data-action="remove-from-project" data-id="<%= icon.id %>">
|
|
73
|
+
<%= icon.markup %>
|
|
74
|
+
<i class="iconly-cross bg-danger text-white rm"></i>
|
|
75
|
+
</div>
|
|
76
|
+
<% end %>
|
|
77
|
+
</div>
|
|
78
|
+
</div>
|
|
79
|
+
</div>
|
|
80
|
+
</div> <!-- end row -->
|
|
81
|
+
|
|
82
|
+
<%= content_for :script do %>
|
|
83
|
+
<script>
|
|
84
|
+
$(function() {
|
|
85
|
+
var options = { topSpacing: 70 };
|
|
86
|
+
$('#sticky-packages').sticky(options);
|
|
87
|
+
$('#sticky-project-icons').sticky(options);
|
|
88
|
+
new iconly.Scroller(options)
|
|
89
|
+
});
|
|
90
|
+
</script>
|
|
91
|
+
<% end %>
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
<%= title 'Projects' %>
|
|
2
|
+
|
|
3
|
+
<h1 class="page-header">Projects</h1>
|
|
4
|
+
|
|
5
|
+
<% @projects.each do |project, project_icons| %>
|
|
6
|
+
|
|
7
|
+
<h3 class="font-bold text-dark"><%= link_to project.name, project_path(project) %></h3>
|
|
8
|
+
<div class="card mb-4">
|
|
9
|
+
<div class="card-block">
|
|
10
|
+
<% project_icons.each do |project_icon| %>
|
|
11
|
+
<div class="btn btn-svg float-left" title="<%= project_icon.icon.name %>">
|
|
12
|
+
<%= project_icon.icon.contents.html_safe %>
|
|
13
|
+
</div>
|
|
14
|
+
<% end %>
|
|
15
|
+
|
|
16
|
+
<% if project_icons.blank? %>
|
|
17
|
+
<div class="text-pale">No icons added yet.</div>
|
|
18
|
+
<% end %>
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
21
|
+
|
|
22
|
+
<% end %>
|
|
23
|
+
|
|
24
|
+
<% if @projects.blank? %>
|
|
25
|
+
<div class="jumbotron text-center">
|
|
26
|
+
<i class="iconly-baby2 mr-05 font-lg"></i>
|
|
27
|
+
<% if params[:q].present? %>
|
|
28
|
+
<h3 class="mb-4">Can't find that icon ...</h3>
|
|
29
|
+
<%= link_to 'Clear search', projects_path, class: 'btn btn-lg btn-primary' %>
|
|
30
|
+
<% else %>
|
|
31
|
+
<h3>No projects created yet</h3>
|
|
32
|
+
<hr/>
|
|
33
|
+
<p>No worries, there's still time.</p>
|
|
34
|
+
<%= link_to 'Start now', new_project_path, class: 'btn btn-lg btn-primary' %>
|
|
35
|
+
<% end %>
|
|
36
|
+
</div>
|
|
37
|
+
<% end %>
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
<%= title @project.name %>
|
|
2
|
+
|
|
3
|
+
<div class="row page-header">
|
|
4
|
+
<div class="col-sm-6">
|
|
5
|
+
<h1><%= @project.name %></h1>
|
|
6
|
+
</div>
|
|
7
|
+
<div class="col-sm-6 text-right">
|
|
8
|
+
<a class="dropdown-toggle m-a-0 btn btn-default" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">
|
|
9
|
+
<i class="iconly-menu"></i>
|
|
10
|
+
</a>
|
|
11
|
+
|
|
12
|
+
<div class="dropdown-menu dropdown-menu-right">
|
|
13
|
+
<%= link_to edit_project_path(@project), class: 'dropdown-item' do %>
|
|
14
|
+
<i class="iconly-pencil mr-05 text-info"></i>
|
|
15
|
+
Edit Project
|
|
16
|
+
<% end %>
|
|
17
|
+
<%= link_to project_path(@project),
|
|
18
|
+
method: :delete,
|
|
19
|
+
data: { confirm: 'Are you sure you want to delete this project?' },
|
|
20
|
+
class: 'dropdown-item' do %>
|
|
21
|
+
<i class="iconly-trash mr-05 text-danger"></i>
|
|
22
|
+
Delete Project
|
|
23
|
+
<% end %>
|
|
24
|
+
|
|
25
|
+
<div class="dropdown-divider"></div>
|
|
26
|
+
|
|
27
|
+
<%= link_to generate_font_project_path(@project), class: 'dropdown-item', data: { method: :post } do %>
|
|
28
|
+
<i class="iconly-folder-download text-primary mr-05"></i>
|
|
29
|
+
Generate Font
|
|
30
|
+
<% end %>
|
|
31
|
+
|
|
32
|
+
<div class="dropdown-divider"></div>
|
|
33
|
+
|
|
34
|
+
<%= link_to new_project_path, class: 'dropdown-item' do %>
|
|
35
|
+
<i class="iconly-file-add mr-05 text-info"></i>
|
|
36
|
+
New Project
|
|
37
|
+
<% end %>
|
|
38
|
+
</div>
|
|
39
|
+
</div>
|
|
40
|
+
</div>
|
|
41
|
+
|
|
42
|
+
<%= render partial: 'packages', locals: {
|
|
43
|
+
packages: @packages,
|
|
44
|
+
project: @project,
|
|
45
|
+
project_icons: @project.project_icons.map(&:icon_id) } %>
|
|
46
|
+
|
|
47
|
+
<%= content_for :script do %>
|
|
48
|
+
<script>
|
|
49
|
+
$(function() {
|
|
50
|
+
iconly.Project.start('<%= @project.id %>', '<%= project_icons_path %>');
|
|
51
|
+
});
|
|
52
|
+
</script>
|
|
53
|
+
<% end %>
|