humpyard 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile +28 -0
- data/README.rdoc +61 -0
- data/VERSION +1 -0
- data/app/controllers/humpyard/assets_controller.rb +123 -0
- data/app/controllers/humpyard/elements_controller.rb +200 -0
- data/app/controllers/humpyard/errors_controller.rb +8 -0
- data/app/controllers/humpyard/pages_controller.rb +365 -0
- data/app/helpers/humpyard/pages_helper.rb +19 -0
- data/app/models/humpyard/asset.rb +22 -0
- data/app/models/humpyard/assets/paperclip_asset.rb +48 -0
- data/app/models/humpyard/assets/youtube_asset.rb +38 -0
- data/app/models/humpyard/element.rb +57 -0
- data/app/models/humpyard/elements/box_element.rb +15 -0
- data/app/models/humpyard/elements/media_element.rb +13 -0
- data/app/models/humpyard/elements/news_element.rb +13 -0
- data/app/models/humpyard/elements/sitemap_element.rb +11 -0
- data/app/models/humpyard/elements/text_element.rb +49 -0
- data/app/models/humpyard/news_item.rb +42 -0
- data/app/models/humpyard/page.rb +153 -0
- data/app/models/humpyard/pages/news_page.rb +71 -0
- data/app/models/humpyard/pages/static_page.rb +25 -0
- data/app/models/humpyard/pages/virtual_page.rb +30 -0
- data/app/views/humpyard/assets/_edit.html.haml +15 -0
- data/app/views/humpyard/assets/_index.html.haml +24 -0
- data/app/views/humpyard/assets/_list.html.haml +4 -0
- data/app/views/humpyard/assets/_list_item.html.haml +1 -0
- data/app/views/humpyard/assets/_show.html.haml +38 -0
- data/app/views/humpyard/assets/_show_asset.html.haml +3 -0
- data/app/views/humpyard/assets/destroy.js.erb +4 -0
- data/app/views/humpyard/assets/paperclip_assets/_edit.html.haml +4 -0
- data/app/views/humpyard/assets/paperclip_assets/_info_table.html.haml +10 -0
- data/app/views/humpyard/assets/paperclip_assets/_show.html.haml +12 -0
- data/app/views/humpyard/assets/youtube_assets/_edit.html.haml +4 -0
- data/app/views/humpyard/assets/youtube_assets/_show.html.haml +5 -0
- data/app/views/humpyard/common/_head.html.haml +8 -0
- data/app/views/humpyard/common/_page_construct.html.haml +45 -0
- data/app/views/humpyard/elements/_edit.html.haml +25 -0
- data/app/views/humpyard/elements/_inline_edit.haml +0 -0
- data/app/views/humpyard/elements/_new.html.haml +1 -0
- data/app/views/humpyard/elements/_show.html.haml +29 -0
- data/app/views/humpyard/elements/_show_container.html.haml +3 -0
- data/app/views/humpyard/elements/_show_view.html.haml +2 -0
- data/app/views/humpyard/elements/box_elements/_edit.html.haml +4 -0
- data/app/views/humpyard/elements/box_elements/_inline_edit.html.haml +0 -0
- data/app/views/humpyard/elements/box_elements/_show.html.haml +5 -0
- data/app/views/humpyard/elements/destroy.js.erb +1 -0
- data/app/views/humpyard/elements/error.js.erb +1 -0
- data/app/views/humpyard/elements/media_elements/_edit.html.haml +7 -0
- data/app/views/humpyard/elements/media_elements/_show.html.haml +8 -0
- data/app/views/humpyard/elements/news_elements/_edit.html.haml +5 -0
- data/app/views/humpyard/elements/news_elements/_inline_edit.html.haml +0 -0
- data/app/views/humpyard/elements/news_elements/_show.html.haml +4 -0
- data/app/views/humpyard/elements/sitemap_elements/_edit.html.haml +5 -0
- data/app/views/humpyard/elements/sitemap_elements/_inline_edit.html.haml +0 -0
- data/app/views/humpyard/elements/sitemap_elements/_show.html.haml +3 -0
- data/app/views/humpyard/elements/sitemap_elements/_show_part.html.haml +12 -0
- data/app/views/humpyard/elements/text_elements/_edit.html.haml +4 -0
- data/app/views/humpyard/elements/text_elements/_inline_edit.html.haml +0 -0
- data/app/views/humpyard/elements/text_elements/_show.html.haml +4 -0
- data/app/views/humpyard/pages/_content.html.haml +2 -0
- data/app/views/humpyard/pages/_edit.html.haml +39 -0
- data/app/views/humpyard/pages/_index.html.haml +23 -0
- data/app/views/humpyard/pages/_show.html.haml +16 -0
- data/app/views/humpyard/pages/_subtree.html.haml +6 -0
- data/app/views/humpyard/pages/_tree.html.haml +3 -0
- data/app/views/humpyard/pages/destroy.js.erb +4 -0
- data/app/views/humpyard/pages/news_pages/_detail.html.haml +10 -0
- data/app/views/humpyard/pages/news_pages/_edit.html.haml +3 -0
- data/app/views/humpyard/pages/news_pages/_show.html.haml +5 -0
- data/app/views/humpyard/pages/show.html.haml +3 -0
- data/app/views/humpyard/pages/static_pages/_edit.html.haml +1 -0
- data/app/views/humpyard/pages/static_pages/_show.html.haml +1 -0
- data/app/views/humpyard/pages/virtual_pages/_edit.html.haml +7 -0
- data/app/views/humpyard/pages/virtual_pages/_show.html.haml +4 -0
- data/app/views/humpyard/pages/welcome.html.haml +13 -0
- data/compass/stylesheets/_humpyard.scss +12 -0
- data/compass/stylesheets/humpyard/_backend.scss +1 -0
- data/compass/stylesheets/humpyard/_base.scss +144 -0
- data/compass/stylesheets/humpyard/_ie.scss +1 -0
- data/compass/stylesheets/humpyard/_jquery_ui_overrides.scss +380 -0
- data/compass/stylesheets/humpyard/_print.scss +3 -0
- data/config/locales/de.yml +84 -0
- data/config/locales/en.yml +81 -0
- data/config/routes.rb +38 -0
- data/db/migrate/20100321134138_base.rb +60 -0
- data/db/migrate/20100330204700_create_box_element.rb +24 -0
- data/db/migrate/20100401153655_page_template.rb +11 -0
- data/db/migrate/20100409195732_page_types.rb +26 -0
- data/db/migrate/20100413230623_element_yield.rb +14 -0
- data/db/migrate/20100415132312_news_page.rb +48 -0
- data/db/migrate/20100415193423_page_i18n_name.rb +27 -0
- data/db/migrate/20100415213700_create_news_element.rb +12 -0
- data/db/migrate/20100703120000_shared_elements.rb +9 -0
- data/db/migrate/20101001142534_page_modified_at.rb +11 -0
- data/db/migrate/20101003100138_create_sitemap_elements.rb +13 -0
- data/db/migrate/20101003122108_create_humpyard_pages_virtual_pages.rb +11 -0
- data/db/migrate/20101006070503_page_cache_control.rb +9 -0
- data/db/migrate/20101104173743_create_media.rb +36 -0
- data/db/migrate/20110425230524_media_with_link.rb +9 -0
- data/lib/generators/humpyard.rb +114 -0
- data/lib/generators/humpyard/auth/auth_generator.rb +191 -0
- data/lib/generators/humpyard/auth/templates/authlogic/README +9 -0
- data/lib/generators/humpyard/auth/templates/authlogic/controllers/user_sessions_controller.rb +22 -0
- data/lib/generators/humpyard/auth/templates/authlogic/migration.rb +17 -0
- data/lib/generators/humpyard/auth/templates/authlogic/models/ability.rb +12 -0
- data/lib/generators/humpyard/auth/templates/authlogic/models/user.rb +7 -0
- data/lib/generators/humpyard/auth/templates/authlogic/models/user_session.rb +6 -0
- data/lib/generators/humpyard/auth/templates/authlogic/views/user_sessions/new.html.haml +12 -0
- data/lib/generators/humpyard/auth/templates/custom/README +8 -0
- data/lib/generators/humpyard/auth/templates/devise/README +14 -0
- data/lib/generators/humpyard/auth/templates/devise/models/ability.rb +14 -0
- data/lib/generators/humpyard/auth/templates/fake/README +0 -0
- data/lib/generators/humpyard/auth/templates/fake/models/ability.rb +12 -0
- data/lib/generators/humpyard/auth/templates/simple/README +16 -0
- data/lib/generators/humpyard/auth/templates/simple/config/humpyard_users.yml +2 -0
- data/lib/generators/humpyard/auth/templates/simple/controllers/user_sessions_controller.rb +39 -0
- data/lib/generators/humpyard/auth/templates/simple/models/ability.rb +12 -0
- data/lib/generators/humpyard/auth/templates/simple/views/user_sessions/new.html.haml +15 -0
- data/lib/generators/humpyard/element/USAGE +7 -0
- data/lib/generators/humpyard/element/element_generator.rb +82 -0
- data/lib/generators/humpyard/element/templates/_edit.html.haml +12 -0
- data/lib/generators/humpyard/element/templates/_inline_edit.html.haml +0 -0
- data/lib/generators/humpyard/element/templates/_show.html.haml +9 -0
- data/lib/generators/humpyard/element/templates/fixtures.yml +23 -0
- data/lib/generators/humpyard/element/templates/migration.rb +16 -0
- data/lib/generators/humpyard/element/templates/model.rb +11 -0
- data/lib/generators/humpyard/element/templates/tests/rspec/model.rb +7 -0
- data/lib/generators/humpyard/element/templates/tests/shoulda/model.rb +7 -0
- data/lib/generators/humpyard/element/templates/tests/test_unit/model.rb +7 -0
- data/lib/generators/humpyard/page/USAGE +7 -0
- data/lib/generators/humpyard/page/page_generator.rb +80 -0
- data/lib/generators/humpyard/page/templates/_edit.html.haml +7 -0
- data/lib/generators/humpyard/page/templates/_show.html.haml +4 -0
- data/lib/generators/humpyard/page/templates/fixtures.yml +23 -0
- data/lib/generators/humpyard/page/templates/migration.rb +16 -0
- data/lib/generators/humpyard/page/templates/model.rb +37 -0
- data/lib/generators/humpyard/page/templates/tests/rspec/model.rb +7 -0
- data/lib/generators/humpyard/page/templates/tests/shoulda/model.rb +7 -0
- data/lib/generators/humpyard/page/templates/tests/test_unit/model.rb +7 -0
- data/lib/generators/humpyard/skeleton/USAGE +6 -0
- data/lib/generators/humpyard/skeleton/skeleton_generator.rb +99 -0
- data/lib/generators/humpyard/skeleton/templates/compass.config +14 -0
- data/lib/generators/humpyard/skeleton/templates/images/ajax-loader.gif +0 -0
- data/lib/generators/humpyard/skeleton/templates/images/grid.png +0 -0
- data/lib/generators/humpyard/skeleton/templates/initializers/compass.rb +16 -0
- data/lib/generators/humpyard/skeleton/templates/initializers/haml.rb +3 -0
- data/lib/generators/humpyard/skeleton/templates/initializers/humpyard.rb +20 -0
- data/lib/generators/humpyard/skeleton/templates/javascripts/jquery-ui-18/images/jstree/d.png +0 -0
- data/lib/generators/humpyard/skeleton/templates/javascripts/jquery-ui-18/images/jstree/throbber.gif +0 -0
- data/lib/generators/humpyard/skeleton/templates/javascripts/jquery-ui-18/javascripts/jquery-1.5.1.js +8316 -0
- data/lib/generators/humpyard/skeleton/templates/javascripts/jquery-ui-18/javascripts/jquery-humpyard.js +790 -0
- data/lib/generators/humpyard/skeleton/templates/javascripts/jquery-ui-18/javascripts/jquery-rails.js +157 -0
- data/lib/generators/humpyard/skeleton/templates/javascripts/jquery-ui-18/javascripts/jquery-ui-1.8.10.js +11544 -0
- data/lib/generators/humpyard/skeleton/templates/javascripts/jquery-ui-18/javascripts/jquery.form-2.64.js +803 -0
- data/lib/generators/humpyard/skeleton/templates/javascripts/jquery-ui-18/javascripts/jquery.jstree.js +3510 -0
- data/lib/generators/humpyard/skeleton/templates/javascripts/jquery-ui-18/stylesheets/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/lib/generators/humpyard/skeleton/templates/javascripts/jquery-ui-18/stylesheets/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/lib/generators/humpyard/skeleton/templates/javascripts/jquery-ui-18/stylesheets/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/lib/generators/humpyard/skeleton/templates/javascripts/jquery-ui-18/stylesheets/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/lib/generators/humpyard/skeleton/templates/javascripts/jquery-ui-18/stylesheets/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/lib/generators/humpyard/skeleton/templates/javascripts/jquery-ui-18/stylesheets/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/lib/generators/humpyard/skeleton/templates/javascripts/jquery-ui-18/stylesheets/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/lib/generators/humpyard/skeleton/templates/javascripts/jquery-ui-18/stylesheets/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/lib/generators/humpyard/skeleton/templates/javascripts/jquery-ui-18/stylesheets/smoothness/images/ui-icons_222222_256x240.png +0 -0
- data/lib/generators/humpyard/skeleton/templates/javascripts/jquery-ui-18/stylesheets/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
- data/lib/generators/humpyard/skeleton/templates/javascripts/jquery-ui-18/stylesheets/smoothness/images/ui-icons_454545_256x240.png +0 -0
- data/lib/generators/humpyard/skeleton/templates/javascripts/jquery-ui-18/stylesheets/smoothness/images/ui-icons_888888_256x240.png +0 -0
- data/lib/generators/humpyard/skeleton/templates/javascripts/jquery-ui-18/stylesheets/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/lib/generators/humpyard/skeleton/templates/javascripts/jquery-ui-18/stylesheets/smoothness/jquery-ui-1.8.10.css +573 -0
- data/lib/generators/humpyard/skeleton/templates/stylesheets/ie.sass +15 -0
- data/lib/generators/humpyard/skeleton/templates/stylesheets/ie.scss +16 -0
- data/lib/generators/humpyard/skeleton/templates/stylesheets/partials/_base.sass +12 -0
- data/lib/generators/humpyard/skeleton/templates/stylesheets/partials/_base.scss +11 -0
- data/lib/generators/humpyard/skeleton/templates/stylesheets/print.sass +3 -0
- data/lib/generators/humpyard/skeleton/templates/stylesheets/print.scss +3 -0
- data/lib/generators/humpyard/skeleton/templates/stylesheets/screen.sass +78 -0
- data/lib/generators/humpyard/skeleton/templates/stylesheets/screen.scss +90 -0
- data/lib/generators/humpyard/skeleton/templates/views/layout.html.haml +28 -0
- data/lib/html_to_textile.rb +220 -0
- data/lib/humpyard.rb +70 -0
- data/lib/humpyard/action_controller/base.rb +24 -0
- data/lib/humpyard/active_model/naming.rb +29 -0
- data/lib/humpyard/active_model/translation.rb +26 -0
- data/lib/humpyard/active_model/validators/publish_range.rb +14 -0
- data/lib/humpyard/active_record/acts/asset.rb +68 -0
- data/lib/humpyard/active_record/acts/container_element.rb +26 -0
- data/lib/humpyard/active_record/acts/element.rb +89 -0
- data/lib/humpyard/active_record/acts/page.rb +101 -0
- data/lib/humpyard/active_record/has/title_for_url.rb +75 -0
- data/lib/humpyard/compass.rb +6 -0
- data/lib/humpyard/config.rb +235 -0
- data/lib/humpyard/engine.rb +7 -0
- data/lib/humpyard/uri_parser.rb +16 -0
- data/lib/humpyard/uri_parser/assets_uri_parser.rb +15 -0
- data/lib/humpyard/uri_parser/pages_uri_parser.rb +15 -0
- data/lib/tasks/humpyard.rake +103 -0
- metadata +331 -0
@@ -0,0 +1,15 @@
|
|
1
|
+
@import blueprint
|
2
|
+
|
3
|
+
+blueprint-ie
|
4
|
+
|
5
|
+
// Note :
|
6
|
+
//
|
7
|
+
// Compass will center text to fix IE6 container centering.
|
8
|
+
// This means all your texts will be centered under all version of IE by default.
|
9
|
+
// Please don't forget to restore the correct behavior to your main container (but not the body tag!)
|
10
|
+
//
|
11
|
+
// Example :
|
12
|
+
//
|
13
|
+
// .container, .footer {
|
14
|
+
// text-align: left;
|
15
|
+
// }
|
@@ -0,0 +1,16 @@
|
|
1
|
+
@import "blueprint";
|
2
|
+
|
3
|
+
@include blueprint-ie;
|
4
|
+
|
5
|
+
// Note :
|
6
|
+
//
|
7
|
+
// Compass will center text to fix IE6 container centering.
|
8
|
+
// This means all your texts will be centered under all version of IE by default.
|
9
|
+
// Please don't forget to restore the correct behavior to your main container (but not the body tag!)
|
10
|
+
//
|
11
|
+
// Example :
|
12
|
+
//
|
13
|
+
// .container, .footer {
|
14
|
+
// text-align: left;
|
15
|
+
// }
|
16
|
+
|
@@ -0,0 +1,12 @@
|
|
1
|
+
// Here is where you can define your constants for your application and to configure the blueprint framework.
|
2
|
+
// Feel free to delete these if you want keep the defaults:
|
3
|
+
|
4
|
+
$blueprint_grid_columns: 24
|
5
|
+
|
6
|
+
$blueprint_container_size: 800px
|
7
|
+
|
8
|
+
$blueprint_grid_margin: 10px
|
9
|
+
|
10
|
+
// Use this to calculate the width based on the total width.
|
11
|
+
// Or you can set !blueprint_grid_width to a fixed value and unset !blueprint_container_size -- it will be calculated for you.
|
12
|
+
$blueprint_grid_width: ($blueprint_container_size + $blueprint_grid_margin) / $blueprint_grid_columns - $blueprint_grid_margin
|
@@ -0,0 +1,11 @@
|
|
1
|
+
// Here is where you can define your constants for your application and to configure the blueprint framework.
|
2
|
+
// Feel free to delete these if you want keep the defaults:
|
3
|
+
|
4
|
+
$blueprint_grid_columns: 24;
|
5
|
+
$blueprint_container_size: 800px;
|
6
|
+
$blueprint_grid_margin: 10px;
|
7
|
+
|
8
|
+
// Use this to calculate the width based on the total width.
|
9
|
+
// Or you can set !blueprint_grid_width to a fixed value and unset !blueprint_container_size -- it will be calculated for you.
|
10
|
+
$blueprint_grid_width: ($blueprint_container_size + $blueprint_grid_margin) / $blueprint_grid_columns - $blueprint_grid_margin;
|
11
|
+
|
@@ -0,0 +1,78 @@
|
|
1
|
+
// This import applies a global reset to any page that imports this stylesheet.
|
2
|
+
@import blueprint/reset
|
3
|
+
|
4
|
+
// To configure blueprint, edit the partials/base.sass file.
|
5
|
+
@import partials/base
|
6
|
+
|
7
|
+
// Import all the default blueprint modules so that we can access their mixins.
|
8
|
+
@import blueprint
|
9
|
+
|
10
|
+
// Import the non-default scaffolding module.
|
11
|
+
@import blueprint/scaffolding
|
12
|
+
|
13
|
+
// Import the humpyard module
|
14
|
+
@import humpyard/base
|
15
|
+
|
16
|
+
// To generate css equivalent to the blueprint css but with your configuration applied, uncomment:
|
17
|
+
+blueprint
|
18
|
+
|
19
|
+
//Recommended Blueprint configuration with scoping and semantic layout:
|
20
|
+
|
21
|
+
+blueprint-scaffolding("#hy-body")
|
22
|
+
|
23
|
+
+humpyard-base
|
24
|
+
|
25
|
+
body.hy-logged-in
|
26
|
+
form
|
27
|
+
// TODO: remove blueprint dependencies
|
28
|
+
// for our own jquery-ui froms
|
29
|
+
// write our own macros for form layout
|
30
|
+
+blueprint-form-layout
|
31
|
+
+blueprint-form-borders(#bbbbbb, #666666, #cccccc)
|
32
|
+
+blueprint-form-sizes(400px, 400px, 250px)
|
33
|
+
|
34
|
+
#hy-body
|
35
|
+
+blueprint-typography(true)
|
36
|
+
+blueprint-utilities
|
37
|
+
+blueprint-debug
|
38
|
+
+blueprint-interaction
|
39
|
+
// Remove the scaffolding when you're ready to start doing visual design.
|
40
|
+
// Or leave it in if you're happy with how blueprint looks out-of-the-box
|
41
|
+
padding: 10px
|
42
|
+
font-size: 14px
|
43
|
+
.flash
|
44
|
+
border:
|
45
|
+
width: 1px
|
46
|
+
style: solid
|
47
|
+
color: #999
|
48
|
+
background: #ccc
|
49
|
+
padding: 5px
|
50
|
+
#flash_error
|
51
|
+
border-color: #f99
|
52
|
+
background: #fcc
|
53
|
+
form
|
54
|
+
+blueprint-form
|
55
|
+
.container
|
56
|
+
+container
|
57
|
+
#header, #footer
|
58
|
+
+column($blueprint_grid_columns)
|
59
|
+
#footer
|
60
|
+
border-top: 1px solid $font_color
|
61
|
+
#sidebar
|
62
|
+
// One third of the grid columns, rounding down. With 24 cols, this is 8.
|
63
|
+
$sidebar_columns: floor($blueprint_grid_columns / 6)
|
64
|
+
+column($sidebar_columns)
|
65
|
+
p
|
66
|
+
+box
|
67
|
+
#content
|
68
|
+
// Two thirds of the grid columns, rounding up.
|
69
|
+
// With 24 cols, this is 16.
|
70
|
+
$content_columns: ceil(5 * $blueprint_grid_columns / 6)
|
71
|
+
// true means it's the last column in the row
|
72
|
+
+column($content_columns, true)
|
73
|
+
.box-element
|
74
|
+
background: #ddd
|
75
|
+
padding: 5px
|
76
|
+
.box-element-content
|
77
|
+
border: 1px solid #fdd
|
78
|
+
background: #fff
|
@@ -0,0 +1,90 @@
|
|
1
|
+
// This import applies a global reset to any page that imports this stylesheet.
|
2
|
+
@import "blueprint/reset";
|
3
|
+
// To configure blueprint, edit the partials/base.sass file.
|
4
|
+
@import "partials/base";
|
5
|
+
// Import all the default blueprint modules so that we can access their mixins.
|
6
|
+
@import "blueprint";
|
7
|
+
// Import the non-default scaffolding module.
|
8
|
+
@import "blueprint/scaffolding";
|
9
|
+
// Import the humpyard module
|
10
|
+
@import "humpyard/base";
|
11
|
+
|
12
|
+
// To generate css equivalent to the blueprint css but with your configuration applied, uncomment:
|
13
|
+
@include blueprint;
|
14
|
+
|
15
|
+
//Recommended Blueprint configuration with scoping and semantic layout:
|
16
|
+
|
17
|
+
@include blueprint-scaffolding("#hy-body");
|
18
|
+
@include humpyard-base;
|
19
|
+
|
20
|
+
body.hy-logged-in {
|
21
|
+
form {
|
22
|
+
// TODO: remove blueprint dependencies
|
23
|
+
// for our own jquery-ui froms
|
24
|
+
// write our own macros for form layout
|
25
|
+
@include blueprint-form-layout;
|
26
|
+
@include blueprint-form-borders(#bbb, #666, #ccc);
|
27
|
+
@include blueprint-form-sizes(400px, 400px, 250px);
|
28
|
+
}
|
29
|
+
}
|
30
|
+
|
31
|
+
#hy-body {
|
32
|
+
@include blueprint-typography(true);
|
33
|
+
@include blueprint-utilities;
|
34
|
+
@include blueprint-debug;
|
35
|
+
@include blueprint-interaction;
|
36
|
+
// Remove the scaffolding when you're ready to start doing visual design.
|
37
|
+
// Or leave it in if you're happy with how blueprint looks out-of-the-box
|
38
|
+
|
39
|
+
padding: 10px;
|
40
|
+
font-size: 14px;
|
41
|
+
|
42
|
+
.flash {
|
43
|
+
border-width: 1px;
|
44
|
+
border-style: solid;
|
45
|
+
border-color: #999;
|
46
|
+
background: #ccc;
|
47
|
+
padding: 5px;
|
48
|
+
}
|
49
|
+
#flash_error {
|
50
|
+
border-color: #f99;
|
51
|
+
background: #fcc;
|
52
|
+
}
|
53
|
+
|
54
|
+
form {
|
55
|
+
@include blueprint-form;
|
56
|
+
}
|
57
|
+
.container {
|
58
|
+
@include container;
|
59
|
+
}
|
60
|
+
#header, #footer {
|
61
|
+
@include column($blueprint_grid_columns)
|
62
|
+
}
|
63
|
+
#footer {
|
64
|
+
border-top: 1px solid $font_color;
|
65
|
+
}
|
66
|
+
#sidebar {
|
67
|
+
// One third of the grid columns, rounding down. With 24 cols, this is 8.
|
68
|
+
$sidebar_columns: floor($blueprint_grid_columns / 6);
|
69
|
+
@include column($sidebar_columns);
|
70
|
+
p {
|
71
|
+
@include box;
|
72
|
+
}
|
73
|
+
}
|
74
|
+
#content {
|
75
|
+
// Two thirds of the grid columns, rounding up.
|
76
|
+
// With 24 cols, this is 16.
|
77
|
+
$content_columns: ceil(5 * $blueprint_grid_columns / 6);
|
78
|
+
// true means it's the last column in the row
|
79
|
+
@include column($content_columns, true);
|
80
|
+
|
81
|
+
.box-element {
|
82
|
+
background: #ddd;
|
83
|
+
padding: 5px;
|
84
|
+
.box-element-content {
|
85
|
+
border: 1px solid #fdd;
|
86
|
+
background: #fff;
|
87
|
+
}
|
88
|
+
}
|
89
|
+
}
|
90
|
+
}
|
@@ -0,0 +1,28 @@
|
|
1
|
+
!!! Strict
|
2
|
+
%html{html_attrs(I18n.locale)}
|
3
|
+
%head
|
4
|
+
=render :partial => 'humpyard/common/head'
|
5
|
+
<% if options[:js_framework] -%>
|
6
|
+
= stylesheet_link_tag 'smoothness/jquery-ui-1.8.10.css'
|
7
|
+
= javascript_include_tag 'jquery-1.5.1', 'jquery-ui-1.8.10', 'jquery.form-2.64', 'jquery.jstree', 'jquery-rails', 'jquery-humpyard'
|
8
|
+
<% end -%>
|
9
|
+
= csrf_meta_tag
|
10
|
+
= page_body do
|
11
|
+
.container
|
12
|
+
- flash.each do |name, msg|
|
13
|
+
= content_tag :div, msg, :id => "flash_#{name}", :class => 'flash'
|
14
|
+
#header.span-24{"class"=>"last"}
|
15
|
+
%h1
|
16
|
+
= @content_for_title
|
17
|
+
#menu.span-24{"class"=>"last"}
|
18
|
+
- if Humpyard::Page.root_page
|
19
|
+
- Humpyard::Page.root_page.child_pages.each do |page|
|
20
|
+
= link_to page.title, page.human_url
|
21
|
+
#content.span-16
|
22
|
+
= yield
|
23
|
+
#sidebar.span-8{"class"=>"last"}
|
24
|
+
.box
|
25
|
+
= yield :sidebar
|
26
|
+
#footer.span-24{"class"=>"last"}
|
27
|
+
%p
|
28
|
+
This is just a template
|
@@ -0,0 +1,220 @@
|
|
1
|
+
require "nokogiri"
|
2
|
+
|
3
|
+
class HtmlToTextile
|
4
|
+
class Document < ::Nokogiri::XML::SAX::Document
|
5
|
+
def valid_tags
|
6
|
+
['a','p','br','u','b','i','strong','em','ul','ol','li','sup','sub', 'ins', 'del', 'h1', 'h2', 'h3', 'table', 'tr', 'td', 'th']
|
7
|
+
end
|
8
|
+
|
9
|
+
def tree
|
10
|
+
@tree ||= []
|
11
|
+
end
|
12
|
+
|
13
|
+
def stack
|
14
|
+
@stack ||= []
|
15
|
+
end
|
16
|
+
|
17
|
+
def start_element name, attrs = []
|
18
|
+
if valid_tags.include? name
|
19
|
+
attrs_hash = {}
|
20
|
+
while key = attrs.shift do
|
21
|
+
value = attrs.shift
|
22
|
+
attrs_hash[key] = value
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
stack << {
|
27
|
+
'name' => name,
|
28
|
+
'content' => [],
|
29
|
+
'attrs' => attrs_hash
|
30
|
+
}
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def end_element name
|
35
|
+
if valid_tags.include? name
|
36
|
+
content = stack.pop
|
37
|
+
if stack.empty? or stack.last['content'].nil?
|
38
|
+
tree << content
|
39
|
+
else
|
40
|
+
stack.last['content'] << content
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def characters string
|
46
|
+
if stack.last.nil? or stack.last['content'].nil?
|
47
|
+
stack << "#{string}"
|
48
|
+
else
|
49
|
+
stack.last['content'] << "#{string}"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def to_textile
|
54
|
+
##ActiveRecord::Base.logger.debug "### tree START"
|
55
|
+
##ActiveRecord::Base.logger.debug @tree.inspect
|
56
|
+
##ActiveRecord::Base.logger.debug "### tree END"
|
57
|
+
#ActiveRecord::Base.logger.debug "### HTML START"
|
58
|
+
to_html
|
59
|
+
#ActiveRecord::Base.logger.debug "### HTML END"
|
60
|
+
|
61
|
+
textile = ''
|
62
|
+
tree.each do |content|
|
63
|
+
textile += _to_textile_tag content
|
64
|
+
end
|
65
|
+
|
66
|
+
#ActiveRecord::Base.logger.debug "### TEXTILE START"
|
67
|
+
#ActiveRecord::Base.logger.debug textile
|
68
|
+
#ActiveRecord::Base.logger.debug "### TEXTILE END"
|
69
|
+
|
70
|
+
return textile
|
71
|
+
end
|
72
|
+
|
73
|
+
def to_html
|
74
|
+
@html = ''
|
75
|
+
tree.each do |content|
|
76
|
+
_to_html_tag content
|
77
|
+
end
|
78
|
+
return @html
|
79
|
+
end
|
80
|
+
|
81
|
+
private
|
82
|
+
def _to_html_tag content, indent = 0
|
83
|
+
if content.class == String
|
84
|
+
#ActiveRecord::Base.logger.debug "#{(' ' * indent)}#{content.to_s.gsub("\n", "#{' ' * indent}")}"
|
85
|
+
@html += "#{content}"
|
86
|
+
elsif content.class == Hash
|
87
|
+
if ['br','img'].include? content['name']
|
88
|
+
#ActiveRecord::Base.logger.debug "#{(' ' * indent)}<#{content['name']} />"
|
89
|
+
@html += "<#{content['name']} />"
|
90
|
+
else
|
91
|
+
#ActiveRecord::Base.logger.debug "#{(' ' * indent)}<#{content['name']}>"
|
92
|
+
@html += "<#{content['name']}>"
|
93
|
+
_to_html_tag(content['content'], indent + 2)
|
94
|
+
#ActiveRecord::Base.logger.debug "#{(' ' * indent)}</#{content['name']}>"
|
95
|
+
@html += "</#{content['name']}>"
|
96
|
+
end
|
97
|
+
elsif content.class == Array
|
98
|
+
content.each do |element|
|
99
|
+
_to_html_tag element, indent
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
def _to_textile_tag content, indent = 0
|
105
|
+
textile = ''
|
106
|
+
if content.class == String
|
107
|
+
##ActiveRecord::Base.logger.debug "Content: #{content}"
|
108
|
+
textile += "#{content}"
|
109
|
+
elsif content.class == Hash
|
110
|
+
if ['u','b','strong','i','em','del','ins', 'sub', 'sup'].include? content['name']
|
111
|
+
literals = {
|
112
|
+
'u' => '+',
|
113
|
+
'b' => '*',
|
114
|
+
'strong' => '*',
|
115
|
+
'i' => '_',
|
116
|
+
'em' => '_',
|
117
|
+
'del' => '-',
|
118
|
+
'ins' => '+',
|
119
|
+
'sub' => '~',
|
120
|
+
'sup' => '^'
|
121
|
+
}
|
122
|
+
inner_parsed_textile = _spaces _to_textile_tag(content['content'])
|
123
|
+
if inner_parsed_textile[:content].blank?
|
124
|
+
#ActiveRecord::Base.logger.debug "#{inner_parsed_textile[:leading]}#{inner_parsed_textile[:tailing]}"
|
125
|
+
textile += "#{inner_parsed_textile[:leading]}#{inner_parsed_textile[:tailing]}"
|
126
|
+
else
|
127
|
+
#ActiveRecord::Base.logger.debug "#{inner_parsed_textile[:leading]}[#{literals[content['name']]}#{inner_parsed_textile[:content]}#{literals[content['name']]}]#{inner_parsed_textile[:tailing]}"
|
128
|
+
textile += "#{inner_parsed_textile[:leading]}[#{literals[content['name']]}#{inner_parsed_textile[:content]}#{literals[content['name']]}]#{inner_parsed_textile[:tailing]}"
|
129
|
+
end
|
130
|
+
elsif ['br'].include? content['name']
|
131
|
+
#ActiveRecord::Base.logger.debug "\n"
|
132
|
+
textile += "\n"
|
133
|
+
elsif ['p','h1','h2','h3'].include? content['name']
|
134
|
+
if content['attrs']['style'] and a = content['attrs']['style'][/text-align:[\ ]?([^;]*)/,1] and not a.nil?
|
135
|
+
#ActiveRecord::Base.logger.debug 'strip1'
|
136
|
+
alignment = case a.strip.downcase
|
137
|
+
when 'left' then '<'
|
138
|
+
when 'right' then '>'
|
139
|
+
when 'center' then '='
|
140
|
+
else ''
|
141
|
+
end
|
142
|
+
else
|
143
|
+
alignment = ''
|
144
|
+
end
|
145
|
+
#ActiveRecord::Base.logger.debug "\n#{"#{content['name']}#{alignment}. " unless indent > 0}#{_to_textile_tag(content['content'], indent).strip}#\n\n"
|
146
|
+
textile += "\n#{content['name']}#{alignment}. "
|
147
|
+
textile += _to_textile_tag(content['content'], indent).strip
|
148
|
+
textile += "\n\n"
|
149
|
+
elsif ['a'].include? content['name']
|
150
|
+
inner_parsed_textile = _spaces _to_textile_tag(content['content'])
|
151
|
+
if inner_parsed_textile[:content].blank?
|
152
|
+
#ActiveRecord::Base.logger.debug "#{inner_parsed_textile[:leading]}#{inner_parsed_textile[:tailing]}"
|
153
|
+
textile += "#{inner_parsed_textile[:leading]}#{inner_parsed_textile[:tailing]}"
|
154
|
+
else
|
155
|
+
#ActiveRecord::Base.logger.debug "#{inner_parsed_textile[:leading]}[\"#{inner_parsed_textile[:content]}\":#{content['attrs']['href'].blank? ? '#' : content['attrs']['href']}]#{inner_parsed_textile[:tailing]}"
|
156
|
+
textile += "#{inner_parsed_textile[:leading]}[\"#{inner_parsed_textile[:content]}\":#{content['attrs']['href'].blank? ? '#' : content['attrs']['href']}]#{inner_parsed_textile[:tailing]}"
|
157
|
+
end
|
158
|
+
elsif ['ul','ol'].include? content['name']
|
159
|
+
literals = {
|
160
|
+
'ul' => '*',
|
161
|
+
'ol' => '#'
|
162
|
+
}
|
163
|
+
|
164
|
+
content['content'].each do |element|
|
165
|
+
if element.class == Hash and element['name'] == 'li'
|
166
|
+
#ActiveRecord::Base.logger.debug "\n #{literals[content['name']]} #{_to_textile_tag element, indent +2}"
|
167
|
+
textile += "\n #{literals[content['name']]} "
|
168
|
+
textile += _to_textile_tag element, indent +2
|
169
|
+
end
|
170
|
+
end
|
171
|
+
textile += "\n"
|
172
|
+
elsif ['table'].include? content['name']
|
173
|
+
textile += "\n"
|
174
|
+
content['content'].each do |row|
|
175
|
+
if row.class == Hash and row['name'] == 'tr'
|
176
|
+
row['content'].each do |element|
|
177
|
+
if element.class == Hash and ['td', 'th'].include? element['name']
|
178
|
+
#ActiveRecord::Base.logger.debug "|#{element['name'] == 'th' ? '_.' : ''} #{_to_textile_tag(element, indent +2).strip.gsub(/\n{2,}/, "\n")} "
|
179
|
+
textile += "|#{element['name'] == 'th' ? '_.' : ''} #{_to_textile_tag(element, indent +2).strip.gsub(/\n{2,}/, "\n")} "
|
180
|
+
end
|
181
|
+
end
|
182
|
+
textile += "|\n"
|
183
|
+
end
|
184
|
+
end
|
185
|
+
else
|
186
|
+
#ActiveRecord::Base.logger.debug _to_textile_tag content['content'], indent
|
187
|
+
textile += _to_textile_tag content['content'], indent
|
188
|
+
end
|
189
|
+
elsif content.class == Array
|
190
|
+
content.each do |element|
|
191
|
+
#ActiveRecord::Base.logger.debug _to_textile_tag element, indent
|
192
|
+
textile += _to_textile_tag element, indent
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
return textile
|
197
|
+
end
|
198
|
+
|
199
|
+
def _spaces string
|
200
|
+
parsed = {:content => string}
|
201
|
+
string.gsub(/^(\s*)?(\S*)(\s*)?$/) {|s| parsed = {:leading => $1, :content => $2, :tailing => $3} }
|
202
|
+
parsed
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
def initialize(string)
|
207
|
+
@tree = []
|
208
|
+
@document = Document.new
|
209
|
+
parser = ::Nokogiri::HTML::SAX::Parser.new(@document)
|
210
|
+
parser.parse(string)
|
211
|
+
end
|
212
|
+
|
213
|
+
def to_textile
|
214
|
+
@document.to_textile
|
215
|
+
end
|
216
|
+
|
217
|
+
def to_html
|
218
|
+
@document.to_html
|
219
|
+
end
|
220
|
+
end
|