sculptor 0.0.5 → 0.0.6

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.
Files changed (25) hide show
  1. checksums.yaml +4 -4
  2. data/features/create.feature +1 -1
  3. data/lib/sculptor/extensions/model.rb +4 -10
  4. data/lib/sculptor/extensions/resource_helpers.rb +48 -10
  5. data/lib/sculptor/templates/glyptotheque/bower.json +2 -1
  6. data/lib/sculptor/templates/glyptotheque/config.tt +7 -3
  7. data/lib/sculptor/templates/glyptotheque/source/assets/js/glyptotheque/directives.js +100 -3
  8. data/lib/sculptor/templates/glyptotheque/source/assets/js/glyptotheque/services.js +10 -0
  9. data/lib/sculptor/templates/glyptotheque/source/assets/js/glyptotheque.js +1 -1
  10. data/lib/sculptor/templates/glyptotheque/source/assets/js/head-js.js +1 -0
  11. data/lib/sculptor/templates/glyptotheque/source/assets/styles/glyptotheque/_base.scss +3 -0
  12. data/lib/sculptor/templates/glyptotheque/source/assets/styles/glyptotheque/_model.scss +23 -11
  13. data/lib/sculptor/templates/glyptotheque/source/assets/styles/glyptotheque/_nav.scss +58 -25
  14. data/lib/sculptor/templates/glyptotheque/source/index.html.slim +2 -0
  15. data/lib/sculptor/templates/glyptotheque/source/layouts/glyptotheque.slim +7 -1
  16. data/lib/sculptor/templates/glyptotheque/source/layouts/layout.slim +9 -0
  17. data/lib/sculptor/templates/glyptotheque/source/layouts/standalone.slim +0 -5
  18. data/lib/sculptor/templates/glyptotheque/source/partials/glyptotheque/_model-index.slim +1 -1
  19. data/lib/sculptor/templates/glyptotheque/source/partials/glyptotheque/_model.slim +6 -4
  20. data/lib/sculptor/templates/glyptotheque/source/partials/glyptotheque/menu-node.html.slim +4 -0
  21. data/lib/sculptor/templates/glyptotheque/source/partials/glyptotheque/menu-tree.html.slim +2 -0
  22. data/lib/sculptor/templates/glyptotheque/source/partials/glyptotheque/menu.html.slim +6 -0
  23. data/lib/sculptor/templates/glyptotheque/source/sitemap.json.erb +1 -0
  24. data/lib/sculptor/version.rb +1 -1
  25. metadata +8 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: dffb8ea04c521d95c5b4a3aa8468f635c67a6cd5
4
- data.tar.gz: 13cf6b9f167eaeaa75f8762d24a5406a7251cf81
3
+ metadata.gz: 0998c3135981e68e250208f6d01ffe29a29c2cad
4
+ data.tar.gz: be766184b00d881880a4e255a4eda8bbafc8e0fe
5
5
  SHA512:
6
- metadata.gz: 574b32b613f17077cd46ab3ab365fdd708ede391f6d9a604fa90a52f0d7980773ff91357f42b42ab7160ee349b19c766a05adc413db42f41c1de0c7461a92edb
7
- data.tar.gz: aaf0138fde4d976a4adf07582cb877d6671df585d720edacc2011f25f3010eb889811526511d71ef2f2c617b117d8cf39da02dbb16c5f3e4eebdbeb095fbf8f6
6
+ metadata.gz: 56b2661f084d79c600c2a675142c11546b061597c95b5967baaef5ad87f8f21b60315fa07dedad20cef1c0d651e683edfa6f13f4dd26bf7e05fe397ca420f55b
7
+ data.tar.gz: abdbe843c9b9193c494657ef4d9cefdeaed1722a08120227d386350ee31b9029304b73fee8d9983014f340c10a2fb2e5a8bbdb9ec52ab6157b1cab023115386c
@@ -35,6 +35,6 @@ Feature: Run `create` command
35
35
  And a directory named "source/test" should exist
36
36
  Then the file "source/test/test.html.slim" should contain "Hello World"
37
37
  And the file "source/test/test.html.slim" should contain "My model description"
38
- And the file "source/test/index.html.slim" should contain "'partials/glyptotheque/model-index', locals: { dir: '/test' }"
38
+ And the file "source/test/index.html.slim" should contain "'partials/glyptotheque/model-index'"
39
39
  And the file "source/test/test.yaml" should contain "hello: World"
