WP Dashboard Notes - Version 1.0.8

Version Description

  • 10/03/2016 =

  • Improvement - Always show toolbar on mobile devices (credits to ClearPathDigital)

  • Fix - Check nonce + user capabilities for AJAX calls (credits to Paul Gibbs for noting)

Download this release

Release Info

Developer sormano
Plugin Icon 128x128 WP Dashboard Notes
Version 1.0.8
Comparing to
See all releases

Version 1.0.8

assets/css/wp-dashboard-notes-admin.min.css ADDED
@@ -0,0 +1,335 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ input[type=text].add-list-item {
2
+ line-height: normal;
3
+ border-radius: 3px;
4
+ height: 35px;
5
+ padding: 5px 10px;
6
+ width: 75%;
7
+ border-color: #555;
8
+ background-color: rgba(255, 255, 255, 0.6); }
9
+
10
+ input[type=text].add-list-item::-webkit-input-placeholder {
11
+ color: #555; }
12
+
13
+ input[type=text].add-list-item:-moz-placeholder {
14
+ color: #555; }
15
+
16
+ input[type=text].add-list-item::-moz-placeholder {
17
+ color: #555; }
18
+
19
+ input[type=text].add-list-item:-ms-input-placeholder {
20
+ color: #555; }
21
+
22
+ .wp-dashboard-note {
23
+ line-height: 1.5;
24
+ font-size: 14px;
25
+ min-height: 30px; }
26
+
27
+ .wp-dashboard-note-wrap {
28
+ padding-bottom: 40px; }
29
+
30
+ .wp-dashboard-note-options {
31
+ text-align: left; }
32
+
33
+ .list-note .wp-dashboard-note-options {
34
+ margin-top: 15px; }
35
+
36
+ .wp-dashboard-note .list-item {
37
+ min-height: 30px;
38
+ line-height: 30px;
39
+ width: 100%;
40
+ display: block; }
41
+
42
+ .wp-dashboard-note div:last-child {
43
+ border-bottom: 0; }
44
+
45
+ /* Sortable */
46
+ .wpdn-note-sortable {
47
+ color: #6f6f6f;
48
+ margin-right: 5px;
49
+ cursor: move;
50
+ line-height: inherit;
51
+ opacity: 0; }
52
+
53
+ .list-item:hover .wpdn-note-sortable {
54
+ opacity: 1; }
55
+
56
+ .list-item .dashicons-no-alt {
57
+ color: rgba(0, 0, 0, 0.3);
58
+ text-align: right;
59
+ float: right;
60
+ cursor: pointer;
61
+ line-height: inherit; }
62
+
63
+ .list-item input[type=checkbox] {
64
+ margin-right: 15px;
65
+ background: transparent;
66
+ border-color: #555; }
67
+
68
+ .list-item input[type=checkbox]:checked:before {
69
+ color: #555; }
70
+
71
+ .list-item input[type=checkbox]:checked ~ span {
72
+ text-decoration: line-through;
73
+ color: #6f6f6f; }
74
+
75
+ .list-item .dashicons-no-alt:hover {
76
+ color: #999; }
77
+
78
+ .list-item:hover .dashicons-no-alt {
79
+ visibility: visible; }
80
+
81
+ .list-item .dashicons-no-alt {
82
+ visibility: hidden; }
83
+
84
+ .wp-dashboard-note-wrap .wpdn-add-item {
85
+ line-height: 2; }
86
+
87
+ .list-item .wpdn-add-item {
88
+ color: #ccc;
89
+ margin-right: 8px; }
90
+
91
+ .list-item-content {
92
+ line-height: 1; }
93
+
94
+ .wp-dashboard-note-wrap:hover .wpdn-extra {
95
+ opacity: 1; }
96
+
97
+ .wpdn-extra {
98
+ background: rgba(76, 76, 76, 0.9);
99
+ position: absolute;
100
+ opacity: 0;
101
+ width: 100%;
102
+ left: 0;
103
+ bottom: 0;
104
+ height: 40px;
105
+ padding-left: 12px;
106
+ box-sizing: border-box;
107
+ -webkit-transition: opacity 0.3s ease-in-out;
108
+ transition: opacity 0.2s ease-in-out; }
109
+
110
+ .wpdn-extra * {
111
+ color: #fff; }
112
+
113
+ .wpdn-extra .dashicons:hover {
114
+ color: #ccc;
115
+ cursor: pointer; }
116
+
117
+ [data-note-type=list] .saved-icon .dashicons,
118
+ .wpdn-extra .dashicons {
119
+ line-height: 2; }
120
+
121
+ .wpdn-extra .dashicons {
122
+ margin-left: 5px; }
123
+
124
+ [data-note-type=regular] .saved-icon .dashicons {
125
+ line-height: 1; }
126
+
127
+ .hndle span {
128
+ cursor: text;
129
+ -webkit-user-select: text;
130
+ -moz-user-select: text;
131
+ -ms-user-select: text;
132
+ -o-user-select: text;
133
+ user-select: text; }
134
+
135
+ .hndle .wpdn-edit-title {
136
+ display: none;
137
+ height: 19px;
138
+ color: #222;
139
+ cursor: pointer;
140
+ margin-left: 5px; }
141
+
142
+ .hndle:hover .dashicons {
143
+ display: inline-block; }
144
+
145
+ [id^=note_] .handlediv {
146
+ color: #222;
147
+ color: transparent; }
148
+
149
+ /* Open Link */
150
+ .wp-dashboard-note-wrap a {
151
+ position: relative; }
152
+
153
+ .wp-dashboard-note-wrap :focus {
154
+ outline: none; }
155
+
156
+ .link-hover {
157
+ background: rgba(76, 76, 76, 0.9);
158
+ position: absolute;
159
+ left: 0px;
160
+ top: 1.6em;
161
+ padding: 5px;
162
+ border-radius: 4px;
163
+ font-size: 12px;
164
+ z-index: 99;
165
+ min-width: 55px;
166
+ text-align: center; }
167
+
168
+ .link-hover a {
169
+ color: white; }
170
+
171
+ /* Saving */
172
+ .hndle .status {
173
+ float: right; }
174
+
175
+ .saving-icon img {
176
+ vertical-align: middle; }
177
+
178
+ .saved-icon,
179
+ .saving-icon {
180
+ color: #222;
181
+ font-weight: normal;
182
+ font-size: 13px; }
183
+
184
+ /* Hide pencil at screen options titles */
185
+ .metabox-prefs .wpdn-edit-title.dashicons-edit {
186
+ display: none; }
187
+
188
+ /****************************
189
+ * Colors
190
+ ****************************/
191
+ span.wpdn-color-note:hover .wpdn-color-palette {
192
+ display: inline-block; }
193
+
194
+ .wpdn-color-palette {
195
+ min-width: 50px;
196
+ width: auto;
197
+ padding: 4px 8px 2px 8px;
198
+ margin-left: -8px;
199
+ position: absolute;
200
+ top: -24px;
201
+ background-color: rgba(76, 76, 76, 0.9);
202
+ height: 18px;
203
+ display: none; }
204
+
205
+ .color {
206
+ width: 10px;
207
+ height: 10px;
208
+ border: 1px solid transparent;
209
+ margin: 2.5px;
210
+ display: inline-block; }
211
+
212
+ .color:hover {
213
+ border: 1px solid #ccc;
214
+ cursor: pointer; }
215
+
216
+ .color-white {
217
+ background-color: #ffffff; }
218
+
219
+ .color-red {
220
+ background-color: #f7846a; }
221
+
222
+ .color-orange {
223
+ background-color: #ffbd22; }
224
+
225
+ .color-yellow {
226
+ background-color: #eeee22; }
227
+
228
+ .color-blue {
229
+ background-color: #66ccdd; }
230
+
231
+ .color-green {
232
+ background-color: #bbe535; }
233
+
234
+ .color-black {
235
+ background-color: #777777; }
236
+
237
+ /****************************
238
+ * Black
239
+ ****************************/
240
+ [data-color-text=black] {
241
+ color: white; }
242
+
243
+ [data-color-text=black] .wpdn-note-sortable {
244
+ color: white; }
245
+
246
+ [data-color-text=black] .wpdn-add-item {
247
+ color: white; }
248
+
249
+ [data-color-text=black] .wp-dashboard-note .list-item {
250
+ border-color: white; }
251
+
252
+ [data-color-text=black] input[type=checkbox] {
253
+ border: 1px solid white; }
254
+
255
+ [data-color-text=black] .list-item input[type=checkbox]:checked ~ span {
256
+ color: white; }
257
+
258
+ [data-color-text=black] [id^=note] .handlediv {
259
+ color: white; }
260
+
261
+ [data-color-text=black] input[type=text].add-list-item {
262
+ border-color: #FFF;
263
+ color: #FFF;
264
+ background: rgba(255, 255, 255, 0.3); }
265
+
266
+ [data-color-text=black] input[type=text].add-list-item::-webkit-input-placeholder {
267
+ color: white; }
268
+
269
+ [data-color-text=black] input[type=text].add-list-item:-moz-placeholder {
270
+ color: white; }
271
+
272
+ [data-color-text=black] input[type=text].add-list-item::-moz-placeholder {
273
+ color: white; }
274
+
275
+ [data-color-text=black] input[type=text].add-list-item:-ms-input-placeholder {
276
+ color: white; }
277
+
278
+ [data-color-text=black] .saved-icon,
279
+ [data-color-text=black] .saving-icon {
280
+ color: white; }
281
+
282
+ /****************************
283
+ * Template
284
+ ****************************/
285
+ [data-color-text=template] {
286
+ color: inherit; }
287
+
288
+ [data-color-text=template] .wpdn-note-sortable {
289
+ color: inherit; }
290
+
291
+ [data-color-text=template] .wpdn-add-item {
292
+ color: inherit; }
293
+
294
+ [data-color-text=template] .wp-dashboard-note .list-item {
295
+ border-color: inherit; }
296
+
297
+ [data-color-text=template] input[type=checkbox] {
298
+ border: 1px solid inherit; }
299
+
300
+ [data-color-text=template] .list-item input[type=checkbox]:checked ~ span {
301
+ color: inherit; }
302
+
303
+ [data-color-text=template] [id^=note] .handlediv {
304
+ color: inherit; }
305
+
306
+ [data-color-text=template] input[type=text].add-list-item {
307
+ border-color: inherit;
308
+ color: inherit;
309
+ background: inherit; }
310
+
311
+ [data-color-text=template] input[type=text].add-list-item::-webkit-input-placeholder {
312
+ color: inherit; }
313
+
314
+ [data-color-text=template] input[type=text].add-list-item:-moz-placeholder {
315
+ color: inherit; }
316
+
317
+ [data-color-text=template] input[type=text].add-list-item::-moz-placeholder {
318
+ color: inherit; }
319
+
320
+ [data-color-text=template] input[type=text].add-list-item:-ms-input-placeholder {
321
+ color: inherit; }
322
+
323
+ [data-color-text=template] .saved-icon,
324
+ [data-color-text=template] .saving-icon {
325
+ color: inherit; }
326
+
327
+ /****************************
328
+ * Mobile Adjustments
329
+ ****************************/
330
+ @media only screen and (max-device-width: 1024px) {
331
+ .wpdn-extra {
332
+ opacity: 1; }
333
+
334
+ .wpdn-edit-title {
335
+ display: inline-block !important; } }
assets/css/wp-dashboard-notes-admin.scss ADDED
@@ -0,0 +1,339 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ input[type=text].add-list-item {
2
+ line-height: normal;
3
+ border-radius: 3px;
4
+ height: 35px;
5
+ padding: 5px 10px;
6
+ width: 75%;
7
+ border-color: #555;
8
+ background-color: rgba( 255, 255, 255, 0.6 );
9
+ }
10
+
11
+ input[type=text].add-list-item::-webkit-input-placeholder {
12
+ color: #555;
13
+ }
14
+ input[type=text].add-list-item:-moz-placeholder {
15
+ color: #555;
16
+ }
17
+ input[type=text].add-list-item::-moz-placeholder {
18
+ color: #555;
19
+ }
20
+ input[type=text].add-list-item:-ms-input-placeholder {
21
+ color: #555;
22
+ }
23
+
24
+ .wp-dashboard-note {
25
+ line-height: 1.5;
26
+ font-size: 14px;
27
+ min-height: 30px;
28
+ }
29
+ .wp-dashboard-note-wrap {
30
+ padding-bottom: 40px;
31
+ }
32
+
33
+ .wp-dashboard-note-options {
34
+ text-align: left;
35
+ }
36
+ .list-note .wp-dashboard-note-options {
37
+ margin-top: 15px;
38
+ }
39
+
40
+ .wp-dashboard-note .list-item {
41
+ min-height: 30px;
42
+ line-height: 30px;
43
+ width: 100%;
44
+ display: block;
45
+ }
46
+ .wp-dashboard-note div:last-child {
47
+ border-bottom: 0;
48
+ }
49
+
50
+ /* Sortable */
51
+ .wpdn-note-sortable {
52
+ color: #6f6f6f;
53
+ margin-right: 5px;
54
+ cursor: move;
55
+ line-height: inherit;
56
+ opacity: 0;
57
+ }
58
+ .list-item:hover .wpdn-note-sortable {
59
+ opacity: 1;
60
+ }
61
+ .list-item .dashicons-no-alt {
62
+ color: rgba( 0, 0, 0, 0.3 );
63
+ text-align: right;
64
+ float: right;
65
+ cursor: pointer;
66
+ line-height: inherit;
67
+ }
68
+ .list-item input[type=checkbox] {
69
+ margin-right: 15px;
70
+ background: transparent;
71
+ border-color: #555;
72
+ }
73
+ .list-item input[type=checkbox]:checked:before {
74
+ color: #555;
75
+ }
76
+ .list-item input[type=checkbox]:checked ~ span {
77
+ text-decoration:line-through;
78
+ color: #6f6f6f;
79
+ }
80
+ .list-item .dashicons-no-alt:hover {
81
+ color: #999;
82
+ }
83
+ .list-item:hover .dashicons-no-alt {
84
+ visibility: visible;
85
+ }
86
+ .list-item .dashicons-no-alt {
87
+ visibility: hidden;
88
+ }
89
+ .wp-dashboard-note-wrap .wpdn-add-item {
90
+ line-height: 2;
91
+ }
92
+ .list-item .wpdn-add-item {
93
+ color: #ccc;
94
+ margin-right: 8px;
95
+ }
96
+ .list-item-content {
97
+ line-height: 1;
98
+ }
99
+
100
+ .wp-dashboard-note-wrap:hover .wpdn-extra {
101
+ opacity: 1;
102
+ }
103
+ .wpdn-extra {
104
+ background: rgba( 76, 76, 76, 0.9 );
105
+ position: absolute;
106
+ opacity: 0;
107
+ width: 100%;
108
+ left: 0;
109
+ bottom: 0;
110
+ height: 40px;
111
+ padding-left: 12px;
112
+ box-sizing: border-box;
113
+ -webkit-transition: opacity 0.3s ease-in-out;
114
+ transition: opacity 0.2s ease-in-out;
115
+ }
116
+ .wpdn-extra * {
117
+ color: #fff;
118
+ }
119
+ .wpdn-extra .dashicons:hover {
120
+ color: #ccc;
121
+ cursor: pointer;
122
+ }
123
+ [data-note-type=list] .saved-icon .dashicons,
124
+ .wpdn-extra .dashicons {
125
+ line-height: 2;
126
+ }
127
+ .wpdn-extra .dashicons {
128
+ margin-left: 5px;
129
+ }
130
+ [data-note-type=regular] .saved-icon .dashicons {
131
+ line-height: 1;
132
+ }
133
+ .hndle span {
134
+ cursor: text;
135
+ -webkit-user-select: text;
136
+ -moz-user-select: text;
137
+ -ms-user-select: text;
138
+ -o-user-select: text;
139
+ user-select: text;
140
+ }
141
+ .hndle .wpdn-edit-title {
142
+ display: none;
143
+ height: 19px;
144
+ color: #222;
145
+ cursor: pointer;
146
+ margin-left: 5px;
147
+ }
148
+ .hndle:hover .dashicons {
149
+ display: inline-block;
150
+ }
151
+ [id^=note_] .handlediv {
152
+ color: #222;
153
+ color: transparent;
154
+ }
155
+
156
+ /* Open Link */
157
+ .wp-dashboard-note-wrap a {
158
+ position: relative;
159
+ }
160
+ .wp-dashboard-note-wrap :focus {
161
+ outline: none;
162
+ }
163
+ .link-hover {
164
+ background: rgba(76, 76, 76, 0.9);
165
+ position: absolute;
166
+ left: 0px;
167
+ top: 1.6em;
168
+ padding: 5px;
169
+ border-radius: 4px;
170
+ font-size: 12px;
171
+ z-index: 99;
172
+ min-width: 55px;
173
+ text-align: center;
174
+ }
175
+ .link-hover a {
176
+ color: white;
177
+ }
178
+
179
+ /* Saving */
180
+ .hndle .status {
181
+ float: right;
182
+ }
183
+ .saving-icon img {
184
+ vertical-align: middle;
185
+ }
186
+ .saved-icon,
187
+ .saving-icon {
188
+ color: #222;
189
+ font-weight: normal;
190
+ font-size: 13px;
191
+ }
192
+
193
+ /* Hide pencil at screen options titles */
194
+ .metabox-prefs .wpdn-edit-title.dashicons-edit {
195
+ display: none;
196
+ }
197
+
198
+ /****************************
199
+ * Colors
200
+ ****************************/
201
+ span.wpdn-color-note:hover .wpdn-color-palette {
202
+ display: inline-block;
203
+ }
204
+ .wpdn-color-palette {
205
+ min-width: 50px;
206
+ width: auto;
207
+ padding: 4px 8px 2px 8px;
208
+ margin-left: -8px;
209
+ position: absolute;
210
+ top: -24px;
211
+ background-color: rgba(76, 76, 76, 0.9);
212
+ height: 18px;
213
+ display: none;
214
+ }
215
+
216
+ .color {
217
+ width: 10px;
218
+ height: 10px;
219
+ border: 1px solid transparent;
220
+ margin: 2.5px;
221
+ display: inline-block;
222
+ }
223
+ .color:hover {
224
+ border: 1px solid #ccc;
225
+ cursor: pointer;
226
+ }
227
+ .color-white { background-color: #ffffff; }
228
+ .color-red { background-color: #f7846a; }
229
+ .color-orange { background-color: #ffbd22; }
230
+ .color-yellow { background-color: #eeee22; }
231
+ .color-blue { background-color: #66ccdd; }
232
+ .color-green { background-color: #bbe535; }
233
+ .color-black { background-color: #777777; }
234
+
235
+ /****************************
236
+ * Black
237
+ ****************************/
238
+ [data-color-text=black] {
239
+ color: white;
240
+ }
241
+ [data-color-text=black] .wpdn-note-sortable {
242
+ color: white;
243
+ }
244
+ [data-color-text=black] .wpdn-add-item {
245
+ color: white;
246
+ }
247
+ [data-color-text=black] .wp-dashboard-note .list-item {
248
+ border-color: white;
249
+ }
250
+ [data-color-text=black] input[type=checkbox] {
251
+ border: 1px solid white;
252
+ }
253
+ [data-color-text=black] .list-item input[type=checkbox]:checked ~ span {
254
+ color: white;
255
+ }
256
+ [data-color-text=black] [id^=note] .handlediv {
257
+ color: white;
258
+ }
259
+ [data-color-text=black] input[type=text].add-list-item {
260
+ border-color: #FFF;
261
+ color: #FFF;
262
+ background: rgba(255, 255, 255, 0.3);
263
+ }
264
+ [data-color-text=black] input[type=text].add-list-item::-webkit-input-placeholder {
265
+ color: white;
266
+ }
267
+ [data-color-text=black] input[type=text].add-list-item:-moz-placeholder {
268
+ color: white;
269
+ }
270
+ [data-color-text=black] input[type=text].add-list-item::-moz-placeholder {
271
+ color: white;
272
+ }
273
+ [data-color-text=black] input[type=text].add-list-item:-ms-input-placeholder {
274
+ color: white;
275
+ }
276
+ [data-color-text=black] .saved-icon,
277
+ [data-color-text=black] .saving-icon {
278
+ color: white;
279
+ }
280
+
281
+
282
+
283
+ /****************************
284
+ * Template
285
+ ****************************/
286
+ [data-color-text=template] {
287
+ color: inherit;
288
+ }
289
+ [data-color-text=template] .wpdn-note-sortable {
290
+ color: inherit;
291
+ }
292
+ [data-color-text=template] .wpdn-add-item {
293
+ color: inherit;
294
+ }
295
+ [data-color-text=template] .wp-dashboard-note .list-item {
296
+ border-color: inherit;
297
+ }
298
+ [data-color-text=template] input[type=checkbox] {
299
+ border: 1px solid inherit;
300
+ }
301
+ [data-color-text=template] .list-item input[type=checkbox]:checked ~ span {
302
+ color: inherit;
303
+ }
304
+ [data-color-text=template] [id^=note] .handlediv {
305
+ color: inherit;
306
+ }
307
+ [data-color-text=template] input[type=text].add-list-item {
308
+ border-color: inherit;
309
+ color: inherit;
310
+ background: inherit;
311
+ }
312
+ [data-color-text=template] input[type=text].add-list-item::-webkit-input-placeholder {
313
+ color: inherit;
314
+ }
315
+ [data-color-text=template] input[type=text].add-list-item:-moz-placeholder {
316
+ color: inherit;
317
+ }
318
+ [data-color-text=template] input[type=text].add-list-item::-moz-placeholder {
319
+ color: inherit;
320
+ }
321
+ [data-color-text=template] input[type=text].add-list-item:-ms-input-placeholder {
322
+ color: inherit;
323
+ }
324
+ [data-color-text=template] .saved-icon,
325
+ [data-color-text=template] .saving-icon {
326
+ color: inherit;
327
+ }
328
+
329
+ /****************************
330
+ * Mobile Adjustments
331
+ ****************************/
332
+ @media only screen and (max-device-width : 1024px) {
333
+ .wpdn-extra{
334
+ opacity:1
335
+ }
336
+ .wpdn-edit-title {
337
+ display: inline-block !important;
338
+ }
339
+ }
assets/js/wp-dashboard-notes-admin.js ADDED
@@ -0,0 +1,247 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ jQuery( document ).ready( function($) {
2
+
3
+ var loading_icon = '<span class="saving-icon"><img src="images/wpspin_light.gif"/> saving...</span>';
4
+ var saved_icon = '<span class="saved-icon"><div class="dashicons dashicons-yes"></div> saved!</span>';
5
+
6
+
7
+ // Add list item
8
+ $( 'body, .list-item-content' ).on( 'keydown', '.add-list-item', function( e ) {
9
+
10
+ if( e.keyCode == 13 && $( this ).val() != '' ) {
11
+
12
+ var post_id = $( this ).closest( ".postbox" ).attr( 'id' );
13
+ var list_item = '<div class="list-item"><div class="dashicons dashicons-menu wpdn-note-sortable"></div><input type="checkbox"><span class="list-item-content" contenteditable="true">' + $( this ).val() + '</span><div class="delete-item dashicons dashicons-no-alt"></div></div>';
14
+
15
+ $( '#' + post_id + ' div.wp-dashboard-note' ).append( list_item );
16
+ $( this ).val( '' ); // Clear 'add item' field
17
+ $( this ).trigger( 'note-sortable' );
18
+
19
+ $( this ).trigger( 'wpdn-update', this );
20
+
21
+ }
22
+
23
+ });
24
+
25
+
26
+ // Delete list item
27
+ $( document.body ).on( 'click', '.delete-item', function() {
28
+
29
+ var post_id = $( this ).closest( ".postbox" ).attr( 'id' );
30
+
31
+ $( this ).parent( '.list-item' ).remove();
32
+ $( document.body ).trigger( 'wpdn-update', ['', post_id] );
33
+
34
+ });
35
+
36
+
37
+ // Toggle visibility
38
+ $( document.body ).on( 'click', '.wpdn-visibility', function() {
39
+
40
+ $( this ).toggleClass( 'dashicons-admin-users dashicons-groups' );
41
+
42
+ var visibility = $( this ).parent().attr( 'data-visibility' );
43
+ if ( 'public' == visibility ) {
44
+ $( this ).parent( '.wpdn-toggle-visibility' ).attr( 'data-visibility', 'private' );
45
+ $( this ).parent( '.wpdn-toggle-visibility' ).attr( 'title', 'Visibility: Just me' );
46
+ } else {
47
+ $( this ).parent( '.wpdn-toggle-visibility' ).attr( 'data-visibility', 'public' );
48
+ $( this ).parent( '.wpdn-toggle-visibility' ).attr( 'title', 'Visibility: Everyone' );
49
+ }
50
+
51
+ $( this ).trigger( 'wpdn-update', this );
52
+
53
+ });
54
+
55
+
56
+ // Toggle note type
57
+ $( document.body ).on( 'click', '.wpdn-note-type', function() {
58
+
59
+ $( this ).toggleClass( 'dashicons-list-view dashicons-welcome-write-blog' );
60
+
61
+ var note_type = $( this ).closest( '[data-note-type]' ).attr( 'data-note-type' );
62
+ if ( note_type == 'regular' ) {
63
+ $( this ).closest( '[data-note-type]' ).attr( 'data-note-type', 'list' );
64
+ } else {
65
+ $( this ).closest( '[data-note-type]' ).attr( 'data-note-type', 'regular' );
66
+ }
67
+
68
+ var data = {
69
+ action: 'wpdn_toggle_note',
70
+ post_id: $( this ).closest( ".postbox" ).attr( 'id' ).replace( 'note_', '' ),
71
+ note_type: ( note_type == 'regular' ? 'list' : 'regular' ),
72
+ nonce: wpdn.nonce
73
+ };
74
+
75
+ $.post( ajaxurl, data, function( response ) {
76
+ $( '#note_' + data.post_id + ' .inside' ).html( response ).trigger( 'note-sortable' );;
77
+ });
78
+
79
+ $( this ).trigger( 'wpdn-update', this );
80
+
81
+ });
82
+
83
+
84
+ // Update note trigger
85
+ $( document.body ).on( 'wpdn-update', function( event, t, post_id ) {
86
+
87
+ if ( t != '' ) {
88
+ post_id = $( t ).closest( ".postbox" ).attr( 'id' );
89
+ }
90
+
91
+ if ( ! post_id ) {
92
+ return;
93
+ }
94
+
95
+ $( '#' + post_id + ' .hndle .status' ).html( loading_icon );
96
+ var data = {
97
+ action: 'wpdn_update_note',
98
+ post_id: post_id.replace( 'note_', '' ),
99
+ post_content: $( '#' + post_id + ' div.wp-dashboard-note' ).html(),
100
+ post_title: $( '#' + post_id + ' > .hndle .wpdn-title' ).html(),
101
+ note_visibility: $( '#' + post_id + ' [data-visibility]' ).attr( 'data-visibility' ),
102
+ note_color_text: $( '#' + post_id + ' [data-color-text]' ).attr( 'data-color-text' ),
103
+ note_color: $( '#' + post_id + ' [data-note-color]' ).attr( 'data-note-color' ),
104
+ note_type: $( '#' + post_id + ' [data-note-type]' ).attr( 'data-note-type' ),
105
+ nonce: wpdn.nonce
106
+ };
107
+
108
+ $.post( ajaxurl, data, function( response ) {
109
+ $( '#' + post_id + ' .hndle .status' ).html( saved_icon );
110
+ $( '#' + post_id + ' .hndle .status *' ).fadeOut( 1000, function() { $( this ).html( '' ) });
111
+ });
112
+
113
+ });
114
+
115
+
116
+ // Delete note
117
+ $( document.body ).on( 'click', '.wpdn-delete-note', function() {
118
+
119
+ var post_id = $( this ).closest( ".postbox" ).attr( 'id' );
120
+
121
+ $( '#' + post_id ).slideUp( 500, function() { $( this ).remove() } );
122
+
123
+ var data = {
124
+ action: 'wpdn_delete_note',
125
+ post_id: post_id.replace( 'note_', '' ),
126
+ nonce: wpdn.nonce
127
+ };
128
+ $.post( ajaxurl, data );
129
+
130
+ });
131
+
132
+
133
+ // Add note
134
+ $( document.body ).on( 'click', '.wpdn-add-note, #wp-admin-bar-wpdn-add-note a', function( e ) {
135
+
136
+ var data = { action: 'wpdn_add_note', nonce: wpdn.nonce };
137
+
138
+ $.post( ajaxurl, data, function( response ) {
139
+ response = jQuery.parseJSON( response );
140
+ jQuery( '#postbox-container-1 #normal-sortables' ).append( response.note );
141
+ jQuery('body, html').animate({ scrollTop: $( "#note_" + response.post_id ).offset().top - 50 }, 750); // scroll down
142
+ jQuery( '#note_' + response.post_id + ' .add-list-item' ).focus();
143
+ });
144
+
145
+ // Stop scrollTop animation on user scroll
146
+ $( 'html, body' ).bind("scroll mousedown DOMMouseScroll mousewheel keyup", function( e ){
147
+ if ( e.which > 0 || e.type === "mousedown" || e.type === "mousewheel") {
148
+ $( 'html, body' ).stop().unbind('scroll mousedown DOMMouseScroll mousewheel keyup');
149
+ }
150
+ });
151
+
152
+ e.preventDefault();
153
+
154
+ });
155
+
156
+ // Change color
157
+ $( document.body ).on( 'click', '.color', function() {
158
+
159
+ // Set variables
160
+ var color = $( this ).attr( 'data-select-color' );
161
+ var color_text = $( this ).attr( 'data-select-color-text' );
162
+
163
+ // Preview
164
+ $( this ).closest( '.postbox' ).css( 'background-color', color );
165
+ $( this ).closest( '.wp-dashboard-note-wrap' ).attr( 'data-color-text', color_text );
166
+
167
+ // Set saving attributes
168
+ $( this ).closest( '[data-note-color]' ).attr( 'data-note-color', color );
169
+ $( this ).closest( '[data-color-text]' ).attr( 'data-color-text', color_text );
170
+
171
+ // Update note
172
+ $( this ).trigger( 'wpdn-update', this );
173
+
174
+ });
175
+
176
+
177
+ // Edit/update note
178
+ $( document.body ).on( 'blur', '.list-item-content, [contenteditable=true]', function() {
179
+ $( this ).trigger( 'wpdn-update', this );
180
+ });
181
+
182
+ // Save on enter (list note)
183
+ $( document.body ).on( 'keydown', '[data-note-type=list], .wpdn-title, .list-item-content', function( e ) {
184
+ if ( e.keyCode == 13 ) {
185
+ $( this ).trigger( 'wpdn-update', this );
186
+ $( this ).blur();
187
+ return false;
188
+ }
189
+ });
190
+ // Save on CMD|CTRL + enter (regular note)
191
+ $( document.body ).on( 'keydown', '[data-note-type=regular] .wp-dashboard-note', function( e ) {
192
+ if ( e.keyCode == 13 && ( e.ctrlKey || e.metaKey ) ) {
193
+ $( this ).trigger( 'wpdn-update', this );
194
+ $( this ).blur();
195
+ return false;
196
+ }
197
+ });
198
+
199
+
200
+ // Edit title
201
+ $( 'body, .postbox .hndle' ).on( 'click', '.wpdn-edit-title', function( e ) {
202
+ $( this ).prev().focus();
203
+ document.execCommand( 'selectAll', false, null );
204
+ e.stopPropagation();
205
+ });
206
+
207
+
208
+ // Note checkbox toggle
209
+ $( 'input[type=checkbox]' ).change( function() {
210
+ if( this.checked ) {
211
+ $( this ).attr( 'checked', 'checked' );
212
+ } else {
213
+ $( this ).removeAttr( 'checked' );
214
+ }
215
+ $( this ).trigger( 'wpdn-update', this );
216
+ });
217
+
218
+
219
+ // Make list sortable
220
+ $( document.body ).on( 'note-sortable', function() {
221
+ $( '.wp-dashboard-note' ).sortable({
222
+ handle: '.wpdn-note-sortable',
223
+ update: function( event, ui ) {
224
+ $( this ).trigger( 'wpdn-update', this );
225
+ },
226
+ connectWith: ['.wp-dashboard-note'],
227
+ axis: 'y'
228
+ });
229
+ })
230
+ .trigger( 'note-sortable' );
231
+
232
+
233
+ // Open link box when hovering a link
234
+ $( '.wp-dashboard-note-wrap a' ).hover( function() {
235
+ $( this ).append( '<span class="link-hover" contenteditable="false"><a href="' + $( this ).attr( 'href' ) + '" target="_blank" contenteditable="false">Open link</a></span>' );
236
+ }, function() {
237
+ $( '.link-hover' ).remove();
238
+ });
239
+
240
+ // Prevent background color and other style from copying from one note to the other
241
+ $( document.body ).on('paste', '[contenteditable]', function (e) {
242
+ e.preventDefault();
243
+ var text = (e.originalEvent || e).clipboardData.getData('text/plain');
244
+ document.execCommand('insertText', false, text);
245
+ });
246
+
247
+ });
assets/js/wp-dashboard-notes-admin.min.js ADDED
@@ -0,0 +1 @@
 
1
+ jQuery(document).ready(function($){var t='<span class="saving-icon"><img src="images/wpspin_light.gif"/> saving...</span>',e='<span class="saved-icon"><div class="dashicons dashicons-yes"></div> saved!</span>';$("body, .list-item-content").on("keydown",".add-list-item",function(t){if(13==t.keyCode&&""!=$(this).val()){var e=$(this).closest(".postbox").attr("id"),o='<div class="list-item"><div class="dashicons dashicons-menu wpdn-note-sortable"></div><input type="checkbox"><span class="list-item-content" contenteditable="true">'+$(this).val()+'</span><div class="delete-item dashicons dashicons-no-alt"></div></div>';$("#"+e+" div.wp-dashboard-note").append(o),$(this).val(""),$(this).trigger("note-sortable"),$(this).trigger("wpdn-update",this)}}),$(document.body).on("click",".delete-item",function(){var t=$(this).closest(".postbox").attr("id");$(this).parent(".list-item").remove(),$(document.body).trigger("wpdn-update",["",t])}),$(document.body).on("click",".wpdn-visibility",function(){$(this).toggleClass("dashicons-admin-users dashicons-groups");var t=$(this).parent().attr("data-visibility");"public"==t?($(this).parent(".wpdn-toggle-visibility").attr("data-visibility","private"),$(this).parent(".wpdn-toggle-visibility").attr("title","Visibility: Just me")):($(this).parent(".wpdn-toggle-visibility").attr("data-visibility","public"),$(this).parent(".wpdn-toggle-visibility").attr("title","Visibility: Everyone")),$(this).trigger("wpdn-update",this)}),$(document.body).on("click",".wpdn-note-type",function(){$(this).toggleClass("dashicons-list-view dashicons-welcome-write-blog");var t=$(this).closest("[data-note-type]").attr("data-note-type");"regular"==t?$(this).closest("[data-note-type]").attr("data-note-type","list"):$(this).closest("[data-note-type]").attr("data-note-type","regular");var e={action:"wpdn_toggle_note",post_id:$(this).closest(".postbox").attr("id").replace("note_",""),note_type:"regular"==t?"list":"regular",nonce:wpdn.nonce};$.post(ajaxurl,e,function(t){$("#note_"+e.post_id+" .inside").html(t).trigger("note-sortable")}),$(this).trigger("wpdn-update",this)}),$(document.body).on("wpdn-update",function(o,n,i){if(""!=n&&(i=$(n).closest(".postbox").attr("id")),i){$("#"+i+" .hndle .status").html(t);var a={action:"wpdn_update_note",post_id:i.replace("note_",""),post_content:$("#"+i+" div.wp-dashboard-note").html(),post_title:$("#"+i+" > .hndle .wpdn-title").html(),note_visibility:$("#"+i+" [data-visibility]").attr("data-visibility"),note_color_text:$("#"+i+" [data-color-text]").attr("data-color-text"),note_color:$("#"+i+" [data-note-color]").attr("data-note-color"),note_type:$("#"+i+" [data-note-type]").attr("data-note-type"),nonce:wpdn.nonce};$.post(ajaxurl,a,function(t){$("#"+i+" .hndle .status").html(e),$("#"+i+" .hndle .status *").fadeOut(1e3,function(){$(this).html("")})})}}),$(document.body).on("click",".wpdn-delete-note",function(){var t=$(this).closest(".postbox").attr("id");$("#"+t).slideUp(500,function(){$(this).remove()});var e={action:"wpdn_delete_note",post_id:t.replace("note_",""),nonce:wpdn.nonce};$.post(ajaxurl,e)}),$(document.body).on("click",".wpdn-add-note, #wp-admin-bar-wpdn-add-note a",function(t){var e={action:"wpdn_add_note",nonce:wpdn.nonce};$.post(ajaxurl,e,function(t){t=jQuery.parseJSON(t),jQuery("#postbox-container-1 #normal-sortables").append(t.note),jQuery("body, html").animate({scrollTop:$("#note_"+t.post_id).offset().top-50},750),jQuery("#note_"+t.post_id+" .add-list-item").focus()}),$("html, body").bind("scroll mousedown DOMMouseScroll mousewheel keyup",function(t){(t.which>0||"mousedown"===t.type||"mousewheel"===t.type)&&$("html, body").stop().unbind("scroll mousedown DOMMouseScroll mousewheel keyup")}),t.preventDefault()}),$(document.body).on("click",".color",function(){var t=$(this).attr("data-select-color"),e=$(this).attr("data-select-color-text");$(this).closest(".postbox").css("background-color",t),$(this).closest(".wp-dashboard-note-wrap").attr("data-color-text",e),$(this).closest("[data-note-color]").attr("data-note-color",t),$(this).closest("[data-color-text]").attr("data-color-text",e),$(this).trigger("wpdn-update",this)}),$(document.body).on("blur",".list-item-content, [contenteditable=true]",function(){$(this).trigger("wpdn-update",this)}),$(document.body).on("keydown","[data-note-type=list], .wpdn-title, .list-item-content",function(t){return 13==t.keyCode?($(this).trigger("wpdn-update",this),$(this).blur(),!1):void 0}),$(document.body).on("keydown","[data-note-type=regular] .wp-dashboard-note",function(t){return 13==t.keyCode&&(t.ctrlKey||t.metaKey)?($(this).trigger("wpdn-update",this),$(this).blur(),!1):void 0}),$("body, .postbox .hndle").on("click",".wpdn-edit-title",function(t){$(this).prev().focus(),document.execCommand("selectAll",!1,null),t.stopPropagation()}),$("input[type=checkbox]").change(function(){this.checked?$(this).attr("checked","checked"):$(this).removeAttr("checked"),$(this).trigger("wpdn-update",this)}),$(document.body).on("note-sortable",function(){$(".wp-dashboard-note").sortable({handle:".wpdn-note-sortable",update:function(t,e){$(this).trigger("wpdn-update",this)},connectWith:[".wp-dashboard-note"],axis:"y"})}).trigger("note-sortable"),$(".wp-dashboard-note-wrap a").hover(function(){$(this).append('<span class="link-hover" contenteditable="false"><a href="'+$(this).attr("href")+'" target="_blank" contenteditable="false">Open link</a></span>')},function(){$(".link-hover").remove()}),$(document.body).on("paste","[contenteditable]",function(t){t.preventDefault();var e=(t.originalEvent||t).clipboardData.getData("text/plain");document.execCommand("insertText",!1,e)})});
includes/class-note-post-type.php ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
3
+
4
+ /**
5
+ * Class Note_Post_Type.
6
+ *
7
+ * Register and handle post type registration.
8
+ *
9
+ * @class Note_Post_Type
10
+ * @version 1.0.0
11
+ * @package WP Dashboard Notes
12
+ * @author Jeroen Sormani
13
+ */
14
+ class Note_Post_Type {
15
+
16
+
17
+ /**
18
+ * Constructor.
19
+ *
20
+ * @since 1.0.0
21
+ */
22
+ public function __construct() {
23
+
24
+ // Register post type
25
+ add_action( 'init', array( $this, 'register_post_type' ) );
26
+
27
+ }
28
+
29
+
30
+ /**
31
+ * Register post type.
32
+ *
33
+ * Register and set settings for post type 'note'.
34
+ *
35
+ * @since 1.0.0
36
+ */
37
+ public function register_post_type() {
38
+
39
+ $labels = array(
40
+ 'name' => __( 'Notes', 'wp-dashboard-notes' ),
41
+ 'singular_name' => __( 'Note', 'wp-dashboard-notes' ),
42
+ 'add_new' => __( 'Add New', 'wp-dashboard-notes' ),
43
+ 'add_new_item' => __( 'Add New Note', 'wp-dashboard-notes' ),
44
+ 'edit_item' => __( 'Edit Note', 'wp-dashboard-notes' ),
45
+ 'new_item' => __( 'New Note', 'wp-dashboard-notes' ),
46
+ 'view_item' => __( 'View Note', 'wp-dashboard-notes' ),
47
+ 'search_items' => __( 'Search Notes', 'wp-dashboard-notes' ),
48
+ 'not_found' => __( 'No Notes', 'wp-dashboard-notes' ),
49
+ 'not_found_in_trash' => __( 'No Notes found in Trash', 'wp-dashboard-notes' ),
50
+ );
51
+
52
+ register_post_type( 'note', array(
53
+ 'label' => 'note',
54
+ 'show_ui' => false,
55
+ 'show_in_menu' => false,
56
+ 'capability_type' => 'post',
57
+ 'map_meta_cap' => true,
58
+ 'rewrite' => array( 'slug' => 'notes' ),
59
+ '_builtin' => false,
60
+ 'query_var' => true,
61
+ 'supports' => array( 'title', 'editor' ),
62
+ 'labels' => $labels,
63
+ ) );
64
+
65
+ }
66
+
67
+
68
+ }
69
+
70
+ // Backwards compatibility
71
+ $GLOBALS['wpdn_post_type'] = WP_Dashboard_Notes()->post_type;
includes/class-wpdn-admin.php ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
3
+
4
+ /**
5
+ * Class WPDN_Admin.
6
+ *
7
+ * Admin class holds all admin related functions.
8
+ *
9
+ * @class WPDN_Admin
10
+ * @version 1.0.0
11
+ * @author Jeroen Sormani
12
+ */
13
+ class WPDN_Admin {
14
+
15
+
16
+ /**
17
+ * Constructor.
18
+ *
19
+ * @since 1.0.0
20
+ */
21
+ public function __construct() {
22
+
23
+ // Admin bar 'add note' button
24
+ add_action( 'admin_bar_menu', array( $this, 'admin_bar_add_note' ) );
25
+
26
+ }
27
+
28
+
29
+ /**
30
+ * Admin bar add note.
31
+ *
32
+ * Add a item to the admin bar to add a new note.
33
+ *
34
+ * @since 1.0.7
35
+ *
36
+ * @param $wp_admin_bar Arg that will allow one to add new items.
37
+ */
38
+ public function admin_bar_add_note( &$wp_admin_bar ) {
39
+
40
+ $screen = get_current_screen();
41
+
42
+ // Only show on dashboard
43
+ if ( 'dashboard' !== $screen->id ) {
44
+ return;
45
+ }
46
+
47
+ $wp_admin_bar->add_menu( array(
48
+ 'id' => 'wpdn-add-note',
49
+ 'parent' => 'top-secondary',
50
+ 'title' => '+ ' . __( 'Add note', 'wp-dashboard-notes' ),
51
+ 'href' => 'javascript:void(0);',
52
+ ) );
53
+
54
+ }
55
+
56
+
57
+ }
includes/class-wpdn-ajax.php ADDED
@@ -0,0 +1,247 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
3
+
4
+ /**
5
+ * Class WPDN_Ajax.
6
+ *
7
+ * Class to handle all AJAX calls.
8
+ *
9
+ * @class WPDN_Ajax
10
+ * @version 1.0.0
11
+ * @package WP Dashboard Notes
12
+ * @author Jeroen Sormani
13
+ */
14
+ class WPDN_Ajax {
15
+
16
+
17
+ /**
18
+ * Constructor.
19
+ *
20
+ * Add ajax actions.
21
+ *
22
+ * @since 1.0.0
23
+ */
24
+ public function __construct() {
25
+
26
+ // Update note
27
+ add_action( 'wp_ajax_wpdn_update_note', array( $this, 'wpdn_update_note' ) );
28
+ add_action( 'wp_ajax_wpdn_toggle_note', array( $this, 'wpdn_toggle_note' ) );
29
+
30
+ // Add / Delete note
31
+ add_action( 'wp_ajax_wpdn_add_note', array( $this, 'wpdn_add_note' ) );
32
+ add_action( 'wp_ajax_wpdn_delete_note', array( $this, 'wpdn_delete_note' ) );
33
+
34
+ }
35
+
36
+
37
+ /**
38
+ * Update note.
39
+ *
40
+ * Update note + meta when the jQuery update trigger is triggered.
41
+ *
42
+ * @since 1.0.0
43
+ */
44
+ public function wpdn_update_note() {
45
+
46
+ check_ajax_referer( 'wpdn-ajax-nonce', 'nonce' );
47
+
48
+ $post_id = absint( $_POST['post_id'] );
49
+
50
+ $curr_note_meta = get_post_meta( $post_id, '_note', true );
51
+ $curr_note_visibility = $curr_note_meta['visibility'];
52
+
53
+ if ( $curr_note_visibility != 'public' && ! current_user_can( 'edit_posts' ) ) {
54
+ die();
55
+ }
56
+
57
+ if ( get_post_type( $post_id ) != 'note' ) {
58
+ die();
59
+ }
60
+
61
+ global $allowedposttags;
62
+ $allowed_html_tags = $allowedposttags;
63
+ $allowed_html_tags['input'] = array(
64
+ 'type' => 1,
65
+ );
66
+
67
+ $post = array(
68
+ 'ID' => $post_id,
69
+ 'post_title' => sanitize_text_field( $_POST['post_title'] ),
70
+ 'post_content' => wp_kses( $_POST['post_content'], $allowed_html_tags ),
71
+ );
72
+
73
+ wp_update_post( $post );
74
+
75
+ $note_meta = array(
76
+ 'color' => sanitize_text_field( $_POST['note_color'] ),
77
+ 'color_text' => sanitize_text_field( $_POST['note_color_text'] ),
78
+ 'visibility' => sanitize_text_field( $_POST['note_visibility'] ),
79
+ 'note_type' => sanitize_text_field( $_POST['note_type'] ),
80
+ );
81
+ update_post_meta( $post_id, '_note', $note_meta );
82
+
83
+ die();
84
+
85
+ }
86
+
87
+
88
+ /**
89
+ * Toggle note.
90
+ *
91
+ * Toggle note type, from 'regular note' to 'list note' or vice versa.
92
+ *
93
+ * @since 1.0.0
94
+ */
95
+ public function wpdn_toggle_note() {
96
+
97
+ check_ajax_referer( 'wpdn-ajax-nonce', 'nonce' );
98
+
99
+ $post_id = absint( $_POST['post_id'] );
100
+
101
+ $curr_note_meta = get_post_meta( $post_id, '_note', true );
102
+ $curr_note_visibility = $curr_note_meta['visibility'];
103
+
104
+ if ( $curr_note_visibility != 'public' && ! current_user_can( 'edit_posts' ) ) {
105
+ die();
106
+ }
107
+
108
+ $note = get_post( $post_id );
109
+ $content = apply_filters( 'wpdn_content', $note->post_content );
110
+ $colors = apply_filters( 'wpdn_colors', array(
111
+ 'white' => '#fff',
112
+ 'red' => '#f7846a',
113
+ 'orange' => '#ffbd22',
114
+ 'yellow' => '#eeee22',
115
+ 'green' => '#bbe535',
116
+ 'blue' => '#66ccdd',
117
+ 'black' => '#777777',
118
+ ) );
119
+ $note_meta = WP_Dashboard_Notes::wpdn_get_note_meta( $note->ID );
120
+
121
+ ?>
122
+ <style>
123
+ #note_<?php echo $note->ID; ?> { background-color: <?php echo $note_meta['color']; ?>; }
124
+ #note_<?php echo $note->ID; ?> .hndle { border: none; }
125
+ </style>
126
+ <?php
127
+ if ( $_POST['note_type'] == 'regular' ) :
128
+ require plugin_dir_path( __FILE__ ) . 'templates/note.php';
129
+ else :
130
+ require plugin_dir_path( __FILE__ ) . 'templates/note-list.php';
131
+ endif;
132
+
133
+ die();
134
+
135
+ }
136
+
137
+
138
+ /**
139
+ * Add new note.
140
+ *
141
+ * Create a new note, return two variables (post ID | note content) to jQuery through json_encode.
142
+ *
143
+ * @since 1.0.0
144
+ */
145
+ public function wpdn_add_note() {
146
+
147
+ check_ajax_referer( 'wpdn-ajax-nonce', 'nonce' );
148
+
149
+ $args = array(
150
+ 'post_status' => 'publish',
151
+ 'post_type' => 'note',
152
+ 'post_title' => __( 'New note', 'wp-dashboard-notes' ),
153
+ );
154
+ $post_id = wp_insert_post( $args );
155
+
156
+ $note = (object) array( 'ID' => $post_id, 'post_content' => '' );
157
+ $note_meta = apply_filters( 'wpdn_new_note_meta', array(
158
+ 'color' => '#ffffff',
159
+ 'color_text' => 'white',
160
+ 'visibility' => 'public',
161
+ 'note_type' => 'list',
162
+ ) );
163
+ $content = apply_filters( 'wpdn_content', $note->post_content );
164
+ $colors = apply_filters( 'wpdn_colors', array(
165
+ 'white' => '#fff',
166
+ 'red' => '#f7846a',
167
+ 'orange' => '#ffbd22',
168
+ 'yellow' => '#eeee22',
169
+ 'green' => '#bbe535',
170
+ 'blue' => '#66ccdd',
171
+ 'black' => '#777777',
172
+ ) );
173
+ $note_meta = apply_filters( 'wpdn_new_note_meta', $note_meta );
174
+ update_post_meta( $post_id, '_note', $note_meta );
175
+
176
+ $title_tag = version_compare( get_bloginfo( 'version' ), '4.4', '>=' ) ? 'h2' : 'h3';
177
+
178
+ ob_start(); ?>
179
+
180
+ <div id='note_<?php echo $post_id; ?>' class='postbox'>
181
+ <div class='handlediv' title='Click to toggle'><br></div>
182
+ <<?php echo $title_tag; ?> class="hndle">
183
+ <span>
184
+ <span contenteditable="true" class="wpdn-title"><?php _e( 'New note', 'wp-dashboard-notes' ); ?></span>
185
+ <div class="wpdn-edit-title dashicons dashicons-edit"></div>
186
+ <span class="status"></span>
187
+ </span>
188
+ </<?php echo $title_tag; ?>>
189
+
190
+ <div class='inside'>
191
+
192
+ <style>
193
+ #note_<?php echo $post_id; ?> { background-color: <?php echo $note_meta['color']; ?>; }
194
+ #note_<?php echo $post_id; ?> .hndle { border: none; }
195
+ </style>
196
+
197
+ <?php if ( 'regular' == $note_meta['note_type'] ) :
198
+ require plugin_dir_path( __FILE__ ) . 'templates/note.php';
199
+ else :
200
+ require plugin_dir_path( __FILE__ ) . 'templates/note-list.php';
201
+ endif; ?>
202
+
203
+ </div> <!-- .inside -->
204
+ </div> <!-- .postbox -->
205
+
206
+ <?php
207
+ $return['note'] = ob_get_clean();
208
+ $return['post_id'] = $post_id;
209
+
210
+ echo json_encode( $return );
211
+
212
+ die();
213
+
214
+ }
215
+
216
+
217
+ /**
218
+ * Delete note.
219
+ *
220
+ * Post is trashed and not permanently deleted.
221
+ *
222
+ * @since 1.0.0
223
+ */
224
+ public function wpdn_delete_note() {
225
+
226
+ check_ajax_referer( 'wpdn-ajax-nonce', 'nonce' );
227
+
228
+ $post_id = absint( $_POST['post_id'] );
229
+
230
+ $curr_note_meta = get_post_meta( $post_id, '_note', true );
231
+ $curr_note_visibility = $curr_note_meta['visibility'];
232
+
233
+ if ( $curr_note_visibility != 'public' && ! current_user_can( 'edit_posts' ) ) {
234
+ die();
235
+ }
236
+
237
+ if ( get_post_type( $post_id ) != 'note' ) {
238
+ die();
239
+ }
240
+
241
+ wp_trash_post( $post_id );
242
+ die();
243
+
244
+ }
245
+
246
+
247
+ }
includes/templates/note-list.php ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class='wp-dashboard-note-wrap list-note' data-note-type='list' data-color-text='<?php echo $note_meta['color_text']; ?>' data-note-color='<?php echo $note_meta['color']; ?>'>
2
+
3
+ <div class='wp-dashboard-note'>
4
+ <?php echo $content; ?>
5
+ </div>
6
+
7
+ <div class='wp-dashboard-note-options'>
8
+ <div class='dashicons dashicons-plus wpdn-add-item'></div>
9
+ <input type='text' name='list_item' class='add-list-item' data-id='<?php echo $note->ID; ?>' placeholder='<?php _e( 'List item', 'wp-dashboard-notes' ); ?>'>
10
+ <span class='status'></span>
11
+ <div class='wpdn-extra'>
12
+ <span class='wpdn-option-visibility'>
13
+ <?php
14
+ if ( 'private' == $note_meta['visibility'] && $note_meta ) :
15
+ $status['icon'] = 'dashicons-admin-users';
16
+ $status['title'] = __( 'Just me', 'wp-dashboard-notes' );
17
+ $status['visibility'] = 'private';
18
+ else :
19
+ $status['icon'] = 'dashicons-groups';
20
+ $status['title'] = __( 'Everyone', 'wp-dashboard-notes' );
21
+ $status['visibility'] = 'public';
22
+ endif; ?>
23
+
24
+ <span class='wpdn-toggle-visibility' title='<?php _e( 'Visibility:', 'wp-dashboard-notes' ); ?> <?php echo $status['title']; ?>' data-visibility='<?php echo $status['visibility']; ?>'>
25
+ <div class='wpdn-visibility visibility-publish dashicons <?php echo $status['icon']; ?>'></div>
26
+ </span>
27
+
28
+ <span class='wpdn-color-note' title='<?php _e( 'Give me a color!', 'wp-dashboard-notes' ); ?>'>
29
+ <span class='wpdn-color-palette'>
30
+
31
+ <?php foreach ( $colors as $name => $color ) : ?>
32
+ <span class='color color-<?php echo $name;?>' data-select-color-text='<?php echo $name; ?>' data-select-color='<?php echo $color; ?>' style='background-color: <?php echo $color; ?>'></span>
33
+ <?php endforeach; ?>
34
+
35
+ </span>
36
+ <div class='dashicons dashicons-art wpdn-note-color'></div>
37
+ </span>
38
+
39
+ <span title='<?php _e( 'Convert to regular note', 'wp-dashboard-notes'); ?>'>
40
+ <div class='wpdn-note-type dashicons dashicons-welcome-write-blog'></div>
41
+ </span>
42
+
43
+ <span class='wpdn-add-note' title='<?php _e( 'Add a new note', 'wp-dashboard-notes' ); ?>'>
44
+ <div class='dashicons dashicons-plus'></div>
45
+ </span>
46
+
47
+
48
+ <span style='float: right; margin-right: 10px;' class='wpdn-delete-note' title='<?php _e( 'Delete note', 'wp-dashboard-notes' ); ?>'>
49
+ <div class='dashicons dashicons-trash'></div>
50
+ </span>
51
+
52
+ </span>
53
+ </div>
54
+ </div>
55
+
56
+ </div>
includes/templates/note.php ADDED
@@ -0,0 +1,54 @@