zen 0.2.7 → 0.2.8
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +15 -0
- data/.mailmap +2 -0
- data/.rvmrc +2 -0
- data/.travis.yml +8 -3
- data/AUTHORS +1 -2
- data/CHANGELOG.md +48 -17
- data/README.md +44 -39
- data/Rakefile +4 -0
- data/bin/zen +5 -30
- data/lib/zen.rb +13 -19
- data/lib/zen/asset.rb +99 -64
- data/lib/zen/bin/create.rb +94 -0
- data/lib/zen/bin/runner.rb +118 -0
- data/lib/zen/controller/admin_controller.rb +52 -36
- data/lib/zen/controller/base_controller.rb +5 -5
- data/lib/zen/controller/frontend_controller.rb +7 -7
- data/lib/zen/controller/main_controller.rb +12 -10
- data/lib/zen/controller/preview.rb +15 -11
- data/lib/zen/helper/acl.rb +73 -53
- data/lib/zen/helper/blue_form_vendor.rb +689 -0
- data/lib/zen/helper/breadcrumb.rb +23 -19
- data/lib/zen/helper/message.rb +3 -3
- data/lib/zen/helper/theme.rb +18 -13
- data/lib/zen/language.rb +62 -58
- data/lib/zen/language/en/zen_general.yml +2 -4
- data/lib/zen/language/nl/zen_general.yml +2 -4
- data/lib/zen/layout/admin.xhtml +3 -12
- data/lib/zen/layout/login.xhtml +1 -6
- data/lib/zen/model/methods.rb +6 -6
- data/lib/zen/model/settings.rb +5 -4
- data/lib/zen/package.rb +47 -38
- data/lib/zen/package/all.rb +3 -5
- data/lib/zen/package/base.rb +7 -7
- data/lib/zen/package/categories/lib/categories.rb +8 -3
- data/lib/zen/package/categories/lib/categories/controller/categories.rb +81 -55
- data/lib/zen/package/categories/lib/categories/controller/category_groups.rb +45 -44
- data/lib/zen/package/categories/lib/categories/helper/category.rb +88 -0
- data/lib/zen/package/categories/lib/categories/language/en/categories.yml +5 -4
- data/lib/zen/package/categories/lib/categories/language/en/category_groups.yml +5 -4
- data/lib/zen/package/categories/lib/categories/language/nl/categories.yml +5 -4
- data/lib/zen/package/categories/lib/categories/language/nl/category_groups.yml +5 -4
- data/lib/zen/package/categories/lib/categories/model/category.rb +15 -13
- data/lib/zen/package/categories/lib/categories/model/category_group.rb +3 -3
- data/lib/zen/package/categories/lib/categories/plugin/categories.rb +36 -25
- data/lib/zen/package/categories/lib/categories/view/admin/categories/form.xhtml +49 -56
- data/lib/zen/package/categories/lib/categories/view/admin/categories/index.xhtml +48 -35
- data/lib/zen/package/categories/lib/categories/view/admin/category-groups/form.xhtml +36 -29
- data/lib/zen/package/categories/lib/categories/view/admin/category-groups/index.xhtml +42 -37
- data/lib/zen/package/comments/lib/comments.rb +4 -1
- data/lib/zen/package/comments/lib/comments/controller/comments.rb +39 -32
- data/lib/zen/package/comments/lib/comments/controller/comments_form.rb +45 -26
- data/lib/zen/package/comments/lib/comments/helper/comment.rb +35 -0
- data/lib/zen/package/comments/lib/comments/language/en/comments.yml +9 -7
- data/lib/zen/package/comments/lib/comments/language/nl/comments.yml +10 -8
- data/lib/zen/package/comments/lib/comments/model/comment.rb +31 -17
- data/lib/zen/package/comments/lib/comments/model/comment_status.rb +15 -0
- data/lib/zen/package/comments/lib/comments/plugin/anti_spam.rb +27 -18
- data/lib/zen/package/comments/lib/comments/plugin/comments.rb +25 -20
- data/lib/zen/package/comments/lib/comments/view/admin/comments/form.xhtml +61 -54
- data/lib/zen/package/comments/lib/comments/view/admin/comments/index.xhtml +38 -23
- data/lib/zen/package/comments/migrations/1308774099_comment_status.rb +60 -0
- data/lib/zen/package/custom_fields/lib/custom_fields.rb +33 -7
- data/lib/zen/package/custom_fields/lib/custom_fields/blue_form_parameters.rb +209 -0
- data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_field_groups.rb +50 -47
- data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_field_types.rb +215 -0
- data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_fields.rb +111 -73
- data/lib/zen/package/custom_fields/lib/custom_fields/helper/custom_field.rb +79 -0
- data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_field_groups.yml +20 -19
- data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_field_types.yml +40 -0
- data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_fields.yml +34 -32
- data/lib/zen/package/custom_fields/lib/custom_fields/language/nl/custom_field_groups.yml +5 -4
- data/lib/zen/package/custom_fields/lib/custom_fields/language/nl/custom_field_types.yml +40 -0
- data/lib/zen/package/custom_fields/lib/custom_fields/language/nl/custom_fields.yml +18 -16
- data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field.rb +31 -11
- data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_method.rb +15 -0
- data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_type.rb +50 -0
- data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_value.rb +28 -7
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/form.xhtml +33 -28
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/index.xhtml +48 -46
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-types/form.xhtml +61 -0
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-types/index.xhtml +93 -0
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/form.xhtml +105 -99
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/index.xhtml +43 -39
- data/lib/zen/package/custom_fields/migrations/1295255665_create_schema.rb +47 -16
- data/lib/zen/package/custom_fields/migrations/1310659580_custom_field_types.rb +148 -0
- data/lib/zen/package/custom_fields/migrations/1311694920_rename_css_class.rb +11 -0
- data/lib/zen/package/menus/lib/menus/controller/menu_items.rb +40 -35
- data/lib/zen/package/menus/lib/menus/controller/menus.rb +47 -43
- data/lib/zen/package/menus/lib/menus/helper/{menu_item.rb → menu.rb} +42 -15
- data/lib/zen/package/menus/lib/menus/language/en/menu_items.yml +5 -5
- data/lib/zen/package/menus/lib/menus/language/en/menus.yml +9 -8
- data/lib/zen/package/menus/lib/menus/language/nl/menu_items.yml +8 -8
- data/lib/zen/package/menus/lib/menus/language/nl/menus.yml +11 -10
- data/lib/zen/package/menus/lib/menus/model/menu.rb +5 -5
- data/lib/zen/package/menus/lib/menus/model/menu_item.rb +6 -5
- data/lib/zen/package/menus/lib/menus/plugin/menus.rb +41 -43
- data/lib/zen/package/menus/lib/menus/view/admin/menu-items/form.xhtml +59 -63
- data/lib/zen/package/menus/lib/menus/view/admin/menu-items/index.xhtml +35 -30
- data/lib/zen/package/menus/lib/menus/view/admin/menus/form.xhtml +46 -37
- data/lib/zen/package/menus/lib/menus/view/admin/menus/index.xhtml +37 -37
- data/lib/zen/package/menus/migrations/1297184342_create_schema.rb +5 -5
- data/lib/zen/package/menus/migrations/1308671733_rename_order_column.rb +11 -0
- data/lib/zen/package/menus/migrations/1311695030_rename_css_class.rb +17 -0
- data/lib/zen/package/sections/lib/sections.rb +18 -11
- data/lib/zen/package/sections/lib/sections/controller/section_entries.rb +115 -109
- data/lib/zen/package/sections/lib/sections/controller/sections.rb +72 -50
- data/lib/zen/package/sections/lib/sections/helper/section.rb +53 -0
- data/lib/zen/package/sections/lib/sections/language/en/section_entries.yml +5 -4
- data/lib/zen/package/sections/lib/sections/language/en/sections.yml +5 -4
- data/lib/zen/package/sections/lib/sections/language/nl/section_entries.yml +5 -4
- data/lib/zen/package/sections/lib/sections/language/nl/sections.yml +5 -4
- data/lib/zen/package/sections/lib/sections/model/section.rb +17 -9
- data/lib/zen/package/sections/lib/sections/model/section_entry.rb +192 -13
- data/lib/zen/package/sections/lib/sections/model/section_entry_status.rb +13 -0
- data/lib/zen/package/sections/lib/sections/plugin/section_entries.rb +60 -39
- data/lib/zen/package/sections/lib/sections/plugin/sections.rb +14 -11
- data/lib/zen/package/sections/lib/sections/view/admin/form.xhtml +100 -97
- data/lib/zen/package/sections/lib/sections/view/admin/index.xhtml +41 -39
- data/lib/zen/package/sections/lib/sections/view/admin/section-entries/form.xhtml +95 -215
- data/lib/zen/package/sections/lib/sections/view/admin/section-entries/index.xhtml +48 -40
- data/lib/zen/package/sections/migrations/1308672298_use_id_for_default_section.rb +40 -0
- data/lib/zen/package/sections/migrations/1308813320_section_entry_statuses.rb +58 -0
- data/lib/zen/package/settings/lib/settings/controller/settings.rb +5 -8
- data/lib/zen/package/settings/lib/settings/model/setting.rb +2 -37
- data/lib/zen/package/settings/lib/settings/plugin/setting_base.rb +18 -1
- data/lib/zen/package/settings/lib/settings/plugin/settings.rb +13 -7
- data/lib/zen/package/settings/lib/settings/view/admin/settings/index.xhtml +2 -1
- data/lib/zen/package/users/lib/users.rb +3 -1
- data/lib/zen/package/users/lib/users/controller/access_rules.rb +77 -60
- data/lib/zen/package/users/lib/users/controller/user_groups.rb +41 -36
- data/lib/zen/package/users/lib/users/controller/users.rb +48 -42
- data/lib/zen/package/users/lib/users/helper/users.rb +72 -0
- data/lib/zen/package/users/lib/users/language/en/access_rules.yml +6 -5
- data/lib/zen/package/users/lib/users/language/en/user_groups.yml +5 -4
- data/lib/zen/package/users/lib/users/language/en/users.yml +1 -0
- data/lib/zen/package/users/lib/users/language/nl/access_rules.yml +5 -4
- data/lib/zen/package/users/lib/users/language/nl/user_groups.yml +5 -4
- data/lib/zen/package/users/lib/users/language/nl/users.yml +1 -0
- data/lib/zen/package/users/lib/users/model/access_rule.rb +5 -1
- data/lib/zen/package/users/lib/users/model/user.rb +17 -10
- data/lib/zen/package/users/lib/users/public/admin/js/users/access_rules.js +10 -37
- data/lib/zen/package/users/lib/users/public/admin/js/users/lib/access_rules.js +49 -0
- data/lib/zen/package/users/lib/users/view/admin/access-rules/form.xhtml +105 -96
- data/lib/zen/package/users/lib/users/view/admin/access-rules/index.xhtml +48 -41
- data/lib/zen/package/users/lib/users/view/admin/user-groups/form.xhtml +42 -32
- data/lib/zen/package/users/lib/users/view/admin/user-groups/index.xhtml +43 -38
- data/lib/zen/package/users/lib/users/view/admin/users/form.xhtml +76 -67
- data/lib/zen/package/users/lib/users/view/admin/users/index.xhtml +43 -41
- data/lib/zen/package/users/lib/users/view/admin/users/login.xhtml +12 -9
- data/lib/zen/package/users/migrations/1295281013_create_schema.rb +2 -2
- data/lib/zen/plugin.rb +56 -50
- data/lib/zen/plugin/markup/lib/markup/markup.rb +33 -21
- data/lib/zen/public/admin/css/zen/buttons.css +11 -7
- data/lib/zen/public/admin/css/zen/datepicker.css +6 -6
- data/lib/zen/public/admin/css/zen/forms.css +2 -1
- data/lib/zen/public/admin/css/zen/general.css +15 -10
- data/lib/zen/public/admin/css/zen/layout.css +51 -20
- data/lib/zen/public/admin/css/zen/tables.css +39 -11
- data/lib/zen/public/admin/css/zen/tabs.css +6 -4
- data/lib/zen/public/admin/css/zen/window.css +11 -11
- data/lib/zen/public/{favicon.ico → admin/favicon.ico} +0 -0
- data/lib/zen/public/admin/images/zen/icons/asc.png +0 -0
- data/lib/zen/public/admin/images/zen/icons/desc.png +0 -0
- data/lib/zen/public/admin/js/vendor/datepicker.js +0 -11
- data/lib/zen/public/admin/js/{mootools → vendor/mootools}/core.js +0 -1
- data/lib/zen/public/admin/js/{mootools → vendor/mootools}/more.js +100 -29
- data/lib/zen/public/admin/js/zen/index.js +48 -0
- data/lib/zen/public/admin/js/zen/lib/asset.js +111 -0
- data/lib/zen/public/admin/js/zen/{editor.js → lib/editor.js} +107 -127
- data/lib/zen/public/admin/js/zen/{editor → lib/editor}/markdown.js +7 -9
- data/lib/zen/public/admin/js/zen/{editor → lib/editor}/textile.js +7 -9
- data/lib/zen/public/admin/js/zen/lib/html_table.js +143 -0
- data/lib/zen/public/admin/js/zen/{tabs.js → lib/tabs.js} +40 -37
- data/lib/zen/public/admin/js/zen/{window.js → lib/window.js} +24 -20
- data/lib/zen/spec/bacon/color_output.rb +39 -0
- data/lib/zen/spec/helper.rb +152 -0
- data/lib/zen/spec/simplecov.rb +22 -0
- data/lib/zen/task/build.rake +20 -43
- data/lib/zen/task/clean.rake +2 -6
- data/lib/zen/task/db.rake +8 -12
- data/lib/zen/task/package.rake +4 -10
- data/lib/zen/task/plugin.rake +3 -9
- data/lib/zen/task/proto.rake +0 -62
- data/lib/zen/task/test.rake +6 -3
- data/lib/zen/task/theme.rake +4 -11
- data/lib/zen/theme.rb +22 -24
- data/lib/zen/validation.rb +34 -27
- data/lib/zen/version.rb +2 -8
- data/lib/zen/view/head.xhtml +7 -0
- data/lib/zen/view/main.xhtml +7 -22
- data/{proto/package/migrations → pkg}/.gitkeep +0 -0
- data/proto/app/app.rb +1 -0
- data/proto/app/config/config.rb +5 -4
- data/proto/app/config/database.rb +19 -41
- data/proto/app/config/middlewares.rb +32 -29
- data/proto/{package/lib/package/view/admin/package/index.xhtml → app/log/database/dev/.gitkeep} +0 -0
- data/proto/app/log/database/live/.gitkeep +0 -0
- data/spec/Rakefile +26 -0
- data/spec/fixtures/zen/asset.rb +18 -0
- data/spec/fixtures/zen/helper/acl.rb +39 -0
- data/spec/fixtures/zen/helper/message.rb +19 -0
- data/spec/fixtures/zen/language/en/spec.yml +10 -0
- data/spec/fixtures/zen/language/nl/spec.yml +7 -0
- data/spec/fixtures/zen/package.rb +17 -0
- data/spec/fixtures/zen/package/comments/controller/comments_form.rb +27 -0
- data/spec/fixtures/zen/package/settings/plugin/settings.rb +20 -0
- data/spec/fixtures/zen/plugin.rb +7 -0
- data/spec/fixtures/zen/theme/404.xhtml +1 -0
- data/spec/fixtures/zen/theme/default-section/index.xhtml +1 -0
- data/spec/fixtures/zen/theme/helper/404.xhtml +1 -0
- data/spec/fixtures/zen/theme/helper/partial.xhtml +1 -0
- data/spec/fixtures/zen/theme/helper/wrong_partial.xhtml +1 -0
- data/spec/fixtures/zen/theme/partials/partial.xhtml +1 -0
- data/spec/fixtures/zen/theme/theme.rb +11 -0
- data/spec/fixtures/zen/validation.rb +22 -0
- data/spec/helper.rb +41 -0
- data/spec/zen/all.rb +5 -0
- data/spec/zen/asset.rb +97 -0
- data/spec/zen/bin/create.rb +89 -0
- data/spec/zen/bin/runner.rb +47 -0
- data/spec/zen/controller/admin_controller.rb +26 -0
- data/spec/zen/controller/main_controller.rb +81 -0
- data/spec/zen/controller/preview.rb +33 -0
- data/spec/zen/helper/acl.rb +149 -0
- data/spec/zen/helper/breadcrumb.rb +38 -0
- data/spec/zen/helper/message.rb +31 -0
- data/spec/zen/helper/theme.rb +58 -0
- data/spec/zen/language.rb +55 -0
- data/spec/zen/package.rb +23 -0
- data/spec/zen/package/categories/controller/categories.rb +123 -0
- data/spec/zen/package/categories/controller/category_groups.rb +108 -0
- data/spec/zen/package/categories/helper/category.rb +75 -0
- data/spec/zen/package/categories/plugin/categories.rb +92 -0
- data/spec/zen/package/comments/controller/comments.rb +134 -0
- data/spec/zen/package/comments/controller/comments_form.rb +343 -0
- data/spec/zen/package/comments/helper/comment.rb +47 -0
- data/spec/zen/package/comments/plugin/anti_spam.rb +59 -0
- data/spec/zen/package/comments/plugin/comments.rb +107 -0
- data/spec/zen/package/custom_fields/blue_form_parameters.rb +183 -0
- data/spec/zen/package/custom_fields/controller/custom_field_groups.rb +120 -0
- data/spec/zen/package/custom_fields/controller/custom_field_types.rb +169 -0
- data/spec/zen/package/custom_fields/controller/custom_fields.rb +158 -0
- data/spec/zen/package/custom_fields/helper/custom_field.rb +86 -0
- data/spec/zen/package/menus/controller/menu_items.rb +110 -0
- data/spec/zen/package/menus/controller/menus.rb +110 -0
- data/spec/zen/package/menus/helper/menu.rb +75 -0
- data/spec/zen/package/menus/plugin/menus.rb +120 -0
- data/spec/zen/package/sections/controller/section_entries.rb +201 -0
- data/spec/zen/package/sections/controller/sections.rb +116 -0
- data/spec/zen/package/sections/helper/section.rb +74 -0
- data/spec/zen/package/sections/plugin/section_entries.rb +161 -0
- data/spec/zen/package/sections/plugin/sections.rb +75 -0
- data/spec/zen/package/settings/controller/settings.rb +36 -0
- data/spec/zen/package/settings/plugin/settings.rb +33 -0
- data/spec/zen/package/users/controller/access_rules.rb +90 -0
- data/spec/zen/package/users/controller/user_groups.rb +101 -0
- data/spec/zen/package/users/controller/users.rb +130 -0
- data/spec/zen/package/users/helper/users.rb +97 -0
- data/spec/zen/plugin.rb +64 -0
- data/spec/zen/plugin/helper.rb +11 -0
- data/spec/zen/plugin/markup.rb +44 -0
- data/spec/zen/theme.rb +41 -0
- data/spec/zen/validation.rb +63 -0
- data/zen.gemspec +36 -0
- metadata +159 -113
- data/MANIFEST +0 -266
- data/lib/zen/bin/app.rb +0 -40
- data/lib/zen/ext/string.rb +0 -185
- data/lib/zen/helper/common.rb +0 -106
- data/lib/zen/package/categories/lib/categories/view/admin/categories/edit.xhtml +0 -7
- data/lib/zen/package/categories/lib/categories/view/admin/categories/new.xhtml +0 -7
- data/lib/zen/package/categories/lib/categories/view/admin/category-groups/edit.xhtml +0 -7
- data/lib/zen/package/categories/lib/categories/view/admin/category-groups/new.xhtml +0 -7
- data/lib/zen/package/comments/lib/comments/view/admin/comments/edit.xhtml +0 -7
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/edit.xhtml +0 -7
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/new.xhtml +0 -7
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/edit.xhtml +0 -7
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/new.xhtml +0 -7
- data/lib/zen/package/menus/lib/menus/view/admin/menu-items/edit.xhtml +0 -7
- data/lib/zen/package/menus/lib/menus/view/admin/menu-items/new.xhtml +0 -7
- data/lib/zen/package/menus/lib/menus/view/admin/menus/edit.xhtml +0 -7
- data/lib/zen/package/menus/lib/menus/view/admin/menus/new.xhtml +0 -7
- data/lib/zen/package/sections/lib/sections/view/admin/edit.xhtml +0 -7
- data/lib/zen/package/sections/lib/sections/view/admin/new.xhtml +0 -7
- data/lib/zen/package/sections/lib/sections/view/admin/section-entries/edit.xhtml +0 -7
- data/lib/zen/package/sections/lib/sections/view/admin/section-entries/new.xhtml +0 -7
- data/lib/zen/package/users/lib/users/view/admin/access-rules/edit.xhtml +0 -7
- data/lib/zen/package/users/lib/users/view/admin/access-rules/new.xhtml +0 -7
- data/lib/zen/package/users/lib/users/view/admin/user-groups/edit.xhtml +0 -7
- data/lib/zen/package/users/lib/users/view/admin/user-groups/new.xhtml +0 -7
- data/lib/zen/package/users/lib/users/view/admin/users/edit.xhtml +0 -7
- data/lib/zen/package/users/lib/users/view/admin/users/new.xhtml +0 -7
- data/lib/zen/plugin/controller.rb +0 -59
- data/lib/zen/public/admin/css/zen/notifications.css +0 -84
- data/lib/zen/public/admin/images/zen/icons/large/error.png +0 -0
- data/lib/zen/public/admin/images/zen/icons/large/notice.png +0 -0
- data/lib/zen/public/admin/images/zen/icons/large/success.png +0 -0
- data/lib/zen/public/admin/js/zen/core.js +0 -73
- data/lib/zen/public/admin/js/zen/init.js +0 -80
- data/proto/package/lib/package.rb +0 -21
- data/proto/package/lib/package/controller/controllers.rb +0 -50
- data/proto/package/lib/package/language/en/languages.yml +0 -4
- data/proto/package/lib/package/model/model.rb +0 -12
@@ -484,4 +484,3 @@ params.movie=path;}else{properties.type="application/x-shockwave-flash";}propert
|
|
484
484
|
},replaces:function(element){element=document.id(element,true);element.parentNode.replaceChild(this.toElement(),element);return this;},inject:function(element){document.id(element,true).appendChild(this.toElement());
|
485
485
|
return this;},remote:function(){return Swiff.remote.apply(Swiff,[this.toElement()].append(arguments));}});Swiff.CallBacks={};Swiff.remote=function(obj,fn){var rs=obj.CallFunction('<invoke name="'+fn+'" returntype="javascript">'+__flash__argumentsToXML(arguments,2)+"</invoke>");
|
486
486
|
return eval(rs);};})();
|
487
|
-
|
@@ -1,6 +1,6 @@
|
|
1
1
|
// MooTools: the javascript framework.
|
2
|
-
// Load this file's selection again by visiting: http://mootools.net/more/
|
3
|
-
// Or build this file again with packager using: packager build More/More More/Events.Pseudos More/Class.Refactor More/Class.Binds More/Class.Occlude More/Chain.Wait More/Array.Extras More/Date More/Date.Extras More/Number.Format More/Object.Extras More/String.Extras More/String.QueryString More/URI More/URI.Relative More/Hash More/Hash.Extras More/Element.Forms More/Elements.From More/Element.Event.Pseudos More/Element.Event.Pseudos.Keys More/Element.Delegation More/Element.Measure More/Element.Pin More/Element.Position More/Element.Shortcuts More/Form.Request More/Drag More/Drag.Move More/Sortables More/Request.Periodical More/Assets More/Color More/IframeShim More/Keyboard More/Keyboard.Extras More/Tips
|
2
|
+
// Load this file's selection again by visiting: http://mootools.net/more/649f3f210baf7341e0918184d8cb99a0
|
3
|
+
// Or build this file again with packager using: packager build More/More More/Events.Pseudos More/Class.Refactor More/Class.Binds More/Class.Occlude More/Chain.Wait More/Array.Extras More/Date More/Date.Extras More/Number.Format More/Object.Extras More/String.Extras More/String.QueryString More/URI More/URI.Relative More/Hash More/Hash.Extras More/Element.Forms More/Elements.From More/Element.Event.Pseudos More/Element.Event.Pseudos.Keys More/Element.Delegation More/Element.Measure More/Element.Pin More/Element.Position More/Element.Shortcuts More/Form.Request More/Drag More/Drag.Move More/Sortables More/Request.Periodical More/Assets More/Color More/IframeShim More/HtmlTable More/HtmlTable.Zebra More/HtmlTable.Sort More/HtmlTable.Select More/Keyboard More/Keyboard.Extras More/Tips
|
4
4
|
/*
|
5
5
|
---
|
6
6
|
copyrights:
|
@@ -36,17 +36,16 @@ this[c]=this[d];this[d]=b;}return this;},reduce:function(d,e){for(var c=0,b=this
|
|
36
36
|
}}return e;},reduceRight:function(c,d){var b=this.length;while(b--){if(b in this){d=d===a?this[b]:c.call(null,d,this[b],b,this);}}return d;}});})();(function(){var b=function(c){return c!=null;
|
37
37
|
};var a=Object.prototype.hasOwnProperty;Object.extend({getFromPath:function(e,f){if(typeof f=="string"){f=f.split(".");}for(var d=0,c=f.length;d<c;d++){if(a.call(e,f[d])){e=e[f[d]];
|
38
38
|
}else{return null;}}return e;},cleanValues:function(c,e){e=e||b;for(var d in c){if(!e(c[d])){delete c[d];}}return c;},erase:function(c,d){if(a.call(c,d)){delete c[d];
|
39
|
-
}return c;},run:function(d){var c=Array.slice(arguments,1);for(var e in d){if(d[e].apply){d[e].apply(d,c);}}return d;}});})();(function(){var b=null,a={},
|
40
|
-
var
|
41
|
-
if(
|
42
|
-
|
43
|
-
},
|
44
|
-
},define:function(
|
45
|
-
if(
|
46
|
-
if(!
|
47
|
-
}}return"";},inherit:function(h
|
48
|
-
}return this;}});
|
49
|
-
return this;},get:function(i,h,g){if(h){i+="."+h;}return f.get(i,g);}});})();Locale.define("en-US","Date",{months:["January","February","March","April","May","June","July","August","September","October","November","December"],months_abbr:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],days_abbr:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dateOrder:["month","date","year"],shortDate:"%m/%d/%Y",shortTime:"%I:%M%p",AM:"AM",PM:"PM",firstDayOfWeek:0,ordinal:function(a){return(a>3&&a<21)?"th":["th","st","nd","rd","th"][Math.min(a%10,4)];
|
39
|
+
}return c;},run:function(d){var c=Array.slice(arguments,1);for(var e in d){if(d[e].apply){d[e].apply(d,c);}}return d;}});})();(function(){var b=null,a={},d={};
|
40
|
+
var c=function(f){if(instanceOf(f,e.Set)){return f;}else{return a[f];}};var e=this.Locale={define:function(f,j,h,i){var g;if(instanceOf(f,e.Set)){g=f.name;
|
41
|
+
if(g){a[g]=f;}}else{g=f;if(!a[g]){a[g]=new e.Set(g);}f=a[g];}if(j){f.define(j,h,i);}if(!b){b=f;}return f;},use:function(f){f=c(f);if(f){b=f;this.fireEvent("change",f);
|
42
|
+
}return this;},getCurrent:function(){return b;},get:function(g,f){return(b)?b.get(g,f):"";},inherit:function(f,g,h){f=c(f);if(f){f.inherit(g,h);}return this;
|
43
|
+
},list:function(){return Object.keys(a);}};Object.append(e,new Events);e.Set=new Class({sets:{},inherits:{locales:[],sets:{}},initialize:function(f){this.name=f||"";
|
44
|
+
},define:function(i,g,h){var f=this.sets[i];if(!f){f={};}if(g){if(typeOf(g)=="object"){f=Object.merge(f,g);}else{f[g]=h;}}this.sets[i]=f;return this;},get:function(r,j,q){var p=Object.getFromPath(this.sets,r);
|
45
|
+
if(p!=null){var m=typeOf(p);if(m=="function"){p=p.apply(null,Array.from(j));}else{if(m=="object"){p=Object.clone(p);}}return p;}var h=r.indexOf("."),o=h<0?r:r.substr(0,h),k=(this.inherits.sets[o]||[]).combine(this.inherits.locales).include("en-US");
|
46
|
+
if(!q){q=[];}for(var g=0,f=k.length;g<f;g++){if(q.contains(k[g])){continue;}q.include(k[g]);var n=a[k[g]];if(!n){continue;}p=n.get(r,j,q);if(p!=null){return p;
|
47
|
+
}}return"";},inherit:function(g,h){g=Array.from(g);if(h&&!this.inherits.sets[h]){this.inherits.sets[h]=[];}var f=g.length;while(f--){(h?this.inherits.sets[h]:this.inherits.locales).unshift(g[f]);
|
48
|
+
}return this;}});})();Locale.define("en-US","Date",{months:["January","February","March","April","May","June","July","August","September","October","November","December"],months_abbr:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],days_abbr:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dateOrder:["month","date","year"],shortDate:"%m/%d/%Y",shortTime:"%I:%M%p",AM:"AM",PM:"PM",firstDayOfWeek:0,ordinal:function(a){return(a>3&&a<21)?"th":["th","st","nd","rd","th"][Math.min(a%10,4)];
|
50
49
|
},lessThanMinuteAgo:"less than a minute ago",minuteAgo:"about a minute ago",minutesAgo:"{delta} minutes ago",hourAgo:"about an hour ago",hoursAgo:"about {delta} hours ago",dayAgo:"1 day ago",daysAgo:"{delta} days ago",weekAgo:"1 week ago",weeksAgo:"{delta} weeks ago",monthAgo:"1 month ago",monthsAgo:"{delta} months ago",yearAgo:"1 year ago",yearsAgo:"{delta} years ago",lessThanMinuteUntil:"less than a minute from now",minuteUntil:"about a minute from now",minutesUntil:"{delta} minutes from now",hourUntil:"about an hour from now",hoursUntil:"about {delta} hours from now",dayUntil:"1 day from now",daysUntil:"{delta} days from now",weekUntil:"1 week from now",weeksUntil:"{delta} weeks from now",monthUntil:"1 month from now",monthsUntil:"{delta} months from now",yearUntil:"1 year from now",yearsUntil:"{delta} years from now"});
|
51
50
|
(function(){var a=this.Date;var f=a.Methods={ms:"Milliseconds",year:"FullYear",min:"Minutes",mo:"Month",sec:"Seconds",hr:"Hours"};["Date","Day","FullYear","Hours","Milliseconds","Minutes","Month","Seconds","Time","TimezoneOffset","Week","Timezone","GMTOffset","DayOfYear","LastMonth","LastDayOfMonth","UTCDate","UTCDay","UTCFullYear","AMPM","Ordinal","UTCHours","UTCMilliseconds","UTCMinutes","UTCMonth","UTCSeconds","UTCMilliseconds"].each(function(t){a.Methods[t.toLowerCase()]=t;
|
52
51
|
});var p=function(v,u,t){if(u==1){return v;}return v<Math.pow(10,u-1)?(t||"0")+p(v,u-1,t):v;};a.implement({set:function(v,t){v=v.toLowerCase();var u=f[v]&&"set"+f[v];
|
@@ -84,7 +83,7 @@ return a.daysInMonth(u!=null?u:v.get("mo"),t!=null?t:v.get("year"))*86400000;},y
|
|
84
83
|
return(t)?(u=x.handler(t)):false;});if(!(u&&u.isValid())){u=new a(n(w));if(!(u&&u.isValid())){u=new a(w.toInt());}}return u;},parseDay:function(t,u){return r("day",t,u);
|
85
84
|
},parseMonth:function(u,t){return r("month",u,t);},parseUTC:function(u){var t=new a(u);var v=a.UTC(t.get("year"),t.get("mo"),t.get("date"),t.get("hr"),t.get("min"),t.get("sec"),t.get("ms"));
|
86
85
|
return new a(v);},orderIndex:function(t){return a.getMsg("dateOrder").indexOf(t)+1;},defineFormat:function(t,u){g[t]=u;return this;},defineFormats:function(t){for(var u in t){a.defineFormat(u,t[u]);
|
87
|
-
}return this;},
|
86
|
+
}return this;},defineParser:function(t){c.push((t.re&&t.handler)?t:l(t));return this;},defineParsers:function(){Array.flatten(arguments).each(a.defineParser);
|
88
87
|
return this;},define2DigitYearStart:function(t){o=t%100;i=t-o;return this;}});var d=function(t){return new RegExp("(?:"+a.getMsg(t).map(function(u){return u.substr(0,3);
|
89
88
|
}).join("|")+")[a-z]*");};var m=function(t){switch(t){case"T":return"%H:%M:%S";case"x":return((a.orderIndex("month")==1)?"%m[-./]%d":"%d[-./]%m")+"([-./]%y)?";
|
90
89
|
case"X":return"%H([.:]%M)?([.:]%S([.:]%s)?)? ?%p? ?%z?";}return null;};var j={d:/[0-2]?[0-9]|3[01]/,H:/[01]?[0-9]|2[0-3]/,I:/0?[1-9]|1[0-2]/,M:/[0-5]?\d/,s:/\d+/,o:/[a-z]*/,p:/[ap]\.?m\.?/,y:/\d{2}|\d{4}/,Y:/\d{4}/,z:/Z|[+-]\d{2}(?::?\d{2})?/};
|
@@ -184,20 +183,19 @@ g=g.getParent();}var f=this.expose(),d=h.call(this);f();e.each(function(i){i();}
|
|
184
183
|
}var d=this.style.cssText;this.setStyles({display:"block",position:"absolute",visibility:"hidden"});return function(){this.style.cssText=d;}.bind(this);
|
185
184
|
},getDimensions:function(d){d=Object.merge({computeSize:false},d);var i={x:0,y:0};var h=function(j,e){return(e.computeSize)?j.getComputedSize(e):j.getSize();
|
186
185
|
};var f=this.getParent("body");if(f&&this.getStyle("display")=="none"){i=this.measure(function(){return h(this,d);});}else{if(f){try{i=h(this,d);}catch(g){}}}return Object.append(i,(i.x||i.x===0)?{width:i.x,height:i.y}:{x:i.width,y:i.height});
|
187
|
-
},getComputedSize:function(d){
|
188
|
-
|
189
|
-
}
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
if(
|
194
|
-
|
186
|
+
},getComputedSize:function(d){d=Object.merge({styles:["padding","border"],planes:{height:["top","bottom"],width:["left","right"]},mode:"both"},d);var g={},e={width:0,height:0},f;
|
187
|
+
if(d.mode=="vertical"){delete e.width;delete d.planes.width;}else{if(d.mode=="horizontal"){delete e.height;delete d.planes.height;}}b(d.styles,d.planes).each(function(h){g[h]=this.getStyle(h).toInt();
|
188
|
+
},this);Object.each(d.planes,function(i,h){var k=h.capitalize(),j=this.getStyle(h);if(j=="auto"&&!f){f=this.getDimensions();}j=g[h]=(j=="auto")?f[h]:j.toInt();
|
189
|
+
e["total"+k]=j;i.each(function(m){var l=c(m,g);e["computed"+m.capitalize()]=l;e["total"+k]+=l;});},this);return Object.append(e,g);}});})();(function(){var a=false,b=false;
|
190
|
+
var c=function(){var d=new Element("div").setStyles({position:"fixed",top:0,right:0}).inject(document.body);a=(d.offsetTop===0);d.dispose();b=true;};Element.implement({pin:function(h,f){if(!b){c();
|
191
|
+
}if(this.getStyle("display")=="none"){return this;}var j,k=window.getScroll(),l,e;if(h!==false){j=this.getPosition(a?document.body:this.getOffsetParent());
|
192
|
+
if(!this.retrieve("pin:_pinned")){var g={top:j.y-k.y,left:j.x-k.x};if(a&&!f){this.setStyle("position","fixed").setStyles(g);}else{l=this.getOffsetParent();
|
193
|
+
var i=this.getPosition(l),m=this.getStyles("left","top");if(l&&m.left=="auto"||m.top=="auto"){this.setPosition(i);}if(this.getStyle("position")=="static"){this.setStyle("position","absolute");
|
195
194
|
}i={x:m.left.toInt()-k.x,y:m.top.toInt()-k.y};e=function(){if(!this.retrieve("pin:_pinned")){return;}var n=window.getScroll();this.setStyles({left:i.x+n.x,top:i.y+n.y});
|
196
195
|
}.bind(this);this.store("pin:_scrollFixer",e);window.addEvent("scroll",e);}this.store("pin:_pinned",true);}}else{if(!this.retrieve("pin:_pinned")){return this;
|
197
196
|
}l=this.getParent();var d=(l.getComputedStyle("position")!="static"?l:l.getOffsetParent());j=this.getPosition(d);this.store("pin:_pinned",false);e=this.retrieve("pin:_scrollFixer");
|
198
197
|
if(!e){this.setStyles({position:"absolute",top:j.y+k.y,left:j.x+k.x});}else{this.store("pin:_scrollFixer",null);window.removeEvent("scroll",e);}this.removeClass("isPinned");
|
199
|
-
}return this;},unpin:function(){return this.pin(false);},togglePin:function(){return this.pin(!this.retrieve("pin:_pinned"));}});Element.
|
200
|
-
})();(function(b){var a=Element.Position={options:{relativeTo:document.body,position:{x:"center",y:"center"},offset:{x:0,y:0}},getOptions:function(d,c){c=Object.merge({},a.options,c);
|
198
|
+
}return this;},unpin:function(){return this.pin(false);},togglePin:function(){return this.pin(!this.retrieve("pin:_pinned"));}});})();(function(b){var a=Element.Position={options:{relativeTo:document.body,position:{x:"center",y:"center"},offset:{x:0,y:0}},getOptions:function(d,c){c=Object.merge({},a.options,c);
|
201
199
|
a.setPositionOption(c);a.setEdgeOption(c);a.setOffsetOption(d,c);a.setDimensionsOption(d,c);return c;},setPositionOption:function(c){c.position=a.getCoordinateFromValue(c.position);
|
202
200
|
},setEdgeOption:function(d){var c=a.getCoordinateFromValue(d.edge);d.edge=c?c:(d.position.x=="center"&&d.position.y=="center")?{x:"center",y:"center"}:{x:"left",y:"top"};
|
203
201
|
},setOffsetOption:function(f,d){var c={x:0,y:0},g=f.measure(function(){return document.id(this.getOffsetParent());}),e=g.getScroll();if(!g||g==f.getDocument().body){return;
|
@@ -309,7 +307,7 @@ if(c.getStyle("position")=="fixed"){var a=window.getScroll();b.left+=a.x;b.right
|
|
309
307
|
var b=this.mouse.now;return(b.x>d.left&&b.x<d.right&&b.y<d.bottom&&b.y>d.top);},this).getLast();if(this.overed!=a){if(this.overed){this.fireEvent("leave",[this.element,this.overed]);
|
310
308
|
}if(a){this.fireEvent("enter",[this.element,a]);}this.overed=a;}},drag:function(a){this.parent(a);if(this.options.checkDroppables&&this.droppables.length){this.checkDroppables();
|
311
309
|
}},stop:function(a){this.checkDroppables();this.fireEvent("drop",[this.element,this.overed,a]);this.overed=null;return this.parent(a);}});Element.implement({makeDraggable:function(a){var b=new Drag.Move(this,a);
|
312
|
-
this.store("dragger",b);return b;}});var Sortables=new Class({Implements:[Events,Options],options:{opacity:1,clone:false,revert:false,handle:false,dragOptions:{}
|
310
|
+
this.store("dragger",b);return b;}});var Sortables=new Class({Implements:[Events,Options],options:{opacity:1,clone:false,revert:false,handle:false,dragOptions:{}},initialize:function(a,b){this.setOptions(b);
|
313
311
|
this.elements=[];this.lists=[];this.idle=true;this.addLists($$(document.id(a)||a));if(!this.options.clone){this.options.revert=false;}if(this.options.revert){this.effect=new Fx.Morph(null,Object.merge({duration:250,link:"cancel"},this.options.revert));
|
314
312
|
}},attach:function(){this.addLists(this.lists);return this;},detach:function(){this.lists=this.removeLists(this.lists);return this;},addItems:function(){Array.flatten(arguments).each(function(a){this.elements.push(a);
|
315
313
|
var b=a.retrieve("sortables:start",function(c){this.start.call(this,c,a);}.bind(this));(this.options.handle?a.getElement(this.options.handle)||a:a).addEvent("mousedown",b);
|
@@ -323,7 +321,7 @@ return a;},this));},removeLists:function(){return $$(Array.flatten(arguments).ma
|
|
323
321
|
if(!this.options.constrain){a.append(this.lists).erase(this.list);}return a;},insert:function(c,b){var a="inside";if(this.lists.contains(b)){this.list=b;
|
324
322
|
this.drag.droppables=this.getDroppables();}else{a=this.element.getAllPrevious().contains(b)?"before":"after";}this.element.inject(b,a);this.fireEvent("sort",[this.element,this.clone]);
|
325
323
|
},start:function(b,a){if(!this.idle||b.rightClick||["button","input","a"].contains(b.target.get("tag"))){return;}this.idle=false;this.element=a;this.opacity=a.get("opacity");
|
326
|
-
this.list=a.getParent();this.clone=this.getClone(b,a);this.drag=new Drag.Move(this.clone,Object.merge({
|
324
|
+
this.list=a.getParent();this.clone=this.getClone(b,a);this.drag=new Drag.Move(this.clone,Object.merge({droppables:this.getDroppables()},this.options.dragOptions)).addEvents({onSnap:function(){b.stop();
|
327
325
|
this.clone.setStyle("visibility","visible");this.element.set("opacity",this.options.opacity||0);this.fireEvent("start",[this.element,this.clone]);}.bind(this),onEnter:this.insert.bind(this),onCancel:this.end.bind(this),onComplete:this.end.bind(this)});
|
328
326
|
this.clone.inject(this.element,"before");this.drag.start(b);},end:function(){this.drag.detach();this.element.set("opacity",this.opacity);if(this.effect){var b=this.element.getStyles("width","height"),d=this.clone,c=d.computePosition(this.element.getPosition(this.clone.getOffsetParent()));
|
329
327
|
var a=function(){this.removeEvent("cancel",a);d.destroy();};this.effect.element=d;this.effect.start({top:c.top,left:c.left,width:b.width,height:b.height,opacity:0.25}).addEvent("cancel",a).chain(a);
|
@@ -352,7 +350,53 @@ if(g!=0){var e=(j-c)/l;var b=(j-d)/l;var m=(j-k)/l;if(c==j){h=m-b;}else{if(d==j)
|
|
352
350
|
},hsbToRgb:function(){var d=Math.round(this[2]/100*255);if(this[1]==0){return[d,d,d];}else{var b=this[0]%360;var g=b%60;var h=Math.round((this[2]*(100-this[1]))/10000*255);
|
353
351
|
var e=Math.round((this[2]*(6000-this[1]*g))/600000*255);var c=Math.round((this[2]*(6000-this[1]*(60-g)))/600000*255);switch(Math.floor(b/60)){case 0:return[d,c,h];
|
354
352
|
case 1:return[e,d,h];case 2:return[h,d,c];case 3:return[h,e,d];case 4:return[c,h,d];case 5:return[d,h,e];}}return false;}});String.implement({rgbToHsb:function(){var b=this.match(/\d{1,3}/g);
|
355
|
-
return(b)?b.rgbToHsb():null;},hsbToRgb:function(){var b=this.match(/\d{1,3}/g);return(b)?b.hsbToRgb():null;}});})();
|
353
|
+
return(b)?b.rgbToHsb():null;},hsbToRgb:function(){var b=this.match(/\d{1,3}/g);return(b)?b.hsbToRgb():null;}});})();var HtmlTable=new Class({Implements:[Options,Events,Class.Occlude],options:{properties:{cellpadding:0,cellspacing:0,border:0},rows:[],headers:[],footers:[]},property:"HtmlTable",initialize:function(){var a=Array.link(arguments,{options:Type.isObject,table:Type.isElement,id:Type.isString});
|
354
|
+
this.setOptions(a.options);if(!a.table&&a.id){a.table=document.id(a.id);}this.element=a.table||new Element("table",this.options.properties);if(this.occlude()){return this.occluded;
|
355
|
+
}this.build();},build:function(){this.element.store("HtmlTable",this);this.body=document.id(this.element.tBodies[0])||new Element("tbody").inject(this.element);
|
356
|
+
$$(this.body.rows);if(this.options.headers.length){this.setHeaders(this.options.headers);}else{this.thead=document.id(this.element.tHead);}if(this.thead){this.head=this.getHead();
|
357
|
+
}if(this.options.footers.length){this.setFooters(this.options.footers);}this.tfoot=document.id(this.element.tFoot);if(this.tfoot){this.foot=document.id(this.tfoot.rows[0]);
|
358
|
+
}this.options.rows.each(function(a){this.push(a);},this);},toElement:function(){return this.element;},empty:function(){this.body.empty();return this;},set:function(e,a){var d=(e=="headers")?"tHead":"tFoot",b=d.toLowerCase();
|
359
|
+
this[b]=(document.id(this.element[d])||new Element(b).inject(this.element,"top")).empty();var c=this.push(a,{},this[b],e=="headers"?"th":"td");if(e=="headers"){this.head=this.getHead();
|
360
|
+
}else{this.foot=this.getHead();}return c;},getHead:function(){var a=this.thead.rows;return a.length>1?$$(a):a.length?document.id(a[0]):false;},setHeaders:function(a){this.set("headers",a);
|
361
|
+
return this;},setFooters:function(a){this.set("footers",a);return this;},push:function(f,c,e,a,b){if(typeOf(f)=="element"&&f.get("tag")=="tr"){f.inject(e||this.body,b);
|
362
|
+
return{tr:f,tds:f.getChildren("td")};}var d=f.map(function(i){var j=new Element(a||"td",i?i.properties:{}),h=(i?i.content:"")||i,g=typeOf(h);if(["element","array","collection","elements"].contains(g)){j.adopt(h);
|
363
|
+
}else{j.set("html",h);}return j;});return{tr:new Element("tr",c).inject(e||this.body,b).adopt(d),tds:d};}});["adopt","inject","wraps","grab","replaces","dispose"].each(function(a){HtmlTable.implement(a,function(){this.element[a].apply(this.element,arguments);
|
364
|
+
return this;});});HtmlTable=Class.refactor(HtmlTable,{options:{classZebra:"table-tr-odd",zebra:true},initialize:function(){this.previous.apply(this,arguments);
|
365
|
+
if(this.occluded){return this.occluded;}if(this.options.zebra){this.updateZebras();}},updateZebras:function(){Array.each(this.body.rows,this.zebra,this);
|
366
|
+
},setRowStyle:function(b,a){if(this.previous){this.previous(b,a);}this.zebra(b,a);},zebra:function(b,a){return b[((a%2)?"remove":"add")+"Class"](this.options.classZebra);
|
367
|
+
},push:function(){var a=this.previous.apply(this,arguments);if(this.options.zebra){this.updateZebras();}return a;}});HtmlTable=Class.refactor(HtmlTable,{options:{sortIndex:0,sortReverse:false,parsers:[],defaultParser:"string",classSortable:"table-sortable",classHeadSort:"table-th-sort",classHeadSortRev:"table-th-sort-rev",classNoSort:"table-th-nosort",classGroupHead:"table-tr-group-head",classGroup:"table-tr-group",classCellSort:"table-td-sort",classSortSpan:"table-th-sort-span",sortable:false,thSelector:"th"},initialize:function(){this.previous.apply(this,arguments);
|
368
|
+
if(this.occluded){return this.occluded;}this.sorted={index:null,dir:1};this.bound={headClick:this.headClick.bind(this)};this.sortSpans=new Elements();if(this.options.sortable){this.enableSort();
|
369
|
+
if(this.options.sortIndex!=null){this.sort(this.options.sortIndex,this.options.sortReverse);}}},attachSorts:function(a){this.detachSorts();if(a!==false){this.element.addEvent("click:relay("+this.options.thSelector+")",this.bound.headClick);
|
370
|
+
}},detachSorts:function(){this.element.removeEvents("click:relay("+this.options.thSelector+")");},setHeaders:function(){this.previous.apply(this,arguments);
|
371
|
+
if(this.sortEnabled){this.setParsers();}},setParsers:function(){this.parsers=this.detectParsers();},detectParsers:function(){return this.head&&this.head.getElements(this.options.thSelector).flatten().map(this.detectParser,this);
|
372
|
+
},detectParser:function(a,b){if(a.hasClass(this.options.classNoSort)||a.retrieve("htmltable-parser")){return a.retrieve("htmltable-parser");}var c=new Element("div");
|
373
|
+
c.adopt(a.childNodes).inject(a);var f=new Element("span",{"class":this.options.classSortSpan}).inject(c,"top");this.sortSpans.push(f);var g=this.options.parsers[b],e=this.body.rows,d;
|
374
|
+
switch(typeOf(g)){case"function":g={convert:g};d=true;break;case"string":g=g;d=true;break;}if(!d){HtmlTable.ParserPriority.some(function(k){var o=HtmlTable.Parsers[k],m=o.match;
|
375
|
+
if(!m){return false;}for(var n=0,l=e.length;n<l;n++){var h=document.id(e[n].cells[b]),p=h?h.get("html").clean():"";if(p&&m.test(p)){g=o;return true;}}});
|
376
|
+
}if(!g){g=this.options.defaultParser;}a.store("htmltable-parser",g);return g;},headClick:function(b,a){if(!this.head||a.hasClass(this.options.classNoSort)){return;
|
377
|
+
}return this.sort(Array.indexOf(this.head.getElements(this.options.thSelector).flatten(),a)%this.body.rows[0].cells.length);},serialize:function(){var a=this.previous.apply(this,arguments)||{};
|
378
|
+
if(this.options.sortable){a.sortIndex=this.sorted.index;a.sortReverse=this.sorted.reverse;}return a;},restore:function(a){if(this.options.sortable&&a.sortIndex){this.sort(a.sortIndex,a.sortReverse);
|
379
|
+
}this.previous.apply(this,arguments);},setSortedState:function(b,a){if(a!=null){this.sorted.reverse=a;}else{if(this.sorted.index==b){this.sorted.reverse=!this.sorted.reverse;
|
380
|
+
}else{this.sorted.reverse=this.sorted.index==null;}}if(b!=null){this.sorted.index=b;}},setHeadSort:function(a){var b=$$(!this.head.length?this.head.cells[this.sorted.index]:this.head.map(function(c){return c.getElements(this.options.thSelector)[this.sorted.index];
|
381
|
+
},this).clean());if(!b.length){return;}if(a){b.addClass(this.options.classHeadSort);if(this.sorted.reverse){b.addClass(this.options.classHeadSortRev);}else{b.removeClass(this.options.classHeadSortRev);
|
382
|
+
}}else{b.removeClass(this.options.classHeadSort).removeClass(this.options.classHeadSortRev);}},setRowSort:function(b,a){var e=b.length,d=this.body,g,f;
|
383
|
+
while(e){var h=b[--e],c=h.position,i=d.rows[c];if(i.disabled){continue;}if(!a){g=this.setGroupSort(g,i,h);this.setRowStyle(i,e);}d.appendChild(i);for(f=0;
|
384
|
+
f<e;f++){if(b[f].position>c){b[f].position--;}}}},setRowStyle:function(b,a){this.previous(b,a);b.cells[this.sorted.index].addClass(this.options.classCellSort);
|
385
|
+
},setGroupSort:function(b,c,a){if(b==a.value){c.removeClass(this.options.classGroupHead).addClass(this.options.classGroup);}else{c.removeClass(this.options.classGroup).addClass(this.options.classGroupHead);
|
386
|
+
}return a.value;},getParser:function(){var a=this.parsers[this.sorted.index];return typeOf(a)=="string"?HtmlTable.Parsers[a]:a;},sort:function(c,b,e){if(!this.head){return;
|
387
|
+
}if(!e){this.clearSort();this.setSortedState(c,b);this.setHeadSort(true);}var f=this.getParser();if(!f){return;}var a;if(!Browser.ie){a=this.body.getParent();
|
388
|
+
this.body.dispose();}var d=this.parseData(f).sort(function(h,g){if(h.value===g.value){return 0;}return h.value>g.value?1:-1;});if(this.sorted.reverse==(f==HtmlTable.Parsers["input-checked"])){d.reverse(true);
|
389
|
+
}this.setRowSort(d,e);if(a){a.grab(this.body);}this.fireEvent("stateChanged");return this.fireEvent("sort",[this.body,this.sorted.index]);},parseData:function(a){return Array.map(this.body.rows,function(d,b){var c=a.convert.call(document.id(d.cells[this.sorted.index]));
|
390
|
+
return{position:b,value:c};},this);},clearSort:function(){this.setHeadSort(false);this.body.getElements("td").removeClass(this.options.classCellSort);},reSort:function(){if(this.sortEnabled){this.sort.call(this,this.sorted.index,this.sorted.reverse);
|
391
|
+
}return this;},enableSort:function(){this.element.addClass(this.options.classSortable);this.attachSorts(true);this.setParsers();this.sortEnabled=true;return this;
|
392
|
+
},disableSort:function(){this.element.removeClass(this.options.classSortable);this.attachSorts(false);this.sortSpans.each(function(a){a.destroy();});this.sortSpans.empty();
|
393
|
+
this.sortEnabled=false;return this;}});HtmlTable.ParserPriority=["date","input-checked","input-value","float","number"];HtmlTable.Parsers={date:{match:/^\d{2}[-\/ ]\d{2}[-\/ ]\d{2,4}$/,convert:function(){var a=Date.parse(this.get("text").stripTags());
|
394
|
+
return(typeOf(a)=="date")?a.format("db"):"";},type:"date"},"input-checked":{match:/ type="(radio|checkbox)" /,convert:function(){return this.getElement("input").checked;
|
395
|
+
}},"input-value":{match:/<input/,convert:function(){return this.getElement("input").value;}},number:{match:/^\d+[^\d.,]*$/,convert:function(){return this.get("text").stripTags().toInt();
|
396
|
+
},number:true},numberLax:{match:/^[^\d]+\d+$/,convert:function(){return this.get("text").replace(/[^-?^0-9]/,"").stripTags().toInt();},number:true},"float":{match:/^[\d]+\.[\d]+/,convert:function(){return this.get("text").replace(/[^-?^\d.]/,"").stripTags().toFloat();
|
397
|
+
},number:true},floatLax:{match:/^[^\d]+[\d]+\.[\d]+$/,convert:function(){return this.get("text").replace(/[^-?^\d.]/,"").stripTags();},number:true},string:{match:null,convert:function(){return this.get("text").stripTags().toLowerCase();
|
398
|
+
}},title:{match:null,convert:function(){return this.title;}}};HtmlTable.defineParsers=function(a){HtmlTable.Parsers=Object.append(HtmlTable.Parsers,a);
|
399
|
+
for(var b in a){HtmlTable.ParserPriority.unshift(b);}};(function(){var a=this.Keyboard=new Class({Extends:Events,Implements:[Options],options:{defaultEventType:"keydown",active:false,manager:null,events:{},nonParsedEvents:["activate","deactivate","onactivate","ondeactivate","changed","onchanged"]},initialize:function(f){if(f&&f.manager){this._manager=f.manager;
|
356
400
|
delete f.manager;}this.setOptions(f);this._setup();},addEvent:function(h,g,f){return this.parent(a.parse(h,this.options.defaultEventType,this.options.nonParsedEvents),g,f);
|
357
401
|
},removeEvent:function(g,f){return this.parent(a.parse(g,this.options.defaultEventType,this.options.nonParsedEvents),f);},toggleActive:function(){return this[this.isActive()?"deactivate":"activate"]();
|
358
402
|
},activate:function(f){if(f){if(f.isActive()){return this;}if(this._activeKB&&f!=this._activeKB){this.previous=this._activeKB;this.previous.fireEvent("deactivate");
|
@@ -378,7 +422,35 @@ a.name=b;this._shortcutIndex[b]=a;this._shortcuts.push(a);if(a.keys){this.addEve
|
|
378
422
|
}});Keyboard.rebind=function(b,a){Array.from(a).each(function(c){c.getKeyboard().removeEvent(c.keys,c.handler);c.getKeyboard().addEvent(b,c.handler);c.keys=b;
|
379
423
|
c.getKeyboard().fireEvent("rebound");});};Keyboard.getActiveShortcuts=function(b){var a=[],c=[];Keyboard.each(b,[].push.bind(a));a.each(function(d){c.extend(d.getShortcuts());
|
380
424
|
});return c;};Keyboard.getShortcut=function(c,b,d){d=d||{};var a=d.many?[]:null,e=d.many?function(g){var f=g.getShortcut(c);if(f){a.push(f);}}:function(f){if(!a){a=f.getShortcut(c);
|
381
|
-
}};Keyboard.each(b,e);return a;};Keyboard.getShortcuts=function(b,a){return Keyboard.getShortcut(b,a,{many:true});};
|
425
|
+
}};Keyboard.each(b,e);return a;};Keyboard.getShortcuts=function(b,a){return Keyboard.getShortcut(b,a,{many:true});};HtmlTable=Class.refactor(HtmlTable,{options:{useKeyboard:true,classRowSelected:"table-tr-selected",classRowHovered:"table-tr-hovered",classSelectable:"table-selectable",shiftForMultiSelect:true,allowMultiSelect:true,selectable:false},initialize:function(){this.previous.apply(this,arguments);
|
426
|
+
if(this.occluded){return this.occluded;}this.selectedRows=new Elements();this.bound={mouseleave:this.mouseleave.bind(this),clickRow:this.clickRow.bind(this),activateKeyboard:function(){if(this.keyboard&&this.selectEnabled){this.keyboard.activate();
|
427
|
+
}}.bind(this)};if(this.options.selectable){this.enableSelect();}},empty:function(){this.selectNone();return this.previous();},enableSelect:function(){this.selectEnabled=true;
|
428
|
+
this.attachSelects();this.element.addClass(this.options.classSelectable);return this;},disableSelect:function(){this.selectEnabled=false;this.attachSelects(false);
|
429
|
+
this.element.removeClass(this.options.classSelectable);return this;},push:function(){var a=this.previous.apply(this,arguments);this.updateSelects();return a;
|
430
|
+
},isSelected:function(a){return this.selectedRows.contains(a);},toggleRow:function(a){return this[(this.isSelected(a)?"de":"")+"selectRow"](a);},selectRow:function(b,a){if(this.isSelected(b)||(!a&&!this.body.getChildren().contains(b))){return;
|
431
|
+
}if(!this.options.allowMultiSelect){this.selectNone();}if(!this.isSelected(b)){this.selectedRows.push(b);b.addClass(this.options.classRowSelected);this.fireEvent("rowFocus",[b,this.selectedRows]);
|
432
|
+
this.fireEvent("stateChanged");}this.focused=b;document.clearSelection();return this;},getSelected:function(){return this.selectedRows;},serialize:function(){var a=this.previous.apply(this,arguments)||{};
|
433
|
+
if(this.options.selectable){a.selectedRows=this.selectedRows.map(function(b){return Array.indexOf(this.body.rows,b);}.bind(this));}return a;},restore:function(a){if(this.options.selectable&&a.selectedRows){a.selectedRows.each(function(b){this.selectRow(this.body.rows[b]);
|
434
|
+
}.bind(this));}this.previous.apply(this,arguments);},deselectRow:function(b,a){if(!this.isSelected(b)||(!a&&!this.body.getChildren().contains(b))){return;
|
435
|
+
}this.selectedRows=new Elements(Array.from(this.selectedRows).erase(b));b.removeClass(this.options.classRowSelected);this.fireEvent("rowUnfocus",[b,this.selectedRows]);
|
436
|
+
this.fireEvent("stateChanged");return this;},selectAll:function(a){if(!a&&!this.options.allowMultiSelect){return;}this.selectRange(0,this.body.rows.length,a);
|
437
|
+
return this;},selectNone:function(){return this.selectAll(true);},selectRange:function(b,a,f){if(!this.options.allowMultiSelect&&!f){return;}var g=f?"deselectRow":"selectRow",e=Array.clone(this.body.rows);
|
438
|
+
if(typeOf(b)=="element"){b=e.indexOf(b);}if(typeOf(a)=="element"){a=e.indexOf(a);}a=a<e.length-1?a:e.length-1;if(a<b){var d=b;b=a;a=d;}for(var c=b;c<=a;
|
439
|
+
c++){this[g](e[c],true);}return this;},deselectRange:function(b,a){this.selectRange(b,a,true);},getSelected:function(){return this.selectedRows;},enterRow:function(a){if(this.hovered){this.hovered=this.leaveRow(this.hovered);
|
440
|
+
}this.hovered=a.addClass(this.options.classRowHovered);},leaveRow:function(a){a.removeClass(this.options.classRowHovered);},updateSelects:function(){Array.each(this.body.rows,function(a){var b=a.retrieve("binders");
|
441
|
+
if(!b&&!this.selectEnabled){return;}if(!b){b={mouseenter:this.enterRow.pass([a],this),mouseleave:this.leaveRow.pass([a],this)};a.store("binders",b);}if(this.selectEnabled){a.addEvents(b);
|
442
|
+
}else{a.removeEvents(b);}},this);},shiftFocus:function(b,a){if(!this.focused){return this.selectRow(this.body.rows[0],a);}var c=this.getRowByOffset(b);
|
443
|
+
if(c===null||this.focused==this.body.rows[c]){return this;}this.toggleRow(this.body.rows[c],a);},clickRow:function(a,b){var c=(a.shift||a.meta||a.control)&&this.options.shiftForMultiSelect;
|
444
|
+
if(!c&&!(a.rightClick&&this.isSelected(b)&&this.options.allowMultiSelect)){this.selectNone();}if(a.rightClick){this.selectRow(b);}else{this.toggleRow(b);
|
445
|
+
}if(a.shift){this.selectRange(this.rangeStart||this.body.rows[0],b,this.rangeStart?!this.isSelected(b):true);this.focused=b;}this.rangeStart=b;},getRowByOffset:function(c){if(!this.focused){return 0;
|
446
|
+
}var b=Array.clone(this.body.rows),a=b.indexOf(this.focused)+c;if(a<0){a=null;}if(a>=b.length){a=null;}return a;},attachSelects:function(d){d=d!=null?d:true;
|
447
|
+
var g=d?"addEvents":"removeEvents";this.element[g]({mouseleave:this.bound.mouseleave,click:this.bound.activateKeyboard});this.body[g]({"click:relay(tr)":this.bound.clickRow,"contextmenu:relay(tr)":this.bound.clickRow});
|
448
|
+
if(this.options.useKeyboard||this.keyboard){if(!this.keyboard){this.keyboard=new Keyboard();}if(!this.selectKeysDefined){this.selectKeysDefined=true;var f,e;
|
449
|
+
var c=function(i){var h=function(j){clearTimeout(f);j.preventDefault();var k=this.body.rows[this.getRowByOffset(i)];if(j.shift&&k&&this.isSelected(k)){this.deselectRow(this.focused);
|
450
|
+
this.focused=k;}else{if(k&&(!this.options.allowMultiSelect||!j.shift)){this.selectNone();}this.shiftFocus(i,j);}if(e){f=h.delay(100,this,j);}else{f=(function(){e=true;
|
451
|
+
h(j);}).delay(400);}}.bind(this);return h;}.bind(this);var b=function(){clearTimeout(f);e=false;};this.keyboard.addEvents({"keydown:shift+up":c(-1),"keydown:shift+down":c(1),"keyup:shift+up":b,"keyup:shift+down":b,"keyup:up":b,"keyup:down":b});
|
452
|
+
var a="";if(this.options.allowMultiSelect&&this.options.shiftForMultiSelect&&this.options.useKeyboard){a=" (Shift multi-selects).";}this.keyboard.addShortcuts({"Select Previous Row":{keys:"up",shortcut:"up arrow",handler:c(-1),description:"Select the previous row in the table."+a},"Select Next Row":{keys:"down",shortcut:"down arrow",handler:c(1),description:"Select the next row in the table."+a}});
|
453
|
+
}this.keyboard[d?"activate":"deactivate"]();}this.updateSelects();},mouseleave:function(){if(this.hovered){this.leaveRow(this.hovered);}}});(function(){var a=function(c,b){return(c)?(typeOf(c)=="function"?c(b):b.get(c)):"";
|
382
454
|
};this.Tips=new Class({Implements:[Events,Options],options:{onShow:function(){this.tip.setStyle("display","block");},onHide:function(){this.tip.setStyle("display","none");
|
383
455
|
},title:"title",text:function(b){return b.get("rel")||b.get("href");},showDelay:100,hideDelay:100,className:"tip-wrap",offset:{x:16,y:16},windowPadding:{x:0,y:0},fixed:false},initialize:function(){var b=Array.link(arguments,{options:Type.isObject,elements:function(c){return c!=null;
|
384
456
|
}});this.setOptions(b.options);if(b.elements){this.attach(b.elements);}this.container=new Element("div",{"class":"tip"});},toElement:function(){if(this.tip){return this.tip;
|
@@ -398,4 +470,3 @@ for(var i in d){h[d[i]]=f.page[i]+this.options.offset[i];if(h[d[i]]<0){e[i]=true
|
|
398
470
|
e[i+"2"]=true;}}this.fireEvent("bound",e);this.tip.setStyles(h);},fill:function(b,c){if(typeof c=="string"){b.set("html",c);}else{b.adopt(c);}},show:function(b){if(!this.tip){document.id(this);
|
399
471
|
}if(!this.tip.getParent()){this.tip.inject(document.body);}this.fireEvent("show",[this.tip,b]);},hide:function(b){if(!this.tip){document.id(this);}this.fireEvent("hide",[this.tip,b]);
|
400
472
|
}});})();
|
401
|
-
|
@@ -0,0 +1,48 @@
|
|
1
|
+
window.addEvent('domready', function()
|
2
|
+
{
|
3
|
+
$$('table').each(function(table)
|
4
|
+
{
|
5
|
+
new Zen.HtmlTable(table);
|
6
|
+
});
|
7
|
+
|
8
|
+
/**
|
9
|
+
* Create a new instance of the Tabs class. This will create a regular tab
|
10
|
+
* system for the CSS selector "div.tabs ul".
|
11
|
+
*/
|
12
|
+
if ( $$('div.tabs ul').length > 0 && Zen.Tabs )
|
13
|
+
{
|
14
|
+
new Zen.Tabs('div.tabs ul');
|
15
|
+
}
|
16
|
+
|
17
|
+
/**
|
18
|
+
* Initialize our editor for all elements with a class of "text_editor"
|
19
|
+
* and retrieve the editor format from the attribute "data-format".
|
20
|
+
*/
|
21
|
+
$$('.text_editor').each(function(editor)
|
22
|
+
{
|
23
|
+
var markup = editor.get('data-format');
|
24
|
+
|
25
|
+
if ( typeOf(markup) === 'undefined' )
|
26
|
+
{
|
27
|
+
markup = 'html';
|
28
|
+
}
|
29
|
+
|
30
|
+
Zen.Editor.create(markup, editor);
|
31
|
+
});
|
32
|
+
|
33
|
+
/**
|
34
|
+
* Initializes a datepicker object whenever it's loaded and the correct
|
35
|
+
* element was found.
|
36
|
+
*/
|
37
|
+
var date_elements = $$('input[type="text"].date');
|
38
|
+
|
39
|
+
if ( date_elements.length > 0 )
|
40
|
+
{
|
41
|
+
new Picker.Date(date_elements,
|
42
|
+
{
|
43
|
+
timePicker: true,
|
44
|
+
pickerClass: 'datepicker',
|
45
|
+
format: '%Y-%m-%d %H:%M:%S'
|
46
|
+
});
|
47
|
+
}
|
48
|
+
});
|
@@ -0,0 +1,111 @@
|
|
1
|
+
/**
|
2
|
+
* The namespace used by all Javascript classes that come with Zen.
|
3
|
+
*
|
4
|
+
* @author Yorick Peterse
|
5
|
+
* @since 0.2.6
|
6
|
+
*/
|
7
|
+
Zen = {};
|
8
|
+
|
9
|
+
/**
|
10
|
+
* Zen.Asset is a small "class" that can be used to load Javascript or CSS
|
11
|
+
* files. This class keeps track of all the files it has loaded and thus
|
12
|
+
* prevents a certain file from being loaded multiple times.
|
13
|
+
*
|
14
|
+
* @author Yorick Peterse
|
15
|
+
* @since 0.2.8
|
16
|
+
*/
|
17
|
+
Zen.Asset =
|
18
|
+
{
|
19
|
+
/**
|
20
|
+
* Object containing the Javascript and CSS files that have been loaded.
|
21
|
+
*
|
22
|
+
* @author Yorick Peterse
|
23
|
+
* @since 0.2.8
|
24
|
+
*/
|
25
|
+
assets:
|
26
|
+
{
|
27
|
+
javascripts: [],
|
28
|
+
stylesheets: []
|
29
|
+
},
|
30
|
+
|
31
|
+
/**
|
32
|
+
* Allows you to load a number of Javascript files. These files should be
|
33
|
+
* specified relative to /admin/js/ and should not start with a slash.
|
34
|
+
*
|
35
|
+
* @author Yorick Peterse
|
36
|
+
* @since 0.2.8
|
37
|
+
* @param {array} files An array of Javascript files to load.
|
38
|
+
*/
|
39
|
+
javascript: function(files)
|
40
|
+
{
|
41
|
+
files.each(function(file)
|
42
|
+
{
|
43
|
+
file = '/admin/js/' + files + '.js';
|
44
|
+
|
45
|
+
if ( !Zen.Asset.assets.javascripts.contains(file) )
|
46
|
+
{
|
47
|
+
Asset.javascript(file);
|
48
|
+
Zen.Asset.assets.javascripts.push(file);
|
49
|
+
}
|
50
|
+
});
|
51
|
+
},
|
52
|
+
|
53
|
+
/**
|
54
|
+
* Allows you to load a number of CSS files. These files should be specified
|
55
|
+
* relative to /admin/css/ and just like Zen.Asset.javascript these should
|
56
|
+
* not start with a slash.
|
57
|
+
*
|
58
|
+
* @author Yorick Peterse
|
59
|
+
* @since 0.2.8
|
60
|
+
* @param {array} files An array of stylesheets to load.
|
61
|
+
*/
|
62
|
+
|
63
|
+
stylesheet: function(files)
|
64
|
+
{
|
65
|
+
files.each(function(file)
|
66
|
+
{
|
67
|
+
file = '/admin/css/' + files + '.css';
|
68
|
+
|
69
|
+
if ( !Zen.Asset.assets.stylesheets.contains(file) )
|
70
|
+
{
|
71
|
+
Asset.css(file);
|
72
|
+
Zen.Asset.assets.stylesheets.push(file);
|
73
|
+
}
|
74
|
+
});
|
75
|
+
}
|
76
|
+
};
|
77
|
+
|
78
|
+
/**
|
79
|
+
* Extends the Class class so that dependencies on Javascript and CSS files can
|
80
|
+
* be inserted into a class using the assets system that comes with Mootools.
|
81
|
+
*
|
82
|
+
* Note that you shouldn't specify the file extension, this will be added
|
83
|
+
* automatically.
|
84
|
+
*
|
85
|
+
* @example
|
86
|
+
* var my_class = new Class(
|
87
|
+
* {
|
88
|
+
* Depends:
|
89
|
+
* {
|
90
|
+
* stylesheet: ['zen/editor']
|
91
|
+
* }
|
92
|
+
* });
|
93
|
+
*
|
94
|
+
* @author Yorick Peterse
|
95
|
+
* @since 0.2.6
|
96
|
+
* @see Zen.Asset
|
97
|
+
* @param {object} deps Object containing the stylesheets and Javascript files
|
98
|
+
* required by a class.
|
99
|
+
*/
|
100
|
+
Class.Mutators.Depends = function(deps)
|
101
|
+
{
|
102
|
+
if ( deps.javascript )
|
103
|
+
{
|
104
|
+
Zen.Asset.javascript(deps.javascript);
|
105
|
+
}
|
106
|
+
|
107
|
+
if ( deps.stylesheet )
|
108
|
+
{
|
109
|
+
Zen.Asset.stylesheet(deps.stylesheet);
|
110
|
+
}
|
111
|
+
}
|
@@ -1,77 +1,49 @@
|
|
1
1
|
/**
|
2
|
-
* Base class for all drivers that provides several common methods and allows
|
3
|
-
* to use the same syntax for all editor drivers.
|
2
|
+
* Base class for all drivers that provides several common methods and allows
|
3
|
+
* developers to use the same syntax for all editor drivers.
|
4
4
|
*
|
5
5
|
* ## Usage
|
6
6
|
*
|
7
|
-
* In order to create a new instance of Zen.Editor your textareas will need an
|
8
|
-
* called "data-format". Without this attribute this class will assume
|
9
|
-
* as your markup. An example of the most basic textarea looks
|
7
|
+
* In order to create a new instance of Zen.Editor your textareas will need an
|
8
|
+
* attribute called "data-format". Without this attribute this class will assume
|
9
|
+
* you're using HTML as your markup. An example of the most basic textarea looks
|
10
|
+
* like the following:
|
10
11
|
*
|
11
12
|
* <textarea data-format="markdown"></textarea>
|
12
13
|
*
|
13
|
-
* To make it easier to retrieve an editor instance once it's created you should
|
14
|
-
* to the element. Instances of a textarea with an ID set can be
|
15
|
-
* Zen.Editor.instances, this doesn't work for classes or other
|
14
|
+
* To make it easier to retrieve an editor instance once it's created you should
|
15
|
+
* add an ID to the element. Instances of a textarea with an ID set can be
|
16
|
+
* retrieved from Zen.Editor.instances, this doesn't work for classes or other
|
17
|
+
* attributes.
|
16
18
|
*
|
17
19
|
* <textarea data-format="markdown" id="markdown_editor"></textarea>
|
18
20
|
*
|
19
|
-
* Once you have your element in place you can create a new instance by
|
21
|
+
* Once you have your element in place you can create a new instance by calling
|
22
|
+
* Zen.Editor.create. While other classes such as Zen.Window can be initialized
|
23
|
+
* the regular way by using the "new" keyword this will not work for Zen.Editor.
|
24
|
+
* The reason is that the editor has to initialize a sub class based on the
|
25
|
+
* specified driver and return that class, something which isn't possible inside
|
26
|
+
* a class' constructor. The syntax of Zen.Editor.create looks like the
|
20
27
|
* following:
|
21
28
|
*
|
22
|
-
*
|
29
|
+
* Zen.Editor.create(driver, element[, options]);
|
23
30
|
*
|
24
|
-
*
|
25
|
-
* ID we can retrieve this instance as following:
|
31
|
+
* A basic example of using this method looks like the following:
|
26
32
|
*
|
27
|
-
* Zen.Editor.
|
33
|
+
* var editor = Zen.Editor.create('markdown', $('editor'), {height: 200});
|
28
34
|
*
|
29
|
-
*
|
30
|
-
* you'
|
35
|
+
* Once an editor has been initialized you can access it from a variable (if
|
36
|
+
* you've stored the resulting object in a variable) or by using
|
37
|
+
* Zen.Editor.instances. This object contains a list of element IDs and the
|
38
|
+
* editor instances for those IDs. If we were to use the code above you could
|
39
|
+
* access the instance for #editor as following:
|
31
40
|
*
|
32
|
-
*
|
33
|
-
* it's a string it's assumed that it's a valid CSS selector and the first element found
|
34
|
-
* will be used. If it's an element it will be used directly without any further
|
35
|
-
* processing. A few examples can be seen below.
|
41
|
+
* Zen.Editor.instances['editor'];
|
36
42
|
*
|
37
|
-
*
|
38
|
-
* new Zen.Editor($$('textarea.some_editor')); // => First item will be used
|
43
|
+
* For more information see the documentation for the following methods:
|
39
44
|
*
|
40
|
-
*
|
41
|
-
*
|
42
|
-
*
|
43
|
-
* * height: sets a fixed height for the textarea.
|
44
|
-
* * width: does the same as "height" but for the width.
|
45
|
-
*
|
46
|
-
* The third (and last) parameter is an array of custom buttons to add to the editor on
|
47
|
-
* top of the default buttons. This parameter should be an array of objects where each
|
48
|
-
* object has the following three keys:
|
49
|
-
*
|
50
|
-
* * name: a unique name for the button, also set as the class of the <li> element.
|
51
|
-
* * label: a label to display in the button, also used for the value of the title
|
52
|
-
* attribute.
|
53
|
-
* * onClick: function that's executed whenever the button is clicked. This function can
|
54
|
-
* take a single parameter which is set to the instance of the editor to which the button
|
55
|
-
* belongs.
|
56
|
-
*
|
57
|
-
* A full example looks like the following:
|
58
|
-
*
|
59
|
-
* new Zen.Editor(
|
60
|
-
* $('markdown_editor'),
|
61
|
-
* {
|
62
|
-
* height: 600
|
63
|
-
* },
|
64
|
-
* [
|
65
|
-
* {
|
66
|
-
* name: 'example',
|
67
|
-
* label: 'example',
|
68
|
-
* onClick: function(editor)
|
69
|
-
* {
|
70
|
-
* console.log(editor.get('value'));
|
71
|
-
* }
|
72
|
-
* }
|
73
|
-
* ]
|
74
|
-
* );
|
45
|
+
* * Zen.Editor.create()
|
46
|
+
* * Zen.Editor.initialize()
|
75
47
|
*
|
76
48
|
* ## Available Drivers
|
77
49
|
*
|
@@ -83,10 +55,11 @@
|
|
83
55
|
*
|
84
56
|
* ## Creating Drivers
|
85
57
|
*
|
86
|
-
* Creating a new driver for your own favorite markup engine (e.g.
|
87
|
-
* pretty simple. Each driver should be declared under the
|
88
|
-
* extend the base class, Zen.Editor. The latter
|
89
|
-
* features of the parent class if it
|
58
|
+
* Creating a new driver for your own favorite markup engine (e.g.
|
59
|
+
* restructuredText) is pretty simple. Each driver should be declared under the
|
60
|
+
* Zen.Editor namespace and should extend the base class, Zen.Editor. The latter
|
61
|
+
* makes it possible for the driver to use features of the parent class if it
|
62
|
+
* doesn't override or provides them itself.
|
90
63
|
*
|
91
64
|
* A basic skeleton for a driver looks like the following:
|
92
65
|
*
|
@@ -95,22 +68,20 @@
|
|
95
68
|
* Extends: Zen.Editor
|
96
69
|
* });
|
97
70
|
*
|
98
|
-
* Usually you don't want to redeclare the initialize() method as it's used to
|
99
|
-
* of the required data for an editor. Typically you'll only want to
|
100
|
-
* for the default buttons or add your own ones.
|
71
|
+
* Usually you don't want to redeclare the initialize() method as it's used to
|
72
|
+
* create most of the required data for an editor. Typically you'll only want to
|
73
|
+
* override the methods for the default buttons or add your own ones.
|
101
74
|
*
|
102
|
-
* Once a driver has been written it's class has to be registered, this can be
|
103
|
-
* following:
|
75
|
+
* Once a driver has been written it's class has to be registered, this can be
|
76
|
+
* done as following:
|
104
77
|
*
|
105
78
|
* Zen.Editor.drivers.restructured_text = 'RestructuredText';
|
106
79
|
*
|
107
|
-
* The key of Zen.Editor.drivers should match the value set in the data-format
|
108
|
-
* it's value should be the name of the driver's class.
|
80
|
+
* The key of Zen.Editor.drivers should match the value set in the data-format
|
81
|
+
* attribute, it's value should be the name of the driver's class.
|
109
82
|
*
|
110
|
-
* @author
|
111
|
-
* @since
|
112
|
-
* @implements Options
|
113
|
-
* @namespace Zen
|
83
|
+
* @author Yorick Peterse
|
84
|
+
* @since 0.2.6
|
114
85
|
*/
|
115
86
|
Zen.Editor = new Class(
|
116
87
|
{
|
@@ -119,7 +90,7 @@ Zen.Editor = new Class(
|
|
119
90
|
Depends:
|
120
91
|
{
|
121
92
|
stylesheet: ['zen/editor'],
|
122
|
-
javascript: ['zen/
|
93
|
+
javascript: ['zen/lib/window']
|
123
94
|
},
|
124
95
|
|
125
96
|
/**
|
@@ -127,28 +98,29 @@ Zen.Editor = new Class(
|
|
127
98
|
*
|
128
99
|
* @author Yorick Peterse
|
129
100
|
* @since 0.2.6
|
130
|
-
* @var
|
101
|
+
* @var {object}
|
131
102
|
*/
|
132
103
|
options:
|
133
104
|
{
|
134
105
|
// The default height in pixels
|
135
106
|
height: 400,
|
136
107
|
|
137
|
-
// The default width in pixels, set it to null to leave it unchanged
|
108
|
+
// The default width in pixels, set it to null to leave it unchanged
|
109
|
+
// (default)
|
138
110
|
width: null
|
139
111
|
},
|
140
112
|
|
141
113
|
/**
|
142
|
-
* Array containing all the buttons to display in the toolbar and their
|
143
|
-
* events. Note that if the onClick values are strings the class
|
144
|
-
* methods available in the current instance.
|
114
|
+
* Array containing all the buttons to display in the toolbar and their
|
115
|
+
* onClick events. Note that if the onClick values are strings the class
|
116
|
+
* assumes they're methods available in the current instance.
|
145
117
|
*
|
146
|
-
* Each callback gets two parameters sent to it: the editor instance and
|
147
|
-
* the button that was clicked.
|
118
|
+
* Each callback gets two parameters sent to it: the editor instance and
|
119
|
+
* the object of the button that was clicked.
|
148
120
|
*
|
149
121
|
* @author Yorick Peterse
|
150
122
|
* @since 0.2.6
|
151
|
-
* @var
|
123
|
+
* @var {array}
|
152
124
|
*/
|
153
125
|
buttons:
|
154
126
|
[
|
@@ -165,24 +137,25 @@ Zen.Editor = new Class(
|
|
165
137
|
*
|
166
138
|
* @author Yorick Peterse
|
167
139
|
* @since 0.2.6
|
168
|
-
* @var
|
140
|
+
* @var {element}
|
169
141
|
*/
|
170
142
|
element: null,
|
171
143
|
|
172
144
|
/**
|
173
|
-
* Creates a new instance of the class and saves and validates all the given
|
145
|
+
* Creates a new instance of the class and saves and validates all the given
|
146
|
+
* data.
|
174
147
|
*
|
175
148
|
* @example
|
176
149
|
* var editor = new Zen.Editor($('editor'), {markup: 'markdown'});
|
177
150
|
*
|
178
151
|
* @author Yorick Peterse
|
179
152
|
* @since 0.2.6
|
180
|
-
* @param
|
181
|
-
* selector is specified only the first element will be used.
|
182
|
-
* @param
|
183
|
-
* merged with this.options.
|
184
|
-
* @param
|
185
|
-
* default ones.
|
153
|
+
* @param {object|string} element Either a DOM element or a CSS selector.
|
154
|
+
* If a selector is specified only the first element will be used.
|
155
|
+
* @param {object} options Object containing a custom set of options that
|
156
|
+
* will be merged with this.options.
|
157
|
+
* @param {array} buttons An array with a custom set of buttons to add on
|
158
|
+
* top of the default ones.
|
186
159
|
*/
|
187
160
|
initialize: function(element, options, buttons)
|
188
161
|
{
|
@@ -192,7 +165,9 @@ Zen.Editor = new Class(
|
|
192
165
|
// The element variable is always required
|
193
166
|
if ( typeOf(element) === 'undefined' )
|
194
167
|
{
|
195
|
-
throw new SyntaxError(
|
168
|
+
throw new SyntaxError(
|
169
|
+
"You need to specify an element for the editor."
|
170
|
+
);
|
196
171
|
}
|
197
172
|
|
198
173
|
this.element = Zen.Editor.getElement(element);
|
@@ -221,8 +196,9 @@ Zen.Editor = new Class(
|
|
221
196
|
}
|
222
197
|
);
|
223
198
|
|
224
|
-
// Add the onClick event, when clicked the current editor's instance
|
225
|
-
// to the event allowing developers to work with it's
|
199
|
+
// Add the onClick event, when clicked the current editor's instance
|
200
|
+
// is passed to the event allowing developers to work with it's
|
201
|
+
// content.
|
226
202
|
li.addEvent('click', function()
|
227
203
|
{
|
228
204
|
var current_editor = this.getParent('.editor_container')
|
@@ -261,8 +237,8 @@ Zen.Editor = new Class(
|
|
261
237
|
},
|
262
238
|
|
263
239
|
/**
|
264
|
-
* Destroys the editor instance. This will remove all HTML and removes the
|
265
|
-
* from Zen.Editor.instances if it has an ID.
|
240
|
+
* Destroys the editor instance. This will remove all HTML and removes the
|
241
|
+
* textarea from Zen.Editor.instances if it has an ID.
|
266
242
|
*
|
267
243
|
* @author Yorick Peterse
|
268
244
|
* @since 0.2.6
|
@@ -293,7 +269,7 @@ Zen.Editor = new Class(
|
|
293
269
|
*
|
294
270
|
* @author Yorick Peterse
|
295
271
|
* @since 0.2.6
|
296
|
-
* @param
|
272
|
+
* @param {element} editor The editor to insert the tags into.
|
297
273
|
*/
|
298
274
|
bold: function(editor)
|
299
275
|
{
|
@@ -305,7 +281,7 @@ Zen.Editor = new Class(
|
|
305
281
|
*
|
306
282
|
* @author Yorick Peterse
|
307
283
|
* @since 0.2.6
|
308
|
-
* @param
|
284
|
+
* @param {element} editor The editor to insert the tags into.
|
309
285
|
*/
|
310
286
|
italic: function(editor)
|
311
287
|
{
|
@@ -317,7 +293,7 @@ Zen.Editor = new Class(
|
|
317
293
|
*
|
318
294
|
* @author Yorick Peterse
|
319
295
|
* @since 0.2.6
|
320
|
-
* @param
|
296
|
+
* @param {element} editor The editor to insert the tags into.
|
321
297
|
*/
|
322
298
|
link: function(editor)
|
323
299
|
{
|
@@ -335,7 +311,7 @@ Zen.Editor = new Class(
|
|
335
311
|
*
|
336
312
|
* @author Yorick Peterse
|
337
313
|
* @since 0.2.6
|
338
|
-
* @param
|
314
|
+
* @param {element} editor The editor to insert the tags into.
|
339
315
|
*/
|
340
316
|
ul: function(editor)
|
341
317
|
{
|
@@ -351,7 +327,7 @@ Zen.Editor = new Class(
|
|
351
327
|
*
|
352
328
|
* @author Yorick Peterse
|
353
329
|
* @since 0.2.6
|
354
|
-
* @param
|
330
|
+
* @param {element} editor The editor to insert the tags into.
|
355
331
|
*/
|
356
332
|
ol: function(editor)
|
357
333
|
{
|
@@ -367,7 +343,7 @@ Zen.Editor = new Class(
|
|
367
343
|
*
|
368
344
|
* @author Yorick Peterse
|
369
345
|
* @since 0.2.6
|
370
|
-
* @param
|
346
|
+
* @param {element} editor The editor to render the preview for.
|
371
347
|
*/
|
372
348
|
preview: function(editor)
|
373
349
|
{
|
@@ -385,12 +361,12 @@ Zen.Editor = new Class(
|
|
385
361
|
response,
|
386
362
|
{
|
387
363
|
title: 'Preview',
|
388
|
-
width:
|
364
|
+
width: 700,
|
389
365
|
move: true,
|
390
|
-
buttons:
|
366
|
+
buttons:
|
391
367
|
[
|
392
368
|
{
|
393
|
-
name: 'close',
|
369
|
+
name: 'close',
|
394
370
|
label: 'Close',
|
395
371
|
onClick: function(instance)
|
396
372
|
{
|
@@ -411,7 +387,7 @@ Zen.Editor = new Class(
|
|
411
387
|
*
|
412
388
|
* @author Yorick Peterse
|
413
389
|
* @since 0.2.6
|
414
|
-
* @var
|
390
|
+
* @var {object}
|
415
391
|
*/
|
416
392
|
Zen.Editor.drivers = {
|
417
393
|
markdown: 'Markdown',
|
@@ -419,33 +395,33 @@ Zen.Editor.drivers = {
|
|
419
395
|
};
|
420
396
|
|
421
397
|
/**
|
422
|
-
* Object that will contain a list of all instances of the Zen.Editor class.
|
423
|
-
* textareas will need an ID in order for them to be added to this
|
398
|
+
* Object that will contain a list of all instances of the Zen.Editor class.
|
399
|
+
* Note that the textareas will need an ID in order for them to be added to this
|
400
|
+
* list.
|
424
401
|
*
|
425
402
|
* @author Yorick Peterse
|
426
403
|
* @since 0.2.6
|
427
|
-
* @var
|
404
|
+
* @var {object}
|
428
405
|
*/
|
429
406
|
Zen.Editor.instances = {};
|
430
407
|
|
431
408
|
/**
|
432
|
-
* Class method that can be used to create editor instances using different
|
433
|
-
* still using the same syntax.
|
409
|
+
* Class method that can be used to create editor instances using different
|
410
|
+
* drivers while still using the same syntax.
|
434
411
|
*
|
435
412
|
* @example
|
436
|
-
* var editor = Zen.Editor.
|
413
|
+
* var editor = Zen.Editor.create('markdown', $('editor'), {height: 200});
|
437
414
|
*
|
438
415
|
* @author Yorick Peterse
|
439
416
|
* @since 0.2.6
|
440
|
-
* @param [String] driver The name of the driver to use.
|
441
|
-
* @param [Object|String] A DOM element or a CSS selector.
|
442
|
-
* @param [Object] options An object containing custom options to use.
|
443
|
-
* @param [Object[ buttons An array of buttons to add to the editor.
|
444
417
|
* @see Zen.Editor.initialize
|
445
|
-
* @
|
446
|
-
*
|
418
|
+
* @param {string} driver The name of the driver to use.
|
419
|
+
* @param {object|string} A DOM element or a CSS selector.
|
420
|
+
* @param {object} options An object containing custom options to use.
|
421
|
+
* @param {object} buttons An array of buttons to add to the editor.
|
422
|
+
* @return {object} An instance of the correct driver.
|
447
423
|
*/
|
448
|
-
Zen.Editor.
|
424
|
+
Zen.Editor.create = function(driver, element, options, buttons)
|
449
425
|
{
|
450
426
|
if ( !driver )
|
451
427
|
{
|
@@ -454,10 +430,13 @@ Zen.Editor.init = function(driver, element, options, buttons)
|
|
454
430
|
|
455
431
|
if ( !element )
|
456
432
|
{
|
457
|
-
throw new SyntaxError(
|
433
|
+
throw new SyntaxError(
|
434
|
+
"You need to specify a DOM element or a CSS selector."
|
435
|
+
);
|
458
436
|
}
|
459
437
|
|
460
|
-
// Get the element so we can determine if the textarea has already been
|
438
|
+
// Get the element so we can determine if the textarea has already been
|
439
|
+
// processed
|
461
440
|
element = Zen.Editor.getElement(element);
|
462
441
|
|
463
442
|
if ( element.get('data-state') === 'initialized' )
|
@@ -468,8 +447,8 @@ Zen.Editor.init = function(driver, element, options, buttons)
|
|
468
447
|
var driver_class = Zen.Editor.drivers[driver];
|
469
448
|
var instance = null;
|
470
449
|
|
471
|
-
// Try to see if a driver exists for the given name. If there isn't we'll
|
472
|
-
// HTML driver as a fallback.
|
450
|
+
// Try to see if a driver exists for the given name. If there isn't we'll
|
451
|
+
// use the HTML driver as a fallback.
|
473
452
|
if ( typeOf(driver_class) === 'undefined' || !Zen.Editor[driver_class] )
|
474
453
|
{
|
475
454
|
instance = new Zen.Editor(element, options, buttons);
|
@@ -489,19 +468,20 @@ Zen.Editor.init = function(driver, element, options, buttons)
|
|
489
468
|
};
|
490
469
|
|
491
470
|
/**
|
492
|
-
* Retrieves the correct element for the given CSS selector or element(s). If
|
493
|
-
* parameter is a single DOM element it will be returned immediately, if
|
494
|
-
* objects only the first one will be returned. If the
|
495
|
-
* will return the first element for the
|
471
|
+
* Retrieves the correct element for the given CSS selector or element(s). If
|
472
|
+
* the parameter is a single DOM element it will be returned immediately, if
|
473
|
+
* it's an array of objects only the first one will be returned. If the
|
474
|
+
* parameter is a string this method will return the first element for the
|
475
|
+
* given selector.
|
496
476
|
*
|
497
477
|
* @example
|
498
478
|
* Zen.Editor.getElement($$('.some_class')); # => Element
|
499
479
|
*
|
500
480
|
* @author Yorick Peterse
|
501
481
|
* @since 0.2.6
|
502
|
-
* @param
|
503
|
-
* element.
|
504
|
-
* @return
|
482
|
+
* @param {string|array|element} The source data from which to extract the
|
483
|
+
* (first) element.
|
484
|
+
* @return {element}
|
505
485
|
*/
|
506
486
|
Zen.Editor.getElement = function(element)
|
507
487
|
{
|