40
40
  And the file "source/test/styles.scss" should contain "@import 'bourbon'"
@@ -31,21 +31,15 @@ class Middleman::Extensions::Model < ::Middleman::Extension
31
31
  html = result.to_html
32
32
  # Assume local path
33
33
  else
34
- resource = sitemap.find_resource_by_path(relative_dir(current_page.path, location).to_s)
35
- raise "Included model at `#{location}` was not found" unless resource
36
- metadata = resource.metadata.page
37
-
38
- # Hack: inject local data that can be provided as parameter
39
- # Provided under `data.page` in partials (.component)
40
- resource.add_metadata({ page: options[:data] || {} })
41
-
42
- html = resource.render(layout: false)
34
+ html = partial(relative_dir(current_page.path, location).to_s)
43
35
  end
44
36
  else
45
37
  raise "Model `#{options[:title]}`: `url` or HTML block is missing"
46
38
  end
47
39
 
48
- options.reverse_merge!(metadata.symbolize_keys!)
40
+ if metadata
41
+ options.reverse_merge!(metadata.symbolize_keys!)
42
+ end
49
43
 
50
44
  options[:title] = options[:title] || data.page.title
51
45
  options[:description] = options[:description] || data.page.description
@@ -21,19 +21,30 @@ class Middleman::Extensions::ResourceHelpers < ::Middleman::Extension
21
21
  resource.url.split('/').last
22
22
  end
23
23
 
24
- def resources_for(dir, ext: 'html', exclude_indexes: false, sort_by: nil)
25
- resources = sitemap.resources
26
- .select {|r| r.ext == ".#{ext}"} # Select files only HTML files
24
+ def resources_for(dir, ext: 'html', exclude_indexes: false, sort_by: nil, ignore: nil)
25
+ filtered = sitemap.resources
26
+ .reject {|r| r.url == dir} # Exclude main directory index
27
27
  .reject {|r| r.data.hidden} # reject hidden (Front matter)
28
28
  .select {|r| r.url.start_with?(dir)} # Select files in the given dir
29
- .sort_by {|r| r.url } # Sort by url (default)
30
- .sort_by {|r| r.data[sort_by] || -1} # Sort by `sort_by` param
31
- .reject {|r| r.url == dir} # Exclude main directory index
32
- .reject {|r| # Exclude all directory indexes
33
- exclude_indexes ? r.directory_index? : false
34
- }
35
29
 
36
- resources.reject {|r| r.path.end_with? ("-standalone#{r.ext}")} # Ignore proxied '-standalone' mode pages
30
+ collect_resources(filtered,
31
+ { ext: ext, exclude_indexes: exclude_indexes, sort_by: sort_by, ignore: ignore}
32
+ )
33
+ end
34
+
35
+ def resource_tree(dir, ext: 'html', data_fields: [:title], exclude_indexes: false, sort_by: nil, ignore: nil)
36
+ res = resources_for(dir, ext: ext, exclude_indexes: exclude_indexes, sort_by: sort_by, ignore: ignore)
37
+ res
38
+ .select { |r| r.children.any? }
39
+ .map { |r| parse_resource(r, {
40
+ ext: ext,
41
+ data_fields: data_fields,
42
+ exclude_indexes: exclude_indexes,
43
+ sort_by: sort_by,
44
+ ignore: ignore
45
+ })
46
+ }
47
+ .reject { |r| r.parent != '/' } # Remove non-root directories from the root
37
48
  end
38
49
 
39
50
  def local_data(path)
@@ -81,6 +92,33 @@ class Middleman::Extensions::ResourceHelpers < ::Middleman::Extension
81
92
 
82
93
  private
83
94
 
