your_platform 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/README.md +39 -11
- data/Rakefile +15 -1
- data/app/assets/images/file.png +0 -0
- data/app/assets/images/img/excel2013_file_128.png +0 -0
- data/app/assets/images/img/excel2013_file_bw_107.png +0 -0
- data/app/assets/images/img/excel2013_file_bw_semitransparent_107.png +0 -0
- data/app/assets/images/img/glyphicons-halflings-white.png +0 -0
- data/app/assets/images/img/glyphicons-halflings.png +0 -0
- data/app/assets/images/img/gmaps_yellow_marker.png +0 -0
- data/app/assets/images/img/gmaps_yellow_marker_38.png +0 -0
- data/app/assets/images/markdown_help.png +0 -0
- data/app/assets/images/your_platform/breadcrumb-sep.png +0 -0
- data/app/assets/javascripts/app-ng.js.coffee +5 -0
- data/app/assets/javascripts/attachments.js +2 -0
- data/app/assets/javascripts/controllers-ng/bookmark_list_controller.js.coffee +30 -0
- data/app/assets/javascripts/controllers-ng/box_controller.js.coffee +37 -0
- data/app/assets/javascripts/controllers-ng/profile_angular.js.coffee +151 -0
- data/app/assets/javascripts/directives-ng/box_directive.js.coffee +91 -0
- data/app/assets/javascripts/directives-ng/star_tool_directive.js.coffee +111 -0
- data/app/assets/javascripts/filters-ng/some_filter.js.coffee +0 -0
- data/app/assets/javascripts/jquery.appear-1.1.1.js +138 -0
- data/app/assets/javascripts/make-js-more-like-ruby.js.coffee +32 -0
- data/app/assets/javascripts/mercury.js +456 -0
- data/app/assets/javascripts/models-ng/bookmark.js.coffee +28 -0
- data/app/assets/javascripts/services-ng/current_user_bookmarks.js.coffee +39 -0
- data/app/assets/javascripts/your_platform.js +27 -0
- data/app/assets/javascripts/your_platform/address_labels.js.coffee +40 -0
- data/app/assets/javascripts/your_platform/attachments.js.coffee +61 -0
- data/app/assets/javascripts/your_platform/auto-completion.js.coffee +90 -0
- data/app/assets/javascripts/your_platform/best_in_place.js.coffee +8 -0
- data/app/assets/javascripts/your_platform/best_in_place_hyperlinks.js.coffee +25 -0
- data/app/assets/javascripts/your_platform/best_in_place_tab_key.js.coffee +28 -0
- data/app/assets/javascripts/your_platform/boxes.js.coffee +11 -0
- data/app/assets/javascripts/your_platform/change_password.js.coffee +22 -0
- data/app/assets/javascripts/your_platform/close_dropdowns.js.coffee +18 -0
- data/app/assets/javascripts/your_platform/copy_to_clipboard.js.coffee +6 -0
- data/app/assets/javascripts/your_platform/datatables.coffee +112 -0
- data/app/assets/javascripts/your_platform/datepicker_settings.js.coffee +16 -0
- data/app/assets/javascripts/your_platform/edit_tools.js.coffee +19 -0
- data/app/assets/javascripts/your_platform/editable_dbl_click.js.coffee +42 -0
- data/app/assets/javascripts/your_platform/events.js.coffee +126 -0
- data/app/assets/javascripts/your_platform/fix_textarea.js.coffee +11 -0
- data/app/assets/javascripts/your_platform/galleria.js.coffee +112 -0
- data/app/assets/javascripts/your_platform/groups.js.coffee +36 -0
- data/app/assets/javascripts/your_platform/hidden.js.coffee +5 -0
- data/app/assets/javascripts/your_platform/links_to_external_sites.js.coffee +12 -0
- data/app/assets/javascripts/your_platform/maps.js.coffee +13 -0
- data/app/assets/javascripts/your_platform/may_need_review.js.coffee +10 -0
- data/app/assets/javascripts/your_platform/navable_title_rename.js.coffee +17 -0
- data/app/assets/javascripts/your_platform/officers.js.coffee +35 -0
- data/app/assets/javascripts/your_platform/popovers.js.coffee +38 -0
- data/app/assets/javascripts/your_platform/posts.js.coffee +58 -0
- data/app/assets/javascripts/your_platform/profile_fields.js.coffee +61 -0
- data/app/assets/javascripts/your_platform/search.js.coffee +26 -0
- data/app/assets/javascripts/your_platform/tooltips.js.coffee +10 -0
- data/app/assets/javascripts/your_platform/turbolinks_loading_spinner.js.coffee +83 -0
- data/app/assets/javascripts/your_platform/user_avatars.js.coffee +33 -0
- data/app/assets/javascripts/your_platform/user_group_memberships.js.coffee +11 -0
- data/app/assets/javascripts/your_platform/user_settings.js.coffee +18 -0
- data/app/assets/javascripts/your_platform/users_new.js.coffee +54 -0
- data/app/assets/stylesheets/bootstrap_layout.css.sass +3 -0
- data/app/assets/stylesheets/bootstrap_layout/attachments.css.sass +3 -0
- data/app/assets/stylesheets/bootstrap_layout/boxes.css.sass +11 -0
- data/app/assets/stylesheets/bootstrap_layout/breadcrumb.css.sass +25 -0
- data/app/assets/stylesheets/bootstrap_layout/category_indicator.css.sass +5 -0
- data/app/assets/stylesheets/bootstrap_layout/footer.css.sass +14 -0
- data/app/assets/stylesheets/bootstrap_layout/galleria.css.sass +8 -0
- data/app/assets/stylesheets/bootstrap_layout/header_bar.css.sass +11 -0
- data/app/assets/stylesheets/bootstrap_layout/headings.css.sass +10 -0
- data/app/assets/stylesheets/bootstrap_layout/logged_in_bar.css.sass +40 -0
- data/app/assets/stylesheets/bootstrap_layout/logo.css.sass +2 -0
- data/app/assets/stylesheets/bootstrap_layout/modal_fix.css.sass +8 -0
- data/app/assets/stylesheets/bootstrap_layout/profiles.css.sass +10 -0
- data/app/assets/stylesheets/bootstrap_layout/session_bar.css.sass +60 -0
- data/app/assets/stylesheets/bootstrap_layout/stars.css.sass +4 -0
- data/app/assets/stylesheets/bootstrap_layout/turbolinks_progress_bar.css.sass +3 -0
- data/app/assets/stylesheets/bootstrap_layout/vertical_menu.css.sass +15 -0
- data/app/assets/stylesheets/bootstrap_setup.css.sass +4 -0
- data/app/assets/stylesheets/your_platform.css.sass +11 -0
- data/app/assets/stylesheets/your_platform/address_labels_modal.css.sass +8 -0
- data/app/assets/stylesheets/your_platform/attachments.css.sass +75 -0
- data/app/assets/stylesheets/your_platform/authorization_info.css.sass +16 -0
- data/app/assets/stylesheets/your_platform/auto-completion.css.sass +3 -0
- data/app/assets/stylesheets/your_platform/center.css.sass +14 -0
- data/app/assets/stylesheets/your_platform/change_password.css.sass +13 -0
- data/app/assets/stylesheets/your_platform/corporate_vita.css.sass +2 -0
- data/app/assets/stylesheets/your_platform/datatables.css.sass +23 -0
- data/app/assets/stylesheets/your_platform/datepicker.css.sass +2 -0
- data/app/assets/stylesheets/your_platform/dropdowns.css.sass +8 -0
- data/app/assets/stylesheets/your_platform/events.css.sass +68 -0
- data/app/assets/stylesheets/your_platform/forms.css.sass +25 -0
- data/app/assets/stylesheets/your_platform/galleria.css.sass +12 -0
- data/app/assets/stylesheets/your_platform/groups.css.sass +8 -0
- data/app/assets/stylesheets/your_platform/groups_table.css.sass +8 -0
- data/app/assets/stylesheets/your_platform/hidden.css.sass +3 -0
- data/app/assets/stylesheets/your_platform/images.css.sass +50 -0
- data/app/assets/stylesheets/your_platform/last_activities.css.sass +17 -0
- data/app/assets/stylesheets/your_platform/latest_members.css.sass +7 -0
- data/app/assets/stylesheets/your_platform/login.css.sass +4 -0
- data/app/assets/stylesheets/your_platform/maps.css.sass +22 -0
- data/app/assets/stylesheets/your_platform/markdown_help.css.sass +5 -0
- data/app/assets/stylesheets/your_platform/may_need_review.css.sass +3 -0
- data/app/assets/stylesheets/your_platform/pages.css.sass +12 -0
- data/app/assets/stylesheets/your_platform/password_strength.css.sass +73 -0
- data/app/assets/stylesheets/your_platform/picture_attachments.css.sass +7 -0
- data/app/assets/stylesheets/your_platform/popovers.css.sass +13 -0
- data/app/assets/stylesheets/your_platform/posts.css.sass +32 -0
- data/app/assets/stylesheets/your_platform/profiles.css.sass +153 -0
- data/app/assets/stylesheets/your_platform/search_preview.css.sass +4 -0
- data/app/assets/stylesheets/your_platform/star_tool.css.sass +2 -0
- data/app/assets/stylesheets/your_platform/tooltips.css.sass +7 -0
- data/app/assets/stylesheets/your_platform/turbolinks_loading_spinner.css.sass +3 -0
- data/app/assets/stylesheets/your_platform/user_avatars.css.sass +8 -0
- data/app/assets/stylesheets/your_platform/user_group_memberships.css.sass +4 -0
- data/app/assets/stylesheets/your_platform/vertical_nav.css.sass +7 -0
- data/app/controllers/activities_controller.rb +6 -0
- data/app/controllers/application_controller.rb +236 -0
- data/app/controllers/attachments_controller.rb +97 -0
- data/app/controllers/blog_posts_controller.rb +50 -0
- data/app/controllers/bookmarks_controller.rb +33 -0
- data/app/controllers/corporations_controller.rb +22 -0
- data/app/controllers/errors_controller.rb +27 -0
- data/app/controllers/events_controller.rb +262 -0
- data/app/controllers/groups_controller.rb +257 -0
- data/app/controllers/officers_controller.rb +28 -0
- data/app/controllers/pages_controller.rb +67 -0
- data/app/controllers/posts_controller.rb +81 -0
- data/app/controllers/profile_fields_controller.rb +132 -0
- data/app/controllers/root_controller.rb +35 -0
- data/app/controllers/search_controller.rb +149 -0
- data/app/controllers/sessions_controller.rb +21 -0
- data/app/controllers/setup_controller.rb +80 -0
- data/app/controllers/statistics_controller.rb +38 -0
- data/app/controllers/status_group_memberships_controller.rb +28 -0
- data/app/controllers/terms_of_use_controller.rb +35 -0
- data/app/controllers/user_accounts_controller.rb +55 -0
- data/app/controllers/user_group_memberships_controller.rb +75 -0
- data/app/controllers/user_settings_controller.rb +57 -0
- data/app/controllers/users_controller.rb +125 -0
- data/app/controllers/workflows_controller.rb +19 -0
- data/app/helpers/application_helper.rb +25 -0
- data/app/helpers/attachments_helper.rb +2 -0
- data/app/helpers/auto_completion_helper.rb +33 -0
- data/app/helpers/avatar_helper.rb +70 -0
- data/app/helpers/bookmarks_helper.rb +22 -0
- data/app/helpers/box_helper.rb +56 -0
- data/app/helpers/breadcrumbs_helper.rb +62 -0
- data/app/helpers/corporate_vita_helper.rb +34 -0
- data/app/helpers/events_helper.rb +28 -0
- data/app/helpers/flash_helper.rb +60 -0
- data/app/helpers/footer_helper.rb +13 -0
- data/app/helpers/galleria_helper.rb +13 -0
- data/app/helpers/groups_helper.rb +66 -0
- data/app/helpers/horizontal_nav_helper.rb +11 -0
- data/app/helpers/i18n_helper.rb +10 -0
- data/app/helpers/icon_helper.rb +35 -0
- data/app/helpers/mailer_helper.rb +7 -0
- data/app/helpers/map_helper.rb +26 -0
- data/app/helpers/markdown_helper.rb +22 -0
- data/app/helpers/markup_helper.rb +25 -0
- data/app/helpers/officers_helper.rb +13 -0
- data/app/helpers/password_helper.rb +23 -0
- data/app/helpers/profile_field_helper.rb +40 -0
- data/app/helpers/profile_helper.rb +69 -0
- data/app/helpers/quick_link_helper.rb +53 -0
- data/app/helpers/special_pages_helper.rb +9 -0
- data/app/helpers/structureable_helper.rb +11 -0
- data/app/helpers/sublime_helper.rb +16 -0
- data/app/helpers/title_helper.rb +52 -0
- data/app/helpers/tool_buttons_helper.rb +74 -0
- data/app/helpers/unicode_helper.rb +9 -0
- data/app/helpers/users_helper.rb +13 -0
- data/app/helpers/vertical_nav_helper.rb +84 -0
- data/app/helpers/workflows_helper.rb +37 -0
- data/app/mailers/event_mailer.rb +13 -0
- data/app/mailers/post_mailer.rb +11 -0
- data/app/mailers/user_account_mailer.rb +17 -0
- data/app/models/ability.rb +321 -0
- data/app/models/active_record_associations_patches.rb +26 -0
- data/app/models/active_record_cache_extension.rb +152 -0
- data/app/models/active_record_find_by_extension.rb +20 -0
- data/app/models/active_record_json_url_extension.rb +51 -0
- data/app/models/active_record_metric_events_extension.rb +22 -0
- data/app/models/active_record_read_only_extension.rb +35 -0
- data/app/models/active_record_update_attributes_bip_extension.rb +24 -0
- data/app/models/address_label.rb +50 -0
- data/app/models/app_version.rb +49 -0
- data/app/models/array.rb +15 -0
- data/app/models/attachment.rb +76 -0
- data/app/models/bashpass_password.rb +32 -0
- data/app/models/blog_post.rb +2 -0
- data/app/models/bookmark.rb +67 -0
- data/app/models/cache_additions.rb +15 -0
- data/app/models/cache_store_extension.rb +78 -0
- data/app/models/concerns/user_avatar.rb +16 -0
- data/app/models/concerns/user_corporations.rb +44 -0
- data/app/models/concerns/user_date_of_birth.rb +74 -0
- data/app/models/concerns/user_profile.rb +102 -0
- data/app/models/corporation.rb +80 -0
- data/app/models/dag_link.rb +29 -0
- data/app/models/event.rb +235 -0
- data/app/models/flag.rb +18 -0
- data/app/models/flagable.rb +62 -0
- data/app/models/geo_location.rb +92 -0
- data/app/models/group.rb +224 -0
- data/app/models/group_mixins/corporations.rb +141 -0
- data/app/models/group_mixins/developers.rb +41 -0
- data/app/models/group_mixins/everyone.rb +72 -0
- data/app/models/group_mixins/guests.rb +61 -0
- data/app/models/group_mixins/hidden_users.rb +43 -0
- data/app/models/group_mixins/import.rb +321 -0
- data/app/models/group_mixins/memberships.rb +207 -0
- data/app/models/group_mixins/officers.rb +47 -0
- data/app/models/group_mixins/roles.rb +41 -0
- data/app/models/horizontal_nav.rb +32 -0
- data/app/models/last_seen_activity.rb +10 -0
- data/app/models/list_export.rb +359 -0
- data/app/models/may_need_review.rb +54 -0
- data/app/models/metric_logger.rb +83 -0
- data/app/models/nav_node.rb +169 -0
- data/app/models/navable.rb +46 -0
- data/app/models/object_to_b_extension.rb +12 -0
- data/app/models/page.rb +212 -0
- data/app/models/password.rb +28 -0
- data/app/models/post.rb +199 -0
- data/app/models/profile.rb +36 -0
- data/app/models/profile_field.rb +196 -0
- data/app/models/profile_field_mixins/has_child_profile_fields.rb +114 -0
- data/app/models/profile_field_types/about.rb +9 -0
- data/app/models/profile_field_types/academic_degree.rb +10 -0
- data/app/models/profile_field_types/address.rb +88 -0
- data/app/models/profile_field_types/bank_account.rb +12 -0
- data/app/models/profile_field_types/competence.rb +7 -0
- data/app/models/profile_field_types/custom.rb +12 -0
- data/app/models/profile_field_types/date.rb +14 -0
- data/app/models/profile_field_types/description.rb +15 -0
- data/app/models/profile_field_types/email.rb +20 -0
- data/app/models/profile_field_types/employment.rb +24 -0
- data/app/models/profile_field_types/general.rb +9 -0
- data/app/models/profile_field_types/homepage.rb +19 -0
- data/app/models/profile_field_types/name_surrounding.rb +11 -0
- data/app/models/profile_field_types/organization.rb +24 -0
- data/app/models/profile_field_types/phone.rb +37 -0
- data/app/models/profile_field_types/professional_category.rb +8 -0
- data/app/models/profile_field_types/study.rb +18 -0
- data/app/models/profile_section.rb +49 -0
- data/app/models/profileable.rb +58 -0
- data/app/models/profileable_mixins/address.rb +118 -0
- data/app/models/relationship.rb +78 -0
- data/app/models/role.rb +164 -0
- data/app/models/setting.rb +9 -0
- data/app/models/status_group.rb +28 -0
- data/app/models/status_group_membership.rb +189 -0
- data/app/models/status_group_membership_info.rb +54 -0
- data/app/models/structureable.rb +164 -0
- data/app/models/structureable_mixins/has_special_groups.rb +127 -0
- data/app/models/structureable_mixins/roles.rb +275 -0
- data/app/models/user.rb +878 -0
- data/app/models/user_account.rb +162 -0
- data/app/models/user_alias.rb +112 -0
- data/app/models/user_group_membership.rb +300 -0
- data/app/models/user_group_membership_mixins/validity_range.rb +206 -0
- data/app/models/user_group_membership_mixins/validity_range_for_indirect_memberships.rb +160 -0
- data/app/models/user_mixins/identification.rb +36 -0
- data/app/models/user_mixins/memberships.rb +75 -0
- data/app/models/workflow.rb +40 -0
- data/app/models/workflow_kit/add_to_group_brick.rb +21 -0
- data/app/models/workflow_kit/destroy_account_and_end_memberships_if_needed_brick.rb +19 -0
- data/app/models/workflow_kit/last_membership_needs_review_brick.rb +19 -0
- data/app/models/workflow_kit/mark_as_deceased_brick.rb +17 -0
- data/app/models/workflow_kit/remove_from_group_brick.rb +27 -0
- data/app/models/workflow_kit/test_brick.rb +13 -0
- data/app/pdfs/address_labels_pdf.rb +157 -0
- data/app/presenters/base_presenter.rb +52 -0
- data/app/presenters/horizontal_nav_presenter.rb +106 -0
- data/app/uploaders/attachment_uploader.rb +148 -0
- data/app/views/activities/index.html.haml +25 -0
- data/app/views/attachments/_attachment.html.haml +20 -0
- data/app/views/attachments/_description.html.haml +11 -0
- data/app/views/attachments/_documents.html.haml +17 -0
- data/app/views/attachments/_drop_field.html.haml +46 -0
- data/app/views/attachments/_picture.html.haml +2 -0
- data/app/views/attachments/_pictures.html.haml +10 -0
- data/app/views/attachments/_video.html.haml +8 -0
- data/app/views/attachments/create.js.erb +1 -0
- data/app/views/attachments/destroy.js.erb +1 -0
- data/app/views/blog_posts/create.js.erb +17 -0
- data/app/views/bookmarks/_list.html.haml +7 -0
- data/app/views/bookmarks/update.js.erb +4 -0
- data/app/views/devise/mailer/reset_password_instructions.html.haml +8 -0
- data/app/views/devise/passwords/edit.html.haml +1 -0
- data/app/views/devise/passwords/new.html.haml +12 -0
- data/app/views/devise/registrations/edit.html.haml +1 -0
- data/app/views/devise/sessions/new.html.haml +14 -0
- data/app/views/devise/shared/_links.haml +26 -0
- data/app/views/errors/show.html.haml +5 -0
- data/app/views/errors/unauthorized.html.haml +7 -0
- data/app/views/event_mailer/invitation_email.html.erb +63 -0
- data/app/views/events/_event_details.html.haml +54 -0
- data/app/views/events/_events_lis.html.haml +29 -0
- data/app/views/events/_invitation_text.html.erb +8 -0
- data/app/views/events/_pictures.html.haml +5 -0
- data/app/views/events/_public_index.html.haml +16 -0
- data/app/views/events/index.html.haml +24 -0
- data/app/views/events/show.html.haml +50 -0
- data/app/views/groups/_address_labels_modal.html.haml +27 -0
- data/app/views/groups/_export_button.html.haml +66 -0
- data/app/views/groups/_group_list.html.haml +25 -0
- data/app/views/groups/_member_avatars.html.haml +4 -0
- data/app/views/groups/_member_list.html.haml +15 -0
- data/app/views/groups/index.html.erb +11 -0
- data/app/views/groups/index_mine.html.haml +7 -0
- data/app/views/groups/show.html.haml +79 -0
- data/app/views/last_seen_activities/_index.html.haml +19 -0
- data/app/views/layouts/_add_structureable_additions.html.haml +15 -0
- data/app/views/layouts/_box.html.haml +16 -0
- data/app/views/layouts/_help_button.html.haml +1 -0
- data/app/views/layouts/_role_preview_switcher.html.haml +20 -0
- data/app/views/layouts/_session_bar_avatar.html.haml +1 -0
- data/app/views/layouts/_vertical_nav.html.haml +5 -0
- data/app/views/layouts/bootstrap.html.haml +146 -0
- data/app/views/layouts/mercury.html.erb +23 -0
- data/app/views/officers/_history_notice.html.haml +4 -0
- data/app/views/officers/_officers_box.html.haml +33 -0
- data/app/views/officers/_officers_group_entry.html.haml +45 -0
- data/app/views/pages/_attachments.html.haml +21 -0
- data/app/views/pages/_page.html.haml +28 -0
- data/app/views/pages/_pictures.html.haml +2 -0
- data/app/views/pages/_videos.html.erb +8 -0
- data/app/views/pages/show.html.haml +39 -0
- data/app/views/post_mailer/post_email.html.erb +17 -0
- data/app/views/posts/_new_post_template_text.html.haml +6 -0
- data/app/views/posts/_post.html.haml +13 -0
- data/app/views/posts/_post_quote.html.haml +18 -0
- data/app/views/posts/_posts.html.haml +6 -0
- data/app/views/posts/index.html.haml +9 -0
- data/app/views/posts/new.html.haml +42 -0
- data/app/views/posts/show.html.haml +8 -0
- data/app/views/profile_fields/_postal_address_flag_switch.html.haml +21 -0
- data/app/views/profile_fields/_profile_field.html.haml +41 -0
- data/app/views/profile_fields/create.js.erb +26 -0
- data/app/views/profile_fields/destroy.js.erb +3 -0
- data/app/views/profiles/_add_profile_field_button.html.haml +15 -0
- data/app/views/profiles/_profile_section_ul.html.haml +8 -0
- data/app/views/profiles/_section.html.haml +28 -0
- data/app/views/profiles/_send_group_message_button.html.haml +4 -0
- data/app/views/root/_latest_members_box.html.haml +19 -0
- data/app/views/root/_start_page_elements.html.haml +0 -0
- data/app/views/root/_what_is_new.html.haml +21 -0
- data/app/views/search/_preview_blog_post.html.haml +1 -0
- data/app/views/search/_preview_corporation.html.haml +5 -0
- data/app/views/search/_preview_group.html.haml +4 -0
- data/app/views/search/_preview_page.html.haml +11 -0
- data/app/views/search/_preview_user.html.haml +14 -0
- data/app/views/search/index.html.haml +42 -0
- data/app/views/setup/index.html.haml +56 -0
- data/app/views/shared/_add_structureable.html.haml +22 -0
- data/app/views/shared/_authorization_info.html.haml +22 -0
- data/app/views/shared/_flags.html.haml +5 -0
- data/app/views/shared/_markdown_help.html.haml +4 -0
- data/app/views/shared/_search_box.html.haml +2 -0
- data/app/views/shared/_upcoming_events.html.haml +33 -0
- data/app/views/statistics/index.html.haml +16 -0
- data/app/views/statistics/show.html.haml +13 -0
- data/app/views/terms_of_use/_checkbox.html.haml +1 -0
- data/app/views/terms_of_use/_terms.html.haml +1 -0
- data/app/views/terms_of_use/index.html.haml +19 -0
- data/app/views/user_account_mailer/welcome_email.html.erb +32 -0
- data/app/views/user_accounts/_change_password.html.haml +149 -0
- data/app/views/user_accounts/_user_account.html.haml +39 -0
- data/app/views/user_group_memberships/_list_item.html.haml +9 -0
- data/app/views/user_group_memberships/_memberships_table.html.haml +56 -0
- data/app/views/user_group_memberships/_new.html.haml +18 -0
- data/app/views/user_group_memberships/create.js.erb +9 -0
- data/app/views/user_group_memberships/index.html.haml +5 -0
- data/app/views/user_settings/show.html.haml +36 -0
- data/app/views/users/_avatar.html.haml +16 -0
- data/app/views/users/_communication_box.html.haml +8 -0
- data/app/views/users/_corporate_vita.html.haml +23 -0
- data/app/views/users/_dead_badge.html.haml +3 -0
- data/app/views/users/_deceased_modal.html.haml +24 -0
- data/app/views/users/_hidden_badge.html.haml +4 -0
- data/app/views/users/_hidden_flag_switch.html.haml +20 -0
- data/app/views/users/_special_general_info_fields.html.haml +10 -0
- data/app/views/users/_user_corporation_attribute.html.haml +6 -0
- data/app/views/users/_user_name_attribute.html.haml +4 -0
- data/app/views/users/_user_title.html.haml +5 -0
- data/app/views/users/_workflow_triggers.html.haml +23 -0
- data/app/views/users/new.html.haml +55 -0
- data/app/views/users/show.html.haml +79 -0
- data/config/environment.rb +5 -0
- data/config/initializers/active_record_cache_extension.rb +1 -0
- data/config/initializers/active_record_find_by_extension.rb +1 -0
- data/config/initializers/active_record_flagable_extension.rb +2 -0
- data/config/initializers/active_record_json_url_extension.rb +1 -0
- data/config/initializers/active_record_may_need_review_extension.rb +2 -0
- data/config/initializers/active_record_metric_events_extension.rb +1 -0
- data/config/initializers/active_record_navable_extension.rb +6 -0
- data/config/initializers/active_record_profileable_extension.rb +4 -0
- data/config/initializers/active_record_read_only_extension.rb +1 -0
- data/config/initializers/active_record_structureable_extension.rb +3 -0
- data/config/initializers/active_record_update_attributes_bip_extension.rb +1 -0
- data/config/initializers/array_extension.rb +1 -0
- data/config/initializers/best_in_place_display_definitions.rb +31 -0
- data/config/initializers/cache_store_extension.rb +1 -0
- data/config/initializers/devise.rb +240 -0
- data/config/initializers/fnordmetric.rb +14 -0
- data/config/initializers/formtastic.rb +76 -0
- data/config/initializers/group_type_column_patches.rb +11 -0
- data/config/initializers/mime_types.rb +1 -0
- data/config/initializers/mini_profiler.rb +32 -0
- data/config/initializers/object_to_b_extension.rb +1 -0
- data/config/initializers/refile.rb +22 -0
- data/config/initializers/sidekiq.rb +12 -0
- data/config/locales/attachments/de.yml +33 -0
- data/config/locales/bookmarks/de.yml +3 -0
- data/config/locales/bookmarks/en.yml +3 -0
- data/config/locales/common_expressions/de.yml +5 -0
- data/config/locales/common_expressions/en.yml +5 -0
- data/config/locales/companies/de.yml +4 -0
- data/config/locales/companies/en.yml +4 -0
- data/config/locales/de.yml +30 -0
- data/config/locales/devise/de.yml +60 -0
- data/config/locales/devise/en.yml +62 -0
- data/config/locales/en.yml +25 -0
- data/config/locales/events/de.yml +34 -0
- data/config/locales/events/en.yml +34 -0
- data/config/locales/forms/de.yml +3 -0
- data/config/locales/groups/de.yml +56 -0
- data/config/locales/groups/en.yml +47 -0
- data/config/locales/officers/de.yml +10 -0
- data/config/locales/pages/de.yml +15 -0
- data/config/locales/pages/en.yml +14 -0
- data/config/locales/pagination/de.yml +6 -0
- data/config/locales/pagination/en.yml +5 -0
- data/config/locales/password_strength/de.yml +9 -0
- data/config/locales/password_strength/en.yml +9 -0
- data/config/locales/posts/de.yml +9 -0
- data/config/locales/profile_fields/de.yml +78 -0
- data/config/locales/profile_fields/en.yml +22 -0
- data/config/locales/profiles/de.yml +47 -0
- data/config/locales/profiles/en.yml +44 -0
- data/config/locales/roles/de.yml +9 -0
- data/config/locales/root/de.yml +3 -0
- data/config/locales/root/en.yml +3 -0
- data/config/locales/search/de.yml +11 -0
- data/config/locales/search/en.yml +11 -0
- data/config/locales/sessions/de.yml +37 -0
- data/config/locales/sessions/en.yml +37 -0
- data/config/locales/setup/de.yml +26 -0
- data/config/locales/setup/en.yml +26 -0
- data/config/locales/statistics/de.yml +6 -0
- data/config/locales/terms_of_use/de.yml +6 -0
- data/config/locales/tools/de.yml +9 -0
- data/config/locales/tools/en.yml +9 -0
- data/config/locales/user_accounts/de.yml +16 -0
- data/config/locales/user_accounts/en.yml +13 -0
- data/config/locales/user_settings/de.yml +9 -0
- data/config/locales/users/de.yml +82 -0
- data/config/locales/users/en.yml +51 -0
- data/config/locales/workflows/de.yml +4 -0
- data/config/locales/workflows/en.yml +4 -0
- data/config/routes.rb +104 -0
- data/db/migrate/20120403002734_create_users.rb +12 -0
- data/db/migrate/20120403011601_create_profile_fields.rb +11 -0
- data/db/migrate/20120403161549_remove_user_email_column.rb +5 -0
- data/db/migrate/20120405222050_encrypt_password.rb +8 -0
- data/db/migrate/20120425161138_create_dag_links.rb +14 -0
- data/db/migrate/20120425162644_create_pages.rb +10 -0
- data/db/migrate/20120426023322_create_groups.rb +9 -0
- data/db/migrate/20120426090436_create_nav_nodes.rb +18 -0
- data/db/migrate/20120427021934_create_user_accounts.rb +12 -0
- data/db/migrate/20120427044338_add_foreign_key_to_user_accounts.rb +7 -0
- data/db/migrate/20120427150156_add_group_token.rb +8 -0
- data/db/migrate/20120507165551_make_profile_fields_polymorphic.rb +11 -0
- data/db/migrate/20120508130729_add_profile_field_acts_as_tree.rb +9 -0
- data/db/migrate/20120508152233_change_profile_field_value_to_text.rb +9 -0
- data/db/migrate/20120508201550_add_group_internal_token.rb +11 -0
- data/db/migrate/20120511090234_create_workflows.rb +9 -0
- data/db/migrate/20120701115059_add_password_digest_to_user_accounts.rb +5 -0
- data/db/migrate/20120710193308_remove_salt_from_user_accounts.rb +5 -0
- data/db/migrate/20120713102445_add_deleted_at_to_dag_links.rb +5 -0
- data/db/migrate/20120722005022_create_workflow_kit_workflows.workflow_kit.rb +11 -0
- data/db/migrate/20120722005023_create_workflow_kit_steps.workflow_kit.rb +12 -0
- data/db/migrate/20120722005024_create_workflow_kit_parameters.workflow_kit.rb +12 -0
- data/db/migrate/20120723165226_add_female_to_users.rb +5 -0
- data/db/migrate/20120811140509_create_flags.rb +11 -0
- data/db/migrate/20120814100529_create_attachments.rb +13 -0
- data/db/migrate/20120815205610_add_content_type_and_file_size_to_attachments.rb +6 -0
- data/db/migrate/20130118220014_add_relationships_table_without_dag.rb +10 -0
- data/db/migrate/20130207214331_create_events.rb +12 -0
- data/db/migrate/20130208215253_create_status_group_membership_infos.rb +11 -0
- data/db/migrate/20130220184943_create_stars.rb +11 -0
- data/db/migrate/20130309193623_add_devise_to_user_accounts.rb +72 -0
- data/db/migrate/20130310003840_rename_stars_to_bookmarks.rb +9 -0
- data/db/migrate/20130310004622_fix_column_names_for_bookmarks.rb +6 -0
- data/db/migrate/20130313211414_create_geo_infos.rb +13 -0
- data/db/migrate/20130313234131_create_geo_locations.rb +16 -0
- data/db/migrate/20130314011638_drop_geo_infos.rb +5 -0
- data/db/migrate/20130315072759_add_invalid_to_geo_location.rb +5 -0
- data/db/migrate/20130315073149_exchange_invalid_for_queried_at_in_geo_location.rb +8 -0
- data/db/migrate/20130320003051_add_redirect_to_to_page.rb +5 -0
- data/db/migrate/20130329231657_create_posts.rb +15 -0
- data/db/migrate/20130404223735_add_entire_message_to_posts.rb +5 -0
- data/db/migrate/20130409192959_add_author_to_page.rb +5 -0
- data/db/migrate/20130908011215_add_type_to_pages.rb +5 -0
- data/db/migrate/20131115114715_validity_range_for_dag_links.rb +16 -0
- data/db/migrate/20140611170430_create_activities.rb +23 -0
- data/db/migrate/20140808223512_create_last_seen_activities.rb +12 -0
- data/db/migrate/20141008101744_add_location_to_events.rb +5 -0
- data/db/migrate/20141010130344_add_publish_on_website_to_events.rb +6 -0
- data/db/migrate/20141010134227_add_auth_token_to_user_accounts.rb +5 -0
- data/db/migrate/20141018143323_add_accepted_terms_to_users.rb +6 -0
- data/db/migrate/20141018221659_add_author_to_attachments.rb +5 -0
- data/db/migrate/20141102223954_add_body_to_groups.rb +5 -0
- data/db/migrate/20141110193830_create_settings.rb +17 -0
- data/db/migrate/20141202140522_add_indices.rb +6 -0
- data/db/migrate/20141209161946_add_keys.rb +20 -0
- data/db/migrate/20150127013809_add_incognito_to_users.rb +5 -0
- data/db/migrate/20150129194501_add_indices_for_polymorphic_references.rb +13 -0
- data/db/migrate/20150304192448_add_type_to_groups.rb +5 -0
- data/db/migrate/20150313221004_add_avatar_id_to_users.rb +5 -0
- data/lib/best_in_place/controller_extensions.rb +25 -0
- data/lib/best_in_place/helper.rb +127 -0
- data/lib/tasks/db_bootstrap.rake +37 -0
- data/lib/tasks/your_platform_tasks.rake +4 -0
- data/lib/templates/erb/scaffold/_form.html.erb +11 -0
- data/lib/your_platform.rb +6 -2
- data/lib/your_platform/engine.rb +127 -0
- data/lib/your_platform/version.rb +1 -1
- data/spec/factories/attachment.rb +12 -0
- data/spec/factories/blog_post.rb +10 -0
- data/spec/factories/company.rb +7 -0
- data/spec/factories/corporation.rb +20 -0
- data/spec/factories/event.rb +13 -0
- data/spec/factories/group.rb +36 -0
- data/spec/factories/html_email.eml +1059 -0
- data/spec/factories/mail_message.rb +30 -0
- data/spec/factories/page.rb +10 -0
- data/spec/factories/relationship.rb +13 -0
- data/spec/factories/status_group_membership.rb +21 -0
- data/spec/factories/user.rb +97 -0
- data/spec/factories/workflow.rb +44 -0
- data/spec/features/blog_post_spec.rb +46 -0
- data/spec/features/corporate_vita_events_spec.rb +114 -0
- data/spec/features/corporate_vita_spec.rb +258 -0
- data/spec/features/edit_mode_after_clicking_a_link_spec.rb +20 -0
- data/spec/features/events_spec.rb +356 -0
- data/spec/features/group_export_spec.rb +19 -0
- data/spec/features/group_post_spec.rb +89 -0
- data/spec/features/groups_of_groups_page_spec.rb +67 -0
- data/spec/features/groups_page_spec.rb +66 -0
- data/spec/features/groups_table_spec.rb +32 -0
- data/spec/features/help_page_spec.rb +22 -0
- data/spec/features/intranet_root_page_spec.rb +18 -0
- data/spec/features/locales_spec.rb +36 -0
- data/spec/features/maps_spec.rb +53 -0
- data/spec/features/mini_profiler_spec.rb +37 -0
- data/spec/features/officers_spec.rb +61 -0
- data/spec/features/page_redirects_spec.rb +23 -0
- data/spec/features/page_spec.rb +20 -0
- data/spec/features/postal_address_flag_spec.rb +46 -0
- data/spec/features/relationships_on_user_page_spec.rb +78 -0
- data/spec/features/review_membership_spec.rb +44 -0
- data/spec/features/search_field_spec.rb +121 -0
- data/spec/features/setup_spec.rb +63 -0
- data/spec/features/user_change_date_of_birth_spec.rb +26 -0
- data/spec/features/vertical_nav_spec.rb +27 -0
- data/spec/features/what_is_new_box_spec.rb +33 -0
- data/spec/helpers/attachments_helper_spec.rb +15 -0
- data/spec/models/ability_spec.rb +93 -0
- data/spec/models/active_record_cache_extension_spec.rb +177 -0
- data/spec/models/active_record_find_by_extension_spec.rb +26 -0
- data/spec/models/active_record_json_url_extension_spec.rb +79 -0
- data/spec/models/address_label_spec.rb +144 -0
- data/spec/models/app_version_spec.rb +38 -0
- data/spec/models/attachment_spec.rb +5 -0
- data/spec/models/bookmark_spec.rb +70 -0
- data/spec/models/concerns/user_corporations_spec.rb +71 -0
- data/spec/models/corporation_spec.rb +128 -0
- data/spec/models/dag_link_spec.rb +48 -0
- data/spec/models/event_spec.rb +267 -0
- data/spec/models/flag_spec.rb +20 -0
- data/spec/models/flagable_spec.rb +55 -0
- data/spec/models/geo_location_spec.rb +126 -0
- data/spec/models/group_mixins/corporations_spec.rb +95 -0
- data/spec/models/group_mixins/everyone_spec.rb +64 -0
- data/spec/models/group_mixins/guests_spec.rb +75 -0
- data/spec/models/group_mixins/hidden_users_spec.rb +21 -0
- data/spec/models/group_mixins/import_spec.rb +93 -0
- data/spec/models/group_mixins/memberships_spec.rb +303 -0
- data/spec/models/group_mixins/officers_spec.rb +63 -0
- data/spec/models/group_mixins/roles_spec.rb +46 -0
- data/spec/models/group_spec.rb +341 -0
- data/spec/models/list_export_spec.rb +155 -0
- data/spec/models/may_need_review_spec.rb +114 -0
- data/spec/models/nav_node_spec.rb +277 -0
- data/spec/models/navable_spec.rb +54 -0
- data/spec/models/page_spec.rb +185 -0
- data/spec/models/post_spec.rb +271 -0
- data/spec/models/profile_field_mixins/has_child_profile_fields_spec.rb +73 -0
- data/spec/models/profile_field_spec.rb +482 -0
- data/spec/models/profile_section_spec.rb +89 -0
- data/spec/models/profile_spec.rb +74 -0
- data/spec/models/profileable_mixins/adress_spec.rb +93 -0
- data/spec/models/profileable_spec.rb +152 -0
- data/spec/models/relationship_spec.rb +113 -0
- data/spec/models/status_group_membership_spec.rb +350 -0
- data/spec/models/status_group_spec.rb +103 -0
- data/spec/models/structureable_mixins/has_special_groups_spec.rb +479 -0
- data/spec/models/structureable_mixins/roles_spec.rb +517 -0
- data/spec/models/structureable_spec.rb +128 -0
- data/spec/models/user_account_spec.rb +142 -0
- data/spec/models/user_alias_spec.rb +57 -0
- data/spec/models/user_group_membership_mixins/validity_range_for_indirect_memberships_spec.rb +291 -0
- data/spec/models/user_group_membership_mixins/validity_range_spec.rb +293 -0
- data/spec/models/user_group_membership_spec.rb +428 -0
- data/spec/models/user_mixins/identification_spec.rb +27 -0
- data/spec/models/user_mixins/memberships_spec.rb +138 -0
- data/spec/models/user_spec.rb +1794 -0
- data/spec/old_yp_spec_helper.rb +46 -0
- data/spec/spec_helper.rb +350 -0
- data/spec/support/auto_complete.rb +22 -0
- data/spec/support/capybara/flash_helpers.rb +37 -0
- data/spec/support/capybara/profile_steps.rb +73 -0
- data/spec/support/capybara/session_steps.rb +53 -0
- data/spec/support/capybara/user_account_helpers.rb +15 -0
- data/spec/support/debug.rb +8 -0
- data/spec/support/devise-controller_macros.rb +15 -0
- data/spec/support/geocoder/stubs.rb +60 -0
- data/spec/support/press_enter.rb +15 -0
- data/spec/support/time_travel.rb +9 -0
- data/spec/support/uploads/image-upload.png +0 -0
- data/spec/support/uploads/pdf-upload.pdf +0 -0
- data/spec/support/wait_for_ajax.rb +39 -0
- data/spec/support/wait_for_cache.rb +7 -0
- data/spec/uploaders/attachment_uploader_spec.rb +47 -0
- data/vendor/assets/images/flags.png +0 -0
- data/vendor/assets/images/galleria/classic-loader.gif +0 -0
- data/vendor/assets/images/galleria/classic-map.png +0 -0
- data/vendor/assets/javascripts/best_in_place_datetime.js.coffee +45 -0
- data/vendor/assets/javascripts/galleria-classic.js +100 -0
- data/vendor/assets/javascripts/galleria.js +6919 -0
- data/vendor/assets/javascripts/gmaps4rails.js +2 -0
- data/vendor/assets/javascripts/gmaps4rails/all.js +1 -0
- data/vendor/assets/javascripts/gmaps4rails/base.coffee +1 -0
- data/vendor/assets/javascripts/gmaps4rails/base/common.coffee +43 -0
- data/vendor/assets/javascripts/gmaps4rails/base/configuration.coffee +7 -0
- data/vendor/assets/javascripts/gmaps4rails/base/gmaps.coffee +13 -0
- data/vendor/assets/javascripts/gmaps4rails/base/interfaces/basic_interface.coffee +15 -0
- data/vendor/assets/javascripts/gmaps4rails/base/interfaces/controller_interface.coffee +15 -0
- data/vendor/assets/javascripts/gmaps4rails/base/interfaces/map_interface.coffee +27 -0
- data/vendor/assets/javascripts/gmaps4rails/base/interfaces/marker_interface.coffee +15 -0
- data/vendor/assets/javascripts/gmaps4rails/base/main.coffee +124 -0
- data/vendor/assets/javascripts/gmaps4rails/base/main_controller_extensions/circle_controller.coffee +29 -0
- data/vendor/assets/javascripts/gmaps4rails/base/main_controller_extensions/kml_controller.coffee +5 -0
- data/vendor/assets/javascripts/gmaps4rails/base/main_controller_extensions/marker_controller.coffee +76 -0
- data/vendor/assets/javascripts/gmaps4rails/base/main_controller_extensions/polygon_controller.coffee +29 -0
- data/vendor/assets/javascripts/gmaps4rails/base/main_controller_extensions/polyline_controller.coffee +29 -0
- data/vendor/assets/javascripts/gmaps4rails/base/objects/circle.coffee +12 -0
- data/vendor/assets/javascripts/gmaps4rails/base/objects/kml.coffee +8 -0
- data/vendor/assets/javascripts/gmaps4rails/base/objects/map.coffee +62 -0
- data/vendor/assets/javascripts/gmaps4rails/base/objects/marker.coffee +24 -0
- data/vendor/assets/javascripts/gmaps4rails/base/objects/polygon.coffee +11 -0
- data/vendor/assets/javascripts/gmaps4rails/base/objects/polyline.coffee +11 -0
- data/vendor/assets/javascripts/gmaps4rails/bing.coffee +1 -0
- data/vendor/assets/javascripts/gmaps4rails/bing/main.coffee +29 -0
- data/vendor/assets/javascripts/gmaps4rails/bing/objects/map.coffee +63 -0
- data/vendor/assets/javascripts/gmaps4rails/bing/objects/marker.coffee +78 -0
- data/vendor/assets/javascripts/gmaps4rails/bing/shared.coffee +20 -0
- data/vendor/assets/javascripts/gmaps4rails/google.coffee +1 -0
- data/vendor/assets/javascripts/gmaps4rails/google/main.coffee +47 -0
- data/vendor/assets/javascripts/gmaps4rails/google/objects/circle.coffee +38 -0
- data/vendor/assets/javascripts/gmaps4rails/google/objects/kml.coffee +16 -0
- data/vendor/assets/javascripts/gmaps4rails/google/objects/map.coffee +71 -0
- data/vendor/assets/javascripts/gmaps4rails/google/objects/marker.coffee +114 -0
- data/vendor/assets/javascripts/gmaps4rails/google/objects/polygon.coffee +38 -0
- data/vendor/assets/javascripts/gmaps4rails/google/objects/polyline.coffee +49 -0
- data/vendor/assets/javascripts/gmaps4rails/google/shared.coffee +27 -0
- data/vendor/assets/javascripts/gmaps4rails/openlayers.coffee +1 -0
- data/vendor/assets/javascripts/gmaps4rails/openlayers/main.coffee +138 -0
- data/vendor/assets/javascripts/gmaps4rails/openlayers/objects/map.coffee +49 -0
- data/vendor/assets/javascripts/gmaps4rails/openlayers/objects/marker.coffee +68 -0
- data/vendor/assets/javascripts/gmaps4rails/openlayers/objects/polyline.coffee +39 -0
- data/vendor/assets/javascripts/gmaps4rails/openlayers/shared.coffee +19 -0
- data/vendor/assets/javascripts/jquery-ui-timepicker-addon.js +2223 -0
- data/vendor/assets/javascripts/jquery-ui-timepicker-de.js +26 -0
- data/vendor/assets/javascripts/jquery.ui.datepicker-de.js +23 -0
- data/vendor/assets/javascripts/password_strength.js +149 -0
- data/vendor/assets/javascripts/zxcvbn.js +43 -0
- data/vendor/assets/stylesheets/flags.css.scss +259 -0
- data/vendor/assets/stylesheets/galleria-classic.css.scss +239 -0
- data/vendor/assets/stylesheets/gmaps4rails.css +24 -0
- data/vendor/assets/stylesheets/mercury.css +24 -0
- data/vendor/scripts/bashpass/README.md +29 -0
- data/vendor/scripts/bashpass/bashpass +124 -0
- data/vendor/scripts/bashpass/bashpass-APACHE-LICENSE +201 -0
- data/vendor/scripts/bashpass/german.dic +40794 -0
- metadata +1540 -16
- data/.gitignore +0 -17
- data/Gemfile +0 -4
- data/LICENSE.txt +0 -4
- data/your_platform.gemspec +0 -19
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: 7d4f4254548dff774d063fd40e179c3e06189f97
|
|
4
|
+
data.tar.gz: da0eb80eaa45c980cedc8058e84cde0c514452d5
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 2e1cd54d69ff299c954eb839409122955c90e2f1e9f76d12265160190032cbcc6df87f25a3f9c4208249dde489c5f22540dd30e705f16f10da2051227802c432
|
|
7
|
+
data.tar.gz: 1d6a2f147d4abe217de66389ee16d7b4625b8d7f2ce94d1e35459c82c16a878586f1fdae580c2a9d26d3955d01c3cae664110873727df465c09cdfaafed62536
|
data/README.md
CHANGED
|
@@ -1,24 +1,40 @@
|
|
|
1
1
|
# YourPlatform
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://gitter.im/fiedl/your_platform?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
|
4
|
+
[](https://travis-ci.org/fiedl/your_platform)
|
|
5
|
+
[](https://codeclimate.com/github/fiedl/your_platform)
|
|
6
|
+
[](https://gemnasium.com/fiedl/your_platform)
|
|
4
7
|
|
|
5
|
-
|
|
8
|
+
YourPlatform is a [ruby on rails](http://rubyonrails.org) engine that provides the basis for administrtive and social network platforms for closed user groups such as alumni organizations.
|
|
6
9
|
|
|
7
|
-
|
|
10
|
+
The application serves four main purposes: Centralized or decentralized member management, networking features for members, exchange of information and documents and communication.
|
|
8
11
|
|
|
9
|
-
|
|
12
|
+
## Getting Started Developing
|
|
10
13
|
|
|
11
|
-
|
|
14
|
+
1. Have a look at our demo application: *We are currently moving to another server. After that, the demo link will be provided here.*
|
|
15
|
+
2. Check out the demo application locally:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
git clone git@github.com:fiedl/your_platform.git
|
|
19
|
+
cd your_platform/demo_app/my_platform
|
|
20
|
+
|
|
21
|
+
# provide a config/database.yml according to your local mysql credentials
|
|
22
|
+
|
|
23
|
+
bundle install
|
|
24
|
+
bundle exec rake db:create db:migrate
|
|
25
|
+
bundle exec foreman start
|
|
26
|
+
bundle exec rails server
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
View the application at [http://localhost:3000](http://localhost:3000).
|
|
30
|
+
3. If you want to create an application based on the YourPlatform engine, please follow the [GETTING STARTED GUIDE](https://github.com/fiedl/your_platform/wiki/GettingStarted) in the wiki.
|
|
12
31
|
|
|
13
|
-
|
|
32
|
+
If you have any troubles, **feel free to contact us on our [gitter channel](https://gitter.im/fiedl/your_platform)**.
|
|
14
33
|
|
|
15
|
-
|
|
34
|
+
## Documentation
|
|
16
35
|
|
|
17
|
-
|
|
36
|
+
Our [code documentation can be found on rubydoc.info](http://www.rubydoc.info/github/fiedl/your_platform).
|
|
18
37
|
|
|
19
|
-
## Usage
|
|
20
|
-
|
|
21
|
-
TODO: Write usage instructions here
|
|
22
38
|
|
|
23
39
|
## Contributing
|
|
24
40
|
|
|
@@ -27,3 +43,15 @@ TODO: Write usage instructions here
|
|
|
27
43
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
|
28
44
|
4. Push to the branch (`git push origin my-new-feature`)
|
|
29
45
|
5. Create new Pull Request
|
|
46
|
+
|
|
47
|
+
## Authors and License
|
|
48
|
+
|
|
49
|
+
**Copyright** (c) 2012-2015, Sebastian Fiedlschuster
|
|
50
|
+
|
|
51
|
+
**Contributors**: Jörg Reichardt, Manuel Zerpies, Joachim Back
|
|
52
|
+
|
|
53
|
+
**License**: The Source Code is released under the GNU Affero General Public License (AGPL). Explicitely excluded are the images and fonts.
|
|
54
|
+
|
|
55
|
+
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
|
|
56
|
+
|
|
57
|
+
You should have received a copy of the GNU Affero General Public License along with this program. If not, see http://www.gnu.org/licenses/.
|
data/Rakefile
CHANGED
|
@@ -1 +1,15 @@
|
|
|
1
|
-
|
|
1
|
+
#!/usr/bin/env rake
|
|
2
|
+
|
|
3
|
+
require File.expand_path('../demo_app/my_platform/config/application', __FILE__)
|
|
4
|
+
require 'rspec/core/rake_task'
|
|
5
|
+
require 'rspec-rerun'
|
|
6
|
+
|
|
7
|
+
MyPlatform::Application.load_tasks
|
|
8
|
+
|
|
9
|
+
pattern = "{./spec/**/*_spec.rb}"
|
|
10
|
+
|
|
11
|
+
ENV['RSPEC_RERUN_RETRY_COUNT'] ||= '3'
|
|
12
|
+
ENV['RSPEC_RERUN_PATTERN'] ||= pattern
|
|
13
|
+
|
|
14
|
+
task default: 'rspec-rerun:spec'
|
|
15
|
+
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
#
|
|
2
|
+
# This is the angular js controller for bookmark lists.
|
|
3
|
+
#
|
|
4
|
+
|
|
5
|
+
@app.controller( "BookmarkListCtrl", ["$scope", "Bookmark", "current_user_bookmarks", ($scope, Bookmark, current_user_bookmarks)->
|
|
6
|
+
|
|
7
|
+
# The bookmark objects may be provided by the ng-init attribute of the corresponding
|
|
8
|
+
# controller tag. Therefore, wait 200ms for them to appear.
|
|
9
|
+
#
|
|
10
|
+
setTimeout( ->
|
|
11
|
+
|
|
12
|
+
# If the bookmarks are there, upstream them to the bookmarks service to share them
|
|
13
|
+
# with other controllers.
|
|
14
|
+
if $scope.bookmarks
|
|
15
|
+
current_user_bookmarks.fill( $scope.bookmarks )
|
|
16
|
+
|
|
17
|
+
# If the scope's bookmarks array is empty, the bookmarks are not prepopulated
|
|
18
|
+
# by the backend. In this case, fetch the bookmarks from the JSON interface.
|
|
19
|
+
if not $scope.bookmarks
|
|
20
|
+
if current_user_bookmarks.length == 0
|
|
21
|
+
current_user_bookmarks.find_all_by_user_id( $scope.user_id )
|
|
22
|
+
|
|
23
|
+
, 200 )
|
|
24
|
+
|
|
25
|
+
$scope.$on( 'bookmarksChange', ->
|
|
26
|
+
$scope.bookmarks = current_user_bookmarks
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
] )
|
|
30
|
+
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
#
|
|
2
|
+
# This is the angular js controller for the box directive.
|
|
3
|
+
# It, for example, takes track of the edit mode and whether the 'edit' button
|
|
4
|
+
# has to be shown.
|
|
5
|
+
#
|
|
6
|
+
# TODO:
|
|
7
|
+
# - die erste box braucht noch ein "first"-css-Attribut.
|
|
8
|
+
#
|
|
9
|
+
|
|
10
|
+
@app.controller( "BoxCtrl", ["$scope", ($scope)->
|
|
11
|
+
|
|
12
|
+
# This variable takes track of whether there are editable elements
|
|
13
|
+
# inside the box. If that is the case, the 'edit' button is shown.
|
|
14
|
+
#
|
|
15
|
+
$scope.editablesInside = false
|
|
16
|
+
|
|
17
|
+
# Controllers of editable elements have to broadcast an 'inPlaceEditorInitiated' event
|
|
18
|
+
# to the box controller as follows:
|
|
19
|
+
#
|
|
20
|
+
# $scope.box_scope().$broadcast( 'inPlaceEditorInitiated' )
|
|
21
|
+
#
|
|
22
|
+
$scope.$on( 'inPlaceEditorInitiated', -> $scope.editablesInside = true )
|
|
23
|
+
$scope.$on( 'editableElementInitiated', -> $scope.editablesInside = true )
|
|
24
|
+
|
|
25
|
+
# A box may be in editMode, which means that all editable elements
|
|
26
|
+
# within the box are set to their editing state, e.g. in place editable elements.
|
|
27
|
+
#
|
|
28
|
+
$scope.editMode = false
|
|
29
|
+
|
|
30
|
+
# This method is called by the 'edit' button in order to toggle the edit mode.
|
|
31
|
+
#
|
|
32
|
+
$scope.toggleEditMode = ->
|
|
33
|
+
$scope.editMode = not $scope.editMode
|
|
34
|
+
$scope.transclude_scope().$broadcast( 'editModeChange', {newState: $scope.editMode} )
|
|
35
|
+
|
|
36
|
+
] )
|
|
37
|
+
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
|
|
2
|
+
# TODO:
|
|
3
|
+
# - directives für in_place_edit und remove_button
|
|
4
|
+
# - das directive-template muss in eine Datei
|
|
5
|
+
# - die erste box braucht noch ein "first"-css-Attribut.
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
# PfileField Model
|
|
10
|
+
@app.factory "ProfileField", ["$resource", ($resource) ->
|
|
11
|
+
|
|
12
|
+
# these are temporary defined in the local scope of this block,
|
|
13
|
+
# since we need them in the following initialization of the
|
|
14
|
+
# ProfileField model.
|
|
15
|
+
profileable_id = $( "#profile" ).data( "profileable-id" )
|
|
16
|
+
profileable_type = $( "#profile" ).data( "profileable-type" )
|
|
17
|
+
|
|
18
|
+
# Model initialization: Bind it to an AJAX resource.
|
|
19
|
+
ProfileField = $resource(
|
|
20
|
+
"/profile_fields/:id?profileable_id=:profileable_id&profileable_type=:profileable_type&parent_id=:parent_id",
|
|
21
|
+
{ id: "@id", profileable_id: profileable_id, profileable_type: profileable_type },
|
|
22
|
+
{ update: { method: "PUT" } }
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
# Add further instance methods here:
|
|
26
|
+
|
|
27
|
+
# This method will request the child profile fields of this profile field.
|
|
28
|
+
# There is also a children attribute with pre-populated json data.
|
|
29
|
+
# But the elements of the children array are no resource objects,
|
|
30
|
+
# i.e. no JSON operations are possible on them.
|
|
31
|
+
# Therefore, this getChildren() method is required, returning
|
|
32
|
+
# an array of Resource objects of the child profile fields.
|
|
33
|
+
#
|
|
34
|
+
# Example:
|
|
35
|
+
# profile_fields = ProfileField.query( { profileable_type: "User", profileable_id: 2 } )
|
|
36
|
+
# parent_field = profile_fields[2]
|
|
37
|
+
# child_fields = parent_field.getChildren() # Array of Resources
|
|
38
|
+
# child_fields = parent_field.children # Array of Objects
|
|
39
|
+
#
|
|
40
|
+
ProfileField.prototype.getChildren = ->
|
|
41
|
+
ProfileField.query( { parent_id: @id, profileable_id: null, profileable_type: null } )
|
|
42
|
+
|
|
43
|
+
ProfileField.prototype.loadChildrenResource = ->
|
|
44
|
+
this.children = this.getChildren() if this.children.length > 0
|
|
45
|
+
|
|
46
|
+
# Add further class methods here.
|
|
47
|
+
ProfileField.someClassMethod = (arg) ->
|
|
48
|
+
console.log arg
|
|
49
|
+
|
|
50
|
+
# The factory needs to return the model object.
|
|
51
|
+
return ProfileField
|
|
52
|
+
]
|
|
53
|
+
|
|
54
|
+
# see: https://gist.github.com/Mithrandir0x/3639232
|
|
55
|
+
@app.service( "Profileable", ->
|
|
56
|
+
this.id = $( "#profile" ).data( "profileable-id" )
|
|
57
|
+
this.type = $( "#profile" ).data( "profileable-type" )
|
|
58
|
+
this.attributes = $( "#profile" ).data( "profileable" )
|
|
59
|
+
this.title = this.attributes.title
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
@app.controller( "ProfileCtrl", ["$scope", "ProfileField", "Profileable", "$resource", ($scope, ProfileField, Profileable, $resource) ->
|
|
64
|
+
|
|
65
|
+
$scope.editMode = false;
|
|
66
|
+
|
|
67
|
+
# Load Data
|
|
68
|
+
# ------------------------------------------------------------------------------------------
|
|
69
|
+
|
|
70
|
+
# profileable, i.e. the object that has the profile fields
|
|
71
|
+
$scope.profileable = Profileable
|
|
72
|
+
|
|
73
|
+
# profile fields
|
|
74
|
+
# $scope.profile_fields = ProfileField.query( {
|
|
75
|
+
# profileable_type: $scope.profileable.type, profileable_id: $scope.profileable.id
|
|
76
|
+
# },
|
|
77
|
+
# -> # done loading, load the child profile fields:
|
|
78
|
+
# angular.forEach( $scope.profile_fields, (profile_field)->
|
|
79
|
+
# profile_field.loadChildrenResource()
|
|
80
|
+
# )
|
|
81
|
+
# )
|
|
82
|
+
|
|
83
|
+
$scope.profile_fields = $( "#profile" ).data( 'profile-fields' )
|
|
84
|
+
|
|
85
|
+
# FOR DEBUG:
|
|
86
|
+
# TODO: DELETE THIS
|
|
87
|
+
$.ProfileField = ProfileField
|
|
88
|
+
$.scope = $scope
|
|
89
|
+
# / FOR DEBUG
|
|
90
|
+
|
|
91
|
+
# Controller Actions
|
|
92
|
+
# ------------------------------------------------------------------------------------------
|
|
93
|
+
|
|
94
|
+
$scope.addProfileField = ->
|
|
95
|
+
profile_field = ProfileField.save( $scope.new_profile_field )
|
|
96
|
+
$scope.profile_fields.push( profile_field )
|
|
97
|
+
$scope.new_profile_field = {}
|
|
98
|
+
|
|
99
|
+
$scope.deleteProfileField = (profile_field) ->
|
|
100
|
+
id_to_remove_from_list = profile_field.id
|
|
101
|
+
profile_field.$remove( (removed_profile_field, responseHeader) ->
|
|
102
|
+
index = $scope.profile_fields.indexOf( removed_profile_field )
|
|
103
|
+
$scope.profile_fields.splice( index, 1 ) unless index == -1
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
$scope.$on( 'editModeChange', (event, args)->
|
|
107
|
+
newState = args[ 'newState' ]
|
|
108
|
+
$scope.editMode = newState
|
|
109
|
+
)
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
] )
|
|
113
|
+
|
|
114
|
+
@app.controller( "ProfileFieldCtrl", [ "$scope", ($scope) ->
|
|
115
|
+
$scope.isChildField = true if $scope.profile_field.parent_id
|
|
116
|
+
] )
|
|
117
|
+
|
|
118
|
+
@app.controller( "InPlaceEditCtrl", [ "$scope", "ProfileField", ($scope, ProfileField) ->
|
|
119
|
+
# $scope.editMode = false # this does not inherit from the box scope, since the box is a directive.
|
|
120
|
+
$scope.editorEnabled = $scope.editMode
|
|
121
|
+
|
|
122
|
+
# Let the box know that there is an in place edit field inside.
|
|
123
|
+
# Then the box can show the 'edit' button.
|
|
124
|
+
#
|
|
125
|
+
$scope.box_scope().$broadcast( 'inPlaceEditorInitiated' )
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
$.inplacescope = $scope unless $.inplacescope
|
|
129
|
+
$scope.$on( 'editModeChange', (event, args)->
|
|
130
|
+
newState = args[ 'newState' ]
|
|
131
|
+
$scope.editMode = newState
|
|
132
|
+
$scope.edit() if newState == true
|
|
133
|
+
$scope.save() if newState == false
|
|
134
|
+
)
|
|
135
|
+
$scope.$on( 'clickOutside', ->
|
|
136
|
+
$scope.editMode = false
|
|
137
|
+
$scope.save() if not $scope.editMode
|
|
138
|
+
)
|
|
139
|
+
$scope.edit = ->
|
|
140
|
+
$scope.editorEnabled = true
|
|
141
|
+
$scope.editorEnabledJustNow = true
|
|
142
|
+
setTimeout( ->
|
|
143
|
+
$scope.editorEnabledJustNow = false
|
|
144
|
+
, 200 )
|
|
145
|
+
$scope.save = ->
|
|
146
|
+
unless $scope.editorEnabledJustNow
|
|
147
|
+
# because if it has been enabled just now, this save()
|
|
148
|
+
# has been triggered by a bubbled click event accidentally.
|
|
149
|
+
new ProfileField( $scope.profile_field ).$update() # typecast for pre-populated data
|
|
150
|
+
$scope.editorEnabled = false
|
|
151
|
+
] )
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
#
|
|
2
|
+
# This file specifies the box directive within the angular js framework.
|
|
3
|
+
# This directive allows to add box elements, i.e. certain sections, to the
|
|
4
|
+
# html structure:
|
|
5
|
+
#
|
|
6
|
+
# <box caption="The header of the box">
|
|
7
|
+
# This content is displayed <strong>inside the box</strong>.
|
|
8
|
+
# </box>
|
|
9
|
+
#
|
|
10
|
+
# If editable elements are added inside the box, the box will show an
|
|
11
|
+
# 'edit' button that toggles all editable fields within the box.
|
|
12
|
+
# Therefore, editable elements have to let the box know that they are there:
|
|
13
|
+
#
|
|
14
|
+
# # within the scope of the editable element's controller
|
|
15
|
+
# $scope.box_scope().$broadcast( 'inPlaceEditorInitiated' ) # or:
|
|
16
|
+
# $scope.box_scope().$broadcast( 'editableElementInitiated' )
|
|
17
|
+
#
|
|
18
|
+
# TODO:
|
|
19
|
+
# - das directive-template muss in eine Datei
|
|
20
|
+
# - die erste box braucht noch ein "first"-css-Attribut.
|
|
21
|
+
#
|
|
22
|
+
|
|
23
|
+
@app.directive( "box", -> {
|
|
24
|
+
priority: 0,
|
|
25
|
+
template: '<div class="box" ng-controller="BoxCtrl">' +
|
|
26
|
+
'<div class="head"><table><tr>' +
|
|
27
|
+
'<td class="box_heading">' +
|
|
28
|
+
'<h1>{{caption}} </h1>' + # the space in the h1 is really needed!
|
|
29
|
+
'</td>' +
|
|
30
|
+
'<td class="box_toolbar">' +
|
|
31
|
+
'<button class="btn" type="button" data-toggle="button" ng-click="toggleEditMode()" ng-show="editablesInside">' +
|
|
32
|
+
'<i class="icon-edit icon-black"></i> ' +
|
|
33
|
+
'Edit' +
|
|
34
|
+
'</button>' +
|
|
35
|
+
'</td>' +
|
|
36
|
+
'</tr></table></div>' +
|
|
37
|
+
'<div class="divider"></div>' +
|
|
38
|
+
'<div class="content" ng-transclude></div>' +
|
|
39
|
+
'</div>',
|
|
40
|
+
# templateUrl: 'some.html',
|
|
41
|
+
replace: false,
|
|
42
|
+
transclude: true,
|
|
43
|
+
restrict: 'E',
|
|
44
|
+
#
|
|
45
|
+
# the scope structure looks like this:
|
|
46
|
+
#
|
|
47
|
+
# some_div_controller_scope
|
|
48
|
+
# |---------------- box_scope
|
|
49
|
+
# | |------ BoxCtrl_scope
|
|
50
|
+
# |
|
|
51
|
+
# |---------------- transclude_scope
|
|
52
|
+
#
|
|
53
|
+
# whereas the DOM structure looks like this:
|
|
54
|
+
#
|
|
55
|
+
# some_div
|
|
56
|
+
# |-------- box
|
|
57
|
+
# |---- BoxCtrl_div
|
|
58
|
+
# |--------- transclude_div
|
|
59
|
+
#
|
|
60
|
+
# I'm not sure why, but that's how angular does ist. Therefore, we have to
|
|
61
|
+
# apply a patch in order to be able to broadcast to the transclude and back.
|
|
62
|
+
#
|
|
63
|
+
# Therefore, the method `$scope.transclude_scope()` is added.
|
|
64
|
+
# One can broadcast to the elements inside the box as follows:
|
|
65
|
+
#
|
|
66
|
+
# $scope.transclude_scope().$broadcast( "myEvent", { my_argument: my_value } )
|
|
67
|
+
#
|
|
68
|
+
scope: true
|
|
69
|
+
link: (scope, element, attrs)->
|
|
70
|
+
scope.$watch( (->attrs.caption), (value)->
|
|
71
|
+
scope.caption = attrs.caption
|
|
72
|
+
)
|
|
73
|
+
controller: [ "$scope", "$element", "$attrs", "$transclude", ($scope, $element, $attrs, $transclude)->
|
|
74
|
+
|
|
75
|
+
# This method allows to access the transclude scope from the box controller:
|
|
76
|
+
#
|
|
77
|
+
# scope_inside_the_box = $scope.transclude_scope() # inside the BoxCtrl
|
|
78
|
+
#
|
|
79
|
+
$scope.transclude_scope = -> $scope.$$nextSibling
|
|
80
|
+
|
|
81
|
+
# This will allow to access the box scope from the scope inside the box:
|
|
82
|
+
#
|
|
83
|
+
# box_scope = $scope.box_scope() # from inside the box (transclude).
|
|
84
|
+
#
|
|
85
|
+
$scope.$watch( (->$scope.$$nextSibling), (transclude_scope)->
|
|
86
|
+
transclude_scope.box_scope = -> $scope
|
|
87
|
+
)
|
|
88
|
+
]
|
|
89
|
+
|
|
90
|
+
} )
|
|
91
|
+
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
#
|
|
2
|
+
# This file specifies the star-tool directive within the angular js framework.
|
|
3
|
+
# This allows to add a tag that allows the user to star or unstar an navable
|
|
4
|
+
# object, i.e. to bookmark it.
|
|
5
|
+
#
|
|
6
|
+
# Use the tag like this:
|
|
7
|
+
#
|
|
8
|
+
# <star-tool bookmarkable-type="User" bookmarkable-id="2403" user-id="382" bookmark="{JSON object...}" />
|
|
9
|
+
#
|
|
10
|
+
# where the arguments are as follows:
|
|
11
|
+
#
|
|
12
|
+
# bookmarkable-type, bookmarkable-id identify the object to be starred/unstarred
|
|
13
|
+
# user-id identify the user that is starring/unstarring the object
|
|
14
|
+
# bookmark (JSON) allows to pre-populate the star object (model instance).
|
|
15
|
+
#
|
|
16
|
+
|
|
17
|
+
@app.directive( "starTool", -> {
|
|
18
|
+
priority: 0,
|
|
19
|
+
template: '<span class="starred star has_tooltip" ng-show="bookmarked" ng-click="unbookmarkIt()" ' +
|
|
20
|
+
'title="Click here to remove {{bookmark.bookmarkable.title}} from your list of bookmarks.">★</span>' +
|
|
21
|
+
'<span class="unstarred star has_tooltip" ng-hide="bookmarked" ng-click="bookmarkIt()" ' +
|
|
22
|
+
'title="Click here to add {{bookmark.bookmarkable.title}} to your list of bookmarks.">☆</span>',
|
|
23
|
+
# templateUrl: 'some.html',
|
|
24
|
+
replace: false,
|
|
25
|
+
transclude: false,
|
|
26
|
+
restrict: 'E',
|
|
27
|
+
scope: true,
|
|
28
|
+
link: (scope, element, attrs)->
|
|
29
|
+
scope.$watch( (->attrs.bookmark), (value)->
|
|
30
|
+
unless scope.bookmarkable_type or scope.bookmarkable_id or scope.user_id or scope.bookmark
|
|
31
|
+
scope.bookmarkable_type = attrs.bookmarkableType
|
|
32
|
+
scope.bookmarkable_id = attrs.bookmarkableId
|
|
33
|
+
scope.user_id = attrs.userId
|
|
34
|
+
scope.bookmark = $.parseJSON( attrs.bookmark )
|
|
35
|
+
)
|
|
36
|
+
controller: [ "$scope", "$attrs", "Bookmark", "current_user_bookmarks", "$rootScope", ($scope, $attrs, Bookmark, current_user_bookmarks, $rootScope)->
|
|
37
|
+
|
|
38
|
+
$scope.bookmarked = false
|
|
39
|
+
|
|
40
|
+
# If given, use the bookmark attribute to pre-populate the object.
|
|
41
|
+
# Otherwise, load the object from the JSON resource.
|
|
42
|
+
#
|
|
43
|
+
# If the attribute is given, but there exists no bookmark record,
|
|
44
|
+
# the variable is 'null'. If not given, i.e. have to look it up,
|
|
45
|
+
# the variable is 'undefined'.
|
|
46
|
+
#
|
|
47
|
+
# The $scope becomes available later, the $attrs are available, yet.
|
|
48
|
+
# Therefore, use the $attrs, here.
|
|
49
|
+
#
|
|
50
|
+
# Since it is possible that the parent scope provides the bookmark,
|
|
51
|
+
# wait 200ms for the scope to be ready.
|
|
52
|
+
#
|
|
53
|
+
setTimeout( ->
|
|
54
|
+
unless $scope.bookmark
|
|
55
|
+
if typeof $attrs.bookmark == 'undefined'
|
|
56
|
+
$scope.bookmark = Bookmark.get( {
|
|
57
|
+
user_id: $scope.user_id,
|
|
58
|
+
bookmarkable_type: $scope.bookmarkable_type,
|
|
59
|
+
bookmarkable_id: $scope.bookmarkable_id
|
|
60
|
+
} )
|
|
61
|
+
, 200 )
|
|
62
|
+
|
|
63
|
+
# Set the bookmarked state to true if there is a bookmark. Otherwise, currently
|
|
64
|
+
# no bookmark exists.
|
|
65
|
+
#
|
|
66
|
+
$scope.$watch( 'bookmark', ->
|
|
67
|
+
$scope.bookmarked = true if $scope.bookmark
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
# This method bookmarks the object for the user, i.e. creates a bookmark.
|
|
71
|
+
#
|
|
72
|
+
$scope.bookmarkIt = ->
|
|
73
|
+
|
|
74
|
+
# mark the current star tool element as bookmarked, i.e. display the filled star.
|
|
75
|
+
$scope.bookmarked = true
|
|
76
|
+
|
|
77
|
+
# create a bookmark object
|
|
78
|
+
$scope.bookmark = new Bookmark( {
|
|
79
|
+
bookmarkable_type: $scope.bookmarkable_type,
|
|
80
|
+
bookmarkable_id: $scope.bookmarkable_id,
|
|
81
|
+
user_id: $scope.user_id
|
|
82
|
+
} )
|
|
83
|
+
|
|
84
|
+
# add the bookmark object to the current user's list of bookmarks,
|
|
85
|
+
# i.e. display it in the bookmarks menu, instantly.
|
|
86
|
+
current_user_bookmarks.add( $scope.bookmark )
|
|
87
|
+
|
|
88
|
+
# make the bookmark objet persistent
|
|
89
|
+
$scope.bookmark.$save()
|
|
90
|
+
|
|
91
|
+
# This method unbookmarks the object for the user, i.e. removes an existing bookmark.
|
|
92
|
+
#
|
|
93
|
+
$scope.unbookmarkIt = ->
|
|
94
|
+
$scope.bookmarked = false
|
|
95
|
+
current_user_bookmarks.remove( $scope.bookmark )
|
|
96
|
+
new Bookmark( $scope.bookmark ).$remove()
|
|
97
|
+
|
|
98
|
+
# Some other controller may change the bookmarks lists.
|
|
99
|
+
# This controller needs to track this in order to display the proper status.
|
|
100
|
+
#
|
|
101
|
+
$scope.$on( 'bookmarksChange', ->
|
|
102
|
+
if $.inArray( $scope.bookmark, current_user_bookmarks ) == -1
|
|
103
|
+
$scope.bookmarked = false
|
|
104
|
+
else
|
|
105
|
+
$scope.bookmarked = true
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
]
|
|
109
|
+
|
|
110
|
+
} )
|
|
111
|
+
|