adva-core 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/app/controllers/admin/base_controller.rb +20 -0
- data/app/controllers/admin/pages_controller.rb +7 -0
- data/app/controllers/admin/sections_controller.rb +22 -0
- data/app/controllers/admin/sites_controller.rb +16 -0
- data/app/controllers/articles_controller.rb +3 -0
- data/app/controllers/base_controller.rb +18 -0
- data/app/controllers/installations_controller.rb +28 -0
- data/app/controllers/pages_controller.rb +2 -0
- data/app/controllers/sections_controller.rb +3 -0
- data/app/helpers/form_helper.rb +13 -0
- data/app/helpers/sections_helper.rb +7 -0
- data/app/helpers/url_helper.rb +18 -0
- data/app/models/account.rb +3 -0
- data/app/models/article.rb +2 -0
- data/app/models/content.rb +4 -0
- data/app/models/page.rb +9 -0
- data/app/models/section.rb +49 -0
- data/app/models/site.rb +24 -0
- data/app/views/admin/contents/_menu.html.rb +17 -0
- data/app/views/admin/pages/_menu.html.rb +10 -0
- data/app/views/admin/pages/new.html.rb +19 -0
- data/app/views/admin/pages/show.html.rb +25 -0
- data/app/views/admin/sections/_menu.html.rb +45 -0
- data/app/views/admin/sections/_section.html.rb +7 -0
- data/app/views/admin/sections/_select_type.html.rb +16 -0
- data/app/views/admin/sections/index.html.rb +28 -0
- data/app/views/admin/sites/_menu.html.rb +2 -0
- data/app/views/admin/sites/edit.html.rb +22 -0
- data/app/views/admin/sites/index.html.rb +24 -0
- data/app/views/admin/sites/new.html.rb +39 -0
- data/app/views/admin/sites/show.html.rb +7 -0
- data/app/views/installations/new.html.rb +39 -0
- data/app/views/installations/show.html.rb +9 -0
- data/app/views/layouts/admin.rb +55 -0
- data/app/views/layouts/admin/_header.rb +48 -0
- data/app/views/layouts/admin/_tabs.html.rb +18 -0
- data/app/views/layouts/admin/_top.rb +62 -0
- data/app/views/layouts/base.rb +64 -0
- data/app/views/layouts/default.rb +46 -0
- data/app/views/layouts/default/_menu.rb +19 -0
- data/app/views/layouts/simple.rb +16 -0
- data/app/views/pages/show.html.rb +7 -0
- data/config/initializers/simple_form.rb +53 -0
- data/config/locales/en.yml +129 -0
- data/config/redirects.rb +8 -0
- data/config/routes.rb +21 -0
- data/lib/adva-core.rb +1 -0
- data/lib/adva.rb +40 -0
- data/lib/adva/active_record/has_one_default.rb +40 -0
- data/lib/adva/active_record/has_options.rb +55 -0
- data/lib/adva/cli.rb +16 -0
- data/lib/adva/controller.rb +7 -0
- data/lib/adva/controller/abstract_actions.rb +92 -0
- data/lib/adva/controller/internal_redirect.rb +26 -0
- data/lib/adva/controller/references.rb +28 -0
- data/lib/adva/core.rb +94 -0
- data/lib/adva/engine.rb +44 -0
- data/lib/adva/generators.rb +8 -0
- data/lib/adva/generators/app.rb +121 -0
- data/lib/adva/generators/engine.rb +58 -0
- data/lib/adva/generators/gemfile.rb +50 -0
- data/lib/adva/generators/install.rb +31 -0
- data/lib/adva/generators/templates/app/app_template.rb +3 -0
- data/lib/adva/generators/templates/engine/Gemfile.erb +3 -0
- data/lib/adva/generators/templates/engine/all.rb +1 -0
- data/lib/adva/generators/templates/engine/en.yml.erb +2 -0
- data/lib/adva/generators/templates/engine/engine.rb.erb +11 -0
- data/lib/adva/generators/templates/engine/gemspec.erb +21 -0
- data/lib/adva/generators/templates/engine/migration.rb.erb +11 -0
- data/lib/adva/generators/templates/engine/redirects.rb.erb +3 -0
- data/lib/adva/generators/templates/engine/routes.rb.erb +3 -0
- data/lib/adva/generators/templates/engine/test_helper.rb.erb +3 -0
- data/lib/adva/rack.rb +5 -0
- data/lib/adva/rack/static.rb +50 -0
- data/lib/adva/registry.rb +62 -0
- data/lib/adva/responder.rb +21 -0
- data/lib/adva/responder/redirect.rb +31 -0
- data/lib/adva/routing_filters/section_path.rb +72 -0
- data/lib/adva/routing_filters/section_root.rb +65 -0
- data/lib/adva/tasks/core.rake +9 -0
- data/lib/adva/tasks/core.rb +160 -0
- data/lib/adva/testing.rb +58 -0
- data/lib/adva/testing/engine.rb +37 -0
- data/lib/adva/view.rb +7 -0
- data/lib/adva/view/form.rb +44 -0
- data/lib/adva/view/form/tabs.rb +46 -0
- data/lib/adva/view/helper/i18n.rb +10 -0
- data/lib/adva/view/menu.rb +73 -0
- data/lib/adva/view/menu/admin.rb +100 -0
- data/lib/adva/view/menu/items.rb +26 -0
- data/lib/adva/view/tabs.rb +28 -0
- data/lib/adva_core/version.rb +3 -0
- data/lib/core_ext/rails/action_view/has_many_through_collection_helpers.rb +27 -0
- data/lib/core_ext/rails/active_record/skip_callbacks.rb +51 -0
- data/lib/core_ext/ruby/array/flatten_once.rb +9 -0
- data/lib/core_ext/ruby/kernel/silence_stream.rb +17 -0
- data/lib/core_ext/ruby/module/include_anonymous.rb +36 -0
- data/lib/core_ext/ruby/module/option_reader.rb +9 -0
- data/lib/patches/inherited_resources.rb +35 -0
- data/lib/patches/rails/asset_expansion_multiple_registrations.rb +21 -0
- data/lib/patches/rails/integretion_runner_respond_to.rb +13 -0
- data/lib/patches/rails/polymorphic_url_for.rb +115 -0
- data/lib/patches/rails/recognize_path_env.rb +42 -0
- data/lib/patches/rails/route_set_to_param.rb +25 -0
- data/lib/patches/rails/route_set_trailing_segment.rb +13 -0
- data/lib/patches/rails/sti_associations.rb +17 -0
- data/lib/patches/rails/template_resolver_caching.rb +9 -0
- data/lib/patches/rails/translation_helper.rb +18 -0
- data/lib/patches/responders/flash_responder.rb +17 -0
- data/lib/patches/simple_form.rb +37 -0
- data/lib/patches/thor/core_ext/hash.rb +7 -0
- data/lib/patches/thor/group/symbolized_options.rb +8 -0
- data/lib/patches/webrat/links-data-method.rb +15 -0
- data/lib/patches/webrat/logger.rb +14 -0
- data/lib/patches/webrat/upload_file.rb +23 -0
- data/lib/testing/assertions.rb +19 -0
- data/lib/testing/env.rb +41 -0
- data/lib/testing/factories.rb +28 -0
- data/lib/testing/helpers/global_helpers.rb +9 -0
- data/lib/testing/paths.rb +54 -0
- data/lib/testing/step_definitions/common_steps.rb +287 -0
- data/lib/testing/step_definitions/debug_steps.rb +22 -0
- data/lib/testing/step_definitions/menu_steps.rb +11 -0
- data/lib/testing/step_definitions/routes_steps.rb +18 -0
- data/lib/testing/step_definitions/transforms.rb +50 -0
- data/lib/testing/step_definitions/webrat_steps.rb +284 -0
- data/lib/testing/step_definitions/within_steps.rb +16 -0
- data/lib/webrat/integrations/rails.rb +33 -0
- data/public/images/adva-core/admin/header_bg.png +0 -0
- data/public/images/adva-core/admin/menu_checkmark.png +0 -0
- data/public/images/adva-core/admin/section_menu_bg.png +0 -0
- data/public/images/adva-core/admin/tab_action_active.png +0 -0
- data/public/images/adva-core/admin/tab_main_active.png +0 -0
- data/public/images/adva-core/admin/tab_sidebar_active.png +0 -0
- data/public/images/adva-core/admin/tab_top_active.png +0 -0
- data/public/images/adva-core/asset_selected.png +0 -0
- data/public/images/adva-core/avatar.gif +0 -0
- data/public/images/adva-core/feed.mini.png +0 -0
- data/public/images/adva-core/filter-bg.png +0 -0
- data/public/images/adva-core/grid.png +0 -0
- data/public/images/adva-core/icons/accept.png +0 -0
- data/public/images/adva-core/icons/add.png +0 -0
- data/public/images/adva-core/icons/arrow_cross.png +0 -0
- data/public/images/adva-core/icons/arrow_cross_2.png +0 -0
- data/public/images/adva-core/icons/arrow_cross_3.png +0 -0
- data/public/images/adva-core/icons/arrow_up_down.png +0 -0
- data/public/images/adva-core/icons/assets/audio.png +0 -0
- data/public/images/adva-core/icons/assets/doc.png +0 -0
- data/public/images/adva-core/icons/assets/pdf.png +0 -0
- data/public/images/adva-core/icons/assets/video.png +0 -0
- data/public/images/adva-core/icons/attach.png +0 -0
- data/public/images/adva-core/icons/bin.png +0 -0
- data/public/images/adva-core/icons/bin_closed.png +0 -0
- data/public/images/adva-core/icons/bin_empty.png +0 -0
- data/public/images/adva-core/icons/bullet_black.png +0 -0
- data/public/images/adva-core/icons/bullet_delete.png +0 -0
- data/public/images/adva-core/icons/bullet_error.png +0 -0
- data/public/images/adva-core/icons/bullet_go.png +0 -0
- data/public/images/adva-core/icons/bullet_red.png +0 -0
- data/public/images/adva-core/icons/bullet_white.png +0 -0
- data/public/images/adva-core/icons/bullet_yellow.png +0 -0
- data/public/images/adva-core/icons/cancel.png +0 -0
- data/public/images/adva-core/icons/comment.gif +0 -0
- data/public/images/adva-core/icons/comment.png +0 -0
- data/public/images/adva-core/icons/comment_add.png +0 -0
- data/public/images/adva-core/icons/comment_blue.gif +0 -0
- data/public/images/adva-core/icons/comment_delete.png +0 -0
- data/public/images/adva-core/icons/comment_edit.png +0 -0
- data/public/images/adva-core/icons/comment_yellow.gif +0 -0
- data/public/images/adva-core/icons/cross.png +0 -0
- data/public/images/adva-core/icons/delete.png +0 -0
- data/public/images/adva-core/icons/eye.png +0 -0
- data/public/images/adva-core/icons/favorites.png +0 -0
- data/public/images/adva-core/icons/help.png +0 -0
- data/public/images/adva-core/icons/hourglass.png +0 -0
- data/public/images/adva-core/icons/icon_attachment.gif +0 -0
- data/public/images/adva-core/icons/icon_padlock.gif +0 -0
- data/public/images/adva-core/icons/link.png +0 -0
- data/public/images/adva-core/icons/lock.png +0 -0
- data/public/images/adva-core/icons/magnifier.png +0 -0
- data/public/images/adva-core/icons/minus.gif +0 -0
- data/public/images/adva-core/icons/page_add.png +0 -0
- data/public/images/adva-core/icons/page_delete.png +0 -0
- data/public/images/adva-core/icons/page_edit.png +0 -0
- data/public/images/adva-core/icons/page_favorites.png +0 -0
- data/public/images/adva-core/icons/page_go.png +0 -0
- data/public/images/adva-core/icons/page_green.png +0 -0
- data/public/images/adva-core/icons/page_red.png +0 -0
- data/public/images/adva-core/icons/page_white_add.png +0 -0
- data/public/images/adva-core/icons/page_white_delete.png +0 -0
- data/public/images/adva-core/icons/page_white_edit.png +0 -0
- data/public/images/adva-core/icons/page_white_go.png +0 -0
- data/public/images/adva-core/icons/page_white_link.png +0 -0
- data/public/images/adva-core/icons/page_white_magnify.png +0 -0
- data/public/images/adva-core/icons/pencil.png +0 -0
- data/public/images/adva-core/icons/star.png +0 -0
- data/public/images/adva-core/icons/stop.png +0 -0
- data/public/images/adva-core/icons/tag_green.png +0 -0
- data/public/images/adva-core/icons/tick.png +0 -0
- data/public/images/adva-core/icons/zoom.png +0 -0
- data/public/images/adva-core/indicator.gif +0 -0
- data/public/images/adva-core/lines.png +0 -0
- data/public/images/adva-core/preview.png +0 -0
- data/public/images/adva-core/theme_selected.png +0 -0
- data/public/javascripts/adva-core/admin.js +22 -0
- data/public/javascripts/adva-core/jquery/jquery-1.4.2.min.js +154 -0
- data/public/javascripts/adva-core/jquery/jquery.table_tree.js +296 -0
- data/public/javascripts/adva-core/jquery/jquery.tablednd_0_5.js +385 -0
- data/public/javascripts/adva-core/rails.js +127 -0
- data/public/javascripts/backup/admin/jquery.admin.js +75 -0
- data/public/javascripts/backup/admin/jquery.article.js +22 -0
- data/public/javascripts/backup/admin/jquery.cached_pages.js +14 -0
- data/public/javascripts/backup/admin/jquery.table_tree.backup.js +279 -0
- data/public/javascripts/backup/admin/jquery.table_tree.js +10 -0
- data/public/javascripts/backup/application.js +38 -0
- data/public/javascripts/backup/application.prototype.js +135 -0
- data/public/javascripts/backup/builder.js +136 -0
- data/public/javascripts/backup/controls.js +965 -0
- data/public/javascripts/backup/cookie.js +49 -0
- data/public/javascripts/backup/dragdrop.js +975 -0
- data/public/javascripts/backup/effects.js +1130 -0
- data/public/javascripts/backup/flash.js +49 -0
- data/public/javascripts/backup/jquery.dates.js +49 -0
- data/public/javascripts/backup/jquery.flash.js +40 -0
- data/public/javascripts/backup/jquery.roles.js +23 -0
- data/public/javascripts/backup/jquery/jquery-lowpro.js +224 -0
- data/public/javascripts/backup/jquery/jquery-ui.js +273 -0
- data/public/javascripts/backup/jquery/jquery.js +19 -0
- data/public/javascripts/backup/jquery/jquery.qtip.min.js +15 -0
- data/public/javascripts/backup/json.js +139 -0
- data/public/javascripts/backup/lowpro.js +320 -0
- data/public/javascripts/backup/parseuri.js +39 -0
- data/public/javascripts/backup/prototype.js +4320 -0
- data/public/javascripts/backup/roles.js +16 -0
- data/public/javascripts/backup/scriptaculous.js +60 -0
- data/public/javascripts/backup/slider.js +275 -0
- data/public/javascripts/backup/sound.js +55 -0
- data/public/javascripts/backup/unittest.js +568 -0
- data/public/stylesheets/adva-core/admin/forms.css +172 -0
- data/public/stylesheets/adva-core/admin/layout.css +38 -0
- data/public/stylesheets/adva-core/admin/lists.css +54 -0
- data/public/stylesheets/adva-core/admin/navigation.css +234 -0
- data/public/stylesheets/adva-core/admin/sidebar.css +87 -0
- data/public/stylesheets/adva-core/admin/styles.css +130 -0
- data/public/stylesheets/adva-core/common/forms.css +174 -0
- data/public/stylesheets/adva-core/common/layout.css +93 -0
- data/public/stylesheets/adva-core/common/reset.css +42 -0
- data/public/stylesheets/adva-core/common/styles.css +41 -0
- data/public/stylesheets/adva-core/default/layout.css +0 -0
- data/public/stylesheets/adva-core/default/styles.css +0 -0
- data/public/stylesheets/adva-core/simple/layout.css +11 -0
- data/public/stylesheets/backup/alternate/common.css +76 -0
- data/public/stylesheets/backup/alternate/forms.css +121 -0
- data/public/stylesheets/backup/alternate/header.css +125 -0
- data/public/stylesheets/backup/alternate/layout.css +103 -0
- data/public/stylesheets/backup/alternate/lists.css +153 -0
- data/public/stylesheets/backup/alternate/sidebar.css +65 -0
- data/public/stylesheets/backup/alternate/top.css +123 -0
- data/public/stylesheets/backup/content.css +11 -0
- data/public/stylesheets/backup/helptip.css +35 -0
- data/public/stylesheets/backup/jquery/alternate/jquery.tooltip.css +13 -0
- data/public/stylesheets/backup/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/public/stylesheets/backup/jquery/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/public/stylesheets/backup/jquery/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/public/stylesheets/backup/jquery/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/public/stylesheets/backup/jquery/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/public/stylesheets/backup/jquery/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/public/stylesheets/backup/jquery/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/public/stylesheets/backup/jquery/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/public/stylesheets/backup/jquery/images/ui-icons_222222_256x240.png +0 -0
- data/public/stylesheets/backup/jquery/images/ui-icons_2e83ff_256x240.png +0 -0
- data/public/stylesheets/backup/jquery/images/ui-icons_454545_256x240.png +0 -0
- data/public/stylesheets/backup/jquery/images/ui-icons_888888_256x240.png +0 -0
- data/public/stylesheets/backup/jquery/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/public/stylesheets/backup/jquery/jquery-ui.css +405 -0
- data/public/stylesheets/backup/jquery/jquery.tooltip.css +10 -0
- data/public/stylesheets/backup/layout.css +22 -0
- data/public/stylesheets/backup/lists.css +17 -0
- data/public/stylesheets/backup/menu.css +129 -0
- data/public/stylesheets/backup/projection.css +118 -0
- data/public/stylesheets/backup/screen/top.css +8 -0
- data/public/stylesheets/backup/themes.css +49 -0
- data/public/stylesheets/backup/users.css +40 -0
- metadata +338 -40
- data/lib/bundler/repository.rb +0 -118
@@ -0,0 +1,75 @@
|
|
1
|
+
$(document).ready(function() {
|
2
|
+
$('div.tabs li a').click(function() {
|
3
|
+
var tabs = $(this).closest('div');
|
4
|
+
$('div.active, li.active', tabs).removeClass('active')
|
5
|
+
// activate selected tab and tab content
|
6
|
+
$(this).closest('li').addClass('active');
|
7
|
+
selected = '#tab_' + $(this).attr('href').replace('#', '');
|
8
|
+
$(selected).addClass('active');
|
9
|
+
});
|
10
|
+
|
11
|
+
$('#toggle_draft').click(function() {
|
12
|
+
if($(this).attr('checked')) {
|
13
|
+
$('#publish_date_wrapper').hide();
|
14
|
+
} else {
|
15
|
+
$('#publish_date_wrapper').show();
|
16
|
+
}
|
17
|
+
});
|
18
|
+
|
19
|
+
$('.hint').each(function() {
|
20
|
+
if(!$(this).hasClass('text_only')) {
|
21
|
+
var label = $('label[for=' + this.getAttribute('for') + ']');
|
22
|
+
|
23
|
+
if(label) {
|
24
|
+
$(this).appendTo(label).addClass('move_up');
|
25
|
+
}
|
26
|
+
|
27
|
+
$(this).addClass('enabled');
|
28
|
+
}
|
29
|
+
});
|
30
|
+
|
31
|
+
$('.hint.enabled').each(function() {
|
32
|
+
$(this).qtip({
|
33
|
+
content: $(this).html(),
|
34
|
+
position: {
|
35
|
+
corner: {
|
36
|
+
target: 'topMiddle',
|
37
|
+
tooltip: 'bottomMiddle'
|
38
|
+
},
|
39
|
+
adjust: {
|
40
|
+
screen: true,
|
41
|
+
scroll: true
|
42
|
+
}
|
43
|
+
},
|
44
|
+
style: {
|
45
|
+
background: '#FBF7E4',
|
46
|
+
color: '#black',
|
47
|
+
name: 'cream',
|
48
|
+
border: {
|
49
|
+
width: 3,
|
50
|
+
radius: 5,
|
51
|
+
color: '#DDDDDD'
|
52
|
+
}
|
53
|
+
},
|
54
|
+
show: {
|
55
|
+
delay: 0,
|
56
|
+
when: {
|
57
|
+
event: 'click'
|
58
|
+
}
|
59
|
+
},
|
60
|
+
hide: {
|
61
|
+
when: {
|
62
|
+
event: 'unfocus'
|
63
|
+
},
|
64
|
+
effect: {
|
65
|
+
length: 1000
|
66
|
+
}
|
67
|
+
}
|
68
|
+
});
|
69
|
+
});
|
70
|
+
|
71
|
+
$('form.section_type input[type=submit]').hide();
|
72
|
+
$('form.section_type input[type=radio]').change(function(e) {
|
73
|
+
$('form.section_type').submit();
|
74
|
+
})
|
75
|
+
});
|
@@ -0,0 +1,22 @@
|
|
1
|
+
var Excerpt = {
|
2
|
+
show: function(event) {
|
3
|
+
event.preventDefault();
|
4
|
+
$('#article_excerpt_wrapper').show();
|
5
|
+
$('#add_excerpt_hint').hide();
|
6
|
+
$('#hide_excerpt_hint').show();
|
7
|
+
$('#article_excerpt').removeAttr('disabled');
|
8
|
+
},
|
9
|
+
|
10
|
+
hide: function(event) {
|
11
|
+
event.preventDefault();
|
12
|
+
$('#article_excerpt_wrapper').hide();
|
13
|
+
$('#hide_excerpt_hint').hide();
|
14
|
+
$('#add_excerpt_hint').show();
|
15
|
+
$('#article_excerpt').attr('disabled', 'disabled');
|
16
|
+
}
|
17
|
+
}
|
18
|
+
|
19
|
+
$(document).ready(function() {
|
20
|
+
$('a#add_excerpt').click(Excerpt.show);
|
21
|
+
$('a#hide_excerpt').click(Excerpt.hide);
|
22
|
+
});
|
@@ -0,0 +1,14 @@
|
|
1
|
+
var CachedPage = {
|
2
|
+
clearAll: function(event) {
|
3
|
+
event.preventDefault();
|
4
|
+
$.ajax({
|
5
|
+
url: this.href,
|
6
|
+
type: 'delete',
|
7
|
+
dataType: 'script'
|
8
|
+
});
|
9
|
+
}
|
10
|
+
}
|
11
|
+
|
12
|
+
$(document).ready(function() {
|
13
|
+
$('td.actions a.clear').click(CachedPage.clearAll);
|
14
|
+
});
|
@@ -0,0 +1,279 @@
|
|
1
|
+
TableTree = {
|
2
|
+
tableDnDOptions: {
|
3
|
+
onDragClass: 'drag',
|
4
|
+
onDragStart: function(table, row) {
|
5
|
+
row.level = 1;
|
6
|
+
TableTree.startOffset = jQuery.tableDnD.mouseOffset.x;
|
7
|
+
$(row).mousemove(TableTree.mousemove);
|
8
|
+
if (node = $(row).ttnode()) node.dragStart();
|
9
|
+
},
|
10
|
+
onDrag: function(table, row) {
|
11
|
+
TableTree.current_table.dirty = true;
|
12
|
+
if (node = $(row).ttnode()) node.update_children();
|
13
|
+
},
|
14
|
+
onDrop: function(table, row) {
|
15
|
+
$(row).unbind('mousemove', TableTree.mousemove);
|
16
|
+
if (node = $(row).ttnode()) node.drop();
|
17
|
+
TableTree.current_table.rebuild();
|
18
|
+
TableTree.current_table.update_remote(row);
|
19
|
+
},
|
20
|
+
onAllowDrop: function(draggedRow, row, movingDown) {
|
21
|
+
var node = $(row).ttnode();
|
22
|
+
next = movingDown ? $(node.next_row_sibling()).ttnode() : node;
|
23
|
+
if (next) {
|
24
|
+
level = next.parent.level ? next.parent.level : 0;
|
25
|
+
if (level >= $(draggedRow).ttnode().level) return false;
|
26
|
+
}
|
27
|
+
return $(row).ttnode() ? true : false;
|
28
|
+
}
|
29
|
+
},
|
30
|
+
toggle: function(table, type, collection_url) {
|
31
|
+
TableTree.current_table ? TableTree.teardown(table) : TableTree.setup(table, type, collection_url);
|
32
|
+
},
|
33
|
+
setup: function(table, type, collection_url) {
|
34
|
+
table.tableDnD(TableTree.tableDnDOptions);
|
35
|
+
TableTree.current_table = new TableTree.Table($(table).get(0), type, collection_url);
|
36
|
+
TableTree.current_table.setSortable();
|
37
|
+
},
|
38
|
+
teardown: function(table) {
|
39
|
+
// TableTree.current_table.update_remote();
|
40
|
+
jQuery.tableDnD.teardown(table);
|
41
|
+
TableTree.current_table.setUnsortable();
|
42
|
+
TableTree.current_table = null;
|
43
|
+
},
|
44
|
+
level: function(element) {
|
45
|
+
var match = element.className.match(/level_([\d]+)/);
|
46
|
+
return match ? parseInt(match[1]) : 0;
|
47
|
+
},
|
48
|
+
setSortable: function(element) {
|
49
|
+
if (element.tagName != 'TD') return
|
50
|
+
$('a', element).each(function() {
|
51
|
+
$(this).hide();
|
52
|
+
element.appendChild(document.createTextNode($(this).text()))
|
53
|
+
});
|
54
|
+
},
|
55
|
+
setUnsortable: function(element) {
|
56
|
+
if (element.tagName != 'TD') return;
|
57
|
+
$('a', element).each(function() { $(this).show(); });
|
58
|
+
$('img.spinner', element).remove();
|
59
|
+
element.removeChild(element.lastChild);
|
60
|
+
},
|
61
|
+
mousemove: function(event) {
|
62
|
+
var offset = jQuery.tableDnD.getMouseOffset(this, event).x - TableTree.startOffset;
|
63
|
+
if(offset > 25) {
|
64
|
+
TableTree.current_table.dirty = true;
|
65
|
+
$(this).ttnode().increment_level(event);
|
66
|
+
} else if(offset < -25) {
|
67
|
+
TableTree.current_table.dirty = true;
|
68
|
+
$(this).ttnode().decrement_level(event);
|
69
|
+
}
|
70
|
+
},
|
71
|
+
Base: function() {},
|
72
|
+
Table: function(table, type, collection_url) {
|
73
|
+
this.table = table;
|
74
|
+
this.type = type;
|
75
|
+
this.collection_url = collection_url;
|
76
|
+
this.rebuild();
|
77
|
+
},
|
78
|
+
Node: function(parent, element, level) {
|
79
|
+
var _this = this;
|
80
|
+
this.parent = parent;
|
81
|
+
this.element = element;
|
82
|
+
this.level = level;
|
83
|
+
|
84
|
+
this.children = this.find_children().map(function() {
|
85
|
+
var level = TableTree.level(this);
|
86
|
+
if(level == _this.level + 1) { return new TableTree.Node(_this, this, level); }
|
87
|
+
});
|
88
|
+
}
|
89
|
+
}
|
90
|
+
|
91
|
+
TableTree.Base.prototype = {
|
92
|
+
find_node: function(element) {
|
93
|
+
for (var i = 0; i < this.children.length; i++) {
|
94
|
+
var child = this.children[i];
|
95
|
+
if (this.children[i].element == element) {
|
96
|
+
return this.children[i];
|
97
|
+
} else {
|
98
|
+
var result = this.children[i].find_node(element);
|
99
|
+
if (result) return result;
|
100
|
+
}
|
101
|
+
}
|
102
|
+
}
|
103
|
+
}
|
104
|
+
TableTree.Table.prototype = jQuery.extend(new TableTree.Base(), {
|
105
|
+
rebuild: function() {
|
106
|
+
var _this = this;
|
107
|
+
this.children = $('tr', this.table).map(function() {
|
108
|
+
if(TableTree.level(this) == 1) { return new TableTree.Node(_this, this, 1); }
|
109
|
+
});
|
110
|
+
},
|
111
|
+
setSortable: function() {
|
112
|
+
this.children.each(function() { this.setSortable(); });
|
113
|
+
},
|
114
|
+
setUnsortable: function() {
|
115
|
+
this.children.each(function() { this.setUnsortable(); });
|
116
|
+
},
|
117
|
+
update_remote: function(row) {
|
118
|
+
if(!this.dirty) return;
|
119
|
+
this.dirty = false;
|
120
|
+
_this = this;
|
121
|
+
|
122
|
+
this.show_spinner(row);
|
123
|
+
$.ajax({
|
124
|
+
type: "POST",
|
125
|
+
url: this.collection_url,
|
126
|
+
data: jQuery.extend(this.serialize(row), { authenticity_token: window._auth_token, '_method': 'put' }),
|
127
|
+
success: function(msg) { _this.hide_spinner(row); },
|
128
|
+
error: function(msg) { _this.hide_spinner(row); }
|
129
|
+
});
|
130
|
+
},
|
131
|
+
serialize: function(row) {
|
132
|
+
row = $(row).ttnode();
|
133
|
+
data = {};
|
134
|
+
data[this.type + '[' + row.id() + '][parent_id]'] = row.parent_id();
|
135
|
+
data[this.type +'[' + row.id() + '][left_id]'] = row.left_id();
|
136
|
+
return data;
|
137
|
+
},
|
138
|
+
show_spinner: function(row) {
|
139
|
+
img = document.createElement('img');
|
140
|
+
img.src = '/images/adva_cms/indicator.gif';
|
141
|
+
img.className = 'spinner';
|
142
|
+
$('td', row)[0].appendChild(img);
|
143
|
+
},
|
144
|
+
hide_spinner: function(row) {
|
145
|
+
cell = $('td', row)[0];
|
146
|
+
cell.removeChild(cell.lastChild);
|
147
|
+
}
|
148
|
+
});
|
149
|
+
|
150
|
+
TableTree.Node.prototype = jQuery.extend(new TableTree.Base(), {
|
151
|
+
find_children: function() {
|
152
|
+
var lvl = this.level;
|
153
|
+
var stop = false;
|
154
|
+
return this.row_siblings().slice(this.row_index() + 1).filter(function() {
|
155
|
+
var level = TableTree.level(this);
|
156
|
+
if(lvl == level) stop = true; // how to break from a jquery iterator?
|
157
|
+
return !stop && lvl + 1 == level;
|
158
|
+
});
|
159
|
+
},
|
160
|
+
depth: function() {
|
161
|
+
if (this.children.length > 0) {
|
162
|
+
return Math.max.apply(Math, this.children.map(function() { return this.depth() }).get());
|
163
|
+
} else {
|
164
|
+
return this.level;
|
165
|
+
}
|
166
|
+
},
|
167
|
+
siblings: function() {
|
168
|
+
return this.parent.children;
|
169
|
+
},
|
170
|
+
id: function() {
|
171
|
+
return this.element ? this.to_int(this.element.id) : 'null';
|
172
|
+
},
|
173
|
+
parent_id: function() {
|
174
|
+
return this.parent.element ? this.to_int(this.parent.element.id) : 'null';
|
175
|
+
},
|
176
|
+
left_id: function() {
|
177
|
+
left = this.left()
|
178
|
+
return left ? this.to_int(left.element.id) : 'null';
|
179
|
+
},
|
180
|
+
left: function() {
|
181
|
+
siblings = this.siblings().get();
|
182
|
+
ix = siblings.indexOf(this);
|
183
|
+
if(ix > 0) return siblings[ix - 1];
|
184
|
+
},
|
185
|
+
to_int: function(str) {
|
186
|
+
if(str) return str.replace(/[\D]+/, '')
|
187
|
+
},
|
188
|
+
next_row_sibling: function () {
|
189
|
+
return this.row_siblings()[this.row_index() + 1];
|
190
|
+
},
|
191
|
+
row_siblings: function() {
|
192
|
+
if(!this._row_siblings) { this._row_siblings = $(this.element).parent().children(); }
|
193
|
+
return this._row_siblings;
|
194
|
+
},
|
195
|
+
row_index: function() {
|
196
|
+
return this.row_siblings().get().indexOf(this.element);
|
197
|
+
},
|
198
|
+
dragStart: function() {
|
199
|
+
$(this.element).addClass('drag');
|
200
|
+
this.children.each(function() { this.dragStart(); })
|
201
|
+
},
|
202
|
+
drop: function() {
|
203
|
+
$(this.element).removeClass('drag');
|
204
|
+
this.children.each(function() { this.drop(); })
|
205
|
+
this.adjust_level();
|
206
|
+
},
|
207
|
+
increment_level: function(event) {
|
208
|
+
var prev = $(this.element).prev().ttnode();
|
209
|
+
if(!prev || prev.level < this.level || this.depth() >= 5) return;
|
210
|
+
this.update_level(event, this.level + 1);
|
211
|
+
},
|
212
|
+
decrement_level: function(event) {
|
213
|
+
if(this.level == 1) return;
|
214
|
+
this.update_level(event, this.level - 1);
|
215
|
+
},
|
216
|
+
update_level: function(event, level) {
|
217
|
+
if (event) TableTree.startOffset = jQuery.tableDnD.getMouseOffset(this.element, event).x;
|
218
|
+
|
219
|
+
$(this.element).removeClass('level_' + this.level);
|
220
|
+
$(this.element).addClass('level_' + level);
|
221
|
+
|
222
|
+
this.level = level;
|
223
|
+
this.children.each(function() { this.update_level(event, level + 1); });
|
224
|
+
},
|
225
|
+
adjust_level: function() {
|
226
|
+
var prev = $(this.element).prev().ttnode();
|
227
|
+
if(!prev) {
|
228
|
+
this.update_level(null, 1);
|
229
|
+
} else if(prev.level + 1 < this.level) {
|
230
|
+
this.update_level(null, prev.level + 1);
|
231
|
+
}
|
232
|
+
},
|
233
|
+
update_children: function() {
|
234
|
+
this.children.each(function() { this.element.parentNode.removeChild(this.element); });
|
235
|
+
var _this = this;
|
236
|
+
var _next = _this.element.nextSibling;
|
237
|
+
this.children.each(function() { _this.element.parentNode.insertBefore(this.element, _next); });
|
238
|
+
this.children.each(function() { this.update_children() });
|
239
|
+
},
|
240
|
+
setSortable: function() {
|
241
|
+
$(this.element).children().each(function(ix) { ix == 0 ? TableTree.setSortable(this) : $(this).hide(); });
|
242
|
+
this.children.each(function() { this.setSortable(); });
|
243
|
+
},
|
244
|
+
setUnsortable: function() {
|
245
|
+
$(this.element).children().each(function(ix) { ix == 0 ? TableTree.setUnsortable(this) : $(this).show(); });
|
246
|
+
this.children.each(function() { this.setUnsortable(); });
|
247
|
+
}
|
248
|
+
});
|
249
|
+
|
250
|
+
jQuery.fn.extend({
|
251
|
+
ttnode: function() {
|
252
|
+
var subject = this.push ? this[0] : this;
|
253
|
+
return TableTree.current_table.find_node(subject);
|
254
|
+
}
|
255
|
+
});
|
256
|
+
|
257
|
+
jQuery.extend(jQuery.tableDnD, {
|
258
|
+
teardown: function(table) {
|
259
|
+
jQuery('tr', table).each(function() { $(this).unbind('mousedown'); }).css('cursor', 'auto');
|
260
|
+
jQuery.tableDnD.dragObject = null;
|
261
|
+
jQuery.tableDnD.currentTable = null;
|
262
|
+
jQuery.tableDnD.mouseOffset = null;
|
263
|
+
}
|
264
|
+
});
|
265
|
+
|
266
|
+
tableDnD {
|
267
|
+
toggle: function() {
|
268
|
+
if (table.hasClass('tree')) {
|
269
|
+
setupTree()
|
270
|
+
}
|
271
|
+
}
|
272
|
+
// aslödkjföksdfk
|
273
|
+
Tree {
|
274
|
+
|
275
|
+
}
|
276
|
+
}
|
277
|
+
|
278
|
+
|
279
|
+
|
@@ -0,0 +1,10 @@
|
|
1
|
+
$(document).ready(function() {
|
2
|
+
if (reorder = $('a.reorder')) {
|
3
|
+
reorder.click(function(event) {
|
4
|
+
$(this).parent().toggleClass('active');
|
5
|
+
TableTree.toggle($('table.list'), this.id.replace('reorder_', ''), this.href);
|
6
|
+
event.preventDefault();
|
7
|
+
return false;
|
8
|
+
})
|
9
|
+
}
|
10
|
+
});
|
@@ -0,0 +1,38 @@
|
|
1
|
+
var LoginLinks = {
|
2
|
+
init: function() {
|
3
|
+
var user_id = Cookie.get('uid');
|
4
|
+
var user_name = decodeURIComponent(Cookie.get('uname')).replace(/\+/g, " ");
|
5
|
+
try {
|
6
|
+
LoginLinks.update_user_links(user_name)
|
7
|
+
} catch(err) {}
|
8
|
+
if (user_id) {
|
9
|
+
try {
|
10
|
+
$('#logout_links').show();
|
11
|
+
$('#login_links').hide();
|
12
|
+
} catch(err) {}
|
13
|
+
}
|
14
|
+
},
|
15
|
+
|
16
|
+
update_user_links: function(user_name) {
|
17
|
+
if($('#logout_link')) $('#logout_link').href = $('#logout_link').href + "?return_to=" + escape(document.location.href);
|
18
|
+
if($('#login_link')) $('#login_link').href = $('#login_link').href + "?return_to=" + escape(document.location.href);
|
19
|
+
|
20
|
+
$('span.user_name').each(function() {
|
21
|
+
$(this).html(user_name);
|
22
|
+
});
|
23
|
+
}
|
24
|
+
};
|
25
|
+
|
26
|
+
$(document).ready(function() {
|
27
|
+
if($('#logout_links')) {
|
28
|
+
LoginLinks.init();
|
29
|
+
}
|
30
|
+
jQuery('#lang').bind('change',function(){
|
31
|
+
url = location.href;
|
32
|
+
if(url.match(/\/[\w]{2}\/admin/)) {
|
33
|
+
location.href = url.replace(/\/[\w]{2}\/admin/, '/' + jQuery(this).val() + '/admin');
|
34
|
+
} else {
|
35
|
+
location.href = url.replace(/\/admin/, '/' + jQuery(this).val() + '/admin');
|
36
|
+
}
|
37
|
+
});
|
38
|
+
});
|
@@ -0,0 +1,135 @@
|
|
1
|
+
var CommentForm = {
|
2
|
+
init: function() {
|
3
|
+
var user_name = unescape(Cookie.get('uname')).replace(/\+/g, " ");
|
4
|
+
if (user_name) {
|
5
|
+
try { $$('#registered_author span')[0].update(user_name); } catch(err) {}
|
6
|
+
try { $('registered_author').show(); } catch(err) {}
|
7
|
+
try { $('anonymous_author').hide(); } catch(err) {}
|
8
|
+
}
|
9
|
+
}
|
10
|
+
}
|
11
|
+
|
12
|
+
var LoginLinks = {
|
13
|
+
init: function() {
|
14
|
+
var user_id = Cookie.get('uid');
|
15
|
+
var user_name = unescape(Cookie.get('uname')).replace(/\+/g, " ");
|
16
|
+
try {
|
17
|
+
this.update_user_links(user_name)
|
18
|
+
} catch(err) {}
|
19
|
+
if (user_id) {
|
20
|
+
try {
|
21
|
+
$('logout_links').show();
|
22
|
+
$('login_links').hide();
|
23
|
+
} catch(err) {}
|
24
|
+
}
|
25
|
+
},
|
26
|
+
|
27
|
+
update_user_links: function(user_name) {
|
28
|
+
if($('logout_link')) $('logout_link').href = $('logout_link').href + "?return_to=" + escape(document.location.href);
|
29
|
+
if($('login_link')) $('login_link').href = $('login_link').href + "?return_to=" + escape(document.location.href);
|
30
|
+
|
31
|
+
$$('span.user_name').invoke('update', user_name);
|
32
|
+
}
|
33
|
+
}
|
34
|
+
|
35
|
+
/* Date functions */
|
36
|
+
|
37
|
+
Date.UTCNow = function() {
|
38
|
+
d = new Date();
|
39
|
+
utc = new Date(Date.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds()));
|
40
|
+
// we need to correct the timezone offset because JS sucks really bad with timezones ...
|
41
|
+
return new Date(utc.getTime() + utc.getTimezoneOffset()*60000);
|
42
|
+
}
|
43
|
+
|
44
|
+
// parse an ISO8601 UTC date string (YYYY-mm-ddZHH:MM:SSZ)
|
45
|
+
Date.parseISO8601 = function(iso8601_date) {
|
46
|
+
return new Date(Date.parse(iso8601_date.replace(/-/g, '/').replace('T', ' ').substr(0, 19))); // always has exactly 19 chars
|
47
|
+
}
|
48
|
+
|
49
|
+
distanceOfTimeInWords = function(seconds) {
|
50
|
+
d = seconds/60; // in minutes
|
51
|
+
|
52
|
+
if (d < 1) return 'less than a minute';
|
53
|
+
|
54
|
+
d = Math.ceil(d); // if it's more than a minute, ceil it
|
55
|
+
if (d < 50) return (d + ' minute' + (d == 1 ? '' : 's'));
|
56
|
+
if (d < 90) return 'about one hour';
|
57
|
+
if (d < 1080) return (Math.round(d/60) + ' hours');
|
58
|
+
if (d < 1440) return 'one day';
|
59
|
+
if (d < 2880) return 'about one day';
|
60
|
+
else return (Math.round(d/1440) + ' days');
|
61
|
+
}
|
62
|
+
|
63
|
+
timeAgoInWords = function(iso8601_date) {
|
64
|
+
utc_date = Date.parseISO8601(iso8601_date);
|
65
|
+
utc_now = Date.UTCNow();
|
66
|
+
d = (utc_now.getTime() - utc_date.getTime())/1000; // in seconds
|
67
|
+
if (d > 0) {
|
68
|
+
return distanceOfTimeInWords(d) + ' ago';
|
69
|
+
} else {
|
70
|
+
return 'in '+ distanceOfTimeInWords(-d);
|
71
|
+
}
|
72
|
+
}
|
73
|
+
|
74
|
+
createAndFormatDateSpan = function(abbr) {
|
75
|
+
// create a new span element and set its title to the abbr's innerHTML and its value to the timeAgoInWords string
|
76
|
+
abbr.update(new Element('span', { title: abbr.innerHTML }).update(timeAgoInWords(abbr.title))); // only used for past dates right now so we can safely use time_ago_in_words here
|
77
|
+
}
|
78
|
+
|
79
|
+
/* Link functions */
|
80
|
+
|
81
|
+
// determine if a given link is an outbound link
|
82
|
+
URI.parseOptions.strictMode = true;
|
83
|
+
|
84
|
+
GoogleAnalyticsTracking = {};
|
85
|
+
|
86
|
+
GoogleAnalyticsTracking.isOutboundLink = function(link) {
|
87
|
+
targetURI = URI.parse(link);
|
88
|
+
currentURI = URI.parse(window.location);
|
89
|
+
/*
|
90
|
+
targetHost = link.split('/')[2].replace(/www\./, ''); // [0] is the protocol, [1] is empty
|
91
|
+
currentHost = window.location.host.replace(/www\./, '');
|
92
|
+
*/
|
93
|
+
return ['http', 'https', 'ftp'].include(targetURI.protocol) && targetURI.host != currentURI.host;
|
94
|
+
}
|
95
|
+
|
96
|
+
// track the outbound link with Google Analytics
|
97
|
+
if (typeof(pageTracker) == 'undefined') {
|
98
|
+
pageTracker = null;
|
99
|
+
}
|
100
|
+
GoogleAnalyticsTracking.trackOutboundLink = function(link) {
|
101
|
+
if(pageTracker && GoogleAnalyticsTracking.isOutboundLink(link.href)) {
|
102
|
+
hostName = URI.parse(link).host.replace(/www\./, '');;
|
103
|
+
//hostName = link.href.split('/')[2].replace(/www\./, '');
|
104
|
+
pageTracker._trackEvent('Outbound links [' + hostName + ']', 'Click', link.href);
|
105
|
+
//window.location.href = link.href;
|
106
|
+
}
|
107
|
+
}
|
108
|
+
|
109
|
+
// find all outbound links and mark them accordingly
|
110
|
+
GoogleAnalyticsTracking.markOutboundLinks = function() {
|
111
|
+
$$('a').each(function(link) {
|
112
|
+
if(GoogleAnalyticsTracking.isOutboundLink(link.href)) {
|
113
|
+
link.addClassName('outbound');
|
114
|
+
link.writeAttribute('onclick', "GoogleAnalyticsTracking.trackOutboundLink(this); return false;");
|
115
|
+
}
|
116
|
+
});
|
117
|
+
}
|
118
|
+
|
119
|
+
/* event handlers */
|
120
|
+
Event.onReady(function() {
|
121
|
+
if($('anonymous_author')) {
|
122
|
+
CommentForm.init();
|
123
|
+
}
|
124
|
+
if($('logout_links')) {
|
125
|
+
LoginLinks.init();
|
126
|
+
}
|
127
|
+
// parse all microformatted dates and re-format them as time distance
|
128
|
+
$$('abbr.datetime').each(function(abbr) {
|
129
|
+
createAndFormatDateSpan(abbr);
|
130
|
+
});
|
131
|
+
// mark outbound links and apply hook
|
132
|
+
if(pageTracker) {
|
133
|
+
GoogleAnalyticsTracking.markOutboundLinks();
|
134
|
+
}
|
135
|
+
});
|