Merge branch '127-paper-references' into 'dev'
Resolve "Ведение списка литературы статей" Closes #127 See merge request romanov73/ng-tracker!108
This commit is contained in:
commit
eba3592410
@ -13,9 +13,11 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
|||||||
import org.springframework.web.bind.annotation.RequestParam;
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
import ru.ulstu.conference.service.ConferenceService;
|
import ru.ulstu.conference.service.ConferenceService;
|
||||||
import ru.ulstu.deadline.model.Deadline;
|
import ru.ulstu.deadline.model.Deadline;
|
||||||
|
import ru.ulstu.paper.model.AutoCompleteData;
|
||||||
import ru.ulstu.paper.model.Paper;
|
import ru.ulstu.paper.model.Paper;
|
||||||
import ru.ulstu.paper.model.PaperDto;
|
import ru.ulstu.paper.model.PaperDto;
|
||||||
import ru.ulstu.paper.model.PaperListDto;
|
import ru.ulstu.paper.model.PaperListDto;
|
||||||
|
import ru.ulstu.paper.model.ReferenceDto;
|
||||||
import ru.ulstu.paper.service.LatexService;
|
import ru.ulstu.paper.service.LatexService;
|
||||||
import ru.ulstu.paper.service.PaperService;
|
import ru.ulstu.paper.service.PaperService;
|
||||||
import ru.ulstu.user.model.User;
|
import ru.ulstu.user.model.User;
|
||||||
@ -105,6 +107,15 @@ public class PaperController {
|
|||||||
return "/papers/paper";
|
return "/papers/paper";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping(value = "/paper", params = "addReference")
|
||||||
|
public String addReference(@Valid PaperDto paperDto, Errors errors) {
|
||||||
|
if (errors.hasErrors()) {
|
||||||
|
return "/papers/paper";
|
||||||
|
}
|
||||||
|
paperDto.getReferences().add(new ReferenceDto());
|
||||||
|
return "/papers/paper";
|
||||||
|
}
|
||||||
|
|
||||||
@ModelAttribute("allStatuses")
|
@ModelAttribute("allStatuses")
|
||||||
public List<Paper.PaperStatus> getPaperStatuses() {
|
public List<Paper.PaperStatus> getPaperStatuses() {
|
||||||
return paperService.getPaperStatuses();
|
return paperService.getPaperStatuses();
|
||||||
@ -129,6 +140,16 @@ public class PaperController {
|
|||||||
return years;
|
return years;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ModelAttribute("allFormatStandards")
|
||||||
|
public List<ReferenceDto.FormatStandard> getFormatStandards() {
|
||||||
|
return paperService.getFormatStandards();
|
||||||
|
}
|
||||||
|
|
||||||
|
@ModelAttribute("allReferenceTypes")
|
||||||
|
public List<ReferenceDto.ReferenceType> getReferenceTypes() {
|
||||||
|
return paperService.getReferenceTypes();
|
||||||
|
}
|
||||||
|
|
||||||
@PostMapping("/generatePdf")
|
@PostMapping("/generatePdf")
|
||||||
public ResponseEntity<byte[]> getPdfFile(PaperDto paper) throws IOException, InterruptedException {
|
public ResponseEntity<byte[]> getPdfFile(PaperDto paper) throws IOException, InterruptedException {
|
||||||
HttpHeaders headers = new HttpHeaders();
|
HttpHeaders headers = new HttpHeaders();
|
||||||
@ -137,6 +158,16 @@ public class PaperController {
|
|||||||
return new ResponseEntity<>(latexService.generatePdfFromLatexFile(paper), headers, HttpStatus.OK);
|
return new ResponseEntity<>(latexService.generatePdfFromLatexFile(paper), headers, HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("/getFormattedReferences")
|
||||||
|
public ResponseEntity<String> getFormattedReferences(PaperDto paperDto) {
|
||||||
|
return new ResponseEntity<>(paperService.getFormattedReferences(paperDto), new HttpHeaders(), HttpStatus.OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ModelAttribute("autocompleteData")
|
||||||
|
public AutoCompleteData getAutocompleteData() {
|
||||||
|
return paperService.getAutoCompleteData();
|
||||||
|
}
|
||||||
|
|
||||||
private void filterEmptyDeadlines(PaperDto paperDto) {
|
private void filterEmptyDeadlines(PaperDto paperDto) {
|
||||||
paperDto.setDeadlines(paperDto.getDeadlines().stream()
|
paperDto.setDeadlines(paperDto.getDeadlines().stream()
|
||||||
.filter(dto -> dto.getDate() != null || !isEmpty(dto.getDescription()))
|
.filter(dto -> dto.getDate() != null || !isEmpty(dto.getDescription()))
|
||||||
|
43
src/main/java/ru/ulstu/paper/model/AutoCompleteData.java
Normal file
43
src/main/java/ru/ulstu/paper/model/AutoCompleteData.java
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
package ru.ulstu.paper.model;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class AutoCompleteData {
|
||||||
|
private List<String> authors = new ArrayList<>();
|
||||||
|
private List<String> publicationTitles = new ArrayList<>();
|
||||||
|
private List<String> publishers = new ArrayList<>();
|
||||||
|
private List<String> journalOrCollectionTitles = new ArrayList<>();
|
||||||
|
|
||||||
|
public List<String> getAuthors() {
|
||||||
|
return authors;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAuthors(List<String> authors) {
|
||||||
|
this.authors = authors;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getPublicationTitles() {
|
||||||
|
return publicationTitles;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPublicationTitles(List<String> publicationTitles) {
|
||||||
|
this.publicationTitles = publicationTitles;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getPublishers() {
|
||||||
|
return publishers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPublishers(List<String> publishers) {
|
||||||
|
this.publishers = publishers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getJournalOrCollectionTitles() {
|
||||||
|
return journalOrCollectionTitles;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setJournalOrCollectionTitles(List<String> journalOrCollectionTitles) {
|
||||||
|
this.journalOrCollectionTitles = journalOrCollectionTitles;
|
||||||
|
}
|
||||||
|
}
|
@ -123,6 +123,11 @@ public class Paper extends BaseEntity implements UserContainer {
|
|||||||
@ManyToMany(mappedBy = "papers")
|
@ManyToMany(mappedBy = "papers")
|
||||||
private List<Grant> grants;
|
private List<Grant> grants;
|
||||||
|
|
||||||
|
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
|
||||||
|
@JoinColumn(name = "paper_id", unique = true)
|
||||||
|
@Fetch(FetchMode.SUBSELECT)
|
||||||
|
private List<Reference> references = new ArrayList<>();
|
||||||
|
|
||||||
public PaperStatus getStatus() {
|
public PaperStatus getStatus() {
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
@ -248,6 +253,14 @@ public class Paper extends BaseEntity implements UserContainer {
|
|||||||
return getAuthors();
|
return getAuthors();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<Reference> getReferences() {
|
||||||
|
return references;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setReferences(List<Reference> references) {
|
||||||
|
this.references = references;
|
||||||
|
}
|
||||||
|
|
||||||
public Optional<Deadline> getNextDeadline() {
|
public Optional<Deadline> getNextDeadline() {
|
||||||
return deadlines
|
return deadlines
|
||||||
.stream()
|
.stream()
|
||||||
|
@ -38,6 +38,8 @@ public class PaperDto {
|
|||||||
private Set<UserDto> authors;
|
private Set<UserDto> authors;
|
||||||
private Integer filterAuthorId;
|
private Integer filterAuthorId;
|
||||||
private String latexText;
|
private String latexText;
|
||||||
|
private List<ReferenceDto> references = new ArrayList<>();
|
||||||
|
private ReferenceDto.FormatStandard formatStandard = ReferenceDto.FormatStandard.GOST;
|
||||||
|
|
||||||
public PaperDto() {
|
public PaperDto() {
|
||||||
deadlines.add(new Deadline());
|
deadlines.add(new Deadline());
|
||||||
@ -57,7 +59,9 @@ public class PaperDto {
|
|||||||
@JsonProperty("locked") Boolean locked,
|
@JsonProperty("locked") Boolean locked,
|
||||||
@JsonProperty("files") List<FileDataDto> files,
|
@JsonProperty("files") List<FileDataDto> files,
|
||||||
@JsonProperty("authorIds") Set<Integer> authorIds,
|
@JsonProperty("authorIds") Set<Integer> authorIds,
|
||||||
@JsonProperty("authors") Set<UserDto> authors) {
|
@JsonProperty("authors") Set<UserDto> authors,
|
||||||
|
@JsonProperty("references") List<ReferenceDto> references,
|
||||||
|
@JsonProperty("formatStandard") ReferenceDto.FormatStandard formatStandard) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.title = title;
|
this.title = title;
|
||||||
this.status = status;
|
this.status = status;
|
||||||
@ -71,6 +75,8 @@ public class PaperDto {
|
|||||||
this.locked = locked;
|
this.locked = locked;
|
||||||
this.files = files;
|
this.files = files;
|
||||||
this.authors = authors;
|
this.authors = authors;
|
||||||
|
this.references = references;
|
||||||
|
this.formatStandard = formatStandard;
|
||||||
}
|
}
|
||||||
|
|
||||||
public PaperDto(Paper paper) {
|
public PaperDto(Paper paper) {
|
||||||
@ -88,6 +94,7 @@ public class PaperDto {
|
|||||||
this.files = convert(paper.getFiles(), FileDataDto::new);
|
this.files = convert(paper.getFiles(), FileDataDto::new);
|
||||||
this.authorIds = convert(paper.getAuthors(), user -> user.getId());
|
this.authorIds = convert(paper.getAuthors(), user -> user.getId());
|
||||||
this.authors = convert(paper.getAuthors(), UserDto::new);
|
this.authors = convert(paper.getAuthors(), UserDto::new);
|
||||||
|
this.references = convert(paper.getReferences(), ReferenceDto::new);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getId() {
|
public Integer getId() {
|
||||||
@ -216,4 +223,20 @@ public class PaperDto {
|
|||||||
public void setFilterAuthorId(Integer filterAuthorId) {
|
public void setFilterAuthorId(Integer filterAuthorId) {
|
||||||
this.filterAuthorId = filterAuthorId;
|
this.filterAuthorId = filterAuthorId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<ReferenceDto> getReferences() {
|
||||||
|
return references;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setReferences(List<ReferenceDto> references) {
|
||||||
|
this.references = references;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ReferenceDto.FormatStandard getFormatStandard() {
|
||||||
|
return formatStandard;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFormatStandard(ReferenceDto.FormatStandard formatStandard) {
|
||||||
|
this.formatStandard = formatStandard;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
88
src/main/java/ru/ulstu/paper/model/Reference.java
Normal file
88
src/main/java/ru/ulstu/paper/model/Reference.java
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
package ru.ulstu.paper.model;
|
||||||
|
|
||||||
|
import ru.ulstu.core.model.BaseEntity;
|
||||||
|
|
||||||
|
import javax.persistence.Column;
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.EnumType;
|
||||||
|
import javax.persistence.Enumerated;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
public class Reference extends BaseEntity {
|
||||||
|
|
||||||
|
private String authors;
|
||||||
|
|
||||||
|
@Column(name = "publication_title")
|
||||||
|
private String publicationTitle;
|
||||||
|
|
||||||
|
@Column(name = "publication_year")
|
||||||
|
private Integer publicationYear;
|
||||||
|
|
||||||
|
private String publisher;
|
||||||
|
|
||||||
|
private String pages;
|
||||||
|
|
||||||
|
@Column(name = "journal_or_collection_title")
|
||||||
|
private String journalOrCollectionTitle;
|
||||||
|
|
||||||
|
@Enumerated(value = EnumType.STRING)
|
||||||
|
@Column(name = "reference_type")
|
||||||
|
private ReferenceDto.ReferenceType referenceType = ReferenceDto.ReferenceType.ARTICLE;
|
||||||
|
|
||||||
|
public String getAuthors() {
|
||||||
|
return authors;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAuthors(String authors) {
|
||||||
|
this.authors = authors;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPublicationTitle() {
|
||||||
|
return publicationTitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPublicationTitle(String publicationTitle) {
|
||||||
|
this.publicationTitle = publicationTitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getPublicationYear() {
|
||||||
|
return publicationYear;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPublicationYear(Integer publicationYear) {
|
||||||
|
this.publicationYear = publicationYear;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPublisher() {
|
||||||
|
return publisher;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPublisher(String publisher) {
|
||||||
|
this.publisher = publisher;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPages() {
|
||||||
|
return pages;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPages(String pages) {
|
||||||
|
this.pages = pages;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getJournalOrCollectionTitle() {
|
||||||
|
return journalOrCollectionTitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setJournalOrCollectionTitle(String journalOrCollectionTitle) {
|
||||||
|
this.journalOrCollectionTitle = journalOrCollectionTitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ReferenceDto.ReferenceType getReferenceType() {
|
||||||
|
return referenceType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setReferenceType(ReferenceDto.ReferenceType referenceType) {
|
||||||
|
this.referenceType = referenceType;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -34,6 +34,7 @@ public class ReferenceDto {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Integer id;
|
||||||
private String authors;
|
private String authors;
|
||||||
private String publicationTitle;
|
private String publicationTitle;
|
||||||
private Integer publicationYear;
|
private Integer publicationYear;
|
||||||
@ -42,9 +43,11 @@ public class ReferenceDto {
|
|||||||
private String journalOrCollectionTitle;
|
private String journalOrCollectionTitle;
|
||||||
private ReferenceType referenceType;
|
private ReferenceType referenceType;
|
||||||
private FormatStandard formatStandard;
|
private FormatStandard formatStandard;
|
||||||
|
private boolean deleted;
|
||||||
|
|
||||||
@JsonCreator
|
@JsonCreator
|
||||||
public ReferenceDto(
|
public ReferenceDto(
|
||||||
|
@JsonProperty("id") Integer id,
|
||||||
@JsonProperty("authors") String authors,
|
@JsonProperty("authors") String authors,
|
||||||
@JsonProperty("publicationTitle") String publicationTitle,
|
@JsonProperty("publicationTitle") String publicationTitle,
|
||||||
@JsonProperty("publicationYear") Integer publicationYear,
|
@JsonProperty("publicationYear") Integer publicationYear,
|
||||||
@ -52,7 +55,9 @@ public class ReferenceDto {
|
|||||||
@JsonProperty("pages") String pages,
|
@JsonProperty("pages") String pages,
|
||||||
@JsonProperty("journalOrCollectionTitle") String journalOrCollectionTitle,
|
@JsonProperty("journalOrCollectionTitle") String journalOrCollectionTitle,
|
||||||
@JsonProperty("referenceType") ReferenceType referenceType,
|
@JsonProperty("referenceType") ReferenceType referenceType,
|
||||||
@JsonProperty("formatStandard") FormatStandard formatStandard) {
|
@JsonProperty("formatStandard") FormatStandard formatStandard,
|
||||||
|
@JsonProperty("isDeleted") boolean deleted) {
|
||||||
|
this.id = id;
|
||||||
this.authors = authors;
|
this.authors = authors;
|
||||||
this.publicationTitle = publicationTitle;
|
this.publicationTitle = publicationTitle;
|
||||||
this.publicationYear = publicationYear;
|
this.publicationYear = publicationYear;
|
||||||
@ -61,6 +66,22 @@ public class ReferenceDto {
|
|||||||
this.journalOrCollectionTitle = journalOrCollectionTitle;
|
this.journalOrCollectionTitle = journalOrCollectionTitle;
|
||||||
this.referenceType = referenceType;
|
this.referenceType = referenceType;
|
||||||
this.formatStandard = formatStandard;
|
this.formatStandard = formatStandard;
|
||||||
|
this.deleted = deleted;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ReferenceDto(Reference reference) {
|
||||||
|
this.id = reference.getId();
|
||||||
|
this.authors = reference.getAuthors();
|
||||||
|
this.publicationTitle = reference.getPublicationTitle();
|
||||||
|
this.publicationYear = reference.getPublicationYear();
|
||||||
|
this.publisher = reference.getPublisher();
|
||||||
|
this.pages = reference.getPages();
|
||||||
|
this.journalOrCollectionTitle = reference.getJournalOrCollectionTitle();
|
||||||
|
this.referenceType = reference.getReferenceType();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ReferenceDto() {
|
||||||
|
referenceType = ReferenceType.ARTICLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getAuthors() {
|
public String getAuthors() {
|
||||||
@ -126,4 +147,20 @@ public class ReferenceDto {
|
|||||||
public void setFormatStandard(FormatStandard formatStandard) {
|
public void setFormatStandard(FormatStandard formatStandard) {
|
||||||
this.formatStandard = formatStandard;
|
this.formatStandard = formatStandard;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Integer getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Integer id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean getDeleted() {
|
||||||
|
return deleted;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDeleted(boolean deleted) {
|
||||||
|
this.deleted = deleted;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,23 @@
|
|||||||
|
package ru.ulstu.paper.repository;
|
||||||
|
|
||||||
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.data.jpa.repository.Query;
|
||||||
|
import ru.ulstu.paper.model.Reference;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface ReferenceRepository extends JpaRepository<Reference, Integer> {
|
||||||
|
void deleteById(Integer id);
|
||||||
|
|
||||||
|
@Query("SELECT DISTINCT r.authors FROM Reference r")
|
||||||
|
List<String> findDistinctAuthors();
|
||||||
|
|
||||||
|
@Query("SELECT DISTINCT r.publicationTitle FROM Reference r")
|
||||||
|
List<String> findDistinctPublicationTitles();
|
||||||
|
|
||||||
|
@Query("SELECT DISTINCT r.publisher FROM Reference r")
|
||||||
|
List<String> findDistinctPublishers();
|
||||||
|
|
||||||
|
@Query("SELECT DISTINCT r.journalOrCollectionTitle FROM Reference r where r.journalOrCollectionTitle <> ''")
|
||||||
|
List<String> findDistinctJournalOrCollectionTitles();
|
||||||
|
}
|
@ -7,11 +7,14 @@ import ru.ulstu.deadline.model.Deadline;
|
|||||||
import ru.ulstu.deadline.service.DeadlineService;
|
import ru.ulstu.deadline.service.DeadlineService;
|
||||||
import ru.ulstu.file.model.FileDataDto;
|
import ru.ulstu.file.model.FileDataDto;
|
||||||
import ru.ulstu.file.service.FileService;
|
import ru.ulstu.file.service.FileService;
|
||||||
|
import ru.ulstu.paper.model.AutoCompleteData;
|
||||||
import ru.ulstu.paper.model.Paper;
|
import ru.ulstu.paper.model.Paper;
|
||||||
import ru.ulstu.paper.model.PaperDto;
|
import ru.ulstu.paper.model.PaperDto;
|
||||||
import ru.ulstu.paper.model.PaperListDto;
|
import ru.ulstu.paper.model.PaperListDto;
|
||||||
|
import ru.ulstu.paper.model.Reference;
|
||||||
import ru.ulstu.paper.model.ReferenceDto;
|
import ru.ulstu.paper.model.ReferenceDto;
|
||||||
import ru.ulstu.paper.repository.PaperRepository;
|
import ru.ulstu.paper.repository.PaperRepository;
|
||||||
|
import ru.ulstu.paper.repository.ReferenceRepository;
|
||||||
import ru.ulstu.timeline.service.EventService;
|
import ru.ulstu.timeline.service.EventService;
|
||||||
import ru.ulstu.user.model.User;
|
import ru.ulstu.user.model.User;
|
||||||
import ru.ulstu.user.service.UserService;
|
import ru.ulstu.user.service.UserService;
|
||||||
@ -39,6 +42,7 @@ import static ru.ulstu.paper.model.ReferenceDto.ReferenceType.ARTICLE;
|
|||||||
import static ru.ulstu.paper.model.ReferenceDto.ReferenceType.BOOK;
|
import static ru.ulstu.paper.model.ReferenceDto.ReferenceType.BOOK;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
|
@Transactional
|
||||||
public class PaperService {
|
public class PaperService {
|
||||||
private final static int MAX_DISPLAY_SIZE = 40;
|
private final static int MAX_DISPLAY_SIZE = 40;
|
||||||
private final static String PAPER_FORMATTED_TEMPLATE = "%s %s";
|
private final static String PAPER_FORMATTED_TEMPLATE = "%s %s";
|
||||||
@ -49,14 +53,17 @@ public class PaperService {
|
|||||||
private final DeadlineService deadlineService;
|
private final DeadlineService deadlineService;
|
||||||
private final FileService fileService;
|
private final FileService fileService;
|
||||||
private final EventService eventService;
|
private final EventService eventService;
|
||||||
|
private final ReferenceRepository referenceRepository;
|
||||||
|
|
||||||
public PaperService(PaperRepository paperRepository,
|
public PaperService(PaperRepository paperRepository,
|
||||||
|
ReferenceRepository referenceRepository,
|
||||||
FileService fileService,
|
FileService fileService,
|
||||||
PaperNotificationService paperNotificationService,
|
PaperNotificationService paperNotificationService,
|
||||||
UserService userService,
|
UserService userService,
|
||||||
DeadlineService deadlineService,
|
DeadlineService deadlineService,
|
||||||
EventService eventService) {
|
EventService eventService) {
|
||||||
this.paperRepository = paperRepository;
|
this.paperRepository = paperRepository;
|
||||||
|
this.referenceRepository = referenceRepository;
|
||||||
this.fileService = fileService;
|
this.fileService = fileService;
|
||||||
this.paperNotificationService = paperNotificationService;
|
this.paperNotificationService = paperNotificationService;
|
||||||
this.userService = userService;
|
this.userService = userService;
|
||||||
@ -117,6 +124,7 @@ public class PaperService {
|
|||||||
paper.setTitle(paperDto.getTitle());
|
paper.setTitle(paperDto.getTitle());
|
||||||
paper.setUpdateDate(new Date());
|
paper.setUpdateDate(new Date());
|
||||||
paper.setDeadlines(deadlineService.saveOrCreate(paperDto.getDeadlines()));
|
paper.setDeadlines(deadlineService.saveOrCreate(paperDto.getDeadlines()));
|
||||||
|
paper.setReferences(saveOrCreateReferences(paperDto.getReferences()));
|
||||||
paper.setFiles(fileService.saveOrCreate(paperDto.getFiles().stream()
|
paper.setFiles(fileService.saveOrCreate(paperDto.getFiles().stream()
|
||||||
.filter(f -> !f.isDeleted())
|
.filter(f -> !f.isDeleted())
|
||||||
.collect(toList())));
|
.collect(toList())));
|
||||||
@ -127,6 +135,41 @@ public class PaperService {
|
|||||||
return paper;
|
return paper;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<Reference> saveOrCreateReferences(List<ReferenceDto> references) {
|
||||||
|
return references
|
||||||
|
.stream()
|
||||||
|
.filter(reference -> !reference.getDeleted())
|
||||||
|
.map(reference -> reference.getId() != null ? updateReference(reference) : createReference(reference))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transactional
|
||||||
|
public Reference updateReference(ReferenceDto referenceDto) {
|
||||||
|
Reference updateReference = referenceRepository.findOne(referenceDto.getId());
|
||||||
|
copyFromDto(updateReference, referenceDto);
|
||||||
|
referenceRepository.save(updateReference);
|
||||||
|
return updateReference;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transactional
|
||||||
|
public Reference createReference(ReferenceDto referenceDto) {
|
||||||
|
Reference newReference = new Reference();
|
||||||
|
copyFromDto(newReference, referenceDto);
|
||||||
|
newReference = referenceRepository.save(newReference);
|
||||||
|
return newReference;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Reference copyFromDto(Reference reference, ReferenceDto referenceDto) {
|
||||||
|
reference.setAuthors(referenceDto.getAuthors());
|
||||||
|
reference.setJournalOrCollectionTitle(referenceDto.getJournalOrCollectionTitle());
|
||||||
|
reference.setPages(referenceDto.getPages());
|
||||||
|
reference.setPublicationTitle(referenceDto.getPublicationTitle());
|
||||||
|
reference.setPublicationYear(referenceDto.getPublicationYear());
|
||||||
|
reference.setPublisher(referenceDto.getPublisher());
|
||||||
|
reference.setReferenceType(referenceDto.getReferenceType());
|
||||||
|
return reference;
|
||||||
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public Integer update(PaperDto paperDto) throws IOException {
|
public Integer update(PaperDto paperDto) throws IOException {
|
||||||
Paper paper = paperRepository.findOne(paperDto.getId());
|
Paper paper = paperRepository.findOne(paperDto.getId());
|
||||||
@ -139,6 +182,11 @@ public class PaperService {
|
|||||||
fileService.delete(file.getId());
|
fileService.delete(file.getId());
|
||||||
}
|
}
|
||||||
paperRepository.save(copyFromDto(paper, paperDto));
|
paperRepository.save(copyFromDto(paper, paperDto));
|
||||||
|
for (ReferenceDto referenceDto : paperDto.getReferences().stream()
|
||||||
|
.filter(f -> f.getDeleted() && f.getId() != null)
|
||||||
|
.collect(toList())) {
|
||||||
|
referenceRepository.deleteById(referenceDto.getId());
|
||||||
|
}
|
||||||
eventService.updatePaperDeadlines(paper);
|
eventService.updatePaperDeadlines(paper);
|
||||||
|
|
||||||
paper.getAuthors().forEach(author -> {
|
paper.getAuthors().forEach(author -> {
|
||||||
@ -168,6 +216,14 @@ public class PaperService {
|
|||||||
return Arrays.asList(Paper.PaperType.values());
|
return Arrays.asList(Paper.PaperType.values());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<ReferenceDto.FormatStandard> getFormatStandards() {
|
||||||
|
return Arrays.asList(ReferenceDto.FormatStandard.values());
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<ReferenceDto.ReferenceType> getReferenceTypes() {
|
||||||
|
return Arrays.asList(ReferenceDto.ReferenceType.values());
|
||||||
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public Paper create(String title, User user, Date deadlineDate) {
|
public Paper create(String title, User user, Date deadlineDate) {
|
||||||
Paper paper = new Paper();
|
Paper paper = new Paper();
|
||||||
@ -287,12 +343,23 @@ public class PaperService {
|
|||||||
: getSpringerReference(referenceDto);
|
: getSpringerReference(referenceDto);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getFormattedReferences(PaperDto paperDto) {
|
||||||
|
return String.join("\r\n", paperDto.getReferences()
|
||||||
|
.stream()
|
||||||
|
.filter(r -> !r.getDeleted())
|
||||||
|
.map(r -> {
|
||||||
|
r.setFormatStandard(paperDto.getFormatStandard());
|
||||||
|
return getFormattedReference(r);
|
||||||
|
})
|
||||||
|
.collect(Collectors.toList()));
|
||||||
|
}
|
||||||
|
|
||||||
public String getGostReference(ReferenceDto referenceDto) {
|
public String getGostReference(ReferenceDto referenceDto) {
|
||||||
return MessageFormat.format(referenceDto.getReferenceType() == BOOK ? "{0} {1} - {2}{3}. - {4}с." : "{0} {1}{5} {2}{3}. С. {4}.",
|
return MessageFormat.format(referenceDto.getReferenceType() == BOOK ? "{0} {1} - {2}{3}. - {4}с." : "{0} {1}{5} {2}{3}. С. {4}.",
|
||||||
referenceDto.getAuthors(),
|
referenceDto.getAuthors(),
|
||||||
referenceDto.getPublicationTitle(),
|
referenceDto.getPublicationTitle(),
|
||||||
StringUtils.isEmpty(referenceDto.getPublisher()) ? "" : referenceDto.getPublisher() + ", ",
|
StringUtils.isEmpty(referenceDto.getPublisher()) ? "" : referenceDto.getPublisher() + ", ",
|
||||||
referenceDto.getPublicationYear().toString(),
|
referenceDto.getPublicationYear() != null ? referenceDto.getPublicationYear().toString() : "",
|
||||||
referenceDto.getPages(),
|
referenceDto.getPages(),
|
||||||
StringUtils.isEmpty(referenceDto.getJournalOrCollectionTitle()) ? "." : " // " + referenceDto.getJournalOrCollectionTitle() + ".");
|
StringUtils.isEmpty(referenceDto.getJournalOrCollectionTitle()) ? "." : " // " + referenceDto.getJournalOrCollectionTitle() + ".");
|
||||||
}
|
}
|
||||||
@ -300,7 +367,7 @@ public class PaperService {
|
|||||||
public String getSpringerReference(ReferenceDto referenceDto) {
|
public String getSpringerReference(ReferenceDto referenceDto) {
|
||||||
return MessageFormat.format("{0} ({1}) {2}.{3} {4}pp {5}",
|
return MessageFormat.format("{0} ({1}) {2}.{3} {4}pp {5}",
|
||||||
referenceDto.getAuthors(),
|
referenceDto.getAuthors(),
|
||||||
referenceDto.getPublicationYear().toString(),
|
referenceDto.getPublicationYear() != null ? referenceDto.getPublicationYear().toString() : "",
|
||||||
referenceDto.getPublicationTitle(),
|
referenceDto.getPublicationTitle(),
|
||||||
referenceDto.getReferenceType() == ARTICLE ? " " + referenceDto.getJournalOrCollectionTitle() + "," : "",
|
referenceDto.getReferenceType() == ARTICLE ? " " + referenceDto.getJournalOrCollectionTitle() + "," : "",
|
||||||
StringUtils.isEmpty(referenceDto.getPublisher()) ? "" : referenceDto.getPublisher() + ", ",
|
StringUtils.isEmpty(referenceDto.getPublisher()) ? "" : referenceDto.getPublisher() + ", ",
|
||||||
@ -310,4 +377,13 @@ public class PaperService {
|
|||||||
public List<Paper> findAllCompletedByType(Paper.PaperType type) {
|
public List<Paper> findAllCompletedByType(Paper.PaperType type) {
|
||||||
return paperRepository.findByTypeAndStatus(type, Paper.PaperStatus.COMPLETED);
|
return paperRepository.findByTypeAndStatus(type, Paper.PaperStatus.COMPLETED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public AutoCompleteData getAutoCompleteData() {
|
||||||
|
AutoCompleteData autoCompleteData = new AutoCompleteData();
|
||||||
|
autoCompleteData.setAuthors(referenceRepository.findDistinctAuthors());
|
||||||
|
autoCompleteData.setJournalOrCollectionTitles(referenceRepository.findDistinctJournalOrCollectionTitles());
|
||||||
|
autoCompleteData.setPublicationTitles(referenceRepository.findDistinctPublicationTitles());
|
||||||
|
autoCompleteData.setPublishers(referenceRepository.findDistinctPublishers());
|
||||||
|
return autoCompleteData;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
27
src/main/resources/db/changelog-20190523_000000-schema.xml
Normal file
27
src/main/resources/db/changelog-20190523_000000-schema.xml
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<?xml version="1.1" encoding="UTF-8" standalone="no"?>
|
||||||
|
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd">
|
||||||
|
<changeSet author="masha" id="20190523_000000-1">
|
||||||
|
<createTable tableName="reference">
|
||||||
|
<column name="id" type="integer">
|
||||||
|
<constraints nullable="false"/>
|
||||||
|
</column>
|
||||||
|
<column name="authors" type="varchar(255)"/>
|
||||||
|
<column name="publication_title" type="varchar(255)"/>
|
||||||
|
<column name="publication_year" type="integer"/>
|
||||||
|
<column name="paper_id" type="integer"/>
|
||||||
|
<column name="publisher" type="varchar(255)"/>
|
||||||
|
<column name="pages" type="varchar(255)"/>
|
||||||
|
<column name="journal_or_collection_title" type="varchar(255)"/>
|
||||||
|
<column name="reference_type" type="varchar(255)">
|
||||||
|
<constraints nullable="false"/>
|
||||||
|
</column>
|
||||||
|
<column name="version" type="integer"/>
|
||||||
|
</createTable>
|
||||||
|
<addPrimaryKey columnNames="id" constraintName="pk_reference" tableName="reference"/>
|
||||||
|
<addForeignKeyConstraint baseTableName="reference" baseColumnNames="paper_id"
|
||||||
|
constraintName="fk_reference_paper_id" referencedTableName="paper"
|
||||||
|
referencedColumnNames="id"/>
|
||||||
|
</changeSet>
|
||||||
|
</databaseChangeLog>
|
@ -42,4 +42,5 @@
|
|||||||
<include file="db/changelog-20190507_000000-schema.xml"/>
|
<include file="db/changelog-20190507_000000-schema.xml"/>
|
||||||
<include file="db/changelog-20190507_000001-schema.xml"/>
|
<include file="db/changelog-20190507_000001-schema.xml"/>
|
||||||
<include file="db/changelog-20190511_000000-schema.xml"/>
|
<include file="db/changelog-20190511_000000-schema.xml"/>
|
||||||
|
<include file="db/changelog-20190523_000000-schema.xml"/>
|
||||||
</databaseChangeLog>
|
</databaseChangeLog>
|
@ -7,3 +7,34 @@
|
|||||||
.nav-tabs {
|
.nav-tabs {
|
||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#nav-references label, #nav-references select, #nav-references input {
|
||||||
|
display: inline-block;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
#nav-references .collapse-heading {
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 5px 15px;
|
||||||
|
background-color: #efefef;
|
||||||
|
}
|
||||||
|
|
||||||
|
#nav-references .collapse-heading a {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#nav-references a:hover {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#nav-references #formattedReferencesArea {
|
||||||
|
height: 150px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui-autocomplete {
|
||||||
|
max-height: 200px;
|
||||||
|
max-width: 400px;
|
||||||
|
overflow-y: scroll;
|
||||||
|
overflow-x: hidden;
|
||||||
|
}
|
@ -4,6 +4,7 @@
|
|||||||
var urlFileUpload = "/api/1.0/files/uploadTmpFile";
|
var urlFileUpload = "/api/1.0/files/uploadTmpFile";
|
||||||
var urlFileDownload = "/api/1.0/files/download/";
|
var urlFileDownload = "/api/1.0/files/download/";
|
||||||
var urlPdfGenerating = "/papers/generatePdf";
|
var urlPdfGenerating = "/papers/generatePdf";
|
||||||
|
var urlReferencesFormatting = "/papers/getFormattedReferences";
|
||||||
var urlFileDownloadTmp = "/api/1.0/files/download-tmp/";
|
var urlFileDownloadTmp = "/api/1.0/files/download-tmp/";
|
||||||
|
|
||||||
/* exported MessageTypesEnum */
|
/* exported MessageTypesEnum */
|
||||||
|
@ -4,6 +4,10 @@
|
|||||||
layout:decorator="default" xmlns:th="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/html">
|
layout:decorator="default" xmlns:th="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/html">
|
||||||
<head>
|
<head>
|
||||||
<link rel="stylesheet" href="../css/paper.css"/>
|
<link rel="stylesheet" href="../css/paper.css"/>
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css"/>
|
||||||
|
<script type="text/javascript" src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
@ -31,6 +35,9 @@
|
|||||||
href="#nav-main" role="tab" aria-controls="nav-main" aria-selected="true">Статья</a>
|
href="#nav-main" role="tab" aria-controls="nav-main" aria-selected="true">Статья</a>
|
||||||
<a class="nav-item nav-link" id="nav-latex-tab" data-toggle="tab"
|
<a class="nav-item nav-link" id="nav-latex-tab" data-toggle="tab"
|
||||||
href="#nav-latex" role="tab" aria-controls="nav-latex" aria-selected="false">Latex</a>
|
href="#nav-latex" role="tab" aria-controls="nav-latex" aria-selected="false">Latex</a>
|
||||||
|
<a class="nav-item nav-link" id="nav-references-tab" data-toggle="tab"
|
||||||
|
href="#nav-references" role="tab" aria-controls="nav-references"
|
||||||
|
aria-selected="false">References</a>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
<div class="tab-content" id="nav-tabContent">
|
<div class="tab-content" id="nav-tabContent">
|
||||||
@ -103,13 +110,15 @@
|
|||||||
class="alert alert-danger">Incorrect title</p>
|
class="alert alert-danger">Incorrect title</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<input type="submit" id="addDeadline" name="addDeadline" class="btn btn-primary"
|
<input type="submit" id="addDeadline" name="addDeadline"
|
||||||
|
class="btn btn-primary"
|
||||||
value="Добавить
|
value="Добавить
|
||||||
дедлайн"/>
|
дедлайн"/>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Авторы:</label>
|
<label>Авторы:</label>
|
||||||
<select class="selectpicker form-control" multiple="true" data-live-search="true"
|
<select class="selectpicker form-control" multiple="true"
|
||||||
|
data-live-search="true"
|
||||||
title="-- Выберите авторов --"
|
title="-- Выберите авторов --"
|
||||||
th:field="*{authorIds}">
|
th:field="*{authorIds}">
|
||||||
<option th:each="author: ${allAuthors}" th:value="${author.id}"
|
<option th:each="author: ${allAuthors}" th:value="${author.id}"
|
||||||
@ -167,6 +176,125 @@
|
|||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="tab-pane fade" id="nav-references" role="tabpanel"
|
||||||
|
aria-labelledby="nav-profile-tab">
|
||||||
|
<div class="form-group">
|
||||||
|
<label>References:</label>
|
||||||
|
<th:block th:each="reference, rowStat : *{references}">
|
||||||
|
<div class="row" th:id="|reference${rowStat.index}|"
|
||||||
|
th:style="${reference.deleted} ? 'display: none;' :''">
|
||||||
|
|
||||||
|
<div class="form-group col-11">
|
||||||
|
<a data-toggle="collapse"
|
||||||
|
th:href="${'#collapseReference'+rowStat.index}"
|
||||||
|
aria-expanded="false">
|
||||||
|
<div class="collapse-heading"
|
||||||
|
th:text="${(reference.referenceType.toString() == 'ARTICLE'?'Статья':'Книга') +'. '
|
||||||
|
+(reference.publicationTitle==null?'':reference.publicationTitle+'. ')+(reference.authors==null?'':reference.authors+'. ') }">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="col-1">
|
||||||
|
<a class="btn btn-danger float-right"
|
||||||
|
th:onclick="|$('#references${rowStat.index}\\.deleted').val('true'); $('#reference${rowStat.index}').hide(); |"><span
|
||||||
|
aria-hidden="true"><i class="fa fa-times"/></span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="collapse" th:id="${'collapseReference'+rowStat.index}">
|
||||||
|
<input type="hidden"
|
||||||
|
th:field="*{references[__${rowStat.index}__].id}"/>
|
||||||
|
<input type="hidden"
|
||||||
|
th:field="*{references[__${rowStat.index}__].deleted}"/>
|
||||||
|
|
||||||
|
<div class="form-group col-12">
|
||||||
|
<label class="col-4">Вид публикации:</label>
|
||||||
|
<select class="form-control col-7"
|
||||||
|
th:field="*{references[__${rowStat.index}__].referenceType}">
|
||||||
|
<option th:each="type : ${allReferenceTypes}"
|
||||||
|
th:value="${type}"
|
||||||
|
th:text="${type.typeName}">Type
|
||||||
|
</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="form-group col-12">
|
||||||
|
<label class="col-4">Авторы:</label>
|
||||||
|
<input type="text"
|
||||||
|
class="form-control col-7 autocomplete author"
|
||||||
|
name="authors"
|
||||||
|
th:field="*{references[__${rowStat.index}__].authors}"/>
|
||||||
|
</div>
|
||||||
|
<div class="form-group col-12">
|
||||||
|
<label class="col-4 ">Название публикации:</label>
|
||||||
|
<input type="text"
|
||||||
|
class="form-control col-7 autocomplete publicationTitle"
|
||||||
|
name="publicationTitle"
|
||||||
|
th:field="*{references[__${rowStat.index}__].publicationTitle}"/>
|
||||||
|
</div>
|
||||||
|
<div class="form-group col-12">
|
||||||
|
<label class="col-4">Год издания:</label>
|
||||||
|
<input type="number" class="form-control col-7 "
|
||||||
|
name="publicationYear"
|
||||||
|
th:field="*{references[__${rowStat.index}__].publicationYear}"/>
|
||||||
|
</div>
|
||||||
|
<div class="form-group col-12">
|
||||||
|
<label class="col-4">Издательство:</label>
|
||||||
|
<input type="text"
|
||||||
|
class="form-control col-7 autocomplete publisher"
|
||||||
|
name="publisher"
|
||||||
|
th:field="*{references[__${rowStat.index}__].publisher}"/>
|
||||||
|
</div>
|
||||||
|
<div class="form-group col-12">
|
||||||
|
<label class="col-4">Страницы:</label>
|
||||||
|
<input type="text" class="form-control col-7" name="pages"
|
||||||
|
th:field="*{references[__${rowStat.index}__].pages}"/>
|
||||||
|
</div>
|
||||||
|
<div class="form-group col-12">
|
||||||
|
<label class="col-4">Название журнала или сборника статей
|
||||||
|
конференции:</label>
|
||||||
|
<input type="text"
|
||||||
|
class="form-control col-7 autocomplete journalOrCollectionTitle"
|
||||||
|
name="journalOrCollectionTitle"
|
||||||
|
th:field="*{references[__${rowStat.index}__].journalOrCollectionTitle}"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</th:block>
|
||||||
|
<div class="form-group">
|
||||||
|
<input type="submit" id="addReference" name="addReference"
|
||||||
|
class="btn btn-primary"
|
||||||
|
value="Добавить источник"/>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="col-12 form-group">
|
||||||
|
<label for="formatStandard">Стандарт форматирования:</label>
|
||||||
|
|
||||||
|
<select class="form-control" th:field="*{formatStandard}"
|
||||||
|
id="formatStandard">
|
||||||
|
<option th:each="standard : ${allFormatStandards}"
|
||||||
|
th:value="${standard}"
|
||||||
|
th:text="${standard.standardName}">standard
|
||||||
|
</option>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-12 form-group">
|
||||||
|
<button id="formatBtn" class="btn btn-primary text-uppercase"
|
||||||
|
onclick="getFormattedReferences()"
|
||||||
|
type="button">
|
||||||
|
Форматировать
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-12">
|
||||||
|
<textarea class="form-control"
|
||||||
|
id="formattedReferencesArea"></textarea>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-4 offset-md-1 col-sm-12 offset-sm-0">
|
<div class="col-md-4 offset-md-1 col-sm-12 offset-sm-0">
|
||||||
@ -379,6 +507,63 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getFormattedReferences() {
|
||||||
|
|
||||||
|
var formData = new FormData(document.forms.paperform);
|
||||||
|
var xhr = new XMLHttpRequest();
|
||||||
|
xhr.open("POST", urlReferencesFormatting);
|
||||||
|
console.log(formData);
|
||||||
|
xhr.send(formData);
|
||||||
|
|
||||||
|
xhr.onload = function () {
|
||||||
|
if (this.status == 200) {
|
||||||
|
console.debug(this.response);
|
||||||
|
$('#formattedReferencesArea').val(this.response);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
showFeedbackMessage("Ошибка при форматировании списка литературы", MessageTypesEnum.DANGER);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
<script th:inline="javascript">
|
||||||
|
/*<![CDATA[*/
|
||||||
|
|
||||||
|
var autoCompleteData = /*[[${autocompleteData}]]*/ 'default';
|
||||||
|
console.log(autoCompleteData);
|
||||||
|
|
||||||
|
|
||||||
|
$(".autocomplete.author").autocomplete({
|
||||||
|
source: autoCompleteData.authors,
|
||||||
|
minLength: 0,
|
||||||
|
}).focus(function () {
|
||||||
|
$(this).autocomplete("search");
|
||||||
|
});
|
||||||
|
|
||||||
|
$(".autocomplete.publicationTitle").autocomplete({
|
||||||
|
source: autoCompleteData.publicationTitles,
|
||||||
|
minLength: 0,
|
||||||
|
}).focus(function () {
|
||||||
|
$(this).autocomplete("search");
|
||||||
|
});
|
||||||
|
|
||||||
|
$(".autocomplete.publisher").autocomplete({
|
||||||
|
source: autoCompleteData.publishers,
|
||||||
|
minLength: 0,
|
||||||
|
}).focus(function () {
|
||||||
|
$(this).autocomplete("search");
|
||||||
|
});
|
||||||
|
|
||||||
|
$(".autocomplete.journalOrCollectionTitle").autocomplete({
|
||||||
|
source: autoCompleteData.journalOrCollectionTitles,
|
||||||
|
minLength: 0,
|
||||||
|
}).focus(function () {
|
||||||
|
$(this).autocomplete("search");
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
/*]]>*/
|
||||||
</script>
|
</script>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user