diff --git a/public/globals.js b/public/globals.js index 0ae6174a0..52d3e0337 100644 --- a/public/globals.js +++ b/public/globals.js @@ -46,12 +46,23 @@ window.pkp = { REVIEW_ASSIGNMENT_STATUS_THANKED: 9, REVIEW_ASSIGNMENT_STATUS_CANCELLED: 10, REVIEW_ASSIGNMENT_STATUS_REQUEST_RESEND: 11, + REVIEW_ROUND_STATUS_REVISIONS_REQUESTED: 1, + REVIEW_ROUND_STATUS_RESUBMIT_FOR_REVIEW: 2, + REVIEW_ROUND_STATUS_SENT_TO_EXTERNAL: 3, + REVIEW_ROUND_STATUS_ACCEPTED: 4, + REVIEW_ROUND_STATUS_DECLINED: 5, REVIEW_ROUND_STATUS_PENDING_REVIEWERS: 6, + REVIEW_ROUND_STATUS_PENDING_REVIEWS: 7, REVIEW_ROUND_STATUS_REVIEWS_READY: 8, REVIEW_ROUND_STATUS_REVIEWS_COMPLETED: 9, REVIEW_ROUND_STATUS_REVIEWS_OVERDUE: 10, REVIEW_ROUND_STATUS_REVISIONS_SUBMITTED: 11, - REVIEW_ROUND_STATUS_REVISIONS_REQUESTED: 1, + REVIEW_ROUND_STATUS_PENDING_RECOMMENDATIONS: 12, + REVIEW_ROUND_STATUS_RECOMMENDATIONS_READY: 13, + REVIEW_ROUND_STATUS_RECOMMENDATIONS_COMPLETED: 14, + REVIEW_ROUND_STATUS_RESUBMIT_FOR_REVIEW_SUBMITTED: 15, + REVIEW_ROUND_STATUS_RETURNED_TO_REVIEW: 16, + SUBMISSION_REVIEW_METHOD_ANONYMOUS: 1, SUBMISSION_REVIEW_METHOD_DOUBLEANONYMOUS: 2, SUBMISSION_REVIEW_METHOD_OPEN: 3, @@ -108,36 +119,69 @@ window.pkp = { * Locale keys loaded on the server-side */ localeKeys: { + 'acceptInvitation.modal.button': '##acceptInvitation.modal.button##', + 'acceptInvitation.modal.message': '##acceptInvitation.modal.message##', + 'acceptInvitation.modal.title': '##acceptInvitation.modal.title##', + 'acceptInvitation.passwordField.description': + '##acceptInvitation.passwordField.description##', + 'acceptInvitation.privacyStatement.btn': + '##acceptInvitation.privacyStatement.btn##', + 'acceptInvitation.privacyStatement.label': + '##acceptInvitation.privacyStatement.label##', + 'acceptInvitation.review.accountDetails': + '##acceptInvitation.review.accountDetails##', + 'acceptInvitation.review.userDetails': + '##acceptInvitation.review.userDetails##', + 'acceptInvitation.skipVerifyOrcid': '##acceptInvitation.skipVerifyOrcid##', + 'acceptInvitation.usernameField.description': + '##acceptInvitation.usernameField.description##', + 'acceptInvitation.verifyOrcid': '##acceptInvitation.verifyOrcid##', + 'admin.jobs.failed.action.redispatch': 'Try Again', + 'admin.jobs.failed.action.redispatch.all': 'Requeue All Failed Jobs', 'article.article': 'Article', - 'common.abstract': 'Abstract', + 'article.metadata': 'Metadata', + 'author.users.contributor.principalContact': 'Primary Contact', + 'author.users.contributor.setPrincipalContact': 'Set Primary Contact', 'common.addCCBCC': 'Add CC/BCC', + 'common.assign': 'Assign', 'common.attachFiles': 'Attach Files', 'common.attachedFiles': 'Attached Files', + 'common.back': 'Back', 'common.cancel': 'Cancel', 'common.clearSearch': 'Clear search phrase', 'common.close': 'Close', 'common.commaListSeparator': ', ', + 'common.confirmDelete': + 'Are you sure you wish to delete this item? This action cannot be undone.', 'common.content': 'Content', + 'common.dateUploaded': 'Date uploaded', + 'common.default': 'Default', 'common.delete': 'Delete', 'common.description': 'Description', 'common.deselect': 'Deselect', + 'common.details': 'Details', 'common.download': 'Download', 'common.edit': 'Edit', 'common.editItem': 'Edit {$name}', 'common.emailTemplates': 'Email Templates', 'common.error': 'Error', + 'common.fileName': 'File Name', 'common.filter': 'Filters', 'common.filterAdd': 'Add filter: {$filterTitle}', 'common.filterRemove': 'Clear filter: {$filterTitle}', 'common.filtersClear': 'Clear Filters', 'common.findTemplate': 'Find Template', + 'common.geographic': 'Geographic', + 'common.id': 'ID', 'common.insert': 'Insert', 'common.insertContent': 'Insert Content', 'common.insertContentSearch': 'Find content to insert', - 'common.keywords': 'Keywords', + 'common.language': 'Language', 'common.lastActivity': 'Last activity recorded on {$date}.', 'common.loaded': 'Loaded', 'common.loading': 'Loading', + 'common.moreActions': 'More Actions', + 'common.name': 'Name', 'common.no': 'No', 'common.noItemsFound': 'No items found.', 'common.none': 'None', @@ -151,12 +195,16 @@ window.pkp = { 'common.pagination.label': 'View additional pages', 'common.pagination.next': 'Next', 'common.pagination.previous': 'Previous', + 'common.payments': 'Payments', + 'common.publications': 'Articles', 'common.remove': 'Remove', 'common.removeItem': 'Remove {$item}', 'common.required': 'Required', + 'common.reset': 'Reset', 'common.save': 'Save', 'common.saving': 'Saving', 'common.search': 'Search', + 'common.searchPhrase': 'Search Phrase', 'common.searching': 'Searching', 'common.selectAll': 'Select All', 'common.selectNone': 'Select None', @@ -165,7 +213,6 @@ window.pkp = { 'common.showingXofX': 'Showing {$start} to {$finish} of {$total}', 'common.status': 'Status', - 'common.subtitle': 'Subtitle', 'common.switchTo': 'Switch to', 'common.switchToNamedItem': 'Switch to {$name}', 'common.type': 'Type', @@ -177,22 +224,36 @@ window.pkp = { 'common.view': 'View', 'common.viewWithName': 'View {$name}', 'common.yes': 'Yes', - 'common.back': 'Back', + 'context.context': 'Journal', + 'contributor.listPanel.preview': 'Preview', + 'contributor.listPanel.preview.abbreviated': 'Abbreviated', + 'contributor.listPanel.preview.description': + 'Contributors to this publication will be identified in the following formats.', + 'contributor.listPanel.preview.display': 'Display', + 'contributor.listPanel.preview.format': 'Format', + 'contributor.listPanel.preview.full': 'Full', + 'contributor.listPanel.preview.publicationLists': 'Publication Lists', 'dashboard.acceptOrDeclineRequestDate': 'Please accept or decline this request {$date}', - 'dashboard.action': 'Action', 'dashboard.applyFilters': 'Apply Filters', 'dashboard.assignEditor': 'Assign Editor', 'dashboard.assignReviewers': 'Assign Reviewers', 'dashboard.clearFilters': 'Clear Filters', 'dashboard.completeReviewByDate': 'Please complete this review by {$date}.', 'dashboard.dashboards': 'Dashboards', - 'dashboard.deadlineForComplitingReviewHasPassed': + 'dashboard.deadlineForCompletingReviewHasPassed': 'Deadline for completing this review has passed. Please complete the review at the earliest.', 'dashboard.deadlineForRespondingAcceptOrDecline': 'Deadline for responding to this request has passed. Please accept or decline this request at the earliest.', + 'dashboard.declinedDuringStage': 'Declined during the {$stageName} stage', 'dashboard.mySubmissions': 'My Submissions', 'dashboard.newReviewRoundToBeCreated': 'New review round to be created', + 'dashboard.recommendOnly.pendingRecommendations': + 'Recommending Editors are tasked to advise the next steps for this submission', + 'dashboard.recommendOnly.recommendationsCompleted': + 'All editorial recommendations have been received, and a decision is required.', + 'dashboard.recommendOnly.recommendationsReady': + 'An editorial recommendation has been received', 'dashboard.reviewAssignment.action.cancelReviewer': 'Cancel Reviewer', 'dashboard.reviewAssignment.action.editDueDate': 'Edit Due Date', 'dashboard.reviewAssignment.action.resendReviewRequest': @@ -247,28 +308,25 @@ window.pkp = { 'dashboard.revisionRequestedFromAuthor': 'Revisions requested from author', 'dashboard.revisionsRequestedFromAuthorNextRound': 'Revisions requested from the author to be taken to a new review round', - 'dashboard.revisionsSubmittedByAuthor': 'Revisions submitted by author', + 'dashboard.revisionsSubmitted': 'Revisions submitted', 'dashboard.stage.copyediting': 'Copyediting', - 'dashboard.stage.deskReview': 'Desk Review', 'dashboard.stage.production': 'Production', 'dashboard.stage.published': 'Published', + 'dashboard.stage.review': 'Review', 'dashboard.stage.reviewWithRound': 'Review (Round {$round})', 'dashboard.stage.scheduledForPublication': 'Scheduled For Publication', + 'dashboard.stage.submission': 'Submission', 'dashboard.startNewSubmission': 'Start A New Submission', 'dashboard.submitRevisions': 'Submit revisions', 'dashboard.summary.acceptAndSkipReview': 'Accept and skip review', - 'dashboard.summary.acceptReview': 'Accept review', 'dashboard.summary.acceptSubmission': 'Accept Submission', - 'dashboard.summary.accessReviewForm': 'Access review form', 'dashboard.summary.assignToIssue': 'Assign To Issue', + 'dashboard.summary.backToCopyediting': 'Back to Copyediting', + 'dashboard.summary.cancelCopyEditing': 'Cancel Copyediting', 'dashboard.summary.cancelReviewRound': 'Cancel Review Round', 'dashboard.summary.copyeditedFiles': 'Copyedited Files', - 'dashboard.summary.daysInCopyediting': 'Days in copyediting', - 'dashboard.summary.daysInProduction': 'Days in production', - 'dashboard.summary.daysInReview': 'Days in review', - 'dashboard.summary.daysInSubmission': 'Days in submission', - 'dashboard.summary.daysSinceSubmission': 'Days since submission', - 'dashboard.summary.decline': 'Decline', + 'dashboard.summary.copyeditedFilesDescription': + 'These are edited files that will be taken to the production stage', 'dashboard.summary.declineSubmission': 'Decline Submission', 'dashboard.summary.deskReviewFiles': 'Desk Review Files', 'dashboard.summary.deskReviewFilesDescription': @@ -276,13 +334,8 @@ window.pkp = { 'dashboard.summary.draftFiles': 'Draft Files', 'dashboard.summary.draftFilesDescription': 'These are files from the review stage which are to be copyedited', - 'dashboard.summary.editorsAssigned': 'Editors assigned', 'dashboard.summary.filesForReview': 'Files for review', - 'dashboard.summary.filesForReviewDescription': - 'These files will be sent to the reviewers to review', - 'dashboard.summary.galleys': 'Galleys', 'dashboard.summary.issueNo': 'Issue No', - 'dashboard.summary.journalName': 'Journal name', 'dashboard.summary.notAssigned': 'Not assigned', 'dashboard.summary.preview': 'Preview', 'dashboard.summary.productionReadyFiles': 'Production Ready Files', @@ -292,36 +345,64 @@ window.pkp = { 'dashboard.summary.reviewer': 'Reviewer', 'dashboard.summary.reviewerStatus': 'Reviewer status', 'dashboard.summary.reviewers': 'Reviewers', - 'dashboard.summary.revisionsSubmitted': 'Revisions Submitted', - 'dashboard.summary.revisionsSubmittedDescription': - 'These files have been submitted by the author after visions were requested', - 'dashboard.summary.scheduleForProduction': 'Schedule for Publication', + 'dashboard.summary.revisionsUploaded': 'Revisions Submitted', + 'dashboard.summary.revisionsUploadedDescription': + 'These files have been submitted by the author after revisions were requested', 'dashboard.summary.sendSubmissionForReview': 'Send submission for review', 'dashboard.summary.sendToProduction': 'Send to Production', - 'dashboard.summary.submissionLanguage': 'Submission Language', - 'dashboard.summary.submittedOn': 'Submitted on', - 'dashboard.summary.unschedule': 'Unschedule', - 'dashboard.summary.uploadFile': 'Upload File', - 'dashboard.summary.uploadRevisions': 'Upload Revisions', - 'dashboard.summary.viewActivityLog': 'View activity log', - 'dashboard.summary.viewSubmissionInDetail': 'View submission in detail', - 'dashboard.viewSummary': 'Summary', 'doi.manager.versions.countStatement': 'There are {$count} versions.', 'doi.manager.versions.modalTitle': 'DOIs for all versions', 'doi.manager.versions.view': 'View all', + 'editor.activityLog': 'Activity Log', 'editor.review.cancelReviewer': 'Cancel Reviewer', + 'editor.review.emailReviewer': 'Email Reviewer', + 'editor.review.notInitiated': + 'The review process has not yet been initiated.', + 'editor.review.readReview': 'Read Review', + 'editor.review.reinstateReviewer': 'Reinstate Reviewer', + 'editor.review.reminder': 'Review Reminder', 'editor.review.resendRequestReviewer': 'Resend Review Request', + 'editor.review.revertDecision': 'Revert Decision', 'editor.review.reviewDetails': 'Review Details', + 'editor.review.sendReminder': 'Send Reminder', + 'editor.review.thankReviewer': 'Thank Reviewer', 'editor.review.unassignReviewer': 'Unassign Reviewer', + 'editor.review.unconsiderReview': 'Unconsider this Review', + 'editor.review.unconsiderReviewText': + 'Do you wish to mark this review as unconsidered? The review history will be preserved.', + 'editor.submission.addReviewer': 'Add Reviewer', 'editor.submission.addStageParticipant': 'Assign Participant', + 'editor.submission.createNewRound': 'Create New Review Round', 'editor.submission.decision.requestRevisions': 'Request Revisions', + 'editor.submission.editStageParticipant': 'Edit Assignment', + 'editor.submission.recommend.accept': 'Recommend Accept', + 'editor.submission.recommend.decline': 'Recommend Decline', + 'editor.submission.recommend.revisions': 'Recommend Revisions', + 'editor.submission.recommendation': 'Recommendation', + 'editor.submission.removeStageParticipant': 'Remove Participant', + 'editor.submission.removeStageParticipant.description': + 'You are about to remove this participant from all stages.', + 'editor.submission.review.currentFiles': + 'Current Review Files For Round {$round}', + 'editor.submission.revisions': 'Revisions', 'editor.submission.schedulePublication': 'Schedule For Publication', 'editor.submission.search': 'Search submissions, ID, authors, keywords, etc.', + 'editor.submission.stageParticipants': 'Participants', + 'editor.submission.uploadSelectFiles': 'Upload/Select Files', + 'editor.submission.workflowDecision.changeDecision': 'Change decision', + 'editor.submission.workflowDecision.submission.production': + 'Sent to production.', + 'editor.submission.workflowDecision.submission.published': + 'Submission published.', + 'editor.submission.workflowDecision.submission.reviewRound': + 'Sent for a new round of reviews.', + 'editor.submission.workflowDecision.submission.underReview': + 'Submission accepted for review.', 'editor.submissionArchive.confirmDelete': 'Are you sure you want to permanently delete this submission?', + 'editor.submissionLibrary': 'Library', 'editor.submissionReview.editReview': 'Edit Review', - 'editor.submissionReview.uploadAttachment': 'Upload File', 'editor.submissionReview.uploadFile': 'Upload Review File', 'email.bcc': 'BCC', 'email.cc': 'CC', @@ -340,18 +421,38 @@ window.pkp = { 'form.multilingualLabel': '{$label} in {$localeName}', 'form.multilingualProgress': '{$count}/{$total} languages completed', 'form.saved': 'Saved', + 'grid.action.addContributor': 'Add Contributor', + 'grid.action.addGalley': 'Add galley', + 'grid.action.delete': 'Delete', + 'grid.action.deleteContributor': 'Delete Contributor', + 'grid.action.deleteContributor.confirmationMessage': + 'Are you sure you want to remove {$name} as a contributor? This action can not be undone.', + 'grid.action.edit': 'Edit', + 'grid.action.editFile': 'Edit a file', + 'grid.action.logInAs': 'Login As', + 'grid.action.moreInformation': 'More Information', + 'grid.action.order': 'Order', + 'grid.action.saveOrdering': 'Save Order', 'grid.action.sort': 'Sort', + 'grid.columns.actions': 'Actions', + 'grid.libraryFiles.submission.title': 'Submission Library', + 'grid.noItems': 'No Items', + 'grid.user.confirmLogInAs': + 'Log in as this user? All actions you perform will be attributed to this user.', 'help.help': 'Help', - 'invitation.orcid.message': 'On accepting the invite, the user will redirected to ORCID to verify their account, if the wish to', - 'invitation.role.addRole.button': 'Add Another Role', - 'invitation.role.dateEnd': 'End Date', - 'invitation.role.dateStart': 'Start Date', - 'invitation.role.masthead': 'Journal Masthead', + 'informationCenter.informationCenter': 'Information Center', + 'invitation.orcid.acceptInvitation.message': + '##invitation.orcid.acceptInvitation.message##', + 'invitation.role.addRole.button': '##invitation.role.addRole.button##', + 'invitation.role.dateStart': '##invitation.role.dateStart##', + 'invitation.role.masthead': '##invitation.role.masthead##', 'invitation.role.removeRole.button': - 'Remove Role', - 'invitation.role.selectRole': 'Select a new role', + '##invitation.role.removeRole.button##', + 'invitation.role.selectRole': '##invitation.role.selectRole##', 'invitation.wizard.completeSteps': '##invitation.wizard.completeSteps##', + 'invitation.wizard.errors': '##invitation.wizard.errors##', 'issue.issue': 'Issue', + 'issue.issues': 'Issues', 'list.collapseAll': 'Collapse all', 'list.expandAll': 'Expand all', 'list.viewLess': 'Hide expanded details about {$name}', @@ -431,19 +532,31 @@ window.pkp = { 'manager.dois.update.failedCreation': 'DOI Updates Failed', 'manager.dois.update.partialFailure': 'Some DOI(s) could not be updated', 'manager.dois.update.success': 'DOI(s) successfully updated', - 'metadata.property.displayName.doi': 'DOI', + 'manager.emails.addEmail': 'Add Template', + 'manager.export.usersToCsv.label': 'Export to Excel/CSV', + 'manager.mailables.addTemplates': + 'Add and edit templates that you would like to make available to the user when they are sending this email. The default will be loaded automatically, and the user will be able to quickly load any other templates you add here.', + 'manager.mailables.editTemplate': 'Edit Template', + 'manager.mailables.templates': 'Templates', + 'manager.publication.reviewStage': 'Review', + 'manager.workflow': 'Workflow', 'navigation.backTo': '\u27f5 Back to {$page}', - 'publication.contributors': 'Contributors', - 'orcid.field.verification.request': 'Request verification', - 'orcid.field.verification.requested': 'Verification requested!', - 'orcid.field.authorEmailModal.title': 'Request ORCID verification', + 'notification.type.roundStatusTitle': 'Round {$round} Status', 'orcid.field.authorEmailModal.message': 'Would you like to send an email to this author requesting they verify their ORCID?', - 'orcid.field.deleteOrcidModal.title': 'Delete ORCID', + 'orcid.field.authorEmailModal.title': 'Request ORCID verification', 'orcid.field.deleteOrcidModal.message': 'Are you sure you want to remove this ORCID?', + 'orcid.field.deleteOrcidModal.title': 'Delete ORCID', 'orcid.field.unverified.shouldRequest': 'This ORCID has not been verified. Please remove this unverified ORCID and request verification from the user/author directly.', + 'orcid.field.verification.request': 'Request verification', + 'orcid.field.verification.requested': 'Verification requested!', + 'publication.contributors': 'Contributors', + 'publication.createVersion': 'Create New Version', + 'publication.editDisabled': + 'This version has been published and can not be edited.', + 'publication.jats': 'JATS XML', 'publication.jats.autoCreatedMessage': 'This JATS file is generated automatically by the submission metadata', 'publication.jats.confirmDeleteFileButton': 'Delete JATS File', @@ -452,13 +565,22 @@ window.pkp = { 'publication.jats.confirmDeleteFileTitle': 'Confirm deleting JATS XML', 'publication.jats.lastModified': 'Last Modification at {$modificationDate} by {$username}', + 'publication.publicationLicense': 'Permissions & Disclosure', 'publication.selectIssue': 'Select an issue to schedule for publication', 'publication.status.published': 'Published', + 'publication.status.scheduled': 'Scheduled', 'publication.status.unpublished': 'Unpublished', + 'publication.status.unscheduled': 'Unscheduled', + 'publication.titleAbstract': 'Title & Abstract', + 'publication.unpublish': 'Unpublish', + 'publication.unpublish.confirm': + "Are you sure you don't want this to be published?", 'publication.unschedule': 'Unschedule', 'publication.unschedule.confirm': "Are you sure you don't want this scheduled for publication?", 'publication.version': 'Version {$version}', + 'publication.version.confirm': + 'Are you sure you want to create a new version?', 'reviewer.article.decision.accept': 'Accept Submission', 'reviewer.article.decision.decline': 'Decline Submission', 'reviewer.article.decision.pendingRevisions': 'Revisions Required', @@ -467,7 +589,6 @@ window.pkp = { 'reviewer.article.decision.seeComments': 'See Comments', 'reviewer.article.recommendation': 'Recommendation', 'reviewer.submission.acceptedOn': 'Review Accepted On', - 'reviewer.submission.declineReview': 'Decline Review Request', 'reviewer.submission.responseDueDate': 'Response Due Date', 'reviewer.submission.reviewDueDate': 'Review Due Date', 'reviewer.submission.reviewRequestDate': "Editor's Request", @@ -501,9 +622,48 @@ window.pkp = { 'The review was not completed.', 'reviewer.submission.submittedOn': 'Review Submitted On', 'search.searchResults': 'Search Results', + semicolon: '{$label}:', 'stageParticipants.notify.message': 'Message', + 'stats.context.downloadReport.description': + 'Download a CSV/Excel spreadsheet with usage statistics for this journal matching the following parameters.', + 'stats.context.downloadReport.downloadContext': 'Download Journal', + 'stats.context.downloadReport.downloadContext.description': + "The number of journal's index page views.", 'stats.countWithYearlyAverage': '{$count} ({$average}/year)', + 'stats.dateRange': 'Date Range', 'stats.descriptionForStat': 'Description for {$stat}', + 'stats.geographic.ccAttribution': + "Geolocation provided by DB-IP", + 'stats.geographic.tooltip.label': 'About Geolocation', + 'stats.issues.downloadReport.description': + 'Download a CSV/Excel spreadsheet with usage statistics for issues matching the following parameters.', + 'stats.issues.downloadReport.downloadIssues': 'Download Issues', + 'stats.issues.downloadReport.downloadIssues.description': + 'The number of TOC views and issue galley downloads for each issue.', + 'stats.publications.downloadReport.description': + 'Download a CSV/Excel spreadsheet with usage statistics for articles matching the following parameters.', + 'stats.publications.downloadReport.downloadFiles': 'Download Files', + 'stats.publications.downloadReport.downloadFiles.description': + 'The number of downloads for each file.', + 'stats.publications.downloadReport.downloadGeographic': + 'Download Geographic', + 'stats.publications.downloadReport.downloadGeographic.description': + 'The number of views and downloads for each city, region or country.', + 'stats.publications.downloadReport.downloadSubmissions': + 'Download Articles', + 'stats.publications.downloadReport.downloadSubmissions.description': + 'The number of abstract views and file downloads for each article.', + 'stats.timeline': 'Timeline', + 'stats.timeline.downloadReport.downloadTimeline': 'Download Timeline', + 'submission.changeFile': 'Change File', + 'submission.citations': 'References', + 'submission.contributors': 'List of Contributors', + 'submission.files': 'Files', + 'submission.files.downloadAll': 'Download All Files', + 'submission.history': 'History', + 'submission.identifiers': 'Identifiers', + 'submission.layout.galleys': 'Galleys', + 'submission.layout.newGalley': 'Create New Galley', 'submission.list.assignEditor': 'Assign Editor', 'submission.list.copyeditsSubmitted': 'Copyedited files submitted', 'submission.list.currentStage': 'Currently in the {$stage} stage.', @@ -522,44 +682,44 @@ window.pkp = { 'You have been assigned an editorial role for this submission. Would you like to access the Editorial workflow?', 'submission.list.reviewsCompleted': 'Assigned reviews completed', 'submission.list.revisionsSubmitted': 'Revisions submitted', + 'submission.publication': 'Publication', + 'submission.review': 'Review', + 'submission.stageParticipants.notify': 'Notify', 'submission.submit.newSubmissionSingle': 'New Submission', + 'submission.submit.uploadSubmissionFile': 'Upload Submission File', 'submission.upload.percentComplete': 'Uploading {$percent}% complete', + 'submission.upload.productionReady': 'Upload a Production Ready File', + 'submission.upload.proof': 'Upload a File Ready for Publication', + 'submission.versions': 'Versions', + 'submission.wizard.changeSubmission': 'Change Submission Settings', 'submissions.declined': 'Declined', 'submissions.incomplete': 'Incomplete', todo: '##todo##', + 'user.affiliation': 'Affiliation', 'user.email': 'Email', - 'user.emailAddress': 'Email Address', + 'user.emailAddress': '##user.emailAddress##', + 'user.familyName': 'Family Name', + 'user.givenName': 'Given Name', + 'user.gossip': 'Editorial Notes', 'user.orcid': 'ORCID iD', - 'user.username': 'Username', 'user.password': 'Password', - 'user.givenName': 'Given Name', - 'user.familyName': 'Family Name', - 'user.affiliation': 'Affiliation', - 'user.country': 'Country', + 'user.username': 'Username', + 'userInvitation.emailField.description': + '##userInvitation.emailField.description##', + 'userInvitation.modal.button': '##userInvitation.modal.button##', + 'userInvitation.modal.message': '##userInvitation.modal.message##', + 'userInvitation.modal.title': '##userInvitation.modal.title##', + 'userInvitation.orcidField.description': + '##userInvitation.orcidField.description##', + 'userInvitation.roleTable.endDate': '##userInvitation.roleTable.endDate##', + 'userInvitation.roleTable.journalMasthead': + '##userInvitation.roleTable.journalMasthead##', + 'userInvitation.roleTable.role': '##userInvitation.roleTable.role##', + 'userInvitation.roleTable.startDate': + '##userInvitation.roleTable.startDate##', + 'userInvitation.usernameField.description': + '##userInvitation.usernameField.description##', 'validator.required': 'This field is required.', - 'invitation.notification.closeBtn':'View all users', - 'invitation.orcid.acceptInvitation.message':'Not verified. You can verify your ORCID iD from your profile section in OJS', - 'userInvitation.emailField.description':'e.g. aeinstein@example.com', - 'userInvitation.usernameField.description':'e.g. mickeymouse', - 'userInvitation.orcidField.description':'e.g. 0000-0000-0000-0000', - 'userInvitation.roleTable.role':'Role', - 'userInvitation.roleTable.startDate':'Start Date', - 'userInvitation.roleTable.endDate':'End Date', - 'userInvitation.roleTable.journalMasthead':'Journal Masthead', - 'userInvitation.modal.title':'Invitation Sent', - 'userInvitation.modal.message':'{$email} has been invited to new role in OJS.You can be updated about users on the User and Roles page, your ojs notification and/ or your email', - 'userInvitation.modal.button':'View All Users', - 'acceptInvitation.usernameField.description':'It should be 10 characters long and could be a combination of uppercase letters, lowercase letters or numbers', - 'acceptInvitation.passwordField.description':'It should be 12 characters long and should be a combination of uppercase letters, lowercase letters, numbers and symbols', - 'acceptInvitation.review.userDetails':'User Details', - 'acceptInvitation.review.accountDetails':'Account Details', - 'acceptInvitation.verifyOrcid':'Verify ORCID iD', - 'acceptInvitation.skipVerifyOrcid':'Skip ORCID verification', - 'acceptInvitation.modal.title':"You've been assigned a new role in OJS", - 'acceptInvitation.modal.message':'Congratulations on your new role in OJS! You might now have access to new options. If you need assistance navigating the system, please click on the “Help” buttons throughout the interface for guidance', - 'acceptInvitation.modal.button':'View All Submissions', - 'acceptInvitation.privacyStatement.btn':'Privacy Statement', - 'acceptInvitation.privacyStatement.label':'Yes, I agree to have my data collected and stored according to the', }, tinyMCE: { diff --git a/src/components/Badge/Badge.vue b/src/components/Badge/Badge.vue index ea67a30f0..102781536 100644 --- a/src/components/Badge/Badge.vue +++ b/src/components/Badge/Badge.vue @@ -54,6 +54,7 @@ export default { 'negative-bg', 'stage-in-review-bg', 'success-bg', + 'attention', ].includes(prop), }, /** */ @@ -74,13 +75,17 @@ export default { const colorVariant = this.colorVariant; return { // base - 'inline-block py-1 px-4 text-base-normal rounded-[1.2em] border': true, + 'inline-block py-1 px-3 text-base-normal rounded-[1.2em] border': true, // default 'text-default border-light': colorVariant === 'default', // default-on-dark 'text-on-dark border-light': colorVariant === 'default-on-dark', // primary - 'border-primary text-primary': colorVariant === 'primary', + 'border-primary text-primary bg-secondary': + colorVariant === 'primary', + // attention-border + 'border-attention text-attention bg-secondary': + colorVariant === 'attention', // primary-bg 'bg-primary text-on-dark border-primary': colorVariant === 'primary-bg', diff --git a/src/components/ButtonIcon/ButtonIcon.mdx b/src/components/ButtonIcon/ButtonIcon.mdx new file mode 100644 index 000000000..b9f006991 --- /dev/null +++ b/src/components/ButtonIcon/ButtonIcon.mdx @@ -0,0 +1,19 @@ +import {Primary, Controls, Stories, Meta, Description} from '@storybook/blocks'; + +import * as ButtonIconStories from './ButtonIcon.stories.js'; + + + +# ButtonIcon + +## Usage + +Use the ButtonIcon component to create a button that displays only an icon, without any visible text. + +## Accessibility + +Since the button has no visible text, use a descriptive aria-label to ensure it's accessible to screen reader users. + + + + diff --git a/src/components/ButtonIcon/ButtonIcon.stories.js b/src/components/ButtonIcon/ButtonIcon.stories.js new file mode 100644 index 000000000..b9b17634f --- /dev/null +++ b/src/components/ButtonIcon/ButtonIcon.stories.js @@ -0,0 +1,61 @@ +import ButtonIcon from './ButtonIcon.vue'; +export default { + title: 'Components/ButtonIcon', + component: ButtonIcon, + render: (args) => ({ + components: {ButtonIcon}, + setup() { + return {args}; + }, + template: '', + }), +}; + +export const Default = { + args: { + icon: 'Add', + ariaLabel: 'Add more items', + }, +}; + +export const Disabled = { + args: { + icon: 'Cancel', + ariaLabel: 'Cancel', + isDisabled: true, + }, +}; + +export const Active = { + args: { + icon: 'Complete', + ariaLabel: 'Complete', + isActive: true, + }, +}; + +export const Order = { + render: (args) => ({ + components: {ButtonIcon}, + setup() { + return {args}; + }, + template: ` +
+ +
+ `, + }), + args: { + icons: [ + { + icon: 'ChevronUp', + ariaLabel: 'Move up', + }, + { + icon: 'ChevronDown', + ariaLabel: 'Move down', + }, + ], + }, +}; diff --git a/src/components/ButtonIcon/ButtonIcon.vue b/src/components/ButtonIcon/ButtonIcon.vue new file mode 100644 index 000000000..f5e5928f8 --- /dev/null +++ b/src/components/ButtonIcon/ButtonIcon.vue @@ -0,0 +1,47 @@ + + + diff --git a/src/components/Container/Page.stories.js b/src/components/Container/Page.stories.js index da259828f..a143ec807 100644 --- a/src/components/Container/Page.stories.js +++ b/src/components/Container/Page.stories.js @@ -1,6 +1,7 @@ import {computed} from 'vue'; import Page from './Page.vue'; import Dropdown from '@/components/Dropdown/Dropdown.vue'; +import SideNav from '@/components/SideNav/SideNav.vue'; import PageMock from '@/mocks/page'; export default { @@ -10,7 +11,7 @@ export default { export const Default = { render: (args) => ({ - components: {Page, Dropdown}, + components: {Page, Dropdown, SideNav}, setup() { const classes = computed(() => { let _classes = []; @@ -108,50 +109,8 @@ export const Default = {
- + +
@@ -91,13 +101,17 @@ export default { required: true, default: false, }, + /** Whether an email requesting users verify their ORCID has been sent or not */ + orcidVerificationRequested: { + type: Boolean, + required: true, + }, }, data() { return { /** Internal value used for displaying ORCID in component. Takes initial value from `orcid` prop */ orcidValue: '', - /** Whether an email requesting users verify their ORCID has been sent or not */ - verificationRequested: false, + verificationRequested: this.orcidVerificationRequested, /** Whether request verification/delete ORCID button should be disabled or not */ isButtonDisabled: false, }; diff --git a/src/components/Form/formHelpers.js b/src/components/Form/formHelpers.js index 5f27683e3..2790a96e6 100644 --- a/src/components/Form/formHelpers.js +++ b/src/components/Form/formHelpers.js @@ -38,6 +38,9 @@ export function shouldShowGroup(group, fields) { if (typeof group.showWhen === 'string') { return !!whenField.value; } + if (Array.isArray(group.showWhen[1])) { + return group.showWhen[1].includes(whenField.value); + } return whenField.value === group.showWhen[1]; } diff --git a/src/components/Form/mocks/field-select-issue.js b/src/components/Form/mocks/field-select-issue.js index 7e8d70b6d..bac809934 100644 --- a/src/components/Form/mocks/field-select-issue.js +++ b/src/components/Form/mocks/field-select-issue.js @@ -41,7 +41,7 @@ export default { assignLabel: 'Assign to Issue', assignedNoticeBase: 'This has been assigned to {$issueName} but it has not been scheduled for publication.', - changeIssue: 'Change Issue', + changeIssueLabel: 'Change Issue', publishedNoticeBase: 'Published in {$issueName}.', scheduledNoticeBase: diff --git a/src/components/Icon/Icon.stories.js b/src/components/Icon/Icon.stories.js index 88e5080b3..7afae93da 100644 --- a/src/components/Icon/Icon.stories.js +++ b/src/components/Icon/Icon.stories.js @@ -58,16 +58,28 @@ export const iconGallery = { args: { icons: [ + 'Add', 'Announcements', 'AnonymousReview', + 'ArrowLeft', + 'ArrowRight', 'AttachFile', + 'Attention', 'BackButton', 'Bold', + 'Book', 'Bullets', + 'Calendar', 'Cancel', 'Catalog', + 'ChevronDown', + 'ChevronLeft', + 'ChevronRight', + 'ChevronUp', + 'Clock', 'Complete', 'Dashboard', + 'DefaultDocument', 'DecreaseTextSize', 'DisableUser', 'Dropdown', @@ -76,7 +88,6 @@ export const iconGallery = { 'Email', 'EmailOpened', 'Expand', - 'DefaultDocument', 'FileAudio', 'FileDoc', 'FileEpub', @@ -87,6 +98,7 @@ export const iconGallery = { 'FileVideo', 'FileZip', 'Help', + 'History', 'InProgress', 'IncreaseTextSize', 'InsertContent', @@ -99,6 +111,7 @@ export const iconGallery = { 'MySubmissions', 'NavDoi', 'NavAdmin', + 'New', 'Notifications', 'OpenReview', 'Orcid', @@ -107,6 +120,7 @@ export const iconGallery = { 'Publication', 'ReadRecommendation', 'ReviewAssignments', + 'ReviewRequestDeclined', 'ReviewSent', 'Search', 'Settings', diff --git a/src/components/Icon/Icon.vue b/src/components/Icon/Icon.vue index b6d4ce656..a67339d1d 100644 --- a/src/components/Icon/Icon.vue +++ b/src/components/Icon/Icon.vue @@ -36,14 +36,25 @@ diff --git a/src/components/Table/Table.vue b/src/components/Table/Table.vue index 3cf814601..da14b207d 100644 --- a/src/components/Table/Table.vue +++ b/src/components/Table/Table.vue @@ -1,30 +1,45 @@ diff --git a/src/components/Table/TableCell.vue b/src/components/Table/TableCell.vue index 212c26f6e..b89609ccc 100644 --- a/src/components/Table/TableCell.vue +++ b/src/components/Table/TableCell.vue @@ -2,7 +2,7 @@ @@ -28,6 +28,13 @@ const props = defineProps({ return false; }, }, + /** Take only width as the content needs */ + fitContent: { + type: Boolean, + default() { + return false; + }, + }, }); const classes = computed(() => { @@ -39,6 +46,10 @@ const classes = computed(() => { if (props.fullWidthTruncated) { list.push('w-full max-w-0 truncate'); } + + if (props.fitContent) { + list.push('whitespace-nowrap w-1'); + } return list; }); diff --git a/src/components/Table/TableColumn.vue b/src/components/Table/TableColumn.vue index cc3fe1772..c508305f0 100644 --- a/src/components/Table/TableColumn.vue +++ b/src/components/Table/TableColumn.vue @@ -2,7 +2,7 @@