edge_framework 2.1.0 → 2.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- YTQ5MDVlZmU1M2FhODJhYTMwMzg5ZjE0ZmM4MzFlMGY3Y2Y4MDhmYQ==
4
+ ODI5ODlhZTk1ZjgxZTgyYzE3Y2RkZDZiM2U5MGQ1MmE5OTJlYTRlNw==
5
5
  data.tar.gz: !binary |-
6
- Yzg4M2M2MTJmOTFjMWJjOTlkMjYxM2Y5NmQyYzllM2NmYmFiODQ2Mw==
6
+ Mjg1NDk5MTljYzRhZDZmMWI5OTNjNjZjMmYxN2RjMGJmZTRhZTE2OQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- YzEyNTVlNDYzNTZmMTU3NjZlMjQzYTVkYmMxMDM0YWViNTc2NGRhOTRiMDVm
10
- ODYxMmIwYzhjNzg1ZmE4NTlhZjc3ZDk3ODYxODM0NDU2NDY4MWM0YjhkZTBj
11
- Y2JiMTkyMTllN2NlZGQzZjQ4MmYzMTdkM2NmMDk2MGZjMDYzY2Q=
9
+ YTk1ZGI5YThmZTA2MDk3OGRlY2MxNjgzODU1MGI2YTgyMDQ2YjdlNTk1NmIw
10
+ OTQ5MmY2YzZmMGNiMTE0YjgyNGQ4Yjk2Mzc4NzlhYWQwMzU4MWQ5OTc1OTgy
11
+ OGUwMGQ2N2NiMTVlMjQ1ZDM4NTEzYWNhZjA4YzllZDZhYTc3MDk=
12
12
  data.tar.gz: !binary |-
13
- NWJlNDBiMWYwMDEzZmQ1NGNiMzNhN2M3ZDY3NTQzZDk5YjAyYzY4ZDU4NzRj
14
- ODcxOGIwZTZmMzRlYjYyOGNkZTkyYjQ3MjE0ZDA2Y2E3YzgzYWQ3NDdhZGY3
15
- NjUzNjcxNDYwNjljNWUzNmY5N2Q1NjQ3YjYxZjk1OGY2MTJlZDA=
13
+ NDFiMmUyMmMwZjA3NGYzNjFiNzAwNDk2MTBhNDVmZjAzYWMwODQ2YmFmYWY5
14
+ NjliYmE0N2EyNTBlYzZmNjM5OGM4ZmM2NTgxOWQ2N2E2Y2M3YmNkY2Q3ZTk1
15
+ MzNmOTVmZTc0MzRkNTYwZDYwYmJhOTY2YjA0NmRlZmViMjZiMWQ=
data/README.md CHANGED
@@ -180,29 +180,37 @@ WORDPRESS
180
180
 
