pagoda-jekyll 0.0.7 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/Gemfile.lock +3 -3
- data/config.ru +2 -3
- data/lib/pagoda/app.rb +11 -3
- data/lib/pagoda/helper.rb +4 -0
- data/lib/pagoda/public/css/pagoda.css +120 -5
- data/lib/pagoda/public/css/pagoda.scss +101 -6
- data/lib/pagoda/public/images/apple-touch-icon.png +0 -0
- data/lib/pagoda/public/js/editor.coffee +49 -13
- data/lib/pagoda/public/js/editor.js +52 -15
- data/lib/pagoda/templates/edit.mustache +10 -6
- data/lib/pagoda/templates/editor_area.mustache +3 -3
- data/lib/pagoda/templates/home.mustache +10 -10
- data/lib/pagoda/templates/layout.mustache +9 -8
- data/lib/pagoda/templates/new_post.mustache +2 -2
- data/lib/pagoda/templates/settings.mustache +3 -3
- data/lib/pagoda/views/layout.rb +4 -0
- data/pagoda.gemspec +3 -3
- data/unicorn.rb +1 -0
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
N2I4MzRlYTlhNDcyYjNjM2NhZWM4ZTljOWJmY2VmZTllOGRlMTU0YQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
Y2UwZTQ4ZTZkZTljNDdiYWJhNGZkZmVlNjQ5YTE5NjNkZDU0OTE3MQ==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
OGNjNTJlNjZjNzQwODdlZWY1NTRkYjllNTFlNzViOTAwYzk0NGU5ODRjYjkx
|
10
|
+
ZGM3NmNiZjc1NjM0OTNiYWMzMWIzMTA5MzFmYzAzZDc1ZjY1NWQzNmQ0NmQ1
|
11
|
+
ZTIyOTk0MmE5NTAwZGE0OWExZTQwM2Q2NmU5Y2VmMWZiMTVkODQ=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NjRiNWQ1YTU1ZGVmN2Q4NjgyZjcxZjE2NjFkMjk3YzMzNTBhMTY3MGNjMGFl
|
14
|
+
MzM4NjFiMDEyM2YxOWM2MmY4ZTQ4YjA3MTI1MDA2ZTI2ZDM0ZjFlN2YwNWVl
|
15
|
+
MzhjOTc5NGYyMjYyMzI5ZDAzN2Y0OTUzMDVlOGVjMmEzMGYwNjI=
|
data/Gemfile.lock
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
pagoda-jekyll (0.0.
|
4
|
+
pagoda-jekyll (0.0.7)
|
5
5
|
grit
|
6
6
|
jekyll
|
7
7
|
json
|
8
8
|
sinatra
|
9
9
|
sinatra-mustache
|
10
|
+
sinatra-reloader
|
10
11
|
stringex
|
11
12
|
|
12
13
|
GEM
|
@@ -35,7 +36,7 @@ GEM
|
|
35
36
|
simplecov (>= 0.7)
|
36
37
|
thor
|
37
38
|
diff-lcs (1.2.2)
|
38
|
-
directory_watcher (1.
|
39
|
+
directory_watcher (1.4.1)
|
39
40
|
eventmachine (1.0.3)
|
40
41
|
fast-stemmer (1.0.2)
|
41
42
|
fssm (0.2.10)
|
@@ -132,4 +133,3 @@ DEPENDENCIES
|
|
132
133
|
rake (~> 10.0.3)
|
133
134
|
shoulda
|
134
135
|
simplecov
|
135
|
-
sinatra-reloader
|
data/config.ru
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
|
2
1
|
$:.unshift File.join(File.dirname(__FILE__), *%w[lib])
|
3
2
|
|
4
3
|
require 'rubygems'
|
@@ -7,5 +6,5 @@ require 'pagoda/app'
|
|
7
6
|
|
8
7
|
use Rack::ShowExceptions
|
9
8
|
|
10
|
-
Shwedagon::App.set :blog, '
|
11
|
-
run Shwedagon::App.new
|
9
|
+
Shwedagon::App.set :blog, ENV['blog']
|
10
|
+
map ('/admin') { run Shwedagon::App.new }
|
data/lib/pagoda/app.rb
CHANGED
@@ -13,10 +13,18 @@ require 'pagoda/helper'
|
|
13
13
|
require 'pagoda/config'
|
14
14
|
require 'pagoda/jekyll-mod'
|
15
15
|
|
16
|
+
|
17
|
+
|
16
18
|
# Sinatra based frontend
|
17
19
|
module Shwedagon
|
18
|
-
class App < Sinatra::Base
|
19
20
|
|
21
|
+
|
22
|
+
class App < Sinatra::Base
|
23
|
+
|
24
|
+
before do
|
25
|
+
@base_url = url('/', false).chomp('/')
|
26
|
+
end
|
27
|
+
|
20
28
|
# Create a new post from scratch. Return filename
|
21
29
|
# This would not commit the file.
|
22
30
|
def create_new_post(params)
|
@@ -79,7 +87,7 @@ module Shwedagon
|
|
79
87
|
repo.remove([full_path])
|
80
88
|
data = repo.commit_index "Deleted #{post_file}"
|
81
89
|
|
82
|
-
redirect
|
90
|
+
redirect @base_url
|
83
91
|
end
|
84
92
|
|
85
93
|
# Edit any post
|
@@ -142,7 +150,7 @@ module Shwedagon
|
|
142
150
|
if params[:ajax]
|
143
151
|
{:status => 'OK'}.to_json
|
144
152
|
else
|
145
|
-
redirect '/edit/' + filename
|
153
|
+
redirect @base_url + '/edit/' + filename
|
146
154
|
end
|
147
155
|
end
|
148
156
|
|
data/lib/pagoda/helper.rb
CHANGED
@@ -39,6 +39,10 @@ module Shwedagon
|
|
39
39
|
# Gives out a sorted list of post template data
|
40
40
|
# for a post or draft
|
41
41
|
def posts_template_data(post_items)
|
42
|
+
if post_items.nil?
|
43
|
+
return []
|
44
|
+
end
|
45
|
+
|
42
46
|
template_data = post_items.map do |post|
|
43
47
|
{
|
44
48
|
:title => post.data['title'],
|
@@ -156,16 +156,27 @@ code {
|
|
156
156
|
position: fixed;
|
157
157
|
bottom: 0;
|
158
158
|
left: 0;
|
159
|
-
background: #
|
159
|
+
background: #333;
|
160
160
|
color: #fff;
|
161
161
|
width: 100%;
|
162
162
|
text-align: center;
|
163
163
|
padding: 10px 0 3px;
|
164
164
|
}
|
165
|
+
@media only screen and (max-device-width: 480px) {
|
166
|
+
#publish-bar {
|
167
|
+
padding: 2px 0;
|
168
|
+
}
|
169
|
+
}
|
165
170
|
#publish-bar .contain {
|
166
171
|
margin: 0 auto;
|
167
172
|
width: 960px;
|
168
173
|
}
|
174
|
+
@media only screen and (max-device-width: 480px) {
|
175
|
+
#publish-bar .contain {
|
176
|
+
width: 300px;
|
177
|
+
padding: 3px 10px;
|
178
|
+
}
|
179
|
+
}
|
169
180
|
#publish-bar input[type=text] {
|
170
181
|
border: none;
|
171
182
|
border-bottom: 1px solid #333;
|
@@ -209,6 +220,23 @@ code {
|
|
209
220
|
border-radius: 5px;
|
210
221
|
-moz-border-radius: 5px;
|
211
222
|
-webkit-border-radius: 5px;
|
223
|
+
-webkit-appearance: none;
|
224
|
+
}
|
225
|
+
@media only screen and (max-device-width: 480px) {
|
226
|
+
#publish-bar input[type=submit],
|
227
|
+
#publish-bar a,
|
228
|
+
.button {
|
229
|
+
padding: 2px 10px;
|
230
|
+
font-size: 12px;
|
231
|
+
}
|
232
|
+
}
|
233
|
+
|
234
|
+
@media only screen and (max-device-width: 480px) {
|
235
|
+
#publish-bar input[type=submit] {
|
236
|
+
padding-top: 5px;
|
237
|
+
padding-bottom: 5px;
|
238
|
+
margin-top: -1px;
|
239
|
+
}
|
212
240
|
}
|
213
241
|
|
214
242
|
.button.secondary {
|
@@ -301,6 +329,32 @@ body.posts.new #admin {
|
|
301
329
|
margin: 0 auto;
|
302
330
|
position: relative;
|
303
331
|
}
|
332
|
+
@media only screen and (max-device-width: 480px) {
|
333
|
+
#admin {
|
334
|
+
width: 320px;
|
335
|
+
}
|
336
|
+
}
|
337
|
+
#admin .draft-options {
|
338
|
+
display: inline-block;
|
339
|
+
border: 3px solid #777;
|
340
|
+
border-radius: 10px;
|
341
|
+
padding: 4px;
|
342
|
+
}
|
343
|
+
@media only screen and (max-device-width: 480px) {
|
344
|
+
#admin .draft-options {
|
345
|
+
display: none;
|
346
|
+
}
|
347
|
+
}
|
348
|
+
#admin .draft-options a {
|
349
|
+
font-size: 12px;
|
350
|
+
padding: 2px 10px;
|
351
|
+
}
|
352
|
+
#admin .draft-options a.selected {
|
353
|
+
background-color: #00CDCD;
|
354
|
+
}
|
355
|
+
#admin .draft-options #post_draft {
|
356
|
+
display: none;
|
357
|
+
}
|
304
358
|
#admin #save-button.saved {
|
305
359
|
color: #999;
|
306
360
|
}
|
@@ -320,13 +374,19 @@ body.posts.new #admin {
|
|
320
374
|
padding: 0 0 0 20px;
|
321
375
|
border-left: 4px solid lightblue;
|
322
376
|
}
|
323
|
-
#admin #drafts #
|
377
|
+
#admin #drafts #post-title {
|
324
378
|
width: 350px;
|
325
379
|
font-size: 16px;
|
326
380
|
font-weight: 400;
|
327
381
|
margin: 0;
|
328
382
|
border-bottom: 1px solid #ddd;
|
329
383
|
}
|
384
|
+
@media only screen and (max-device-width: 480px) {
|
385
|
+
#admin #drafts #post-title {
|
386
|
+
width: 260px;
|
387
|
+
margin-left: -5px;
|
388
|
+
}
|
389
|
+
}
|
330
390
|
#admin #published {
|
331
391
|
float: right;
|
332
392
|
}
|
@@ -339,11 +399,22 @@ body.posts.new #admin {
|
|
339
399
|
#admin #published h3 a {
|
340
400
|
color: #999;
|
341
401
|
}
|
402
|
+
@media only screen and (max-device-width: 480px) {
|
403
|
+
#admin #published {
|
404
|
+
float: none;
|
405
|
+
display: block;
|
406
|
+
}
|
407
|
+
}
|
342
408
|
#admin .col h1,
|
343
409
|
#admin .col h2 {
|
344
410
|
position: relative;
|
345
411
|
text-transform: uppercase;
|
346
412
|
}
|
413
|
+
@media only screen and (max-device-width: 480px) {
|
414
|
+
#admin .col h1 {
|
415
|
+
margin-top: 0;
|
416
|
+
}
|
417
|
+
}
|
347
418
|
#admin .col h1 a,
|
348
419
|
#admin .col h2 a {
|
349
420
|
position: absolute;
|
@@ -358,6 +429,11 @@ body.posts.new #admin {
|
|
358
429
|
width: 360px;
|
359
430
|
padding: 20px;
|
360
431
|
}
|
432
|
+
@media only screen and (max-device-width: 480px) {
|
433
|
+
#admin .col {
|
434
|
+
width: 272px;
|
435
|
+
}
|
436
|
+
}
|
361
437
|
#admin .col h2 a {
|
362
438
|
background: #999;
|
363
439
|
}
|
@@ -452,12 +528,23 @@ fieldset.markdown {
|
|
452
528
|
width: 960px;
|
453
529
|
float: left;
|
454
530
|
}
|
531
|
+
@media only screen and (max-device-width: 480px) {
|
532
|
+
#split #post-editor {
|
533
|
+
width: 310px;
|
534
|
+
padding: 5px;
|
535
|
+
}
|
536
|
+
}
|
455
537
|
#split #fullscreen {
|
456
538
|
float: right;
|
457
539
|
position: relative;
|
458
540
|
top: 35px;
|
459
541
|
border: 0 none;
|
460
542
|
}
|
543
|
+
@media only screen and (max-device-width: 480px) {
|
544
|
+
#split #fullscreen {
|
545
|
+
display: none;
|
546
|
+
}
|
547
|
+
}
|
461
548
|
|
462
549
|
.fullScreen #fullscreen {
|
463
550
|
visibility: hidden;
|
@@ -477,15 +564,29 @@ fieldset.markdown {
|
|
477
564
|
#text-title {
|
478
565
|
margin: 23px 0 0 0;
|
479
566
|
}
|
567
|
+
@media only screen and (max-device-width: 480px) {
|
568
|
+
#text-title {
|
569
|
+
margin: 0;
|
570
|
+
}
|
571
|
+
}
|
480
572
|
|
481
|
-
#
|
573
|
+
#text-content {
|
574
|
+
margin-top: -25px;
|
575
|
+
}
|
576
|
+
@media only screen and (max-device-width: 480px) {
|
577
|
+
#text-content {
|
578
|
+
margin-top: -45px;
|
579
|
+
}
|
580
|
+
}
|
581
|
+
|
582
|
+
#post-title {
|
482
583
|
width: 100%;
|
483
584
|
border: none;
|
484
585
|
background: none;
|
485
586
|
line-height: 45px;
|
486
587
|
}
|
487
588
|
|
488
|
-
#
|
589
|
+
#post-content {
|
489
590
|
border: none;
|
490
591
|
width: 100%;
|
491
592
|
position: relative;
|
@@ -494,13 +595,21 @@ fieldset.markdown {
|
|
494
595
|
font-size: 20px;
|
495
596
|
line-height: 30px;
|
496
597
|
}
|
598
|
+
#post-content.scrolled {
|
599
|
+
border-top: 1px solid rgba(30, 30, 30, 0.1);
|
600
|
+
}
|
497
601
|
|
498
|
-
textarea#
|
602
|
+
textarea#post-title {
|
499
603
|
resize: none;
|
500
604
|
font-family: 'Asap', sans-serif;
|
501
605
|
font-size: 40px;
|
502
606
|
font-weight: normal;
|
503
607
|
}
|
608
|
+
@media only screen and (max-device-width: 480px) {
|
609
|
+
textarea#post-title {
|
610
|
+
font-size: 25px;
|
611
|
+
}
|
612
|
+
}
|
504
613
|
|
505
614
|
form .permalink {
|
506
615
|
position: absolute;
|
@@ -554,3 +663,9 @@ body {
|
|
554
663
|
#publish-bar input[type=submit].post-saving {
|
555
664
|
background: #40A4FB;
|
556
665
|
}
|
666
|
+
|
667
|
+
@media only screen and (max-device-width: 480px) {
|
668
|
+
#publish-bar .delete-bar, #publish-bar #draft_label, #publish-bar #post_draft {
|
669
|
+
display: none;
|
670
|
+
}
|
671
|
+
}
|
@@ -1,6 +1,6 @@
|
|
1
|
-
|
2
1
|
/* TODO: pull out coloring into variables */
|
3
2
|
$linkhover: red;
|
3
|
+
$iphone: "only screen and (max-device-width : 480px)";
|
4
4
|
|
5
5
|
div:before, div:after {content:''; display:table;}
|
6
6
|
|
@@ -151,15 +151,24 @@ code {
|
|
151
151
|
position: fixed;
|
152
152
|
bottom: 0;
|
153
153
|
left: 0;
|
154
|
-
background: #
|
154
|
+
background: #333;
|
155
155
|
color: #fff;
|
156
156
|
width: 100%;
|
157
157
|
text-align: center;
|
158
158
|
padding: 10px 0 3px;
|
159
|
+
|
160
|
+
@media #{$iphone} {
|
161
|
+
padding: 2px 0;
|
162
|
+
}
|
159
163
|
|
160
164
|
.contain {
|
161
165
|
margin: 0 auto;
|
162
166
|
width: 960px;
|
167
|
+
|
168
|
+
@media #{$iphone} {
|
169
|
+
width: 300px;
|
170
|
+
padding: 3px 10px;
|
171
|
+
}
|
163
172
|
}
|
164
173
|
|
165
174
|
input[type=text] {
|
@@ -210,6 +219,20 @@ code {
|
|
210
219
|
border-radius: 5px;
|
211
220
|
-moz-border-radius: 5px;
|
212
221
|
-webkit-border-radius: 5px;
|
222
|
+
-webkit-appearance: none;
|
223
|
+
|
224
|
+
@media #{$iphone} {
|
225
|
+
padding: 2px 10px;
|
226
|
+
font-size: 12px;
|
227
|
+
}
|
228
|
+
}
|
229
|
+
|
230
|
+
#publish-bar input[type=submit] {
|
231
|
+
@media #{$iphone} {
|
232
|
+
padding-top: 5px;
|
233
|
+
padding-bottom: 5px;
|
234
|
+
margin-top: -1px;
|
235
|
+
}
|
213
236
|
}
|
214
237
|
|
215
238
|
.button.secondary {
|
@@ -297,6 +320,31 @@ body.posts.new #admin {
|
|
297
320
|
width: 808px;
|
298
321
|
margin: 0 auto;
|
299
322
|
position: relative;
|
323
|
+
|
324
|
+
@media #{$iphone} {
|
325
|
+
width: 320px;
|
326
|
+
}
|
327
|
+
|
328
|
+
.draft-options {
|
329
|
+
display: inline-block;
|
330
|
+
border: 3px solid #777;
|
331
|
+
border-radius: 10px;
|
332
|
+
padding: 4px;
|
333
|
+
@media #{$iphone} { display: none; }
|
334
|
+
|
335
|
+
a {
|
336
|
+
font-size: 12px;
|
337
|
+
padding: 2px 10px;
|
338
|
+
}
|
339
|
+
|
340
|
+
a.selected {
|
341
|
+
background-color: #00CDCD;
|
342
|
+
}
|
343
|
+
|
344
|
+
#post_draft {
|
345
|
+
display: none;
|
346
|
+
}
|
347
|
+
}
|
300
348
|
|
301
349
|
#save-button.saved {
|
302
350
|
color: #999;
|
@@ -320,12 +368,17 @@ body.posts.new #admin {
|
|
320
368
|
border-left: 4px solid lightblue;
|
321
369
|
}
|
322
370
|
|
323
|
-
#
|
371
|
+
#post-title {
|
324
372
|
width: 350px;
|
325
373
|
font-size: 16px;
|
326
374
|
font-weight: 400;
|
327
375
|
margin: 0;
|
328
376
|
border-bottom: 1px solid #ddd;
|
377
|
+
|
378
|
+
@media #{$iphone} {
|
379
|
+
width: 260px;
|
380
|
+
margin-left: -5px;
|
381
|
+
}
|
329
382
|
}
|
330
383
|
}
|
331
384
|
|
@@ -335,6 +388,11 @@ body.posts.new #admin {
|
|
335
388
|
h2 {color: #999;}
|
336
389
|
h2 a {margin-top: -2px;}
|
337
390
|
h3 a {color: #999;}
|
391
|
+
|
392
|
+
@media #{$iphone} {
|
393
|
+
float: none;
|
394
|
+
display: block;
|
395
|
+
}
|
338
396
|
}
|
339
397
|
|
340
398
|
.col h1,
|
@@ -343,6 +401,12 @@ body.posts.new #admin {
|
|
343
401
|
text-transform: uppercase;
|
344
402
|
}
|
345
403
|
|
404
|
+
.col h1 {
|
405
|
+
@media #{$iphone} {
|
406
|
+
margin-top: 0;
|
407
|
+
}
|
408
|
+
}
|
409
|
+
|
346
410
|
.col h1 a,
|
347
411
|
.col h2 a {
|
348
412
|
position: absolute;
|
@@ -357,6 +421,10 @@ body.posts.new #admin {
|
|
357
421
|
.col {
|
358
422
|
width: 360px;
|
359
423
|
padding: 20px;
|
424
|
+
|
425
|
+
@media #{$iphone} {
|
426
|
+
width: 272px;
|
427
|
+
}
|
360
428
|
|
361
429
|
h2 a {
|
362
430
|
background: #999;
|
@@ -468,6 +536,11 @@ fieldset.markdown {
|
|
468
536
|
#post-editor {
|
469
537
|
width: 960px;
|
470
538
|
float: left;
|
539
|
+
|
540
|
+
@media #{$iphone} {
|
541
|
+
width: 310px;
|
542
|
+
padding: 5px;
|
543
|
+
}
|
471
544
|
}
|
472
545
|
|
473
546
|
#fullscreen {
|
@@ -475,6 +548,8 @@ fieldset.markdown {
|
|
475
548
|
position: relative;
|
476
549
|
top: 35px;
|
477
550
|
border: 0 none;
|
551
|
+
|
552
|
+
@media #{$iphone} { display: none;}
|
478
553
|
}
|
479
554
|
|
480
555
|
}
|
@@ -499,16 +574,23 @@ fieldset.markdown {
|
|
499
574
|
|
500
575
|
#text-title {
|
501
576
|
margin: 23px 0 0 0;
|
577
|
+
|
578
|
+
@media #{$iphone} { margin: 0;}
|
502
579
|
}
|
503
580
|
|
504
|
-
#
|
581
|
+
#text-content {
|
582
|
+
margin-top: -25px;
|
583
|
+
@media #{$iphone} { margin-top: -45px;}
|
584
|
+
}
|
585
|
+
|
586
|
+
#post-title {
|
505
587
|
width: 100%;
|
506
588
|
border: none;
|
507
589
|
background: none;
|
508
590
|
line-height: 45px;
|
509
591
|
}
|
510
592
|
|
511
|
-
#
|
593
|
+
#post-content {
|
512
594
|
border: none;
|
513
595
|
width: 100%;
|
514
596
|
position: relative;
|
@@ -516,13 +598,20 @@ fieldset.markdown {
|
|
516
598
|
resize: none;
|
517
599
|
font-size: 20px;
|
518
600
|
line-height: 30px;
|
601
|
+
|
602
|
+
&.scrolled {
|
603
|
+
border-top: 1px solid rgba(30,30,30,0.1);
|
604
|
+
}
|
519
605
|
}
|
520
606
|
|
521
|
-
|
607
|
+
|
608
|
+
textarea#post-title {
|
522
609
|
resize: none;
|
523
610
|
font-family: 'Asap', sans-serif;
|
524
611
|
font-size: 40px;
|
525
612
|
font-weight: normal;
|
613
|
+
|
614
|
+
@media #{$iphone} { font-size: 25px;}
|
526
615
|
}
|
527
616
|
|
528
617
|
form .permalink {
|
@@ -580,4 +669,10 @@ body {
|
|
580
669
|
|
581
670
|
#publish-bar input[type=submit].post-saving {
|
582
671
|
background: #40A4FB;
|
672
|
+
}
|
673
|
+
|
674
|
+
#publish-bar {
|
675
|
+
.delete-bar, #draft_label, #post_draft {
|
676
|
+
@media #{$iphone} { display: none; }
|
677
|
+
}
|
583
678
|
}
|
Binary file
|
@@ -5,6 +5,9 @@ $(document).ready ->
|
|
5
5
|
key.filter = (e)->
|
6
6
|
true
|
7
7
|
|
8
|
+
is_iphone =->
|
9
|
+
/iPhone/i.test(navigator.userAgent)
|
10
|
+
|
8
11
|
is_edit_page = ->
|
9
12
|
window.location.pathname.indexOf('edit') != -1
|
10
13
|
|
@@ -23,6 +26,21 @@ $(document).ready ->
|
|
23
26
|
$('#save-button').removeClass('post-saving')
|
24
27
|
setTimeout((->set_save_button('saved')),2000)
|
25
28
|
|
29
|
+
draft_post = ->
|
30
|
+
$('#post_draft').prop('checked', true)
|
31
|
+
$('#draft-action').addClass('selected')
|
32
|
+
$('#publish-action').removeClass('selected')
|
33
|
+
save_post()
|
34
|
+
false
|
35
|
+
|
36
|
+
publish_post = ->
|
37
|
+
$('#post_draft').prop('checked', false)
|
38
|
+
$('#draft-action').removeClass('selected')
|
39
|
+
$('#publish-action').addClass('selected')
|
40
|
+
save_post()
|
41
|
+
false
|
42
|
+
|
43
|
+
|
26
44
|
# Save post
|
27
45
|
save_post = ->
|
28
46
|
set_save_button('saving')
|
@@ -30,14 +48,14 @@ $(document).ready ->
|
|
30
48
|
|
31
49
|
post_obj =
|
32
50
|
post :
|
33
|
-
title : $('#
|
34
|
-
content : $('#
|
51
|
+
title : $('#post-title').val()
|
52
|
+
content : $('#post-content').val()
|
35
53
|
name : $('#post_name').val()
|
36
54
|
draft : draft
|
37
55
|
|
38
56
|
ajax : true
|
39
57
|
|
40
|
-
$.post('/save-post', post_obj, (data)->
|
58
|
+
$.post(baseUrl + '/save-post', post_obj, (data)->
|
41
59
|
response = $.parseJSON(data)
|
42
60
|
if response['status'] == 'OK'
|
43
61
|
setTimeout((->set_save_button('saved')),1000)
|
@@ -48,7 +66,7 @@ $(document).ready ->
|
|
48
66
|
|
49
67
|
# Dom invoked events
|
50
68
|
handle_events =->
|
51
|
-
$('#post-editor #
|
69
|
+
$('#post-editor #post-title').autosize({append: "\n"})
|
52
70
|
|
53
71
|
$("#fullscreen").click (e)->
|
54
72
|
screenfull.request();
|
@@ -56,27 +74,37 @@ $(document).ready ->
|
|
56
74
|
screenfull.onchange = ->
|
57
75
|
if screenfull.isFullscreen
|
58
76
|
$('#fullscreen').hide()
|
59
|
-
$('#
|
77
|
+
$('#post-content').focus()
|
60
78
|
|
61
79
|
setTimeout( ->
|
62
|
-
rows = Math.ceil($(window).height()/
|
63
|
-
$('#
|
80
|
+
rows = Math.ceil($(window).height()/40)
|
81
|
+
$('#post-content').attr('rows', rows)
|
64
82
|
, 1000)
|
65
83
|
|
66
84
|
else
|
67
85
|
$('#fullscreen').show();
|
68
|
-
$('#
|
86
|
+
$('#post-content').attr('rows', 18);
|
69
87
|
|
70
88
|
$('.delete-button').click ->
|
71
89
|
if not confirm("Confirm delete?")
|
72
90
|
return false
|
73
91
|
|
92
|
+
$('#post-content').bind 'scroll', (e)->
|
93
|
+
if $(this).scrollTop() > 10
|
94
|
+
$(this).addClass('scrolled')
|
95
|
+
else
|
96
|
+
$(this).removeClass('scrolled')
|
97
|
+
|
74
98
|
if is_edit_page()
|
75
99
|
$('#save-button').click( ->
|
76
100
|
save_post()
|
77
101
|
false
|
78
102
|
)
|
79
103
|
|
104
|
+
$('#draft-action').click(draft_post)
|
105
|
+
$('#publish-action').click(publish_post)
|
106
|
+
|
107
|
+
|
80
108
|
keyboard_events =->
|
81
109
|
key('⌘+enter, ctrl+enter', (e)->
|
82
110
|
screenfull.toggle()
|
@@ -106,17 +134,25 @@ $(document).ready ->
|
|
106
134
|
|
107
135
|
|
108
136
|
focus_to_type =->
|
109
|
-
if not is_edit_page() and ($('#
|
110
|
-
$('#
|
137
|
+
if not is_edit_page() and ($('#post-title').val() == '')
|
138
|
+
$('#post-title').focus()
|
111
139
|
else
|
112
|
-
$('#
|
140
|
+
$('#post-content').focus()
|
113
141
|
|
114
142
|
|
143
|
+
fullscreen_mobile =->
|
144
|
+
if(is_iphone())
|
145
|
+
setTimeout (->
|
146
|
+
# Hide the address bar!
|
147
|
+
window.scrollTo 0, 1
|
148
|
+
), 0
|
149
|
+
$('.links').remove()
|
150
|
+
|
115
151
|
init =->
|
116
152
|
handle_events()
|
117
153
|
keyboard_events()
|
118
|
-
show_shortcuts()
|
154
|
+
show_shortcuts() if not is_iphone()
|
119
155
|
focus_to_type()
|
120
|
-
|
156
|
+
fullscreen_mobile()
|
121
157
|
|
122
158
|
init()
|
@@ -2,10 +2,13 @@
|
|
2
2
|
(function() {
|
3
3
|
|
4
4
|
$(document).ready(function() {
|
5
|
-
var focus_to_type, handle_events, init, is_edit_page, keyboard_events, save_post, set_save_button, show_shortcuts;
|
5
|
+
var draft_post, focus_to_type, fullscreen_mobile, handle_events, init, is_edit_page, is_iphone, keyboard_events, publish_post, save_post, set_save_button, show_shortcuts;
|
6
6
|
key.filter = function(e) {
|
7
7
|
return true;
|
8
8
|
};
|
9
|
+
is_iphone = function() {
|
10
|
+
return /iPhone/i.test(navigator.userAgent);
|
11
|
+
};
|
9
12
|
is_edit_page = function() {
|
10
13
|
return window.location.pathname.indexOf('edit') !== -1;
|
11
14
|
};
|
@@ -27,20 +30,34 @@
|
|
27
30
|
}), 2000);
|
28
31
|
}
|
29
32
|
};
|
33
|
+
draft_post = function() {
|
34
|
+
$('#post_draft').prop('checked', true);
|
35
|
+
$('#draft-action').addClass('selected');
|
36
|
+
$('#publish-action').removeClass('selected');
|
37
|
+
save_post();
|
38
|
+
return false;
|
39
|
+
};
|
40
|
+
publish_post = function() {
|
41
|
+
$('#post_draft').prop('checked', false);
|
42
|
+
$('#draft-action').removeClass('selected');
|
43
|
+
$('#publish-action').addClass('selected');
|
44
|
+
save_post();
|
45
|
+
return false;
|
46
|
+
};
|
30
47
|
save_post = function() {
|
31
48
|
var draft, post_obj;
|
32
49
|
set_save_button('saving');
|
33
50
|
draft = $('#post_draft').is(':checked') ? 'on' : 'off';
|
34
51
|
post_obj = {
|
35
52
|
post: {
|
36
|
-
title: $('#
|
37
|
-
content: $('#
|
53
|
+
title: $('#post-title').val(),
|
54
|
+
content: $('#post-content').val(),
|
38
55
|
name: $('#post_name').val(),
|
39
56
|
draft: draft
|
40
57
|
},
|
41
58
|
ajax: true
|
42
59
|
};
|
43
|
-
return $.post('/save-post', post_obj, function(data) {
|
60
|
+
return $.post(baseUrl + '/save-post', post_obj, function(data) {
|
44
61
|
var response;
|
45
62
|
response = $.parseJSON(data);
|
46
63
|
if (response['status'] === 'OK') {
|
@@ -55,7 +72,7 @@
|
|
55
72
|
}));
|
56
73
|
};
|
57
74
|
handle_events = function() {
|
58
|
-
$('#post-editor #
|
75
|
+
$('#post-editor #post-title').autosize({
|
59
76
|
append: "\n"
|
60
77
|
});
|
61
78
|
$("#fullscreen").click(function(e) {
|
@@ -64,15 +81,15 @@
|
|
64
81
|
screenfull.onchange = function() {
|
65
82
|
if (screenfull.isFullscreen) {
|
66
83
|
$('#fullscreen').hide();
|
67
|
-
$('#
|
84
|
+
$('#post-content').focus();
|
68
85
|
return setTimeout(function() {
|
69
86
|
var rows;
|
70
|
-
rows = Math.ceil($(window).height() /
|
71
|
-
return $('#
|
87
|
+
rows = Math.ceil($(window).height() / 40);
|
88
|
+
return $('#post-content').attr('rows', rows);
|
72
89
|
}, 1000);
|
73
90
|
} else {
|
74
91
|
$('#fullscreen').show();
|
75
|
-
return $('#
|
92
|
+
return $('#post-content').attr('rows', 18);
|
76
93
|
}
|
77
94
|
};
|
78
95
|
$('.delete-button').click(function() {
|
@@ -80,11 +97,20 @@
|
|
80
97
|
return false;
|
81
98
|
}
|
82
99
|
});
|
100
|
+
$('#post-content').bind('scroll', function(e) {
|
101
|
+
if ($(this).scrollTop() > 10) {
|
102
|
+
return $(this).addClass('scrolled');
|
103
|
+
} else {
|
104
|
+
return $(this).removeClass('scrolled');
|
105
|
+
}
|
106
|
+
});
|
83
107
|
if (is_edit_page()) {
|
84
|
-
|
108
|
+
$('#save-button').click(function() {
|
85
109
|
save_post();
|
86
110
|
return false;
|
87
111
|
});
|
112
|
+
$('#draft-action').click(draft_post);
|
113
|
+
return $('#publish-action').click(publish_post);
|
88
114
|
}
|
89
115
|
};
|
90
116
|
keyboard_events = function() {
|
@@ -117,17 +143,28 @@
|
|
117
143
|
});
|
118
144
|
};
|
119
145
|
focus_to_type = function() {
|
120
|
-
if (!is_edit_page() && ($('#
|
121
|
-
return $('#
|
146
|
+
if (!is_edit_page() && ($('#post-title').val() === '')) {
|
147
|
+
return $('#post-title').focus();
|
122
148
|
} else {
|
123
|
-
return $('#
|
149
|
+
return $('#post-content').focus();
|
150
|
+
}
|
151
|
+
};
|
152
|
+
fullscreen_mobile = function() {
|
153
|
+
if (is_iphone()) {
|
154
|
+
setTimeout((function() {
|
155
|
+
return window.scrollTo(0, 1);
|
156
|
+
}), 0);
|
124
157
|
}
|
158
|
+
return $('.links').remove();
|
125
159
|
};
|
126
160
|
init = function() {
|
127
161
|
handle_events();
|
128
162
|
keyboard_events();
|
129
|
-
|
130
|
-
|
163
|
+
if (!is_iphone()) {
|
164
|
+
show_shortcuts();
|
165
|
+
}
|
166
|
+
focus_to_type();
|
167
|
+
return fullscreen_mobile();
|
131
168
|
};
|
132
169
|
return init();
|
133
170
|
});
|
@@ -3,19 +3,23 @@
|
|
3
3
|
<div id="admin">
|
4
4
|
<div id="save"></div>
|
5
5
|
|
6
|
-
<form accept-charset="UTF-8" action="/save-post" class="edit_post" method="post">
|
6
|
+
<form accept-charset="UTF-8" action="{{base_url}}/save-post" class="edit_post" method="post">
|
7
7
|
{{>editor_area}}
|
8
8
|
<div id="publish-bar-hover">
|
9
9
|
<div id="publish-bar">
|
10
10
|
<div class="contain">
|
11
11
|
<div class="left">
|
12
|
-
<a href="/">«
|
13
|
-
<a href="/delete/{{ name }}" class="delete-bar delete-button" >
|
12
|
+
<a href="{{base_url}}/">« ADMIN</a>
|
13
|
+
<a href="{{base_url}}/delete/{{ name }}" class="delete-bar delete-button" >DELETE</a>
|
14
14
|
</div>
|
15
15
|
<div class="right">
|
16
|
-
|
17
|
-
<
|
18
|
-
|
16
|
+
|
17
|
+
<div class="draft-options">
|
18
|
+
<a id="draft-action" class="button {{#draft}}selected{{/draft}}" href="#">DRAFT</a>
|
19
|
+
<a id="publish-action" class="button {{^draft}}selected{{/draft}}" href="#">DONE</a>
|
20
|
+
<input id="post_draft" name="post[draft]" type="checkbox" {{#draft}}checked{{/draft}} />
|
21
|
+
</div>
|
22
|
+
<input id="save-button" name="commit" type="submit" value="SAVE" />
|
19
23
|
</div>
|
20
24
|
</div>
|
21
25
|
</div>
|
@@ -1,13 +1,13 @@
|
|
1
1
|
<div id="split">
|
2
2
|
<div id="post-editor" class="split-section">
|
3
|
-
<a href="#fullscreen" id="fullscreen"><img src="/images/fullscreen.png"></a>
|
3
|
+
<a href="#fullscreen" id="fullscreen"><img src="{{base_url}}/images/fullscreen.png"></a>
|
4
4
|
<div id="text-title">
|
5
|
-
<textarea cols="40" id="
|
5
|
+
<textarea cols="40" id="post-title" name="post[title]" placeholder="Title here" rows="1">{{#ptitle}}{{ ptitle }}{{/ptitle}}{{^ptitle}}{{ title }}{{/ptitle}}</textarea>
|
6
6
|
<input type="hidden" id="post_name" name="post[name]" value="{{ name }}">
|
7
7
|
</div>
|
8
8
|
|
9
9
|
<div id="text-content">
|
10
|
-
<textarea cols="40" id="
|
10
|
+
<textarea cols="40" id="post-content" name="post[content]" placeholder="Write post here" rows="18">{{content}}</textarea>
|
11
11
|
</div>
|
12
12
|
</div>
|
13
13
|
</div>
|
@@ -3,9 +3,9 @@
|
|
3
3
|
<div id="save"></div>
|
4
4
|
|
5
5
|
<div id="drafts" class="col">
|
6
|
-
<h1>Drafts <a href="/new" class="button">New Draft</a></h1>
|
7
|
-
<form accept-charset="UTF-8" action="/new" class="new_post" id="new_post" method="get">
|
8
|
-
<input id = "
|
6
|
+
<h1>Drafts <a href="{{base_url}}/new" class="button">New Draft</a></h1>
|
7
|
+
<form accept-charset="UTF-8" action="{{base_url}}/new" class="new_post" id="new_post" method="get">
|
8
|
+
<input id = "post-title"
|
9
9
|
name = "ptitle"
|
10
10
|
autocomplete = "off"
|
11
11
|
placeholder = "Start typing your title here..." size="30" type="text" />
|
@@ -15,10 +15,10 @@
|
|
15
15
|
{{#drafts}}
|
16
16
|
<li id="post-{{filename}}">
|
17
17
|
<h3>
|
18
|
-
<a href="/edit/{{filename}}">{{title}}</a>
|
18
|
+
<a href="{{base_url}}/edit/{{filename}}">{{title}}</a>
|
19
19
|
<span class="links">
|
20
|
-
<a href="/
|
21
|
-
<a href="/delete/{{filename}}" class="delete-button admin-delete" rel="nofollow">x</a>
|
20
|
+
<a href="{{base_url}}/404" class="admin-view">view</a>
|
21
|
+
<a href="{{base_url}}/delete/{{filename}}" class="delete-button admin-delete" rel="nofollow">x</a>
|
22
22
|
</span>
|
23
23
|
</h3>
|
24
24
|
</li>
|
@@ -28,15 +28,15 @@
|
|
28
28
|
|
29
29
|
<div id="published" class="col">
|
30
30
|
<h2>Published
|
31
|
-
<a href="/settings" class="button">Settings</a></h2>
|
31
|
+
<a href="{{base_url}}/settings" class="button">Settings</a></h2>
|
32
32
|
<ul>
|
33
33
|
{{#published}}
|
34
34
|
<li id="post-{{filename}}">
|
35
35
|
<h3>
|
36
|
-
<a href="/edit/{{filename}}">{{title}}</a>
|
36
|
+
<a href="{{base_url}}/edit/{{filename}}">{{title}}</a>
|
37
37
|
<span class="links">
|
38
|
-
<a href="/
|
39
|
-
<a href="/delete/{{filename}}" class="delete-button admin-delete" rel="nofollow">x</a>
|
38
|
+
<a href="{{base_url}}/404" class="admin-view">view</a>
|
39
|
+
<a href="{{base_url}}/delete/{{filename}}" class="delete-button admin-delete" rel="nofollow">x</a>
|
40
40
|
</span>
|
41
41
|
</h3>
|
42
42
|
</li>
|
@@ -2,16 +2,14 @@
|
|
2
2
|
<html>
|
3
3
|
<head>
|
4
4
|
<meta http-equiv="Content-type" content="text/html;charset=utf-8">
|
5
|
-
|
6
|
-
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6
|
+
|
7
|
+
<link rel="stylesheet" type="text/css" href="{{base_url}}/css/pagoda.css" media="screen, projection">
|
8
|
+
<link rel="stylesheet" type="text/css" href="{{base_url}}/css/tiptip.css" media="screen, projection">
|
7
9
|
<link href='http://fonts.googleapis.com/css?family=Lato:300,900|Asap' rel='stylesheet' type='text/css' />
|
8
|
-
{{
|
9
|
-
|
10
|
-
{{/css}}
|
10
|
+
<link rel="apple-touch-icon" href="{{base_url}}/images/apple-touch-icon.png" />
|
11
|
+
|
11
12
|
|
12
|
-
<!--[if IE 7]>
|
13
|
-
<link rel="stylesheet" type="text/css" href="{{base_url}}/css/ie7.css" media="all">
|
14
|
-
<![endif]-->
|
15
13
|
|
16
14
|
<script type="text/javascript" src="{{base_url}}/js/jquery.js"></script>
|
17
15
|
<script type="text/javascript" src="{{base_url}}/js/screenfull.js"></script>
|
@@ -19,6 +17,9 @@
|
|
19
17
|
<script type="text/javascript" src="{{base_url}}/js/keymaster.min.js"></script>
|
20
18
|
<script type="text/javascript" src="{{base_url}}/js/jquery.tiptip.min.js"></script>
|
21
19
|
<script type="text/javascript" src="{{base_url}}/js/editor.js"></script>
|
20
|
+
<script type="text/javascript">
|
21
|
+
var baseUrl = "{{base_url}}";
|
22
|
+
</script>
|
22
23
|
<title>{{title}}</title>
|
23
24
|
</head>
|
24
25
|
|
@@ -2,7 +2,7 @@
|
|
2
2
|
<div id="admin">
|
3
3
|
<div id="save"></div>
|
4
4
|
|
5
|
-
<form accept-charset="UTF-8" action="/save-post" class="edit_post" method="post">
|
5
|
+
<form accept-charset="UTF-8" action="{{base_url}}/save-post" class="edit_post" method="post">
|
6
6
|
<input type="hidden" name="method" value="put" />
|
7
7
|
|
8
8
|
{{>editor_area}}
|
@@ -11,7 +11,7 @@
|
|
11
11
|
<div id="publish-bar">
|
12
12
|
<div class="contain">
|
13
13
|
<div class="left">
|
14
|
-
<a href="/">« Admin</a>
|
14
|
+
<a href="{{base_url}}/">« Admin</a>
|
15
15
|
</div>
|
16
16
|
<div class="right">
|
17
17
|
<input id="save-button" name="commit" type="submit" value="Save" />
|
@@ -1,12 +1,12 @@
|
|
1
1
|
<body class="settings">
|
2
2
|
|
3
3
|
<div class="settings-bd">
|
4
|
-
<a class="admin-btn button" href="/">« Admin</a>
|
4
|
+
<a class="admin-btn button" href="{{base_url}}/">« Admin</a>
|
5
5
|
<h1>SETTINGS</h1>
|
6
6
|
|
7
7
|
<ul>
|
8
|
-
<li><h2 class="left-col"> Push to origin </h2><span class="right-col"><a class="button" href="/settings/push">Push</a></span></li>
|
9
|
-
<li><h2 class="left-col"> Pull from origin/master </h2><span class="right-col"><a class="button" href="/settings/pull">Pull</a></span></li>
|
8
|
+
<li><h2 class="left-col"> Push to origin </h2><span class="right-col"><a class="button" href="{{base_url}}/settings/push">Push</a></span></li>
|
9
|
+
<li><h2 class="left-col"> Pull from origin/master </h2><span class="right-col"><a class="button" href="{{base_url}}/settings/pull">Pull</a></span></li>
|
10
10
|
|
11
11
|
</ul>
|
12
12
|
</div>
|
data/lib/pagoda/views/layout.rb
CHANGED
data/pagoda.gemspec
CHANGED
@@ -5,8 +5,8 @@ Gem::Specification.new do |s|
|
|
5
5
|
s.required_ruby_version = ">= 1.8.7"
|
6
6
|
|
7
7
|
s.name = 'pagoda-jekyll'
|
8
|
-
s.version = '0.0.
|
9
|
-
s.date = '2013-05-
|
8
|
+
s.version = '0.0.8'
|
9
|
+
s.date = '2013-05-13'
|
10
10
|
s.rubyforge_project = 'pagoda-jekyll'
|
11
11
|
|
12
12
|
s.summary = "A simple admin for Jekyll"
|
@@ -29,8 +29,8 @@ Gem::Specification.new do |s|
|
|
29
29
|
s.add_dependency('stringex')
|
30
30
|
s.add_dependency('sinatra-mustache')
|
31
31
|
s.add_dependency('sinatra')
|
32
|
+
s.add_dependency('sinatra-reloader')
|
32
33
|
|
33
|
-
s.add_development_dependency('sinatra-reloader')
|
34
34
|
s.add_development_dependency('compass')
|
35
35
|
s.add_development_dependency('fssm')
|
36
36
|
s.add_development_dependency('rack-test')
|
data/unicorn.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pagoda-jekyll
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alagu
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-05-
|
11
|
+
date: 2013-05-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jekyll
|
@@ -101,7 +101,7 @@ dependencies:
|
|
101
101
|
- - ! '>='
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '0'
|
104
|
-
type: :
|
104
|
+
type: :runtime
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
@@ -195,6 +195,7 @@ files:
|
|
195
195
|
- lib/pagoda/public/css/pagoda.css
|
196
196
|
- lib/pagoda/public/css/pagoda.scss
|
197
197
|
- lib/pagoda/public/css/tiptip.css
|
198
|
+
- lib/pagoda/public/images/apple-touch-icon.png
|
198
199
|
- lib/pagoda/public/images/fullscreen.png
|
199
200
|
- lib/pagoda/public/js/editor.coffee
|
200
201
|
- lib/pagoda/public/js/editor.js
|