95
+ def collect_resources(resources, options)
96
+ resources
97
+ .select {|r| r.ext == ".#{options[:ext]}"} # Select files only HTML files
98
+ .sort_by {|r| r.url } # Sort by url (default)
99
+ .sort_by {|r| r.data[options[:sort_by]] || -1} # Sort by `sort_by` param
100
+ .reject {|r| # Exclude all directory indexes
101
+ options[:exclude_indexes] ? r.directory_index? : false
102
+ }
103
+ .reject {|r| ignore ? r.url.match(options[:ignore]) : false } # Ignore URLs matching pattern (if provided)
104
+ .reject {|r| r.path.end_with? ("-standalone#{r.ext}")} # Ignore proxied '-standalone' mode pages
105
+ .reject {|r| r.path.start_with? ("partials/")} # Ignore partials
106
+ end
107
+
108
+ def parse_resource(r, options)
109
+ data = {}
110
+ data[:url] = r.url
111
+ data[:children] = collect_resources(r.children, options).map { |c| parse_resource(c, options) } if r.children.any?
112
+ data[:parent] = r.parent.url
113
+ options[:data_fields].each do |field|
114
+ if field == :title
115
+ data[:title] = r.data.title || resource_dir(r)
116
+ end
117
+ data[field] = r.data[field]
118
+ end
119
+ data
120
+ end
121
+
84
122
  def include_assets(asset_tag, assets)
85
123
  return unless assets
86
124
  assets = assets.split(/,\s*/) if assets.is_a? String
@@ -6,6 +6,7 @@
6
6
  "normalize.css": "*",
7
7
  "angular": "~1.2.16",
8
8
  "lodash": "*",
9
- "mousetrap": "~1.4.6"
9
+ "mousetrap": "~1.4.6",
10
+ "store": "~2.1.6"
10
11
  }
11
12
  }
@@ -4,12 +4,12 @@
4
4
 
5
5
  # With alternative layout
6
6
  page '/**', :layout => 'glyptotheque'
7
- page '/*-standalone.html', :layout => 'standalone'
8
7
  # With no layout
9
8
  page "*.component", :layout => false
10
- page "/partials/*", :layout => false
9
+ page "/partials/*", :layout => false, directory_index: false
11
10
  page '*.css', :layout => false
12
11
  page '*.js', :layout => false
12
+ page '*.json', :layout => false
13
13
 
14
14
  # Meta redirects
15
15
  # redirect 'index.html', to: 'prototypes/sample'
@@ -20,8 +20,12 @@ page '*.js', :layout => false
20
20
  # end
21
21
 
22
22
  ready do
23
+ # Create mappings for standalone (implementation) pages (iframe embeddable)
23
24
  resources_for('/', exclude_indexes: true).each do |r|
24
- proxy "#{r.path.sub(r.ext, '')}-standalone.html", r.path
25
+ proxy "#{r.path.sub(r.ext, '')}-standalone.html", r.path, layout: 'standalone'
26
+ end
27
+ resources_for('/').each do |r|
28
+ proxy "#{r.path.sub(r.ext, '')}/standalone", r.path, layout: 'standalone'
25
29
  end
26
30
  end
27
31
 
@@ -1,24 +1,121 @@
1
1
  angular.module('directives', [])
2
+
2
3
  .directive('glyptoModel', function($compile, $http, $templateCache) {
3
4
  return {
4
5
  restrict: 'C',
5
6
  scope: true
6
7
  };
7
8
  })
