Compare commits
No commits in common. 'db4620694ce915010b52b7d034d967fa31a9fbb7' and '4ab3637d9cd0802d5613e4800150c243d9ba9941' have entirely different histories.
db4620694c
...
4ab3637d9c
@ -1,15 +0,0 @@
|
|||||||
pipeline {
|
|
||||||
agent any
|
|
||||||
stages {
|
|
||||||
stage('Build') {
|
|
||||||
steps {
|
|
||||||
./gradlew build
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('Test') {
|
|
||||||
steps {
|
|
||||||
./gradlew test
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,29 @@
|
|||||||
|
package ru.ulstu.conference.controller;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import ru.ulstu.conference.model.Conference;
|
||||||
|
import ru.ulstu.conference.service.ConferenceService;
|
||||||
|
|
||||||
|
import javax.faces.component.UIComponent;
|
||||||
|
import javax.faces.context.FacesContext;
|
||||||
|
import javax.faces.convert.Converter;
|
||||||
|
import javax.inject.Inject;
|
||||||
|
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class ConferenceConverter implements Converter {
|
||||||
|
@Inject
|
||||||
|
private ConferenceService conferenceService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getAsObject(FacesContext context, UIComponent component, String value) {
|
||||||
|
return value == null || value.equals("") ? null : conferenceService.findOne(Integer.valueOf(value));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getAsString(FacesContext context, UIComponent component, Object value) {
|
||||||
|
return value == null
|
||||||
|
? ""
|
||||||
|
: (value.getClass().equals(Conference.class) ? ((Conference) value).getId().toString() : null);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,71 @@
|
|||||||
|
package ru.ulstu.conference.controller;
|
||||||
|
|
||||||
|
import ru.ulstu.conference.model.Conference;
|
||||||
|
import ru.ulstu.conference.service.ConferenceService;
|
||||||
|
import ru.ulstu.core.util.FacesUtil;
|
||||||
|
import ru.ulstu.user.service.UserService;
|
||||||
|
|
||||||
|
import javax.annotation.PostConstruct;
|
||||||
|
import javax.faces.view.ViewScoped;
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.inject.Named;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Named
|
||||||
|
@ViewScoped
|
||||||
|
public class ConferenceDashboardView {
|
||||||
|
@Inject
|
||||||
|
private ConferenceService conferenceService;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private UserService userService;
|
||||||
|
|
||||||
|
private List<Conference> conferences;
|
||||||
|
|
||||||
|
private List<Conference> selectedConferences = new ArrayList<>();
|
||||||
|
|
||||||
|
private String newConferenceTitle;
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
public void init() {
|
||||||
|
conferences = conferenceService.findAllActiveByCurrentUser();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Conference> getConferences() {
|
||||||
|
return conferences;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void create() {
|
||||||
|
conferenceService.createByTitle(newConferenceTitle);
|
||||||
|
FacesUtil.showInfoMessage("Статья создана", newConferenceTitle);
|
||||||
|
newConferenceTitle = "";
|
||||||
|
conferences = conferenceService.findAllActiveByCurrentUser();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deleteSelected() {
|
||||||
|
conferenceService.delete(selectedConferences);
|
||||||
|
conferences = conferenceService.findAllActiveByCurrentUser();
|
||||||
|
FacesUtil.showInfoMessage("Было удалено статей: " + selectedConferences.size(), "");
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNewConferenceTitle() {
|
||||||
|
return newConferenceTitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNewConferenceTitle(String newConferenceTitle) {
|
||||||
|
this.newConferenceTitle = newConferenceTitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Conference> getSelectedConferences() {
|
||||||
|
return selectedConferences;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSelectedConferences(List<Conference> selectedConferences) {
|
||||||
|
this.selectedConferences = selectedConferences;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCurrentUser() {
|
||||||
|
return userService.getCurrentUser().getUserAbbreviate();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,89 @@
|
|||||||
|
package ru.ulstu.conference.controller;
|
||||||
|
|
||||||
|
import ru.ulstu.conference.model.Conference;
|
||||||
|
import ru.ulstu.conference.service.ConferenceService;
|
||||||
|
import ru.ulstu.core.navigation.Page;
|
||||||
|
import ru.ulstu.core.util.FacesUtil;
|
||||||
|
import ru.ulstu.deadline.model.Deadline;
|
||||||
|
import ru.ulstu.deadline.service.DeadlineService;
|
||||||
|
import ru.ulstu.user.model.User;
|
||||||
|
import ru.ulstu.user.service.UserService;
|
||||||
|
|
||||||
|
import javax.annotation.PostConstruct;
|
||||||
|
import javax.faces.view.ViewScoped;
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.inject.Named;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Named
|
||||||
|
@ViewScoped
|
||||||
|
public class ConferenceView implements Serializable {
|
||||||
|
@Inject
|
||||||
|
private ConferenceService conferenceService;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private DeadlineService deadlineService;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private UserService userService;
|
||||||
|
|
||||||
|
private Conference conference;
|
||||||
|
|
||||||
|
private Date newDeadlineDate;
|
||||||
|
|
||||||
|
private String newDeadlineDescription;
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
public void init() {
|
||||||
|
conference = conferenceService.findOne(Integer.valueOf(FacesUtil.getRequestParams().get("id")));
|
||||||
|
newDeadlineDescription = "";
|
||||||
|
newDeadlineDate = new Date();
|
||||||
|
FacesUtil.showInfoMessage("Статья открыта", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
public Conference getConference() {
|
||||||
|
return conference;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setConference(Conference conference) {
|
||||||
|
this.conference = conference;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<User> getAuthors() {
|
||||||
|
return userService.findAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String save() {
|
||||||
|
conferenceService.save(conference);
|
||||||
|
FacesUtil.showInfoMessage("Статья сохранена", "");
|
||||||
|
return Page.CONFERENCE_LIST + "?faces-redirect=true";
|
||||||
|
}
|
||||||
|
|
||||||
|
public Date getNewDeadlineDate() {
|
||||||
|
return newDeadlineDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNewDeadlineDate(Date newDeadlineDate) {
|
||||||
|
this.newDeadlineDate = newDeadlineDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNewDeadlineDescription() {
|
||||||
|
return newDeadlineDescription;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNewDeadlineDescription(String newDeadlineDescription) {
|
||||||
|
this.newDeadlineDescription = newDeadlineDescription;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deleteDeadline(Deadline deadline) {
|
||||||
|
conference.getDeadlines().remove(deadline);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addDeadline() {
|
||||||
|
conference.getDeadlines().add(deadlineService.create(newDeadlineDescription, newDeadlineDate));
|
||||||
|
newDeadlineDescription = "";
|
||||||
|
newDeadlineDate = new Date();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,63 @@
|
|||||||
|
package ru.ulstu.conference.controller;
|
||||||
|
|
||||||
|
import ru.ulstu.conference.model.Conference;
|
||||||
|
import ru.ulstu.conference.service.ConferenceService;
|
||||||
|
import ru.ulstu.core.util.FacesUtil;
|
||||||
|
|
||||||
|
import javax.annotation.PostConstruct;
|
||||||
|
import javax.faces.view.ViewScoped;
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.inject.Named;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Named
|
||||||
|
@ViewScoped
|
||||||
|
public class ConferencesView {
|
||||||
|
@Inject
|
||||||
|
private ConferenceService conferenceService;
|
||||||
|
|
||||||
|
private List<Conference> conferences;
|
||||||
|
|
||||||
|
private List<Conference> selectedConferences = new ArrayList<>();
|
||||||
|
|
||||||
|
private String newConferenceTitle;
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
public void init() {
|
||||||
|
conferences = conferenceService.findAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void create() {
|
||||||
|
conferenceService.createByTitle(newConferenceTitle);
|
||||||
|
FacesUtil.showInfoMessage("Конференция создана", newConferenceTitle);
|
||||||
|
newConferenceTitle = "";
|
||||||
|
conferences = conferenceService.findAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deleteSelected() {
|
||||||
|
conferenceService.delete(selectedConferences);
|
||||||
|
conferences = conferenceService.findAll();
|
||||||
|
FacesUtil.showInfoMessage("Было удалено конференций: " + selectedConferences.size(), "");
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Conference> getConferences() {
|
||||||
|
return conferences;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNewConferenceTitle() {
|
||||||
|
return newConferenceTitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNewConferenceTitle(String newConferenceTitle) {
|
||||||
|
this.newConferenceTitle = newConferenceTitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Conference> getSelectedConferences() {
|
||||||
|
return selectedConferences;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSelectedConferences(List<Conference> selectedConferences) {
|
||||||
|
this.selectedConferences = selectedConferences;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,23 @@
|
|||||||
|
package ru.ulstu.configuration;
|
||||||
|
|
||||||
|
import com.google.common.base.Predicates;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import springfox.documentation.builders.PathSelectors;
|
||||||
|
import springfox.documentation.builders.RequestHandlerSelectors;
|
||||||
|
import springfox.documentation.spi.DocumentationType;
|
||||||
|
import springfox.documentation.spring.web.plugins.Docket;
|
||||||
|
import springfox.documentation.swagger2.annotations.EnableSwagger2;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
@EnableSwagger2
|
||||||
|
public class SwaggerConfiguration {
|
||||||
|
@Bean
|
||||||
|
public Docket swaggerApi() {
|
||||||
|
return new Docket(DocumentationType.SWAGGER_2)
|
||||||
|
.select()
|
||||||
|
.apis(RequestHandlerSelectors.any())
|
||||||
|
.paths(Predicates.not(PathSelectors.regex("/error")))
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
}
|
@ -1,115 +0,0 @@
|
|||||||
package ru.ulstu.core.controller;
|
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
import org.springframework.validation.FieldError;
|
|
||||||
import org.springframework.web.bind.MethodArgumentNotValidException;
|
|
||||||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
|
||||||
import org.springframework.web.bind.annotation.ModelAttribute;
|
|
||||||
import ru.ulstu.core.error.EntityIdIsNullException;
|
|
||||||
import ru.ulstu.core.model.ErrorConstants;
|
|
||||||
import ru.ulstu.core.model.response.Response;
|
|
||||||
import ru.ulstu.core.model.response.ResponseExtended;
|
|
||||||
import ru.ulstu.user.error.UserActivationError;
|
|
||||||
import ru.ulstu.user.error.UserEmailExistsException;
|
|
||||||
import ru.ulstu.user.error.UserIdExistsException;
|
|
||||||
import ru.ulstu.user.error.UserIsUndeadException;
|
|
||||||
import ru.ulstu.user.error.UserLoginExistsException;
|
|
||||||
import ru.ulstu.user.error.UserNotActivatedException;
|
|
||||||
import ru.ulstu.user.error.UserNotFoundException;
|
|
||||||
import ru.ulstu.user.error.UserPasswordsNotValidOrNotMatchException;
|
|
||||||
import ru.ulstu.user.error.UserResetKeyError;
|
|
||||||
import ru.ulstu.user.error.UserSendingMailException;
|
|
||||||
import ru.ulstu.user.service.UserService;
|
|
||||||
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
//@ControllerAdvice
|
|
||||||
public class AdviceController {
|
|
||||||
private final Logger log = LoggerFactory.getLogger(AdviceController.class);
|
|
||||||
private final UserService userService;
|
|
||||||
|
|
||||||
public AdviceController(UserService userService) {
|
|
||||||
this.userService = userService;
|
|
||||||
}
|
|
||||||
|
|
||||||
@ModelAttribute("flashMessage")
|
|
||||||
public String getFlashMessage() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Response<Void> handleException(ErrorConstants error) {
|
|
||||||
log.warn(error.toString());
|
|
||||||
return new Response<>(error);
|
|
||||||
}
|
|
||||||
|
|
||||||
private <E> ResponseExtended<E> handleException(ErrorConstants error, E errorData) {
|
|
||||||
log.warn(error.toString());
|
|
||||||
return new ResponseExtended<>(error, errorData);
|
|
||||||
}
|
|
||||||
|
|
||||||
@ExceptionHandler(EntityIdIsNullException.class)
|
|
||||||
public Response<Void> handleEntityIdIsNullException(Throwable e) {
|
|
||||||
return handleException(ErrorConstants.ID_IS_NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
@ExceptionHandler(MethodArgumentNotValidException.class)
|
|
||||||
public ResponseExtended<Set<String>> handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
|
|
||||||
final Set<String> errors = e.getBindingResult().getAllErrors().stream()
|
|
||||||
.filter(error -> error instanceof FieldError)
|
|
||||||
.map(error -> ((FieldError) error).getField())
|
|
||||||
.collect(Collectors.toSet());
|
|
||||||
return handleException(ErrorConstants.VALIDATION_ERROR, errors);
|
|
||||||
}
|
|
||||||
|
|
||||||
@ExceptionHandler(UserIdExistsException.class)
|
|
||||||
public Response<Void> handleUserIdExistsException(Throwable e) {
|
|
||||||
return handleException(ErrorConstants.USER_ID_EXISTS);
|
|
||||||
}
|
|
||||||
|
|
||||||
@ExceptionHandler(UserActivationError.class)
|
|
||||||
public ResponseExtended<String> handleUserActivationError(Throwable e) {
|
|
||||||
return handleException(ErrorConstants.USER_ACTIVATION_ERROR, e.getMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
@ExceptionHandler(UserLoginExistsException.class)
|
|
||||||
public ResponseExtended<String> handleUserLoginExistsException(Throwable e) {
|
|
||||||
return handleException(ErrorConstants.USER_LOGIN_EXISTS, e.getMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
@ExceptionHandler(UserEmailExistsException.class)
|
|
||||||
public ResponseExtended<String> handleUserEmailExistsException(Throwable e) {
|
|
||||||
return handleException(ErrorConstants.USER_EMAIL_EXISTS, e.getMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
@ExceptionHandler(UserPasswordsNotValidOrNotMatchException.class)
|
|
||||||
public Response<Void> handleUserPasswordsNotValidOrNotMatchException(Throwable e) {
|
|
||||||
return handleException(ErrorConstants.USER_PASSWORDS_NOT_VALID_OR_NOT_MATCH);
|
|
||||||
}
|
|
||||||
|
|
||||||
@ExceptionHandler(UserNotFoundException.class)
|
|
||||||
public ResponseExtended<String> handleUserNotFoundException(Throwable e) {
|
|
||||||
return handleException(ErrorConstants.USER_NOT_FOUND, e.getMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
@ExceptionHandler(UserNotActivatedException.class)
|
|
||||||
public Response<Void> handleUserNotActivatedException(Throwable e) {
|
|
||||||
return handleException(ErrorConstants.USER_NOT_ACTIVATED);
|
|
||||||
}
|
|
||||||
|
|
||||||
@ExceptionHandler(UserResetKeyError.class)
|
|
||||||
public ResponseExtended<String> handleUserResetKeyError(Throwable e) {
|
|
||||||
return handleException(ErrorConstants.USER_RESET_ERROR, e.getMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
@ExceptionHandler(UserIsUndeadException.class)
|
|
||||||
public ResponseExtended<String> handleUserIsUndeadException(Throwable e) {
|
|
||||||
return handleException(ErrorConstants.USER_UNDEAD_ERROR, e.getMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
@ExceptionHandler(UserSendingMailException.class)
|
|
||||||
public ResponseExtended<String> handleUserSendingMailException(Throwable e) {
|
|
||||||
return handleException(ErrorConstants.USER_SENDING_MAIL_EXCEPTION, e.getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,47 @@
|
|||||||
|
package ru.ulstu.core.util;
|
||||||
|
|
||||||
|
import javax.faces.FacesException;
|
||||||
|
import javax.faces.application.FacesMessage;
|
||||||
|
import javax.faces.context.ExternalContext;
|
||||||
|
import javax.faces.context.FacesContext;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class FacesUtil {
|
||||||
|
public static void redirectToPage(FacesContext context, String page, String params) {
|
||||||
|
ExternalContext extContext = context.getExternalContext();
|
||||||
|
String url = extContext.encodeActionURL(context.getApplication().getViewHandler().getActionURL(context, page)
|
||||||
|
+ params);
|
||||||
|
try {
|
||||||
|
extContext.redirect(url);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new FacesException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void redirectToPage(String page) {
|
||||||
|
redirectToPage(FacesContext.getCurrentInstance(), page, "");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void redirectToPage(String page, String params) {
|
||||||
|
redirectToPage(FacesContext.getCurrentInstance(), page, params);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Map<String, String> getRequestParams() {
|
||||||
|
return FacesContext.getCurrentInstance().
|
||||||
|
getExternalContext().getRequestParameterMap();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void showInfoMessage(String summary, String detail) {
|
||||||
|
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, summary, detail);
|
||||||
|
FacesContext fc = FacesContext.getCurrentInstance();
|
||||||
|
fc.getExternalContext().getFlash().setKeepMessages(true);
|
||||||
|
fc.addMessage("messages", message);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void showDangerMessage(String summary, String detail) {
|
||||||
|
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, summary, detail);
|
||||||
|
FacesContext.getCurrentInstance().addMessage(null, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,76 @@
|
|||||||
|
package ru.ulstu.grant.controller;
|
||||||
|
|
||||||
|
import ru.ulstu.core.util.FacesUtil;
|
||||||
|
import ru.ulstu.grant.model.Grant;
|
||||||
|
import ru.ulstu.grant.service.GrantService;
|
||||||
|
import ru.ulstu.user.service.UserService;
|
||||||
|
|
||||||
|
import javax.annotation.PostConstruct;
|
||||||
|
import javax.faces.view.ViewScoped;
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.inject.Named;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Named
|
||||||
|
@ViewScoped
|
||||||
|
public class GrantDashboardView {
|
||||||
|
@Inject
|
||||||
|
private GrantService grantService;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private UserService userService;
|
||||||
|
|
||||||
|
private List<Grant> grants;
|
||||||
|
|
||||||
|
private List<Grant> selectedGrants = new ArrayList<>();
|
||||||
|
|
||||||
|
private String newGrantTitle;
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
public void init() {
|
||||||
|
grants = grantService.findAllActiveByCurrentUser();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Grant> getGrants() {
|
||||||
|
return grants;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void create() {
|
||||||
|
grantService.createByTitle(newGrantTitle);
|
||||||
|
FacesUtil.showInfoMessage("Статья создана", newGrantTitle);
|
||||||
|
newGrantTitle = "";
|
||||||
|
grants = grantService.findAllActiveByCurrentUser();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deleteSelected() {
|
||||||
|
grantService.delete(selectedGrants);
|
||||||
|
grants = grantService.findAllActiveByCurrentUser();
|
||||||
|
FacesUtil.showInfoMessage("Было удалено грантов: " + selectedGrants.size(), "");
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Grant.GrantStatus> getGrantStatuses() {
|
||||||
|
return Arrays.asList(Grant.GrantStatus.values());
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNewGrantTitle() {
|
||||||
|
return newGrantTitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNewGrantTitle(String newGrantTitle) {
|
||||||
|
this.newGrantTitle = newGrantTitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Grant> getSelectedGrants() {
|
||||||
|
return selectedGrants;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSelectedGrants(List<Grant> selectedGrants) {
|
||||||
|
this.selectedGrants = selectedGrants;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCurrentUser() {
|
||||||
|
return userService.getCurrentUser().getUserAbbreviate();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,21 @@
|
|||||||
|
package ru.ulstu.grant.controller;
|
||||||
|
|
||||||
|
import ru.ulstu.grant.model.Grant;
|
||||||
|
|
||||||
|
import javax.faces.component.UIComponent;
|
||||||
|
import javax.faces.context.FacesContext;
|
||||||
|
import javax.faces.convert.Converter;
|
||||||
|
import javax.faces.convert.FacesConverter;
|
||||||
|
|
||||||
|
@FacesConverter(value = "grantStatusConverter")
|
||||||
|
public class GrantStatusConverter implements Converter {
|
||||||
|
@Override
|
||||||
|
public Object getAsObject(FacesContext context, UIComponent component, String value) {
|
||||||
|
return Grant.GrantStatus.valueOf(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getAsString(FacesContext context, UIComponent component, Object value) {
|
||||||
|
return value == null ? "" : ((Grant.GrantStatus) value).name();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,94 @@
|
|||||||
|
package ru.ulstu.grant.controller;
|
||||||
|
|
||||||
|
import ru.ulstu.core.navigation.Page;
|
||||||
|
import ru.ulstu.core.util.FacesUtil;
|
||||||
|
import ru.ulstu.deadline.model.Deadline;
|
||||||
|
import ru.ulstu.deadline.service.DeadlineService;
|
||||||
|
import ru.ulstu.grant.model.Grant;
|
||||||
|
import ru.ulstu.grant.service.GrantService;
|
||||||
|
import ru.ulstu.user.model.User;
|
||||||
|
import ru.ulstu.user.service.UserService;
|
||||||
|
|
||||||
|
import javax.annotation.PostConstruct;
|
||||||
|
import javax.faces.view.ViewScoped;
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.inject.Named;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Named
|
||||||
|
@ViewScoped
|
||||||
|
public class GrantView implements Serializable {
|
||||||
|
@Inject
|
||||||
|
private GrantService grantService;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private DeadlineService deadlineService;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private UserService userService;
|
||||||
|
|
||||||
|
private Grant grant;
|
||||||
|
|
||||||
|
private Date newDeadlineDate;
|
||||||
|
|
||||||
|
private String newDeadlineDescription;
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
public void init() {
|
||||||
|
grant = grantService.findById(Integer.valueOf(FacesUtil.getRequestParams().get("id")));
|
||||||
|
newDeadlineDescription = "";
|
||||||
|
newDeadlineDate = new Date();
|
||||||
|
FacesUtil.showInfoMessage("Статья открыта", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
public Grant getGrant() {
|
||||||
|
return grant;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGrant(Grant grant) {
|
||||||
|
this.grant = grant;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Grant.GrantStatus> getGrantStatuses() {
|
||||||
|
return Arrays.asList(Grant.GrantStatus.values());
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<User> getAuthors() {
|
||||||
|
return userService.findAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String save() {
|
||||||
|
grantService.save(grant);
|
||||||
|
FacesUtil.showInfoMessage("Грант сохранен", "");
|
||||||
|
return Page.GRANT_LIST + "?faces-redirect=true";
|
||||||
|
}
|
||||||
|
|
||||||
|
public Date getNewDeadlineDate() {
|
||||||
|
return newDeadlineDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNewDeadlineDate(Date newDeadlineDate) {
|
||||||
|
this.newDeadlineDate = newDeadlineDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNewDeadlineDescription() {
|
||||||
|
return newDeadlineDescription;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNewDeadlineDescription(String newDeadlineDescription) {
|
||||||
|
this.newDeadlineDescription = newDeadlineDescription;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deleteDeadline(Deadline deadline) {
|
||||||
|
grant.getDeadlines().remove(deadline);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addDeadline() {
|
||||||
|
grant.getDeadlines().add(deadlineService.create(newDeadlineDescription, newDeadlineDate));
|
||||||
|
newDeadlineDescription = "";
|
||||||
|
newDeadlineDate = new Date();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,68 @@
|
|||||||
|
package ru.ulstu.grant.controller;
|
||||||
|
|
||||||
|
import ru.ulstu.core.util.FacesUtil;
|
||||||
|
import ru.ulstu.grant.model.Grant;
|
||||||
|
import ru.ulstu.grant.service.GrantService;
|
||||||
|
|
||||||
|
import javax.annotation.PostConstruct;
|
||||||
|
import javax.faces.view.ViewScoped;
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.inject.Named;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Named
|
||||||
|
@ViewScoped
|
||||||
|
public class GrantsView {
|
||||||
|
@Inject
|
||||||
|
private GrantService grantService;
|
||||||
|
|
||||||
|
private List<Grant> grants;
|
||||||
|
|
||||||
|
private List<Grant> selectedGrants = new ArrayList<>();
|
||||||
|
|
||||||
|
private String newGrantTitle;
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
public void init() {
|
||||||
|
grants = grantService.findAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void create() {
|
||||||
|
grantService.createByTitle(newGrantTitle);
|
||||||
|
FacesUtil.showInfoMessage("Статья создана", newGrantTitle);
|
||||||
|
newGrantTitle = "";
|
||||||
|
grants = grantService.findAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deleteSelected() {
|
||||||
|
grantService.delete(selectedGrants);
|
||||||
|
grants = grantService.findAll();
|
||||||
|
FacesUtil.showInfoMessage("Было удалено грантов: " + selectedGrants.size(), "");
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Grant.GrantStatus> getGrantStatuses() {
|
||||||
|
return Arrays.asList(Grant.GrantStatus.values());
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Grant> getGrants() {
|
||||||
|
return grants;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNewGrantTitle() {
|
||||||
|
return newGrantTitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNewGrantTitle(String newGrantTitle) {
|
||||||
|
this.newGrantTitle = newGrantTitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Grant> getSelectedGrants() {
|
||||||
|
return selectedGrants;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSelectedGrants(List<Grant> selectedGrants) {
|
||||||
|
this.selectedGrants = selectedGrants;
|
||||||
|
}
|
||||||
|
}
|
@ -1,23 +0,0 @@
|
|||||||
package ru.ulstu.index.controller;
|
|
||||||
|
|
||||||
import io.swagger.v3.oas.annotations.Hidden;
|
|
||||||
import org.springframework.stereotype.Controller;
|
|
||||||
import org.springframework.ui.ModelMap;
|
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
|
||||||
import ru.ulstu.core.controller.AdviceController;
|
|
||||||
import ru.ulstu.user.service.UserService;
|
|
||||||
|
|
||||||
@Controller()
|
|
||||||
@RequestMapping(value = "/index")
|
|
||||||
@Hidden
|
|
||||||
public class IndexController extends AdviceController {
|
|
||||||
public IndexController(UserService userService) {
|
|
||||||
super(userService);
|
|
||||||
}
|
|
||||||
|
|
||||||
@GetMapping
|
|
||||||
public void currentUser(ModelMap modelMap) {
|
|
||||||
//нужен здесь для добавления параметров на стартовой странице
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,28 @@
|
|||||||
|
package ru.ulstu.index.controller;
|
||||||
|
|
||||||
|
import ru.ulstu.core.navigation.Page;
|
||||||
|
import ru.ulstu.index.model.Section;
|
||||||
|
|
||||||
|
import javax.annotation.PostConstruct;
|
||||||
|
import javax.faces.view.ViewScoped;
|
||||||
|
import javax.inject.Named;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Named
|
||||||
|
@ViewScoped
|
||||||
|
public class IndexView {
|
||||||
|
private List<Section> sections = new ArrayList<>();
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
public void init() {
|
||||||
|
sections.add(new Section("Статьи", Page.PAPER_DASHBOARD, "papers.jpg"));
|
||||||
|
sections.add(new Section("Конференции", Page.CONFERENCE_DASHBOARD, "conf.jpg"));
|
||||||
|
sections.add(new Section("Гранты", Page.GRANT_DASHBOARD, "grants.jpg"));
|
||||||
|
sections.add(new Section("Проекты", Page.PROJECT_DASHBOARD, "projects.jpg"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Section> getSections() {
|
||||||
|
return sections;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,76 @@
|
|||||||
|
package ru.ulstu.paper.controller;
|
||||||
|
|
||||||
|
import ru.ulstu.core.util.FacesUtil;
|
||||||
|
import ru.ulstu.paper.model.Paper;
|
||||||
|
import ru.ulstu.paper.service.PaperService;
|
||||||
|
import ru.ulstu.user.service.UserService;
|
||||||
|
|
||||||
|
import javax.annotation.PostConstruct;
|
||||||
|
import javax.faces.view.ViewScoped;
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.inject.Named;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Named
|
||||||
|
@ViewScoped
|
||||||
|
public class PaperDashboardView {
|
||||||
|
@Inject
|
||||||
|
private PaperService paperService;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private UserService userService;
|
||||||
|
|
||||||
|
private List<Paper> papers;
|
||||||
|
|
||||||
|
private List<Paper> selectedPapers = new ArrayList<>();
|
||||||
|
|
||||||
|
private String newPaperTitle;
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
public void init() {
|
||||||
|
papers = paperService.findAllActiveByCurrentUser();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Paper> getPapers() {
|
||||||
|
return papers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void create() {
|
||||||
|
paperService.createByTitle(newPaperTitle);
|
||||||
|
FacesUtil.showInfoMessage("Статья создана", newPaperTitle);
|
||||||
|
newPaperTitle = "";
|
||||||
|
papers = paperService.findAllActiveByCurrentUser();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deleteSelected() {
|
||||||
|
paperService.delete(selectedPapers);
|
||||||
|
papers = paperService.findAllActiveByCurrentUser();
|
||||||
|
FacesUtil.showInfoMessage("Было удалено статей: " + selectedPapers.size(), "");
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Paper.PaperStatus> getPaperStatuses() {
|
||||||
|
return Arrays.asList(Paper.PaperStatus.values());
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNewPaperTitle() {
|
||||||
|
return newPaperTitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNewPaperTitle(String newPaperTitle) {
|
||||||
|
this.newPaperTitle = newPaperTitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Paper> getSelectedPapers() {
|
||||||
|
return selectedPapers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSelectedPapers(List<Paper> selectedPapers) {
|
||||||
|
this.selectedPapers = selectedPapers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCurrentUser() {
|
||||||
|
return userService.getCurrentUser().getUserAbbreviate();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,21 @@
|
|||||||
|
package ru.ulstu.paper.controller;
|
||||||
|
|
||||||
|
import ru.ulstu.paper.model.Paper;
|
||||||
|
|
||||||
|
import javax.faces.component.UIComponent;
|
||||||
|
import javax.faces.context.FacesContext;
|
||||||
|
import javax.faces.convert.Converter;
|
||||||
|
import javax.faces.convert.FacesConverter;
|
||||||
|
|
||||||
|
@FacesConverter(value = "paperStatusConverter")
|
||||||
|
public class PaperStatusConverter implements Converter {
|
||||||
|
@Override
|
||||||
|
public Object getAsObject(FacesContext context, UIComponent component, String value) {
|
||||||
|
return Paper.PaperStatus.valueOf(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getAsString(FacesContext context, UIComponent component, Object value) {
|
||||||
|
return value == null ? "" : ((Paper.PaperStatus) value).name();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,21 @@
|
|||||||
|
package ru.ulstu.paper.controller;
|
||||||
|
|
||||||
|
import ru.ulstu.paper.model.Paper;
|
||||||
|
|
||||||
|
import javax.faces.component.UIComponent;
|
||||||
|
import javax.faces.context.FacesContext;
|
||||||
|
import javax.faces.convert.Converter;
|
||||||
|
import javax.faces.convert.FacesConverter;
|
||||||
|
|
||||||
|
@FacesConverter(value = "paperTypeConverter")
|
||||||
|
public class PaperTypeConverter implements Converter {
|
||||||
|
@Override
|
||||||
|
public Object getAsObject(FacesContext context, UIComponent component, String value) {
|
||||||
|
return Paper.PaperType.valueOf(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getAsString(FacesContext context, UIComponent component, Object value) {
|
||||||
|
return ((Paper.PaperType) value).name();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,120 @@
|
|||||||
|
package ru.ulstu.paper.controller;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import ru.ulstu.conference.model.Conference;
|
||||||
|
import ru.ulstu.conference.service.ConferenceService;
|
||||||
|
import ru.ulstu.core.navigation.Page;
|
||||||
|
import ru.ulstu.core.util.FacesUtil;
|
||||||
|
import ru.ulstu.deadline.model.Deadline;
|
||||||
|
import ru.ulstu.deadline.service.DeadlineService;
|
||||||
|
import ru.ulstu.paper.model.Paper;
|
||||||
|
import ru.ulstu.paper.service.PaperService;
|
||||||
|
import ru.ulstu.user.model.User;
|
||||||
|
import ru.ulstu.user.service.UserService;
|
||||||
|
|
||||||
|
import javax.annotation.PostConstruct;
|
||||||
|
import javax.faces.view.ViewScoped;
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.inject.Named;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Named
|
||||||
|
@ViewScoped
|
||||||
|
public class PaperView implements Serializable {
|
||||||
|
private static final int MAX_CONFERENCE_TITLE_LENGTH = 20;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private PaperService paperService;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private DeadlineService deadlineService;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private UserService userService;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private ConferenceService conferenceService;
|
||||||
|
|
||||||
|
private Paper paper;
|
||||||
|
|
||||||
|
private Date newDeadlineDate;
|
||||||
|
|
||||||
|
private String newDeadlineDescription;
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
public void init() {
|
||||||
|
paper = paperService.findPaperById(Integer.valueOf(FacesUtil.getRequestParams().get("id")));
|
||||||
|
newDeadlineDescription = "";
|
||||||
|
newDeadlineDate = new Date();
|
||||||
|
FacesUtil.showInfoMessage("Статья открыта", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
public Paper getPaper() {
|
||||||
|
return paper;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPaper(Paper paper) {
|
||||||
|
this.paper = paper;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Paper.PaperStatus> getPaperStatuses() {
|
||||||
|
return Arrays.asList(Paper.PaperStatus.values());
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Paper.PaperType> getPaperTypes() {
|
||||||
|
return Arrays.asList(Paper.PaperType.values());
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<User> getAuthors() {
|
||||||
|
return userService.findAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String save() {
|
||||||
|
paperService.save(paper);
|
||||||
|
FacesUtil.showInfoMessage("Статья сохранена", "");
|
||||||
|
return Page.PAPER_LIST + "?faces-redirect=true";
|
||||||
|
}
|
||||||
|
|
||||||
|
public Date getNewDeadlineDate() {
|
||||||
|
return newDeadlineDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNewDeadlineDate(Date newDeadlineDate) {
|
||||||
|
this.newDeadlineDate = newDeadlineDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNewDeadlineDescription() {
|
||||||
|
return newDeadlineDescription;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNewDeadlineDescription(String newDeadlineDescription) {
|
||||||
|
this.newDeadlineDescription = newDeadlineDescription;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deleteDeadline(Deadline deadline) {
|
||||||
|
paper.getDeadlines().remove(deadline);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addDeadline() {
|
||||||
|
paper.getDeadlines().add(deadlineService.create(newDeadlineDescription, newDeadlineDate));
|
||||||
|
newDeadlineDescription = "";
|
||||||
|
newDeadlineDate = new Date();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Conference> getConferences() {
|
||||||
|
return conferenceService.findAllActive();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getConferenceTitle(Conference conference) {
|
||||||
|
if (conference == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (conference.getTitle().length() > MAX_CONFERENCE_TITLE_LENGTH) {
|
||||||
|
return StringUtils.truncate(conference.getTitle(), MAX_CONFERENCE_TITLE_LENGTH) + "...";
|
||||||
|
}
|
||||||
|
return conference.getTitle();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,68 @@
|
|||||||
|
package ru.ulstu.paper.controller;
|
||||||
|
|
||||||
|
import ru.ulstu.core.util.FacesUtil;
|
||||||
|
import ru.ulstu.paper.model.Paper;
|
||||||
|
import ru.ulstu.paper.service.PaperService;
|
||||||
|
|
||||||
|
import javax.annotation.PostConstruct;
|
||||||
|
import javax.faces.view.ViewScoped;
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.inject.Named;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Named
|
||||||
|
@ViewScoped
|
||||||
|
public class PapersView {
|
||||||
|
@Inject
|
||||||
|
private PaperService paperService;
|
||||||
|
|
||||||
|
private List<Paper> papers;
|
||||||
|
|
||||||
|
private List<Paper> selectedPapers = new ArrayList<>();
|
||||||
|
|
||||||
|
private String newPaperTitle;
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
public void init() {
|
||||||
|
papers = paperService.findAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void create() {
|
||||||
|
paperService.createByTitle(newPaperTitle);
|
||||||
|
FacesUtil.showInfoMessage("Статья создана", newPaperTitle);
|
||||||
|
newPaperTitle = "";
|
||||||
|
papers = paperService.findAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deleteSelected() {
|
||||||
|
paperService.delete(selectedPapers);
|
||||||
|
papers = paperService.findAll();
|
||||||
|
FacesUtil.showInfoMessage("Было удалено статей: " + selectedPapers.size(), "");
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Paper.PaperStatus> getPaperStatuses() {
|
||||||
|
return Arrays.asList(Paper.PaperStatus.values());
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Paper> getPapers() {
|
||||||
|
return papers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNewPaperTitle() {
|
||||||
|
return newPaperTitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNewPaperTitle(String newPaperTitle) {
|
||||||
|
this.newPaperTitle = newPaperTitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Paper> getSelectedPapers() {
|
||||||
|
return selectedPapers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSelectedPapers(List<Paper> selectedPapers) {
|
||||||
|
this.selectedPapers = selectedPapers;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
package ru.ulstu.user.controller;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import ru.ulstu.user.model.User;
|
||||||
|
import ru.ulstu.user.service.UserService;
|
||||||
|
|
||||||
|
import javax.faces.component.UIComponent;
|
||||||
|
import javax.faces.context.FacesContext;
|
||||||
|
import javax.faces.convert.Converter;
|
||||||
|
import javax.inject.Inject;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class UserConverter implements Converter {
|
||||||
|
@Inject
|
||||||
|
private UserService userService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getAsObject(FacesContext context, UIComponent component, String value) {
|
||||||
|
return value == null ? null : userService.findById(Integer.valueOf(value));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getAsString(FacesContext context, UIComponent component, Object value) {
|
||||||
|
return ((User) value).getId().toString();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,21 @@
|
|||||||
|
package ru.ulstu.user.controller;
|
||||||
|
|
||||||
|
import ru.ulstu.user.model.User;
|
||||||
|
|
||||||
|
import javax.faces.component.UIComponent;
|
||||||
|
import javax.faces.context.FacesContext;
|
||||||
|
import javax.faces.convert.Converter;
|
||||||
|
import javax.faces.convert.FacesConverter;
|
||||||
|
|
||||||
|
@FacesConverter(value = "userDegreeConverter")
|
||||||
|
public class UserDegreeConverter implements Converter {
|
||||||
|
@Override
|
||||||
|
public Object getAsObject(FacesContext context, UIComponent component, String value) {
|
||||||
|
return User.UserDegree.valueOf(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getAsString(FacesContext context, UIComponent component, Object value) {
|
||||||
|
return ((User.UserDegree) value).name();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,46 @@
|
|||||||
|
package ru.ulstu.user.controller;
|
||||||
|
|
||||||
|
import ru.ulstu.core.navigation.Page;
|
||||||
|
import ru.ulstu.core.util.FacesUtil;
|
||||||
|
import ru.ulstu.user.model.User;
|
||||||
|
import ru.ulstu.user.service.UserService;
|
||||||
|
|
||||||
|
import javax.annotation.PostConstruct;
|
||||||
|
import javax.faces.view.ViewScoped;
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.inject.Named;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Named
|
||||||
|
@ViewScoped
|
||||||
|
public class UserView implements Serializable {
|
||||||
|
@Inject
|
||||||
|
private UserService userService;
|
||||||
|
|
||||||
|
private User user;
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
public void init() {
|
||||||
|
user = userService.findById(Integer.valueOf(FacesUtil.getRequestParams().get("id")));
|
||||||
|
}
|
||||||
|
|
||||||
|
public User getUser() {
|
||||||
|
return user;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUser(User user) {
|
||||||
|
this.user = user;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<User.UserDegree> getDegrees() {
|
||||||
|
return Arrays.asList(User.UserDegree.values());
|
||||||
|
}
|
||||||
|
|
||||||
|
public String save() {
|
||||||
|
userService.updateUserInformation(user);
|
||||||
|
FacesUtil.showInfoMessage("Данные пользователя сохранены", user.getUserAbbreviate());
|
||||||
|
return Page.USER_LIST + "?faces-redirect=true";
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,29 @@
|
|||||||
|
package ru.ulstu.user.controller;
|
||||||
|
|
||||||
|
import ru.ulstu.user.model.User;
|
||||||
|
import ru.ulstu.user.service.UserService;
|
||||||
|
|
||||||
|
import javax.annotation.PostConstruct;
|
||||||
|
import javax.faces.view.ViewScoped;
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.inject.Named;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Named
|
||||||
|
@ViewScoped
|
||||||
|
public class UsersView implements Serializable {
|
||||||
|
@Inject
|
||||||
|
private UserService userService;
|
||||||
|
|
||||||
|
private List<User> users;
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
public void init() {
|
||||||
|
users = userService.findAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<User> getUsers() {
|
||||||
|
return users;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,115 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml"
|
||||||
|
xmlns:ui="http://xmlns.jcp.org/jsf/facelets" xmlns:p="http://primefaces.org/ui"
|
||||||
|
xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:f="http://java.sun.com/jsf/core">
|
||||||
|
<ui:composition template="/basicTemplate.xhtml">
|
||||||
|
<ui:define name="header">
|
||||||
|
Редактирование пользователя
|
||||||
|
</ui:define>
|
||||||
|
<ui:define name="content">
|
||||||
|
<style>
|
||||||
|
#mainForm\:paperStatus > tbody > tr {
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#mainForm\:paperStatus > tbody > tr > td {
|
||||||
|
border: none;
|
||||||
|
padding: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#mainForm\:paperPanel > tbody > tr {
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#mainForm\:paperPanel > tbody > tr > td {
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui-editor.ui-widget-content {
|
||||||
|
background: white !important;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<p:panel id="panel" header="Редактирование пользователя" style="margin-bottom:10px;">
|
||||||
|
<p:panelGrid cellpadding="5" id="userPanel">
|
||||||
|
<p:row>
|
||||||
|
<p:column>
|
||||||
|
<h:outputLabel value="Имя"/>
|
||||||
|
</p:column>
|
||||||
|
<p:column>
|
||||||
|
<p:inputText id="firstName" required="true" value="#{userView.user.firstName}"/>
|
||||||
|
<p:message for="firstName"/>
|
||||||
|
</p:column>
|
||||||
|
</p:row>
|
||||||
|
<p:row>
|
||||||
|
<p:column>
|
||||||
|
<h:outputLabel value="Отчество"/>
|
||||||
|
</p:column>
|
||||||
|
<p:column>
|
||||||
|
<p:inputText id="patr" value="#{userView.user.patronymic}"/>
|
||||||
|
<p:message for="patr"/>
|
||||||
|
</p:column>
|
||||||
|
</p:row>
|
||||||
|
<p:row>
|
||||||
|
<p:column>
|
||||||
|
<h:outputLabel value="Фамилия"/>
|
||||||
|
</p:column>
|
||||||
|
<p:column>
|
||||||
|
<p:inputText id="lastName" required="true" value="#{userView.user.lastName}"/>
|
||||||
|
<p:message for="lastName"/>
|
||||||
|
</p:column>
|
||||||
|
</p:row>
|
||||||
|
<p:row>
|
||||||
|
<p:column>
|
||||||
|
<h:outputLabel value="Email"/>
|
||||||
|
</p:column>
|
||||||
|
<p:column>
|
||||||
|
<p:outputLabel value="#{userView.user.email}"/>
|
||||||
|
</p:column>
|
||||||
|
</p:row>
|
||||||
|
<p:row>
|
||||||
|
<p:column>
|
||||||
|
<h:outputLabel value="Логин"/>
|
||||||
|
</p:column>
|
||||||
|
<p:column>
|
||||||
|
<p:outputLabel value="#{userView.user.login}"/>
|
||||||
|
</p:column>
|
||||||
|
</p:row>
|
||||||
|
<p:row>
|
||||||
|
<p:column>
|
||||||
|
<h:outputLabel value="Дата рождения"/>
|
||||||
|
</p:column>
|
||||||
|
<p:column>
|
||||||
|
<p:datePicker id="bDate" required="true" value="#{userView.user.birthDate}"
|
||||||
|
placeholder="Введите дату"
|
||||||
|
pattern="dd.MM.yyyy"/>
|
||||||
|
<p:message for="bDate"/>
|
||||||
|
</p:column>
|
||||||
|
</p:row>
|
||||||
|
<p:row>
|
||||||
|
<p:column>
|
||||||
|
<h:outputLabel value="Ученая степень"/>
|
||||||
|
</p:column>
|
||||||
|
<p:column>
|
||||||
|
<p:selectOneMenu id="degree" value="#{userView.user.degree}"
|
||||||
|
converter="#{userDegreeConverter}">
|
||||||
|
<f:attribute name="collectionType" value="java.util.HashSet"/>
|
||||||
|
<f:selectItem itemLabel="Нет" itemValue="#{null}" noSelectionOption="true"/>
|
||||||
|
<f:selectItems value="#{userView.degrees}"
|
||||||
|
var="degree"
|
||||||
|
itemLabel="#{degree.degreeName}"
|
||||||
|
itemValue="#{degree}"/>
|
||||||
|
</p:selectOneMenu>
|
||||||
|
</p:column>
|
||||||
|
</p:row>
|
||||||
|
<p:row>
|
||||||
|
<p:column>
|
||||||
|
<p:commandButton action="#{userView.save}" value="Сохранить" ajax="true" process="@form"
|
||||||
|
update="messages @form"/>
|
||||||
|
</p:column>
|
||||||
|
</p:row>
|
||||||
|
</p:panelGrid>
|
||||||
|
</p:panel>
|
||||||
|
</ui:define>
|
||||||
|
</ui:composition>
|
||||||
|
</html>
|
@ -0,0 +1,139 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml"
|
||||||
|
xmlns:ui="http://xmlns.jcp.org/jsf/facelets" xmlns:p="http://primefaces.org/ui"
|
||||||
|
xmlns:h="http://xmlns.jcp.org/jsf/html"
|
||||||
|
>
|
||||||
|
<ui:composition template="/basicTemplate.xhtml">
|
||||||
|
<ui:define name="header">
|
||||||
|
Редактирование конференции
|
||||||
|
</ui:define>
|
||||||
|
<ui:define name="content">
|
||||||
|
<style>
|
||||||
|
#mainForm\:conferencePanel > tbody > tr {
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#mainForm\:conferencePanel > tbody > tr > td {
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui-editor.ui-widget-content {
|
||||||
|
background: white !important;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<p:panel id="panel" header="Редактирование конференции: #{conferenceView.conference.title}"
|
||||||
|
style="margin-bottom:10px;">
|
||||||
|
<div class="ui-fluid">
|
||||||
|
<div class="ui-g">
|
||||||
|
<div class="ui-md-3 ui-g-12">
|
||||||
|
<h:outputLabel value="Название:"/>
|
||||||
|
</div>
|
||||||
|
<div class="ui-md-7 ui-g-12">
|
||||||
|
<p:inputText id="name" required="true" value="#{conferenceView.conference.title}"/>
|
||||||
|
<p:message for="name"/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="ui-md-3 ui-g-12">
|
||||||
|
<h:outputLabel value="Ссылка:"/>
|
||||||
|
</div>
|
||||||
|
<div class="ui-md-7 ui-g-12">
|
||||||
|
<p:inputText id="url" required="true" value="#{conferenceView.conference.url}"/>
|
||||||
|
<p:message for="url"/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="ui-md-3 ui-g-12">
|
||||||
|
<h:outputLabel value="Дата начала:"/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="ui-md-7 ui-g-12">
|
||||||
|
<p:datePicker value="#{conferenceView.conference.beginDate}" placeholder="Введите дату"
|
||||||
|
pattern="dd.MM.yyyy"/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="ui-md-3 ui-g-12">
|
||||||
|
<h:outputLabel value="Дата окончания:"/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="ui-md-7 ui-g-12">
|
||||||
|
<p:datePicker value="#{conferenceView.conference.endDate}" placeholder="Введите дату"
|
||||||
|
pattern="dd.MM.yyyy"/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="ui-md-3 ui-g-12">
|
||||||
|
<!-- <p:outputLabel for="authors" value="Авторы:"/>-->
|
||||||
|
</div>
|
||||||
|
<div class="ui-md-7 ui-g-12">
|
||||||
|
<!-- <p:selectCheckboxMenu id="authors" value="#{conferenceView.conference.users}" multiple="true"-->
|
||||||
|
<!-- converter="#{conferenceUserConverter}">-->
|
||||||
|
<!-- <f:attribute name="collectionType" value="java.util.HashSet"/>-->
|
||||||
|
<!-- <f:selectItems value="#{conferenceView.authors}"-->
|
||||||
|
<!-- var="author"-->
|
||||||
|
<!-- itemLabel="#{author.userAbbreviate}"-->
|
||||||
|
<!-- itemValue="#{author}"/>-->
|
||||||
|
<!-- </p:selectCheckboxMenu>-->
|
||||||
|
</div>
|
||||||
|
<div class="ui-md-3 ui-g-12">
|
||||||
|
<!-- <p:outputLabel for="authors" value="Ключевые даты:"/>-->
|
||||||
|
</div>
|
||||||
|
<div class="ui-md-7 ui-g-12">
|
||||||
|
<div class="ui-fluid">
|
||||||
|
<div class="ui-g">
|
||||||
|
<ui:repeat value="#{conferenceView.conference.deadlines}" var="deadline">
|
||||||
|
<div class="ui-md-5 ui-g-12">
|
||||||
|
<p:datePicker value="#{deadline.date}" pattern="dd.MM.yyyy"/>
|
||||||
|
</div>
|
||||||
|
<div class="ui-md-5 ui-g-12">
|
||||||
|
<p:inputText value="#{deadline.description}"/>
|
||||||
|
</div>
|
||||||
|
<div class="ui-md-1 ui-g-12">
|
||||||
|
<p:commandButton icon="pi pi-times">
|
||||||
|
<p:ajax update="mainForm" process="@this"
|
||||||
|
listener="#{conferenceView.deleteDeadline(deadline)}"/>
|
||||||
|
</p:commandButton>
|
||||||
|
</div>
|
||||||
|
</ui:repeat>
|
||||||
|
<div class="ui-md-5 ui-g-12">
|
||||||
|
<p:datePicker value="#{conferenceView.newDeadlineDate}" placeholder="Введите дату"
|
||||||
|
pattern="dd.MM.yyyy"/>
|
||||||
|
</div>
|
||||||
|
<div class="ui-md-5 ui-g-12">
|
||||||
|
<p:inputText value="#{conferenceView.newDeadlineDescription}"
|
||||||
|
placeholder="Описание ключевой даты"/>
|
||||||
|
</div>
|
||||||
|
<div class="ui-md-1 ui-g-12">
|
||||||
|
<p:commandButton icon="pi pi-check">
|
||||||
|
<p:ajax update="mainForm" process="@this"
|
||||||
|
listener="#{conferenceView.addDeadline()}"/>
|
||||||
|
</p:commandButton>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="ui-md-3 ui-g-12">
|
||||||
|
<p:outputLabel for="comment" value="Комментарий:"/>
|
||||||
|
</div>
|
||||||
|
<div class="ui-md-7 ui-g-12">
|
||||||
|
<p:editor id="comment" widgetVar="editor2" value="#{conferenceView.conference.description}"
|
||||||
|
height="300"
|
||||||
|
style="margin-bottom:10px" placeholder="Комментарий"/>
|
||||||
|
</div>
|
||||||
|
<div class="ui-md-2 ui-g-12">
|
||||||
|
<p>
|
||||||
|
Конференция создана
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Конференция обновлена
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class="ui-md-5 ui-g-12">
|
||||||
|
<p:commandButton action="#{conferenceView.save}" value="Сохранить" ajax="true" process="@form"
|
||||||
|
update="messages @form"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</p:panel>
|
||||||
|
</ui:define>
|
||||||
|
</ui:composition>
|
||||||
|
</html>
|
@ -0,0 +1,10 @@
|
|||||||
|
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
|
||||||
|
xmlns:ui="http://xmlns.jcp.org/jsf/facelets" xmlns:p="http://java.sun.com/jsf/html">
|
||||||
|
<span class="fa-stack fa-1x big-icon" title="#{conference.status.statusName}">
|
||||||
|
<i class="fa fa-circle #{conference.status.elementClass} fa-stack-2x"></i>
|
||||||
|
<i class="fa fa-file-text-o fa-stack-1x fa-inverse"></i>
|
||||||
|
</span>
|
||||||
|
<ui:fragment rendered="#{shortMode != true}">
|
||||||
|
<p:outputText value="#{conference.status.statusName}"/>
|
||||||
|
</ui:fragment>
|
||||||
|
</ui:composition>
|
@ -0,0 +1,35 @@
|
|||||||
|
/* latin */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Droid Serif';
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: 400;
|
||||||
|
src: local('Droid Serif Italic'), local('DroidSerif-Italic'), url(https://fonts.gstatic.com/s/droidserif/v8/tDbK2oqRg1oM3QBjjcaDkOr4nAfcHg.woff2) format('woff2');
|
||||||
|
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* latin */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Droid Serif';
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: 700;
|
||||||
|
src: local('Droid Serif Bold Italic'), local('DroidSerif-BoldItalic'), url(https://fonts.gstatic.com/s/droidserif/v8/tDbX2oqRg1oM3QBjjcaDkOr4lLz5CwOnSA.woff2) format('woff2');
|
||||||
|
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* latin */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Droid Serif';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
src: local('Droid Serif Regular'), local('DroidSerif-Regular'), url(https://fonts.gstatic.com/s/droidserif/v8/tDbI2oqRg1oM3QBjjcaDkOr9rAU.woff2) format('woff2');
|
||||||
|
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* latin */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Droid Serif';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 700;
|
||||||
|
src: local('Droid Serif Bold'), local('DroidSerif-Bold'), url(https://fonts.gstatic.com/s/droidserif/v8/tDbV2oqRg1oM3QBjjcaDkOJGiRD7OwE.woff2) format('woff2');
|
||||||
|
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
/* latin-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Kaushan Script';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
src: local('Kaushan Script'), local('KaushanScript-Regular'), url(https://fonts.gstatic.com/s/kaushanscript/v6/vm8vdRfvXFLG3OLnsO15WYS5DG72wNJHMw.woff2) format('woff2');
|
||||||
|
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* latin */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Kaushan Script';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
src: local('Kaushan Script'), local('KaushanScript-Regular'), url(https://fonts.gstatic.com/s/kaushanscript/v6/vm8vdRfvXFLG3OLnsO15WYS5DG74wNI.woff2) format('woff2');
|
||||||
|
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||||
|
}
|
@ -0,0 +1,89 @@
|
|||||||
|
/* cyrillic-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Montserrat';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
src: local('Montserrat Regular'), local('Montserrat-Regular'), url(https://fonts.gstatic.com/s/montserrat/v12/JTUSjIg1_i6t8kCHKm459WRhyzbi.woff2) format('woff2');
|
||||||
|
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* cyrillic */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Montserrat';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
src: local('Montserrat Regular'), local('Montserrat-Regular'), url(https://fonts.gstatic.com/s/montserrat/v12/JTUSjIg1_i6t8kCHKm459W1hyzbi.woff2) format('woff2');
|
||||||
|
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* vietnamese */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Montserrat';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
src: local('Montserrat Regular'), local('Montserrat-Regular'), url(https://fonts.gstatic.com/s/montserrat/v12/JTUSjIg1_i6t8kCHKm459WZhyzbi.woff2) format('woff2');
|
||||||
|
unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* latin-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Montserrat';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
src: local('Montserrat Regular'), local('Montserrat-Regular'), url(https://fonts.gstatic.com/s/montserrat/v12/JTUSjIg1_i6t8kCHKm459Wdhyzbi.woff2) format('woff2');
|
||||||
|
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* latin */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Montserrat';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
src: local('Montserrat Regular'), local('Montserrat-Regular'), url(https://fonts.gstatic.com/s/montserrat/v12/JTUSjIg1_i6t8kCHKm459Wlhyw.woff2) format('woff2');
|
||||||
|
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* cyrillic-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Montserrat';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 700;
|
||||||
|
src: local('Montserrat Bold'), local('Montserrat-Bold'), url(https://fonts.gstatic.com/s/montserrat/v12/JTURjIg1_i6t8kCHKm45_dJE3gTD_u50.woff2) format('woff2');
|
||||||
|
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* cyrillic */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Montserrat';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 700;
|
||||||
|
src: local('Montserrat Bold'), local('Montserrat-Bold'), url(https://fonts.gstatic.com/s/montserrat/v12/JTURjIg1_i6t8kCHKm45_dJE3g3D_u50.woff2) format('woff2');
|
||||||
|
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* vietnamese */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Montserrat';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 700;
|
||||||
|
src: local('Montserrat Bold'), local('Montserrat-Bold'), url(https://fonts.gstatic.com/s/montserrat/v12/JTURjIg1_i6t8kCHKm45_dJE3gbD_u50.woff2) format('woff2');
|
||||||
|
unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* latin-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Montserrat';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 700;
|
||||||
|
src: local('Montserrat Bold'), local('Montserrat-Bold'), url(https://fonts.gstatic.com/s/montserrat/v12/JTURjIg1_i6t8kCHKm45_dJE3gfD_u50.woff2) format('woff2');
|
||||||
|
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* latin */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Montserrat';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 700;
|
||||||
|
src: local('Montserrat Bold'), local('Montserrat-Bold'), url(https://fonts.gstatic.com/s/montserrat/v12/JTURjIg1_i6t8kCHKm45_dJE3gnD_g.woff2) format('woff2');
|
||||||
|
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||||
|
}
|
@ -0,0 +1,251 @@
|
|||||||
|
/* cyrillic-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto Slab';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 100;
|
||||||
|
src: local('Roboto Slab Thin'), local('RobotoSlab-Thin'), url(https://fonts.gstatic.com/s/robotoslab/v7/BngOUXZYTXPIvIBgJJSb6u-u1qqh5CCD.woff2) format('woff2');
|
||||||
|
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* cyrillic */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto Slab';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 100;
|
||||||
|
src: local('Roboto Slab Thin'), local('RobotoSlab-Thin'), url(https://fonts.gstatic.com/s/robotoslab/v7/BngOUXZYTXPIvIBgJJSb6u-u1qOh5CCD.woff2) format('woff2');
|
||||||
|
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* greek-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto Slab';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 100;
|
||||||
|
src: local('Roboto Slab Thin'), local('RobotoSlab-Thin'), url(https://fonts.gstatic.com/s/robotoslab/v7/BngOUXZYTXPIvIBgJJSb6u-u1quh5CCD.woff2) format('woff2');
|
||||||
|
unicode-range: U+1F00-1FFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* greek */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto Slab';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 100;
|
||||||
|
src: local('Roboto Slab Thin'), local('RobotoSlab-Thin'), url(https://fonts.gstatic.com/s/robotoslab/v7/BngOUXZYTXPIvIBgJJSb6u-u1qSh5CCD.woff2) format('woff2');
|
||||||
|
unicode-range: U+0370-03FF;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* vietnamese */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto Slab';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 100;
|
||||||
|
src: local('Roboto Slab Thin'), local('RobotoSlab-Thin'), url(https://fonts.gstatic.com/s/robotoslab/v7/BngOUXZYTXPIvIBgJJSb6u-u1qih5CCD.woff2) format('woff2');
|
||||||
|
unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* latin-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto Slab';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 100;
|
||||||
|
src: local('Roboto Slab Thin'), local('RobotoSlab-Thin'), url(https://fonts.gstatic.com/s/robotoslab/v7/BngOUXZYTXPIvIBgJJSb6u-u1qmh5CCD.woff2) format('woff2');
|
||||||
|
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* latin */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto Slab';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 100;
|
||||||
|
src: local('Roboto Slab Thin'), local('RobotoSlab-Thin'), url(https://fonts.gstatic.com/s/robotoslab/v7/BngOUXZYTXPIvIBgJJSb6u-u1qeh5A.woff2) format('woff2');
|
||||||
|
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* cyrillic-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto Slab';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 300;
|
||||||
|
src: local('Roboto Slab Light'), local('RobotoSlab-Light'), url(https://fonts.gstatic.com/s/robotoslab/v7/BngRUXZYTXPIvIBgJJSb6u9mxLCLwR26eg.woff2) format('woff2');
|
||||||
|
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* cyrillic */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto Slab';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 300;
|
||||||
|
src: local('Roboto Slab Light'), local('RobotoSlab-Light'), url(https://fonts.gstatic.com/s/robotoslab/v7/BngRUXZYTXPIvIBgJJSb6u9mxLCCwR26eg.woff2) format('woff2');
|
||||||
|
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* greek-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto Slab';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 300;
|
||||||
|
src: local('Roboto Slab Light'), local('RobotoSlab-Light'), url(https://fonts.gstatic.com/s/robotoslab/v7/BngRUXZYTXPIvIBgJJSb6u9mxLCKwR26eg.woff2) format('woff2');
|
||||||
|
unicode-range: U+1F00-1FFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* greek */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto Slab';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 300;
|
||||||
|
src: local('Roboto Slab Light'), local('RobotoSlab-Light'), url(https://fonts.gstatic.com/s/robotoslab/v7/BngRUXZYTXPIvIBgJJSb6u9mxLCFwR26eg.woff2) format('woff2');
|
||||||
|
unicode-range: U+0370-03FF;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* vietnamese */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto Slab';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 300;
|
||||||
|
src: local('Roboto Slab Light'), local('RobotoSlab-Light'), url(https://fonts.gstatic.com/s/robotoslab/v7/BngRUXZYTXPIvIBgJJSb6u9mxLCJwR26eg.woff2) format('woff2');
|
||||||
|
unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* latin-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto Slab';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 300;
|
||||||
|
src: local('Roboto Slab Light'), local('RobotoSlab-Light'), url(https://fonts.gstatic.com/s/robotoslab/v7/BngRUXZYTXPIvIBgJJSb6u9mxLCIwR26eg.woff2) format('woff2');
|
||||||
|
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* latin */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto Slab';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 300;
|
||||||
|
src: local('Roboto Slab Light'), local('RobotoSlab-Light'), url(https://fonts.gstatic.com/s/robotoslab/v7/BngRUXZYTXPIvIBgJJSb6u9mxLCGwR0.woff2) format('woff2');
|
||||||
|
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* cyrillic-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto Slab';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
src: local('Roboto Slab Regular'), local('RobotoSlab-Regular'), url(https://fonts.gstatic.com/s/robotoslab/v7/BngMUXZYTXPIvIBgJJSb6ufA5qW54A.woff2) format('woff2');
|
||||||
|
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* cyrillic */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto Slab';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
src: local('Roboto Slab Regular'), local('RobotoSlab-Regular'), url(https://fonts.gstatic.com/s/robotoslab/v7/BngMUXZYTXPIvIBgJJSb6ufJ5qW54A.woff2) format('woff2');
|
||||||
|
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* greek-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto Slab';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
src: local('Roboto Slab Regular'), local('RobotoSlab-Regular'), url(https://fonts.gstatic.com/s/robotoslab/v7/BngMUXZYTXPIvIBgJJSb6ufB5qW54A.woff2) format('woff2');
|
||||||
|
unicode-range: U+1F00-1FFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* greek */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto Slab';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
src: local('Roboto Slab Regular'), local('RobotoSlab-Regular'), url(https://fonts.gstatic.com/s/robotoslab/v7/BngMUXZYTXPIvIBgJJSb6ufO5qW54A.woff2) format('woff2');
|
||||||
|
unicode-range: U+0370-03FF;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* vietnamese */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto Slab';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
src: local('Roboto Slab Regular'), local('RobotoSlab-Regular'), url(https://fonts.gstatic.com/s/robotoslab/v7/BngMUXZYTXPIvIBgJJSb6ufC5qW54A.woff2) format('woff2');
|
||||||
|
unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* latin-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto Slab';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
src: local('Roboto Slab Regular'), local('RobotoSlab-Regular'), url(https://fonts.gstatic.com/s/robotoslab/v7/BngMUXZYTXPIvIBgJJSb6ufD5qW54A.woff2) format('woff2');
|
||||||
|
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* latin */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto Slab';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
src: local('Roboto Slab Regular'), local('RobotoSlab-Regular'), url(https://fonts.gstatic.com/s/robotoslab/v7/BngMUXZYTXPIvIBgJJSb6ufN5qU.woff2) format('woff2');
|
||||||
|
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* cyrillic-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto Slab';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 700;
|
||||||
|
src: local('Roboto Slab Bold'), local('RobotoSlab-Bold'), url(https://fonts.gstatic.com/s/robotoslab/v7/BngRUXZYTXPIvIBgJJSb6u92w7CLwR26eg.woff2) format('woff2');
|
||||||
|
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* cyrillic */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto Slab';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 700;
|
||||||
|
src: local('Roboto Slab Bold'), local('RobotoSlab-Bold'), url(https://fonts.gstatic.com/s/robotoslab/v7/BngRUXZYTXPIvIBgJJSb6u92w7CCwR26eg.woff2) format('woff2');
|
||||||
|
unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* greek-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto Slab';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 700;
|
||||||
|
src: local('Roboto Slab Bold'), local('RobotoSlab-Bold'), url(https://fonts.gstatic.com/s/robotoslab/v7/BngRUXZYTXPIvIBgJJSb6u92w7CKwR26eg.woff2) format('woff2');
|
||||||
|
unicode-range: U+1F00-1FFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* greek */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto Slab';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 700;
|
||||||
|
src: local('Roboto Slab Bold'), local('RobotoSlab-Bold'), url(https://fonts.gstatic.com/s/robotoslab/v7/BngRUXZYTXPIvIBgJJSb6u92w7CFwR26eg.woff2) format('woff2');
|
||||||
|
unicode-range: U+0370-03FF;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* vietnamese */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto Slab';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 700;
|
||||||
|
src: local('Roboto Slab Bold'), local('RobotoSlab-Bold'), url(https://fonts.gstatic.com/s/robotoslab/v7/BngRUXZYTXPIvIBgJJSb6u92w7CJwR26eg.woff2) format('woff2');
|
||||||
|
unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* latin-ext */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto Slab';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 700;
|
||||||
|
src: local('Roboto Slab Bold'), local('RobotoSlab-Bold'), url(https://fonts.gstatic.com/s/robotoslab/v7/BngRUXZYTXPIvIBgJJSb6u92w7CIwR26eg.woff2) format('woff2');
|
||||||
|
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* latin */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Roboto Slab';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 700;
|
||||||
|
src: local('Roboto Slab Bold'), local('RobotoSlab-Bold'), url(https://fonts.gstatic.com/s/robotoslab/v7/BngRUXZYTXPIvIBgJJSb6u92w7CGwR0.woff2) format('woff2');
|
||||||
|
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||||
|
}
|
@ -0,0 +1,49 @@
|
|||||||
|
.black {
|
||||||
|
background-color: #383838 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui-picklist-list-wrapper {
|
||||||
|
width: 50% !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ui-picklist-list {
|
||||||
|
width: 100% !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.text-draft {
|
||||||
|
color: rgba(0, 0, 0, 0.48) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-primary {
|
||||||
|
color: #228bba !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-warning {
|
||||||
|
color: #940000 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-review {
|
||||||
|
color: #94028d !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-success {
|
||||||
|
color: #007741 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-accepted {
|
||||||
|
color: #fec503 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-not-accepted {
|
||||||
|
color: #A38831 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-failed {
|
||||||
|
color: #A38831 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar-brand {
|
||||||
|
color: #fed136 !important;
|
||||||
|
font-family: 'Kaushan Script', 'Helvetica Neue', Helvetica, Arial, cursive;
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue