Projects by WooThemes - Version 1.2.0

Version Description

  • The project archive slug now mirrors your projects base page slug isntead of being fixed as 'projects'. If you're using a base page with a slug other than 'projects' you may want to check any static links to your projects page. For example if your base page is 'portfolio' your projects post type archive will now exist at http://yoursite.com/portfolio rather than http://yoursite.com/projects.
Download this release

Release Info

Developer jameskoster
Plugin Icon wp plugin Projects by WooThemes
Version 1.2.0
Comparing to
See all releases

Code changes from version 1.1.0 to 1.2.0

assets/css/_mixins.scss ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @import "bourbon";
2
+
3
+ // Vars
4
+ $error: #f63121;
5
+
6
+ // Mixins
7
+ @mixin iconbefore( $glyph: "\f179" )
8
+ {
9
+ font-family: 'dashicons';
10
+ vertical-align: top;
11
+ margin-right: .618em;
12
+ content: $glyph;
13
+ }
14
+
15
+ @mixin iconafter( $glyph: "\f179" )
16
+ {
17
+ font-family: 'dashicons';
18
+ vertical-align: top;
19
+ margin-left: .618em;
20
+ content: $glyph;
21
+ }
22
+
23
+ @mixin icon( $glyph: "\f179" )
24
+ {
25
+ font-family: 'dashicons';
26
+ speak: none;
27
+ font-weight: normal;
28
+ font-variant: normal;
29
+ text-transform: none;
30
+ line-height: 1;
31
+ -webkit-font-smoothing: antialiased;
32
+ margin:0;
33
+ text-indent: 0;
34
+ position: absolute;
35
+ top:0;
36
+ left:0;
37
+ width:100%;
38
+ height: 100%;
39
+ text-align: center;
40
+ content: $glyph;
41
+ }
42
+
43
+ // Mixins
44
+ @mixin border_radius_reset()
45
+ {
46
+ -webkit-border-radius: none;
47
+ -moz-border-radius: none;
48
+ border-radius: none;
49
+ }
50
+
51
+ @mixin opacity($opacity:0.75)
52
+ {
53
+ opacity: $opacity;
54
+ filter: alpha(opacity=$opacity * 100);
55
+ }
assets/css/admin.css CHANGED
@@ -1,159 +1,111 @@
1
- @-webkit-keyframes spin-360 {
2
- from {
3
- -webkit-transform: rotate(0);
4
- /* Saf3.1+, Chrome */
5
- -moz-transform: rotate(0);
6
- /* FF3.5+ */
7
- -ms-transform: rotate(0);
8
- /* IE9 */
9
- -o-transform: rotate(0);
10
- /* Opera 10.5 */
11
- transform: rotate(0);
12
- zoom: 1;
13
- }
14
- 50% {
15
- -webkit-transform: rotate(180deg);
16
- /* Saf3.1+, Chrome */
17
- -moz-transform: rotate(180deg);
18
- /* FF3.5+ */
19
- -ms-transform: rotate(180deg);
20
- /* IE9 */
21
- -o-transform: rotate(180deg);
22
- /* Opera 10.5 */
23
- transform: rotate(180deg);
24
- zoom: 1;
25
- }
26
- to {
27
- -webkit-transform: rotate(0);
28
- /* Saf3.1+, Chrome */
29
- -moz-transform: rotate(0);
30
- /* FF3.5+ */
31
- -ms-transform: rotate(0);
32
- /* IE9 */
33
- -o-transform: rotate(0);
34
- /* Opera 10.5 */
35
- transform: rotate(0);
36
- zoom: 1;
37
- }
38
- }
39
- #adminmenu #menu-posts-project .menu-icon-project div.wp-menu-image:before {
40
- content: "\f322";
41
- }
42
  .post-type-project.edit-php table.wp-list-table .column-image {
43
  width: 120px;
44
- text-align: center;
45
- }
46
- .post-type-project.edit-php table.wp-list-table .column-image img {
47
- width: 60px;
48
- height: auto;
49
- }
50
  #project-images .inside {
51
  margin: 0;
52
- padding: 0;
53
- }
54
- #project-images .inside .add_project_images {
55
- padding: 0 12px;
56
- }
57
- #project-images .inside #project_images_container {
58
- padding: 0 0 0 9px;
59
- }
60
- #project-images .inside #project_images_container ul {
61
- margin: 0;
62
- padding: 0;
63
- }
64
- #project-images .inside #project_images_container ul:after {
65
- content: "\0020";
66
- display: block;
67
- height: 0;
68
- overflow: hidden;
69
- clear: both;
70
- }
71
- #project-images .inside #project_images_container ul li.image,
72
- #project-images .inside #project_images_container ul li.add,
73
- #project-images .inside #project_images_container ul li.projects-metabox-sortable-placeholder {
74
- width: 80px;
75
- float: left;
76
- cursor: move;
77
- margin: 9px 9px 0 0;
78
- background: #f7f7f7;
79
- position: relative;
80
- background: #000;
81
- -webkit-box-sizing: border-box;
82
- /* Safari/Chrome, other WebKit */
83
- -moz-box-sizing: border-box;
84
- /* Firefox, other Gecko */
85
- box-sizing: border-box;
86
- /* Opera/IE 8+ */
87
- }
88
- #project-images .inside #project_images_container ul li.image img,
89
- #project-images .inside #project_images_container ul li.add img,
90
- #project-images .inside #project_images_container ul li.projects-metabox-sortable-placeholder img {
91
- width: 100%;
92
- height: auto;
93
- display: block;
94
- -webkit-transition: all ease-in-out 0.2s;
95
- -moz-transition: all ease-in-out 0.2s;
96
- -ms-transition: all ease-in-out 0.2s;
97
- -o-transition: all ease-in-out 0.2s;
98
- transition: all ease-in-out 0.2s;
99
- }
100
- #project-images .inside #project_images_container ul li.image:hover img,
101
- #project-images .inside #project_images_container ul li.add:hover img,
102
- #project-images .inside #project_images_container ul li.projects-metabox-sortable-placeholder:hover img {
103
- opacity: 0.75;
104
- filter: alpha(opacity=@opacity * 100);
105
- }
106
- #project-images .inside #project_images_container ul li.projects-metabox-sortable-placeholder {
107
- background: #f1f1f1;
108
- }
109
- #project-images .inside #project_images_container ul ul.actions {
110
- position: absolute;
111
- top: 0;
112
- right: 0;
113
- -webkit-transition: all ease-in-out 0.2s;
114
- -moz-transition: all ease-in-out 0.2s;
115
- -ms-transition: all ease-in-out 0.2s;
116
- -o-transition: all ease-in-out 0.2s;
117
- transition: all ease-in-out 0.2s;
118
- opacity: 0;
119
- filter: alpha(opacity=@opacity * 100);
120
- }
121
- #project-images .inside #project_images_container ul ul.actions li {
122
- -webkit-border-radius: 100%;
123
- border-radius: 100%;
124
- float: right;
125
- margin: 0 0 0 2px;
126
- }
127
- #project-images .inside #project_images_container ul ul.actions li a {
128
- width: 20px;
129
- margin: 0;
130
- height: 20px;
131
- font-size: 16px;
132
- display: block;
133
- overflow: hidden;
134
- color: #fff;
135
- background: #000;
136
- font-weight: 300;
137
- line-height: 20px;
138
- text-align: center;
139
- text-decoration: none;
140
- -webkit-transition: all ease-in-out 0.2s;
141
- -moz-transition: all ease-in-out 0.2s;
142
- -ms-transition: all ease-in-out 0.2s;
143
- -o-transition: all ease-in-out 0.2s;
144
- transition: all ease-in-out 0.2s;
145
- }
146
- #project-images .inside #project_images_container ul ul.actions li a.delete {
147
- background: #000;
148
- }
149
- #project-images .inside #project_images_container ul ul.actions li a.delete:hover {
150
- background: #f63121;
151
- color: #fff;
152
- }
153
- #project-images .inside #project_images_container ul li:hover ul.actions {
154
- opacity: 1;
155
- filter: alpha(opacity=@opacity * 100);
156
- }
157
  .post-type-project .ui-autocomplete {
158
  font-family: inherit;
159
  font-size: 1em;
@@ -163,23 +115,18 @@
163
  -webkit-border-radius: 0 0 4px 4px;
164
  border-radius: 0 0 4px 4px;
165
  -webkit-transform: translateY(-1px);
166
- transform: translateY(-1px);
167
- }
168
- .post-type-project .ui-autocomplete li a {
169
- -webkit-border-radius: 0;
170
- border-radius: 0;
171
- border: 0;
172
- background: none;
173
- }
174
- .post-type-project .ui-autocomplete li a:hover {
175
- border: 0;
176
- background: #f6f6f6;
177
- }
178
- .post-type-project .ui-autocomplete li:last-child a {
179
- -webkit-border-radius: 0 0 4px 4px;
180
- border-radius: 0 0 4px 4px;
181
- }
182
  .post-type-project .projects-radio label {
183
  display: block;
184
- line-height: 1.5;
185
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  .post-type-project.edit-php table.wp-list-table .column-image {
2
  width: 120px;
3
+ text-align: center; }
4
+ .post-type-project.edit-php table.wp-list-table .column-image img {
5
+ width: 60px;
6
+ height: auto; }
7
+
 
8
  #project-images .inside {
9
  margin: 0;
10
+ padding: 0; }
11
+ #project-images .inside .add_project_images {
12
+ padding: 0 12px 12px; }
13
+ #project-images .inside #project_images_container {
14
+ padding: 0 0 0 9px; }
15
+ #project-images .inside #project_images_container ul {
16
+ margin: 0;
17
+ padding: 0; }
18
+ #project-images .inside #project_images_container ul:after {
19
+ content: "";
20
+ display: table;
21
+ clear: both; }
22
+ #project-images .inside #project_images_container ul li.image,
23
+ #project-images .inside #project_images_container ul li.add,
24
+ #project-images .inside #project_images_container ul li.projects-metabox-sortable-placeholder {
25
+ width: 80px;
26
+ float: left;
27
+ cursor: move;
28
+ margin: 9px 9px 0 0;
29
+ background: #f7f7f7;
30
+ position: relative;
31
+ background: #000;
32
+ -webkit-box-sizing: border-box;
33
+ /* Safari/Chrome, other WebKit */
34
+ -moz-box-sizing: border-box;
35
+ /* Firefox, other Gecko */
36
+ box-sizing: border-box;
37
+ /* Opera/IE 8+ */ }
38
+ #project-images .inside #project_images_container ul li.image img,
39
+ #project-images .inside #project_images_container ul li.add img,
40
+ #project-images .inside #project_images_container ul li.projects-metabox-sortable-placeholder img {
41
+ width: 100%;
42
+ height: auto;
43
+ display: block;
44
+ -webkit-animation: all ease 0.2s;
45
+ -moz-animation: all ease 0.2s;
46
+ animation: all ease 0.2s; }
47
+ #project-images .inside #project_images_container ul li.image:hover img,
48
+ #project-images .inside #project_images_container ul li.add:hover img,
49
+ #project-images .inside #project_images_container ul li.projects-metabox-sortable-placeholder:hover img {
50
+ opacity: 0.75;
51
+ filter: alpha(opacity=75); }
52
+ #project-images .inside #project_images_container ul li.projects-metabox-sortable-placeholder {
53
+ background: #f1f1f1; }
54
+ #project-images .inside #project_images_container ul ul.actions {
55
+ position: absolute;
56
+ top: 0;
57
+ right: 0;
58
+ -webkit-animation: all ease 0.2s;
59
+ -moz-animation: all ease 0.2s;
60
+ animation: all ease 0.2s;
61
+ opacity: 0;
62
+ filter: alpha(opacity=0); }
63
+ #project-images .inside #project_images_container ul ul.actions li {
64
+ float: right; }
65
+ #project-images .inside #project_images_container ul ul.actions li a {
66
+ width: 20px;
67
+ margin: 0;
68
+ height: 20px;
69
+ font-size: 16px;
70
+ display: block;
71
+ overflow: hidden;
72
+ color: #fff;
73
+ background: #000;
74
+ font-weight: 300;
75
+ line-height: 20px;
76
+ text-align: center;
77
+ text-decoration: none;
78
+ -webkit-animation: all ease 0.2s;
79
+ -moz-animation: all ease 0.2s;
80
+ animation: all ease 0.2s; }
81
+ #project-images .inside #project_images_container ul ul.actions li a.edit, #project-images .inside #project_images_container ul ul.actions li a.delete {
82
+ text-indent: -999px;
83
+ position: relative;
84
+ background: #000; }
85
+ #project-images .inside #project_images_container ul ul.actions li a.edit:before, #project-images .inside #project_images_container ul ul.actions li a.delete:before {
86
+ content: "\f464";
87
+ display: block;
88
+ position: absolute;
89
+ top: 0;
90
+ right: 0;
91
+ bottom: 0;
92
+ left: 0;
93
+ font-family: 'Dashicons';
94
+ color: #fff;
95
+ text-indent: 0;
96
+ font-weight: normal; }
97
+ #project-images .inside #project_images_container ul ul.actions li a.edit:hover, #project-images .inside #project_images_container ul ul.actions li a.delete:hover {
98
+ background: #444; }
99
+ #project-images .inside #project_images_container ul ul.actions li a.delete {
100
+ background-color: #f63121; }
101
+ #project-images .inside #project_images_container ul ul.actions li a.delete:before {
102
+ content: "\f335"; }
103
+ #project-images .inside #project_images_container ul ul.actions li a.delete:hover {
104
+ background: #d40f00; }
105
+ #project-images .inside #project_images_container ul li:hover ul.actions {
106
+ opacity: 1;
107
+ filter: alpha(opacity=100); }
108
+
 
 
 
 
 
 
109
  .post-type-project .ui-autocomplete {
110
  font-family: inherit;
111
  font-size: 1em;
115
  -webkit-border-radius: 0 0 4px 4px;
116
  border-radius: 0 0 4px 4px;
117
  -webkit-transform: translateY(-1px);
118
+ transform: translateY(-1px); }
119
+ .post-type-project .ui-autocomplete li a {
120
+ -webkit-border-radius: 0;
121
+ border-radius: 0;
122
+ border: 0;
123
+ background: none; }
124
+ .post-type-project .ui-autocomplete li a:hover {
125
+ border: 0;
126
+ background: #f6f6f6; }
127
+ .post-type-project .ui-autocomplete li:last-child a {
128
+ -webkit-border-radius: 0 0 4px 4px;
129
+ border-radius: 0 0 4px 4px; }
 
 
 
 
130
  .post-type-project .projects-radio label {
131
  display: block;
132
+ line-height: 1.5; }
 
assets/css/{admin.less → admin.scss} RENAMED
@@ -1,10 +1,5 @@
1
  // Imports
2
- @import url(mixins.less);
3
-
4
- // Icons
5
- #adminmenu #menu-posts-project .menu-icon-project div.wp-menu-image:before {
6
- content: "\f322";
7
- }
8
 
9
  // Projects screen
10
  .post-type-project.edit-php {
@@ -27,14 +22,14 @@
27
  margin: 0;
28
  padding: 0;
29
  .add_project_images {
30
- padding: 0 12px;
31
  }
32
  #project_images_container {
33
  padding: 0 0 0 9px;
34
  ul {
35
  margin: 0;
36
  padding: 0;
37
- .clearfix;
38
 
39
  li.image,
40
  li.add,
@@ -53,11 +48,11 @@
53
  width: 100%;
54
  height: auto;
55
  display: block;
56
- .transition;
57
  }
58
  &:hover {
59
  img {
60
- .opacity(0.75);
61
  }
62
  }
63
  }
@@ -68,13 +63,11 @@
68
  position: absolute;
69
  top:0;
70
  right: 0;
71
- .transition;
72
- .opacity(0);
73
  li {
74
- -webkit-border-radius: 100%;
75
- border-radius: 100%;
76
  float: right;
77
- margin: 0 0 0 2px;
78
  a {
79
  width: 20px;
80
  margin: 0;
@@ -88,19 +81,46 @@
88
  line-height: 20px;
89
  text-align: center;
90
  text-decoration: none;
91
- .transition;
 
92
  &.delete {
 
 
93
  background: #000;
94
- &:hover {
95
- background: @error;
 
 
 
 
 
 
 
 
96
  color: #fff;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
97
  }
98
  }
99
  }
100
  }
101
  }
102
  li:hover ul.actions {
103
- .opacity(1);
104
  }
105
  }
106
  }
1
  // Imports
2
+ @import 'mixins';
 
 
 
 
 
3
 
4
  // Projects screen
5
  .post-type-project.edit-php {
22
  margin: 0;
23
  padding: 0;
24
  .add_project_images {
25
+ padding: 0 12px 12px;
26
  }
27
  #project_images_container {
28
  padding: 0 0 0 9px;
29
  ul {
30
  margin: 0;
31
  padding: 0;
32
+ @include clearfix;
33
 
34
  li.image,
35
  li.add,
48
  width: 100%;
49
  height: auto;
50
  display: block;
51
+ @include animation(all ease .2s);
52
  }
53
  &:hover {
54
  img {
55
+ @include opacity(0.75);
56
  }
57
  }
58
  }
63
  position: absolute;
64
  top:0;
65
  right: 0;
66
+ @include animation(all ease .2s);
67
+ @include opacity(0);
68
  li {
 
 
69
  float: right;
70
+ //margin: 0 0 0 1px;
71
  a {
72
  width: 20px;
73
  margin: 0;
81
  line-height: 20px;
82
  text-align: center;
83
  text-decoration: none;
84
+ @include animation(all ease .2s);
85
+ &.edit,
86
  &.delete {
87
+ text-indent: -999px;
88
+ position: relative;
89
  background: #000;
90
+
91
+ &:before {
92
+ content: "\f464";
93
+ display: block;
94
+ position: absolute;
95
+ top: 0;
96
+ right: 0;
97
+ bottom: 0;
98
+ left: 0;
99
+ font-family: 'Dashicons';
100
  color: #fff;
101
+ text-indent: 0;
102
+ font-weight: normal;
103
+ }
104
+
105
+ &:hover {
106
+ background: #444;
107
+ }
108
+ }
109
+
110
+ &.delete {
111
+ background-color: $error;
112
+ &:before {
113
+ content: "\f335";
114
+ }
115
+ &:hover {
116
+ background: $error - #222;
117
  }
118
  }
119
  }
120
  }
121
  }
122
  li:hover ul.actions {
123
+ @include opacity(1);
124
  }
125
  }
126
  }
assets/css/mixins.less DELETED
@@ -1,197 +0,0 @@
1
- // Vars
2
- // Colors
3
- @color_links: #52a8e8; // Links / Main theme colour
4
- @color_body: #555; // Body Copy
5
- @border_main: #e6e6e6; // The 1px grey rules used throughout the WF
6
- @bg_light: #fafafa;
7
- @bg_dark: #d3d3d3;
8
- @success: #89b93f;
9
- @info: #3c8bae;
10
- @error: #f63121;
11
-
12
- // Fonts
13
- @sans: sans-serif;
14
- @serif: Georgia, serif;
15
-
16
- // Google fonts - These are also defined in Theme Setup (theme-actions.php)
17
- @sans_google: "Droid Sans", sans-serif;
18
- @serif_google: "Droid Serif", sans-serif;
19
-
20
- // Paths
21
- @imagepath: 'images';
22
- @fontpath: 'includes/fonts/';
23
-
24
- // Functions
25
- .iconbefore( @glyph: "\f179" ) {
26
- font-family: 'dashicons';
27
- vertical-align: top;
28
- margin-right: .618em;
29
- content: @glyph;
30
- }
31
-
32
- .iconafter( @glyph: "\f179" ) {
33
- font-family: 'dashicons';
34
- vertical-align: top;
35
- margin-left: .618em;
36
- content: @glyph;
37
- }
38
-
39
- .ir() {
40
- display: block;
41
- text-indent: -999px;
42
- position: relative;
43
- height:1em;
44
- width:1em;
45
- }
46
-
47
- .icon( @glyph: "\f179" ) {
48
- font-family: 'dashicons';
49
- speak: none;
50
- font-weight: normal;
51
- font-variant: normal;
52
- text-transform: none;
53
- line-height: 1;
54
- -webkit-font-smoothing: antialiased;
55
- margin:0;
56
- text-indent: 0;
57
- position: absolute;
58
- top:0;
59
- left:0;
60
- width:100%;
61
- height: 100%;
62
- text-align: center;
63
- content: @glyph;
64
- }
65
-
66
- // Mixins
67
- .clearfix() {
68
- &:after {
69
- content: "\0020";
70
- display: block;
71
- height: 0;
72
- overflow: hidden;
73
- clear: both;
74
- }
75
- }
76
- .border_radius(@radius:10px) {
77
- -webkit-border-radius:@radius;
78
- border-radius:@radius;
79
- -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box;
80
- }
81
-
82
- .border_radius_right(@radius:10px) {
83
- -webkit-border-top-right-radius: @radius;
84
- -webkit-border-bottom-right-radius: @radius;
85
- border-top-right-radius: @radius;
86
- border-bottom-right-radius: @radius;
87
- -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box;
88
- }
89
-
90
- .border_radius_left(@radius:10px) {
91
- -webkit-border-top-left-radius: @radius;
92
- -webkit-border-bottom-left-radius: @radius;
93
- border-top-left-radius: @radius;
94
- border-bottom-left-radius: @radius;
95
- -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box;
96
- }
97
-
98
- .border_radius_bottom(@radius:10px) {
99
- -webkit-border-bottom-left-radius: @radius;
100
- -webkit-border-bottom-right-radius: @radius;
101
- border-bottom-left-radius: @radius;
102
- border-bottom-right-radius: @radius;
103
- -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box;
104
- }
105
-
106
- .border_radius_top(@radius:10px) {
107
- -webkit-border-top-left-radius: @radius;
108
- -webkit-border-top-right-radius: @radius;
109
- border-top-left-radius: @radius;
110
- border-top-right-radius: @radius;
111
- -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box;
112
- }
113
-
114
- .border_radius_reset() {
115
- -webkit-border-radius: none;
116
- -moz-border-radius: none;
117
- border-radius: none;
118
- }
119
-
120
- .box_shadow(@shadow_x:3px, @shadow_y:3px, @shadow_rad:3px, @shadow_in:3px, @shadow_color:#888) {
121
- box-shadow:@shadow_x @shadow_y @shadow_rad @shadow_in @shadow_color;
122
- -webkit-box-shadow:@shadow_x @shadow_y @shadow_rad @shadow_in @shadow_color;
123
- }
124
-
125
- .inset_box_shadow(@shadow_x:3px, @shadow_y:3px, @shadow_rad:3px, @shadow_in:3px, @shadow_color:#888) {
126
- box-shadow:inset @shadow_x @shadow_y @shadow_rad @shadow_in @shadow_color;
127
- -webkit-box-shadow:inset @shadow_x @shadow_y @shadow_rad @shadow_in @shadow_color;
128
- }
129
-
130
- .box_shadow_reset() {
131
- -webkit-box-shadow: none;
132
- -moz-box-shadow: none;
133
- box-shadow: none;
134
- }
135
-
136
- .text_shadow(@shadow_x:3px, @shadow_y:3px, @shadow_rad:3px, @shadow_color:#fff) {
137
- text-shadow:@shadow_x @shadow_y @shadow_rad @shadow_color;
138
- }
139
-
140
- .vertical_gradient(@from: #000, @to: #FFF) {
141
- background-color: @from;
142
- background-image: -webkit-gradient(linear, left top, left bottom, from(@from), to(@to)); /* Saf4+, Chrome */
143
- background-image: -webkit-linear-gradient(top, @from, @to); /* Chrome 10+, Saf5.1+, iOS 5+ */
144
- background-image: -moz-linear-gradient(top, @from, @to); /* FF3.6+ */
145
- background-image: -ms-linear-gradient(top, @from, @to); /* IE10 */
146
- background-image: -o-linear-gradient(top, @from, @to); /* Opera 11.10+ */
147
- background-image: linear-gradient(to bottom, @from, @to);
148
- }
149
-
150
- .transition(@selector:all, @animation:ease-in-out, @duration:.2s) {
151
- -webkit-transition:@selector @animation @duration;
152
- -moz-transition:@selector @animation @duration;
153
- -ms-transition:@selector @animation @duration;
154
- -o-transition:@selector @animation @duration;
155
- transition:@selector @animation @duration;
156
- }
157
-
158
- .opacity(@opacity:0.75) {
159
- opacity: @opacity;
160
- filter:~"alpha(opacity=@opacity * 100)";
161
- }
162
-
163
- .rotate(@degree:1deg) {
164
- -webkit-transform: rotate(@degree); /* Saf3.1+, Chrome */
165
- -moz-transform: rotate(@degree); /* FF3.5+ */
166
- -ms-transform: rotate(@degree); /* IE9 */
167
- -o-transform: rotate(@degree); /* Opera 10.5 */
168
- transform: rotate(@degree);
169
- zoom: 1;
170
- }
171
-
172
- .scale(@ratio:1.5) {
173
- -webkit-transform:scale(@ratio);
174
- -moz-transform:scale(@ratio);
175
- -ms-transform:scale(@ratio);
176
- -o-transform:scale(@ratio);
177
- transform:scale(@ratio);
178
- }
179
-
180
- .radial_gradient(@from: #000, @to: #FFF) {
181
- background: @from;
182
- background: -webkit-gradient(radial, 50% 10%, 0, 50% 10%, 1000, from(@from), to(@to));
183
- background: -moz-radial-gradient(center top, @from 0%, @to 100%);
184
- }
185
-
186
- .borderbox () {
187
- -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
188
- -moz-box-sizing: border-box; /* Firefox, other Gecko */
189
- box-sizing: border-box; /* Opera/IE 8+ */
190
- }
191
-
192
- // Animations
193
- @-webkit-keyframes spin-360 {
194
- from { .rotate(0); }
195
- 50% { .rotate(180deg); }
196
- to { .rotate(0); }
197
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/css/woo-projects-handheld.css CHANGED
@@ -1 +1,22 @@
1
- @-webkit-keyframes spin-360{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0);zoom:1}50%{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg);zoom:1}to{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0);zoom:1}}@media only screen and (max-width:768px){.projects ul.projects li.project,.projects-page ul.projects li.project{width:48%;float:left;clear:both}.projects ul.projects li.project:nth-child(2n),.projects-page ul.projects li.project:nth-child(2n){margin-right:0;float:right;clear:none!important}.single-project.has-gallery .gallery,.single-project.has-gallery .summary{width:100%;float:none;padding:0}.single-project.has-gallery .summary>div{font-size:1em}.single-project.no-gallery .project_title,.single-project.no-gallery .single-project-description,.single-project.no-gallery .project-meta{width:100%!important;float:none}}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @media only screen and (max-width: 768px) {
2
+ .projects ul.projects li.project, .projects-page ul.projects li.project {
3
+ width: 48%;
4
+ float: left;
5
+ clear: both; }
6
+ .projects ul.projects li.project:nth-child(2n), .projects-page ul.projects li.project:nth-child(2n) {
7
+ margin-right: 0;
8
+ float: right;
9
+ clear: none !important; }
10
+
11
+ .single-project.has-gallery .gallery,
12
+ .single-project.has-gallery .summary {
13
+ width: 100%;
14
+ float: none;
15
+ padding: 0; }
16
+ .single-project.has-gallery .summary > div {
17
+ font-size: 1em; }
18
+ .single-project.no-gallery .project_title,
19
+ .single-project.no-gallery .single-project-description,
20
+ .single-project.no-gallery .project-meta {
21
+ width: 100% !important;
22
+ float: none; } }
assets/css/{woo-projects-handheld.less → woo-projects-handheld.scss} RENAMED
@@ -1,5 +1,5 @@
1
  // Imports
