overleaf/services/web/app/views/project/list.jade

467 lines
14 KiB
Text
Raw Normal View History

2014-02-12 05:23:40 -05:00
extends ../layout
2014-06-11 09:52:23 -04:00
block scripts
script(type="text/javascript").
2014-06-11 11:32:56 -04:00
window.data = {
2014-06-16 08:34:38 -04:00
projects: !{JSON.stringify(projects)},
tags: !{JSON.stringify(tags)}
2014-06-11 11:32:56 -04:00
};
2014-06-17 11:19:40 -04:00
window.algolia = {
institutions: {
app_id: '#{algolia_app_id}',
api_key: '#{algolia_api_key}'
}
};
2014-06-04 12:46:22 -04:00
block content
2014-06-17 07:43:42 -04:00
.content.content-alt(ng-controller="ProjectPageController")
.container
2014-06-11 09:52:23 -04:00
.row
2014-06-19 08:30:45 -04:00
.col-md-2
.dropdown
2014-06-17 07:43:42 -04:00
a.btn.btn-primary.dropdown-toggle(
href="#",
data-toggle="dropdown"
) New Project
ul.dropdown-menu(role="menu")
li
2014-06-13 11:05:44 -04:00
a(
2014-07-07 09:58:12 -04:00
href,
2014-06-13 11:05:44 -04:00
ng-click="openCreateProjectModal()"
) Blank Project
li
2014-06-13 11:05:44 -04:00
a(
2014-07-07 09:58:12 -04:00
href,
2014-06-13 11:05:44 -04:00
ng-click="openCreateProjectModal('example')"
2014-06-13 12:11:36 -04:00
) Example Project
li
2014-06-13 12:11:36 -04:00
a(
2014-07-07 09:58:12 -04:00
href,
2014-06-13 12:11:36 -04:00
ng-click="openUploadProjectModal()"
) Upload Project
li.divider
li.dropdown-header Templates
li
a.menu-indent(href="/templates/cv") CV or Resume
li
a.menu-indent(href="/templates/cover-letters") Cover Letter
li
a.menu-indent(href="/templates/journals") Journal Article
li
a.menu-indent(href="/templates/presentations") Presentation
li
a.menu-indent(href="/templates/thesis") Thesis
li
a.menu-indent(href="/templates/bibliographies") Bibliographies
li
a.menu-indent(href="/templates") View All »
2014-07-07 09:58:12 -04:00
.row-spaced(ng-if="projects.length > 0", ng-cloak)
2014-06-18 11:49:29 -04:00
ul.list-unstyled.folders-menu(
ng-controller="TagListController"
)
2014-06-16 09:45:47 -04:00
li(ng-class="{active: (filter == 'all')}")
2014-06-19 08:30:45 -04:00
a(href, ng-click="filterProjects('all')") All projects
2014-06-16 09:45:47 -04:00
li(ng-class="{active: (filter == 'owned')}")
2014-06-19 08:30:45 -04:00
a(href, ng-click="filterProjects('owned')") Your projects
2014-06-16 09:45:47 -04:00
li(ng-class="{active: (filter == 'shared')}")
2014-06-19 08:30:45 -04:00
a(href, ng-click="filterProjects('shared')") Shared projects
2014-06-16 10:06:58 -04:00
li(ng-class="{active: (filter == 'archived')}")
2014-06-19 08:30:45 -04:00
a(href, ng-click="filterProjects('archived')") Deleted projects
2014-07-07 10:54:40 -04:00
li(ng-if="tags.length > 0")
h2 Folders
2014-06-13 08:55:55 -04:00
li(
ng-repeat="tag in tags | filter:nonEmpty",
2014-06-13 08:55:55 -04:00
ng-controller="TagListItemController",
2014-06-18 11:49:29 -04:00
ng-class="{active: tag.selected}",
ng-cloak
2014-06-13 08:55:55 -04:00
)
2014-06-19 08:30:45 -04:00
a(href="#", ng-click="selectTag()")
2014-06-13 08:55:55 -04:00
i.icon.fa(
2014-06-13 12:11:36 -04:00
ng-class="{\
'fa-folder-open-o': tag.selected,\
'fa-folder-o': !tag.selected\
}"
2014-06-13 08:55:55 -04:00
)
2014-06-12 11:21:12 -04:00
| {{tag.name}}
2014-06-19 08:30:45 -04:00
span.subdued ({{tag.project_ids.length}})
2014-02-12 05:23:40 -05:00
2014-07-07 09:58:12 -04:00
.row-spaced(ng-if="projects.length == 0", ng-cloak)
.first-project
div
i.fa.fa-arrow-up.fa-2x
div
strong Create your first project!
- if (showUserDetailsArea)
2014-07-07 11:22:38 -04:00
.row-spaced#userProfileInformation(ng-if="projects.length > 0", ng-cloak)
2014-07-07 09:58:12 -04:00
div(ng-controller="UserProfileController")
2014-07-07 11:22:38 -04:00
hr(ng-show="percentComplete < 100")
.text-centered.user-profile(ng-show="percentComplete < 100")
2014-06-17 11:19:40 -04:00
.progress
2014-06-20 06:15:25 -04:00
.progress-bar.progress-bar-info(ng-style="{'width' : (percentComplete+'%')}")
2014-06-12 10:50:00 -04:00
2014-07-07 09:58:12 -04:00
p.small
| Your profile is
strong {{percentComplete}}%
| complete
2014-06-17 11:19:40 -04:00
2014-07-07 11:22:38 -04:00
button#completeUserProfileInformation.btn.btn-info(
2014-07-07 09:58:12 -04:00
ng-hide="formVisable",
ng-click="openUserProfileModal()"
) Complete
2014-06-17 11:19:40 -04:00
2014-07-07 11:22:38 -04:00
-if (settings.enableSubscriptions && !hasSubscription)
.row-spaced(ng-if="projects.length > 0", ng-cloak).text-centered
hr
p.small You are using the free version of ShareLaTeX.
p
a(href="/user/subscription/plans").btn.btn-primary Upgrade
p.small
| or unlock some free bonus features by
a(href="/user/bonus") sharing ShareLaTeX.
2014-06-19 08:30:45 -04:00
.col-md-10
.container-fluid
.row
.col-md-12
form.project-search.form-horizontal(role="form")
2014-06-18 06:53:18 -04:00
.form-group.has-feedback.has-feedback-left.col-md-7
2014-06-13 08:55:55 -04:00
input.form-control.col-md-7(
placeholder='Search projects…',
autofocus='autofocus',
2014-06-18 06:53:18 -04:00
ng-model="searchText",
focus-on='search:clear'
)
i.fa.fa-search.form-control-feedback-left
i.fa.fa-times.form-control-feedback(
ng-click="clearSearchText()",
style="cursor: pointer;",
ng-show="searchText.length > 0"
2014-06-13 08:55:55 -04:00
)
//- i.fa.fa-remove
2014-02-12 05:23:40 -05:00
2014-06-18 11:49:29 -04:00
.project-tools(ng-cloak)
2014-06-16 10:06:58 -04:00
.btn-toolbar(ng-show="filter != 'archived'")
.btn-group(ng-hide="selectedProjects.length < 1")
2014-06-13 08:55:55 -04:00
a.btn.btn-default(
href='#',
2014-06-18 11:46:56 -04:00
tooltip="Download",
tooltip-placement="bottom",
2014-06-18 11:43:37 -04:00
ng-click="downloadSelectedProjects()"
2014-06-13 08:55:55 -04:00
)
i.fa.fa-cloud-download
2014-06-13 08:55:55 -04:00
a.btn.btn-default(
href='#',
2014-06-18 11:46:56 -04:00
tooltip="Delete",
tooltip-placement="bottom",
2014-06-16 11:13:09 -04:00
ng-click="openArchiveProjectsModal()"
2014-06-13 08:55:55 -04:00
)
i.fa.fa-trash-o
2014-06-06 14:37:04 -04:00
2014-06-16 09:45:47 -04:00
.btn-group.dropdown(ng-hide="selectedProjects.length < 1")
2014-06-13 08:55:55 -04:00
a.btn.btn-default.dropdown-toggle(
href="#",
2014-06-18 11:46:56 -04:00
data-toggle="dropdown",
tooltip="Add to folders",
tooltip-placement="bottom"
2014-06-13 08:55:55 -04:00
)
i.fa.fa-folder-open-o
|
span.caret
2014-06-13 08:55:55 -04:00
ul.dropdown-menu.dropdown-menu-right.js-tags-dropdown-menu(
role="menu"
ng-controller="TagListController"
2014-06-13 08:55:55 -04:00
)
li.dropdown-header Add to folder
2014-06-13 08:55:55 -04:00
li(
ng-repeat="tag in tags | filter:nonEmpty | orderBy:'name'",
2014-06-13 08:55:55 -04:00
ng-controller="TagDropdownItemController"
)
a(href="#", ng-click="addOrRemoveProjectsFromTag()", stop-propagation="click")
2014-06-13 08:55:55 -04:00
i.fa(
ng-class="{\
2014-06-16 09:45:47 -04:00
'fa-check-square-o': areSelectedProjectsInTag == true,\
'fa-square-o': areSelectedProjectsInTag == false,\
'fa-minus-square-o': areSelectedProjectsInTag == 'partial'\
2014-06-13 08:55:55 -04:00
}"
)
| {{tag.name}}
2014-06-13 08:55:55 -04:00
li.divider
li
a(href="#", ng-click="openNewTagModal()", stop-propagation="click") Create New Folder
2014-06-06 14:37:04 -04:00
.btn-group(ng-hide="selectedProjects.length != 1").dropdown
2014-06-13 10:24:20 -04:00
a.btn.btn-default.dropdown-toggle(
href='#',
data-toggle="dropdown"
) More
span.caret
ul.dropdown-menu.dropdown-menu-right(role="menu")
li(ng-show="getFirstSelectedProject().accessLevel == 'owner'")
2014-06-13 10:24:20 -04:00
a(
href='#',
ng-click="openRenameProjectModal()"
) Rename
2014-06-16 10:32:20 -04:00
li
a(
href='#',
ng-click="openCloneProjectModal()"
) Make a copy
2014-06-16 10:06:58 -04:00
.btn-toolbar(ng-show="filter == 'archived'")
.btn-group(ng-hide="selectedProjects.length < 1")
a.btn.btn-default(
href='#',
data-original-title="Restore",
data-toggle="tooltip",
data-placement="bottom",
ng-click="restoreSelectedProjects()"
) Restore
.btn-group(ng-hide="selectedProjects.length < 1")
a.btn.btn-danger(
href='#',
data-original-title="Delete Forever",
data-toggle="tooltip",
data-placement="bottom",
ng-click="openDeleteProjectsModal()"
2014-06-16 10:06:58 -04:00
) Delete Forever
.row.row-spaced
.col-md-12
.card.card-thin
ul.list-unstyled.project-list.structured-list(
2014-07-07 09:58:12 -04:00
select-all-list,
ng-if="projects.length > 0",
ng-cloak
)
li.container-fluid
.row
.col-md-6
input.select-all(
select-all,
type="checkbox"
)
| TITLE
2014-07-07 09:58:12 -04:00
.col-md-2
| OWNER
2014-07-07 09:58:12 -04:00
.col-md-4
| LAST MODIFIED
2014-07-07 09:58:12 -04:00
li.project_entry.container-fluid(
ng-repeat="project in visibleProjects | orderBy:'lastUpdated':true",
ng-controller="ProjectListItemController"
)
.row
.col-md-6
input.select-item(
select-individual,
type="checkbox",
ng-model="project.selected"
)
span.title
a.projectName(href="/project/{{project.id}}") {{project.name}}
span
span.label.label-default(ng-repeat='tag in project.tags')
| {{tag.name}}
.col-md-2
span.owner {{ownerName()}}
.col-md-4
span.last-modified.isoDate {{project.lastUpdated | formatDate}}
li(
ng-if="visibleProjects.length == 0",
ng-cloak
)
.row
.col-md-12.text-centered
small No projects
div.welcome.text-centered(ng-if="projects.length == 0", ng-cloak)
h2 Welcome to ShareLaTeX!
p New to LaTeX? Start by having a look at our
a(href="/templates") templates
| or
a(href="/learn") help guides
| ,
br
| or create your first project on the left.
2014-06-13 08:55:55 -04:00
script(type='text/ng-template', id='newTagModalTemplate')
.modal-header
h3 Create New Folder
.modal-body
2014-06-18 10:23:00 -04:00
form(name="newTagForm", novalidate)
input.form-control(
type="text",
placeholder="New Folder Name",
required,
ng-model="inputs.newTagName",
2014-06-22 15:08:56 -04:00
on-enter="create()",
2014-06-18 10:23:00 -04:00
focus-on="open"
)
2014-06-13 08:55:55 -04:00
.modal-footer
button.btn.btn-default(ng-click="cancel()") Cancel
2014-06-18 10:23:00 -04:00
button.btn.btn-primary(
ng-disabled="newTagForm.$invalid"
ng-click="create()"
) Create
2014-06-13 10:24:20 -04:00
script(type='text/ng-template', id='renameProjectModalTemplate')
.modal-header
h3 Rename Project
.modal-body
2014-06-18 10:23:00 -04:00
form(name="renameProjectForm", novalidate)
input.form-control(
type="text",
placeholder="Project Name",
ng-model="inputs.projectName",
required,
2014-06-22 15:08:56 -04:00
on-enter="rename()",
2014-06-18 10:23:00 -04:00
focus-on="open"
)
2014-06-13 10:24:20 -04:00
.modal-footer
button.btn.btn-default(ng-click="cancel()") Cancel
2014-06-18 10:23:00 -04:00
button.btn.btn-primary(
ng-click="rename()",
ng-disabled="renameProjectForm.$invalid"
) Rename
2014-06-13 11:05:44 -04:00
2014-06-16 10:32:20 -04:00
script(type='text/ng-template', id='cloneProjectModalTemplate')
.modal-header
h3 Copy Project
.modal-body
2014-06-18 10:23:00 -04:00
form(name="cloneProjectForm", novalidate)
.form-group
label New Name
input.form-control(
type="text",
placeholder="New Project Name",
required,
ng-model="inputs.projectName",
2014-06-22 15:08:56 -04:00
on-enter="clone()",
2014-06-18 10:23:00 -04:00
focus-on="open"
)
2014-06-16 10:32:20 -04:00
.modal-footer
button.btn.btn-default(
ng-disabled="state.inflight"
ng-click="cancel()"
) Cancel
button.btn.btn-primary(
2014-06-18 10:23:00 -04:00
ng-disabled="cloneProjectForm.$invalid || state.inflight"
2014-06-16 10:32:20 -04:00
ng-click="clone()"
)
span(ng-hide="state.inflight") Copy
span(ng-show="state.inflight") Copying...
2014-06-13 11:05:44 -04:00
script(type='text/ng-template', id='newProjectModalTemplate')
.modal-header
h3 New Project
.modal-body
2014-06-18 10:23:00 -04:00
form(novalidate, name="newProjectForm")
input.form-control(
type="text",
placeholder="Project Name",
required,
ng-model="inputs.projectName",
2014-06-22 15:08:56 -04:00
on-enter="create()",
2014-06-18 10:23:00 -04:00
focus-on="open"
)
2014-06-13 11:05:44 -04:00
.modal-footer
button.btn.btn-default(
ng-disabled="state.inflight"
ng-click="cancel()"
) Cancel
button.btn.btn-primary(
2014-06-18 10:23:00 -04:00
ng-disabled="newProjectForm.$invalid || state.inflight"
2014-06-13 11:05:44 -04:00
ng-click="create()"
)
span(ng-hide="state.inflight") Create
span(ng-show="state.inflight") Creating...
2014-06-13 12:11:36 -04:00
2014-06-16 11:13:09 -04:00
script(type='text/ng-template', id='deleteProjectsModalTemplate')
.modal-header
h3 {{action}} Projects
.modal-body
div(ng-show="projectsToDelete.length > 0")
p You are about to delete the following projects:
ul
li(ng-repeat="project in projectsToDelete | orderBy:'name'")
strong {{project.name}}
div(ng-show="projectsToLeave.length > 0")
p You are about to leave the following projects:
ul
li(ng-repeat="project in projectsToLeave | orderBy:'name'")
strong {{project.name}}
.modal-footer
button.btn.btn-default(
ng-click="cancel()"
) Cancel
button.btn.btn-danger(
ng-click="delete()"
) {{action}}
2014-06-13 12:11:36 -04:00
script(type="text/ng-template", id="uploadProjectModalTemplate")
.modal-header
h3 Upload Zipped Project
2014-06-22 12:32:15 -04:00
.modal-body(
fine-upload
endpoint="/project/new/upload"
waiting-for-response-text="Creating project..."
failed-upload-text="Upload failed. Is it a valid zip file?"
upload-button-text="Select a .zip file"
drag-area-text="drag .zip file"
multiple="false"
allowed-extensions="['zip']"
on-complete-callback="onComplete"
)
2014-06-13 12:11:36 -04:00
span Upload a zipped project
.modal-footer
2014-06-16 11:13:09 -04:00
button.btn.btn-default(ng-click="cancel()") Cancel
2014-07-07 09:58:12 -04:00
script(type="text/ng-template", id="userProfileModalTemplate")
.modal-header
h3 Your Profile
.modal-body
form(enctype='multipart/form-data', method='post')
.form-group
label(for="first_name") First Name
input.form-control(
type='text',
name='first_name',
ng-model="userInfoForm.first_name",
ng-blur="sendUpdate()",
placeholder="First Name",
select-when="formVisable"
)
.form-group
label(for="last_name") Last Name
input.form-control(
type='text',
name='last_name',
ng-model="userInfoForm.last_name",
ng-blur="sendUpdate()",
placeholder='Last Name'
)
.form-group#institution_auto_complete
label(for="institution") Institution
autocomplete(
ng-model="userInfoForm.institution",
name="institution",
data="institutions",
ng-blur="sendUpdate()",
on-type="updateInstitutionsList",
attr-placeholder="Institution",
attr-inputclass="form-control"
)
.form-group
label(for="role") Role
input.form-control(
type='text',
name='role',
ng-model="userInfoForm.role",
placeholder='Role',
ng-blur="sendUpdate()",
2014-07-07 11:25:18 -04:00
typeahead="role for role in roles | filter:$viewValue"
2014-07-07 09:58:12 -04:00
)
.modal-footer
button.btn.btn-info(ng-click="done()") Done