comable_backend 0.4.2 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/comable/admin/application.coffee +53 -99
  3. data/app/assets/javascripts/comable/admin/categories.coffee +59 -0
  4. data/app/assets/javascripts/comable/admin/dashboard.coffee +32 -0
  5. data/app/assets/javascripts/comable/admin/dispatcher.coffee +21 -0
  6. data/app/assets/javascripts/comable/admin/orders.coffee +44 -0
  7. data/app/assets/javascripts/comable/admin/pages.coffee +69 -0
  8. data/app/assets/javascripts/comable/admin/products.coffee +21 -0
  9. data/app/assets/javascripts/comable/admin/search.coffee +35 -0
  10. data/app/assets/javascripts/comable/admin/themes.coffee +64 -0
  11. data/app/assets/stylesheets/comable/admin/_common.scss +1 -163
  12. data/app/assets/stylesheets/comable/admin/_overrides.scss +1 -0
  13. data/app/assets/stylesheets/comable/admin/_pages.scss +30 -0
  14. data/app/assets/stylesheets/comable/admin/_themes.scss +71 -0
  15. data/app/assets/stylesheets/comable/admin/_user_sessions.scss +4 -4
  16. data/app/assets/stylesheets/comable/admin/_variables.scss +16 -19
  17. data/app/assets/stylesheets/comable/admin/application.scss +6 -1
  18. data/app/assets/stylesheets/comable/admin/overrides/awesome_admin_layout.scss +25 -0
  19. data/app/assets/stylesheets/comable/admin/overrides/bootstrap.scss +5 -12
  20. data/app/controllers/comable/admin/orders_controller.rb +5 -1
  21. data/app/controllers/comable/admin/pages_controller.rb +72 -0
  22. data/app/controllers/comable/admin/themes_controller.rb +101 -0
  23. data/app/controllers/comable/admin/user_sessions_controller.rb +1 -0
  24. data/app/controllers/comable/admin/users_controller.rb +5 -0
  25. data/app/helpers/comable/admin/application_helper.rb +4 -4
  26. data/app/helpers/comable/admin/pages_helper.rb +6 -0
  27. data/app/helpers/comable/admin/themes_helper.rb +69 -0
  28. data/app/views/comable/admin/categories/index.slim +1 -52
  29. data/app/views/comable/admin/dashboard/show.slim +3 -23
  30. data/app/views/comable/admin/orders/_google_map.slim +26 -9
  31. data/app/views/comable/admin/orders/edit.slim +62 -4
  32. data/app/views/comable/admin/pages/_form.slim +69 -0
  33. data/app/views/comable/admin/pages/edit.slim +31 -0
  34. data/app/views/comable/admin/pages/index.slim +55 -0
  35. data/app/views/comable/admin/pages/new.slim +16 -0
  36. data/app/views/comable/admin/products/_form.slim +0 -16
  37. data/app/views/comable/admin/shared/_advanced_search.slim +0 -1
  38. data/app/views/comable/admin/shared/_notifier.slim +2 -2
  39. data/app/views/comable/admin/themes/_editor.slim +8 -0
  40. data/app/views/comable/admin/themes/_form.slim +31 -0
  41. data/app/views/comable/admin/themes/edit.slim +35 -0
  42. data/app/views/comable/admin/themes/index.slim +37 -0
  43. data/app/views/comable/admin/themes/new.slim +16 -0
  44. data/app/views/comable/admin/themes/show_file.slim +93 -0
  45. data/app/views/layouts/comable/admin/application.slim +19 -11
  46. data/config/initializers/awesome_admin_layout.rb +110 -0
  47. data/config/routes.rb +13 -0
  48. data/lib/comable/backend/engine.rb +8 -1
  49. metadata +117 -11
  50. data/app/assets/javascripts/comable/admin/products.js +0 -2
  51. data/app/views/comable/admin/shared/_header.slim +0 -31
  52. data/app/views/comable/admin/shared/_setup_search_form.slim +0 -14
  53. data/app/views/comable/admin/shared/_sidebar.slim +0 -54
