2015-05-05 03:10:25 +02:00
< section class = "heading b-b" >
< div class = "row no-gutter" >
< div class = "col-xs-2 col-sm-2 col-md-1" >
< section class = "heading-btn" >
2022-01-11 11:03:27 +01:00
< a ng-click = "backPrevLocation($event)" > < i class = "fas fa-long-arrow-alt-left " > < / i > < / a >
2015-05-05 03:10:25 +02:00
< / section >
< / div >
< div class = "col-xs-10 col-sm-10 col-md-8 b-l b-r-md" >
< section class = "heading-title" >
2019-12-16 16:54:40 +01:00
< h1 translate > {{ 'app.public.projects_list.the_fablab_projects' }}< / h1 >
2015-05-05 03:10:25 +02:00
< / section >
< / div >
2020-04-29 18:21:06 +02:00
< div class = "col-xs-12 col-sm-12 col-md-3 b-t hide-b-md" ng-if = "isAuthorized(['admin','member', 'manager'])" >
2015-05-05 03:10:25 +02:00
< section class = "heading-actions wrapper" >
2019-12-16 16:54:40 +01:00
< a class = "btn btn-lg btn-warning bg-white b-2x rounded m-t-sm upper text-sm" ui-sref = "app.logged.projects_new" role = "button" translate > {{ 'app.public.projects_list.add_a_project' }}< / a >
2015-05-05 03:10:25 +02:00
< / section >
< / div >
< / div >
< / section >
2023-01-20 18:17:50 +01:00
< section class = "projects" >
< div class = "projects-filters" >
< header >
2023-07-03 11:42:29 +02:00
< h3 translate > {{ 'app.public.projects_list.filter' }}< / h3 >
2023-01-20 18:17:50 +01:00
< a href = "javascript:void(0);" class = "fab-button is-black" name = "button" ng-click = "resetFiltersAndTriggerSearch()" ng-show = "!openlab.searchOverWholeNetwork" > {{ 'app.public.projects_list.reset_all_filters' | translate }}< / a >
< / header >
< span class = "switch" ng-if = "openlab.projectsActive" uib-tooltip = "{{ 'app.public.projects_list.tooltip_openlab_projects_switch' | translate }}" tooltip-trigger = "mouseenter" >
< label for = "searchOverWholeNetwork" class = "control-label text-sm" translate > {{ 'app.public.projects_list.network_search' }}< / label >
< input bs-switch
ng-model="openlab.searchOverWholeNetwork"
type="checkbox"
class="form-control"
switch-on-text="{{ 'app.shared.buttons.yes' | translate }}"
switch-off-text="{{ 'app.shared.buttons.no' | translate }}"
switch-animate="true"
ng-change="searchOverWholeNetworkChanged()"
/>
< / span >
2015-05-05 03:10:25 +02:00
2023-01-20 18:17:50 +01:00
< form role = "form" ng-submit = "setUrlQueryParams(search) && triggerSearch()" >
< div class = "keywords" >
< input type = "search" class = "form-control" placeholder = "{{ 'app.public.projects_list.keywords' | translate }}" ng-model = "search.q" / >
< button type = "submit" class = "fab-button fab-button--icon-only is-secondary" > < i class = "fas fa-search" > < / i > < / button >
<!-- <button type="submit" class="btn btn - warning" translate>{{ 'app.public.projects_list.search' }}</button> -->
2016-04-22 18:17:55 +02:00
< / div >
2023-01-20 18:17:50 +01:00
< / form >
2015-05-05 03:10:25 +02:00
2023-01-20 18:17:50 +01:00
< div class = "grp" ng-if = "!openlab.searchOverWholeNetwork" >
< select ng-show = "isAuthenticated()" ng-model = "search.from" ng-change = "setUrlQueryParams(search) && triggerSearch()" class = "form-control" >
< option value = "" translate > {{ 'app.public.projects_list.all_projects' }}< / option >
< option value = "mine" translate > {{ 'app.public.projects_list.my_projects' }}< / option >
< option value = "collaboration" translate > {{ 'app.public.projects_list.projects_to_whom_i_take_part_in' }}< / option >
< / select >
2015-05-05 03:10:25 +02:00
2023-01-20 18:17:50 +01:00
< select ng-model = "search.machine_id" ng-change = "setUrlQueryParams(search) && triggerSearch()" class = "form-control" ng-options = "m.id as m.name for m in machines" >
< option value = "" translate > {{ 'app.public.projects_list.all_machines' }}< / option >
< / select >
2015-05-05 03:10:25 +02:00
2023-01-20 18:17:50 +01:00
< select ng-model = "search.theme_id" ng-change = "setUrlQueryParams(search) && triggerSearch()" class = "form-control" ng-options = "t.id as t.name for t in themes" >
< option value = "" translate > {{ 'app.public.projects_list.all_themes' }}< / option >
< / select >
2016-05-02 16:10:48 +02:00
2023-06-29 08:47:42 +02:00
< select ng-model = "search.project_category_id" ng-change = "setUrlQueryParams(search) && triggerSearch()" class = "form-control" ng-options = "pc.id as pc.name for pc in projectCategories" >
< option value = "" translate > {{ projectCategoriesFilterPlaceholder }}< / option >
< / select >
2023-01-20 18:17:50 +01:00
< select ng-model = "search.component_id" ng-change = "setUrlQueryParams(search) && triggerSearch()" class = "form-control" ng-options = "t.id as t.name for t in components" >
< option value = "" translate > {{ 'app.public.projects_list.all_materials' }}< / option >
< / select >
2016-09-29 11:54:08 +02:00
2023-06-29 14:32:06 +02:00
< ui-select ng-if = "currentUser && memberFilterPresence" ng-model = "searchMember" on-select = "setSearchMemberId(searchMember) && setUrlQueryParams(search) && triggerSearch()" >
< ui-select-match allow-clear = "true" placeholder = "{{ 'app.public.projects_list.filter_by_member' | translate }}" >
< span ng-bind = "$select.selected.name" > < / span >
< / ui-select-match >
< ui-select-choices repeat = "m in matchingMembers" refresh = "autoCompleteMemberName($select.search)" refresh-delay = "300" >
< span ng-bind-html = "m.name | highlight: $select.search" > < / span >
< / ui-select-choices >
< / ui-select >
2023-07-03 11:42:29 +02:00
< label class = "form-group m-n" ng-if = "dateFiltersPresence" >
< div class = "form-item-header" >
< p translate > {{ 'app.public.projects_list.created_from' }}< / p >
< / div >
< input class = "form-control"
ng-model="search.from_date"
ng-model-options='{ debounce: 1000 }'
ng-change="setUrlQueryParams(search) & & triggerSearch()"
type="date"
min="2000-01-01"
max="2060-01-01"/>
< / label >
< label class = "form-group m-n" ng-if = "dateFiltersPresence" >
< div class = "form-item-header" >
< p translate > {{ 'app.public.projects_list.created_to' }}< / p >
< / div >
< input class = "form-control"
ng-model="search.to_date"
ng-model-options='{ debounce: 1000 }'
ng-change="setUrlQueryParams(search) & & triggerSearch()"
type="date"
min="2000-01-01"
max="2060-01-01"/>
< / label >
2023-01-20 18:17:50 +01:00
< status-filter on-filter-change = "onStatusChange" current-status-index = "search.status_id" / >
< / div >
2023-06-30 11:15:37 +02:00
< div class = "text-center m m-b-lg" ng-if = "!openlab.searchOverWholeNetwork && (projects.length != 0) && (isAuthorized('admin') || isAuthorized('manager'))" >
< a class = "btn bg-light text-black" ng-href = "{{ zipUrl }}" target = "_blank" >
< i class = "fa fa-download" > < / i > {{ 'app.public.projects_list.download_archive' | translate }}
< / a >
< / div >
2023-01-20 18:17:50 +01:00
< / div >
2015-05-05 03:10:25 +02:00
2023-01-20 18:17:50 +01:00
< div class = "projects-list" >
< span ng-show = "projects && (projects.length == 0)" > {{ 'app.public.projects_list.project_search_result_is_empty' | translate }} < / span >
< div class = "project-card" ng-repeat = "project in projects" ng-click = "showProject(project)" >
< div class = "project-image" style = "background-image: url({{project.project_image}});" >
< img src = "data:image/png;base64," data-src = "holder.js/100%x100%/text:/font:'Font Awesome 5 Free'/icon" bs-holder ng-if = "!project.project_image" >
2016-03-23 18:39:41 +01:00
< / div >
2016-05-02 16:10:48 +02:00
2023-01-20 18:17:50 +01:00
< div class = "project-info" >
2019-12-16 16:54:40 +01:00
< span class = "badge" ng-if = "project.state == 'draft'" translate > {{ 'app.public.projects_list.rough_draft' }}< / span >
2023-01-20 18:17:50 +01:00
< p class = "name" > {{project.name}}< / p >
< span class = "openlab" ng-if = "openlab.searchOverWholeNetwork" > < i class = "fa fa-tag" > < / i > {{ project.app_name }}< / span >
2016-06-01 10:47:00 +02:00
< / div >
2016-03-23 18:39:41 +01:00
< / div >
2023-01-20 18:17:50 +01:00
< a class = "btn btn-warning" ng-click = "loadMore()" ng-if = "projectsPagination.hasNextPage()" translate > {{ 'app.public.projects_list.load_next_projects' }}< / a >
2015-05-05 03:10:25 +02:00
< / div >
< / section >