jobshop 0.0.4.2p4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +4 -3
- data/app/assets/javascripts/jobshop/application.js +14 -1
- data/app/assets/stylesheets/jobshop/application.scss +250 -42
- data/app/assets/stylesheets/jobshop/breakpoints.scss +35 -0
- data/app/builders/jobshop/builder.rb +34 -0
- data/app/controllers/concerns/registration_token_validation.rb +8 -6
- data/app/controllers/jobshop/pages_controller.rb +11 -4
- data/app/controllers/jobshop/{sites → teams}/registrations_controller.rb +1 -2
- data/app/controllers/jobshop/{sites_controller.rb → teams_controller.rb} +1 -1
- data/app/helpers/jobshop/application_helper.rb +5 -0
- data/app/models/jobshop/dashboard.rb +5 -0
- data/app/models/jobshop/registration.rb +9 -7
- data/app/models/jobshop/{site.rb → team.rb} +2 -1
- data/app/models/jobshop/user.rb +2 -1
- data/app/views/devise/confirmations/new.html.haml +10 -0
- data/app/views/devise/mailer/confirmation_instructions.html.haml +4 -0
- data/app/views/devise/mailer/password_change.html.haml +3 -0
- data/app/views/devise/mailer/reset_password_instructions.html.haml +6 -0
- data/app/views/devise/mailer/unlock_instructions.html.haml +5 -0
- data/app/views/devise/passwords/edit.html.haml +19 -0
- data/app/views/devise/passwords/new.html.haml +10 -0
- data/app/views/devise/registrations/edit.html.haml +31 -0
- data/app/views/devise/registrations/new.html.haml +21 -0
- data/app/views/devise/sessions/new.html.haml +14 -0
- data/app/views/devise/shared/_links.html.haml +19 -0
- data/app/views/devise/unlocks/new.html.haml +10 -0
- data/app/views/jobshop/dashboards/show.html.haml +140 -1
- data/app/views/jobshop/pages/index.html.haml +6 -11
- data/app/views/jobshop/teams/registrations/new.html.haml +26 -0
- data/app/views/layouts/jobshop/application.html.haml +7 -6
- data/config/initializers/devise.rb +1 -1
- data/config/routes.rb +2 -2
- data/db/migrate/20160417210218_create_jobshop_dashboards.rb +15 -0
- data/db/migrate/20160425062447_rename_site_to_team.rb +30 -0
- data/lib/generators/jobshop/team/USAGE +7 -0
- data/lib/generators/jobshop/{site/site_generator.rb → team/team_generator.rb} +8 -8
- data/lib/jobshop/engine.rb +1 -1
- data/lib/jobshop/version.rb +4 -3
- data/lib/tasks/jobshop_tasks.rake +20 -4
- metadata +44 -36
- data/app/assets/stylesheets/jobshop/generics.scss +0 -25
- data/app/assets/stylesheets/jobshop/material-icons.scss +0 -24
- data/app/assets/stylesheets/jobshop/site/configuration.scss +0 -3
- data/app/views/jobshop/sites/registrations/new.html.haml +0 -30
- data/lib/generators/jobshop/site/USAGE +0 -8
@@ -3,19 +3,26 @@ require_dependency "jobshop/application_controller"
|
|
3
3
|
module Jobshop
|
4
4
|
class PagesController < ApplicationController
|
5
5
|
def show
|
6
|
-
|
6
|
+
args = valid_page? ? [ template: page ]
|
7
7
|
: [ file: "public/404.html", status: :not_found ]
|
8
|
-
render(*
|
8
|
+
render(*args)
|
9
9
|
end
|
10
10
|
|
11
11
|
private
|
12
12
|
|
13
13
|
def valid_page?
|
14
|
-
lookup_context.template_exists?(
|
14
|
+
lookup_context.template_exists?(page)
|
15
15
|
end
|
16
16
|
|
17
|
-
def
|
17
|
+
def page
|
18
18
|
"jobshop/pages/#{params[:page]}"
|
19
19
|
end
|
20
|
+
|
21
|
+
def layout
|
22
|
+
case params[:page]
|
23
|
+
when "index"
|
24
|
+
:modal
|
25
|
+
end
|
26
|
+
end
|
20
27
|
end
|
21
28
|
end
|
@@ -1,12 +1,11 @@
|
|
1
1
|
require_dependency "jobshop/application_controller"
|
2
2
|
|
3
3
|
module Jobshop
|
4
|
-
class
|
4
|
+
class Teams::RegistrationsController < ApplicationController
|
5
5
|
include RegistrationTokenValidation
|
6
6
|
|
7
7
|
def new
|
8
8
|
@registration = Jobshop::Registration.new(params)
|
9
|
-
authenticate_user! if @registration.site.owner
|
10
9
|
end
|
11
10
|
|
12
11
|
def create
|
@@ -1,9 +1,9 @@
|
|
1
1
|
module Jobshop
|
2
2
|
class Registration < VirtualRecord
|
3
|
-
memo_attr(:user) {
|
4
|
-
memo_attr(:
|
5
|
-
record = Jobshop::
|
6
|
-
record.assign_attributes(
|
3
|
+
memo_attr(:user) { team.users.build(user_params) }
|
4
|
+
memo_attr(:team) {
|
5
|
+
record = Jobshop::Team.find(params[:team_id])
|
6
|
+
record.assign_attributes(team_params)
|
7
7
|
record
|
8
8
|
}
|
9
9
|
|
@@ -12,7 +12,9 @@ module Jobshop
|
|
12
12
|
|
13
13
|
result = ActiveRecord::Base.transaction do
|
14
14
|
user.save!
|
15
|
-
|
15
|
+
team.update!(owner: user,
|
16
|
+
registration_token: nil,
|
17
|
+
registration_token_sent_at: nil)
|
16
18
|
end
|
17
19
|
|
18
20
|
result != false
|
@@ -24,9 +26,9 @@ module Jobshop
|
|
24
26
|
params.fetch(:registration, ActionController::Parameters.new)
|
25
27
|
end
|
26
28
|
|
27
|
-
def
|
29
|
+
def team_params
|
28
30
|
registration_params.fetch(
|
29
|
-
:
|
31
|
+
:team, ActionController::Parameters.new).permit(:name)
|
30
32
|
end
|
31
33
|
|
32
34
|
def user_params
|
@@ -1,7 +1,8 @@
|
|
1
1
|
module Jobshop
|
2
|
-
class
|
2
|
+
class Team < ApplicationRecord
|
3
3
|
belongs_to :owner, class_name: "Jobshop::User"
|
4
4
|
has_many :users, class_name: "Jobshop::User"
|
5
|
+
has_one :default_dashboard, class_name: "Jobshop::Dashboard"
|
5
6
|
|
6
7
|
def generate_registration_token
|
7
8
|
raw, encrypted = Devise.token_generator.generate(
|
data/app/models/jobshop/user.rb
CHANGED
@@ -4,7 +4,8 @@ module Jobshop
|
|
4
4
|
# :confirmable, :lockable, :timeoutable and :omniauthable
|
5
5
|
devise :database_authenticatable, :recoverable, :rememberable, :validatable
|
6
6
|
|
7
|
-
belongs_to :
|
7
|
+
belongs_to :team
|
8
|
+
has_one :default_dashboard, class_name: "Jobshop::Dashboard", through: :team
|
8
9
|
|
9
10
|
validates_uniqueness_of :email
|
10
11
|
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
%h2 Resend confirmation instructions
|
2
|
+
= form_for(resource, as: resource_name, url: confirmation_path(resource_name), html: { method: :post }) do |f|
|
3
|
+
= devise_error_messages!
|
4
|
+
.field
|
5
|
+
= f.label :email
|
6
|
+
%br/
|
7
|
+
= f.email_field :email, autofocus: true, value: (resource.pending_reconfirmation? ? resource.unconfirmed_email : resource.email)
|
8
|
+
.actions
|
9
|
+
= f.submit "Resend confirmation instructions"
|
10
|
+
= render "devise/shared/links"
|
@@ -0,0 +1,6 @@
|
|
1
|
+
%p
|
2
|
+
Hello #{@resource.email}!
|
3
|
+
%p Someone has requested a link to change your password. You can do this through the link below.
|
4
|
+
%p= link_to 'Change my password', edit_password_url(@resource, reset_password_token: @token)
|
5
|
+
%p If you didn't request this, please ignore this email.
|
6
|
+
%p Your password won't change until you access the link above and create a new one.
|
@@ -0,0 +1,19 @@
|
|
1
|
+
%h2 Change your password
|
2
|
+
= form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :put }) do |f|
|
3
|
+
= devise_error_messages!
|
4
|
+
= f.hidden_field :reset_password_token
|
5
|
+
.field
|
6
|
+
= f.label :password, "New password"
|
7
|
+
%br/
|
8
|
+
- if @minimum_password_length
|
9
|
+
%em
|
10
|
+
(#{@minimum_password_length} characters minimum)
|
11
|
+
%br/
|
12
|
+
= f.password_field :password, autofocus: true, autocomplete: "off"
|
13
|
+
.field
|
14
|
+
= f.label :password_confirmation, "Confirm new password"
|
15
|
+
%br/
|
16
|
+
= f.password_field :password_confirmation, autocomplete: "off"
|
17
|
+
.actions
|
18
|
+
= f.submit "Change my password"
|
19
|
+
= render "devise/shared/links"
|
@@ -0,0 +1,10 @@
|
|
1
|
+
%h2 Forgot your password?
|
2
|
+
= form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :post }) do |f|
|
3
|
+
= devise_error_messages!
|
4
|
+
.field
|
5
|
+
= f.label :email
|
6
|
+
%br/
|
7
|
+
= f.email_field :email, autofocus: true
|
8
|
+
.actions
|
9
|
+
= f.submit "Send me reset password instructions"
|
10
|
+
= render "devise/shared/links"
|
@@ -0,0 +1,31 @@
|
|
1
|
+
%h2
|
2
|
+
Edit #{resource_name.to_s.humanize}
|
3
|
+
= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f|
|
4
|
+
= devise_error_messages!
|
5
|
+
.field
|
6
|
+
= f.label :email
|
7
|
+
%br/
|
8
|
+
= f.email_field :email, autofocus: true
|
9
|
+
- if devise_mapping.confirmable? && resource.pending_reconfirmation?
|
10
|
+
%div
|
11
|
+
Currently waiting confirmation for: #{resource.unconfirmed_email}
|
12
|
+
.field
|
13
|
+
= f.label :password
|
14
|
+
%i (leave blank if you don't want to change it)
|
15
|
+
%br/
|
16
|
+
= f.password_field :password, autocomplete: "off"
|
17
|
+
.field
|
18
|
+
= f.label :password_confirmation
|
19
|
+
%br/
|
20
|
+
= f.password_field :password_confirmation, autocomplete: "off"
|
21
|
+
.field
|
22
|
+
= f.label :current_password
|
23
|
+
%i (we need your current password to confirm your changes)
|
24
|
+
%br/
|
25
|
+
= f.password_field :current_password, autocomplete: "off"
|
26
|
+
.actions
|
27
|
+
= f.submit "Update"
|
28
|
+
%h3 Cancel my account
|
29
|
+
%p
|
30
|
+
Unhappy? #{button_to "Cancel my account", registration_path(resource_name), data: { confirm: "Are you sure?" }, method: :delete}
|
31
|
+
= link_to "Back", :back
|
@@ -0,0 +1,21 @@
|
|
1
|
+
%h2 Sign up
|
2
|
+
= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f|
|
3
|
+
= devise_error_messages!
|
4
|
+
.field
|
5
|
+
= f.label :email
|
6
|
+
%br/
|
7
|
+
= f.email_field :email, autofocus: true
|
8
|
+
.field
|
9
|
+
= f.label :password
|
10
|
+
- if @minimum_password_length
|
11
|
+
%em
|
12
|
+
(#{@minimum_password_length} characters minimum)
|
13
|
+
%br/
|
14
|
+
= f.password_field :password, autocomplete: "off"
|
15
|
+
.field
|
16
|
+
= f.label :password_confirmation
|
17
|
+
%br/
|
18
|
+
= f.password_field :password_confirmation, autocomplete: "off"
|
19
|
+
.actions
|
20
|
+
= f.submit "Sign up"
|
21
|
+
= render "devise/shared/links"
|
@@ -0,0 +1,14 @@
|
|
1
|
+
%div(class="session-layout")
|
2
|
+
%main
|
3
|
+
%div#sign-in
|
4
|
+
= form_for(resource, builder: Jobshop::Builder, as: resource_name, url: session_path(resource_name)) do |f|
|
5
|
+
.mdl-card__title
|
6
|
+
%object.logo{ type: "image/svg+xml", data: image_path("jobshop/logo.svg") }
|
7
|
+
|
8
|
+
.mdl-card__supporting-text
|
9
|
+
%div= f.email_field(:email)
|
10
|
+
%div= f.password_field(:password)
|
11
|
+
|
12
|
+
.mdl-card__actions
|
13
|
+
%div= f.check_box :remember_me, "Remember me?"
|
14
|
+
%div= f.button "Log in", class: "mdl-js-ripple-effect"
|
@@ -0,0 +1,19 @@
|
|
1
|
+
- if controller_name != 'sessions'
|
2
|
+
= link_to "Log in", new_session_path(resource_name)
|
3
|
+
%br/
|
4
|
+
- if devise_mapping.registerable? && controller_name != 'registrations'
|
5
|
+
= link_to "Sign up", new_registration_path(resource_name)
|
6
|
+
%br/
|
7
|
+
- if devise_mapping.recoverable? && controller_name != 'passwords' && controller_name != 'registrations'
|
8
|
+
= link_to "Forgot your password?", new_password_path(resource_name)
|
9
|
+
%br/
|
10
|
+
- if devise_mapping.confirmable? && controller_name != 'confirmations'
|
11
|
+
= link_to "Didn't receive confirmation instructions?", new_confirmation_path(resource_name)
|
12
|
+
%br/
|
13
|
+
- if devise_mapping.lockable? && resource_class.unlock_strategy_enabled?(:email) && controller_name != 'unlocks'
|
14
|
+
= link_to "Didn't receive unlock instructions?", new_unlock_path(resource_name)
|
15
|
+
%br/
|
16
|
+
- if devise_mapping.omniauthable?
|
17
|
+
- resource_class.omniauth_providers.each do |provider|
|
18
|
+
= link_to "Sign in with #{OmniAuth::Utils.camelize(provider)}", omniauth_authorize_path(resource_name, provider)
|
19
|
+
%br/
|
@@ -0,0 +1,10 @@
|
|
1
|
+
%h2 Resend unlock instructions
|
2
|
+
= form_for(resource, as: resource_name, url: unlock_path(resource_name), html: { method: :post }) do |f|
|
3
|
+
= devise_error_messages!
|
4
|
+
.field
|
5
|
+
= f.label :email
|
6
|
+
%br/
|
7
|
+
= f.email_field :email, autofocus: true
|
8
|
+
.actions
|
9
|
+
= f.submit "Resend unlock instructions"
|
10
|
+
= render "devise/shared/links"
|
@@ -1 +1,140 @@
|
|
1
|
-
%
|
1
|
+
%div(class="demo-layout mdl-layout mdl-js-layout mdl-layout--fixed-drawer mdl-layout--fixed-header")
|
2
|
+
%header(class="demo-header mdl-layout__header mdl-color--grey-100 mdl-color-text--grey-600")
|
3
|
+
%div(class="mdl-layout__header-row")
|
4
|
+
%span(class="mdl-layout-title") Home
|
5
|
+
%div(class="mdl-layout-spacer")
|
6
|
+
%div(class="mdl-textfield mdl-js-textfield mdl-textfield--expandable")
|
7
|
+
%label(class="mdl-button mdl-js-button mdl-button--icon" for="search")
|
8
|
+
%i(class="material-icons") search
|
9
|
+
%div(class="mdl-textfield__expandable-holder")
|
10
|
+
%input(class="mdl-textfield__input" type="text" id="search")
|
11
|
+
%label(class="mdl-textfield__label" for="search") Enter your query...
|
12
|
+
%button(class="mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--icon" id="hdrbtn")
|
13
|
+
%i(class="material-icons") more_vert
|
14
|
+
%ul(class="mdl-menu mdl-js-menu mdl-js-ripple-effect mdl-menu--bottom-right" for="hdrbtn")
|
15
|
+
%li(class="mdl-menu__item")= link_to("About", about_path)
|
16
|
+
%li(class="mdl-menu__item") Contact
|
17
|
+
%li(class="mdl-menu__item") Legal information
|
18
|
+
%div(class="demo-drawer mdl-layout__drawer mdl-color--blue-grey-900 mdl-color-text--indigo-50")
|
19
|
+
%header(class="demo-drawer-header")
|
20
|
+
%i(class="material-icons" style="font-size: 48px;") person
|
21
|
+
//%img(class="demo-avatar" src="images/user.jpg")
|
22
|
+
%div(class="demo-avatar-dropdown")
|
23
|
+
%span= current_user.email
|
24
|
+
%div(class="mdl-layout-spacer")
|
25
|
+
%button(id="accbtn" class="mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--icon")
|
26
|
+
%i(class="material-icons" role="presentation") arrow_drop_down
|
27
|
+
%span(class="visuallyhidden") User Actions
|
28
|
+
%ul(class="mdl-menu mdl-menu--bottom-right mdl-js-menu mdl-js-ripple-effect" for="accbtn")
|
29
|
+
%li(class="mdl-menu__item")
|
30
|
+
%a(href="#{destroy_user_session_path}" data-method="delete") Sign out
|
31
|
+
%nav(class="demo-navigation mdl-navigation mdl-color--blue-grey-800")
|
32
|
+
%a(class="mdl-navigation__link" href="")
|
33
|
+
%i(class="mdl-color-text--blue-grey-400 material-icons" role="presentation") home
|
34
|
+
Home
|
35
|
+
%a(class="mdl-navigation__link" href="")
|
36
|
+
%i(class="mdl-color-text--blue-grey-400 material-icons" role="presentation") flag
|
37
|
+
Updates
|
38
|
+
%div(class="mdl-layout-spacer")
|
39
|
+
%a(class="mdl-navigation__link" href="")
|
40
|
+
%i(class="mdl-color-text--blue-grey-400 material-icons" role="presentation") help_outline
|
41
|
+
Help
|
42
|
+
|
43
|
+
%main(class="mdl-layout__content mdl-color--grey-100")
|
44
|
+
%div(class="mdl-grid demo-content")
|
45
|
+
%div(class="demo-charts mdl-color--white mdl-shadow--2dp mdl-cell mdl-cell--12-col mdl-grid")
|
46
|
+
%svg(fill="currentColor" width="200px" height="200px" viewBox="0 0 1 1" class="demo-chart mdl-cell mdl-cell--4-col mdl-cell--3-col-desktop")
|
47
|
+
%use(xlink:href="#piechart" mask="url(#piemask)")
|
48
|
+
%text(x="0.5" y="0.5" font-family="Roboto" font-size="0.3" fill="#888" text-anchor="middle" dy="0.1")
|
49
|
+
82
|
50
|
+
%tspan(font-size="0.2" dy="-0.07") %
|
51
|
+
%svg(fill="currentColor" width="200px" height="200px" viewBox="0 0 1 1" class="demo-chart mdl-cell mdl-cell--4-col mdl-cell--3-col-desktop")
|
52
|
+
%use(xlink:href="#piechart" mask="url(#piemask)")
|
53
|
+
%text(x="0.5" y="0.5" font-family="Roboto" font-size="0.3" fill="#888" text-anchor="middle" dy="0.1")
|
54
|
+
82
|
55
|
+
%tspan(dy="-0.07" font-size="0.2") %
|
56
|
+
%svg(fill="currentColor" width="200px" height="200px" viewBox="0 0 1 1" class="demo-chart mdl-cell mdl-cell--4-col mdl-cell--3-col-desktop")
|
57
|
+
%use(xlink:href="#piechart" mask="url(#piemask)")
|
58
|
+
%text(x="0.5" y="0.5" font-family="Roboto" font-size="0.3" fill="#888" text-anchor="middle" dy="0.1")
|
59
|
+
82
|
60
|
+
%tspan(dy="-0.07" font-size="0.2") %
|
61
|
+
%svg(fill="currentColor" width="200px" height="200px" viewBox="0 0 1 1" class="demo-chart mdl-cell mdl-cell--4-col mdl-cell--3-col-desktop")
|
62
|
+
%use(xlink:href="#piechart" mask="url(#piemask)")
|
63
|
+
%text(x="0.5" y="0.5" font-family="Roboto" font-size="0.3" fill="#888" text-anchor="middle" dy="0.1")
|
64
|
+
82
|
65
|
+
%tspan(dy="-0.07" font-size="0.2") %
|
66
|
+
%div(class="mdl-shadow--2dp mdl-color--white mdl-cell mdl-cell--8-col")
|
67
|
+
%h2 Welcome aboard.
|
68
|
+
%div(class="demo-graphs mdl-shadow--2dp mdl-color--white mdl-cell mdl-cell--8-col")
|
69
|
+
%svg(fill="currentColor" viewBox="0 0 500 250" class="demo-graph")
|
70
|
+
%use(xlink:href="#chart")
|
71
|
+
%svg(fill="currentColor" viewBox="0 0 500 250" class="demo-graph")
|
72
|
+
%use(xlink:href="#chart")
|
73
|
+
%div(class="demo-cards mdl-cell mdl-cell--4-col mdl-cell--8-col-tablet mdl-grid mdl-grid--no-spacing")
|
74
|
+
%div(class="demo-options mdl-card mdl-color--orange-500 mdl-shadow--2dp mdl-cell mdl-cell--4-col mdl-cell--3-col-tablet mdl-cell--12-col-desktop")
|
75
|
+
%div(class="mdl-card__supporting-text mdl-color-text--blue-grey-50")
|
76
|
+
%h3 View options
|
77
|
+
%ul
|
78
|
+
%li
|
79
|
+
%label(for="chkbox1" class="mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect")
|
80
|
+
%input(type="checkbox" id="chkbox1" class="mdl-checkbox__input")
|
81
|
+
%span(class="mdl-checkbox__label") Identify key people
|
82
|
+
%li
|
83
|
+
%label(for="chkbox2" class="mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect")
|
84
|
+
%input(type="checkbox" id="chkbox2" class="mdl-checkbox__input")
|
85
|
+
%span(class="mdl-checkbox__label") Identify key places
|
86
|
+
%li
|
87
|
+
%label(for="chkbox3" class="mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect")
|
88
|
+
%input(type="checkbox" id="chkbox3" class="mdl-checkbox__input")
|
89
|
+
%span(class="mdl-checkbox__label") Identify key things
|
90
|
+
%li
|
91
|
+
%label(for="chkbox4" class="mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect")
|
92
|
+
%input(type="checkbox" id="chkbox4" class="mdl-checkbox__input")
|
93
|
+
%span(class="mdl-checkbox__label") Make something!
|
94
|
+
%div(class="mdl-card__actions mdl-card--border")
|
95
|
+
%a(href="#" class="mdl-button mdl-js-button mdl-js-ripple-effect mdl-color-text--blue-grey-50") Lets get started!
|
96
|
+
%div(class="mdl-layout-spacer")
|
97
|
+
%i(class="material-icons") location_on
|
98
|
+
%div(class="demo-separator mdl-cell--1-col")
|
99
|
+
%div(class="demo-updates mdl-card mdl-shadow--2dp mdl-cell mdl-cell--4-col mdl-cell--4-col-tablet mdl-cell--12-col-desktop")
|
100
|
+
%div(class="mdl-card__title mdl-card--expand mdl-color--teal-300")
|
101
|
+
%h2(class="mdl-card__title-text") Updates
|
102
|
+
%div(class="mdl-card__supporting-text mdl-color-text--grey-600")
|
103
|
+
Non dolore elit adipisicing ea reprehenderit consectetur culpa.
|
104
|
+
%div(class="mdl-card__actions mdl-card--border")
|
105
|
+
%a(href="#" class="mdl-button mdl-js-button mdl-js-ripple-effect") Read More
|
106
|
+
|
107
|
+
%svg(style="position: fixed; left: -1000px; height: -1000px;" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink")
|
108
|
+
%defs
|
109
|
+
%mask(id="piemask" maskContentUnits="objectBoundingBox")
|
110
|
+
%circle(cx="0.5" cy="0.5" fill="white" r="0.49")
|
111
|
+
%circle(cx="0.5" cy="0.5" fill="black" r="0.40")
|
112
|
+
%g(id="piechart")
|
113
|
+
%circle(cx="0.5" cy="0.5" r="0.5")
|
114
|
+
%path(d="M 0.5 0.5 0.5 0 A 0.5 0.5 0 0 1 0.95 0.28 z" fill="rgba(255, 255, 255, 0.75)" stroke="none")
|
115
|
+
%svg(version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 500 250" style="position: fixed; left: -1000px; height: -1000px;")
|
116
|
+
%defs
|
117
|
+
%g(id="chart")
|
118
|
+
%g(id="Gridlines")
|
119
|
+
%line(fill="#888888" stroke="#888888" stroke-miterlimit="10" x1="0" y1="27.3" x2="468.3" y2="27.3")
|
120
|
+
%line(fill="#888888" stroke="#888888" stroke-miterlimit="10" x1="0" y1="66.7" x2="468.3" y2="66.7")
|
121
|
+
%line(fill="#888888" stroke="#888888" stroke-miterlimit="10" x1="0" y1="105.3" x2="468.3" y2="105.3")
|
122
|
+
%line(fill="#888888" stroke="#888888" stroke-miterlimit="10" x1="0" y1="144.7" x2="468.3" y2="144.7")
|
123
|
+
%line(fill="#888888" stroke="#888888" stroke-miterlimit="10" x1="0" y1="184.3" x2="468.3" y2="184.3")
|
124
|
+
%g(id="Numbers")
|
125
|
+
%text(transform="matrix(1 0 0 1 485 29.3333)" fill="#888888" font-family="'Roboto'" font-size="9") 500
|
126
|
+
%text(transform="matrix(1 0 0 1 485 69)" fill="#888888" font-family="'Roboto'" font-size="9") 400
|
127
|
+
%text(transform="matrix(1 0 0 1 485 109.3333)" fill="#888888" font-family="'Roboto'" font-size="9") 300
|
128
|
+
%text(transform="matrix(1 0 0 1 485 149)" fill="#888888" font-family="'Roboto'" font-size="9") 200
|
129
|
+
%text(transform="matrix(1 0 0 1 485 188.3333)" fill="#888888" font-family="'Roboto'" font-size="9") 100
|
130
|
+
%text(transform="matrix(1 0 0 1 0 249.0003)" fill="#888888" font-family="'Roboto'" font-size="9") 1
|
131
|
+
%text(transform="matrix(1 0 0 1 78 249.0003)" fill="#888888" font-family="'Roboto'" font-size="9") 2
|
132
|
+
%text(transform="matrix(1 0 0 1 154.6667 249.0003)" fill="#888888" font-family="'Roboto'" font-size="9") 3
|
133
|
+
%text(transform="matrix(1 0 0 1 232.1667 249.0003)" fill="#888888" font-family="'Roboto'" font-size="9") 4
|
134
|
+
%text(transform="matrix(1 0 0 1 309 249.0003)" fill="#888888" font-family="'Roboto'" font-size="9") 5
|
135
|
+
%text(transform="matrix(1 0 0 1 386.6667 249.0003)" fill="#888888" font-family="'Roboto'" font-size="9") 6
|
136
|
+
%text(transform="matrix(1 0 0 1 464.3333 249.0003)" fill="#888888" font-family="'Roboto'" font-size="9") 7
|
137
|
+
%g(id="Layer_5")
|
138
|
+
%polygon(opacity="0.36" stroke-miterlimit="10" points="0,223.3 48,138.5 154.7,169 211,88.5 294.5,80.5 380,165.2 437,75.5 469.5,223.3")
|
139
|
+
%g(id="Layer_4")
|
140
|
+
%polygon(stroke-miterlimit="10" points="469.3,222.7 1,222.7 48.7,166.7 155.7,188.3 212,132.7 296.7,128 380.7,184.3 436.7,125")
|
@@ -1,11 +1,6 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
%
|
4
|
-
|
5
|
-
|
6
|
-
%
|
7
|
-
%section{ class: "card hoverable bubble" }
|
8
|
-
.card-content
|
9
|
-
%p.sub-head.center
|
10
|
-
Powered By
|
11
|
-
%b Jobshop
|
1
|
+
%div.layout
|
2
|
+
%header
|
3
|
+
%div
|
4
|
+
%span(class="mdl-layout-title") Jobshop
|
5
|
+
%main
|
6
|
+
%object.logo{ type: "image/svg+xml", data: image_path("jobshop/logo.svg") }
|