@@ -0,0 +1,25 @@
1
+ #awesome_admin_layout {
2
+ font-size: larger;
3
+ }
4
+
5
+ .awesome_admin_layout-main {
6
+ margin: 0;
7
+ }
8
+
9
+ .awesome_admin_layout-navigation-toggle {
10
+ position: absolute;
11
+ z-index: 300;
12
+ // = .comable-page-heading's `padding`
13
+ padding: 25px 30px;
14
+ }
15
+
16
+ @media screen and (max-width: $screen-sm-min) {
17
+ .comable-main-fixed-top {
18
+ padding-left: 0 !important;
19
+ }
20
+
21
+ .comable-page-heading {
22
+ // = .comable-page-heading's `padding` + toggle button size + margin
23
+ padding-left: 30px + 34px + 20px !important;
24
+ }
25
+ }
@@ -1,15 +1,3 @@
1
- body {
2
- margin-top: $navbar-height;
3
- }
4
-
5
- .navbar {
6
- @include box-shadow(rgba(0, 0, 0, 0.3) 0 0 2px);
7
- }
8
-
9
- .navbar-default .navbar-nav > li > a:hover {
10
- @include transition(color 250ms ease, background-color 250ms ease);
11
- }
12
-
13
1
  .panel.panel-inverse {
14
2
  border: none;
15
3
 
@@ -86,3 +74,8 @@ table > tbody > tr > td > ul {
86
74
  .btn-link {
87
75
  outline: none !important;
88
76
  }
77
+
78
+ .form-group .radio-inline {
79
+ margin-top: 10px;
80
+ margin-right: 20px;
81
+ }
@@ -89,8 +89,12 @@ module Comable
89
89
  def order_params
90
90
  params.require(:order).permit(
91
91
  :email,
92
+ :payment_fee,
93
+ :shipment_fee,
94
+ :total_price,
92
95
  bill_address_attributes: permitted_address_attributes,
93
- ship_address_attributes: permitted_address_attributes
96
+ ship_address_attributes: permitted_address_attributes,
97
+ order_items_attributes: [:id, :name, :code, :price, :quantity]
94
98
  )
95
99
  end
96
100
  end
@@ -0,0 +1,72 @@
1
+ require_dependency 'comable/admin/application_controller'
2
+
3
+ module Comable
4
+ module Admin
5
+ class PagesController < Comable::Admin::ApplicationController
6
+ load_and_authorize_resource class: Comable::Page.name, except: :index, find_by: :slug
7
+
8
+ def index
9
+ @q = Comable::Page.ransack(params[:q])
10
+ @pages = @q.result.accessible_by(current_ability)
11
+ end
12
+
13
+ def show
14
+ edit
15
+ render :edit
16
+ end
17
+
18
+ def new
19
+ end
20
+
21
+ def edit
22
+ set_preview_session
23
+ end
24
+
25
+ def create
26
+ @page = Comable::Page.new(page_params)
27
+ @page.slug = @page.normalize_slug(page_params[:slug])
28
+
29
+ if @page.save
30
+ redirect_to comable.admin_page_path(@page), notice: Comable.t('successful')
31
+ else
32
+ render :new
33
+ end
34
+ end
35
+
36
+ def update
37
+ @page.attributes = page_params
38
+ @page.slug = @page.normalize_slug(page_params[:slug])
39
+
40
+ if @page.save
41
+ redirect_to comable.admin_page_path(@page), notice: Comable.t('successful')
42
+ else
43
+ render :edit
44
+ end
45
+ end
46
+
47
+ def destroy
48
+ @page.destroy
49
+ redirect_to comable.admin_pages_path, notice: Comable.t('successful')
50
+ end
51
+
52
+ private
53
+
54
+ def page_params
55
+ params.require(:page).permit(
56
+ :title, # コンテンツのタイトル
57
+ :content, # コンテンツ
58
+ :page_title, # ページのタイトル
59
+ :meta_description, # ディスクリプション
60
+ :meta_keywords, # キーワード
61
+ :slug, # スラグ
62
+ :published_at # 公開日時
63
+ )
64
+ end
65
+
66
+ def set_preview_session
67
+ session[Comable::Page::PREVIEW_SESSION_KEY] ||= {}
68
+ session[Comable::Page::PREVIEW_SESSION_KEY][@page.slug] = true
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,101 @@
1
+ require_dependency 'comable/admin/application_controller'
2
+
3
+ module Comable
4
+ module Admin
5
+ class ThemesController < Comable::Admin::ApplicationController
6
+ load_and_authorize_resource class: Comable::Theme.name, find_by: :name
7
+
8
+ def index
9
+ end
10
+
11
+ def show
12
+ render :edit
13
+ end
14
+
15
+ def new
16
+ @theme.attributes = {
17
+ version: @theme.default_version,
18
+ author: current_comable_user.bill_full_name || current_comable_user.email
19
+ }
20
+ end
21
+
22
+ def create
23
+ if @theme.save
24
+ redirect_to comable.admin_theme_path(@theme), notice: Comable.t('successful')
25
+ else
26
+ flash.now[:alert] = Comable.t('failure')
27
+ render :new
28
+ end
29
+ end
30
+
31
+ def edit
32
+ end
33
+
34
+ def update
35
+ if @theme.update_attributes(theme_params)
36
+ redirect_to comable.admin_theme_path(@theme), notice: Comable.t('successful')
37
+ else
38
+ flash.now[:alert] = Comable.t('failure')
39
+ render :edit
40
+ end
41
+ end
42
+
43
+ def destroy
44
+ @theme.destroy
45
+ FileUtils.rm_rf(theme_dir)
46
+ redirect_to comable.admin_themes_path, notice: Comable.t('successful')
47
+ end
48
+
49
+ def tree
50
+ render :show_file
51
+ end
52
+
53
+ def show_file
54
+ @code = File.read(filepath) if filepath && File.exist?(filepath)
55
+ end
56
+
57
+ def update_file
58
+ save_file
59
+ redirect_to comable.file_admin_theme_path(@theme, path: params[:path]), notice: Comable.t('successful')
60
+ rescue => e
61
+ @code = params[:code]
62
+ flash.now[:alert] = e.message
63
+ render :show_file
64
+ end
65
+
66
+ def use
67
+ current_store.update_attributes!(theme: @theme)
68
+ redirect_to :back, notice: Comable.t('successful')
69
+ end
70
+
71
+ private
72
+
73
+ def save_file
74
+ # Validate the Liquid syntax
75
+ Liquid::Template.parse(params[:code])
76
+
77
+ FileUtils.mkdir_p(File.dirname(filepath)) unless File.exist?(filepath)
78
+ File.write(filepath, params[:code])
79
+ end
80
+
81
+ def theme_dir
82
+ File.join('themes', @theme.name)
83
+ end
84
+
85
+ def filepath
86
+ return unless params[:path]
87
+ File.join(theme_dir, params[:path])
88
+ end
89
+
90
+ def theme_params
91
+ params.require(:theme).permit(
92
+ :name,
93
+ :version,
94
+ :display,
95
+ :homepage,
96
+ :author
97
+ )
98
+ end
99
+ end
100
+ end
101
+ end
@@ -1,6 +1,7 @@
1
1
  module Comable
2
2
  module Admin
3
3
  class UserSessionsController < Devise::SessionsController
4
+ helper Comable::Admin::ApplicationHelper
4
5
  layout 'comable/admin/application'
5
6
  end
6
7
  end
@@ -27,6 +27,11 @@ module Comable
27
27
  end
28
28
  end
29
29
 
30
+ def profile
31
+ @user = current_comable_user
32
+ render :edit
33
+ end
34
+
30
35
  private
31
36
 
32
37
  def user_params
@@ -18,10 +18,6 @@ module Comable
18
18
  link_to(name, 'javascript:void(0)', options.merge(onclick: "add_fields(this, '#{association}', '#{escape_javascript(fields)}')"))
19
19
  end
20
20
 
21
- def setup_search_form
22
- render('comable/admin/shared/setup_search_form')
23
- end
24
-
25
21
  def button_to_remove_fields(name, options = {})
26
22
  content_tag(:button, name, options.merge(class: "ransack remove_fields #{options[:class]}"))
27
23
  end
@@ -48,6 +44,10 @@ module Comable
48
44
  rescue NoMethodError
49
45
  false
50
46
  end
47
+
48
+ def page_name
49
+ [controller_name, action_name].join(':')
50
+ end
51
51
  end
52
52
  end
53
53
  end
@@ -0,0 +1,6 @@
1
+ module Comable
2
+ module Admin
3
+ module PagesHelper
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,69 @@
1
+ module Comable
2
+ module Admin
3
+ module ThemesHelper
4
+ def editable?
5
+ params[:path].present?
6
+ end
7
+
8
+ def display_views_directory_tree
9
+ views_direcotry_tree = load_directory_tree(views_dir)
10
+ build_directory_tree(views_direcotry_tree)
11
+ end
12
+
13
+ def liquidable_models
14
+ Comable.constants.map do |constant|
15
+ klass = "Comable::#{constant}".constantize
16
+ klass.constants.include?(:LiquidDropClass) ? klass : nil
17
+ end.compact
18
+ end
19
+
20
+ private
21
+
22
+ def views_dir
23
+ spec = Gem::Specification.find_by_name('comable_frontend')
24
+ fail 'Please install "comable_frontend" gem!' unless spec
25
+ "#{spec.gem_dir}/app/views"
26
+ end
27
+
28
+ def load_directory_tree(path, parent = nil)
29
+ children = []
30
+ tree = { (parent || :root) => children }
31
+
32
+ Dir.foreach(path) do |entry|
33
+ next if entry.start_with? '.'
34
+ fullpath = File.join(path, entry)
35
+ children << (File.directory?(fullpath) ? load_directory_tree(fullpath, entry.to_sym) : entry.sub(/\..+$/, '.liquid'))
36
+ end
37
+
38
+ tree
39
+ end
40
+
41
+ def build_directory_tree(tree, dirpath = nil)
42
+ content_tag(:dl, build_directory_tree_nodes(tree, dirpath))
43
+ end
44
+
45
+ def build_directory_tree_nodes(tree, dirpath)
46
+ entries = tree.values.first
47
+ entries.map do |entry|
48
+ if entry.is_a? Hash
49
+ build_directory_tree_children(entry, dirpath)
50
+ else
51
+ build_directory_tree_child(entry, dirpath)
52
+ end
53
+ end.join.html_safe
54
+ end
55
+
56
+ def build_directory_tree_children(entry, dirpath)
57
+ dirname = entry.keys.first.to_s
58
+ path = dirpath ? File.join(dirpath, dirname) : dirname
59
+ content_tag(:dt, dirname) + build_directory_tree(entry, path)
60
+ end
61
+
62
+ def build_directory_tree_child(filename, dirpath)
63
+ path = File.join(dirpath, filename)
64
+ link = link_to(filename, comable.file_admin_theme_path(@theme, path: path))
65
+ content_tag(:dd, link)
66
+ end
67
+ end
68
+ end
69
+ end
@@ -1,8 +1,3 @@
1
- / TODO: Use downloaded files
2
- = javascript_include_tag 'http://rawgit.com/vakata/jstree/3.0.9/dist/jstree.min.js'
3
- = content_for :head do
4
- = stylesheet_link_tag 'http://rawgit.com/vakata/jstree/3.0.9/dist/themes/default/style.min.css', media: 'all'
5
-
6
1
  / TODO: Move to a file.
7
2
  javascript:
8
3
  comable_jstree_json = #{raw @categories.to_jstree(state: { opened: true }, icon: 'fa fa-bars')};
@@ -12,52 +7,6 @@ javascript:
12
7
  comable_action_destroy = '#{Comable.t('admin.actions.destroy')}';
13
8
  comable_destroied_nodes = [];
14
9
 
15
- coffee:
16
- jQuery(->
17
- $comable_jstree = $('#comable-jstree')
18
- $comable_jstree.jstree({
19
- core: {
20
- check_callback: true,
21
- data: comable_jstree_json,
22
- strings : { new_node: comable_new_node_label, icon: 'fa fa-bars' }
23
- },
24
- contextmenu: {
25
- items: ($node) ->
26
- _this = $comable_jstree.jstree(true)
27
- {
28
- create: {
29
- label: comable_action_new,
30
- action: -> create_new_node($node)
31
- }
32
- edit: {
33
- label: comable_action_edit,
34
- action: -> _this.edit($node)
35
- }
36
- destory: {
37
- label: comable_action_destroy,
38
- action: ->
39
- comable_destroied_nodes.push { _destroy: $node.id }
40
- _this.delete_node($node)
41
- }
42
- }
43
- },
44
- plugins: ['dnd', 'wholerow', 'contextmenu']
45
- })
46
-
47
- window.create_new_node = ($node = '#') ->
48
- jstree = $comable_jstree.jstree(true)
49
- new_node = jstree.create_node($node)
50
- jstree.open_node($node) unless jstree.is_open($node)
51
- jstree.rename_node(new_node, comable_new_node_label)
52
- jstree.set_icon(new_node, 'fa fa-bars')
53
-
54
- $('form').submit(->
55
- json = $comable_jstree.jstree(true).get_json().concat(comable_destroied_nodes)
56
- json_string = JSON.stringify(json)
57
- $(this).find('#jstree_json').val(json_string)
58
- )
59
- )
60
-
61
10
  .comable-page
62
11
  .comable-main-fixed-top
63
12
  .comable-page-heading
@@ -81,7 +30,7 @@ coffee:
81
30
  = Comable.t('admin.you_can_right_click')
82
31
  li
83
32
  = Comable.t('admin.link_to_add_new_node')
84
- = link_to Comable.t('admin.actions.new'), 'javascript:create_new_node()'
33
+ = link_to Comable.t('admin.actions.new'), 'javascript:void(0)', onclick: 'add_comable_jstree_node()'
85
34
 
86
35
  .col-md-9
87
36
  #comable-jstree
@@ -38,26 +38,6 @@
38
38
  #comable-morris.morris style="height: 300px;"
39
39
 
40
40
  javascript:
41
- morris_data = #{raw @this_month_orders.to_morris};
42
- morris_keys = #{raw Comable::Order.morris_keys};
43
- morris_labels = ['#{Comable.t('admin.order_count')}', '#{Comable.t('admin.sales')}'];
44
-
45
- coffee:
46
- new Morris.Line({
47
- # ID of the element in which to draw the chart.
48
- element: 'comable-morris',
49
- # Chart data records -- each entry in this array corresponds to a point on
50
- # the chart.
51
- data: morris_data,
52
- # The name of the data record attribute that contains x-values.
53
- xkey: 'date',
54
- # A list of names of data record attributes that contain y-values.
55
- ykeys: morris_keys,
56
- # Labels for the ykeys -- will be displayed when you hover over the
57
- # chart.
58
- labels: morris_labels,
59
- xLabelAngle: 45,
60
- xLabels: ['day'],
61
- lineColors: ['#00acac', '#348fe2'],
62
- hideHover: 'auto'
63
- })
41
+ comable_morris_data = #{raw @this_month_orders.to_morris};
42
+ comable_morris_keys = #{raw Comable::Order.morris_keys};
43
+ comable_morris_labels = ['#{Comable.t('admin.order_count')}', '#{Comable.t('admin.sales')}'];