2
- @import url(mixins.less);
3
 
4
  // Styles for handheld devices
5
 
1
  // Imports
2
+ @import 'mixins';
3
 
4
  // Styles for handheld devices
5
 
assets/css/woo-projects.css CHANGED
@@ -1 +1,303 @@
1
- @-webkit-keyframes spin-360{from{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0);zoom:1}50%{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg);zoom:1}to{-webkit-transform:rotate(0);-moz-transform:rotate(0);-ms-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0);zoom:1}}.projects ul.projects,.projects-page ul.projects{list-style:none;margin:0;margin-left:0!important;padding:0!important;*zoom:1}.projects ul.projects:before,.projects-page ul.projects:before,.projects ul.projects:after,.projects-page ul.projects:after{content:" ";display:table}.projects ul.projects:after,.projects-page ul.projects:after{clear:both}.projects ul.projects li.project,.projects-page ul.projects li.project{margin:0 0 2.618em;padding:0;width:48%;float:left;margin-right:3.8%}.projects ul.projects li.project .project-thumbnail,.projects-page ul.projects li.project .project-thumbnail{margin:0 0 1em}.projects ul.projects li.project a,.projects-page ul.projects li.project a{text-decoration:none}.projects ul.projects li.project h3,.projects-page ul.projects li.project h3{margin-bottom:.618em}.projects ul.projects li.project img,.projects-page ul.projects li.project img{max-width:100%;height:auto;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;-webkit-border-radius:0;border-radius:0;-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box;padding:0;border:0;margin:0 auto;display:block}.projects ul.projects li.project.first,.projects-page ul.projects li.project.first{clear:both}.projects ul.projects li.project.last,.projects-page ul.projects li.project.last{margin-right:0}.projects ul.project-categories,.projects-page ul.project-categories{margin-left:0!important;padding:0!important;list-style:none}.projects ul.project-categories:after,.projects-page ul.project-categories:after{content:"\0020";display:block;height:0;overflow:hidden;clear:both}.projects ul.project-categories li,.projects-page ul.project-categories li{display:inline-block;margin-right:.5em;list-style:none;margin-left:0!important}.projects ul.project-categories li:after,.projects-page ul.project-categories li:after{content:"|";display:inline-block;padding-left:.5em}.projects ul.project-categories li:last-child:after,.projects-page ul.project-categories li:last-child:after{display:none}.projects .projects-pagination,.projects-page .projects-pagination{text-align:center}.projects .projects-pagination li,.projects-page .projects-pagination li{display:inline-block;margin:0 .236em}.single-project .project{margin-bottom:1.618em}.single-project .project:after{content:"\0020";display:block;height:0;overflow:hidden;clear:both}.single-project .project .single-project-short-description{margin-bottom:1.618em}.single-project .project .summary .single-project-categories li:before{font-family:dashicons;vertical-align:top;margin-right:.618em;content:"\f318"}.single-project .project .summary .client-name:before{font-family:dashicons;vertical-align:top;margin-right:.618em;content:"\f338"}.single-project .project .summary .project-url:before{font-family:dashicons;vertical-align:top;margin-right:.618em;content:"\f319"}.single-project .project .summary .single-project-categories,.single-project .project .summary .url,.single-project .project .summary .client{margin-bottom:1.618em}.single-project .project .summary .project-meta ul,.single-project .project .summary .project-meta li{list-style:none}.single-project .single-featured{margin-bottom:1.618em}.single-project.has-gallery .gallery{width:62%;float:left}.single-project.has-gallery .gallery a{display:block}.single-project.has-gallery .gallery img{-webkit-border-radius:0;border-radius:0;-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box;max-width:100%;height:auto;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;display:block}.single-project.has-gallery .summary{width:38%;float:right;padding:0 0 0 2.618em;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.single-project.has-gallery .summary>div{font-size:.857em}.single-project.no-gallery .summary:after{content:"\0020";display:block;height:0;overflow:hidden;clear:both}.single-project.no-gallery .summary .project_title,.single-project.no-gallery .summary .single-project-description{width:62%;float:left}.single-project.no-gallery .summary .project-meta{width:34%;float:right}.single-project .projects-single-pagination:after{content:"\0020";display:block;height:0;overflow:hidden;clear:both}.single-project .projects-single-pagination .previous a,.single-project .projects-single-pagination .next a{text-decoration:none}.single-project .projects-single-pagination .previous{float:right}.single-project .projects-single-pagination .previous a:after{font-family:dashicons;vertical-align:top;margin-left:.618em;content:"\f344"}.single-project .projects-single-pagination .next{float:left}.single-project .projects-single-pagination .next a:before{font-family:dashicons;vertical-align:top;margin-right:.618em;content:"\f340"}.single-project .project-testimonial blockquote{padding:1.618em;border:1px solid rgba(0,0,0,.1);position:relative;margin:0;margin-bottom:1.387em}.single-project .project-testimonial blockquote:after{content:"";display:block;border:10px solid rgba(0,0,0,.1);border-color:rgba(0,0,0,.1) transparent transparent;position:absolute;bottom:-21px;left:1em}.single-project .project-testimonial .quote:after{content:"\0020";display:block;height:0;overflow:hidden;clear:both}.single-project .project-testimonial .quote .avatar-link{float:left;display:block;margin:0 1em 1em 0}.single-project .project-testimonial .quote cite span{display:block}.projects_list_widget li{margin-bottom:1.618em}.projects_list_widget li a{display:block}.projects_list_widget li a:after{content:"\0020";display:block;height:0;overflow:hidden;clear:both}.projects_list_widget li img{float:right;max-width:60px;height:auto}.projects_list_widget li .project-title{float:left}.widget_projects_categories ul.children{margin-left:2.618em}.single-project .twentythirteen .entry-summary{padding:0}.single-project .twentythirteen ul.single-project-categories{padding-left:0}.single-project.has-gallery .twentythirteen .summary{width:36%}.single-project.has-gallery .twentythirteen .gallery{width:61%}.single-project.has-gallery .tfp .gallery{width:50%}.single-project.has-gallery .tfp .entry-summary{width:50%;padding-left:2.618em!important}.twentyfourteen .tfp{padding:12px 10px 0;max-width:474px;margin:0 auto}.twentyfourteen .tfp .project .entry-summary{padding:0;margin:0 0 1.618em!important}.twentyfourteen .tfp div.project.hentry.has-post-thumbnail{margin-top:0}.twentyfourteen .tfp .project .images img{margin-bottom:1em}@media screen and (min-width:673px){.twentyfourteen .tfp{padding-right:30px;padding-left:30px}}@media screen and (min-width:1040px){.twentyfourteen .tfp{padding-right:15px;padding-left:15px}}@media screen and (min-width:1110px){.twentyfourteen .tfp{padding-right:30px;padding-left:30px}}@media screen and (min-width:1218px){.twentyfourteen .tfp{margin-right:54px}.full-width .twentyfourteen .tfp{margin-right:auto}}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Layout Styles
3
+ */
4
+ .projects ul.projects,
5
+ .projects-page ul.projects {
6
+ list-style: none;
7
+ margin: 0;
8
+ margin-left: 0 !important;
9
+ padding: 0 !important;
10
+ *zoom: 1; }
11
+ .projects ul.projects:before, .projects ul.projects:after,
12
+ .projects-page ul.projects:before,
13
+ .projects-page ul.projects:after {
14
+ content: " ";
15
+ display: table; }
16
+ .projects ul.projects:after,
17
+ .projects-page ul.projects:after {
18
+ clear: both; }
19
+ .projects ul.projects li.project,
20
+ .projects-page ul.projects li.project {
21
+ margin: 0 0 2.618em;
22
+ padding: 0;
23
+ width: 48%;
24
+ float: left;
25
+ margin-right: 3.8%; }
26
+ .projects ul.projects li.project .project-thumbnail,
27
+ .projects-page ul.projects li.project .project-thumbnail {
28
+ margin: 0 0 1em; }
29
+ .projects ul.projects li.project a,
30
+ .projects-page ul.projects li.project a {
31
+ text-decoration: none; }
32
+ .projects ul.projects li.project h3,
33
+ .projects-page ul.projects li.project h3 {
34
+ margin-bottom: .618em; }
35
+ .projects ul.projects li.project img,
36
+ .projects-page ul.projects li.project img {
37
+ max-width: 100%;
38
+ height: auto;
39
+ -webkit-box-shadow: none;
40
+ -moz-box-shadow: none;
41
+ box-shadow: none;
42
+ border-top-left-radius: 0;
43
+ border-top-right-radius: 0;
44
+ border-bottom-left-radius: 0;
45
+ border-bottom-right-radius: 0;
46
+ padding: 0;
47
+ border: 0;
48
+ margin: 0 auto;
49
+ display: block; }
50
+ .projects ul.projects li.project.first,
51
+ .projects-page ul.projects li.project.first {
52
+ clear: both; }
53
+ .projects ul.projects li.project.last,
54
+ .projects-page ul.projects li.project.last {
55
+ margin-right: 0; }
56
+ .projects ul.project-categories,
57
+ .projects-page ul.project-categories {
58
+ margin-left: 0 !important;
59
+ padding: 0 !important;
60
+ list-style: none; }
61
+ .projects ul.project-categories:after,
62
+ .projects-page ul.project-categories:after {
63
+ content: "";
64
+ display: table;
65
+ clear: both; }
66
+ .projects ul.project-categories li,
67
+ .projects-page ul.project-categories li {
68
+ display: inline-block;
69
+ margin-right: .5em;
70
+ list-style: none;
71
+ margin-left: 0 !important; }
72
+ .projects ul.project-categories li:after,
73
+ .projects-page ul.project-categories li:after {
74
+ content: "|";
75
+ display: inline-block;
76
+ padding-left: .5em; }
77
+ .projects ul.project-categories li:last-child:after,
78
+ .projects-page ul.project-categories li:last-child:after {
79
+ display: none; }
80
+ .projects .projects-pagination,
81
+ .projects-page .projects-pagination {
82
+ text-align: center; }
83
+ .projects .projects-pagination li,
84
+ .projects-page .projects-pagination li {
85
+ display: inline-block;
86
+ margin: 0 .236em; }
87
+
88
+ .projects.columns-2:after, .projects.columns-3:after, .projects.columns-4:after, .projects.columns-5:after, .projects.columns-6:after {
89
+ content: "";
90
+ display: table;
91
+ clear: both; }
92
+ .projects.columns-2 ul.projects li.project, .projects.columns-3 ul.projects li.project, .projects.columns-4 ul.projects li.project, .projects.columns-5 ul.projects li.project, .projects.columns-6 ul.projects li.project {
93
+ float: left;
94
+ margin-right: 3.8%;
95
+ clear: none; }
96
+ .projects.columns-2 ul.projects li.project.first, .projects.columns-3 ul.projects li.project.first, .projects.columns-4 ul.projects li.project.first, .projects.columns-5 ul.projects li.project.first, .projects.columns-6 ul.projects li.project.first {
97
+ clear: both; }
98
+ .projects.columns-2 ul.projects li.project.last, .projects.columns-3 ul.projects li.project.last, .projects.columns-4 ul.projects li.project.last, .projects.columns-5 ul.projects li.project.last, .projects.columns-6 ul.projects li.project.last {
99
+ margin-right: 0; }
100
+ .projects.columns-2 ul.projects li.project:nth-child(2), .projects.columns-3 ul.projects li.project:nth-child(2), .projects.columns-4 ul.projects li.project:nth-child(2), .projects.columns-5 ul.projects li.project:nth-child(2), .projects.columns-6 ul.projects li.project:nth-child(2) {
101
+ float: left;
102
+ clear: none; }
103
+ .projects.columns-1 ul.projects li.project {
104
+ width: 100%; }
105
+ .projects.columns-2 ul.projects li.project {
106
+ width: 48%; }
107
+ .projects.columns-3 ul.projects li.project {
108
+ width: 30.75%; }
109
+ .projects.columns-4 ul.projects li.project {
110
+ width: 22.05%; }
111
+ .projects.columns-5 ul.projects li.project {
112
+ width: 16.9%; }
113
+ .projects.columns-6 ul.projects li.project {
114
+ width: 13.5%; }
115
+
116
+ .single-project .project {
117
+ margin-bottom: 1.618em; }
118
+ .single-project .project:after {
119
+ content: "";
120
+ display: table;
121
+ clear: both; }
122
+ .single-project .project .single-project-short-description {
123
+ margin-bottom: 1.618em; }
124
+ .single-project .project .summary .single-project-categories li:before {
125
+ font-family: 'dashicons';
126
+ vertical-align: top;
127
+ margin-right: .618em;
128
+ content: "\f318"; }
129
+ .single-project .project .summary .client-name:before {
130
+ font-family: 'dashicons';
131
+ vertical-align: top;
132
+ margin-right: .618em;
133
+ content: "\f338"; }
134
+ .single-project .project .summary .project-url:before {
135
+ font-family: 'dashicons';
136
+ vertical-align: top;
137
+ margin-right: .618em;
138
+ content: "\f319"; }
139
+ .single-project .project .summary .single-project-categories,
140
+ .single-project .project .summary .url,
141
+ .single-project .project .summary .client {
142
+ margin-bottom: 1.618em; }
143
+ .single-project .project .summary .project-meta ul,
144
+ .single-project .project .summary .project-meta li {
145
+ list-style: none; }
146
+ .single-project .project .summary .purchase .amount {
147
+ display: block; }
148
+ .single-project .single-featured {
149
+ margin-bottom: 1.618em; }
150
+ .single-project.has-gallery .gallery {
151
+ width: 62%;
152
+ float: left; }
153
+ .single-project.has-gallery .gallery a {
154
+ display: block; }
155
+ .single-project.has-gallery .gallery img {
156
+ border-top-left-radius: 0;
157
+ border-top-right-radius: 0;
158
+ border-bottom-left-radius: 0;
159
+ border-bottom-right-radius: 0;
160
+ max-width: 100%;
161
+ height: auto;
162
+ -webkit-box-shadow: none;
163
+ -moz-box-shadow: none;
164
+ box-shadow: none;
165
+ display: block; }
166
+ .single-project.has-gallery .summary {
167
+ width: 38%;
168
+ float: right;
169
+ padding: 0 0 0 2.618em;
170
+ -webkit-box-sizing: border-box;
171
+ -moz-box-sizing: border-box;
172
+ box-sizing: border-box; }
173
+ .single-project.has-gallery .summary > div {
174
+ font-size: .857em; }
175
+ .single-project.no-gallery .summary:after {
176
+ content: "";
177
+ display: table;
178
+ clear: both; }
179
+ .single-project.no-gallery .summary .project_title,
180
+ .single-project.no-gallery .summary .single-project-description {
181
+ width: 62%;
182
+ float: left; }
183
+ .single-project.no-gallery .summary .project-meta {
184
+ width: 34%;
185
+ float: right; }
186
+ .single-project .projects-single-pagination:after {
187
+ content: "";
188
+ display: table;
189
+ clear: both; }
190
+ .single-project .projects-single-pagination .previous a,
191
+ .single-project .projects-single-pagination .next a {
192
+ text-decoration: none; }
193
+ .single-project .projects-single-pagination .previous {
194
+ float: right; }
195
+ .single-project .projects-single-pagination .previous a:after {
196
+ font-family: 'dashicons';
197
+ vertical-align: top;
198
+ margin-left: .618em;
199
+ content: "\f344"; }
200
+ .single-project .projects-single-pagination .next {
201
+ float: left; }
202
+ .single-project .projects-single-pagination .next a:before {
203
+ font-family: 'dashicons';
204
+ vertical-align: top;
205
+ margin-right: .618em;
206
+ content: "\f340"; }
207
+ .single-project .project-testimonial blockquote {
208
+ padding: 1.618em;
209
+ border: 1px solid rgba(0, 0, 0, 0.1);
210
+ position: relative;
211
+ margin: 0;
212
+ margin-bottom: 1.387em; }
213
+ .single-project .project-testimonial blockquote:after {
214
+ content: "";
215
+ display: block;
216
+ border: 10px solid rgba(0, 0, 0, 0.1);
217
+ border-color: rgba(0, 0, 0, 0.1) transparent transparent transparent;
218
+ position: absolute;
219
+ bottom: -21px;
220
+ left: 1em; }
221
+ .single-project .project-testimonial .quote:after {
222
+ content: "";
223
+ display: table;
224
+ clear: both; }
225
+ .single-project .project-testimonial .quote .avatar-link {
226
+ float: left;
227
+ display: block;
228
+ margin: 0 1em 1em 0; }
229
+ .single-project .project-testimonial .quote cite span {
230
+ display: block; }
231
+
232
+ /**
233
+ * Widgets
234
+ */
235
+ .projects_list_widget li {
236
+ margin-bottom: 1.618em; }
237
+ .projects_list_widget li a {
238
+ display: block; }
239
+ .projects_list_widget li a:after {
240
+ content: "";
241
+ display: table;
242
+ clear: both; }
243
+ .projects_list_widget li img {
244
+ float: right;
245
+ max-width: 60px;
246
+ height: auto; }
247
+ .projects_list_widget li .project-title {
248
+ float: left; }
249
+
250
+ .widget_projects_categories ul.children {
251
+ margin-left: 2.618em; }
252
+
253
+ /**
254
+ * Twenty Thirteen Specific
255
+ */
256
+ .single-project .twentythirteen .entry-summary {
257
+ padding: 0; }
258
+ .single-project .twentythirteen ul.single-project-categories {
259
+ padding-left: 0; }
260
+ .single-project.has-gallery .twentythirteen .summary {
261
+ width: 36%; }
262
+ .single-project.has-gallery .twentythirteen .gallery {
263
+ width: 61%; }
264
+
265
+ /**
266
+ * Twenty Fourteen Specific
267
+ */
268
+ .single-project.has-gallery .tfp .gallery {
269
+ width: 50%; }
270
+ .single-project.has-gallery .tfp .entry-summary {
271
+ width: 50%;
272
+ padding-left: 2.618em !important; }
273
+
274
+ .twentyfourteen .tfp {
275
+ padding: 12px 10px 0;
276
+ max-width: 474px;
277
+ margin: 0 auto; }
278
+ .twentyfourteen .tfp .project .entry-summary {
279
+ padding: 0;
280
+ margin: 0 0 1.618em !important; }
281
+ .twentyfourteen .tfp div.project.hentry.has-post-thumbnail {
282
+ margin-top: 0; }
283
+ .twentyfourteen .tfp .project .images img {
284
+ margin-bottom: 1em; }
285
+
286
+ @media screen and (min-width: 673px) {
287
+ .twentyfourteen .tfp {
288
+ padding-right: 30px;
289
+ padding-left: 30px; } }
290
+ @media screen and (min-width: 1040px) {
291
+ .twentyfourteen .tfp {
292
+ padding-right: 15px;
293
+ padding-left: 15px; } }
294
+ @media screen and (min-width: 1110px) {
295
+ .twentyfourteen .tfp {
296
+ padding-right: 30px;
297
+ padding-left: 30px; } }
298
+ @media screen and (min-width: 1218px) {
299
+ .twentyfourteen .tfp {
300
+ margin-right: 54px; }
301
+
302
+ .full-width .twentyfourteen .tfp {
303
+ margin-right: auto; } }
assets/css/{woo-projects.less → woo-projects.scss} RENAMED
@@ -1,5 +1,5 @@
1
  // Imports
2
- @import url(mixins.less);
3
 
4
  /**
5
  * Layout Styles
@@ -47,7 +47,8 @@
47
  -webkit-box-shadow: none;
48
  -moz-box-shadow: none;
49
  box-shadow: none;
50
- .border_radius(0);
 
51
  padding: 0;
52
  border: 0;
53
  margin: 0 auto;
@@ -67,7 +68,7 @@
67
  ul.project-categories {
68
  margin-left: 0 !important;
69
  padding: 0 !important;
70
- .clearfix;
71
  list-style: none;
72
 
73
  li {
@@ -100,9 +101,74 @@
100
  }
101
  }
102
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
103
  .single-project {
104
  .project {
105
- .clearfix;
106
  margin-bottom: 1.618em;
107
 
108
  .single-project-short-description {
@@ -112,19 +178,19 @@
112
  .summary {
113
  .single-project-categories {
114
  li:before {
115
- .iconbefore( "\f318" );
116
  }
117
  }
118
 
119
  .client-name {
120
  &:before {
121
- .iconbefore( "\f338" );
122
  }
123
  }
124
 
125
  .project-url {
126
  &:before {
127
- .iconbefore( "\f319" );
128
  }
129
  }
130
 
@@ -140,6 +206,12 @@
140
  list-style: none;
141
  }
142
  }
 
 
 
 
 
 
143
  }
144
  }
145
 
@@ -156,7 +228,8 @@
156
  }
157
 
158
  img {
159
- .border_radius(0);
 
160
  max-width: 100%;
161
  height: auto;
162
  -webkit-box-shadow: none;
@@ -169,7 +242,7 @@
169
  width: 38%;
170
  float: right;
171
  padding: 0 0 0 2.618em;
172
- .borderbox;
173
  > div {
174
  font-size: .857em;
175
  }
@@ -178,7 +251,7 @@
178
 
179
  &.no-gallery {
180
  .summary {
181
- .clearfix;
182
 
183
  .project_title,
184
  .single-project-description {
@@ -194,7 +267,7 @@
194
  }
195
 
196
  .projects-single-pagination {
197
- .clearfix;
198
 
199
  .previous,
200
  .next {
@@ -207,7 +280,7 @@
207
  float: right;
208
 
209
  a:after {
210
- .iconafter( "\f344" );
211
  }
212
  }
213
 
@@ -215,7 +288,7 @@
215
  float: left;
216
 
217
  a:before {
218
- .iconbefore( "\f340" );
219
  }
220
  }
221
  }
@@ -240,7 +313,7 @@
240
  }
241
 
242
  .quote {
243
- .clearfix();
244
 
245
  .avatar-link {
246
  float: left;
@@ -266,7 +339,7 @@
266
 
267
  a {
268
  display: block;
269
- .clearfix;
270
  }
271
 
272
  img {
1
  // Imports
2
+ @import 'mixins';
3
 
4
  /**
5
  * Layout Styles
47
  -webkit-box-shadow: none;
48
  -moz-box-shadow: none;
49
  box-shadow: none;
50
+ @include border-top-radius(0);
51
+ @include border-bottom-radius(0);
52
  padding: 0;
53
  border: 0;
54
  margin: 0 auto;
68
  ul.project-categories {
69
  margin-left: 0 !important;
70
  padding: 0 !important;
71
+ @include clearfix;
72
  list-style: none;
73
 
74
  li {
101
  }
102
  }
103
 
104
+ .projects {
105
+ &.columns-2,
106
+ &.columns-3,
107
+ &.columns-4,
108
+ &.columns-5,
109
+ &.columns-6 {
110
+ @include clearfix;
111
+
112
+ ul.projects li.project {
113
+ float: left;
114
+ margin-right: 3.8%;
115
+ clear: none;
116
+
117
+ &.first {
118
+ clear: both;
119
+ }
120
+
121
+ &.last {
122
+ margin-right: 0;
123
+ }
124
+
125
+ &:nth-child(2) {
126
+ float: left;
127
+ clear: none;
128
+ }
129
+ }
130
+ }
131
+
132
+ &.columns-1 {
133
+ ul.projects li.project {
134
+ width: 100%;
135
+ }
136
+ }
137
+
138
+ &.columns-2 {
139
+ ul.projects li.project {
140
+ width: 48%;
141
+ }
142
+ }
143
+
144
+ &.columns-3 {
145
+ ul.projects li.project {
146
+ width: 30.75%;
147
+ }
148
+ }
149
+
150
+ &.columns-4 {
151
+ ul.projects li.project {
152
+ width: 22.05%;
153
+ }
154
+ }
155
+
156
+ &.columns-5 {
157
+ ul.projects li.project {
158
+ width: 16.9%;
159
+ }
160
+ }
161
+
162
+ &.columns-6 {
163
+ ul.projects li.project {
164
+ width: 13.5%;
165
+ }
166
+ }
167
+ }
168
+
169
  .single-project {
170
  .project {
171
+ @include clearfix;
172
  margin-bottom: 1.618em;
173
 
174
  .single-project-short-description {
178
  .summary {
179
  .single-project-categories {
180
  li:before {
181
+ @include iconbefore( "\f318" );
182
  }
183
  }
184
 
185
  .client-name {
186
  &:before {
187
+ @include iconbefore( "\f338" );
188
  }
189
  }
190
 
191
  .project-url {
192
  &:before {
193
+ @include iconbefore( "\f319" );
194
  }
195
  }
196
 
206
  list-style: none;
207
  }
208
  }
209
+
210
+ .purchase {
211
+ .amount {
212
+ display: block;
213
+ }
214
+ }
215
  }
216
  }
217
 
228
  }
229
 
230
  img {
231
+ @include border-top-radius(0);
232
+ @include border-bottom-radius(0);
233
  max-width: 100%;
234
  height: auto;
235
  -webkit-box-shadow: none;
242
  width: 38%;
243
  float: right;
244
  padding: 0 0 0 2.618em;
245
+ @include box-sizing(border-box);
246
  > div {
247
  font-size: .857em;
248
  }
251
 
252
  &.no-gallery {
253
  .summary {
254
+ @include clearfix;
255
 
256
  .project_title,
257
  .single-project-description {
267
  }
268
 
269
  .projects-single-pagination {
270
+ @include clearfix;
271
 
272
  .previous,
273
  .next {
280
  float: right;
281
 
282
  a:after {
283
+ @include iconafter( "\f344" );
284
  }
285
  }
286
 
288
  float: left;
289
 
290
  a:before {
291
+ @include iconbefore( "\f340" );
292
  }
293
  }
294
  }
313
  }
314
 
315
  .quote {
316
+ @include clearfix();
317
 
318
  .avatar-link {
319
  float: left;
339
 
340
  a {
341
  display: block;
342
+ @include clearfix;
343
  }
344
 
345
  img {
assets/js/admin.js ADDED
@@ -0,0 +1,148 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ jQuery(document).ready(function($){
2
+
3
+ // Uploading files
4
+ var project_gallery_frame;
5
+ var $image_gallery_ids = $( '#project_image_gallery' );
6
+ var $project_images = $( '#project_images_container ul.project_images' );
7
+
8
+ jQuery( '.add_project_images' ).on( 'click', 'a', function( event ) {
9
+
10
+ var $el = $(this);
11
+ var attachment_ids = $image_gallery_ids.val();
12
+
13
+ event.preventDefault();
14
+
15
+ // If the media frame already exists, reopen it.
16
+ if ( project_gallery_frame ) {
17
+ project_gallery_frame.open();
18
+ return;
19
+ }
20
+
21
+ // Create the media frame.
22
+ project_gallery_frame = wp.media.frames.downloadable_file = wp.media({
23
+ // Set the title of the modal.
24
+ title: woo_projects_admin.gallery_title,
25
+ button: {
26
+ text: woo_projects_admin.gallery_button,
27
+ },
28
+ multiple: true
29
+ });
30
+
31
+ // When an image is selected, run a callback.
32
+ project_gallery_frame.on( 'select', function() {
33
+
34
+ var selection = project_gallery_frame.state().get( 'selection' );
35
+
36
+ selection.map( function( attachment ) {
37
+
38
+ attachment = attachment.toJSON();
39
+
40
+ if ( attachment.id ) {
41
+ attachment_ids = attachment_ids ? attachment_ids + "," + attachment.id : attachment.id;
42
+
43
+ $project_images.append('\
44
+ <li class="image" data-attachment_id="' + attachment.id + '">\
45
+ <img src="' + attachment.url + '" />\
46
+ <ul class="actions">\
47
+ <li><a href="#" class="delete" title="'+ woo_projects_admin.delete_image +'">&times;</a></li>\
48
+ </ul>\
49
+ </li>');
50
+ }
51
+
52
+ } );
53
+
54
+ $image_gallery_ids.val( attachment_ids );
55
+ });
56
+
57
+ // Finally, open the modal.
58
+ project_gallery_frame.open();
59
+ });
60
+
61
+ // Image ordering
62
+ $project_images.sortable({
63
+ items: 'li.image',
64
+ cursor: 'move',
65
+ scrollSensitivity:40,
66
+ forcePlaceholderSize: true,
67
+ forceHelperSize: false,
68
+ helper: 'clone',
69
+ opacity: 0.65,
70
+ placeholder: 'projects-metabox-sortable-placeholder',
71
+ start:function(event,ui){
72
+ ui.item.css( 'background-color','#f6f6f6' );
73
+ },
74
+ stop:function(event,ui){
75
+ ui.item.removeAttr( 'style' );
76
+ },
77
+ update: function(event, ui) {
78
+ var attachment_ids = '';
79
+ $( '#project_images_container ul li.image' ).css( 'cursor','default' ).each(function() {
80
+ var attachment_id = jQuery(this).attr( 'data-attachment_id' );
81
+ attachment_ids = attachment_ids + attachment_id + ',';
82
+ });
83
+ $image_gallery_ids.val( attachment_ids );
84
+ }
85
+ });
86
+ // Remove images
87
+ $( '#project_images_container' ).on( 'click', 'a.delete', function() {
88
+ $(this).closest( 'li.image' ).remove();
89
+
90
+ var attachment_ids = '';
91
+
92
+ $( '#project_images_container ul li.image' ).css( 'cursor','default' ).each(function() {
93
+ var attachment_id = jQuery(this).attr( 'data-attachment_id' );
94
+ attachment_ids = attachment_ids + attachment_id + ',';
95
+ });
96
+
97
+ $image_gallery_ids.val( attachment_ids );
98
+
99
+ return false;
100
+ } );
101
+
102
+
103
+
104
+ // Instantiates the variable that holds the media library frame.
105
+ var projects_data_frame;
106
+
107
+ // Runs when the image button is clicked.
108
+ jQuery( '#project-data' ).on( 'click', '.projects-upload', function( event ) {
109
+
110
+ // Prevents the default action from occuring.
111
+ event.preventDefault();
112
+
113
+ // store button object
114
+ $button = $(this);
115
+
116
+ // If the frame already exists, re-open it.
117
+ if ( projects_data_frame ) {
118
+ projects_data_frame.open();
119
+ return;
120
+ }
121
+
122
+ title = $button.data( 'title' ) ? $button.data( 'title' ) : woo_projects_admin.default_title;
123
+ button = $button.data( 'button' ) ? $button.data( 'button' ) : woo_projects_admin.default_button;
124
+ library = $button.data( 'library' ) ? $button.data( 'library' ) : '';
125
+
126
+ // Sets up the media library frame
127
+ projects_data_frame = wp.media.frames.projects_data_frame = wp.media({
128
+ title: title,
129
+ button: { text: button },
130
+ library: { type: library }
131
+ });
132
+
133
+ // Runs when an image is selected.
134
+ projects_data_frame.on( 'select', function(){
135
+
136
+ // Grabs the attachment selection and creates a JSON representation of the model.
137
+ var media_attachment = projects_data_frame.state().get( 'selection' ).first().toJSON();
138
+
139
+ // Sends the attachment URL to our custom image input field.
140
+ $button.prev( 'input.projects-upload-field' ).val( media_attachment.url );
141
+
142
+ });
143
+
144
+ // Opens the media library frame.
145
+ projects_data_frame.open();
146
+ });
147
+
148
+ });
classes/class-projects-admin.php CHANGED
@@ -43,17 +43,17 @@ class Projects_Admin {
43
  add_action( 'admin_menu', array( $this, 'meta_box_setup' ), 20 );
44
  add_action( 'save_post', array( $this, 'meta_box_save' ) );
45
  add_filter( 'enter_title_here', array( $this, 'enter_title_here' ) );
46
- add_action( 'admin_print_styles', array( $this, 'enqueue_admin_styles' ), 10 );
47
  add_filter( 'post_updated_messages', array( $this, 'updated_messages' ) );
48
  add_action( 'admin_notices', array( $this, 'configuration_admin_notice' ) );
49
  add_action( 'do_meta_boxes', array( $this, 'featured_image_label' ) );
50
  add_filter( 'admin_post_thumbnail_html', array( $this, 'featured_image_set_link' ) );
51
  add_filter( 'admin_post_thumbnail_html', array( $this, 'featured_image_remove_link' ) );
52
  add_filter( 'media_view_strings', array( $this, 'featured_image_popup_set_link' ) );
 
 
53
 
54
  if ( $pagenow == 'edit.php' && isset( $_GET['post_type'] ) && esc_attr( $_GET['post_type'] ) == $this->post_type ) {
55
- add_filter( 'manage_edit-' . $this->post_type . '_columns', array( $this, 'register_custom_column_headings' ), 10, 1 );
56
- add_action( 'manage_posts_custom_column', array( $this, 'register_custom_columns' ), 10, 2 );
57
  add_action( 'restrict_manage_posts', array( $this, 'projects_restrict_manage_posts' ) );
58
  add_filter( 'parse_query', array( $this, 'projects_post_type_request' ) );
59
  }
@@ -288,9 +288,9 @@ class Projects_Admin {
288
  $html .= '<tbody>' . "\n";
289
 
290
  foreach ( $field_data as $k => $v ) {
291
- $data = $v['default'];
292
  if ( isset( $fields['_' . $k] ) && isset( $fields['_' . $k][0] ) ) {
293
- $data = $fields['_' . $k][0];
294
  }
295
 
296
  switch ( $v['type'] ) {
@@ -303,45 +303,80 @@ class Projects_Admin {
303
  case 'url':
304
  $field = '<input name="' . esc_attr( $k ) . '" type="text" id="' . esc_attr( $k ) . '" class="regular-text" value="' . esc_attr( $data ) . '" />';
305
  $html .= '<tr valign="top"><th scope="row"><label for="' . esc_attr( $k ) . '">' . $v['name'] . '</label></th><td>' . $field . "\n";
306
- $html .= '<p class="description">' . $v['description'] . '</p>' . "\n";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
307
  $html .= '</td><tr/>' . "\n";
308
  break;
309
  case 'radio':
310
  $field = '';
311
-
312
  if ( isset( $v['options'] ) && is_array( $v['options'] ) ) {
313
  foreach ( $v['options'] as $val => $option ){
314
- $field .= '<label for="' . esc_attr( $v['name'] . '-' . $val ) . '"><input id="' . esc_attr( $v['name'] . '-' . $val ) . '" type="radio" name="' . esc_attr( $k ) . '" value="' . esc_attr( $val ) . '" ' . checked( $val, $data, false ) . ' / >'. $option . '</label>' . "\n";
315
  }
316
  }
317
-
318
- $html .= '<tr valign="top" class="projects-radio"><th scope="row"><label>' . $v['name'] . '</label></th><td>' . $field . "\n";
319
- $html .= '<p class="description">' . $v['description'] . '</p>' . "\n";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
320
  $html .= '</td><tr/>' . "\n";
321
  break;
322
  case 'select':
323
  $field = '<select name="' . esc_attr( $k ) . '" id="' . esc_attr( $k ) . '" >'. "\n";
324
-
325
  if ( isset( $v['options'] ) && is_array( $v['options'] ) ) {
326
  foreach ( $v['options'] as $val => $option ){
327
  $field .= '<option value="' . esc_attr( $val ) . '" ' . selected( $val, $data, false ) . '>'. $option .'</option>' . "\n";
328
  }
329
  }
330
-
331
  $field .= '</select>'. "\n";
332
  $html .= '<tr valign="top"><th scope="row"><label for="' . esc_attr( $k ) . '">' . $v['name'] . '</label></th><td>' . $field . "\n";
333
- $html .= '<p class="description">' . $v['description'] . '</p>' . "\n";
334
  $html .= '</td><tr/>' . "\n";
335
  break;
336
  default:
337
  $field = apply_filters( 'projects_data_field_type_' . $v['type'], null, $k, $data, $v );
338
-
339
  if ( $field ) {
340
  $html .= '<tr valign="top"><th scope="row"><label for="' . esc_attr( $k ) . '">' . $v['name'] . '</label></th><td>' . $field . "\n";
341
- $html .= '<p class="description">' . $v['description'] . '</p>' . "\n";
342
  $html .= '</td><tr/>' . "\n";
343
  }
344
-
345
  break;
346
  }
347
 
@@ -383,6 +418,7 @@ class Projects_Admin {
383
  ' . wp_get_attachment_image( $attachment_id, 'thumbnail' ) . '
384
  <ul class="actions">
385
  <li><a href="#" class="delete" title="' . __( 'Delete image', 'projects-by-woothemes' ) . '">&times;</a></li>
 
386
  </ul>
387
  </li>';
388
  }
@@ -395,114 +431,6 @@ class Projects_Admin {
395
  <p class="add_project_images hide-if-no-js">
396
  <a href="#"><?php printf( __( 'Add %s gallery images', 'projects-by-woothemes' ), strtolower( $projects->singular_name ) ); ?></a>
397
  </p>
398
- <script type="text/javascript">
399
- jQuery(document).ready(function($){
400
-
401
- // Uploading files
402
- var project_gallery_frame;
403
- var $image_gallery_ids = $( '#project_image_gallery' );
404
- var $project_images = $( '#project_images_container ul.project_images' );
405
-
406
- jQuery( '.add_project_images' ).on( 'click', 'a', function( event ) {
407
-
408
- var $el = $(this);
409
- var attachment_ids = $image_gallery_ids.val();
410
-
411
- event.preventDefault();
412
-
413
- // If the media frame already exists, reopen it.
414
- if ( project_gallery_frame ) {
415
- project_gallery_frame.open();
416
- return;
417
- }
418
-
419
- // Create the media frame.
420
- project_gallery_frame = wp.media.frames.downloadable_file = wp.media({
421
- // Set the title of the modal.
422
- title: '<?php _e( 'Add Images to Project Gallery', 'projects-by-woothemes' ); ?>',
423
- button: {
424
- text: '<?php _e( 'Add to gallery', 'projects-by-woothemes' ); ?>',
425
- },
426
- multiple: true
427
- });
428
-
429
- // When an image is selected, run a callback.
430
- project_gallery_frame.on( 'select', function() {
431
-
432
- var selection = project_gallery_frame.state().get( 'selection' );
433
-
434
- selection.map( function( attachment ) {
435
-
436
- attachment = attachment.toJSON();
437
-
438
- if ( attachment.id ) {
439
- attachment_ids = attachment_ids ? attachment_ids + "," + attachment.id : attachment.id;
440
-
441
- $project_images.append('\
442
- <li class="image" data-attachment_id="' + attachment.id + '">\
443
- <img src="' + attachment.url + '" />\
444
- <ul class="actions">\
445
- <li><a href="#" class="delete" title="<?php _e( 'Delete image', 'projects-by-woothemes' ); ?>">&times;</a></li>\
446
- </ul>\
447
- </li>');
448
- }
449
-
450
- } );
451
-
452
- $image_gallery_ids.val( attachment_ids );
453
- });
454
-
455
- // Finally, open the modal.
456
- project_gallery_frame.open();
457
- });
458
-
459
- // Image ordering
460
- $project_images.sortable({
461
- items: 'li.image',
462
- cursor: 'move',
463
- scrollSensitivity:40,
464
- forcePlaceholderSize: true,
465
- forceHelperSize: false,
466
- helper: 'clone',
467
- opacity: 0.65,
468
- placeholder: 'projects-metabox-sortable-placeholder',
469
- start:function(event,ui){
470
- ui.item.css( 'background-color','#f6f6f6' );
471
- },
472
- stop:function(event,ui){
473
- ui.item.removeAttr( 'style' );
474
- },
475
- update: function(event, ui) {
476
- var attachment_ids = '';
477
-
478
- $( '#project_images_container ul li.image' ).css( 'cursor','default' ).each(function() {
479
- var attachment_id = jQuery(this).attr( 'data-attachment_id' );
480
- attachment_ids = attachment_ids + attachment_id + ',';
481
- });
482
-
483
- $image_gallery_ids.val( attachment_ids );
484
- }
485
- });
486
-
487
- // Remove images
488
- $( '#project_images_container' ).on( 'click', 'a.delete', function() {
489
-
490
- $(this).closest( 'li.image' ).remove();
491
-
492
- var attachment_ids = '';
493
-
494
- $( '#project_images_container ul li.image' ).css( 'cursor','default' ).each(function() {
495
- var attachment_id = jQuery(this).attr( 'data-attachment_id' );
496
- attachment_ids = attachment_ids + attachment_id + ',';
497
- });
498
-
499
- $image_gallery_ids.val( attachment_ids );
500
-
501
- return false;
502
- } );
503
-
504
- });
505
- </script>
506
  <?php
507
  } // End meta_box_content_project_images()
508
 
@@ -537,20 +465,33 @@ class Projects_Admin {
537
 
538
  foreach ( $fields as $f ) {
539
 
540
- ${$f} = strip_tags(trim($_POST[$f]));
541
-
542
- // Escape the URLs.
543
- if ( 'url' == $field_data[$f]['type'] ) {
544
- ${$f} = esc_url( ${$f} );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
545
  }
546
 
547
- if ( get_post_meta( $post_id, '_' . $f ) == '' ) {
548
- add_post_meta( $post_id, '_' . $f, ${$f}, true );
549
- } elseif( ${$f} != get_post_meta( $post_id, '_' . $f, true ) ) {
550
- update_post_meta( $post_id, '_' . $f, ${$f} );
551
- } elseif ( ${$f} == '' ) {
552
- delete_post_meta( $post_id, '_' . $f, get_post_meta( $post_id, '_' . $f, true ) );
553
- }
554
  }
555
 
556
  // Save the project gallery image IDs.
@@ -609,8 +550,19 @@ class Projects_Admin {
609
  * @return void
610
  */
611
  public function enqueue_admin_styles () {
612
- wp_register_style( 'projects-admin', $this->assets_url . '/css/admin.css', array(), '1.0.0' );
613
- wp_enqueue_style( 'projects-admin' );
 
 
 
 
 
 
 
 
 
 
 
614
  } // End enqueue_admin_styles()
615
 
616
  /**
@@ -715,4 +667,4 @@ class Projects_Admin {
715
  return null;
716
  }
717
 
718
- } // End Class
43
  add_action( 'admin_menu', array( $this, 'meta_box_setup' ), 20 );
44
  add_action( 'save_post', array( $this, 'meta_box_save' ) );
45
  add_filter( 'enter_title_here', array( $this, 'enter_title_here' ) );
46
+ add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_admin_styles' ) );
47
  add_filter( 'post_updated_messages', array( $this, 'updated_messages' ) );
48
  add_action( 'admin_notices', array( $this, 'configuration_admin_notice' ) );
49
  add_action( 'do_meta_boxes', array( $this, 'featured_image_label' ) );
50
  add_filter( 'admin_post_thumbnail_html', array( $this, 'featured_image_set_link' ) );
51
  add_filter( 'admin_post_thumbnail_html', array( $this, 'featured_image_remove_link' ) );
52
  add_filter( 'media_view_strings', array( $this, 'featured_image_popup_set_link' ) );
53
+ add_filter( 'manage_edit-' . $this->post_type . '_columns', array( $this, 'register_custom_column_headings' ), 10, 1 );
54
+ add_action( 'manage_' . $this->post_type .'_posts_custom_column', array( $this, 'register_custom_columns' ), 10, 2 );
55
 
56
  if ( $pagenow == 'edit.php' && isset( $_GET['post_type'] ) && esc_attr( $_GET['post_type'] ) == $this->post_type ) {
 
 
57
  add_action( 'restrict_manage_posts', array( $this, 'projects_restrict_manage_posts' ) );
58
  add_filter( 'parse_query', array( $this, 'projects_post_type_request' ) );
59
  }
288
  $html .= '<tbody>' . "\n";
289
 
290
  foreach ( $field_data as $k => $v ) {
291
+ $data = isset( $v['default'] ) ? $v['default'] : '';
292
  if ( isset( $fields['_' . $k] ) && isset( $fields['_' . $k][0] ) ) {
293
+ $data = maybe_unserialize( $fields['_' . $k][0] );
294
  }
295
 
296
  switch ( $v['type'] ) {
303
  case 'url':
304
  $field = '<input name="' . esc_attr( $k ) . '" type="text" id="' . esc_attr( $k ) . '" class="regular-text" value="' . esc_attr( $data ) . '" />';
305
  $html .= '<tr valign="top"><th scope="row"><label for="' . esc_attr( $k ) . '">' . $v['name'] . '</label></th><td>' . $field . "\n";
306
+ if( isset( $v['description'] ) ) $html .= '<p class="description">' . $v['description'] . '</p>' . "\n";
307
+ $html .= '</td><tr/>' . "\n";
308
+ break;
309
+ case 'textarea':
310
+ $field = '<textarea name="' . esc_attr( $k ) . '" id="' . esc_attr( $k ) . '" class="large-text">' . esc_attr( $data ) . '</textarea>';
311
+ $html .= '<tr valign="top"><th scope="row"><label for="' . esc_attr( $k ) . '">' . $v['name'] . '</label></th><td>' . $field . "\n";
312
+ if( isset( $v['description'] ) ) $html .= '<p class="description">' . $v['description'] . '</p>' . "\n";
313
+ $html .= '</td><tr/>' . "\n";
314
+ break;
315
+ case 'upload':
316
+ $data_atts = '';
317
+ if ( isset( $v['media-frame']['title'] ) ){
318
+ $data_atts .= sprintf( 'data-title="%s" ', esc_attr( $v['media-frame']['title'] ) );
319
+ }
320
+ if ( isset( $v['media-frame']['button'] ) ){
321
+ $data_atts .= sprintf( 'data-button="%s" ', esc_attr( $v['media-frame']['button'] ) );
322
+ }
323
+ if ( isset( $v['media-frame']['library'] ) ){
324
+ $data_atts .= sprintf( 'data-library="%s" ', esc_attr( $v['media-frame']['library'] ) );
325
+ }
326
+
327
+ $field = '<input name="' . esc_attr( $k ) . '" type="text" id="' . esc_attr( $k ) . '" class="regular-text projects-upload-field" value="' . esc_attr( $data ) . '" />';
328
+ $field .= '<button id="' . esc_attr( $k ) . '" class="projects-upload button"' . $data_atts . '>' . $v['label'] . '</button>';
329
+ $html .= '<tr valign="top"><th scope="row"><label for="' . esc_attr( $k ) . '">' . $v['name'] . '</label></th><td>' . $field . "\n";
330
+ if( isset( $v['description'] ) ) $html .= '<p class="description">' . $v['description'] . '</p>' . "\n";
331
  $html .= '</td><tr/>' . "\n";
332
  break;
333
  case 'radio':
334
  $field = '';
 
335
  if ( isset( $v['options'] ) && is_array( $v['options'] ) ) {
336
  foreach ( $v['options'] as $val => $option ){
337
+ $field .= '<p><label for="' . esc_attr( $v['name'] . '-' . $val ) . '"><input id="' . esc_attr( $v['name'] . '-' . $val ) . '" type="radio" name="' . esc_attr( $k ) . '" value="' . esc_attr( $val ) . '" ' . checked( $val, $data, false ) . ' / >'. $option . '</label></p>' . "\n";
338
  }
339
  }
340
+ $html .= '<tr valign="top"><th scope="row"><label>' . $v['name'] . '</label></th><td>' . $field . "\n";
341
+ if( isset( $v['description'] ) ) $html .= '<p class="description">' . $v['description'] . '</p>' . "\n";
342
+ $html .= '</td><tr/>' . "\n";
343
+ break;
344
+ case 'checkbox':
345
+ $field = '<p><input id="' . esc_attr( $v['name'] ) . '" type="checkbox" name="' . esc_attr( $k ) . '" value="1" ' . checked( 'yes', $data, false ) . ' / ></p>' . "\n";
346
+ if( isset( $v['description'] ) ) $field .= '<p class="description">' . $v['description'] . '</p>' . "\n";
347
+ $html .= '<tr valign="top"><th scope="row"><label for="' . esc_attr( $v['name'] ) . '">' . $v['name'] . '</label></th><td>' . $field . "\n";
348
+ $html .= '</td><tr/>' . "\n";
349
+ break;
350
+ case 'multicheck':
351
+ $field = '';
352
+ if( isset( $v['options'] ) && is_array( $v['options'] ) ){
353
+ foreach ( $v['options'] as $val => $option ){
354
+ $field .= '<p><label for="' . esc_attr( $v['name'] . '-' . $val ) . '"><input id="' . esc_attr( $v['name'] . '-' . $val ) . '" type="checkbox" name="' . esc_attr( $k ) . '[]" value="' . esc_attr( $val ) . '" ' . checked( 1, in_array( $val, (array) $data ), false ) . ' / >'. $option . '</label></p>' . "\n";
355
+ }
356
+ }
357
+ $html .= '<tr valign="top"><th scope="row"><label>' . $v['name'] . '</label></th><td>' . $field . "\n";
358
+ if( isset( $v['description'] ) ) $html .= '<p class="description">' . $v['description'] . '</p>' . "\n";
359
  $html .= '</td><tr/>' . "\n";
360
  break;
361
  case 'select':
362
  $field = '<select name="' . esc_attr( $k ) . '" id="' . esc_attr( $k ) . '" >'. "\n";
 
363
  if ( isset( $v['options'] ) && is_array( $v['options'] ) ) {
364
  foreach ( $v['options'] as $val => $option ){
365
  $field .= '<option value="' . esc_attr( $val ) . '" ' . selected( $val, $data, false ) . '>'. $option .'</option>' . "\n";
366
  }
367
  }
 
368
  $field .= '</select>'. "\n";
369
  $html .= '<tr valign="top"><th scope="row"><label for="' . esc_attr( $k ) . '">' . $v['name'] . '</label></th><td>' . $field . "\n";
370
+ if( isset( $v['description'] ) ) $html .= '<p class="description">' . $v['description'] . '</p>' . "\n";
371
  $html .= '</td><tr/>' . "\n";
372
  break;
373
  default:
374
  $field = apply_filters( 'projects_data_field_type_' . $v['type'], null, $k, $data, $v );
 
375
  if ( $field ) {
376
  $html .= '<tr valign="top"><th scope="row"><label for="' . esc_attr( $k ) . '">' . $v['name'] . '</label></th><td>' . $field . "\n";
377
+ if( isset( $v['description'] ) ) $html .= '<p class="description">' . $v['description'] . '</p>' . "\n";
378
  $html .= '</td><tr/>' . "\n";
379
  }
 
380
  break;
381
  }
382
 
418
  ' . wp_get_attachment_image( $attachment_id, 'thumbnail' ) . '
419
  <ul class="actions">
420
  <li><a href="#" class="delete" title="' . __( 'Delete image', 'projects-by-woothemes' ) . '">&times;</a></li>
421
+ <li><a href="' . get_edit_post_link( $attachment_id ) . '" class="edit">' . __( 'Edit image', 'projects-by-woothemes' ) . '</a></li>
422
  </ul>
423
  </li>';
424
  }
431
  <p class="add_project_images hide-if-no-js">
432
  <a href="#"><?php printf( __( 'Add %s gallery images', 'projects-by-woothemes' ), strtolower( $projects->singular_name ) ); ?></a>
433
  </p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
434
  <?php
435
  } // End meta_box_content_project_images()
436
 
465
 
466
  foreach ( $fields as $f ) {
467
 
468
+ switch ( $field_data[$f]['type'] ) {
469
+ case 'url':
470
+ ${$f} = isset( $_POST[$f] ) ? esc_url( $_POST[$f] ) : '';
471
+ break;
472
+ case 'textarea':
473
+ ${$f} = isset( $_POST[$f] ) ? wp_kses_post( trim( $_POST[$f] ) ) : '';
474
+ break;
475
+ case 'checkbox':
476
+ ${$f} = isset( $_POST[$f] ) ? 'yes' : 'no';
477
+ break;
478
+ case 'multicheck':
479
+ // ensure checkbox is array and whitelist accepted values against options
480
+ ${$f} = isset( $_POST[$f] ) && is_array( $field_data[$f]['options'] ) ? (array) array_intersect( (array) $_POST[$f], array_flip( $field_data[$f]['options'] ) ) : '';
481
+ break;
482
+ case 'radio':
483
+ case 'select':
484
+ // whitelist accepted value against options
485
+ ${$f} = isset( $_POST[$f] ) && is_array( $field_data[$f]['options'] ) && in_array( $_POST[$f], $field_data[$f]['options'] ) ? $_POST[$f] : '';
486
+ break;
487
+ default :
488
+ ${$f} = isset( $_POST[$f] ) ? strip_tags( trim( $_POST[$f] ) ) : '';
489
+ break;
490
  }
491
 
492
+ // save it
493
+ update_post_meta( $post_id, '_' . $f, ${$f} );
494
+
 
 
 
 
495
  }
496
 
497
  // Save the project gallery image IDs.
550
  * @return void
551
  */
552
  public function enqueue_admin_styles () {
553
+ wp_enqueue_style( 'projects-admin', $this->assets_url . '/css/admin.css', array(), '1.0.0' );
554
+ wp_enqueue_script( 'projects-admin', $this->assets_url . '/js/admin.js', array( 'jquery', 'media-editor' ), '1.0.0', true );
555
+
556
+ wp_localize_script( 'projects-admin', 'woo_projects_admin',
557
+ array(
558
+ 'gallery_title' => __( 'Add Images to Project Gallery', 'projects-by-woothemes' ),
559
+ 'gallery_button' => __( 'Add to gallery', 'projects-by-woothemes' ),
560
+ 'delete_image' => __( 'Delete image', 'projects-by-woothemes' ),
561
+ 'default_title' => __( 'Upload', 'projects-by-woothemes' ),
562
+ 'default_button' => __( 'Select this', 'projects-by-woothemes' ),
563
+ )
564
+ );
565
+
566
  } // End enqueue_admin_styles()
567
 
568
  /**
667
  return null;
668
  }
669
 
670
+ } // End Class
classes/class-projects-integrations.php ADDED
@@ -0,0 +1,326 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly.
3
+
4
+ /**
5
+ * WooThemes Projects Integrations Class
6
+ *
7
+ * All functionality pertaining to the integration between projects and other plugins.
8
+ *
9
+ * @package WordPress
10
+ * @subpackage Projects
11
+ * @category Plugin
12
+ * @since 1.2.0
13
+ */
14
+ class Projects_Integrations {
15
+ private $token;
16
+ private $post_type;
17
+
18
+ /**
19
+ * Constructor function.
20
+ *
21
+ * @access public
22
+ * @since 1.2.0
23
+ * @return void
24
+ */
25
+ public function __construct() {
26
+ $this->token = 'projects';
27
+ $this->post_type = 'project';
28
+
29
+ // Testimonials Integration
30
+ add_action( 'init', array( $this, 'projects_testimonials_init' ) );
31
+
32
+ // WooCommerce Integration
33
+ add_action( 'init', array( $this, 'projects_woocommerce_init' ) );
34
+
35
+ } // End __construct()
36
+
37
+
38
+ /**
39
+ * Init function for the Testimonials plugin integration.
40
+ * @since 1.1.0
41
+ * @return void
42
+ */
43
+ public function projects_testimonials_init() {
44
+
45
+ if ( class_exists( 'Woothemes_Testimonials' ) ) {
46
+
47
+ // Add custom fields
48
+ add_filter( 'projects_custom_fields', array( $this, 'testimonials_custom_fields' ) );
49
+
50
+ // Enqueue admin JavaScript
51
+ add_action( 'admin_enqueue_scripts', array( $this, 'testimonials_admin_scripts' ) );
52
+ add_action( 'wp_ajax_get_testimonials', array( $this, 'get_testimonials_callback' ) );
53
+ add_action( 'admin_footer', array( $this, 'testimonials_javascript' ) );
54
+
55
+ }
56
+
57
+ } // End projects_testimonials_init()
58
+
59
+ public function testimonials_admin_scripts () {
60
+ wp_enqueue_script( 'jquery-ui-autocomplete', null, array( 'jquery' ), null, false);
61
+ } // End projects_testimonials_admin_scripts()
62
+
63
+ /**
64
+ * Ajax callback to search for testimonials.
65
+ * @param string $query Search Query.
66
+ * @since 1.1.0
67
+ * @return json Search Results.
68
+ */
69
+ public function get_testimonials_callback() {
70
+
71
+ check_ajax_referer( 'projects_ajax_get_testimonials', 'security' );
72
+
73
+ $term = urldecode( stripslashes( strip_tags( $_GET['term'] ) ) );
74
+
75
+ if ( !empty( $term ) ) {
76
+
77
+ header( 'Content-Type: application/json; charset=utf-8' );
78
+
79
+ $query_args = array(
80
+ 'post_type' => 'testimonial',
81
+ 'orderby' => 'title',
82
+ 's' => $term,
83
+ 'suppress_filters' => false
84
+ );
85
+
86
+ $testimonials = get_posts( $query_args );
87
+
88
+ $found_testimonials = array();
89
+
90
+ if ( $testimonials ) {
91
+ foreach ( $testimonials as $testimonial ) {
92
+ $found_testimonials[] = array( 'id' => $testimonial->ID, 'title' => $testimonial->post_title );
93
+ }
94
+ }
95
+
96
+ echo json_encode( $found_testimonials );
97
+
98
+ }
99
+
100
+ die();
101
+
102
+ } // End get_testimonials_callback()
103
+
104
+ /**
105
+ * Output Testimonials admin javascript
106
+ * @since 1.1.0
107
+ * @return void
108
+ */
109
+ public function testimonials_javascript() {
110
+
111
+ global $pagenow, $post_type;
112
+
113
+ if ( ( $pagenow == 'post.php' || $pagenow == 'post-new.php' ) && isset( $post_type ) && esc_attr( $post_type ) == $this->post_type ) {
114
+
115
+ $ajax_nonce = wp_create_nonce( 'projects_ajax_get_testimonials' );
116
+
117
+ ?>
118
+ <script type="text/javascript" >
119
+ jQuery(function() {
120
+ jQuery( "#testimonials_search" ).autocomplete({
121
+ minLength: 2,
122
+ source: function ( request, response ) {
123
+ jQuery.ajax({
124
+ url: ajaxurl,
125
+ dataType: 'json',
126
+ data: {
127
+ action: 'get_testimonials',
128
+ security: '<?php echo $ajax_nonce; ?>',
129
+ term: request.term
130
+ },
131
+ success: function( data ) {
132
+ response( jQuery.map( data, function( item ) {
133
+ return {
134
+ label: item.title,
135
+ value: item.id
136
+ }
137
+ }));
138
+ }
139
+ });
140
+ },
141
+ select: function ( event, ui ) {
142
+ event.preventDefault();
143
+ jQuery( "#testimonials_search" ).val( ui.item.label );
144
+ jQuery( "#testimonials_id" ).val( ui.item.value );
145
+ },
146
+ change: function ( event, ui ) {
147
+ event.preventDefault();
148
+ if ( 0 == jQuery( "#testimonials_search" ).val().length ) {
149
+ jQuery( "#testimonials_id" ).val( '' );
150
+ }
151
+ }
152
+ });
153
+ });
154
+ </script>
155
+ <?php
156
+ }
157
+ } // End testimonials_javascript()
158
+
159
+ public function testimonials_custom_fields( $fields ) {
160
+
161
+ $fields['testimonials_search'] = array(
162
+ 'name' => __( 'Testimonial', 'projects-by-woothemes' ),
163
+ 'description' => __( 'Search for Testimonial to link to this Project. (Optional)', 'projects-by-woothemes' ),
164
+ 'type' => 'text',
165
+ 'default' => '',
166
+ 'section' => 'info',
167
+ );
168
+
169
+ $fields['testimonials_id'] = array(
170
+ 'name' => __( 'Testimonial ID', 'projects-by-woothemes' ),
171
+ 'description' => __( 'Holds the id of the selected testimonial.', 'projects-by-woothemes' ),
172
+ 'type' => 'hidden',
173
+ 'default' => 0,
174
+ 'section' => 'info',
175
+ );
176
+
177
+ return $fields;
178
+
179
+ } // End testimonials_custom_fields()
180
+
181
+ /**
182
+ * Init function for the WooCommerce plugin integration.
183
+ * @since 1.2.0
184
+ * @return void
185
+ */
186
+ public function projects_woocommerce_init() {
187
+
188
+ if ( class_exists( 'WooCommerce' ) ) {
189
+
190
+ // Add custom fields
191
+ add_filter( 'projects_custom_fields', array( $this, 'woocommerce_custom_fields' ) );
192
+
193
+ // Enqueue admin JavaScript
194
+ add_action( 'admin_enqueue_scripts', array( $this, 'woocommerce_admin_scripts' ) );
195
+ add_action( 'wp_ajax_get_products', array( $this, 'get_products_callback' ) );
196
+ add_action( 'admin_footer', array( $this, 'woocommerce_javascript' ) );
197
+
198
+ }
199
+
200
+ } // End projects_woocommerce_init()
201
+
202
+ public function woocommerce_admin_scripts () {
203
+ wp_enqueue_script( 'jquery-ui-autocomplete', null, array( 'jquery' ), null, false);
204
+ } // End projects_woocommerce_admin_scripts()
205
+
206
+ /**
207
+ * Ajax callback to search for products.
208
+ * @param string $query Search Query.
209
+ * @since 1.2.0
210
+ * @return json Search Results.
211
+ */
212
+ public function get_products_callback() {
213
+
214
+ check_ajax_referer( 'projects_ajax_get_products', 'security' );
215
+
216
+ $term = urldecode( stripslashes( strip_tags( $_GET['term'] ) ) );
217
+
218
+ if ( !empty( $term ) ) {
219
+
220
+ header( 'Content-Type: application/json; charset=utf-8' );
221
+
222
+ $query_args = array(
223
+ 'post_type' => 'product',
224
+ 'orderby' => 'title',
225
+ 's' => $term,
226
+ 'suppress_filters' => false
227
+ );
228
+
229
+ $products = get_posts( $query_args );
230
+
231
+ $found_products = array();
232
+
233
+ if ( $products ) {
234
+ foreach ( $products as $product ) {
235
+ $found_products[] = array( 'id' => $product->ID, 'title' => $product->post_title );
236
+ }
237
+ }
238
+
239
+ echo json_encode( $found_products );
240
+
241
+ }
242
+
243
+ die();
244
+
245
+ } // End get_products_callback()
246
+
247
+ /**
248
+ * Output Products admin javascript
249
+ * @since 1.2.0
250
+ * @return void
251
+ */
252
+ public function woocommerce_javascript() {
253
+
254
+ global $pagenow, $post_type;
255
+
256
+ if ( ( $pagenow == 'post.php' || $pagenow == 'post-new.php' ) && isset( $post_type ) && esc_attr( $post_type ) == $this->post_type ) {
257
+
258
+ $ajax_nonce = wp_create_nonce( 'projects_ajax_get_products' );
259
+
260
+ ?>
261
+ <script type="text/javascript" >
262
+ jQuery(function() {
263
+ jQuery( "#products_search" ).autocomplete({
264
+ minLength: 2,
265
+ source: function ( request, response ) {
266
+ jQuery.ajax({
267
+ url: ajaxurl,
268
+ dataType: 'json',
269
+ data: {
270
+ action: 'get_products',
271
+ security: '<?php echo $ajax_nonce; ?>',
272
+ term: request.term
273
+ },
274
+ success: function( data ) {
275
+ response( jQuery.map( data, function( item ) {
276
+ return {
277
+ label: item.title,
278
+ value: item.id
279
+ }
280
+ }));
281
+ }
282
+ });
283
+ },
284
+ select: function ( event, ui ) {
285
+ event.preventDefault();
286
+ jQuery( "#products_search" ).val( ui.item.label );
287
+ jQuery( "#products_id" ).val( ui.item.value );
288
+ },
289
+ change: function ( event, ui ) {
290
+ event.preventDefault();
291
+ if ( 0 == jQuery( "#products_search" ).val().length ) {
292
+ jQuery( "#products_id" ).val( '' );
293
+ }
294
+ }
295
+ });
296
+ });
297
+ </script>
298
+ <?php
299
+ }
300
+ } // End woocommerce_javascript()
301
+
302
+ public function woocommerce_custom_fields( $fields ) {
303
+
304
+ $fields['products_search'] = array(
305
+ 'name' => __( 'Product', 'projects-by-woothemes' ),
306
+ 'description' => __( 'Search for Product to link to this Project. (Optional)', 'projects-by-woothemes' ),
307
+ 'type' => 'text',
308
+ 'default' => '',
309
+ 'section' => 'info',
310
+ );
311
+
312
+ $fields['products_id'] = array(
313
+ 'name' => __( 'Product ID', 'projects-by-woothemes' ),
314
+ 'description' => __( 'Holds the id of the selected product.', 'projects-by-woothemes' ),
315
+ 'type' => 'hidden',
316
+ 'default' => 0,
317
+ 'section' => 'info',
318
+ );
319
+
320
+ return $fields;
321
+
322
+ } // End woocommerce_custom_fields()
323
+
324
+ } // End Class
325
+
326
+ new Projects_Integrations();
classes/class-projects-settings.php CHANGED
@@ -96,15 +96,18 @@ class Projects_Settings {
96
  $defaults = apply_filters( 'projects_default_image_size', array(
97
  'project-archive' => array(
98
  'width' => 300,
99
- 'height' => 300
 
100
  ),
101
  'project-single' => array(
102
  'width' => 1024,
103
- 'height' => 1024
 
104
  ),
105
  'project-thumbnail' => array(
106
  'width' => 100,
107
- 'height' => 100
 
108
  )
109
  ) );
110
 
@@ -118,7 +121,8 @@ class Projects_Settings {
118
  <?php _e( 'Archive Images', 'projects-by-woothemes' ); ?>
119
  </th>
120
  <td>
121
- <?php _e( 'Width:', 'projects-by-woothemes' ); ?> <input type="text" size="3" name="projects[project-archive][width]" value="<?php echo $options['project-archive']['width']; ?>" /> <?php _e( 'Height:', 'projects-by-woothemes' ); ?> <input type="text" size="3" name="projects[project-archive][height]" value="<?php echo $options['project-archive']['height']; ?>" />
 
122
  </td>
123
  </tr>
124
  <tr valign="top">
@@ -126,7 +130,8 @@ class Projects_Settings {
126
  <?php _e( 'Single Images', 'projects-by-woothemes' ); ?>
127
  </th>
128
  <td>
129
- <?php _e( 'Width:', 'projects-by-woothemes' ); ?> <input type="text" size="3" name="projects[project-single][width]" value="<?php echo $options['project-single']['width']; ?>" /> <?php _e( 'Height:', 'projects-by-woothemes' ); ?> <input type="text" size="3" name="projects[project-single][height]" value="<?php echo $options['project-single']['height']; ?>" />
 
130
  </td>
131
  </tr>
132
  <tr valign="top">
@@ -134,7 +139,8 @@ class Projects_Settings {
134
  <?php _e( 'Thumbnails', 'projects-by-woothemes' ); ?>
135
  </th>
136
  <td>
137
- <?php _e( 'Width:', 'projects-by-woothemes' ); ?> <input type="text" size="3" name="projects[project-thumbnail][width]" value="<?php echo $options['project-thumbnail']['width']; ?>" /> <?php _e( 'Height:', 'projects-by-woothemes' ); ?> <input type="text" size="3" name="projects[project-thumbnail][height]" value="<?php echo $options['project-thumbnail']['height']; ?>" />
 
138
  </td>
139
  </tr>
140
  </table>
@@ -147,12 +153,15 @@ class Projects_Settings {
147
 
148
  $input['project-archive']['width'] = absint( $input['project-archive']['width'] );
149
  $input['project-archive']['height'] = absint( $input['project-archive']['height'] );
 
150
 
151
  $input['project-single']['width'] = absint( $input['project-single']['width'] );
152
  $input['project-single']['height'] = absint( $input['project-single']['height'] );
 
153
 
154
  $input['project-thumbnail']['width'] = absint( $input['project-thumbnail']['width'] );
155
  $input['project-thumbnail']['height'] = absint( $input['project-thumbnail']['height'] );
 
156
 
157
  return $input;
158
  }
96
  $defaults = apply_filters( 'projects_default_image_size', array(
97
  'project-archive' => array(
98
  'width' => 300,
99
+ 'height' => 300,
100
+ 'crop' => 'no'
101
  ),
102
  'project-single' => array(
103
  'width' => 1024,
104
+ 'height' => 1024,
105
+ 'crop' => 'no'
106
  ),
107
  'project-thumbnail' => array(
108
  'width' => 100,
109
+ 'height' => 100,
110
+ 'crop' => 'yes'
111
  )
112
  ) );
113
 
121
  <?php _e( 'Archive Images', 'projects-by-woothemes' ); ?>
122
  </th>
123
  <td>
124
+ <?php $crop = isset( $options['project-archive']['crop'] ) ? $options['project-archive']['crop'] : 'no'; ?>
125
+ <?php _e( 'Width:', 'projects-by-woothemes' ); ?> <input type="text" size="3" name="projects[project-archive][width]" value="<?php echo $options['project-archive']['width']; ?>" /> <?php _e( 'Height:', 'projects-by-woothemes' ); ?> <input type="text" size="3" name="projects[project-archive][height]" value="<?php echo $options['project-archive']['height']; ?>" /> <?php _e( 'Crop:', 'projects-by-woothemes' ); ?> <input type="checkbox" name="projects[project-archive][crop]" value="1" <?php checked( $crop, 'yes' );?> />
126
  </td>
127
  </tr>
128
  <tr valign="top">
130
  <?php _e( 'Single Images', 'projects-by-woothemes' ); ?>
131
  </th>
132
  <td>
133
+ <?php $crop = isset( $options['project-single']['crop'] ) ? $options['project-single']['crop'] : 'no'; ?>
134
+ <?php _e( 'Width:', 'projects-by-woothemes' ); ?> <input type="text" size="3" name="projects[project-single][width]" value="<?php echo $options['project-single']['width']; ?>" /> <?php _e( 'Height:', 'projects-by-woothemes' ); ?> <input type="text" size="3" name="projects[project-single][height]" value="<?php echo $options['project-single']['height']; ?>" /> <?php _e( 'Crop:', 'projects-by-woothemes' ); ?> <input type="checkbox" name="projects[project-single][crop]" value="1" <?php checked( $crop, 'yes' );?> />
135
  </td>
136
  </tr>
137
  <tr valign="top">
139
  <?php _e( 'Thumbnails', 'projects-by-woothemes' ); ?>
140
  </th>
141
  <td>
142
+ <?php $crop = isset( $options['project-thumbnail']['crop'] ) ? $options['project-thumbnail']['crop'] : 'no'; ?>
143
+ <?php _e( 'Width:', 'projects-by-woothemes' ); ?> <input type="text" size="3" name="projects[project-thumbnail][width]" value="<?php echo $options['project-thumbnail']['width']; ?>" /> <?php _e( 'Height:', 'projects-by-woothemes' ); ?> <input type="text" size="3" name="projects[project-thumbnail][height]" value="<?php echo $options['project-thumbnail']['height']; ?>" /> <?php _e( 'Crop:', 'projects-by-woothemes' ); ?> <input type="checkbox" name="projects[project-thumbnail][crop]" value="1" <?php checked( $crop, 'yes' );?> />
144
  </td>
145
  </tr>
146
  </table>
153
 
154
  $input['project-archive']['width'] = absint( $input['project-archive']['width'] );
155
  $input['project-archive']['height'] = absint( $input['project-archive']['height'] );
156
+ $input['project-archive']['crop'] = isset( $input['project-archive']['crop'] ) ? 'yes': 'no';
157
 
158
  $input['project-single']['width'] = absint( $input['project-single']['width'] );
159
  $input['project-single']['height'] = absint( $input['project-single']['height'] );
160
+ $input['project-single']['crop'] = isset( $input['project-single']['crop'] ) ? 'yes': 'no';
161
 
162
  $input['project-thumbnail']['width'] = absint( $input['project-thumbnail']['width'] );
163
  $input['project-thumbnail']['height'] = absint( $input['project-thumbnail']['height'] );
164
+ $input['project-thumbnail']['crop'] = isset( $input['project-thumbnail']['crop'] ) ? 'yes': 'no';
165
 
166
  return $input;
167
  }
classes/class-projects-taxonomy.php CHANGED
@@ -81,7 +81,16 @@ class Projects_Taxonomy {
81
  * @return array Default arguments.
82
  */
83
  private function _get_default_args () {
84
- return array( 'labels' => $this->_get_default_labels(), 'public' => true, 'hierarchical' => true, 'show_ui' => true, 'show_admin_column' => true, 'query_var' => true, 'show_in_nav_menus' => false, 'show_tagcloud' => false );
 
 
 
 
 
 
 
 
 
85
  } // End _get_default_args()
86
 
87
  /**
@@ -92,7 +101,7 @@ class Projects_Taxonomy {
92
  */
93
  private function _get_default_labels () {
94
  return array(
95
- 'name' => sprintf( _x( '%s', 'taxonomy general name', 'projects-by-woothemes' ), $this->plural ),
96
  'singular_name' => sprintf( _x( '%s', 'taxonomy singular name', 'projects-by-woothemes' ), $this->singular ),
97
  'search_items' => sprintf( __( 'Search %s', 'projects-by-woothemes' ), $this->plural ),
98
  'all_items' => sprintf( __( 'All %s', 'projects-by-woothemes' ), $this->plural ),
81
  * @return array Default arguments.
82
  */
83
  private function _get_default_args () {
84
+ return array(
85
+ 'labels' => $this->_get_default_labels(),
86
+ 'public' => true,
87
+ 'hierarchical' => true,
88
+ 'show_ui' => true,
89
+ 'show_admin_column' => true,
90
+ 'query_var' => true,
91
+ 'show_in_nav_menus' => true,
92
+ 'show_tagcloud' => false
93
+ );
94
  } // End _get_default_args()
95
 
96
  /**
101
  */
102
  private function _get_default_labels () {
103
  return array(
104
+ 'name' => sprintf( _x( 'Project %s', 'taxonomy general name', 'projects-by-woothemes' ), $this->plural ),
105
  'singular_name' => sprintf( _x( '%s', 'taxonomy singular name', 'projects-by-woothemes' ), $this->singular ),
106
  'search_items' => sprintf( __( 'Search %s', 'projects-by-woothemes' ), $this->plural ),
107
  'all_items' => sprintf( __( 'All %s', 'projects-by-woothemes' ), $this->plural ),
classes/class-projects.php CHANGED
@@ -31,7 +31,7 @@ class Projects {
31
  /**
32
  * @var string
33
  */
34
- public $version = '1.1.0';
35
 
36
  /**
37
  * Constructor function.
@@ -79,9 +79,6 @@ class Projects {
79
  $this->frontend = new Projects_Frontend( $file );
80
  }
81
 
82
- // Testimonials Integration
83
- add_action( 'init', array( $this, 'projects_testimonials_init' ) );
84
-
85
  } // End __construct()
86
 
87
  /**
@@ -149,7 +146,7 @@ class Projects {
149
  'with_front' => false
150
  ),
151
  'capability_type' => 'post',
152
- 'has_archive' => 'projects',
153
  'hierarchical' => false,
154
  'supports' => array(
155
  'title',
@@ -158,7 +155,7 @@ class Projects {
158
  'excerpt'
159
  ),
160
  'menu_position' => 5,
161
- 'menu_icon' => ''
162
  );
163
 
164
  $args = apply_filters( 'projects_register_post_type', $args );
@@ -190,15 +187,18 @@ class Projects {
190
  $defaults = apply_filters( 'projects_default_image_size', array(
191
  'project-archive' => array(
192
  'width' => 300,
193
- 'height' => 300
 
194
  ),
195
  'project-single' => array(
196
  'width' => 1024,
197
- 'height' => 1024
 
198
  ),
199
  'project-thumbnail' => array(
200
  'width' => 100,
201
- 'height' => 100
 
202
  )
203
  ) );
204
 
@@ -207,7 +207,8 @@ class Projects {
207
 
208
  // Register each image size
209
  foreach ( $options as $image_size => $size ) {
210
- add_image_size( $image_size, $size['width'], $size['height'] );
 
211
  }
212
 
213
  }
@@ -398,148 +399,4 @@ class Projects {
398
  return apply_filters( 'projects_get_image_size_' . $image_size, $size );
399
  } // End get_image_size()
400
 
401
-
402
- /**
403
- * Init function for the Testimonials plugin integration.
404
- * @since 1.1.0
405
- * @return void
406
- */
407
- public function projects_testimonials_init() {
408
-
409
- if ( class_exists( 'Woothemes_Testimonials' ) ) {
410
-
411
- // Add custom fields
412
- add_filter( 'projects_custom_fields', array( $this, 'testimonials_custom_fields' ) );
413
-
414
- // Enqueue admin JavaScript
415
- add_action( 'admin_enqueue_scripts', array( $this, 'testimonials_admin_scripts' ) );
416
- add_action( 'wp_ajax_get_testimonials', array( $this, 'get_testimonials_callback' ) );
417
- add_action( 'admin_footer', array( $this, 'testimonials_javascript' ) );
418
-
419
- }
420
-
421
- } // End projects_testimonials_init()
422
-
423
- public function testimonials_admin_scripts () {
424
- wp_enqueue_script( 'jquery-ui-autocomplete', null, array( 'jquery' ), null, false);
425
- } // End projects_testimonials_admin_scripts()
426
-
427
- /**
428
- * Ajax callback to search for testimonials.
429
- * @param string $query Search Query.
430
- * @since 1.1.0
431
- * @return json Search Results.
432
- */
433
- public function get_testimonials_callback() {
434
-
435
- check_ajax_referer( 'projects_ajax_get_testimonials', 'security' );
436
-
437
- $term = urldecode( stripslashes( strip_tags( $_GET['term'] ) ) );
438
-
439
- if ( !empty( $term ) ) {
440
-
441
- header( 'Content-Type: application/json; charset=utf-8' );
442
-
443
- $query_args = array(
444
- 'post_type' => 'testimonial',
445
- 'orderby' => 'title',
446
- 's' => $term,
447
- 'suppress_filters' => false
448
- );
449
-
450
- $testimonials = get_posts( $query_args );
451
-
452
- $found_testimonials = array();
453
-
454
- if ( $testimonials ) {
455
- foreach ( $testimonials as $testimonial ) {
456
- $found_testimonials[] = array( 'id' => $testimonial->ID, 'title' => $testimonial->post_title );
457
- }
458
- }
459
-
460
- echo json_encode( $found_testimonials );
461
-
462
- }
463
-
464
- die();
465
-
466
- } // End get_testimonials_callback()
467
-
468
- /**
469
- * Output Testimonials admin javascript
470
- * @since 1.1.0
471
- * @return void
472
- */
473
- public function testimonials_javascript() {
474
-
475
- global $pagenow, $post_type;
476
-
477
- if ( ( $pagenow == 'post.php' || $pagenow == 'post-new.php' ) && isset( $post_type ) && esc_attr( $post_type ) == $this->post_type ) {
478
-
479
- $ajax_nonce = wp_create_nonce( 'projects_ajax_get_testimonials' );
480
-
481
- ?>
482
- <script type="text/javascript" >
483
- jQuery(function() {
484
- jQuery( "#testimonials_search" ).autocomplete({
485
- minLength: 2,
486
- source: function ( request, response ) {
487
- jQuery.ajax({
488
- url: ajaxurl,
489
- dataType: 'json',
490
- data: {
491
- action: 'get_testimonials',
492
- security: '<?php echo $ajax_nonce; ?>',
493
- term: request.term
494
- },
495
- success: function( data ) {
496
- response( jQuery.map( data, function( item ) {
497
- return {
498
- label: item.title,
499
- value: item.id
500
- }
501
- }));
502
- }
503
- });
504
- },
505
- select: function ( event, ui ) {
506
- event.preventDefault();
507
- jQuery( "#testimonials_search" ).val( ui.item.label );
508
- jQuery( "#testimonials_id" ).val( ui.item.value );
509
- },
510
- change: function ( event, ui ) {
511
- event.preventDefault();
512
- if ( 0 == jQuery( "#testimonials_search" ).val().length ) {
513
- jQuery( "#testimonials_id" ).val( '' );
514
- }
515
- }
516
- });
517
- });
518
- </script>
519
- <?php
520
- }
521
- } // End testimonials_javascript()
522
-
523
- public function testimonials_custom_fields( $fields ) {
524
-
525
- $fields['testimonials_search'] = array(
526
- 'name' => __( 'Testimonial', 'projects-by-woothemes' ),
527
- 'description' => __( 'Search for Testimonial to link to this Project. (Optional)', 'projects-by-woothemes' ),
528
- 'type' => 'text',
529
- 'default' => '',
530
- 'section' => 'info',
531
- );
532
-
533
- $fields['testimonials_id'] = array(
534
- 'name' => __( 'Testimonial ID', 'projects-by-woothemes' ),
535
- 'description' => __( 'Holds the id of the selected testimonial.', 'projects-by-woothemes' ),
536
- 'type' => 'hidden',
537
- 'default' => 0,
538
- 'section' => 'info',
539
- );
540
-
541
- return $fields;
542
-
543
- } // End testimonials_custom_fields()
544
-
545
  } // End Class
31
  /**
32
  * @var string
33
  */
34
+ public $version = '1.2.0';
35
 
36
  /**
37
  * Constructor function.
79
  $this->frontend = new Projects_Frontend( $file );
80
  }
81
 
 
 
 
82
  } // End __construct()
83
 
84
  /**
146
  'with_front' => false
147
  ),
148
  'capability_type' => 'post',
149
+ 'has_archive' => ( $projects_page_id = projects_get_page_id( 'projects' ) ) && get_page( $projects_page_id ) ? get_page_uri( $projects_page_id ) : 'projects',
150
  'hierarchical' => false,
151
  'supports' => array(
152
  'title',
155
  'excerpt'
156
  ),
157
  'menu_position' => 5,
158
+ 'menu_icon' => 'dashicons-portfolio'
159
  );
160
 
161
  $args = apply_filters( 'projects_register_post_type', $args );
187
  $defaults = apply_filters( 'projects_default_image_size', array(
188
  'project-archive' => array(
189
  'width' => 300,
190
+ 'height' => 300,
191
+ 'crop' => 'no'
192
  ),
193
  'project-single' => array(
194
  'width' => 1024,
195
+ 'height' => 1024,
196
+ 'crop' => 'no'
197
  ),
198
  'project-thumbnail' => array(
199
  'width' => 100,
200
+ 'height' => 100,
201
+ 'crop' => 'yes'
202
  )
203
  ) );
204
 
207
 
208
  // Register each image size
209
  foreach ( $options as $image_size => $size ) {
210
+ $crop = isset( $size['crop'] ) & 'yes' == $size['crop'] ? true : false;
211
+ add_image_size( $image_size, $size['width'], $size['height'], $crop );
212
  }
213
 
214
  }
399
  return apply_filters( 'projects_get_image_size_' . $image_size, $size );
400
  } // End get_image_size()
401
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
402
  } // End Class
classes/class-widget-projects.php CHANGED
@@ -38,7 +38,7 @@ class Woothemes_Widget_Projects extends WP_Widget {
38
  public function __construct() {
39
  /* Widget variable settings. */
40
  $this->projects_widget_cssclass = 'widget_projects_items';
41
- $this->projects_widget_description = __( 'Recent projects listed on your site.', 'projects-by-woothemes' );
42
  $this->projects_widget_idbase = 'projects';
43
  $this->projects_widget_title = __( 'Recent Projects', 'projects-by-woothemes' );
44
 
38
  public function __construct() {
39
  /* Widget variable settings. */
40
  $this->projects_widget_cssclass = 'widget_projects_items';
41
+ $this->projects_widget_description = __( 'Recent projects listed on your site.', 'projects-by-woothemes' );
42
  $this->projects_widget_idbase = 'projects';
43
  $this->projects_widget_title = __( 'Recent Projects', 'projects-by-woothemes' );
44
 
config.codekit ADDED
@@ -0,0 +1,1218 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "CodeKitInfo": "This is a CodeKit 2.x project configuration file. It is designed to sync project settings across multiple machines. MODIFYING THE CONTENTS OF THIS FILE IS A POOR LIFE DECISION. If you do so, you will likely cause CodeKit to crash. This file is not useful unless accompanied by the project that created it in CodeKit 2. This file is not backwards-compatible with CodeKit 1.x. For more information, see: http:\/\/incident57.com\/codekit",
3
+ "creatorBuild": "16895",
4
+ "files": {
5
+ "\/assets\/css\/_mixins.scss": {
6
+ "createSourceMap": 0,
7
+ "debugStyle": 0,
8
+ "decimalPrecision": 5,
9
+ "fileType": 4,
10
+ "ignore": 1,
11
+ "ignoreWasSetByUser": 0,
12
+ "inputAbbreviatedPath": "\/assets\/css\/_mixins.scss",
13
+ "outputAbbreviatedPath": "\/assets\/css\/_mixins.css",
14
+ "outputPathIsOutsideProject": 0,
15
+ "outputPathIsSetByUser": 0,
16
+ "outputStyle": 0,
17
+ "shouldRunAutoprefixer": 0,
18
+ "shouldRunBless": 0,
19
+ "useLibsass": 0
20
+ },
21
+ "\/assets\/css\/admin.css": {
22
+ "fileType": 16,
23
+ "ignore": 1,
24
+ "ignoreWasSetByUser": 0,
25
+ "inputAbbreviatedPath": "\/assets\/css\/admin.css",
26
+ "outputAbbreviatedPath": "No Output Path",
27
+ "outputPathIsOutsideProject": 0,
28
+ "outputPathIsSetByUser": 0
29
+ },
30
+ "\/assets\/css\/admin.scss": {
31
+ "createSourceMap": 0,
32
+ "debugStyle": 0,
33
+ "decimalPrecision": 5,
34
+ "fileType": 4,
35
+ "ignore": 0,
36
+ "ignoreWasSetByUser": 0,
37
+ "inputAbbreviatedPath": "\/assets\/css\/admin.scss",
38
+ "outputAbbreviatedPath": "\/assets\/css\/admin.css",
39
+ "outputPathIsOutsideProject": 0,
40
+ "outputPathIsSetByUser": 0,
41
+ "outputStyle": 0,
42
+ "shouldRunAutoprefixer": 0,
43
+ "shouldRunBless": 0,
44
+ "useLibsass": 0
45
+ },
46
+ "\/assets\/css\/woo-projects-handheld.css": {
47
+ "fileType": 16,
48
+ "ignore": 1,
49
+ "ignoreWasSetByUser": 0,
50
+ "inputAbbreviatedPath": "\/assets\/css\/woo-projects-handheld.css",
51
+ "outputAbbreviatedPath": "No Output Path",
52
+ "outputPathIsOutsideProject": 0,
53
+ "outputPathIsSetByUser": 0
54
+ },
55
+ "\/assets\/css\/woo-projects-handheld.scss": {
56
+ "createSourceMap": 0,
57
+ "debugStyle": 0,
58
+ "decimalPrecision": 5,
59
+ "fileType": 4,
60
+ "ignore": 0,
61
+ "ignoreWasSetByUser": 0,
62
+ "inputAbbreviatedPath": "\/assets\/css\/woo-projects-handheld.scss",
63
+ "outputAbbreviatedPath": "\/assets\/css\/woo-projects-handheld.css",
64
+ "outputPathIsOutsideProject": 0,
65
+ "outputPathIsSetByUser": 0,
66
+ "outputStyle": 0,
67
+ "shouldRunAutoprefixer": 0,
68
+ "shouldRunBless": 0,
69
+ "useLibsass": 0
70
+ },
71
+ "\/assets\/css\/woo-projects.css": {
72
+ "fileType": 16,
73
+ "ignore": 1,
74
+ "ignoreWasSetByUser": 0,
75
+ "inputAbbreviatedPath": "\/assets\/css\/woo-projects.css",
76
+ "outputAbbreviatedPath": "No Output Path",
77
+ "outputPathIsOutsideProject": 0,
78
+ "outputPathIsSetByUser": 0
79
+ },
80
+ "\/assets\/css\/woo-projects.scss": {
81
+ "createSourceMap": 0,
82
+ "debugStyle": 0,
83
+ "decimalPrecision": 5,
84
+ "fileType": 4,
85
+ "ignore": 0,
86
+ "ignoreWasSetByUser": 0,
87
+ "inputAbbreviatedPath": "\/assets\/css\/woo-projects.scss",
88
+ "outputAbbreviatedPath": "\/assets\/css\/woo-projects.css",
89
+ "outputPathIsOutsideProject": 0,
90
+ "outputPathIsSetByUser": 0,
91
+ "outputStyle": 0,
92
+ "shouldRunAutoprefixer": 0,
93
+ "shouldRunBless": 0,
94
+ "useLibsass": 0
95
+ },
96
+ "\/assets\/images\/placeholder.png": {
97
+ "fileType": 32768,
98
+ "ignore": 0,
99
+ "ignoreWasSetByUser": 0,
100
+ "initialSize": 2816,
101
+ "inputAbbreviatedPath": "\/assets\/images\/placeholder.png",
102
+ "outputAbbreviatedPath": "\/assets\/images\/placeholder.png",
103
+ "outputPathIsOutsideProject": 0,
104
+ "outputPathIsSetByUser": 0,
105
+ "processed": 0
106
+ },
107
+ "\/assets\/js\/admin.js": {
108
+ "fileType": 64,
109
+ "ignore": 0,
110
+ "ignoreWasSetByUser": 0,
111
+ "inputAbbreviatedPath": "\/assets\/js\/admin.js",
112
+ "outputAbbreviatedPath": "\/assets\/js\/min\/admin-ck.js",
113
+ "outputPathIsOutsideProject": 0,
114
+ "outputPathIsSetByUser": 0,
115
+ "outputStyle": 1,
116
+ "syntaxCheckerStyle": 1
117
+ },
118
+ "\/assets\/js\/script.js": {
119
+ "fileType": 64,
120
+ "ignore": 0,
121
+ "ignoreWasSetByUser": 0,
122
+ "inputAbbreviatedPath": "\/assets\/js\/script.js",
123
+ "outputAbbreviatedPath": "\/assets\/js\/min\/script-ck.js",
124
+ "outputPathIsOutsideProject": 0,
125
+ "outputPathIsSetByUser": 0,
126
+ "outputStyle": 1,
127
+ "syntaxCheckerStyle": 1
128
+ },
129
+ "\/assets\/js\/script.min.js": {
130
+ "fileType": 64,
131
+ "ignore": 0,
132
+ "ignoreWasSetByUser": 0,
133
+ "inputAbbreviatedPath": "\/assets\/js\/script.min.js",
134
+ "outputAbbreviatedPath": "\/assets\/js\/min\/script.min-ck.js",
135
+ "outputPathIsOutsideProject": 0,
136
+ "outputPathIsSetByUser": 0,
137
+ "outputStyle": 1,
138
+ "syntaxCheckerStyle": 1
139
+ },
140
+ "\/classes\/class-projects-admin.php": {
141
+ "fileType": 8192,
142
+ "ignore": 0,
143
+ "ignoreWasSetByUser": 0,
144
+ "inputAbbreviatedPath": "\/classes\/class-projects-admin.php",
145
+ "outputAbbreviatedPath": "No Output Path",
146
+ "outputPathIsOutsideProject": 0,
147
+ "outputPathIsSetByUser": 0
148
+ },
149
+ "\/classes\/class-projects-frontend.php": {
150
+ "fileType": 8192,
151
+ "ignore": 0,
152
+ "ignoreWasSetByUser": 0,
153
+ "inputAbbreviatedPath": "\/classes\/class-projects-frontend.php",
154
+ "outputAbbreviatedPath": "No Output Path",
155
+ "outputPathIsOutsideProject": 0,
156
+ "outputPathIsSetByUser": 0
157
+ },
158
+ "\/classes\/class-projects-integrations.php": {
159
+ "fileType": 8192,
160
+ "ignore": 0,
161
+ "ignoreWasSetByUser": 0,
162
+ "inputAbbreviatedPath": "\/classes\/class-projects-integrations.php",
163
+ "outputAbbreviatedPath": "No Output Path",
164
+ "outputPathIsOutsideProject": 0,
165
+ "outputPathIsSetByUser": 0
166
+ },
167
+ "\/classes\/class-projects-settings.php": {
168
+ "fileType": 8192,
169
+ "ignore": 0,
170
+ "ignoreWasSetByUser": 0,
171
+ "inputAbbreviatedPath": "\/classes\/class-projects-settings.php",
172
+ "outputAbbreviatedPath": "No Output Path",
173
+ "outputPathIsOutsideProject": 0,
174
+ "outputPathIsSetByUser": 0
175
+ },
176
+ "\/classes\/class-projects-shortcodes.php": {
177
+ "fileType": 8192,
178
+ "ignore": 0,
179
+ "ignoreWasSetByUser": 0,
180
+ "inputAbbreviatedPath": "\/classes\/class-projects-shortcodes.php",
181
+ "outputAbbreviatedPath": "No Output Path",
182
+ "outputPathIsOutsideProject": 0,
183
+ "outputPathIsSetByUser": 0
184
+ },
185
+ "\/classes\/class-projects-taxonomy.php": {
186
+ "fileType": 8192,
187
+ "ignore": 0,
188
+ "ignoreWasSetByUser": 0,
189
+ "inputAbbreviatedPath": "\/classes\/class-projects-taxonomy.php",
190
+ "outputAbbreviatedPath": "No Output Path",
191
+ "outputPathIsOutsideProject": 0,
192
+ "outputPathIsSetByUser": 0
193
+ },
194
+ "\/classes\/class-projects-template-loader.php": {
195
+ "fileType": 8192,
196
+ "ignore": 0,
197
+ "ignoreWasSetByUser": 0,
198
+ "inputAbbreviatedPath": "\/classes\/class-projects-template-loader.php",
199
+ "outputAbbreviatedPath": "No Output Path",
200
+ "outputPathIsOutsideProject": 0,
201
+ "outputPathIsSetByUser": 0
202
+ },
203
+ "\/classes\/class-projects.php": {
204
+ "fileType": 8192,
205
+ "ignore": 0,
206
+ "ignoreWasSetByUser": 0,
207
+ "inputAbbreviatedPath": "\/classes\/class-projects.php",
208
+ "outputAbbreviatedPath": "No Output Path",
209
+ "outputPathIsOutsideProject": 0,
210
+ "outputPathIsSetByUser": 0
211
+ },
212
+ "\/classes\/class-widget-project-categories.php": {
213
+ "fileType": 8192,
214
+ "ignore": 0,
215
+ "ignoreWasSetByUser": 0,
216
+ "inputAbbreviatedPath": "\/classes\/class-widget-project-categories.php",
217
+ "outputAbbreviatedPath": "No Output Path",
218
+ "outputPathIsOutsideProject": 0,
219
+ "outputPathIsSetByUser": 0
220
+ },
221
+ "\/classes\/class-widget-projects.php": {
222
+ "fileType": 8192,
223
+ "ignore": 0,
224
+ "ignoreWasSetByUser": 0,
225
+ "inputAbbreviatedPath": "\/classes\/class-widget-projects.php",
226
+ "outputAbbreviatedPath": "No Output Path",
227
+ "outputPathIsOutsideProject": 0,
228
+ "outputPathIsSetByUser": 0
229
+ },
230
+ "\/projects-core-functions.php": {
231
+ "fileType": 8192,
232
+ "ignore": 0,
233
+ "ignoreWasSetByUser": 0,
234
+ "inputAbbreviatedPath": "\/projects-core-functions.php",
235
+ "outputAbbreviatedPath": "No Output Path",
236
+ "outputPathIsOutsideProject": 0,
237
+ "outputPathIsSetByUser": 0
238
+ },
239
+ "\/projects-hooks.php": {
240
+ "fileType": 8192,
241
+ "ignore": 0,
242
+ "ignoreWasSetByUser": 0,
243
+ "inputAbbreviatedPath": "\/projects-hooks.php",
244
+ "outputAbbreviatedPath": "No Output Path",
245
+ "outputPathIsOutsideProject": 0,
246
+ "outputPathIsSetByUser": 0
247
+ },
248
+ "\/projects-template.php": {
249
+ "fileType": 8192,
250
+ "ignore": 0,
251
+ "ignoreWasSetByUser": 0,
252
+ "inputAbbreviatedPath": "\/projects-template.php",
253
+ "outputAbbreviatedPath": "No Output Path",
254
+ "outputPathIsOutsideProject": 0,
255
+ "outputPathIsSetByUser": 0
256
+ },
257
+ "\/projects.php": {
258
+ "fileType": 8192,
259
+ "ignore": 0,
260
+ "ignoreWasSetByUser": 0,
261
+ "inputAbbreviatedPath": "\/projects.php",
262
+ "outputAbbreviatedPath": "No Output Path",
263
+ "outputPathIsOutsideProject": 0,
264
+ "outputPathIsSetByUser": 0
265
+ },
266
+ "\/templates\/archive-project.php": {
267
+ "fileType": 8192,
268
+ "ignore": 0,
269
+ "ignoreWasSetByUser": 0,
270
+ "inputAbbreviatedPath": "\/templates\/archive-project.php",
271
+ "outputAbbreviatedPath": "No Output Path",
272
+ "outputPathIsOutsideProject": 0,
273
+ "outputPathIsSetByUser": 0
274
+ },
275
+ "\/templates\/content-project-category.php": {
276
+ "fileType": 8192,
277
+ "ignore": 0,
278
+ "ignoreWasSetByUser": 0,
279
+ "inputAbbreviatedPath": "\/templates\/content-project-category.php",
280
+ "outputAbbreviatedPath": "No Output Path",
281
+ "outputPathIsOutsideProject": 0,
282
+ "outputPathIsSetByUser": 0
283
+ },
284
+ "\/templates\/content-project-widget.php": {
285
+ "fileType": 8192,
286
+ "ignore": 0,
287
+ "ignoreWasSetByUser": 0,
288
+ "inputAbbreviatedPath": "\/templates\/content-project-widget.php",
289
+ "outputAbbreviatedPath": "No Output Path",
290
+ "outputPathIsOutsideProject": 0,
291
+ "outputPathIsSetByUser": 0
292
+ },
293
+ "\/templates\/content-project.php": {
294
+ "fileType": 8192,
295
+ "ignore": 0,
296
+ "ignoreWasSetByUser": 0,
297
+ "inputAbbreviatedPath": "\/templates\/content-project.php",
298
+ "outputAbbreviatedPath": "No Output Path",
299
+ "outputPathIsOutsideProject": 0,
300
+ "outputPathIsSetByUser": 0
301
+ },
302
+ "\/templates\/content-single-project.php": {
303
+ "fileType": 8192,
304
+ "ignore": 0,
305
+ "ignoreWasSetByUser": 0,
306
+ "inputAbbreviatedPath": "\/templates\/content-single-project.php",
307
+ "outputAbbreviatedPath": "No Output Path",
308
+ "outputPathIsOutsideProject": 0,
309
+ "outputPathIsSetByUser": 0
310
+ },
311
+ "\/templates\/layout\/sidebar.php": {
312
+ "fileType": 8192,
313
+ "ignore": 0,
314
+ "ignoreWasSetByUser": 0,
315
+ "inputAbbreviatedPath": "\/templates\/layout\/sidebar.php",
316
+ "outputAbbreviatedPath": "No Output Path",
317
+ "outputPathIsOutsideProject": 0,
318
+ "outputPathIsSetByUser": 0
319
+ },
320
+ "\/templates\/layout\/wrapper-end.php": {
321
+ "fileType": 8192,
322
+ "ignore": 0,
323
+ "ignoreWasSetByUser": 0,
324
+ "inputAbbreviatedPath": "\/templates\/layout\/wrapper-end.php",
325
+ "outputAbbreviatedPath": "No Output Path",
326
+ "outputPathIsOutsideProject": 0,
327
+ "outputPathIsSetByUser": 0
328
+ },
329
+ "\/templates\/layout\/wrapper-start.php": {
330
+ "fileType": 8192,
331
+ "ignore": 0,
332
+ "ignoreWasSetByUser": 0,
333
+ "inputAbbreviatedPath": "\/templates\/layout\/wrapper-start.php",
334
+ "outputAbbreviatedPath": "No Output Path",
335
+ "outputPathIsOutsideProject": 0,
336
+ "outputPathIsSetByUser": 0
337
+ },
338
+ "\/templates\/loop\/loop-end.php": {
339
+ "fileType": 8192,
340
+ "ignore": 0,
341
+ "ignoreWasSetByUser": 0,
342
+ "inputAbbreviatedPath": "\/templates\/loop\/loop-end.php",
343
+ "outputAbbreviatedPath": "No Output Path",
344
+ "outputPathIsOutsideProject": 0,
345
+ "outputPathIsSetByUser": 0
346
+ },
347
+ "\/templates\/loop\/loop-start.php": {
348
+ "fileType": 8192,
349
+ "ignore": 0,
350
+ "ignoreWasSetByUser": 0,
351
+ "inputAbbreviatedPath": "\/templates\/loop\/loop-start.php",
352
+ "outputAbbreviatedPath": "No Output Path",
353
+ "outputPathIsOutsideProject": 0,
354
+ "outputPathIsSetByUser": 0
355
+ },
356
+ "\/templates\/loop\/no-projects-found.php": {
357
+ "fileType": 8192,
358
+ "ignore": 0,
359
+ "ignoreWasSetByUser": 0,
360
+ "inputAbbreviatedPath": "\/templates\/loop\/no-projects-found.php",
361
+ "outputAbbreviatedPath": "No Output Path",
362
+ "outputPathIsOutsideProject": 0,
363
+ "outputPathIsSetByUser": 0
364
+ },
365
+ "\/templates\/loop\/pagination.php": {
366
+ "fileType": 8192,
367
+ "ignore": 0,
368
+ "ignoreWasSetByUser": 0,
369
+ "inputAbbreviatedPath": "\/templates\/loop\/pagination.php",
370
+ "outputAbbreviatedPath": "No Output Path",
371
+ "outputPathIsOutsideProject": 0,
372
+ "outputPathIsSetByUser": 0
373
+ },
374
+ "\/templates\/loop\/short-description.php": {
375
+ "fileType": 8192,
376
+ "ignore": 0,
377
+ "ignoreWasSetByUser": 0,
378
+ "inputAbbreviatedPath": "\/templates\/loop\/short-description.php",
379
+ "outputAbbreviatedPath": "No Output Path",
380
+ "outputPathIsOutsideProject": 0,
381
+ "outputPathIsSetByUser": 0
382
+ },
383
+ "\/templates\/single-project.php": {
384
+ "fileType": 8192,
385
+ "ignore": 0,
386
+ "ignoreWasSetByUser": 0,
387
+ "inputAbbreviatedPath": "\/templates\/single-project.php",
388
+ "outputAbbreviatedPath": "No Output Path",
389
+ "outputPathIsOutsideProject": 0,
390
+ "outputPathIsSetByUser": 0
391
+ },
392
+ "\/templates\/single-project\/description.php": {
393
+ "fileType": 8192,
394
+ "ignore": 0,
395
+ "ignoreWasSetByUser": 0,
396
+ "inputAbbreviatedPath": "\/templates\/single-project\/description.php",
397
+ "outputAbbreviatedPath": "No Output Path",
398
+ "outputPathIsOutsideProject": 0,
399
+ "outputPathIsSetByUser": 0
400
+ },
401
+ "\/templates\/single-project\/meta.php": {
402
+ "fileType": 8192,
403
+ "ignore": 0,
404
+ "ignoreWasSetByUser": 0,
405
+ "inputAbbreviatedPath": "\/templates\/single-project\/meta.php",
406
+ "outputAbbreviatedPath": "No Output Path",
407
+ "outputPathIsOutsideProject": 0,
408
+ "outputPathIsSetByUser": 0
409
+ },
410
+ "\/templates\/single-project\/pagination.php": {
411
+ "fileType": 8192,
412
+ "ignore": 0,
413
+ "ignoreWasSetByUser": 0,
414
+ "inputAbbreviatedPath": "\/templates\/single-project\/pagination.php",
415
+ "outputAbbreviatedPath": "No Output Path",
416
+ "outputPathIsOutsideProject": 0,
417
+ "outputPathIsSetByUser": 0
418
+ },
419
+ "\/templates\/single-project\/project-feature.php": {
420
+ "fileType": 8192,
421
+ "ignore": 0,
422
+ "ignoreWasSetByUser": 0,
423
+ "inputAbbreviatedPath": "\/templates\/single-project\/project-feature.php",
424
+ "outputAbbreviatedPath": "No Output Path",
425
+ "outputPathIsOutsideProject": 0,
426
+ "outputPathIsSetByUser": 0
427
+ },
428
+ "\/templates\/single-project\/project-gallery.php": {
429
+ "fileType": 8192,
430
+ "ignore": 0,
431
+ "ignoreWasSetByUser": 0,
432
+ "inputAbbreviatedPath": "\/templates\/single-project\/project-gallery.php",
433
+ "outputAbbreviatedPath": "No Output Path",
434
+ "outputPathIsOutsideProject": 0,
435
+ "outputPathIsSetByUser": 0
436
+ },
437
+ "\/templates\/single-project\/short-description.php": {
438
+ "fileType": 8192,
439
+ "ignore": 0,
440
+ "ignoreWasSetByUser": 0,
441
+ "inputAbbreviatedPath": "\/templates\/single-project\/short-description.php",
442
+ "outputAbbreviatedPath": "No Output Path",
443
+ "outputPathIsOutsideProject": 0,
444
+ "outputPathIsSetByUser": 0
445
+ },
446
+ "\/templates\/single-project\/title.php": {
447
+ "fileType": 8192,
448
+ "ignore": 0,
449
+ "ignoreWasSetByUser": 0,
450
+ "inputAbbreviatedPath": "\/templates\/single-project\/title.php",
451
+ "outputAbbreviatedPath": "No Output Path",
452
+ "outputPathIsOutsideProject": 0,
453
+ "outputPathIsSetByUser": 0
454
+ },
455
+ "\/templates\/taxonomy-project-category.php": {
456
+ "fileType": 8192,
457
+ "ignore": 0,
458
+ "ignoreWasSetByUser": 0,
459
+ "inputAbbreviatedPath": "\/templates\/taxonomy-project-category.php",
460
+ "outputAbbreviatedPath": "No Output Path",
461
+ "outputPathIsOutsideProject": 0,
462
+ "outputPathIsSetByUser": 0
463
+ }
464
+ },
465
+ "hooks": [
466
+ ],
467
+ "lastSavedByUser": "James Koster",
468
+ "manualImportLinks": {
469
+ },
470
+ "projectAttributes": {
471
+ "bowerAbbreviatedPath": "",
472
+ "displayValue": "projects-by-woothemes",
473
+ "displayValueWasSetByUser": 0,
474
+ "iconImageName": "brackets_orange"
475
+ },
476
+ "projectSettings": {
477
+ "alwaysUseExternalServer": 0,
478
+ "animateCSSInjections": 1,
479
+ "autoApplyPSLanguageSettingsStyle": 0,
480
+ "autoprefixerBrowserString": "> 1%, last 2 versions, ff 17, opera 12.1",
481
+ "autoSyncProjectSettingsFile": 1,
482
+ "browserRefreshDelay": 0,
483
+ "coffeeAutoOutputPathRelativePath": "",
484
+ "coffeeAutoOutputPathReplace1": "",
485
+ "coffeeAutoOutputPathReplace2": "",
486
+ "coffeeAutoOutputPathStyle": 0,
487
+ "coffeeCreateSourceMap": 0,
488
+ "coffeeLintFlags2": {
489
+ "arrow_spacing": {
490
+ "active": 0,
491
+ "flagValue": -1
492
+ },
493
+ "camel_case_classes": {
494
+ "active": 1,
495
+ "flagValue": -1
496
+ },
497
+ "colon_assignment_spacing": {
498
+ "active": 0,
499
+ "flagValue": 1
500
+ },
501
+ "cyclomatic_complexity": {
502
+ "active": 0,
503
+ "flagValue": 10
504
+ },
505
+ "duplicate_key": {
506
+ "active": 1,
507
+ "flagValue": -1
508
+ },
509
+ "empty_constructor_needs_parens": {
510
+ "active": 0,
511
+ "flagValue": -1
512
+ },
513
+ "indentation": {
514
+ "active": 1,
515
+ "flagValue": 2
516
+ },
517
+ "line_endings": {
518
+ "active": 0,
519
+ "flagValue": 0
520
+ },
521
+ "max_line_length": {
522
+ "active": 0,
523
+ "flagValue": 150
524
+ },
525
+ "missing_fat_arrows": {
526
+ "active": 0,
527
+ "flagValue": -1
528
+ },
529
+ "newlines_after_classes": {
530
+ "active": 0,
531
+ "flagValue": 3
532
+ },
533
+ "no-unnecessary_fat_arrows": {
534
+ "active": 1,
535
+ "flagValue": -1
536
+ },
537
+ "no_backticks": {
538
+ "active": 1,
539
+ "flagValue": -1
540
+ },
541
+ "no_empty_param_list": {
542
+ "active": 0,
543
+ "flagValue": -1
544
+ },
545
+ "no_implicit_braces": {
546
+ "active": 1,
547
+ "flagValue": -1
548
+ },
549
+ "no_implicit_parens": {
550
+ "active": 0,
551
+ "flagValue": -1
552
+ },
553
+ "no_plusplus": {
554
+ "active": 0,
555
+ "flagValue": -1
556
+ },
557
+ "no_stand_alone_at": {
558
+ "active": 1,
559
+ "flagValue": -1
560
+ },
561
+ "no_tabs": {
562
+ "active": 1,
563
+ "flagValue": -1
564
+ },
565
+ "no_throwing_strings": {
566
+ "active": 1,
567
+ "flagValue": -1
568
+ },
569
+ "no_trailing_semicolons": {
570
+ "active": 1,
571
+ "flagValue": -1
572
+ },
573
+ "no_trailing_whitespace": {
574
+ "active": 1,
575
+ "flagValue": -1
576
+ },
577
+ "non_empty_constructor_needs_parens": {
578
+ "active": 0,
579
+ "flagValue": -1
580
+ },
581
+ "space_operators": {
582
+ "active": 0,
583
+ "flagValue": -1
584
+ }
585
+ },
586
+ "coffeeMinifyOutput": 1,
587
+ "coffeeOutputStyle": 0,
588
+ "coffeeSyntaxCheckerStyle": 1,
589
+ "externalServerAddress": "http:\/\/localhost:8888",
590
+ "externalServerPreviewPathAddition": "",
591
+ "genericWebpageFileExtensionsString": "html, htm, shtml, shtm, xhtml, php, jsp, asp, aspx, erb, ctp",
592
+ "hamlAutoOutputPathRelativePath": "",
593
+ "hamlAutoOutputPathReplace1": "",
594
+ "hamlAutoOutputPathReplace2": "",
595
+ "hamlAutoOutputPathStyle": 0,
596
+ "hamlEscapeHTMLCharacters": 0,
597
+ "hamlNoEscapeInAttributes": 0,
598
+ "hamlOutputFormat": 2,
599
+ "hamlOutputStyle": 0,
600
+ "hamlUseCDATA": 0,
601
+ "hamlUseDoubleQuotes": 0,
602
+ "hamlUseUnixNewlines": 0,
603
+ "jadeAutoOutputPathRelativePath": "",
604
+ "jadeAutoOutputPathReplace1": "",
605
+ "jadeAutoOutputPathReplace2": "",
606
+ "jadeAutoOutputPathStyle": 0,
607
+ "jadeCompileDebug": 1,
608
+ "jadeOutputStyle": 0,
609
+ "javascriptAutoOutputPathRelativePath": "\/min",
610
+ "javascriptAutoOutputPathReplace1": "",
611
+ "javascriptAutoOutputPathReplace2": "",
612
+ "javascriptAutoOutputPathStyle": 2,
613
+ "javascriptCreateSourceMap": 1,
614
+ "javascriptOutputStyle": 1,
615
+ "javascriptOutputSuffix": "-ck",
616
+ "javascriptSyntaxCheckerStyle": 1,
617
+ "jsCheckerReservedNamesString": "",
618
+ "jsHintFlags2": {
619
+ "asi": {
620
+ "active": 0,
621
+ "flagValue": -1
622
+ },
623
+ "bitwise": {
624
+ "active": 1,
625
+ "flagValue": -1
626
+ },
627
+ "boss": {
628
+ "active": 0,
629
+ "flagValue": -1
630
+ },
631
+ "browser": {
632
+ "active": 1,
633
+ "flagValue": -1
634
+ },
635
+ "camelcase": {
636
+ "active": 0,
637
+ "flagValue": -1
638
+ },
639
+ "couch": {
640
+ "active": 0,
641
+ "flagValue": -1
642
+ },
643
+ "curly": {
644
+ "active": 1,
645
+ "flagValue": -1
646
+ },
647
+ "debug": {
648
+ "active": 0,
649
+ "flagValue": -1
650
+ },
651
+ "devel": {
652
+ "active": 0,
653
+ "flagValue": -1
654
+ },
655
+ "dojo": {
656
+ "active": 0,
657
+ "flagValue": -1
658
+ },
659
+ "eqeqeq": {
660
+ "active": 1,
661
+ "flagValue": -1
662
+ },
663
+ "eqnull": {
664
+ "active": 0,
665
+ "flagValue": -1
666
+ },
667
+ "es3": {
668
+ "active": 0,
669
+ "flagValue": -1
670
+ },
671
+ "esnext": {
672
+ "active": 0,
673
+ "flagValue": -1
674
+ },
675
+ "evil": {
676
+ "active": 0,
677
+ "flagValue": -1
678
+ },
679
+ "expr": {
680
+ "active": 0,
681
+ "flagValue": -1
682
+ },
683
+ "forin": {
684
+ "active": 0,
685
+ "flagValue": -1
686
+ },
687
+ "freeze": {
688
+ "active": 1,
689
+ "flagValue": -1
690
+ },
691
+ "funcscope": {
692
+ "active": 0,
693
+ "flagValue": -1
694
+ },
695
+ "gcl": {
696
+ "active": 0,
697
+ "flagValue": -1
698
+ },
699
+ "globalstrict": {
700
+ "active": 0,
701
+ "flagValue": -1
702
+ },
703
+ "immed": {
704
+ "active": 0,
705
+ "flagValue": -1
706
+ },
707
+ "indent": {
708
+ "active": 0,
709
+ "flagValue": 4
710
+ },
711
+ "iterator": {
712
+ "active": 0,
713
+ "flagValue": -1
714
+ },
715
+ "jquery": {
716
+ "active": 1,
717
+ "flagValue": -1
718
+ },
719
+ "lastsemic": {
720
+ "active": 0,
721
+ "flagValue": -1
722
+ },
723
+ "latedef": {
724
+ "active": 1,
725
+ "flagValue": -1
726
+ },
727
+ "laxbreak": {
728
+ "active": 0,
729
+ "flagValue": -1
730
+ },
731
+ "laxcomma": {
732
+ "active": 0,
733
+ "flagValue": -1
734
+ },
735
+ "loopfunc": {
736
+ "active": 0,
737
+ "flagValue": -1
738
+ },
739
+ "maxcomplexity": {
740
+ "active": 0,
741
+ "flagValue": 10
742
+ },
743
+ "maxdepth": {
744
+ "active": 0,
745
+ "flagValue": 3
746
+ },
747
+ "maxlen": {
748
+ "active": 0,
749
+ "flagValue": 150
750
+ },
751
+ "maxparams": {
752
+ "active": 0,
753
+ "flagValue": 3
754
+ },
755
+ "maxstatements": {
756
+ "active": 0,
757
+ "flagValue": 4
758
+ },
759
+ "mootools": {
760
+ "active": 0,
761
+ "flagValue": -1
762
+ },
763
+ "moz": {
764
+ "active": 0,
765
+ "flagValue": -1
766
+ },
767
+ "multistr": {
768
+ "active": 0,
769
+ "flagValue": -1
770
+ },
771
+ "newcap": {
772
+ "active": 1,
773
+ "flagValue": -1
774
+ },
775
+ "noarg": {
776
+ "active": 1,
777
+ "flagValue": -1
778
+ },
779
+ "node": {
780
+ "active": 0,
781
+ "flagValue": -1
782
+ },
783
+ "noempty": {
784
+ "active": 0,
785
+ "flagValue": -1
786
+ },
787
+ "nonbsp": {
788
+ "active": 0,
789
+ "flagValue": -1
790
+ },
791
+ "nonew": {
792
+ "active": 1,
793
+ "flagValue": -1
794
+ },
795
+ "nonstandard": {
796
+ "active": 0,
797
+ "flagValue": -1
798
+ },
799
+ "notypeof": {
800
+ "active": 1,
801
+ "flagValue": -1
802
+ },
803
+ "noyield": {
804
+ "active": 0,
805
+ "flagValue": -1
806
+ },
807
+ "onecase": {
808
+ "active": 0,
809
+ "flagValue": -1
810
+ },
811
+ "onevar": {
812
+ "active": 0,
813
+ "flagValue": -1
814
+ },
815
+ "phantom": {
816
+ "active": 0,
817
+ "flagValue": -1
818
+ },
819
+ "plusplus": {
820
+ "active": 0,
821
+ "flagValue": -1
822
+ },
823
+ "proto": {
824
+ "active": 0,
825
+ "flagValue": -1
826
+ },
827
+ "prototypejs": {
828
+ "active": 0,
829
+ "flagValue": -1
830
+ },
831
+ "regexp": {
832
+ "active": 1,
833
+ "flagValue": -1
834
+ },
835
+ "rhino": {
836
+ "active": 0,
837
+ "flagValue": -1
838
+ },
839
+ "scripturl": {
840
+ "active": 0,
841
+ "flagValue": -1
842
+ },
843
+ "shadow": {
844
+ "active": 0,
845
+ "flagValue": -1
846
+ },
847
+ "shelljs": {
848
+ "active": 0,
849
+ "flagValue": -1
850
+ },
851
+ "smarttabs": {
852
+ "active": 0,
853
+ "flagValue": -1
854
+ },
855
+ "strict": {
856
+ "active": 0,
857
+ "flagValue": -1
858
+ },
859
+ "sub": {
860
+ "active": 0,
861
+ "flagValue": -1
862
+ },
863
+ "supernew": {
864
+ "active": 0,
865
+ "flagValue": -1
866
+ },
867
+ "trailing": {
868
+ "active": 1,
869
+ "flagValue": -1
870
+ },
871
+ "typed": {
872
+ "active": 0,
873
+ "flagValue": -1
874
+ },
875
+ "undef": {
876
+ "active": 1,
877
+ "flagValue": -1
878
+ },
879
+ "unused": {
880
+ "active": 1,
881
+ "flagValue": -1
882
+ },
883
+ "white": {
884
+ "active": 0,
885
+ "flagValue": -1
886
+ },
887
+ "withstmt": {
888
+ "active": 0,
889
+ "flagValue": -1
890
+ },
891
+ "worker": {
892
+ "active": 0,
893
+ "flagValue": -1
894
+ },
895
+ "wsh": {
896
+ "active": 0,
897
+ "flagValue": -1
898
+ },
899
+ "yui": {
900
+ "active": 0,
901
+ "flagValue": -1
902
+ }
903
+ },
904
+ "jsLintFlags2": {
905
+ "ass": {
906
+ "active": 0,
907
+ "flagValue": -1
908
+ },
909
+ "bitwise": {
910
+ "active": 0,
911
+ "flagValue": -1
912
+ },
913
+ "browser": {
914
+ "active": 1,
915
+ "flagValue": -1
916
+ },
917
+ "closure": {
918
+ "active": 0,
919
+ "flagValue": -1
920
+ },
921
+ "continue": {
922
+ "active": 0,
923
+ "flagValue": -1
924
+ },
925
+ "debug": {
926
+ "active": 0,
927
+ "flagValue": -1
928
+ },
929
+ "devel": {
930
+ "active": 0,
931
+ "flagValue": -1
932
+ },
933
+ "eqeq": {
934
+ "active": 0,
935
+ "flagValue": -1
936
+ },
937
+ "evil": {
938
+ "active": 0,
939
+ "flagValue": -1
940
+ },
941
+ "forin": {
942
+ "active": 0,
943
+ "flagValue": -1
944
+ },
945
+ "indent": {
946
+ "active": 0,
947
+ "flagValue": 4
948
+ },
949
+ "maxlen": {
950
+ "active": 0,
951
+ "flagValue": 150
952
+ },
953
+ "newcap": {
954
+ "active": 0,
955
+ "flagValue": -1
956
+ },
957
+ "node": {
958
+ "active": 0,
959
+ "flagValue": -1
960
+ },
961
+ "nomen": {
962
+ "active": 0,
963
+ "flagValue": -1
964
+ },
965
+ "plusplus": {
966
+ "active": 0,
967
+ "flagValue": -1
968
+ },
969
+ "properties": {
970
+ "active": 0,
971
+ "flagValue": -1
972
+ },
973
+ "regexp": {
974
+ "active": 0,
975
+ "flagValue": -1
976
+ },
977
+ "rhino": {
978
+ "active": 0,
979
+ "flagValue": -1
980
+ },
981
+ "sloppy": {
982
+ "active": 0,
983
+ "flagValue": -1
984
+ },
985
+ "stupid": {
986
+ "active": 0,
987
+ "flagValue": -1
988
+ },
989
+ "sub": {
990
+ "active": 0,
991
+ "flagValue": -1
992
+ },
993
+ "todo": {
994
+ "active": 0,
995
+ "flagValue": -1
996
+ },
997
+ "unparam": {
998
+ "active": 0,
999
+ "flagValue": -1
1000
+ },
1001
+ "vars": {
1002
+ "active": 0,
1003
+ "flagValue": -1
1004
+ },
1005
+ "white": {
1006
+ "active": 0,
1007
+ "flagValue": -1
1008
+ }
1009
+ },
1010
+ "kitAutoOutputPathRelativePath": "",
1011
+ "kitAutoOutputPathReplace1": "",
1012
+ "kitAutoOutputPathReplace2": "",
1013
+ "kitAutoOutputPathStyle": 0,
1014
+ "lessAllowInsecureImports": 0,
1015
+ "lessAutoOutputPathRelativePath": "..\/css",
1016
+ "lessAutoOutputPathReplace1": "less",
1017
+ "lessAutoOutputPathReplace2": "css",
1018
+ "lessAutoOutputPathStyle": 2,
1019
+ "lessCreateSourceMap": 0,
1020
+ "lessDisableJavascript": 0,
1021
+ "lessIeCompatibility": 1,
1022
+ "lessOutputStyle": 0,
1023
+ "lessRelativeURLS": 0,
1024
+ "lessStrictImports": 0,
1025
+ "lessStrictMath": 0,
1026
+ "lessStrictUnits": 0,
1027
+ "markdownAutoOutputPathRelativePath": "",
1028
+ "markdownAutoOutputPathReplace1": "",
1029
+ "markdownAutoOutputPathReplace2": "",
1030
+ "markdownAutoOutputPathStyle": 0,
1031
+ "markdownEnableFootnotes": 0,
1032
+ "markdownEnableSmartyPants": 1,
1033
+ "markdownExpandTabs": 1,
1034
+ "reloadFileURLs": 0,
1035
+ "sassAutoOutputPathRelativePath": "..\/css",
1036
+ "sassAutoOutputPathReplace1": "sass",
1037
+ "sassAutoOutputPathReplace2": "css",
1038
+ "sassAutoOutputPathStyle": 2,
1039
+ "sassCreateSourceMap": 0,
1040
+ "sassDebugStyle": 0,
1041
+ "sassDecimalPrecision": 5,
1042
+ "sassOutputStyle": 0,
1043
+ "sassUseLibsass": 0,
1044
+ "shouldRunAutoprefixer": 0,
1045
+ "shouldRunBless": 0,
1046
+ "skippedItemsString": ".svn, .git, .hg, log, _logs, _cache, cache, logs",
1047
+ "slimAutoOutputPathRelativePath": "",
1048
+ "slimAutoOutputPathReplace1": "",
1049
+ "slimAutoOutputPathReplace2": "",
1050
+ "slimAutoOutputPathStyle": 0,
1051
+ "slimCompileOnly": 0,
1052
+ "slimLogicless": 0,
1053
+ "slimOutputStyle": 1,
1054
+ "slimRailsCompatible": 0,
1055
+ "stylusAutoOutputPathRelativePath": "..\/css",
1056
+ "stylusAutoOutputPathReplace1": "stylus",
1057
+ "stylusAutoOutputPathReplace2": "css",
1058
+ "stylusAutoOutputPathStyle": 2,
1059
+ "stylusDebugStyle": 0,
1060
+ "stylusImportCSS": 0,
1061
+ "stylusOutputStyle": 0,
1062
+ "stylusResolveRelativeURLS": 0,
1063
+ "typescriptAutoOutputPathRelativePath": "\/js",
1064
+ "typescriptAutoOutputPathReplace1": "",
1065
+ "typescriptAutoOutputPathReplace2": "",
1066
+ "typescriptAutoOutputPathStyle": 2,
1067
+ "typescriptCreateDeclarationFile": 0,
1068
+ "typescriptCreateSourceMap": 0,
1069
+ "typescriptMinifyOutput": 0,
1070
+ "typescriptModuleType": 0,
1071
+ "typescriptNoImplicitAny": 0,
1072
+ "typescriptNoResolve": 0,
1073
+ "typescriptRemoveComments": 0,
1074
+ "typescriptTargetECMAVersion": 0,
1075
+ "uglifyDefinesString": "",
1076
+ "uglifyFlags2": {
1077
+ "ascii-only": {
1078
+ "active": 0,
1079
+ "flagValue": -1
1080
+ },
1081
+ "booleans": {
1082
+ "active": 1,
1083
+ "flagValue": -1
1084
+ },
1085
+ "bracketize": {
1086
+ "active": 0,
1087
+ "flagValue": -1
1088
+ },
1089
+ "cascade": {
1090
+ "active": 1,
1091
+ "flagValue": -1
1092
+ },
1093
+ "comments": {
1094
+ "active": 1,
1095
+ "flagValue": -1
1096
+ },
1097
+ "comparisons": {
1098
+ "active": 1,
1099
+ "flagValue": -1
1100
+ },
1101
+ "compress": {
1102
+ "active": 1,
1103
+ "flagValue": -1
1104
+ },
1105
+ "conditionals": {
1106
+ "active": 1,
1107
+ "flagValue": -1
1108
+ },
1109
+ "dead_code": {
1110
+ "active": 0,
1111
+ "flagValue": -1
1112
+ },
1113
+ "drop_debugger": {
1114
+ "active": 1,
1115
+ "flagValue": -1
1116
+ },
1117
+ "eval": {
1118
+ "active": 0,
1119
+ "flagValue": -1
1120
+ },
1121
+ "evaluate": {
1122
+ "active": 1,
1123
+ "flagValue": -1
1124
+ },
1125
+ "hoist_funs": {
1126
+ "active": 1,
1127
+ "flagValue": -1
1128
+ },
1129
+ "hoist_vars": {
1130
+ "active": 0,
1131
+ "flagValue": -1
1132
+ },
1133
+ "if_return": {
1134
+ "active": 1,
1135
+ "flagValue": -1
1136
+ },
1137
+ "indent-level": {
1138
+ "active": 0,
1139
+ "flagValue": 4
1140
+ },
1141
+ "indent-start": {
1142
+ "active": 0,
1143
+ "flagValue": 0
1144
+ },
1145
+ "inline-script": {
1146
+ "active": 0,
1147
+ "flagValue": -1
1148
+ },
1149
+ "join_vars": {
1150
+ "active": 1,
1151
+ "flagValue": -1
1152
+ },
1153
+ "loops": {
1154
+ "active": 1,
1155
+ "flagValue": -1
1156
+ },
1157
+ "mangle": {
1158
+ "active": 1,
1159
+ "flagValue": -1
1160
+ },
1161
+ "max-line-len": {
1162
+ "active": 1,
1163
+ "flagValue": 32000
1164
+ },
1165
+ "properties": {
1166
+ "active": 1,
1167
+ "flagValue": -1
1168
+ },
1169
+ "quote-keys": {
1170
+ "active": 0,
1171
+ "flagValue": -1
1172
+ },
1173
+ "screw-ie8": {
1174
+ "active": 0,
1175
+ "flagValue": -1
1176
+ },
1177
+ "semicolons": {
1178
+ "active": 1,
1179
+ "flagValue": -1
1180
+ },
1181
+ "sequences": {
1182
+ "active": 1,
1183
+ "flagValue": -1
1184
+ },
1185
+ "sort": {
1186
+ "active": 0,
1187
+ "flagValue": -1
1188
+ },
1189
+ "space-colon": {
1190
+ "active": 1,
1191
+ "flagValue": -1
1192
+ },
1193
+ "toplevel": {
1194
+ "active": 0,
1195
+ "flagValue": -1
1196
+ },
1197
+ "unsafe": {
1198
+ "active": 0,
1199
+ "flagValue": -1
1200
+ },
1201
+ "unused": {
1202
+ "active": 0,
1203
+ "flagValue": -1
1204
+ },
1205
+ "warnings": {
1206
+ "active": 0,
1207
+ "flagValue": -1
1208
+ },
1209
+ "width": {
1210
+ "active": 1,
1211
+ "flagValue": 80
1212
+ }
1213
+ },
1214
+ "uglifyReservedNamesString": "$",
1215
+ "websiteRelativeRoot": ""
1216
+ },
1217
+ "settingsFileVersion": "2"
1218
+ }
lang/projects-by-woothemes.pot CHANGED
@@ -4,7 +4,7 @@ msgid ""
4
  msgstr ""
5
  "Project-Id-Version: \n"
6
  "Report-Msgid-Bugs-To: http://wordpress.org/tag/projects-by-woothemes\n"
7
- "POT-Creation-Date: 2014-03-25 15:53:25+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
@@ -76,70 +76,114 @@ msgstr ""
76
  msgid "%s Gallery"
77
  msgstr ""
78
 
79
- #: classes/class-projects-admin.php:385 classes/class-projects-admin.php:445
80
  msgid "Delete image"
81
  msgstr ""
82
 
83
- #: classes/class-projects-admin.php:396
84
- msgid "Add %s gallery images"
85
  msgstr ""
86
 
87
- #: classes/class-projects-admin.php:422
88
- msgid "Add Images to Project Gallery"
89
- msgstr ""
90
-
91
- #: classes/class-projects-admin.php:424
92
- msgid "Add to gallery"
93
  msgstr ""
94
 
95
- #: classes/class-projects-admin.php:570 templates/single-project/meta.php:41
96
  msgid "Client"
97
  msgstr ""
98
 
99
- #: classes/class-projects-admin.php:571
100
  msgid "Enter the client name. (Optional)"
101
  msgstr ""
102
 
103
- #: classes/class-projects-admin.php:578
104
  msgid "URL"
105
  msgstr ""
106
 
107
- #: classes/class-projects-admin.php:579
108
  msgid "Enter the project URL. (Optional)"
109
  msgstr ""
110
 
111
- #: classes/class-projects-admin.php:599
112
  msgid "Enter the %s title here"
113
  msgstr ""
114
 
115
- #: classes/class-projects-admin.php:630
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
116
  msgid "%sProjects by WooThemes is almost ready.%s To get started, %sconfigure your projects page%s."
117
  msgstr ""
118
 
119
- #: classes/class-projects-admin.php:644
120
  msgid "%s Cover Image"
121
  msgstr ""
122
 
123
- #: classes/class-projects-admin.php:657
124
  msgid "Set featured image"
125
  msgstr ""
126
 
127
- #: classes/class-projects-admin.php:657 classes/class-projects-admin.php:689
128
  msgid "Set cover image"
129
  msgstr ""
130
 
131
- #: classes/class-projects-admin.php:673
132
  msgid "Remove featured image"
133
  msgstr ""
134
 
135
- #: classes/class-projects-admin.php:673
136
  msgid "Remove cover image"
137
  msgstr ""
138
 
139
- #: classes/class-projects-admin.php:688
140
  msgid "Set Cover Image"
141
  msgstr ""
142
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
143
  #: classes/class-projects-settings.php:31
144
  msgid "Settings"
145
  msgstr ""
@@ -180,27 +224,33 @@ msgstr ""
180
  msgid "regenerate your thumbnails"
181
  msgstr ""
182
 
183
- #: classes/class-projects-settings.php:118
184
  msgid "Archive Images"
185
  msgstr ""
186
 
187
- #: classes/class-projects-settings.php:121
188
- #: classes/class-projects-settings.php:129
189
- #: classes/class-projects-settings.php:137
190
  msgid "Width:"
191
  msgstr ""
192
 
193
- #: classes/class-projects-settings.php:121
194
- #: classes/class-projects-settings.php:129
195
- #: classes/class-projects-settings.php:137
196
  msgid "Height:"
197
  msgstr ""
198
 
199
- #: classes/class-projects-settings.php:126
 
 
 
 
 
 
200
  msgid "Single Images"
201
  msgstr ""
202
 
203
- #: classes/class-projects-settings.php:134
204
  msgid "Thumbnails"
205
  msgstr ""
206
 
@@ -208,102 +258,86 @@ msgstr ""
208
  msgid "Category"
209
  msgstr ""
210
 
211
- #: classes/class-projects-taxonomy.php:72 templates/single-project/meta.php:29
212
  msgid "Categories"
213
  msgstr ""
214
 
215
- #: classes/class-projects-taxonomy.php:95
216
  msgctxt "taxonomy general name"
217
- msgid "%s"
218
  msgstr ""
219
 
220
- #: classes/class-projects-taxonomy.php:96
221
  msgctxt "taxonomy singular name"
222
  msgid "%s"
223
  msgstr ""
224
 
225
- #: classes/class-projects-taxonomy.php:97
226
  msgid "Search %s"
227
  msgstr ""
228
 
229
- #: classes/class-projects-taxonomy.php:98
230
  msgid "All %s"
231
  msgstr ""
232
 
233
- #: classes/class-projects-taxonomy.php:99
234
  msgid "Parent %s"
235
  msgstr ""
236
 
237
- #: classes/class-projects-taxonomy.php:100
238
  msgid "Parent %s:"
239
  msgstr ""
240
 
241
- #: classes/class-projects-taxonomy.php:101 classes/class-projects.php:129
242
  msgid "Edit %s"
243
  msgstr ""
244
 
245
- #: classes/class-projects-taxonomy.php:102
246
  msgid "Update %s"
247
  msgstr ""
248
 
249
- #: classes/class-projects-taxonomy.php:103 classes/class-projects.php:128
250
  msgid "Add New %s"
251
  msgstr ""
252
 
253
- #: classes/class-projects-taxonomy.php:104
254
  msgid "New %s Name"
255
  msgstr ""
256
 
257
- #: classes/class-projects-taxonomy.php:105
258
  msgid "%s"
259
  msgstr ""
260
 
261
- #: classes/class-projects.php:113
262
  msgctxt "post type singular name"
263
  msgid "Project"
264
  msgstr ""
265
 
266
- #: classes/class-projects.php:114
267
  msgctxt "post type general name"
268
  msgid "Projects"
269
  msgstr ""
270
 
271
- #: classes/class-projects.php:130
272
  msgid "New %s"
273
  msgstr ""
274
 
275
- #: classes/class-projects.php:132
276
  msgid "View %s"
277
  msgstr ""
278
 
279
- #: classes/class-projects.php:133
280
  msgid "Search %a"
281
  msgstr ""
282
 
283
- #: classes/class-projects.php:134
284
  msgid "No %s Found"
285
  msgstr ""
286
 
287
- #: classes/class-projects.php:135
288
  msgid "No %s Found In Trash"
289
  msgstr ""
290
 
291
- #: classes/class-projects.php:526
292
- msgid "Testimonial"
293
- msgstr ""
294
-
295
- #: classes/class-projects.php:527
296
- msgid "Search for Testimonial to link to this Project. (Optional)"
297
- msgstr ""
298
-
299
- #: classes/class-projects.php:534
300
- msgid "Testimonial ID"
301
- msgstr ""
302
-
303
- #: classes/class-projects.php:535
304
- msgid "Holds the id of the selected testimonial."
305
- msgstr ""
306
-
307
  #: classes/class-widget-project-categories.php:42
308
  #: classes/class-widget-project-categories.php:44
309
  #: classes/class-widget-project-categories.php:154
@@ -340,22 +374,26 @@ msgctxt "slug"
340
  msgid "uncategorized"
341
  msgstr ""
342
 
343
- #: projects-template.php:129
344
  msgid "Search Results: &ldquo;%s&rdquo;"
345
  msgstr ""
346
 
347
- #: projects-template.php:132
348
  msgid "&nbsp;&ndash; Page %s"
349
  msgstr ""
350
 
 
 
 
 
351
  #: templates/loop/no-projects-found.php:14
352
  msgid "No projects found which match your selection."
353
  msgstr ""
354
 
355
- #: templates/single-project/meta.php:51
356
  msgid "Link"
357
  msgstr ""
358
 
359
- #: templates/single-project/meta.php:52
360
  msgid "Visit project"
361
  msgstr ""
4
  msgstr ""
5
  "Project-Id-Version: \n"
6
  "Report-Msgid-Bugs-To: http://wordpress.org/tag/projects-by-woothemes\n"
7
+ "POT-Creation-Date: 2014-04-09 11:18:59+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
76
  msgid "%s Gallery"
77
  msgstr ""
78
 
79
+ #: classes/class-projects-admin.php:420 classes/class-projects-admin.php:560
80
  msgid "Delete image"
81
  msgstr ""
82
 
83
+ #: classes/class-projects-admin.php:421
84
+ msgid "Edit image"
85
  msgstr ""
86
 
87
+ #: classes/class-projects-admin.php:432
88
+ msgid "Add %s gallery images"
 
 
 
 
89
  msgstr ""
90
 
91
+ #: classes/class-projects-admin.php:511 templates/single-project/meta.php:43
92
  msgid "Client"
93
  msgstr ""
94
 
95
+ #: classes/class-projects-admin.php:512
96
  msgid "Enter the client name. (Optional)"
97
  msgstr ""
98
 
99
+ #: classes/class-projects-admin.php:519
100
  msgid "URL"
101
  msgstr ""
102
 
103
+ #: classes/class-projects-admin.php:520
104
  msgid "Enter the project URL. (Optional)"
105
  msgstr ""
106
 
107
+ #: classes/class-projects-admin.php:540
108
  msgid "Enter the %s title here"
109
  msgstr ""
110
 
111
+ #: classes/class-projects-admin.php:558
112
+ msgid "Add Images to Project Gallery"
113
+ msgstr ""
114
+
115
+ #: classes/class-projects-admin.php:559
116
+ msgid "Add to gallery"
117
+ msgstr ""
118
+
119
+ #: classes/class-projects-admin.php:561
120
+ msgid "Upload"
121
+ msgstr ""
122
+
123
+ #: classes/class-projects-admin.php:562
124
+ msgid "Select this"
125
+ msgstr ""
126
+
127
+ #: classes/class-projects-admin.php:582
128
  msgid "%sProjects by WooThemes is almost ready.%s To get started, %sconfigure your projects page%s."
129
  msgstr ""
130
 
131
+ #: classes/class-projects-admin.php:596
132
  msgid "%s Cover Image"
133
  msgstr ""
134
 
135
+ #: classes/class-projects-admin.php:609
136
  msgid "Set featured image"
137
  msgstr ""
138
 
139
+ #: classes/class-projects-admin.php:609 classes/class-projects-admin.php:641
140
  msgid "Set cover image"
141
  msgstr ""
142
 
143
+ #: classes/class-projects-admin.php:625
144
  msgid "Remove featured image"
145
  msgstr ""
146
 
147
+ #: classes/class-projects-admin.php:625
148
  msgid "Remove cover image"
149
  msgstr ""
150
 
151
+ #: classes/class-projects-admin.php:640
152
  msgid "Set Cover Image"
153
  msgstr ""
154
 
155
+ #: classes/class-projects-integrations.php:162
156
+ msgid "Testimonial"
157
+ msgstr ""
158
+
159
+ #: classes/class-projects-integrations.php:163
160
+ msgid "Search for Testimonial to link to this Project. (Optional)"
161
+ msgstr ""
162
+
163
+ #: classes/class-projects-integrations.php:170
164
+ msgid "Testimonial ID"
165
+ msgstr ""
166
+
167
+ #: classes/class-projects-integrations.php:171
168
+ msgid "Holds the id of the selected testimonial."
169
+ msgstr ""
170
+
171
+ #: classes/class-projects-integrations.php:305
172
+ msgid "Product"
173
+ msgstr ""
174
+
175
+ #: classes/class-projects-integrations.php:306
176
+ msgid "Search for Product to link to this Project. (Optional)"
177
+ msgstr ""
178
+
179
+ #: classes/class-projects-integrations.php:313
180
+ msgid "Product ID"
181
+ msgstr ""
182
+
183
+ #: classes/class-projects-integrations.php:314
184
+ msgid "Holds the id of the selected product."
185
+ msgstr ""
186
+
187
  #: classes/class-projects-settings.php:31
188
  msgid "Settings"
189
  msgstr ""
224
  msgid "regenerate your thumbnails"
225
  msgstr ""
226
 
227
+ #: classes/class-projects-settings.php:121
228
  msgid "Archive Images"
229
  msgstr ""
230
 
231
+ #: classes/class-projects-settings.php:125
232
+ #: classes/class-projects-settings.php:134
233
+ #: classes/class-projects-settings.php:143
234
  msgid "Width:"
235
  msgstr ""
236
 
237
+ #: classes/class-projects-settings.php:125
238
+ #: classes/class-projects-settings.php:134
239
+ #: classes/class-projects-settings.php:143
240
  msgid "Height:"
241
  msgstr ""
242
 
243
+ #: classes/class-projects-settings.php:125
244
+ #: classes/class-projects-settings.php:134
245
+ #: classes/class-projects-settings.php:143
246
+ msgid "Crop:"
247
+ msgstr ""
248
+
249
+ #: classes/class-projects-settings.php:130
250
  msgid "Single Images"
251
  msgstr ""
252
 
253
+ #: classes/class-projects-settings.php:139
254
  msgid "Thumbnails"
255
  msgstr ""
256
 
258
  msgid "Category"
259
  msgstr ""
260
 
261
+ #: classes/class-projects-taxonomy.php:72 templates/single-project/meta.php:31
262
  msgid "Categories"
263
  msgstr ""
264
 
265
+ #: classes/class-projects-taxonomy.php:104
266
  msgctxt "taxonomy general name"
267
+ msgid "Project %s"
268
  msgstr ""
269
 
270
+ #: classes/class-projects-taxonomy.php:105
271
  msgctxt "taxonomy singular name"
272
  msgid "%s"
273
  msgstr ""
274
 
275
+ #: classes/class-projects-taxonomy.php:106
276
  msgid "Search %s"
277
  msgstr ""
278
 
279
+ #: classes/class-projects-taxonomy.php:107
280
  msgid "All %s"
281
  msgstr ""
282
 
283
+ #: classes/class-projects-taxonomy.php:108
284
  msgid "Parent %s"
285
  msgstr ""
286
 
287
+ #: classes/class-projects-taxonomy.php:109
288
  msgid "Parent %s:"
289
  msgstr ""
290
 
291
+ #: classes/class-projects-taxonomy.php:110 classes/class-projects.php:126
292
  msgid "Edit %s"
293
  msgstr ""
294
 
295
+ #: classes/class-projects-taxonomy.php:111
296
  msgid "Update %s"
297
  msgstr ""
298
 
299
+ #: classes/class-projects-taxonomy.php:112 classes/class-projects.php:125
300
  msgid "Add New %s"
301
  msgstr ""
302
 
303
+ #: classes/class-projects-taxonomy.php:113
304
  msgid "New %s Name"
305
  msgstr ""
306
 
307
+ #: classes/class-projects-taxonomy.php:114
308
  msgid "%s"
309
  msgstr ""
310
 
311
+ #: classes/class-projects.php:110
312
  msgctxt "post type singular name"
313
  msgid "Project"
314
  msgstr ""
315
 
316
+ #: classes/class-projects.php:111
317
  msgctxt "post type general name"
318
  msgid "Projects"
319
  msgstr ""
320
 
321
+ #: classes/class-projects.php:127
322
  msgid "New %s"
323
  msgstr ""
324
 
325
+ #: classes/class-projects.php:129
326
  msgid "View %s"
327
  msgstr ""
328
 
329
+ #: classes/class-projects.php:130
330
  msgid "Search %a"
331
  msgstr ""
332
 
333
+ #: classes/class-projects.php:131
334
  msgid "No %s Found"
335
  msgstr ""
336
 
337
+ #: classes/class-projects.php:132
338
  msgid "No %s Found In Trash"
339
  msgstr ""
340
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
341
  #: classes/class-widget-project-categories.php:42
342
  #: classes/class-widget-project-categories.php:44
343
  #: classes/class-widget-project-categories.php:154
374
  msgid "uncategorized"
375
  msgstr ""
376
 
377
+ #: projects-template.php:136
378
  msgid "Search Results: &ldquo;%s&rdquo;"
379
  msgstr ""
380
 
381
+ #: projects-template.php:139
382
  msgid "&nbsp;&ndash; Page %s"
383
  msgstr ""
384
 
385
+ #: projects-template.php:561
386
+ msgid "Purchase"
387
+ msgstr ""
388
+
389
  #: templates/loop/no-projects-found.php:14
390
  msgid "No projects found which match your selection."
391
  msgstr ""
392
 
393
+ #: templates/single-project/meta.php:53
394
  msgid "Link"
395
  msgstr ""
396
 
397
+ #: templates/single-project/meta.php:54
398
  msgid "Visit project"
399
  msgstr ""
projects-hooks.php CHANGED
@@ -56,6 +56,13 @@ if ( ! is_admin() || defined('DOING_AJAX') ) {
56
  add_action( 'projects_loop_item', 'projects_template_loop_project_title', 20 );
57
  add_action( 'projects_after_loop_item', 'projects_template_short_description', 10 );
58
 
 
 
 
 
 
 
 
59
  /**
60
  * Before Single Projects Summary Div
61
  *
@@ -87,6 +94,13 @@ if ( ! is_admin() || defined('DOING_AJAX') ) {
87
  add_action( 'projects_after_single_project', 'projects_output_testimonial', 1 );
88
  add_action( 'projects_after_single_project', 'projects_single_pagination', 5 );
89
 
 
 
 
 
 
 
 
90
  /**
91
  * Pagination after projects loops
92
  *
56
  add_action( 'projects_loop_item', 'projects_template_loop_project_title', 20 );
57
  add_action( 'projects_after_loop_item', 'projects_template_short_description', 10 );
58
 
59
+ /**
60
+ * Before Single Product
61
+ *
62
+ * @see projects_woocommerce_messages()
63
+ */
64
+ add_action( 'projects_before_single_project', 'projects_woocommerce_messages' );
65
+
66
  /**
67
  * Before Single Projects Summary Div
68
  *
94
  add_action( 'projects_after_single_project', 'projects_output_testimonial', 1 );
95
  add_action( 'projects_after_single_project', 'projects_single_pagination', 5 );
96
 
97
+ /**
98
+ * After Meta
99
+ *
100
+ * @see projects_output_product()
101
+ */
102
+ add_action( 'projects_after_meta', 'projects_output_product', 10 );
103
+
104
  /**
105
  * Pagination after projects loops
106
  *
projects-template.php CHANGED
@@ -80,6 +80,8 @@ if ( ! function_exists( 'projects_output_content_wrapper' ) ) {
80
  /**
81
  * Output the start of the page wrapper.
82
  *
 
 
83
  * @access public
84
  * @return void
85
  */
@@ -87,11 +89,14 @@ if ( ! function_exists( 'projects_output_content_wrapper' ) ) {
87
  projects_get_template( 'layout/wrapper-start.php' );
88
  }
89
  }
 
90
  if ( ! function_exists( 'projects_output_content_wrapper_end' ) ) {
91
 
92
  /**
93
  * Output the end of the page wrapper.
94
  *
 
 
95
  * @access public
96
  * @return void
97
  */
@@ -105,6 +110,8 @@ if ( ! function_exists( 'projects_get_sidebar' ) ) {
105
  /**
106
  * Get the projects sidebar template.
107
  *
 
 
108
  * @access public
109
  * @return void
110
  */
@@ -187,6 +194,8 @@ if ( ! function_exists( 'projects_taxonomy_archive_description' ) ) {
187
  /**
188
  * Show an archive description on taxonomy archives
189
  *
 
 
190
  * @access public
191
  * @subpackage Archives
192
  * @return void
@@ -205,6 +214,8 @@ if ( ! function_exists( 'projects_project_archive_description' ) ) {
205
  /**
206
  * Show a projects page description on project archives
207
  *
 
 
208
  * @access public
209
  * @subpackage Archives
210
  * @return void
@@ -225,6 +236,8 @@ if ( ! function_exists( 'projects_template_loop_project_thumbnail' ) ) {
225
  /**
226
  * Get the project thumbnail for the loop.
227
  *
 
 
228
  * @access public
229
  * @subpackage Loop
230
  * @return void
@@ -239,6 +252,8 @@ if ( ! function_exists( 'projects_template_loop_project_title' ) ) {
239
  /**
240
  * Display the project title in the loop.
241
  *
 
 
242
  * @access public
243
  * @subpackage Loop
244
  * @return void
@@ -292,6 +307,8 @@ if ( ! function_exists( 'projects_pagination' ) ) {
292
  /**
293
  * Output the pagination.
294
  *
 
 
295
  * @access public
296
  * @subpackage Loop
297
  * @return void
@@ -306,6 +323,8 @@ if ( ! function_exists( 'projects_template_short_description' ) ) {
306
  /**
307
  * Output the project short description.
308
  *
 
 
309
  * @access public
310
  * @subpackage Project
311
  * @return void
@@ -322,6 +341,8 @@ if ( ! function_exists( 'projects_template_single_feature' ) ) {
322
  /**
323
  * Output the project feature before the single project summary.
324
  *
 
 
325
  * @access public
326
  * @subpackage Project
327
  * @return void
@@ -336,6 +357,8 @@ if ( ! function_exists( 'projects_template_single_gallery' ) ) {
336
  /**
337
  * Output the project gallery before the single project summary.
338
  *
 
 
339
  * @access public
340
  * @subpackage Project
341
  * @return void
@@ -350,6 +373,8 @@ if ( ! function_exists( 'projects_template_single_title' ) ) {
350
  /**
351
  * Output the project title.
352
  *
 
 
353
  * @access public
354
  * @subpackage Project
355
  * @return void
@@ -364,6 +389,8 @@ if ( ! function_exists( 'projects_template_single_short_description' ) ) {
364
  /**
365
  * Output the project short description (excerpt).
366
  *
 
 
367
  * @access public
368
  * @subpackage Project
369
  * @return void
@@ -378,6 +405,8 @@ if ( ! function_exists( 'projects_template_single_description' ) ) {
378
  /**
379
  * Output the project description.
380
  *
 
 
381
  * @access public
382
  * @subpackage Project
383
  * @return void
@@ -392,6 +421,8 @@ if ( ! function_exists( 'projects_template_single_meta' ) ) {
392
  /**
393
  * Output the project meta.
394
  *
 
 
395
  * @access public
396
  * @subpackage Project
397
  * @return void
@@ -406,6 +437,8 @@ if ( ! function_exists( 'projects_single_pagination' ) ) {
406
  /**
407
  * Output the project pagination.
408
  *
 
 
409
  * @access public
410
  * @subpackage Project
411
  * @return void
@@ -481,6 +514,8 @@ if ( ! function_exists( 'projects_output_testimonial' ) ) {
481
  * This function is only used if the Testimonials plugin is enabled.
482
  * It can be used to output a project's testimonial.
483
  *
 
 
484
  * @access public
485
  * @return void
486
  * @since 1.1.0
@@ -499,6 +534,60 @@ if ( ! function_exists( 'projects_output_testimonial' ) ) {
499
  echo '</div>';
500
  }
501
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
502
  }
503
  }
504
  }
80
  /**
81
  * Output the start of the page wrapper.
82
  *
83
+ * Hooked into projects_before_main_content
84
+ *
85
  * @access public
86
  * @return void
87
  */
89
  projects_get_template( 'layout/wrapper-start.php' );
90
  }
91
  }
92
+
93
  if ( ! function_exists( 'projects_output_content_wrapper_end' ) ) {
94
 
95
  /**
96
  * Output the end of the page wrapper.
97
  *
98
+ * Hooked into projects_after_main_content
99
+ *
100
  * @access public
101
  * @return void
102
  */
110
  /**
111
  * Get the projects sidebar template.
112
  *
113
+ * Hooked into projects_sidebar
114
+ *
115
  * @access public
116
  * @return void
117
  */
194
  /**
195
  * Show an archive description on taxonomy archives
196
  *
197
+ * Hooked into projects_archive_description
198
+ *
199
  * @access public
200
  * @subpackage Archives
201
  * @return void
214
  /**
215
  * Show a projects page description on project archives
216
  *
217
+ * Hooked into projects_archive_description
218
+ *
219
  * @access public
220
  * @subpackage Archives
221
  * @return void
236
  /**
237
  * Get the project thumbnail for the loop.
238
  *
239
+ * Hooked into projects_loop_item
240
+ *
241
  * @access public
242
  * @subpackage Loop
243
  * @return void
252
  /**
253
  * Display the project title in the loop.
254
  *
255
+ * Hooked into projects_loop_item
256
+ *
257
  * @access public
258
  * @subpackage Loop
259
  * @return void
307
  /**
308
  * Output the pagination.
309
  *
310
+ * Hooked into projects_after_loop
311
+ *
312
  * @access public
313
  * @subpackage Loop
314
  * @return void
323
  /**
324
  * Output the project short description.
325
  *
326
+ * Hooked into projects_after_loop_item
327
+ *
328
  * @access public
329
  * @subpackage Project
330
  * @return void
341
  /**
342
  * Output the project feature before the single project summary.
343
  *
344
+ * Hooked into projects_before_single_project_summary
345
+ *
346
  * @access public
347
  * @subpackage Project
348
  * @return void
357
  /**
358
  * Output the project gallery before the single project summary.
359
  *
360
+ * Hooked into projects_before_single_project_summary
361
+ *
362
  * @access public
363
  * @subpackage Project
364
  * @return void
373
  /**
374
  * Output the project title.
375
  *
376
+ * Hooked into projects_before_single_project_summary
377
+ *
378
  * @access public
379
  * @subpackage Project
380
  * @return void
389
  /**
390
  * Output the project short description (excerpt).
391
  *
392
+ * Hooked into projects_before_single_project_summary
393
+ *
394
  * @access public
395
  * @subpackage Project
396
  * @return void
405
  /**
406
  * Output the project description.
407
  *
408
+ * Hooked into projects_single_project_summary
409
+ *
410
  * @access public
411
  * @subpackage Project
412
  * @return void
421
  /**
422
  * Output the project meta.
423
  *
424
+ * Hooked into projects_single_project_summary
425
+ *
426
  * @access public
427
  * @subpackage Project
428
  * @return void
437
  /**
438
  * Output the project pagination.
439
  *
440
+ * Hooked into projects_after_single_project
441
+ *
442
  * @access public
443
  * @subpackage Project
444
  * @return void
514
  * This function is only used if the Testimonials plugin is enabled.
515
  * It can be used to output a project's testimonial.
516
  *
517
+ * Hooked into projects_after_single_project
518
+ *
519
  * @access public
520
  * @return void
521
  * @since 1.1.0
534
  echo '</div>';
535
  }
536
 
537
+ }
538
+ }
539
+ }
540
+
541
+ if ( ! function_exists( 'projects_output_product' ) ) {
542
+
543
+ /**
544
+ * Output Projects Product.
545
+ *
546
+ * This function is only used if WooCommerce is enabled.
547
+ * It can be used to output a 'buy now' button for a product associated with a project.
548
+ *
549
+ * Hooked into projects_after_meta
550
+ *
551
+ * @access public
552
+ * @return void
553
+ * @since 1.2.0
554
+ */
555
+ function projects_output_product() {
556
+ if ( class_exists( 'WooCommerce' ) && is_singular( 'project' ) ) {
557
+ global $post;
558
+ $product_id = esc_attr( get_post_meta( $post->ID, '_products_id', true ) );
559
+ if ( isset( $product_id ) && '' != $product_id && '0' != $product_id ) {
560
+ echo '<div class="purchase">';
561
+ echo '<h3>' . apply_filters( 'projects_meta_woocommerce_title', __( 'Purchase', 'projects-by-woothemes' ) ) . '</h3>';
562
+ echo do_shortcode( '[add_to_cart id="' . $product_id . '" style=""]' );
563
+ echo '</div>';
564
+ }
565
+
566
+ }
567
+ }
568
+ }
569
+
570
+ if ( ! function_exists( 'projects_woocommerce_messages' ) ) {
571
+
572
+ /**
573
+ * Output Projects WooCommerce Messages.
574
+ *
575
+ * Displays WooCommerce Messages on the single project page - for feedback adding products to the cart when js is disabled
576
+ *
577
+ * Hooked into projects_before_single_project
578
+ *
579
+ * @access public
580
+ * @return void
581
+ * @since 1.2.0
582
+ */
583
+ function projects_woocommerce_messages() {
584
+ if ( class_exists( 'WooCommerce' ) && is_singular( 'project' ) ) {
585
+ global $post;
586
+ $product_id = esc_attr( get_post_meta( $post->ID, '_products_id', true ) );
587
+ if ( isset( $product_id ) && '' != $product_id && '0' != $product_id ) {
588
+ echo do_shortcode( '[woocommerce_messages]' );
589
+ }
590
+
591
  }
592
  }
593
  }
projects.php CHANGED
@@ -4,7 +4,7 @@
4
  * Plugin URI: http://woothemes.com/
5
  * Description: Hi, I'm your project showcase plugin for WordPress. Show off your recent work using our shortcode, widget or template tag.
6
  * Author: WooThemes
7
- * Version: 1.1.0
8
  * Author URI: http://woothemes.com/
9
  *
10
  * @package WordPress
@@ -19,6 +19,7 @@ require_once( 'classes/class-projects-shortcodes.php' );
19
  require_once( 'classes/class-projects-settings.php' );
20
  require_once( 'classes/class-widget-projects.php' );
21
  require_once( 'classes/class-widget-project-categories.php' );
 
22
 
23
  require_once( 'projects-template.php' );
24
  require_once( 'projects-core-functions.php' );
4
  * Plugin URI: http://woothemes.com/
5
  * Description: Hi, I'm your project showcase plugin for WordPress. Show off your recent work using our shortcode, widget or template tag.
6
  * Author: WooThemes
7
+ * Version: 1.2.0
8
  * Author URI: http://woothemes.com/
9
  *
10
  * @package WordPress
19
  require_once( 'classes/class-projects-settings.php' );
20
  require_once( 'classes/class-widget-projects.php' );
21
  require_once( 'classes/class-widget-project-categories.php' );
22
+ require_once( 'classes/class-projects-integrations.php' );
23
 
24
  require_once( 'projects-template.php' );
25
  require_once( 'projects-core-functions.php' );
readme.txt CHANGED
@@ -1,10 +1,10 @@
1
  === Projects by WooThemes ===
2
  Contributors: woothemes, mattyza, jameskoster, tiagonoronha
3
  Donate link: http://woothemes.com/
4
- Tags: portfolio, projects, project, showcase, artwork, work, creative, photography, art
5
  Requires at least: 3.8
6
  Tested up to: 3.8.1
7
- Stable tag: 1.1.0
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
@@ -12,8 +12,14 @@ Hi, I'm your projects showcase plugin for WordPress. Use me to show off a portfo
12
 
13
  == Description ==
14
 
 
 
15
  "Projects" by WooThemes is a clean and easy-to-use portfolio showcase management system for WordPress. Load in your recent projects, and display them on a specified page using our template system, or via a shortcode, widget or template tag.
16
 
 
 
 
 
17
  = Easy to use =
18
 
19
  Publish and categorise your portfolio of projects using the familiar WordPress interface.
@@ -94,11 +100,28 @@ You sure can! Read about how in the [documentation](http://docs.woothemes.com/do
94
 
95
  == Upgrade Notice ==
96
 
 
 
 
 
97
  = 1.0.0 =
98
  * Initial release. Woo!
99
 
100
  == Changelog ==
101
 
 
 
 
 
 
 
 
 
 
 
 
 
 
102
  = 1.1.0 =
103
  * 2014-03-25
104
  * New - Integration with Testimonials plugin.
1
  === Projects by WooThemes ===
2
  Contributors: woothemes, mattyza, jameskoster, tiagonoronha
3
  Donate link: http://woothemes.com/
4
+ Tags: portfolio, projects, project, showcase, artwork, work, creative, photography, art, images
5
  Requires at least: 3.8
6
  Tested up to: 3.8.1
7
+ Stable tag: 1.2.0
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
12
 
13
  == Description ==
14
 
15
+ = Create and display a portfolio of projects =
16
+
17
  "Projects" by WooThemes is a clean and easy-to-use portfolio showcase management system for WordPress. Load in your recent projects, and display them on a specified page using our template system, or via a shortcode, widget or template tag.
18
 
19
+ Projects integrates with our [testimonials plugin](http://wordpress.org/plugins/testimonials-by-woothemes/) allowing you to associate a testimonial with a project and display it on the single project page.
20
+
21
+ You can even assign a project to a product you've created in [WooCommerce](http://wordpress.org/plugins/woocommerce/) and let customers add it to their cart from the project page.
22
+
23
  = Easy to use =
24
 
25
  Publish and categorise your portfolio of projects using the familiar WordPress interface.
100
 
101
  == Upgrade Notice ==
102
 
103
+ = 1.2.0 =
104
+
105
+ * The project archive slug now mirrors your projects base page slug isntead of being fixed as 'projects'. If you're using a base page with a slug other than 'projects' you may want to check any static links to your projects page. For example if your base page is 'portfolio' your projects post type archive will now exist at http://yoursite.com/portfolio rather than http://yoursite.com/projects.
106
+
107
  = 1.0.0 =
108
  * Initial release. Woo!
109
 
110
  == Changelog ==
111
 
112
+ = 1.2.0 =
113
+ * 2014-04-09
114
+ * New - Replaced .less files with .scss.
115
+ * New - Integrated with WooCommerce.
116
+ * New - Added config.codekit.
117
+ * New - Project images can now be cropped. (Props @helgatheviking).
118
+ * New - Project archive slug is now retreived from base page slug.
119
+ * Tweak - Added css for multi column layouts when using the shortcode to display projects.
120
+ * Tweak - Project categories can now be added to navigation menus.
121
+ * Tweak - Various new input types can now be easily added using projects_custom_fields filter. (Props @helgatheviking).
122
+ * Tweak - Menu icon added in register_post_type() and now filterable. (Props @helgatheviking).
123
+ * Tweak - Added an edit media link to the project gallery meta box.
124
+
125
  = 1.1.0 =
126
  * 2014-03-25
127
  * New - Integration with Testimonials plugin.
templates/single-project/meta.php CHANGED
@@ -21,6 +21,8 @@ global $post;
21
  $client = esc_attr( get_post_meta( $post->ID, '_client', true ) );
22
  $url = esc_url( get_post_meta( $post->ID, '_url', true ) );
23
 
 
 
24
  /**
25
  * Display categories if they're set
26
  */
@@ -52,5 +54,7 @@ global $post;
52
  echo '<span class="project-url"><a href="' . $url . '">' . apply_filters( 'projects_visit_project_link', __( 'Visit project', 'projects-by-woothemes' ) ) . '</a></span>';
53
  echo '</div>';
54
  }
 
 
55
  ?>
56
  </div>
21
  $client = esc_attr( get_post_meta( $post->ID, '_client', true ) );
22
  $url = esc_url( get_post_meta( $post->ID, '_url', true ) );
23
 
24
+ do_action( 'projects_before_meta' );
25
+
26
  /**
27
  * Display categories if they're set
28
  */
54
  echo '<span class="project-url"><a href="' . $url . '">' . apply_filters( 'projects_visit_project_link', __( 'Visit project', 'projects-by-woothemes' ) ) . '</a></span>';
55
  echo '</div>';
56
  }
57
+
58
+ do_action( 'projects_after_meta' );
59
  ?>
60
  </div>