-
+
+
+
Allocation of Funds from the NFT sales
+
+
+
+ 87% of the funds from the sales of all sold NFTs will goes to
+ Centurion Capital . It serves as the Venture capital of
+ this Project.
+
+
+ 5% goes to the team who created this Project.
+ 5% Project Development, fund will be used to maintain and
+ further development of this website and Project.
+ 3% goes to charity as we are committed into providing
+ assistance to individuals in need, especially now that
+ calamities
+ are occurring in many regions of the world.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Centurion Capital
+
+ The CENTURION CAPITAL serves as the Centurion’s
+ Venture Capital . 87% of the funds from all sold NFTs will be
+ allocated to Centurion capital and this will be used to invest in
+ high-potential Cryptocurrency projects (Early stage investment like
+ Seed sales, Pre-sales, and Private sales ), where each
+ Centurion NFT represents its right to the Treasury of Centurion Capital.
+
+
+
+
+
Distribution of acquired assets
+
+
+
50% Airdrop to NFT Holders
+
+
40% Treasury of Centurion Capital
+
+
+
+
+
+
+
+ 50% of each Coin/Token acquired through Centurion Capital
+ investment will be Airdropped to all NFT holders.
+ see WhitePaper for more info.
+
+ 40% of Coin/Token acquired will go back to
+ Centurion Capital Treasury And will be used to reinvest
+ to another potential project.
+
+ 5% will be split into Two, 1 part goes to the Centurion Team
+ and the other one goes to Centurion Capital research Team.
+
+ 5% will be used to fund the Real World Project that will
+ generate revenue to sustain the treasury of Centurion
+ Capital and the whole ecosystem.
+ see WhitePaper for more info.
+
+
+
+
+
+
+
+
+
+ Centurion Forest
+
+
+
+ Natural disasters may be impossible to prevent, but steps
+ must be done to lessen their impact, particularly in large countries.
+ Above all other types of natural disasters, typhoons and floods are
+ considered to be the most common and damaging events worldwide, and
+ according to environmental specialists, planting trees is one
+ of the best way to address this main problem.
+
+ To develop Centurion Forest, the Centurion team chose to contribute
+ their 30% share of NFT sales and 20% share of
+ Centurion Capital. Furthermore, all royalty fees collected
+ from Centurion NFT transactions will be directed directly to
+ Centurion Forest. Centurion Forest was established with the goal of
+ protecting, preserving, and assisting our environment from climate
+ change through tree planting, clean-up drive, and
+ participating in any other activities that can help
+ preserve our environment .
+
+
+
+
+
+
+
+
+
+
Roadmap
+
+ We are committed to establishing a long-term Roadmap for the
+ community's future.
+
+
+
+
+
+
Q1
+
+
+
+ * Team Creation
+
+ * Planning
+
+
+
+
+
+
Q2
+
+
+
+ * Launching of Twitter and Telegram account
+
+ * Building of website
+
+
+
+
+
+
Q3
+
+
+
+ * Launching of Website.
+
+ * Marketing.
+
+ * Partnership & Collaboration.
+
+
+
+
+
+
Q4
+
+
+
+ * Launch of Minting.
+
+ * Start operation of Centurion Capital
+
+ * Tree planting
+
+ * Onboarding of Team of Engineers For the Real world
+ Project.
+
+
+
+
+
+
+
+
+
+
+
+ Team
+
+ Our team is made up of experts from a multitude of sectors, including
+ Engineering and Technology , Finance, and
+ Arts , and we are all passionate about cryptocurrencies. We are
+ really motivated and committed to contributing our expertise to the
+ project in order to produce something outstanding.
+
+
+
+
+
Mark Peñero
+
CO-FOUNDER/CEO
+
+
+ BS-Civil Engineering. Worked in various Construction companies as a
+ site Engineer also a Web Developer.
+
+
+
+
Jonathan Capili
+
CO-FOUNDER/COO
+
+
+ BS-Civil Engineering. Worked as a Project Engineer in the Middle
+ East for 11 Yrs.
+
+
+
+
Erica Herreros
+
CO-FOUNDER/CTO
+
+
+ BS-Electronics & Communication Engineering. Working as Associate
+ Software Engineer-Support Analyst in various Tech Company in the
+ Philippines
+
+
+
+
Joel Peñero
+
CO-FOUNDER/CMO
+
+
+ BA-Management. Former business analyst for the Philippines' leading
+ pawnshop & money transfer firm. His 7 years of experience in
+ financial industry has transformed him into an asset and help in the
+ development of the company's competitiveness.
+
+
+
+
+
Jinky Lanzaderas
+
CO-FOUNDER/CFO
+
+
BA-Banking & Finance. Former COO of E&J Trading.
+
+
+
Ritchard Colaste
+
CO-FOUNDER/Digital Artist
+
+
+ BA-Financial Management. Has passion for portraiture, graphic
+ design, and digital art. He is also a crypto enthusiast.
+
+
+
+
Sahrah Jane E. Ventura
+
Financial Adviser
+
+
+ BA-Human Resource. Licensed Financial Advisor & Unit Head of AXA
+ Philippines. Also a former employee of Paypal, Concentrix and EXL
+ Service Philippines .
+
+
+
+
Janella Macabugao
+
Software Engineer
+
+
BS-Computer Science. Work as a Software Engineer of Fujitsu.
+
+
+
Nel Montilla
+
Software Engineer
+
+
+ BS-Computer Science. Work in various tech company in the Philippines
+ as a software Engineer.
+
+
+
+
Jasmin Polvorosa
+
Web Developer
+
+
Student of BS-Computer Science. Crypto Enthusiast.
+
+
+
+
Joey Colaste
+
Graphics designer
+
+
+ BS-Political Science. Digital Artist, Graphics designer and Crypto
+ Enthusiasts.
+
+
+
+
Reanie Colaste
+
Community Manager
+
+
+ Student of BA-Financial Management, Content Creator, and Former
+ Radio Producer She established techniques to create and supervise
+ social media marketing campaigns.
+
+
+
+
Ellin jin Lanzaderas
+
Social Media Moderator
+
+
Student of BS- Civil Engineering, Cryptocurrency Enthusiast.
+
+
+
+
+
+
+
+ Partners
+ Click the logo to visit our partners
+
+
+
+
+
+
+ FAQs
+
+
+
How many Centurion NFT’s are there?
+
+
+ There are only 4,444 limited edition Centurion NFT's that will be
+ minted.
+
+
+
+
+
+
+
+
+
+
What is the price of each NFT?
+
The price will be 120 Matic per one NFT.
+
+
+
+
+
+
+
+
How many Centurion NFT can I Mint?
+
+ There is a maximum of 5 NFTs per wallet on pre-minting and will be
+ closed after 2000 NFTs are minted.. Maximum of 10 NFTs per wallet on
+ Public minting and a mininmum of 1 NFT in all Minting phases.
+
+
+
+
+
+
+
+
+
When is the Pre-minting and Public Minting?
+
To be announce.
+
+
+
+
+
+
+
+
Who is eligible for an Airdrop?
+
+ All NFT holders is Eligible for the Airdrop. More details will be
+ announce in the future.
+
+
+
+
+
+
+
+
+
+
+
+ Featured on
+ Click the Logo to view
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
diff --git a/frontend/js/abi.js b/frontend/js/abi.js
index 8f27b4e5a5..8827ba3f7b 100644
--- a/frontend/js/abi.js
+++ b/frontend/js/abi.js
@@ -1 +1,1573 @@
-const abi = []
+const abi = [
+ {
+ inputs: [
+ {
+ components: [
+ {
+ internalType: "string",
+ name: "name",
+ type: "string",
+ },
+ {
+ internalType: "string",
+ name: "symbol",
+ type: "string",
+ },
+ {
+ internalType: "address",
+ name: "owner",
+ type: "address",
+ },
+ {
+ internalType: "uint256",
+ name: "maxSupply",
+ type: "uint256",
+ },
+ {
+ internalType: "uint256",
+ name: "reservedSupply",
+ type: "uint256",
+ },
+ {
+ internalType: "uint256",
+ name: "tokensPerMint",
+ type: "uint256",
+ },
+ {
+ internalType: "address payable",
+ name: "treasuryAddress",
+ type: "address",
+ },
+ ],
+ internalType: "struct NFTCollection.DeploymentConfig",
+ name: "deploymentConfig",
+ type: "tuple",
+ },
+ {
+ components: [
+ {
+ internalType: "string",
+ name: "baseURI",
+ type: "string",
+ },
+ {
+ internalType: "bool",
+ name: "metadataUpdatable",
+ type: "bool",
+ },
+ {
+ internalType: "uint256",
+ name: "publicMintPrice",
+ type: "uint256",
+ },
+ {
+ internalType: "bool",
+ name: "publicMintPriceFrozen",
+ type: "bool",
+ },
+ {
+ internalType: "uint256",
+ name: "presaleMintPrice",
+ type: "uint256",
+ },
+ {
+ internalType: "bool",
+ name: "presaleMintPriceFrozen",
+ type: "bool",
+ },
+ {
+ internalType: "uint256",
+ name: "publicMintStart",
+ type: "uint256",
+ },
+ {
+ internalType: "uint256",
+ name: "presaleMintStart",
+ type: "uint256",
+ },
+ {
+ internalType: "string",
+ name: "prerevealTokenURI",
+ type: "string",
+ },
+ {
+ internalType: "bytes32",
+ name: "presaleMerkleRoot",
+ type: "bytes32",
+ },
+ {
+ internalType: "uint256",
+ name: "royaltiesBps",
+ type: "uint256",
+ },
+ {
+ internalType: "address",
+ name: "royaltiesAddress",
+ type: "address",
+ },
+ ],
+ internalType: "struct NFTCollection.RuntimeConfig",
+ name: "runtimeConfig",
+ type: "tuple",
+ },
+ ],
+ stateMutability: "nonpayable",
+ type: "constructor",
+ signature: "constructor",
+ },
+ {
+ inputs: [],
+ name: "ApprovalCallerNotOwnerNorApproved",
+ type: "error",
+ },
+ {
+ inputs: [],
+ name: "ApprovalQueryForNonexistentToken",
+ type: "error",
+ },
+ {
+ inputs: [],
+ name: "ApprovalToCurrentOwner",
+ type: "error",
+ },
+ {
+ inputs: [],
+ name: "ApproveToCaller",
+ type: "error",
+ },
+ {
+ inputs: [],
+ name: "BalanceQueryForZeroAddress",
+ type: "error",
+ },
+ {
+ inputs: [],
+ name: "MintToZeroAddress",
+ type: "error",
+ },
+ {
+ inputs: [],
+ name: "MintZeroQuantity",
+ type: "error",
+ },
+ {
+ inputs: [],
+ name: "OwnerQueryForNonexistentToken",
+ type: "error",
+ },
+ {
+ inputs: [],
+ name: "TransferCallerNotOwnerNorApproved",
+ type: "error",
+ },
+ {
+ inputs: [],
+ name: "TransferFromIncorrectOwner",
+ type: "error",
+ },
+ {
+ inputs: [],
+ name: "TransferToNonERC721ReceiverImplementer",
+ type: "error",
+ },
+ {
+ inputs: [],
+ name: "TransferToZeroAddress",
+ type: "error",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: true,
+ internalType: "address",
+ name: "owner",
+ type: "address",
+ },
+ {
+ indexed: true,
+ internalType: "address",
+ name: "approved",
+ type: "address",
+ },
+ {
+ indexed: true,
+ internalType: "uint256",
+ name: "tokenId",
+ type: "uint256",
+ },
+ ],
+ name: "Approval",
+ type: "event",
+ signature:
+ "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: true,
+ internalType: "address",
+ name: "owner",
+ type: "address",
+ },
+ {
+ indexed: true,
+ internalType: "address",
+ name: "operator",
+ type: "address",
+ },
+ {
+ indexed: false,
+ internalType: "bool",
+ name: "approved",
+ type: "bool",
+ },
+ ],
+ name: "ApprovalForAll",
+ type: "event",
+ signature:
+ "0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: false,
+ internalType: "uint8",
+ name: "version",
+ type: "uint8",
+ },
+ ],
+ name: "Initialized",
+ type: "event",
+ signature:
+ "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: true,
+ internalType: "address",
+ name: "previousOwner",
+ type: "address",
+ },
+ {
+ indexed: true,
+ internalType: "address",
+ name: "newOwner",
+ type: "address",
+ },
+ ],
+ name: "OwnershipTransferred",
+ type: "event",
+ signature:
+ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: true,
+ internalType: "bytes32",
+ name: "role",
+ type: "bytes32",
+ },
+ {
+ indexed: true,
+ internalType: "bytes32",
+ name: "previousAdminRole",
+ type: "bytes32",
+ },
+ {
+ indexed: true,
+ internalType: "bytes32",
+ name: "newAdminRole",
+ type: "bytes32",
+ },
+ ],
+ name: "RoleAdminChanged",
+ type: "event",
+ signature:
+ "0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: true,
+ internalType: "bytes32",
+ name: "role",
+ type: "bytes32",
+ },
+ {
+ indexed: true,
+ internalType: "address",
+ name: "account",
+ type: "address",
+ },
+ {
+ indexed: true,
+ internalType: "address",
+ name: "sender",
+ type: "address",
+ },
+ ],
+ name: "RoleGranted",
+ type: "event",
+ signature:
+ "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: true,
+ internalType: "bytes32",
+ name: "role",
+ type: "bytes32",
+ },
+ {
+ indexed: true,
+ internalType: "address",
+ name: "account",
+ type: "address",
+ },
+ {
+ indexed: true,
+ internalType: "address",
+ name: "sender",
+ type: "address",
+ },
+ ],
+ name: "RoleRevoked",
+ type: "event",
+ signature:
+ "0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: true,
+ internalType: "address",
+ name: "from",
+ type: "address",
+ },
+ {
+ indexed: true,
+ internalType: "address",
+ name: "to",
+ type: "address",
+ },
+ {
+ indexed: true,
+ internalType: "uint256",
+ name: "tokenId",
+ type: "uint256",
+ },
+ ],
+ name: "Transfer",
+ type: "event",
+ signature:
+ "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
+ },
+ {
+ inputs: [],
+ name: "ADMIN_ROLE",
+ outputs: [
+ {
+ internalType: "bytes32",
+ name: "",
+ type: "bytes32",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x75b238fc",
+ },
+ {
+ inputs: [],
+ name: "DEFAULT_ADMIN_ROLE",
+ outputs: [
+ {
+ internalType: "bytes32",
+ name: "",
+ type: "bytes32",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0xa217fddf",
+ },
+ {
+ inputs: [],
+ name: "ROYALTIES_BASIS",
+ outputs: [
+ {
+ internalType: "uint16",
+ name: "",
+ type: "uint16",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x9da5b0a5",
+ },
+ {
+ inputs: [],
+ name: "VERSION",
+ outputs: [
+ {
+ internalType: "uint256",
+ name: "",
+ type: "uint256",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0xffa1ad74",
+ },
+ {
+ inputs: [
+ {
+ internalType: "address",
+ name: "to",
+ type: "address",
+ },
+ {
+ internalType: "uint256",
+ name: "tokenId",
+ type: "uint256",
+ },
+ ],
+ name: "approve",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ signature: "0x095ea7b3",
+ },
+ {
+ inputs: [],
+ name: "availableSupply",
+ outputs: [
+ {
+ internalType: "uint256",
+ name: "",
+ type: "uint256",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x7ecc2b56",
+ },
+ {
+ inputs: [
+ {
+ internalType: "address",
+ name: "owner",
+ type: "address",
+ },
+ ],
+ name: "balanceOf",
+ outputs: [
+ {
+ internalType: "uint256",
+ name: "",
+ type: "uint256",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x70a08231",
+ },
+ {
+ inputs: [],
+ name: "baseURI",
+ outputs: [
+ {
+ internalType: "string",
+ name: "",
+ type: "string",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x6c0360eb",
+ },
+ {
+ inputs: [],
+ name: "contractURI",
+ outputs: [
+ {
+ internalType: "string",
+ name: "",
+ type: "string",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0xe8a3d485",
+ },
+ {
+ inputs: [
+ {
+ internalType: "uint256",
+ name: "tokenId",
+ type: "uint256",
+ },
+ ],
+ name: "getApproved",
+ outputs: [
+ {
+ internalType: "address",
+ name: "",
+ type: "address",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x081812fc",
+ },
+ {
+ inputs: [],
+ name: "getInfo",
+ outputs: [
+ {
+ components: [
+ {
+ internalType: "uint256",
+ name: "version",
+ type: "uint256",
+ },
+ {
+ components: [
+ {
+ internalType: "string",
+ name: "name",
+ type: "string",
+ },
+ {
+ internalType: "string",
+ name: "symbol",
+ type: "string",
+ },
+ {
+ internalType: "address",
+ name: "owner",
+ type: "address",
+ },
+ {
+ internalType: "uint256",
+ name: "maxSupply",
+ type: "uint256",
+ },
+ {
+ internalType: "uint256",
+ name: "reservedSupply",
+ type: "uint256",
+ },
+ {
+ internalType: "uint256",
+ name: "tokensPerMint",
+ type: "uint256",
+ },
+ {
+ internalType: "address payable",
+ name: "treasuryAddress",
+ type: "address",
+ },
+ ],
+ internalType: "struct NFTCollection.DeploymentConfig",
+ name: "deploymentConfig",
+ type: "tuple",
+ },
+ {
+ components: [
+ {
+ internalType: "string",
+ name: "baseURI",
+ type: "string",
+ },
+ {
+ internalType: "bool",
+ name: "metadataUpdatable",
+ type: "bool",
+ },
+ {
+ internalType: "uint256",
+ name: "publicMintPrice",
+ type: "uint256",
+ },
+ {
+ internalType: "bool",
+ name: "publicMintPriceFrozen",
+ type: "bool",
+ },
+ {
+ internalType: "uint256",
+ name: "presaleMintPrice",
+ type: "uint256",
+ },
+ {
+ internalType: "bool",
+ name: "presaleMintPriceFrozen",
+ type: "bool",
+ },
+ {
+ internalType: "uint256",
+ name: "publicMintStart",
+ type: "uint256",
+ },
+ {
+ internalType: "uint256",
+ name: "presaleMintStart",
+ type: "uint256",
+ },
+ {
+ internalType: "string",
+ name: "prerevealTokenURI",
+ type: "string",
+ },
+ {
+ internalType: "bytes32",
+ name: "presaleMerkleRoot",
+ type: "bytes32",
+ },
+ {
+ internalType: "uint256",
+ name: "royaltiesBps",
+ type: "uint256",
+ },
+ {
+ internalType: "address",
+ name: "royaltiesAddress",
+ type: "address",
+ },
+ ],
+ internalType: "struct NFTCollection.RuntimeConfig",
+ name: "runtimeConfig",
+ type: "tuple",
+ },
+ ],
+ internalType: "struct NFTCollection.ContractInfo",
+ name: "info",
+ type: "tuple",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x5a9b0b89",
+ },
+ {
+ inputs: [
+ {
+ internalType: "bytes32",
+ name: "role",
+ type: "bytes32",
+ },
+ ],
+ name: "getRoleAdmin",
+ outputs: [
+ {
+ internalType: "bytes32",
+ name: "",
+ type: "bytes32",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x248a9ca3",
+ },
+ {
+ inputs: [
+ {
+ internalType: "bytes32",
+ name: "role",
+ type: "bytes32",
+ },
+ {
+ internalType: "address",
+ name: "account",
+ type: "address",
+ },
+ ],
+ name: "grantRole",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ signature: "0x2f2ff15d",
+ },
+ {
+ inputs: [
+ {
+ internalType: "bytes32",
+ name: "role",
+ type: "bytes32",
+ },
+ {
+ internalType: "address",
+ name: "account",
+ type: "address",
+ },
+ ],
+ name: "hasRole",
+ outputs: [
+ {
+ internalType: "bool",
+ name: "",
+ type: "bool",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x91d14854",
+ },
+ {
+ inputs: [
+ {
+ components: [
+ {
+ internalType: "string",
+ name: "name",
+ type: "string",
+ },
+ {
+ internalType: "string",
+ name: "symbol",
+ type: "string",
+ },
+ {
+ internalType: "address",
+ name: "owner",
+ type: "address",
+ },
+ {
+ internalType: "uint256",
+ name: "maxSupply",
+ type: "uint256",
+ },
+ {
+ internalType: "uint256",
+ name: "reservedSupply",
+ type: "uint256",
+ },
+ {
+ internalType: "uint256",
+ name: "tokensPerMint",
+ type: "uint256",
+ },
+ {
+ internalType: "address payable",
+ name: "treasuryAddress",
+ type: "address",
+ },
+ ],
+ internalType: "struct NFTCollection.DeploymentConfig",
+ name: "deploymentConfig",
+ type: "tuple",
+ },
+ {
+ components: [
+ {
+ internalType: "string",
+ name: "baseURI",
+ type: "string",
+ },
+ {
+ internalType: "bool",
+ name: "metadataUpdatable",
+ type: "bool",
+ },
+ {
+ internalType: "uint256",
+ name: "publicMintPrice",
+ type: "uint256",
+ },
+ {
+ internalType: "bool",
+ name: "publicMintPriceFrozen",
+ type: "bool",
+ },
+ {
+ internalType: "uint256",
+ name: "presaleMintPrice",
+ type: "uint256",
+ },
+ {
+ internalType: "bool",
+ name: "presaleMintPriceFrozen",
+ type: "bool",
+ },
+ {
+ internalType: "uint256",
+ name: "publicMintStart",
+ type: "uint256",
+ },
+ {
+ internalType: "uint256",
+ name: "presaleMintStart",
+ type: "uint256",
+ },
+ {
+ internalType: "string",
+ name: "prerevealTokenURI",
+ type: "string",
+ },
+ {
+ internalType: "bytes32",
+ name: "presaleMerkleRoot",
+ type: "bytes32",
+ },
+ {
+ internalType: "uint256",
+ name: "royaltiesBps",
+ type: "uint256",
+ },
+ {
+ internalType: "address",
+ name: "royaltiesAddress",
+ type: "address",
+ },
+ ],
+ internalType: "struct NFTCollection.RuntimeConfig",
+ name: "runtimeConfig",
+ type: "tuple",
+ },
+ ],
+ name: "initialize",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ signature: "0xd1bff694",
+ },
+ {
+ inputs: [
+ {
+ internalType: "address",
+ name: "owner",
+ type: "address",
+ },
+ {
+ internalType: "address",
+ name: "operator",
+ type: "address",
+ },
+ ],
+ name: "isApprovedForAll",
+ outputs: [
+ {
+ internalType: "bool",
+ name: "",
+ type: "bool",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0xe985e9c5",
+ },
+ {
+ inputs: [
+ {
+ internalType: "address",
+ name: "wallet",
+ type: "address",
+ },
+ {
+ internalType: "bytes32[]",
+ name: "proof",
+ type: "bytes32[]",
+ },
+ ],
+ name: "isWhitelisted",
+ outputs: [
+ {
+ internalType: "bool",
+ name: "",
+ type: "bool",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x5a23dd99",
+ },
+ {
+ inputs: [],
+ name: "maxSupply",
+ outputs: [
+ {
+ internalType: "uint256",
+ name: "",
+ type: "uint256",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0xd5abeb01",
+ },
+ {
+ inputs: [],
+ name: "metadataUpdatable",
+ outputs: [
+ {
+ internalType: "bool",
+ name: "",
+ type: "bool",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x4e6f9dd6",
+ },
+ {
+ inputs: [
+ {
+ internalType: "uint256",
+ name: "amount",
+ type: "uint256",
+ },
+ ],
+ name: "mint",
+ outputs: [],
+ stateMutability: "payable",
+ type: "function",
+ payable: true,
+ signature: "0xa0712d68",
+ },
+ {
+ inputs: [],
+ name: "mintingActive",
+ outputs: [
+ {
+ internalType: "bool",
+ name: "",
+ type: "bool",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x31f9c919",
+ },
+ {
+ inputs: [],
+ name: "name",
+ outputs: [
+ {
+ internalType: "string",
+ name: "",
+ type: "string",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x06fdde03",
+ },
+ {
+ inputs: [],
+ name: "owner",
+ outputs: [
+ {
+ internalType: "address",
+ name: "",
+ type: "address",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x8da5cb5b",
+ },
+ {
+ inputs: [
+ {
+ internalType: "uint256",
+ name: "tokenId",
+ type: "uint256",
+ },
+ ],
+ name: "ownerOf",
+ outputs: [
+ {
+ internalType: "address",
+ name: "",
+ type: "address",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x6352211e",
+ },
+ {
+ inputs: [],
+ name: "prerevealTokenURI",
+ outputs: [
+ {
+ internalType: "string",
+ name: "",
+ type: "string",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0xf4ad0f97",
+ },
+ {
+ inputs: [],
+ name: "presaleActive",
+ outputs: [
+ {
+ internalType: "bool",
+ name: "",
+ type: "bool",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x53135ca0",
+ },
+ {
+ inputs: [],
+ name: "presaleMerkleRoot",
+ outputs: [
+ {
+ internalType: "bytes32",
+ name: "",
+ type: "bytes32",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x22212e2b",
+ },
+ {
+ inputs: [
+ {
+ internalType: "uint256",
+ name: "amount",
+ type: "uint256",
+ },
+ {
+ internalType: "bytes32[]",
+ name: "proof",
+ type: "bytes32[]",
+ },
+ ],
+ name: "presaleMint",
+ outputs: [],
+ stateMutability: "payable",
+ type: "function",
+ payable: true,
+ signature: "0xe3e1e8ef",
+ },
+ {
+ inputs: [],
+ name: "presaleMintPrice",
+ outputs: [
+ {
+ internalType: "uint256",
+ name: "",
+ type: "uint256",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x5be50521",
+ },
+ {
+ inputs: [],
+ name: "presaleMintStart",
+ outputs: [
+ {
+ internalType: "uint256",
+ name: "",
+ type: "uint256",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x4653124b",
+ },
+ {
+ inputs: [],
+ name: "publicMintPrice",
+ outputs: [
+ {
+ internalType: "uint256",
+ name: "",
+ type: "uint256",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0xdc53fd92",
+ },
+ {
+ inputs: [],
+ name: "publicMintStart",
+ outputs: [
+ {
+ internalType: "uint256",
+ name: "",
+ type: "uint256",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x8cfec4c0",
+ },
+ {
+ inputs: [
+ {
+ internalType: "bytes32",
+ name: "role",
+ type: "bytes32",
+ },
+ {
+ internalType: "address",
+ name: "account",
+ type: "address",
+ },
+ ],
+ name: "renounceRole",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ signature: "0x36568abe",
+ },
+ {
+ inputs: [
+ {
+ internalType: "address",
+ name: "to",
+ type: "address",
+ },
+ {
+ internalType: "uint256",
+ name: "amount",
+ type: "uint256",
+ },
+ ],
+ name: "reserveMint",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ signature: "0xb0ea1802",
+ },
+ {
+ inputs: [],
+ name: "reserveRemaining",
+ outputs: [
+ {
+ internalType: "uint256",
+ name: "",
+ type: "uint256",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x5c629f4c",
+ },
+ {
+ inputs: [],
+ name: "reservedSupply",
+ outputs: [
+ {
+ internalType: "uint256",
+ name: "",
+ type: "uint256",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x44d19d2b",
+ },
+ {
+ inputs: [
+ {
+ internalType: "bytes32",
+ name: "role",
+ type: "bytes32",
+ },
+ {
+ internalType: "address",
+ name: "account",
+ type: "address",
+ },
+ ],
+ name: "revokeRole",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ signature: "0xd547741f",
+ },
+ {
+ inputs: [
+ {
+ internalType: "uint256",
+ name: "",
+ type: "uint256",
+ },
+ {
+ internalType: "uint256",
+ name: "salePrice",
+ type: "uint256",
+ },
+ ],
+ name: "royaltyInfo",
+ outputs: [
+ {
+ internalType: "address",
+ name: "receiver",
+ type: "address",
+ },
+ {
+ internalType: "uint256",
+ name: "royaltyAmount",
+ type: "uint256",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x2a55205a",
+ },
+ {
+ inputs: [
+ {
+ internalType: "address",
+ name: "from",
+ type: "address",
+ },
+ {
+ internalType: "address",
+ name: "to",
+ type: "address",
+ },
+ {
+ internalType: "uint256",
+ name: "tokenId",
+ type: "uint256",
+ },
+ ],
+ name: "safeTransferFrom",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ signature: "0x42842e0e",
+ },
+ {
+ inputs: [
+ {
+ internalType: "address",
+ name: "from",
+ type: "address",
+ },
+ {
+ internalType: "address",
+ name: "to",
+ type: "address",
+ },
+ {
+ internalType: "uint256",
+ name: "tokenId",
+ type: "uint256",
+ },
+ {
+ internalType: "bytes",
+ name: "_data",
+ type: "bytes",
+ },
+ ],
+ name: "safeTransferFrom",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ signature: "0xb88d4fde",
+ },
+ {
+ inputs: [
+ {
+ internalType: "address",
+ name: "operator",
+ type: "address",
+ },
+ {
+ internalType: "bool",
+ name: "approved",
+ type: "bool",
+ },
+ ],
+ name: "setApprovalForAll",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ signature: "0xa22cb465",
+ },
+ {
+ inputs: [
+ {
+ internalType: "bytes4",
+ name: "interfaceId",
+ type: "bytes4",
+ },
+ ],
+ name: "supportsInterface",
+ outputs: [
+ {
+ internalType: "bool",
+ name: "",
+ type: "bool",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x01ffc9a7",
+ },
+ {
+ inputs: [],
+ name: "symbol",
+ outputs: [
+ {
+ internalType: "string",
+ name: "",
+ type: "string",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x95d89b41",
+ },
+ {
+ inputs: [
+ {
+ internalType: "uint256",
+ name: "tokenId",
+ type: "uint256",
+ },
+ ],
+ name: "tokenURI",
+ outputs: [
+ {
+ internalType: "string",
+ name: "",
+ type: "string",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0xc87b56dd",
+ },
+ {
+ inputs: [],
+ name: "tokensPerMint",
+ outputs: [
+ {
+ internalType: "uint256",
+ name: "",
+ type: "uint256",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x0807b9e2",
+ },
+ {
+ inputs: [],
+ name: "totalSupply",
+ outputs: [
+ {
+ internalType: "uint256",
+ name: "",
+ type: "uint256",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x18160ddd",
+ },
+ {
+ inputs: [
+ {
+ internalType: "address",
+ name: "to",
+ type: "address",
+ },
+ ],
+ name: "transferAdminRights",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ signature: "0xb5106add",
+ },
+ {
+ inputs: [
+ {
+ internalType: "address",
+ name: "from",
+ type: "address",
+ },
+ {
+ internalType: "address",
+ name: "to",
+ type: "address",
+ },
+ {
+ internalType: "uint256",
+ name: "tokenId",
+ type: "uint256",
+ },
+ ],
+ name: "transferFrom",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ signature: "0x23b872dd",
+ },
+ {
+ inputs: [
+ {
+ internalType: "address",
+ name: "newOwner",
+ type: "address",
+ },
+ ],
+ name: "transferOwnership",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ signature: "0xf2fde38b",
+ },
+ {
+ inputs: [],
+ name: "treasuryAddress",
+ outputs: [
+ {
+ internalType: "address",
+ name: "",
+ type: "address",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0xc5f956af",
+ },
+ {
+ inputs: [
+ {
+ components: [
+ {
+ internalType: "string",
+ name: "baseURI",
+ type: "string",
+ },
+ {
+ internalType: "bool",
+ name: "metadataUpdatable",
+ type: "bool",
+ },
+ {
+ internalType: "uint256",
+ name: "publicMintPrice",
+ type: "uint256",
+ },
+ {
+ internalType: "bool",
+ name: "publicMintPriceFrozen",
+ type: "bool",
+ },
+ {
+ internalType: "uint256",
+ name: "presaleMintPrice",
+ type: "uint256",
+ },
+ {
+ internalType: "bool",
+ name: "presaleMintPriceFrozen",
+ type: "bool",
+ },
+ {
+ internalType: "uint256",
+ name: "publicMintStart",
+ type: "uint256",
+ },
+ {
+ internalType: "uint256",
+ name: "presaleMintStart",
+ type: "uint256",
+ },
+ {
+ internalType: "string",
+ name: "prerevealTokenURI",
+ type: "string",
+ },
+ {
+ internalType: "bytes32",
+ name: "presaleMerkleRoot",
+ type: "bytes32",
+ },
+ {
+ internalType: "uint256",
+ name: "royaltiesBps",
+ type: "uint256",
+ },
+ {
+ internalType: "address",
+ name: "royaltiesAddress",
+ type: "address",
+ },
+ ],
+ internalType: "struct NFTCollection.RuntimeConfig",
+ name: "newConfig",
+ type: "tuple",
+ },
+ ],
+ name: "updateConfig",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ signature: "0xd761aa48",
+ },
+ {
+ inputs: [],
+ name: "withdrawFees",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ signature: "0x476343ee",
+ },
+];
diff --git a/frontend/js/app.js b/frontend/js/app.js
index a599398480..772e0591ee 100644
--- a/frontend/js/app.js
+++ b/frontend/js/app.js
@@ -24,18 +24,18 @@ window.addEventListener("DOMContentLoaded", async () => {
});
}
- const splide = new Splide(".splide", {
- type: "loop",
- arrows: false,
- perMove: 3,
- pagination: false,
- autoplay: true,
- direction: 'ttb',
- height: "calc(100vh - 90px)",
- width: '30vw',
- autoHeight: true,
- });
- splide.mount();
+ // const splide = new Splide(".splide", {
+ // type: "loop",
+ // arrows: false,
+ // perMove: 3,
+ // pagination: false,
+ // autoplay: true,
+ // direction: "ttb",
+ // height: "calc(100vh - 90px)",
+ // width: "30vw",
+ // autoHeight: true,
+ // });
+ // splide.mount();
updateConnectStatus();
if (MetaMaskOnboarding.isMetaMaskInstalled()) {
@@ -49,7 +49,7 @@ window.addEventListener("DOMContentLoaded", async () => {
const updateConnectStatus = async () => {
const onboarding = new MetaMaskOnboarding();
const onboardButton = document.getElementById("connectWallet");
- const notConnected = document.querySelector('.not-connected');
+ const notConnected = document.querySelector(".not-connected");
const spinner = document.getElementById("spinner");
if (!MetaMaskOnboarding.isMetaMaskInstalled()) {
onboardButton.innerText = "Install MetaMask!";
@@ -58,27 +58,27 @@ const updateConnectStatus = async () => {
onboardButton.disabled = true;
onboarding.startOnboarding();
// HIDE SPINNER
- spinner.classList.add('hidden');
- notConnected.classList.remove('hidden');
- notConnected.classList.add('show-not-connected');
+ spinner.classList.add("hidden");
+ notConnected.classList.remove("hidden");
+ notConnected.classList.add("show-not-connected");
};
} else if (accounts && accounts.length > 0) {
onboardButton.innerText = `✔ ...${accounts[0].slice(-4)}`;
window.address = accounts[0];
onboardButton.disabled = true;
onboarding.stopOnboarding();
- notConnected.classList.remove('show-not-connected');
- notConnected.classList.add('hidden');
+ notConnected.classList.remove("show-not-connected");
+ notConnected.classList.add("hidden");
// SHOW SPINNER
- spinner.classList.remove('hidden');
+ spinner.classList.remove("hidden");
window.contract = new web3.eth.Contract(abi, contractAddress);
loadInfo();
} else {
onboardButton.innerText = "Connect MetaMask!";
// HIDE SPINNER
- spinner.classList.add('hidden');
- notConnected.classList.remove('hidden');
- notConnected.classList.add('show-not-connected');
+ spinner.classList.add("hidden");
+ notConnected.classList.remove("hidden");
+ notConnected.classList.add("show-not-connected");
onboardButton.onclick = async () => {
await window.ethereum
.request({
@@ -86,10 +86,10 @@ const updateConnectStatus = async () => {
})
.then(function (accts) {
onboardButton.innerText = `✔ ...${accts[0].slice(-4)}`;
- notConnected.classList.remove('show-not-connected');
- notConnected.classList.add('hidden');
+ notConnected.classList.remove("show-not-connected");
+ notConnected.classList.add("hidden");
// SHOW SPINNER
- spinner.classList.remove('hidden');
+ spinner.classList.remove("hidden");
onboardButton.disabled = true;
window.address = accts[0];
accounts = accts;
@@ -102,45 +102,51 @@ const updateConnectStatus = async () => {
async function checkChain() {
let chainId = 0;
- if(chain === 'rinkeby') {
+ if (chain === "rinkeby") {
chainId = 4;
- } else if(chain === 'polygon') {
+ } else if (chain === "polygon") {
chainId = 137;
- } else if(chain === 'ethereum') {
+ } else if (chain === "ethereum") {
chainId = 1;
}
if (window.ethereum.networkVersion !== chainId) {
try {
await window.ethereum.request({
- method: 'wallet_switchEthereumChain',
+ method: "wallet_switchEthereumChain",
params: [{ chainId: web3.utils.toHex(chainId) }],
});
updateConnectStatus();
} catch (err) {
- // This error code indicates that the chain has not been added to MetaMask.
+ // This error code indicates that the chain has not been added to MetaMask.
if (err.code === 4902) {
try {
- if(chain === 'rinkeby') {
+ if (chain === "rinkeby") {
await window.ethereum.request({
- method: 'wallet_addEthereumChain',
+ method: "wallet_addEthereumChain",
params: [
{
- chainName: 'Rinkeby Test Network',
+ chainName: "Rinkeby Test Network",
chainId: web3.utils.toHex(chainId),
- nativeCurrency: { name: 'ETH', decimals: 18, symbol: 'ETH' },
- rpcUrls: ['https://rinkeby.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161'],
+ nativeCurrency: { name: "ETH", decimals: 18, symbol: "ETH" },
+ rpcUrls: [
+ "https://rinkeby.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161",
+ ],
},
],
});
- } else if(chain === 'polygon') {
+ } else if (chain === "polygon") {
await window.ethereum.request({
- method: 'wallet_addEthereumChain',
+ method: "wallet_addEthereumChain",
params: [
{
- chainName: 'Polygon Mainnet',
+ chainName: "Polygon Mainnet",
chainId: web3.utils.toHex(chainId),
- nativeCurrency: { name: 'MATIC', decimals: 18, symbol: 'MATIC' },
- rpcUrls: ['https://polygon-rpc.com/'],
+ nativeCurrency: {
+ name: "MATIC",
+ decimals: 18,
+ symbol: "MATIC",
+ },
+ rpcUrls: ["https://polygon-rpc.com/"],
},
],
});
@@ -170,32 +176,34 @@ async function loadInfo() {
if (publicMintActive) {
mainHeading.innerText = h1_public_mint;
mainText.innerText = p_public_mint;
- actionButton.classList.add('hidden');
+ actionButton.classList.add("hidden");
mintButton.innerText = button_public_mint;
- mintContainer.classList.remove('hidden');
+ mintContainer.classList.remove("hidden");
setTotalPrice();
} else if (presaleMintActive) {
startTime = window.info.runtimeConfig.publicMintStart;
mainHeading.innerText = h1_presale_mint;
subHeading.innerText = h2_presale_mint;
-
+
try {
// CHECK IF WHITELISTED
const merkleData = await fetch(
`/.netlify/functions/merkleProof/?wallet=${window.address}&chain=${chain}&contract=${contractAddress}`
);
const merkleJson = await merkleData.json();
- const whitelisted = await contract.methods.isWhitelisted(window.address, merkleJson).call();
- if(!whitelisted) {
+ const whitelisted = await contract.methods
+ .isWhitelisted(window.address, merkleJson)
+ .call();
+ if (!whitelisted) {
mainText.innerText = p_presale_mint_not_whitelisted;
actionButton.innerText = button_presale_mint_not_whitelisted;
} else {
mainText.innerText = p_presale_mint_whitelisted;
- actionButton.classList.add('hidden');
+ actionButton.classList.add("hidden");
mintButton.innerText = button_presale_mint_whitelisted;
- mintContainer.classList.remove('hidden');
+ mintContainer.classList.remove("hidden");
}
- } catch(e) {
+ } catch (e) {
// console.log(e);
mainText.innerText = p_presale_mint_already_minted;
actionButton.innerText = button_presale_already_minted;
@@ -214,26 +222,26 @@ async function loadInfo() {
countdown();
// HIDE SPINNER
- spinner.classList.add('hidden');
+ spinner.classList.add("hidden");
// SHOW CARD
setTimeout(() => {
- const countdownCard = document.querySelector('.countdown');
- countdownCard.classList.add('show-card');
+ const countdownCard = document.querySelector(".countdown");
+ countdownCard.classList.add("show-card");
}, 1000);
- let priceType = '';
- if(chain === 'rinkeby' || chain === 'ethereum') {
- priceType = 'ETH';
- } else if (chain === 'polygon') {
- priceType = 'MATIC';
+ let priceType = "";
+ if (chain === "rinkeby" || chain === "ethereum") {
+ priceType = "ETH";
+ } else if (chain === "polygon") {
+ priceType = "MATIC";
}
- const price = web3.utils.fromWei(info.deploymentConfig.mintPrice, 'ether');
+ const price = web3.utils.fromWei(info.runtimeConfig.publicMintPrice, "ether");
const pricePerMint = document.getElementById("pricePerMint");
const maxPerMint = document.getElementById("maxPerMint");
const totalSupply = document.getElementById("totalSupply");
const mintInput = document.getElementById("mintInput");
-
+
pricePerMint.innerText = `${price} ${priceType}`;
maxPerMint.innerText = `${info.deploymentConfig.tokensPerMint}`;
totalSupply.innerText = `${info.deploymentConfig.maxSupply}`;
@@ -247,24 +255,24 @@ async function loadInfo() {
const max = mintInput.attributes.max.value || false;
mintDecrement.onclick = () => {
let value = parseInt(mintInput.value) - 1 || 1;
- if(!min || value >= min) {
+ if (!min || value >= min) {
mintInput.value = value;
- setTotalPrice()
+ setTotalPrice();
}
};
mintIncrement.onclick = () => {
let value = parseInt(mintInput.value) + 1 || 1;
- if(!max || value <= max) {
+ if (!max || value <= max) {
mintInput.value = value;
- setTotalPrice()
+ setTotalPrice();
}
};
setQtyMax.onclick = () => {
mintInput.value = max;
- setTotalPrice()
+ setTotalPrice();
};
mintInput.onchange = () => {
- setTotalPrice()
+ setTotalPrice();
};
mintInput.onkeyup = async (e) => {
if (e.keyCode === 13) {
@@ -279,21 +287,25 @@ function setTotalPrice() {
const mintInputValue = parseInt(mintInput.value);
const totalPrice = document.getElementById("totalPrice");
const mintButton = document.getElementById("mintButton");
- if(mintInputValue < 1 || mintInputValue > info.deploymentConfig.tokensPerMint) {
- totalPrice.innerText = 'INVALID QUANTITY';
+ if (
+ mintInputValue < 1 ||
+ mintInputValue > info.deploymentConfig.tokensPerMint
+ ) {
+ totalPrice.innerText = "INVALID QUANTITY";
mintButton.disabled = true;
mintInput.disabled = true;
return;
}
- const totalPriceWei = BigInt(info.deploymentConfig.mintPrice) * BigInt(mintInputValue);
-
- let priceType = '';
- if(chain === 'rinkeby' || chain === 'ethereum') {
- priceType = 'ETH';
- } else if (chain === 'polygon') {
- priceType = 'MATIC';
+ const totalPriceWei =
+ BigInt(info.runtimeConfig.publicMintPrice) * BigInt(mintInputValue);
+
+ let priceType = "";
+ if (chain === "rinkeby" || chain === "ethereum") {
+ priceType = "ETH";
+ } else if (chain === "polygon") {
+ priceType = "MATIC";
}
- const price = web3.utils.fromWei(totalPriceWei.toString(), 'ether');
+ const price = web3.utils.fromWei(totalPriceWei.toString(), "ether");
totalPrice.innerText = `${price} ${priceType}`;
mintButton.disabled = false;
mintInput.disabled = false;
@@ -302,11 +314,12 @@ function setTotalPrice() {
async function mint() {
const mintButton = document.getElementById("mintButton");
mintButton.disabled = true;
- const spinner = '
Waiting for transaction... ';
+ const spinner =
+ '
Waiting for transaction... ';
mintButton.innerHTML = spinner;
const amount = parseInt(document.getElementById("mintInput").value);
- const value = BigInt(info.deploymentConfig.mintPrice) * BigInt(amount);
+ const value = BigInt(info.runtimeConfig.publicMintPrice) * BigInt(amount);
const publicMintActive = await contract.methods.mintingActive().call();
const presaleMintActive = await contract.methods.presaleActive().call();
@@ -316,17 +329,20 @@ async function mint() {
const mintTransaction = await contract.methods
.mint(amount)
.send({ from: window.address, value: value.toString() });
- if(mintTransaction) {
- if(chain === 'rinkeby') {
+ if (mintTransaction) {
+ if (chain === "rinkeby") {
const url = `https://rinkeby.etherscan.io/tx/${mintTransaction.transactionHash}`;
- const mintedContainer = document.querySelector('.minted-container');
- const countdownContainer = document.querySelector('.countdown');
+ const mintedContainer = document.querySelector(".minted-container");
+ const countdownContainer = document.querySelector(".countdown");
const mintedTxnBtn = document.getElementById("mintedTxnBtn");
mintedTxnBtn.href = url;
- countdownContainer.classList.add('hidden');
- mintedContainer.classList.remove('hidden');
+ countdownContainer.classList.add("hidden");
+ mintedContainer.classList.remove("hidden");
}
- console.log("Minted successfully!", `Transaction Hash: ${mintTransaction.transactionHash}`);
+ console.log(
+ "Minted successfully!",
+ `Transaction Hash: ${mintTransaction.transactionHash}`
+ );
} else {
const mainText = document.getElementById("mainText");
mainText.innerText = mint_failed;
@@ -335,7 +351,7 @@ async function mint() {
console.log("Failed to mint!");
}
- } catch(e) {
+ } catch (e) {
const mainText = document.getElementById("mainText");
mainText.innerText = mint_failed;
mintButton.innerText = button_public_mint;
@@ -353,17 +369,20 @@ async function mint() {
const presaleMintTransaction = await contract.methods
.presaleMint(amount, merkleJson)
.send({ from: window.address, value: value.toString() });
- if(presaleMintTransaction) {
- if(chain === 'rinkeby') {
+ if (presaleMintTransaction) {
+ if (chain === "rinkeby") {
const url = `https://rinkeby.etherscan.io/tx/${presaleMintTransaction.transactionHash}`;
- const mintedContainer = document.querySelector('.minted-container');
- const countdownContainer = document.querySelector('.countdown');
+ const mintedContainer = document.querySelector(".minted-container");
+ const countdownContainer = document.querySelector(".countdown");
const mintedTxnBtn = document.getElementById("mintedTxnBtn");
mintedTxnBtn.href = url;
- countdownContainer.classList.add('hidden');
- mintedContainer.classList.remove('hidden');
+ countdownContainer.classList.add("hidden");
+ mintedContainer.classList.remove("hidden");
}
- console.log("Minted successfully!", `Transaction Hash: ${presaleMintTransaction.transactionHash}`);
+ console.log(
+ "Minted successfully!",
+ `Transaction Hash: ${presaleMintTransaction.transactionHash}`
+ );
} else {
const mainText = document.getElementById("mainText");
mainText.innerText = mint_failed;
@@ -372,7 +391,7 @@ async function mint() {
console.log("Failed to mint!");
}
- } catch(e) {
+ } catch (e) {
const mainText = document.getElementById("mainText");
mainText.innerText = mint_failed;
mintButton.innerText = button_presale_mint_whitelisted;
diff --git a/frontend/js/constants.js b/frontend/js/constants.js
index 1d8868462d..dd94b496ff 100644
--- a/frontend/js/constants.js
+++ b/frontend/js/constants.js
@@ -1,18 +1,23 @@
-const contractAddress = "YOUR CONTRACT ADDRESS"; // Replace with your own contract address
-const chain = 'rinkeby'; // rinkeby, polygon, or ethereum
+const contractAddress = "0x2b401cb418ad428b3103a7DA72ACbCf4561D9ca7"; // Replace with your own contract address
+const chain = "polygon"; // rinkeby, polygon, or ethereum
-const welcome_h1 = "Welcome to the CodeCats NFT Project!!";
-const welcome_h2 = "Connect to MetaMask to Get Started";
-const welcome_p = 'The CodeCats NFT Project is a decentralized, open-source project that aims to demonstrate how to develope and launch your own NFT Collection. Follow step by step on the
codeSTACKr YouTube channel.';
+const welcome_h1 = "We Secure Your Future!!!";
+const welcome_h2 = "Welcome to the Centurion Project!!";
+const welcome_p =
+ "Building a unique NFT that will provide you
with non-ending benefits that can be passed down
to future generations, assuring your
FINANCIAL SECURITY for today and the future.";
const h1_presale_coming_soon = "NFT Drop Coming Soon!!";
const h1_presale_mint = "Pre-Sale Minting Open!!";
const h1_public_mint = "Public Minting Open!!";
const h2_presale_coming_soon = "Pre-Sale Minting Countdown";
const h2_presale_mint = "Public Minting Countdown";
-const p_presale_coming_soon = "We are working hard to launch the NFT Collection. Stay tuned for updates!";
-const p_presale_mint_not_whitelisted = "You are not whitelisted for the pre-sale.. 😢";
-const p_presale_mint_whitelisted = "You're on the whitelist for the pre-sale! 🎉";
-const p_presale_mint_already_minted = "You've already claimed your whitelist mint. Thank you! 🎉";
+const p_presale_coming_soon =
+ "We are working hard to launch the NFT Collection. Stay tuned for updates!";
+const p_presale_mint_not_whitelisted =
+ "You are not whitelisted for the pre-sale.. 😢";
+const p_presale_mint_whitelisted =
+ "You're on the whitelist for the pre-sale! 🎉";
+const p_presale_mint_already_minted =
+ "You've already claimed your whitelist mint. Thank you! 🎉";
const p_public_mint = "No whitelist needed. Public minting is now open! 🎉";
const button_presale_coming_soon = "Get on the Whitelist";
const button_presale_mint_whitelisted = "Mint Your Special NFT";
@@ -20,3 +25,1577 @@ const button_presale_mint_not_whitelisted = "Get on the Whitelist";
const button_presale_already_minted = "Join The Community";
const button_public_mint = "Mint Your NFT";
const mint_failed = "Minting failed. 😢 Please try again.";
+
+const abi = [
+ {
+ inputs: [
+ {
+ components: [
+ {
+ internalType: "string",
+ name: "name",
+ type: "string",
+ },
+ {
+ internalType: "string",
+ name: "symbol",
+ type: "string",
+ },
+ {
+ internalType: "address",
+ name: "owner",
+ type: "address",
+ },
+ {
+ internalType: "uint256",
+ name: "maxSupply",
+ type: "uint256",
+ },
+ {
+ internalType: "uint256",
+ name: "reservedSupply",
+ type: "uint256",
+ },
+ {
+ internalType: "uint256",
+ name: "tokensPerMint",
+ type: "uint256",
+ },
+ {
+ internalType: "address payable",
+ name: "treasuryAddress",
+ type: "address",
+ },
+ ],
+ internalType: "struct NFTCollection.DeploymentConfig",
+ name: "deploymentConfig",
+ type: "tuple",
+ },
+ {
+ components: [
+ {
+ internalType: "string",
+ name: "baseURI",
+ type: "string",
+ },
+ {
+ internalType: "bool",
+ name: "metadataUpdatable",
+ type: "bool",
+ },
+ {
+ internalType: "uint256",
+ name: "publicMintPrice",
+ type: "uint256",
+ },
+ {
+ internalType: "bool",
+ name: "publicMintPriceFrozen",
+ type: "bool",
+ },
+ {
+ internalType: "uint256",
+ name: "presaleMintPrice",
+ type: "uint256",
+ },
+ {
+ internalType: "bool",
+ name: "presaleMintPriceFrozen",
+ type: "bool",
+ },
+ {
+ internalType: "uint256",
+ name: "publicMintStart",
+ type: "uint256",
+ },
+ {
+ internalType: "uint256",
+ name: "presaleMintStart",
+ type: "uint256",
+ },
+ {
+ internalType: "string",
+ name: "prerevealTokenURI",
+ type: "string",
+ },
+ {
+ internalType: "bytes32",
+ name: "presaleMerkleRoot",
+ type: "bytes32",
+ },
+ {
+ internalType: "uint256",
+ name: "royaltiesBps",
+ type: "uint256",
+ },
+ {
+ internalType: "address",
+ name: "royaltiesAddress",
+ type: "address",
+ },
+ ],
+ internalType: "struct NFTCollection.RuntimeConfig",
+ name: "runtimeConfig",
+ type: "tuple",
+ },
+ ],
+ stateMutability: "nonpayable",
+ type: "constructor",
+ signature: "constructor",
+ },
+ {
+ inputs: [],
+ name: "ApprovalCallerNotOwnerNorApproved",
+ type: "error",
+ },
+ {
+ inputs: [],
+ name: "ApprovalQueryForNonexistentToken",
+ type: "error",
+ },
+ {
+ inputs: [],
+ name: "ApprovalToCurrentOwner",
+ type: "error",
+ },
+ {
+ inputs: [],
+ name: "ApproveToCaller",
+ type: "error",
+ },
+ {
+ inputs: [],
+ name: "BalanceQueryForZeroAddress",
+ type: "error",
+ },
+ {
+ inputs: [],
+ name: "MintToZeroAddress",
+ type: "error",
+ },
+ {
+ inputs: [],
+ name: "MintZeroQuantity",
+ type: "error",
+ },
+ {
+ inputs: [],
+ name: "OwnerQueryForNonexistentToken",
+ type: "error",
+ },
+ {
+ inputs: [],
+ name: "TransferCallerNotOwnerNorApproved",
+ type: "error",
+ },
+ {
+ inputs: [],
+ name: "TransferFromIncorrectOwner",
+ type: "error",
+ },
+ {
+ inputs: [],
+ name: "TransferToNonERC721ReceiverImplementer",
+ type: "error",
+ },
+ {
+ inputs: [],
+ name: "TransferToZeroAddress",
+ type: "error",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: true,
+ internalType: "address",
+ name: "owner",
+ type: "address",
+ },
+ {
+ indexed: true,
+ internalType: "address",
+ name: "approved",
+ type: "address",
+ },
+ {
+ indexed: true,
+ internalType: "uint256",
+ name: "tokenId",
+ type: "uint256",
+ },
+ ],
+ name: "Approval",
+ type: "event",
+ signature:
+ "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: true,
+ internalType: "address",
+ name: "owner",
+ type: "address",
+ },
+ {
+ indexed: true,
+ internalType: "address",
+ name: "operator",
+ type: "address",
+ },
+ {
+ indexed: false,
+ internalType: "bool",
+ name: "approved",
+ type: "bool",
+ },
+ ],
+ name: "ApprovalForAll",
+ type: "event",
+ signature:
+ "0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: false,
+ internalType: "uint8",
+ name: "version",
+ type: "uint8",
+ },
+ ],
+ name: "Initialized",
+ type: "event",
+ signature:
+ "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: true,
+ internalType: "address",
+ name: "previousOwner",
+ type: "address",
+ },
+ {
+ indexed: true,
+ internalType: "address",
+ name: "newOwner",
+ type: "address",
+ },
+ ],
+ name: "OwnershipTransferred",
+ type: "event",
+ signature:
+ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: true,
+ internalType: "bytes32",
+ name: "role",
+ type: "bytes32",
+ },
+ {
+ indexed: true,
+ internalType: "bytes32",
+ name: "previousAdminRole",
+ type: "bytes32",
+ },
+ {
+ indexed: true,
+ internalType: "bytes32",
+ name: "newAdminRole",
+ type: "bytes32",
+ },
+ ],
+ name: "RoleAdminChanged",
+ type: "event",
+ signature:
+ "0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: true,
+ internalType: "bytes32",
+ name: "role",
+ type: "bytes32",
+ },
+ {
+ indexed: true,
+ internalType: "address",
+ name: "account",
+ type: "address",
+ },
+ {
+ indexed: true,
+ internalType: "address",
+ name: "sender",
+ type: "address",
+ },
+ ],
+ name: "RoleGranted",
+ type: "event",
+ signature:
+ "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: true,
+ internalType: "bytes32",
+ name: "role",
+ type: "bytes32",
+ },
+ {
+ indexed: true,
+ internalType: "address",
+ name: "account",
+ type: "address",
+ },
+ {
+ indexed: true,
+ internalType: "address",
+ name: "sender",
+ type: "address",
+ },
+ ],
+ name: "RoleRevoked",
+ type: "event",
+ signature:
+ "0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b",
+ },
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: true,
+ internalType: "address",
+ name: "from",
+ type: "address",
+ },
+ {
+ indexed: true,
+ internalType: "address",
+ name: "to",
+ type: "address",
+ },
+ {
+ indexed: true,
+ internalType: "uint256",
+ name: "tokenId",
+ type: "uint256",
+ },
+ ],
+ name: "Transfer",
+ type: "event",
+ signature:
+ "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
+ },
+ {
+ inputs: [],
+ name: "ADMIN_ROLE",
+ outputs: [
+ {
+ internalType: "bytes32",
+ name: "",
+ type: "bytes32",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x75b238fc",
+ },
+ {
+ inputs: [],
+ name: "DEFAULT_ADMIN_ROLE",
+ outputs: [
+ {
+ internalType: "bytes32",
+ name: "",
+ type: "bytes32",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0xa217fddf",
+ },
+ {
+ inputs: [],
+ name: "ROYALTIES_BASIS",
+ outputs: [
+ {
+ internalType: "uint16",
+ name: "",
+ type: "uint16",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x9da5b0a5",
+ },
+ {
+ inputs: [],
+ name: "VERSION",
+ outputs: [
+ {
+ internalType: "uint256",
+ name: "",
+ type: "uint256",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0xffa1ad74",
+ },
+ {
+ inputs: [
+ {
+ internalType: "address",
+ name: "to",
+ type: "address",
+ },
+ {
+ internalType: "uint256",
+ name: "tokenId",
+ type: "uint256",
+ },
+ ],
+ name: "approve",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ signature: "0x095ea7b3",
+ },
+ {
+ inputs: [],
+ name: "availableSupply",
+ outputs: [
+ {
+ internalType: "uint256",
+ name: "",
+ type: "uint256",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x7ecc2b56",
+ },
+ {
+ inputs: [
+ {
+ internalType: "address",
+ name: "owner",
+ type: "address",
+ },
+ ],
+ name: "balanceOf",
+ outputs: [
+ {
+ internalType: "uint256",
+ name: "",
+ type: "uint256",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x70a08231",
+ },
+ {
+ inputs: [],
+ name: "baseURI",
+ outputs: [
+ {
+ internalType: "string",
+ name: "",
+ type: "string",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x6c0360eb",
+ },
+ {
+ inputs: [],
+ name: "contractURI",
+ outputs: [
+ {
+ internalType: "string",
+ name: "",
+ type: "string",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0xe8a3d485",
+ },
+ {
+ inputs: [
+ {
+ internalType: "uint256",
+ name: "tokenId",
+ type: "uint256",
+ },
+ ],
+ name: "getApproved",
+ outputs: [
+ {
+ internalType: "address",
+ name: "",
+ type: "address",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x081812fc",
+ },
+ {
+ inputs: [],
+ name: "getInfo",
+ outputs: [
+ {
+ components: [
+ {
+ internalType: "uint256",
+ name: "version",
+ type: "uint256",
+ },
+ {
+ components: [
+ {
+ internalType: "string",
+ name: "name",
+ type: "string",
+ },
+ {
+ internalType: "string",
+ name: "symbol",
+ type: "string",
+ },
+ {
+ internalType: "address",
+ name: "owner",
+ type: "address",
+ },
+ {
+ internalType: "uint256",
+ name: "maxSupply",
+ type: "uint256",
+ },
+ {
+ internalType: "uint256",
+ name: "reservedSupply",
+ type: "uint256",
+ },
+ {
+ internalType: "uint256",
+ name: "tokensPerMint",
+ type: "uint256",
+ },
+ {
+ internalType: "address payable",
+ name: "treasuryAddress",
+ type: "address",
+ },
+ ],
+ internalType: "struct NFTCollection.DeploymentConfig",
+ name: "deploymentConfig",
+ type: "tuple",
+ },
+ {
+ components: [
+ {
+ internalType: "string",
+ name: "baseURI",
+ type: "string",
+ },
+ {
+ internalType: "bool",
+ name: "metadataUpdatable",
+ type: "bool",
+ },
+ {
+ internalType: "uint256",
+ name: "publicMintPrice",
+ type: "uint256",
+ },
+ {
+ internalType: "bool",
+ name: "publicMintPriceFrozen",
+ type: "bool",
+ },
+ {
+ internalType: "uint256",
+ name: "presaleMintPrice",
+ type: "uint256",
+ },
+ {
+ internalType: "bool",
+ name: "presaleMintPriceFrozen",
+ type: "bool",
+ },
+ {
+ internalType: "uint256",
+ name: "publicMintStart",
+ type: "uint256",
+ },
+ {
+ internalType: "uint256",
+ name: "presaleMintStart",
+ type: "uint256",
+ },
+ {
+ internalType: "string",
+ name: "prerevealTokenURI",
+ type: "string",
+ },
+ {
+ internalType: "bytes32",
+ name: "presaleMerkleRoot",
+ type: "bytes32",
+ },
+ {
+ internalType: "uint256",
+ name: "royaltiesBps",
+ type: "uint256",
+ },
+ {
+ internalType: "address",
+ name: "royaltiesAddress",
+ type: "address",
+ },
+ ],
+ internalType: "struct NFTCollection.RuntimeConfig",
+ name: "runtimeConfig",
+ type: "tuple",
+ },
+ ],
+ internalType: "struct NFTCollection.ContractInfo",
+ name: "info",
+ type: "tuple",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x5a9b0b89",
+ },
+ {
+ inputs: [
+ {
+ internalType: "bytes32",
+ name: "role",
+ type: "bytes32",
+ },
+ ],
+ name: "getRoleAdmin",
+ outputs: [
+ {
+ internalType: "bytes32",
+ name: "",
+ type: "bytes32",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x248a9ca3",
+ },
+ {
+ inputs: [
+ {
+ internalType: "bytes32",
+ name: "role",
+ type: "bytes32",
+ },
+ {
+ internalType: "address",
+ name: "account",
+ type: "address",
+ },
+ ],
+ name: "grantRole",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ signature: "0x2f2ff15d",
+ },
+ {
+ inputs: [
+ {
+ internalType: "bytes32",
+ name: "role",
+ type: "bytes32",
+ },
+ {
+ internalType: "address",
+ name: "account",
+ type: "address",
+ },
+ ],
+ name: "hasRole",
+ outputs: [
+ {
+ internalType: "bool",
+ name: "",
+ type: "bool",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x91d14854",
+ },
+ {
+ inputs: [
+ {
+ components: [
+ {
+ internalType: "string",
+ name: "name",
+ type: "string",
+ },
+ {
+ internalType: "string",
+ name: "symbol",
+ type: "string",
+ },
+ {
+ internalType: "address",
+ name: "owner",
+ type: "address",
+ },
+ {
+ internalType: "uint256",
+ name: "maxSupply",
+ type: "uint256",
+ },
+ {
+ internalType: "uint256",
+ name: "reservedSupply",
+ type: "uint256",
+ },
+ {
+ internalType: "uint256",
+ name: "tokensPerMint",
+ type: "uint256",
+ },
+ {
+ internalType: "address payable",
+ name: "treasuryAddress",
+ type: "address",
+ },
+ ],
+ internalType: "struct NFTCollection.DeploymentConfig",
+ name: "deploymentConfig",
+ type: "tuple",
+ },
+ {
+ components: [
+ {
+ internalType: "string",
+ name: "baseURI",
+ type: "string",
+ },
+ {
+ internalType: "bool",
+ name: "metadataUpdatable",
+ type: "bool",
+ },
+ {
+ internalType: "uint256",
+ name: "publicMintPrice",
+ type: "uint256",
+ },
+ {
+ internalType: "bool",
+ name: "publicMintPriceFrozen",
+ type: "bool",
+ },
+ {
+ internalType: "uint256",
+ name: "presaleMintPrice",
+ type: "uint256",
+ },
+ {
+ internalType: "bool",
+ name: "presaleMintPriceFrozen",
+ type: "bool",
+ },
+ {
+ internalType: "uint256",
+ name: "publicMintStart",
+ type: "uint256",
+ },
+ {
+ internalType: "uint256",
+ name: "presaleMintStart",
+ type: "uint256",
+ },
+ {
+ internalType: "string",
+ name: "prerevealTokenURI",
+ type: "string",
+ },
+ {
+ internalType: "bytes32",
+ name: "presaleMerkleRoot",
+ type: "bytes32",
+ },
+ {
+ internalType: "uint256",
+ name: "royaltiesBps",
+ type: "uint256",
+ },
+ {
+ internalType: "address",
+ name: "royaltiesAddress",
+ type: "address",
+ },
+ ],
+ internalType: "struct NFTCollection.RuntimeConfig",
+ name: "runtimeConfig",
+ type: "tuple",
+ },
+ ],
+ name: "initialize",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ signature: "0xd1bff694",
+ },
+ {
+ inputs: [
+ {
+ internalType: "address",
+ name: "owner",
+ type: "address",
+ },
+ {
+ internalType: "address",
+ name: "operator",
+ type: "address",
+ },
+ ],
+ name: "isApprovedForAll",
+ outputs: [
+ {
+ internalType: "bool",
+ name: "",
+ type: "bool",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0xe985e9c5",
+ },
+ {
+ inputs: [
+ {
+ internalType: "address",
+ name: "wallet",
+ type: "address",
+ },
+ {
+ internalType: "bytes32[]",
+ name: "proof",
+ type: "bytes32[]",
+ },
+ ],
+ name: "isWhitelisted",
+ outputs: [
+ {
+ internalType: "bool",
+ name: "",
+ type: "bool",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x5a23dd99",
+ },
+ {
+ inputs: [],
+ name: "maxSupply",
+ outputs: [
+ {
+ internalType: "uint256",
+ name: "",
+ type: "uint256",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0xd5abeb01",
+ },
+ {
+ inputs: [],
+ name: "metadataUpdatable",
+ outputs: [
+ {
+ internalType: "bool",
+ name: "",
+ type: "bool",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x4e6f9dd6",
+ },
+ {
+ inputs: [
+ {
+ internalType: "uint256",
+ name: "amount",
+ type: "uint256",
+ },
+ ],
+ name: "mint",
+ outputs: [],
+ stateMutability: "payable",
+ type: "function",
+ payable: true,
+ signature: "0xa0712d68",
+ },
+ {
+ inputs: [],
+ name: "mintingActive",
+ outputs: [
+ {
+ internalType: "bool",
+ name: "",
+ type: "bool",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x31f9c919",
+ },
+ {
+ inputs: [],
+ name: "name",
+ outputs: [
+ {
+ internalType: "string",
+ name: "",
+ type: "string",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x06fdde03",
+ },
+ {
+ inputs: [],
+ name: "owner",
+ outputs: [
+ {
+ internalType: "address",
+ name: "",
+ type: "address",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x8da5cb5b",
+ },
+ {
+ inputs: [
+ {
+ internalType: "uint256",
+ name: "tokenId",
+ type: "uint256",
+ },
+ ],
+ name: "ownerOf",
+ outputs: [
+ {
+ internalType: "address",
+ name: "",
+ type: "address",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x6352211e",
+ },
+ {
+ inputs: [],
+ name: "prerevealTokenURI",
+ outputs: [
+ {
+ internalType: "string",
+ name: "",
+ type: "string",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0xf4ad0f97",
+ },
+ {
+ inputs: [],
+ name: "presaleActive",
+ outputs: [
+ {
+ internalType: "bool",
+ name: "",
+ type: "bool",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x53135ca0",
+ },
+ {
+ inputs: [],
+ name: "presaleMerkleRoot",
+ outputs: [
+ {
+ internalType: "bytes32",
+ name: "",
+ type: "bytes32",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x22212e2b",
+ },
+ {
+ inputs: [
+ {
+ internalType: "uint256",
+ name: "amount",
+ type: "uint256",
+ },
+ {
+ internalType: "bytes32[]",
+ name: "proof",
+ type: "bytes32[]",
+ },
+ ],
+ name: "presaleMint",
+ outputs: [],
+ stateMutability: "payable",
+ type: "function",
+ payable: true,
+ signature: "0xe3e1e8ef",
+ },
+ {
+ inputs: [],
+ name: "presaleMintPrice",
+ outputs: [
+ {
+ internalType: "uint256",
+ name: "",
+ type: "uint256",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x5be50521",
+ },
+ {
+ inputs: [],
+ name: "presaleMintStart",
+ outputs: [
+ {
+ internalType: "uint256",
+ name: "",
+ type: "uint256",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x4653124b",
+ },
+ {
+ inputs: [],
+ name: "publicMintPrice",
+ outputs: [
+ {
+ internalType: "uint256",
+ name: "",
+ type: "uint256",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0xdc53fd92",
+ },
+ {
+ inputs: [],
+ name: "publicMintStart",
+ outputs: [
+ {
+ internalType: "uint256",
+ name: "",
+ type: "uint256",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x8cfec4c0",
+ },
+ {
+ inputs: [
+ {
+ internalType: "bytes32",
+ name: "role",
+ type: "bytes32",
+ },
+ {
+ internalType: "address",
+ name: "account",
+ type: "address",
+ },
+ ],
+ name: "renounceRole",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ signature: "0x36568abe",
+ },
+ {
+ inputs: [
+ {
+ internalType: "address",
+ name: "to",
+ type: "address",
+ },
+ {
+ internalType: "uint256",
+ name: "amount",
+ type: "uint256",
+ },
+ ],
+ name: "reserveMint",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ signature: "0xb0ea1802",
+ },
+ {
+ inputs: [],
+ name: "reserveRemaining",
+ outputs: [
+ {
+ internalType: "uint256",
+ name: "",
+ type: "uint256",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x5c629f4c",
+ },
+ {
+ inputs: [],
+ name: "reservedSupply",
+ outputs: [
+ {
+ internalType: "uint256",
+ name: "",
+ type: "uint256",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x44d19d2b",
+ },
+ {
+ inputs: [
+ {
+ internalType: "bytes32",
+ name: "role",
+ type: "bytes32",
+ },
+ {
+ internalType: "address",
+ name: "account",
+ type: "address",
+ },
+ ],
+ name: "revokeRole",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ signature: "0xd547741f",
+ },
+ {
+ inputs: [
+ {
+ internalType: "uint256",
+ name: "",
+ type: "uint256",
+ },
+ {
+ internalType: "uint256",
+ name: "salePrice",
+ type: "uint256",
+ },
+ ],
+ name: "royaltyInfo",
+ outputs: [
+ {
+ internalType: "address",
+ name: "receiver",
+ type: "address",
+ },
+ {
+ internalType: "uint256",
+ name: "royaltyAmount",
+ type: "uint256",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x2a55205a",
+ },
+ {
+ inputs: [
+ {
+ internalType: "address",
+ name: "from",
+ type: "address",
+ },
+ {
+ internalType: "address",
+ name: "to",
+ type: "address",
+ },
+ {
+ internalType: "uint256",
+ name: "tokenId",
+ type: "uint256",
+ },
+ ],
+ name: "safeTransferFrom",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ signature: "0x42842e0e",
+ },
+ {
+ inputs: [
+ {
+ internalType: "address",
+ name: "from",
+ type: "address",
+ },
+ {
+ internalType: "address",
+ name: "to",
+ type: "address",
+ },
+ {
+ internalType: "uint256",
+ name: "tokenId",
+ type: "uint256",
+ },
+ {
+ internalType: "bytes",
+ name: "_data",
+ type: "bytes",
+ },
+ ],
+ name: "safeTransferFrom",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ signature: "0xb88d4fde",
+ },
+ {
+ inputs: [
+ {
+ internalType: "address",
+ name: "operator",
+ type: "address",
+ },
+ {
+ internalType: "bool",
+ name: "approved",
+ type: "bool",
+ },
+ ],
+ name: "setApprovalForAll",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ signature: "0xa22cb465",
+ },
+ {
+ inputs: [
+ {
+ internalType: "bytes4",
+ name: "interfaceId",
+ type: "bytes4",
+ },
+ ],
+ name: "supportsInterface",
+ outputs: [
+ {
+ internalType: "bool",
+ name: "",
+ type: "bool",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x01ffc9a7",
+ },
+ {
+ inputs: [],
+ name: "symbol",
+ outputs: [
+ {
+ internalType: "string",
+ name: "",
+ type: "string",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x95d89b41",
+ },
+ {
+ inputs: [
+ {
+ internalType: "uint256",
+ name: "tokenId",
+ type: "uint256",
+ },
+ ],
+ name: "tokenURI",
+ outputs: [
+ {
+ internalType: "string",
+ name: "",
+ type: "string",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0xc87b56dd",
+ },
+ {
+ inputs: [],
+ name: "tokensPerMint",
+ outputs: [
+ {
+ internalType: "uint256",
+ name: "",
+ type: "uint256",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x0807b9e2",
+ },
+ {
+ inputs: [],
+ name: "totalSupply",
+ outputs: [
+ {
+ internalType: "uint256",
+ name: "",
+ type: "uint256",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0x18160ddd",
+ },
+ {
+ inputs: [
+ {
+ internalType: "address",
+ name: "to",
+ type: "address",
+ },
+ ],
+ name: "transferAdminRights",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ signature: "0xb5106add",
+ },
+ {
+ inputs: [
+ {
+ internalType: "address",
+ name: "from",
+ type: "address",
+ },
+ {
+ internalType: "address",
+ name: "to",
+ type: "address",
+ },
+ {
+ internalType: "uint256",
+ name: "tokenId",
+ type: "uint256",
+ },
+ ],
+ name: "transferFrom",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ signature: "0x23b872dd",
+ },
+ {
+ inputs: [
+ {
+ internalType: "address",
+ name: "newOwner",
+ type: "address",
+ },
+ ],
+ name: "transferOwnership",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ signature: "0xf2fde38b",
+ },
+ {
+ inputs: [],
+ name: "treasuryAddress",
+ outputs: [
+ {
+ internalType: "address",
+ name: "",
+ type: "address",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ constant: true,
+ signature: "0xc5f956af",
+ },
+ {
+ inputs: [
+ {
+ components: [
+ {
+ internalType: "string",
+ name: "baseURI",
+ type: "string",
+ },
+ {
+ internalType: "bool",
+ name: "metadataUpdatable",
+ type: "bool",
+ },
+ {
+ internalType: "uint256",
+ name: "publicMintPrice",
+ type: "uint256",
+ },
+ {
+ internalType: "bool",
+ name: "publicMintPriceFrozen",
+ type: "bool",
+ },
+ {
+ internalType: "uint256",
+ name: "presaleMintPrice",
+ type: "uint256",
+ },
+ {
+ internalType: "bool",
+ name: "presaleMintPriceFrozen",
+ type: "bool",
+ },
+ {
+ internalType: "uint256",
+ name: "publicMintStart",
+ type: "uint256",
+ },
+ {
+ internalType: "uint256",
+ name: "presaleMintStart",
+ type: "uint256",
+ },
+ {
+ internalType: "string",
+ name: "prerevealTokenURI",
+ type: "string",
+ },
+ {
+ internalType: "bytes32",
+ name: "presaleMerkleRoot",
+ type: "bytes32",
+ },
+ {
+ internalType: "uint256",
+ name: "royaltiesBps",
+ type: "uint256",
+ },
+ {
+ internalType: "address",
+ name: "royaltiesAddress",
+ type: "address",
+ },
+ ],
+ internalType: "struct NFTCollection.RuntimeConfig",
+ name: "newConfig",
+ type: "tuple",
+ },
+ ],
+ name: "updateConfig",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ signature: "0xd761aa48",
+ },
+ {
+ inputs: [],
+ name: "withdrawFees",
+ outputs: [],
+ stateMutability: "nonpayable",
+ type: "function",
+ signature: "0x476343ee",
+ },
+];
diff --git a/frontend/js/countdown.js b/frontend/js/countdown.js
index dc65528524..c8711d899c 100644
--- a/frontend/js/countdown.js
+++ b/frontend/js/countdown.js
@@ -1,7 +1,7 @@
//Countdown Timer
function countdown() {
const clockdiv = document.getElementById("countdown");
- const countDownTime = clockdiv.getAttribute("data-date") * 1000
+ const countDownTime = clockdiv.getAttribute("data-date") * 1000;
const countdownfunction = setInterval(function () {
const now = new Date().getTime();
@@ -12,7 +12,7 @@ function countdown() {
const seconds = Math.floor((diff % (1000 * 60)) / 1000);
if (diff < 0) {
- clockdiv.style.display = "none";
+ clockdiv.style.display = "";
clearInterval(countdownfunction);
} else {
clockdiv.style.display = "block";
diff --git a/frontend/js/faq.js b/frontend/js/faq.js
new file mode 100644
index 0000000000..f2274a5754
--- /dev/null
+++ b/frontend/js/faq.js
@@ -0,0 +1,7 @@
+const toggles = document.querySelectorAll(".faq-toggle");
+
+toggles.forEach((toggle) => {
+ toggle.addEventListener("click", () => {
+ toggle.parentNode.classList.toggle("active");
+ });
+});
diff --git a/frontend/js/metamask-onboarding.bundle.js b/frontend/js/metamask-onboarding.bundle.js
index 4cf4117bca..9a4e5ff965 100644
--- a/frontend/js/metamask-onboarding.bundle.js
+++ b/frontend/js/metamask-onboarding.bundle.js
@@ -1,5 +1,5 @@
var MetaMaskOnboarding = (function () {
- 'use strict';
+ "use strict";
/*! *****************************************************************************
Copyright (c) Microsoft Corporation.
@@ -17,158 +17,251 @@ var MetaMaskOnboarding = (function () {
***************************************************************************** */
function __awaiter(thisArg, _arguments, P, generator) {
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
- return new (P || (P = Promise))(function (resolve, reject) {
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
- step((generator = generator.apply(thisArg, _arguments || [])).next());
- });
+ function adopt(value) {
+ return value instanceof P
+ ? value
+ : new P(function (resolve) {
+ resolve(value);
+ });
+ }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) {
+ try {
+ step(generator.next(value));
+ } catch (e) {
+ reject(e);
+ }
+ }
+ function rejected(value) {
+ try {
+ step(generator["throw"](value));
+ } catch (e) {
+ reject(e);
+ }
+ }
+ function step(result) {
+ result.done
+ ? resolve(result.value)
+ : adopt(result.value).then(fulfilled, rejected);
+ }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
}
function __generator(thisArg, body) {
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
- function verb(n) { return function (v) { return step([n, v]); }; }
- function step(op) {
- if (f) throw new TypeError("Generator is already executing.");
- while (_) try {
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
- if (y = 0, t) op = [op[0] & 2, t.value];
- switch (op[0]) {
- case 0: case 1: t = op; break;
- case 4: _.label++; return { value: op[1], done: false };
- case 5: _.label++; y = op[1]; op = [0]; continue;
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
- default:
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
- if (t[2]) _.ops.pop();
- _.trys.pop(); continue;
+ var _ = {
+ label: 0,
+ sent: function () {
+ if (t[0] & 1) throw t[1];
+ return t[1];
+ },
+ trys: [],
+ ops: [],
+ },
+ f,
+ y,
+ t,
+ g;
+ return (
+ (g = { next: verb(0), throw: verb(1), return: verb(2) }),
+ typeof Symbol === "function" &&
+ (g[Symbol.iterator] = function () {
+ return this;
+ }),
+ g
+ );
+ function verb(n) {
+ return function (v) {
+ return step([n, v]);
+ };
+ }
+ function step(op) {
+ if (f) throw new TypeError("Generator is already executing.");
+ while (_)
+ try {
+ if (
+ ((f = 1),
+ y &&
+ (t =
+ op[0] & 2
+ ? y["return"]
+ : op[0]
+ ? y["throw"] || ((t = y["return"]) && t.call(y), 0)
+ : y.next) &&
+ !(t = t.call(y, op[1])).done)
+ )
+ return t;
+ if (((y = 0), t)) op = [op[0] & 2, t.value];
+ switch (op[0]) {
+ case 0:
+ case 1:
+ t = op;
+ break;
+ case 4:
+ _.label++;
+ return { value: op[1], done: false };
+ case 5:
+ _.label++;
+ y = op[1];
+ op = [0];
+ continue;
+ case 7:
+ op = _.ops.pop();
+ _.trys.pop();
+ continue;
+ default:
+ if (
+ !((t = _.trys), (t = t.length > 0 && t[t.length - 1])) &&
+ (op[0] === 6 || op[0] === 2)
+ ) {
+ _ = 0;
+ continue;
}
- op = body.call(thisArg, _);
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
- }
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) {
+ _.label = op[1];
+ break;
+ }
+ if (op[0] === 6 && _.label < t[1]) {
+ _.label = t[1];
+ t = op;
+ break;
+ }
+ if (t && _.label < t[2]) {
+ _.label = t[2];
+ _.ops.push(op);
+ break;
+ }
+ if (t[2]) _.ops.pop();
+ _.trys.pop();
+ continue;
+ }
+ op = body.call(thisArg, _);
+ } catch (e) {
+ op = [6, e];
+ y = 0;
+ } finally {
+ f = t = 0;
+ }
+ if (op[0] & 5) throw op[1];
+ return { value: op[0] ? op[1] : void 0, done: true };
+ }
}
// NOTE: this list must be up-to-date with browsers listed in
// test/acceptance/useragentstrings.yml
const BROWSER_ALIASES_MAP = {
- 'Amazon Silk': 'amazon_silk',
- 'Android Browser': 'android',
- Bada: 'bada',
- BlackBerry: 'blackberry',
- Chrome: 'chrome',
- Chromium: 'chromium',
- Electron: 'electron',
- Epiphany: 'epiphany',
- Firefox: 'firefox',
- Focus: 'focus',
- Generic: 'generic',
- 'Google Search': 'google_search',
- Googlebot: 'googlebot',
- 'Internet Explorer': 'ie',
- 'K-Meleon': 'k_meleon',
- Maxthon: 'maxthon',
- 'Microsoft Edge': 'edge',
- 'MZ Browser': 'mz',
- 'NAVER Whale Browser': 'naver',
- Opera: 'opera',
- 'Opera Coast': 'opera_coast',
- PhantomJS: 'phantomjs',
- Puffin: 'puffin',
- QupZilla: 'qupzilla',
- QQ: 'qq',
- QQLite: 'qqlite',
- Safari: 'safari',
- Sailfish: 'sailfish',
- 'Samsung Internet for Android': 'samsung_internet',
- SeaMonkey: 'seamonkey',
- Sleipnir: 'sleipnir',
- Swing: 'swing',
- Tizen: 'tizen',
- 'UC Browser': 'uc',
- Vivaldi: 'vivaldi',
- 'WebOS Browser': 'webos',
- WeChat: 'wechat',
- 'Yandex Browser': 'yandex',
- Roku: 'roku',
+ "Amazon Silk": "amazon_silk",
+ "Android Browser": "android",
+ Bada: "bada",
+ BlackBerry: "blackberry",
+ Chrome: "chrome",
+ Chromium: "chromium",
+ Electron: "electron",
+ Epiphany: "epiphany",
+ Firefox: "firefox",
+ Focus: "focus",
+ Generic: "generic",
+ "Google Search": "google_search",
+ Googlebot: "googlebot",
+ "Internet Explorer": "ie",
+ "K-Meleon": "k_meleon",
+ Maxthon: "maxthon",
+ "Microsoft Edge": "edge",
+ "MZ Browser": "mz",
+ "NAVER Whale Browser": "naver",
+ Opera: "opera",
+ "Opera Coast": "opera_coast",
+ PhantomJS: "phantomjs",
+ Puffin: "puffin",
+ QupZilla: "qupzilla",
+ QQ: "qq",
+ QQLite: "qqlite",
+ Safari: "safari",
+ Sailfish: "sailfish",
+ "Samsung Internet for Android": "samsung_internet",
+ SeaMonkey: "seamonkey",
+ Sleipnir: "sleipnir",
+ Swing: "swing",
+ Tizen: "tizen",
+ "UC Browser": "uc",
+ Vivaldi: "vivaldi",
+ "WebOS Browser": "webos",
+ WeChat: "wechat",
+ "Yandex Browser": "yandex",
+ Roku: "roku",
};
const BROWSER_MAP = {
- amazon_silk: 'Amazon Silk',
- android: 'Android Browser',
- bada: 'Bada',
- blackberry: 'BlackBerry',
- chrome: 'Chrome',
- chromium: 'Chromium',
- electron: 'Electron',
- epiphany: 'Epiphany',
- firefox: 'Firefox',
- focus: 'Focus',
- generic: 'Generic',
- googlebot: 'Googlebot',
- google_search: 'Google Search',
- ie: 'Internet Explorer',
- k_meleon: 'K-Meleon',
- maxthon: 'Maxthon',
- edge: 'Microsoft Edge',
- mz: 'MZ Browser',
- naver: 'NAVER Whale Browser',
- opera: 'Opera',
- opera_coast: 'Opera Coast',
- phantomjs: 'PhantomJS',
- puffin: 'Puffin',
- qupzilla: 'QupZilla',
- qq: 'QQ Browser',
- qqlite: 'QQ Browser Lite',
- safari: 'Safari',
- sailfish: 'Sailfish',
- samsung_internet: 'Samsung Internet for Android',
- seamonkey: 'SeaMonkey',
- sleipnir: 'Sleipnir',
- swing: 'Swing',
- tizen: 'Tizen',
- uc: 'UC Browser',
- vivaldi: 'Vivaldi',
- webos: 'WebOS Browser',
- wechat: 'WeChat',
- yandex: 'Yandex Browser',
+ amazon_silk: "Amazon Silk",
+ android: "Android Browser",
+ bada: "Bada",
+ blackberry: "BlackBerry",
+ chrome: "Chrome",
+ chromium: "Chromium",
+ electron: "Electron",
+ epiphany: "Epiphany",
+ firefox: "Firefox",
+ focus: "Focus",
+ generic: "Generic",
+ googlebot: "Googlebot",
+ google_search: "Google Search",
+ ie: "Internet Explorer",
+ k_meleon: "K-Meleon",
+ maxthon: "Maxthon",
+ edge: "Microsoft Edge",
+ mz: "MZ Browser",
+ naver: "NAVER Whale Browser",
+ opera: "Opera",
+ opera_coast: "Opera Coast",
+ phantomjs: "PhantomJS",
+ puffin: "Puffin",
+ qupzilla: "QupZilla",
+ qq: "QQ Browser",
+ qqlite: "QQ Browser Lite",
+ safari: "Safari",
+ sailfish: "Sailfish",
+ samsung_internet: "Samsung Internet for Android",
+ seamonkey: "SeaMonkey",
+ sleipnir: "Sleipnir",
+ swing: "Swing",
+ tizen: "Tizen",
+ uc: "UC Browser",
+ vivaldi: "Vivaldi",
+ webos: "WebOS Browser",
+ wechat: "WeChat",
+ yandex: "Yandex Browser",
};
const PLATFORMS_MAP = {
- tablet: 'tablet',
- mobile: 'mobile',
- desktop: 'desktop',
- tv: 'tv',
+ tablet: "tablet",
+ mobile: "mobile",
+ desktop: "desktop",
+ tv: "tv",
};
const OS_MAP = {
- WindowsPhone: 'Windows Phone',
- Windows: 'Windows',
- MacOS: 'macOS',
- iOS: 'iOS',
- Android: 'Android',
- WebOS: 'WebOS',
- BlackBerry: 'BlackBerry',
- Bada: 'Bada',
- Tizen: 'Tizen',
- Linux: 'Linux',
- ChromeOS: 'Chrome OS',
- PlayStation4: 'PlayStation 4',
- Roku: 'Roku',
+ WindowsPhone: "Windows Phone",
+ Windows: "Windows",
+ MacOS: "macOS",
+ iOS: "iOS",
+ Android: "Android",
+ WebOS: "WebOS",
+ BlackBerry: "BlackBerry",
+ Bada: "Bada",
+ Tizen: "Tizen",
+ Linux: "Linux",
+ ChromeOS: "Chrome OS",
+ PlayStation4: "PlayStation 4",
+ Roku: "Roku",
};
const ENGINE_MAP = {
- EdgeHTML: 'EdgeHTML',
- Blink: 'Blink',
- Trident: 'Trident',
- Presto: 'Presto',
- Gecko: 'Gecko',
- WebKit: 'WebKit',
+ EdgeHTML: "EdgeHTML",
+ Blink: "Blink",
+ Trident: "Trident",
+ Presto: "Presto",
+ Gecko: "Gecko",
+ WebKit: "WebKit",
};
class Utils {
@@ -180,7 +273,7 @@ var MetaMaskOnboarding = (function () {
*/
static getFirstMatch(regexp, ua) {
const match = ua.match(regexp);
- return (match && match.length > 0 && match[1]) || '';
+ return (match && match.length > 0 && match[1]) || "";
}
/**
@@ -191,7 +284,7 @@ var MetaMaskOnboarding = (function () {
*/
static getSecondMatch(regexp, ua) {
const match = ua.match(regexp);
- return (match && match.length > 1 && match[2]) || '';
+ return (match && match.length > 1 && match[2]) || "";
}
/**
@@ -205,22 +298,33 @@ var MetaMaskOnboarding = (function () {
if (regexp.test(ua)) {
return _const;
}
- return void (0);
+ return void 0;
}
static getWindowsVersionName(version) {
switch (version) {
- case 'NT': return 'NT';
- case 'XP': return 'XP';
- case 'NT 5.0': return '2000';
- case 'NT 5.1': return 'XP';
- case 'NT 5.2': return '2003';
- case 'NT 6.0': return 'Vista';
- case 'NT 6.1': return '7';
- case 'NT 6.2': return '8';
- case 'NT 6.3': return '8.1';
- case 'NT 10.0': return '10';
- default: return undefined;
+ case "NT":
+ return "NT";
+ case "XP":
+ return "XP";
+ case "NT 5.0":
+ return "2000";
+ case "NT 5.1":
+ return "XP";
+ case "NT 5.2":
+ return "2003";
+ case "NT 6.0":
+ return "Vista";
+ case "NT 6.1":
+ return "7";
+ case "NT 6.2":
+ return "8";
+ case "NT 6.3":
+ return "8.1";
+ case "NT 10.0":
+ return "10";
+ default:
+ return undefined;
}
}
@@ -245,22 +349,37 @@ var MetaMaskOnboarding = (function () {
* @return {string} versionName
*/
static getMacOSVersionName(version) {
- const v = version.split('.').splice(0, 2).map(s => parseInt(s, 10) || 0);
+ const v = version
+ .split(".")
+ .splice(0, 2)
+ .map((s) => parseInt(s, 10) || 0);
v.push(0);
if (v[0] !== 10) return undefined;
switch (v[1]) {
- case 5: return 'Leopard';
- case 6: return 'Snow Leopard';
- case 7: return 'Lion';
- case 8: return 'Mountain Lion';
- case 9: return 'Mavericks';
- case 10: return 'Yosemite';
- case 11: return 'El Capitan';
- case 12: return 'Sierra';
- case 13: return 'High Sierra';
- case 14: return 'Mojave';
- case 15: return 'Catalina';
- default: return undefined;
+ case 5:
+ return "Leopard";
+ case 6:
+ return "Snow Leopard";
+ case 7:
+ return "Lion";
+ case 8:
+ return "Mountain Lion";
+ case 9:
+ return "Mavericks";
+ case 10:
+ return "Yosemite";
+ case 11:
+ return "El Capitan";
+ case 12:
+ return "Sierra";
+ case 13:
+ return "High Sierra";
+ case 14:
+ return "Mojave";
+ case 15:
+ return "Catalina";
+ default:
+ return undefined;
}
}
@@ -289,23 +408,26 @@ var MetaMaskOnboarding = (function () {
* @return {string} versionName
*/
static getAndroidVersionName(version) {
- const v = version.split('.').splice(0, 2).map(s => parseInt(s, 10) || 0);
+ const v = version
+ .split(".")
+ .splice(0, 2)
+ .map((s) => parseInt(s, 10) || 0);
v.push(0);
if (v[0] === 1 && v[1] < 5) return undefined;
- if (v[0] === 1 && v[1] < 6) return 'Cupcake';
- if (v[0] === 1 && v[1] >= 6) return 'Donut';
- if (v[0] === 2 && v[1] < 2) return 'Eclair';
- if (v[0] === 2 && v[1] === 2) return 'Froyo';
- if (v[0] === 2 && v[1] > 2) return 'Gingerbread';
- if (v[0] === 3) return 'Honeycomb';
- if (v[0] === 4 && v[1] < 1) return 'Ice Cream Sandwich';
- if (v[0] === 4 && v[1] < 4) return 'Jelly Bean';
- if (v[0] === 4 && v[1] >= 4) return 'KitKat';
- if (v[0] === 5) return 'Lollipop';
- if (v[0] === 6) return 'Marshmallow';
- if (v[0] === 7) return 'Nougat';
- if (v[0] === 8) return 'Oreo';
- if (v[0] === 9) return 'Pie';
+ if (v[0] === 1 && v[1] < 6) return "Cupcake";
+ if (v[0] === 1 && v[1] >= 6) return "Donut";
+ if (v[0] === 2 && v[1] < 2) return "Eclair";
+ if (v[0] === 2 && v[1] === 2) return "Froyo";
+ if (v[0] === 2 && v[1] > 2) return "Gingerbread";
+ if (v[0] === 3) return "Honeycomb";
+ if (v[0] === 4 && v[1] < 1) return "Ice Cream Sandwich";
+ if (v[0] === 4 && v[1] < 4) return "Jelly Bean";
+ if (v[0] === 4 && v[1] >= 4) return "KitKat";
+ if (v[0] === 5) return "Lollipop";
+ if (v[0] === 6) return "Marshmallow";
+ if (v[0] === 7) return "Nougat";
+ if (v[0] === 8) return "Oreo";
+ if (v[0] === 9) return "Pie";
return undefined;
}
@@ -319,7 +441,7 @@ var MetaMaskOnboarding = (function () {
* @return {number}
*/
static getVersionPrecision(version) {
- return version.split('.').length;
+ return version.split(".").length;
}
/**
@@ -351,15 +473,19 @@ var MetaMaskOnboarding = (function () {
const delta = precision - Utils.getVersionPrecision(version);
// 2) "9" -> "9.0" (for precision = 2)
- const _version = version + new Array(delta + 1).join('.0');
+ const _version = version + new Array(delta + 1).join(".0");
// 3) "9.0" -> ["000000000"", "000000009"]
- return Utils.map(_version.split('.'), chunk => new Array(20 - chunk.length).join('0') + chunk).reverse();
+ return Utils.map(
+ _version.split("."),
+ (chunk) => new Array(20 - chunk.length).join("0") + chunk
+ ).reverse();
});
// adjust precision for loose comparison
if (isLoose) {
- lastPrecision = precision - Math.min(versionAPrecision, versionBPrecision);
+ lastPrecision =
+ precision - Math.min(versionAPrecision, versionBPrecision);
}
// iterate in reverse order by reversed chunks array
@@ -442,7 +568,7 @@ var MetaMaskOnboarding = (function () {
}
for (i = 0, l = assigners.length; i < l; i += 1) {
const assigner = assigners[i];
- if (typeof assigner === 'object' && assigner !== null) {
+ if (typeof assigner === "object" && assigner !== null) {
const keys = Object.keys(assigner);
keys.forEach((key) => {
result[key] = assigner[key];
@@ -475,7 +601,7 @@ var MetaMaskOnboarding = (function () {
* @return {string}
*/
static getBrowserTypeByAlias(browserAlias) {
- return BROWSER_MAP[browserAlias] || '';
+ return BROWSER_MAP[browserAlias] || "";
}
}
@@ -512,9 +638,11 @@ var MetaMaskOnboarding = (function () {
test: [/googlebot/i],
describe(ua) {
const browser = {
- name: 'Googlebot',
+ name: "Googlebot",
};
- const version = Utils.getFirstMatch(/googlebot\/(\d+(\.\d+))/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);
+ const version =
+ Utils.getFirstMatch(/googlebot\/(\d+(\.\d+))/i, ua) ||
+ Utils.getFirstMatch(commonVersionIdentifier, ua);
if (version) {
browser.version = version;
@@ -529,9 +657,11 @@ var MetaMaskOnboarding = (function () {
test: [/opera/i],
describe(ua) {
const browser = {
- name: 'Opera',
+ name: "Opera",
};
- const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i, ua);
+ const version =
+ Utils.getFirstMatch(commonVersionIdentifier, ua) ||
+ Utils.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i, ua);
if (version) {
browser.version = version;
@@ -546,9 +676,11 @@ var MetaMaskOnboarding = (function () {
test: [/opr\/|opios/i],
describe(ua) {
const browser = {
- name: 'Opera',
+ name: "Opera",
};
- const version = Utils.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);
+ const version =
+ Utils.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i, ua) ||
+ Utils.getFirstMatch(commonVersionIdentifier, ua);
if (version) {
browser.version = version;
@@ -561,9 +693,11 @@ var MetaMaskOnboarding = (function () {
test: [/SamsungBrowser/i],
describe(ua) {
const browser = {
- name: 'Samsung Internet for Android',
+ name: "Samsung Internet for Android",
};
- const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i, ua);
+ const version =
+ Utils.getFirstMatch(commonVersionIdentifier, ua) ||
+ Utils.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i, ua);
if (version) {
browser.version = version;
@@ -576,9 +710,11 @@ var MetaMaskOnboarding = (function () {
test: [/Whale/i],
describe(ua) {
const browser = {
- name: 'NAVER Whale Browser',
+ name: "NAVER Whale Browser",
};
- const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i, ua);
+ const version =
+ Utils.getFirstMatch(commonVersionIdentifier, ua) ||
+ Utils.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i, ua);
if (version) {
browser.version = version;
@@ -591,9 +727,11 @@ var MetaMaskOnboarding = (function () {
test: [/MZBrowser/i],
describe(ua) {
const browser = {
- name: 'MZ Browser',
+ name: "MZ Browser",
};
- const version = Utils.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);
+ const version =
+ Utils.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i, ua) ||
+ Utils.getFirstMatch(commonVersionIdentifier, ua);
if (version) {
browser.version = version;
@@ -606,9 +744,11 @@ var MetaMaskOnboarding = (function () {
test: [/focus/i],
describe(ua) {
const browser = {
- name: 'Focus',
+ name: "Focus",
};
- const version = Utils.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);
+ const version =
+ Utils.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i, ua) ||
+ Utils.getFirstMatch(commonVersionIdentifier, ua);
if (version) {
browser.version = version;
@@ -621,9 +761,11 @@ var MetaMaskOnboarding = (function () {
test: [/swing/i],
describe(ua) {
const browser = {
- name: 'Swing',
+ name: "Swing",
};
- const version = Utils.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);
+ const version =
+ Utils.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i, ua) ||
+ Utils.getFirstMatch(commonVersionIdentifier, ua);
if (version) {
browser.version = version;
@@ -636,9 +778,11 @@ var MetaMaskOnboarding = (function () {
test: [/coast/i],
describe(ua) {
const browser = {
- name: 'Opera Coast',
+ name: "Opera Coast",
};
- const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i, ua);
+ const version =
+ Utils.getFirstMatch(commonVersionIdentifier, ua) ||
+ Utils.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i, ua);
if (version) {
browser.version = version;
@@ -651,9 +795,11 @@ var MetaMaskOnboarding = (function () {
test: [/yabrowser/i],
describe(ua) {
const browser = {
- name: 'Yandex Browser',
+ name: "Yandex Browser",
};
- const version = Utils.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);
+ const version =
+ Utils.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i, ua) ||
+ Utils.getFirstMatch(commonVersionIdentifier, ua);
if (version) {
browser.version = version;
@@ -666,9 +812,11 @@ var MetaMaskOnboarding = (function () {
test: [/ucbrowser/i],
describe(ua) {
const browser = {
- name: 'UC Browser',
+ name: "UC Browser",
};
- const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i, ua);
+ const version =
+ Utils.getFirstMatch(commonVersionIdentifier, ua) ||
+ Utils.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i, ua);
if (version) {
browser.version = version;
@@ -681,9 +829,11 @@ var MetaMaskOnboarding = (function () {
test: [/Maxthon|mxios/i],
describe(ua) {
const browser = {
- name: 'Maxthon',
+ name: "Maxthon",
};
- const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i, ua);
+ const version =
+ Utils.getFirstMatch(commonVersionIdentifier, ua) ||
+ Utils.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i, ua);
if (version) {
browser.version = version;
@@ -696,9 +846,11 @@ var MetaMaskOnboarding = (function () {
test: [/epiphany/i],
describe(ua) {
const browser = {
- name: 'Epiphany',
+ name: "Epiphany",
};
- const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i, ua);
+ const version =
+ Utils.getFirstMatch(commonVersionIdentifier, ua) ||
+ Utils.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i, ua);
if (version) {
browser.version = version;
@@ -711,9 +863,11 @@ var MetaMaskOnboarding = (function () {
test: [/puffin/i],
describe(ua) {
const browser = {
- name: 'Puffin',
+ name: "Puffin",
};
- const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i, ua);
+ const version =
+ Utils.getFirstMatch(commonVersionIdentifier, ua) ||
+ Utils.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i, ua);
if (version) {
browser.version = version;
@@ -726,9 +880,11 @@ var MetaMaskOnboarding = (function () {
test: [/sleipnir/i],
describe(ua) {
const browser = {
- name: 'Sleipnir',
+ name: "Sleipnir",
};
- const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i, ua);
+ const version =
+ Utils.getFirstMatch(commonVersionIdentifier, ua) ||
+ Utils.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i, ua);
if (version) {
browser.version = version;
@@ -741,9 +897,11 @@ var MetaMaskOnboarding = (function () {
test: [/k-meleon/i],
describe(ua) {
const browser = {
- name: 'K-Meleon',
+ name: "K-Meleon",
};
- const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i, ua);
+ const version =
+ Utils.getFirstMatch(commonVersionIdentifier, ua) ||
+ Utils.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i, ua);
if (version) {
browser.version = version;
@@ -756,9 +914,11 @@ var MetaMaskOnboarding = (function () {
test: [/micromessenger/i],
describe(ua) {
const browser = {
- name: 'WeChat',
+ name: "WeChat",
};
- const version = Utils.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);
+ const version =
+ Utils.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i, ua) ||
+ Utils.getFirstMatch(commonVersionIdentifier, ua);
if (version) {
browser.version = version;
@@ -771,9 +931,13 @@ var MetaMaskOnboarding = (function () {
test: [/qqbrowser/i],
describe(ua) {
const browser = {
- name: (/qqbrowserlite/i).test(ua) ? 'QQ Browser Lite' : 'QQ Browser',
+ name: /qqbrowserlite/i.test(ua) ? "QQ Browser Lite" : "QQ Browser",
};
- const version = Utils.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);
+ const version =
+ Utils.getFirstMatch(
+ /(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i,
+ ua
+ ) || Utils.getFirstMatch(commonVersionIdentifier, ua);
if (version) {
browser.version = version;
@@ -786,9 +950,12 @@ var MetaMaskOnboarding = (function () {
test: [/msie|trident/i],
describe(ua) {
const browser = {
- name: 'Internet Explorer',
+ name: "Internet Explorer",
};
- const version = Utils.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i, ua);
+ const version = Utils.getFirstMatch(
+ /(?:msie |rv:)(\d+(\.?_?\d+)+)/i,
+ ua
+ );
if (version) {
browser.version = version;
@@ -801,7 +968,7 @@ var MetaMaskOnboarding = (function () {
test: [/\sedg\//i],
describe(ua) {
const browser = {
- name: 'Microsoft Edge',
+ name: "Microsoft Edge",
};
const version = Utils.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i, ua);
@@ -817,10 +984,13 @@ var MetaMaskOnboarding = (function () {
test: [/edg([ea]|ios)/i],
describe(ua) {
const browser = {
- name: 'Microsoft Edge',
+ name: "Microsoft Edge",
};
- const version = Utils.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i, ua);
+ const version = Utils.getSecondMatch(
+ /edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i,
+ ua
+ );
if (version) {
browser.version = version;
@@ -833,7 +1003,7 @@ var MetaMaskOnboarding = (function () {
test: [/vivaldi/i],
describe(ua) {
const browser = {
- name: 'Vivaldi',
+ name: "Vivaldi",
};
const version = Utils.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i, ua);
@@ -848,7 +1018,7 @@ var MetaMaskOnboarding = (function () {
test: [/seamonkey/i],
describe(ua) {
const browser = {
- name: 'SeaMonkey',
+ name: "SeaMonkey",
};
const version = Utils.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i, ua);
@@ -863,10 +1033,13 @@ var MetaMaskOnboarding = (function () {
test: [/sailfish/i],
describe(ua) {
const browser = {
- name: 'Sailfish',
+ name: "Sailfish",
};
- const version = Utils.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i, ua);
+ const version = Utils.getFirstMatch(
+ /sailfish\s?browser\/(\d+(\.\d+)?)/i,
+ ua
+ );
if (version) {
browser.version = version;
@@ -879,7 +1052,7 @@ var MetaMaskOnboarding = (function () {
test: [/silk/i],
describe(ua) {
const browser = {
- name: 'Amazon Silk',
+ name: "Amazon Silk",
};
const version = Utils.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i, ua);
@@ -894,7 +1067,7 @@ var MetaMaskOnboarding = (function () {
test: [/phantom/i],
describe(ua) {
const browser = {
- name: 'PhantomJS',
+ name: "PhantomJS",
};
const version = Utils.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i, ua);
@@ -909,7 +1082,7 @@ var MetaMaskOnboarding = (function () {
test: [/slimerjs/i],
describe(ua) {
const browser = {
- name: 'SlimerJS',
+ name: "SlimerJS",
};
const version = Utils.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i, ua);
@@ -924,9 +1097,11 @@ var MetaMaskOnboarding = (function () {
test: [/blackberry|\bbb\d+/i, /rim\stablet/i],
describe(ua) {
const browser = {
- name: 'BlackBerry',
+ name: "BlackBerry",
};
- const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i, ua);
+ const version =
+ Utils.getFirstMatch(commonVersionIdentifier, ua) ||
+ Utils.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i, ua);
if (version) {
browser.version = version;
@@ -939,9 +1114,11 @@ var MetaMaskOnboarding = (function () {
test: [/(web|hpw)[o0]s/i],
describe(ua) {
const browser = {
- name: 'WebOS Browser',
+ name: "WebOS Browser",
};
- const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i, ua);
+ const version =
+ Utils.getFirstMatch(commonVersionIdentifier, ua) ||
+ Utils.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i, ua);
if (version) {
browser.version = version;
@@ -954,7 +1131,7 @@ var MetaMaskOnboarding = (function () {
test: [/bada/i],
describe(ua) {
const browser = {
- name: 'Bada',
+ name: "Bada",
};
const version = Utils.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i, ua);
@@ -969,9 +1146,11 @@ var MetaMaskOnboarding = (function () {
test: [/tizen/i],
describe(ua) {
const browser = {
- name: 'Tizen',
+ name: "Tizen",
};
- const version = Utils.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);
+ const version =
+ Utils.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i, ua) ||
+ Utils.getFirstMatch(commonVersionIdentifier, ua);
if (version) {
browser.version = version;
@@ -984,9 +1163,11 @@ var MetaMaskOnboarding = (function () {
test: [/qupzilla/i],
describe(ua) {
const browser = {
- name: 'QupZilla',
+ name: "QupZilla",
};
- const version = Utils.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);
+ const version =
+ Utils.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i, ua) ||
+ Utils.getFirstMatch(commonVersionIdentifier, ua);
if (version) {
browser.version = version;
@@ -999,9 +1180,12 @@ var MetaMaskOnboarding = (function () {
test: [/firefox|iceweasel|fxios/i],
describe(ua) {
const browser = {
- name: 'Firefox',
+ name: "Firefox",
};
- const version = Utils.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i, ua);
+ const version = Utils.getFirstMatch(
+ /(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,
+ ua
+ );
if (version) {
browser.version = version;
@@ -1014,9 +1198,12 @@ var MetaMaskOnboarding = (function () {
test: [/electron/i],
describe(ua) {
const browser = {
- name: 'Electron',
+ name: "Electron",
};
- const version = Utils.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i, ua);
+ const version = Utils.getFirstMatch(
+ /(?:electron)\/(\d+(\.?_?\d+)+)/i,
+ ua
+ );
if (version) {
browser.version = version;
@@ -1029,9 +1216,11 @@ var MetaMaskOnboarding = (function () {
test: [/chromium/i],
describe(ua) {
const browser = {
- name: 'Chromium',
+ name: "Chromium",
};
- const version = Utils.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);
+ const version =
+ Utils.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i, ua) ||
+ Utils.getFirstMatch(commonVersionIdentifier, ua);
if (version) {
browser.version = version;
@@ -1044,9 +1233,12 @@ var MetaMaskOnboarding = (function () {
test: [/chrome|crios|crmo/i],
describe(ua) {
const browser = {
- name: 'Chrome',
+ name: "Chrome",
};
- const version = Utils.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i, ua);
+ const version = Utils.getFirstMatch(
+ /(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,
+ ua
+ );
if (version) {
browser.version = version;
@@ -1059,7 +1251,7 @@ var MetaMaskOnboarding = (function () {
test: [/GSA/i],
describe(ua) {
const browser = {
- name: 'Google Search',
+ name: "Google Search",
};
const version = Utils.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i, ua);
@@ -1080,7 +1272,7 @@ var MetaMaskOnboarding = (function () {
},
describe(ua) {
const browser = {
- name: 'Android Browser',
+ name: "Android Browser",
};
const version = Utils.getFirstMatch(commonVersionIdentifier, ua);
@@ -1097,7 +1289,7 @@ var MetaMaskOnboarding = (function () {
test: [/playstation 4/i],
describe(ua) {
const browser = {
- name: 'PlayStation 4',
+ name: "PlayStation 4",
};
const version = Utils.getFirstMatch(commonVersionIdentifier, ua);
@@ -1114,7 +1306,7 @@ var MetaMaskOnboarding = (function () {
test: [/safari|applewebkit/i],
describe(ua) {
const browser = {
- name: 'Safari',
+ name: "Safari",
};
const version = Utils.getFirstMatch(commonVersionIdentifier, ua);
@@ -1136,8 +1328,10 @@ var MetaMaskOnboarding = (function () {
*/
const regexpWithoutDeviceSpec = /^(.*)\/(.*) /;
const regexpWithDeviceSpec = /^(.*)\/(.*)[ \t]\((.*)/;
- const hasDeviceSpec = ua.search('\\(') !== -1;
- const regexp = hasDeviceSpec ? regexpWithDeviceSpec : regexpWithoutDeviceSpec;
+ const hasDeviceSpec = ua.search("\\(") !== -1;
+ const regexp = hasDeviceSpec
+ ? regexpWithDeviceSpec
+ : regexpWithoutDeviceSpec;
return {
name: Utils.getFirstMatch(regexp, ua),
version: Utils.getSecondMatch(regexp, ua),
@@ -1163,7 +1357,10 @@ var MetaMaskOnboarding = (function () {
{
test: [/windows phone/i],
describe(ua) {
- const version = Utils.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i, ua);
+ const version = Utils.getFirstMatch(
+ /windows phone (?:os)?\s?(\d+(\.\d+)*)/i,
+ ua
+ );
return {
name: OS_MAP.WindowsPhone,
version,
@@ -1175,7 +1372,10 @@ var MetaMaskOnboarding = (function () {
{
test: [/windows /i],
describe(ua) {
- const version = Utils.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i, ua);
+ const version = Utils.getFirstMatch(
+ /Windows ((NT|XP)( \d\d?.\d)?)/i,
+ ua
+ );
const versionName = Utils.getWindowsVersionName(version);
return {
@@ -1202,7 +1402,10 @@ var MetaMaskOnboarding = (function () {
{
test: [/macintosh/i],
describe(ua) {
- const version = Utils.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i, ua).replace(/[_\s]/g, '.');
+ const version = Utils.getFirstMatch(
+ /mac os x (\d+(\.?_?\d+)+)/i,
+ ua
+ ).replace(/[_\s]/g, ".");
const versionName = Utils.getMacOSVersionName(version);
const os = {
@@ -1220,7 +1423,10 @@ var MetaMaskOnboarding = (function () {
{
test: [/(ipod|iphone|ipad)/i],
describe(ua) {
- const version = Utils.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i, ua).replace(/[_\s]/g, '.');
+ const version = Utils.getFirstMatch(
+ /os (\d+([_\s]\d+)*) like mac os x/i,
+ ua
+ ).replace(/[_\s]/g, ".");
return {
name: OS_MAP.iOS,
@@ -1254,7 +1460,10 @@ var MetaMaskOnboarding = (function () {
{
test: [/(web|hpw)[o0]s/i],
describe(ua) {
- const version = Utils.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i, ua);
+ const version = Utils.getFirstMatch(
+ /(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i,
+ ua
+ );
const os = {
name: OS_MAP.WebOS,
};
@@ -1270,9 +1479,10 @@ var MetaMaskOnboarding = (function () {
{
test: [/blackberry|\bbb\d+/i, /rim\stablet/i],
describe(ua) {
- const version = Utils.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i, ua)
- || Utils.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i, ua)
- || Utils.getFirstMatch(/\bbb(\d+)/i, ua);
+ const version =
+ Utils.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i, ua) ||
+ Utils.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i, ua) ||
+ Utils.getFirstMatch(/\bbb(\d+)/i, ua);
return {
name: OS_MAP.BlackBerry,
@@ -1331,7 +1541,10 @@ var MetaMaskOnboarding = (function () {
{
test: [/PlayStation 4/],
describe(ua) {
- const version = Utils.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i, ua);
+ const version = Utils.getFirstMatch(
+ /PlayStation 4[/\s](\d+(\.\d+)*)/i,
+ ua
+ );
return {
name: OS_MAP.PlayStation4,
version,
@@ -1351,8 +1564,8 @@ var MetaMaskOnboarding = (function () {
test: [/googlebot/i],
describe() {
return {
- type: 'bot',
- vendor: 'Google',
+ type: "bot",
+ vendor: "Google",
};
},
},
@@ -1361,10 +1574,10 @@ var MetaMaskOnboarding = (function () {
{
test: [/huawei/i],
describe(ua) {
- const model = Utils.getFirstMatch(/(can-l01)/i, ua) && 'Nova';
+ const model = Utils.getFirstMatch(/(can-l01)/i, ua) && "Nova";
const platform = {
type: PLATFORMS_MAP.mobile,
- vendor: 'Huawei',
+ vendor: "Huawei",
};
if (model) {
platform.model = model;
@@ -1379,7 +1592,7 @@ var MetaMaskOnboarding = (function () {
describe() {
return {
type: PLATFORMS_MAP.tablet,
- vendor: 'Nexus',
+ vendor: "Nexus",
};
},
},
@@ -1390,8 +1603,8 @@ var MetaMaskOnboarding = (function () {
describe() {
return {
type: PLATFORMS_MAP.tablet,
- vendor: 'Apple',
- model: 'iPad',
+ vendor: "Apple",
+ model: "iPad",
};
},
},
@@ -1402,8 +1615,8 @@ var MetaMaskOnboarding = (function () {
describe() {
return {
type: PLATFORMS_MAP.tablet,
- vendor: 'Apple',
- model: 'iPad',
+ vendor: "Apple",
+ model: "iPad",
};
},
},
@@ -1414,8 +1627,8 @@ var MetaMaskOnboarding = (function () {
describe() {
return {
type: PLATFORMS_MAP.tablet,
- vendor: 'Amazon',
- model: 'Kindle Fire HD 7',
+ vendor: "Amazon",
+ model: "Kindle Fire HD 7",
};
},
},
@@ -1426,7 +1639,7 @@ var MetaMaskOnboarding = (function () {
describe() {
return {
type: PLATFORMS_MAP.tablet,
- vendor: 'Amazon',
+ vendor: "Amazon",
};
},
},
@@ -1452,7 +1665,7 @@ var MetaMaskOnboarding = (function () {
const model = Utils.getFirstMatch(/(ipod|iphone)/i, ua);
return {
type: PLATFORMS_MAP.mobile,
- vendor: 'Apple',
+ vendor: "Apple",
model,
};
},
@@ -1464,7 +1677,7 @@ var MetaMaskOnboarding = (function () {
describe() {
return {
type: PLATFORMS_MAP.mobile,
- vendor: 'Nexus',
+ vendor: "Nexus",
};
},
},
@@ -1482,12 +1695,12 @@ var MetaMaskOnboarding = (function () {
/* BlackBerry */
{
test(parser) {
- return parser.getBrowserName(true) === 'blackberry';
+ return parser.getBrowserName(true) === "blackberry";
},
describe() {
return {
type: PLATFORMS_MAP.mobile,
- vendor: 'BlackBerry',
+ vendor: "BlackBerry",
};
},
},
@@ -1495,7 +1708,7 @@ var MetaMaskOnboarding = (function () {
/* Bada */
{
test(parser) {
- return parser.getBrowserName(true) === 'bada';
+ return parser.getBrowserName(true) === "bada";
},
describe() {
return {
@@ -1507,12 +1720,12 @@ var MetaMaskOnboarding = (function () {
/* Windows Phone */
{
test(parser) {
- return parser.getBrowserName() === 'windows phone';
+ return parser.getBrowserName() === "windows phone";
},
describe() {
return {
type: PLATFORMS_MAP.mobile,
- vendor: 'Microsoft',
+ vendor: "Microsoft",
};
},
},
@@ -1520,8 +1733,10 @@ var MetaMaskOnboarding = (function () {
/* Android Tablet */
{
test(parser) {
- const osMajorVersion = Number(String(parser.getOSVersion()).split('.')[0]);
- return parser.getOSName(true) === 'android' && (osMajorVersion >= 3);
+ const osMajorVersion = Number(
+ String(parser.getOSVersion()).split(".")[0]
+ );
+ return parser.getOSName(true) === "android" && osMajorVersion >= 3;
},
describe() {
return {
@@ -1533,7 +1748,7 @@ var MetaMaskOnboarding = (function () {
/* Android Mobile */
{
test(parser) {
- return parser.getOSName(true) === 'android';
+ return parser.getOSName(true) === "android";
},
describe() {
return {
@@ -1545,12 +1760,12 @@ var MetaMaskOnboarding = (function () {
/* desktop */
{
test(parser) {
- return parser.getOSName(true) === 'macos';
+ return parser.getOSName(true) === "macos";
},
describe() {
return {
type: PLATFORMS_MAP.desktop,
- vendor: 'Apple',
+ vendor: "Apple",
};
},
},
@@ -1558,7 +1773,7 @@ var MetaMaskOnboarding = (function () {
/* Windows */
{
test(parser) {
- return parser.getOSName(true) === 'windows';
+ return parser.getOSName(true) === "windows";
},
describe() {
return {
@@ -1570,7 +1785,7 @@ var MetaMaskOnboarding = (function () {
/* Linux */
{
test(parser) {
- return parser.getOSName(true) === 'linux';
+ return parser.getOSName(true) === "linux";
},
describe() {
return {
@@ -1582,7 +1797,7 @@ var MetaMaskOnboarding = (function () {
/* PlayStation 4 */
{
test(parser) {
- return parser.getOSName(true) === 'playstation 4';
+ return parser.getOSName(true) === "playstation 4";
},
describe() {
return {
@@ -1594,7 +1809,7 @@ var MetaMaskOnboarding = (function () {
/* Roku */
{
test(parser) {
- return parser.getOSName(true) === 'roku';
+ return parser.getOSName(true) === "roku";
},
describe() {
return {
@@ -1611,7 +1826,7 @@ var MetaMaskOnboarding = (function () {
/* EdgeHTML */
{
test(parser) {
- return parser.getBrowserName(true) === 'microsoft edge';
+ return parser.getBrowserName(true) === "microsoft edge";
},
describe(ua) {
const isBlinkBased = /\sedg\//i.test(ua);
@@ -1739,7 +1954,7 @@ var MetaMaskOnboarding = (function () {
* @constructor
*/
constructor(UA, skipParsing = false) {
- if (UA === void (0) || UA === null || UA === '') {
+ if (UA === void 0 || UA === null || UA === "") {
throw new Error("UserAgent parameter can't be empty");
}
@@ -1801,12 +2016,12 @@ var MetaMaskOnboarding = (function () {
this.parsedResult.browser = {};
const browserDescriptor = Utils.find(browsersList, (_browser) => {
- if (typeof _browser.test === 'function') {
+ if (typeof _browser.test === "function") {
return _browser.test(this);
}
if (_browser.test instanceof Array) {
- return _browser.test.some(condition => this.test(condition));
+ return _browser.test.some((condition) => this.test(condition));
}
throw new Error("Browser's test function is not valid");
@@ -1841,12 +2056,11 @@ var MetaMaskOnboarding = (function () {
*/
getBrowserName(toLowerCase) {
if (toLowerCase) {
- return String(this.getBrowser().name).toLowerCase() || '';
+ return String(this.getBrowser().name).toLowerCase() || "";
}
- return this.getBrowser().name || '';
+ return this.getBrowser().name || "";
}
-
/**
* Get browser's version
* @return {String} version of browser
@@ -1884,12 +2098,12 @@ var MetaMaskOnboarding = (function () {
this.parsedResult.os = {};
const os = Utils.find(osParsersList, (_os) => {
- if (typeof _os.test === 'function') {
+ if (typeof _os.test === "function") {
return _os.test(this);
}
if (_os.test instanceof Array) {
- return _os.test.some(condition => this.test(condition));
+ return _os.test.some((condition) => this.test(condition));
}
throw new Error("Browser's test function is not valid");
@@ -1911,10 +2125,10 @@ var MetaMaskOnboarding = (function () {
const { name } = this.getOS();
if (toLowerCase) {
- return String(name).toLowerCase() || '';
+ return String(name).toLowerCase() || "";
}
- return name || '';
+ return name || "";
}
/**
@@ -1946,10 +2160,10 @@ var MetaMaskOnboarding = (function () {
const { type } = this.getPlatform();
if (toLowerCase) {
- return String(type).toLowerCase() || '';
+ return String(type).toLowerCase() || "";
}
- return type || '';
+ return type || "";
}
/**
@@ -1960,12 +2174,12 @@ var MetaMaskOnboarding = (function () {
this.parsedResult.platform = {};
const platform = Utils.find(platformParsersList, (_platform) => {
- if (typeof _platform.test === 'function') {
+ if (typeof _platform.test === "function") {
return _platform.test(this);
}
if (_platform.test instanceof Array) {
- return _platform.test.some(condition => this.test(condition));
+ return _platform.test.some((condition) => this.test(condition));
}
throw new Error("Browser's test function is not valid");
@@ -1998,9 +2212,9 @@ var MetaMaskOnboarding = (function () {
*/
getEngineName(toLowerCase) {
if (toLowerCase) {
- return String(this.getEngine().name).toLowerCase() || '';
+ return String(this.getEngine().name).toLowerCase() || "";
}
- return this.getEngine().name || '';
+ return this.getEngine().name || "";
}
/**
@@ -2011,12 +2225,12 @@ var MetaMaskOnboarding = (function () {
this.parsedResult.engine = {};
const engine = Utils.find(enginesParsersList, (_engine) => {
- if (typeof _engine.test === 'function') {
+ if (typeof _engine.test === "function") {
return _engine.test(this);
}
if (_engine.test instanceof Array) {
- return _engine.test.some(condition => this.test(condition));
+ return _engine.test.some((condition) => this.test(condition));
}
throw new Error("Browser's test function is not valid");
@@ -2077,10 +2291,10 @@ var MetaMaskOnboarding = (function () {
allDefinitions.forEach((key) => {
const currentDefinition = checkTree[key];
- if (typeof currentDefinition === 'string') {
+ if (typeof currentDefinition === "string") {
browsers[key] = currentDefinition;
browsersCounter += 1;
- } else if (typeof currentDefinition === 'object') {
+ } else if (typeof currentDefinition === "object") {
platformsAndOSes[key] = currentDefinition;
platformsAndOSCounter += 1;
}
@@ -2088,10 +2302,14 @@ var MetaMaskOnboarding = (function () {
if (platformsAndOSCounter > 0) {
const platformsAndOSNames = Object.keys(platformsAndOSes);
- const OSMatchingDefinition = Utils.find(platformsAndOSNames, name => (this.isOS(name)));
+ const OSMatchingDefinition = Utils.find(platformsAndOSNames, (name) =>
+ this.isOS(name)
+ );
if (OSMatchingDefinition) {
- const osResult = this.satisfies(platformsAndOSes[OSMatchingDefinition]);
+ const osResult = this.satisfies(
+ platformsAndOSes[OSMatchingDefinition]
+ );
if (osResult !== void 0) {
return osResult;
@@ -2100,10 +2318,12 @@ var MetaMaskOnboarding = (function () {
const platformMatchingDefinition = Utils.find(
platformsAndOSNames,
- name => (this.isPlatform(name)),
+ (name) => this.isPlatform(name)
);
if (platformMatchingDefinition) {
- const platformResult = this.satisfies(platformsAndOSes[platformMatchingDefinition]);
+ const platformResult = this.satisfies(
+ platformsAndOSes[platformMatchingDefinition]
+ );
if (platformResult !== void 0) {
return platformResult;
@@ -2113,7 +2333,9 @@ var MetaMaskOnboarding = (function () {
if (browsersCounter > 0) {
const browserNames = Object.keys(browsers);
- const matchingDefinition = Utils.find(browserNames, name => (this.isBrowser(name, true)));
+ const matchingDefinition = Utils.find(browserNames, (name) =>
+ this.isBrowser(name, true)
+ );
if (matchingDefinition !== void 0) {
return this.compareVersion(browsers[matchingDefinition]);
@@ -2147,33 +2369,39 @@ var MetaMaskOnboarding = (function () {
const currentBrowserVersion = this.getBrowserVersion();
- if (typeof currentBrowserVersion !== 'string') {
+ if (typeof currentBrowserVersion !== "string") {
return void 0;
}
- if (version[0] === '>' || version[0] === '<') {
+ if (version[0] === ">" || version[0] === "<") {
comparableVersion = version.substr(1);
- if (version[1] === '=') {
+ if (version[1] === "=") {
isLoose = true;
comparableVersion = version.substr(2);
} else {
expectedResults = [];
}
- if (version[0] === '>') {
+ if (version[0] === ">") {
expectedResults.push(1);
} else {
expectedResults.push(-1);
}
- } else if (version[0] === '=') {
+ } else if (version[0] === "=") {
comparableVersion = version.substr(1);
- } else if (version[0] === '~') {
+ } else if (version[0] === "~") {
isLoose = true;
comparableVersion = version.substr(1);
}
- return expectedResults.indexOf(
- Utils.compareVersions(currentBrowserVersion, comparableVersion, isLoose),
- ) > -1;
+ return (
+ expectedResults.indexOf(
+ Utils.compareVersions(
+ currentBrowserVersion,
+ comparableVersion,
+ isLoose
+ )
+ ) > -1
+ );
}
isOS(osName) {
@@ -2195,7 +2423,11 @@ var MetaMaskOnboarding = (function () {
* @returns {Boolean}
*/
is(anything) {
- return this.isBrowser(anything) || this.isOS(anything) || this.isPlatform(anything);
+ return (
+ this.isBrowser(anything) ||
+ this.isOS(anything) ||
+ this.isPlatform(anything)
+ );
}
/**
@@ -2204,7 +2436,7 @@ var MetaMaskOnboarding = (function () {
* @returns {Boolean}
*/
some(anythings = []) {
- return anythings.some(anything => this.is(anything));
+ return anythings.some((anything) => this.is(anything));
}
}
@@ -2241,8 +2473,8 @@ var MetaMaskOnboarding = (function () {
* const result = parser.getResult();
*/
static getParser(UA, skipParsing = false) {
- if (typeof UA !== 'string') {
- throw new Error('UserAgent should be a string');
+ if (typeof UA !== "string") {
+ throw new Error("UserAgent should be a string");
}
return new Parser(UA, skipParsing);
}
@@ -2257,7 +2489,7 @@ var MetaMaskOnboarding = (function () {
* const result = Bowser.parse(window.navigator.userAgent);
*/
static parse(UA) {
- return (new Parser(UA)).getResult();
+ return new Parser(UA).getResult();
}
static get BROWSER_MAP() {
@@ -2278,185 +2510,206 @@ var MetaMaskOnboarding = (function () {
}
var ONBOARDING_STATE = {
- INSTALLED: 'INSTALLED',
- NOT_INSTALLED: 'NOT_INSTALLED',
- REGISTERED: 'REGISTERED',
- REGISTERING: 'REGISTERING',
- RELOADING: 'RELOADING',
+ INSTALLED: "INSTALLED",
+ NOT_INSTALLED: "NOT_INSTALLED",
+ REGISTERED: "REGISTERED",
+ REGISTERING: "REGISTERING",
+ RELOADING: "RELOADING",
};
var EXTENSION_DOWNLOAD_URL = {
- CHROME: 'https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn',
- FIREFOX: 'https://addons.mozilla.org/firefox/addon/ether-metamask/',
- DEFAULT: 'https://metamask.io',
+ CHROME:
+ "https://chrome.google.com/webstore/detail/metamask/nkbihfbeogaeaoehlefnkodbefgpgknn",
+ FIREFOX: "https://addons.mozilla.org/firefox/addon/ether-metamask/",
+ DEFAULT: "https://metamask.io",
};
// sessionStorage key
- var REGISTRATION_IN_PROGRESS = 'REGISTRATION_IN_PROGRESS';
+ var REGISTRATION_IN_PROGRESS = "REGISTRATION_IN_PROGRESS";
// forwarder iframe id
- var FORWARDER_ID = 'FORWARDER_ID';
+ var FORWARDER_ID = "FORWARDER_ID";
var Onboarding = /** @class */ (function () {
- function Onboarding(_a) {
- var _b = _a === void 0 ? {} : _a, _c = _b.forwarderOrigin, forwarderOrigin = _c === void 0 ? 'https://fwd.metamask.io' : _c, _d = _b.forwarderMode, forwarderMode = _d === void 0 ? Onboarding.FORWARDER_MODE.INJECT : _d;
- this.forwarderOrigin = forwarderOrigin;
- this.forwarderMode = forwarderMode;
- this.state = Onboarding.isMetaMaskInstalled()
- ? ONBOARDING_STATE.INSTALLED
- : ONBOARDING_STATE.NOT_INSTALLED;
- var browser = Onboarding._detectBrowser();
- if (browser) {
- this.downloadUrl = EXTENSION_DOWNLOAD_URL[browser];
- }
- else {
- this.downloadUrl = EXTENSION_DOWNLOAD_URL.DEFAULT;
- }
- this._onMessage = this._onMessage.bind(this);
- this._onMessageFromForwarder = this._onMessageFromForwarder.bind(this);
- this._openForwarder = this._openForwarder.bind(this);
- this._openDownloadPage = this._openDownloadPage.bind(this);
- this.startOnboarding = this.startOnboarding.bind(this);
- this.stopOnboarding = this.stopOnboarding.bind(this);
- window.addEventListener('message', this._onMessage);
- if (forwarderMode === Onboarding.FORWARDER_MODE.INJECT &&
- sessionStorage.getItem(REGISTRATION_IN_PROGRESS) === 'true') {
- Onboarding._injectForwarder(this.forwarderOrigin);
- }
+ function Onboarding(_a) {
+ var _b = _a === void 0 ? {} : _a,
+ _c = _b.forwarderOrigin,
+ forwarderOrigin = _c === void 0 ? "https://fwd.metamask.io" : _c,
+ _d = _b.forwarderMode,
+ forwarderMode = _d === void 0 ? Onboarding.FORWARDER_MODE.INJECT : _d;
+ this.forwarderOrigin = forwarderOrigin;
+ this.forwarderMode = forwarderMode;
+ this.state = Onboarding.isMetaMaskInstalled()
+ ? ONBOARDING_STATE.INSTALLED
+ : ONBOARDING_STATE.NOT_INSTALLED;
+ var browser = Onboarding._detectBrowser();
+ if (browser) {
+ this.downloadUrl = EXTENSION_DOWNLOAD_URL[browser];
+ } else {
+ this.downloadUrl = EXTENSION_DOWNLOAD_URL.DEFAULT;
}
- Onboarding.prototype._onMessage = function (event) {
- if (event.origin !== this.forwarderOrigin) {
- // Ignoring non-forwarder message
- return undefined;
- }
- if (event.data.type === 'metamask:reload') {
- return this._onMessageFromForwarder(event);
- }
- console.debug("Unknown message from '" + event.origin + "' with data " + JSON.stringify(event.data));
- return undefined;
- };
- Onboarding.prototype._onMessageUnknownStateError = function (state) {
- throw new Error("Unknown state: '" + state + "'");
- };
- Onboarding.prototype._onMessageFromForwarder = function (event) {
- return __awaiter(this, void 0, void 0, function () {
- var _a;
- return __generator(this, function (_b) {
- switch (_b.label) {
- case 0:
- _a = this.state;
- switch (_a) {
- case ONBOARDING_STATE.RELOADING: return [3 /*break*/, 1];
- case ONBOARDING_STATE.NOT_INSTALLED: return [3 /*break*/, 2];
- case ONBOARDING_STATE.INSTALLED: return [3 /*break*/, 3];
- case ONBOARDING_STATE.REGISTERING: return [3 /*break*/, 5];
- case ONBOARDING_STATE.REGISTERED: return [3 /*break*/, 6];
- }
- return [3 /*break*/, 7];
- case 1:
- console.debug('Ignoring message while reloading');
- return [3 /*break*/, 8];
- case 2:
- console.debug('Reloading now to register with MetaMask');
- this.state = ONBOARDING_STATE.RELOADING;
- location.reload();
- return [3 /*break*/, 8];
- case 3:
- console.debug('Registering with MetaMask');
- this.state = ONBOARDING_STATE.REGISTERING;
- return [4 /*yield*/, Onboarding._register()];
- case 4:
- _b.sent();
- this.state = ONBOARDING_STATE.REGISTERED;
- event.source.postMessage({ type: 'metamask:registrationCompleted' }, event.origin);
- this.stopOnboarding();
- return [3 /*break*/, 8];
- case 5:
- console.debug('Already registering - ignoring reload message');
- return [3 /*break*/, 8];
- case 6:
- console.debug('Already registered - ignoring reload message');
- return [3 /*break*/, 8];
- case 7:
- this._onMessageUnknownStateError(this.state);
- _b.label = 8;
- case 8: return [2 /*return*/];
- }
- });
- });
- };
- /**
- * Starts onboarding by opening the MetaMask download page and the Onboarding forwarder
- */
- Onboarding.prototype.startOnboarding = function () {
- sessionStorage.setItem(REGISTRATION_IN_PROGRESS, 'true');
- this._openDownloadPage();
- this._openForwarder();
- };
- /**
- * Stops onboarding registration, including removing the injected forwarder (if any)
- *
- * Typically this function is not necessary, but it can be useful for cases where
- * onboarding completes before the forwarder has registered.
- */
- Onboarding.prototype.stopOnboarding = function () {
- if (sessionStorage.getItem(REGISTRATION_IN_PROGRESS) === 'true') {
- if (this.forwarderMode === Onboarding.FORWARDER_MODE.INJECT) {
- console.debug('Removing forwarder');
- Onboarding._removeForwarder();
+ this._onMessage = this._onMessage.bind(this);
+ this._onMessageFromForwarder = this._onMessageFromForwarder.bind(this);
+ this._openForwarder = this._openForwarder.bind(this);
+ this._openDownloadPage = this._openDownloadPage.bind(this);
+ this.startOnboarding = this.startOnboarding.bind(this);
+ this.stopOnboarding = this.stopOnboarding.bind(this);
+ window.addEventListener("message", this._onMessage);
+ if (
+ forwarderMode === Onboarding.FORWARDER_MODE.INJECT &&
+ sessionStorage.getItem(REGISTRATION_IN_PROGRESS) === "true"
+ ) {
+ Onboarding._injectForwarder(this.forwarderOrigin);
+ }
+ }
+ Onboarding.prototype._onMessage = function (event) {
+ if (event.origin !== this.forwarderOrigin) {
+ // Ignoring non-forwarder message
+ return undefined;
+ }
+ if (event.data.type === "metamask:reload") {
+ return this._onMessageFromForwarder(event);
+ }
+ console.debug(
+ "Unknown message from '" +
+ event.origin +
+ "' with data " +
+ JSON.stringify(event.data)
+ );
+ return undefined;
+ };
+ Onboarding.prototype._onMessageUnknownStateError = function (state) {
+ throw new Error("Unknown state: '" + state + "'");
+ };
+ Onboarding.prototype._onMessageFromForwarder = function (event) {
+ return __awaiter(this, void 0, void 0, function () {
+ var _a;
+ return __generator(this, function (_b) {
+ switch (_b.label) {
+ case 0:
+ _a = this.state;
+ switch (_a) {
+ case ONBOARDING_STATE.RELOADING:
+ return [3 /*break*/, 1];
+ case ONBOARDING_STATE.NOT_INSTALLED:
+ return [3 /*break*/, 2];
+ case ONBOARDING_STATE.INSTALLED:
+ return [3 /*break*/, 3];
+ case ONBOARDING_STATE.REGISTERING:
+ return [3 /*break*/, 5];
+ case ONBOARDING_STATE.REGISTERED:
+ return [3 /*break*/, 6];
}
- sessionStorage.setItem(REGISTRATION_IN_PROGRESS, 'false');
+ return [3 /*break*/, 7];
+ case 1:
+ console.debug("Ignoring message while reloading");
+ return [3 /*break*/, 8];
+ case 2:
+ console.debug("Reloading now to register with MetaMask");
+ this.state = ONBOARDING_STATE.RELOADING;
+ location.reload();
+ return [3 /*break*/, 8];
+ case 3:
+ console.debug("Registering with MetaMask");
+ this.state = ONBOARDING_STATE.REGISTERING;
+ return [4 /*yield*/, Onboarding._register()];
+ case 4:
+ _b.sent();
+ this.state = ONBOARDING_STATE.REGISTERED;
+ event.source.postMessage(
+ { type: "metamask:registrationCompleted" },
+ event.origin
+ );
+ this.stopOnboarding();
+ return [3 /*break*/, 8];
+ case 5:
+ console.debug("Already registering - ignoring reload message");
+ return [3 /*break*/, 8];
+ case 6:
+ console.debug("Already registered - ignoring reload message");
+ return [3 /*break*/, 8];
+ case 7:
+ this._onMessageUnknownStateError(this.state);
+ _b.label = 8;
+ case 8:
+ return [2 /*return*/];
}
- };
- Onboarding.prototype._openForwarder = function () {
- if (this.forwarderMode === Onboarding.FORWARDER_MODE.OPEN_TAB) {
- window.open(this.forwarderOrigin, '_blank');
- }
- else {
- Onboarding._injectForwarder(this.forwarderOrigin);
- }
- };
- Onboarding.prototype._openDownloadPage = function () {
- window.open(this.downloadUrl, '_blank');
- };
- /**
- * Checks whether the MetaMask extension is installed
- */
- Onboarding.isMetaMaskInstalled = function () {
- return Boolean(window.ethereum && window.ethereum.isMetaMask);
- };
- Onboarding._register = function () {
- return window.ethereum.request({
- method: 'wallet_registerOnboarding',
- });
- };
- Onboarding._injectForwarder = function (forwarderOrigin) {
- var container = document.body;
- var iframe = document.createElement('iframe');
- iframe.setAttribute('height', '0');
- iframe.setAttribute('width', '0');
- iframe.setAttribute('style', 'display: none;');
- iframe.setAttribute('src', forwarderOrigin);
- iframe.setAttribute('id', FORWARDER_ID);
- container.insertBefore(iframe, container.children[0]);
- };
- Onboarding._removeForwarder = function () {
- var _a;
- (_a = document.getElementById(FORWARDER_ID)) === null || _a === void 0 ? void 0 : _a.remove();
- };
- Onboarding._detectBrowser = function () {
- var browserInfo = Bowser.parse(window.navigator.userAgent);
- if (browserInfo.browser.name === 'Firefox') {
- return 'FIREFOX';
- }
- else if (['Chrome', 'Chromium'].includes(browserInfo.browser.name || '')) {
- return 'CHROME';
- }
- return null;
- };
- Onboarding.FORWARDER_MODE = {
- INJECT: 'INJECT',
- OPEN_TAB: 'OPEN_TAB',
- };
- return Onboarding;
- }());
+ });
+ });
+ };
+ /**
+ * Starts onboarding by opening the MetaMask download page and the Onboarding forwarder
+ */
+ Onboarding.prototype.startOnboarding = function () {
+ sessionStorage.setItem(REGISTRATION_IN_PROGRESS, "true");
+ this._openDownloadPage();
+ this._openForwarder();
+ };
+ /**
+ * Stops onboarding registration, including removing the injected forwarder (if any)
+ *
+ * Typically this function is not necessary, but it can be useful for cases where
+ * onboarding completes before the forwarder has registered.
+ */
+ Onboarding.prototype.stopOnboarding = function () {
+ if (sessionStorage.getItem(REGISTRATION_IN_PROGRESS) === "true") {
+ if (this.forwarderMode === Onboarding.FORWARDER_MODE.INJECT) {
+ console.debug("Removing forwarder");
+ Onboarding._removeForwarder();
+ }
+ sessionStorage.setItem(REGISTRATION_IN_PROGRESS, "false");
+ }
+ };
+ Onboarding.prototype._openForwarder = function () {
+ if (this.forwarderMode === Onboarding.FORWARDER_MODE.OPEN_TAB) {
+ window.open(this.forwarderOrigin, "_blank");
+ } else {
+ Onboarding._injectForwarder(this.forwarderOrigin);
+ }
+ };
+ Onboarding.prototype._openDownloadPage = function () {
+ window.open(this.downloadUrl, "_blank");
+ };
+ /**
+ * Checks whether the MetaMask extension is installed
+ */
+ Onboarding.isMetaMaskInstalled = function () {
+ return Boolean(window.ethereum && window.ethereum.isMetaMask);
+ };
+ Onboarding._register = function () {
+ return window.ethereum.request({
+ method: "wallet_registerOnboarding",
+ });
+ };
+ Onboarding._injectForwarder = function (forwarderOrigin) {
+ var container = document.body;
+ var iframe = document.createElement("iframe");
+ iframe.setAttribute("height", "0");
+ iframe.setAttribute("width", "0");
+ iframe.setAttribute("style", "display: none;");
+ iframe.setAttribute("src", forwarderOrigin);
+ iframe.setAttribute("id", FORWARDER_ID);
+ container.insertBefore(iframe, container.children[0]);
+ };
+ Onboarding._removeForwarder = function () {
+ var _a;
+ (_a = document.getElementById(FORWARDER_ID)) === null || _a === void 0
+ ? void 0
+ : _a.remove();
+ };
+ Onboarding._detectBrowser = function () {
+ var browserInfo = Bowser.parse(window.navigator.userAgent);
+ if (browserInfo.browser.name === "Firefox") {
+ return "FIREFOX";
+ } else if (
+ ["Chrome", "Chromium"].includes(browserInfo.browser.name || "")
+ ) {
+ return "CHROME";
+ }
+ return null;
+ };
+ Onboarding.FORWARDER_MODE = {
+ INJECT: "INJECT",
+ OPEN_TAB: "OPEN_TAB",
+ };
+ return Onboarding;
+ })();
return Onboarding;
-
-}());
\ No newline at end of file
+})();
diff --git a/frontend/js/mobile.js b/frontend/js/mobile.js
new file mode 100644
index 0000000000..be4fe66d37
--- /dev/null
+++ b/frontend/js/mobile.js
@@ -0,0 +1,8 @@
+var menu = document.getElementById("menu");
+
+function showmenu() {
+ menu.style.right = "0";
+}
+function hidemenu() {
+ menu.style.right = "-200px";
+}
diff --git a/frontend/js/particles.js b/frontend/js/particles.js
new file mode 100644
index 0000000000..325d834996
--- /dev/null
+++ b/frontend/js/particles.js
@@ -0,0 +1,1541 @@
+/* -----------------------------------------------
+/* Author : Vincent Garreau - vincentgarreau.com
+/* MIT license: http://opensource.org/licenses/MIT
+/* Demo / Generator : vincentgarreau.com/particles.js
+/* GitHub : github.com/VincentGarreau/particles.js
+/* How to use? : Check the GitHub README
+/* v2.0.0
+/* ----------------------------------------------- */
+
+var pJS = function(tag_id, params){
+
+ var canvas_el = document.querySelector('#'+tag_id+' > .particles-js-canvas-el');
+
+ /* particles.js variables with default values */
+ this.pJS = {
+ canvas: {
+ el: canvas_el,
+ w: canvas_el.offsetWidth,
+ h: canvas_el.offsetHeight
+ },
+ particles: {
+ number: {
+ value: 400,
+ density: {
+ enable: true,
+ value_area: 800
+ }
+ },
+ color: {
+ value: '#fff'
+ },
+ shape: {
+ type: 'circle',
+ stroke: {
+ width: 0,
+ color: '#ff0000'
+ },
+ polygon: {
+ nb_sides: 5
+ },
+ image: {
+ src: '',
+ width: 100,
+ height: 100
+ }
+ },
+ opacity: {
+ value: 1,
+ random: false,
+ anim: {
+ enable: false,
+ speed: 2,
+ opacity_min: 0,
+ sync: false
+ }
+ },
+ size: {
+ value: 20,
+ random: false,
+ anim: {
+ enable: false,
+ speed: 20,
+ size_min: 0,
+ sync: false
+ }
+ },
+ line_linked: {
+ enable: true,
+ distance: 100,
+ color: '#fff',
+ opacity: 1,
+ width: 1
+ },
+ move: {
+ enable: true,
+ speed: 2,
+ direction: 'none',
+ random: false,
+ straight: false,
+ out_mode: 'out',
+ bounce: false,
+ attract: {
+ enable: false,
+ rotateX: 3000,
+ rotateY: 3000
+ }
+ },
+ array: []
+ },
+ interactivity: {
+ detect_on: 'canvas',
+ events: {
+ onhover: {
+ enable: true,
+ mode: 'grab'
+ },
+ onclick: {
+ enable: true,
+ mode: 'push'
+ },
+ resize: true
+ },
+ modes: {
+ grab:{
+ distance: 100,
+ line_linked:{
+ opacity: 1
+ }
+ },
+ bubble:{
+ distance: 200,
+ size: 80,
+ duration: 0.4
+ },
+ repulse:{
+ distance: 200,
+ duration: 0.4
+ },
+ push:{
+ particles_nb: 4
+ },
+ remove:{
+ particles_nb: 2
+ }
+ },
+ mouse:{}
+ },
+ retina_detect: false,
+ fn: {
+ interact: {},
+ modes: {},
+ vendors:{}
+ },
+ tmp: {}
+ };
+
+ var pJS = this.pJS;
+
+ /* params settings */
+ if(params){
+ Object.deepExtend(pJS, params);
+ }
+
+ pJS.tmp.obj = {
+ size_value: pJS.particles.size.value,
+ size_anim_speed: pJS.particles.size.anim.speed,
+ move_speed: pJS.particles.move.speed,
+ line_linked_distance: pJS.particles.line_linked.distance,
+ line_linked_width: pJS.particles.line_linked.width,
+ mode_grab_distance: pJS.interactivity.modes.grab.distance,
+ mode_bubble_distance: pJS.interactivity.modes.bubble.distance,
+ mode_bubble_size: pJS.interactivity.modes.bubble.size,
+ mode_repulse_distance: pJS.interactivity.modes.repulse.distance
+ };
+
+
+ pJS.fn.retinaInit = function(){
+
+ if(pJS.retina_detect && window.devicePixelRatio > 1){
+ pJS.canvas.pxratio = window.devicePixelRatio;
+ pJS.tmp.retina = true;
+ }
+ else{
+ pJS.canvas.pxratio = 1;
+ pJS.tmp.retina = false;
+ }
+
+ pJS.canvas.w = pJS.canvas.el.offsetWidth * pJS.canvas.pxratio;
+ pJS.canvas.h = pJS.canvas.el.offsetHeight * pJS.canvas.pxratio;
+
+ pJS.particles.size.value = pJS.tmp.obj.size_value * pJS.canvas.pxratio;
+ pJS.particles.size.anim.speed = pJS.tmp.obj.size_anim_speed * pJS.canvas.pxratio;
+ pJS.particles.move.speed = pJS.tmp.obj.move_speed * pJS.canvas.pxratio;
+ pJS.particles.line_linked.distance = pJS.tmp.obj.line_linked_distance * pJS.canvas.pxratio;
+ pJS.interactivity.modes.grab.distance = pJS.tmp.obj.mode_grab_distance * pJS.canvas.pxratio;
+ pJS.interactivity.modes.bubble.distance = pJS.tmp.obj.mode_bubble_distance * pJS.canvas.pxratio;
+ pJS.particles.line_linked.width = pJS.tmp.obj.line_linked_width * pJS.canvas.pxratio;
+ pJS.interactivity.modes.bubble.size = pJS.tmp.obj.mode_bubble_size * pJS.canvas.pxratio;
+ pJS.interactivity.modes.repulse.distance = pJS.tmp.obj.mode_repulse_distance * pJS.canvas.pxratio;
+
+ };
+
+
+
+ /* ---------- pJS functions - canvas ------------ */
+
+ pJS.fn.canvasInit = function(){
+ pJS.canvas.ctx = pJS.canvas.el.getContext('2d');
+ };
+
+ pJS.fn.canvasSize = function(){
+
+ pJS.canvas.el.width = pJS.canvas.w;
+ pJS.canvas.el.height = pJS.canvas.h;
+
+ if(pJS && pJS.interactivity.events.resize){
+
+ window.addEventListener('resize', function(){
+
+ pJS.canvas.w = pJS.canvas.el.offsetWidth;
+ pJS.canvas.h = pJS.canvas.el.offsetHeight;
+
+ /* resize canvas */
+ if(pJS.tmp.retina){
+ pJS.canvas.w *= pJS.canvas.pxratio;
+ pJS.canvas.h *= pJS.canvas.pxratio;
+ }
+
+ pJS.canvas.el.width = pJS.canvas.w;
+ pJS.canvas.el.height = pJS.canvas.h;
+
+ /* repaint canvas on anim disabled */
+ if(!pJS.particles.move.enable){
+ pJS.fn.particlesEmpty();
+ pJS.fn.particlesCreate();
+ pJS.fn.particlesDraw();
+ pJS.fn.vendors.densityAutoParticles();
+ }
+
+ /* density particles enabled */
+ pJS.fn.vendors.densityAutoParticles();
+
+ });
+
+ }
+
+ };
+
+
+ pJS.fn.canvasPaint = function(){
+ pJS.canvas.ctx.fillRect(0, 0, pJS.canvas.w, pJS.canvas.h);
+ };
+
+ pJS.fn.canvasClear = function(){
+ pJS.canvas.ctx.clearRect(0, 0, pJS.canvas.w, pJS.canvas.h);
+ };
+
+
+ /* --------- pJS functions - particles ----------- */
+
+ pJS.fn.particle = function(color, opacity, position){
+
+ /* size */
+ this.radius = (pJS.particles.size.random ? Math.random() : 1) * pJS.particles.size.value;
+ if(pJS.particles.size.anim.enable){
+ this.size_status = false;
+ this.vs = pJS.particles.size.anim.speed / 100;
+ if(!pJS.particles.size.anim.sync){
+ this.vs = this.vs * Math.random();
+ }
+ }
+
+ /* position */
+ this.x = position ? position.x : Math.random() * pJS.canvas.w;
+ this.y = position ? position.y : Math.random() * pJS.canvas.h;
+
+ /* check position - into the canvas */
+ if(this.x > pJS.canvas.w - this.radius*2) this.x = this.x - this.radius;
+ else if(this.x < this.radius*2) this.x = this.x + this.radius;
+ if(this.y > pJS.canvas.h - this.radius*2) this.y = this.y - this.radius;
+ else if(this.y < this.radius*2) this.y = this.y + this.radius;
+
+ /* check position - avoid overlap */
+ if(pJS.particles.move.bounce){
+ pJS.fn.vendors.checkOverlap(this, position);
+ }
+
+ /* color */
+ this.color = {};
+ if(typeof(color.value) == 'object'){
+
+ if(color.value instanceof Array){
+ var color_selected = color.value[Math.floor(Math.random() * pJS.particles.color.value.length)];
+ this.color.rgb = hexToRgb(color_selected);
+ }else{
+ if(color.value.r != undefined && color.value.g != undefined && color.value.b != undefined){
+ this.color.rgb = {
+ r: color.value.r,
+ g: color.value.g,
+ b: color.value.b
+ }
+ }
+ if(color.value.h != undefined && color.value.s != undefined && color.value.l != undefined){
+ this.color.hsl = {
+ h: color.value.h,
+ s: color.value.s,
+ l: color.value.l
+ }
+ }
+ }
+
+ }
+ else if(color.value == 'random'){
+ this.color.rgb = {
+ r: (Math.floor(Math.random() * (255 - 0 + 1)) + 0),
+ g: (Math.floor(Math.random() * (255 - 0 + 1)) + 0),
+ b: (Math.floor(Math.random() * (255 - 0 + 1)) + 0)
+ }
+ }
+ else if(typeof(color.value) == 'string'){
+ this.color = color;
+ this.color.rgb = hexToRgb(this.color.value);
+ }
+
+ /* opacity */
+ this.opacity = (pJS.particles.opacity.random ? Math.random() : 1) * pJS.particles.opacity.value;
+ if(pJS.particles.opacity.anim.enable){
+ this.opacity_status = false;
+ this.vo = pJS.particles.opacity.anim.speed / 100;
+ if(!pJS.particles.opacity.anim.sync){
+ this.vo = this.vo * Math.random();
+ }
+ }
+
+ /* animation - velocity for speed */
+ var velbase = {}
+ switch(pJS.particles.move.direction){
+ case 'top':
+ velbase = { x:0, y:-1 };
+ break;
+ case 'top-right':
+ velbase = { x:0.5, y:-0.5 };
+ break;
+ case 'right':
+ velbase = { x:1, y:-0 };
+ break;
+ case 'bottom-right':
+ velbase = { x:0.5, y:0.5 };
+ break;
+ case 'bottom':
+ velbase = { x:0, y:1 };
+ break;
+ case 'bottom-left':
+ velbase = { x:-0.5, y:1 };
+ break;
+ case 'left':
+ velbase = { x:-1, y:0 };
+ break;
+ case 'top-left':
+ velbase = { x:-0.5, y:-0.5 };
+ break;
+ default:
+ velbase = { x:0, y:0 };
+ break;
+ }
+
+ if(pJS.particles.move.straight){
+ this.vx = velbase.x;
+ this.vy = velbase.y;
+ if(pJS.particles.move.random){
+ this.vx = this.vx * (Math.random());
+ this.vy = this.vy * (Math.random());
+ }
+ }else{
+ this.vx = velbase.x + Math.random()-0.5;
+ this.vy = velbase.y + Math.random()-0.5;
+ }
+
+ // var theta = 2.0 * Math.PI * Math.random();
+ // this.vx = Math.cos(theta);
+ // this.vy = Math.sin(theta);
+
+ this.vx_i = this.vx;
+ this.vy_i = this.vy;
+
+
+
+ /* if shape is image */
+
+ var shape_type = pJS.particles.shape.type;
+ if(typeof(shape_type) == 'object'){
+ if(shape_type instanceof Array){
+ var shape_selected = shape_type[Math.floor(Math.random() * shape_type.length)];
+ this.shape = shape_selected;
+ }
+ }else{
+ this.shape = shape_type;
+ }
+
+ if(this.shape == 'image'){
+ var sh = pJS.particles.shape;
+ this.img = {
+ src: sh.image.src,
+ ratio: sh.image.width / sh.image.height
+ }
+ if(!this.img.ratio) this.img.ratio = 1;
+ if(pJS.tmp.img_type == 'svg' && pJS.tmp.source_svg != undefined){
+ pJS.fn.vendors.createSvgImg(this);
+ if(pJS.tmp.pushing){
+ this.img.loaded = false;
+ }
+ }
+ }
+
+
+
+ };
+
+
+ pJS.fn.particle.prototype.draw = function() {
+
+ var p = this;
+
+ if(p.radius_bubble != undefined){
+ var radius = p.radius_bubble;
+ }else{
+ var radius = p.radius;
+ }
+
+ if(p.opacity_bubble != undefined){
+ var opacity = p.opacity_bubble;
+ }else{
+ var opacity = p.opacity;
+ }
+
+ if(p.color.rgb){
+ var color_value = 'rgba('+p.color.rgb.r+','+p.color.rgb.g+','+p.color.rgb.b+','+opacity+')';
+ }else{
+ var color_value = 'hsla('+p.color.hsl.h+','+p.color.hsl.s+'%,'+p.color.hsl.l+'%,'+opacity+')';
+ }
+
+ pJS.canvas.ctx.fillStyle = color_value;
+ pJS.canvas.ctx.beginPath();
+
+ switch(p.shape){
+
+ case 'circle':
+ pJS.canvas.ctx.arc(p.x, p.y, radius, 0, Math.PI * 2, false);
+ break;
+
+ case 'edge':
+ pJS.canvas.ctx.rect(p.x-radius, p.y-radius, radius*2, radius*2);
+ break;
+
+ case 'triangle':
+ pJS.fn.vendors.drawShape(pJS.canvas.ctx, p.x-radius, p.y+radius / 1.66, radius*2, 3, 2);
+ break;
+
+ case 'polygon':
+ pJS.fn.vendors.drawShape(
+ pJS.canvas.ctx,
+ p.x - radius / (pJS.particles.shape.polygon.nb_sides/3.5), // startX
+ p.y - radius / (2.66/3.5), // startY
+ radius*2.66 / (pJS.particles.shape.polygon.nb_sides/3), // sideLength
+ pJS.particles.shape.polygon.nb_sides, // sideCountNumerator
+ 1 // sideCountDenominator
+ );
+ break;
+
+ case 'star':
+ pJS.fn.vendors.drawShape(
+ pJS.canvas.ctx,
+ p.x - radius*2 / (pJS.particles.shape.polygon.nb_sides/4), // startX
+ p.y - radius / (2*2.66/3.5), // startY
+ radius*2*2.66 / (pJS.particles.shape.polygon.nb_sides/3), // sideLength
+ pJS.particles.shape.polygon.nb_sides, // sideCountNumerator
+ 2 // sideCountDenominator
+ );
+ break;
+
+ case 'image':
+
+ function draw(){
+ pJS.canvas.ctx.drawImage(
+ img_obj,
+ p.x-radius,
+ p.y-radius,
+ radius*2,
+ radius*2 / p.img.ratio
+ );
+ }
+
+ if(pJS.tmp.img_type == 'svg'){
+ var img_obj = p.img.obj;
+ }else{
+ var img_obj = pJS.tmp.img_obj;
+ }
+
+ if(img_obj){
+ draw();
+ }
+
+ break;
+
+ }
+
+ pJS.canvas.ctx.closePath();
+
+ if(pJS.particles.shape.stroke.width > 0){
+ pJS.canvas.ctx.strokeStyle = pJS.particles.shape.stroke.color;
+ pJS.canvas.ctx.lineWidth = pJS.particles.shape.stroke.width;
+ pJS.canvas.ctx.stroke();
+ }
+
+ pJS.canvas.ctx.fill();
+
+ };
+
+
+ pJS.fn.particlesCreate = function(){
+ for(var i = 0; i < pJS.particles.number.value; i++) {
+ pJS.particles.array.push(new pJS.fn.particle(pJS.particles.color, pJS.particles.opacity.value));
+ }
+ };
+
+ pJS.fn.particlesUpdate = function(){
+
+ for(var i = 0; i < pJS.particles.array.length; i++){
+
+ /* the particle */
+ var p = pJS.particles.array[i];
+
+ // var d = ( dx = pJS.interactivity.mouse.click_pos_x - p.x ) * dx + ( dy = pJS.interactivity.mouse.click_pos_y - p.y ) * dy;
+ // var f = -BANG_SIZE / d;
+ // if ( d < BANG_SIZE ) {
+ // var t = Math.atan2( dy, dx );
+ // p.vx = f * Math.cos(t);
+ // p.vy = f * Math.sin(t);
+ // }
+
+ /* move the particle */
+ if(pJS.particles.move.enable){
+ var ms = pJS.particles.move.speed/2;
+ p.x += p.vx * ms;
+ p.y += p.vy * ms;
+ }
+
+ /* change opacity status */
+ if(pJS.particles.opacity.anim.enable) {
+ if(p.opacity_status == true) {
+ if(p.opacity >= pJS.particles.opacity.value) p.opacity_status = false;
+ p.opacity += p.vo;
+ }else {
+ if(p.opacity <= pJS.particles.opacity.anim.opacity_min) p.opacity_status = true;
+ p.opacity -= p.vo;
+ }
+ if(p.opacity < 0) p.opacity = 0;
+ }
+
+ /* change size */
+ if(pJS.particles.size.anim.enable){
+ if(p.size_status == true){
+ if(p.radius >= pJS.particles.size.value) p.size_status = false;
+ p.radius += p.vs;
+ }else{
+ if(p.radius <= pJS.particles.size.anim.size_min) p.size_status = true;
+ p.radius -= p.vs;
+ }
+ if(p.radius < 0) p.radius = 0;
+ }
+
+ /* change particle position if it is out of canvas */
+ if(pJS.particles.move.out_mode == 'bounce'){
+ var new_pos = {
+ x_left: p.radius,
+ x_right: pJS.canvas.w,
+ y_top: p.radius,
+ y_bottom: pJS.canvas.h
+ }
+ }else{
+ var new_pos = {
+ x_left: -p.radius,
+ x_right: pJS.canvas.w + p.radius,
+ y_top: -p.radius,
+ y_bottom: pJS.canvas.h + p.radius
+ }
+ }
+
+ if(p.x - p.radius > pJS.canvas.w){
+ p.x = new_pos.x_left;
+ p.y = Math.random() * pJS.canvas.h;
+ }
+ else if(p.x + p.radius < 0){
+ p.x = new_pos.x_right;
+ p.y = Math.random() * pJS.canvas.h;
+ }
+ if(p.y - p.radius > pJS.canvas.h){
+ p.y = new_pos.y_top;
+ p.x = Math.random() * pJS.canvas.w;
+ }
+ else if(p.y + p.radius < 0){
+ p.y = new_pos.y_bottom;
+ p.x = Math.random() * pJS.canvas.w;
+ }
+
+ /* out of canvas modes */
+ switch(pJS.particles.move.out_mode){
+ case 'bounce':
+ if (p.x + p.radius > pJS.canvas.w) p.vx = -p.vx;
+ else if (p.x - p.radius < 0) p.vx = -p.vx;
+ if (p.y + p.radius > pJS.canvas.h) p.vy = -p.vy;
+ else if (p.y - p.radius < 0) p.vy = -p.vy;
+ break;
+ }
+
+ /* events */
+ if(isInArray('grab', pJS.interactivity.events.onhover.mode)){
+ pJS.fn.modes.grabParticle(p);
+ }
+
+ if(isInArray('bubble', pJS.interactivity.events.onhover.mode) || isInArray('bubble', pJS.interactivity.events.onclick.mode)){
+ pJS.fn.modes.bubbleParticle(p);
+ }
+
+ if(isInArray('repulse', pJS.interactivity.events.onhover.mode) || isInArray('repulse', pJS.interactivity.events.onclick.mode)){
+ pJS.fn.modes.repulseParticle(p);
+ }
+
+ /* interaction auto between particles */
+ if(pJS.particles.line_linked.enable || pJS.particles.move.attract.enable){
+ for(var j = i + 1; j < pJS.particles.array.length; j++){
+ var p2 = pJS.particles.array[j];
+
+ /* link particles */
+ if(pJS.particles.line_linked.enable){
+ pJS.fn.interact.linkParticles(p,p2);
+ }
+
+ /* attract particles */
+ if(pJS.particles.move.attract.enable){
+ pJS.fn.interact.attractParticles(p,p2);
+ }
+
+ /* bounce particles */
+ if(pJS.particles.move.bounce){
+ pJS.fn.interact.bounceParticles(p,p2);
+ }
+
+ }
+ }
+
+
+ }
+
+ };
+
+ pJS.fn.particlesDraw = function(){
+
+ /* clear canvas */
+ pJS.canvas.ctx.clearRect(0, 0, pJS.canvas.w, pJS.canvas.h);
+
+ /* update each particles param */
+ pJS.fn.particlesUpdate();
+
+ /* draw each particle */
+ for(var i = 0; i < pJS.particles.array.length; i++){
+ var p = pJS.particles.array[i];
+ p.draw();
+ }
+
+ };
+
+ pJS.fn.particlesEmpty = function(){
+ pJS.particles.array = [];
+ };
+
+ pJS.fn.particlesRefresh = function(){
+
+ /* init all */
+ cancelRequestAnimFrame(pJS.fn.checkAnimFrame);
+ cancelRequestAnimFrame(pJS.fn.drawAnimFrame);
+ pJS.tmp.source_svg = undefined;
+ pJS.tmp.img_obj = undefined;
+ pJS.tmp.count_svg = 0;
+ pJS.fn.particlesEmpty();
+ pJS.fn.canvasClear();
+
+ /* restart */
+ pJS.fn.vendors.start();
+
+ };
+
+
+ /* ---------- pJS functions - particles interaction ------------ */
+
+ pJS.fn.interact.linkParticles = function(p1, p2){
+
+ var dx = p1.x - p2.x,
+ dy = p1.y - p2.y,
+ dist = Math.sqrt(dx*dx + dy*dy);
+
+ /* draw a line between p1 and p2 if the distance between them is under the config distance */
+ if(dist <= pJS.particles.line_linked.distance){
+
+ var opacity_line = pJS.particles.line_linked.opacity - (dist / (1/pJS.particles.line_linked.opacity)) / pJS.particles.line_linked.distance;
+
+ if(opacity_line > 0){
+
+ /* style */
+ var color_line = pJS.particles.line_linked.color_rgb_line;
+ pJS.canvas.ctx.strokeStyle = 'rgba('+color_line.r+','+color_line.g+','+color_line.b+','+opacity_line+')';
+ pJS.canvas.ctx.lineWidth = pJS.particles.line_linked.width;
+ //pJS.canvas.ctx.lineCap = 'round'; /* performance issue */
+
+ /* path */
+ pJS.canvas.ctx.beginPath();
+ pJS.canvas.ctx.moveTo(p1.x, p1.y);
+ pJS.canvas.ctx.lineTo(p2.x, p2.y);
+ pJS.canvas.ctx.stroke();
+ pJS.canvas.ctx.closePath();
+
+ }
+
+ }
+
+ };
+
+
+ pJS.fn.interact.attractParticles = function(p1, p2){
+
+ /* condensed particles */
+ var dx = p1.x - p2.x,
+ dy = p1.y - p2.y,
+ dist = Math.sqrt(dx*dx + dy*dy);
+
+ if(dist <= pJS.particles.line_linked.distance){
+
+ var ax = dx/(pJS.particles.move.attract.rotateX*1000),
+ ay = dy/(pJS.particles.move.attract.rotateY*1000);
+
+ p1.vx -= ax;
+ p1.vy -= ay;
+
+ p2.vx += ax;
+ p2.vy += ay;
+
+ }
+
+
+ }
+
+
+ pJS.fn.interact.bounceParticles = function(p1, p2){
+
+ var dx = p1.x - p2.x,
+ dy = p1.y - p2.y,
+ dist = Math.sqrt(dx*dx + dy*dy),
+ dist_p = p1.radius+p2.radius;
+
+ if(dist <= dist_p){
+ p1.vx = -p1.vx;
+ p1.vy = -p1.vy;
+
+ p2.vx = -p2.vx;
+ p2.vy = -p2.vy;
+ }
+
+ }
+
+
+ /* ---------- pJS functions - modes events ------------ */
+
+ pJS.fn.modes.pushParticles = function(nb, pos){
+
+ pJS.tmp.pushing = true;
+
+ for(var i = 0; i < nb; i++){
+ pJS.particles.array.push(
+ new pJS.fn.particle(
+ pJS.particles.color,
+ pJS.particles.opacity.value,
+ {
+ 'x': pos ? pos.pos_x : Math.random() * pJS.canvas.w,
+ 'y': pos ? pos.pos_y : Math.random() * pJS.canvas.h
+ }
+ )
+ )
+ if(i == nb-1){
+ if(!pJS.particles.move.enable){
+ pJS.fn.particlesDraw();
+ }
+ pJS.tmp.pushing = false;
+ }
+ }
+
+ };
+
+
+ pJS.fn.modes.removeParticles = function(nb){
+
+ pJS.particles.array.splice(0, nb);
+ if(!pJS.particles.move.enable){
+ pJS.fn.particlesDraw();
+ }
+
+ };
+
+
+ pJS.fn.modes.bubbleParticle = function(p){
+
+ /* on hover event */
+ if(pJS.interactivity.events.onhover.enable && isInArray('bubble', pJS.interactivity.events.onhover.mode)){
+
+ var dx_mouse = p.x - pJS.interactivity.mouse.pos_x,
+ dy_mouse = p.y - pJS.interactivity.mouse.pos_y,
+ dist_mouse = Math.sqrt(dx_mouse*dx_mouse + dy_mouse*dy_mouse),
+ ratio = 1 - dist_mouse / pJS.interactivity.modes.bubble.distance;
+
+ function init(){
+ p.opacity_bubble = p.opacity;
+ p.radius_bubble = p.radius;
+ }
+
+ /* mousemove - check ratio */
+ if(dist_mouse <= pJS.interactivity.modes.bubble.distance){
+
+ if(ratio >= 0 && pJS.interactivity.status == 'mousemove'){
+
+ /* size */
+ if(pJS.interactivity.modes.bubble.size != pJS.particles.size.value){
+
+ if(pJS.interactivity.modes.bubble.size > pJS.particles.size.value){
+ var size = p.radius + (pJS.interactivity.modes.bubble.size*ratio);
+ if(size >= 0){
+ p.radius_bubble = size;
+ }
+ }else{
+ var dif = p.radius - pJS.interactivity.modes.bubble.size,
+ size = p.radius - (dif*ratio);
+ if(size > 0){
+ p.radius_bubble = size;
+ }else{
+ p.radius_bubble = 0;
+ }
+ }
+
+ }
+
+ /* opacity */
+ if(pJS.interactivity.modes.bubble.opacity != pJS.particles.opacity.value){
+
+ if(pJS.interactivity.modes.bubble.opacity > pJS.particles.opacity.value){
+ var opacity = pJS.interactivity.modes.bubble.opacity*ratio;
+ if(opacity > p.opacity && opacity <= pJS.interactivity.modes.bubble.opacity){
+ p.opacity_bubble = opacity;
+ }
+ }else{
+ var opacity = p.opacity - (pJS.particles.opacity.value-pJS.interactivity.modes.bubble.opacity)*ratio;
+ if(opacity < p.opacity && opacity >= pJS.interactivity.modes.bubble.opacity){
+ p.opacity_bubble = opacity;
+ }
+ }
+
+ }
+
+ }
+
+ }else{
+ init();
+ }
+
+
+ /* mouseleave */
+ if(pJS.interactivity.status == 'mouseleave'){
+ init();
+ }
+
+ }
+
+ /* on click event */
+ else if(pJS.interactivity.events.onclick.enable && isInArray('bubble', pJS.interactivity.events.onclick.mode)){
+
+
+ if(pJS.tmp.bubble_clicking){
+ var dx_mouse = p.x - pJS.interactivity.mouse.click_pos_x,
+ dy_mouse = p.y - pJS.interactivity.mouse.click_pos_y,
+ dist_mouse = Math.sqrt(dx_mouse*dx_mouse + dy_mouse*dy_mouse),
+ time_spent = (new Date().getTime() - pJS.interactivity.mouse.click_time)/1000;
+
+ if(time_spent > pJS.interactivity.modes.bubble.duration){
+ pJS.tmp.bubble_duration_end = true;
+ }
+
+ if(time_spent > pJS.interactivity.modes.bubble.duration*2){
+ pJS.tmp.bubble_clicking = false;
+ pJS.tmp.bubble_duration_end = false;
+ }
+ }
+
+
+ function process(bubble_param, particles_param, p_obj_bubble, p_obj, id){
+
+ if(bubble_param != particles_param){
+
+ if(!pJS.tmp.bubble_duration_end){
+ if(dist_mouse <= pJS.interactivity.modes.bubble.distance){
+ if(p_obj_bubble != undefined) var obj = p_obj_bubble;
+ else var obj = p_obj;
+ if(obj != bubble_param){
+ var value = p_obj - (time_spent * (p_obj - bubble_param) / pJS.interactivity.modes.bubble.duration);
+ if(id == 'size') p.radius_bubble = value;
+ if(id == 'opacity') p.opacity_bubble = value;
+ }
+ }else{
+ if(id == 'size') p.radius_bubble = undefined;
+ if(id == 'opacity') p.opacity_bubble = undefined;
+ }
+ }else{
+ if(p_obj_bubble != undefined){
+ var value_tmp = p_obj - (time_spent * (p_obj - bubble_param) / pJS.interactivity.modes.bubble.duration),
+ dif = bubble_param - value_tmp;
+ value = bubble_param + dif;
+ if(id == 'size') p.radius_bubble = value;
+ if(id == 'opacity') p.opacity_bubble = value;
+ }
+ }
+
+ }
+
+ }
+
+ if(pJS.tmp.bubble_clicking){
+ /* size */
+ process(pJS.interactivity.modes.bubble.size, pJS.particles.size.value, p.radius_bubble, p.radius, 'size');
+ /* opacity */
+ process(pJS.interactivity.modes.bubble.opacity, pJS.particles.opacity.value, p.opacity_bubble, p.opacity, 'opacity');
+ }
+
+ }
+
+ };
+
+
+ pJS.fn.modes.repulseParticle = function(p){
+
+ if(pJS.interactivity.events.onhover.enable && isInArray('repulse', pJS.interactivity.events.onhover.mode) && pJS.interactivity.status == 'mousemove') {
+
+ var dx_mouse = p.x - pJS.interactivity.mouse.pos_x,
+ dy_mouse = p.y - pJS.interactivity.mouse.pos_y,
+ dist_mouse = Math.sqrt(dx_mouse*dx_mouse + dy_mouse*dy_mouse);
+
+ var normVec = {x: dx_mouse/dist_mouse, y: dy_mouse/dist_mouse},
+ repulseRadius = pJS.interactivity.modes.repulse.distance,
+ velocity = 100,
+ repulseFactor = clamp((1/repulseRadius)*(-1*Math.pow(dist_mouse/repulseRadius,2)+1)*repulseRadius*velocity, 0, 50);
+
+ var pos = {
+ x: p.x + normVec.x * repulseFactor,
+ y: p.y + normVec.y * repulseFactor
+ }
+
+ if(pJS.particles.move.out_mode == 'bounce'){
+ if(pos.x - p.radius > 0 && pos.x + p.radius < pJS.canvas.w) p.x = pos.x;
+ if(pos.y - p.radius > 0 && pos.y + p.radius < pJS.canvas.h) p.y = pos.y;
+ }else{
+ p.x = pos.x;
+ p.y = pos.y;
+ }
+
+ }
+
+
+ else if(pJS.interactivity.events.onclick.enable && isInArray('repulse', pJS.interactivity.events.onclick.mode)) {
+
+ if(!pJS.tmp.repulse_finish){
+ pJS.tmp.repulse_count++;
+ if(pJS.tmp.repulse_count == pJS.particles.array.length){
+ pJS.tmp.repulse_finish = true;
+ }
+ }
+
+ if(pJS.tmp.repulse_clicking){
+
+ var repulseRadius = Math.pow(pJS.interactivity.modes.repulse.distance/6, 3);
+
+ var dx = pJS.interactivity.mouse.click_pos_x - p.x,
+ dy = pJS.interactivity.mouse.click_pos_y - p.y,
+ d = dx*dx + dy*dy;
+
+ var force = -repulseRadius / d * 1;
+
+ function process(){
+
+ var f = Math.atan2(dy,dx);
+ p.vx = force * Math.cos(f);
+ p.vy = force * Math.sin(f);
+
+ if(pJS.particles.move.out_mode == 'bounce'){
+ var pos = {
+ x: p.x + p.vx,
+ y: p.y + p.vy
+ }
+ if (pos.x + p.radius > pJS.canvas.w) p.vx = -p.vx;
+ else if (pos.x - p.radius < 0) p.vx = -p.vx;
+ if (pos.y + p.radius > pJS.canvas.h) p.vy = -p.vy;
+ else if (pos.y - p.radius < 0) p.vy = -p.vy;
+ }
+
+ }
+
+ // default
+ if(d <= repulseRadius){
+ process();
+ }
+
+ // bang - slow motion mode
+ // if(!pJS.tmp.repulse_finish){
+ // if(d <= repulseRadius){
+ // process();
+ // }
+ // }else{
+ // process();
+ // }
+
+
+ }else{
+
+ if(pJS.tmp.repulse_clicking == false){
+
+ p.vx = p.vx_i;
+ p.vy = p.vy_i;
+
+ }
+
+ }
+
+ }
+
+ }
+
+
+ pJS.fn.modes.grabParticle = function(p){
+
+ if(pJS.interactivity.events.onhover.enable && pJS.interactivity.status == 'mousemove'){
+
+ var dx_mouse = p.x - pJS.interactivity.mouse.pos_x,
+ dy_mouse = p.y - pJS.interactivity.mouse.pos_y,
+ dist_mouse = Math.sqrt(dx_mouse*dx_mouse + dy_mouse*dy_mouse);
+
+ /* draw a line between the cursor and the particle if the distance between them is under the config distance */
+ if(dist_mouse <= pJS.interactivity.modes.grab.distance){
+
+ var opacity_line = pJS.interactivity.modes.grab.line_linked.opacity - (dist_mouse / (1/pJS.interactivity.modes.grab.line_linked.opacity)) / pJS.interactivity.modes.grab.distance;
+
+ if(opacity_line > 0){
+
+ /* style */
+ var color_line = pJS.particles.line_linked.color_rgb_line;
+ pJS.canvas.ctx.strokeStyle = 'rgba('+color_line.r+','+color_line.g+','+color_line.b+','+opacity_line+')';
+ pJS.canvas.ctx.lineWidth = pJS.particles.line_linked.width;
+ //pJS.canvas.ctx.lineCap = 'round'; /* performance issue */
+
+ /* path */
+ pJS.canvas.ctx.beginPath();
+ pJS.canvas.ctx.moveTo(p.x, p.y);
+ pJS.canvas.ctx.lineTo(pJS.interactivity.mouse.pos_x, pJS.interactivity.mouse.pos_y);
+ pJS.canvas.ctx.stroke();
+ pJS.canvas.ctx.closePath();
+
+ }
+
+ }
+
+ }
+
+ };
+
+
+
+ /* ---------- pJS functions - vendors ------------ */
+
+ pJS.fn.vendors.eventsListeners = function(){
+
+ /* events target element */
+ if(pJS.interactivity.detect_on == 'window'){
+ pJS.interactivity.el = window;
+ }else{
+ pJS.interactivity.el = pJS.canvas.el;
+ }
+
+
+ /* detect mouse pos - on hover / click event */
+ if(pJS.interactivity.events.onhover.enable || pJS.interactivity.events.onclick.enable){
+
+ /* el on mousemove */
+ pJS.interactivity.el.addEventListener('mousemove', function(e){
+
+ if(pJS.interactivity.el == window){
+ var pos_x = e.clientX,
+ pos_y = e.clientY;
+ }
+ else{
+ var pos_x = e.offsetX || e.clientX,
+ pos_y = e.offsetY || e.clientY;
+ }
+
+ pJS.interactivity.mouse.pos_x = pos_x;
+ pJS.interactivity.mouse.pos_y = pos_y;
+
+ if(pJS.tmp.retina){
+ pJS.interactivity.mouse.pos_x *= pJS.canvas.pxratio;
+ pJS.interactivity.mouse.pos_y *= pJS.canvas.pxratio;
+ }
+
+ pJS.interactivity.status = 'mousemove';
+
+ });
+
+ /* el on onmouseleave */
+ pJS.interactivity.el.addEventListener('mouseleave', function(e){
+
+ pJS.interactivity.mouse.pos_x = null;
+ pJS.interactivity.mouse.pos_y = null;
+ pJS.interactivity.status = 'mouseleave';
+
+ });
+
+ }
+
+ /* on click event */
+ if(pJS.interactivity.events.onclick.enable){
+
+ pJS.interactivity.el.addEventListener('click', function(){
+
+ pJS.interactivity.mouse.click_pos_x = pJS.interactivity.mouse.pos_x;
+ pJS.interactivity.mouse.click_pos_y = pJS.interactivity.mouse.pos_y;
+ pJS.interactivity.mouse.click_time = new Date().getTime();
+
+ if(pJS.interactivity.events.onclick.enable){
+
+ switch(pJS.interactivity.events.onclick.mode){
+
+ case 'push':
+ if(pJS.particles.move.enable){
+ pJS.fn.modes.pushParticles(pJS.interactivity.modes.push.particles_nb, pJS.interactivity.mouse);
+ }else{
+ if(pJS.interactivity.modes.push.particles_nb == 1){
+ pJS.fn.modes.pushParticles(pJS.interactivity.modes.push.particles_nb, pJS.interactivity.mouse);
+ }
+ else if(pJS.interactivity.modes.push.particles_nb > 1){
+ pJS.fn.modes.pushParticles(pJS.interactivity.modes.push.particles_nb);
+ }
+ }
+ break;
+
+ case 'remove':
+ pJS.fn.modes.removeParticles(pJS.interactivity.modes.remove.particles_nb);
+ break;
+
+ case 'bubble':
+ pJS.tmp.bubble_clicking = true;
+ break;
+
+ case 'repulse':
+ pJS.tmp.repulse_clicking = true;
+ pJS.tmp.repulse_count = 0;
+ pJS.tmp.repulse_finish = false;
+ setTimeout(function(){
+ pJS.tmp.repulse_clicking = false;
+ }, pJS.interactivity.modes.repulse.duration*1000)
+ break;
+
+ }
+
+ }
+
+ });
+
+ }
+
+
+ };
+
+ pJS.fn.vendors.densityAutoParticles = function(){
+
+ if(pJS.particles.number.density.enable){
+
+ /* calc area */
+ var area = pJS.canvas.el.width * pJS.canvas.el.height / 1000;
+ if(pJS.tmp.retina){
+ area = area/(pJS.canvas.pxratio*2);
+ }
+
+ /* calc number of particles based on density area */
+ var nb_particles = area * pJS.particles.number.value / pJS.particles.number.density.value_area;
+
+ /* add or remove X particles */
+ var missing_particles = pJS.particles.array.length - nb_particles;
+ if(missing_particles < 0) pJS.fn.modes.pushParticles(Math.abs(missing_particles));
+ else pJS.fn.modes.removeParticles(missing_particles);
+
+ }
+
+ };
+
+
+ pJS.fn.vendors.checkOverlap = function(p1, position){
+ for(var i = 0; i < pJS.particles.array.length; i++){
+ var p2 = pJS.particles.array[i];
+
+ var dx = p1.x - p2.x,
+ dy = p1.y - p2.y,
+ dist = Math.sqrt(dx*dx + dy*dy);
+
+ if(dist <= p1.radius + p2.radius){
+ p1.x = position ? position.x : Math.random() * pJS.canvas.w;
+ p1.y = position ? position.y : Math.random() * pJS.canvas.h;
+ pJS.fn.vendors.checkOverlap(p1);
+ }
+ }
+ };
+
+
+ pJS.fn.vendors.createSvgImg = function(p){
+
+ /* set color to svg element */
+ var svgXml = pJS.tmp.source_svg,
+ rgbHex = /#([0-9A-F]{3,6})/gi,
+ coloredSvgXml = svgXml.replace(rgbHex, function (m, r, g, b) {
+ if(p.color.rgb){
+ var color_value = 'rgba('+p.color.rgb.r+','+p.color.rgb.g+','+p.color.rgb.b+','+p.opacity+')';
+ }else{
+ var color_value = 'hsla('+p.color.hsl.h+','+p.color.hsl.s+'%,'+p.color.hsl.l+'%,'+p.opacity+')';
+ }
+ return color_value;
+ });
+
+ /* prepare to create img with colored svg */
+ var svg = new Blob([coloredSvgXml], {type: 'image/svg+xml;charset=utf-8'}),
+ DOMURL = window.URL || window.webkitURL || window,
+ url = DOMURL.createObjectURL(svg);
+
+ /* create particle img obj */
+ var img = new Image();
+ img.addEventListener('load', function(){
+ p.img.obj = img;
+ p.img.loaded = true;
+ DOMURL.revokeObjectURL(url);
+ pJS.tmp.count_svg++;
+ });
+ img.src = url;
+
+ };
+
+
+ pJS.fn.vendors.destroypJS = function(){
+ cancelAnimationFrame(pJS.fn.drawAnimFrame);
+ canvas_el.remove();
+ pJSDom = null;
+ };
+
+
+ pJS.fn.vendors.drawShape = function(c, startX, startY, sideLength, sideCountNumerator, sideCountDenominator){
+
+ // By Programming Thomas - https://programmingthomas.wordpress.com/2013/04/03/n-sided-shapes/
+ var sideCount = sideCountNumerator * sideCountDenominator;
+ var decimalSides = sideCountNumerator / sideCountDenominator;
+ var interiorAngleDegrees = (180 * (decimalSides - 2)) / decimalSides;
+ var interiorAngle = Math.PI - Math.PI * interiorAngleDegrees / 180; // convert to radians
+ c.save();
+ c.beginPath();
+ c.translate(startX, startY);
+ c.moveTo(0,0);
+ for (var i = 0; i < sideCount; i++) {
+ c.lineTo(sideLength,0);
+ c.translate(sideLength,0);
+ c.rotate(interiorAngle);
+ }
+ //c.stroke();
+ c.fill();
+ c.restore();
+
+ };
+
+ pJS.fn.vendors.exportImg = function(){
+ window.open(pJS.canvas.el.toDataURL('image/png'), '_blank');
+ };
+
+
+ pJS.fn.vendors.loadImg = function(type){
+
+ pJS.tmp.img_error = undefined;
+
+ if(pJS.particles.shape.image.src != ''){
+
+ if(type == 'svg'){
+
+ var xhr = new XMLHttpRequest();
+ xhr.open('GET', pJS.particles.shape.image.src);
+ xhr.onreadystatechange = function (data) {
+ if(xhr.readyState == 4){
+ if(xhr.status == 200){
+ pJS.tmp.source_svg = data.currentTarget.response;
+ pJS.fn.vendors.checkBeforeDraw();
+ }else{
+ console.log('Error pJS - Image not found');
+ pJS.tmp.img_error = true;
+ }
+ }
+ }
+ xhr.send();
+
+ }else{
+
+ var img = new Image();
+ img.addEventListener('load', function(){
+ pJS.tmp.img_obj = img;
+ pJS.fn.vendors.checkBeforeDraw();
+ });
+ img.src = pJS.particles.shape.image.src;
+
+ }
+
+ }else{
+ console.log('Error pJS - No image.src');
+ pJS.tmp.img_error = true;
+ }
+
+ };
+
+
+ pJS.fn.vendors.draw = function(){
+
+ if(pJS.particles.shape.type == 'image'){
+
+ if(pJS.tmp.img_type == 'svg'){
+
+ if(pJS.tmp.count_svg >= pJS.particles.number.value){
+ pJS.fn.particlesDraw();
+ if(!pJS.particles.move.enable) cancelRequestAnimFrame(pJS.fn.drawAnimFrame);
+ else pJS.fn.drawAnimFrame = requestAnimFrame(pJS.fn.vendors.draw);
+ }else{
+ //console.log('still loading...');
+ if(!pJS.tmp.img_error) pJS.fn.drawAnimFrame = requestAnimFrame(pJS.fn.vendors.draw);
+ }
+
+ }else{
+
+ if(pJS.tmp.img_obj != undefined){
+ pJS.fn.particlesDraw();
+ if(!pJS.particles.move.enable) cancelRequestAnimFrame(pJS.fn.drawAnimFrame);
+ else pJS.fn.drawAnimFrame = requestAnimFrame(pJS.fn.vendors.draw);
+ }else{
+ if(!pJS.tmp.img_error) pJS.fn.drawAnimFrame = requestAnimFrame(pJS.fn.vendors.draw);
+ }
+
+ }
+
+ }else{
+ pJS.fn.particlesDraw();
+ if(!pJS.particles.move.enable) cancelRequestAnimFrame(pJS.fn.drawAnimFrame);
+ else pJS.fn.drawAnimFrame = requestAnimFrame(pJS.fn.vendors.draw);
+ }
+
+ };
+
+
+ pJS.fn.vendors.checkBeforeDraw = function(){
+
+ // if shape is image
+ if(pJS.particles.shape.type == 'image'){
+
+ if(pJS.tmp.img_type == 'svg' && pJS.tmp.source_svg == undefined){
+ pJS.tmp.checkAnimFrame = requestAnimFrame(check);
+ }else{
+ //console.log('images loaded! cancel check');
+ cancelRequestAnimFrame(pJS.tmp.checkAnimFrame);
+ if(!pJS.tmp.img_error){
+ pJS.fn.vendors.init();
+ pJS.fn.vendors.draw();
+ }
+
+ }
+
+ }else{
+ pJS.fn.vendors.init();
+ pJS.fn.vendors.draw();
+ }
+
+ };
+
+
+ pJS.fn.vendors.init = function(){
+
+ /* init canvas + particles */
+ pJS.fn.retinaInit();
+ pJS.fn.canvasInit();
+ pJS.fn.canvasSize();
+ pJS.fn.canvasPaint();
+ pJS.fn.particlesCreate();
+ pJS.fn.vendors.densityAutoParticles();
+
+ /* particles.line_linked - convert hex colors to rgb */
+ pJS.particles.line_linked.color_rgb_line = hexToRgb(pJS.particles.line_linked.color);
+
+ };
+
+
+ pJS.fn.vendors.start = function(){
+
+ if(isInArray('image', pJS.particles.shape.type)){
+ pJS.tmp.img_type = pJS.particles.shape.image.src.substr(pJS.particles.shape.image.src.length - 3);
+ pJS.fn.vendors.loadImg(pJS.tmp.img_type);
+ }else{
+ pJS.fn.vendors.checkBeforeDraw();
+ }
+
+ };
+
+
+
+
+ /* ---------- pJS - start ------------ */
+
+
+ pJS.fn.vendors.eventsListeners();
+
+ pJS.fn.vendors.start();
+
+
+
+};
+
+/* ---------- global functions - vendors ------------ */
+
+Object.deepExtend = function(destination, source) {
+ for (var property in source) {
+ if (source[property] && source[property].constructor &&
+ source[property].constructor === Object) {
+ destination[property] = destination[property] || {};
+ arguments.callee(destination[property], source[property]);
+ } else {
+ destination[property] = source[property];
+ }
+ }
+ return destination;
+};
+
+window.requestAnimFrame = (function(){
+ return window.requestAnimationFrame ||
+ window.webkitRequestAnimationFrame ||
+ window.mozRequestAnimationFrame ||
+ window.oRequestAnimationFrame ||
+ window.msRequestAnimationFrame ||
+ function(callback){
+ window.setTimeout(callback, 1000 / 60);
+ };
+})();
+
+window.cancelRequestAnimFrame = ( function() {
+ return window.cancelAnimationFrame ||
+ window.webkitCancelRequestAnimationFrame ||
+ window.mozCancelRequestAnimationFrame ||
+ window.oCancelRequestAnimationFrame ||
+ window.msCancelRequestAnimationFrame ||
+ clearTimeout
+} )();
+
+function hexToRgb(hex){
+ // By Tim Down - http://stackoverflow.com/a/5624139/3493650
+ // Expand shorthand form (e.g. "03F") to full form (e.g. "0033FF")
+ var shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i;
+ hex = hex.replace(shorthandRegex, function(m, r, g, b) {
+ return r + r + g + g + b + b;
+ });
+ var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
+ return result ? {
+ r: parseInt(result[1], 16),
+ g: parseInt(result[2], 16),
+ b: parseInt(result[3], 16)
+ } : null;
+};
+
+function clamp(number, min, max) {
+ return Math.min(Math.max(number, min), max);
+};
+
+function isInArray(value, array) {
+ return array.indexOf(value) > -1;
+}
+
+
+/* ---------- particles.js functions - start ------------ */
+
+window.pJSDom = [];
+
+window.particlesJS = function(tag_id, params){
+
+ //console.log(params);
+
+ /* no string id? so it's object params, and set the id with default id */
+ if(typeof(tag_id) != 'string'){
+ params = tag_id;
+ tag_id = 'particles-js';
+ }
+
+ /* no id? set the id to default id */
+ if(!tag_id){
+ tag_id = 'particles-js';
+ }
+
+ /* pJS elements */
+ var pJS_tag = document.getElementById(tag_id),
+ pJS_canvas_class = 'particles-js-canvas-el',
+ exist_canvas = pJS_tag.getElementsByClassName(pJS_canvas_class);
+
+ /* remove canvas if exists into the pJS target tag */
+ if(exist_canvas.length){
+ while(exist_canvas.length > 0){
+ pJS_tag.removeChild(exist_canvas[0]);
+ }
+ }
+
+ /* create canvas element */
+ var canvas_el = document.createElement('canvas');
+ canvas_el.className = pJS_canvas_class;
+
+ /* set size canvas */
+ canvas_el.style.width = "100%";
+ canvas_el.style.height = "100%";
+
+ /* append canvas */
+ var canvas = document.getElementById(tag_id).appendChild(canvas_el);
+
+ /* launch particle.js */
+ if(canvas != null){
+ pJSDom.push(new pJS(tag_id, params));
+ }
+
+};
+
+window.particlesJS.load = function(tag_id, path_config_json, callback){
+
+ /* load json config */
+ var xhr = new XMLHttpRequest();
+ xhr.open('GET', path_config_json);
+ xhr.onreadystatechange = function (data) {
+ if(xhr.readyState == 4){
+ if(xhr.status == 200){
+ var params = JSON.parse(data.currentTarget.response);
+ window.particlesJS(tag_id, params);
+ if(callback) callback();
+ }else{
+ console.log('Error pJS - XMLHttpRequest status: '+xhr.status);
+ console.log('Error pJS - File config not found');
+ }
+ }
+ };
+ xhr.send();
+
+};
\ No newline at end of file
diff --git a/frontend/js/particles.min.js b/frontend/js/particles.min.js
new file mode 100644
index 0000000000..0f06b75b83
--- /dev/null
+++ b/frontend/js/particles.min.js
@@ -0,0 +1,133 @@
+/* -----------------------------------------------
+/* How to use? : Check the GitHub README
+/* ----------------------------------------------- */
+
+/* To load a config file (particles.json) you need to host this demo (MAMP/WAMP/local)... */
+/*
+particlesJS.load('particles-js', 'particles.json', function() {
+ console.log('particles.js loaded - callback');
+});
+*/
+
+/* Otherwise just put the config content (json): */
+
+particlesJS(
+ "particles-js",
+
+ {
+ particles: {
+ number: {
+ value: 80,
+ density: {
+ enable: true,
+ value_area: 800,
+ },
+ },
+ color: {
+ value: "#ffffff",
+ },
+ shape: {
+ type: "circle",
+ stroke: {
+ width: 0,
+ color: "#000000",
+ },
+ polygon: {
+ nb_sides: 5,
+ },
+ image: {
+ src: "img/github.svg",
+ width: 100,
+ height: 100,
+ },
+ },
+ opacity: {
+ value: 0.5,
+ random: false,
+ anim: {
+ enable: false,
+ speed: 1,
+ opacity_min: 0.1,
+ sync: false,
+ },
+ },
+ size: {
+ value: 3,
+ random: true,
+ anim: {
+ enable: false,
+ speed: 40,
+ size_min: 0.1,
+ sync: false,
+ },
+ },
+ line_linked: {
+ enable: false,
+ distance: 150,
+ color: "#ffffff",
+ opacity: 0.4,
+ width: 1,
+ },
+ move: {
+ enable: true,
+ speed: 6,
+ direction: "none",
+ random: false,
+ straight: false,
+ out_mode: "out",
+ attract: {
+ enable: false,
+ rotateX: 600,
+ rotateY: 1200,
+ },
+ },
+ },
+ interactivity: {
+ detect_on: "canvas",
+ events: {
+ onhover: {
+ enable: true,
+ mode: "repulse",
+ },
+ onclick: {
+ enable: true,
+ mode: "push",
+ },
+ resize: true,
+ },
+ modes: {
+ grab: {
+ distance: 400,
+ line_linked: {
+ opacity: 1,
+ },
+ },
+ bubble: {
+ distance: 400,
+ size: 40,
+ duration: 2,
+ opacity: 8,
+ speed: 3,
+ },
+ repulse: {
+ distance: 200,
+ },
+ push: {
+ particles_nb: 4,
+ },
+ remove: {
+ particles_nb: 2,
+ },
+ },
+ },
+ retina_detect: true,
+ config_demo: {
+ hide_card: false,
+ background_color: "#b61924",
+ background_image: "",
+ background_position: "50% 50%",
+ background_repeat: "no-repeat",
+ background_size: "cover",
+ },
+ }
+);
diff --git a/frontend/js/roadmap.js b/frontend/js/roadmap.js
new file mode 100644
index 0000000000..ba511d20fc
--- /dev/null
+++ b/frontend/js/roadmap.js
@@ -0,0 +1,53 @@
+"use strict";
+
+function qs(selector, all = false) {
+ return all
+ ? document.querySelectorAll(selector)
+ : document.querySelector(selector);
+}
+
+const sections = qs(".section", true);
+const timeline = qs(".timeline");
+const line = qs(".line");
+line.style.bottom = `calc(100% - 20px)`;
+let prevScrollY = window.scrollY;
+let up, down;
+let full = false;
+let set = 0;
+const targetY = window.innerHeight * 0.8;
+
+function scrollHandler(e) {
+ const { scrollY } = window;
+ up = scrollY < prevScrollY;
+ down = !up;
+ const timelineRect = timeline.getBoundingClientRect();
+ const lineRect = line.getBoundingClientRect(); // const lineHeight = lineRect.bottom - lineRect.top;
+
+ const dist = targetY - timelineRect.top;
+ console.log(dist);
+
+ if (down && !full) {
+ set = Math.max(set, dist);
+ line.style.bottom = `calc(100% - ${set}px)`;
+ }
+
+ if (dist > timeline.offsetHeight + 50 && !full) {
+ full = true;
+ line.style.bottom = `-50px`;
+ }
+
+ sections.forEach((item) => {
+ // console.log(item);
+ const rect = item.getBoundingClientRect(); // console.log(rect);
+
+ if (rect.top + item.offsetHeight / 5 < targetY) {
+ item.classList.add("show-me");
+ }
+ }); // console.log(up, down);
+
+ prevScrollY = window.scrollY;
+}
+
+scrollHandler();
+line.style.display = "block";
+window.addEventListener("scroll", scrollHandler);
diff --git a/frontend/partners.html b/frontend/partners.html
new file mode 100644
index 0000000000..65154e14f2
--- /dev/null
+++ b/frontend/partners.html
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
Centurion-Contact Us
+
+
+
+
+
+
+
diff --git a/frontend/pdf-file/Centurion-whitepaper.pdf b/frontend/pdf-file/Centurion-whitepaper.pdf
new file mode 100644
index 0000000000..3d72f6827a
Binary files /dev/null and b/frontend/pdf-file/Centurion-whitepaper.pdf differ
diff --git a/frontend/package.json b/package.json
similarity index 99%
rename from frontend/package.json
rename to package.json
index f2963f5195..844598a09e 100644
--- a/frontend/package.json
+++ b/package.json
@@ -20,4 +20,4 @@
"dependencies": {
"node-fetch": "^2.6.7"
}
-}
\ No newline at end of file
+}