8
- .directive('navToggle', function() {
9
+
10
+ .directive('glyptoNavToggle', function() {
9
11
  return {
10
12
  restrict: 'C',
11
13
  link: function($scope, $element, $attrs) {
12
- $scope.hidden = false;
14
+ $scope.hidden = store.get('glypto-menu-hidden');
13
15
 
14
- Mousetrap.bind('f', function() {
16
+ Mousetrap.bind('command+shift+e', function() {
15
17
  $scope.toggle();
16
18
  $scope.$apply();
17
19
  });
18
20
 
19
21
  $scope.toggle = function() {
20
22
  $scope.hidden = !$scope.hidden;
23
+ store.set('glypto-menu-hidden', $scope.hidden);
21
24
  };
22
25
  }
23
26
  };
27
+ })
28
+
29
+ .directive('glyptoMenu', function(relativePathToRoot) {
30
+ return {
31
+ restrict: 'E',
32
+ replace: true,
33
+ scope: true,
34
+ templateUrl: function() {
35
+ return relativePathToRoot() + 'partials/glyptotheque/menu.html';
36
+ },
37
+ controller: function($scope) {
38
+ $scope.items = window.APP_CONTEXT.sitemap;
39
+ },
40
+ link: function() {
41
+ // Remove nav placeholder when menu is created
42
+ angular.element(document.getElementById('glypto-nav-placeholder')).remove();
43
+ }
44
+ };
45
+ })
46
+
47
+ .directive('glyptoMenuTree', function(relativePathToRoot) {
48
+ return {
49
+ restrict: 'E',
50
+ replace: true,
51
+ transclude: true,
52
+ scope: {
53
+ items: '=',
54
+ filter: '='
55
+ },
56
+ templateUrl: function() {
57
+ return relativePathToRoot() + 'partials/glyptotheque/menu-tree.html';
58
+ },
59
+ link: function($scope, $element, $attrs) {
60
+ $scope.relativeUrl = function(url) {
61
+ return relativePathToRoot() + url.slice(1);
62
+ };
63
+ }
64
+ };
65
+ })
66
+
67
+ .directive('glyptoMenuNode', function($compile, relativePathToRoot) {
68
+ return {
69
+ restrict: 'E',
70
+ replace: true,
71
+ templateUrl: function() {
72
+ return relativePathToRoot() + 'partials/glyptotheque/menu-node.html';
73
+ },
74
+ link: function($scope, $element, $attrs) {
75
+ $scope.relativeUrl = function(url) {
76
+ return relativePathToRoot() + url.slice(1);
77
+ };
78
+
79
+ $scope.isSelected = $scope.node.url === window.APP_CONTEXT.current_url;
80
+
81
+ if ($scope.node.children && $scope.node.children.length > 0) {
82
+ var childNode = $compile('<glypto-menu-tree items="node.children" filter="filter"></glypto-menu-tree>')($scope);
83
+ $element.append(childNode);
84
+ }
85
+ }
86
+ };
87
+ })
88
+
89
+ .directive('glyptoSearch', function() {
90
+ return {
91
+ restrict: 'A',
92
+ link: function($scope, $element, $attrs) {
93
+ var activated;
94
+ var placeholderText = $element.attr('placeholder');
95
+
96
+ Mousetrap.bind('/', function(evt) {
97
+ if(!activated) {
98
+ evt.preventDefault();
99
+ }
100
+ $element[0].focus();
101
+ $element.attr('placeholder', placeholderText.replace(/\(.*\)/, ''));
102
+ });
103
+
104
+ Mousetrap.bind('esc', function(evt) {
105
+ if(!activated) {
106
+ evt.preventDefault();
107
+ }
108
+ $element[0].blur();
109
+ $element.attr('placeholder', placeholderText);
110
+ });
111
+
112
+ $element.on('focus', function() {
113
+ activated = true;
114
+ });
115
+
116
+ $element.on('blur', function() {
117
+ activated = false;
118
+ });
119
+ }
120
+ };
24
121
  });
@@ -0,0 +1,10 @@
1
+ angular.module('services', [])
2
+
3
+ .factory('relativePathToRoot', function($window) {
4
+ return function() {
5
+ var pathToRoot = $window.location.pathname.replace(/\/$/, '').split('/').slice(1).map(function() {
6
+ return '../';
7
+ }).join('');
8
+ return pathToRoot;
9
+ };
10
+ });
@@ -1,3 +1,3 @@
1
1
  //= require_tree ./glyptotheque
2
2
 
3
- angular.module('glyptotheque', ['directives', 'controllers']);
3
+ angular.module('glyptotheque', ['directives', 'controllers', 'services']);
@@ -0,0 +1 @@
1
+ //= require store
@@ -10,5 +10,8 @@ body {
10
10
  .glyptotheque {
11
11
  padding: 35px 20px;
12
12
  min-height: 100%;
13
+ overflow: hidden;
13
14
  background: lighten($light-grey, 5);
15
+ box-shadow: -1px 0 0 rgba(black, .1);
16
+ position: relative;
14
17
  }
@@ -9,9 +9,9 @@
9
9
  > header {
10
10
  @include clearfix;
11
11
  font-family: 'Helvetica Neue', Helvetica, sans-serif;
12
- background: lighten($light-grey, 9);
12
+ background: white;
13
13
  position: relative;
14
- padding: 10px 20px;
14
+ padding: 10px 15px;
15
15
  margin-bottom: 2px;
16
16
  min-height: 40px;
17
17
 
@@ -49,22 +49,34 @@
49
49
  }
50
50
 
51
51
  > .glypto-model-stage {
52
- background: lighten($light-grey, 9);
53
- padding: 10px;
52
+ $_padding: 15px;
53
+
54
+ position: relative;
55
+ background: white;
56
+ padding: $_padding;
57
+
58
+ &:before {
59
+ @include transition(300ms);
60
+ @include position(absolute, $_padding $_padding $_padding $_padding);
61
+ margin: -1px;
62
+ box-shadow: 0 0 0 1px transparent;
63
+ content: '';
64
+ }
65
+
66
+ &:hover:before {
67
+ box-shadow: 0 0 0 1px rgba(black, .1);
68
+ }
54
69
 
55
70
  > figure,
56
71
  > iframe {
57
72
  @include box-sizing(content-box);
58
- margin: 0;
59
- border-radius: 3px;
60
- border: 1px dotted rgba(0,0,0,.13);
61
- background: white;
62
73
  display: block;
74
+ margin: 0;
75
+ position: relative;
63
76
  }
64
77
 
65
78
  > figure {
66
79
  @include clearfix;
67
- padding: 5px;
68
80
  }
69
81
 
70
82
  ._component {
@@ -95,7 +107,7 @@
95
107
  box-shadow: inset 0 1px darken($light-grey, 5);
96
108
 
97
109
  > header {
98
- padding: 8px 20px;
110
+ padding: 8px 15px;
99
111
  }
100
112
 
101
113
  ._toggle {
@@ -138,7 +150,7 @@
138
150
 
139
151
  pre {
140
152
  font: 12px/1.4 Menlo, monospace;
141
- padding: 10px 20px;
153
+ padding: 10px 15px;
142
154
  margin: 0;
143
155
  white-space: pre-wrap;
144
156
  }
@@ -1,24 +1,41 @@
1
- .glypto-nav {
2
- @include transition(140ms ease-out);
1
+ .glypto-nav,
2
+ #glypto-nav-placeholder {
3
3
  float: left;
4
4
  width: $glypto-nav-width;
5
- color: #444;
5
+ min-height: 1px;
6
+ }
6
7
 
7
- & + .glyptotheque {
8
- @include transition(140ms ease-out);
9
- margin-left: $glypto-nav-width;
10
- border-left: 1px solid rgba(black, .15);
11
- }
8
+ .glypto-nav {
9
+ @include transition(120ms ease-out);
10
+ color: #444;
12
11
 
13
12
  &.s-hidden {
14
13
  margin-left: -$glypto-nav-width;
14
+ }
15
15
 
16
- & + .glyptotheque {
17
- margin-left: 0;
16
+ .search {
17
+ padding: 5px;
18
+ background: rgba(black, .06);
19
+ box-shadow: 0 1px 0 rgba(white, .2);
20
+
21
+ input {
22
+ @include box-sizing(border-box);
23
+ border: 1px solid rgba(black, .2);
24
+ background: rgba(white, .6);
25
+ padding: 4px;
26
+ font-size: 14px;
27
+ display: block;
28
+ width: 100%;
29
+ outline: none;
30
+
31
+ &:focus {
32
+ border-color: rgba(black, .4);
33
+ background: rgba(white, .8);
34
+ }
18
35
  }
19
36
  }
20
37
 
21
- > .nav-toggle {
38
+ > .glypto-nav-toggle {
22
39
  @include size(30px);
23
40
  padding: 0;
24
41
  background: none;
@@ -26,6 +43,7 @@
26
43
  float: right;
27
44
  margin-right: -31px;
28
45
  position: relative;
46
+ z-index: 1;
29
47
  cursor: pointer;
30
48
  opacity: .5;
31
49
  outline: none;
@@ -57,7 +75,7 @@
57
75
  }
58
76
 
59
77
  ._logo + ul:before,
60
- li:after {
78
+ > ul > li:after {
61
79
  @include background(linear-gradient(to right, transparent, rgba(black, .06)));
62
80
  height: 1px;
63
81
  display: block;
@@ -66,11 +84,13 @@
66
84
 
67
85
  a {
68
86
  display: block;
69
- padding: 8px 10px 8px 16px;
70
- color: #777;
87
+ padding: 8px 10px;
88
+ color: inherit;
71
89
  text-decoration: none;
90
+ outline: none;
72
91
 
73
- &:hover {
92
+ &:hover,
93
+ &:focus {
74
94
  color: inherit;
75
95
  background: rgba(black, .03);
76
96
  }
@@ -82,14 +102,9 @@
82
102
  }
83
103
 
84
104
  li._index {
85
- font-size: .9em;
86
- font-weight: 600;
87
- letter-spacing: 1px;
88
- text-transform: uppercase;
89
-
90
- a {
91
- color: inherit;
92
- padding: 8px 10px;
105
+ > a {
106
+ letter-spacing: 1px;
107
+ font-weight: 600;
93
108
  }
94
109
 
95
110
  ._count {
@@ -102,14 +117,32 @@
102
117
  line-height: 16px;
103
118
  border-radius: 7px;
104
119
  }
120
+
121
+ ul {
122
+ a:before {
123
+ content: '';
124
+ margin: 0 5px;
125
+ }
126
+
127
+ ul a:before {
128
+ margin-left: 15px;
129
+ }
130
+
131
+ li:not(._index) a:before {
132
+ content: '•';
133
+ }
134
+ }
105
135
  }
106
136
 
107
- li.s-selected a {
137
+ li.s-selected > a {
108
138
  color: inherit;
109
139
  background: rgba(#b5cdd9, .5);
110
140
  }
111
141
 
112
142
  a._logo {
113
- background: none;
143
+ background: rgba(black, .2);
144
+ color: white;
145
+ border-bottom: 1px solid rgba(black, .1);
146
+ margin-bottom: -1px;
114
147
  }
115
148
  }
@@ -1,3 +1,5 @@
1
1
  - if resources_for('/').empty?
2
2
  h1 Go ahead, create some models
3
3
  p: code sculptor create hello
4
+ - else
5
+ = partial 'partials/glyptotheque/model-index'
@@ -3,6 +3,12 @@
3
3
  - content_for :stylesheets, stylesheet_link_tag('glyptotheque')
4
4
 
5
5
  = wrap_layout :layout do
6
- = partial 'partials/glyptotheque/nav'
6
+ glypto-menu
7
7
  main.glyptotheque
8
8
  = yield
9
+
10
+ javascript:
11
+ APP_CONTEXT = {
12
+ sitemap: #{partial 'sitemap.json'},
13
+ current_url: "#{current_page.url}"
14
+ }
@@ -7,6 +7,7 @@ html ng-app=(yield_content(:ng_app))
7
7
  = stylesheet_link_tag 'main'
8
8
  = stylesheet_link_tag '//netdna.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.min.css'
9
9
  = yield_content :stylesheets
10
+ = javascript_include_tag 'head-js'
10
11
  javascript:
11
12
  function resizeIframe(obj) {
12
13
  var doc = obj.contentDocument;
@@ -19,6 +20,14 @@ html ng-app=(yield_content(:ng_app))
19
20
  }
20
21
 
21
22
  body class="#{yield_content(:body_class)}"
23
+ javascript:
24
+ // If necessary insert a placeholder before the real menu is created
25
+ if(!store.get('glypto-menu-hidden')) {
26
+ var e = document.createElement('div');
27
+ e.id = 'glypto-nav-placeholder';
28
+ document.body.insertBefore(e, document.body.childNodes[0]);
29
+ }
30
+
22
31
  = yield
23
32
 
24
33
  = yield_content :javascripts
@@ -6,11 +6,6 @@ html
6
6
  meta name='viewport' content='width=device-width'
7
7
  = yield_content :stylesheets
8
8
  = include_stylesheets(current_page.data.stylesheets || current_page.data.stylesheet)
9
- css:
10
- body {
11
- padding: 5px;
12
- margin: 0;
13
- }
14
9
 
15
10
  body class="#{yield_content(:body_class)}"
16
11
  = yield
@@ -9,4 +9,4 @@
9
9
  iframe: r.metadata.page[:iframe] \
10
10
  } })
11
11
 
12
- = partial r.url
12
+ = partial r.url.sub(/\/$/, '.html')
@@ -1,8 +1,11 @@
1
1
  - local_url = current_page.metadata.page[:local_url]
2
+ - url = local_url || current_page.url
2
3
  - title = current_page.metadata.page[:title] || locals[:title] # locals should be first but there's a bug
3
4
  - description = locals[:description] || current_page.metadata.page[:description]
4
5
 
5
- - if resource_file(current_page).match(/-standalone$/)
6
+ - standalone_url = !!extensions[:directory_indexes] ? url.sub(/\/$/, '/standalone') : url.sub(/\.html$/, '-standalone.html')
7
+
8
+ - if resource_file(current_page).match(/-?standalone\/?$/)
6
9
  = html
7
10
  - else
8
11
  article.glypto-model
@@ -16,13 +19,12 @@
16
19
  - if description
17
20
  p._description = description
18
21
 
19
- - url = local_url || current_page.url
20
- ._standalone = link_to url.sub('.html', '-standalone.html'), target: '_blank' do
22
+ ._standalone = link_to standalone_url, target: '_blank' do
21
23
  i.fa.fa-external-link title="Standalone version"
22
24
 
23
25
  section.glypto-model-stage
24
26
  - if current_page.metadata.page.iframe
25
- iframe src="#{url.sub('.html', '-standalone.html')}" height="0" width="100%" frameborder="0" scrolling="no" onload='javascript:resizeIframe(this);'
27
+ iframe src="#{standalone_url}" height="0" width="100%" frameborder="0" scrolling="no" onload='javascript:resizeIframe(this);'
26
28
  - else
27
29
  figure = html
28
30
 
@@ -0,0 +1,4 @@
1
+ li ng-class="{'_index': node.children, 's-selected': isSelected}"
2
+ = link_to '{{relativeUrl(node.url)}}'
3
+ | {{node.title}}
4
+ span._count ng-if="node.children.length" {{node.children.length}}
@@ -0,0 +1,2 @@
1
+ ul
2
+ glypto-menu-node ng-repeat="node in items|filter:filter"
@@ -0,0 +1,6 @@
1
+ nav.glypto-nav ng-class="{'s-hidden' : hidden}"
2
+ button.glypto-nav-toggle ng-click="toggle()" title="Toggle menu: Command + Shift + E"
3
+ = link_to 'Glyptotheque', '/', class: '_logo'
4
+ .search: input.mousetrap(ng-model="search" type="search" placeholder="Search (/ to focus)" glypto-search)
5
+
6
+ glypto-menu-tree items="items" filter="search"
@@ -0,0 +1 @@
1
+ <%= resource_tree('/', data_fields: [:title, :tags], sort_by: :nav_order).to_json -%>
@@ -1,3 +1,3 @@
1
1
  module Sculptor
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sculptor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tyom Semonov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-01 00:00:00.000000000 Z
11
+ date: 2014-11-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -282,6 +282,8 @@ files:
282
282
  - lib/sculptor/templates/glyptotheque/source/assets/js/glyptotheque.js
283
283
  - lib/sculptor/templates/glyptotheque/source/assets/js/glyptotheque/controllers.js
284
284
  - lib/sculptor/templates/glyptotheque/source/assets/js/glyptotheque/directives.js
285
+ - lib/sculptor/templates/glyptotheque/source/assets/js/glyptotheque/services.js
286
+ - lib/sculptor/templates/glyptotheque/source/assets/js/head-js.js
285
287
  - lib/sculptor/templates/glyptotheque/source/assets/styles/glyptotheque.scss
286
288
  - lib/sculptor/templates/glyptotheque/source/assets/styles/glyptotheque/_$variables.scss
287
289
  - lib/sculptor/templates/glyptotheque/source/assets/styles/glyptotheque/_base.scss
@@ -300,6 +302,10 @@ files:
300
302
  - lib/sculptor/templates/glyptotheque/source/partials/glyptotheque/_model-source.slim
301
303
  - lib/sculptor/templates/glyptotheque/source/partials/glyptotheque/_model.slim
302
304
  - lib/sculptor/templates/glyptotheque/source/partials/glyptotheque/_nav.slim
305
+ - lib/sculptor/templates/glyptotheque/source/partials/glyptotheque/menu-node.html.slim
306
+ - lib/sculptor/templates/glyptotheque/source/partials/glyptotheque/menu-tree.html.slim
307
+ - lib/sculptor/templates/glyptotheque/source/partials/glyptotheque/menu.html.slim
308
+ - lib/sculptor/templates/glyptotheque/source/sitemap.json.erb
303
309
  - lib/sculptor/templates/model/data.tt
304
310
  - lib/sculptor/templates/model/index-template.tt
305
311
  - lib/sculptor/templates/model/styles.tt