diff --git a/.gitignore b/.gitignore
index e1b769f..1af916b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,7 @@
.idea/
node_modules/
.tmp/
-.dist/
+dist/
package.json.lock
-.vscode/
\ No newline at end of file
+.vscode/
+*hot-update.js
\ No newline at end of file
diff --git a/app/data/settings.js b/app/data/settings.js
index 9a2a707..81bbe05 100644
--- a/app/data/settings.js
+++ b/app/data/settings.js
@@ -19,12 +19,33 @@ let commonFields = {
let ElementFields = {
"Button": { ...commonFields, "Locator": "TextField" },
+ "CheckBox": { ...commonFields, "Locator": "TextField" },
+ "Image": { ...commonFields, "Locator": "TextField" },
+ "Label": { ...commonFields, "Locator": "TextField" },
+ "Text": { ...commonFields, "Locator": "TextField" },
"Link": { ...commonFields, "Locator": "TextField" },
+ "TextField": { ...commonFields, "Locator": "TextField" },
+ "TextArea": { ...commonFields, "Locator": "TextField" },
+ "DataPicker": { ...commonFields, "Locator": "TextField" },
+ "FileInput": { ...commonFields, "Locator": "TextField" },
+ "Selector": { ...commonFields, "Locator": "TextField" },
+ "CheckList": { ...commonFields, "Locator": "TextField" },
+ "Menu": { ...commonFields, "Locator": "TextField" },
+ "RadioButtons": { ...commonFields, "Locator": "TextField" },
+ "Tabs": { ...commonFields, "Locator": "TextField" },
"Section": { ...commonFields, "Locator": "TextField", "isSection": "internal", "expanded": "internal", "children": "internal" },
"Form": { ...commonFields, "Locator": "TextField", "isSection": "internal", "Entity": "TextField", "expanded": "internal", "children": "internal" },
"ComboBox": {
...commonFields, "Root": "TextField", "Value": "TextField",
- "List": "TextField", "Expand": "TextField", "Enum": "TextField"
+ "List": "TextField", "Expand": "TextField"
+ },
+ "Dropdown": {
+ ...commonFields, "Root": "TextField", "Value": "TextField",
+ "List": "TextField", "Expand": "TextField"
+ },
+ "DropList": {
+ ...commonFields, "Root": "TextField", "Value": "TextField",
+ "List": "TextField", "Expand": "TextField"
},
"Table": {
...commonFields, "Root": "TextField", "Headers": "TextField", "RowHeaders": "TextField", "Header": "TextField",
@@ -39,86 +60,34 @@ let ElementFields = {
"HeaderTypes": "ComboBox", "HeaderTypesValues": ["All", "Headers", "No Headers", "Columns Headers", "Rows Headers"]
}
}
-//let HeaderTypes = ["All", "Headers", "No Headers", "Columns Headers", "Rows Headers"];
-
-/*let ElementFields = new Map();
-ElementFields.set("Button", { ...commonFields, "Locator": "TextField" });
-ElementFields.set("Image", { ...commonFields, "Locator": "TextField" });
-ElementFields.set("Checkbox", { ...commonFields, "Locator": "TextField" });
-ElementFields.set("Label", { ...commonFields, "Locator": "TextField" });
-ElementFields.set("Link", { ...commonFields, "Locator": "TextField" });
-ElementFields.set("Text", { ...commonFields, "Locator": "TextField" });
-ElementFields.set("TextField", { ...commonFields, "Locator": "TextField" });
-ElementFields.set("Input", { ...commonFields, "Locator": "TextField" });
-ElementFields.set("TextArea", { ...commonFields, "Locator": "TextField" });
-ElementFields.set("DataPicker", { ...commonFields, "Locator": "TextField" });
-ElementFields.set("FileInput", { ...commonFields, "Locator": "TextField" });
-ElementFields.set("Section", { ...commonFields, "Locator": "TextField", "isSection": "internal", "expanded": "internal", "children": "internal" });
-ElementFields.set("Form", { ...commonFields, "Locator": "TextField", "isSection": "internal", "Entity": "TextField", "expanded": "internal", "children": "internal" });
-ElementFields.set("Selector", { ...commonFields, "Locator": "TextField", "Enum": "TextField" });
-ElementFields.set("CheckList", { ...commonFields, "Locator": "TextField", "Enum": "TextField" });
-ElementFields.set("Menu", { ...commonFields, "Locator": "TextField", "Enum": "TextField" });
-ElementFields.set("RadioButtons", { ...commonFields, "Locator": "TextField", "Enum": "TextField" });
-ElementFields.set("Tabs", { ...commonFields, "Locator": "TextField", "Enum": "TextField" });
-ElementFields.set("TextList", { ...commonFields, "Locator": "TextField", "Enum": "TextField" });
-ElementFields.set("Chat", { ...commonFields, "Locator": "TextField", "Enum": "TextField" });
-ElementFields.set("ComboBox", {
- ...commonFields, "Root": "TextField", "Value": "TextField",
- "List": "TextField", "Expand": "TextField", "Enum": "TextField"
-});
-ElementFields.set("Logout", {
- ...commonFields, "Root": "TextField", "Value": "TextField",
- "List": "TextField", "Expand": "TextField", "Enum": "TextField"
-});
-ElementFields.set("Dropdown", {
- ...commonFields, "Root": "TextField", "Value": "TextField",
- "List": "TextField", "Expand": "TextField", "Enum": "TextField"
-});
-ElementFields.set("DropList", {
- ...commonFields, "Root": "TextField", "Value": "TextField",
- "List": "TextField", "Expand": "TextField", "Enum": "TextField"
-});
-ElementFields.set("Table", {
- ...commonFields, "Root": "TextField", "Headers": "TextField", "RowHeaders": "TextField", "Header": "TextField",
- "RowHeader": "TextField", "Cell": "TextField", "Column": "TextField", "Row": "TextField",
- "Footer": "TextField", "Height": "TextField", "Width": "TextField", "RowStartIndex": "TextField", "UseCache": "Checkbox",
- "HeaderTypes": "ComboBox"
-});
-ElementFields.set("DynamicTable", {
- ...commonFields, "Root": "TextField", "Headers": "TextField", "RowHeaders": "TextField", "Header": "TextField",
- "RowHeader": "TextField", "Cell": "TextField", "Column": "TextField", "Row": "TextField",
- "Footer": "TextField", "Height": "TextField", "Width": "TextField", "RowStartIndex": "TextField", "UseCache": "Checkbox",
- "HeaderTypes": "ComboBox"
-});*/
let SimpleRules = {
- "Button": [{ Locator: "input[type=submit]", uniqness: "value", id: 0 }, { Locator: "input[type=button]", uniqness: "value", id: 1 },
- { Locator: "button[type=button]", uniqness: "text", id: 2 }, { Locator: "button.btn", uniqness: "text", id: 3 }, { Locator: "a.btn", uniqness: "text", id: 4 },
- { Locator: 'button[type=submit]', uniqness: "text", id: 5 }],
- // "Checkbox": [{ Locator: "", id: 0, uniqness: "" }],
- // "Image": [{ Locator: "", id: 0, uniqness: "" }],
- // "Label": [{ Locator: "", id: 0, uniqness: "" }],
- "Link": [{ Locator: "a[href]", uniqness: "text", id: 0 }],
- // "Text": [{ Locator: "", id: 0, uniqness: "" }],
- // "TextField": [{ Locator: "", id: 0, uniqness: "" }],
- // "Input": [{ Locator: "", id: 0, uniqness: "" }],
- // "TextArea": [{ Locator: "", id: 0, uniqness: "" }],
- // "DataPicker": [{ Locator: "", id: 0, uniqness: "" }],
- // "FileInput": [{ Locator: "", id: 0, uniqness: "" }],
- // "Selector": [{ Locator: "", id: 0, uniqness: "" }],
- // "CheckList": [{ Locator: "", id: 0, uniqness: "" }],
- // "Menu": [{ Locator: "", id: 0, uniqness: "" }],
- // "RadioButtons": [{ Locator: "", id: 0, uniqness: "" }],
- // "Tabs": [{ Locator: "", id: 0, uniqness: "" }],
- // "TextList": [{ Locator: "", id: 0, uniqness: "" }],
- // "Chat": [{ Locator: "", id: 0, uniqness: "" }]
+ "Button": [{ "Locator": "button[type=submit]", "uniqness": "text", "id": 0}],
+ "CheckBox": [{"Locator": "input[type=checkbox]", "id": 0, "uniqness": "id"}],
+ "Image": [{"Locator": "img", "id": 0, "uniqness": "id"}],
+ "Label": [{"Locator": "h1", "id": 0, "uniqness": "name"},
+ {"Locator": "h2", "id": 1, "uniqness": "name"},
+ {"Locator": "h3", "id": 2, "uniqness": "name"},
+ {"Locator": "[ui=label]", "id": 3, "uniqness": "text"}
+ ],
+ "Link": [{"Locator": "", "uniqness": "", id: 0 }],
+ "Text": [{"Locator": ".main-txt", "id": 0, "uniqness": "name"}],
+ "TextField": [{"Locator": "input[type=text]", "id": 0, "uniqness": "id"},
+ {"Locator": "input[type=password]", "id": 1, "uniqness": "id"}
+ ],
+ "TextArea": [{"Locator": "textarea", "id": 0, "uniqness": "id"}],
+ "DataPicker": [{"Locator": "", "id": 0, "uniqness": ""}],
+ "FileInput": [{"Locator": "", "id": 0, "uniqness": ""}],
+ "Selector": [{"Locator": "", "id": 0, "uniqness": ""}],
+ "CheckList": [{"Locator": "", "id": 0, "uniqness": ""}],
+ "Menu": [{"Locator": "", "id": 0, "uniqness": ""}],
+ "RadioButtons": [{"Locator": "", "id": 0, "uniqness": ""}],
+ "Tabs": [{"Locator": "", "id": 0, "uniqness": ""}]
};
let ComplexRules = {
- "ComboBox": [{ Root: "[jtype=dropdown] button", uniqness: ".filter-option#text", Value: "", List: "li", Expand: ".caret", id: 0 }],
- // "Dropdown": [{ Root: "[jtype=combobox] button", uniqness: ".filter-option#text", Value: "", List: "", Expand: "", id: 0 }],
- // "DropList": [{ Root: "[jtype=droplist] button", uniqness: "text", Value: "", List: "", Expand: "", id: 0 }],
- // "MenuDropdown": [{ Root: ".open [data-toggle]", uniqness: "text", Value: "", List: "", Expand: "", id: 0 }],
- // "Logout": [{ Root: ".uui-profile-menu", uniqness: ".profile-photo span#text", Value: "", List: "", Expand: "", id: 0 }],
+ "Dropdown": [{ Root: "[ui=dropdown]", uniqness: "id", Value: "", List: "li", Expand: ".caret", id: 0 }],
+ "ComboBox": [{ Root: "[ui=combobox]", uniqness: "id", Value: "", List: "li", Expand: ".caret", id: 0 }],
+ "DropList": [{ Root: "[ui=droplist]", uniqness: "id", Value: "", List: "li", Expand: ".caret", id: 0 }],
"Table": [{
Root: "table", Header: "", RowHeader: "", Cell: "",
Column: "", Row: "", Footer: "", id: 0, uniqness: 'class'
@@ -129,12 +98,13 @@ let ComplexRules = {
}]
};
let CompositeRules = {
- "Section": [{ Locator: ".section", id: 0, uniqness: 'class'},
- { Locator: "header", id: 1, uniqness: 'tag' },
- { Locator: "//footer", id: 2, uniqness: '[footer]' },
- { Locator: "#sidebar", id: 3, uniqness: 'id'},
- { Locator: "#content", id: 4, uniqness: 'id' }],
- "Form": [{ Locator: "form", id: 0, uniqness: 'class' }]
+ "Section": [{ "Locator": ".section", "id": 0, "uniqness": "class" },
+ {"Locator": "header", "id": 1, "uniqness": "tag"},
+ {"Locator": "footer", "id": 2, "uniqness": "tag"},
+ {"Locator": ".uui-side-bar", "id": 3, "uniqness": "name"},
+ {"Locator": ".main-form", "id": 4, "uniqness": "tag"}
+ ],
+ "Form": [{"Locator": "form", "id": 0, "uniqness": "id"}]
}
export { Elements, Locators, ElementFields, SimpleRules, ComplexRules, CompositeRules, commonFields };
\ No newline at end of file
diff --git a/app/reducers/POgen/genPo.js b/app/reducers/POgen/genPo.js
index b53e4aa..38c429a 100644
--- a/app/reducers/POgen/genPo.js
+++ b/app/reducers/POgen/genPo.js
@@ -33,23 +33,37 @@ export let genEl = (obj) => {
chrome.devtools.inspectedWindow.eval('document.location', (r, err) => {
page.url = r.pathname;
objCopy.SiteInfo.hostName = r.hostname;
- page.title = r.pathname.split("/").pop().replace(/\.html|\.htm/, '');
+ objCopy.SiteInfo.siteTitle = toName(r.hostname.substring(0,r.hostname.lastIndexOf(".")));
objCopy.SiteInfo.origin = r.origin;
});
chrome.devtools.inspectedWindow.eval('document.domain', (r, err) => {
if (r !== "") {
objCopy.SiteInfo.domainName = r;
- objCopy.SiteInfo.domainName = r
+ objCopy.SiteInfo.pack = r.split('.').reverse().join('.');
}
});
chrome.devtools.inspectedWindow.eval('document.title', (r, err) => {
if (r !== "") {
- page.name = r;
+ page.title = r;
+ page.name = toName(r);
}
});
+ function toName(n) {
+ let name = [];
+ if (n) {
+ //[^a-zA-Zа-яёА-ЯЁ0-9]
+ let arrayName = n.split(/[^a-zA-Zа-яёА-ЯЁ0-9]/);
+ for (let j = 0; j < arrayName.length; j++) {
+ if (arrayName[j]) {
+ name.push(arrayName[j][0].toUpperCase() + arrayName[j].slice(1));
+ }
+ }
+ }
+ return name.join(" ");
+ }
chrome.devtools.inspectedWindow.eval(
'document.body.outerHTML', (r, err) => {
if (err) {
@@ -187,9 +201,10 @@ export let genEl = (obj) => {
}
fillEl(e, t, parent, ruleId);
};
+ let tooMuchElements = `Too much elements found(${elements.length} for ${uniqness.value}. Locator (${firstSearch.locatorType.locator}))`;
if (elements.length > 1) {
if (uniqness.value === "tag" || uniqness.value === '[')
- addToLog(`Too much elements found(${elements.length} for ${uniqness.value}. Locator (${firstSearch.locatorType.locator}))`);
+ addToLog(tooMuchElements);
for (let i = 0; i < elements.length; i++) {
let val = getValue(elements[i], uniqness, Locator);
let finalLocator = xpath
@@ -204,7 +219,7 @@ export let genEl = (obj) => {
}
fillEl(e, t, parent, ruleId);
} else {
- addToLog(`Too much elements found(${s2.elements.length}. Locator (${finalLocator}))`);
+ addToLog(tooMuchElements);
}
}
}
diff --git a/app/reducers/codeReducer.js b/app/reducers/codeReducer.js
index 10962da..c37c4e6 100644
--- a/app/reducers/codeReducer.js
+++ b/app/reducers/codeReducer.js
@@ -1,133 +1,23 @@
-import { commonFields } from '../data/settings';
import { saveAs } from 'file-saver';
import JSZip from '../libs/jszip/dist/jszip';
import { PageObjectJSON, SiteInfoJSON } from '../data/pageObject';
-
-
-function createUpCaseName(name) {
- let result = '';
- let nArr = name.split(/\W/);
- for (let i = 0; i < nArr.length; i++) {
- if (!!nArr[i]) {
- result += nArr[i][0].toUpperCase() + nArr[i].slice(1);
- }
- }
- return result;
-}
+import { pageCode, siteCode, entityCode, sectionCode, seleniumPageCode, getPageName, getSiteName, getClassName, getEntityName } from './codeTemplates';
export let showCode = (mainObj) => {
let objCopy = Object.assign({}, mainObj);
objCopy.CodeDetails = true;
- let page = objCopy.PageObjects.find((page) => {
- if (page.pageId === objCopy.activeTabPageId) {
- return page;
- }
- });
- let pack = objCopy.SiteInfo.domainName.split(/\W/).reverse().join('.');
-
+ let page = objCopy.PageObjects.find(page => page.pageId === objCopy.activeTabPageId);
let el = objCopy.selectedElement;
-
- function c() {
- return 'package ' + pack + ';\n' + commonImport() +
- '\n\npublic class ' + el.Name + ' extends ' + el.Type + '{' +
- genCodeOfElements(el.elId, page.elements, objCopy) + '\n}'
- }
-
- objCopy.code = c();
-
+ let pack = objCopy.SiteInfo.pack;
+ objCopy.code = sectionCode(pack, el, objCopy);
return objCopy;
}
-function commonImport() {
- return `
-import com.epam.jdi.uitests.web.selenium.elements.common.*;
-import com.epam.jdi.uitests.web.selenium.elements.complex.*;
-import com.epam.jdi.uitests.web.selenium.elements.composite.*;
-import com.epam.jdi.uitests.web.selenium.elements.composite.WebPage;
-import com.epam.jdi.uitests.web.selenium.elements.pageobjects.annotations.objects.*;
-import com.epam.jdi.uitests.web.selenium.elements.pageobjects.annotations.simple.*;
-import org.openqa.selenium.support.FindBy;`
-}
-
-function genCodeOfElements(parentId, arrOfElements, objCopy) {
- let result = '';
- for (let i = 0; i < arrOfElements.length; i++) {
- if (arrOfElements[i].parentId === parentId && (!!arrOfElements[i].Locator || !!arrOfElements[i].Root) ) {
- if (objCopy.CompositeRules[arrOfElements[i].Type]) {
- result += '\n\t@' + (arrOfElements[i].Locator.indexOf('/') !== 1 ? 'Css("' : 'XPath("') + arrOfElements[i].Locator + '") public ' +
- arrOfElements[i].Name + ' ' + arrOfElements[i].Name[0].toLowerCase() + arrOfElements[i].Name.slice(1) + ';'
- }
- if (objCopy.ComplexRules[arrOfElements[i].Type]) {
- let clone = Object.assign({}, objCopy.ElementFields[arrOfElements[i].Type]);
- for (let field in commonFields) {
- delete clone[field];
- }
-
- if (arrOfElements[i].hasOwnProperty('Root')) {
- result += '\n\t@J' + arrOfElements[i].Type + '(' +
- '\n\t\troot = @FindBy(' + (arrOfElements[i].Root.indexOf('/') !== 1 ? 'css' : 'xpath') + ' ="' + arrOfElements[i].Root + '")';
- delete clone.Root;
- for (let field in clone) {
- if (arrOfElements[i][field]) {
- result += ',\n\t\t' + field.toLowerCase() + ' = @FindBy(' + (arrOfElements[i][field].indexOf('/') !== 0 ? 'css' : 'xpath') + ' = "' + arrOfElements[i][field] + '")'
- }
- }
- }
- result += '\n\t) public ' + arrOfElements[i].Type + ' ' + arrOfElements[i].Name[0].toLowerCase() + arrOfElements[i].Name.slice(1) + ';'
- }
- if (objCopy.SimpleRules[arrOfElements[i].Type]) {
- result += '\n\t@' + (arrOfElements[i].Locator.indexOf('/') !== 1 ? 'Css("' : 'XPath("') + arrOfElements[i].Locator + '") public ' +
- arrOfElements[i].Type + ' ' + arrOfElements[i].Name[0].toLowerCase() + arrOfElements[i].Name.slice(1) + ';'
- }
- }
- }
- return result;
-}
-
-function genCodeOfWEBElements(arrOfElements) {
- let result = '';
- for (let i = 0; i < arrOfElements.length; i++) {
- if (arrOfElements[i].Locator){
- let locator = arrOfElements[i].Locator.indexOf('/') !== 1 ? 'css = "'+ arrOfElements[i].Locator +'"'
- : 'xpath = "'+ arrOfElements[i].Locator + '"';
- result += '\n\t@FindBy(' + locator + ') public WebElement ' + arrOfElements[i].Name + ';'
- }
- }
- return result;
-}
-
-let genPageCode = (page, domainName, objCopy) => {
- let pageName = createUpCaseName(page.name);
-
- let p = domainName.split(/\W/).reverse().join('.');
-
- if (objCopy.JDI) {
- return 'package ' + p + '.pages;' +
- '\n\nimport ' + p + '.sections.*;' + commonImport() +
- '\n\npublic class ' + pageName + ' extends WebPage {' +
- genCodeOfElements(null, page.elements, objCopy) + '\n}'
- } else {
- return 'package ' + p + '.pages;' +
- '\n\nimport com.epam.jdi.uitests.web.selenium.elements.pageobjects.annotations.FindBy;' +
- '\nimport org.openqa.selenium.WebElement;' +
- '\n\npublic class ' + pageName + ' {' +
- genCodeOfWEBElements(page.elements) + '\n}'
- }
-}
-
export let genCode = (mainObj) => {
let objCopy = Object.assign({}, mainObj);
- let page = objCopy.PageObjects.find((page) => {
- if (page.pageId === objCopy.activeTabPageId) {
- return page;
- }
- })
- objCopy.code = '';
objCopy.CodeDetails = true;
objCopy.selectedElement = '';
-
- objCopy.code = genPageCode(page, objCopy.SiteInfo.domainName, objCopy);
-
+ objCopy.code = genPageCode(getActivePage(objCopy), objCopy.SiteInfo.pack, objCopy);
return objCopy;
}
@@ -135,27 +25,15 @@ export let downloadCode = (mainObj) => {
let objCopy = Object.assign({}, mainObj);
let objToSave = {
- content: '',
- name: ''
- }
-
- if (!!objCopy.selectedElement) {
- objToSave.name = objCopy.selectedElement.Name + '.java';
- } else {
- let page = objCopy.PageObjects.find((page) => {
- if (page.pageId === objCopy.activeTabPageId) {
- return page;
- }
- });
- objToSave.name = createUpCaseName(page.name) + '.java'
+ content: objCopy.code,
+ name: !!objCopy.selectedElement
+ ? objCopy.selectedElement.Name + '.java'
+ : getPageName(getActivePage(objCopy).name) + '.java'
}
- objToSave.content = objCopy.code;
-
if (objToSave.content && objToSave.name) {
let blob = new Blob([objToSave.content], { type: "text/plain;charset=utf-8" });
saveAs(blob, objToSave.name);
}
-
return objCopy;
}
@@ -170,6 +48,7 @@ export let switchCodeMode = (mainObj) => {
objCopy.ElementsDetails = false;
objCopy.PagesDetails = false;
objCopy.CodeDetails = false;
+ objCopy.RulesDetails = false;
objCopy.SiteDetails = true;
objCopy.warningLog = [];
objCopy.sections = new Map();
@@ -181,59 +60,51 @@ export let switchCodeMode = (mainObj) => {
export let zipAllCode = (mainObj) => {
let objCopy = Object.assign({}, mainObj);
- let zip = new JSZip();
- let siteHostName = objCopy.SiteInfo.hostName.split(/\W/);
- let gen = false;
- for (let i = 0; i < objCopy.PageObjects.length; i++) {
- if (objCopy.PageObjects[i].elements.length > 0 && siteHostName) {
- gen = true;
- }
- }
- if (gen) {
- let siteName = "";
- siteHostName[siteHostName.length - 1] = siteHostName.length > 1 ? "Site" : siteHostName[siteHostName.length - 1] + "Site";
- for (let i = 0; i < siteHostName.length; i++) {
- siteName += siteHostName[i][0].toUpperCase() + siteHostName[i].slice(1);
- }
- let pages = objCopy.PageObjects;
- let pageName = "";
-
- let site = "";
-
- let pack = objCopy.SiteInfo.domainName.split(/\W/).reverse().join('.');
-
- site = "package " + pack + ";" +
- "\n\nimport " + pack + ".pages.*;" +
- "\nimport com.epam.jdi.uitests.web.selenium.elements.composite.WebSite;" +
- "\nimport com.epam.jdi.uitests.web.selenium.elements.pageobjects.annotations.*;" +
- "\n\n@JSite(\"" + objCopy.SiteInfo.origin + "\")" +
- "\npublic class " + siteName + " extends WebSite {";
- for (let i = 0; i < pages.length; i++) {
- pageName = createUpCaseName(pages[i].name);
- site += '\n\t@JPage(url = "' + pages[i].url + '", title = "' + pages[i].title + '")' +
- '\n\tpublic static ' + pageName + " " + (pageName[0].toLowerCase() + pageName.slice(1)) + ';'
- }
- site += "\n}";
-
- for (let i = 0; i < pages.length; i++) {
- pageName = createUpCaseName(pages[i].name);
- zip.folder("pages").file(pageName + ".java", genPageCode(pages[i], objCopy.SiteInfo.domainName, objCopy));
- }
+ let zip = new JSZip();
+ let pack = objCopy.SiteInfo.pack;
+ let pages = objCopy.PageObjects;
+ if (!objCopy.SiteInfo.siteTitle) return objCopy;
+ let siteName = getSiteName(objCopy.SiteInfo.siteTitle);
+
+ zip.file(siteName + '.java',
+ siteCode(pack, objCopy.SiteInfo.origin, siteName, objCopy));
+
+ pages.forEach(page=>
+ zip.folder("pages").file(getPageName(page.name) + ".java",
+ genPageCode(page, pack, objCopy))
+ );
+
+ objCopy.sections.forEach(section =>
+ zip.folder("sections").file(getClassName(section.Name) + ".java",
+ sectionCode(pack, section, objCopy))
+ );
+
+ objCopy.sections.forEach(section => {
+ if (section.Type === "Form") {
+ console.log('s',section);
+ zip.folder("entities").file(getEntityName(section.Name) + ".java",
+ entityCode(pack, section, objCopy))
+ }}
+ );
+
+ zip.generateAsync({ type: "blob" }).then(
+ function (content) {
+ saveAs(content, "pageobject.zip");
+ }
+ );
+ return objCopy;
+}
- objCopy.sections.forEach((section) => {
- let result = "package " + pack + ".sections;" + commonImport();
- result += "\n\npublic class " + section.Name + " extends " + section.Type + "{" +
- genCodeOfElements(section.elId, section.children, objCopy) + "\n}";
- zip.folder("sections").file(section.Name + ".java", result);
- })
+function genPageCode(page, pack, objCopy) {
+ let pageName = getPageName(page.name);
+ return objCopy.JDI ? pageCode(pack, page, objCopy) : seleniumPageCode(pack, page);
+}
- zip.file(siteName + '.java', site);
- zip.generateAsync({ type: "blob" }).then(
- function (content) {
- saveAs(content, "pageobject.zip");
+function getActivePage(objCopy) {
+ return objCopy.PageObjects.find(page => {
+ if (page.pageId === objCopy.activeTabPageId) {
+ return page;
}
- )
- }
- return objCopy;
+ });
}
diff --git a/app/reducers/codeTemplates.js b/app/reducers/codeTemplates.js
new file mode 100644
index 0000000..0816a97
--- /dev/null
+++ b/app/reducers/codeTemplates.js
@@ -0,0 +1,195 @@
+import { commonFields } from '../data/settings';
+
+function varName(name) {
+ return name[0].toLowerCase() + name.slice(1);
+}
+export function getClassName(name) {
+ let words = name.split(/\W/);
+ return words.map(word => word[0].toUpperCase() + word.slice(1)).join('');
+}
+function poName(name, poName) {
+ let result = getClassName(name);
+ if (result.length > 4 && result.substr(-4).toLowerCase() !== poName.toLowerCase())
+ result += poName;
+ return result;
+}
+export function getSiteName(name) {
+ return poName(name, "Site");
+}
+export function getPageName(name) {
+ return poName(name, "Page");
+}
+function locatorType(locator) {
+ return locator.indexOf('/') !== 1 ? "Css" : "XPath";
+}
+function simpleCode(locatorType, locator, elType, name) {
+ return elementCode(locatorType, `"${locator}"`, elType, name)
+}
+function elementCode(locatorType, locator, elType, name) {
+ return ` @${locatorType}(${locator}) public ${elType} ${varName(name)};
+`;
+}
+function pageElementCode(page, pageName) {
+ return ` @JPage(url = "${page.url}", title = "${page.title}")
+ public static ${getPageName(pageName)} ${varName(pageName)};
+`;
+};
+function findByCode(el) {
+ let locator = el.Locator;
+ let name = el.Name;
+ return elementCode("FindBy", `${locatorType(locator).toLowerCase()} ="${locator}"`, "WebElement", name);
+}
+function complexLocators(el, fields) {
+ let locators = [];
+ for (let field in fields) {
+ let locator = el[field];
+ if (locator !== "") {
+ locators.push(`${field.toLowerCase()} = @FindBy(${locatorType(locator).toLowerCase()} ="${locator}")`);
+ }
+ }
+ return locators.join(",\n\t\t\t") + "\n\t";
+}
+
+function getFields(obj) {
+ let clone = Object.assign({}, obj);
+ for (let field in commonFields) {
+ delete clone[field];
+ }
+ return clone;
+}
+
+function isSimple(el, fields) {
+ let count = 0;;
+ for (let field in fields) {
+ if (el[field] !== "") count ++;
+ }
+ return count === 1;
+}
+
+function genEntities(parentId, arrOfElements, objCopy) {
+ return arrOfElements
+ .filter(el => el.parentId === parentId && objCopy.SimpleRules[el.Type] && el.Type != "Button")
+ .map(el => `public String ${varName(el.Name)};`).join('\n\t');
+}
+function getElement(el, objCopy) {
+ return typeof el === 'string' ? objCopy.sections.get(el) : el;
+}
+
+function genCodeOfElements(parentId, arrOfElements, objCopy) {
+ let result = '';
+ for (let i = 0; i < arrOfElements.length; i++) {
+ let el = getElement(arrOfElements[i], objCopy);
+ if (el.parentId === parentId && (!!el.Locator || !!el.Root)) {
+ if (!!objCopy.CompositeRules[el.Type]) {
+ result += simpleCode(locatorType(el.Locator), el.Locator, getClassName(el.Name), el.Name);
+ }
+ if (!!objCopy.ComplexRules[el.Type]) {
+ let fields = getFields(objCopy.ElementFields[el.Type]);
+ result += isSimple(el, fields)
+ ? simpleCode(locatorType(el.Root), el.Root, el.Type, el.Name)
+ : elementCode("J" + el.Type, complexLocators(el, fields), el.Type, el.Name);
+ }
+ if (!!objCopy.SimpleRules[el.Type]) {
+ result += simpleCode(locatorType(el.Locator), el.Locator, el.Type, el.Name);
+ }
+ }
+ }
+ return result;
+}
+function getPageCode(objCopy) {
+ return objCopy.PageObjects.map(page=>pageElementCode(page, getPageName(page.name))).join('');
+}
+
+function commonImport() {
+ return `import com.epam.jdi.uitests.web.selenium.elements.common.*;
+import com.epam.jdi.uitests.web.selenium.elements.complex.*;
+import com.epam.jdi.uitests.web.selenium.elements.composite.*;
+import com.epam.jdi.uitests.web.selenium.elements.composite.WebPage;
+import com.epam.jdi.uitests.web.selenium.elements.pageobjects.annotations.objects.*;
+import com.epam.jdi.uitests.web.selenium.elements.pageobjects.annotations.simple.*;
+import com.epam.jdi.uitests.web.selenium.elements.pageobjects.annotations.FindBy;`;
+}
+
+function sectionTemplate(pack, name, code) {
+ return `package ${pack}.sections;
+
+${commonImport()}
+
+public class ${getClassName(name)} extends Section {
+${code}
+}`;
+}
+
+function formTemplate(pack, name, code, entityName) {
+ return `package ${pack}.sections;
+
+${commonImport()}
+import ${pack}.entities.*;
+
+public class ${getClassName(name)} extends Form<${entityName}> {
+${code}
+}`;
+}
+export function getEntityName(name) {
+ return getClassName(name.slice(0,-4) + "s");
+}
+
+export function sectionCode(pack, el, objCopy) {
+ let code = genCodeOfElements(el.elId, el.children, objCopy);
+ switch (el.Type) {
+ case "Section": return sectionTemplate(pack, el.Name, code);
+ case "Form": return formTemplate(pack, el.Name, code, getEntityName(el.Name));
+ };
+}
+
+export function entityCode(pack, section, objCopy) {
+ let entityName = getEntityName(section.Name);
+ return `package ${pack}.entities;
+
+import com.epam.jdi.tools.DataClass;
+
+public class ${entityName} extends DataClass<${entityName}> {
+ ${genEntities(section.elId, section.children, objCopy)}
+}`;
+}
+
+export function siteCode(pack, domain, name, objCopy) {
+ let siteName = getSiteName(name);
+ return `package ${pack};
+import ${pack}.pages.*;
+import com.epam.jdi.uitests.web.selenium.elements.composite.WebSite;
+import com.epam.jdi.uitests.web.selenium.elements.pageobjects.annotations.*;
+
+@JSite("${domain}")
+public class ${name} extends WebSite {
+${getPageCode(objCopy)}
+}`;
+}
+
+export function pageCode(pack, page, objCopy) {
+ let pageName = getPageName(page.name);
+ return `package ${pack}.pages;
+
+${commonImport()}
+import ${pack}.sections.*;
+
+public class ${pageName} extends WebPage {
+${genCodeOfElements(null, page.elements, objCopy)}
+}`;
+}
+
+export function seleniumPageCode(pack, page) {
+ let pageName = getPageName(page.name);
+ return `package ${pack}.pages;' +
+import com.epam.jdi.uitests.web.selenium.elements.pageobjects.annotations.FindBy;
+import org.openqa.selenium.WebElement;
+
+public class ${pageName} {
+${genCodeOfWEBElements(page.elements)}
+}`;
+}
+function genCodeOfWEBElements(arrOfElements) {
+ return arrOfElements.join(el => `{findByCode(el);`);
+}
+
+
diff --git a/app/reducers/rulesReducer.js b/app/reducers/rulesReducer.js
index 4b04967..1f2f7c2 100644
--- a/app/reducers/rulesReducer.js
+++ b/app/reducers/rulesReducer.js
@@ -72,22 +72,30 @@ function addR(Rule, ruleType) {
}
res.id = id;
rule.push(res);
- return copy;
+ return {
+ copy,
+ id
+ };
}
export let addRule = (mainObj, ruleType) => {
let objCopy = Object.assign({}, mainObj);
//let allFields = objCopy.ElementFields[ruleType];
+ let result;
if (!!objCopy.SimpleRules[ruleType]) {
- objCopy.SimpleRules = addR(objCopy.SimpleRules, ruleType);
+ result = addR(objCopy.SimpleRules, ruleType);
+ objCopy.SimpleRules = result.copy;
}
if (!!objCopy.ComplexRules[ruleType]) {
- objCopy.ComplexRules = addR(objCopy.ComplexRules, ruleType);
+ result = addR(objCopy.ComplexRules, ruleType);
+ objCopy.ComplexRules = result.copy;
}
if (!!objCopy.CompositeRules[ruleType]) {
- objCopy.CompositeRules = addR(objCopy.CompositeRules, ruleType);
+ result = addR(objCopy.CompositeRules, ruleType);
+ objCopy.CompositeRules = result.copy;
}
+ objCopy.ruleId = result.id;
return objCopy;
}
diff --git a/dist/index.html b/dist/index.html
deleted file mode 100644
index 9c68471..0000000
--- a/dist/index.html
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/dist/main.bundle.js b/dist/main.bundle.js
deleted file mode 100644
index f2b9cd4..0000000
--- a/dist/main.bundle.js
+++ /dev/null
@@ -1,99342 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ function hotDisposeChunk(chunkId) {
-/******/ delete installedChunks[chunkId];
-/******/ }
-/******/ var parentHotUpdateCallback = this["webpackHotUpdate"];
-/******/ this["webpackHotUpdate"] =
-/******/ function webpackHotUpdateCallback(chunkId, moreModules) { // eslint-disable-line no-unused-vars
-/******/ hotAddUpdateChunk(chunkId, moreModules);
-/******/ if(parentHotUpdateCallback) parentHotUpdateCallback(chunkId, moreModules);
-/******/ } ;
-/******/
-/******/ function hotDownloadUpdateChunk(chunkId) { // eslint-disable-line no-unused-vars
-/******/ var head = document.getElementsByTagName("head")[0];
-/******/ var script = document.createElement("script");
-/******/ script.type = "text/javascript";
-/******/ script.charset = "utf-8";
-/******/ script.src = __webpack_require__.p + "" + chunkId + "." + hotCurrentHash + ".hot-update.js";
-/******/ head.appendChild(script);
-/******/ }
-/******/
-/******/ function hotDownloadManifest() { // eslint-disable-line no-unused-vars
-/******/ return new Promise(function(resolve, reject) {
-/******/ if(typeof XMLHttpRequest === "undefined")
-/******/ return reject(new Error("No browser support"));
-/******/ try {
-/******/ var request = new XMLHttpRequest();
-/******/ var requestPath = __webpack_require__.p + "" + hotCurrentHash + ".hot-update.json";
-/******/ request.open("GET", requestPath, true);
-/******/ request.timeout = 10000;
-/******/ request.send(null);
-/******/ } catch(err) {
-/******/ return reject(err);
-/******/ }
-/******/ request.onreadystatechange = function() {
-/******/ if(request.readyState !== 4) return;
-/******/ if(request.status === 0) {
-/******/ // timeout
-/******/ reject(new Error("Manifest request to " + requestPath + " timed out."));
-/******/ } else if(request.status === 404) {
-/******/ // no update available
-/******/ resolve();
-/******/ } else if(request.status !== 200 && request.status !== 304) {
-/******/ // other failure
-/******/ reject(new Error("Manifest request to " + requestPath + " failed."));
-/******/ } else {
-/******/ // success
-/******/ try {
-/******/ var update = JSON.parse(request.responseText);
-/******/ } catch(e) {
-/******/ reject(e);
-/******/ return;
-/******/ }
-/******/ resolve(update);
-/******/ }
-/******/ };
-/******/ });
-/******/ }
-/******/
-/******/
-/******/
-/******/ var hotApplyOnUpdate = true;
-/******/ var hotCurrentHash = "c1e22db1996c2dd54fa0"; // eslint-disable-line no-unused-vars
-/******/ var hotCurrentModuleData = {};
-/******/ var hotCurrentChildModule; // eslint-disable-line no-unused-vars
-/******/ var hotCurrentParents = []; // eslint-disable-line no-unused-vars
-/******/ var hotCurrentParentsTemp = []; // eslint-disable-line no-unused-vars
-/******/
-/******/ function hotCreateRequire(moduleId) { // eslint-disable-line no-unused-vars
-/******/ var me = installedModules[moduleId];
-/******/ if(!me) return __webpack_require__;
-/******/ var fn = function(request) {
-/******/ if(me.hot.active) {
-/******/ if(installedModules[request]) {
-/******/ if(installedModules[request].parents.indexOf(moduleId) < 0)
-/******/ installedModules[request].parents.push(moduleId);
-/******/ } else {
-/******/ hotCurrentParents = [moduleId];
-/******/ hotCurrentChildModule = request;
-/******/ }
-/******/ if(me.children.indexOf(request) < 0)
-/******/ me.children.push(request);
-/******/ } else {
-/******/ console.warn("[HMR] unexpected require(" + request + ") from disposed module " + moduleId);
-/******/ hotCurrentParents = [];
-/******/ }
-/******/ return __webpack_require__(request);
-/******/ };
-/******/ var ObjectFactory = function ObjectFactory(name) {
-/******/ return {
-/******/ configurable: true,
-/******/ enumerable: true,
-/******/ get: function() {
-/******/ return __webpack_require__[name];
-/******/ },
-/******/ set: function(value) {
-/******/ __webpack_require__[name] = value;
-/******/ }
-/******/ };
-/******/ };
-/******/ for(var name in __webpack_require__) {
-/******/ if(Object.prototype.hasOwnProperty.call(__webpack_require__, name) && name !== "e") {
-/******/ Object.defineProperty(fn, name, ObjectFactory(name));
-/******/ }
-/******/ }
-/******/ fn.e = function(chunkId) {
-/******/ if(hotStatus === "ready")
-/******/ hotSetStatus("prepare");
-/******/ hotChunksLoading++;
-/******/ return __webpack_require__.e(chunkId).then(finishChunkLoading, function(err) {
-/******/ finishChunkLoading();
-/******/ throw err;
-/******/ });
-/******/
-/******/ function finishChunkLoading() {
-/******/ hotChunksLoading--;
-/******/ if(hotStatus === "prepare") {
-/******/ if(!hotWaitingFilesMap[chunkId]) {
-/******/ hotEnsureUpdateChunk(chunkId);
-/******/ }
-/******/ if(hotChunksLoading === 0 && hotWaitingFiles === 0) {
-/******/ hotUpdateDownloaded();
-/******/ }
-/******/ }
-/******/ }
-/******/ };
-/******/ return fn;
-/******/ }
-/******/
-/******/ function hotCreateModule(moduleId) { // eslint-disable-line no-unused-vars
-/******/ var hot = {
-/******/ // private stuff
-/******/ _acceptedDependencies: {},
-/******/ _declinedDependencies: {},
-/******/ _selfAccepted: false,
-/******/ _selfDeclined: false,
-/******/ _disposeHandlers: [],
-/******/ _main: hotCurrentChildModule !== moduleId,
-/******/
-/******/ // Module API
-/******/ active: true,
-/******/ accept: function(dep, callback) {
-/******/ if(typeof dep === "undefined")
-/******/ hot._selfAccepted = true;
-/******/ else if(typeof dep === "function")
-/******/ hot._selfAccepted = dep;
-/******/ else if(typeof dep === "object")
-/******/ for(var i = 0; i < dep.length; i++)
-/******/ hot._acceptedDependencies[dep[i]] = callback || function() {};
-/******/ else
-/******/ hot._acceptedDependencies[dep] = callback || function() {};
-/******/ },
-/******/ decline: function(dep) {
-/******/ if(typeof dep === "undefined")
-/******/ hot._selfDeclined = true;
-/******/ else if(typeof dep === "object")
-/******/ for(var i = 0; i < dep.length; i++)
-/******/ hot._declinedDependencies[dep[i]] = true;
-/******/ else
-/******/ hot._declinedDependencies[dep] = true;
-/******/ },
-/******/ dispose: function(callback) {
-/******/ hot._disposeHandlers.push(callback);
-/******/ },
-/******/ addDisposeHandler: function(callback) {
-/******/ hot._disposeHandlers.push(callback);
-/******/ },
-/******/ removeDisposeHandler: function(callback) {
-/******/ var idx = hot._disposeHandlers.indexOf(callback);
-/******/ if(idx >= 0) hot._disposeHandlers.splice(idx, 1);
-/******/ },
-/******/
-/******/ // Management API
-/******/ check: hotCheck,
-/******/ apply: hotApply,
-/******/ status: function(l) {
-/******/ if(!l) return hotStatus;
-/******/ hotStatusHandlers.push(l);
-/******/ },
-/******/ addStatusHandler: function(l) {
-/******/ hotStatusHandlers.push(l);
-/******/ },
-/******/ removeStatusHandler: function(l) {
-/******/ var idx = hotStatusHandlers.indexOf(l);
-/******/ if(idx >= 0) hotStatusHandlers.splice(idx, 1);
-/******/ },
-/******/
-/******/ //inherit from previous dispose call
-/******/ data: hotCurrentModuleData[moduleId]
-/******/ };
-/******/ hotCurrentChildModule = undefined;
-/******/ return hot;
-/******/ }
-/******/
-/******/ var hotStatusHandlers = [];
-/******/ var hotStatus = "idle";
-/******/
-/******/ function hotSetStatus(newStatus) {
-/******/ hotStatus = newStatus;
-/******/ for(var i = 0; i < hotStatusHandlers.length; i++)
-/******/ hotStatusHandlers[i].call(null, newStatus);
-/******/ }
-/******/
-/******/ // while downloading
-/******/ var hotWaitingFiles = 0;
-/******/ var hotChunksLoading = 0;
-/******/ var hotWaitingFilesMap = {};
-/******/ var hotRequestedFilesMap = {};
-/******/ var hotAvailableFilesMap = {};
-/******/ var hotDeferred;
-/******/
-/******/ // The update info
-/******/ var hotUpdate, hotUpdateNewHash;
-/******/
-/******/ function toModuleId(id) {
-/******/ var isNumber = (+id) + "" === id;
-/******/ return isNumber ? +id : id;
-/******/ }
-/******/
-/******/ function hotCheck(apply) {
-/******/ if(hotStatus !== "idle") throw new Error("check() is only allowed in idle status");
-/******/ hotApplyOnUpdate = apply;
-/******/ hotSetStatus("check");
-/******/ return hotDownloadManifest().then(function(update) {
-/******/ if(!update) {
-/******/ hotSetStatus("idle");
-/******/ return null;
-/******/ }
-/******/ hotRequestedFilesMap = {};
-/******/ hotWaitingFilesMap = {};
-/******/ hotAvailableFilesMap = update.c;
-/******/ hotUpdateNewHash = update.h;
-/******/
-/******/ hotSetStatus("prepare");
-/******/ var promise = new Promise(function(resolve, reject) {
-/******/ hotDeferred = {
-/******/ resolve: resolve,
-/******/ reject: reject
-/******/ };
-/******/ });
-/******/ hotUpdate = {};
-/******/ var chunkId = 0;
-/******/ { // eslint-disable-line no-lone-blocks
-/******/ /*globals chunkId */
-/******/ hotEnsureUpdateChunk(chunkId);
-/******/ }
-/******/ if(hotStatus === "prepare" && hotChunksLoading === 0 && hotWaitingFiles === 0) {
-/******/ hotUpdateDownloaded();
-/******/ }
-/******/ return promise;
-/******/ });
-/******/ }
-/******/
-/******/ function hotAddUpdateChunk(chunkId, moreModules) { // eslint-disable-line no-unused-vars
-/******/ if(!hotAvailableFilesMap[chunkId] || !hotRequestedFilesMap[chunkId])
-/******/ return;
-/******/ hotRequestedFilesMap[chunkId] = false;
-/******/ for(var moduleId in moreModules) {
-/******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {
-/******/ hotUpdate[moduleId] = moreModules[moduleId];
-/******/ }
-/******/ }
-/******/ if(--hotWaitingFiles === 0 && hotChunksLoading === 0) {
-/******/ hotUpdateDownloaded();
-/******/ }
-/******/ }
-/******/
-/******/ function hotEnsureUpdateChunk(chunkId) {
-/******/ if(!hotAvailableFilesMap[chunkId]) {
-/******/ hotWaitingFilesMap[chunkId] = true;
-/******/ } else {
-/******/ hotRequestedFilesMap[chunkId] = true;
-/******/ hotWaitingFiles++;
-/******/ hotDownloadUpdateChunk(chunkId);
-/******/ }
-/******/ }
-/******/
-/******/ function hotUpdateDownloaded() {
-/******/ hotSetStatus("ready");
-/******/ var deferred = hotDeferred;
-/******/ hotDeferred = null;
-/******/ if(!deferred) return;
-/******/ if(hotApplyOnUpdate) {
-/******/ hotApply(hotApplyOnUpdate).then(function(result) {
-/******/ deferred.resolve(result);
-/******/ }, function(err) {
-/******/ deferred.reject(err);
-/******/ });
-/******/ } else {
-/******/ var outdatedModules = [];
-/******/ for(var id in hotUpdate) {
-/******/ if(Object.prototype.hasOwnProperty.call(hotUpdate, id)) {
-/******/ outdatedModules.push(toModuleId(id));
-/******/ }
-/******/ }
-/******/ deferred.resolve(outdatedModules);
-/******/ }
-/******/ }
-/******/
-/******/ function hotApply(options) {
-/******/ if(hotStatus !== "ready") throw new Error("apply() is only allowed in ready status");
-/******/ options = options || {};
-/******/
-/******/ var cb;
-/******/ var i;
-/******/ var j;
-/******/ var module;
-/******/ var moduleId;
-/******/
-/******/ function getAffectedStuff(updateModuleId) {
-/******/ var outdatedModules = [updateModuleId];
-/******/ var outdatedDependencies = {};
-/******/
-/******/ var queue = outdatedModules.slice().map(function(id) {
-/******/ return {
-/******/ chain: [id],
-/******/ id: id
-/******/ };
-/******/ });
-/******/ while(queue.length > 0) {
-/******/ var queueItem = queue.pop();
-/******/ var moduleId = queueItem.id;
-/******/ var chain = queueItem.chain;
-/******/ module = installedModules[moduleId];
-/******/ if(!module || module.hot._selfAccepted)
-/******/ continue;
-/******/ if(module.hot._selfDeclined) {
-/******/ return {
-/******/ type: "self-declined",
-/******/ chain: chain,
-/******/ moduleId: moduleId
-/******/ };
-/******/ }
-/******/ if(module.hot._main) {
-/******/ return {
-/******/ type: "unaccepted",
-/******/ chain: chain,
-/******/ moduleId: moduleId
-/******/ };
-/******/ }
-/******/ for(var i = 0; i < module.parents.length; i++) {
-/******/ var parentId = module.parents[i];
-/******/ var parent = installedModules[parentId];
-/******/ if(!parent) continue;
-/******/ if(parent.hot._declinedDependencies[moduleId]) {
-/******/ return {
-/******/ type: "declined",
-/******/ chain: chain.concat([parentId]),
-/******/ moduleId: moduleId,
-/******/ parentId: parentId
-/******/ };
-/******/ }
-/******/ if(outdatedModules.indexOf(parentId) >= 0) continue;
-/******/ if(parent.hot._acceptedDependencies[moduleId]) {
-/******/ if(!outdatedDependencies[parentId])
-/******/ outdatedDependencies[parentId] = [];
-/******/ addAllToSet(outdatedDependencies[parentId], [moduleId]);
-/******/ continue;
-/******/ }
-/******/ delete outdatedDependencies[parentId];
-/******/ outdatedModules.push(parentId);
-/******/ queue.push({
-/******/ chain: chain.concat([parentId]),
-/******/ id: parentId
-/******/ });
-/******/ }
-/******/ }
-/******/
-/******/ return {
-/******/ type: "accepted",
-/******/ moduleId: updateModuleId,
-/******/ outdatedModules: outdatedModules,
-/******/ outdatedDependencies: outdatedDependencies
-/******/ };
-/******/ }
-/******/
-/******/ function addAllToSet(a, b) {
-/******/ for(var i = 0; i < b.length; i++) {
-/******/ var item = b[i];
-/******/ if(a.indexOf(item) < 0)
-/******/ a.push(item);
-/******/ }
-/******/ }
-/******/
-/******/ // at begin all updates modules are outdated
-/******/ // the "outdated" status can propagate to parents if they don't accept the children
-/******/ var outdatedDependencies = {};
-/******/ var outdatedModules = [];
-/******/ var appliedUpdate = {};
-/******/
-/******/ var warnUnexpectedRequire = function warnUnexpectedRequire() {
-/******/ console.warn("[HMR] unexpected require(" + result.moduleId + ") to disposed module");
-/******/ };
-/******/
-/******/ for(var id in hotUpdate) {
-/******/ if(Object.prototype.hasOwnProperty.call(hotUpdate, id)) {
-/******/ moduleId = toModuleId(id);
-/******/ var result;
-/******/ if(hotUpdate[id]) {
-/******/ result = getAffectedStuff(moduleId);
-/******/ } else {
-/******/ result = {
-/******/ type: "disposed",
-/******/ moduleId: id
-/******/ };
-/******/ }
-/******/ var abortError = false;
-/******/ var doApply = false;
-/******/ var doDispose = false;
-/******/ var chainInfo = "";
-/******/ if(result.chain) {
-/******/ chainInfo = "\nUpdate propagation: " + result.chain.join(" -> ");
-/******/ }
-/******/ switch(result.type) {
-/******/ case "self-declined":
-/******/ if(options.onDeclined)
-/******/ options.onDeclined(result);
-/******/ if(!options.ignoreDeclined)
-/******/ abortError = new Error("Aborted because of self decline: " + result.moduleId + chainInfo);
-/******/ break;
-/******/ case "declined":
-/******/ if(options.onDeclined)
-/******/ options.onDeclined(result);
-/******/ if(!options.ignoreDeclined)
-/******/ abortError = new Error("Aborted because of declined dependency: " + result.moduleId + " in " + result.parentId + chainInfo);
-/******/ break;
-/******/ case "unaccepted":
-/******/ if(options.onUnaccepted)
-/******/ options.onUnaccepted(result);
-/******/ if(!options.ignoreUnaccepted)
-/******/ abortError = new Error("Aborted because " + moduleId + " is not accepted" + chainInfo);
-/******/ break;
-/******/ case "accepted":
-/******/ if(options.onAccepted)
-/******/ options.onAccepted(result);
-/******/ doApply = true;
-/******/ break;
-/******/ case "disposed":
-/******/ if(options.onDisposed)
-/******/ options.onDisposed(result);
-/******/ doDispose = true;
-/******/ break;
-/******/ default:
-/******/ throw new Error("Unexception type " + result.type);
-/******/ }
-/******/ if(abortError) {
-/******/ hotSetStatus("abort");
-/******/ return Promise.reject(abortError);
-/******/ }
-/******/ if(doApply) {
-/******/ appliedUpdate[moduleId] = hotUpdate[moduleId];
-/******/ addAllToSet(outdatedModules, result.outdatedModules);
-/******/ for(moduleId in result.outdatedDependencies) {
-/******/ if(Object.prototype.hasOwnProperty.call(result.outdatedDependencies, moduleId)) {
-/******/ if(!outdatedDependencies[moduleId])
-/******/ outdatedDependencies[moduleId] = [];
-/******/ addAllToSet(outdatedDependencies[moduleId], result.outdatedDependencies[moduleId]);
-/******/ }
-/******/ }
-/******/ }
-/******/ if(doDispose) {
-/******/ addAllToSet(outdatedModules, [result.moduleId]);
-/******/ appliedUpdate[moduleId] = warnUnexpectedRequire;
-/******/ }
-/******/ }
-/******/ }
-/******/
-/******/ // Store self accepted outdated modules to require them later by the module system
-/******/ var outdatedSelfAcceptedModules = [];
-/******/ for(i = 0; i < outdatedModules.length; i++) {
-/******/ moduleId = outdatedModules[i];
-/******/ if(installedModules[moduleId] && installedModules[moduleId].hot._selfAccepted)
-/******/ outdatedSelfAcceptedModules.push({
-/******/ module: moduleId,
-/******/ errorHandler: installedModules[moduleId].hot._selfAccepted
-/******/ });
-/******/ }
-/******/
-/******/ // Now in "dispose" phase
-/******/ hotSetStatus("dispose");
-/******/ Object.keys(hotAvailableFilesMap).forEach(function(chunkId) {
-/******/ if(hotAvailableFilesMap[chunkId] === false) {
-/******/ hotDisposeChunk(chunkId);
-/******/ }
-/******/ });
-/******/
-/******/ var idx;
-/******/ var queue = outdatedModules.slice();
-/******/ while(queue.length > 0) {
-/******/ moduleId = queue.pop();
-/******/ module = installedModules[moduleId];
-/******/ if(!module) continue;
-/******/
-/******/ var data = {};
-/******/
-/******/ // Call dispose handlers
-/******/ var disposeHandlers = module.hot._disposeHandlers;
-/******/ for(j = 0; j < disposeHandlers.length; j++) {
-/******/ cb = disposeHandlers[j];
-/******/ cb(data);
-/******/ }
-/******/ hotCurrentModuleData[moduleId] = data;
-/******/
-/******/ // disable module (this disables requires from this module)
-/******/ module.hot.active = false;
-/******/
-/******/ // remove module from cache
-/******/ delete installedModules[moduleId];
-/******/
-/******/ // remove "parents" references from all children
-/******/ for(j = 0; j < module.children.length; j++) {
-/******/ var child = installedModules[module.children[j]];
-/******/ if(!child) continue;
-/******/ idx = child.parents.indexOf(moduleId);
-/******/ if(idx >= 0) {
-/******/ child.parents.splice(idx, 1);
-/******/ }
-/******/ }
-/******/ }
-/******/
-/******/ // remove outdated dependency from module children
-/******/ var dependency;
-/******/ var moduleOutdatedDependencies;
-/******/ for(moduleId in outdatedDependencies) {
-/******/ if(Object.prototype.hasOwnProperty.call(outdatedDependencies, moduleId)) {
-/******/ module = installedModules[moduleId];
-/******/ if(module) {
-/******/ moduleOutdatedDependencies = outdatedDependencies[moduleId];
-/******/ for(j = 0; j < moduleOutdatedDependencies.length; j++) {
-/******/ dependency = moduleOutdatedDependencies[j];
-/******/ idx = module.children.indexOf(dependency);
-/******/ if(idx >= 0) module.children.splice(idx, 1);
-/******/ }
-/******/ }
-/******/ }
-/******/ }
-/******/
-/******/ // Not in "apply" phase
-/******/ hotSetStatus("apply");
-/******/
-/******/ hotCurrentHash = hotUpdateNewHash;
-/******/
-/******/ // insert new code
-/******/ for(moduleId in appliedUpdate) {
-/******/ if(Object.prototype.hasOwnProperty.call(appliedUpdate, moduleId)) {
-/******/ modules[moduleId] = appliedUpdate[moduleId];
-/******/ }
-/******/ }
-/******/
-/******/ // call accept handlers
-/******/ var error = null;
-/******/ for(moduleId in outdatedDependencies) {
-/******/ if(Object.prototype.hasOwnProperty.call(outdatedDependencies, moduleId)) {
-/******/ module = installedModules[moduleId];
-/******/ moduleOutdatedDependencies = outdatedDependencies[moduleId];
-/******/ var callbacks = [];
-/******/ for(i = 0; i < moduleOutdatedDependencies.length; i++) {
-/******/ dependency = moduleOutdatedDependencies[i];
-/******/ cb = module.hot._acceptedDependencies[dependency];
-/******/ if(callbacks.indexOf(cb) >= 0) continue;
-/******/ callbacks.push(cb);
-/******/ }
-/******/ for(i = 0; i < callbacks.length; i++) {
-/******/ cb = callbacks[i];
-/******/ try {
-/******/ cb(moduleOutdatedDependencies);
-/******/ } catch(err) {
-/******/ if(options.onErrored) {
-/******/ options.onErrored({
-/******/ type: "accept-errored",
-/******/ moduleId: moduleId,
-/******/ dependencyId: moduleOutdatedDependencies[i],
-/******/ error: err
-/******/ });
-/******/ }
-/******/ if(!options.ignoreErrored) {
-/******/ if(!error)
-/******/ error = err;
-/******/ }
-/******/ }
-/******/ }
-/******/ }
-/******/ }
-/******/
-/******/ // Load self accepted modules
-/******/ for(i = 0; i < outdatedSelfAcceptedModules.length; i++) {
-/******/ var item = outdatedSelfAcceptedModules[i];
-/******/ moduleId = item.module;
-/******/ hotCurrentParents = [moduleId];
-/******/ try {
-/******/ __webpack_require__(moduleId);
-/******/ } catch(err) {
-/******/ if(typeof item.errorHandler === "function") {
-/******/ try {
-/******/ item.errorHandler(err);
-/******/ } catch(err2) {
-/******/ if(options.onErrored) {
-/******/ options.onErrored({
-/******/ type: "self-accept-error-handler-errored",
-/******/ moduleId: moduleId,
-/******/ error: err2,
-/******/ orginalError: err
-/******/ });
-/******/ }
-/******/ if(!options.ignoreErrored) {
-/******/ if(!error)
-/******/ error = err2;
-/******/ }
-/******/ if(!error)
-/******/ error = err;
-/******/ }
-/******/ } else {
-/******/ if(options.onErrored) {
-/******/ options.onErrored({
-/******/ type: "self-accept-errored",
-/******/ moduleId: moduleId,
-/******/ error: err
-/******/ });
-/******/ }
-/******/ if(!options.ignoreErrored) {
-/******/ if(!error)
-/******/ error = err;
-/******/ }
-/******/ }
-/******/ }
-/******/ }
-/******/
-/******/ // handle errors in accept handlers and self accepted module load
-/******/ if(error) {
-/******/ hotSetStatus("fail");
-/******/ return Promise.reject(error);
-/******/ }
-/******/
-/******/ hotSetStatus("idle");
-/******/ return new Promise(function(resolve) {
-/******/ resolve(outdatedModules);
-/******/ });
-/******/ }
-/******/
-/******/ // The module cache
-/******/ var installedModules = {};
-/******/
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-/******/
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId]) {
-/******/ return installedModules[moduleId].exports;
-/******/ }
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ i: moduleId,
-/******/ l: false,
-/******/ exports: {},
-/******/ hot: hotCreateModule(moduleId),
-/******/ parents: (hotCurrentParentsTemp = hotCurrentParents, hotCurrentParents = [], hotCurrentParentsTemp),
-/******/ children: []
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, hotCreateRequire(moduleId));
-/******/
-/******/ // Flag the module as loaded
-/******/ module.l = true;
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/******/
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-/******/
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-/******/
-/******/ // identity function for calling harmony imports with the correct context
-/******/ __webpack_require__.i = function(value) { return value; };
-/******/
-/******/ // define getter function for harmony exports
-/******/ __webpack_require__.d = function(exports, name, getter) {
-/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, {
-/******/ configurable: false,
-/******/ enumerable: true,
-/******/ get: getter
-/******/ });
-/******/ }
-/******/ };
-/******/
-/******/ // getDefaultExport function for compatibility with non-harmony modules
-/******/ __webpack_require__.n = function(module) {
-/******/ var getter = module && module.__esModule ?
-/******/ function getDefault() { return module['default']; } :
-/******/ function getModuleExports() { return module; };
-/******/ __webpack_require__.d(getter, 'a', getter);
-/******/ return getter;
-/******/ };
-/******/
-/******/ // Object.prototype.hasOwnProperty.call
-/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-/******/
-/******/ // __webpack_hash__
-/******/ __webpack_require__.h = function() { return hotCurrentHash; };
-/******/
-/******/ // Load entry module and return exports
-/******/ return hotCreateRequire(3)(__webpack_require__.s = 3);
-/******/ })
-/************************************************************************/
-/******/ ({
-
-/***/ "./app/actions/codeActions.js":
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.showCode = showCode;
-exports.genCode = genCode;
-exports.downloadCode = downloadCode;
-exports.zipAllCode = zipAllCode;
-exports.switchCodeMode = switchCodeMode;
-function showCode() {
- return {
- type: 'SHOW_CODE'
- };
-}
-
-function genCode() {
- return {
- type: 'GEN_CODE'
- };
-}
-
-function downloadCode() {
- return {
- type: 'DOWNLOAD_CODE'
- };
-}
-
-function zipAllCode() {
- return {
- type: 'ZIP_CODE'
- };
-}
-
-function switchCodeMode() {
- return {
- type: 'SWITCH_CODE'
- };
-}
-
-/***/ }),
-
-/***/ "./app/actions/pageActions.js":
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.showPage = showPage;
-exports.changeTree = changeTree;
-exports.addElement = addElement;
-exports.deleteElement = deleteElement;
-exports.selectElement = selectElement;
-exports.searchElement = searchElement;
-exports.editElement = editElement;
-exports.generateElements = generateElements;
-function showPage(pageId) {
- return {
- type: 'SHOW_PAGE',
- pageId: pageId
- };
-}
-
-function changeTree(treeData, droppedItem) {
- return {
- type: 'CHANGE_TREE',
- treeData: treeData,
- droppedItem: droppedItem
- };
-}
-
-function addElement(parentId) {
- return {
- type: 'ADD_ELEMENT',
- element: {
- "Name": "",
- "Type": "Button",
- "parent": "",
- "parentId": parentId,
- "Locator": ""
- }
- };
-}
-
-function deleteElement(elId) {
- return {
- type: 'DELETE_ELEMENT',
- elId: elId
- };
-}
-
-function selectElement(elId) {
- return {
- type: 'SELECT_ELEMENT',
- elId: elId
- };
-}
-
-function searchElement(elName) {
- return {
- type: 'SEARCH_ELEMENT',
- elName: elName
- };
-}
-
-function editElement(elField, value) {
- return {
- type: 'EDIT_ELEMENT',
- elField: elField,
- value: value
- };
-}
-
-function generateElements() {
- return {
- type: 'GENERATE_ELEMENTS'
- };
-}
-
-/***/ }),
-
-/***/ "./app/actions/rulesActions.js":
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.openRules = openRules;
-exports.selectRule = selectRule;
-exports.addRule = addRule;
-exports.showRule = showRule;
-exports.editRule = editRule;
-exports.deleteRule = deleteRule;
-exports.exportRules = exportRules;
-exports.importRules = importRules;
-exports.removeRulesGroup = removeRulesGroup;
-exports.refresh = refresh;
-function openRules() {
- return {
- type: "OPEN_RULES"
- };
-}
-
-function selectRule(rule) {
- return {
- type: "SELECT_RULE",
- rule: rule
- };
-}
-
-function addRule(ruleType) {
- return {
- type: "ADD_RULE",
- ruleType: ruleType
- };
-}
-
-function showRule(ruleId) {
- return {
- type: "SHOW_RULE",
- ruleId: ruleId
- };
-}
-
-function editRule(field, value) {
- return {
- type: "EDIT_RULE",
- field: field,
- value: value
- };
-}
-
-function deleteRule(ruleId) {
- return {
- type: "DELETE_RULE",
- ruleId: ruleId
- };
-}
-
-function exportRules() {
- return {
- type: "EXPORT_RULES"
- };
-}
-
-function importRules(file) {
- return {
- type: "IMPORT_RULES",
- file: file
- };
-}
-
-function removeRulesGroup(rule) {
- return {
- type: "REMOVE_RULES_GROUP",
- rule: rule
- };
-}
-
-function refresh() {
- return {
- type: "REFRESH"
- };
-}
-
-/***/ }),
-
-/***/ "./app/actions/siteActions.js":
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.addPage = addPage;
-exports.deletePage = deletePage;
-exports.closePage = closePage;
-exports.editValue = editValue;
-exports.selectPage = selectPage;
-exports.searchPage = searchPage;
-exports.backToSite = backToSite;
-function addPage() {
- return {
- type: 'ADD_PAGE',
- page: {
- "url": "",
- "urlTemplate": "",
- "urlMatch": "Equals",
- "title": "",
- "titleMatch": "Equals",
- "name": "Default Page",
- "pageId": 0,
- "elements": []
- }
- };
-}
-
-function deletePage(pageId) {
- return {
- type: 'DELETE_PAGE',
- pageId: pageId
- };
-}
-
-function closePage() {
- return {
- type: "CLOSE_PAGE"
- };
-}
-
-function editValue(element, value, pageId) {
- return {
- type: "EDIT_VALUE",
- element: element,
- value: value,
- pageId: pageId
- };
-}
-
-function selectPage(pageId) {
- return {
- type: "SELECT_PAGE",
- pageId: pageId
- };
-}
-
-function searchPage(page) {
- return {
- type: "SEARCH_PAGE",
- page: page
- };
-}
-
-function backToSite() {
- return {
- type: "BACK_TO_SITE"
- };
-}
-
-/***/ }),
-
-/***/ "./app/app.js":
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/* WEBPACK VAR INJECTION */(function(React) {
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.Main = undefined;
-
-var _reactRedux = __webpack_require__("./node_modules/react-redux/es/index.js");
-
-var _propTypes = __webpack_require__("./node_modules/prop-types/index.js");
-
-var _propTypes2 = _interopRequireDefault(_propTypes);
-
-var _tabs = __webpack_require__("./app/containers/tabs.container.js");
-
-var _tabs2 = _interopRequireDefault(_tabs);
-
-var _site = __webpack_require__("./app/containers/site/site.container.js");
-
-var _site2 = _interopRequireDefault(_site);
-
-var _page = __webpack_require__("./app/containers/page/page.container.js");
-
-var _page2 = _interopRequireDefault(_page);
-
-var _rule = __webpack_require__("./app/containers/rule/rule.container.js");
-
-var _rule2 = _interopRequireDefault(_rule);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-//import { store } from './store/store';
-
-//import * as pageActions from './actions/pageActions';
-//import * as siteActions from './actions/siteActions';
-
-// export class Main extends React.Component {
-// constructor() {
-// super();
-// this.state = store.getState();
-// }
-// componentDidMount(){
-// store.subscribe(() => {
-// this.state = store.getState();
-// this.forceUpdate();
-// console.log(this.state)
-// })
-// }
-
-// render() {
-// return (
-//
-// )
-// }
-// }
-
-// import { Site } from './functional parts/site';
-// import { Page } from './functional parts/page';
-// import { Rules } from './functional parts/rules';
-var Main = exports.Main = function Main(props) {
- return React.createElement(
- 'div',
- { className: 'start' },
- React.createElement(_tabs2.default, null),
- React.createElement(
- 'div',
- null,
- React.createElement(_site2.default, null),
- React.createElement(_page2.default, null),
- React.createElement(_rule2.default, null)
- )
- );
-};
-/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("./node_modules/react/react.js")))
-
-/***/ }),
-
-/***/ "./app/components/code/code.component.js":
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/* WEBPACK VAR INJECTION */(function(React) {
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.CodeComponent = undefined;
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-var _picsPath = __webpack_require__("./app/style/picsPath.js");
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
-
-var CodeComponent = exports.CodeComponent = function (_React$Component) {
- _inherits(CodeComponent, _React$Component);
-
- function CodeComponent() {
- _classCallCheck(this, CodeComponent);
-
- return _possibleConstructorReturn(this, (CodeComponent.__proto__ || Object.getPrototypeOf(CodeComponent)).apply(this, arguments));
- }
-
- _createClass(CodeComponent, [{
- key: "getHeight",
- value: function getHeight() {
- var props = this.props;
- var page = props.PageObjects.find(function (page) {
- if (page.pageId === props.activeTabPageId) {
- return page;
- }
- });
- return 20 * page.elements.length + 200;
- }
- }, {
- key: "render",
- value: function render() {
- var props = this.props;
- return React.createElement(
- "div",
- { className: "codeContainer" },
- React.createElement(
- "div",
- { className: "code" },
- React.createElement("textarea", { id: "code-snippet", style: { height: this.getHeight() }, value: props.code, readOnly: true })
- ),
- React.createElement(
- "div",
- { className: "details" },
- React.createElement(
- "button",
- { className: "btn btn-default codeBtn", onClick: function onClick() {
- props.downloadCode();
- }, style: {
- visibility: !!props.code ? 'visible' : 'hidden'
- } },
- React.createElement("img", { src: _picsPath.ARROW })
- )
- )
- );
- }
- }]);
-
- return CodeComponent;
-}(React.Component);
-/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("./node_modules/react/react.js")))
-
-/***/ }),
-
-/***/ "./app/components/page/page.component.js":
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/* WEBPACK VAR INJECTION */(function(React) {
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.Page = undefined;
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-var _panelLeftPage = __webpack_require__("./app/containers/page/panel.left.page.container.js");
-
-var _panelLeftPage2 = _interopRequireDefault(_panelLeftPage);
-
-var _panelRightPage = __webpack_require__("./app/containers/page/panel.right.page.container.js");
-
-var _panelRightPage2 = _interopRequireDefault(_panelRightPage);
-
-var _code = __webpack_require__("./app/containers/code/code.container.js");
-
-var _code2 = _interopRequireDefault(_code);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
-
-var Page = exports.Page = function (_React$Component) {
- _inherits(Page, _React$Component);
-
- function Page() {
- _classCallCheck(this, Page);
-
- return _possibleConstructorReturn(this, (Page.__proto__ || Object.getPrototypeOf(Page)).apply(this, arguments));
- }
-
- _createClass(Page, [{
- key: 'render',
- value: function render() {
- return this.props.ElementsDetails ? React.createElement(
- 'div',
- { id: 'manage-site' },
- React.createElement(_panelLeftPage2.default, null),
- React.createElement(
- 'div',
- { className: 'panel panel-default' },
- React.createElement(
- 'div',
- { className: 'panel-body' },
- !!this.props.selectedElement && !this.props.CodeDetails && React.createElement(_panelRightPage2.default, null),
- this.props.CodeDetails && React.createElement(_code2.default, null)
- )
- )
- ) : null;
- }
- }]);
-
- return Page;
-}(React.Component);
-/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("./node_modules/react/react.js")))
-
-/***/ }),
-
-/***/ "./app/components/page/panel.left.page.component.js":
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/* WEBPACK VAR INJECTION */(function(React, PropTypes) {
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.PanelLeftPage = undefined;
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-var _pageTree = __webpack_require__("./app/containers/page/page.tree.container.js");
-
-var _pageTree2 = _interopRequireDefault(_pageTree);
-
-var _picsPath = __webpack_require__("./app/style/picsPath.js");
-
-var _popup = __webpack_require__("./app/components/popup.js");
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
-
-var PanelLeftPage = exports.PanelLeftPage = function (_React$Component) {
- _inherits(PanelLeftPage, _React$Component);
-
- function PanelLeftPage() {
- _classCallCheck(this, PanelLeftPage);
-
- var _this = _possibleConstructorReturn(this, (PanelLeftPage.__proto__ || Object.getPrototypeOf(PanelLeftPage)).call(this));
-
- _this.state = {
- showPopup: false
- };
- _this.togglePopup = _this.togglePopup.bind(_this);
- _this.applyGen = _this.applyGen.bind(_this);
- return _this;
- }
-
- _createClass(PanelLeftPage, [{
- key: 'togglePopup',
- value: function togglePopup(pageName, pageId) {
- this.setState({
- showPopup: !this.state.showPopup
- });
- }
- }, {
- key: 'applyGen',
- value: function applyGen() {
- this.props.generateElements();
- this.togglePopup();
- }
- }, {
- key: 'checkElemnets',
- value: function checkElemnets() {
- var props = this.props;
- var page = props.PageObjects.find(function (page) {
- return page.pageId === props.activeTabPageId;
- });
- if (!!page.elements.length) {
- this.setState({
- showPopup: true
- });
- } else {
- props.generateElements();
- }
- }
- }, {
- key: 'render',
- value: function render() {
- var _this2 = this;
-
- var props = this.props;
- return React.createElement(
- 'div',
- { className: 'panel panel-default' },
- this.state.showPopup && React.createElement(_popup.Popup, { popupTitle: 'Generate new elments',
- popupText: 'All defined elements of this page page will be replaced. Are you sure?',
- closePopup: this.togglePopup,
- saveAndClose: this.applyGen }),
- React.createElement(
- 'div',
- { className: 'panel-body leftContainer' },
- React.createElement(
- 'div',
- { className: 'selectContainer topContainer' },
- React.createElement('input', { type: 'text',
- className: 'form-control searchInput',
- placeholder: 'Search element',
- id: 'searchInput',
- onChange: function onChange(e) {
- var value = e.target.value;
- props.searchElement(value);
- } }),
- React.createElement(
- 'button',
- { className: 'btn btn-default', onClick: function onClick() {
- _this2.checkElemnets();
- } },
- 'Generate PO'
- ),
- React.createElement(
- 'button',
- { className: 'btn btn-default', onClick: function onClick() {
- props.genCode();
- } },
- 'Generate code'
- ),
- React.createElement(
- 'button',
- { className: 'btn btn-default', onClick: function onClick() {
- props.openRules();
- } },
- React.createElement('img', { src: _picsPath.GEAR })
- )
- ),
- React.createElement(
- 'div',
- { className: 'selectContainer' },
- React.createElement(
- 'button',
- { className: 'btn btn-default addBtn',
- onClick: function onClick() {
- props.addElement(null);
- } },
- 'Add element'
- )
- ),
- React.createElement(
- 'div',
- null,
- React.createElement(_pageTree2.default, null)
- )
- )
- );
- }
- }]);
-
- return PanelLeftPage;
-}(React.Component);
-
-PanelLeftPage.propTypes = {
- searchElement: PropTypes.func.isRequired,
- generateElements: PropTypes.func.isRequired,
- genCode: PropTypes.func.isRequired,
- openRules: PropTypes.func.isRequired,
- addElement: PropTypes.func.isRequired,
- PageObjects: PropTypes.array.isRequired,
- activeTabPageId: PropTypes.number.isRequired
-};
-/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("./node_modules/react/react.js"), __webpack_require__("./node_modules/prop-types/index.js")))
-
-/***/ }),
-
-/***/ "./app/components/page/panel.right.page.component.js":
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/* WEBPACK VAR INJECTION */(function(React, PropTypes) {
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
-
-var Input = function Input(props) {
- return React.createElement(
- "label",
- null,
- React.createElement(
- "span",
- null,
- props.field,
- ": "
- ),
- React.createElement("input", {
- type: "text",
- className: "form-control pageSettingX2",
- value: props.inputValue,
- onChange: function onChange(e) {
- var value = e.target.value;
- props.edit(props.field, value);
- } })
- );
-};
-
-var Checkbox = function Checkbox(props) {
- return React.createElement(
- "label",
- { htmlFor: props.field },
- React.createElement("input", { type: "checkbox",
- id: props.field,
- value: props.inputValue ? 'on' : 'off',
- onChange: function onChange(e) {
- var v = e.target.checked;
- props.edit(props.field, v);
- } }),
- " ",
- props.field
- );
-};
-
-var InputSelect = function InputSelect(props) {
- return React.createElement(
- "label",
- null,
- props.field ? React.createElement(
- "span",
- null,
- " ",
- props.field,
- " "
- ) : "",
- React.createElement(
- "select",
- { className: "form-control pageSettingX2",
- value: props.inputValue,
- onChange: function onChange(e) {
- var value = e.target.value;
- props.edit(props.field, value);
- } },
- props.valuesArray.map(function (element, i) {
- return React.createElement(
- "option",
- { key: i, value: element },
- " ",
- element,
- " "
- );
- })
- )
- );
-};
-
-var PanelRightPage = exports.PanelRightPage = function (_React$Component) {
- _inherits(PanelRightPage, _React$Component);
-
- function PanelRightPage(props) {
- _classCallCheck(this, PanelRightPage);
-
- var _this = _possibleConstructorReturn(this, (PanelRightPage.__proto__ || Object.getPrototypeOf(PanelRightPage)).call(this));
-
- _this.edit = _this.edit.bind(_this);
- return _this;
- }
-
- _createClass(PanelRightPage, [{
- key: "edit",
- value: function edit(field, value) {
- this.props.editElement(field, value);
- }
- }, {
- key: "chooseArr",
- value: function chooseArr(arr, field) {
- for (var i = 0; i < arr.length; i++) {
- if (field === 'Type') {
- return Object.keys(this.props.ElementFields);
- }
- var test = arr[i][field + 'Values'] || arr[i][field + 'VALUES'] || arr[i][field + 'values'];
- if (!!test && Array.isArray(test)) {
- return test;
- }
- }
- return [];
- }
- }, {
- key: "getVisibleFields",
- value: function getVisibleFields() {
- var allFields = this.props.ElementFields[this.props.selectedElement.Type];
- var visibleFields = [];
- for (var f in allFields) {
- if (allFields[f] !== 'internal') {
- var obj = {};
- obj[f] = allFields[f];
- visibleFields.push(obj);
- }
- }
- return visibleFields;
- }
- }, {
- key: "render",
- value: function render() {
- var _this2 = this;
-
- var props = this.props;
- var visible = this.getVisibleFields();
- return React.createElement(
- "div",
- null,
- visible.map(function (obj, i) {
- var field = Object.keys(obj)[0];
- var comboValues = _this2.chooseArr(visible, field);
- if (obj[field] === "TextField") {
- return React.createElement(
- "div",
- { className: "selectContainerX2", key: field + i },
- React.createElement(Input, {
- className: "focusField",
- field: field,
- inputValue: props.selectedElement[field],
- edit: _this2.edit })
- );
- }
- if (obj[field] === "Checkbox") {
- return React.createElement(
- "div",
- { className: "selectContainerX2", key: field + i },
- React.createElement(Checkbox, {
- field: field,
- inputValue: props.selectedElement[field],
- edit: _this2.edit })
- );
- }
- if (obj[field] === "ComboBox") {
- return React.createElement(
- "div",
- { className: "selectContainerX2", key: field + i },
- React.createElement(InputSelect, {
- field: field,
- inputValue: props.selectedElement[field],
- edit: _this2.edit,
- valuesArray: comboValues })
- );
- }
- }),
- props.CompositeRules[props.selectedElement.Type] && React.createElement(
- "button",
- { className: "btn btn-default",
- onClick: function onClick() {
- props.showCode();
- } },
- "View code"
- )
- );
- }
- }]);
-
- return PanelRightPage;
-}(React.Component);
-
-PanelRightPage.propTypes = {
- selectedElement: PropTypes.object.isRequired,
- ElementFields: PropTypes.object.isRequired,
- CompositeRules: PropTypes.object.isRequired,
- editElement: PropTypes.func.isRequired
- //showCode: PropTypes.func.isRequired
-};
-/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("./node_modules/react/react.js"), __webpack_require__("./node_modules/prop-types/index.js")))
-
-/***/ }),
-
-/***/ "./app/components/page/tree.component.js":
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/* WEBPACK VAR INJECTION */(function(React) {
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.Tree = undefined;
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-var _picsPath = __webpack_require__("./app/style/picsPath.js");
-
-var _reactSortableTree = __webpack_require__("./node_modules/react-sortable-tree/dist/main.js");
-
-var _reactSortableTree2 = _interopRequireDefault(_reactSortableTree);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
-
-//smallInvisibleInput
-// let focus = () => {
-// let e = $('#smallInvisibleInput');
-// }
-var Tree = exports.Tree = function (_React$Component) {
- _inherits(Tree, _React$Component);
-
- function Tree() {
- var _ref;
-
- var _temp, _this, _ret;
-
- _classCallCheck(this, Tree);
-
- for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
- args[_key] = arguments[_key];
- }
-
- return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Tree.__proto__ || Object.getPrototypeOf(Tree)).call.apply(_ref, [this].concat(args))), _this), _this.droppedItem = null, _temp), _possibleConstructorReturn(_this, _ret);
- }
-
- _createClass(Tree, [{
- key: 'canDrop',
- value: function canDrop(_ref2) {
- var node = _ref2.node,
- nextParent = _ref2.nextParent,
- prevPath = _ref2.prevPath,
- nextPath = _ref2.nextPath;
-
- if (nextParent === null || nextParent.isSection) {
- this.droppedItem = node;
- return true;
- }
- return false;
- }
- }, {
- key: 'getHeight',
- value: function getHeight() {
- return 50 * this.props.resultTree.length + 200;
- }
- }, {
- key: 'render',
- value: function render() {
- var _this2 = this;
-
- var props = this.props;
- return React.createElement(
- 'div',
- { className: 'tree', style: { height: this.getHeight() } },
- React.createElement(_reactSortableTree2.default, {
- canDrop: this.canDrop,
- treeData: props.resultTree,
- onChange: function onChange(data) {
- props.changeTree(data, _this2.droppedItem);
- },
- generateNodeProps: function generateNodeProps(_ref3) {
- var node = _ref3.node;
- return {
- buttons: node.isSection ? [React.createElement(
- 'button',
- { className: 'btn btn-default',
- onClick: function onClick() {
- props.selectElement(node.elId);
- }
- },
- React.createElement('img', { src: _picsPath.GEAR })
- ), React.createElement(
- 'button',
- { className: 'btn btn-default',
- onClick: function onClick() {
- props.addElement(node.elId);
- }
- },
- React.createElement('img', { src: _picsPath.ADD })
- ), React.createElement(
- 'button',
- { className: 'btn btn-default',
- onClick: function onClick() {
- props.deleteElement(node.elId);
- }
- },
- React.createElement('img', { src: _picsPath.TRASH })
- )] : [React.createElement(
- 'button',
- { className: 'btn btn-default',
- onClick: function onClick() {
- props.selectElement(node.elId);
- }
- },
- React.createElement('img', { src: _picsPath.GEAR })
- ), React.createElement(
- 'button',
- { className: 'btn btn-default',
- onClick: function onClick() {
- props.deleteElement(node.elId);
- }
- },
- React.createElement('img', { src: _picsPath.TRASH })
- )]
- };
- }
- })
- );
- }
- }]);
-
- return Tree;
-}(React.Component);
-/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("./node_modules/react/react.js")))
-
-/***/ }),
-
-/***/ "./app/components/popup.js":
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/* WEBPACK VAR INJECTION */(function(React, PropTypes) {
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
-
-var Popup = exports.Popup = function (_React$Component) {
- _inherits(Popup, _React$Component);
-
- function Popup() {
- _classCallCheck(this, Popup);
-
- return _possibleConstructorReturn(this, (Popup.__proto__ || Object.getPrototypeOf(Popup)).apply(this, arguments));
- }
-
- _createClass(Popup, [{
- key: 'render',
- value: function render() {
- return React.createElement(
- 'div',
- { className: 'popup' },
- React.createElement(
- 'div',
- { className: 'popup-inner' },
- React.createElement(
- 'h3',
- null,
- this.props.popupTitle
- ),
- React.createElement(
- 'h5',
- null,
- this.props.popupText
- ),
- React.createElement(
- 'div',
- { className: 'popup-btn-container' },
- React.createElement(
- 'button',
- { onClick: this.props.saveAndClose, className: 'btn btn-primary' },
- 'Apply'
- ),
- React.createElement(
- 'button',
- { onClick: this.props.closePopup, className: 'btn btn-default' },
- 'Cancel'
- )
- )
- )
- );
- }
- }]);
-
- return Popup;
-}(React.Component);
-
-Popup.propTypes = {
- popupTitle: PropTypes.string.isRequired,
- popupText: PropTypes.string.isRequired,
- saveAndClose: PropTypes.func.isRequired,
- closePopup: PropTypes.func.isRequired
-};
-/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("./node_modules/react/react.js"), __webpack_require__("./node_modules/prop-types/index.js")))
-
-/***/ }),
-
-/***/ "./app/components/rule/panel.left.rule.component.js":
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/* WEBPACK VAR INJECTION */(function(React) {
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.PanelLeftRules = undefined;
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-var _reactFileReader = __webpack_require__("./node_modules/react-file-reader/index.js");
-
-var _reactFileReader2 = _interopRequireDefault(_reactFileReader);
-
-var _picsPath = __webpack_require__("./app/style/picsPath.js");
-
-var _settings = __webpack_require__("./app/data/settings.js");
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
-
-var PanelLeftRules = exports.PanelLeftRules = function (_React$Component) {
- _inherits(PanelLeftRules, _React$Component);
-
- function PanelLeftRules() {
- _classCallCheck(this, PanelLeftRules);
-
- return _possibleConstructorReturn(this, (PanelLeftRules.__proto__ || Object.getPrototypeOf(PanelLeftRules)).apply(this, arguments));
- }
-
- _createClass(PanelLeftRules, [{
- key: 'getRulesList',
- value: function getRulesList() {
- return [].concat(_toConsumableArray(Object.keys(this.props.SimpleRules)), _toConsumableArray(Object.keys(this.props.ComplexRules)), _toConsumableArray(Object.keys(this.props.CompositeRules)));
- }
- }, {
- key: 'render',
- value: function render() {
- var props = this.props;
- var rulesList = this.getRulesList();
- return React.createElement(
- 'div',
- { className: 'panel panel-default' },
- React.createElement(
- 'div',
- { className: 'panel-body leftContainer' },
- React.createElement(
- 'div',
- { style: { display: 'flex' } },
- React.createElement(
- 'button',
- { className: 'btn btn-default', onClick: function onClick() {
- props.exportRules();
- } },
- React.createElement('img', { src: _picsPath.ARROW }),
- 'Export rules'
- ),
- React.createElement(
- _reactFileReader2.default,
- { handleFiles: function handleFiles(files) {
- props.importRules(files);
- }, fileTypes: [".json"], multipleFiles: true },
- React.createElement(
- 'button',
- { className: 'btn btn-default' },
- React.createElement('img', { src: _picsPath.ARROWUP }),
- ' Import rules'
- )
- ),
- React.createElement('button', { id: 'refresh', onClick: function onClick() {
- props.refresh();
- } })
- ),
- React.createElement(
- 'div',
- null,
- React.createElement(
- 'ul',
- null,
- rulesList.map(function (element, index) {
- return React.createElement(
- 'li',
- { key: "element-" + index },
- React.createElement(
- 'a',
- { onClick: function onClick() {
- props.selectRule(element);
- },
- className: props.selectedRule === element ? "selectPage" : "" },
- element
- ),
- React.createElement(
- 'button',
- { className: 'img-on-btn btn btn-default',
- onClick: function onClick() {
- props.removeRulesGroup(element);
- } },
- React.createElement('img', { src: _picsPath.TRASH })
- )
- );
- })
- )
- )
- )
- );
- }
- }]);
-
- return PanelLeftRules;
-}(React.Component);
-/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("./node_modules/react/react.js")))
-
-/***/ }),
-
-/***/ "./app/components/rule/panel.right.rule.component.js":
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/* WEBPACK VAR INJECTION */(function(React) {
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.PanelRightRules = undefined;
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-var _picsPath = __webpack_require__("./app/style/picsPath.js");
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
-
-var PanelRightRules = exports.PanelRightRules = function (_React$Component) {
- _inherits(PanelRightRules, _React$Component);
-
- function PanelRightRules() {
- _classCallCheck(this, PanelRightRules);
-
- return _possibleConstructorReturn(this, (PanelRightRules.__proto__ || Object.getPrototypeOf(PanelRightRules)).apply(this, arguments));
- }
-
- _createClass(PanelRightRules, [{
- key: "getChosenRules",
- value: function getChosenRules() {
- var props = this.props;
- return props.CompositeRules[props.selectedRule] || props.ComplexRules[props.selectedRule] || props.SimpleRules[props.selectedRule] || [];
- }
- }, {
- key: "getElementRule",
- value: function getElementRule() {
- var props = this.props;
- return this.getChosenRules().find(function (rule) {
- return rule.id === props.ruleId;
- }) || {};
- }
- }, {
- key: "getVisibleRules",
- value: function getVisibleRules() {
- var props = this.props;
- var selectedRule = props.selectedRule;
- var elementFields = !!selectedRule ? props.ElementFields[selectedRule] : {};
- var allFields = Object.keys(this.getElementRule());
- return allFields.filter(function (field) {
- return elementFields[field] === "TextField" || field === "uniqness";
- }) || [];
- }
- }, {
- key: "render",
- value: function render() {
- var props = this.props;
- var selectedRule = props.selectedRule;
- var ruleId = props.ruleId;
- var rulesArray = this.getChosenRules();
- var visibleRules = this.getVisibleRules();
- var elementRule = this.getElementRule();
- return React.createElement(
- "div",
- { className: "panel panel-default" },
- React.createElement(
- "div",
- { className: "panel-body" },
- React.createElement(
- "div",
- { className: "topContainer" },
- React.createElement(
- "ul",
- { className: "nav nav-tabs" },
- rulesArray.map(function (rule, index) {
- var ruleName = "Rule " + ++index;
- return React.createElement(
- "li",
- { key: ruleName },
- React.createElement(
- "a",
- { href: "#", className: rule.id === ruleId ? "active" : "",
- onClick: function onClick() {
- props.showRule(rule.id);
- } },
- ruleName
- ),
- React.createElement(
- "button",
- { className: "btnWithoutPM", onClick: function onClick() {
- props.deleteRule(rule.id);
- } },
- React.createElement("img", { src: _picsPath.TRASH })
- )
- );
- }),
- !!rulesArray.length && React.createElement(
- "li",
- null,
- React.createElement(
- "a",
- { onClick: function onClick() {
- props.addRule(selectedRule);
- } },
- React.createElement("img", { src: _picsPath.ADD }),
- " Add rule"
- )
- )
- )
- ),
- React.createElement(
- "div",
- null,
- visibleRules.map(function (rule, index) {
- return React.createElement(
- "div",
- { key: "rule-" + index, className: "selectContainer" },
- React.createElement(
- "label",
- null,
- React.createElement(
- "span",
- null,
- rule,
- ": "
- ),
- React.createElement("input", {
- type: "text",
- className: "form-control pageSetting",
- onChange: function onChange(e) {
- var value = e.target.value;props.editRule(rule, value);
- },
- value: elementRule[rule] })
- )
- );
- })
- )
- )
- );
- }
- }]);
-
- return PanelRightRules;
-}(React.Component);
-/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("./node_modules/react/react.js")))
-
-/***/ }),
-
-/***/ "./app/components/rule/rule.component.js":
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/* WEBPACK VAR INJECTION */(function(React) {
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.Rules = undefined;
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-var _panelLeftRule = __webpack_require__("./app/containers/rule/panel.left.rule.container.js");
-
-var _panelLeftRule2 = _interopRequireDefault(_panelLeftRule);
-
-var _panelRightRule = __webpack_require__("./app/containers/rule/panel.right.rule.container.js");
-
-var _panelRightRule2 = _interopRequireDefault(_panelRightRule);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /*import {PanelLeftRules, PanelRightRules} from './manageRules';
-
- export function Rules(props) {
- let state = props.state;
- let store = props.store;
- return (
- (state.rulesSettings) ?
- : null
- )
- }*/
-
-var Rules = exports.Rules = function (_React$Component) {
- _inherits(Rules, _React$Component);
-
- function Rules() {
- _classCallCheck(this, Rules);
-
- return _possibleConstructorReturn(this, (Rules.__proto__ || Object.getPrototypeOf(Rules)).apply(this, arguments));
- }
-
- _createClass(Rules, [{
- key: 'render',
- value: function render() {
- return this.props.RulesDetails ? React.createElement(
- 'div',
- { id: 'manage-site' },
- React.createElement(_panelLeftRule2.default, null),
- React.createElement(_panelRightRule2.default, null)
- ) : null;
- }
- }]);
-
- return Rules;
-}(React.Component);
-/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("./node_modules/react/react.js")))
-
-/***/ }),
-
-/***/ "./app/components/site/panel.left.site.component.js":
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/* WEBPACK VAR INJECTION */(function(React, PropTypes) {
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.PanelLeftSite = undefined;
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-var _picsPath = __webpack_require__("./app/style/picsPath.js");
-
-var _popup = __webpack_require__("./app/components/popup.js");
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
-
-var clearValue = function clearValue() {
- $("#searchInput")[0].value = "";
-};
-
-var PanelLeftSite = exports.PanelLeftSite = function (_React$Component) {
- _inherits(PanelLeftSite, _React$Component);
-
- function PanelLeftSite() {
- _classCallCheck(this, PanelLeftSite);
-
- var _this = _possibleConstructorReturn(this, (PanelLeftSite.__proto__ || Object.getPrototypeOf(PanelLeftSite)).call(this));
-
- _this.state = {
- showPopup: false,
- pageToDel: '',
- id: -1
- };
- _this.togglePopup = _this.togglePopup.bind(_this);
- _this.applyDel = _this.applyDel.bind(_this);
- return _this;
- }
-
- _createClass(PanelLeftSite, [{
- key: 'togglePopup',
- value: function togglePopup(pageName, pageId) {
- this.setState({
- showPopup: !this.state.showPopup,
- pageToDel: pageName || '',
- id: pageId
- });
- }
- }, {
- key: 'applyDel',
- value: function applyDel() {
- this.props.deletePage(this.state.id);
- this.togglePopup();
- }
- }, {
- key: 'render',
- value: function render() {
- var _this2 = this;
-
- var props = this.props;
- return React.createElement(
- 'div',
- { className: 'panel panel-default' },
- this.state.showPopup && React.createElement(_popup.Popup, { popupTitle: 'Delete page',
- popupText: 'Would you like to delete ' + this.state.pageToDel + ' ?',
- closePopup: this.togglePopup,
- saveAndClose: this.applyDel }),
- React.createElement(
- 'div',
- { className: 'panel-body leftContainer' },
- React.createElement(
- 'div',
- { className: 'selectContainer' },
- React.createElement('input', { type: 'text',
- className: 'form-control searchInput',
- placeholder: 'Search page',
- id: 'searchInput',
- onChange: function onChange(e) {
- var value = e.target.value;
- props.searchPage(value);
- } })
- ),
- React.createElement(
- 'div',
- null,
- React.createElement(
- 'ul',
- null,
- props.searchedPages.map(function (page, index) {
- return React.createElement(
- 'li',
- { key: "page" + index,
- 'data-pageid': page.pageId },
- React.createElement(
- 'a',
- { onClick: function onClick() {
- props.selectPage(page.pageId);
- },
- className: props.activeTabPageId === page.pageId ? "selectPage" : "" },
- page.name,
- ' '
- ),
- React.createElement(
- 'button',
- { className: 'img-on-btn btn btn-default',
- 'data-pageid': page.pageId,
- onClick: function onClick() {
- clearValue();
- _this2.togglePopup(page.name, page.pageId);
- } },
- React.createElement('img', { src: _picsPath.TRASH })
- )
- );
- })
- )
- ),
- React.createElement(
- 'button',
- { className: 'btn btn-default addBtn',
- onClick: function onClick() {
- props.addPage();
- } },
- 'Add page'
- )
- )
- );
- }
- }]);
-
- return PanelLeftSite;
-}(React.Component);
-
-PanelLeftSite.propTypes = {
- searchedPages: PropTypes.array.isRequired,
- activeTabPageId: PropTypes.number.isRequired,
- searchPage: PropTypes.func.isRequired,
- selectPage: PropTypes.func.isRequired,
- addPage: PropTypes.func.isRequired,
- deletePage: PropTypes.func.isRequired
-};
-/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("./node_modules/react/react.js"), __webpack_require__("./node_modules/prop-types/index.js")))
-
-/***/ }),
-
-/***/ "./app/components/site/panel.right.site.component.js":
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/* WEBPACK VAR INJECTION */(function(React, PropTypes) {
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
-
-var PanelRightSite = exports.PanelRightSite = function (_React$Component) {
- _inherits(PanelRightSite, _React$Component);
-
- function PanelRightSite() {
- _classCallCheck(this, PanelRightSite);
-
- return _possibleConstructorReturn(this, (PanelRightSite.__proto__ || Object.getPrototypeOf(PanelRightSite)).apply(this, arguments));
- }
-
- _createClass(PanelRightSite, [{
- key: "render",
- value: function render() {
- var props = this.props;
- return React.createElement(
- "div",
- { className: "panel panel-default" },
- React.createElement(
- "div",
- { className: "panel-body" },
- props.activeTabPageId === -1 && React.createElement(
- "div",
- null,
- React.createElement(
- "div",
- { className: "selectContainer" },
- React.createElement(
- "span",
- null,
- "Name: "
- ),
- React.createElement("input", { type: "text",
- className: "form-control pageSetting",
- defaultValue: props.SiteInfo.siteTitle,
- placeholder: "Application name",
- onBlur: function onBlur(e) {
- var value = e.target.value;props.editValue(["SiteInfo", "siteTitle"], value);
- } })
- ),
- React.createElement(
- "div",
- { className: "selectContainer" },
- React.createElement(
- "span",
- null,
- "Domain: "
- ),
- React.createElement("input", { type: "text",
- className: "form-control pageSetting",
- defaultValue: props.SiteInfo.domainName,
- placeholder: "Domain name",
- onBlur: function onBlur(e) {
- var value = e.target.value;props.editValue(["SiteInfo", "domainName"], value);
- } })
- )
- ),
- props.activeTabPageId > -1 && React.createElement(
- "div",
- { className: "siteRightPanel" },
- React.createElement(
- "div",
- null,
- React.createElement(
- "div",
- { className: "selectContainer" },
- React.createElement(
- "span",
- null,
- "Name: "
- ),
- React.createElement("input", { type: "text",
- className: "form-control pageSetting",
- value: props.selectedPage.name,
- placeholder: "Page name",
- onChange: function onChange(e) {
- var value = e.target.value;props.editValue(["name"], value);
- } })
- ),
- React.createElement(
- "div",
- { className: "selectContainer" },
- React.createElement(
- "span",
- null,
- "Title: "
- ),
- React.createElement("input", { type: "text",
- className: "form-control pageSetting",
- value: props.selectedPage.title,
- placeholder: "Title",
- onChange: function onChange(e) {
- var value = e.target.value;props.editValue(["title"], value);
- } }),
- React.createElement(
- "select",
- { className: "form-control pageSettingCombo",
- value: props.selectedPage.titleMatch,
- onChange: function onChange(e) {
- var value = e.target.value;props.editValue(["titleMatch"], value);
- } },
- React.createElement(
- "option",
- { value: "Equals" },
- "Equals"
- ),
- React.createElement(
- "option",
- { value: "Contains" },
- "Contains"
- ),
- React.createElement(
- "option",
- { value: "Not contains" },
- "Not contains"
- )
- )
- ),
- React.createElement(
- "div",
- { className: "selectContainer" },
- React.createElement(
- "span",
- null,
- "Url: "
- ),
- React.createElement("input", { type: "text",
- className: "form-control pageSetting",
- value: props.selectedPage.url,
- placeholder: "Page url",
- onChange: function onChange(e) {
- var value = e.target.value;props.editValue(["url"], value);
- } }),
- React.createElement(
- "select",
- { className: "form-control pageSettingCombo",
- value: props.selectedPage.urlMatch,
- onChange: function onChange(e) {
- var value = e.target.value;props.editValue(["urlMatch"], value);
- } },
- React.createElement(
- "option",
- { value: "Equals" },
- "Equals"
- ),
- React.createElement(
- "option",
- { value: "Contains" },
- "Contains"
- ),
- React.createElement(
- "option",
- { value: "Not contains" },
- "Not contains"
- )
- )
- ),
- React.createElement(
- "div",
- { className: "selectContainer" },
- React.createElement(
- "span",
- null,
- "Url template: "
- ),
- React.createElement("input", { type: "text",
- className: "form-control pageSetting",
- value: props.selectedPage.urlTemplate,
- placeholder: "Url template",
- onChange: function onChange(e) {
- var value = e.target.value;props.editValue(["urlTemplate"], value);
- } })
- )
- ),
- React.createElement(
- "button",
- { className: "btn btn-default", style: { alignSelf: 'flex-start' },
- onClick: function onClick() {
- props.closePage();
- } },
- "X"
- )
- )
- )
- );
- }
- }]);
-
- return PanelRightSite;
-}(React.Component);
-
-PanelRightSite.propTypes = {
- SiteInfo: PropTypes.object.isRequired,
- selectedPage: PropTypes.object.isRequired,
- activeTabPageId: PropTypes.number.isRequired,
- editValue: PropTypes.func.isRequired,
- closePage: PropTypes.func.isRequired
-};
-/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("./node_modules/react/react.js"), __webpack_require__("./node_modules/prop-types/index.js")))
-
-/***/ }),
-
-/***/ "./app/components/site/site.component.js":
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/* WEBPACK VAR INJECTION */(function(React) {
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.Site = undefined;
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-var _panelLeftSite = __webpack_require__("./app/containers/site/panel.left.site.container.js");
-
-var _panelLeftSite2 = _interopRequireDefault(_panelLeftSite);
-
-var _panelRightSite = __webpack_require__("./app/containers/site/panel.right.site.container.js");
-
-var _panelRightSite2 = _interopRequireDefault(_panelRightSite);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
-
-var Site = exports.Site = function (_React$Component) {
- _inherits(Site, _React$Component);
-
- function Site() {
- _classCallCheck(this, Site);
-
- return _possibleConstructorReturn(this, (Site.__proto__ || Object.getPrototypeOf(Site)).apply(this, arguments));
- }
-
- _createClass(Site, [{
- key: 'render',
- value: function render() {
- return this.props.SiteDetails ? React.createElement(
- 'div',
- { id: 'manage-site' },
- React.createElement(_panelLeftSite2.default, null),
- React.createElement(_panelRightSite2.default, null)
- ) : null;
- }
- }]);
-
- return Site;
-}(React.Component);
-/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("./node_modules/react/react.js")))
-
-/***/ }),
-
-/***/ "./app/components/tabs.component.js":
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/* WEBPACK VAR INJECTION */(function(React, PropTypes) {
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.Tabs = undefined;
-
-var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
-var _picsPath = __webpack_require__("./app/style/picsPath.js");
-
-var _events = __webpack_require__("./node_modules/events/events.js");
-
-var _popup = __webpack_require__("./app/components/popup.js");
-
-function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
-function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
-function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
-
-var Tabs = exports.Tabs = function (_React$Component) {
- _inherits(Tabs, _React$Component);
-
- function Tabs() {
- _classCallCheck(this, Tabs);
-
- var _this = _possibleConstructorReturn(this, (Tabs.__proto__ || Object.getPrototypeOf(Tabs)).call(this));
-
- _this.state = {
- showPopup: false
- };
- _this.togglePopup = _this.togglePopup.bind(_this);
- _this.applyNewMode = _this.applyNewMode.bind(_this);
- return _this;
- }
-
- _createClass(Tabs, [{
- key: 'togglePopup',
- value: function togglePopup(pageName, pageId) {
- this.setState({
- showPopup: !this.state.showPopup
- });
- }
- }, {
- key: 'applyNewMode',
- value: function applyNewMode() {
- this.props.switchCodeMode();
- this.togglePopup();
- }
- }, {
- key: 'checkMode',
- value: function checkMode() {
- this.setState({
- showPopup: true
- });
- }
- }, {
- key: 'render',
- value: function render() {
- var _this2 = this;
-
- var props = this.props;
- var mode = props.JDI ? ' Selenium Web elements ' : ' JDI elements ';
- return React.createElement(
- 'div',
- { className: 'topContainer' },
- this.state.showPopup && React.createElement(_popup.Popup, { popupTitle: 'Select ' + mode + ' mode',
- popupText: 'Switching mode may remove defined elements and pages. Are you sure?',
- closePopup: this.togglePopup,
- saveAndClose: this.applyNewMode }),
- React.createElement(
- 'ul',
- { className: 'nav nav-tabs ' },
- props.PageObjects.map(function (tabPage) {
- var tabPageName = tabPage.name || "Page " + (tabPage.pageId + 1);
- return React.createElement(
- 'li',
- { key: tabPage.pageId, onClick: function onClick() {
- props.showPage(tabPage.pageId);
- } },
- React.createElement(
- 'a',
- { href: '#', 'data-tabid': tabPage.pageId,
- className: tabPage.pageId === props.activeTabPageId && !props.settingsForSite ? "shortText active" : "shortText" },
- tabPageName
- )
- );
- }),
- React.createElement(
- 'li',
- { onClick: function onClick() {
- props.addPage();
- } },
- React.createElement(
- 'a',
- { href: '#', id: 'add-tab-page' },
- React.createElement('img', { src: _picsPath.ADD }),
- ' Add page'
- )
- )
- ),
- React.createElement(
- 'div',
- null,
- React.createElement(
- 'button',
- { className: 'btn btn-default JDI', onClick: function onClick() {
- _this2.checkMode();
- } },
- React.createElement('img', { src: props.JDI ? _picsPath.SELENIUM : _picsPath.JDI })
- ),
- React.createElement(
- 'button',
- { className: 'btn btn-default', onClick: function onClick() {
- props.zipAllCode();
- }, disabled: !props.JDI },
- React.createElement('img', { src: _picsPath.ARROW })
- ),
- React.createElement(
- 'button',
- { className: 'btn btn-default', onClick: function onClick() {
- props.backToSite();
- } },
- 'Back to Site'
- )
- )
- );
- }
- }]);
-
- return Tabs;
-}(React.Component);
-
-Tabs.propTypes = {
- PageObjects: PropTypes.array.isRequired,
- activeTabPageId: PropTypes.number.isRequired,
- showPage: PropTypes.func.isRequired,
- addPage: PropTypes.func.isRequired,
- settingsForSite: PropTypes.bool.isRequired,
- zipAllCode: PropTypes.func.isRequired,
- backToSite: PropTypes.func.isRequired
-};
-/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("./node_modules/react/react.js"), __webpack_require__("./node_modules/prop-types/index.js")))
-
-/***/ }),
-
-/***/ "./app/containers/code/code.container.js":
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-
-var _reactRedux = __webpack_require__("./node_modules/react-redux/es/index.js");
-
-var _code = __webpack_require__("./app/components/code/code.component.js");
-
-var _codeActions = __webpack_require__("./app/actions/codeActions.js");
-
-var mapStateToProps = function mapStateToProps(state) {
- return {
- PageObjects: state.PageObjects,
- activeTabPageId: state.activeTabPageId,
- code: state.code
- };
-};
-
-exports.default = (0, _reactRedux.connect)(mapStateToProps, {
- downloadCode: _codeActions.downloadCode
-})(_code.CodeComponent);
-
-/***/ }),
-
-/***/ "./app/containers/page/page.container.js":
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-
-var _reactRedux = __webpack_require__("./node_modules/react-redux/es/index.js");
-
-var _page = __webpack_require__("./app/components/page/page.component.js");
-
-var mapStateToProps = function mapStateToProps(state) {
- return {
- ElementsDetails: state.ElementsDetails,
- selectedElement: state.selectedElement,
- CodeDetails: state.CodeDetails
- };
-};
-
-exports.default = (0, _reactRedux.connect)(mapStateToProps)(_page.Page);
-
-/***/ }),
-
-/***/ "./app/containers/page/page.tree.container.js":
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-
-var _reactRedux = __webpack_require__("./node_modules/react-redux/es/index.js");
-
-var _tree = __webpack_require__("./app/components/page/tree.component.js");
-
-var _pageActions = __webpack_require__("./app/actions/pageActions.js");
-
-var mapStateToProps = function mapStateToProps(state) {
- return {
- resultTree: state.resultTree
- };
-};
-
-exports.default = (0, _reactRedux.connect)(mapStateToProps, {
- changeTree: _pageActions.changeTree,
- addElement: _pageActions.addElement,
- deleteElement: _pageActions.deleteElement,
- selectElement: _pageActions.selectElement
-})(_tree.Tree);
-
-/***/ }),
-
-/***/ "./app/containers/page/panel.left.page.container.js":
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-
-var _reactRedux = __webpack_require__("./node_modules/react-redux/es/index.js");
-
-var _panelLeftPage = __webpack_require__("./app/components/page/panel.left.page.component.js");
-
-var _pageActions = __webpack_require__("./app/actions/pageActions.js");
-
-var _codeActions = __webpack_require__("./app/actions/codeActions.js");
-
-var _rulesActions = __webpack_require__("./app/actions/rulesActions.js");
-
-var mapStateToProps = function mapStateToProps(state) {
- return {
- PageObjects: state.PageObjects,
- activeTabPageId: state.activeTabPageId
- };
-};
-
-exports.default = (0, _reactRedux.connect)(mapStateToProps, {
- searchElement: _pageActions.searchElement,
- generateElements: _pageActions.generateElements,
- addElement: _pageActions.addElement,
- openRules: _rulesActions.openRules,
- genCode: _codeActions.genCode
-})(_panelLeftPage.PanelLeftPage);
-
-/***/ }),
-
-/***/ "./app/containers/page/panel.right.page.container.js":
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-
-var _reactRedux = __webpack_require__("./node_modules/react-redux/es/index.js");
-
-var _panelRightPage = __webpack_require__("./app/components/page/panel.right.page.component.js");
-
-var _pageActions = __webpack_require__("./app/actions/pageActions.js");
-
-var _codeActions = __webpack_require__("./app/actions/codeActions.js");
-
-var mapStateToProps = function mapStateToProps(state) {
- return {
- selectedElement: state.selectedElement,
- ElementFields: state.ElementFields,
- CompositeRules: state.CompositeRules
- };
-};
-
-exports.default = (0, _reactRedux.connect)(mapStateToProps, { editElement: _pageActions.editElement, showCode: _codeActions.showCode })(_panelRightPage.PanelRightPage);
-
-/***/ }),
-
-/***/ "./app/containers/rule/panel.left.rule.container.js":
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-
-var _reactRedux = __webpack_require__("./node_modules/react-redux/es/index.js");
-
-var _panelLeftRule = __webpack_require__("./app/components/rule/panel.left.rule.component.js");
-
-var _rulesActions = __webpack_require__("./app/actions/rulesActions.js");
-
-var _codeActions = __webpack_require__("./app/actions/codeActions.js");
-
-var mapStateToProps = function mapStateToProps(state) {
- return {
- selectedRule: state.selectedRule,
- CompositeRules: state.CompositeRules,
- ComplexRules: state.ComplexRules,
- SimpleRules: state.SimpleRules
- };
-};
-
-exports.default = (0, _reactRedux.connect)(mapStateToProps, {
- selectRule: _rulesActions.selectRule, importRules: _rulesActions.importRules, exportRules: _rulesActions.exportRules, removeRulesGroup: _rulesActions.removeRulesGroup, refresh: _rulesActions.refresh
-})(_panelLeftRule.PanelLeftRules);
-
-/***/ }),
-
-/***/ "./app/containers/rule/panel.right.rule.container.js":
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-
-var _reactRedux = __webpack_require__("./node_modules/react-redux/es/index.js");
-
-var _panelRightRule = __webpack_require__("./app/components/rule/panel.right.rule.component.js");
-
-var _rulesActions = __webpack_require__("./app/actions/rulesActions.js");
-
-var mapStateToProps = function mapStateToProps(state) {
- return {
- selectedRule: state.selectedRule,
- CompositeRules: state.CompositeRules,
- ComplexRules: state.ComplexRules,
- SimpleRules: state.SimpleRules,
- ruleId: state.ruleId,
- ElementFields: state.ElementFields
- };
-};
-
-exports.default = (0, _reactRedux.connect)(mapStateToProps, {
- editRule: _rulesActions.editRule, deleteRule: _rulesActions.deleteRule, addRule: _rulesActions.addRule, showRule: _rulesActions.showRule
-})(_panelRightRule.PanelRightRules);
-
-/***/ }),
-
-/***/ "./app/containers/rule/rule.container.js":
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-
-var _reactRedux = __webpack_require__("./node_modules/react-redux/es/index.js");
-
-var _rule = __webpack_require__("./app/components/rule/rule.component.js");
-
-var mapStateToProps = function mapStateToProps(state) {
- return {
- RulesDetails: state.RulesDetails
- };
-};
-
-exports.default = (0, _reactRedux.connect)(mapStateToProps)(_rule.Rules);
-
-/***/ }),
-
-/***/ "./app/containers/site/panel.left.site.container.js":
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-
-var _reactRedux = __webpack_require__("./node_modules/react-redux/es/index.js");
-
-var _panelLeftSite = __webpack_require__("./app/components/site/panel.left.site.component.js");
-
-var _siteActions = __webpack_require__("./app/actions/siteActions.js");
-
-var mapStateToProps = function mapStateToProps(state) {
- return {
- searchedPages: state.searchedPages,
- activeTabPageId: state.activeTabPageId
- };
-};
-
-exports.default = (0, _reactRedux.connect)(mapStateToProps, { searchPage: _siteActions.searchPage, selectPage: _siteActions.selectPage, deletePage: _siteActions.deletePage, addPage: _siteActions.addPage })(_panelLeftSite.PanelLeftSite);
-
-/***/ }),
-
-/***/ "./app/containers/site/panel.right.site.container.js":
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-
-var _reactRedux = __webpack_require__("./node_modules/react-redux/es/index.js");
-
-var _panelRightSite = __webpack_require__("./app/components/site/panel.right.site.component.js");
-
-var _siteActions = __webpack_require__("./app/actions/siteActions.js");
-
-var mapStateToProps = function mapStateToProps(state) {
- return {
- selectedPage: state.selectedPage,
- activeTabPageId: state.activeTabPageId,
- SiteInfo: state.SiteInfo
- };
-};
-
-exports.default = (0, _reactRedux.connect)(mapStateToProps, { editValue: _siteActions.editValue, closePage: _siteActions.closePage })(_panelRightSite.PanelRightSite);
-
-/***/ }),
-
-/***/ "./app/containers/site/site.container.js":
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-
-var _reactRedux = __webpack_require__("./node_modules/react-redux/es/index.js");
-
-var _site = __webpack_require__("./app/components/site/site.component.js");
-
-var mapStateToProps = function mapStateToProps(state) {
- return {
- SiteDetails: state.SiteDetails
- };
-};
-
-exports.default = (0, _reactRedux.connect)(mapStateToProps)(_site.Site);
-
-/***/ }),
-
-/***/ "./app/containers/tabs.container.js":
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-
-var _reactRedux = __webpack_require__("./node_modules/react-redux/es/index.js");
-
-var _tabs = __webpack_require__("./app/components/tabs.component.js");
-
-var _pageActions = __webpack_require__("./app/actions/pageActions.js");
-
-var _codeActions = __webpack_require__("./app/actions/codeActions.js");
-
-var _siteActions = __webpack_require__("./app/actions/siteActions.js");
-
-var mapStateToProps = function mapStateToProps(state) {
- return {
- PageObjects: state.PageObjects,
- activeTabPageId: state.activeTabPageId,
- settingsForSite: state.settingsForSite,
- JDI: state.JDI
- };
-};
-
-exports.default = (0, _reactRedux.connect)(mapStateToProps, { showPage: _pageActions.showPage, zipAllCode: _codeActions.zipAllCode, backToSite: _siteActions.backToSite, addPage: _siteActions.addPage, switchCodeMode: _codeActions.switchCodeMode })(_tabs.Tabs);
-
-/***/ }),
-
-/***/ "./app/data/pageObject.js":
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-var PageObjectJSON = [{
- "url": "",
- "urlTemplate": "",
- "urlMatch": "Contains",
- "title": "",
- "titleMatch": "Equals",
- "name": "Default Page",
- "pageId": 0,
- "elements": []
-}];
-
-var SiteInfoJSON = {
- "siteTitle": "",
- "domainName": "",
- "hostName": "",
- "origin": ""
-};
-
-exports.PageObjectJSON = PageObjectJSON;
-exports.SiteInfoJSON = SiteInfoJSON;
-
-/***/ }),
-
-/***/ "./app/data/settings.js":
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-
-var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
-
-var Elements = ["Button", "Checkbox", "Image", "Label", "Link", "Text", "TextField", "Input", "TextArea", "DataPicker", "FileInput", "Section", "Form", "Selector", "CheckList", "Menu", "RadioButtons", "Tabs", "TextList", "Chat", "ComboBox", "Dropdown", "DropList", "Table", "DynamicTable"];
-var Locators = ["class", "css", "xpath", "id", "name", "tag", "text"];
-
-var commonFields = {
- "Name": "TextField",
- "Type": "ComboBox",
- "parent": "internal",
- "parentId": "internal",
- "elId": "internal"
-};
-
-var ElementFields = {
- "Button": _extends({}, commonFields, { "Locator": "TextField" }),
- "Link": _extends({}, commonFields, { "Locator": "TextField" }),
- "Section": _extends({}, commonFields, { "Locator": "TextField", "isSection": "internal", "expanded": "internal", "children": "internal" }),
- "Form": _extends({}, commonFields, { "Locator": "TextField", "isSection": "internal", "Entity": "TextField", "expanded": "internal", "children": "internal" }),
- "ComboBox": _extends({}, commonFields, { "Root": "TextField", "Value": "TextField",
- "List": "TextField", "Expand": "TextField", "Enum": "TextField"
- }),
- "Table": _extends({}, commonFields, { "Root": "TextField", "Headers": "TextField", "RowHeaders": "TextField", "Header": "TextField",
- "RowHeader": "TextField", "Cell": "TextField", "Column": "TextField", "Row": "TextField",
- "Footer": "TextField", "Height": "TextField", "Width": "TextField", "RowStartIndex": "TextField", "UseCache": "Checkbox",
- "HeaderTypes": "ComboBox", "HeaderTypesValues": ["All", "Headers", "No Headers", "Columns Headers", "Rows Headers"]
- }),
- "DynamicTable": _extends({}, commonFields, { "Root": "TextField", "Headers": "TextField", "RowHeaders": "TextField", "Header": "TextField",
- "RowHeader": "TextField", "Cell": "TextField", "Column": "TextField", "Row": "TextField",
- "Footer": "TextField", "Height": "TextField", "Width": "TextField", "RowStartIndex": "TextField", "UseCache": "Checkbox",
- "HeaderTypes": "ComboBox", "HeaderTypesValues": ["All", "Headers", "No Headers", "Columns Headers", "Rows Headers"]
- })
- //let HeaderTypes = ["All", "Headers", "No Headers", "Columns Headers", "Rows Headers"];
-
- /*let ElementFields = new Map();
- ElementFields.set("Button", { ...commonFields, "Locator": "TextField" });
- ElementFields.set("Image", { ...commonFields, "Locator": "TextField" });
- ElementFields.set("Checkbox", { ...commonFields, "Locator": "TextField" });
- ElementFields.set("Label", { ...commonFields, "Locator": "TextField" });
- ElementFields.set("Link", { ...commonFields, "Locator": "TextField" });
- ElementFields.set("Text", { ...commonFields, "Locator": "TextField" });
- ElementFields.set("TextField", { ...commonFields, "Locator": "TextField" });
- ElementFields.set("Input", { ...commonFields, "Locator": "TextField" });
- ElementFields.set("TextArea", { ...commonFields, "Locator": "TextField" });
- ElementFields.set("DataPicker", { ...commonFields, "Locator": "TextField" });
- ElementFields.set("FileInput", { ...commonFields, "Locator": "TextField" });
- ElementFields.set("Section", { ...commonFields, "Locator": "TextField", "isSection": "internal", "expanded": "internal", "children": "internal" });
- ElementFields.set("Form", { ...commonFields, "Locator": "TextField", "isSection": "internal", "Entity": "TextField", "expanded": "internal", "children": "internal" });
- ElementFields.set("Selector", { ...commonFields, "Locator": "TextField", "Enum": "TextField" });
- ElementFields.set("CheckList", { ...commonFields, "Locator": "TextField", "Enum": "TextField" });
- ElementFields.set("Menu", { ...commonFields, "Locator": "TextField", "Enum": "TextField" });
- ElementFields.set("RadioButtons", { ...commonFields, "Locator": "TextField", "Enum": "TextField" });
- ElementFields.set("Tabs", { ...commonFields, "Locator": "TextField", "Enum": "TextField" });
- ElementFields.set("TextList", { ...commonFields, "Locator": "TextField", "Enum": "TextField" });
- ElementFields.set("Chat", { ...commonFields, "Locator": "TextField", "Enum": "TextField" });
- ElementFields.set("ComboBox", {
- ...commonFields, "Root": "TextField", "Value": "TextField",
- "List": "TextField", "Expand": "TextField", "Enum": "TextField"
- });
- ElementFields.set("Logout", {
- ...commonFields, "Root": "TextField", "Value": "TextField",
- "List": "TextField", "Expand": "TextField", "Enum": "TextField"
- });
- ElementFields.set("Dropdown", {
- ...commonFields, "Root": "TextField", "Value": "TextField",
- "List": "TextField", "Expand": "TextField", "Enum": "TextField"
- });
- ElementFields.set("DropList", {
- ...commonFields, "Root": "TextField", "Value": "TextField",
- "List": "TextField", "Expand": "TextField", "Enum": "TextField"
- });
- ElementFields.set("Table", {
- ...commonFields, "Root": "TextField", "Headers": "TextField", "RowHeaders": "TextField", "Header": "TextField",
- "RowHeader": "TextField", "Cell": "TextField", "Column": "TextField", "Row": "TextField",
- "Footer": "TextField", "Height": "TextField", "Width": "TextField", "RowStartIndex": "TextField", "UseCache": "Checkbox",
- "HeaderTypes": "ComboBox"
- });
- ElementFields.set("DynamicTable", {
- ...commonFields, "Root": "TextField", "Headers": "TextField", "RowHeaders": "TextField", "Header": "TextField",
- "RowHeader": "TextField", "Cell": "TextField", "Column": "TextField", "Row": "TextField",
- "Footer": "TextField", "Height": "TextField", "Width": "TextField", "RowStartIndex": "TextField", "UseCache": "Checkbox",
- "HeaderTypes": "ComboBox"
- });*/
-
-};var SimpleRules = {
- "Button": [{ Locator: "input[type=submit]", uniqness: "value", id: 0 }, { Locator: "input[type=button]", uniqness: "value", id: 1 }, { Locator: "button[type=button]", uniqness: "text", id: 2 }, { Locator: "button.btn", uniqness: "text", id: 3 }, { Locator: "a.btn", uniqness: "text", id: 4 }, { Locator: 'button[type=submit]', uniqness: "text", id: 5 }],
- // "Checkbox": [{ Locator: "", id: 0, uniqness: "" }],
- // "Image": [{ Locator: "", id: 0, uniqness: "" }],
- // "Label": [{ Locator: "", id: 0, uniqness: "" }],
- "Link": [{ Locator: "a[href]", uniqness: "text", id: 0 }]
- // "Text": [{ Locator: "", id: 0, uniqness: "" }],
- // "TextField": [{ Locator: "", id: 0, uniqness: "" }],
- // "Input": [{ Locator: "", id: 0, uniqness: "" }],
- // "TextArea": [{ Locator: "", id: 0, uniqness: "" }],
- // "DataPicker": [{ Locator: "", id: 0, uniqness: "" }],
- // "FileInput": [{ Locator: "", id: 0, uniqness: "" }],
- // "Selector": [{ Locator: "", id: 0, uniqness: "" }],
- // "CheckList": [{ Locator: "", id: 0, uniqness: "" }],
- // "Menu": [{ Locator: "", id: 0, uniqness: "" }],
- // "RadioButtons": [{ Locator: "", id: 0, uniqness: "" }],
- // "Tabs": [{ Locator: "", id: 0, uniqness: "" }],
- // "TextList": [{ Locator: "", id: 0, uniqness: "" }],
- // "Chat": [{ Locator: "", id: 0, uniqness: "" }]
-};
-var ComplexRules = {
- "ComboBox": [{ Root: "[jtype=dropdown] button", uniqness: ".filter-option#text", Value: "", List: "li", Expand: ".caret", id: 0 }],
- // "Dropdown": [{ Root: "[jtype=combobox] button", uniqness: ".filter-option#text", Value: "", List: "", Expand: "", id: 0 }],
- // "DropList": [{ Root: "[jtype=droplist] button", uniqness: "text", Value: "", List: "", Expand: "", id: 0 }],
- // "MenuDropdown": [{ Root: ".open [data-toggle]", uniqness: "text", Value: "", List: "", Expand: "", id: 0 }],
- // "Logout": [{ Root: ".uui-profile-menu", uniqness: ".profile-photo span#text", Value: "", List: "", Expand: "", id: 0 }],
- "Table": [{
- Root: "table", Header: "", RowHeader: "", Cell: "",
- Column: "", Row: "", Footer: "", id: 0, uniqness: 'class'
- }],
- "DynamicTable": [{
- Root: "", Header: "", RowHeader: "", Cell: "",
- Column: "", Row: "", Footer: "", id: 0, uniqness: "class"
- }]
-};
-var CompositeRules = {
- "Section": [{ Locator: ".section", id: 0, uniqness: 'class' }, { Locator: "header", id: 1, uniqness: 'tag' }, { Locator: "//footer", id: 2, uniqness: '[footer]' }, { Locator: "#sidebar", id: 3, uniqness: 'id' }, { Locator: "#content", id: 4, uniqness: 'id' }],
- "Form": [{ Locator: "form", id: 0, uniqness: 'class' }]
-};
-
-exports.Elements = Elements;
-exports.Locators = Locators;
-exports.ElementFields = ElementFields;
-exports.SimpleRules = SimpleRules;
-exports.ComplexRules = ComplexRules;
-exports.CompositeRules = CompositeRules;
-exports.commonFields = commonFields;
-
-/***/ }),
-
-/***/ "./app/functional parts/common.js":
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-function findElement(id, arr) {
- return arr.find(function (el) {
- return el.elId === id;
- });
-}
-
-function findPage(id, arr) {
- var page = arr.find(function (page) {
- return page.pageId === id;
- });
- return page;
-}
-
-function findParentData(el, d) {
- while (el.dataset[d] === undefined) {
- el = el.parentNode;
- }
- return el;
-}
-
-exports.findElement = findElement;
-exports.findPage = findPage;
-exports.findParentData = findParentData;
-
-/***/ }),
-
-/***/ "./app/functional parts/tree.js":
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-function getChildren(mapArr, parentId) {
- if (typeof mapArr.get === "function") {
- var arr = mapArr.get(parentId);
- //let arr = mapArr.get(parentName);
- //resTree = getChildren(map.get(null), map)
- var tree = [];
- if (arr) {
- var len = arr.length;
- for (var i = 0; i < len; i++) {
- var element = arr[i];
- element.children = [];
- if (mapArr.has(element.elId)) {
- element.children = getChildren(mapArr, element.elId);
- }
- // if (mapArr.has(element.name)) {
- // element.children = getChildren(mapArr, element.name);
- // }
- tree.push(element);
- }
- }
- return tree;
- }return [];
-}
-
-//sections.size
-
-function sub(sections, element) {
- if (!!sections.size) {
- return typeof element === 'string' ? sections.get(element) : element;
- }
- return element;
-}
-
-function check(arr, sections) {
- var testSecInArr = arr.filter(function (e) {
- return typeof e === 'string';
- });
- if (!testSecInArr.length) {
- return true;
- }
- if (!!sections.size) {
- return true;
- }
- return false;
-}
-
-function drawMap(arr, sections, mapArr) {
- if (check(arr, sections)) {
- for (var i = 0; i < arr.length; i++) {
- var element = typeof arr[i] === 'string' ? sections.get(arr[i]) : arr[i];
- if (!!element) {
- element.title = element.Name;
- element.subtitle = element.Type;
- // let parent = element.parent;
- // if (mapArr.has(parent)) {
- // let list = mapArr.get(parent);
- // list.push(element);
- // } else {
- // mapArr.set(parent, [element])
- // }
- var parentId = element.parentId;
- if (mapArr.has(parentId)) {
- var list = mapArr.get(parentId);
- list.push(element);
- } else {
- mapArr.set(parentId, [element]);
- }
- } else {
- return [];
- }
- }
- return mapArr;
- }return [];
-}
-
-function searchElement(searched, pageElements, sections) {
- //let searched = e.target.value;
- var searchedArr = [];
- var result = [];
- var newElements = [];
-
- newElements = pageElements.map(function (element) {
- return typeof element === 'string' ? sections.get(element) : element;
- });
-
- searchedArr = newElements.filter(function (element) {
- return element.Name.toLowerCase().includes(searched.toLowerCase());
- });
-
- if (!!searchedArr.length) {
- var findParent = function findParent(p) {
- if (p === null) {
- return;
- };
- var element = sections.get(p); /*pageElements.find((element) => element.elId === p);*/
- var e = result.find(function (r) {
- return r.elId === element.elId;
- });
- if (!e) {
- element.children = [];
- element.expanded = true;
- result.push(element);
- }
- findParent(element.parentId);
- };
-
- var _loop = function _loop(i) {
- searchedArr[i].children = [];
- if (!result.find(function (r) {
- return r.elId === searchedArr[i].elId;
- })) {
- searchedArr[i].expanded = true;
- result.push(searchedArr[i]);
- };
- findParent(searchedArr[i].parentId);
- };
-
- for (var i = 0; i < searchedArr.length; i++) {
- _loop(i);
- }
- }
- return result;
-}
-
-exports.getChildren = getChildren;
-exports.drawMap = drawMap;
-exports.searchElement = searchElement;
-
-/***/ }),
-
-/***/ "./app/index.js":
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/* WEBPACK VAR INJECTION */(function(ReactDOM, React) {
-
-var _app = __webpack_require__("./app/app.js");
-
-var _store = __webpack_require__("./app/store/store.js");
-
-var _reactRedux = __webpack_require__("./node_modules/react-redux/es/index.js");
-
-var _reactHotLoader = __webpack_require__("./node_modules/react-hot-loader/index.js");
-
-var render = function render(Component) {
- ReactDOM.render(React.createElement(
- _reactHotLoader.AppContainer,
- null,
- React.createElement(
- _reactRedux.Provider,
- { store: _store.store },
- React.createElement(Component, null)
- )
- ), document.getElementById("app"));
-};
-
-render(_app.Main);
-/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__("./node_modules/react-dom/index.js"), __webpack_require__("./node_modules/react/react.js")))
-
-/***/ }),
-
-/***/ "./app/libs/cssToXpath/cssToXPath.js":
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-function cssToXPath(css) {
- if (css === "") return "";
- var i = 0;
- var start = void 0;
- var result = "//";
- var length = css.length;
- while (i < length) {
- var symbol = css[i];
- if (symbol.match(/[a-z]/)) {
- start = i;
- while (i < length && css[i].match(/[a-z]/)) {
- i++;
- }
- if (i === length) return result + css.substr(start);
- result += css.substring(start, i);
- continue;
- }
- if (symbol === ' ') {
- result += "//";i++;
- continue;
- }
- if (symbol.match(/[\.#\[]/)) {
- var attributes = [];
- while (i < length && css[i] !== " ") {
- switch (css[i]) {
- case ".":
- i++;start = i;
- while (i < length && css[i].match(/[a-z0-9A-Z0-9:\-_\.]/)) {
- i++;
- }attributes.push(convertToClass(i === length ? css.substr(start) : css.substring(start, i)));
- break;
- case "#":
- i++;start = i;
- while (i < length && css[i].match(/[a-z0-9A-Z0-9:\-_\.]/)) {
- i++;
- }attributes.push(convertToId(i === length ? css.substr(start) : css.substring(start, i)));
- break;
- case "[":
- i++;
- var attribute = "@";
- while (i < length && !css[i].match(/[=\]]/)) {
- attribute += css[i];
- i++;
- }
- if (css[i] === "=") {
- attribute += "=";i++;
- if (css[i] !== "'") attribute += "'";
- while (i < length && css[i] !== ']') {
- attribute += css[i];
- i++;
- }
- if (i === length) return "Incorrect Css. No ']' symbol for '['";
- if (attribute.slice(-1) !== "'") attribute += "'";
- } else if (css[i] !== "]") return "Can't process Css. Unexpected symbol \u2116" + (i + 1) + "(" + css[i] + ") in attributes";
- attributes.push(attribute);
- i++;
- break;
- default:
- return "Can't process Css. Unexpected symbol \u2116" + i + "(" + css[i - 1] + ") in attributes";
- }
- }
- if (result.slice(-1) === '/') result += "*";
- result += "[" + attributes.join(" and ") + "]";
- continue;
- }
- return "Can't process Css. Unexpected symbol '" + symbol + "'";
- }
- return result;
-
- function convertToClass(value) {
- return "contains(@class,'" + value + "')";
- }
- function convertToId(value) {
- return convertToAtribute("id", value);
- }
- function convertToAtribute(attr, value) {
- return "@" + attr + "='" + value + "'";
- }
-}
-
-exports.default = cssToXPath;
-
-/***/ }),
-
-/***/ "./app/libs/jszip/dist/jszip.js":
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/* WEBPACK VAR INJECTION */(function(Buffer, global) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var require;var require;
-
-var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
-
-/*!
-
-JSZip v3.1.5 - A JavaScript class for generating and reading zip files
-
-
-(c) 2009-2016 Stuart Knightley
-Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/master/LICENSE.markdown.
-
-JSZip uses the library pako released under the MIT license :
-https://github.com/nodeca/pako/blob/master/LICENSE
-*/
-
-(function (f) {
- if (( false ? "undefined" : _typeof(exports)) === "object" && typeof module !== "undefined") {
- module.exports = f();
- } else if (true) {
- !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (f),
- __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
- (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
- __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
- } else {
- var g;if (typeof window !== "undefined") {
- g = window;
- } else if (typeof global !== "undefined") {
- g = global;
- } else if (typeof self !== "undefined") {
- g = self;
- } else {
- g = this;
- }g.JSZip = f();
- }
-})(function () {
- var define, module, exports;return function e(t, n, r) {
- function s(o, u) {
- if (!n[o]) {
- if (!t[o]) {
- var a = typeof require == "function" && require;if (!u && a) return require(o, !0);if (i) return i(o, !0);var f = new Error("Cannot find module '" + o + "'");throw f.code = "MODULE_NOT_FOUND", f;
- }var l = n[o] = { exports: {} };t[o][0].call(l.exports, function (e) {
- var n = t[o][1][e];return s(n ? n : e);
- }, l, l.exports, e, t, n, r);
- }return n[o].exports;
- }var i = typeof require == "function" && require;for (var o = 0; o < r.length; o++) {
- s(r[o]);
- }return s;
- }({ 1: [function (require, module, exports) {
- 'use strict';
-
- var utils = require('./utils');
- var support = require('./support');
- // private property
- var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
-
- // public method for encoding
- exports.encode = function (input) {
- var output = [];
- var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
- var i = 0,
- len = input.length,
- remainingBytes = len;
-
- var isArray = utils.getTypeOf(input) !== "string";
- while (i < input.length) {
- remainingBytes = len - i;
-
- if (!isArray) {
- chr1 = input.charCodeAt(i++);
- chr2 = i < len ? input.charCodeAt(i++) : 0;
- chr3 = i < len ? input.charCodeAt(i++) : 0;
- } else {
- chr1 = input[i++];
- chr2 = i < len ? input[i++] : 0;
- chr3 = i < len ? input[i++] : 0;
- }
-
- enc1 = chr1 >> 2;
- enc2 = (chr1 & 3) << 4 | chr2 >> 4;
- enc3 = remainingBytes > 1 ? (chr2 & 15) << 2 | chr3 >> 6 : 64;
- enc4 = remainingBytes > 2 ? chr3 & 63 : 64;
-
- output.push(_keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4));
- }
-
- return output.join("");
- };
-
- // public method for decoding
- exports.decode = function (input) {
- var chr1, chr2, chr3;
- var enc1, enc2, enc3, enc4;
- var i = 0,
- resultIndex = 0;
-
- var dataUrlPrefix = "data:";
-
- if (input.substr(0, dataUrlPrefix.length) === dataUrlPrefix) {
- // This is a common error: people give a data url
- // (data:image/png;base64,iVBOR...) with a {base64: true} and
- // wonders why things don't work.
- // We can detect that the string input looks like a data url but we
- // *can't* be sure it is one: removing everything up to the comma would
- // be too dangerous.
- throw new Error("Invalid base64 input, it looks like a data url.");
- }
-
- input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
-
- var totalLength = input.length * 3 / 4;
- if (input.charAt(input.length - 1) === _keyStr.charAt(64)) {
- totalLength--;
- }
- if (input.charAt(input.length - 2) === _keyStr.charAt(64)) {
- totalLength--;
- }
- if (totalLength % 1 !== 0) {
- // totalLength is not an integer, the length does not match a valid
- // base64 content. That can happen if:
- // - the input is not a base64 content
- // - the input is *almost* a base64 content, with a extra chars at the
- // beginning or at the end
- // - the input uses a base64 variant (base64url for example)
- throw new Error("Invalid base64 input, bad content length.");
- }
- var output;
- if (support.uint8array) {
- output = new Uint8Array(totalLength | 0);
- } else {
- output = new Array(totalLength | 0);
- }
-
- while (i < input.length) {
-
- enc1 = _keyStr.indexOf(input.charAt(i++));
- enc2 = _keyStr.indexOf(input.charAt(i++));
- enc3 = _keyStr.indexOf(input.charAt(i++));
- enc4 = _keyStr.indexOf(input.charAt(i++));
-
- chr1 = enc1 << 2 | enc2 >> 4;
- chr2 = (enc2 & 15) << 4 | enc3 >> 2;
- chr3 = (enc3 & 3) << 6 | enc4;
-
- output[resultIndex++] = chr1;
-
- if (enc3 !== 64) {
- output[resultIndex++] = chr2;
- }
- if (enc4 !== 64) {
- output[resultIndex++] = chr3;
- }
- }
-
- return output;
- };
- }, { "./support": 30, "./utils": 32 }], 2: [function (require, module, exports) {
- 'use strict';
-
- var external = require("./external");
- var DataWorker = require('./stream/DataWorker');
- var DataLengthProbe = require('./stream/DataLengthProbe');
- var Crc32Probe = require('./stream/Crc32Probe');
- var DataLengthProbe = require('./stream/DataLengthProbe');
-
- /**
- * Represent a compressed object, with everything needed to decompress it.
- * @constructor
- * @param {number} compressedSize the size of the data compressed.
- * @param {number} uncompressedSize the size of the data after decompression.
- * @param {number} crc32 the crc32 of the decompressed file.
- * @param {object} compression the type of compression, see lib/compressions.js.
- * @param {String|ArrayBuffer|Uint8Array|Buffer} data the compressed data.
- */
- function CompressedObject(compressedSize, uncompressedSize, crc32, compression, data) {
- this.compressedSize = compressedSize;
- this.uncompressedSize = uncompressedSize;
- this.crc32 = crc32;
- this.compression = compression;
- this.compressedContent = data;
- }
-
- CompressedObject.prototype = {
- /**
- * Create a worker to get the uncompressed content.
- * @return {GenericWorker} the worker.
- */
- getContentWorker: function getContentWorker() {
- var worker = new DataWorker(external.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new DataLengthProbe("data_length"));
-
- var that = this;
- worker.on("end", function () {
- if (this.streamInfo['data_length'] !== that.uncompressedSize) {
- throw new Error("Bug : uncompressed data size mismatch");
- }
- });
- return worker;
- },
- /**
- * Create a worker to get the compressed content.
- * @return {GenericWorker} the worker.
- */
- getCompressedWorker: function getCompressedWorker() {
- return new DataWorker(external.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize", this.compressedSize).withStreamInfo("uncompressedSize", this.uncompressedSize).withStreamInfo("crc32", this.crc32).withStreamInfo("compression", this.compression);
- }
- };
-
- /**
- * Chain the given worker with other workers to compress the content with the
- * given compresion.
- * @param {GenericWorker} uncompressedWorker the worker to pipe.
- * @param {Object} compression the compression object.
- * @param {Object} compressionOptions the options to use when compressing.
- * @return {GenericWorker} the new worker compressing the content.
- */
- CompressedObject.createWorkerFrom = function (uncompressedWorker, compression, compressionOptions) {
- return uncompressedWorker.pipe(new Crc32Probe()).pipe(new DataLengthProbe("uncompressedSize")).pipe(compression.compressWorker(compressionOptions)).pipe(new DataLengthProbe("compressedSize")).withStreamInfo("compression", compression);
- };
-
- module.exports = CompressedObject;
- }, { "./external": 6, "./stream/Crc32Probe": 25, "./stream/DataLengthProbe": 26, "./stream/DataWorker": 27 }], 3: [function (require, module, exports) {
- 'use strict';
-
- var GenericWorker = require("./stream/GenericWorker");
-
- exports.STORE = {
- magic: "\x00\x00",
- compressWorker: function compressWorker(compressionOptions) {
- return new GenericWorker("STORE compression");
- },
- uncompressWorker: function uncompressWorker() {
- return new GenericWorker("STORE decompression");
- }
- };
- exports.DEFLATE = require('./flate');
- }, { "./flate": 7, "./stream/GenericWorker": 28 }], 4: [function (require, module, exports) {
- 'use strict';
-
- var utils = require('./utils');
-
- /**
- * The following functions come from pako, from pako/lib/zlib/crc32.js
- * released under the MIT license, see pako https://github.com/nodeca/pako/
- */
-
- // Use ordinary array, since untyped makes no boost here
- function makeTable() {
- var c,
- table = [];
-
- for (var n = 0; n < 256; n++) {
- c = n;
- for (var k = 0; k < 8; k++) {
- c = c & 1 ? 0xEDB88320 ^ c >>> 1 : c >>> 1;
- }
- table[n] = c;
- }
-
- return table;
- }
-
- // Create table on load. Just 255 signed longs. Not a problem.
- var crcTable = makeTable();
-
- function crc32(crc, buf, len, pos) {
- var t = crcTable,
- end = pos + len;
-
- crc = crc ^ -1;
-
- for (var i = pos; i < end; i++) {
- crc = crc >>> 8 ^ t[(crc ^ buf[i]) & 0xFF];
- }
-
- return crc ^ -1; // >>> 0;
- }
-
- // That's all for the pako functions.
-
- /**
- * Compute the crc32 of a string.
- * This is almost the same as the function crc32, but for strings. Using the
- * same function for the two use cases leads to horrible performances.
- * @param {Number} crc the starting value of the crc.
- * @param {String} str the string to use.
- * @param {Number} len the length of the string.
- * @param {Number} pos the starting position for the crc32 computation.
- * @return {Number} the computed crc32.
- */
- function crc32str(crc, str, len, pos) {
- var t = crcTable,
- end = pos + len;
-
- crc = crc ^ -1;
-
- for (var i = pos; i < end; i++) {
- crc = crc >>> 8 ^ t[(crc ^ str.charCodeAt(i)) & 0xFF];
- }
-
- return crc ^ -1; // >>> 0;
- }
-
- module.exports = function crc32wrapper(input, crc) {
- if (typeof input === "undefined" || !input.length) {
- return 0;
- }
-
- var isArray = utils.getTypeOf(input) !== "string";
-
- if (isArray) {
- return crc32(crc | 0, input, input.length, 0);
- } else {
- return crc32str(crc | 0, input, input.length, 0);
- }
- };
- }, { "./utils": 32 }], 5: [function (require, module, exports) {
- 'use strict';
-
- exports.base64 = false;
- exports.binary = false;
- exports.dir = false;
- exports.createFolders = true;
- exports.date = null;
- exports.compression = null;
- exports.compressionOptions = null;
- exports.comment = null;
- exports.unixPermissions = null;
- exports.dosPermissions = null;
- }, {}], 6: [function (require, module, exports) {
- /* global Promise */
- 'use strict';
-
- // load the global object first:
- // - it should be better integrated in the system (unhandledRejection in node)
- // - the environment may have a custom Promise implementation (see zone.js)
-
- var ES6Promise = null;
- if (typeof Promise !== "undefined") {
- ES6Promise = Promise;
- } else {
- ES6Promise = require("lie");
- }
-
- /**
- * Let the user use/change some implementations.
- */
- module.exports = {
- Promise: ES6Promise
- };
- }, { "lie": 58 }], 7: [function (require, module, exports) {
- 'use strict';
-
- var USE_TYPEDARRAY = typeof Uint8Array !== 'undefined' && typeof Uint16Array !== 'undefined' && typeof Uint32Array !== 'undefined';
-
- var pako = require("pako");
- var utils = require("./utils");
- var GenericWorker = require("./stream/GenericWorker");
-
- var ARRAY_TYPE = USE_TYPEDARRAY ? "uint8array" : "array";
-
- exports.magic = "\x08\x00";
-
- /**
- * Create a worker that uses pako to inflate/deflate.
- * @constructor
- * @param {String} action the name of the pako function to call : either "Deflate" or "Inflate".
- * @param {Object} options the options to use when (de)compressing.
- */
- function FlateWorker(action, options) {
- GenericWorker.call(this, "FlateWorker/" + action);
-
- this._pako = null;
- this._pakoAction = action;
- this._pakoOptions = options;
- // the `meta` object from the last chunk received
- // this allow this worker to pass around metadata
- this.meta = {};
- }
-
- utils.inherits(FlateWorker, GenericWorker);
-
- /**
- * @see GenericWorker.processChunk
- */
- FlateWorker.prototype.processChunk = function (chunk) {
- this.meta = chunk.meta;
- if (this._pako === null) {
- this._createPako();
- }
- this._pako.push(utils.transformTo(ARRAY_TYPE, chunk.data), false);
- };
-
- /**
- * @see GenericWorker.flush
- */
- FlateWorker.prototype.flush = function () {
- GenericWorker.prototype.flush.call(this);
- if (this._pako === null) {
- this._createPako();
- }
- this._pako.push([], true);
- };
- /**
- * @see GenericWorker.cleanUp
- */
- FlateWorker.prototype.cleanUp = function () {
- GenericWorker.prototype.cleanUp.call(this);
- this._pako = null;
- };
-
- /**
- * Create the _pako object.
- * TODO: lazy-loading this object isn't the best solution but it's the
- * quickest. The best solution is to lazy-load the worker list. See also the
- * issue #446.
- */
- FlateWorker.prototype._createPako = function () {
- this._pako = new pako[this._pakoAction]({
- raw: true,
- level: this._pakoOptions.level || -1 // default compression
- });
- var self = this;
- this._pako.onData = function (data) {
- self.push({
- data: data,
- meta: self.meta
- });
- };
- };
-
- exports.compressWorker = function (compressionOptions) {
- return new FlateWorker("Deflate", compressionOptions);
- };
- exports.uncompressWorker = function () {
- return new FlateWorker("Inflate", {});
- };
- }, { "./stream/GenericWorker": 28, "./utils": 32, "pako": 59 }], 8: [function (require, module, exports) {
- 'use strict';
-
- var utils = require('../utils');
- var GenericWorker = require('../stream/GenericWorker');
- var utf8 = require('../utf8');
- var crc32 = require('../crc32');
- var signature = require('../signature');
-
- /**
- * Transform an integer into a string in hexadecimal.
- * @private
- * @param {number} dec the number to convert.
- * @param {number} bytes the number of bytes to generate.
- * @returns {string} the result.
- */
- var decToHex = function decToHex(dec, bytes) {
- var hex = "",
- i;
- for (i = 0; i < bytes; i++) {
- hex += String.fromCharCode(dec & 0xff);
- dec = dec >>> 8;
- }
- return hex;
- };
-
- /**
- * Generate the UNIX part of the external file attributes.
- * @param {Object} unixPermissions the unix permissions or null.
- * @param {Boolean} isDir true if the entry is a directory, false otherwise.
- * @return {Number} a 32 bit integer.
- *
- * adapted from http://unix.stackexchange.com/questions/14705/the-zip-formats-external-file-attribute :
- *
- * TTTTsstrwxrwxrwx0000000000ADVSHR
- * ^^^^____________________________ file type, see zipinfo.c (UNX_*)
- * ^^^_________________________ setuid, setgid, sticky
- * ^^^^^^^^^________________ permissions
- * ^^^^^^^^^^______ not used ?
- * ^^^^^^ DOS attribute bits : Archive, Directory, Volume label, System file, Hidden, Read only
- */
- var generateUnixExternalFileAttr = function generateUnixExternalFileAttr(unixPermissions, isDir) {
-
- var result = unixPermissions;
- if (!unixPermissions) {
- // I can't use octal values in strict mode, hence the hexa.
- // 040775 => 0x41fd
- // 0100664 => 0x81b4
- result = isDir ? 0x41fd : 0x81b4;
- }
- return (result & 0xFFFF) << 16;
- };
-
- /**
- * Generate the DOS part of the external file attributes.
- * @param {Object} dosPermissions the dos permissions or null.
- * @param {Boolean} isDir true if the entry is a directory, false otherwise.
- * @return {Number} a 32 bit integer.
- *
- * Bit 0 Read-Only
- * Bit 1 Hidden
- * Bit 2 System
- * Bit 3 Volume Label
- * Bit 4 Directory
- * Bit 5 Archive
- */
- var generateDosExternalFileAttr = function generateDosExternalFileAttr(dosPermissions, isDir) {
-
- // the dir flag is already set for compatibility
- return (dosPermissions || 0) & 0x3F;
- };
-
- /**
- * Generate the various parts used in the construction of the final zip file.
- * @param {Object} streamInfo the hash with informations about the compressed file.
- * @param {Boolean} streamedContent is the content streamed ?
- * @param {Boolean} streamingEnded is the stream finished ?
- * @param {number} offset the current offset from the start of the zip file.
- * @param {String} platform let's pretend we are this platform (change platform dependents fields)
- * @param {Function} encodeFileName the function to encode the file name / comment.
- * @return {Object} the zip parts.
- */
- var generateZipParts = function generateZipParts(streamInfo, streamedContent, streamingEnded, offset, platform, encodeFileName) {
- var file = streamInfo['file'],
- compression = streamInfo['compression'],
- useCustomEncoding = encodeFileName !== utf8.utf8encode,
- encodedFileName = utils.transformTo("string", encodeFileName(file.name)),
- utfEncodedFileName = utils.transformTo("string", utf8.utf8encode(file.name)),
- comment = file.comment,
- encodedComment = utils.transformTo("string", encodeFileName(comment)),
- utfEncodedComment = utils.transformTo("string", utf8.utf8encode(comment)),
- useUTF8ForFileName = utfEncodedFileName.length !== file.name.length,
- useUTF8ForComment = utfEncodedComment.length !== comment.length,
- dosTime,
- dosDate,
- extraFields = "",
- unicodePathExtraField = "",
- unicodeCommentExtraField = "",
- dir = file.dir,
- date = file.date;
-
- var dataInfo = {
- crc32: 0,
- compressedSize: 0,
- uncompressedSize: 0
- };
-
- // if the content is streamed, the sizes/crc32 are only available AFTER
- // the end of the stream.
- if (!streamedContent || streamingEnded) {
- dataInfo.crc32 = streamInfo['crc32'];
- dataInfo.compressedSize = streamInfo['compressedSize'];
- dataInfo.uncompressedSize = streamInfo['uncompressedSize'];
- }
-
- var bitflag = 0;
- if (streamedContent) {
- // Bit 3: the sizes/crc32 are set to zero in the local header.
- // The correct values are put in the data descriptor immediately
- // following the compressed data.
- bitflag |= 0x0008;
- }
- if (!useCustomEncoding && (useUTF8ForFileName || useUTF8ForComment)) {
- // Bit 11: Language encoding flag (EFS).
- bitflag |= 0x0800;
- }
-
- var extFileAttr = 0;
- var versionMadeBy = 0;
- if (dir) {
- // dos or unix, we set the dos dir flag
- extFileAttr |= 0x00010;
- }
- if (platform === "UNIX") {
- versionMadeBy = 0x031E; // UNIX, version 3.0
- extFileAttr |= generateUnixExternalFileAttr(file.unixPermissions, dir);
- } else {
- // DOS or other, fallback to DOS
- versionMadeBy = 0x0014; // DOS, version 2.0
- extFileAttr |= generateDosExternalFileAttr(file.dosPermissions, dir);
- }
-
- // date
- // @see http://www.delorie.com/djgpp/doc/rbinter/it/52/13.html
- // @see http://www.delorie.com/djgpp/doc/rbinter/it/65/16.html
- // @see http://www.delorie.com/djgpp/doc/rbinter/it/66/16.html
-
- dosTime = date.getUTCHours();
- dosTime = dosTime << 6;
- dosTime = dosTime | date.getUTCMinutes();
- dosTime = dosTime << 5;
- dosTime = dosTime | date.getUTCSeconds() / 2;
-
- dosDate = date.getUTCFullYear() - 1980;
- dosDate = dosDate << 4;
- dosDate = dosDate | date.getUTCMonth() + 1;
- dosDate = dosDate << 5;
- dosDate = dosDate | date.getUTCDate();
-
- if (useUTF8ForFileName) {
- // set the unicode path extra field. unzip needs at least one extra
- // field to correctly handle unicode path, so using the path is as good
- // as any other information. This could improve the situation with
- // other archive managers too.
- // This field is usually used without the utf8 flag, with a non
- // unicode path in the header (winrar, winzip). This helps (a bit)
- // with the messy Windows' default compressed folders feature but
- // breaks on p7zip which doesn't seek the unicode path extra field.
- // So for now, UTF-8 everywhere !
- unicodePathExtraField =
- // Version
- decToHex(1, 1) +
- // NameCRC32
- decToHex(crc32(encodedFileName), 4) +
- // UnicodeName
- utfEncodedFileName;
-
- extraFields +=
- // Info-ZIP Unicode Path Extra Field
- "\x75\x70" +
- // size
- decToHex(unicodePathExtraField.length, 2) +
- // content
- unicodePathExtraField;
- }
-
- if (useUTF8ForComment) {
-
- unicodeCommentExtraField =
- // Version
- decToHex(1, 1) +
- // CommentCRC32
- decToHex(crc32(encodedComment), 4) +
- // UnicodeName
- utfEncodedComment;
-
- extraFields +=
- // Info-ZIP Unicode Path Extra Field
- "\x75\x63" +
- // size
- decToHex(unicodeCommentExtraField.length, 2) +
- // content
- unicodeCommentExtraField;
- }
-
- var header = "";
-
- // version needed to extract
- header += "\x0A\x00";
- // general purpose bit flag
- header += decToHex(bitflag, 2);
- // compression method
- header += compression.magic;
- // last mod file time
- header += decToHex(dosTime, 2);
- // last mod file date
- header += decToHex(dosDate, 2);
- // crc-32
- header += decToHex(dataInfo.crc32, 4);
- // compressed size
- header += decToHex(dataInfo.compressedSize, 4);
- // uncompressed size
- header += decToHex(dataInfo.uncompressedSize, 4);
- // file name length
- header += decToHex(encodedFileName.length, 2);
- // extra field length
- header += decToHex(extraFields.length, 2);
-
- var fileRecord = signature.LOCAL_FILE_HEADER + header + encodedFileName + extraFields;
-
- var dirRecord = signature.CENTRAL_FILE_HEADER +
- // version made by (00: DOS)
- decToHex(versionMadeBy, 2) +
- // file header (common to file and central directory)
- header +
- // file comment length
- decToHex(encodedComment.length, 2) +
- // disk number start
- "\x00\x00" +
- // internal file attributes TODO
- "\x00\x00" +
- // external file attributes
- decToHex(extFileAttr, 4) +
- // relative offset of local header
- decToHex(offset, 4) +
- // file name
- encodedFileName +
- // extra field
- extraFields +
- // file comment
- encodedComment;
-
- return {
- fileRecord: fileRecord,
- dirRecord: dirRecord
- };
- };
-
- /**
- * Generate the EOCD record.
- * @param {Number} entriesCount the number of entries in the zip file.
- * @param {Number} centralDirLength the length (in bytes) of the central dir.
- * @param {Number} localDirLength the length (in bytes) of the local dir.
- * @param {String} comment the zip file comment as a binary string.
- * @param {Function} encodeFileName the function to encode the comment.
- * @return {String} the EOCD record.
- */
- var generateCentralDirectoryEnd = function generateCentralDirectoryEnd(entriesCount, centralDirLength, localDirLength, comment, encodeFileName) {
- var dirEnd = "";
- var encodedComment = utils.transformTo("string", encodeFileName(comment));
-
- // end of central dir signature
- dirEnd = signature.CENTRAL_DIRECTORY_END +
- // number of this disk
- "\x00\x00" +
- // number of the disk with the start of the central directory
- "\x00\x00" +
- // total number of entries in the central directory on this disk
- decToHex(entriesCount, 2) +
- // total number of entries in the central directory
- decToHex(entriesCount, 2) +
- // size of the central directory 4 bytes
- decToHex(centralDirLength, 4) +
- // offset of start of central directory with respect to the starting disk number
- decToHex(localDirLength, 4) +
- // .ZIP file comment length
- decToHex(encodedComment.length, 2) +
- // .ZIP file comment
- encodedComment;
-
- return dirEnd;
- };
-
- /**
- * Generate data descriptors for a file entry.
- * @param {Object} streamInfo the hash generated by a worker, containing informations
- * on the file entry.
- * @return {String} the data descriptors.
- */
- var generateDataDescriptors = function generateDataDescriptors(streamInfo) {
- var descriptor = "";
- descriptor = signature.DATA_DESCRIPTOR +
- // crc-32 4 bytes
- decToHex(streamInfo['crc32'], 4) +
- // compressed size 4 bytes
- decToHex(streamInfo['compressedSize'], 4) +
- // uncompressed size 4 bytes
- decToHex(streamInfo['uncompressedSize'], 4);
-
- return descriptor;
- };
-
- /**
- * A worker to concatenate other workers to create a zip file.
- * @param {Boolean} streamFiles `true` to stream the content of the files,
- * `false` to accumulate it.
- * @param {String} comment the comment to use.
- * @param {String} platform the platform to use, "UNIX" or "DOS".
- * @param {Function} encodeFileName the function to encode file names and comments.
- */
- function ZipFileWorker(streamFiles, comment, platform, encodeFileName) {
- GenericWorker.call(this, "ZipFileWorker");
- // The number of bytes written so far. This doesn't count accumulated chunks.
- this.bytesWritten = 0;
- // The comment of the zip file
- this.zipComment = comment;
- // The platform "generating" the zip file.
- this.zipPlatform = platform;
- // the function to encode file names and comments.
- this.encodeFileName = encodeFileName;
- // Should we stream the content of the files ?
- this.streamFiles = streamFiles;
- // If `streamFiles` is false, we will need to accumulate the content of the
- // files to calculate sizes / crc32 (and write them *before* the content).
- // This boolean indicates if we are accumulating chunks (it will change a lot
- // during the lifetime of this worker).
- this.accumulate = false;
- // The buffer receiving chunks when accumulating content.
- this.contentBuffer = [];
- // The list of generated directory records.
- this.dirRecords = [];
- // The offset (in bytes) from the beginning of the zip file for the current source.
- this.currentSourceOffset = 0;
- // The total number of entries in this zip file.
- this.entriesCount = 0;
- // the name of the file currently being added, null when handling the end of the zip file.
- // Used for the emited metadata.
- this.currentFile = null;
-
- this._sources = [];
- }
- utils.inherits(ZipFileWorker, GenericWorker);
-
- /**
- * @see GenericWorker.push
- */
- ZipFileWorker.prototype.push = function (chunk) {
-
- var currentFilePercent = chunk.meta.percent || 0;
- var entriesCount = this.entriesCount;
- var remainingFiles = this._sources.length;
-
- if (this.accumulate) {
- this.contentBuffer.push(chunk);
- } else {
- this.bytesWritten += chunk.data.length;
-
- GenericWorker.prototype.push.call(this, {
- data: chunk.data,
- meta: {
- currentFile: this.currentFile,
- percent: entriesCount ? (currentFilePercent + 100 * (entriesCount - remainingFiles - 1)) / entriesCount : 100
- }
- });
- }
- };
-
- /**
- * The worker started a new source (an other worker).
- * @param {Object} streamInfo the streamInfo object from the new source.
- */
- ZipFileWorker.prototype.openedSource = function (streamInfo) {
- this.currentSourceOffset = this.bytesWritten;
- this.currentFile = streamInfo['file'].name;
-
- var streamedContent = this.streamFiles && !streamInfo['file'].dir;
-
- // don't stream folders (because they don't have any content)
- if (streamedContent) {
- var record = generateZipParts(streamInfo, streamedContent, false, this.currentSourceOffset, this.zipPlatform, this.encodeFileName);
- this.push({
- data: record.fileRecord,
- meta: { percent: 0 }
- });
- } else {
- // we need to wait for the whole file before pushing anything
- this.accumulate = true;
- }
- };
-
- /**
- * The worker finished a source (an other worker).
- * @param {Object} streamInfo the streamInfo object from the finished source.
- */
- ZipFileWorker.prototype.closedSource = function (streamInfo) {
- this.accumulate = false;
- var streamedContent = this.streamFiles && !streamInfo['file'].dir;
- var record = generateZipParts(streamInfo, streamedContent, true, this.currentSourceOffset, this.zipPlatform, this.encodeFileName);
-
- this.dirRecords.push(record.dirRecord);
- if (streamedContent) {
- // after the streamed file, we put data descriptors
- this.push({
- data: generateDataDescriptors(streamInfo),
- meta: { percent: 100 }
- });
- } else {
- // the content wasn't streamed, we need to push everything now
- // first the file record, then the content
- this.push({
- data: record.fileRecord,
- meta: { percent: 0 }
- });
- while (this.contentBuffer.length) {
- this.push(this.contentBuffer.shift());
- }
- }
- this.currentFile = null;
- };
-
- /**
- * @see GenericWorker.flush
- */
- ZipFileWorker.prototype.flush = function () {
-
- var localDirLength = this.bytesWritten;
- for (var i = 0; i < this.dirRecords.length; i++) {
- this.push({
- data: this.dirRecords[i],
- meta: { percent: 100 }
- });
- }
- var centralDirLength = this.bytesWritten - localDirLength;
-
- var dirEnd = generateCentralDirectoryEnd(this.dirRecords.length, centralDirLength, localDirLength, this.zipComment, this.encodeFileName);
-
- this.push({
- data: dirEnd,
- meta: { percent: 100 }
- });
- };
-
- /**
- * Prepare the next source to be read.
- */
- ZipFileWorker.prototype.prepareNextSource = function () {
- this.previous = this._sources.shift();
- this.openedSource(this.previous.streamInfo);
- if (this.isPaused) {
- this.previous.pause();
- } else {
- this.previous.resume();
- }
- };
-
- /**
- * @see GenericWorker.registerPrevious
- */
- ZipFileWorker.prototype.registerPrevious = function (previous) {
- this._sources.push(previous);
- var self = this;
-
- previous.on('data', function (chunk) {
- self.processChunk(chunk);
- });
- previous.on('end', function () {
- self.closedSource(self.previous.streamInfo);
- if (self._sources.length) {
- self.prepareNextSource();
- } else {
- self.end();
- }
- });
- previous.on('error', function (e) {
- self.error(e);
- });
- return this;
- };
-
- /**
- * @see GenericWorker.resume
- */
- ZipFileWorker.prototype.resume = function () {
- if (!GenericWorker.prototype.resume.call(this)) {
- return false;
- }
-
- if (!this.previous && this._sources.length) {
- this.prepareNextSource();
- return true;
- }
- if (!this.previous && !this._sources.length && !this.generatedError) {
- this.end();
- return true;
- }
- };
-
- /**
- * @see GenericWorker.error
- */
- ZipFileWorker.prototype.error = function (e) {
- var sources = this._sources;
- if (!GenericWorker.prototype.error.call(this, e)) {
- return false;
- }
- for (var i = 0; i < sources.length; i++) {
- try {
- sources[i].error(e);
- } catch (e) {
- // the `error` exploded, nothing to do
- }
- }
- return true;
- };
-
- /**
- * @see GenericWorker.lock
- */
- ZipFileWorker.prototype.lock = function () {
- GenericWorker.prototype.lock.call(this);
- var sources = this._sources;
- for (var i = 0; i < sources.length; i++) {
- sources[i].lock();
- }
- };
-
- module.exports = ZipFileWorker;
- }, { "../crc32": 4, "../signature": 23, "../stream/GenericWorker": 28, "../utf8": 31, "../utils": 32 }], 9: [function (require, module, exports) {
- 'use strict';
-
- var compressions = require('../compressions');
- var ZipFileWorker = require('./ZipFileWorker');
-
- /**
- * Find the compression to use.
- * @param {String} fileCompression the compression defined at the file level, if any.
- * @param {String} zipCompression the compression defined at the load() level.
- * @return {Object} the compression object to use.
- */
- var getCompression = function getCompression(fileCompression, zipCompression) {
-
- var compressionName = fileCompression || zipCompression;
- var compression = compressions[compressionName];
- if (!compression) {
- throw new Error(compressionName + " is not a valid compression method !");
- }
- return compression;
- };
-
- /**
- * Create a worker to generate a zip file.
- * @param {JSZip} zip the JSZip instance at the right root level.
- * @param {Object} options to generate the zip file.
- * @param {String} comment the comment to use.
- */
- exports.generateWorker = function (zip, options, comment) {
-
- var zipFileWorker = new ZipFileWorker(options.streamFiles, comment, options.platform, options.encodeFileName);
- var entriesCount = 0;
- try {
-
- zip.forEach(function (relativePath, file) {
- entriesCount++;
- var compression = getCompression(file.options.compression, options.compression);
- var compressionOptions = file.options.compressionOptions || options.compressionOptions || {};
- var dir = file.dir,
- date = file.date;
-
- file._compressWorker(compression, compressionOptions).withStreamInfo("file", {
- name: relativePath,
- dir: dir,
- date: date,
- comment: file.comment || "",
- unixPermissions: file.unixPermissions,
- dosPermissions: file.dosPermissions
- }).pipe(zipFileWorker);
- });
- zipFileWorker.entriesCount = entriesCount;
- } catch (e) {
- zipFileWorker.error(e);
- }
-
- return zipFileWorker;
- };
- }, { "../compressions": 3, "./ZipFileWorker": 8 }], 10: [function (require, module, exports) {
- 'use strict';
-
- /**
- * Representation a of zip file in js
- * @constructor
- */
-
- function JSZip() {
- // if this constructor is used without `new`, it adds `new` before itself:
- if (!(this instanceof JSZip)) {
- return new JSZip();
- }
-
- if (arguments.length) {
- throw new Error("The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.");
- }
-
- // object containing the files :
- // {
- // "folder/" : {...},
- // "folder/data.txt" : {...}
- // }
- this.files = {};
-
- this.comment = null;
-
- // Where we are in the hierarchy
- this.root = "";
- this.clone = function () {
- var newObj = new JSZip();
- for (var i in this) {
- if (typeof this[i] !== "function") {
- newObj[i] = this[i];
- }
- }
- return newObj;
- };
- }
- JSZip.prototype = require('./object');
- JSZip.prototype.loadAsync = require('./load');
- JSZip.support = require('./support');
- JSZip.defaults = require('./defaults');
-
- // TODO find a better way to handle this version,
- // a require('package.json').version doesn't work with webpack, see #327
- JSZip.version = "3.1.5";
-
- JSZip.loadAsync = function (content, options) {
- return new JSZip().loadAsync(content, options);
- };
-
- JSZip.external = require("./external");
- module.exports = JSZip;
- }, { "./defaults": 5, "./external": 6, "./load": 11, "./object": 15, "./support": 30 }], 11: [function (require, module, exports) {
- 'use strict';
-
- var utils = require('./utils');
- var external = require("./external");
- var utf8 = require('./utf8');
- var utils = require('./utils');
- var ZipEntries = require('./zipEntries');
- var Crc32Probe = require('./stream/Crc32Probe');
- var nodejsUtils = require("./nodejsUtils");
-
- /**
- * Check the CRC32 of an entry.
- * @param {ZipEntry} zipEntry the zip entry to check.
- * @return {Promise} the result.
- */
- function checkEntryCRC32(zipEntry) {
- return new external.Promise(function (resolve, reject) {
- var worker = zipEntry.decompressed.getContentWorker().pipe(new Crc32Probe());
- worker.on("error", function (e) {
- reject(e);
- }).on("end", function () {
- if (worker.streamInfo.crc32 !== zipEntry.decompressed.crc32) {
- reject(new Error("Corrupted zip : CRC32 mismatch"));
- } else {
- resolve();
- }
- }).resume();
- });
- }
-
- module.exports = function (data, options) {
- var zip = this;
- options = utils.extend(options || {}, {
- base64: false,
- checkCRC32: false,
- optimizedBinaryString: false,
- createFolders: false,
- decodeFileName: utf8.utf8decode
- });
-
- if (nodejsUtils.isNode && nodejsUtils.isStream(data)) {
- return external.Promise.reject(new Error("JSZip can't accept a stream when loading a zip file."));
- }
-
- return utils.prepareContent("the loaded zip file", data, true, options.optimizedBinaryString, options.base64).then(function (data) {
- var zipEntries = new ZipEntries(options);
- zipEntries.load(data);
- return zipEntries;
- }).then(function checkCRC32(zipEntries) {
- var promises = [external.Promise.resolve(zipEntries)];
- var files = zipEntries.files;
- if (options.checkCRC32) {
- for (var i = 0; i < files.length; i++) {
- promises.push(checkEntryCRC32(files[i]));
- }
- }
- return external.Promise.all(promises);
- }).then(function addFiles(results) {
- var zipEntries = results.shift();
- var files = zipEntries.files;
- for (var i = 0; i < files.length; i++) {
- var input = files[i];
- zip.file(input.fileNameStr, input.decompressed, {
- binary: true,
- optimizedBinaryString: true,
- date: input.date,
- dir: input.dir,
- comment: input.fileCommentStr.length ? input.fileCommentStr : null,
- unixPermissions: input.unixPermissions,
- dosPermissions: input.dosPermissions,
- createFolders: options.createFolders
- });
- }
- if (zipEntries.zipComment.length) {
- zip.comment = zipEntries.zipComment;
- }
-
- return zip;
- });
- };
- }, { "./external": 6, "./nodejsUtils": 14, "./stream/Crc32Probe": 25, "./utf8": 31, "./utils": 32, "./zipEntries": 33 }], 12: [function (require, module, exports) {
- "use strict";
-
- var utils = require('../utils');
- var GenericWorker = require('../stream/GenericWorker');
-
- /**
- * A worker that use a nodejs stream as source.
- * @constructor
- * @param {String} filename the name of the file entry for this stream.
- * @param {Readable} stream the nodejs stream.
- */
- function NodejsStreamInputAdapter(filename, stream) {
- GenericWorker.call(this, "Nodejs stream input adapter for " + filename);
- this._upstreamEnded = false;
- this._bindStream(stream);
- }
-
- utils.inherits(NodejsStreamInputAdapter, GenericWorker);
-
- /**
- * Prepare the stream and bind the callbacks on it.
- * Do this ASAP on node 0.10 ! A lazy binding doesn't always work.
- * @param {Stream} stream the nodejs stream to use.
- */
- NodejsStreamInputAdapter.prototype._bindStream = function (stream) {
- var self = this;
- this._stream = stream;
- stream.pause();
- stream.on("data", function (chunk) {
- self.push({
- data: chunk,
- meta: {
- percent: 0
- }
- });
- }).on("error", function (e) {
- if (self.isPaused) {
- this.generatedError = e;
- } else {
- self.error(e);
- }
- }).on("end", function () {
- if (self.isPaused) {
- self._upstreamEnded = true;
- } else {
- self.end();
- }
- });
- };
- NodejsStreamInputAdapter.prototype.pause = function () {
- if (!GenericWorker.prototype.pause.call(this)) {
- return false;
- }
- this._stream.pause();
- return true;
- };
- NodejsStreamInputAdapter.prototype.resume = function () {
- if (!GenericWorker.prototype.resume.call(this)) {
- return false;
- }
-
- if (this._upstreamEnded) {
- this.end();
- } else {
- this._stream.resume();
- }
-
- return true;
- };
-
- module.exports = NodejsStreamInputAdapter;
- }, { "../stream/GenericWorker": 28, "../utils": 32 }], 13: [function (require, module, exports) {
- 'use strict';
-
- var Readable = require('readable-stream').Readable;
-
- var utils = require('../utils');
- utils.inherits(NodejsStreamOutputAdapter, Readable);
-
- /**
- * A nodejs stream using a worker as source.
- * @see the SourceWrapper in http://nodejs.org/api/stream.html
- * @constructor
- * @param {StreamHelper} helper the helper wrapping the worker
- * @param {Object} options the nodejs stream options
- * @param {Function} updateCb the update callback.
- */
- function NodejsStreamOutputAdapter(helper, options, updateCb) {
- Readable.call(this, options);
- this._helper = helper;
-
- var self = this;
- helper.on("data", function (data, meta) {
- if (!self.push(data)) {
- self._helper.pause();
- }
- if (updateCb) {
- updateCb(meta);
- }
- }).on("error", function (e) {
- self.emit('error', e);
- }).on("end", function () {
- self.push(null);
- });
- }
-
- NodejsStreamOutputAdapter.prototype._read = function () {
- this._helper.resume();
- };
-
- module.exports = NodejsStreamOutputAdapter;
- }, { "../utils": 32, "readable-stream": 16 }], 14: [function (require, module, exports) {
- 'use strict';
-
- module.exports = {
- /**
- * True if this is running in Nodejs, will be undefined in a browser.
- * In a browser, browserify won't include this file and the whole module
- * will be resolved an empty object.
- */
- isNode: typeof Buffer !== "undefined",
- /**
- * Create a new nodejs Buffer from an existing content.
- * @param {Object} data the data to pass to the constructor.
- * @param {String} encoding the encoding to use.
- * @return {Buffer} a new Buffer.
- */
- newBufferFrom: function newBufferFrom(data, encoding) {
- // XXX We can't use `Buffer.from` which comes from `Uint8Array.from`
- // in nodejs v4 (< v.4.5). It's not the expected implementation (and
- // has a different signature).
- // see https://github.com/nodejs/node/issues/8053
- // A condition on nodejs' version won't solve the issue as we don't
- // control the Buffer polyfills that may or may not be used.
- return new Buffer(data, encoding);
- },
- /**
- * Create a new nodejs Buffer with the specified size.
- * @param {Integer} size the size of the buffer.
- * @return {Buffer} a new Buffer.
- */
- allocBuffer: function allocBuffer(size) {
- if (Buffer.alloc) {
- return Buffer.alloc(size);
- } else {
- return new Buffer(size);
- }
- },
- /**
- * Find out if an object is a Buffer.
- * @param {Object} b the object to test.
- * @return {Boolean} true if the object is a Buffer, false otherwise.
- */
- isBuffer: function isBuffer(b) {
- return Buffer.isBuffer(b);
- },
-
- isStream: function isStream(obj) {
- return obj && typeof obj.on === "function" && typeof obj.pause === "function" && typeof obj.resume === "function";
- }
- };
- }, {}], 15: [function (require, module, exports) {
- 'use strict';
-
- var utf8 = require('./utf8');
- var utils = require('./utils');
- var GenericWorker = require('./stream/GenericWorker');
- var StreamHelper = require('./stream/StreamHelper');
- var defaults = require('./defaults');
- var CompressedObject = require('./compressedObject');
- var ZipObject = require('./zipObject');
- var generate = require("./generate");
- var nodejsUtils = require("./nodejsUtils");
- var NodejsStreamInputAdapter = require("./nodejs/NodejsStreamInputAdapter");
-
- /**
- * Add a file in the current folder.
- * @private
- * @param {string} name the name of the file
- * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data of the file
- * @param {Object} originalOptions the options of the file
- * @return {Object} the new file.
- */
- var fileAdd = function fileAdd(name, data, originalOptions) {
- // be sure sub folders exist
- var dataType = utils.getTypeOf(data),
- parent;
-
- /*
- * Correct options.
- */
-
- var o = utils.extend(originalOptions || {}, defaults);
- o.date = o.date || new Date();
- if (o.compression !== null) {
- o.compression = o.compression.toUpperCase();
- }
-
- if (typeof o.unixPermissions === "string") {
- o.unixPermissions = parseInt(o.unixPermissions, 8);
- }
-
- // UNX_IFDIR 0040000 see zipinfo.c
- if (o.unixPermissions && o.unixPermissions & 0x4000) {
- o.dir = true;
- }
- // Bit 4 Directory
- if (o.dosPermissions && o.dosPermissions & 0x0010) {
- o.dir = true;
- }
-
- if (o.dir) {
- name = forceTrailingSlash(name);
- }
- if (o.createFolders && (parent = parentFolder(name))) {
- folderAdd.call(this, parent, true);
- }
-
- var isUnicodeString = dataType === "string" && o.binary === false && o.base64 === false;
- if (!originalOptions || typeof originalOptions.binary === "undefined") {
- o.binary = !isUnicodeString;
- }
-
- var isCompressedEmpty = data instanceof CompressedObject && data.uncompressedSize === 0;
-
- if (isCompressedEmpty || o.dir || !data || data.length === 0) {
- o.base64 = false;
- o.binary = true;
- data = "";
- o.compression = "STORE";
- dataType = "string";
- }
-
- /*
- * Convert content to fit.
- */
-
- var zipObjectContent = null;
- if (data instanceof CompressedObject || data instanceof GenericWorker) {
- zipObjectContent = data;
- } else if (nodejsUtils.isNode && nodejsUtils.isStream(data)) {
- zipObjectContent = new NodejsStreamInputAdapter(name, data);
- } else {
- zipObjectContent = utils.prepareContent(name, data, o.binary, o.optimizedBinaryString, o.base64);
- }
-
- var object = new ZipObject(name, zipObjectContent, o);
- this.files[name] = object;
- /*
- TODO: we can't throw an exception because we have async promises
- (we can have a promise of a Date() for example) but returning a
- promise is useless because file(name, data) returns the JSZip
- object for chaining. Should we break that to allow the user
- to catch the error ?
- return external.Promise.resolve(zipObjectContent)
- .then(function () {
- return object;
- });
- */
- };
-
- /**
- * Find the parent folder of the path.
- * @private
- * @param {string} path the path to use
- * @return {string} the parent folder, or ""
- */
- var parentFolder = function parentFolder(path) {
- if (path.slice(-1) === '/') {
- path = path.substring(0, path.length - 1);
- }
- var lastSlash = path.lastIndexOf('/');
- return lastSlash > 0 ? path.substring(0, lastSlash) : "";
- };
-
- /**
- * Returns the path with a slash at the end.
- * @private
- * @param {String} path the path to check.
- * @return {String} the path with a trailing slash.
- */
- var forceTrailingSlash = function forceTrailingSlash(path) {
- // Check the name ends with a /
- if (path.slice(-1) !== "/") {
- path += "/"; // IE doesn't like substr(-1)
- }
- return path;
- };
-
- /**
- * Add a (sub) folder in the current folder.
- * @private
- * @param {string} name the folder's name
- * @param {boolean=} [createFolders] If true, automatically create sub
- * folders. Defaults to false.
- * @return {Object} the new folder.
- */
- var folderAdd = function folderAdd(name, createFolders) {
- createFolders = typeof createFolders !== 'undefined' ? createFolders : defaults.createFolders;
-
- name = forceTrailingSlash(name);
-
- // Does this folder already exist?
- if (!this.files[name]) {
- fileAdd.call(this, name, null, {
- dir: true,
- createFolders: createFolders
- });
- }
- return this.files[name];
- };
-
- /**
- * Cross-window, cross-Node-context regular expression detection
- * @param {Object} object Anything
- * @return {Boolean} true if the object is a regular expression,
- * false otherwise
- */
- function isRegExp(object) {
- return Object.prototype.toString.call(object) === "[object RegExp]";
- }
-
- // return the actual prototype of JSZip
- var out = {
- /**
- * @see loadAsync
- */
- load: function load() {
- throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.");
- },
-
- /**
- * Call a callback function for each entry at this folder level.
- * @param {Function} cb the callback function:
- * function (relativePath, file) {...}
- * It takes 2 arguments : the relative path and the file.
- */
- forEach: function forEach(cb) {
- var filename, relativePath, file;
- for (filename in this.files) {
- if (!this.files.hasOwnProperty(filename)) {
- continue;
- }
- file = this.files[filename];
- relativePath = filename.slice(this.root.length, filename.length);
- if (relativePath && filename.slice(0, this.root.length) === this.root) {
- // the file is in the current root
- cb(relativePath, file); // TODO reverse the parameters ? need to be clean AND consistent with the filter search fn...
- }
- }
- },
-
- /**
- * Filter nested files/folders with the specified function.
- * @param {Function} search the predicate to use :
- * function (relativePath, file) {...}
- * It takes 2 arguments : the relative path and the file.
- * @return {Array} An array of matching elements.
- */
- filter: function filter(search) {
- var result = [];
- this.forEach(function (relativePath, entry) {
- if (search(relativePath, entry)) {
- // the file matches the function
- result.push(entry);
- }
- });
- return result;
- },
-
- /**
- * Add a file to the zip file, or search a file.
- * @param {string|RegExp} name The name of the file to add (if data is defined),
- * the name of the file to find (if no data) or a regex to match files.
- * @param {String|ArrayBuffer|Uint8Array|Buffer} data The file data, either raw or base64 encoded
- * @param {Object} o File options
- * @return {JSZip|Object|Array} this JSZip object (when adding a file),
- * a file (when searching by string) or an array of files (when searching by regex).
- */
- file: function file(name, data, o) {
- if (arguments.length === 1) {
- if (isRegExp(name)) {
- var regexp = name;
- return this.filter(function (relativePath, file) {
- return !file.dir && regexp.test(relativePath);
- });
- } else {
- // text
- var obj = this.files[this.root + name];
- if (obj && !obj.dir) {
- return obj;
- } else {
- return null;
- }
- }
- } else {
- // more than one argument : we have data !
- name = this.root + name;
- fileAdd.call(this, name, data, o);
- }
- return this;
- },
-
- /**
- * Add a directory to the zip file, or search.
- * @param {String|RegExp} arg The name of the directory to add, or a regex to search folders.
- * @return {JSZip} an object with the new directory as the root, or an array containing matching folders.
- */
- folder: function folder(arg) {
- if (!arg) {
- return this;
- }
-
- if (isRegExp(arg)) {
- return this.filter(function (relativePath, file) {
- return file.dir && arg.test(relativePath);
- });
- }
-
- // else, name is a new folder
- var name = this.root + arg;
- var newFolder = folderAdd.call(this, name);
-
- // Allow chaining by returning a new object with this folder as the root
- var ret = this.clone();
- ret.root = newFolder.name;
- return ret;
- },
-
- /**
- * Delete a file, or a directory and all sub-files, from the zip
- * @param {string} name the name of the file to delete
- * @return {JSZip} this JSZip object
- */
- remove: function remove(name) {
- name = this.root + name;
- var file = this.files[name];
- if (!file) {
- // Look for any folders
- if (name.slice(-1) !== "/") {
- name += "/";
- }
- file = this.files[name];
- }
-
- if (file && !file.dir) {
- // file
- delete this.files[name];
- } else {
- // maybe a folder, delete recursively
- var kids = this.filter(function (relativePath, file) {
- return file.name.slice(0, name.length) === name;
- });
- for (var i = 0; i < kids.length; i++) {
- delete this.files[kids[i].name];
- }
- }
-
- return this;
- },
-
- /**
- * Generate the complete zip file
- * @param {Object} options the options to generate the zip file :
- * - compression, "STORE" by default.
- * - type, "base64" by default. Values are : string, base64, uint8array, arraybuffer, blob.
- * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the zip file
- */
- generate: function generate(options) {
- throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.");
- },
-
- /**
- * Generate the complete zip file as an internal stream.
- * @param {Object} options the options to generate the zip file :
- * - compression, "STORE" by default.
- * - type, "base64" by default. Values are : string, base64, uint8array, arraybuffer, blob.
- * @return {StreamHelper} the streamed zip file.
- */
- generateInternalStream: function generateInternalStream(options) {
- var worker,
- opts = {};
- try {
- opts = utils.extend(options || {}, {
- streamFiles: false,
- compression: "STORE",
- compressionOptions: null,
- type: "",
- platform: "DOS",
- comment: null,
- mimeType: 'application/zip',
- encodeFileName: utf8.utf8encode
- });
-
- opts.type = opts.type.toLowerCase();
- opts.compression = opts.compression.toUpperCase();
-
- // "binarystring" is prefered but the internals use "string".
- if (opts.type === "binarystring") {
- opts.type = "string";
- }
-
- if (!opts.type) {
- throw new Error("No output type specified.");
- }
-
- utils.checkSupport(opts.type);
-
- // accept nodejs `process.platform`
- if (opts.platform === 'darwin' || opts.platform === 'freebsd' || opts.platform === 'linux' || opts.platform === 'sunos') {
- opts.platform = "UNIX";
- }
- if (opts.platform === 'win32') {
- opts.platform = "DOS";
- }
-
- var comment = opts.comment || this.comment || "";
- worker = generate.generateWorker(this, opts, comment);
- } catch (e) {
- worker = new GenericWorker("error");
- worker.error(e);
- }
- return new StreamHelper(worker, opts.type || "string", opts.mimeType);
- },
- /**
- * Generate the complete zip file asynchronously.
- * @see generateInternalStream
- */
- generateAsync: function generateAsync(options, onUpdate) {
- return this.generateInternalStream(options).accumulate(onUpdate);
- },
- /**
- * Generate the complete zip file asynchronously.
- * @see generateInternalStream
- */
- generateNodeStream: function generateNodeStream(options, onUpdate) {
- options = options || {};
- if (!options.type) {
- options.type = "nodebuffer";
- }
- return this.generateInternalStream(options).toNodejsStream(onUpdate);
- }
- };
- module.exports = out;
- }, { "./compressedObject": 2, "./defaults": 5, "./generate": 9, "./nodejs/NodejsStreamInputAdapter": 12, "./nodejsUtils": 14, "./stream/GenericWorker": 28, "./stream/StreamHelper": 29, "./utf8": 31, "./utils": 32, "./zipObject": 35 }], 16: [function (require, module, exports) {
- /*
- * This file is used by module bundlers (browserify/webpack/etc) when
- * including a stream implementation. We use "readable-stream" to get a
- * consistent behavior between nodejs versions but bundlers often have a shim
- * for "stream". Using this shim greatly improve the compatibility and greatly
- * reduce the final size of the bundle (only one stream implementation, not
- * two).
- */
- module.exports = require("stream");
- }, { "stream": undefined }], 17: [function (require, module, exports) {
- 'use strict';
-
- var DataReader = require('./DataReader');
- var utils = require('../utils');
-
- function ArrayReader(data) {
- DataReader.call(this, data);
- for (var i = 0; i < this.data.length; i++) {
- data[i] = data[i] & 0xFF;
- }
- }
- utils.inherits(ArrayReader, DataReader);
- /**
- * @see DataReader.byteAt
- */
- ArrayReader.prototype.byteAt = function (i) {
- return this.data[this.zero + i];
- };
- /**
- * @see DataReader.lastIndexOfSignature
- */
- ArrayReader.prototype.lastIndexOfSignature = function (sig) {
- var sig0 = sig.charCodeAt(0),
- sig1 = sig.charCodeAt(1),
- sig2 = sig.charCodeAt(2),
- sig3 = sig.charCodeAt(3);
- for (var i = this.length - 4; i >= 0; --i) {
- if (this.data[i] === sig0 && this.data[i + 1] === sig1 && this.data[i + 2] === sig2 && this.data[i + 3] === sig3) {
- return i - this.zero;
- }
- }
-
- return -1;
- };
- /**
- * @see DataReader.readAndCheckSignature
- */
- ArrayReader.prototype.readAndCheckSignature = function (sig) {
- var sig0 = sig.charCodeAt(0),
- sig1 = sig.charCodeAt(1),
- sig2 = sig.charCodeAt(2),
- sig3 = sig.charCodeAt(3),
- data = this.readData(4);
- return sig0 === data[0] && sig1 === data[1] && sig2 === data[2] && sig3 === data[3];
- };
- /**
- * @see DataReader.readData
- */
- ArrayReader.prototype.readData = function (size) {
- this.checkOffset(size);
- if (size === 0) {
- return [];
- }
- var result = this.data.slice(this.zero + this.index, this.zero + this.index + size);
- this.index += size;
- return result;
- };
- module.exports = ArrayReader;
- }, { "../utils": 32, "./DataReader": 18 }], 18: [function (require, module, exports) {
- 'use strict';
-
- var utils = require('../utils');
-
- function DataReader(data) {
- this.data = data; // type : see implementation
- this.length = data.length;
- this.index = 0;
- this.zero = 0;
- }
- DataReader.prototype = {
- /**
- * Check that the offset will not go too far.
- * @param {string} offset the additional offset to check.
- * @throws {Error} an Error if the offset is out of bounds.
- */
- checkOffset: function checkOffset(offset) {
- this.checkIndex(this.index + offset);
- },
- /**
- * Check that the specified index will not be too far.
- * @param {string} newIndex the index to check.
- * @throws {Error} an Error if the index is out of bounds.
- */
- checkIndex: function checkIndex(newIndex) {
- if (this.length < this.zero + newIndex || newIndex < 0) {
- throw new Error("End of data reached (data length = " + this.length + ", asked index = " + newIndex + "). Corrupted zip ?");
- }
- },
- /**
- * Change the index.
- * @param {number} newIndex The new index.
- * @throws {Error} if the new index is out of the data.
- */
- setIndex: function setIndex(newIndex) {
- this.checkIndex(newIndex);
- this.index = newIndex;
- },
- /**
- * Skip the next n bytes.
- * @param {number} n the number of bytes to skip.
- * @throws {Error} if the new index is out of the data.
- */
- skip: function skip(n) {
- this.setIndex(this.index + n);
- },
- /**
- * Get the byte at the specified index.
- * @param {number} i the index to use.
- * @return {number} a byte.
- */
- byteAt: function byteAt(i) {
- // see implementations
- },
- /**
- * Get the next number with a given byte size.
- * @param {number} size the number of bytes to read.
- * @return {number} the corresponding number.
- */
- readInt: function readInt(size) {
- var result = 0,
- i;
- this.checkOffset(size);
- for (i = this.index + size - 1; i >= this.index; i--) {
- result = (result << 8) + this.byteAt(i);
- }
- this.index += size;
- return result;
- },
- /**
- * Get the next string with a given byte size.
- * @param {number} size the number of bytes to read.
- * @return {string} the corresponding string.
- */
- readString: function readString(size) {
- return utils.transformTo("string", this.readData(size));
- },
- /**
- * Get raw data without conversion, bytes.
- * @param {number} size the number of bytes to read.
- * @return {Object} the raw data, implementation specific.
- */
- readData: function readData(size) {
- // see implementations
- },
- /**
- * Find the last occurence of a zip signature (4 bytes).
- * @param {string} sig the signature to find.
- * @return {number} the index of the last occurence, -1 if not found.
- */
- lastIndexOfSignature: function lastIndexOfSignature(sig) {
- // see implementations
- },
- /**
- * Read the signature (4 bytes) at the current position and compare it with sig.
- * @param {string} sig the expected signature
- * @return {boolean} true if the signature matches, false otherwise.
- */
- readAndCheckSignature: function readAndCheckSignature(sig) {
- // see implementations
- },
- /**
- * Get the next date.
- * @return {Date} the date.
- */
- readDate: function readDate() {
- var dostime = this.readInt(4);
- return new Date(Date.UTC((dostime >> 25 & 0x7f) + 1980, // year
- (dostime >> 21 & 0x0f) - 1, // month
- dostime >> 16 & 0x1f, // day
- dostime >> 11 & 0x1f, // hour
- dostime >> 5 & 0x3f, // minute
- (dostime & 0x1f) << 1)); // second
- }
- };
- module.exports = DataReader;
- }, { "../utils": 32 }], 19: [function (require, module, exports) {
- 'use strict';
-
- var Uint8ArrayReader = require('./Uint8ArrayReader');
- var utils = require('../utils');
-
- function NodeBufferReader(data) {
- Uint8ArrayReader.call(this, data);
- }
- utils.inherits(NodeBufferReader, Uint8ArrayReader);
-
- /**
- * @see DataReader.readData
- */
- NodeBufferReader.prototype.readData = function (size) {
- this.checkOffset(size);
- var result = this.data.slice(this.zero + this.index, this.zero + this.index + size);
- this.index += size;
- return result;
- };
- module.exports = NodeBufferReader;
- }, { "../utils": 32, "./Uint8ArrayReader": 21 }], 20: [function (require, module, exports) {
- 'use strict';
-
- var DataReader = require('./DataReader');
- var utils = require('../utils');
-
- function StringReader(data) {
- DataReader.call(this, data);
- }
- utils.inherits(StringReader, DataReader);
- /**
- * @see DataReader.byteAt
- */
- StringReader.prototype.byteAt = function (i) {
- return this.data.charCodeAt(this.zero + i);
- };
- /**
- * @see DataReader.lastIndexOfSignature
- */
- StringReader.prototype.lastIndexOfSignature = function (sig) {
- return this.data.lastIndexOf(sig) - this.zero;
- };
- /**
- * @see DataReader.readAndCheckSignature
- */
- StringReader.prototype.readAndCheckSignature = function (sig) {
- var data = this.readData(4);
- return sig === data;
- };
- /**
- * @see DataReader.readData
- */
- StringReader.prototype.readData = function (size) {
- this.checkOffset(size);
- // this will work because the constructor applied the "& 0xff" mask.
- var result = this.data.slice(this.zero + this.index, this.zero + this.index + size);
- this.index += size;
- return result;
- };
- module.exports = StringReader;
- }, { "../utils": 32, "./DataReader": 18 }], 21: [function (require, module, exports) {
- 'use strict';
-
- var ArrayReader = require('./ArrayReader');
- var utils = require('../utils');
-
- function Uint8ArrayReader(data) {
- ArrayReader.call(this, data);
- }
- utils.inherits(Uint8ArrayReader, ArrayReader);
- /**
- * @see DataReader.readData
- */
- Uint8ArrayReader.prototype.readData = function (size) {
- this.checkOffset(size);
- if (size === 0) {
- // in IE10, when using subarray(idx, idx), we get the array [0x00] instead of [].
- return new Uint8Array(0);
- }
- var result = this.data.subarray(this.zero + this.index, this.zero + this.index + size);
- this.index += size;
- return result;
- };
- module.exports = Uint8ArrayReader;
- }, { "../utils": 32, "./ArrayReader": 17 }], 22: [function (require, module, exports) {
- 'use strict';
-
- var utils = require('../utils');
- var support = require('../support');
- var ArrayReader = require('./ArrayReader');
- var StringReader = require('./StringReader');
- var NodeBufferReader = require('./NodeBufferReader');
- var Uint8ArrayReader = require('./Uint8ArrayReader');
-
- /**
- * Create a reader adapted to the data.
- * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data to read.
- * @return {DataReader} the data reader.
- */
- module.exports = function (data) {
- var type = utils.getTypeOf(data);
- utils.checkSupport(type);
- if (type === "string" && !support.uint8array) {
- return new StringReader(data);
- }
- if (type === "nodebuffer") {
- return new NodeBufferReader(data);
- }
- if (support.uint8array) {
- return new Uint8ArrayReader(utils.transformTo("uint8array", data));
- }
- return new ArrayReader(utils.transformTo("array", data));
- };
- }, { "../support": 30, "../utils": 32, "./ArrayReader": 17, "./NodeBufferReader": 19, "./StringReader": 20, "./Uint8ArrayReader": 21 }], 23: [function (require, module, exports) {
- 'use strict';
-
- exports.LOCAL_FILE_HEADER = "PK\x03\x04";
- exports.CENTRAL_FILE_HEADER = "PK\x01\x02";
- exports.CENTRAL_DIRECTORY_END = "PK\x05\x06";
- exports.ZIP64_CENTRAL_DIRECTORY_LOCATOR = "PK\x06\x07";
- exports.ZIP64_CENTRAL_DIRECTORY_END = "PK\x06\x06";
- exports.DATA_DESCRIPTOR = "PK\x07\x08";
- }, {}], 24: [function (require, module, exports) {
- 'use strict';
-
- var GenericWorker = require('./GenericWorker');
- var utils = require('../utils');
-
- /**
- * A worker which convert chunks to a specified type.
- * @constructor
- * @param {String} destType the destination type.
- */
- function ConvertWorker(destType) {
- GenericWorker.call(this, "ConvertWorker to " + destType);
- this.destType = destType;
- }
- utils.inherits(ConvertWorker, GenericWorker);
-
- /**
- * @see GenericWorker.processChunk
- */
- ConvertWorker.prototype.processChunk = function (chunk) {
- this.push({
- data: utils.transformTo(this.destType, chunk.data),
- meta: chunk.meta
- });
- };
- module.exports = ConvertWorker;
- }, { "../utils": 32, "./GenericWorker": 28 }], 25: [function (require, module, exports) {
- 'use strict';
-
- var GenericWorker = require('./GenericWorker');
- var crc32 = require('../crc32');
- var utils = require('../utils');
-
- /**
- * A worker which calculate the crc32 of the data flowing through.
- * @constructor
- */
- function Crc32Probe() {
- GenericWorker.call(this, "Crc32Probe");
- this.withStreamInfo("crc32", 0);
- }
- utils.inherits(Crc32Probe, GenericWorker);
-
- /**
- * @see GenericWorker.processChunk
- */
- Crc32Probe.prototype.processChunk = function (chunk) {
- this.streamInfo.crc32 = crc32(chunk.data, this.streamInfo.crc32 || 0);
- this.push(chunk);
- };
- module.exports = Crc32Probe;
- }, { "../crc32": 4, "../utils": 32, "./GenericWorker": 28 }], 26: [function (require, module, exports) {
- 'use strict';
-
- var utils = require('../utils');
- var GenericWorker = require('./GenericWorker');
-
- /**
- * A worker which calculate the total length of the data flowing through.
- * @constructor
- * @param {String} propName the name used to expose the length
- */
- function DataLengthProbe(propName) {
- GenericWorker.call(this, "DataLengthProbe for " + propName);
- this.propName = propName;
- this.withStreamInfo(propName, 0);
- }
- utils.inherits(DataLengthProbe, GenericWorker);
-
- /**
- * @see GenericWorker.processChunk
- */
- DataLengthProbe.prototype.processChunk = function (chunk) {
- if (chunk) {
- var length = this.streamInfo[this.propName] || 0;
- this.streamInfo[this.propName] = length + chunk.data.length;
- }
- GenericWorker.prototype.processChunk.call(this, chunk);
- };
- module.exports = DataLengthProbe;
- }, { "../utils": 32, "./GenericWorker": 28 }], 27: [function (require, module, exports) {
- 'use strict';
-
- var utils = require('../utils');
- var GenericWorker = require('./GenericWorker');
-
- // the size of the generated chunks
- // TODO expose this as a public variable
- var DEFAULT_BLOCK_SIZE = 16 * 1024;
-
- /**
- * A worker that reads a content and emits chunks.
- * @constructor
- * @param {Promise} dataP the promise of the data to split
- */
- function DataWorker(dataP) {
- GenericWorker.call(this, "DataWorker");
- var self = this;
- this.dataIsReady = false;
- this.index = 0;
- this.max = 0;
- this.data = null;
- this.type = "";
-
- this._tickScheduled = false;
-
- dataP.then(function (data) {
- self.dataIsReady = true;
- self.data = data;
- self.max = data && data.length || 0;
- self.type = utils.getTypeOf(data);
- if (!self.isPaused) {
- self._tickAndRepeat();
- }
- }, function (e) {
- self.error(e);
- });
- }
-
- utils.inherits(DataWorker, GenericWorker);
-
- /**
- * @see GenericWorker.cleanUp
- */
- DataWorker.prototype.cleanUp = function () {
- GenericWorker.prototype.cleanUp.call(this);
- this.data = null;
- };
-
- /**
- * @see GenericWorker.resume
- */
- DataWorker.prototype.resume = function () {
- if (!GenericWorker.prototype.resume.call(this)) {
- return false;
- }
-
- if (!this._tickScheduled && this.dataIsReady) {
- this._tickScheduled = true;
- utils.delay(this._tickAndRepeat, [], this);
- }
- return true;
- };
-
- /**
- * Trigger a tick a schedule an other call to this function.
- */
- DataWorker.prototype._tickAndRepeat = function () {
- this._tickScheduled = false;
- if (this.isPaused || this.isFinished) {
- return;
- }
- this._tick();
- if (!this.isFinished) {
- utils.delay(this._tickAndRepeat, [], this);
- this._tickScheduled = true;
- }
- };
-
- /**
- * Read and push a chunk.
- */
- DataWorker.prototype._tick = function () {
-
- if (this.isPaused || this.isFinished) {
- return false;
- }
-
- var size = DEFAULT_BLOCK_SIZE;
- var data = null,
- nextIndex = Math.min(this.max, this.index + size);
- if (this.index >= this.max) {
- // EOF
- return this.end();
- } else {
- switch (this.type) {
- case "string":
- data = this.data.substring(this.index, nextIndex);
- break;
- case "uint8array":
- data = this.data.subarray(this.index, nextIndex);
- break;
- case "array":
- case "nodebuffer":
- data = this.data.slice(this.index, nextIndex);
- break;
- }
- this.index = nextIndex;
- return this.push({
- data: data,
- meta: {
- percent: this.max ? this.index / this.max * 100 : 0
- }
- });
- }
- };
-
- module.exports = DataWorker;
- }, { "../utils": 32, "./GenericWorker": 28 }], 28: [function (require, module, exports) {
- 'use strict';
-
- /**
- * A worker that does nothing but passing chunks to the next one. This is like
- * a nodejs stream but with some differences. On the good side :
- * - it works on IE 6-9 without any issue / polyfill
- * - it weights less than the full dependencies bundled with browserify
- * - it forwards errors (no need to declare an error handler EVERYWHERE)
- *
- * A chunk is an object with 2 attributes : `meta` and `data`. The former is an
- * object containing anything (`percent` for example), see each worker for more
- * details. The latter is the real data (String, Uint8Array, etc).
- *
- * @constructor
- * @param {String} name the name of the stream (mainly used for debugging purposes)
- */
-
- function GenericWorker(name) {
- // the name of the worker
- this.name = name || "default";
- // an object containing metadata about the workers chain
- this.streamInfo = {};
- // an error which happened when the worker was paused
- this.generatedError = null;
- // an object containing metadata to be merged by this worker into the general metadata
- this.extraStreamInfo = {};
- // true if the stream is paused (and should not do anything), false otherwise
- this.isPaused = true;
- // true if the stream is finished (and should not do anything), false otherwise
- this.isFinished = false;
- // true if the stream is locked to prevent further structure updates (pipe), false otherwise
- this.isLocked = false;
- // the event listeners
- this._listeners = {
- 'data': [],
- 'end': [],
- 'error': []
- };
- // the previous worker, if any
- this.previous = null;
- }
-
- GenericWorker.prototype = {
- /**
- * Push a chunk to the next workers.
- * @param {Object} chunk the chunk to push
- */
- push: function push(chunk) {
- this.emit("data", chunk);
- },
- /**
- * End the stream.
- * @return {Boolean} true if this call ended the worker, false otherwise.
- */
- end: function end() {
- if (this.isFinished) {
- return false;
- }
-
- this.flush();
- try {
- this.emit("end");
- this.cleanUp();
- this.isFinished = true;
- } catch (e) {
- this.emit("error", e);
- }
- return true;
- },
- /**
- * End the stream with an error.
- * @param {Error} e the error which caused the premature end.
- * @return {Boolean} true if this call ended the worker with an error, false otherwise.
- */
- error: function error(e) {
- if (this.isFinished) {
- return false;
- }
-
- if (this.isPaused) {
- this.generatedError = e;
- } else {
- this.isFinished = true;
-
- this.emit("error", e);
-
- // in the workers chain exploded in the middle of the chain,
- // the error event will go downward but we also need to notify
- // workers upward that there has been an error.
- if (this.previous) {
- this.previous.error(e);
- }
-
- this.cleanUp();
- }
- return true;
- },
- /**
- * Add a callback on an event.
- * @param {String} name the name of the event (data, end, error)
- * @param {Function} listener the function to call when the event is triggered
- * @return {GenericWorker} the current object for chainability
- */
- on: function on(name, listener) {
- this._listeners[name].push(listener);
- return this;
- },
- /**
- * Clean any references when a worker is ending.
- */
- cleanUp: function cleanUp() {
- this.streamInfo = this.generatedError = this.extraStreamInfo = null;
- this._listeners = [];
- },
- /**
- * Trigger an event. This will call registered callback with the provided arg.
- * @param {String} name the name of the event (data, end, error)
- * @param {Object} arg the argument to call the callback with.
- */
- emit: function emit(name, arg) {
- if (this._listeners[name]) {
- for (var i = 0; i < this._listeners[name].length; i++) {
- this._listeners[name][i].call(this, arg);
- }
- }
- },
- /**
- * Chain a worker with an other.
- * @param {Worker} next the worker receiving events from the current one.
- * @return {worker} the next worker for chainability
- */
- pipe: function pipe(next) {
- return next.registerPrevious(this);
- },
- /**
- * Same as `pipe` in the other direction.
- * Using an API with `pipe(next)` is very easy.
- * Implementing the API with the point of view of the next one registering
- * a source is easier, see the ZipFileWorker.
- * @param {Worker} previous the previous worker, sending events to this one
- * @return {Worker} the current worker for chainability
- */
- registerPrevious: function registerPrevious(previous) {
- if (this.isLocked) {
- throw new Error("The stream '" + this + "' has already been used.");
- }
-
- // sharing the streamInfo...
- this.streamInfo = previous.streamInfo;
- // ... and adding our own bits
- this.mergeStreamInfo();
- this.previous = previous;
- var self = this;
- previous.on('data', function (chunk) {
- self.processChunk(chunk);
- });
- previous.on('end', function () {
- self.end();
- });
- previous.on('error', function (e) {
- self.error(e);
- });
- return this;
- },
- /**
- * Pause the stream so it doesn't send events anymore.
- * @return {Boolean} true if this call paused the worker, false otherwise.
- */
- pause: function pause() {
- if (this.isPaused || this.isFinished) {
- return false;
- }
- this.isPaused = true;
-
- if (this.previous) {
- this.previous.pause();
- }
- return true;
- },
- /**
- * Resume a paused stream.
- * @return {Boolean} true if this call resumed the worker, false otherwise.
- */
- resume: function resume() {
- if (!this.isPaused || this.isFinished) {
- return false;
- }
- this.isPaused = false;
-
- // if true, the worker tried to resume but failed
- var withError = false;
- if (this.generatedError) {
- this.error(this.generatedError);
- withError = true;
- }
- if (this.previous) {
- this.previous.resume();
- }
-
- return !withError;
- },
- /**
- * Flush any remaining bytes as the stream is ending.
- */
- flush: function flush() {},
- /**
- * Process a chunk. This is usually the method overridden.
- * @param {Object} chunk the chunk to process.
- */
- processChunk: function processChunk(chunk) {
- this.push(chunk);
- },
- /**
- * Add a key/value to be added in the workers chain streamInfo once activated.
- * @param {String} key the key to use
- * @param {Object} value the associated value
- * @return {Worker} the current worker for chainability
- */
- withStreamInfo: function withStreamInfo(key, value) {
- this.extraStreamInfo[key] = value;
- this.mergeStreamInfo();
- return this;
- },
- /**
- * Merge this worker's streamInfo into the chain's streamInfo.
- */
- mergeStreamInfo: function mergeStreamInfo() {
- for (var key in this.extraStreamInfo) {
- if (!this.extraStreamInfo.hasOwnProperty(key)) {
- continue;
- }
- this.streamInfo[key] = this.extraStreamInfo[key];
- }
- },
-
- /**
- * Lock the stream to prevent further updates on the workers chain.
- * After calling this method, all calls to pipe will fail.
- */
- lock: function lock() {
- if (this.isLocked) {
- throw new Error("The stream '" + this + "' has already been used.");
- }
- this.isLocked = true;
- if (this.previous) {
- this.previous.lock();
- }
- },
-
- /**
- *
- * Pretty print the workers chain.
- */
- toString: function toString() {
- var me = "Worker " + this.name;
- if (this.previous) {
- return this.previous + " -> " + me;
- } else {
- return me;
- }
- }
- };
-
- module.exports = GenericWorker;
- }, {}], 29: [function (require, module, exports) {
- 'use strict';
-
- var utils = require('../utils');
- var ConvertWorker = require('./ConvertWorker');
- var GenericWorker = require('./GenericWorker');
- var base64 = require('../base64');
- var support = require("../support");
- var external = require("../external");
-
- var NodejsStreamOutputAdapter = null;
- if (support.nodestream) {
- try {
- NodejsStreamOutputAdapter = require('../nodejs/NodejsStreamOutputAdapter');
- } catch (e) {}
- }
-
- /**
- * Apply the final transformation of the data. If the user wants a Blob for
- * example, it's easier to work with an U8intArray and finally do the
- * ArrayBuffer/Blob conversion.
- * @param {String} type the name of the final type
- * @param {String|Uint8Array|Buffer} content the content to transform
- * @param {String} mimeType the mime type of the content, if applicable.
- * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the content in the right format.
- */
- function transformZipOutput(type, content, mimeType) {
- switch (type) {
- case "blob":
- return utils.newBlob(utils.transformTo("arraybuffer", content), mimeType);
- case "base64":
- return base64.encode(content);
- default:
- return utils.transformTo(type, content);
- }
- }
-
- /**
- * Concatenate an array of data of the given type.
- * @param {String} type the type of the data in the given array.
- * @param {Array} dataArray the array containing the data chunks to concatenate
- * @return {String|Uint8Array|Buffer} the concatenated data
- * @throws Error if the asked type is unsupported
- */
- function concat(type, dataArray) {
- var i,
- index = 0,
- res = null,
- totalLength = 0;
- for (i = 0; i < dataArray.length; i++) {
- totalLength += dataArray[i].length;
- }
- switch (type) {
- case "string":
- return dataArray.join("");
- case "array":
- return Array.prototype.concat.apply([], dataArray);
- case "uint8array":
- res = new Uint8Array(totalLength);
- for (i = 0; i < dataArray.length; i++) {
- res.set(dataArray[i], index);
- index += dataArray[i].length;
- }
- return res;
- case "nodebuffer":
- return Buffer.concat(dataArray);
- default:
- throw new Error("concat : unsupported type '" + type + "'");
- }
- }
-
- /**
- * Listen a StreamHelper, accumulate its content and concatenate it into a
- * complete block.
- * @param {StreamHelper} helper the helper to use.
- * @param {Function} updateCallback a callback called on each update. Called
- * with one arg :
- * - the metadata linked to the update received.
- * @return Promise the promise for the accumulation.
- */
- function _accumulate(helper, updateCallback) {
- return new external.Promise(function (resolve, reject) {
- var dataArray = [];
- var chunkType = helper._internalType,
- resultType = helper._outputType,
- mimeType = helper._mimeType;
- helper.on('data', function (data, meta) {
- dataArray.push(data);
- if (updateCallback) {
- updateCallback(meta);
- }
- }).on('error', function (err) {
- dataArray = [];
- reject(err);
- }).on('end', function () {
- try {
- var result = transformZipOutput(resultType, concat(chunkType, dataArray), mimeType);
- resolve(result);
- } catch (e) {
- reject(e);
- }
- dataArray = [];
- }).resume();
- });
- }
-
- /**
- * An helper to easily use workers outside of JSZip.
- * @constructor
- * @param {Worker} worker the worker to wrap
- * @param {String} outputType the type of data expected by the use
- * @param {String} mimeType the mime type of the content, if applicable.
- */
- function StreamHelper(worker, outputType, mimeType) {
- var internalType = outputType;
- switch (outputType) {
- case "blob":
- case "arraybuffer":
- internalType = "uint8array";
- break;
- case "base64":
- internalType = "string";
- break;
- }
-
- try {
- // the type used internally
- this._internalType = internalType;
- // the type used to output results
- this._outputType = outputType;
- // the mime type
- this._mimeType = mimeType;
- utils.checkSupport(internalType);
- this._worker = worker.pipe(new ConvertWorker(internalType));
- // the last workers can be rewired without issues but we need to
- // prevent any updates on previous workers.
- worker.lock();
- } catch (e) {
- this._worker = new GenericWorker("error");
- this._worker.error(e);
- }
- }
-
- StreamHelper.prototype = {
- /**
- * Listen a StreamHelper, accumulate its content and concatenate it into a
- * complete block.
- * @param {Function} updateCb the update callback.
- * @return Promise the promise for the accumulation.
- */
- accumulate: function accumulate(updateCb) {
- return _accumulate(this, updateCb);
- },
- /**
- * Add a listener on an event triggered on a stream.
- * @param {String} evt the name of the event
- * @param {Function} fn the listener
- * @return {StreamHelper} the current helper.
- */
- on: function on(evt, fn) {
- var self = this;
-
- if (evt === "data") {
- this._worker.on(evt, function (chunk) {
- fn.call(self, chunk.data, chunk.meta);
- });
- } else {
- this._worker.on(evt, function () {
- utils.delay(fn, arguments, self);
- });
- }
- return this;
- },
- /**
- * Resume the flow of chunks.
- * @return {StreamHelper} the current helper.
- */
- resume: function resume() {
- utils.delay(this._worker.resume, [], this._worker);
- return this;
- },
- /**
- * Pause the flow of chunks.
- * @return {StreamHelper} the current helper.
- */
- pause: function pause() {
- this._worker.pause();
- return this;
- },
- /**
- * Return a nodejs stream for this helper.
- * @param {Function} updateCb the update callback.
- * @return {NodejsStreamOutputAdapter} the nodejs stream.
- */
- toNodejsStream: function toNodejsStream(updateCb) {
- utils.checkSupport("nodestream");
- if (this._outputType !== "nodebuffer") {
- // an object stream containing blob/arraybuffer/uint8array/string
- // is strange and I don't know if it would be useful.
- // I you find this comment and have a good usecase, please open a
- // bug report !
- throw new Error(this._outputType + " is not supported by this method");
- }
-
- return new NodejsStreamOutputAdapter(this, {
- objectMode: this._outputType !== "nodebuffer"
- }, updateCb);
- }
- };
-
- module.exports = StreamHelper;
- }, { "../base64": 1, "../external": 6, "../nodejs/NodejsStreamOutputAdapter": 13, "../support": 30, "../utils": 32, "./ConvertWorker": 24, "./GenericWorker": 28 }], 30: [function (require, module, exports) {
- 'use strict';
-
- exports.base64 = true;
- exports.array = true;
- exports.string = true;
- exports.arraybuffer = typeof ArrayBuffer !== "undefined" && typeof Uint8Array !== "undefined";
- exports.nodebuffer = typeof Buffer !== "undefined";
- // contains true if JSZip can read/generate Uint8Array, false otherwise.
- exports.uint8array = typeof Uint8Array !== "undefined";
-
- if (typeof ArrayBuffer === "undefined") {
- exports.blob = false;
- } else {
- var buffer = new ArrayBuffer(0);
- try {
- exports.blob = new Blob([buffer], {
- type: "application/zip"
- }).size === 0;
- } catch (e) {
- try {
- var Builder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder;
- var builder = new Builder();
- builder.append(buffer);
- exports.blob = builder.getBlob('application/zip').size === 0;
- } catch (e) {
- exports.blob = false;
- }
- }
- }
-
- try {
- exports.nodestream = !!require('readable-stream').Readable;
- } catch (e) {
- exports.nodestream = false;
- }
- }, { "readable-stream": 16 }], 31: [function (require, module, exports) {
- 'use strict';
-
- var utils = require('./utils');
- var support = require('./support');
- var nodejsUtils = require('./nodejsUtils');
- var GenericWorker = require('./stream/GenericWorker');
-
- /**
- * The following functions come from pako, from pako/lib/utils/strings
- * released under the MIT license, see pako https://github.com/nodeca/pako/
- */
-
- // Table with utf8 lengths (calculated by first byte of sequence)
- // Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,
- // because max possible codepoint is 0x10ffff
- var _utf8len = new Array(256);
- for (var i = 0; i < 256; i++) {
- _utf8len[i] = i >= 252 ? 6 : i >= 248 ? 5 : i >= 240 ? 4 : i >= 224 ? 3 : i >= 192 ? 2 : 1;
- }
- _utf8len[254] = _utf8len[254] = 1; // Invalid sequence start
-
- // convert string to array (typed, when possible)
- var string2buf = function string2buf(str) {
- var buf,
- c,
- c2,
- m_pos,
- i,
- str_len = str.length,
- buf_len = 0;
-
- // count binary size
- for (m_pos = 0; m_pos < str_len; m_pos++) {
- c = str.charCodeAt(m_pos);
- if ((c & 0xfc00) === 0xd800 && m_pos + 1 < str_len) {
- c2 = str.charCodeAt(m_pos + 1);
- if ((c2 & 0xfc00) === 0xdc00) {
- c = 0x10000 + (c - 0xd800 << 10) + (c2 - 0xdc00);
- m_pos++;
- }
- }
- buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;
- }
-
- // allocate buffer
- if (support.uint8array) {
- buf = new Uint8Array(buf_len);
- } else {
- buf = new Array(buf_len);
- }
-
- // convert
- for (i = 0, m_pos = 0; i < buf_len; m_pos++) {
- c = str.charCodeAt(m_pos);
- if ((c & 0xfc00) === 0xd800 && m_pos + 1 < str_len) {
- c2 = str.charCodeAt(m_pos + 1);
- if ((c2 & 0xfc00) === 0xdc00) {
- c = 0x10000 + (c - 0xd800 << 10) + (c2 - 0xdc00);
- m_pos++;
- }
- }
- if (c < 0x80) {
- /* one byte */
- buf[i++] = c;
- } else if (c < 0x800) {
- /* two bytes */
- buf[i++] = 0xC0 | c >>> 6;
- buf[i++] = 0x80 | c & 0x3f;
- } else if (c < 0x10000) {
- /* three bytes */
- buf[i++] = 0xE0 | c >>> 12;
- buf[i++] = 0x80 | c >>> 6 & 0x3f;
- buf[i++] = 0x80 | c & 0x3f;
- } else {
- /* four bytes */
- buf[i++] = 0xf0 | c >>> 18;
- buf[i++] = 0x80 | c >>> 12 & 0x3f;
- buf[i++] = 0x80 | c >>> 6 & 0x3f;
- buf[i++] = 0x80 | c & 0x3f;
- }
- }
-
- return buf;
- };
-
- // Calculate max possible position in utf8 buffer,
- // that will not break sequence. If that's not possible
- // - (very small limits) return max size as is.
- //
- // buf[] - utf8 bytes array
- // max - length limit (mandatory);
- var utf8border = function utf8border(buf, max) {
- var pos;
-
- max = max || buf.length;
- if (max > buf.length) {
- max = buf.length;
- }
-
- // go back from last position, until start of sequence found
- pos = max - 1;
- while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) {
- pos--;
- }
-
- // Fuckup - very small and broken sequence,
- // return max, because we should return something anyway.
- if (pos < 0) {
- return max;
- }
-
- // If we came to start of buffer - that means vuffer is too small,
- // return max too.
- if (pos === 0) {
- return max;
- }
-
- return pos + _utf8len[buf[pos]] > max ? pos : max;
- };
-
- // convert array to string
- var buf2string = function buf2string(buf) {
- var str, i, out, c, c_len;
- var len = buf.length;
-
- // Reserve max possible length (2 words per char)
- // NB: by unknown reasons, Array is significantly faster for
- // String.fromCharCode.apply than Uint16Array.
- var utf16buf = new Array(len * 2);
-
- for (out = 0, i = 0; i < len;) {
- c = buf[i++];
- // quick process ascii
- if (c < 0x80) {
- utf16buf[out++] = c;continue;
- }
-
- c_len = _utf8len[c];
- // skip 5 & 6 byte codes
- if (c_len > 4) {
- utf16buf[out++] = 0xfffd;i += c_len - 1;continue;
- }
-
- // apply mask on first byte
- c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;
- // join the rest
- while (c_len > 1 && i < len) {
- c = c << 6 | buf[i++] & 0x3f;
- c_len--;
- }
-
- // terminated by end of string?
- if (c_len > 1) {
- utf16buf[out++] = 0xfffd;continue;
- }
-
- if (c < 0x10000) {
- utf16buf[out++] = c;
- } else {
- c -= 0x10000;
- utf16buf[out++] = 0xd800 | c >> 10 & 0x3ff;
- utf16buf[out++] = 0xdc00 | c & 0x3ff;
- }
- }
-
- // shrinkBuf(utf16buf, out)
- if (utf16buf.length !== out) {
- if (utf16buf.subarray) {
- utf16buf = utf16buf.subarray(0, out);
- } else {
- utf16buf.length = out;
- }
- }
-
- // return String.fromCharCode.apply(null, utf16buf);
- return utils.applyFromCharCode(utf16buf);
- };
-
- // That's all for the pako functions.
-
-
- /**
- * Transform a javascript string into an array (typed if possible) of bytes,
- * UTF-8 encoded.
- * @param {String} str the string to encode
- * @return {Array|Uint8Array|Buffer} the UTF-8 encoded string.
- */
- exports.utf8encode = function utf8encode(str) {
- if (support.nodebuffer) {
- return nodejsUtils.newBufferFrom(str, "utf-8");
- }
-
- return string2buf(str);
- };
-
- /**
- * Transform a bytes array (or a representation) representing an UTF-8 encoded
- * string into a javascript string.
- * @param {Array|Uint8Array|Buffer} buf the data de decode
- * @return {String} the decoded string.
- */
- exports.utf8decode = function utf8decode(buf) {
- if (support.nodebuffer) {
- return utils.transformTo("nodebuffer", buf).toString("utf-8");
- }
-
- buf = utils.transformTo(support.uint8array ? "uint8array" : "array", buf);
-
- return buf2string(buf);
- };
-
- /**
- * A worker to decode utf8 encoded binary chunks into string chunks.
- * @constructor
- */
- function Utf8DecodeWorker() {
- GenericWorker.call(this, "utf-8 decode");
- // the last bytes if a chunk didn't end with a complete codepoint.
- this.leftOver = null;
- }
- utils.inherits(Utf8DecodeWorker, GenericWorker);
-
- /**
- * @see GenericWorker.processChunk
- */
- Utf8DecodeWorker.prototype.processChunk = function (chunk) {
-
- var data = utils.transformTo(support.uint8array ? "uint8array" : "array", chunk.data);
-
- // 1st step, re-use what's left of the previous chunk
- if (this.leftOver && this.leftOver.length) {
- if (support.uint8array) {
- var previousData = data;
- data = new Uint8Array(previousData.length + this.leftOver.length);
- data.set(this.leftOver, 0);
- data.set(previousData, this.leftOver.length);
- } else {
- data = this.leftOver.concat(data);
- }
- this.leftOver = null;
- }
-
- var nextBoundary = utf8border(data);
- var usableData = data;
- if (nextBoundary !== data.length) {
- if (support.uint8array) {
- usableData = data.subarray(0, nextBoundary);
- this.leftOver = data.subarray(nextBoundary, data.length);
- } else {
- usableData = data.slice(0, nextBoundary);
- this.leftOver = data.slice(nextBoundary, data.length);
- }
- }
-
- this.push({
- data: exports.utf8decode(usableData),
- meta: chunk.meta
- });
- };
-
- /**
- * @see GenericWorker.flush
- */
- Utf8DecodeWorker.prototype.flush = function () {
- if (this.leftOver && this.leftOver.length) {
- this.push({
- data: exports.utf8decode(this.leftOver),
- meta: {}
- });
- this.leftOver = null;
- }
- };
- exports.Utf8DecodeWorker = Utf8DecodeWorker;
-
- /**
- * A worker to endcode string chunks into utf8 encoded binary chunks.
- * @constructor
- */
- function Utf8EncodeWorker() {
- GenericWorker.call(this, "utf-8 encode");
- }
- utils.inherits(Utf8EncodeWorker, GenericWorker);
-
- /**
- * @see GenericWorker.processChunk
- */
- Utf8EncodeWorker.prototype.processChunk = function (chunk) {
- this.push({
- data: exports.utf8encode(chunk.data),
- meta: chunk.meta
- });
- };
- exports.Utf8EncodeWorker = Utf8EncodeWorker;
- }, { "./nodejsUtils": 14, "./stream/GenericWorker": 28, "./support": 30, "./utils": 32 }], 32: [function (require, module, exports) {
- 'use strict';
-
- var support = require('./support');
- var base64 = require('./base64');
- var nodejsUtils = require('./nodejsUtils');
- var setImmediate = require('core-js/library/fn/set-immediate');
- var external = require("./external");
-
- /**
- * Convert a string that pass as a "binary string": it should represent a byte
- * array but may have > 255 char codes. Be sure to take only the first byte
- * and returns the byte array.
- * @param {String} str the string to transform.
- * @return {Array|Uint8Array} the string in a binary format.
- */
- function string2binary(str) {
- var result = null;
- if (support.uint8array) {
- result = new Uint8Array(str.length);
- } else {
- result = new Array(str.length);
- }
- return stringToArrayLike(str, result);
- }
-
- /**
- * Create a new blob with the given content and the given type.
- * @param {String|ArrayBuffer} part the content to put in the blob. DO NOT use
- * an Uint8Array because the stock browser of android 4 won't accept it (it
- * will be silently converted to a string, "[object Uint8Array]").
- *
- * Use only ONE part to build the blob to avoid a memory leak in IE11 / Edge:
- * when a large amount of Array is used to create the Blob, the amount of
- * memory consumed is nearly 100 times the original data amount.
- *
- * @param {String} type the mime type of the blob.
- * @return {Blob} the created blob.
- */
- exports.newBlob = function (part, type) {
- exports.checkSupport("blob");
-
- try {
- // Blob constructor
- return new Blob([part], {
- type: type
- });
- } catch (e) {
-
- try {
- // deprecated, browser only, old way
- var Builder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder;
- var builder = new Builder();
- builder.append(part);
- return builder.getBlob(type);
- } catch (e) {
-
- // well, fuck ?!
- throw new Error("Bug : can't construct the Blob.");
- }
- }
- };
- /**
- * The identity function.
- * @param {Object} input the input.
- * @return {Object} the same input.
- */
- function identity(input) {
- return input;
- }
-
- /**
- * Fill in an array with a string.
- * @param {String} str the string to use.
- * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to fill in (will be mutated).
- * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated array.
- */
- function stringToArrayLike(str, array) {
- for (var i = 0; i < str.length; ++i) {
- array[i] = str.charCodeAt(i) & 0xFF;
- }
- return array;
- }
-
- /**
- * An helper for the function arrayLikeToString.
- * This contains static informations and functions that
- * can be optimized by the browser JIT compiler.
- */
- var arrayToStringHelper = {
- /**
- * Transform an array of int into a string, chunk by chunk.
- * See the performances notes on arrayLikeToString.
- * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.
- * @param {String} type the type of the array.
- * @param {Integer} chunk the chunk size.
- * @return {String} the resulting string.
- * @throws Error if the chunk is too big for the stack.
- */
- stringifyByChunk: function stringifyByChunk(array, type, chunk) {
- var result = [],
- k = 0,
- len = array.length;
- // shortcut
- if (len <= chunk) {
- return String.fromCharCode.apply(null, array);
- }
- while (k < len) {
- if (type === "array" || type === "nodebuffer") {
- result.push(String.fromCharCode.apply(null, array.slice(k, Math.min(k + chunk, len))));
- } else {
- result.push(String.fromCharCode.apply(null, array.subarray(k, Math.min(k + chunk, len))));
- }
- k += chunk;
- }
- return result.join("");
- },
- /**
- * Call String.fromCharCode on every item in the array.
- * This is the naive implementation, which generate A LOT of intermediate string.
- * This should be used when everything else fail.
- * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.
- * @return {String} the result.
- */
- stringifyByChar: function stringifyByChar(array) {
- var resultStr = "";
- for (var i = 0; i < array.length; i++) {
- resultStr += String.fromCharCode(array[i]);
- }
- return resultStr;
- },
- applyCanBeUsed: {
- /**
- * true if the browser accepts to use String.fromCharCode on Uint8Array
- */
- uint8array: function () {
- try {
- return support.uint8array && String.fromCharCode.apply(null, new Uint8Array(1)).length === 1;
- } catch (e) {
- return false;
- }
- }(),
- /**
- * true if the browser accepts to use String.fromCharCode on nodejs Buffer.
- */
- nodebuffer: function () {
- try {
- return support.nodebuffer && String.fromCharCode.apply(null, nodejsUtils.allocBuffer(1)).length === 1;
- } catch (e) {
- return false;
- }
- }()
- }
- };
-
- /**
- * Transform an array-like object to a string.
- * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.
- * @return {String} the result.
- */
- function arrayLikeToString(array) {
- // Performances notes :
- // --------------------
- // String.fromCharCode.apply(null, array) is the fastest, see
- // see http://jsperf.com/converting-a-uint8array-to-a-string/2
- // but the stack is limited (and we can get huge arrays !).
- //
- // result += String.fromCharCode(array[i]); generate too many strings !
- //
- // This code is inspired by http://jsperf.com/arraybuffer-to-string-apply-performance/2
- // TODO : we now have workers that split the work. Do we still need that ?
- var chunk = 65536,
- type = exports.getTypeOf(array),
- canUseApply = true;
- if (type === "uint8array") {
- canUseApply = arrayToStringHelper.applyCanBeUsed.uint8array;
- } else if (type === "nodebuffer") {
- canUseApply = arrayToStringHelper.applyCanBeUsed.nodebuffer;
- }
-
- if (canUseApply) {
- while (chunk > 1) {
- try {
- return arrayToStringHelper.stringifyByChunk(array, type, chunk);
- } catch (e) {
- chunk = Math.floor(chunk / 2);
- }
- }
- }
-
- // no apply or chunk error : slow and painful algorithm
- // default browser on android 4.*
- return arrayToStringHelper.stringifyByChar(array);
- }
-
- exports.applyFromCharCode = arrayLikeToString;
-
- /**
- * Copy the data from an array-like to an other array-like.
- * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayFrom the origin array.
- * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayTo the destination array which will be mutated.
- * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated destination array.
- */
- function arrayLikeToArrayLike(arrayFrom, arrayTo) {
- for (var i = 0; i < arrayFrom.length; i++) {
- arrayTo[i] = arrayFrom[i];
- }
- return arrayTo;
- }
-
- // a matrix containing functions to transform everything into everything.
- var transform = {};
-
- // string to ?
- transform["string"] = {
- "string": identity,
- "array": function array(input) {
- return stringToArrayLike(input, new Array(input.length));
- },
- "arraybuffer": function arraybuffer(input) {
- return transform["string"]["uint8array"](input).buffer;
- },
- "uint8array": function uint8array(input) {
- return stringToArrayLike(input, new Uint8Array(input.length));
- },
- "nodebuffer": function nodebuffer(input) {
- return stringToArrayLike(input, nodejsUtils.allocBuffer(input.length));
- }
- };
-
- // array to ?
- transform["array"] = {
- "string": arrayLikeToString,
- "array": identity,
- "arraybuffer": function arraybuffer(input) {
- return new Uint8Array(input).buffer;
- },
- "uint8array": function uint8array(input) {
- return new Uint8Array(input);
- },
- "nodebuffer": function nodebuffer(input) {
- return nodejsUtils.newBufferFrom(input);
- }
- };
-
- // arraybuffer to ?
- transform["arraybuffer"] = {
- "string": function string(input) {
- return arrayLikeToString(new Uint8Array(input));
- },
- "array": function array(input) {
- return arrayLikeToArrayLike(new Uint8Array(input), new Array(input.byteLength));
- },
- "arraybuffer": identity,
- "uint8array": function uint8array(input) {
- return new Uint8Array(input);
- },
- "nodebuffer": function nodebuffer(input) {
- return nodejsUtils.newBufferFrom(new Uint8Array(input));
- }
- };
-
- // uint8array to ?
- transform["uint8array"] = {
- "string": arrayLikeToString,
- "array": function array(input) {
- return arrayLikeToArrayLike(input, new Array(input.length));
- },
- "arraybuffer": function arraybuffer(input) {
- return input.buffer;
- },
- "uint8array": identity,
- "nodebuffer": function nodebuffer(input) {
- return nodejsUtils.newBufferFrom(input);
- }
- };
-
- // nodebuffer to ?
- transform["nodebuffer"] = {
- "string": arrayLikeToString,
- "array": function array(input) {
- return arrayLikeToArrayLike(input, new Array(input.length));
- },
- "arraybuffer": function arraybuffer(input) {
- return transform["nodebuffer"]["uint8array"](input).buffer;
- },
- "uint8array": function uint8array(input) {
- return arrayLikeToArrayLike(input, new Uint8Array(input.length));
- },
- "nodebuffer": identity
- };
-
- /**
- * Transform an input into any type.
- * The supported output type are : string, array, uint8array, arraybuffer, nodebuffer.
- * If no output type is specified, the unmodified input will be returned.
- * @param {String} outputType the output type.
- * @param {String|Array|ArrayBuffer|Uint8Array|Buffer} input the input to convert.
- * @throws {Error} an Error if the browser doesn't support the requested output type.
- */
- exports.transformTo = function (outputType, input) {
- if (!input) {
- // undefined, null, etc
- // an empty string won't harm.
- input = "";
- }
- if (!outputType) {
- return input;
- }
- exports.checkSupport(outputType);
- var inputType = exports.getTypeOf(input);
- var result = transform[inputType][outputType](input);
- return result;
- };
-
- /**
- * Return the type of the input.
- * The type will be in a format valid for JSZip.utils.transformTo : string, array, uint8array, arraybuffer.
- * @param {Object} input the input to identify.
- * @return {String} the (lowercase) type of the input.
- */
- exports.getTypeOf = function (input) {
- if (typeof input === "string") {
- return "string";
- }
- if (Object.prototype.toString.call(input) === "[object Array]") {
- return "array";
- }
- if (support.nodebuffer && nodejsUtils.isBuffer(input)) {
- return "nodebuffer";
- }
- if (support.uint8array && input instanceof Uint8Array) {
- return "uint8array";
- }
- if (support.arraybuffer && input instanceof ArrayBuffer) {
- return "arraybuffer";
- }
- };
-
- /**
- * Throw an exception if the type is not supported.
- * @param {String} type the type to check.
- * @throws {Error} an Error if the browser doesn't support the requested type.
- */
- exports.checkSupport = function (type) {
- var supported = support[type.toLowerCase()];
- if (!supported) {
- throw new Error(type + " is not supported by this platform");
- }
- };
-
- exports.MAX_VALUE_16BITS = 65535;
- exports.MAX_VALUE_32BITS = -1; // well, "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" is parsed as -1
-
- /**
- * Prettify a string read as binary.
- * @param {string} str the string to prettify.
- * @return {string} a pretty string.
- */
- exports.pretty = function (str) {
- var res = '',
- code,
- i;
- for (i = 0; i < (str || "").length; i++) {
- code = str.charCodeAt(i);
- res += '\\x' + (code < 16 ? "0" : "") + code.toString(16).toUpperCase();
- }
- return res;
- };
-
- /**
- * Defer the call of a function.
- * @param {Function} callback the function to call asynchronously.
- * @param {Array} args the arguments to give to the callback.
- */
- exports.delay = function (callback, args, self) {
- setImmediate(function () {
- callback.apply(self || null, args || []);
- });
- };
-
- /**
- * Extends a prototype with an other, without calling a constructor with
- * side effects. Inspired by nodejs' `utils.inherits`
- * @param {Function} ctor the constructor to augment
- * @param {Function} superCtor the parent constructor to use
- */
- exports.inherits = function (ctor, superCtor) {
- var Obj = function Obj() {};
- Obj.prototype = superCtor.prototype;
- ctor.prototype = new Obj();
- };
-
- /**
- * Merge the objects passed as parameters into a new one.
- * @private
- * @param {...Object} var_args All objects to merge.
- * @return {Object} a new object with the data of the others.
- */
- exports.extend = function () {
- var result = {},
- i,
- attr;
- for (i = 0; i < arguments.length; i++) {
- // arguments is not enumerable in some browsers
- for (attr in arguments[i]) {
- if (arguments[i].hasOwnProperty(attr) && typeof result[attr] === "undefined") {
- result[attr] = arguments[i][attr];
- }
- }
- }
- return result;
- };
-
- /**
- * Transform arbitrary content into a Promise.
- * @param {String} name a name for the content being processed.
- * @param {Object} inputData the content to process.
- * @param {Boolean} isBinary true if the content is not an unicode string
- * @param {Boolean} isOptimizedBinaryString true if the string content only has one byte per character.
- * @param {Boolean} isBase64 true if the string content is encoded with base64.
- * @return {Promise} a promise in a format usable by JSZip.
- */
- exports.prepareContent = function (name, inputData, isBinary, isOptimizedBinaryString, isBase64) {
-
- // if inputData is already a promise, this flatten it.
- var promise = external.Promise.resolve(inputData).then(function (data) {
-
- var isBlob = support.blob && (data instanceof Blob || ['[object File]', '[object Blob]'].indexOf(Object.prototype.toString.call(data)) !== -1);
-
- if (isBlob && typeof FileReader !== "undefined") {
- return new external.Promise(function (resolve, reject) {
- var reader = new FileReader();
-
- reader.onload = function (e) {
- resolve(e.target.result);
- };
- reader.onerror = function (e) {
- reject(e.target.error);
- };
- reader.readAsArrayBuffer(data);
- });
- } else {
- return data;
- }
- });
-
- return promise.then(function (data) {
- var dataType = exports.getTypeOf(data);
-
- if (!dataType) {
- return external.Promise.reject(new Error("Can't read the data of '" + name + "'. Is it " + "in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?"));
- }
- // special case : it's way easier to work with Uint8Array than with ArrayBuffer
- if (dataType === "arraybuffer") {
- data = exports.transformTo("uint8array", data);
- } else if (dataType === "string") {
- if (isBase64) {
- data = base64.decode(data);
- } else if (isBinary) {
- // optimizedBinaryString === true means that the file has already been filtered with a 0xFF mask
- if (isOptimizedBinaryString !== true) {
- // this is a string, not in a base64 format.
- // Be sure that this is a correct "binary string"
- data = string2binary(data);
- }
- }
- }
- return data;
- });
- };
- }, { "./base64": 1, "./external": 6, "./nodejsUtils": 14, "./support": 30, "core-js/library/fn/set-immediate": 36 }], 33: [function (require, module, exports) {
- 'use strict';
-
- var readerFor = require('./reader/readerFor');
- var utils = require('./utils');
- var sig = require('./signature');
- var ZipEntry = require('./zipEntry');
- var utf8 = require('./utf8');
- var support = require('./support');
- // class ZipEntries {{{
- /**
- * All the entries in the zip file.
- * @constructor
- * @param {Object} loadOptions Options for loading the stream.
- */
- function ZipEntries(loadOptions) {
- this.files = [];
- this.loadOptions = loadOptions;
- }
- ZipEntries.prototype = {
- /**
- * Check that the reader is on the specified signature.
- * @param {string} expectedSignature the expected signature.
- * @throws {Error} if it is an other signature.
- */
- checkSignature: function checkSignature(expectedSignature) {
- if (!this.reader.readAndCheckSignature(expectedSignature)) {
- this.reader.index -= 4;
- var signature = this.reader.readString(4);
- throw new Error("Corrupted zip or bug: unexpected signature " + "(" + utils.pretty(signature) + ", expected " + utils.pretty(expectedSignature) + ")");
- }
- },
- /**
- * Check if the given signature is at the given index.
- * @param {number} askedIndex the index to check.
- * @param {string} expectedSignature the signature to expect.
- * @return {boolean} true if the signature is here, false otherwise.
- */
- isSignature: function isSignature(askedIndex, expectedSignature) {
- var currentIndex = this.reader.index;
- this.reader.setIndex(askedIndex);
- var signature = this.reader.readString(4);
- var result = signature === expectedSignature;
- this.reader.setIndex(currentIndex);
- return result;
- },
- /**
- * Read the end of the central directory.
- */
- readBlockEndOfCentral: function readBlockEndOfCentral() {
- this.diskNumber = this.reader.readInt(2);
- this.diskWithCentralDirStart = this.reader.readInt(2);
- this.centralDirRecordsOnThisDisk = this.reader.readInt(2);
- this.centralDirRecords = this.reader.readInt(2);
- this.centralDirSize = this.reader.readInt(4);
- this.centralDirOffset = this.reader.readInt(4);
-
- this.zipCommentLength = this.reader.readInt(2);
- // warning : the encoding depends of the system locale
- // On a linux machine with LANG=en_US.utf8, this field is utf8 encoded.
- // On a windows machine, this field is encoded with the localized windows code page.
- var zipComment = this.reader.readData(this.zipCommentLength);
- var decodeParamType = support.uint8array ? "uint8array" : "array";
- // To get consistent behavior with the generation part, we will assume that
- // this is utf8 encoded unless specified otherwise.
- var decodeContent = utils.transformTo(decodeParamType, zipComment);
- this.zipComment = this.loadOptions.decodeFileName(decodeContent);
- },
- /**
- * Read the end of the Zip 64 central directory.
- * Not merged with the method readEndOfCentral :
- * The end of central can coexist with its Zip64 brother,
- * I don't want to read the wrong number of bytes !
- */
- readBlockZip64EndOfCentral: function readBlockZip64EndOfCentral() {
- this.zip64EndOfCentralSize = this.reader.readInt(8);
- this.reader.skip(4);
- // this.versionMadeBy = this.reader.readString(2);
- // this.versionNeeded = this.reader.readInt(2);
- this.diskNumber = this.reader.readInt(4);
- this.diskWithCentralDirStart = this.reader.readInt(4);
- this.centralDirRecordsOnThisDisk = this.reader.readInt(8);
- this.centralDirRecords = this.reader.readInt(8);
- this.centralDirSize = this.reader.readInt(8);
- this.centralDirOffset = this.reader.readInt(8);
-
- this.zip64ExtensibleData = {};
- var extraDataSize = this.zip64EndOfCentralSize - 44,
- index = 0,
- extraFieldId,
- extraFieldLength,
- extraFieldValue;
- while (index < extraDataSize) {
- extraFieldId = this.reader.readInt(2);
- extraFieldLength = this.reader.readInt(4);
- extraFieldValue = this.reader.readData(extraFieldLength);
- this.zip64ExtensibleData[extraFieldId] = {
- id: extraFieldId,
- length: extraFieldLength,
- value: extraFieldValue
- };
- }
- },
- /**
- * Read the end of the Zip 64 central directory locator.
- */
- readBlockZip64EndOfCentralLocator: function readBlockZip64EndOfCentralLocator() {
- this.diskWithZip64CentralDirStart = this.reader.readInt(4);
- this.relativeOffsetEndOfZip64CentralDir = this.reader.readInt(8);
- this.disksCount = this.reader.readInt(4);
- if (this.disksCount > 1) {
- throw new Error("Multi-volumes zip are not supported");
- }
- },
- /**
- * Read the local files, based on the offset read in the central part.
- */
- readLocalFiles: function readLocalFiles() {
- var i, file;
- for (i = 0; i < this.files.length; i++) {
- file = this.files[i];
- this.reader.setIndex(file.localHeaderOffset);
- this.checkSignature(sig.LOCAL_FILE_HEADER);
- file.readLocalPart(this.reader);
- file.handleUTF8();
- file.processAttributes();
- }
- },
- /**
- * Read the central directory.
- */
- readCentralDir: function readCentralDir() {
- var file;
-
- this.reader.setIndex(this.centralDirOffset);
- while (this.reader.readAndCheckSignature(sig.CENTRAL_FILE_HEADER)) {
- file = new ZipEntry({
- zip64: this.zip64
- }, this.loadOptions);
- file.readCentralPart(this.reader);
- this.files.push(file);
- }
-
- if (this.centralDirRecords !== this.files.length) {
- if (this.centralDirRecords !== 0 && this.files.length === 0) {
- // We expected some records but couldn't find ANY.
- // This is really suspicious, as if something went wrong.
- throw new Error("Corrupted zip or bug: expected " + this.centralDirRecords + " records in central dir, got " + this.files.length);
- } else {
- // We found some records but not all.
- // Something is wrong but we got something for the user: no error here.
- // console.warn("expected", this.centralDirRecords, "records in central dir, got", this.files.length);
- }
- }
- },
- /**
- * Read the end of central directory.
- */
- readEndOfCentral: function readEndOfCentral() {
- var offset = this.reader.lastIndexOfSignature(sig.CENTRAL_DIRECTORY_END);
- if (offset < 0) {
- // Check if the content is a truncated zip or complete garbage.
- // A "LOCAL_FILE_HEADER" is not required at the beginning (auto
- // extractible zip for example) but it can give a good hint.
- // If an ajax request was used without responseType, we will also
- // get unreadable data.
- var isGarbage = !this.isSignature(0, sig.LOCAL_FILE_HEADER);
-
- if (isGarbage) {
- throw new Error("Can't find end of central directory : is this a zip file ? " + "If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html");
- } else {
- throw new Error("Corrupted zip: can't find end of central directory");
- }
- }
- this.reader.setIndex(offset);
- var endOfCentralDirOffset = offset;
- this.checkSignature(sig.CENTRAL_DIRECTORY_END);
- this.readBlockEndOfCentral();
-
- /* extract from the zip spec :
- 4) If one of the fields in the end of central directory
- record is too small to hold required data, the field
- should be set to -1 (0xFFFF or 0xFFFFFFFF) and the
- ZIP64 format record should be created.
- 5) The end of central directory record and the
- Zip64 end of central directory locator record must
- reside on the same disk when splitting or spanning
- an archive.
- */
- if (this.diskNumber === utils.MAX_VALUE_16BITS || this.diskWithCentralDirStart === utils.MAX_VALUE_16BITS || this.centralDirRecordsOnThisDisk === utils.MAX_VALUE_16BITS || this.centralDirRecords === utils.MAX_VALUE_16BITS || this.centralDirSize === utils.MAX_VALUE_32BITS || this.centralDirOffset === utils.MAX_VALUE_32BITS) {
- this.zip64 = true;
-
- /*
- Warning : the zip64 extension is supported, but ONLY if the 64bits integer read from
- the zip file can fit into a 32bits integer. This cannot be solved : JavaScript represents
- all numbers as 64-bit double precision IEEE 754 floating point numbers.
- So, we have 53bits for integers and bitwise operations treat everything as 32bits.
- see https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Bitwise_Operators
- and http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf section 8.5
- */
-
- // should look for a zip64 EOCD locator
- offset = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR);
- if (offset < 0) {
- throw new Error("Corrupted zip: can't find the ZIP64 end of central directory locator");
- }
- this.reader.setIndex(offset);
- this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR);
- this.readBlockZip64EndOfCentralLocator();
-
- // now the zip64 EOCD record
- if (!this.isSignature(this.relativeOffsetEndOfZip64CentralDir, sig.ZIP64_CENTRAL_DIRECTORY_END)) {
- // console.warn("ZIP64 end of central directory not where expected.");
- this.relativeOffsetEndOfZip64CentralDir = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_END);
- if (this.relativeOffsetEndOfZip64CentralDir < 0) {
- throw new Error("Corrupted zip: can't find the ZIP64 end of central directory");
- }
- }
- this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir);
- this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_END);
- this.readBlockZip64EndOfCentral();
- }
-
- var expectedEndOfCentralDirOffset = this.centralDirOffset + this.centralDirSize;
- if (this.zip64) {
- expectedEndOfCentralDirOffset += 20; // end of central dir 64 locator
- expectedEndOfCentralDirOffset += 12 /* should not include the leading 12 bytes */ + this.zip64EndOfCentralSize;
- }
-
- var extraBytes = endOfCentralDirOffset - expectedEndOfCentralDirOffset;
-
- if (extraBytes > 0) {
- // console.warn(extraBytes, "extra bytes at beginning or within zipfile");
- if (this.isSignature(endOfCentralDirOffset, sig.CENTRAL_FILE_HEADER)) {
- // The offsets seem wrong, but we have something at the specified offset.
- // So… we keep it.
- } else {
- // the offset is wrong, update the "zero" of the reader
- // this happens if data has been prepended (crx files for example)
- this.reader.zero = extraBytes;
- }
- } else if (extraBytes < 0) {
- throw new Error("Corrupted zip: missing " + Math.abs(extraBytes) + " bytes.");
- }
- },
- prepareReader: function prepareReader(data) {
- this.reader = readerFor(data);
- },
- /**
- * Read a zip file and create ZipEntries.
- * @param {String|ArrayBuffer|Uint8Array|Buffer} data the binary string representing a zip file.
- */
- load: function load(data) {
- this.prepareReader(data);
- this.readEndOfCentral();
- this.readCentralDir();
- this.readLocalFiles();
- }
- };
- // }}} end of ZipEntries
- module.exports = ZipEntries;
- }, { "./reader/readerFor": 22, "./signature": 23, "./support": 30, "./utf8": 31, "./utils": 32, "./zipEntry": 34 }], 34: [function (require, module, exports) {
- 'use strict';
-
- var readerFor = require('./reader/readerFor');
- var utils = require('./utils');
- var CompressedObject = require('./compressedObject');
- var crc32fn = require('./crc32');
- var utf8 = require('./utf8');
- var compressions = require('./compressions');
- var support = require('./support');
-
- var MADE_BY_DOS = 0x00;
- var MADE_BY_UNIX = 0x03;
-
- /**
- * Find a compression registered in JSZip.
- * @param {string} compressionMethod the method magic to find.
- * @return {Object|null} the JSZip compression object, null if none found.
- */
- var findCompression = function findCompression(compressionMethod) {
- for (var method in compressions) {
- if (!compressions.hasOwnProperty(method)) {
- continue;
- }
- if (compressions[method].magic === compressionMethod) {
- return compressions[method];
- }
- }
- return null;
- };
-
- // class ZipEntry {{{
- /**
- * An entry in the zip file.
- * @constructor
- * @param {Object} options Options of the current file.
- * @param {Object} loadOptions Options for loading the stream.
- */
- function ZipEntry(options, loadOptions) {
- this.options = options;
- this.loadOptions = loadOptions;
- }
- ZipEntry.prototype = {
- /**
- * say if the file is encrypted.
- * @return {boolean} true if the file is encrypted, false otherwise.
- */
- isEncrypted: function isEncrypted() {
- // bit 1 is set
- return (this.bitFlag & 0x0001) === 0x0001;
- },
- /**
- * say if the file has utf-8 filename/comment.
- * @return {boolean} true if the filename/comment is in utf-8, false otherwise.
- */
- useUTF8: function useUTF8() {
- // bit 11 is set
- return (this.bitFlag & 0x0800) === 0x0800;
- },
- /**
- * Read the local part of a zip file and add the info in this object.
- * @param {DataReader} reader the reader to use.
- */
- readLocalPart: function readLocalPart(reader) {
- var compression, localExtraFieldsLength;
-
- // we already know everything from the central dir !
- // If the central dir data are false, we are doomed.
- // On the bright side, the local part is scary : zip64, data descriptors, both, etc.
- // The less data we get here, the more reliable this should be.
- // Let's skip the whole header and dash to the data !
- reader.skip(22);
- // in some zip created on windows, the filename stored in the central dir contains \ instead of /.
- // Strangely, the filename here is OK.
- // I would love to treat these zip files as corrupted (see http://www.info-zip.org/FAQ.html#backslashes
- // or APPNOTE#4.4.17.1, "All slashes MUST be forward slashes '/'") but there are a lot of bad zip generators...
- // Search "unzip mismatching "local" filename continuing with "central" filename version" on
- // the internet.
- //
- // I think I see the logic here : the central directory is used to display
- // content and the local directory is used to extract the files. Mixing / and \
- // may be used to display \ to windows users and use / when extracting the files.
- // Unfortunately, this lead also to some issues : http://seclists.org/fulldisclosure/2009/Sep/394
- this.fileNameLength = reader.readInt(2);
- localExtraFieldsLength = reader.readInt(2); // can't be sure this will be the same as the central dir
- // the fileName is stored as binary data, the handleUTF8 method will take care of the encoding.
- this.fileName = reader.readData(this.fileNameLength);
- reader.skip(localExtraFieldsLength);
-
- if (this.compressedSize === -1 || this.uncompressedSize === -1) {
- throw new Error("Bug or corrupted zip : didn't get enough informations from the central directory " + "(compressedSize === -1 || uncompressedSize === -1)");
- }
-
- compression = findCompression(this.compressionMethod);
- if (compression === null) {
- // no compression found
- throw new Error("Corrupted zip : compression " + utils.pretty(this.compressionMethod) + " unknown (inner file : " + utils.transformTo("string", this.fileName) + ")");
- }
- this.decompressed = new CompressedObject(this.compressedSize, this.uncompressedSize, this.crc32, compression, reader.readData(this.compressedSize));
- },
-
- /**
- * Read the central part of a zip file and add the info in this object.
- * @param {DataReader} reader the reader to use.
- */
- readCentralPart: function readCentralPart(reader) {
- this.versionMadeBy = reader.readInt(2);
- reader.skip(2);
- // this.versionNeeded = reader.readInt(2);
- this.bitFlag = reader.readInt(2);
- this.compressionMethod = reader.readString(2);
- this.date = reader.readDate();
- this.crc32 = reader.readInt(4);
- this.compressedSize = reader.readInt(4);
- this.uncompressedSize = reader.readInt(4);
- var fileNameLength = reader.readInt(2);
- this.extraFieldsLength = reader.readInt(2);
- this.fileCommentLength = reader.readInt(2);
- this.diskNumberStart = reader.readInt(2);
- this.internalFileAttributes = reader.readInt(2);
- this.externalFileAttributes = reader.readInt(4);
- this.localHeaderOffset = reader.readInt(4);
-
- if (this.isEncrypted()) {
- throw new Error("Encrypted zip are not supported");
- }
-
- // will be read in the local part, see the comments there
- reader.skip(fileNameLength);
- this.readExtraFields(reader);
- this.parseZIP64ExtraField(reader);
- this.fileComment = reader.readData(this.fileCommentLength);
- },
-
- /**
- * Parse the external file attributes and get the unix/dos permissions.
- */
- processAttributes: function processAttributes() {
- this.unixPermissions = null;
- this.dosPermissions = null;
- var madeBy = this.versionMadeBy >> 8;
-
- // Check if we have the DOS directory flag set.
- // We look for it in the DOS and UNIX permissions
- // but some unknown platform could set it as a compatibility flag.
- this.dir = this.externalFileAttributes & 0x0010 ? true : false;
-
- if (madeBy === MADE_BY_DOS) {
- // first 6 bits (0 to 5)
- this.dosPermissions = this.externalFileAttributes & 0x3F;
- }
-
- if (madeBy === MADE_BY_UNIX) {
- this.unixPermissions = this.externalFileAttributes >> 16 & 0xFFFF;
- // the octal permissions are in (this.unixPermissions & 0x01FF).toString(8);
- }
-
- // fail safe : if the name ends with a / it probably means a folder
- if (!this.dir && this.fileNameStr.slice(-1) === '/') {
- this.dir = true;
- }
- },
-
- /**
- * Parse the ZIP64 extra field and merge the info in the current ZipEntry.
- * @param {DataReader} reader the reader to use.
- */
- parseZIP64ExtraField: function parseZIP64ExtraField(reader) {
-
- if (!this.extraFields[0x0001]) {
- return;
- }
-
- // should be something, preparing the extra reader
- var extraReader = readerFor(this.extraFields[0x0001].value);
-
- // I really hope that these 64bits integer can fit in 32 bits integer, because js
- // won't let us have more.
- if (this.uncompressedSize === utils.MAX_VALUE_32BITS) {
- this.uncompressedSize = extraReader.readInt(8);
- }
- if (this.compressedSize === utils.MAX_VALUE_32BITS) {
- this.compressedSize = extraReader.readInt(8);
- }
- if (this.localHeaderOffset === utils.MAX_VALUE_32BITS) {
- this.localHeaderOffset = extraReader.readInt(8);
- }
- if (this.diskNumberStart === utils.MAX_VALUE_32BITS) {
- this.diskNumberStart = extraReader.readInt(4);
- }
- },
- /**
- * Read the central part of a zip file and add the info in this object.
- * @param {DataReader} reader the reader to use.
- */
- readExtraFields: function readExtraFields(reader) {
- var end = reader.index + this.extraFieldsLength,
- extraFieldId,
- extraFieldLength,
- extraFieldValue;
-
- if (!this.extraFields) {
- this.extraFields = {};
- }
-
- while (reader.index < end) {
- extraFieldId = reader.readInt(2);
- extraFieldLength = reader.readInt(2);
- extraFieldValue = reader.readData(extraFieldLength);
-
- this.extraFields[extraFieldId] = {
- id: extraFieldId,
- length: extraFieldLength,
- value: extraFieldValue
- };
- }
- },
- /**
- * Apply an UTF8 transformation if needed.
- */
- handleUTF8: function handleUTF8() {
- var decodeParamType = support.uint8array ? "uint8array" : "array";
- if (this.useUTF8()) {
- this.fileNameStr = utf8.utf8decode(this.fileName);
- this.fileCommentStr = utf8.utf8decode(this.fileComment);
- } else {
- var upath = this.findExtraFieldUnicodePath();
- if (upath !== null) {
- this.fileNameStr = upath;
- } else {
- // ASCII text or unsupported code page
- var fileNameByteArray = utils.transformTo(decodeParamType, this.fileName);
- this.fileNameStr = this.loadOptions.decodeFileName(fileNameByteArray);
- }
-
- var ucomment = this.findExtraFieldUnicodeComment();
- if (ucomment !== null) {
- this.fileCommentStr = ucomment;
- } else {
- // ASCII text or unsupported code page
- var commentByteArray = utils.transformTo(decodeParamType, this.fileComment);
- this.fileCommentStr = this.loadOptions.decodeFileName(commentByteArray);
- }
- }
- },
-
- /**
- * Find the unicode path declared in the extra field, if any.
- * @return {String} the unicode path, null otherwise.
- */
- findExtraFieldUnicodePath: function findExtraFieldUnicodePath() {
- var upathField = this.extraFields[0x7075];
- if (upathField) {
- var extraReader = readerFor(upathField.value);
-
- // wrong version
- if (extraReader.readInt(1) !== 1) {
- return null;
- }
-
- // the crc of the filename changed, this field is out of date.
- if (crc32fn(this.fileName) !== extraReader.readInt(4)) {
- return null;
- }
-
- return utf8.utf8decode(extraReader.readData(upathField.length - 5));
- }
- return null;
- },
-
- /**
- * Find the unicode comment declared in the extra field, if any.
- * @return {String} the unicode comment, null otherwise.
- */
- findExtraFieldUnicodeComment: function findExtraFieldUnicodeComment() {
- var ucommentField = this.extraFields[0x6375];
- if (ucommentField) {
- var extraReader = readerFor(ucommentField.value);
-
- // wrong version
- if (extraReader.readInt(1) !== 1) {
- return null;
- }
-
- // the crc of the comment changed, this field is out of date.
- if (crc32fn(this.fileComment) !== extraReader.readInt(4)) {
- return null;
- }
-
- return utf8.utf8decode(extraReader.readData(ucommentField.length - 5));
- }
- return null;
- }
- };
- module.exports = ZipEntry;
- }, { "./compressedObject": 2, "./compressions": 3, "./crc32": 4, "./reader/readerFor": 22, "./support": 30, "./utf8": 31, "./utils": 32 }], 35: [function (require, module, exports) {
- 'use strict';
-
- var StreamHelper = require('./stream/StreamHelper');
- var DataWorker = require('./stream/DataWorker');
- var utf8 = require('./utf8');
- var CompressedObject = require('./compressedObject');
- var GenericWorker = require('./stream/GenericWorker');
-
- /**
- * A simple object representing a file in the zip file.
- * @constructor
- * @param {string} name the name of the file
- * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data
- * @param {Object} options the options of the file
- */
- var ZipObject = function ZipObject(name, data, options) {
- this.name = name;
- this.dir = options.dir;
- this.date = options.date;
- this.comment = options.comment;
- this.unixPermissions = options.unixPermissions;
- this.dosPermissions = options.dosPermissions;
-
- this._data = data;
- this._dataBinary = options.binary;
- // keep only the compression
- this.options = {
- compression: options.compression,
- compressionOptions: options.compressionOptions
- };
- };
-
- ZipObject.prototype = {
- /**
- * Create an internal stream for the content of this object.
- * @param {String} type the type of each chunk.
- * @return StreamHelper the stream.
- */
- internalStream: function internalStream(type) {
- var result = null,
- outputType = "string";
- try {
- if (!type) {
- throw new Error("No output type specified.");
- }
- outputType = type.toLowerCase();
- var askUnicodeString = outputType === "string" || outputType === "text";
- if (outputType === "binarystring" || outputType === "text") {
- outputType = "string";
- }
- result = this._decompressWorker();
-
- var isUnicodeString = !this._dataBinary;
-
- if (isUnicodeString && !askUnicodeString) {
- result = result.pipe(new utf8.Utf8EncodeWorker());
- }
- if (!isUnicodeString && askUnicodeString) {
- result = result.pipe(new utf8.Utf8DecodeWorker());
- }
- } catch (e) {
- result = new GenericWorker("error");
- result.error(e);
- }
-
- return new StreamHelper(result, outputType, "");
- },
-
- /**
- * Prepare the content in the asked type.
- * @param {String} type the type of the result.
- * @param {Function} onUpdate a function to call on each internal update.
- * @return Promise the promise of the result.
- */
- async: function async(type, onUpdate) {
- return this.internalStream(type).accumulate(onUpdate);
- },
-
- /**
- * Prepare the content as a nodejs stream.
- * @param {String} type the type of each chunk.
- * @param {Function} onUpdate a function to call on each internal update.
- * @return Stream the stream.
- */
- nodeStream: function nodeStream(type, onUpdate) {
- return this.internalStream(type || "nodebuffer").toNodejsStream(onUpdate);
- },
-
- /**
- * Return a worker for the compressed content.
- * @private
- * @param {Object} compression the compression object to use.
- * @param {Object} compressionOptions the options to use when compressing.
- * @return Worker the worker.
- */
- _compressWorker: function _compressWorker(compression, compressionOptions) {
- if (this._data instanceof CompressedObject && this._data.compression.magic === compression.magic) {
- return this._data.getCompressedWorker();
- } else {
- var result = this._decompressWorker();
- if (!this._dataBinary) {
- result = result.pipe(new utf8.Utf8EncodeWorker());
- }
- return CompressedObject.createWorkerFrom(result, compression, compressionOptions);
- }
- },
- /**
- * Return a worker for the decompressed content.
- * @private
- * @return Worker the worker.
- */
- _decompressWorker: function _decompressWorker() {
- if (this._data instanceof CompressedObject) {
- return this._data.getContentWorker();
- } else if (this._data instanceof GenericWorker) {
- return this._data;
- } else {
- return new DataWorker(this._data);
- }
- }
- };
-
- var removedMethods = ["asText", "asBinary", "asNodeBuffer", "asUint8Array", "asArrayBuffer"];
- var removedFn = function removedFn() {
- throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.");
- };
-
- for (var i = 0; i < removedMethods.length; i++) {
- ZipObject.prototype[removedMethods[i]] = removedFn;
- }
- module.exports = ZipObject;
- }, { "./compressedObject": 2, "./stream/DataWorker": 27, "./stream/GenericWorker": 28, "./stream/StreamHelper": 29, "./utf8": 31 }], 36: [function (require, module, exports) {
- require('../modules/web.immediate');
- module.exports = require('../modules/_core').setImmediate;
- }, { "../modules/_core": 40, "../modules/web.immediate": 56 }], 37: [function (require, module, exports) {
- module.exports = function (it) {
- if (typeof it != 'function') throw TypeError(it + ' is not a function!');
- return it;
- };
- }, {}], 38: [function (require, module, exports) {
- var isObject = require('./_is-object');
- module.exports = function (it) {
- if (!isObject(it)) throw TypeError(it + ' is not an object!');
- return it;
- };
- }, { "./_is-object": 51 }], 39: [function (require, module, exports) {
- var toString = {}.toString;
-
- module.exports = function (it) {
- return toString.call(it).slice(8, -1);
- };
- }, {}], 40: [function (require, module, exports) {
- var core = module.exports = { version: '2.3.0' };
- if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef
- }, {}], 41: [function (require, module, exports) {
- // optional / simple context binding
- var aFunction = require('./_a-function');
- module.exports = function (fn, that, length) {
- aFunction(fn);
- if (that === undefined) return fn;
- switch (length) {
- case 1:
- return function (a) {
- return fn.call(that, a);
- };
- case 2:
- return function (a, b) {
- return fn.call(that, a, b);
- };
- case 3:
- return function (a, b, c) {
- return fn.call(that, a, b, c);
- };
- }
- return function () /* ...args */{
- return fn.apply(that, arguments);
- };
- };
- }, { "./_a-function": 37 }], 42: [function (require, module, exports) {
- // Thank's IE8 for his funny defineProperty
- module.exports = !require('./_fails')(function () {
- return Object.defineProperty({}, 'a', { get: function get() {
- return 7;
- } }).a != 7;
- });
- }, { "./_fails": 45 }], 43: [function (require, module, exports) {
- var isObject = require('./_is-object'),
- document = require('./_global').document
- // in old IE typeof document.createElement is 'object'
- ,
- is = isObject(document) && isObject(document.createElement);
- module.exports = function (it) {
- return is ? document.createElement(it) : {};
- };
- }, { "./_global": 46, "./_is-object": 51 }], 44: [function (require, module, exports) {
- var global = require('./_global'),
- core = require('./_core'),
- ctx = require('./_ctx'),
- hide = require('./_hide'),
- PROTOTYPE = 'prototype';
-
- var $export = function $export(type, name, source) {
- var IS_FORCED = type & $export.F,
- IS_GLOBAL = type & $export.G,
- IS_STATIC = type & $export.S,
- IS_PROTO = type & $export.P,
- IS_BIND = type & $export.B,
- IS_WRAP = type & $export.W,
- exports = IS_GLOBAL ? core : core[name] || (core[name] = {}),
- expProto = exports[PROTOTYPE],
- target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE],
- key,
- own,
- out;
- if (IS_GLOBAL) source = name;
- for (key in source) {
- // contains in native
- own = !IS_FORCED && target && target[key] !== undefined;
- if (own && key in exports) continue;
- // export native or passed
- out = own ? target[key] : source[key];
- // prevent global pollution for namespaces
- exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]
- // bind timers to global for call from export context
- : IS_BIND && own ? ctx(out, global)
- // wrap global constructors for prevent change them in library
- : IS_WRAP && target[key] == out ? function (C) {
- var F = function F(a, b, c) {
- if (this instanceof C) {
- switch (arguments.length) {
- case 0:
- return new C();
- case 1:
- return new C(a);
- case 2:
- return new C(a, b);
- }return new C(a, b, c);
- }return C.apply(this, arguments);
- };
- F[PROTOTYPE] = C[PROTOTYPE];
- return F;
- // make static versions for prototype methods
- }(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
- // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%
- if (IS_PROTO) {
- (exports.virtual || (exports.virtual = {}))[key] = out;
- // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%
- if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);
- }
- }
- };
- // type bitmap
- $export.F = 1; // forced
- $export.G = 2; // global
- $export.S = 4; // static
- $export.P = 8; // proto
- $export.B = 16; // bind
- $export.W = 32; // wrap
- $export.U = 64; // safe
- $export.R = 128; // real proto method for `library`
- module.exports = $export;
- }, { "./_core": 40, "./_ctx": 41, "./_global": 46, "./_hide": 47 }], 45: [function (require, module, exports) {
- module.exports = function (exec) {
- try {
- return !!exec();
- } catch (e) {
- return true;
- }
- };
- }, {}], 46: [function (require, module, exports) {
- // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
- var global = module.exports = typeof window != 'undefined' && window.Math == Math ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();
- if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef
- }, {}], 47: [function (require, module, exports) {
- var dP = require('./_object-dp'),
- createDesc = require('./_property-desc');
- module.exports = require('./_descriptors') ? function (object, key, value) {
- return dP.f(object, key, createDesc(1, value));
- } : function (object, key, value) {
- object[key] = value;
- return object;
- };
- }, { "./_descriptors": 42, "./_object-dp": 52, "./_property-desc": 53 }], 48: [function (require, module, exports) {
- module.exports = require('./_global').document && document.documentElement;
- }, { "./_global": 46 }], 49: [function (require, module, exports) {
- module.exports = !require('./_descriptors') && !require('./_fails')(function () {
- return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function get() {
- return 7;
- } }).a != 7;
- });
- }, { "./_descriptors": 42, "./_dom-create": 43, "./_fails": 45 }], 50: [function (require, module, exports) {
- // fast apply, http://jsperf.lnkit.com/fast-apply/5
- module.exports = function (fn, args, that) {
- var un = that === undefined;
- switch (args.length) {
- case 0:
- return un ? fn() : fn.call(that);
- case 1:
- return un ? fn(args[0]) : fn.call(that, args[0]);
- case 2:
- return un ? fn(args[0], args[1]) : fn.call(that, args[0], args[1]);
- case 3:
- return un ? fn(args[0], args[1], args[2]) : fn.call(that, args[0], args[1], args[2]);
- case 4:
- return un ? fn(args[0], args[1], args[2], args[3]) : fn.call(that, args[0], args[1], args[2], args[3]);
- }return fn.apply(that, args);
- };
- }, {}], 51: [function (require, module, exports) {
- module.exports = function (it) {
- return (typeof it === "undefined" ? "undefined" : _typeof(it)) === 'object' ? it !== null : typeof it === 'function';
- };
- }, {}], 52: [function (require, module, exports) {
- var anObject = require('./_an-object'),
- IE8_DOM_DEFINE = require('./_ie8-dom-define'),
- toPrimitive = require('./_to-primitive'),
- dP = Object.defineProperty;
-
- exports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {
- anObject(O);
- P = toPrimitive(P, true);
- anObject(Attributes);
- if (IE8_DOM_DEFINE) try {
- return dP(O, P, Attributes);
- } catch (e) {/* empty */}
- if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');
- if ('value' in Attributes) O[P] = Attributes.value;
- return O;
- };
- }, { "./_an-object": 38, "./_descriptors": 42, "./_ie8-dom-define": 49, "./_to-primitive": 55 }], 53: [function (require, module, exports) {
- module.exports = function (bitmap, value) {
- return {
- enumerable: !(bitmap & 1),
- configurable: !(bitmap & 2),
- writable: !(bitmap & 4),
- value: value
- };
- };
- }, {}], 54: [function (require, module, exports) {
- var ctx = require('./_ctx'),
- invoke = require('./_invoke'),
- html = require('./_html'),
- cel = require('./_dom-create'),
- global = require('./_global'),
- process = global.process,
- setTask = global.setImmediate,
- clearTask = global.clearImmediate,
- MessageChannel = global.MessageChannel,
- counter = 0,
- queue = {},
- ONREADYSTATECHANGE = 'onreadystatechange',
- defer,
- channel,
- port;
- var run = function run() {
- var id = +this;
- if (queue.hasOwnProperty(id)) {
- var fn = queue[id];
- delete queue[id];
- fn();
- }
- };
- var listener = function listener(event) {
- run.call(event.data);
- };
- // Node.js 0.9+ & IE10+ has setImmediate, otherwise:
- if (!setTask || !clearTask) {
- setTask = function setImmediate(fn) {
- var args = [],
- i = 1;
- while (arguments.length > i) {
- args.push(arguments[i++]);
- }queue[++counter] = function () {
- invoke(typeof fn == 'function' ? fn : Function(fn), args);
- };
- defer(counter);
- return counter;
- };
- clearTask = function clearImmediate(id) {
- delete queue[id];
- };
- // Node.js 0.8-
- if (require('./_cof')(process) == 'process') {
- defer = function defer(id) {
- process.nextTick(ctx(run, id, 1));
- };
- // Browsers with MessageChannel, includes WebWorkers
- } else if (MessageChannel) {
- channel = new MessageChannel();
- port = channel.port2;
- channel.port1.onmessage = listener;
- defer = ctx(port.postMessage, port, 1);
- // Browsers with postMessage, skip WebWorkers
- // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'
- } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {
- defer = function defer(id) {
- global.postMessage(id + '', '*');
- };
- global.addEventListener('message', listener, false);
- // IE8-
- } else if (ONREADYSTATECHANGE in cel('script')) {
- defer = function defer(id) {
- html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {
- html.removeChild(this);
- run.call(id);
- };
- };
- // Rest old browsers
- } else {
- defer = function defer(id) {
- setTimeout(ctx(run, id, 1), 0);
- };
- }
- }
- module.exports = {
- set: setTask,
- clear: clearTask
- };
- }, { "./_cof": 39, "./_ctx": 41, "./_dom-create": 43, "./_global": 46, "./_html": 48, "./_invoke": 50 }], 55: [function (require, module, exports) {
- // 7.1.1 ToPrimitive(input [, PreferredType])
- var isObject = require('./_is-object');
- // instead of the ES6 spec version, we didn't implement @@toPrimitive case
- // and the second argument - flag - preferred type is a string
- module.exports = function (it, S) {
- if (!isObject(it)) return it;
- var fn, val;
- if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
- if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;
- if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
- throw TypeError("Can't convert object to primitive value");
- };
- }, { "./_is-object": 51 }], 56: [function (require, module, exports) {
- var $export = require('./_export'),
- $task = require('./_task');
- $export($export.G + $export.B, {
- setImmediate: $task.set,
- clearImmediate: $task.clear
- });
- }, { "./_export": 44, "./_task": 54 }], 57: [function (require, module, exports) {
- (function (global) {
- 'use strict';
-
- var Mutation = global.MutationObserver || global.WebKitMutationObserver;
-
- var scheduleDrain;
-
- {
- if (Mutation) {
- var called = 0;
- var observer = new Mutation(nextTick);
- var element = global.document.createTextNode('');
- observer.observe(element, {
- characterData: true
- });
- scheduleDrain = function scheduleDrain() {
- element.data = called = ++called % 2;
- };
- } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') {
- var channel = new global.MessageChannel();
- channel.port1.onmessage = nextTick;
- scheduleDrain = function scheduleDrain() {
- channel.port2.postMessage(0);
- };
- } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) {
- scheduleDrain = function scheduleDrain() {
-
- // Create a