├── .bowerrc ├── .dockerignore ├── .editorconfig ├── .gitattributes ├── .gitignore ├── .jshintrc ├── .jshintrc.default ├── .yo-rc.json ├── Gruntfile.js ├── NOTICE.txt ├── README.md ├── app ├── account-management │ ├── index.html │ ├── js │ │ ├── app.js │ │ ├── router.js │ │ ├── templates │ │ │ ├── content.html │ │ │ ├── edit-account-auth.html │ │ │ └── edit-account.html │ │ └── views │ │ │ └── edit-account.js │ └── main.js ├── callback.html ├── change-management │ ├── index.html │ ├── js │ │ ├── app.js │ │ ├── collections │ │ │ ├── change_issue_collection.js │ │ │ ├── change_order_collection.js │ │ │ ├── change_request_collection.js │ │ │ ├── milestone_collection.js │ │ │ ├── roles.js │ │ │ └── roles_in_use.js │ │ ├── models │ │ │ ├── change_issue.js │ │ │ ├── change_item.js │ │ │ ├── change_order.js │ │ │ ├── change_request.js │ │ │ └── milestone.js │ │ ├── router.js │ │ ├── templates │ │ │ ├── change-issues │ │ │ │ ├── change_issue_content.html │ │ │ │ ├── change_issue_creation.html │ │ │ │ ├── change_issue_edition.html │ │ │ │ └── change_issue_list_item.html │ │ │ ├── change-orders │ │ │ │ ├── change_order_content.html │ │ │ │ ├── change_order_creation.html │ │ │ │ ├── change_order_edition.html │ │ │ │ └── change_order_list_item.html │ │ │ ├── change-requests │ │ │ │ ├── change_request_content.html │ │ │ │ ├── change_request_creation.html │ │ │ │ ├── change_request_edition.html │ │ │ │ └── change_request_list_item.html │ │ │ ├── change_item_list.html │ │ │ ├── content.html │ │ │ ├── milestones │ │ │ │ ├── milestone_content.html │ │ │ │ ├── milestone_creation.html │ │ │ │ ├── milestone_edition.html │ │ │ │ ├── milestone_list.html │ │ │ │ └── milestone_list_item.html │ │ │ ├── nav │ │ │ │ ├── change_issue_nav.html │ │ │ │ ├── change_order_nav.html │ │ │ │ ├── change_request_nav.html │ │ │ │ ├── milestone_nav.html │ │ │ │ └── workflow_nav.html │ │ │ ├── tasks │ │ │ │ ├── task.html │ │ │ │ └── task_list.html │ │ │ └── workflows │ │ │ │ ├── activity_model_editor.html │ │ │ │ ├── roles_modal.html │ │ │ │ ├── task_model_editor.html │ │ │ │ ├── workflow_content_list.html │ │ │ │ ├── workflow_list.html │ │ │ │ ├── workflow_list_item.html │ │ │ │ ├── workflow_model_copy.html │ │ │ │ └── workflow_model_editor.html │ │ └── views │ │ │ ├── change-issues │ │ │ ├── change_issue_content.js │ │ │ ├── change_issue_creation.js │ │ │ ├── change_issue_edition.js │ │ │ ├── change_issue_list.js │ │ │ └── change_issue_list_item.js │ │ │ ├── change-orders │ │ │ ├── change_order_content.js │ │ │ ├── change_order_creation.js │ │ │ ├── change_order_edition.js │ │ │ ├── change_order_list.js │ │ │ └── change_order_list_item.js │ │ │ ├── change-requests │ │ │ ├── change_request_content.js │ │ │ ├── change_request_creation.js │ │ │ ├── change_request_edition.js │ │ │ ├── change_request_list.js │ │ │ └── change_request_list_item.js │ │ │ ├── milestones │ │ │ ├── milestone_content.js │ │ │ ├── milestone_creation.js │ │ │ ├── milestone_edition.js │ │ │ ├── milestone_list.js │ │ │ └── milestone_list_item.js │ │ │ ├── nav │ │ │ ├── change_issue_nav.js │ │ │ ├── change_order_nav.js │ │ │ ├── change_request_nav.js │ │ │ ├── milestone_nav.js │ │ │ ├── task_nav.js │ │ │ └── workflow_nav.js │ │ │ ├── tasks │ │ │ ├── task.js │ │ │ └── task_content_list.js │ │ │ └── workflows │ │ │ ├── activity_model_editor.js │ │ │ ├── roles_modal_view.js │ │ │ ├── task_model_editor.js │ │ │ ├── workflow_content_list.js │ │ │ ├── workflow_list.js │ │ │ ├── workflow_list_item.js │ │ │ ├── workflow_model_copy.js │ │ │ └── workflow_model_editor.js │ └── main.js ├── document-management │ ├── index.html │ ├── js │ │ ├── app.js │ │ ├── collections │ │ │ ├── checked_out_document.js │ │ │ ├── checkedout_document.js │ │ │ ├── folder_document.js │ │ │ ├── folders.js │ │ │ ├── search_document.js │ │ │ ├── tag_document.js │ │ │ ├── task_document.js │ │ │ └── template.js │ │ ├── models │ │ │ ├── baselined_document.js │ │ │ ├── folder.js │ │ │ └── template.js │ │ ├── router.js │ │ ├── templates │ │ │ ├── baselines │ │ │ │ ├── baseline_content.html │ │ │ │ ├── baseline_creation_view.html │ │ │ │ ├── baseline_detail.html │ │ │ │ ├── baseline_list.html │ │ │ │ ├── baseline_list_item.html │ │ │ │ ├── baseline_nav.html │ │ │ │ ├── document_revision_list.html │ │ │ │ └── document_revision_list_item.html │ │ │ ├── checked_out_document_list.html │ │ │ ├── checkedout_nav.html │ │ │ ├── content.html │ │ │ ├── document │ │ │ │ ├── document_new.html │ │ │ │ ├── document_new_version.html │ │ │ │ └── document_template_select.html │ │ │ ├── document_list.html │ │ │ ├── document_list_item.html │ │ │ ├── folder_document_list.html │ │ │ ├── folder_edit.html │ │ │ ├── folder_list_item.html │ │ │ ├── folder_nav.html │ │ │ ├── folder_new.html │ │ │ ├── search_document_advanced_form.html │ │ │ ├── search_document_form.html │ │ │ ├── search_document_list.html │ │ │ ├── search_nav.html │ │ │ ├── tag_document_list.html │ │ │ ├── tag_list_item.html │ │ │ ├── tag_nav.html │ │ │ ├── task_document_list.html │ │ │ ├── task_nav.html │ │ │ ├── template_content_list.html │ │ │ ├── template_list.html │ │ │ ├── template_list_item.html │ │ │ ├── template_nav.html │ │ │ └── template_new.html │ │ └── views │ │ │ ├── advanced_search.js │ │ │ ├── baselines │ │ │ ├── baseline_content.js │ │ │ ├── baseline_creation_view.js │ │ │ ├── baseline_detail_view.js │ │ │ ├── baseline_list.js │ │ │ ├── baseline_list_item.js │ │ │ ├── baseline_nav.js │ │ │ ├── document_revision_list.js │ │ │ └── document_revision_list_item.js │ │ │ ├── checked_out_document_list.js │ │ │ ├── checkedout_nav.js │ │ │ ├── content.js │ │ │ ├── content_document_list.js │ │ │ ├── document │ │ │ ├── document_new.js │ │ │ ├── document_new_version.js │ │ │ └── document_template_list.js │ │ │ ├── document_list.js │ │ │ ├── document_list_item.js │ │ │ ├── folder_document_list.js │ │ │ ├── folder_edit.js │ │ │ ├── folder_list.js │ │ │ ├── folder_list_item.js │ │ │ ├── folder_nav.js │ │ │ ├── folder_new.js │ │ │ ├── search_document_list.js │ │ │ ├── search_nav.js │ │ │ ├── tag_document_list.js │ │ │ ├── tag_list.js │ │ │ ├── tag_list_item.js │ │ │ ├── tag_nav.js │ │ │ ├── task_document_list.js │ │ │ ├── task_nav.js │ │ │ ├── template_content_list.js │ │ │ ├── template_edit.js │ │ │ ├── template_list.js │ │ │ ├── template_list_item.js │ │ │ ├── template_nav.js │ │ │ └── template_new.js │ └── main.js ├── documents │ ├── index.html │ ├── js │ │ ├── app.js │ │ ├── router.js │ │ ├── templates │ │ │ ├── document-permalink.html │ │ │ └── document-revision.html │ │ └── views │ │ │ └── document-revision.js │ └── main.js ├── download │ ├── dplm │ │ └── .gitkeep │ ├── index.html │ ├── js │ │ ├── app.js │ │ └── templates │ │ │ └── content.html │ └── main.js ├── images │ ├── apple.gif │ ├── docdokuplm_logo.png │ ├── favicon.ico │ ├── floor.jpg │ ├── help_image.png │ ├── icon-nav-bullet-down.png │ ├── icon-nav-bullet-right.png │ ├── linux.gif │ ├── loader.gif │ ├── pba.bin │ ├── pba.json │ ├── product-loader.gif │ ├── sidebar_bg.png │ ├── sort_asc.png │ ├── sort_both.png │ ├── sort_desc.png │ ├── treeview-default-line.gif │ ├── treeview-default.gif │ ├── user_avatar.png │ ├── view.png │ ├── windows.gif │ └── workflow │ │ ├── parallel.png │ │ ├── parallel.svg │ │ ├── sequential.png │ │ └── sequential.svg ├── img │ ├── glyphicons-halflings-white.png │ └── glyphicons-halflings.png ├── index.html ├── js │ ├── common-objects │ │ ├── collections │ │ │ ├── activity_models.js │ │ │ ├── attribute_collection.js │ │ │ ├── document_baselines.js │ │ │ ├── document_iteration.js │ │ │ ├── file │ │ │ │ └── attached_file_collection.js │ │ │ ├── linked │ │ │ │ ├── linked_change_item_collection.js │ │ │ │ ├── linked_document_collection.js │ │ │ │ ├── linked_document_iteration_collection.js │ │ │ │ └── linked_part_collection.js │ │ │ ├── lovs.js │ │ │ ├── modification_notification_collection.js │ │ │ ├── part_collection.js │ │ │ ├── part_iteration_collection.js │ │ │ ├── part_search_collection.js │ │ │ ├── path_data_iterations.js │ │ │ ├── product_baselines.js │ │ │ ├── product_instance_iterations.js │ │ │ ├── product_instances.js │ │ │ ├── reachable_users.js │ │ │ ├── security │ │ │ │ ├── workspace_user_group_memberships.js │ │ │ │ └── workspace_user_memberships.js │ │ │ ├── substitute_part_collection.js │ │ │ ├── tag.js │ │ │ ├── task_models.js │ │ │ ├── used_by │ │ │ │ └── used_by_document.js │ │ │ ├── user_groups.js │ │ │ ├── users.js │ │ │ └── workflow_models.js │ │ ├── common │ │ │ └── singleton_decorator.js │ │ ├── contextResolver.js │ │ ├── customizations │ │ │ └── part-table-columns.js │ │ ├── log.js │ │ ├── models │ │ │ ├── admin.js │ │ │ ├── attribute.js │ │ │ ├── baseline.js │ │ │ ├── document │ │ │ │ ├── document_iteration.js │ │ │ │ └── document_revision.js │ │ │ ├── document_baseline.js │ │ │ ├── effectivity.js │ │ │ ├── file │ │ │ │ └── attached_file.js │ │ │ ├── language.js │ │ │ ├── linked │ │ │ │ ├── linked_change_item.js │ │ │ │ ├── linked_document.js │ │ │ │ ├── linked_document_iteration.js │ │ │ │ └── linked_part.js │ │ │ ├── lov │ │ │ │ └── lov.js │ │ │ ├── modification_notification.js │ │ │ ├── organization.js │ │ │ ├── part.js │ │ │ ├── part_iteration.js │ │ │ ├── path_data_iteration.js │ │ │ ├── product_baseline.js │ │ │ ├── product_instance.js │ │ │ ├── product_instance_iteration.js │ │ │ ├── role.js │ │ │ ├── security │ │ │ │ ├── acl_user_entry.js │ │ │ │ ├── acl_user_group_entry.js │ │ │ │ ├── admin.js │ │ │ │ ├── workspace_user_group_membership.js │ │ │ │ └── workspace_user_membership.js │ │ │ ├── tag.js │ │ │ ├── tag_subscription.js │ │ │ ├── task_model.js │ │ │ ├── timezone.js │ │ │ ├── user.js │ │ │ ├── user_group.js │ │ │ ├── workflow │ │ │ │ ├── activity_model.js │ │ │ │ └── workflow_model.js │ │ │ └── workspace.js │ │ ├── oidc.js │ │ ├── templates │ │ │ ├── alert.html │ │ │ ├── attributes │ │ │ │ ├── attribute_list_item.html │ │ │ │ ├── attribute_list_item_boolean.html │ │ │ │ ├── attribute_list_item_date.html │ │ │ │ ├── attribute_list_item_long_text.html │ │ │ │ ├── attribute_list_item_lov.html │ │ │ │ ├── attribute_list_item_number.html │ │ │ │ ├── attribute_list_item_part_number.html │ │ │ │ ├── attribute_list_item_text.html │ │ │ │ ├── attribute_list_item_url.html │ │ │ │ ├── attributes.html │ │ │ │ ├── template_new_attribute_list_item.html │ │ │ │ └── template_new_attributes.html │ │ │ ├── buttons │ │ │ │ ├── ACL_button.html │ │ │ │ ├── checkout_button_group.html │ │ │ │ ├── delete_baseline_button.html │ │ │ │ ├── delete_button.html │ │ │ │ ├── duplicate_button.html │ │ │ │ ├── import_button.html │ │ │ │ ├── new_configuration_button.html │ │ │ │ ├── new_effectivity_button.html │ │ │ │ ├── new_product_button.html │ │ │ │ ├── new_product_instance_button.html │ │ │ │ ├── new_version_button.html │ │ │ │ ├── obsolete_button.html │ │ │ │ ├── release_button.html │ │ │ │ ├── snap_button.html │ │ │ │ ├── snap_in_progress_button.html │ │ │ │ ├── snap_latest_button.html │ │ │ │ ├── snap_released_button.html │ │ │ │ ├── tags_button.html │ │ │ │ └── udf_button.html │ │ │ ├── document │ │ │ │ ├── document_iteration.html │ │ │ │ ├── used_by_list.html │ │ │ │ └── used_by_list_item.html │ │ │ ├── error.html │ │ │ ├── file │ │ │ │ ├── file.html │ │ │ │ └── file_list.html │ │ │ ├── forbidden.html │ │ │ ├── header.html │ │ │ ├── linked │ │ │ │ ├── linked_change_item.html │ │ │ │ ├── linked_change_items.html │ │ │ │ ├── linked_document.html │ │ │ │ ├── linked_items.html │ │ │ │ └── linked_part.html │ │ │ ├── lov │ │ │ │ ├── lov_item.html │ │ │ │ ├── lov_modal.html │ │ │ │ └── lov_possible_value.html │ │ │ ├── not-found.html │ │ │ ├── part │ │ │ │ ├── cad_instance.html │ │ │ │ ├── conversion_status.html │ │ │ │ ├── import_status.html │ │ │ │ ├── modification_notification_group_list.html │ │ │ │ ├── modification_notification_list.html │ │ │ │ ├── modification_notification_list_item.html │ │ │ │ ├── part_assembly.html │ │ │ │ ├── part_creation_effectivity_view.html │ │ │ │ ├── part_effectivities.html │ │ │ │ ├── part_effectivity.html │ │ │ │ ├── part_effectivity_date.html │ │ │ │ ├── part_effectivity_lot.html │ │ │ │ ├── part_effectivity_serial_number.html │ │ │ │ ├── part_link.html │ │ │ │ ├── part_modal.html │ │ │ │ ├── used_by_list.html │ │ │ │ ├── used_by_list_item.html │ │ │ │ ├── used_by_list_item_part.html │ │ │ │ ├── used_by_path_data_item.html │ │ │ │ ├── used_by_pd_instance_list.html │ │ │ │ └── used_by_view.html │ │ │ ├── path │ │ │ │ └── path.html │ │ │ ├── pathToPathLink │ │ │ │ └── path_to_path_link_item.html │ │ │ ├── prompt.html │ │ │ ├── security │ │ │ │ ├── acl_edit.html │ │ │ │ ├── acl_entries.html │ │ │ │ ├── acl_entry_item.html │ │ │ │ └── membership_item.html │ │ │ ├── share │ │ │ │ ├── share_entity.html │ │ │ │ └── shared_entity.html │ │ │ ├── tags │ │ │ │ ├── tag.html │ │ │ │ └── tags_management.html │ │ │ ├── task │ │ │ │ └── status_filter.html │ │ │ ├── time_zone.html │ │ │ ├── udf │ │ │ │ ├── calculation.html │ │ │ │ └── user_defined_function.html │ │ │ ├── viewers │ │ │ │ ├── default.html │ │ │ │ ├── image.html │ │ │ │ ├── office.html │ │ │ │ ├── video.html │ │ │ │ └── wrapper.html │ │ │ └── workflow │ │ │ │ ├── lifecycle.html │ │ │ │ ├── lifecycle_activity.html │ │ │ │ ├── lifecycle_task.html │ │ │ │ ├── lifecycle_task_signing.html │ │ │ │ ├── role_item.html │ │ │ │ ├── workflow_mapping.html │ │ │ │ └── workflow_select.html │ │ ├── utils │ │ │ ├── acl-checker.js │ │ │ ├── attribute_accessibility.js │ │ │ ├── date.js │ │ │ └── query.js │ │ ├── views │ │ │ ├── alert.js │ │ │ ├── attributes │ │ │ │ ├── attribute_list.js │ │ │ │ ├── attribute_list_item.js │ │ │ │ ├── attribute_list_item_boolean.js │ │ │ │ ├── attribute_list_item_date.js │ │ │ │ ├── attribute_list_item_long_text.js │ │ │ │ ├── attribute_list_item_lov.js │ │ │ │ ├── attribute_list_item_number.js │ │ │ │ ├── attribute_list_item_part_number.js │ │ │ │ ├── attribute_list_item_text.js │ │ │ │ ├── attribute_list_item_url.js │ │ │ │ ├── attributes.js │ │ │ │ ├── template_new_attribute_list.js │ │ │ │ ├── template_new_attribute_list_item.js │ │ │ │ └── template_new_attributes.js │ │ │ ├── base.js │ │ │ ├── components │ │ │ │ ├── collapsible_list.js │ │ │ │ ├── list.js │ │ │ │ ├── list_item.js │ │ │ │ └── modal.js │ │ │ ├── document │ │ │ │ └── document_iteration.js │ │ │ ├── documents │ │ │ │ ├── checkbox_list.js │ │ │ │ └── checkbox_list_item.js │ │ │ ├── error.js │ │ │ ├── file │ │ │ │ ├── file.js │ │ │ │ └── file_list.js │ │ │ ├── forbidden.js │ │ │ ├── header.js │ │ │ ├── linked │ │ │ │ ├── linked_change_item.js │ │ │ │ ├── linked_change_items.js │ │ │ │ ├── linked_document.js │ │ │ │ ├── linked_documents.js │ │ │ │ ├── linked_issues.js │ │ │ │ ├── linked_orders.js │ │ │ │ ├── linked_part.js │ │ │ │ ├── linked_parts.js │ │ │ │ └── linked_requests.js │ │ │ ├── lov │ │ │ │ ├── lov_item.js │ │ │ │ ├── lov_modal.js │ │ │ │ └── lov_possible_value.js │ │ │ ├── not-found.js │ │ │ ├── part │ │ │ │ ├── cad_instance_view.js │ │ │ │ ├── conversion_status_view.js │ │ │ │ ├── import_status_view.js │ │ │ │ ├── modification_notification_group_list_view.js │ │ │ │ ├── modification_notification_list_item_view.js │ │ │ │ ├── modification_notification_list_view.js │ │ │ │ ├── part_assembly_view.js │ │ │ │ ├── part_creation_effectivity_view.js │ │ │ │ ├── part_effectivities_view.js │ │ │ │ ├── part_effectivity_view.js │ │ │ │ ├── part_link_view.js │ │ │ │ ├── part_modal_view.js │ │ │ │ ├── part_substitute_link_view.js │ │ │ │ ├── part_update_effectivity_view.js │ │ │ │ ├── part_usage_link_view.js │ │ │ │ ├── used_by_group_list_view.js │ │ │ │ ├── used_by_list_item_part_view.js │ │ │ │ ├── used_by_list_item_view.js │ │ │ │ ├── used_by_list_view.js │ │ │ │ ├── used_by_path_data_item_view.js │ │ │ │ ├── used_by_pd_instance_group_list_view.js │ │ │ │ ├── used_by_pd_instance_list_view.js │ │ │ │ └── used_by_view.js │ │ │ ├── pathToPathLink │ │ │ │ └── path_to_path_link_item.js │ │ │ ├── prompt.js │ │ │ ├── security │ │ │ │ ├── acl.js │ │ │ │ ├── acl_clone_edit.js │ │ │ │ ├── acl_edit.js │ │ │ │ ├── acl_item.js │ │ │ │ └── membership_item.js │ │ │ ├── share │ │ │ │ └── share_entity.js │ │ │ ├── tags │ │ │ │ ├── tag.js │ │ │ │ └── tags_management.js │ │ │ ├── time_zone.js │ │ │ ├── udf │ │ │ │ ├── calculation.js │ │ │ │ └── user_defined_function.js │ │ │ ├── used_by │ │ │ │ ├── used_by_list_item_view.js │ │ │ │ └── used_by_list_view.js │ │ │ ├── viewers │ │ │ │ ├── default.js │ │ │ │ ├── image.js │ │ │ │ ├── office.js │ │ │ │ ├── video.js │ │ │ │ ├── viewers-factory.js │ │ │ │ └── viewers-utils.js │ │ │ └── workflow │ │ │ │ ├── lifecycle.js │ │ │ │ ├── lifecycle_activity.js │ │ │ │ ├── lifecycle_task.js │ │ │ │ ├── lifecycle_task_signing.js │ │ │ │ ├── role_item_view.js │ │ │ │ ├── workflow_list.js │ │ │ │ └── workflow_mapping.js │ │ └── websocket │ │ │ ├── callState.js │ │ │ ├── channel.js │ │ │ ├── channelListener.js │ │ │ ├── channelMessagesType.js │ │ │ ├── channelStatus.js │ │ │ └── rejectCallReason.js │ ├── dmu │ │ ├── controls │ │ │ ├── OrbitControls.js │ │ │ ├── PointerLockControls.js │ │ │ ├── TrackballControls.js │ │ │ └── TransformControls.js │ │ ├── loaders │ │ │ ├── BinaryLoader.js │ │ │ ├── MTLLoader.js │ │ │ └── OBJLoader.js │ │ └── utils │ │ │ ├── BufferGeometryUtils.js │ │ │ ├── Reflector.js │ │ │ └── Stats.js │ ├── lib │ │ ├── empty.pdf │ │ ├── helvetiker_regular.typeface.json │ │ └── plugin-detect.js │ ├── localization │ │ └── nls │ │ │ ├── account-management.js │ │ │ ├── change-management.js │ │ │ ├── common.js │ │ │ ├── document-management.js │ │ │ ├── download.js │ │ │ ├── es │ │ │ └── common.js │ │ │ ├── fr │ │ │ ├── account-management.js │ │ │ ├── change-management.js │ │ │ ├── common.js │ │ │ ├── document-management.js │ │ │ ├── download.js │ │ │ ├── index.js │ │ │ ├── organization-management.js │ │ │ ├── product-management.js │ │ │ ├── product-structure.js │ │ │ └── workspace-management.js │ │ │ ├── index.js │ │ │ ├── organization-management.js │ │ │ ├── product-management.js │ │ │ ├── product-structure.js │ │ │ ├── ru │ │ │ ├── account-management.js │ │ │ ├── change-management.js │ │ │ ├── common.js │ │ │ ├── document-management.js │ │ │ ├── download.js │ │ │ ├── index.js │ │ │ ├── organization-management.js │ │ │ ├── product-management.js │ │ │ ├── product-structure.js │ │ │ └── workspace-management.js │ │ │ └── workspace-management.js │ ├── modules │ │ ├── all.js │ │ ├── chat-module │ │ │ ├── app.js │ │ │ ├── collections │ │ │ │ └── chat_message_collection.js │ │ │ ├── models │ │ │ │ └── chat_message_model.js │ │ │ ├── templates │ │ │ │ └── chat_message_view.html │ │ │ └── views │ │ │ │ ├── chat_message_view.js │ │ │ │ ├── chat_module_view.js │ │ │ │ └── chat_session_view.js │ │ ├── coworkers-access-module │ │ │ ├── app.js │ │ │ ├── templates │ │ │ │ └── coworker_item_template.html │ │ │ └── views │ │ │ │ ├── coworkers_access_module_view.js │ │ │ │ └── coworkers_item_view.js │ │ ├── user-popover-module │ │ │ └── app.js │ │ └── webrtc-module │ │ │ ├── adapters │ │ │ └── webRTCAdapter.js │ │ │ ├── app.js │ │ │ ├── templates │ │ │ └── webrtc_module_template.html │ │ │ └── views │ │ │ └── webrtc_module_view.js │ └── utils │ │ ├── charts-helpers.js │ │ ├── datatables.oSort.ext.js │ │ ├── effects.js │ │ ├── file-download.js │ │ ├── input-validity.js │ │ ├── jquery.maskedinput-config.js │ │ ├── popover.utils.js │ │ ├── query-builder-options.js │ │ ├── url-utils.js │ │ └── utils.prototype.js ├── less │ ├── account-management │ │ ├── content.less │ │ ├── menu.less │ │ └── style.less │ ├── change-management │ │ ├── content.less │ │ ├── link.less │ │ ├── menu.less │ │ ├── style.less │ │ └── workflow_models.less │ ├── common │ │ ├── acl.less │ │ ├── action_buttons.less │ │ ├── actions.less │ │ ├── alert.less │ │ ├── attributes.less │ │ ├── bootstrap_combobox.less │ │ ├── bootstrap_switch.less │ │ ├── button.less │ │ ├── content.less │ │ ├── conversion.less │ │ ├── dropdowns.less │ │ ├── elements.less │ │ ├── error.less │ │ ├── files.less │ │ ├── footer.less │ │ ├── form.less │ │ ├── general.less │ │ ├── header.less │ │ ├── icons.less │ │ ├── import.less │ │ ├── iteration.less │ │ ├── lifecycle.less │ │ ├── linked_documents.less │ │ ├── lov.less │ │ ├── menu.less │ │ ├── mixins.less │ │ ├── modal.less │ │ ├── modal_base.less │ │ ├── modification_notifications.less │ │ ├── not_found.less │ │ ├── part_assembly.less │ │ ├── part_modal.less │ │ ├── popover.less │ │ ├── product_creation.less │ │ ├── prompt.less │ │ ├── registration.less │ │ ├── responsive.less │ │ ├── responsive_1200px_min.less │ │ ├── responsive_767px_max.less │ │ ├── responsive_768px_979px.less │ │ ├── responsive_modal.less │ │ ├── responsive_navbar.less │ │ ├── responsive_utilities.less │ │ ├── roles.less │ │ ├── scrollbar.less │ │ ├── style.less │ │ ├── table.less │ │ ├── tags.less │ │ ├── task.less │ │ ├── treeview.less │ │ ├── udf.less │ │ ├── used_by.less │ │ ├── user_defined_function.less │ │ └── variables.less │ ├── document-management │ │ ├── baselines.less │ │ ├── content.less │ │ ├── documents.less │ │ ├── menu.less │ │ ├── search.less │ │ ├── style.less │ │ └── templates.less │ ├── documents │ │ ├── document-revision.less │ │ └── style.less │ ├── download │ │ ├── content.less │ │ └── style.less │ ├── main │ │ ├── login.less │ │ └── style.less │ ├── modules │ │ ├── chat_module.less │ │ ├── coworkers_access_module.less │ │ ├── style.less │ │ └── webrtc_module.less │ ├── organization-management │ │ ├── content.less │ │ ├── menu.less │ │ └── style.less │ ├── parts │ │ ├── part-revision.less │ │ └── style.less │ ├── product-management │ │ ├── baselines.less │ │ ├── content.less │ │ ├── menu.less │ │ ├── page_controls.less │ │ ├── part_list_item.less │ │ ├── product_instances.less │ │ ├── query_builder.less │ │ ├── search.less │ │ └── style.less │ ├── product-structure │ │ ├── actions_bar.less │ │ ├── app.less │ │ ├── bom_table.less │ │ ├── collaborative.less │ │ ├── content.less │ │ ├── dat.less │ │ ├── export_modal.less │ │ ├── frame.less │ │ ├── layers.less │ │ ├── menu.less │ │ ├── part_metadata.less │ │ ├── path_to_path_link.less │ │ ├── product_instance_data.less │ │ ├── product_nav_list.less │ │ ├── progress_bar.less │ │ ├── scene.less │ │ ├── shortcuts.less │ │ ├── stats.less │ │ ├── style.less │ │ ├── style_frame.less │ │ └── view_buttons.less │ ├── visualization │ │ └── style.less │ └── workspace-management │ │ ├── admin-accounts.less │ │ ├── admin-oidc.less │ │ ├── charts.less │ │ ├── content.less │ │ ├── customizations.less │ │ ├── menu.less │ │ ├── style.less │ │ ├── webhooks.less │ │ ├── workspace-home.less │ │ └── workspace-users.less ├── main │ ├── js │ │ ├── app.js │ │ ├── router.js │ │ ├── templates │ │ │ ├── account-creation-form.html │ │ │ ├── app.html │ │ │ ├── login-form.html │ │ │ ├── login-with.html │ │ │ ├── recover-form.html │ │ │ └── recovery-form.html │ │ └── views │ │ │ ├── account-creation-form.js │ │ │ ├── login-form.js │ │ │ ├── login-scene.js │ │ │ ├── login-with.js │ │ │ ├── recover-form.js │ │ │ └── recovery-form.js │ └── main.js ├── organization-management │ ├── index.html │ ├── js │ │ ├── app.js │ │ ├── router.js │ │ ├── templates │ │ │ ├── content.html │ │ │ ├── organization-create.html │ │ │ ├── organization-edit.html │ │ │ ├── organization-management-home.html │ │ │ └── organization-members.html │ │ └── views │ │ │ ├── organization-create.js │ │ │ ├── organization-edit.js │ │ │ ├── organization-management-home.js │ │ │ └── organization-members.js │ └── main.js ├── parts │ ├── index.html │ ├── js │ │ ├── app.js │ │ ├── router.js │ │ ├── templates │ │ │ ├── cad-file.html │ │ │ ├── part-permalink.html │ │ │ └── part-revision.html │ │ └── views │ │ │ ├── cad-file-view.js │ │ │ └── part-revision.js │ └── main.js ├── product-management │ ├── index.html │ ├── js │ │ ├── app.js │ │ ├── collections │ │ │ ├── checkedouts_part_collection.js │ │ │ ├── configuration_items.js │ │ │ ├── configurations.js │ │ │ ├── part_templates.js │ │ │ ├── tag_part_collection.js │ │ │ └── tasks_part_collection.js │ │ ├── models │ │ │ ├── baselined_part.js │ │ │ ├── configuration.js │ │ │ ├── configuration_item.js │ │ │ ├── part_template.js │ │ │ └── path_choice.js │ │ ├── router.js │ │ ├── templates │ │ │ ├── baselines │ │ │ │ ├── baseline_choice_list.html │ │ │ │ ├── baseline_choice_list_item.html │ │ │ │ ├── baseline_configuration_list.html │ │ │ │ ├── baseline_creation_view.html │ │ │ │ ├── baseline_detail.html │ │ │ │ ├── baseline_list_item.html │ │ │ │ ├── baselined_part_list.html │ │ │ │ ├── baselined_part_list_item.html │ │ │ │ ├── baselines_content.html │ │ │ │ ├── baselines_list.html │ │ │ │ └── baselines_list_item.html │ │ │ ├── configuration │ │ │ │ ├── configuration_content.html │ │ │ │ ├── configuration_creation_view.html │ │ │ │ ├── configuration_details.html │ │ │ │ ├── configuration_list.html │ │ │ │ └── configuration_list_item.html │ │ │ ├── content.html │ │ │ ├── importer.html │ │ │ ├── nav │ │ │ │ ├── baselines_nav.html │ │ │ │ ├── checkedouts_nav.html │ │ │ │ ├── configuration_nav.html │ │ │ │ ├── part_nav.html │ │ │ │ ├── part_template_nav.html │ │ │ │ ├── product_instances_nav.html │ │ │ │ ├── product_nav.html │ │ │ │ ├── tag_nav.html │ │ │ │ ├── tag_nav_item.html │ │ │ │ └── tasks_nav.html │ │ │ ├── part-template │ │ │ │ ├── part_template_content.html │ │ │ │ ├── part_template_creation_view.html │ │ │ │ ├── part_template_list.html │ │ │ │ └── part_template_list_item.html │ │ │ ├── part │ │ │ │ ├── part_content.html │ │ │ │ ├── part_creation_view.html │ │ │ │ ├── part_grouped_by_list.html │ │ │ │ ├── part_grouped_by_list_item.html │ │ │ │ ├── part_import_form.html │ │ │ │ ├── part_import_modal.html │ │ │ │ ├── part_list.html │ │ │ │ ├── part_list_item.html │ │ │ │ ├── part_new_version.html │ │ │ │ └── search_part_form.html │ │ │ ├── product-instances │ │ │ │ ├── product_instance_modal.html │ │ │ │ ├── product_instances_content.html │ │ │ │ ├── product_instances_creation.html │ │ │ │ ├── product_instances_import_form.html │ │ │ │ ├── product_instances_import_modal.html │ │ │ │ ├── product_instances_list.html │ │ │ │ └── product_instances_list_item.html │ │ │ ├── product │ │ │ │ ├── product_content.html │ │ │ │ ├── product_creation_view.html │ │ │ │ ├── product_details.html │ │ │ │ ├── product_list.html │ │ │ │ └── product_list_item.html │ │ │ ├── query_builder.html │ │ │ └── search_part_advanced_form.html │ │ └── views │ │ │ ├── advanced_search.js │ │ │ ├── baselines │ │ │ ├── baseline_choice_list.js │ │ │ ├── baseline_choice_list_item.js │ │ │ ├── baseline_configuration_list.js │ │ │ ├── baseline_creation_view.js │ │ │ ├── baseline_detail_view.js │ │ │ ├── baseline_list.js │ │ │ ├── baseline_list_item.js │ │ │ ├── baselined_part_list.js │ │ │ ├── baselined_part_list_item.js │ │ │ ├── baselines_content.js │ │ │ ├── baselines_list.js │ │ │ └── baselines_list_item.js │ │ │ ├── configuration │ │ │ ├── configuration_content.js │ │ │ ├── configuration_creation_view.js │ │ │ ├── configuration_details_view.js │ │ │ ├── configuration_list.js │ │ │ └── configuration_list_item.js │ │ │ ├── nav │ │ │ ├── baselines_nav.js │ │ │ ├── checkedouts_nav.js │ │ │ ├── configuration_nav.js │ │ │ ├── part_nav.js │ │ │ ├── part_template_nav.js │ │ │ ├── product_instances_nav.js │ │ │ ├── product_nav.js │ │ │ ├── tag_nav.js │ │ │ ├── tag_nav_item.js │ │ │ └── tasks_nav.js │ │ │ ├── part-template │ │ │ ├── part_template_content.js │ │ │ ├── part_template_creation_view.js │ │ │ ├── part_template_edit_view.js │ │ │ ├── part_template_list.js │ │ │ └── part_template_list_item.js │ │ │ ├── part │ │ │ ├── part_content.js │ │ │ ├── part_creation_view.js │ │ │ ├── part_grouped_by_list.js │ │ │ ├── part_grouped_by_list_item.js │ │ │ ├── part_importer.js │ │ │ ├── part_list.js │ │ │ ├── part_list_item.js │ │ │ └── part_new_version.js │ │ │ ├── product-instances │ │ │ ├── product_instance_modal.js │ │ │ ├── product_instances_content.js │ │ │ ├── product_instances_creation.js │ │ │ ├── product_instances_importer.js │ │ │ ├── product_instances_list.js │ │ │ └── product_instances_list_item.js │ │ │ ├── product │ │ │ ├── product_content.js │ │ │ ├── product_creation_view.js │ │ │ ├── product_details_view.js │ │ │ ├── product_list.js │ │ │ └── product_list_item.js │ │ │ └── query_builder.js │ └── main.js ├── product-structure │ ├── index.html │ ├── js │ │ ├── app.js │ │ ├── collections │ │ │ ├── layer_collection.js │ │ │ ├── marker_collection.js │ │ │ ├── part_collection.js │ │ │ └── result_path_collection.js │ │ ├── dmu │ │ │ ├── InstancesManager.js │ │ │ ├── LayerManager.js │ │ │ ├── LoaderManager.js │ │ │ ├── MeasureTool.js │ │ │ ├── SceneManager.js │ │ │ └── collaborativeController.js │ │ ├── frameRouter.js │ │ ├── models │ │ │ ├── component_module.js │ │ │ ├── layer.js │ │ │ ├── marker.js │ │ │ ├── path_data_master.js │ │ │ ├── product_instance_data.js │ │ │ └── result_path.js │ │ ├── router.js │ │ ├── templates │ │ │ ├── baselines │ │ │ │ └── baseline_select.html │ │ │ ├── blocker.html │ │ │ ├── bom.html │ │ │ ├── bom_content.html │ │ │ ├── bom_header.html │ │ │ ├── bom_item.html │ │ │ ├── collaborative_view.html │ │ │ ├── content.html │ │ │ ├── control_clipping.html │ │ │ ├── control_cutplan.html │ │ │ ├── control_explode.html │ │ │ ├── control_layers.html │ │ │ ├── control_markers.html │ │ │ ├── control_measure.html │ │ │ ├── control_modes.html │ │ │ ├── control_navigation.html │ │ │ ├── control_options.html │ │ │ ├── control_transform.html │ │ │ ├── controls_infos_modal.html │ │ │ ├── export_scene_modal.html │ │ │ ├── layer_controls.html │ │ │ ├── layer_item.html │ │ │ ├── marker_create_modal.html │ │ │ ├── marker_info_modal.html │ │ │ ├── nav_list_search_bar.html │ │ │ ├── part_instance.html │ │ │ ├── part_meta_data.html │ │ │ ├── path_to_path_link_item.html │ │ │ ├── path_to_path_link_modal.html │ │ │ ├── product-instance-data-modal.html │ │ │ ├── progress_bar.html │ │ │ └── shortcuts.html │ │ ├── views │ │ │ ├── baselines │ │ │ │ └── baseline_select_view.js │ │ │ ├── blocker_view.js │ │ │ ├── bom_content_view.js │ │ │ ├── bom_header_view.js │ │ │ ├── bom_item_view.js │ │ │ ├── bom_view.js │ │ │ ├── collaborative_view.js │ │ │ ├── component_views.js │ │ │ ├── control_clipping_view.js │ │ │ ├── control_explode_view.js │ │ │ ├── control_layers_view.js │ │ │ ├── control_markers_view.js │ │ │ ├── control_measure_view.js │ │ │ ├── control_modes_view.js │ │ │ ├── control_navigation_view.js │ │ │ ├── control_options_view.js │ │ │ ├── control_transform_view.js │ │ │ ├── controls_infos_modal_view.js │ │ │ ├── export_scene_modal_view.js │ │ │ ├── layer-header-view.js │ │ │ ├── layer-item-view.js │ │ │ ├── layers-list-view.js │ │ │ ├── marker_create_modal_view.js │ │ │ ├── marker_info_modal_view.js │ │ │ ├── part_instance_view.js │ │ │ ├── part_metadata_view.js │ │ │ ├── parts_tree_view.js │ │ │ ├── path_data_modal.js │ │ │ ├── path_to_path_link_item.js │ │ │ ├── path_to_path_link_modal.js │ │ │ ├── progress_bar_view.js │ │ │ ├── search_view.js │ │ │ └── shortcuts_view.js │ │ └── workers │ │ │ ├── DegradationLevelBalancer.js │ │ │ ├── InstancesSorter.js │ │ │ └── InstancesWorker.js │ └── main.js ├── sounds │ ├── incoming-call.ogg │ └── notification.ogg ├── visualization │ ├── index.html │ └── main.js ├── webapp.properties.json └── workspace-management │ ├── index.html │ ├── js │ ├── app.js │ ├── hooks │ │ └── hooks-types.js │ ├── router.js │ ├── templates │ │ ├── admin-accounts.html │ │ ├── admin-dashboard.html │ │ ├── admin-home.html │ │ ├── admin-oauth-edit.html │ │ ├── admin-oauth-new.html │ │ ├── admin-oauth-provider.html │ │ ├── admin-oauth.html │ │ ├── admin-options.html │ │ ├── content.html │ │ ├── hooks-item.html │ │ ├── hooks-manager.html │ │ ├── notification-edit.html │ │ ├── notification-options.html │ │ ├── part-table-customizations.html │ │ ├── workspace-admin-new.html │ │ ├── workspace-creation.html │ │ ├── workspace-customizations.html │ │ ├── workspace-dashboard.html │ │ ├── workspace-edit.html │ │ ├── workspace-item.html │ │ ├── workspace-management-home.html │ │ ├── workspace-notifications.html │ │ └── workspace-users.html │ └── views │ │ ├── admin-accounts.js │ │ ├── admin-dashboard.js │ │ ├── admin-home.js │ │ ├── admin-oauth-edit.js │ │ ├── admin-oauth-new.js │ │ ├── admin-oauth.js │ │ ├── admin-options.js │ │ ├── hooks-item.js │ │ ├── hooks-manager.js │ │ ├── notification-edit.js │ │ ├── notification-options.js │ │ ├── part-table-customizations.js │ │ ├── workspace-admin-new.js │ │ ├── workspace-creation.js │ │ ├── workspace-customizations.js │ │ ├── workspace-dashboard.js │ │ ├── workspace-edit.js │ │ ├── workspace-item.js │ │ ├── workspace-management-home.js │ │ ├── workspace-notifications.js │ │ └── workspace-users.js │ └── main.js ├── bower.json ├── build.sh ├── docker ├── Dockerfile └── entrypoint.sh ├── grunt ├── dev │ ├── jshint.js │ ├── server-front.js │ └── tests.js ├── modules │ ├── account-management.js │ ├── change-management.js │ ├── document-management.js │ ├── documents.js │ ├── download.js │ ├── main.js │ ├── organization-management.js │ ├── parts.js │ ├── product-management.js │ ├── product-structure.js │ ├── visualization.js │ └── workspace-management.js └── tasks │ ├── build.js │ └── copy.js ├── index.html ├── package-lock.json ├── package.json └── tests ├── .gitignore ├── README.md ├── config.js ├── js ├── auth │ ├── login.js │ └── logout.js ├── change-management │ ├── issue │ │ ├── issueCreation.js │ │ └── issueDeletion.js │ ├── milestone │ │ ├── milestoneCreation.js │ │ └── milestoneDeletion.js │ ├── order │ │ ├── orderCreation.js │ │ └── orderDeletion.js │ ├── request │ │ ├── requestCreation.js │ │ └── requestDeletion.js │ ├── role │ │ └── roleCreation.js │ └── workflow │ │ ├── workflowCreation.js │ │ ├── workflowDeletion.js │ │ └── workflowDuplication.js ├── common │ ├── attributes.js │ └── partFromTemplate.js ├── content-type │ └── contentTypeCheck.js ├── document-management │ ├── document │ │ ├── documentAddLink.js │ │ ├── documentCheckin.js │ │ ├── documentCheckout.js │ │ ├── documentClickLink.js │ │ ├── documentCreation.js │ │ ├── documentCreationFromTemplate.js │ │ ├── documentCreationWithWorkflow.js │ │ ├── documentDeletion.js │ │ ├── documentFilesRemove.js │ │ ├── documentMultipleCheckin.js │ │ ├── documentMultipleCheckout.js │ │ ├── documentMultipleDeletion.js │ │ ├── documentMultipleRelease.js │ │ ├── documentMultipleUndoCheckout.js │ │ ├── documentObsolete.js │ │ ├── documentRelease.js │ │ ├── documentUploadFile.js │ │ └── documentsCreation.js │ ├── folder │ │ ├── folderCreation.js │ │ └── folderDeletion.js │ ├── lifecycle │ │ └── approveTask.js │ ├── lov │ │ ├── lovCreation.js │ │ ├── lovDeletion.js │ │ └── lovInTemplateCreation.js │ ├── share │ │ ├── expiredSharedDocument.js │ │ ├── privateSharedDocument.js │ │ ├── publicSharedDocument.js │ │ └── sharedDocumentCreation.js │ ├── tag │ │ ├── tagCreation.js │ │ ├── tagDeletion.js │ │ └── tagList.js │ └── template │ │ ├── templateCreation.js │ │ └── templateDeletion.js ├── includes │ └── vars.js ├── pre │ └── start.js ├── product-management │ ├── assembly │ │ ├── assemblyCheck.js │ │ ├── assemblyCreation.js │ │ └── bomInspection.js │ ├── baseline │ │ ├── baselineCreation.js │ │ └── baselineDeletion.js │ ├── part │ │ ├── checkUsedByList.js │ │ ├── partAddLink.js │ │ ├── partCheckin.js │ │ ├── partCheckout.js │ │ ├── partClickLink.js │ │ ├── partCreation.js │ │ ├── partDeletion.js │ │ ├── partMultipleDeletion.js │ │ ├── partObsolete.js │ │ ├── partRelease.js │ │ ├── partUploadAttachedFiles.js │ │ ├── partUploadNativeCadFile.js │ │ ├── partsMultipleCheckin.js │ │ ├── partsMultipleCheckout.js │ │ ├── partsMultipleRelease.js │ │ ├── partsMultipleUndoCheckout.js │ │ └── showPartDetails.js │ ├── pathToPathLink │ │ ├── pathToPathLinkCheck.js │ │ └── pathToPathLinkCreation.js │ ├── product-instance │ │ ├── productInstanceCreation.js │ │ ├── productInstanceData.js │ │ └── productInstanceDeletion.js │ ├── product │ │ ├── productCreation.js │ │ └── productDeletion.js │ ├── queryBuilder │ │ └── queryBuilderSearch.js │ ├── share │ │ ├── expiredSharedPart.js │ │ ├── privateSharedPart.js │ │ ├── publicSharedPart.js │ │ └── sharedPartCreation.js │ └── template │ │ ├── partTemplateCreation.js │ │ ├── partTemplateDeletion.js │ │ └── templateWithAttribute.js ├── workspace │ └── workspaceCreation.js └── ws │ ├── websocket.auth.tests.js │ ├── websocket.chat.tests.js │ ├── websocket.status.tests.js │ └── ws.utils.js ├── res ├── document-upload.txt ├── document-upload2.txt └── part-upload.obj └── run.js /.bowerrc: -------------------------------------------------------------------------------- 1 | { 2 | "directory": "app/bower_components", 3 | "allowRoot": true 4 | } 5 | -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | * 2 | !dist 3 | !docker 4 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig helps developers define and maintain consistent 2 | # coding styles between different editors and IDEs 3 | # editorconfig.org 4 | 5 | root = true 6 | 7 | 8 | [*] 9 | 10 | # Change these settings to your own preference 11 | indent_style = space 12 | indent_size = 4 13 | 14 | # We recommend you to keep these unchanged 15 | end_of_line = lf 16 | charset = utf-8 17 | trim_trailing_whitespace = true 18 | insert_final_newline = true 19 | 20 | [*.md] 21 | trim_trailing_whitespace = false 22 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | bower_components/ 3 | dist/ 4 | target/ 5 | test/temp 6 | .sass-cache 7 | .tmp 8 | app/**/main.css 9 | .idea/ 10 | .iml 11 | docdoku-plm-front.iml 12 | app/webapp.properties.json 13 | -------------------------------------------------------------------------------- /.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "node": true, 3 | "browser": true, 4 | "esnext": true, 5 | "bitwise": false, 6 | "camelcase": false, 7 | "curly": true, 8 | "eqeqeq": true, 9 | "immed": true, 10 | "indent": 4, 11 | "latedef": true, 12 | "newcap": true, 13 | "noarg": true, 14 | "quotmark": "single", 15 | "regexp": true, 16 | "undef": true, 17 | "unused": true, 18 | "strict": true, 19 | "trailing": true, 20 | "smarttabs": true, 21 | "jquery": true, 22 | "globals": { 23 | "Docdokuplm": true, 24 | "docdokuplm": true, 25 | "_": false, 26 | "Backbone": false, 27 | "JST": false, 28 | "beforeEach": false, 29 | "describe": false, 30 | "it": false, 31 | "assert": true, 32 | "expect": true, 33 | "should": true, 34 | "require": false, 35 | "define": false 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /.jshintrc.default: -------------------------------------------------------------------------------- 1 | { 2 | "node": true, 3 | "browser": true, 4 | "esnext": true, 5 | "bitwise": true, 6 | "camelcase": true, 7 | "curly": true, 8 | "eqeqeq": true, 9 | "immed": true, 10 | "indent": 4, 11 | "latedef": true, 12 | "newcap": true, 13 | "noarg": true, 14 | "quotmark": "single", 15 | "regexp": true, 16 | "undef": true, 17 | "unused": true, 18 | "strict": true, 19 | "trailing": true, 20 | "smarttabs": true, 21 | "jquery": true, 22 | "globals": { 23 | "Docdokuplm": true, 24 | "docdokuplm": true, 25 | "_": false, 26 | "Backbone": false, 27 | "JST": false, 28 | "beforeEach": false, 29 | "describe": false, 30 | "it": false, 31 | "assert": true, 32 | "expect": true, 33 | "should": true, 34 | "require": false, 35 | "define": false 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /.yo-rc.json: -------------------------------------------------------------------------------- 1 | { 2 | "generator-backbone": { 3 | "appPath": "app", 4 | "appName": "Docdokuplm", 5 | "coffee": false, 6 | "testFramework": "mocha", 7 | "templateFramework": "lodash", 8 | "compassBootstrap": false, 9 | "includeRequireJS": true 10 | }, 11 | "generator-mocha": {} 12 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # DocDokuPLM web client 2 | 3 | Read the development guide on [this page](https://github.com/docdoku/docdoku-plm-front/wiki/Development-Guide) 4 | -------------------------------------------------------------------------------- /app/account-management/js/app.js: -------------------------------------------------------------------------------- 1 | /*global define,App*/ 2 | define([ 3 | 'backbone', 4 | 'mustache', 5 | 'text!templates/content.html', 6 | 'views/edit-account' 7 | ], function (Backbone, Mustache, template, EditAccountView) { 8 | 'use strict'; 9 | var AppView = Backbone.View.extend({ 10 | 11 | el: '#content', 12 | 13 | events: { 14 | }, 15 | 16 | initialize: function () { 17 | }, 18 | 19 | render: function () { 20 | this.$el.html(Mustache.render(template, { 21 | i18n: App.config.i18n 22 | })).show(); 23 | return this; 24 | }, 25 | 26 | editAccount:function(){ 27 | var view = new EditAccountView(); 28 | this.$('#account-management-content').html(view.renderAuthView().el); 29 | } 30 | 31 | }); 32 | 33 | return AppView; 34 | }); 35 | -------------------------------------------------------------------------------- /app/account-management/js/router.js: -------------------------------------------------------------------------------- 1 | /*global define,App*/ 2 | define([ 3 | 'backbone', 4 | 'common-objects/common/singleton_decorator' 5 | ], 6 | function (Backbone, singletonDecorator) { 7 | 'use strict'; 8 | var Router = Backbone.Router.extend({ 9 | routes: { 10 | '': 'editAccount' 11 | }, 12 | 13 | editAccount:function(){ 14 | App.appView.render(); 15 | App.headerView.render(); 16 | App.appView.editAccount(); 17 | } 18 | }); 19 | 20 | return singletonDecorator(Router); 21 | }); 22 | -------------------------------------------------------------------------------- /app/account-management/js/templates/content.html: -------------------------------------------------------------------------------- 1 |
2 | 7 |
8 | 9 |
10 | -------------------------------------------------------------------------------- /app/change-management/js/collections/change_issue_collection.js: -------------------------------------------------------------------------------- 1 | /*global define,App*/ 2 | define([ 3 | 'backbone', 4 | 'models/change_issue' 5 | ], function (Backbone,ChangeIssueModel) { 6 | 'use strict'; 7 | var ChangeIssueListCollection = Backbone.Collection.extend({ 8 | model: ChangeIssueModel, 9 | url: function () { 10 | return App.config.apiEndPoint + '/workspaces/' + App.config.workspaceId + '/changes/issues'; 11 | } 12 | }); 13 | 14 | return ChangeIssueListCollection; 15 | }); 16 | -------------------------------------------------------------------------------- /app/change-management/js/collections/change_order_collection.js: -------------------------------------------------------------------------------- 1 | /*global define,App*/ 2 | define([ 3 | 'backbone', 4 | 'models/change_order' 5 | ], function (Backbone, ChangeOrderModel) { 6 | 'use strict'; 7 | var ChangeOrderListCollection = Backbone.Collection.extend({ 8 | model: ChangeOrderModel, 9 | url: function () { 10 | return App.config.apiEndPoint + '/workspaces/' + App.config.workspaceId + '/changes/orders'; 11 | } 12 | }); 13 | 14 | return ChangeOrderListCollection; 15 | }); 16 | -------------------------------------------------------------------------------- /app/change-management/js/collections/change_request_collection.js: -------------------------------------------------------------------------------- 1 | /*global define,App*/ 2 | define([ 3 | 'backbone', 4 | 'models/change_request' 5 | ], function (Backbone, ChangeRequestModel) { 6 | 'use strict'; 7 | var ChangeRequestListCollection = Backbone.Collection.extend({ 8 | model: ChangeRequestModel, 9 | url: function () { 10 | return App.config.apiEndPoint + '/workspaces/' + App.config.workspaceId + '/changes/requests'; 11 | } 12 | }); 13 | 14 | return ChangeRequestListCollection; 15 | }); 16 | -------------------------------------------------------------------------------- /app/change-management/js/collections/milestone_collection.js: -------------------------------------------------------------------------------- 1 | /*global define,App*/ 2 | define([ 3 | 'backbone', 4 | 'models/milestone' 5 | ], function (Backbone, MilestoneModel) { 6 | 'use strict'; 7 | var MilestoneListCollection = Backbone.Collection.extend({ 8 | model: MilestoneModel, 9 | url: function () { 10 | return App.config.apiEndPoint + '/workspaces/' + App.config.workspaceId + '/changes/milestones'; 11 | } 12 | }); 13 | 14 | return MilestoneListCollection; 15 | }); 16 | -------------------------------------------------------------------------------- /app/change-management/js/collections/roles.js: -------------------------------------------------------------------------------- 1 | /*global define,App*/ 2 | define([ 3 | 'backbone', 4 | 'common-objects/models/role' 5 | ], function (Backbone, Role) { 6 | 'use strict'; 7 | var RoleList = Backbone.Collection.extend({ 8 | model: Role, 9 | 10 | className: 'RoleList', 11 | 12 | comparator: function (a, b) { 13 | // sort roles by name 14 | var nameA = a.get('name'); 15 | var nameB = b.get('name'); 16 | 17 | if (nameA === nameB) { 18 | return 0; 19 | } 20 | return (nameA < nameB) ? -1 : 1; 21 | }, 22 | 23 | 24 | url: function () { 25 | return App.config.apiEndPoint + '/workspaces/' + App.config.workspaceId + '/roles/'; 26 | } 27 | 28 | }); 29 | 30 | return RoleList; 31 | }); 32 | -------------------------------------------------------------------------------- /app/change-management/js/collections/roles_in_use.js: -------------------------------------------------------------------------------- 1 | /*global define,App*/ 2 | define([ 3 | 'backbone', 4 | 'common-objects/models/role' 5 | ], function (Backbone, Role) { 6 | 'use strict'; 7 | var RoleInUseList = Backbone.Collection.extend({ 8 | model: Role, 9 | 10 | url: function () { 11 | return App.config.apiEndPoint + '/workspaces/' + App.config.workspaceId + '/roles/inuse'; 12 | } 13 | 14 | }); 15 | 16 | return RoleInUseList; 17 | }); 18 | -------------------------------------------------------------------------------- /app/change-management/js/models/change_issue.js: -------------------------------------------------------------------------------- 1 | /*global define,App*/ 2 | define([ 3 | 'models/change_item' 4 | ], function (ChangeItemModel) { 5 | 'use strict'; 6 | var ChangeIssueModel = ChangeItemModel.extend({ 7 | urlRoot: function () { 8 | return App.config.apiEndPoint + '/workspaces/' + App.config.workspaceId + '/changes/issues'; 9 | }, 10 | getInitiator: function () { 11 | return this.get('initiator'); 12 | } 13 | }); 14 | 15 | return ChangeIssueModel; 16 | }); 17 | -------------------------------------------------------------------------------- /app/change-management/js/templates/change-issues/change_issue_content.html: -------------------------------------------------------------------------------- 1 |
2 | 5 | {{> deleteButton}} 6 | {{> tagsButton}} 7 | {{> aclButton}} 8 |
9 |
10 |
11 | -------------------------------------------------------------------------------- /app/change-management/js/templates/change-issues/change_issue_list_item.html: -------------------------------------------------------------------------------- 1 | 2 | {{model.getName}} 3 | {{model.getAssigneeName}} 4 | {{model.getPriority}} 5 | {{model.getCategory}} 6 | {{model.getAuthorName}} 7 | {{model.getFormattedCreationDate}} 8 | 9 | {{#model.isReadOnly}} 10 | 11 | {{/model.isReadOnly}} 12 | {{#model.isFullAccess}} 13 | 14 | {{/model.isFullAccess}} 15 | 16 | -------------------------------------------------------------------------------- /app/change-management/js/templates/change-orders/change_order_content.html: -------------------------------------------------------------------------------- 1 |
2 | 5 | {{> deleteButton}} 6 | {{> tagsButton}} 7 | {{> aclButton}} 8 |
9 |
10 |
11 | -------------------------------------------------------------------------------- /app/change-management/js/templates/change-orders/change_order_list_item.html: -------------------------------------------------------------------------------- 1 | 2 | {{model.getName}} 3 | {{model.getAssigneeName}} 4 | {{model.getPriority}} 5 | {{model.getCategory}} 6 | {{model.getAuthorName}} 7 | {{model.getFormattedCreationDate}} 8 | 9 | {{#model.isReadOnly}} 10 | 11 | {{/model.isReadOnly}} 12 | {{#model.isFullAccess}} 13 | 14 | {{/model.isFullAccess}} 15 | 16 | -------------------------------------------------------------------------------- /app/change-management/js/templates/change-requests/change_request_content.html: -------------------------------------------------------------------------------- 1 |
2 | 5 | {{> deleteButton}} 6 | {{> tagsButton}} 7 | {{> aclButton}} 8 |
9 |
10 |
11 | -------------------------------------------------------------------------------- /app/change-management/js/templates/change-requests/change_request_list_item.html: -------------------------------------------------------------------------------- 1 | 2 | {{model.getName}} 3 | {{model.getAssigneeName}} 4 | {{model.getPriority}} 5 | {{model.getCategory}} 6 | {{model.getAuthorName}} 7 | {{model.getFormattedCreationDate}} 8 | 9 | {{#model.isReadOnly}} 10 | 11 | {{/model.isReadOnly}} 12 | {{#model.isFullAccess}} 13 | 14 | {{/model.isFullAccess}} 15 | 16 | -------------------------------------------------------------------------------- /app/change-management/js/templates/change_item_list.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{i18n.NAME}} 5 | {{i18n.CHANGE_ITEM_ASSIGNEE}} 6 | {{i18n.CHANGE_ITEM_PRIORITY}} 7 | {{i18n.CHANGE_ITEM_CATEGORY}} 8 | {{i18n.AUTHOR}} 9 | {{i18n.CREATION_DATE}} 10 | {{i18n.ACL}} 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /app/change-management/js/templates/content.html: -------------------------------------------------------------------------------- 1 |
2 | 10 |
11 |
12 | -------------------------------------------------------------------------------- /app/change-management/js/templates/milestones/milestone_content.html: -------------------------------------------------------------------------------- 1 |
2 | 5 | {{> deleteButton}} 6 | {{> aclButton}} 7 |
8 |
9 |
10 | -------------------------------------------------------------------------------- /app/change-management/js/templates/milestones/milestone_list.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{i18n.TITLE}} 5 | {{i18n.DUE_DATE}} 6 | {{i18n.REQUESTS_NUMBER}} 7 | {{i18n.ORDERS_NUMBER}} 8 | {{i18n.ACL}} 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/change-management/js/templates/milestones/milestone_list_item.html: -------------------------------------------------------------------------------- 1 | 2 | {{model.getTitle}} 3 | {{model.getDueDateToPrint}} 4 | {{model.getNumberOfRequests}} 5 | {{model.getNumberOfOrders}} 6 | 7 | {{#model.isReadOnly}} 8 | 9 | {{/model.isReadOnly}} 10 | {{#model.isFullAccess}} 11 | 12 | {{/model.isFullAccess}} 13 | 14 | -------------------------------------------------------------------------------- /app/change-management/js/templates/nav/change_issue_nav.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | {{i18n.ISSUES}} 5 | 6 |
7 | -------------------------------------------------------------------------------- /app/change-management/js/templates/nav/change_order_nav.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | {{i18n.ORDERS}} 5 | 6 |
7 | -------------------------------------------------------------------------------- /app/change-management/js/templates/nav/change_request_nav.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | {{i18n.REQUESTS}} 5 | 6 |
7 | -------------------------------------------------------------------------------- /app/change-management/js/templates/nav/milestone_nav.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | {{i18n.MILESTONES}} 5 | 6 |
7 | -------------------------------------------------------------------------------- /app/change-management/js/templates/nav/workflow_nav.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | {{i18n.WORKFLOWS}} 5 | 6 |
7 | -------------------------------------------------------------------------------- /app/change-management/js/templates/tasks/task.html: -------------------------------------------------------------------------------- 1 |
2 | -------------------------------------------------------------------------------- /app/change-management/js/templates/tasks/task_list.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | {{#tasks}} 13 | 14 | 15 | 16 | 17 | 18 | 19 | {{/tasks}} 20 | 21 | 22 |
{{i18n.TITLE}}{{i18n.NAME}}{{i18n.STATUS}}
{{title}}{{holderReference}}-{{holderVersion}}-{{targetIteration}}{{status}}
23 | -------------------------------------------------------------------------------- /app/change-management/js/templates/workflows/workflow_content_list.html: -------------------------------------------------------------------------------- 1 |
2 | 5 | {{> deleteButton}} 6 | {{> aclButton}} 7 | 10 |
11 |
12 |
13 | -------------------------------------------------------------------------------- /app/change-management/js/templates/workflows/workflow_list.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{i18n.REFERENCE}} 5 | {{i18n.FINAL_STATE_PLACEHOLDER}} 6 | {{i18n.AUTHOR}} 7 | {{i18n.CREATION_DATE}} 8 | {{i18n.ACL}} 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/change-management/js/templates/workflows/workflow_list_item.html: -------------------------------------------------------------------------------- 1 | 2 | {{model.id}} 3 | {{model.finalLifeCycleState}} 4 | {{model.author.name}} 5 | {{model.creationDate}} 6 | 7 | {{#model.isReadOnly}} 8 | 9 | {{/model.isReadOnly}} 10 | {{#model.isFullAccess}} 11 | 12 | {{/model.isFullAccess}} 13 | 14 | -------------------------------------------------------------------------------- /app/change-management/js/templates/workflows/workflow_model_copy.html: -------------------------------------------------------------------------------- 1 | 18 | -------------------------------------------------------------------------------- /app/change-management/js/views/tasks/task_content_list.js: -------------------------------------------------------------------------------- 1 | /*global define,App*/ 2 | define([ 3 | 'backbone', 4 | 'mustache', 5 | 'text!templates/tasks/task_list.html' 6 | ], function (Backbone, Mustache, template) { 7 | 'use strict'; 8 | var TaskListView = Backbone.View.extend({ 9 | events: {}, 10 | 11 | initialize: function () { 12 | 13 | }, 14 | 15 | render: function () { 16 | var _this = this; 17 | $.getJSON(App.config.apiEndPoint + '/workspaces/' + App.config.workspaceId + '/tasks/' + App.config.login + '/assigned') 18 | .then(function (tasks) { 19 | _this.$el.html(Mustache.render(template, {tasks: tasks, i18n: App.config.i18n})); 20 | }); 21 | return this; 22 | } 23 | 24 | }); 25 | return TaskListView; 26 | }); 27 | -------------------------------------------------------------------------------- /app/document-management/js/collections/checked_out_document.js: -------------------------------------------------------------------------------- 1 | /*global define,App*/ 2 | define([ 3 | 'backbone', 4 | 'common-objects/models/document/document_revision' 5 | ], function (Backbone, DocumentRevision) { 6 | 'use strict'; 7 | var TagDocumentList = Backbone.Collection.extend({ 8 | 9 | model: DocumentRevision, 10 | 11 | className: 'CheckedOutDocumentList', 12 | 13 | url: function () { 14 | return App.config.apiEndPoint + '/workspaces/' + App.config.workspaceId + '/documents/checkedout'; 15 | }, 16 | 17 | comparator: function (documentRevision) { 18 | return documentRevision.get('id'); 19 | } 20 | 21 | }); 22 | 23 | return TagDocumentList; 24 | }); 25 | -------------------------------------------------------------------------------- /app/document-management/js/collections/checkedout_document.js: -------------------------------------------------------------------------------- 1 | /*global define,App*/ 2 | define([ 3 | 'backbone', 4 | 'common-objects/models/document/document_revision' 5 | ], function (Backbone, DocumentRevision) { 6 | 'use strict'; 7 | var CheckedoutDocumentList = Backbone.Collection.extend({ 8 | 9 | model: DocumentRevision, 10 | 11 | className: 'CheckedoutDocumentList', 12 | 13 | url: function () { 14 | return App.config.apiEndPoint + '/workspaces/' + App.config.workspaceId + '/documents/checkedout'; 15 | } 16 | 17 | }); 18 | 19 | return CheckedoutDocumentList; 20 | }); 21 | -------------------------------------------------------------------------------- /app/document-management/js/collections/tag_document.js: -------------------------------------------------------------------------------- 1 | /*global define,App*/ 2 | define([ 3 | 'backbone', 4 | 'common-objects/models/document/document_revision' 5 | ], function (Backbone, DocumentRevision) { 6 | 'use strict'; 7 | var TagDocumentList = Backbone.Collection.extend({ 8 | 9 | model: DocumentRevision, 10 | 11 | className: 'TagDocumentList', 12 | 13 | url: function () { 14 | return App.config.apiEndPoint + '/workspaces/' + App.config.workspaceId + '/tags/' + encodeURIComponent(this.parent.get('label')) + '/documents'; 15 | }, 16 | 17 | comparator: function (documentRevision) { 18 | return documentRevision.get('id'); 19 | } 20 | 21 | }); 22 | 23 | return TagDocumentList; 24 | }); 25 | -------------------------------------------------------------------------------- /app/document-management/js/collections/template.js: -------------------------------------------------------------------------------- 1 | /*global define,App*/ 2 | define([ 3 | 'backbone', 4 | 'models/template', 5 | 'common-objects/common/singleton_decorator' 6 | ], function (Backbone, Template, singletonDecorator) { 7 | 'use strict'; 8 | var TemplateList = Backbone.Collection.extend({ 9 | url: function () { 10 | return App.config.apiEndPoint + '/workspaces/' + App.config.workspaceId + '/document-templates'; 11 | }, 12 | model: Template 13 | }); 14 | 15 | TemplateList = singletonDecorator(TemplateList); 16 | TemplateList.className = 'TemplateList'; 17 | 18 | return TemplateList; 19 | }); 20 | -------------------------------------------------------------------------------- /app/document-management/js/templates/baselines/baseline_content.html: -------------------------------------------------------------------------------- 1 |
2 | {{> snapButton}} 3 | {{> deleteButton}} 4 | {{> snapInProgressButton}} 5 |
6 | 7 |
8 | -------------------------------------------------------------------------------- /app/document-management/js/templates/baselines/baseline_list.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
{{i18n.NAME}}{{i18n.DESCRIPTION}}{{i18n.TYPE}}{{i18n.CREATION_DATE}}{{i18n.AUTHOR}}
15 | -------------------------------------------------------------------------------- /app/document-management/js/templates/baselines/baseline_list_item.html: -------------------------------------------------------------------------------- 1 | 2 | {{model.getName}} 3 | {{model.getDescription}} 4 | 5 | {{#model.isReleased}} 6 | {{i18n.HEAD_RELEASED}} 7 | {{/model.isReleased}} 8 | {{^model.isReleased}} 9 | {{i18n.HEAD_CHECKIN}} 10 | {{/model.isReleased}} 11 | 12 | {{model.getFormattedCreationDate}} 13 | {{model.getAuthor}} 14 | 15 | 16 | -------------------------------------------------------------------------------- /app/document-management/js/templates/baselines/baseline_nav.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | {{i18n.DOCUMENT_COLLECTIONS}} 5 | 6 |
7 | 8 | -------------------------------------------------------------------------------- /app/document-management/js/templates/baselines/document_revision_list.html: -------------------------------------------------------------------------------- 1 |
2 | -------------------------------------------------------------------------------- /app/document-management/js/templates/baselines/document_revision_list_item.html: -------------------------------------------------------------------------------- 1 |
2 | {{#editMode}} 3 | 4 | {{model.getDisplayKey}} 5 | {{/editMode}} 6 | {{^editMode}} 7 | {{model.title}} < {{model.documentMasterId}}-{{model.version}}-{{model.iteration}} > 8 | {{/editMode}} 9 | {{#model.isObsolete}}{{/model.isObsolete}} 10 | {{#model.isReleased}}{{/model.isReleased}} 11 |
12 | 13 | {{#editMode}} 14 | {{#multiple}} 15 |
{{i18n.MULTIPLE_VERSIONS_FOR_DOCUMENT}}
16 | {{/multiple}} 17 | {{/editMode}} 18 | -------------------------------------------------------------------------------- /app/document-management/js/templates/checked_out_document_list.html: -------------------------------------------------------------------------------- 1 |
2 | {{> searchForm}} 3 | {{> deleteButton}} 4 | {{> checkoutButtonGroup}} 5 | {{> tagsButton}} 6 | {{> aclButton}} 7 | {{> snapInProgressButton}} 8 |
9 |
10 |
11 | -------------------------------------------------------------------------------- /app/document-management/js/templates/checkedout_nav.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | 5 | {{i18n.CHECKOUTS}} 6 | 7 | 8 | 9 | 10 |
11 | -------------------------------------------------------------------------------- /app/document-management/js/templates/content.html: -------------------------------------------------------------------------------- 1 |
2 | 13 |
14 |
15 | -------------------------------------------------------------------------------- /app/document-management/js/templates/document/document_template_select.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 |
5 | 10 |
11 |
12 | -------------------------------------------------------------------------------- /app/document-management/js/templates/document_list.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {{i18n.REFERENCE}} 6 | {{i18n.VERSION}} 7 | {{i18n.ITERATION}} 8 | {{i18n.TYPE}} 9 | {{i18n.TITLE}} 10 | {{i18n.AUTHOR}} 11 | {{i18n.MODIFICATION_DATE}} 12 | {{i18n.LIFECYCLE_STATE}} 13 | {{i18n.CHECKOUT_BY}} 14 | {{i18n.ACL}} 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /app/document-management/js/templates/folder_document_list.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 6 | 7 | {{> searchForm}} 8 | 9 | {{> deleteButton}} 10 | {{> checkoutButtonGroup}} 11 | {{> tagsButton}} 12 | {{> aclButton}} 13 | {{> newVersionButton}} 14 | {{> releaseButton}} 15 | {{> obsoleteButton}} 16 | {{> snapInProgressButton}} 17 | 18 |
19 |
20 |
21 | -------------------------------------------------------------------------------- /app/document-management/js/templates/folder_edit.html: -------------------------------------------------------------------------------- 1 | 22 | -------------------------------------------------------------------------------- /app/document-management/js/templates/folder_nav.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | {{i18n.FOLDERS}} 5 | 6 | 7 |
8 | 9 | 10 | 11 | 16 |
17 | 18 |
19 | 20 | -------------------------------------------------------------------------------- /app/document-management/js/templates/folder_new.html: -------------------------------------------------------------------------------- 1 | 22 | -------------------------------------------------------------------------------- /app/document-management/js/templates/search_document_form.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | 5 |
-------------------------------------------------------------------------------- /app/document-management/js/templates/search_document_list.html: -------------------------------------------------------------------------------- 1 |
2 | {{> searchForm}} 3 | {{> deleteButton}} 4 | {{> checkoutButtonGroup}} 5 | {{> tagsButton}} 6 | {{> aclButton}} 7 | {{> newVersionButton}} 8 | {{> releaseButton}} 9 | {{> obsoleteButton}} 10 | {{> snapInProgressButton}} 11 |
12 |
13 |
14 | -------------------------------------------------------------------------------- /app/document-management/js/templates/search_nav.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | {{i18n.SEARCH}} 5 | 6 |
7 | -------------------------------------------------------------------------------- /app/document-management/js/templates/tag_document_list.html: -------------------------------------------------------------------------------- 1 |
2 | 5 | 6 | {{> searchForm}} 7 | 8 | {{> deleteButton}} 9 | {{> checkoutButtonGroup}} 10 | {{> tagsButton}} 11 | {{> aclButton}} 12 | {{> newVersionButton}} 13 | {{> releaseButton}} 14 | {{> obsoleteButton}} 15 | {{> snapInProgressButton}} 16 |
17 |
18 |
19 | -------------------------------------------------------------------------------- /app/document-management/js/templates/tag_list_item.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | {{model.label}} 5 | 6 | 7 |
8 | 9 | 10 | 11 | 19 |
20 |
21 | -------------------------------------------------------------------------------- /app/document-management/js/templates/tag_nav.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | {{i18n.TAGS}} 5 | 6 |
7 | 8 | -------------------------------------------------------------------------------- /app/document-management/js/templates/task_document_list.html: -------------------------------------------------------------------------------- 1 |
2 | {{> searchForm}} 3 | {{> deleteButton}} 4 | {{> checkoutButtonGroup}} 5 | {{> tagsButton}} 6 | {{> aclButton}} 7 | {{> newVersionButton}} 8 | {{> releaseButton}} 9 | {{> obsoleteButton}} 10 | {{> snapInProgressButton}} 11 |
12 |
13 | {{> statusFilter}} 14 |
15 | -------------------------------------------------------------------------------- /app/document-management/js/templates/task_nav.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | {{i18n.TASKS}} 5 | 6 |
7 | -------------------------------------------------------------------------------- /app/document-management/js/templates/template_content_list.html: -------------------------------------------------------------------------------- 1 |
2 | 5 | 8 | {{> deleteButton}} 9 | {{> aclButton}} 10 |
11 |
12 | -------------------------------------------------------------------------------- /app/document-management/js/templates/template_list.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{i18n.REFERENCE}} 5 | {{i18n.TYPE}} 6 | {{i18n.MASK}} 7 | {{i18n.AUTHOR}} 8 | {{i18n.CREATION_DATE}} 9 | {{i18n.MODIFICATION_DATE}} 10 | {{i18n.ACL}} 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /app/document-management/js/templates/template_nav.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | {{i18n.TEMPLATES}} 5 | 6 |
7 | 8 | -------------------------------------------------------------------------------- /app/document-management/js/views/content.js: -------------------------------------------------------------------------------- 1 | /*global define*/ 2 | define([ 3 | 'common-objects/views/base' 4 | ], function (BaseView) { 5 | 'use strict'; 6 | var ContentView = BaseView.extend({ 7 | el: '#document-management-content', 8 | initialize: function () { 9 | BaseView.prototype.initialize.apply(this, arguments); 10 | // destroy previous content view if any 11 | if (ContentView._instance) { 12 | ContentView._instance.destroy(); 13 | } 14 | // keep track of the created content view 15 | ContentView._instance = this; 16 | }, 17 | destroyed: function () { 18 | this.$el.html(''); 19 | } 20 | }); 21 | return ContentView; 22 | }); 23 | -------------------------------------------------------------------------------- /app/document-management/js/views/folder_list.js: -------------------------------------------------------------------------------- 1 | /*global define*/ 2 | define([ 3 | 'require', 4 | 'common-objects/views/components/collapsible_list' 5 | ], function (require, CollapsibleListView) { 6 | 'use strict'; 7 | var FolderListView = CollapsibleListView.extend({ 8 | itemViewFactory: function (model) { 9 | var FolderListItemView = require('views/folder_list_item'); // Circular dependency 10 | return new FolderListItemView({ 11 | model: model 12 | }); 13 | } 14 | }); 15 | return FolderListView; 16 | }); 17 | -------------------------------------------------------------------------------- /app/document-management/js/views/folder_nav.js: -------------------------------------------------------------------------------- 1 | /*global define*/ 2 | define([ 3 | 'mustache', 4 | 'common-objects/common/singleton_decorator', 5 | 'views/folder_list_item', 6 | 'text!templates/folder_nav.html' 7 | ], function (Mustache, singletonDecorator, FolderListItemView, template) { 8 | 'use strict'; 9 | var FolderNavView = FolderListItemView.extend({ 10 | 11 | template: template, 12 | el: '#folder-nav', 13 | initialize: function () { 14 | FolderListItemView.prototype.initialize.apply(this, arguments); 15 | this.render(); 16 | }, 17 | refresh:function(){ 18 | this.render(); 19 | } 20 | }); 21 | FolderNavView = singletonDecorator(FolderNavView); 22 | return FolderNavView; 23 | }); 24 | -------------------------------------------------------------------------------- /app/documents/js/router.js: -------------------------------------------------------------------------------- 1 | /*global define,App*/ 2 | define([ 3 | 'backbone', 4 | 'common-objects/common/singleton_decorator' 5 | ], 6 | function (Backbone, singletonDecorator) { 7 | 'use strict'; 8 | var Router = Backbone.Router.extend({ 9 | routes: { 10 | ':workspaceId/:documentId/:documentVersion': 'showDocumentRevision', 11 | ':uuid': 'showSharedEntity' 12 | }, 13 | 14 | showDocumentRevision:function(workspace, documentId, documentVersion){ 15 | App.appView.showDocumentRevision(workspace, documentId, documentVersion); 16 | }, 17 | 18 | showSharedEntity:function(uuid){ 19 | App.appView.showSharedEntity(uuid); 20 | } 21 | }); 22 | 23 | return singletonDecorator(Router); 24 | }); 25 | -------------------------------------------------------------------------------- /app/documents/js/templates/document-permalink.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | -------------------------------------------------------------------------------- /app/download/dplm/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/docdoku/docdoku-plm-front/95bdbe3d45f2f271ea7c5c057e38229b42ec5c03/app/download/dplm/.gitkeep -------------------------------------------------------------------------------- /app/download/js/app.js: -------------------------------------------------------------------------------- 1 | /*global define,App*/ 2 | define([ 3 | 'backbone', 4 | 'mustache', 5 | 'text!templates/content.html' 6 | ], function (Backbone, Mustache, template) { 7 | 'use strict'; 8 | var AppView = Backbone.View.extend({ 9 | 10 | el: '#content', 11 | 12 | render: function () { 13 | this.$el.html(Mustache.render(template, { 14 | i18n: App.config.i18n, 15 | contextPath: App.config.contextPath 16 | })).show(); 17 | return this; 18 | } 19 | }); 20 | 21 | return AppView; 22 | }); 23 | -------------------------------------------------------------------------------- /app/images/apple.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/docdoku/docdoku-plm-front/95bdbe3d45f2f271ea7c5c057e38229b42ec5c03/app/images/apple.gif -------------------------------------------------------------------------------- /app/images/docdokuplm_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/docdoku/docdoku-plm-front/95bdbe3d45f2f271ea7c5c057e38229b42ec5c03/app/images/docdokuplm_logo.png -------------------------------------------------------------------------------- /app/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/docdoku/docdoku-plm-front/95bdbe3d45f2f271ea7c5c057e38229b42ec5c03/app/images/favicon.ico -------------------------------------------------------------------------------- /app/images/floor.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/docdoku/docdoku-plm-front/95bdbe3d45f2f271ea7c5c057e38229b42ec5c03/app/images/floor.jpg -------------------------------------------------------------------------------- /app/images/help_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/docdoku/docdoku-plm-front/95bdbe3d45f2f271ea7c5c057e38229b42ec5c03/app/images/help_image.png -------------------------------------------------------------------------------- /app/images/icon-nav-bullet-down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/docdoku/docdoku-plm-front/95bdbe3d45f2f271ea7c5c057e38229b42ec5c03/app/images/icon-nav-bullet-down.png -------------------------------------------------------------------------------- /app/images/icon-nav-bullet-right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/docdoku/docdoku-plm-front/95bdbe3d45f2f271ea7c5c057e38229b42ec5c03/app/images/icon-nav-bullet-right.png -------------------------------------------------------------------------------- /app/images/linux.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/docdoku/docdoku-plm-front/95bdbe3d45f2f271ea7c5c057e38229b42ec5c03/app/images/linux.gif -------------------------------------------------------------------------------- /app/images/loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/docdoku/docdoku-plm-front/95bdbe3d45f2f271ea7c5c057e38229b42ec5c03/app/images/loader.gif -------------------------------------------------------------------------------- /app/images/pba.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/docdoku/docdoku-plm-front/95bdbe3d45f2f271ea7c5c057e38229b42ec5c03/app/images/pba.bin -------------------------------------------------------------------------------- /app/images/pba.json: -------------------------------------------------------------------------------- 1 | { 2 | 3 | "metadata" : 4 | { 5 | "formatVersion" : 3.1, 6 | "sourceFile" : "pba.obj", 7 | "generatedBy" : "OBJConverter", 8 | "vertices" : 12886, 9 | "faces" : 25792, 10 | "normals" : 0, 11 | "uvs" : 0, 12 | "materials" : 0 13 | }, 14 | 15 | "materials": [ { 16 | "DbgColor" : 5994395, 17 | "DbgIndex" : 0, 18 | "DbgName" : "default", 19 | "vertexColors" : "face" 20 | }], 21 | 22 | "buffers": "pba.bin" 23 | 24 | } 25 | -------------------------------------------------------------------------------- /app/images/product-loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/docdoku/docdoku-plm-front/95bdbe3d45f2f271ea7c5c057e38229b42ec5c03/app/images/product-loader.gif -------------------------------------------------------------------------------- /app/images/sidebar_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/docdoku/docdoku-plm-front/95bdbe3d45f2f271ea7c5c057e38229b42ec5c03/app/images/sidebar_bg.png -------------------------------------------------------------------------------- /app/images/sort_asc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/docdoku/docdoku-plm-front/95bdbe3d45f2f271ea7c5c057e38229b42ec5c03/app/images/sort_asc.png -------------------------------------------------------------------------------- /app/images/sort_both.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/docdoku/docdoku-plm-front/95bdbe3d45f2f271ea7c5c057e38229b42ec5c03/app/images/sort_both.png -------------------------------------------------------------------------------- /app/images/sort_desc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/docdoku/docdoku-plm-front/95bdbe3d45f2f271ea7c5c057e38229b42ec5c03/app/images/sort_desc.png -------------------------------------------------------------------------------- /app/images/treeview-default-line.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/docdoku/docdoku-plm-front/95bdbe3d45f2f271ea7c5c057e38229b42ec5c03/app/images/treeview-default-line.gif -------------------------------------------------------------------------------- /app/images/treeview-default.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/docdoku/docdoku-plm-front/95bdbe3d45f2f271ea7c5c057e38229b42ec5c03/app/images/treeview-default.gif -------------------------------------------------------------------------------- /app/images/user_avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/docdoku/docdoku-plm-front/95bdbe3d45f2f271ea7c5c057e38229b42ec5c03/app/images/user_avatar.png -------------------------------------------------------------------------------- /app/images/view.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/docdoku/docdoku-plm-front/95bdbe3d45f2f271ea7c5c057e38229b42ec5c03/app/images/view.png -------------------------------------------------------------------------------- /app/images/windows.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/docdoku/docdoku-plm-front/95bdbe3d45f2f271ea7c5c057e38229b42ec5c03/app/images/windows.gif -------------------------------------------------------------------------------- /app/images/workflow/parallel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/docdoku/docdoku-plm-front/95bdbe3d45f2f271ea7c5c057e38229b42ec5c03/app/images/workflow/parallel.png -------------------------------------------------------------------------------- /app/images/workflow/sequential.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/docdoku/docdoku-plm-front/95bdbe3d45f2f271ea7c5c057e38229b42ec5c03/app/images/workflow/sequential.png -------------------------------------------------------------------------------- /app/img/glyphicons-halflings-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/docdoku/docdoku-plm-front/95bdbe3d45f2f271ea7c5c057e38229b42ec5c03/app/img/glyphicons-halflings-white.png -------------------------------------------------------------------------------- /app/img/glyphicons-halflings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/docdoku/docdoku-plm-front/95bdbe3d45f2f271ea7c5c057e38229b42ec5c03/app/img/glyphicons-halflings.png -------------------------------------------------------------------------------- /app/js/common-objects/collections/activity_models.js: -------------------------------------------------------------------------------- 1 | /*global define*/ 2 | define([ 3 | 'backbone', 4 | 'common-objects/models/workflow/activity_model' 5 | ], function (Backbone, ActivityModel) { 6 | 'use strict'; 7 | var ActivityModels = Backbone.Collection.extend({ 8 | model: ActivityModel 9 | }); 10 | 11 | return ActivityModels; 12 | }); 13 | -------------------------------------------------------------------------------- /app/js/common-objects/collections/attribute_collection.js: -------------------------------------------------------------------------------- 1 | /*global define*/ 2 | define([ 3 | 'backbone', 4 | 'common-objects/models/attribute' 5 | ], function (Backbone, AttributeModel) { 6 | 'use strict'; 7 | var AttributeCollection = Backbone.Collection.extend({ 8 | model: AttributeModel, 9 | className: 'AttributeCollection' 10 | }); 11 | 12 | return AttributeCollection; 13 | }); 14 | -------------------------------------------------------------------------------- /app/js/common-objects/collections/document_baselines.js: -------------------------------------------------------------------------------- 1 | /*global define,App*/ 2 | define(['backbone', 'common-objects/models/document_baseline'], 3 | function (Backbone, DocumentBaseline) { 4 | 'use strict'; 5 | var Baselines = Backbone.Collection.extend({ 6 | 7 | model: DocumentBaseline, 8 | 9 | url: function () { 10 | return App.config.apiEndPoint + '/workspaces/' + App.config.workspaceId + '/document-baselines/'; 11 | } 12 | 13 | }); 14 | 15 | return Baselines; 16 | }); 17 | -------------------------------------------------------------------------------- /app/js/common-objects/collections/file/attached_file_collection.js: -------------------------------------------------------------------------------- 1 | /*global define*/ 2 | define([ 3 | 'backbone', 4 | 'common-objects/models/file/attached_file' 5 | ], function (Backbone, AttachedFileModel) { 6 | 'use strict'; 7 | var AttachedFileCollection = Backbone.Collection.extend({ 8 | model: AttachedFileModel, 9 | className: 'AttachedFileCollection' 10 | }); 11 | 12 | return AttachedFileCollection; 13 | }); 14 | -------------------------------------------------------------------------------- /app/js/common-objects/collections/linked/linked_change_item_collection.js: -------------------------------------------------------------------------------- 1 | /*global define*/ 2 | define([ 3 | 'backbone', 4 | 'common-objects/models/linked/linked_change_item' 5 | ], function (Backbone, LinkedChangeItem) { 6 | 'use strict'; 7 | var LinkedChangeItemCollection = Backbone.Collection.extend({ 8 | 9 | model: LinkedChangeItem, 10 | 11 | comparator: function (linkedChangeItem) { 12 | return linkedChangeItem.getName(); 13 | } 14 | 15 | }); 16 | 17 | return LinkedChangeItemCollection; 18 | }); 19 | -------------------------------------------------------------------------------- /app/js/common-objects/collections/linked/linked_document_collection.js: -------------------------------------------------------------------------------- 1 | /*global define*/ 2 | define([ 3 | 'backbone', 4 | 'common-objects/models/linked/linked_document' 5 | ], function (Backbone, LinkedDocument) { 6 | 'use strict'; 7 | var LinkedDocumentCollection = Backbone.Collection.extend({ 8 | 9 | model: LinkedDocument, 10 | 11 | comparator: function (linkedDocument) { 12 | return linkedDocument.getDocKey(); 13 | } 14 | 15 | }); 16 | 17 | return LinkedDocumentCollection; 18 | }); 19 | -------------------------------------------------------------------------------- /app/js/common-objects/collections/linked/linked_document_iteration_collection.js: -------------------------------------------------------------------------------- 1 | /*global define*/ 2 | define([ 3 | 'backbone', 4 | 'common-objects/models/linked/linked_document_iteration' 5 | ], function (Backbone, LinkedDocumentIteration) { 6 | 'use strict'; 7 | var LinkedDocumentIterationCollection = Backbone.Collection.extend({ 8 | 9 | model: LinkedDocumentIteration, 10 | 11 | comparator: function (linkedDocumentIteration) { 12 | return linkedDocumentIteration.getDocKey(); 13 | } 14 | 15 | }); 16 | 17 | return LinkedDocumentIterationCollection; 18 | }); 19 | -------------------------------------------------------------------------------- /app/js/common-objects/collections/linked/linked_part_collection.js: -------------------------------------------------------------------------------- 1 | /*global define*/ 2 | define([ 3 | 'backbone', 4 | 'common-objects/models/linked/linked_part' 5 | ], function (Backbone, LinkedPart) { 6 | 'use strict'; 7 | var LinkedPartCollection = Backbone.Collection.extend({ 8 | 9 | model: LinkedPart, 10 | 11 | comparator: function (linkedPart) { 12 | return linkedPart.getPartKey(); 13 | } 14 | 15 | }); 16 | 17 | return LinkedPartCollection; 18 | }); 19 | -------------------------------------------------------------------------------- /app/js/common-objects/collections/lovs.js: -------------------------------------------------------------------------------- 1 | /*global define,App*/ 2 | define([ 3 | 'backbone', 4 | 'common-objects/models/lov/lov' 5 | ], function (Backbone, lov) { 6 | 'use strict'; 7 | var LOVCollection = Backbone.Collection.extend({ 8 | 9 | model: lov, 10 | 11 | url: App.config.apiEndPoint + '/workspaces/' + App.config.workspaceId + '/lov' 12 | 13 | }); 14 | 15 | return LOVCollection; 16 | }); 17 | -------------------------------------------------------------------------------- /app/js/common-objects/collections/modification_notification_collection.js: -------------------------------------------------------------------------------- 1 | /*global _,define,App*/ 2 | define([ 3 | 'backbone', 4 | 'common-objects/models/modification_notification' 5 | ], function (Backbone, ModificationNotification) { 6 | 'use strict'; 7 | var ModificationNotificationCollection = Backbone.Collection.extend({ 8 | 9 | model: ModificationNotification, 10 | className: 'ModificationNotificationCollection', 11 | 12 | url: function () { 13 | return App.config.apiEndPoint + '/workspaces/' + App.config.workspaceId + '/notifications/'; 14 | }, 15 | 16 | hasUnreadModificationNotifications: function () { 17 | return _.select(this.models || [], function(notif) { 18 | return !notif.isAcknowledged(); 19 | }).length; 20 | } 21 | 22 | }); 23 | 24 | return ModificationNotificationCollection; 25 | }); 26 | -------------------------------------------------------------------------------- /app/js/common-objects/collections/reachable_users.js: -------------------------------------------------------------------------------- 1 | /*global define,App*/ 2 | define([ 3 | 'backbone', 4 | 'common-objects/models/user' 5 | ], function (Backbone, User) { 6 | 'use strict'; 7 | var Users = Backbone.Collection.extend({ 8 | model: User, 9 | url: function () { 10 | return App.config.apiEndPoint + '/workspaces/reachable-users'; 11 | } 12 | }); 13 | 14 | return Users; 15 | }); 16 | -------------------------------------------------------------------------------- /app/js/common-objects/collections/security/workspace_user_group_memberships.js: -------------------------------------------------------------------------------- 1 | /*global define,App*/ 2 | define([ 3 | 'backbone', 4 | 'common-objects/models/security/workspace_user_group_membership' 5 | ], function (Backbone, WorkspaceUserGroupMembership) { 6 | 'use strict'; 7 | var WorkspaceUserGroupMemberships = Backbone.Collection.extend({ 8 | 9 | model: WorkspaceUserGroupMembership, 10 | 11 | url: function () { 12 | return App.config.apiEndPoint + '/workspaces/' + App.config.workspaceId + '/memberships/usergroups'; 13 | } 14 | 15 | }); 16 | 17 | return WorkspaceUserGroupMemberships; 18 | }); 19 | -------------------------------------------------------------------------------- /app/js/common-objects/collections/security/workspace_user_memberships.js: -------------------------------------------------------------------------------- 1 | /*global define,App*/ 2 | define([ 3 | 'backbone', 4 | 'common-objects/models/security/workspace_user_membership' 5 | ], function (Backbone, WorkspaceUserMembership) { 6 | 'use strict'; 7 | var WorkspaceUserMemberships = Backbone.Collection.extend({ 8 | 9 | model: WorkspaceUserMembership, 10 | 11 | url: function () { 12 | return App.config.apiEndPoint + '/workspaces/' + App.config.workspaceId + '/memberships/users'; 13 | } 14 | 15 | }); 16 | 17 | return WorkspaceUserMemberships; 18 | }); 19 | -------------------------------------------------------------------------------- /app/js/common-objects/collections/substitute_part_collection.js: -------------------------------------------------------------------------------- 1 | /*global define*/ 2 | define([ 3 | 'backbone', 4 | 'common-objects/models/part' 5 | ], function (Backbone, Part) { 6 | 'use strict'; 7 | var SubstitutePartList = Backbone.Collection.extend({ 8 | model: Part, 9 | 10 | className: 'SubstitutePartList', 11 | 12 | setMainPart: function (part) { 13 | this.part = part; 14 | }, 15 | initialize: function () { 16 | 17 | } 18 | }); 19 | 20 | return SubstitutePartList; 21 | }); 22 | -------------------------------------------------------------------------------- /app/js/common-objects/collections/task_models.js: -------------------------------------------------------------------------------- 1 | /*global define*/ 2 | define([ 3 | 'backbone', 4 | 'common-objects/models/task_model' 5 | ], function (Backbone, TaskModel) { 6 | 'use strict'; 7 | var TaskModels = Backbone.Collection.extend({ 8 | model: TaskModel 9 | }); 10 | 11 | return TaskModels; 12 | }); -------------------------------------------------------------------------------- /app/js/common-objects/collections/user_groups.js: -------------------------------------------------------------------------------- 1 | /*global define,App*/ 2 | define([ 3 | 'backbone', 4 | 'common-objects/models/user_group' 5 | ], function (Backbone, UserGroup) { 6 | 'use strict'; 7 | var UserGroups = Backbone.Collection.extend({ 8 | model: UserGroup, 9 | url: function () { 10 | return App.config.apiEndPoint + '/workspaces/' + App.config.workspaceId + '/user-group'; 11 | } 12 | }); 13 | 14 | return UserGroups; 15 | }); 16 | -------------------------------------------------------------------------------- /app/js/common-objects/collections/users.js: -------------------------------------------------------------------------------- 1 | /*global define,App*/ 2 | define([ 3 | 'backbone', 4 | 'common-objects/models/user' 5 | ], function (Backbone, User) { 6 | 'use strict'; 7 | var Users = Backbone.Collection.extend({ 8 | model: User, 9 | url: function () { 10 | return App.config.apiEndPoint + '/workspaces/' + App.config.workspaceId + '/users'; 11 | } 12 | }); 13 | 14 | return Users; 15 | }); 16 | -------------------------------------------------------------------------------- /app/js/common-objects/collections/workflow_models.js: -------------------------------------------------------------------------------- 1 | /*global define,App*/ 2 | define([ 3 | 'backbone', 4 | 'common-objects/models/workflow/workflow_model' 5 | ], function (Backbone, WorkflowModel) { 6 | 'use strict'; 7 | var WorkflowModels = Backbone.Collection.extend({ 8 | model: WorkflowModel, 9 | url: function () { 10 | return App.config.apiEndPoint + '/workspaces/' + App.config.workspaceId + '/workflow-models'; 11 | } 12 | }); 13 | 14 | return WorkflowModels; 15 | }); 16 | -------------------------------------------------------------------------------- /app/js/common-objects/common/singleton_decorator.js: -------------------------------------------------------------------------------- 1 | /*global _,define*/ 2 | define(function () { 3 | // A Singleton decorator. 4 | // requires underscrore.js 5 | // var Foo = function () {}; 6 | // Foo = singletonDecorator(Foo); 7 | 'use strict'; 8 | var singletonDecorator = function (constructor) { 9 | constructor.getInstance = function () { 10 | if (!constructor._instance) { 11 | constructor._instance = _.extend(constructor.prototype, {}); 12 | constructor.apply(constructor._instance, arguments); 13 | } 14 | return constructor._instance; 15 | }; 16 | return constructor; 17 | }; 18 | return singletonDecorator; 19 | }); 20 | -------------------------------------------------------------------------------- /app/js/common-objects/models/language.js: -------------------------------------------------------------------------------- 1 | /*global $,define,App*/ 2 | define(['backbone'], function (Backbone) { 3 | 'use strict'; 4 | var Language = Backbone.Model.extend({ 5 | initialize: function () { 6 | this.className = 'Language'; 7 | } 8 | }); 9 | 10 | Language.getLanguages = function () { 11 | return $.getJSON(App.config.apiEndPoint + '/languages'); 12 | }; 13 | 14 | return Language; 15 | }); 16 | -------------------------------------------------------------------------------- /app/js/common-objects/models/security/admin.js: -------------------------------------------------------------------------------- 1 | /*global define,App*/ 2 | define(['backbone'], function (Backbone) { 3 | 'use strict'; 4 | var Admin = Backbone.Model.extend({ 5 | url: function () { 6 | return App.config.apiEndPoint + '/workspaces/' + App.config.workspaceId + '/users/admin'; 7 | }, 8 | 9 | getLogin: function () { 10 | return this.get('login'); 11 | } 12 | 13 | }); 14 | 15 | return Admin; 16 | 17 | }); 18 | -------------------------------------------------------------------------------- /app/js/common-objects/models/tag.js: -------------------------------------------------------------------------------- 1 | /*global define*/ 2 | define(['backbone'], function (Backbone) { 3 | 'use strict'; 4 | var Tag = Backbone.Model.extend({ 5 | initialize: function () { 6 | this.className = 'Tag'; 7 | } 8 | }); 9 | return Tag; 10 | }); 11 | -------------------------------------------------------------------------------- /app/js/common-objects/models/task_model.js: -------------------------------------------------------------------------------- 1 | /*global _,define*/ 2 | define([ 3 | 'backbone', 4 | 'common-objects/models/role' 5 | ], function (Backbone, Role) { 6 | 'use strict'; 7 | var TaskModel = Backbone.Model.extend({ 8 | 9 | defaults: { 10 | duration: 25 11 | }, 12 | 13 | initialize: function () { 14 | if (!_.isUndefined(this.attributes.role)) { 15 | this.attributes.role = new Role(this.attributes.role); 16 | } 17 | }, 18 | 19 | toJSON: function () { 20 | var index = this.collection.indexOf(this); 21 | var clonedAttributes = _.clone(this.attributes); 22 | clonedAttributes.role = clonedAttributes.role.toJSON(); 23 | _.extend(clonedAttributes, {num: index}); 24 | return clonedAttributes; 25 | } 26 | 27 | }); 28 | 29 | return TaskModel; 30 | }); 31 | -------------------------------------------------------------------------------- /app/js/common-objects/models/timezone.js: -------------------------------------------------------------------------------- 1 | /*global $,define,App*/ 2 | define(['backbone'], function (Backbone) { 3 | 'use strict'; 4 | var TimeZone = Backbone.Model.extend({ 5 | initialize: function () { 6 | this.className = 'TimeZone'; 7 | } 8 | }); 9 | 10 | TimeZone.getTimeZones = function () { 11 | return $.getJSON(App.config.apiEndPoint + '/timezones'); 12 | }; 13 | 14 | return TimeZone; 15 | }); 16 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/alert.html: -------------------------------------------------------------------------------- 1 |
2 | × 3 |

{{model.title}}

4 | 5 |

{{model.message}}

6 |
7 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/attributes/attribute_list_item_boolean.html: -------------------------------------------------------------------------------- 1 | {{> attributeListItem}} 2 |
3 | 9 |
10 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/attributes/attribute_list_item_date.html: -------------------------------------------------------------------------------- 1 | {{> attributeListItem}} 2 |
3 | {{#availability.value}} 4 | 6 | {{#availability.displayRequired}} 7 | {{#model.mandatory}}*{{/model.mandatory}} 8 | {{/availability.displayRequired}} 9 | {{/availability.value}} 10 | {{^availability.value}} 11 | {{model.value}} 12 | {{/availability.value}} 13 | 14 |
15 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/attributes/attribute_list_item_long_text.html: -------------------------------------------------------------------------------- 1 | {{> attributeListItem}} 2 |
3 | {{#availability.value}} 4 | 6 | {{#availability.displayRequired}} 7 | {{#model.mandatory}}*{{/model.mandatory}} 8 | {{/availability.displayRequired}} 9 | {{/availability.value}} 10 | {{^availability.value}} 11 | {{/availability.value}} 12 |
13 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/attributes/attribute_list_item_lov.html: -------------------------------------------------------------------------------- 1 | {{> attributeListItem}} 2 |
3 | 5 |
6 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/attributes/attribute_list_item_number.html: -------------------------------------------------------------------------------- 1 | {{> attributeListItem}} 2 |
3 | {{#availability.value}} 4 | 7 | {{#availability.displayRequired}} 8 | {{#model.mandatory}}*{{/model.mandatory}} 9 | {{/availability.displayRequired}} 10 | {{/availability.value}} 11 | {{^availability.value}} 12 | {{model.value}} 13 | {{/availability.value}} 14 |
15 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/attributes/attribute_list_item_part_number.html: -------------------------------------------------------------------------------- 1 | {{> attributeListItem}} 2 |
3 | {{#availability.value}} 4 | 7 | {{#availability.displayRequired}} 8 | {{#model.mandatory}}*{{/model.mandatory}} 9 | {{/availability.displayRequired}} 10 | {{/availability.value}} 11 | {{^availability.value}} 12 | {{model.value}} 13 | {{/availability.value}} 14 |
15 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/attributes/attribute_list_item_text.html: -------------------------------------------------------------------------------- 1 | {{> attributeListItem}} 2 |
3 | {{#availability.value}} 4 | 6 | {{#availability.displayRequired}} 7 | {{#model.mandatory}}*{{/model.mandatory}} 8 | {{/availability.displayRequired}} 9 | {{/availability.value}} 10 | {{^availability.value}}{{model.value}}{{/availability.value}} 11 |
12 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/attributes/attribute_list_item_url.html: -------------------------------------------------------------------------------- 1 | {{> attributeListItem}} 2 |
3 | {{#availability.value}} 4 | 6 | {{#availability.displayRequired}} 7 | {{#model.mandatory}}*{{/model.mandatory}} 8 | {{/availability.displayRequired}} 9 | {{/availability.value}} 10 | {{^availability.value}} 11 | {{model.value}} 12 | {{/availability.value}} 13 |
14 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/attributes/attributes.html: -------------------------------------------------------------------------------- 1 |
2 | {{^frozenMode}} 3 | 4 | {{i18n.APPEND}} 5 | 6 | {{/frozenMode}} 7 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/attributes/template_new_attributes.html: -------------------------------------------------------------------------------- 1 | {{#editMode}} 2 | {{^unfreezable}} 3 | 6 | {{/unfreezable}} 7 | {{/editMode}} 8 | 9 |
10 | 11 | {{#editMode}} 12 | 13 | {{i18n.APPEND}} 14 | 15 | {{/editMode}} 16 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/buttons/ACL_button.html: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/buttons/checkout_button_group.html: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/buttons/delete_baseline_button.html: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/buttons/delete_button.html: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/buttons/duplicate_button.html: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/buttons/import_button.html: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/buttons/new_configuration_button.html: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/buttons/new_effectivity_button.html: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/buttons/new_product_button.html: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/buttons/new_product_instance_button.html: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/buttons/new_version_button.html: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/buttons/obsolete_button.html: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/buttons/release_button.html: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/buttons/snap_button.html: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/buttons/snap_in_progress_button.html: -------------------------------------------------------------------------------- 1 | 2 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/buttons/snap_latest_button.html: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/buttons/snap_released_button.html: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/buttons/tags_button.html: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/buttons/udf_button.html: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/document/used_by_list.html: -------------------------------------------------------------------------------- 1 | {{i18n.DOCUMENTS}} : 2 | 3 | {{i18n.PARTS}} : 4 | 5 | {{i18n.PRODUCT_INSTANCES}} : 6 | 7 | {{i18n.PRODUCT_INSTANCE_DATA}} : 8 | 9 |
10 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/document/used_by_list_item.html: -------------------------------------------------------------------------------- 1 | {{model.getDisplayKey}} 2 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/file/file.html: -------------------------------------------------------------------------------- 1 | {{#editMode}}{{/editMode}} 2 | {{shortName}} 3 | {{#editMode}} 4 | 5 |
6 | 7 | 8 | 9 |
10 | {{/editMode}} 11 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/forbidden.html: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/linked/linked_change_item.html: -------------------------------------------------------------------------------- 1 | {{#editMode}} 2 | 3 | {{/editMode}} 4 | {{linkedItem.getName}} 5 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/linked/linked_change_items.html: -------------------------------------------------------------------------------- 1 | {{#editMode}} 2 | 3 | 5 | {{/editMode}} 6 |
7 | Low 8 | Medium 9 | High 10 | Emergency 11 |
12 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/linked/linked_document.html: -------------------------------------------------------------------------------- 1 | {{#editMode}} 2 | 3 | {{/editMode}} 4 | {{linkedDocument.getDisplayDocKey}} 5 | {{#commentEditable}} 6 | {{#editMode}} 7 | 8 | 9 | {{linkedDocument.getDocumentLinkComment}} 10 |
11 | 12 | 13 | 14 |
15 | {{/editMode}} 16 | {{^editMode}} 17 | {{linkedDocument.getDocumentLinkComment}} 18 | {{/editMode}} 19 | {{/commentEditable}} 20 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/linked/linked_items.html: -------------------------------------------------------------------------------- 1 | {{#editMode}} 2 | 3 | 5 | {{/editMode}} 6 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/linked/linked_part.html: -------------------------------------------------------------------------------- 1 | {{#editMode}} 2 | 3 | {{/editMode}} 4 | {{linkedPart.getDisplayPartKey}} 5 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/lov/lov_item.html: -------------------------------------------------------------------------------- 1 | {{#model.isDeletable}} 2 |
3 | 4 |
5 | {{/model.isDeletable}} 6 | 7 | {{i18n.NAME}}: 8 | {{model.getLOVName}} 9 | {{^model.getLOVName}} 10 | 11 | {{/model.getLOVName}} 12 |
13 | {{model.getNumberOfValue}} {{i18n.POSSIBLE_VALUE}} 14 |
15 |
16 | 17 |
18 | 19 | 20 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/lov/lov_modal.html: -------------------------------------------------------------------------------- 1 | 25 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/lov/lov_possible_value.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 |
7 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/not-found.html: -------------------------------------------------------------------------------- 1 |
2 |

404

3 |

{{i18n.ERROR_404_SORRY}}

4 |

{{i18n.ERROR_404}}

5 |

{{reason}}

6 | {{i18n.HOME_PAGE}} 7 |
8 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/part/conversion_status.html: -------------------------------------------------------------------------------- 1 | {{#status}} 2 | {{#pending}} 3 | {{i18n.CONVERSION_PENDING}} ... 4 | {{/pending}} 5 | {{^pending}} 6 | {{#succeed}} 7 | {{i18n.CONVERSION_SUCCEEDED}} 8 | {{/succeed}} 9 | {{^succeed}} 10 | {{i18n.CONVERSION_FAILED}} 11 | 12 | {{i18n.RETRY}} 13 | 14 | {{/succeed}} 15 | {{/pending}} 16 | {{/status}} 17 | {{^status}} 18 | {{i18n.NO_CONVERSION}} 19 | {{/status}} 20 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/part/modification_notification_group_list.html: -------------------------------------------------------------------------------- 1 | {{i18n.MODIFICATION_NOTIFICATION_LIST_DESCRIPTION}} 2 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/part/modification_notification_list.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | {{#modificationNotification.getModifiedPartName}}{{modificationNotification.getModifiedPartName}}{{/modificationNotification.getModifiedPartName}} 5 | < {{modificationNotification.getModifiedPartNumber}} > 6 |
7 | 8 | {{#hasUnreadModificationNotifications}} 9 |
10 | 11 | {{i18n.MARK_ALL_AS_VERIFIED}} 12 |
13 | {{/hasUnreadModificationNotifications}} 14 | 15 |
16 | 17 |
18 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/part/part_assembly.html: -------------------------------------------------------------------------------- 1 | {{#editMode}} 2 | 7 | 12 | {{/editMode}} 13 |
14 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/part/part_effectivities.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
{{i18n.EFFECTIVITY}}{{i18n.PRODUCT}}{{i18n.START}}{{i18n.END}}
14 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/part/part_effectivity.html: -------------------------------------------------------------------------------- 1 | 2 | {{name}}
{{type}} 3 | {{product}} 4 | {{start}} 5 | {{end}} 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/part/part_effectivity_date.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 |
5 | 6 |
7 |
8 | 9 |
10 | 11 | 12 |
13 | 14 |
15 |
16 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/part/part_effectivity_lot.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 |
5 | 6 |
7 |
8 | 9 |
10 | 11 | 12 |
13 | 14 |
15 |
16 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/part/part_effectivity_serial_number.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 |
5 | 6 |
7 |
8 | 9 |
10 | 11 | 12 |
13 | 14 |
15 |
16 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/part/used_by_list.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | {{i18n.PRODUCT}} < {{configurationItemId}} > 4 |
5 | 6 | {{i18n.PRODUCT_INSTANCES}} : 7 | 8 |
9 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/part/used_by_list_item.html: -------------------------------------------------------------------------------- 1 |
{{model.getSerialNumber}}
2 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/part/used_by_list_item_part.html: -------------------------------------------------------------------------------- 1 | {{model.getName}} < {{model.getNumber}}-{{model.getVersion}} > 2 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/part/used_by_path_data_item.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/part/used_by_pd_instance_list.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | {{i18n.PRODUCT_INSTANCE}} < {{serialNumber}} > 4 |
5 | 6 | 7 | 8 |
9 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/part/used_by_view.html: -------------------------------------------------------------------------------- 1 | {{i18n.IS_COMPONENT_OF}} 2 | 3 | 4 | {{i18n.IS_SUBSTITUTE_IN}} 5 | 6 | 7 |
8 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/path/path.html: -------------------------------------------------------------------------------- 1 |
2 | {{#editMode}} 3 | 4 | {{/editMode}} 5 | {{#partLinks}} 6 | {{name}} < {{number}} > {{#referenceDescription}}({{.}}){{/referenceDescription}} 7 | {{/partLinks}} 8 |
9 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/prompt.html: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/security/acl_entries.html: -------------------------------------------------------------------------------- 1 |
2 |

{{i18n.USE_ACL}}

3 | 4 |
5 | 6 |
7 |
8 | 9 |
10 |

{{i18n.USERS}}

11 | 12 |
13 |
14 |

{{i18n.GROUPS}}

15 | 16 |
17 |
-------------------------------------------------------------------------------- /app/js/common-objects/templates/share/shared_entity.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 |
5 | {{generatedUrl}} 6 |
7 |
8 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/tags/tag.html: -------------------------------------------------------------------------------- 1 | {{#isRemovable}}{{/isRemovable}}{{tag.id}} -------------------------------------------------------------------------------- /app/js/common-objects/templates/task/status_filter.html: -------------------------------------------------------------------------------- 1 |
2 | 5 | 8 |
​ -------------------------------------------------------------------------------- /app/js/common-objects/templates/time_zone.html: -------------------------------------------------------------------------------- 1 | 13 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/udf/calculation.html: -------------------------------------------------------------------------------- 1 | 5 | 10 | 11 |
12 |
13 | {{i18n.RESULT}} : 14 | 15 |
16 |
17 | {{i18n.NODE_ASSEMBLIES_VISITED}} : 18 | 19 |
20 |
21 | {{i18n.NODE_INSTANCES_VISITED}} : 22 | 23 |
24 |
25 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/viewers/default.html: -------------------------------------------------------------------------------- 1 | {{fileName}} 2 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/viewers/image.html: -------------------------------------------------------------------------------- 1 | {{ fileName }} 2 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/viewers/office.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/viewers/video.html: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/viewers/wrapper.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | {{ #downloadAsPDF }}{{ /downloadAsPDF }} 5 | {{ fileName }} 6 |
7 |
8 |
9 |
10 |
11 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/workflow/lifecycle_activity.html: -------------------------------------------------------------------------------- 1 |
{{activity.lifeCycleState}} ({{activityType}})
2 | {{#activity.relaunchActivityState}}

{{.}}

{{/activity.relaunchActivityState}} 3 |
4 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/workflow/lifecycle_task_signing.html: -------------------------------------------------------------------------------- 1 | 7 | 10 | 13 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/workflow/role_item.html: -------------------------------------------------------------------------------- 1 |

{{model.getName}}

2 | {{^required}}

{{i18n.ASSIGNED_ROLE_PRE_FILL}}

{{/required}} 3 | 4 | 5 | {{#required}}

{{i18n.ASSIGNED_ROLE_REQUIRED}}

{{/required}} 6 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/workflow/workflow_mapping.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/js/common-objects/templates/workflow/workflow_select.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 |
5 | 10 |
11 |
12 | -------------------------------------------------------------------------------- /app/js/common-objects/views/alert.js: -------------------------------------------------------------------------------- 1 | /*global define*/ 2 | define([ 3 | 'backbone', 4 | 'mustache', 5 | 'text!common-objects/templates/alert.html' 6 | ], function (Backbone, Mustache, template) { 7 | 'use strict'; 8 | var AlertView = Backbone.View.extend({ 9 | event:{ 10 | 'click .close': 'onClose' 11 | }, 12 | 13 | render: function(){ 14 | this.$el.html(Mustache.render(template,{ 15 | model : { 16 | type : this.options.type, 17 | title : this.options.title, 18 | message: this.options.message 19 | } 20 | })); 21 | return this; 22 | }, 23 | 24 | onClose : function(){ 25 | this.remove(); 26 | } 27 | 28 | }); 29 | return AlertView; 30 | }); 31 | -------------------------------------------------------------------------------- /app/js/common-objects/views/attributes/attribute_list_item_number.js: -------------------------------------------------------------------------------- 1 | /*global define*/ 2 | define([ 3 | 'common-objects/views/attributes/attribute_list_item', 4 | 'text!common-objects/templates/attributes/attribute_list_item.html', 5 | 'text!common-objects/templates/attributes/attribute_list_item_number.html' 6 | ], function (AttributeListItemView, attributeListItem, template) { 7 | 'use strict'; 8 | var AttributeListItemNumberView = AttributeListItemView.extend({ 9 | 10 | template: template, 11 | 12 | partials: { 13 | attributeListItem: attributeListItem 14 | }, 15 | initialize: function () { 16 | AttributeListItemView.prototype.initialize.apply(this, arguments); 17 | } 18 | }); 19 | return AttributeListItemNumberView; 20 | }); 21 | -------------------------------------------------------------------------------- /app/js/common-objects/views/attributes/attribute_list_item_text.js: -------------------------------------------------------------------------------- 1 | /*global define*/ 2 | define([ 3 | 'common-objects/views/attributes/attribute_list_item', 4 | 'text!common-objects/templates/attributes/attribute_list_item.html', 5 | 'text!common-objects/templates/attributes/attribute_list_item_text.html' 6 | ], function (AttributeListItemView, attributeListItem, template) { 7 | 'use strict'; 8 | var AttributeListItemTextView = AttributeListItemView.extend({ 9 | 10 | template: template, 11 | partials: { 12 | attributeListItem: attributeListItem 13 | }, 14 | initialize: function () { 15 | AttributeListItemView.prototype.initialize.apply(this, arguments); 16 | } 17 | }); 18 | return AttributeListItemTextView; 19 | }); 20 | -------------------------------------------------------------------------------- /app/js/common-objects/views/attributes/attribute_list_item_url.js: -------------------------------------------------------------------------------- 1 | /*global define*/ 2 | define([ 3 | 'common-objects/views/attributes/attribute_list_item', 4 | 'text!common-objects/templates/attributes/attribute_list_item.html', 5 | 'text!common-objects/templates/attributes/attribute_list_item_url.html' 6 | ], function (AttributeListItemView, attributeListItem, template) { 7 | 'use strict'; 8 | var AttributeListItemUrlView = AttributeListItemView.extend({ 9 | 10 | template: template, 11 | partials: { 12 | attributeListItem: attributeListItem 13 | }, 14 | initialize: function () { 15 | AttributeListItemView.prototype.initialize.apply(this, arguments); 16 | } 17 | }); 18 | return AttributeListItemUrlView; 19 | }); 20 | -------------------------------------------------------------------------------- /app/js/common-objects/views/components/collapsible_list.js: -------------------------------------------------------------------------------- 1 | /*global _,define*/ 2 | define([ 3 | 'common-objects/views/components/list' 4 | ], function (ListView) { 5 | 'use strict'; 6 | var CollapsibleListView = ListView.extend({ 7 | show: function () { 8 | this.$el.show(); 9 | this.$el.addClass('in'); 10 | var that = this; 11 | this.collection.fetch({ 12 | reset: true, 13 | success: function () { 14 | if (_.isFunction(that.shown)) { 15 | that.shown(); 16 | } 17 | } 18 | }); 19 | }, 20 | hide: function () { 21 | this.$el.hide(); 22 | this.$el.removeClass('in'); 23 | this.clear(); 24 | } 25 | }); 26 | return CollapsibleListView; 27 | }); 28 | -------------------------------------------------------------------------------- /app/js/common-objects/views/components/list.js: -------------------------------------------------------------------------------- 1 | /*global define*/ 2 | define([ 3 | 'common-objects/views/base' 4 | ], function (BaseView) { 5 | 'use strict'; 6 | var ListView = BaseView.extend({ 7 | collectionReset: function () { 8 | this.clear(); 9 | this.render(); 10 | this.collection.each(this.createItemView); 11 | this.trigger('_ready'); 12 | }, 13 | collectionAdd: function () { 14 | this.collectionReset(); 15 | }, 16 | collectionRemove: function () { 17 | this.collectionReset(); 18 | }, 19 | createItemView: function (model) { 20 | var view = this.addSubView( 21 | this.itemViewFactory(model) 22 | ); 23 | this.$el.append(view.el); 24 | view.render(); 25 | } 26 | }); 27 | return ListView; 28 | }); 29 | -------------------------------------------------------------------------------- /app/js/common-objects/views/components/list_item.js: -------------------------------------------------------------------------------- 1 | /*global define*/ 2 | define([ 3 | 'common-objects/views/base' 4 | ], function (BaseView) { 5 | 'use strict'; 6 | var ListItemView = BaseView.extend({ 7 | className: 'list-item', 8 | modelDestroy: function () { 9 | this.destroy(); 10 | }, 11 | modelChange: function () { 12 | this.render(); 13 | }, 14 | modelSync: function () { 15 | this.render(); 16 | } 17 | }); 18 | return ListItemView; 19 | }); 20 | -------------------------------------------------------------------------------- /app/js/common-objects/views/not-found.js: -------------------------------------------------------------------------------- 1 | /*global define,App*/ 2 | define([ 3 | 'backbone', 4 | 'mustache', 5 | 'text!common-objects/templates/not-found.html' 6 | ], function (Backbone, Mustache, template) { 7 | 'use strict'; 8 | var NotFoundView = Backbone.View.extend({ 9 | 10 | render: function (error, url) { 11 | 12 | var tmpContainer = document.createElement('div'); 13 | var text = document.createTextNode(error.responseText); 14 | tmpContainer.appendChild(text); 15 | text = tmpContainer.innerHTML; 16 | 17 | this.$el.html(Mustache.render(template, { 18 | contextPath:App.config.contextPath, 19 | i18n: App.config.i18n, 20 | url:url, 21 | reason:text 22 | })); 23 | 24 | return this; 25 | } 26 | }); 27 | 28 | return NotFoundView; 29 | }); 30 | -------------------------------------------------------------------------------- /app/js/common-objects/views/part/part_substitute_link_view.js: -------------------------------------------------------------------------------- 1 | /*global define*/ 2 | define([ 3 | 'backbone', 4 | 'common-objects/views/part/part_link_view' 5 | ], function (Backbone, PartLinkView) { 6 | 7 | 'use strict'; 8 | 9 | var PartSubstituteLinkView = PartLinkView.extend({ 10 | className:'component part-substitute-link', 11 | handleSubstitutes:false, 12 | getComponent:function(){ 13 | return this.model.get('substitute'); 14 | } 15 | }); 16 | 17 | return PartSubstituteLinkView; 18 | }); 19 | 20 | -------------------------------------------------------------------------------- /app/js/common-objects/views/part/used_by_list_item_view.js: -------------------------------------------------------------------------------- 1 | /*global _,define,App*/ 2 | define([ 3 | 'backbone', 4 | 'mustache', 5 | 'text!common-objects/templates/part/used_by_list_item.html' 6 | ], function (Backbone, Mustache, template) { 7 | 'use strict'; 8 | var UsedByListItemView = Backbone.View.extend({ 9 | 10 | tagName: 'li', 11 | className: 'used-by-item well', 12 | 13 | initialize: function () { 14 | _.bindAll(this); 15 | }, 16 | 17 | render: function () { 18 | var data = { 19 | i18n: App.config.i18n, 20 | model: this.model 21 | }; 22 | 23 | this.$el.html(Mustache.render(template, data)); 24 | return this; 25 | } 26 | 27 | }); 28 | 29 | return UsedByListItemView; 30 | }); 31 | 32 | -------------------------------------------------------------------------------- /app/js/common-objects/views/used_by/used_by_list_item_view.js: -------------------------------------------------------------------------------- 1 | /*global _,define,App*/ 2 | define([ 3 | 'backbone', 4 | 'mustache', 5 | 'text!common-objects/templates/document/used_by_list_item.html' 6 | ], function (Backbone, Mustache, template) { 7 | 'use strict'; 8 | var UsedByListItemView = Backbone.View.extend({ 9 | 10 | tagName: 'li', 11 | className: 'used-by-item well', 12 | 13 | initialize: function () { 14 | _.bindAll(this); 15 | }, 16 | 17 | render: function () { 18 | var data = { 19 | i18n: App.config.i18n, 20 | model: this.model 21 | }; 22 | 23 | this.$el.html(Mustache.render(template, data)); 24 | return this; 25 | } 26 | 27 | }); 28 | 29 | return UsedByListItemView; 30 | }); 31 | 32 | -------------------------------------------------------------------------------- /app/js/common-objects/websocket/callState.js: -------------------------------------------------------------------------------- 1 | /*global define*/ 2 | define(function () { 3 | 'use strict'; 4 | return { 5 | NO_CALL: 'NO_CALL', 6 | INCOMING: 'INCOMING', 7 | OUTGOING: 'OUTGOING', 8 | NEGOTIATING: 'NEGOTIATING', 9 | RUNNING: 'RUNNING', 10 | ENDED: 'ENDED' 11 | }; 12 | }); 13 | -------------------------------------------------------------------------------- /app/js/common-objects/websocket/channelListener.js: -------------------------------------------------------------------------------- 1 | /*global define*/ 2 | 'use strict'; 3 | define(function () { 4 | 5 | function ChannelListener(handlers) { 6 | this.handlers = handlers; 7 | this.isListening = true; 8 | } 9 | 10 | ChannelListener.prototype = { 11 | startListen: function () { 12 | this.isListening = true; 13 | }, 14 | 15 | stopListen: function () { 16 | this.isListening = false; 17 | } 18 | }; 19 | 20 | return ChannelListener; 21 | 22 | }); -------------------------------------------------------------------------------- /app/js/common-objects/websocket/channelStatus.js: -------------------------------------------------------------------------------- 1 | /*global define*/ 2 | define(function () { 3 | 'use strict'; 4 | return { 5 | OPENED: 'opened', 6 | CLOSED: 'closed' 7 | }; 8 | }); 9 | -------------------------------------------------------------------------------- /app/js/common-objects/websocket/rejectCallReason.js: -------------------------------------------------------------------------------- 1 | /*global define*/ 2 | define(function () { 3 | 'use strict'; 4 | return { 5 | REJECTED: 'REJECTED', 6 | BUSY: 'BUSY', 7 | TIMEOUT: 'TIMEOUT', 8 | OFFLINE: 'OFFLINE' 9 | }; 10 | }); 11 | -------------------------------------------------------------------------------- /app/js/lib/empty.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/docdoku/docdoku-plm-front/95bdbe3d45f2f271ea7c5c057e38229b42ec5c03/app/js/lib/empty.pdf -------------------------------------------------------------------------------- /app/js/localization/nls/account-management.js: -------------------------------------------------------------------------------- 1 | /*global define*/ 2 | define({ 3 | root: { 4 | AUTH_REQUIRED : 'Authentication required', 5 | AUTH_REQUIRED_PASSWORD_TEXT : 'Please confirm your current password', 6 | AUTH_REQUIRED_PROVIDER_TEXT : 'Please re-authenticate', 7 | ACCOUNT_NAME: 'First name, last name', 8 | ACCOUNT_EDITION: 'Edit your account', 9 | ACCOUNT_UPDATED: 'Account updated', 10 | CHANGE_PASSWORD: 'Change password', 11 | LANG: 'Language', 12 | TIMEZONE: 'Timezone', 13 | NEED_PAGE_RELOAD_CHANGED_LANG: 'The page needs to be refreshed for the language settings to apply' 14 | }, 15 | 'fr': true, 16 | 'es': true, 17 | 'ru': true 18 | }); 19 | -------------------------------------------------------------------------------- /app/js/localization/nls/document-management.js: -------------------------------------------------------------------------------- 1 | /*global define*/ 2 | define({ 3 | root: { 4 | CONFIRM_DELETE_DOCUMENT_COLLECTIONS:'Do you want to delete the selected document collections?', 5 | DOCUMENT_NOT_RELEASED:'This document is not released and cannot be added to the released collection', 6 | DOCUMENT_ALREADY_IN_LIST:'This document is already present in the collection', 7 | DOCUMENT_BASELINE_IS_EMPTY:'You cannot create an empty document collection' 8 | }, 9 | 'fr': true, 10 | 'es': true, 11 | 'ru': true 12 | }); 13 | -------------------------------------------------------------------------------- /app/js/localization/nls/download.js: -------------------------------------------------------------------------------- 1 | /*global define*/ 2 | define({ 3 | root: { 4 | DOWNLOAD:'Download', 5 | DPLM_CLIENT:'DPLM Client', 6 | DPLM_CLIENT_INSTALL_MESSAGE:'DPLM Client is a software that works under Windows, MacOS and Linux.', 7 | CHOOSE_PLATFORM:'Choose your platform', 8 | DPLM_CLIENT_ABOUT_QUESTION:'What is DPLM Client?', 9 | DPLM_CLIENT_ABOUT_TEXT:'DPLM Client is a multi-platform client application which allows to exchange efficiently (upload / download) files between your local workstation and the DocDokuPLM server. File format agnostic, it provides seamless integration with all the authoring tools on the market.' 10 | }, 11 | 'fr': true, 12 | 'es': true, 13 | 'ru': true 14 | }); 15 | -------------------------------------------------------------------------------- /app/js/localization/nls/es/common.js: -------------------------------------------------------------------------------- 1 | /*global define*/ 2 | define({ 3 | }); 4 | -------------------------------------------------------------------------------- /app/js/localization/nls/fr/account-management.js: -------------------------------------------------------------------------------- 1 | /*global define*/ 2 | define({ 3 | AUTH_REQUIRED : 'Authentification requise', 4 | AUTH_REQUIRED_PASSWORD_TEXT : 'Veuillez confirmer votre mot de passe actuel', 5 | AUTH_REQUIRED_PROVIDER_TEXT : 'Veuillez vous ré-authentifier', 6 | ACCOUNT_NAME : 'Prénom, nom', 7 | ACCOUNT_EDITION:'Editez votre compte', 8 | ACCOUNT_UPDATED:'Compte enregistré', 9 | CHANGE_PASSWORD:'Changer le mot de passe', 10 | LANG:'Langue', 11 | NEED_PAGE_RELOAD_CHANGED_LANG:'Un rechargement de la page est nécessaire pour prendre en compte le changement de langue', 12 | TIMEZONE:'Fuseau horaire' 13 | }); 14 | -------------------------------------------------------------------------------- /app/js/localization/nls/fr/document-management.js: -------------------------------------------------------------------------------- 1 | /*global define*/ 2 | define({ 3 | CONFIRM_DELETE_DOCUMENT_COLLECTIONS:'Voulez-vous supprimer les collections de documents sélectionnées ?', 4 | DOCUMENT_NOT_RELEASED:'Ce document n\'est pas finalisé et ne peut pas être ajouté à la collection finalisée', 5 | DOCUMENT_ALREADY_IN_LIST:'Ce document est déjà présent dans la collection', 6 | DOCUMENT_BASELINE_IS_EMPTY:'Vous ne pouvez pas créer de collection vide' 7 | }); 8 | -------------------------------------------------------------------------------- /app/js/localization/nls/fr/download.js: -------------------------------------------------------------------------------- 1 | /*global define*/ 2 | define({ 3 | DOWNLOAD:'Téléchargement', 4 | DPLM_CLIENT:'DPLM Client', 5 | DPLM_CLIENT_INSTALL_MESSAGE:'DPLM Client est un logiciel fonctionnant sous Windows, MacOS et Linux.', 6 | CHOOSE_PLATFORM:'Choisissez votre plateforme', 7 | DPLM_CLIENT_ABOUT_QUESTION:'Qu\'est ce que DPLM Client ?', 8 | DPLM_CLIENT_ABOUT_TEXT:'DPLM Client est une application multiplateforme permettant d\'échanger efficacement des fichiers (upload / download) entre votre poste de travail et le serveur DocDokuPLM. Agnostique aux formats de fichiers, il permet une intégration transparente avec tous les outils de création du marché.' 9 | }); 10 | -------------------------------------------------------------------------------- /app/js/localization/nls/fr/product-structure.js: -------------------------------------------------------------------------------- 1 | /*global define*/ 2 | define({ 3 | CASCADE: 'Cascade', 4 | CASCADE_RESULT: 'Résultat', 5 | DONE: 'effectué(s)', 6 | SELECTED: 'Sélection', 7 | PRODUCT_VIEW: 'Vue produit', 8 | STRUCTURE: 'Structure produit' 9 | }); 10 | -------------------------------------------------------------------------------- /app/js/localization/nls/product-structure.js: -------------------------------------------------------------------------------- 1 | /*global define*/ 2 | define({ 3 | root: { 4 | CASCADE: 'Cascade', 5 | CASCADE_RESULT: 'Result', 6 | DONE: 'Done', 7 | SELECTED: 'Selected', 8 | PRODUCT_VIEW: 'Product view', 9 | STRUCTURE: 'Product structure' 10 | }, 11 | fr: true, 12 | es: true, 13 | ru: true 14 | }); 15 | -------------------------------------------------------------------------------- /app/js/localization/nls/ru/account-management.js: -------------------------------------------------------------------------------- 1 | /*global define*/ 2 | define({ 3 | ACCOUNT_NAME: 'Фамилия, имя', 4 | ACCOUNT_EDITION: 'Редактировать аккаунт', 5 | ACCOUNT_UPDATED: 'Обновить аккаунт', 6 | CHANGE_PASSWORD: 'Изменить пароль', 7 | LANG: 'Язык', 8 | TIMEZONE: 'Часовой пояс', 9 | NEED_PAGE_RELOAD_CHANGED_LANG: 'Эту страницу нужно перезагрузить чтобы применить настройки языка' 10 | }); 11 | -------------------------------------------------------------------------------- /app/js/localization/nls/ru/change-management.js: -------------------------------------------------------------------------------- 1 | /*global define*/ 2 | define({ 3 | ADVICE_CREATE_WORKFLOW: 'Здесь вы можете создавать потоки работ, которые определяют жизненный цикл ' + 4 | 'ваших документов и ваших изелий', 5 | CONFIRM_DELETE_ISSUE: 'Удалить выбранные ошибки?', 6 | CONFIRM_DELETE_ORDER: 'Удалить выбранные заказы?', 7 | CONFIRM_DELETE_REQUEST: 'Удалить выбранные запросы?', 8 | CONFIRM_DELETE_WORKFLOW: 'Удалить выбранные потоки работ?', 9 | ERROR_WORKFLOW_REFERENCE_MISSING: 'Вы пытаетесь создать поток работ без ссылки', 10 | NEW_ROLES_NAME: 'Введите имя для новой роли', 11 | WARNING_ANY_ROLE: 'Нехобходимо создать хотя бы одну роль перед созданием потока работ', 12 | WARNING_FINAL_STATE_MISSING: 'Необходимо указать название фильнального состояния для вашего потока работ', 13 | WARNING_ACTIVITIES_MISSING: 'Необходимо создать хотя бы одно действие и несколько задач' 14 | }); 15 | -------------------------------------------------------------------------------- /app/js/localization/nls/ru/document-management.js: -------------------------------------------------------------------------------- 1 | /*global define*/ 2 | define({ 3 | CONFIRM_DELETE_DOCUMENT_COLLECTIONS: 'Вы хотите удалить выбранные колекции документов?', 4 | DOCUMENT_NOT_RELEASED: 'Этот документ не опубликован и не может быть добавить в колекции опубликованных', 5 | DOCUMENT_ALREADY_IN_LIST: 'Этот документ уже есть в коллекции', 6 | DOCUMENT_BASELINE_IS_EMPTY: 'Вы не можете создать пустую коллекцию документов' 7 | }); 8 | -------------------------------------------------------------------------------- /app/js/localization/nls/ru/download.js: -------------------------------------------------------------------------------- 1 | /*global define*/ 2 | define({ 3 | DOWNLOAD: 'Скачать', 4 | DPLM_CLIENT: 'DPLM Клиент', 5 | DPLM_CLIENT_INSTALL_MESSAGE: 'Клиент DPLM требует наличия на вашем компьютере Java 8 или выше. Чтобы установить Java или проверить его установку, выполните следующие действия с сайта: http://www.java.com', 6 | CHOOSE_PLATFORM: 'Выберите платформу', 7 | DPLM_CLIENT_ABOUT_QUESTION: 'Что такое DPLM Клиент?', 8 | DPLM_CLIENT_ABOUT_TEXT: 'Клиент DPLM - это кроссплатформенное клиентское приложение, которое позволяет обмениваться (скачивать/загружать) 2D и 3D-файлы между локальным компьютером и сервером DocDokuPLM. Независимо от расширения файла, он обеспечивает бесшовную интеграцию со всеми инструментами разработки на рынке.' 9 | }); 10 | -------------------------------------------------------------------------------- /app/js/localization/nls/ru/product-structure.js: -------------------------------------------------------------------------------- 1 | /*global define*/ 2 | define({ 3 | CASCADE: 'Каскадно', 4 | CASCADE_RESULT: 'Результат', 5 | DONE: 'Завершено', 6 | SELECTED: 'Выделено', 7 | PRODUCT_VIEW: 'Просмотр изделия', 8 | STRUCTURE: 'Стуктура изделия' 9 | }); 10 | -------------------------------------------------------------------------------- /app/js/modules/chat-module/models/chat_message_model.js: -------------------------------------------------------------------------------- 1 | /*global define*/ 2 | define(['backbone'], function (Backbone) { 3 | 'use strict'; 4 | var ChatMessage = Backbone.Model.extend({ 5 | 6 | initialize: function () { 7 | } 8 | 9 | }); 10 | 11 | return ChatMessage; 12 | 13 | }); 14 | -------------------------------------------------------------------------------- /app/js/modules/chat-module/views/chat_message_view.js: -------------------------------------------------------------------------------- 1 | /*global define,_*/ 2 | define(['backbone'], function (Backbone) { 3 | 'use strict'; 4 | var ChatMessageView = Backbone.View.extend({ 5 | 6 | tagName: 'li', 7 | 8 | template: _.template( 9 | '<%= chatMessage.sender %> : <%= chatMessage.message.replaceUrl() %>' 10 | ), 11 | 12 | render: function () { 13 | this.$el.html(this.template({chatMessage: this.model.attributes})); 14 | return this; 15 | } 16 | 17 | }); 18 | 19 | return ChatMessageView; 20 | 21 | }); 22 | -------------------------------------------------------------------------------- /app/js/modules/coworkers-access-module/app.js: -------------------------------------------------------------------------------- 1 | /*global define,App*/ 2 | define([ 3 | 'backbone', 4 | 'modules/coworkers-access-module/views/coworkers_access_module_view', 5 | 'common-objects/websocket/channelMessagesType' 6 | ], 7 | function (Backbone, CoWorkersAccessModuleView, ChannelMessagesType) { 8 | 'use strict'; 9 | function onUserStatusRequest(remoteUser) { 10 | App.mainChannel.sendJSON({ 11 | type: ChannelMessagesType.USER_STATUS, 12 | remoteUser: remoteUser 13 | }); 14 | } 15 | 16 | Backbone.Events.on('UserStatusRequest', onUserStatusRequest); 17 | 18 | return CoWorkersAccessModuleView; 19 | }); -------------------------------------------------------------------------------- /app/js/modules/coworkers-access-module/templates/coworker_item_template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | {{user}} 4 | 5 | 6 | 7 | {{#displayCobrowsingButton}}{{/displayCobrowsingButton}} 8 | 9 | -------------------------------------------------------------------------------- /app/js/modules/webrtc-module/templates/webrtc_module_template.html: -------------------------------------------------------------------------------- 1 |
2 |

3 | 4 |

5 | 6 | 7 | 8 | 9 |

10 |
11 |
12 |
13 |
14 | 15 | 16 |
17 |
-------------------------------------------------------------------------------- /app/js/utils/charts-helpers.js: -------------------------------------------------------------------------------- 1 | /*global define*/ 2 | define(function(){ 3 | 4 | 'use strict'; 5 | return { 6 | diskUsageTooltip:function(key,value){ 7 | return '

'+key+'

' + '

'+value+'

'; 8 | } 9 | }; 10 | 11 | }); 12 | -------------------------------------------------------------------------------- /app/js/utils/effects.js: -------------------------------------------------------------------------------- 1 | /*global _,jQuery*/ 2 | (function ($) { 3 | 'use strict'; 4 | $.fn.highlightEffect = function () { 5 | $(this).effect('highlight', {color: '#999999'}, 1000); 6 | }; 7 | 8 | $.fn.customResizable = function (args) { 9 | var options = { 10 | handles: 'e', 11 | autoHide: true, 12 | stop: function (e, ui) { 13 | var parent = ui.element.parent(); 14 | ui.element.css({ 15 | width: ui.element.width() / parent.width() * 100 + '%', 16 | height: '100%' 17 | }); 18 | } 19 | }; 20 | 21 | _.extend(options, args); 22 | $(this).resizable(options); 23 | }; 24 | })(jQuery); 25 | -------------------------------------------------------------------------------- /app/js/utils/jquery.maskedinput-config.js: -------------------------------------------------------------------------------- 1 | /*global jQuery*/ 2 | (function ($) { 3 | 'use strict'; 4 | $.mask = { 5 | // Override to handle our mask grammar 6 | definitions: { 7 | '#': '[0-9]', 8 | '%': '[A-Za-z]', 9 | '*': '[A-Za-z0-9]' 10 | }, 11 | dataName: 'rawMaskFn', 12 | placeholder: '_' 13 | }; 14 | })(jQuery); 15 | -------------------------------------------------------------------------------- /app/js/utils/popover.utils.js: -------------------------------------------------------------------------------- 1 | /*global jQuery*/ 2 | (function ($) { 3 | 4 | 'use strict'; 5 | 6 | function removePopovers(){ 7 | $('.popover').remove(); 8 | } 9 | 10 | function removePopoversIfClickOutside(e){ 11 | var $elem = $(e.target); 12 | if (!$elem.parents('.popover').length && !$elem.hasClass('popover') ) { 13 | removePopovers(); 14 | } 15 | } 16 | 17 | addEventListener('mousewheel',removePopovers); 18 | addEventListener('click',removePopoversIfClickOutside); 19 | 20 | })(jQuery); 21 | -------------------------------------------------------------------------------- /app/js/utils/url-utils.js: -------------------------------------------------------------------------------- 1 | define(function(){ 2 | 'use strict'; 3 | return { 4 | getParameterByName:function(name) { 5 | var url = window.location.href; 6 | name = name.replace(/[\[\]]/g, '\\$&'); 7 | var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'), 8 | results = regex.exec(url); 9 | if (!results) { 10 | return null; 11 | } 12 | if (!results[2]){ 13 | return ''; 14 | } 15 | return decodeURIComponent(results[2].replace(/\+/g, ' ')); 16 | } 17 | }; 18 | }); 19 | -------------------------------------------------------------------------------- /app/js/utils/utils.prototype.js: -------------------------------------------------------------------------------- 1 | String.prototype.replaceUrl = function () { 2 | 'use strict'; 3 | var exp = /(\b(https?|ftp|file):\/\/[\-A-Z0-9+&@#\/%?=~_|!:,.;]*[\-A-Z0-9+&@#\/%=~_|])/ig; 4 | return this.replace(exp, '$1'); 5 | }; 6 | 7 | String.prototype.nl2br = function () { 8 | 'use strict'; 9 | return this.replace(/\n/g, '
'); 10 | }; 11 | 12 | String.prototype.startsWith = String.prototype.startsWith || function(search, pos) { 13 | 'use strict'; 14 | return this.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search; 15 | }; 16 | 17 | -------------------------------------------------------------------------------- /app/less/account-management/content.less: -------------------------------------------------------------------------------- 1 | #account-management-content { 2 | width: 85%; 3 | height: 100%; 4 | overflow: auto; 5 | position: absolute; 6 | right: 0; 7 | top: 0; 8 | z-index: 0; 9 | } 10 | -------------------------------------------------------------------------------- /app/less/account-management/menu.less: -------------------------------------------------------------------------------- 1 | #account-management-menu { 2 | // Custom menu code 3 | } 4 | -------------------------------------------------------------------------------- /app/less/account-management/style.less: -------------------------------------------------------------------------------- 1 | @import "../common/style"; 2 | @import "../modules/style"; 3 | @import "menu"; 4 | @import "content"; 5 | -------------------------------------------------------------------------------- /app/less/change-management/content.less: -------------------------------------------------------------------------------- 1 | #change-management-content { 2 | width: 85%; 3 | height: 100%; 4 | overflow: auto; 5 | position: absolute; 6 | right: 0; 7 | top: 0; 8 | z-index: 0; 9 | input { 10 | height: 22px; 11 | margin: 8px; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /app/less/change-management/link.less: -------------------------------------------------------------------------------- 1 | .affected-links { 2 | min-height: 130px; 3 | } 4 | -------------------------------------------------------------------------------- /app/less/change-management/menu.less: -------------------------------------------------------------------------------- 1 | #change-management-menu { 2 | // Custom menu code 3 | } 4 | -------------------------------------------------------------------------------- /app/less/common/action_buttons.less: -------------------------------------------------------------------------------- 1 | .action-checkin-checkout { 2 | text-align: center; 3 | margin: 15px 0; 4 | 5 | .action-checkin, .action-checkout, .action-undocheckout { 6 | cursor: pointer; 7 | 8 | } 9 | .fa { 10 | padding-right: 10px; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /app/less/common/conversion.less: -------------------------------------------------------------------------------- 1 | .conversion-status { 2 | 3 | .conversion-status-actions { 4 | float: right; 5 | margin-right: 10px; 6 | } 7 | .fa { 8 | margin-right: 4px; 9 | &.success { 10 | color: @input-state-success; 11 | } 12 | 13 | &.fail { 14 | color: @input-state-danger; 15 | } 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /app/less/common/dropdowns.less: -------------------------------------------------------------------------------- 1 | .dropdown-menu { 2 | 3 | min-width: 140px; 4 | 5 | li > a { 6 | line-height: 18px; 7 | height: 18px; 8 | padding: 3px 16px; 9 | &:hover { 10 | color: @text-invert-color; 11 | background: @plm-secondary-color; 12 | } 13 | } 14 | 15 | .divider { 16 | margin: 5px 1px; 17 | } 18 | 19 | &.large-entries { 20 | li > a { 21 | line-height: 30px; 22 | height: 30px; 23 | } 24 | } 25 | 26 | } 27 | 28 | .dropdown-menu > .disabled { 29 | cursor: not-allowed; 30 | } 31 | 32 | .dropdown-menu > .disabled > a { 33 | pointer-events: none; 34 | } 35 | -------------------------------------------------------------------------------- /app/less/common/error.less: -------------------------------------------------------------------------------- 1 | .error-page{ 2 | text-align:center; 3 | } 4 | -------------------------------------------------------------------------------- /app/less/common/footer.less: -------------------------------------------------------------------------------- 1 | #footer { 2 | border: none; 3 | text-align: center; 4 | clear: both; 5 | margin-top: 20px; 6 | margin-bottom: 20px; 7 | 8 | p { 9 | font-size: 0.8em; 10 | } 11 | 12 | a { 13 | color: @plm-primary-color; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app/less/common/form.less: -------------------------------------------------------------------------------- 1 | .form-horizontal { 2 | .control-label { 3 | padding-top: 0; 4 | } 5 | } 6 | textarea:focus, input[type="text"]:focus, input[type="password"]:focus, input[type="datetime"]:focus, input[type="datetime-local"]:focus, input[type="date"]:focus, input[type="month"]:focus, input[type="time"]:focus, input[type="week"]:focus, input[type="number"]:focus, input[type="email"]:focus, input[type="url"]:focus, input[type="search"]:focus, input[type="tel"]:focus, input[type="color"]:focus, .uneditable-input:focus { 7 | box-shadow: none; 8 | } 9 | form.inline{ 10 | display: inline; 11 | } 12 | 13 | form.inline.hide{ 14 | display: none; 15 | } 16 | -------------------------------------------------------------------------------- /app/less/common/icons.less: -------------------------------------------------------------------------------- 1 | .plm-icon-nav { 2 | background: no-repeat center; 3 | display: inline-block; 4 | height: 22px; 5 | width: 22px; 6 | margin: 2px 6px 0 0; 7 | } 8 | 9 | .plm-icon-menu { 10 | background: no-repeat center; 11 | display: inline-block; 12 | height: 22px; 13 | width: 22px; 14 | margin: 0 8px 0 0; 15 | } 16 | 17 | .plm-icon-action { 18 | background: no-repeat center; 19 | display: inline-block; 20 | height: 22px; 21 | margin: 0 8px; 22 | width: 22px; 23 | } 24 | 25 | // Nav 26 | .plm-icon-nav-folder-status-closed { 27 | .plm-icon-nav; 28 | width: 12px; 29 | background-image: url("../images/icon-nav-bullet-right.png"); 30 | opacity: 0.6; 31 | } 32 | 33 | .plm-icon-nav-folder-status-opened { 34 | .plm-icon-nav; 35 | width: 12px; 36 | background-image: url("../images/icon-nav-bullet-down.png"); 37 | opacity: 0.6; 38 | } 39 | -------------------------------------------------------------------------------- /app/less/common/import.less: -------------------------------------------------------------------------------- 1 | .import-status { 2 | p { 3 | margin: 0; 4 | } 5 | margin: 18px 0 0 4px; 6 | 7 | .import-status-actions { 8 | float: right; 9 | margin-right: 10px; 10 | } 11 | .fa { 12 | margin-right: 4px; 13 | &.success { 14 | color: @input-state-success; 15 | } 16 | 17 | &.fail { 18 | color: @input-state-danger; 19 | } 20 | } 21 | p.error { 22 | color: @input-state-danger; 23 | } 24 | p.warning { 25 | color: @input-state-warning; 26 | } 27 | padding-top: 6px; 28 | 29 | } 30 | -------------------------------------------------------------------------------- /app/less/common/iteration.less: -------------------------------------------------------------------------------- 1 | #switch-iteration { 2 | float: left; 3 | margin-bottom: 0px; 4 | } 5 | -------------------------------------------------------------------------------- /app/less/common/mixins.less: -------------------------------------------------------------------------------- 1 | .display(@value) when (@value = box) { 2 | display: -moz-box; 3 | display: -webkit-box; 4 | display: box; 5 | } 6 | 7 | .display(@value) when not (@value = box) { 8 | display: @value; 9 | } 10 | 11 | .box-orient(@value) { 12 | -moz-box-orient: @value; 13 | -webkit-box-orient: @value; 14 | box-orient: @value; 15 | } 16 | 17 | .box-flex(@value) { 18 | -moz-box-flex: @value; 19 | -webkit-box-flex: @value; 20 | box-flex: @value; 21 | } 22 | 23 | .column-width(@value) { 24 | -moz-column-width: @value; 25 | -webkit-column-width: @value; 26 | column-width: @value; 27 | } 28 | 29 | .column-count(@value) { 30 | -moz-column-count: @value; 31 | -webkit-column-count: @value; 32 | column-count: @value; 33 | } 34 | 35 | .column-rule(@value) { 36 | -moz-column-rule: @value; 37 | -webkit-column-rule: @value; 38 | column-rule: @value; 39 | } 40 | -------------------------------------------------------------------------------- /app/less/common/not_found.less: -------------------------------------------------------------------------------- 1 | #not-found-view{ 2 | text-align: center; 3 | margin: 42px; 4 | 5 | h1{ 6 | 7 | } 8 | h2{ 9 | 10 | } 11 | h3{ 12 | 13 | } 14 | p{ 15 | 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/less/common/part_modal.less: -------------------------------------------------------------------------------- 1 | #part-modal { 2 | 3 | .checkbox.lock { 4 | display: none; 5 | } 6 | 7 | #tab-part-links { 8 | min-height: 280px; 9 | } 10 | #tab-part-files { 11 | .conversion-status { 12 | margin: 18px 0 0 4px; 13 | button.reload { 14 | float: right; 15 | 16 | } 17 | } 18 | } 19 | 20 | #tab-part-attributes { 21 | p { 22 | font-weight: bold; 23 | } 24 | } 25 | 26 | .pager { 27 | margin: 0; 28 | } 29 | 30 | .substitute-parts { 31 | margin: 18px 20px 0px 21px; 32 | } 33 | .display-substitute-part { 34 | margin-left: 6px; 35 | color: @link-color; 36 | } 37 | 38 | .subParts-CADInstance, .data-sub-part { 39 | display: none; 40 | 41 | } 42 | 43 | } 44 | -------------------------------------------------------------------------------- /app/less/common/product_creation.less: -------------------------------------------------------------------------------- 1 | #product_creation_modal { 2 | .modal-body { 3 | overflow: inherit; 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /app/less/common/prompt.less: -------------------------------------------------------------------------------- 1 | #prompt_modal { 2 | .control-label { 3 | float: left; 4 | width: 160px; 5 | padding-top: 5px; 6 | padding-right: 10px; 7 | text-align: right; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /app/less/common/registration.less: -------------------------------------------------------------------------------- 1 | #registration_link_container { 2 | color: @text-invert-color; 3 | margin-top: 10px; 4 | } 5 | 6 | #registration_link_container a { 7 | display: inline; 8 | } 9 | -------------------------------------------------------------------------------- /app/less/common/responsive_1200px_min.less: -------------------------------------------------------------------------------- 1 | // 2 | // Responsive: Large desktop and up 3 | // -------------------------------------------------- 4 | 5 | @media (min-width: 1200px) { 6 | 7 | .row-fluid .thumbnails { 8 | margin-left: 0; 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /app/less/common/responsive_768px_979px.less: -------------------------------------------------------------------------------- 1 | // 2 | // Responsive: Tablet to desktop 3 | // -------------------------------------------------- 4 | 5 | @media (min-width: 768px) and (max-width: 979px) { 6 | 7 | // Fixed grid 8 | #grid > .core(@gridColumnWidth768, @gridGutterWidth768); 9 | 10 | // Fluid grid 11 | #grid > .fluid(@fluidGridColumnWidth768, @fluidGridGutterWidth768); 12 | 13 | // Input grid 14 | #grid > .input(@gridColumnWidth768, @gridGutterWidth768); 15 | 16 | // No need to reset .thumbnails here since it's the same @gridGutterWidth 17 | 18 | } 19 | -------------------------------------------------------------------------------- /app/less/common/responsive_modal.less: -------------------------------------------------------------------------------- 1 | // 2 | //Responsive : Modal 3 | // 4 | 5 | @media (max-height: 1200px) { 6 | .modal .modal-body{ 7 | max-height:600px; 8 | } 9 | } 10 | 11 | @media (max-height: 768px) { 12 | 13 | .modal .modal-body{ 14 | max-height:421px; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /app/less/common/tags.less: -------------------------------------------------------------------------------- 1 | .master-tags-list li, 2 | .existing-tags-list li, 3 | .tags-to-add-list li { 4 | padding: 6px 9px 2px 6px; 5 | margin-right: 6px; 6 | 7 | a { 8 | font-size: 15px; 9 | color: @text-very-light-color; 10 | text-shadow: 0 1px 0 @text-invert-color; 11 | 12 | &:hover { 13 | text-decoration: none; 14 | color: @input-state-danger; 15 | opacity: 1; 16 | } 17 | } 18 | 19 | span { 20 | color: @link-color; 21 | margin-left: 3px; 22 | } 23 | } 24 | 25 | .existing-tags-list li:hover { 26 | cursor: pointer; 27 | } 28 | -------------------------------------------------------------------------------- /app/less/common/task.less: -------------------------------------------------------------------------------- 1 | div.status-filter { 2 | margin: 16px 0 0 32px; 3 | } 4 | -------------------------------------------------------------------------------- /app/less/common/udf.less: -------------------------------------------------------------------------------- 1 | #user_defined_function_modal { 2 | 3 | textarea { 4 | width: 280px; 5 | height: 100px; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /app/less/common/used_by.less: -------------------------------------------------------------------------------- 1 | div.group-title { 2 | font-weight: bold; 3 | } 4 | 5 | div.used-by-items-view { 6 | 7 | ul.used-by-items { 8 | margin: 12px 0; 9 | list-style: none; 10 | 11 | li.used-by-item { 12 | padding: 6px 4px 2px 4px; 13 | margin: 0 12px 12px 0; 14 | display: inline-block; 15 | 16 | .reference { 17 | padding: 0 6px; 18 | font-weight: bold; 19 | margin: 0; 20 | display: inline-block; 21 | } 22 | .reference-path { 23 | padding: 0 6px; 24 | font-weight: normal; 25 | margin: 0; 26 | } 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/less/common/user_defined_function.less: -------------------------------------------------------------------------------- 1 | #user_defined_function_modal { 2 | 3 | .run-udf { 4 | display: none; 5 | } 6 | 7 | .calculation { 8 | 9 | select { 10 | width: 111px; 11 | display: inline; 12 | } 13 | margin-bottom: 10px; 14 | .result { 15 | margin-top: 10px; 16 | } 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /app/less/document-management/content.less: -------------------------------------------------------------------------------- 1 | #document-management-content { 2 | width: 85%; 3 | height: 100%; 4 | overflow: auto; 5 | position: absolute; 6 | right: 0; 7 | top: 0; 8 | z-index: 0; 9 | 10 | input { 11 | height: 22px; 12 | margin: 8px; 13 | } 14 | 15 | td.reference { 16 | i.fa-pencil { 17 | color: @input-state-warning; 18 | } 19 | 20 | i.fa-lock { 21 | color: @input-state-danger; 22 | } 23 | 24 | i.fa-check { 25 | color: @input-state-success; 26 | } 27 | 28 | i.fa-exclamation { 29 | color: @input-state-danger; 30 | } 31 | 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /app/less/document-management/documents.less: -------------------------------------------------------------------------------- 1 | #document-management-content { 2 | 3 | td { 4 | a.dochandle { 5 | font-size: 14px; 6 | color: @text-very-light-color; 7 | text-shadow: 0 1px 0 @text-invert-color; 8 | 9 | &:hover { 10 | color: @text-light-color; 11 | cursor: move; 12 | text-decoration: none; 13 | } 14 | } 15 | 16 | &.doc-ref > a { 17 | color: @text-light-color; 18 | &:hover { 19 | text-decoration: none; 20 | color: @text-color; 21 | } 22 | } 23 | } 24 | 25 | tr.moving { 26 | a.dochandle { 27 | color: @text-light-color; 28 | } 29 | 30 | td.doc-ref > a { 31 | color: @text-color; 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /app/less/document-management/templates.less: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/docdoku/docdoku-plm-front/95bdbe3d45f2f271ea7c5c057e38229b42ec5c03/app/less/document-management/templates.less -------------------------------------------------------------------------------- /app/less/documents/style.less: -------------------------------------------------------------------------------- 1 | @import "../common/style"; 2 | @import "document-revision"; 3 | -------------------------------------------------------------------------------- /app/less/download/style.less: -------------------------------------------------------------------------------- 1 | @import "../common/style"; 2 | @import "../modules/style"; 3 | @import "content"; 4 | -------------------------------------------------------------------------------- /app/less/main/style.less: -------------------------------------------------------------------------------- 1 | @import "../common/style"; 2 | @import "login"; 3 | -------------------------------------------------------------------------------- /app/less/modules/coworkers_access_module.less: -------------------------------------------------------------------------------- 1 | #coworkers_access_module_entries { 2 | min-width: 200px; 3 | } 4 | 5 | #coworkers_access_module_entries span { 6 | float: left; 7 | } 8 | 9 | #coworkers_access_module_entries .fa-user { 10 | margin: 4px 4px 0 -10px; 11 | float: left; 12 | } 13 | 14 | #coworkers_access_module_entries .corworker-action { 15 | opacity: 0.5; 16 | float: right; 17 | margin: 4px 0 0 0; 18 | padding-right: 3px; 19 | } 20 | 21 | #coworkers_access_module_entries .corworker-action-disable { 22 | opacity: 0.2; 23 | float: right; 24 | margin: 4px 0 0 0; 25 | padding-right: 3px; 26 | } 27 | 28 | #coworkers_access_module_entries > li > a > i.corworker-action:hover { 29 | opacity: 1; 30 | color: @text-invert-color; 31 | text-shadow: @text-invert-color-shadow; 32 | } 33 | -------------------------------------------------------------------------------- /app/less/modules/style.less: -------------------------------------------------------------------------------- 1 | @import 'chat_module'; 2 | @import 'coworkers_access_module'; 3 | @import 'webrtc_module'; 4 | -------------------------------------------------------------------------------- /app/less/organization-management/menu.less: -------------------------------------------------------------------------------- 1 | #organization-management-menu { 2 | // Custom menu code 3 | } 4 | -------------------------------------------------------------------------------- /app/less/organization-management/style.less: -------------------------------------------------------------------------------- 1 | @import "../common/style"; 2 | @import "../modules/style"; 3 | @import "menu"; 4 | @import "content"; 5 | -------------------------------------------------------------------------------- /app/less/parts/style.less: -------------------------------------------------------------------------------- 1 | @import "../common/style"; 2 | @import "part-revision"; 3 | -------------------------------------------------------------------------------- /app/less/product-management/menu.less: -------------------------------------------------------------------------------- 1 | #product-management-menu { 2 | // Custom menu code 3 | 4 | .nav-list-entry { 5 | 6 | &.move-part-into { 7 | border: 1px dashed @menu-drop-item; 8 | height: 25px; 9 | margin-top: -1px; 10 | padding-left: 5px; 11 | } 12 | 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /app/less/product-management/page_controls.less: -------------------------------------------------------------------------------- 1 | #product-management-content { 2 | .page-controls { 3 | display: none; 4 | z-index: 2; 5 | height: 0; 6 | position: relative; 7 | top: 12px; 8 | right: 23px; 9 | float: right; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /app/less/product-management/style.less: -------------------------------------------------------------------------------- 1 | @import "../common/style"; 2 | @import "../common/tags"; 3 | @import "../modules/style"; 4 | @import "menu"; 5 | @import "content"; 6 | @import "page_controls"; 7 | @import "baselines"; 8 | @import "product_instances"; 9 | @import "search"; 10 | @import (inline) "../../bower_components/jQuery-QueryBuilder/dist/css/query-builder.default.css"; 11 | @import (inline) "../../bower_components/selectize/dist/css/selectize.default.css"; 12 | @import "query_builder"; 13 | @import "part_list_item"; 14 | @import "../common/treeview"; 15 | -------------------------------------------------------------------------------- /app/less/product-structure/actions_bar.less: -------------------------------------------------------------------------------- 1 | #export_scene_btn { 2 | height: auto; 3 | display: none; 4 | } 5 | 6 | #fullscreen_scene_btn { 7 | height: auto; 8 | } 9 | -------------------------------------------------------------------------------- /app/less/product-structure/bom_table.less: -------------------------------------------------------------------------------- 1 | #bom_table input { 2 | height: 22px; 3 | margin: 8px; 4 | } -------------------------------------------------------------------------------- /app/less/product-structure/export_modal.less: -------------------------------------------------------------------------------- 1 | #exportSceneModal textarea { 2 | height: 30%; 3 | width: 97%; 4 | } 5 | -------------------------------------------------------------------------------- /app/less/product-structure/frame.less: -------------------------------------------------------------------------------- 1 | #frameWorkspace { 2 | display: block; 3 | margin: 0px; 4 | padding: 0px; 5 | width: 100%; 6 | height: 100%; 7 | overflow: hidden; 8 | #progress_bar_container { 9 | position: absolute; 10 | left: 10px; 11 | bottom: 10px; 12 | } 13 | #container { 14 | margin: 0; 15 | padding: 0; 16 | height: 100%; 17 | width: 100%; 18 | canvas { 19 | height: 100%; 20 | width: 100%; 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/less/product-structure/part_metadata.less: -------------------------------------------------------------------------------- 1 | .part_metadata_container { 2 | dl { 3 | color: @text-light-color; 4 | dt { 5 | float: left; 6 | font-weight: bold; 7 | clear: both; 8 | } 9 | 10 | dd { 11 | float: right; 12 | margin-right: 5px; 13 | } 14 | 15 | } 16 | .selected-part { 17 | white-space: nowrap; 18 | } 19 | } 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /app/less/product-structure/path_to_path_link.less: -------------------------------------------------------------------------------- 1 | #path-to-path-links { 2 | .well { 3 | padding: 10px; 4 | } 5 | 6 | .path-to-path-link-content { 7 | 8 | div.control-group { 9 | margin-bottom: 0px; 10 | 11 | &.type { 12 | margin-top: 10px; 13 | margin-bottom: 10px; 14 | } 15 | } 16 | 17 | label.control-label { 18 | width: 110px; 19 | } 20 | 21 | div.controls { 22 | margin-left: 130px; 23 | padding-right: 30px; 24 | } 25 | 26 | textarea.path-to-path-description { 27 | max-width: 346px; 28 | width: 100%; 29 | margin-right: 10px; 30 | } 31 | 32 | .save-button { 33 | float: right; 34 | margin-top: 20px; 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /app/less/product-structure/product_instance_data.less: -------------------------------------------------------------------------------- 1 | .path-description { 2 | padding-bottom: 10px; 3 | } 4 | 5 | .fa-long-arrow-right { 6 | padding-right: 5px; 7 | padding-left: 5px; 8 | } 9 | 10 | .description-input { 11 | margin-left: 10px; 12 | } 13 | 14 | .new-iteration { 15 | margin-top: 5%; 16 | } 17 | 18 | .product-instance-data-modal { 19 | #tab-link { 20 | min-height: 280px; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/less/product-structure/progress_bar.less: -------------------------------------------------------------------------------- 1 | #progress_bar_container { 2 | background: @menu-color; 3 | margin: 15px 0 0 0; 4 | float: right; 5 | width: 15%; 6 | height: 20px; 7 | 8 | .bar { 9 | background-color: @plm-secondary-color; 10 | width: 0; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /app/less/product-structure/style.less: -------------------------------------------------------------------------------- 1 | //imports only 2 | @import "../common/style"; 3 | @import "../common/tags"; 4 | @import "../modules/style"; 5 | @import (inline) "../../bower_components/selectize/dist/css/selectize.default.css"; 6 | @import "app"; 7 | @import "../common/treeview"; 8 | @import "menu"; 9 | @import "product_nav_list"; 10 | @import "content"; 11 | @import "actions_bar"; 12 | @import "part_metadata"; 13 | @import "shortcuts"; 14 | @import "layers"; 15 | @import "stats"; 16 | @import "frame"; 17 | @import "scene"; 18 | @import "view_buttons"; 19 | @import "bom_table"; 20 | @import "export_modal"; 21 | @import "progress_bar"; 22 | @import "dat"; 23 | @import "collaborative"; 24 | @import "product_instance_data"; 25 | @import "path_to_path_link"; 26 | -------------------------------------------------------------------------------- /app/less/product-structure/style_frame.less: -------------------------------------------------------------------------------- 1 | //imports only 2 | @import "../common/style"; 3 | @import "menu"; 4 | @import "product_nav_list"; 5 | @import "content"; 6 | @import "actions_bar"; 7 | @import "part_metadata"; 8 | @import "shortcuts"; 9 | @import "layers"; 10 | @import "stats"; 11 | @import "frame"; 12 | @import "scene"; 13 | @import "view_buttons"; 14 | @import "bom_table"; 15 | @import "export_modal"; 16 | @import "progress_bar"; -------------------------------------------------------------------------------- /app/less/product-structure/view_buttons.less: -------------------------------------------------------------------------------- 1 | #view_buttons { 2 | width: 75px; 3 | margin: 0px auto; 4 | 5 | .camera-mode-label { 6 | font-weight: bold; 7 | font-size: 12px; 8 | 9 | &:nth-child(2) { 10 | padding-left: 3px; 11 | } 12 | 13 | [class^="icon-"] { 14 | font-size: 6px; 15 | font-style: italic; 16 | } 17 | 18 | [class^="fa-"] { 19 | font-size: 6px; 20 | font-style: italic; 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/less/visualization/style.less: -------------------------------------------------------------------------------- 1 | //imports only 2 | @import "../common/style"; 3 | @import "../product-structure/menu"; 4 | @import "../product-structure/product_nav_list"; 5 | @import "../product-structure/content"; 6 | @import "../product-structure/actions_bar"; 7 | @import "../product-structure/part_metadata"; 8 | @import "../product-structure/shortcuts"; 9 | @import "../product-structure/layers"; 10 | @import "../product-structure/stats"; 11 | @import "../product-structure/frame"; 12 | @import "../product-structure/scene"; 13 | @import "../product-structure/view_buttons"; 14 | @import "../product-structure/bom_table"; 15 | @import "../product-structure/export_modal"; 16 | @import "../product-structure/progress_bar"; 17 | -------------------------------------------------------------------------------- /app/less/workspace-management/admin-accounts.less: -------------------------------------------------------------------------------- 1 | #content table.accounts-table > tbody > tr.account-item:not(.account-enabled) >td { 2 | background: #f5d1d1; 3 | text-decoration: line-through; 4 | } 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/less/workspace-management/admin-oidc.less: -------------------------------------------------------------------------------- 1 | #providers-table { 2 | .provider-name { 3 | font-weight: bold; 4 | cursor: pointer; 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /app/less/workspace-management/content.less: -------------------------------------------------------------------------------- 1 | #workspace-management-content { 2 | width: 85%; 3 | height: 100%; 4 | overflow: auto; 5 | position: absolute; 6 | right: 0; 7 | top: 0; 8 | z-index: 0; 9 | } 10 | -------------------------------------------------------------------------------- /app/less/workspace-management/customizations.less: -------------------------------------------------------------------------------- 1 | #columns-selectize { 2 | #customize-columns { 3 | width: 100%; 4 | } 5 | .badge { 6 | cursor: pointer; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /app/less/workspace-management/menu.less: -------------------------------------------------------------------------------- 1 | #workspace-management-menu { 2 | // Custom menu code 3 | } 4 | -------------------------------------------------------------------------------- /app/less/workspace-management/style.less: -------------------------------------------------------------------------------- 1 | @import "../common/style"; 2 | @import "../modules/style"; 3 | @import "menu"; 4 | @import "content"; 5 | @import "workspace-home"; 6 | @import "workspace-users"; 7 | @import (inline) "../../bower_components/selectize/dist/css/selectize.default.css"; 8 | @import (inline) "../../bower_components/nvd3/build/nv.d3.css"; 9 | @import "charts"; 10 | @import "admin-accounts"; 11 | @import "webhooks"; 12 | @import "customizations"; 13 | @import "admin-oidc"; 14 | -------------------------------------------------------------------------------- /app/less/workspace-management/webhooks.less: -------------------------------------------------------------------------------- 1 | .specific-hook-configuration{ 2 | select,input{ 3 | margin-bottom: 2px; 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /app/less/workspace-management/workspace-home.less: -------------------------------------------------------------------------------- 1 | .home-workspace-list-container { 2 | display: flex; 3 | flex-direction: row; 4 | flex-wrap: wrap; 5 | justify-content: flex-start; 6 | align-items: stretch; 7 | align-content: flex-start; 8 | 9 | .well-large.home-workspace { 10 | margin: 3px; 11 | padding: 0 8px 4px 10px; 12 | width: 24%; 13 | border: @border-light; 14 | background-color: @background-color-light; 15 | -webkit-border-radius: 0; 16 | -moz-border-radius: 0; 17 | border-radius: 0; 18 | >div>h4{ 19 | text-overflow: ellipsis; 20 | overflow: hidden; 21 | white-space: nowrap; 22 | } 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /app/main/js/templates/login-with.html: -------------------------------------------------------------------------------- 1 |

{{i18n.CONNECTION}}

2 |
3 |
4 |
5 |

{{i18n.CHOOSE_PROVIDER}}

6 | {{#providers}} 7 |

8 | 9 |

10 | {{/providers}} 11 |
12 |

{{i18n.LOGIN_AN_OTHER_WAY}}

13 | -------------------------------------------------------------------------------- /app/main/js/templates/recovery-form.html: -------------------------------------------------------------------------------- 1 |

{{i18n.RECOVERY}}

2 |
3 |
4 |

{{i18n.ENTER_ID}}

5 |

6 | 7 | 13 | 14 |

15 | 16 |

17 | 23 |

24 | 25 |

{{i18n.BACK}}

26 | 27 | -------------------------------------------------------------------------------- /app/organization-management/js/templates/content.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | -------------------------------------------------------------------------------- /app/parts/js/router.js: -------------------------------------------------------------------------------- 1 | /*global define,App*/ 2 | define([ 3 | 'backbone', 4 | 'common-objects/common/singleton_decorator' 5 | ], 6 | function (Backbone, singletonDecorator) { 7 | 'use strict'; 8 | var Router = Backbone.Router.extend({ 9 | routes: { 10 | ':workspaceId/:partNumber/:partVersion': 'showPartRevision', 11 | ':uuid': 'showSharedEntity', 12 | }, 13 | 14 | showPartRevision:function(workspace, partNumber, partVersion){ 15 | App.appView.showPartRevision(workspace, partNumber, partVersion); 16 | }, 17 | 18 | showSharedEntity:function(uuid){ 19 | App.appView.showSharedEntity(uuid); 20 | } 21 | }); 22 | 23 | return singletonDecorator(Router); 24 | }); 25 | -------------------------------------------------------------------------------- /app/parts/js/templates/cad-file.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | {{i18n.CAD_FILE}} 4 | 5 |
6 | -------------------------------------------------------------------------------- /app/parts/js/templates/part-permalink.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | -------------------------------------------------------------------------------- /app/product-management/js/collections/configuration_items.js: -------------------------------------------------------------------------------- 1 | /*global define,App*/ 2 | define(['backbone', 'models/configuration_item' ], 3 | function (Backbone, ConfigurationItem) { 4 | 'use strict'; 5 | var ConfigurationItemCollection = Backbone.Collection.extend({ 6 | url: function () { 7 | return App.config.apiEndPoint + '/workspaces/' + App.config.workspaceId + '/products'; 8 | }, 9 | model: ConfigurationItem 10 | }); 11 | 12 | return ConfigurationItemCollection; 13 | 14 | }); 15 | -------------------------------------------------------------------------------- /app/product-management/js/collections/configurations.js: -------------------------------------------------------------------------------- 1 | /*global define,App*/ 2 | define(['backbone', 'models/configuration' ], 3 | function (Backbone, Configuration) { 4 | 'use strict'; 5 | var ConfigurationCollection = Backbone.Collection.extend({ 6 | url: function () { 7 | return App.config.apiEndPoint + '/workspaces/' + App.config.workspaceId + '/product-configurations'; 8 | }, 9 | model: Configuration 10 | }); 11 | 12 | return ConfigurationCollection; 13 | 14 | }); 15 | -------------------------------------------------------------------------------- /app/product-management/js/collections/part_templates.js: -------------------------------------------------------------------------------- 1 | /*global define,App*/ 2 | define([ 3 | 'backbone', 4 | 'models/part_template' 5 | ], function (Backbone, Template) { 6 | 'use strict'; 7 | var TemplateList = Backbone.Collection.extend({ 8 | model: Template, 9 | 10 | url: function () { 11 | return App.config.apiEndPoint + '/workspaces/' + App.config.workspaceId + '/part-templates'; 12 | } 13 | 14 | }); 15 | 16 | return TemplateList; 17 | }); 18 | -------------------------------------------------------------------------------- /app/product-management/js/templates/baselines/baseline_choice_list.html: -------------------------------------------------------------------------------- 1 |
2 | -------------------------------------------------------------------------------- /app/product-management/js/templates/baselines/baseline_configuration_list.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | 6 |
7 |
8 | -------------------------------------------------------------------------------- /app/product-management/js/templates/baselines/baseline_list_item.html: -------------------------------------------------------------------------------- 1 | {{model.attributes.name}} -------------------------------------------------------------------------------- /app/product-management/js/templates/baselines/baselined_part_list.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/product-management/js/templates/baselines/baselines_content.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 5 | 6 |
7 |
8 | {{> snapButton}} 9 | {{> newProductInstanceButton}} 10 | {{> deleteButton}} 11 | {{> udfButton}} 12 |
13 | 14 |
15 | -------------------------------------------------------------------------------- /app/product-management/js/templates/baselines/baselines_list.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
{{i18n.NAME}}{{i18n.PRODUCT}}{{i18n.TYPE}}{{i18n.AUTHOR}}
18 | -------------------------------------------------------------------------------- /app/product-management/js/templates/configuration/configuration_content.html: -------------------------------------------------------------------------------- 1 |
2 | {{> newConfigurationButton}} 3 | {{> deleteButton}} 4 | {{> aclButton}} 5 |
6 |
7 |
8 | -------------------------------------------------------------------------------- /app/product-management/js/templates/configuration/configuration_list.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{i18n.NAME}} 5 | {{i18n.PRODUCT}} 6 | {{i18n.CREATION_DATE}} 7 | {{i18n.AUTHOR}} 8 | {{i18n.ACL}} 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/product-management/js/templates/configuration/configuration_list_item.html: -------------------------------------------------------------------------------- 1 | 2 | {{model.getName}} 3 | {{model.getConfigurationItemId}} 4 | {{model.getFormattedCreationDate}} 5 | {{model.getAuthor}} 6 | 7 | {{#model.isReadOnly}} 8 | 9 | {{/model.isReadOnly}} 10 | {{#model.isFullAccess}} 11 | 12 | {{/model.isFullAccess}} 13 | 14 | -------------------------------------------------------------------------------- /app/product-management/js/templates/content.html: -------------------------------------------------------------------------------- 1 |
2 | 15 |
16 |
17 | -------------------------------------------------------------------------------- /app/product-management/js/templates/nav/baselines_nav.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | {{i18n.BASELINES}} 5 | 6 |
7 | -------------------------------------------------------------------------------- /app/product-management/js/templates/nav/checkedouts_nav.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | {{i18n.CHECKOUTS}} 5 | 6 | 7 |
8 | -------------------------------------------------------------------------------- /app/product-management/js/templates/nav/configuration_nav.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | {{i18n.CONFIGURATIONS}} 5 | 6 |
7 | -------------------------------------------------------------------------------- /app/product-management/js/templates/nav/part_nav.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | {{i18n.PARTS}} 5 | 6 |
7 | -------------------------------------------------------------------------------- /app/product-management/js/templates/nav/part_template_nav.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | {{i18n.PART_TEMPLATES}} 5 | 6 |
7 | -------------------------------------------------------------------------------- /app/product-management/js/templates/nav/product_instances_nav.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | {{i18n.PRODUCT_INSTANCES}} 5 | 6 |
7 | -------------------------------------------------------------------------------- /app/product-management/js/templates/nav/product_nav.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | {{i18n.PRODUCTS}} 5 | 6 |
7 | -------------------------------------------------------------------------------- /app/product-management/js/templates/nav/tag_nav.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | {{i18n.TAGS}} 5 | 6 |
7 | 8 | -------------------------------------------------------------------------------- /app/product-management/js/templates/nav/tag_nav_item.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | {{model.id}} 5 | 6 | 7 |
8 | 9 | 10 | 11 | 19 |
20 |
21 | -------------------------------------------------------------------------------- /app/product-management/js/templates/nav/tasks_nav.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | {{i18n.TASKS}} 5 | 6 |
7 | -------------------------------------------------------------------------------- /app/product-management/js/templates/part-template/part_template_content.html: -------------------------------------------------------------------------------- 1 |
2 | 5 | 8 | {{> deleteButton}} 9 | {{> aclButton}} 10 | 11 | 12 |
13 |
14 |
15 | -------------------------------------------------------------------------------- /app/product-management/js/templates/part-template/part_template_list.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{i18n.REFERENCE}} 5 | {{i18n.TYPE}} 6 | {{i18n.MASK}} 7 | {{i18n.AUTHOR}} 8 | {{i18n.CREATION_DATE}} 9 | {{i18n.MODIFICATION_DATE}} 10 | {{i18n.ACL}} 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /app/product-management/js/templates/part-template/part_template_list_item.html: -------------------------------------------------------------------------------- 1 | 2 | {{getId}} 3 | {{getPartType}} 4 | {{getMask}} 5 | {{getAuthorName}} 6 | {{getFormattedCreationDate}} 7 | {{getFormattedModificationDate}} 8 | 9 | {{#isReadOnly}} 10 | 11 | {{/isReadOnly}} 12 | {{#isFullAccess}} 13 | 14 | {{/isFullAccess}} 15 | 16 | 17 | {{#hasAttachedFiles}} 18 | 19 | {{/hasAttachedFiles}} 20 | 21 | -------------------------------------------------------------------------------- /app/product-management/js/templates/part/part_grouped_by_list.html: -------------------------------------------------------------------------------- 1 | {{#groups}} 2 | {{#name}} 3 |

{{name}}

4 | {{/name}} 5 | 6 | 7 | 8 | {{#columns}} 9 | 10 | {{/columns}} 11 | 12 | 13 | 14 |
{{name}}
15 | {{/groups}} 16 | -------------------------------------------------------------------------------- /app/product-management/js/templates/part/part_grouped_by_list_item.html: -------------------------------------------------------------------------------- 1 | {{#columns}} 2 | 3 | {{#isDate}} 4 | {{#value}} 5 | {{.}}
6 | {{/value}} 7 | {{/isDate}} 8 | 9 | {{#isStringArray}} 10 | {{#value}} 11 | {{.}} 12 | {{/value}} 13 | {{/isStringArray}} 14 | 15 | {{#isStringValue}} 16 | {{#value}} 17 | {{.}}
18 | {{/value}} 19 | {{/isStringValue}} 20 | 21 | {{#isLinkedDocuments}} 22 | {{#value}} 23 | {{name}} 24 | {{/value}} 25 | {{/isLinkedDocuments}} 26 | 27 | {{#isPartNumber}} 28 | {{value}} 29 | {{/isPartNumber}} 30 | 31 | 32 | {{/columns}} 33 | -------------------------------------------------------------------------------- /app/product-management/js/templates/part/part_import_modal.html: -------------------------------------------------------------------------------- 1 | 10 | -------------------------------------------------------------------------------- /app/product-management/js/templates/part/part_list.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /app/product-management/js/templates/part/search_part_form.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | 5 | 6 |
7 | -------------------------------------------------------------------------------- /app/product-management/js/templates/product-instances/product_instances_content.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 5 | 6 |
7 |
8 | 9 | {{> newProductInstanceButton}} 10 | {{> deleteButton}} 11 | {{> aclButton}} 12 | {{> importButton}} 13 | 14 |
15 |
16 | -------------------------------------------------------------------------------- /app/product-management/js/templates/product-instances/product_instances_import_modal.html: -------------------------------------------------------------------------------- 1 | 10 | -------------------------------------------------------------------------------- /app/product-management/js/templates/product/product_content.html: -------------------------------------------------------------------------------- 1 |
2 | 5 | {{> newConfigurationButton}} 6 | {{> snapButton}} 7 | {{> deleteButton}} 8 | {{> udfButton}} 9 |
10 |
11 |
12 | -------------------------------------------------------------------------------- /app/product-management/js/templates/product/product_list.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{i18n.PRODUCT_ID}} 5 | 6 | {{i18n.ROOT_PART}} 7 | {{i18n.AUTHOR}} 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /app/product-management/js/templates/product/product_list_item.html: -------------------------------------------------------------------------------- 1 | 2 | {{model.getId}} 3 | 4 | {{#model.hasUnreadModificationNotifications}} 5 | 6 | {{/model.hasUnreadModificationNotifications}} 7 | 8 | {{model.getDesignItemName}} < {{model.getDesignItemNumber}} > 9 | {{model.getAuthorName}} 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/product-structure/js/collections/marker_collection.js: -------------------------------------------------------------------------------- 1 | /*global define*/ 2 | define([ 3 | 'backbone', 4 | 'models/marker' 5 | ], function (Backbone, Marker) { 6 | 7 | 'use strict'; 8 | 9 | var MarkerCollection = Backbone.Collection.extend({ 10 | 11 | model: Marker, 12 | 13 | url: function () { 14 | return this.urlLayer + '/markers'; 15 | }, 16 | 17 | onScene: function () { 18 | return this.where({onScene: true}); 19 | }, 20 | 21 | notOnScene: function () { 22 | return this.where({onScene: false}); 23 | } 24 | 25 | }); 26 | 27 | return MarkerCollection; 28 | 29 | }); 30 | -------------------------------------------------------------------------------- /app/product-structure/js/collections/part_collection.js: -------------------------------------------------------------------------------- 1 | /*global define*/ 2 | define([ 3 | 'backbone', 4 | 'common-objects/models/part' 5 | ], function (Backbone, Part) { 6 | 'use strict'; 7 | var PartList = Backbone.Collection.extend({ 8 | 9 | model: Part, 10 | 11 | className: 'PartList', 12 | 13 | initialize: function () { 14 | this.filterUrl = undefined; 15 | }, 16 | 17 | setFilterUrl: function (url) { 18 | this.filterUrl = url; 19 | }, 20 | 21 | url: function () { 22 | return this.filterUrl; 23 | } 24 | 25 | }); 26 | 27 | return PartList; 28 | }); 29 | -------------------------------------------------------------------------------- /app/product-structure/js/models/marker.js: -------------------------------------------------------------------------------- 1 | /*global define,_*/ 2 | define(['backbone'], function (Backbone) { 3 | 4 | 'use strict'; 5 | 6 | var Marker = Backbone.Model.extend({ 7 | 8 | toJSON: function () { 9 | return _.pick(this.attributes, 'id', 'title', 'description', 'x', 'y', 'z'); 10 | }, 11 | 12 | getX: function () { 13 | return this.get('x'); 14 | }, 15 | 16 | getY: function () { 17 | return this.get('y'); 18 | }, 19 | 20 | getZ: function () { 21 | return this.get('z'); 22 | }, 23 | 24 | getTitle: function () { 25 | return this.get('title'); 26 | }, 27 | 28 | getDescription: function () { 29 | return this.get('description'); 30 | } 31 | 32 | }); 33 | 34 | return Marker; 35 | 36 | }); 37 | -------------------------------------------------------------------------------- /app/product-structure/js/models/result_path.js: -------------------------------------------------------------------------------- 1 | /*global define,_*/ 2 | 'use strict'; 3 | define(['backbone'], function (Backbone) { 4 | 5 | var ResultPath = Backbone.Model.extend({ 6 | 7 | contains: function (partUsageLinkId) { 8 | return _.indexOf(this.partUsageLinks, partUsageLinkId) !== -1; 9 | }, 10 | 11 | parse: function (response) { 12 | if (response) { 13 | var linkIds = response.path.substr(3).split('-'); 14 | linkIds.unshift('-1'); 15 | this.partUsageLinks = linkIds; 16 | } 17 | }, 18 | 19 | toJSON: function () { 20 | return _.pick(this.attributes, 'path'); 21 | } 22 | 23 | }); 24 | 25 | return ResultPath; 26 | 27 | }); 28 | -------------------------------------------------------------------------------- /app/product-structure/js/templates/baselines/baseline_select.html: -------------------------------------------------------------------------------- 1 | 6 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /app/product-structure/js/templates/blocker.html: -------------------------------------------------------------------------------- 1 |
2 | {{i18n.BLOCKER_TITLE}} 3 |
4 | {{i18n.BLOCKER_TEXT}} 5 |
6 | -------------------------------------------------------------------------------- /app/product-structure/js/templates/bom.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/docdoku/docdoku-plm-front/95bdbe3d45f2f271ea7c5c057e38229b42ec5c03/app/product-structure/js/templates/bom.html -------------------------------------------------------------------------------- /app/product-structure/js/templates/bom_content.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
{{i18n.PART_NUMBER}}{{i18n.VERSION}}{{i18n.ITERATION}}{{i18n.TYPE}}{{i18n.PART_NAME}}{{i18n.AUTHOR}}{{i18n.MODIFICATION_DATE}}{{i18n.LIFECYCLE_STATE}}{{i18n.CHECKOUT_BY}}{{i18n.ACL}}
24 | -------------------------------------------------------------------------------- /app/product-structure/js/templates/control_clipping.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /app/product-structure/js/templates/control_cutplan.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | 6 | 7 |
8 | 9 |
10 | 11 |
12 | 13 |
14 | 15 |
16 | -------------------------------------------------------------------------------- /app/product-structure/js/templates/control_explode.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/product-structure/js/templates/control_layers.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 7 |
-------------------------------------------------------------------------------- /app/product-structure/js/templates/control_markers.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 5 | 7 | 9 |
-------------------------------------------------------------------------------- /app/product-structure/js/templates/control_measure.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 |
5 | 6 |
7 | 8 |
9 | -------------------------------------------------------------------------------- /app/product-structure/js/templates/control_modes.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 5 | 7 | 9 |
-------------------------------------------------------------------------------- /app/product-structure/js/templates/control_navigation.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 5 | 7 | 9 | 10 | 11 |
12 | -------------------------------------------------------------------------------- /app/product-structure/js/templates/control_options.html: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | -------------------------------------------------------------------------------- /app/product-structure/js/templates/control_transform.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | 6 | 7 |
8 | 9 | -------------------------------------------------------------------------------- /app/product-structure/js/templates/export_scene_modal.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/product-structure/js/templates/layer_controls.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/product-structure/js/templates/layer_item.html: -------------------------------------------------------------------------------- 1 | 2 |
3 |

4 | {{attributes.name}} ({{countMarkers}}) 5 |

6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/product-structure/js/templates/marker_info_modal.html: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /app/product-structure/js/templates/part_meta_data.html: -------------------------------------------------------------------------------- 1 | 3 | 4 |
5 | 6 |
{{i18n.PART_NAME}} :
7 |
{{model.getName}}
8 | 9 |
{{i18n.VERSION}} :
10 |
{{model.getVersion}}
11 | 12 |
{{i18n.ITERATION}} :
13 |
{{model.getIteration}}
14 | 15 |
{{i18n.DESCRIPTION}} :
16 |
{{model.getDescription}}
17 | 18 |
{{i18n.AUTHOR}} :
19 |
{{model.getAuthor}}
20 | 21 |
22 |
23 | -------------------------------------------------------------------------------- /app/product-structure/js/templates/progress_bar.html: -------------------------------------------------------------------------------- 1 |
2 | -------------------------------------------------------------------------------- /app/product-structure/js/templates/shortcuts.html: -------------------------------------------------------------------------------- 1 | {{i18n.SHORTCUTS_TITLE}} -------------------------------------------------------------------------------- /app/product-structure/js/views/blocker_view.js: -------------------------------------------------------------------------------- 1 | /*global define,App*/ 2 | define( 3 | [ 4 | 'backbone', 5 | 'mustache', 6 | 'text!templates/blocker.html' 7 | ], function (Backbone, Mustache, template) { 8 | 9 | 'use strict'; 10 | 11 | var BlockerView = Backbone.View.extend({ 12 | 13 | tagName: 'div', 14 | 15 | id: 'blocker', 16 | 17 | render: function () { 18 | this.$el.html(Mustache.render(template, {i18n: App.config.i18n})); 19 | return this; 20 | } 21 | 22 | }); 23 | 24 | return BlockerView; 25 | 26 | }); 27 | -------------------------------------------------------------------------------- /app/product-structure/js/views/control_layers_view.js: -------------------------------------------------------------------------------- 1 | /*global define,App*/ 2 | define( 3 | [ 4 | 'backbone', 5 | 'mustache', 6 | 'text!templates/control_layers.html' 7 | ], function (Backbone, Mustache, template) { 8 | 9 | 'use strict'; 10 | 11 | var ControlLayersView = Backbone.View.extend({ 12 | 13 | className: 'side_control_group', 14 | 15 | initialize: function () { 16 | }, 17 | 18 | render: function () { 19 | this.$el.html(Mustache.render(template, {i18n: App.config.i18n})); 20 | return this; 21 | } 22 | 23 | }); 24 | 25 | return ControlLayersView; 26 | 27 | }); 28 | -------------------------------------------------------------------------------- /app/sounds/incoming-call.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/docdoku/docdoku-plm-front/95bdbe3d45f2f271ea7c5c057e38229b42ec5c03/app/sounds/incoming-call.ogg -------------------------------------------------------------------------------- /app/sounds/notification.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/docdoku/docdoku-plm-front/95bdbe3d45f2f271ea7c5c057e38229b42ec5c03/app/sounds/notification.ogg -------------------------------------------------------------------------------- /app/webapp.properties.json: -------------------------------------------------------------------------------- 1 | { 2 | "server": { 3 | "ssl": false, 4 | "domain": "localhost", 5 | "port": 8080, 6 | "contextPath": "/docdoku-plm-server-rest", 7 | "wsDomain": "localhost" 8 | }, 9 | "contextPath": "/", 10 | "preferLoginWith": false 11 | } 12 | -------------------------------------------------------------------------------- /app/workspace-management/js/templates/admin-dashboard.html: -------------------------------------------------------------------------------- 1 |
2 | 5 |
6 |
7 |

{{i18n.DASHBOARD}}

8 |
9 |
10 |

{{i18n.DISK_USAGE}}

11 |
12 | 13 |
14 |

{{i18n.DISK_USAGE_TOTAL}}

15 |
16 | 17 |
18 |

{{i18n.ENTITIES}}

19 |
20 | 21 |
22 |
23 |
24 |
25 | -------------------------------------------------------------------------------- /app/workspace-management/js/templates/admin-oauth-provider.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {{provider.name}} 6 | {{provider.issuer}} 7 | {{provider.clientID}} 8 | {{provider.jwsAlgorithm}} 9 | 10 | {{#provider.enabled}}{{i18n.ENABLED}}{{/provider.enabled}}{{^provider.enabled}}{{i18n.DISABLED}}{{/provider.enabled}} 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/workspace-management/js/templates/hooks-manager.html: -------------------------------------------------------------------------------- 1 |
2 | 5 | -------------------------------------------------------------------------------- /app/workspace-management/js/templates/part-table-customizations.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

{{i18n.PARTS}}

4 |
5 |
6 | 7 | 8 |
9 |
10 | 11 | 12 | 13 |
14 | -------------------------------------------------------------------------------- /app/workspace-management/js/templates/workspace-customizations.html: -------------------------------------------------------------------------------- 1 |
2 | 5 |
6 |
7 |
8 | -------------------------------------------------------------------------------- /app/workspace-management/js/templates/workspace-management-home.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 |
5 |

{{i18n.WORKSPACES_ADMINISTRATION}}

6 |

{{i18n.WORKSPACES_ADMINISTRATION_TEXT}}

7 |
8 |
9 |
10 | -------------------------------------------------------------------------------- /build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | set -e 4 | 5 | VERSION=$(sed -nE 's/^\s*"version": "(.*?)",$/\1/p' package.json) 6 | 7 | npm run build 8 | docker build -f docker/Dockerfile -t docdoku/docdoku-plm-front:$VERSION . 9 | -------------------------------------------------------------------------------- /docker/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM nginx:1.19.1-alpine 2 | 3 | COPY dist /usr/share/nginx/html 4 | COPY docker/entrypoint.sh /entrypoint.sh 5 | 6 | RUN chmod +x /entrypoint.sh 7 | 8 | ENTRYPOINT ["/entrypoint.sh"] 9 | -------------------------------------------------------------------------------- /docker/entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | /usr/sbin/nginx -g "daemon off;" 4 | 5 | -------------------------------------------------------------------------------- /grunt/dev/jshint.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | loadConf:function(config, grunt){ 3 | config.jshint= { 4 | options: { 5 | jshintrc: '.jshintrc', 6 | reporter: require('jshint-stylish') 7 | }, 8 | all: { 9 | src:[ 10 | 'Gruntfile.js', 11 | 'app/**/*.js', 12 | 'tests/js/**/*.js', 13 | '!app/bower_components/**', 14 | '!app/js/lib/**', 15 | '!app/js/dmu/**' 16 | ] 17 | }, 18 | current:{} 19 | }; 20 | }, 21 | loadTasks:function(grunt){ 22 | 23 | } 24 | }; 25 | -------------------------------------------------------------------------------- /grunt/dev/tests.js: -------------------------------------------------------------------------------- 1 | var moduleName = 'tests'; 2 | 3 | module.exports = { 4 | 5 | name:moduleName, 6 | 7 | loadConf:function(config,grunt){ 8 | config.execute = { 9 | tests:{ 10 | options:{ 11 | cwd:'tests' 12 | }, 13 | src:['tests/run.js'] 14 | } 15 | }; 16 | }, 17 | 18 | loadTasks:function(grunt){ 19 | grunt.registerTask('test',['execute:tests']); 20 | } 21 | 22 | }; 23 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Mocha Spec Runner 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /tests/.gitignore: -------------------------------------------------------------------------------- 1 | *.png 2 | *.xml 3 | *.log 4 | *.wav 5 | -------------------------------------------------------------------------------- /tests/README.md: -------------------------------------------------------------------------------- 1 | # DocdokuPLM WebFront tests 2 | 3 | These tests are functional tests. The web application and api must be running. 4 | 5 | # Requirements 6 | 7 | * node 8 | * npm 9 | * casperjs 10 | 11 | # Running tests 12 | 13 | Edit config.js according to your environment (or use command line options) 14 | 15 | ``` 16 | npm install; 17 | cd tests; 18 | node run.js 19 | ``` 20 | --------------------------------------------------------------------------------