mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-07 20:31:06 -05:00
32149e652f
When invalid filenames are found during project-copy, the somewhat obscure (and non-localised) 'invalid element name' error is returned. Add a special case to handle this particular error and display something more descriptive to the user. Added a modal error handler for when this error is generated by clicking the 'copy' icon in the project list, instead of using the 'more' dropdown which opens a modal copy dialog bug: overleaf/sharelatex#908 Signed-off-by: Simon Detheridge <s@sd.ai>
380 lines
12 KiB
Text
380 lines
12 KiB
Text
script(type='text/ng-template', id='newTagModalTemplate')
|
|
.modal-header
|
|
button.close(
|
|
type="button"
|
|
data-dismiss="modal"
|
|
ng-click="cancel()"
|
|
) ×
|
|
h3 #{translate("create_new_folder")}
|
|
.modal-body
|
|
form(name="newTagForm", novalidate)
|
|
input.form-control(
|
|
type="text",
|
|
placeholder="New Folder Name",
|
|
required,
|
|
ng-model="inputs.newTagName",
|
|
on-enter="create()",
|
|
focus-on="open",
|
|
stop-propagation="click"
|
|
)
|
|
.modal-footer
|
|
.modal-footer-left
|
|
span.text-danger.error(ng-show="state.error") #{translate("generic_something_went_wrong")}
|
|
//- We stop propagation to stop the clicks from closing the
|
|
//- 'move to folder' menu.
|
|
button.btn.btn-default(
|
|
ng-click="cancel()"
|
|
stop-propagation="click"
|
|
) #{translate("cancel")}
|
|
button.btn.btn-primary(
|
|
ng-disabled="newTagForm.$invalid || state.inflight"
|
|
ng-click="create()"
|
|
stop-propagation="click"
|
|
)
|
|
span(ng-show="!state.inflight") #{translate("create")}
|
|
span(ng-show="state.inflight") #{translate("creating")}...
|
|
|
|
script(type='text/ng-template', id='deleteTagModalTemplate')
|
|
.modal-header
|
|
button.close(
|
|
type="button"
|
|
data-dismiss="modal"
|
|
ng-click="cancel()"
|
|
) ×
|
|
h3 #{translate("delete_folder")}
|
|
.modal-body
|
|
p #{translate("about_to_delete_folder")}
|
|
ul
|
|
li
|
|
strong {{tag.name}}
|
|
.modal-footer
|
|
.modal-footer-left
|
|
span.text-danger.error(ng-show="state.error") #{translate("generic_something_went_wrong")}
|
|
button.btn.btn-default(
|
|
ng-click="cancel()"
|
|
) #{translate("cancel")}
|
|
button.btn.btn-danger(
|
|
ng-click="delete()",
|
|
ng-disabled="state.inflight"
|
|
)
|
|
span(ng-show="state.inflight") #{translate("deleting")}...
|
|
span(ng-show="!state.inflight") #{translate("delete")}
|
|
|
|
script(type='text/ng-template', id='renameTagModalTemplate')
|
|
.modal-header
|
|
button.close(
|
|
type="button"
|
|
data-dismiss="modal"
|
|
ng-click="cancel()"
|
|
) ×
|
|
h3 #{translate("rename_folder")}
|
|
.modal-body
|
|
form(name="renameTagForm", novalidate)
|
|
input.form-control(
|
|
type="text",
|
|
placeholder="Tag Name",
|
|
ng-model="inputs.tagName",
|
|
required,
|
|
on-enter="rename()",
|
|
focus-on="open"
|
|
)
|
|
.modal-footer
|
|
.modal-footer-left
|
|
span.text-danger.error(ng-show="state.error") #{translate("generic_something_went_wrong")}
|
|
button.btn.btn-default(ng-click="cancel()") #{translate("cancel")}
|
|
button.btn.btn-primary(
|
|
ng-click="rename()",
|
|
ng-disabled="renameTagForm.$invalid || state.inflight"
|
|
)
|
|
span(ng-show="!state.inflight") #{translate("rename")}
|
|
span(ng-show="state.inflight") #{translate("renaming")}...
|
|
|
|
script(type='text/ng-template', id='renameProjectModalTemplate')
|
|
.modal-header
|
|
button.close(
|
|
type="button"
|
|
data-dismiss="modal"
|
|
ng-click="cancel()"
|
|
) ×
|
|
h3 #{translate("rename_project")}
|
|
.modal-body
|
|
.alert.alert-danger(ng-show="state.error.message") {{state.error.message}}
|
|
.alert.alert-danger(ng-show="state.error && !state.error.message") #{translate("generic_something_went_wrong")}
|
|
form(name="renameProjectForm", novalidate)
|
|
input.form-control(
|
|
type="text",
|
|
placeholder="Project Name",
|
|
ng-model="inputs.projectName",
|
|
required,
|
|
on-enter="rename()",
|
|
focus-on="open"
|
|
)
|
|
.modal-footer
|
|
button.btn.btn-default(ng-click="cancel()") #{translate("cancel")}
|
|
button.btn.btn-primary(
|
|
ng-click="rename()",
|
|
ng-disabled="renameProjectForm.$invalid || state.inflight"
|
|
)
|
|
span(ng-show="!state.inflight") #{translate("rename")}
|
|
span(ng-show="state.inflight") #{translate("renaming")}...
|
|
|
|
script(type='text/ng-template', id='cloneProjectModalTemplate')
|
|
.modal-header
|
|
button.close(
|
|
type="button"
|
|
data-dismiss="modal"
|
|
ng-click="cancel()"
|
|
) ×
|
|
h3 #{translate("copy_project")}
|
|
.modal-body
|
|
.alert.alert-danger(ng-show="state.error.message") {{state.error.message === "invalid element name" ? translate("invalid_element_name") : state.error.message}}
|
|
.alert.alert-danger(ng-show="state.error && !state.error.message") #{translate("generic_something_went_wrong")}
|
|
form(name="cloneProjectForm", novalidate)
|
|
.form-group
|
|
label #{translate("new_name")}
|
|
input.form-control(
|
|
type="text",
|
|
placeholder="New Project Name",
|
|
required,
|
|
ng-model="inputs.projectName",
|
|
on-enter="clone()",
|
|
focus-on="open"
|
|
)
|
|
.modal-footer
|
|
button.btn.btn-default(
|
|
ng-disabled="state.inflight"
|
|
ng-click="cancel()"
|
|
) #{translate("cancel")}
|
|
button.btn.btn-primary(
|
|
ng-disabled="cloneProjectForm.$invalid || state.inflight"
|
|
ng-click="clone()"
|
|
)
|
|
span(ng-hide="state.inflight") #{translate("copy")}
|
|
span(ng-show="state.inflight") #{translate("copying")} ...
|
|
|
|
script(type='text/ng-template', id='newProjectModalTemplate')
|
|
.modal-header
|
|
button.close(
|
|
type="button"
|
|
data-dismiss="modal"
|
|
ng-click="cancel()"
|
|
) ×
|
|
h3 #{translate("new_project")}
|
|
.modal-body
|
|
.alert.alert-danger(ng-show="state.error.message") {{state.error.message}}
|
|
.alert.alert-danger(ng-show="state.error && !state.error.message") #{translate("generic_something_went_wrong")}
|
|
form(novalidate, name="newProjectForm")
|
|
input.form-control(
|
|
type="text",
|
|
placeholder="Project Name",
|
|
required,
|
|
ng-model="inputs.projectName",
|
|
on-enter="create()",
|
|
focus-on="open"
|
|
)
|
|
.modal-footer
|
|
button.btn.btn-default(
|
|
ng-disabled="state.inflight"
|
|
ng-click="cancel()"
|
|
) #{translate("cancel")}
|
|
button.btn.btn-primary(
|
|
ng-disabled="newProjectForm.$invalid || state.inflight"
|
|
ng-click="create()"
|
|
)
|
|
span(ng-hide="state.inflight") #{translate("create")}
|
|
span(ng-show="state.inflight") #{translate("creating")} ...
|
|
|
|
script(type='text/ng-template', id='deleteProjectsModalTemplate')
|
|
.modal-header
|
|
button.close(
|
|
type="button"
|
|
data-dismiss="modal"
|
|
ng-click="cancel()"
|
|
) ×
|
|
h3(ng-if="action == 'delete'") #{translate("delete_projects")}
|
|
h3(ng-if="action == 'archive'") #{translate("archive_projects")}
|
|
h3(ng-if="action == 'leave'") #{translate("leave_projects")}
|
|
h3(ng-if="action == 'delete-and-leave'") #{translate("delete_and_leave_projects")}
|
|
h3(ng-if="action == 'archive-and-leave'") #{translate("archive_and_leave_projects")}
|
|
.modal-body
|
|
div(ng-show="projectsToDelete.length > 0")
|
|
p(ng-if="action == 'delete' || action == 'delete-and-leave'") #{translate("about_to_delete_projects")}
|
|
p(ng-if="action == 'archive' || action == 'archive-and-leave'") #{translate("about_to_archive_projects")}
|
|
ul
|
|
li(ng-repeat="project in projectsToDelete | orderBy:'name'")
|
|
strong {{project.name}}
|
|
div(ng-show="projectsToLeave.length > 0")
|
|
p #{translate("about_to_leave_projects")}
|
|
ul
|
|
li(ng-repeat="project in projectsToLeave | orderBy:'name'")
|
|
strong {{project.name}}
|
|
.modal-footer
|
|
button.btn.btn-default(
|
|
ng-click="cancel()"
|
|
) #{translate("cancel")}
|
|
button.btn.btn-danger(
|
|
ng-click="delete()"
|
|
) #{translate("confirm")}
|
|
|
|
script(type="text/template", id="qq-project-uploader-template")
|
|
div.qq-uploader-selector
|
|
div(qq-hide-dropzone="").qq-upload-drop-area-selector.qq-upload-drop-area
|
|
span.qq-upload-drop-area-text-selector #{translate('drop_files_here_to_upload')}
|
|
div.qq-upload-button-selector.btn.btn-primary.btn-lg
|
|
div #{translate('select_a_zip_file')}
|
|
span.or.btn-lg #{translate('or')}
|
|
span.drag-here.btn-lg #{translate('drag_a_zip_file')}
|
|
span.qq-drop-processing-selector
|
|
span #{translate('creating_project')}
|
|
span.qq-drop-processing-spinner-selector
|
|
ul.qq-upload-list-selector
|
|
li
|
|
div.qq-progress-bar-container-selector
|
|
div(
|
|
role="progressbar"
|
|
aria-valuenow="0"
|
|
aria-valuemin="0"
|
|
aria-valuemax="100"
|
|
class="qq-progress-bar-selector qq-progress-bar"
|
|
)
|
|
span.qq-upload-file-selector.qq-upload-file
|
|
span.qq-upload-size-selector.qq-upload-size
|
|
a(type="button").qq-btn.qq-upload-cancel-selector.qq-upload-cancel #{translate('cancel')}
|
|
button(type="button").qq-btn.qq-upload-retry-selector.qq-upload-retry #{translate('retry')}
|
|
span(role="status").qq-upload-status-text-selector.qq-upload-status-text
|
|
|
|
script(type="text/ng-template", id="uploadProjectModalTemplate")
|
|
.modal-header
|
|
button.close(
|
|
type="button"
|
|
data-dismiss="modal"
|
|
ng-click="cancel()"
|
|
) ×
|
|
h3 #{translate("upload_zipped_project")}
|
|
.modal-body(
|
|
fine-upload
|
|
endpoint="/project/new/upload"
|
|
template-id="qq-project-uploader-template"
|
|
multiple="false"
|
|
allowed-extensions="['zip']"
|
|
on-complete-callback="onComplete"
|
|
)
|
|
.modal-footer
|
|
button.btn.btn-default(ng-click="cancel()") #{translate("cancel")}
|
|
|
|
script(type="text/ng-template", id="showErrorModalTemplate")
|
|
.modal-header
|
|
button.close(
|
|
type="button"
|
|
data-dismiss="modal"
|
|
ng-click="cancel()"
|
|
) ×
|
|
h3 #{translate("generic_something_went_wrong")}
|
|
.modal-body
|
|
.alert.alert-danger(ng-show="error.message") {{error.message === "invalid element name" ? translate("invalid_element_name") : error.message}}
|
|
.alert.alert-danger(ng-show="error && !error.message") #{translate("generic_something_went_wrong")}
|
|
.modal-footer
|
|
button.btn.btn-default(ng-click="cancel()") #{translate("cancel")}
|
|
|
|
script(type="text/ng-template", id="userProfileModalTemplate")
|
|
.modal-header
|
|
button.close(
|
|
type="button"
|
|
data-dismiss="modal"
|
|
ng-click="done()"
|
|
) ×
|
|
h3 #{translate("your_profile")}
|
|
.modal-body
|
|
form(enctype='multipart/form-data', method='post')
|
|
|
|
.form-group
|
|
label(for="first_name") #{translate("first_name")}
|
|
input.form-control(
|
|
type='text',
|
|
name='first_name',
|
|
ng-model="userInfoForm.first_name",
|
|
placeholder="First Name",
|
|
select-when="formVisable"
|
|
)
|
|
|
|
.form-group
|
|
label(for="last_name") #{translate("last_name")}
|
|
input.form-control(
|
|
type='text',
|
|
name='last_name',
|
|
ng-model="userInfoForm.last_name",
|
|
placeholder='Last Name'
|
|
)
|
|
|
|
.form-group.user_details_auto_complete
|
|
label(for="institution") #{translate("institution")}
|
|
autocomplete(
|
|
ng-model="userInfoForm.institution",
|
|
name="institution",
|
|
data="institutions",
|
|
on-type="updateInstitutionsList",
|
|
attr-placeholder="Institution",
|
|
attr-inputclass="form-control"
|
|
)
|
|
|
|
.form-group.user_details_auto_complete
|
|
label(for="role") #{translate("role")}
|
|
autocomplete(
|
|
ng-model="userInfoForm.role",
|
|
name="role",
|
|
data="roles",
|
|
attr-placeholder="Role",
|
|
attr-inputclass="form-control"
|
|
)
|
|
|
|
|
|
.modal-footer
|
|
button.btn.btn-info(ng-click="done()") #{translate("done")}
|
|
|
|
script(type="text/ng-template", id="v1ImportModalTemplate")
|
|
.modal-header
|
|
button.close(ng-click="dismiss()") ×
|
|
h3 Move Project to Overleaf v2
|
|
|
|
.modal-body.v1-import-wrapper
|
|
.v1-import-row
|
|
.v1-import-col.v1-import-col--left
|
|
img.v1-import-img(
|
|
src="/img/v1-import/v2-editor.png"
|
|
alt="The new V2 editor."
|
|
)
|
|
.v1-import-col
|
|
h2.v1-import-title #[strong Warning:] Some Overleaf v1 features aren't supported yet
|
|
p We are still working hard to bring some Overleaf v1 features to the v2 editor. In v2:
|
|
ul
|
|
li
|
|
| <strong>Direct git access to your projects</strong> is not yet available, but you can migrate your project to the Overleaf v2 GitHub integration
|
|
|
|
|
a(href='https://www.overleaf.com/help/343-working-offline-in-overleaf-v2', target='_blank') Read More.
|
|
li There are <strong>no Zotero and CiteULike</strong> integrations yet
|
|
li Some <strong>Journals and Services in the Submit menu</strong> don't support direct submissions yet
|
|
.v1-import-cta
|
|
p
|
|
strong Please note: you cannot move this project back to v1 once you have moved it to v2.
|
|
p Are you sure you want to move #[strong {{project.name}}] into Overleaf v2?
|
|
|
|
.modal-footer.v1-import-footer
|
|
form(
|
|
async-form="v1Import",
|
|
name="v1ImportForm",
|
|
action="{{'/overleaf/project/'+ project.id + '/import'}}"
|
|
method="POST"
|
|
ng-cloak
|
|
)
|
|
input(name='_csrf', type='hidden', value=csrfToken)
|
|
form-messages(for="v1ImportForm")
|
|
if settings.overleaf && settings.overleaf.host
|
|
a.btn.btn-primary.v1-import-btn(
|
|
ng-href='/sign_in_to_v1?return_to=/{{project.id}}'
|
|
ng-class="{disabled: v1ImportForm.inflight || v1ImportForm.response.success}"
|
|
) No thanks, open in v1
|
|
input.btn.btn-primary.v1-import-btn(
|
|
type="submit",
|
|
value="Yes, move project to v2"
|
|
ng-disabled="v1ImportForm.inflight || v1ImportForm.response.success"
|
|
)
|