181
181
  ![Edge Wordpress](http://cdn.setyono.net/edge/wp-edge.jpg)
182
182
 
183
- Our WordPress template requires [Timber](http://upstatement.com/timber/). It is a template engine that separates PHP and HTML into their own file.
183
+ Our WordPress template requires [Timber](https://wordpress.org/plugins/timber-library/). It is a template engine that separates PHP and HTML into their own file, reducing the amount of "spaghetti" code.
184
184
 
185
- So, download and include [its plugin](https://wordpress.org/plugins/timber-library/) into your WordPress installation.
186
-
187
- Custom Post Type
185
+ CPT - Custom Post Type
188
186
  --------------------
189
187
 
190
188
  ![Wordpress Custom Type](http://cdn.setyono.net/edge/wp-post-type.jpg)
191
189
 
192
- add_post_type( $name, <$icon>, <$taxonomy> )
190
+ add_post_type( $name, <$args_array> )
193
191
 
194
- Inside `functions.php`, add these codes:
192
+ **Note**: The `$name` must be one-word, singular, and titleized case. Example:
195
193
 
196
- add_post_type("Product", "cart", "Brand");
197
- add_post_type("Event", "calendar");
194
+ add_post_type( "Product" );
195
+ add_post_type( "Event" );
198
196
 
199
- The icon name is taken from [melchoyce.github.io/dashicons/](http://melchoyce.github.io/dashicons/).
197
+ Optional arguments list:
200
198
 
201
- **Note**:
199
+ `icon` - Icon names are listed here [melchoyce.github.io/dashicons/](http://melchoyce.github.io/dashicons/). Exclude the "dashicons-".
200
+
201
+ `taxonomy` - The custom category term. The naming convention is the same as CPT's name.
202
+
203
+ `columns` - Array of columns shown in admin panel. Possible values are: `title`, `author`, `date`, `thumbnail`, and any custom field.
204
+
205
+ Example:
202
206
 
203
- - If you want pagination to work, the `$name` cannot be the same as any page's slug.
207
+ add_post_type( "Product" , array(
208
+ "icon" => "cart",
209
+ "taxonomy" => "Brand",
210
+ "columns" => array("thumbnail", "title^", "price^", "date")
211
+ ) );
204
212
 
205
- - All type's name and taxonomy's name must be **singular** and no special character except space.
213
+ Notice the `^` at the end of column's name? That indicates that the column is sortable.
206
214
 
207
215
  COMPASS
208
216
  =================
@@ -1,7 +1,7 @@
1
1
  /* --------------------
2
2
  - EDGE Framework
3
3
  - edge.thesyne.com
4
- - v2.1.0 (Gondar)
4
+ - v2.1.1 (Gondar)
5
5
  --------------------- */
6
6
 
7
7
  @import "edge/base";
@@ -8,7 +8,8 @@
8
8
  button,
9
9
  .button,
10
10
  input[type="submit"],
11
- input[type="reset"] {
11
+ input[type="reset"],
12
+ input[type="button"] {
12
13
  @content;
13
14
  }
14
15
 
@@ -66,9 +66,13 @@ code {
66
66
 
67
67
  white-space: pre;
68
68
  word-spacing: normal;
69
+
70
+ -moz-tab-size: 2;
71
+ tab-size: 2;
69
72
 
70
- @include css3(tab-size, 2, $webkit:false, $moz:true, $ms:false, $o:true);
71
- @include css3(hyphens, none, $webkit:true, $moz:true, $ms:true, $o:false);
73
+ -webkit-hyphens: none;
74
+ -moz-hyphens: none;
75
+ hyphens: none;
72
76
  }
73
77
 
74
78
  pre {
@@ -167,6 +167,7 @@ textarea {
167
167
  table {
168
168
  border-collapse: collapse;
169
169
  border-spacing: 0;
170
+ width: 100%;
170
171
  }
171
172
 
172
173
  /* Miscellaneous useful HTML classes */
@@ -1,4 +1,4 @@
1
1
  module Edge
2
- VERSION = "2.1.0"
2
+ VERSION = "2.1.1"
3
3
  CODENAME = "Gondar"
4
4
  end
@@ -1,82 +1,212 @@
1
1
  <?php
2
- /*
3
- Create Custom Post Type
4
- */
5
2
 
6
- function add_post_type($name, $icon = "admin-post", $tax_name = null) {
7
- $plural = Inflector::pluralize($name);
8
- $singular = $name;
9
-
10
- $labels = array(
11
- "name" => $plural,
12
- "singular_name" => $singular,
13
- "all_items" => "All " . $plural,
14
- "add_new_item" => "Add New " . $singular,
15
- "edit_item" => "Edit " . $singular,
16
- "new_item" => "New " . $singular,
17
- "view_item" => "View " . $singular,
18
- "search_items" => "Search " . $plural,
19
- "not_found" => "No " . strtolower($plural) . " found",
20
- "not_found_in_trash" => "No " . strtolower($plural) . " found in Trash",
21
- "parent_item_colon" => "Parent " . $singular . ":",
22
- );
23
-
24
- $post_args = array(
25
- "public" => true,
26
- "menu_icon" => "dashicons-".$icon,
27
- "labels" => $labels,
28
- "capability_type" => "post",
29
- "supports" => array(
30
- "title",
31
- "editor",
32
- "custom-fields",
33
- "revisions",
34
- "thumbnail",
35
- ),
36
- );
37
-
38
- // If taxonomy is given
39
- if($tax_name) {
40
- add_taxonomy($tax_name, $name);
3
+ function add_post_type($name, $args) {
4
+ $cpt = new CPT($name, $args);
5
+ $cpt->init();
6
+ }
7
+
8
+ // CUSTOM Post Type
9
+ class CPT {
10
+ private $name;
11
+ private $args;
12
+
13
+ public function __construct($name, $args) {
14
+ $this->name = $name;
15
+ $this->args = $args;
41
16
  }
42
17
 
43
- register_post_type(strtolower($name), $post_args);
44
- }
18
+ // Add the post type and all of it's perk based on the args
19
+ public function init() {
20
+ $post_args = $this->buildArgs($this->name, $this->args);
45
21
 
46
- /*
47
- Create Custom Taxonomy
48
- */
22
+ // If taxonomy is given
23
+ if($this->args["taxonomy"]) {
24
+ $this->add_taxonomy($this->args["taxonomy"], $this->name);
25
+ }
26
+
27
+ register_post_type(strtolower($this->name), $post_args);
28
+
29
+ // if column ordering is given
30
+ if($this->args["columns"]) {
31
+ $this->add_column($this->name, $this->args["columns"]);
32
+ }
33
+ }
34
+
35
+ // Build the necessary arguments for CPT
36
+ private function buildArgs($name, $args) {
37
+ $plural = Inflector::pluralize($name);
38
+ $singular = $name;
39
+
40
+ $labels = array(
41
+ "name" => $plural,
42
+ "singular_name" => $singular,
43
+ "all_items" => "All " . $plural,
44
+ "add_new_item" => "Add New " . $singular,
45
+ "edit_item" => "Edit " . $singular,
46
+ "new_item" => "New " . $singular,
47
+ "view_item" => "View " . $singular,
48
+ "search_items" => "Search " . $plural,
49
+ "not_found" => "No " . strtolower($plural) . " found",
50
+ "not_found_in_trash" => "No " . strtolower($plural) . " found in Trash",
51
+ "parent_item_colon" => "Parent " . $singular . ":",
52
+ );
53
+
54
+ // Build the post arguments
55
+ $post_args = array(
56
+ "public" => true,
57
+ "labels" => $labels,
58
+ "capability_type" => "post",
59
+ "supports" => array(
60
+ "title",
61
+ "editor",
62
+ "custom-fields",
63
+ "revisions",
64
+ "thumbnail",
65
+ ),
66
+ "rewrite" => array(
67
+ "with_front" => false
68
+ ),
69
+ );
70
+
71
+ if($args["icon"]) {
72
+ $post_args["menu_icon"] = "dashicons-".$args["icon"];
73
+ }
74
+
75
+ return $post_args;
76
+ }
77
+
78
+ // Create taxonomy and it's filter
79
+ private function add_taxonomy($tax_name, $post_type) {
80
+ $plural = Inflector::pluralize($tax_name);
81
+ $singular = $tax_name;
82
+
83
+ $labels = array(
84
+ "name" => $plural,
85
+ "singular_name" => $singular,
86
+ "all_items" => "All " . $plural,
87
+ "edit_item" => "Edit " . $singular,
88
+ "view_item" => "View " . $singular,
89
+ "update_item" => "Update " . $singular,
90
+ "add_new_item" => "Add New " . $singular,
91
+ "parent_item" => "Parent " . $singular,
92
+ "search_items" => "Search " . $plural,
93
+ "popular_items" => "Popular " . $plural,
94
+ "add_or_remove_items" => "Add or remove " . strtolower($plural),
95
+ "choose_from_most_used" => "Choose from the most used " . strtolower($plural),
96
+ "not_found" => "No " . strtolower($plural) . " found"
97
+ );
49
98
 
50
- function add_taxonomy($name, $post_type) {
51
- $plural = Inflector::pluralize($name);
52
- $singular = $name;
53
-
54
- $labels = array(
55
- "name" => $plural,
56
- "singular_name" => $singular,
57
- "all_items" => "All " . $plural,
58
- "edit_item" => "Edit " . $singular,
59
- "view_item" => "View " . $singular,
60
- "update_item" => "Update " . $singular,
61
- "add_new_item" => "Add New " . $singular,
62
- "parent_item" => "Parent " . $singular,
63
- "search_items" => "Search " . $plural,
64
- "popular_items" => "Popular " . $plural,
65
- "add_or_remove_items" => "Add or remove " . strtolower($plural),
66
- "choose_from_most_used" => "Choose from the most used " . strtolower($plural),
67
- "not_found" => "No " . strtolower($plural) . " found"
68
- );
69
-
70
- $tax_args = array(
71
- "labels" => $labels,
72
- "show_ui" => true,
73
- "query_var" => true,
74
- "show_admin_column" => false,
75
- "hierarchical" => true,
76
- );
77
- register_taxonomy(strtolower($name), strtolower($post_type), $tax_args);
78
-
79
- new CPT_Filter(array(strtolower($post_type) => array(strtolower($singular) ) ) );
99
+ $tax_args = array(
100
+ "labels" => $labels,
101
+ "show_ui" => true,
102
+ "query_var" => true,
103
+ "show_admin_column" => false,
104
+ "hierarchical" => true,
105
+ );
106
+ register_taxonomy(strtolower($tax_name), strtolower($post_type), $tax_args);
107
+
108
+ new CPT_Filter(array(strtolower($post_type) => array(strtolower($singular) ) ) );
109
+ }
110
+
111
+ // Add visible column in admin panel
112
+ private function add_column($name, $raw_columns) {
113
+ // create the WP filter name
114
+ $name_slug = strtolower($name);
115
+ $name_create = "manage_".$name_slug."_posts_columns"; // create column
116
+ $name_fill = "manage_".$name_slug."_posts_custom_column"; // fill column
117
+ $name_sortable = "manage_edit-".$name_slug."_sortable_columns"; // enable sorting
118
+
119
+ // cleanup and build the dataset
120
+ $columns = $this->clean_columns($raw_columns);
121
+ $sortable_columns = $this->get_sortable_columns($raw_columns);
122
+
123
+ // create the filter function
124
+ $filter_create = function($defaults) use ($columns) {
125
+ $cols = array();
126
+ foreach($columns as $c) {
127
+ $cols[$c] = ucwords( str_replace("_", " ", $c) );
128
+ }
129
+ $cols = array("cb" => $defaults["cb"]) + $cols;
130
+ return $cols;
131
+ };
132
+
133
+ $filter_fill = function($column_name, $post_id) {
134
+ switch($column_name) {
135
+ case "cb":
136
+ case "title":
137
+ case "author":
138
+ case "date":
139
+ // do nothing, those are automatically filled
140
+ break;
141
+ case "thumbnail":
142
+ $thumb = get_the_post_thumbnail($post_id, array(75, 75) );
143
+ echo $thumb;
144
+
145
+ // if custom field
146
+ default:
147
+ global $post;
148
+
149
+ $meta = get_post_meta($post_id, $column_name, true);
150
+ $terms = get_the_terms($post_id, $column_name);
151
+
152
+ // if the column is a custom field
153
+ if($meta) {
154
+ echo $meta;
155
+ }
156
+ // if the column is a term
157
+ elseif (!empty($terms) ) {
158
+ $out = array();
159
+
160
+ // loop through each term, linking to the 'edit posts' page for the specific term
161
+ foreach ($terms as $term) {
162
+ $out[] = sprintf("<a href='%s'>%s</a>",
163
+ esc_url( add_query_arg(
164
+ array("post_type" => $post->post_type, "type" => $term->slug), "edit.php")
165
+ ),
166
+ esc_html( sanitize_term_field(
167
+ "name", $term->name, $term->term_id, "type", "display")
168
+ )
169
+ );
170
+ }
171
+
172
+ // join the terms, separating with comma
173
+ echo join(", ", $out);
174
+ }
175
+ break;
176
+ }
177
+ };
178
+
179
+ $filter_sortable = function($defaults) use ($sortable_columns) {
180
+ foreach($sortable_columns as $sc) {
181
+ $defaults[$sc] = $sc;
182
+ }
183
+ return $defaults;
184
+ };
185
+
186
+ add_filter($name_create, $filter_create);
187
+ add_action($name_fill, $filter_fill, 10, 2);
188
+ add_filter($name_sortable, $filter_sortable);
189
+ }
190
+
191
+ // Cleanup the column args from annotation
192
+ private function clean_columns($raw) {
193
+ $columns = array_map(function($c) {
194
+ return trim($c, "^");
195
+ }, $raw);
196
+
197
+ return $columns;
198
+ }
199
+
200
+ // Look for sortable column, annotated with ^
201
+ private function get_sortable_columns($raw) {
202
+ $columns = array_map(function($c) {
203
+ if(strpos($c, "^") ) {
204
+ return trim($c, "^");
205
+ }
206
+ }, $raw);
207
+
208
+ return array_filter($columns);
209
+ }
80
210
  }
81
211
 
82
212
  /*
@@ -137,4 +267,4 @@ class CPT_Filter {
137
267
  $this->generate_taxonomy_options($tax_slug, $term->term_id, $level + 1, $selected);
138
268
  }
139
269
  }
140
- }//end class
270
+ }
@@ -19,7 +19,7 @@ class TimberEdge extends TimberSite {
19
19
  $context["menu"] = new TimberMenu();
20
20
  $context["site"] = $this;
21
21
 
22
- $context["home"] = home_url();
22
+ $context["home"] = home_url()."/";
23
23
  $context["root"] = get_template_directory_uri();
24
24
  $context["img"] = $context["root"]."/assets/img";
25
25
  $context["css"] = $context["root"]."/assets/css";
@@ -37,25 +37,27 @@ class TimberEdge extends TimberSite {
37
37
  new TimberEdge();
38
38
 
39
39
  /* REMOVE MENU ITEMS */
40
- function h_remove_menu() {
40
+ add_action("admin_menu", function() {
41
41
  $items = get_removed_list();
42
42
  global $menu;
43
43
  end($menu);
44
- while(prev($menu) ) {
45
- $item = explode(" ", $menu[key($menu)][0]);
46
- $item_first = $item[0] != NULL ? $item[0] : "";
47
- if(in_array($item_first, $items) ) {
48
- unset($menu[key($menu)]);
44
+
45
+ // var_dump($menu);
46
+ foreach($menu as $key => $m) {
47
+ if($m[0]) {
48
+ $i = explode(" <", $m[0]);
49
+
50
+ if(in_array($i[0], $items) ) {
51
+ unset($menu[$key]);
52
+ }
49
53
  }
50
54
  }
51
- }
52
- add_action("admin_menu", "h_remove_menu");
55
+ });
53
56
 
54
57
  /* REMOVE IMAGE RESIZER */
55
- function h_remove_resizer($sizes) {
58
+ add_filter("intermediate_image_sizes_advanced", function($sizes) {
56
59
  unset( $sizes["medium"]);
57
60
  unset( $sizes["large"]);
58
61
 
59
62
  return $sizes;
60
- }
61
- add_filter("intermediate_image_sizes_advanced", "h_remove_resizer");
63
+ });
@@ -9,8 +9,8 @@ add_theme_support("post-thumbnails");
9
9
  add_theme_support("menus");
10
10
 
11
11
  // CUSTOM POST TYPE
12
- // FORMAT : type-name, <icon>, <taxonomy-name>
13
- // EXAMPLE : add_post_type("Product", "cart", "Brand");
12
+ // FORMAT : add_post_type(name, <args>)
13
+ // check edge.thesyne.com/wordpress for detail
14
14
 
15
15
  // THUMBNAIL SIZE
16
16
  // FORMAT : add_image_size("thumbnail", <width>, <height>, <crop or not>);
@@ -1,7 +1,30 @@
1
1
  <!DOCTYPE html>
2
2
  <html {{ site.language_attributes }}>
3
3
 
4
- {% include "partials/_head.twig" %}
4
+ <head>
5
+ <meta charset="UTF-8">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1">
7
+
8
+ <!-- WEBSITE DETAIL -->
9
+ <title>
10
+ {{ site.name }}
11
+ {% if wp_title %} | {{ wp_title }} {% endif %}
12
+ </title>
13
+ <meta name="description" content="{{ site.description }}">
14
+
15
+ <!-- FAVICON -->
16
+ <link rel="icon" href="{{ img }}/favicon.png">
17
+ <link rel="apple-touch-icon-precomposed" href="{{ img }}/favicon-big.png">
18
+
19
+ <!-- JAVASCRIPT that must load first -->
20
+ <script src="{{ js }}/vendor/custom.modernizr.js"></script>
21
+
22
+ <!-- STYLESHEET -->
23
+ <link rel="stylesheet" href="{{ css }}/framework.css">
24
+ <link rel="stylesheet" href="{{ css }}/app.css">
25
+
26
+ {{ wp_head }}
27
+ </head>
5
28
 
6
29
  <body class="{{ body_class }}">
7
30
 
@@ -10,7 +33,7 @@
10
33
  <!-- Main Navigation Menu -->
11
34
  <nav class="main-menu">
12
35
  {% for item in menu.get_items %}
13
- <div class="item">
36
+ <div class="item {% if item.get_children %} has-child {% endif %}">
14
37
 
15
38
  <a href="{{ item.get_link }}"
16
39
  {% if "current-menu-item" in item.classes %}
@@ -21,7 +44,7 @@
21
44
  </a>
22
45
 
23
46
  {% if item.get_children %}
24
- <div class="dropdown">
47
+ <div class="child-menu">
25
48
  {% for child in item.get_children %}
26
49
  <a href="{{ child.get_link }}">{{ child.title }}</a>
27
50
  {% endfor %}
@@ -48,7 +71,19 @@
48
71
  {{ site.name }} &copy; {{ "now" | date("Y") }}
49
72
  </footer>
50
73
 
51
- {% include "partials/_foot.twig" %}
74
+ <!-- JAVASCRIPT LIBRARY -->
75
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
76
+ <script>
77
+ // Fallback if Google's one doesn't load
78
+ if (!window.jQuery) {
79
+ document.write("<script src='{{ js }}/vendor/jquery.min.js'><\/script>");
80
+ }
81
+ </script>
82
+ <script src="{{ js }}/vendor/fastclick.min.js"></script>
83
+ <script src="{{ js }}/vendor/edge.js"></script>
84
+ <script src="{{ js }}/app.js"></script>
85
+
86
+ {{ wp_footer }}
52
87
 
53
88
  </body>
54
89
  </html>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: edge_framework
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Henner Setyono
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-30 00:00:00.000000000 Z
11
+ date: 2015-03-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sass
@@ -216,8 +216,6 @@ files:
216
216
  - template/wordpress/views/index.twig
217
217
  - template/wordpress/views/layout.twig
218
218
  - template/wordpress/views/page.twig
219
- - template/wordpress/views/partials/_foot.twig
220
- - template/wordpress/views/partials/_head.twig
221
219
  - template/wordpress/views/partials/_pagination.twig
222
220
  - template/wordpress/views/partials/_posts.twig
223
221
  - template/wordpress/views/search.twig
@@ -1,13 +0,0 @@
1
- <!-- JAVASCRIPT LIBRARY -->
2
- <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
3
- <script>
4
- // Fallback if Google's one doesn't load
5
- if (!window.jQuery) {
6
- document.write("<script src='{{ js }}/vendor/jquery.min.js'><\/script>");
7
- }
8
- </script>
9
- <script src="{{ js }}/vendor/fastclick.min.js"></script>
10
- <script src="{{ js }}/vendor/edge.js"></script>
11
- <script src="{{ js }}/app.js"></script>
12
-
13
- {{ wp_footer }}
@@ -1,24 +0,0 @@
1
- <head>
2
- <meta charset="UTF-8">
3
- <meta name="viewport" content="width=device-width, initial-scale=1">
4
-
5
- <!-- WEBSITE DETAIL -->
6
- <title>
7
- {{ site.name }}
8
- {% if wp_title %} | {{ wp_title }} {% endif %}
9
- </title>
10
- <meta name="description" content="{{ site.description }}">
11
-
12
- <!-- FAVICON -->
13
- <link rel="icon" href="{{ img }}/favicon.png">
14
- <link rel="apple-touch-icon-precomposed" href="{{ img }}/favicon-big.png">
15
-
16
- <!-- JAVASCRIPT that must load first -->
17
- <script src="{{ js }}/vendor/custom.modernizr.js"></script>
18
-
19
- <!-- STYLESHEET -->
20
- <link rel="stylesheet" href="{{ css }}/framework.css">
21
- <link rel="stylesheet" href="{{ css }}/app.css">
22
-
23
- {{ wp_head }}
24
- </head>