diff --git a/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/CategorizationStep.java b/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/CategorizationStep.java
new file mode 100644
index 000000000..94713ee8c
--- /dev/null
+++ b/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/CategorizationStep.java
@@ -0,0 +1,295 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.librecms.ui.contentsections.documents;
+
+import org.libreccm.api.Identifier;
+import org.libreccm.api.IdentifierParser;
+import org.libreccm.categorization.Category;
+import org.libreccm.categorization.CategoryManager;
+import org.libreccm.categorization.CategoryRepository;
+import org.libreccm.categorization.Domain;
+import org.libreccm.categorization.DomainOwnership;
+import org.libreccm.categorization.ObjectNotAssignedToCategoryException;
+import org.libreccm.core.UnexpectedErrorException;
+import org.libreccm.l10n.GlobalizationHelper;
+import org.librecms.contentsection.ContentItem;
+import org.librecms.contentsection.ContentItemManager;
+import org.librecms.contentsection.ContentSection;
+
+import java.util.List;
+import java.util.Optional;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import javax.enterprise.context.RequestScoped;
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.mvc.Controller;
+import javax.mvc.Models;
+import javax.transaction.Transactional;
+import javax.ws.rs.FormParam;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+@RequestScoped
+@Controller
+@Path("/")
+@AuthoringStepPathFragment(CategorizationStep.PATH_FRAGMENT)
+@Named("CmsCategorizationStep")
+public class CategorizationStep implements MvcAuthoringStep {
+
+ static final String PATH_FRAGMENT = "categorization";
+
+ @Inject
+ private CategoryManager categoryManager;
+
+ @Inject
+ private CategoryRepository categoryRepo;
+
+ @Inject
+ private IdentifierParser identifierParser;
+
+ @Inject
+ private ContentItemManager itemManager;
+
+ @Inject
+ private GlobalizationHelper globalizationHelper;
+
+ @Inject
+ private Models models;
+
+ private ContentSection section;
+
+ private ContentItem document;
+
+ @Override
+ public Class extends ContentItem> supportedDocumentType() {
+ return ContentItem.class;
+ }
+
+ @Override
+ public String getLabel() {
+ return globalizationHelper
+ .getLocalizedTextsUtil(getBundle())
+ .getText("authoringsteps.categorization.label");
+ }
+
+ @Override
+ public String getDescription() {
+ return globalizationHelper
+ .getLocalizedTextsUtil(getBundle())
+ .getText("authoringsteps.categorization.description");
+ }
+
+ @Override
+ public String getBundle() {
+ return DefaultAuthoringStepConstants.BUNDLE;
+ }
+
+ @Override
+ public ContentSection getContentSection() {
+ return section;
+ }
+
+ @Override
+ public void setContentSection(final ContentSection section) {
+ this.section = section;
+ }
+
+ @Override
+ public String getContentSectionLabel() {
+ return section.getLabel();
+ }
+
+ @Override
+ public String getContentSectionTitle() {
+ return globalizationHelper
+ .getValueFromLocalizedString(section.getTitle());
+ }
+
+ @Override
+ public ContentItem getContentItem() {
+ return document;
+ }
+
+ @Override
+ public void setContentItem(final ContentItem document) {
+ this.document = document;
+ }
+
+ @Override
+ public String getContentItemPath() {
+ return itemManager.getItemPath(document);
+ }
+
+ @Override
+ public String getContentItemTitle() {
+ return globalizationHelper
+ .getValueFromLocalizedString(document.getTitle());
+ }
+
+ @Override
+ public String showStep() {
+ return "org/librecms/ui/contenttypes/categorization.xhtml";
+ }
+
+ @Transactional(Transactional.TxType.REQUIRED)
+ public List getCategorizationTrees() {
+ return section
+ .getDomains()
+ .stream()
+ .map(DomainOwnership::getDomain)
+ .map(this::buildCategorizationTree)
+ .collect(Collectors.toList());
+ }
+
+ @POST
+ @Path("/{domainIdentifier}")
+ @Transactional(Transactional.TxType.REQUIRED)
+ public String updateCategorization(
+ @PathParam("domainIdentifierParam") final String domainIdentifierParam,
+ @FormParam("assignedCategories")
+ final Set assignedCategoriesParam
+ ) {
+ final Identifier domainIdentifier = identifierParser.parseIdentifier(
+ domainIdentifierParam
+ );
+ final Optional domainResult;
+ switch (domainIdentifier.getType()) {
+ case ID:
+ domainResult = section
+ .getDomains()
+ .stream()
+ .map(DomainOwnership::getDomain)
+ .filter(
+ domain -> domain.getObjectId() == Long
+ .parseLong(domainIdentifier.getIdentifier())
+ ).findAny();
+ break;
+ case UUID:
+ domainResult = section
+ .getDomains()
+ .stream()
+ .map(DomainOwnership::getDomain)
+ .filter(
+ domain -> domain.getUuid().equals(
+ domainIdentifier.getIdentifier()
+ )
+ ).findAny();
+ break;
+ default:
+ domainResult = section
+ .getDomains()
+ .stream()
+ .map(DomainOwnership::getDomain)
+ .filter(
+ domain -> domain.getDomainKey().equals(
+ domainIdentifier.getIdentifier()
+ )
+ ).findAny();
+ }
+
+ if (!domainResult.isPresent()) {
+ models.put("section", section.getLabel());
+ models.put("domainIdentifier", domainIdentifierParam);
+ return "org/librecms/ui/contenttypes/categorization-domain-not-found.xhtml";
+ }
+
+ final Domain domain = domainResult.get();
+ updateAssignedCategories(domain.getRoot(), assignedCategoriesParam);
+
+ return String.format(
+ "/%s@documents/%s/@authoringsteps/%s",
+ section.getLabel(),
+ getContentItemPath(),
+ PATH_FRAGMENT
+ );
+ }
+
+ private void updateAssignedCategories(
+ final Category category,
+ final Set assignedCategoriesParam
+ ) {
+ if (assignedCategoriesParam.contains(category.getUuid())
+ && !categoryManager.isAssignedToCategory(category, document)) {
+ categoryManager.addObjectToCategory(document, category);
+ }
+
+ try {
+ if (!assignedCategoriesParam.contains(category.getUuid())
+ && categoryManager.isAssignedToCategory(category, document)) {
+ categoryManager.removeObjectFromCategory(document, category);
+ }
+ } catch (ObjectNotAssignedToCategoryException ex) {
+ throw new UnexpectedErrorException(ex);
+ }
+ }
+
+ private CategorizationTree buildCategorizationTree(final Domain domain) {
+ final CategorizationTree tree = new CategorizationTree();
+ tree.setDomainDescription(
+ globalizationHelper.getValueFromLocalizedString(
+ domain.getDescription()
+ )
+ );
+ tree.setDomainKey(domain.getDomainKey());
+ tree.setDomainTitle(
+ globalizationHelper.getValueFromLocalizedString(
+ domain.getTitle())
+ );
+ tree.setRoot(buildCategorizationTreeNode(domain.getRoot()));
+
+ return tree;
+ }
+
+ private CategorizationTreeNode buildCategorizationTreeNode(
+ final Category category
+ ) {
+ final CategorizationTreeNode node = new CategorizationTreeNode();
+ node.setAssigned(categoryManager.isAssignedToCategory(
+ category, document)
+ );
+ node.setCategoryId(category.getObjectId());
+ node.setCategoryName(category.getName());
+ node.setCategoryUuid(category.getUuid());
+ node.setDescription(
+ globalizationHelper.getValueFromLocalizedString(
+ category.getDescription()
+ )
+ );
+ node.setSubCategories(
+ category
+ .getSubCategories()
+ .stream()
+ .map(this::buildCategorizationTreeNode)
+ .collect(Collectors.toList())
+ );
+ node.setSubCategoryAssigned(
+ category
+ .getSubCategories()
+ .stream()
+ .allMatch(
+ subCat -> categoryManager.isAssignedToCategory(
+ subCat, document
+ )
+ )
+ );
+ node.setTitle(
+ globalizationHelper.getValueFromLocalizedString(
+ category.getTitle()
+ )
+ );
+ node.setUniqueId(category.getUniqueId());
+
+ return node;
+ }
+
+}
diff --git a/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/CategorizationTree.java b/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/CategorizationTree.java
new file mode 100644
index 000000000..7d487f6f1
--- /dev/null
+++ b/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/CategorizationTree.java
@@ -0,0 +1,54 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.librecms.ui.contentsections.documents;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public class CategorizationTree {
+
+ private String domainKey;
+
+ private String domainTitle;
+
+ private String domainDescription;
+
+ private CategorizationTreeNode root;
+
+ public String getDomainKey() {
+ return domainKey;
+ }
+
+ public void setDomainKey(final String domainKey) {
+ this.domainKey = domainKey;
+ }
+
+ public String getDomainTitle() {
+ return domainTitle;
+ }
+
+ public void setDomainTitle(final String domainTitle) {
+ this.domainTitle = domainTitle;
+ }
+
+ public String getDomainDescription() {
+ return domainDescription;
+ }
+
+ public void setDomainDescription(final String domainDescription) {
+ this.domainDescription = domainDescription;
+ }
+
+ public CategorizationTreeNode getRoot() {
+ return root;
+ }
+
+ public void setRoot(final CategorizationTreeNode root) {
+ this.root = root;
+ }
+
+}
diff --git a/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/CategorizationTreeNode.java b/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/CategorizationTreeNode.java
new file mode 100644
index 000000000..b764a1587
--- /dev/null
+++ b/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/CategorizationTreeNode.java
@@ -0,0 +1,112 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.librecms.ui.contentsections.documents;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public class CategorizationTreeNode {
+
+ private long categoryId;
+
+ private String categoryUuid;
+
+ private String uniqueId;
+
+ private String categoryName;
+
+ private String title;
+
+ private String description;
+
+ private boolean assigned;
+
+ private boolean subCategoryAssigned;
+
+ private List subCategories;
+
+ public long getCategoryId() {
+ return categoryId;
+ }
+
+ public void setCategoryId(final long categoryId) {
+ this.categoryId = categoryId;
+ }
+
+ public String getCategoryUuid() {
+ return categoryUuid;
+ }
+
+ public void setCategoryUuid(final String categoryUuid) {
+ this.categoryUuid = categoryUuid;
+ }
+
+ public String getUniqueId() {
+ return uniqueId;
+ }
+
+ public void setUniqueId(final String uniqueId) {
+ this.uniqueId = uniqueId;
+ }
+
+ public String getCategoryName() {
+ return categoryName;
+ }
+
+ public void setCategoryName(final String categoryName) {
+ this.categoryName = categoryName;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(final String title) {
+ this.title = title;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(final String description) {
+ this.description = description;
+ }
+
+ public boolean isAssigned() {
+ return assigned;
+ }
+
+ public void setAssigned(final boolean assigned) {
+ this.assigned = assigned;
+ }
+
+ public boolean isSubCategoryAssigned() {
+ return subCategoryAssigned;
+ }
+
+ public void setSubCategoryAssigned(final boolean subCategoryAssigned) {
+ this.subCategoryAssigned = subCategoryAssigned;
+ }
+
+ public List getSubCategories() {
+ return Collections.unmodifiableList(subCategories);
+ }
+
+ public void setSubCategories(
+ final List subCategories
+ ) {
+ this.subCategories = new ArrayList<>(subCategories);
+ }
+
+
+
+}
diff --git a/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/DefaultAuthoringStepConstants.java b/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/DefaultAuthoringStepConstants.java
new file mode 100644
index 000000000..76eba4a22
--- /dev/null
+++ b/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/DefaultAuthoringStepConstants.java
@@ -0,0 +1,22 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.librecms.ui.contentsections.documents;
+
+/**
+ *
+ * @author Jens Pelzetter
+ */
+public final class DefaultAuthoringStepConstants {
+
+ private DefaultAuthoringStepConstants() {
+
+ }
+
+
+ public static final String BUNDLE
+ = "org.libreccms.ui.DefaultAuthoringStepsBundle";
+
+}
diff --git a/ccm-cms/src/main/resources/org/librecms/ui/DefaultAuthoringStepsBundle.properties b/ccm-cms/src/main/resources/org/librecms/ui/DefaultAuthoringStepsBundle.properties
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/ccm-cms/src/main/resources/org/librecms/ui/DefaultAuthoringStepsBundle.properties
@@ -0,0 +1 @@
+
diff --git a/ccm-cms/src/main/resources/org/librecms/ui/DefaultAuthoringStepsBundle_de.properties b/ccm-cms/src/main/resources/org/librecms/ui/DefaultAuthoringStepsBundle_de.properties
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/ccm-cms/src/main/resources/org/librecms/ui/DefaultAuthoringStepsBundle_de.properties
@@ -0,0 +1 @@
+
diff --git a/ccm-pagemodelseditor/package-lock.json b/ccm-pagemodelseditor/package-lock.json
index 3fc7e615e..77ec6e01f 100644
--- a/ccm-pagemodelseditor/package-lock.json
+++ b/ccm-pagemodelseditor/package-lock.json
@@ -16,7 +16,7 @@
"integrity": "sha512-mOrlCEdwX3seT3n0AXNt4KNPAZZxcsABUHwBgFXOt+nvFUXkxCAO6UBJHPrDxWEa2KDMil86355fjo8jbZ+K0Q==",
"dev": true,
"requires": {
- "@types/react": "*"
+ "@types/react": "16.4.11"
}
},
"@types/react": {
@@ -25,8 +25,8 @@
"integrity": "sha512-1DQnmwO8u8N3ucvRX2ZLDEjQ2VctkAvL/rpbm2ev4uaZA0z4ysU+I0tk+K8ZLblC6p7MCgFyF+cQlSNIPUHzeQ==",
"dev": true,
"requires": {
- "@types/prop-types": "*",
- "csstype": "^2.2.0"
+ "@types/prop-types": "15.5.5",
+ "csstype": "2.5.6"
}
},
"@types/react-dom": {
@@ -35,8 +35,8 @@
"integrity": "sha512-vaq4vMaJOaNgFff1t3LnHYr6vRa09vRspMkmLdXtFZmO1fwDI2snP+dpOkwrtlU8UC8qsqemCu4RmVM2OLq/fA==",
"dev": true,
"requires": {
- "@types/node": "*",
- "@types/react": "*"
+ "@types/node": "10.7.1",
+ "@types/react": "16.4.11"
}
},
"@types/react-modal": {
@@ -45,7 +45,7 @@
"integrity": "sha512-EhRC3xjsehC0e8OKz/NmEyjc/ggHxVj4rNu8p/AfSohbn5NHY0V58fj0OZgQPZzXY42v+rLxiO7PL1uOeBfimg==",
"dev": true,
"requires": {
- "@types/react": "*"
+ "@types/react": "16.4.11"
}
},
"ansi-regex": {
@@ -66,7 +66,7 @@
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"dev": true,
"requires": {
- "sprintf-js": "~1.0.2"
+ "sprintf-js": "1.0.3"
}
},
"asap": {
@@ -80,9 +80,9 @@
"integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
"dev": true,
"requires": {
- "chalk": "^1.1.3",
- "esutils": "^2.0.2",
- "js-tokens": "^3.0.2"
+ "chalk": "1.1.3",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
},
"dependencies": {
"chalk": {
@@ -91,11 +91,11 @@
"integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
"dev": true,
"requires": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
}
}
}
@@ -112,7 +112,7 @@
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
"requires": {
- "balanced-match": "^1.0.0",
+ "balanced-match": "1.0.0",
"concat-map": "0.0.1"
}
},
@@ -128,9 +128,9 @@
"integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
"dev": true,
"requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
+ "ansi-styles": "3.2.1",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "5.4.0"
},
"dependencies": {
"ansi-styles": {
@@ -139,7 +139,7 @@
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"requires": {
- "color-convert": "^1.9.0"
+ "color-convert": "1.9.2"
}
},
"supports-color": {
@@ -148,7 +148,7 @@
"integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
"dev": true,
"requires": {
- "has-flag": "^3.0.0"
+ "has-flag": "3.0.0"
}
}
}
@@ -202,7 +202,7 @@
"resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
"integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
"requires": {
- "iconv-lite": "~0.4.13"
+ "iconv-lite": "0.4.23"
}
},
"escape-string-regexp": {
@@ -233,13 +233,13 @@
"resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz",
"integrity": "sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s=",
"requires": {
- "core-js": "^1.0.0",
- "isomorphic-fetch": "^2.1.1",
- "loose-envify": "^1.0.0",
- "object-assign": "^4.1.0",
- "promise": "^7.1.1",
- "setimmediate": "^1.0.5",
- "ua-parser-js": "^0.7.9"
+ "core-js": "1.2.7",
+ "isomorphic-fetch": "2.2.1",
+ "loose-envify": "1.3.1",
+ "object-assign": "4.1.1",
+ "promise": "7.3.1",
+ "setimmediate": "1.0.5",
+ "ua-parser-js": "0.7.18"
}
},
"fs.realpath": {
@@ -254,12 +254,12 @@
"integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
"dev": true,
"requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
}
},
"has-ansi": {
@@ -268,7 +268,7 @@
"integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
"dev": true,
"requires": {
- "ansi-regex": "^2.0.0"
+ "ansi-regex": "2.1.1"
}
},
"has-flag": {
@@ -287,7 +287,7 @@
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
"integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
"requires": {
- "safer-buffer": ">= 2.1.2 < 3"
+ "safer-buffer": "2.1.2"
}
},
"inflight": {
@@ -296,8 +296,8 @@
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"dev": true,
"requires": {
- "once": "^1.3.0",
- "wrappy": "1"
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
}
},
"inherits": {
@@ -311,7 +311,7 @@
"resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
"integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
"requires": {
- "loose-envify": "^1.0.0"
+ "loose-envify": "1.3.1"
}
},
"is-stream": {
@@ -324,8 +324,8 @@
"resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz",
"integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=",
"requires": {
- "node-fetch": "^1.0.1",
- "whatwg-fetch": ">=0.10.0"
+ "node-fetch": "1.7.3",
+ "whatwg-fetch": "2.0.4"
}
},
"js-tokens": {
@@ -339,8 +339,8 @@
"integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==",
"dev": true,
"requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
+ "argparse": "1.0.10",
+ "esprima": "4.0.1"
}
},
"lodash": {
@@ -358,7 +358,7 @@
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
"integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
"requires": {
- "js-tokens": "^3.0.0"
+ "js-tokens": "3.0.2"
}
},
"minimatch": {
@@ -367,7 +367,7 @@
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"dev": true,
"requires": {
- "brace-expansion": "^1.1.7"
+ "brace-expansion": "1.1.11"
}
},
"node-fetch": {
@@ -375,8 +375,8 @@
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
"integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==",
"requires": {
- "encoding": "^0.1.11",
- "is-stream": "^1.0.1"
+ "encoding": "0.1.12",
+ "is-stream": "1.1.0"
}
},
"object-assign": {
@@ -390,7 +390,7 @@
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"dev": true,
"requires": {
- "wrappy": "1"
+ "wrappy": "1.0.2"
}
},
"path-is-absolute": {
@@ -410,7 +410,7 @@
"resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
"integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
"requires": {
- "asap": "~2.0.3"
+ "asap": "2.0.6"
}
},
"prop-types": {
@@ -418,9 +418,9 @@
"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.1.tgz",
"integrity": "sha512-4ec7bY1Y66LymSUOH/zARVYObB23AT2h8cf6e/O6ZALB/N0sqZFEx7rq6EYPX2MkOdKORuooI/H5k9TlR4q7kQ==",
"requires": {
- "fbjs": "^0.8.16",
- "loose-envify": "^1.3.1",
- "object-assign": "^4.1.1"
+ "fbjs": "0.8.16",
+ "loose-envify": "1.3.1",
+ "object-assign": "4.1.1"
}
},
"react": {
@@ -428,10 +428,10 @@
"resolved": "https://registry.npmjs.org/react/-/react-16.4.2.tgz",
"integrity": "sha512-dMv7YrbxO4y2aqnvA7f/ik9ibeLSHQJTI6TrYAenPSaQ6OXfb+Oti+oJiy8WBxgRzlKatYqtCjphTgDSCEiWFg==",
"requires": {
- "fbjs": "^0.8.16",
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1",
- "prop-types": "^15.6.0"
+ "fbjs": "0.8.16",
+ "loose-envify": "1.3.1",
+ "object-assign": "4.1.1",
+ "prop-types": "15.6.1"
}
},
"react-dom": {
@@ -439,10 +439,10 @@
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.4.2.tgz",
"integrity": "sha512-Usl73nQqzvmJN+89r97zmeUpQDKDlh58eX6Hbs/ERdDHzeBzWy+ENk7fsGQ+5KxArV1iOFPT46/VneklK9zoWw==",
"requires": {
- "fbjs": "^0.8.16",
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1",
- "prop-types": "^15.6.0"
+ "fbjs": "0.8.16",
+ "loose-envify": "1.3.1",
+ "object-assign": "4.1.1",
+ "prop-types": "15.6.1"
}
},
"react-lifecycles-compat": {
@@ -455,10 +455,10 @@
"resolved": "https://registry.npmjs.org/react-modal/-/react-modal-3.5.1.tgz",
"integrity": "sha512-GxL7ycOgKC+p641cR+V1bw5dC1faL2N86/AJlzbMVmvt1totoylgkJmn9zvLuHeuarGbB7CLfHMGpeRowaj2jQ==",
"requires": {
- "exenv": "^1.2.0",
- "prop-types": "^15.5.10",
- "react-lifecycles-compat": "^3.0.0",
- "warning": "^3.0.0"
+ "exenv": "1.2.2",
+ "prop-types": "15.6.1",
+ "react-lifecycles-compat": "3.0.4",
+ "warning": "3.0.0"
}
},
"react-redux": {
@@ -466,12 +466,12 @@
"resolved": "https://registry.npmjs.org/react-redux/-/react-redux-5.0.7.tgz",
"integrity": "sha512-5VI8EV5hdgNgyjfmWzBbdrqUkrVRKlyTKk1sGH3jzM2M2Mhj/seQgPXaz6gVAj2lz/nz688AdTqMO18Lr24Zhg==",
"requires": {
- "hoist-non-react-statics": "^2.5.0",
- "invariant": "^2.0.0",
- "lodash": "^4.17.5",
- "lodash-es": "^4.17.5",
- "loose-envify": "^1.1.0",
- "prop-types": "^15.6.0"
+ "hoist-non-react-statics": "2.5.5",
+ "invariant": "2.2.4",
+ "lodash": "4.17.10",
+ "lodash-es": "4.17.10",
+ "loose-envify": "1.3.1",
+ "prop-types": "15.6.1"
}
},
"redux": {
@@ -479,8 +479,8 @@
"resolved": "https://registry.npmjs.org/redux/-/redux-4.0.0.tgz",
"integrity": "sha512-NnnHF0h0WVE/hXyrB6OlX67LYRuaf/rJcbWvnHHEPCF/Xa/AZpwhs/20WyqzQae5x4SD2F9nPObgBh2rxAgLiA==",
"requires": {
- "loose-envify": "^1.1.0",
- "symbol-observable": "^1.2.0"
+ "loose-envify": "1.3.1",
+ "symbol-observable": "1.2.0"
}
},
"resolve": {
@@ -489,7 +489,7 @@
"integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==",
"dev": true,
"requires": {
- "path-parse": "^1.0.5"
+ "path-parse": "1.0.6"
}
},
"safer-buffer": {
@@ -520,7 +520,7 @@
"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
"dev": true,
"requires": {
- "ansi-regex": "^2.0.0"
+ "ansi-regex": "2.1.1"
}
},
"supports-color": {
@@ -546,18 +546,18 @@
"integrity": "sha1-mPMMAurjzecAYgHkwzywi0hYHu0=",
"dev": true,
"requires": {
- "babel-code-frame": "^6.22.0",
- "builtin-modules": "^1.1.1",
- "chalk": "^2.3.0",
- "commander": "^2.12.1",
- "diff": "^3.2.0",
- "glob": "^7.1.1",
- "js-yaml": "^3.7.0",
- "minimatch": "^3.0.4",
- "resolve": "^1.3.2",
- "semver": "^5.3.0",
- "tslib": "^1.8.0",
- "tsutils": "^2.27.2"
+ "babel-code-frame": "6.26.0",
+ "builtin-modules": "1.1.1",
+ "chalk": "2.4.1",
+ "commander": "2.17.1",
+ "diff": "3.5.0",
+ "glob": "7.1.2",
+ "js-yaml": "3.12.0",
+ "minimatch": "3.0.4",
+ "resolve": "1.8.1",
+ "semver": "5.5.0",
+ "tslib": "1.9.3",
+ "tsutils": "2.29.0"
}
},
"tsutils": {
@@ -566,7 +566,7 @@
"integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==",
"dev": true,
"requires": {
- "tslib": "^1.8.1"
+ "tslib": "1.9.3"
}
},
"typescript": {
@@ -585,7 +585,7 @@
"resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz",
"integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=",
"requires": {
- "loose-envify": "^1.0.0"
+ "loose-envify": "1.3.1"
}
},
"whatwg-fetch": {