├── .distignore ├── .eslintrc ├── .github ├── ISSUE_TEMPLATE │ ├── Bug_report.yml │ └── Feature_request.yml ├── PULL_REQUEST_TEMPLATE.md ├── dependabot.yml ├── labeler.yml └── workflows │ ├── build-dev-artifact.yml │ ├── create-tag.yml │ ├── deploy.yml │ ├── issue-labeler.yml │ ├── new-issues.yml │ ├── pr-checklist.yml │ ├── sync-branches.yml │ ├── sync-wporg-assets.yml │ └── test-php.yml ├── .releaserc.yml ├── .wordpress-org ├── banner-1544x500.png ├── banner-772-250.png ├── icon-128x128.gif ├── icon-256x256.gif ├── screenshot-1.png ├── screenshot-2.png ├── screenshot-3.png ├── screenshot-4.png ├── screenshot-5.png ├── screenshot-6.png └── screenshot-7.png ├── CHANGELOG.md ├── CONTRIBUTING.md ├── README.md ├── assets ├── css │ ├── chosen.css │ ├── index.php │ ├── jquery-ui-styles │ │ ├── 1.11.4 │ │ │ ├── jquery-ui.css │ │ │ └── jquery-ui.min.css │ │ ├── 1.12.1 │ │ │ ├── jquery-ui.css │ │ │ └── jquery-ui.min.css │ │ ├── 1.13.0 │ │ │ ├── jquery-ui.css │ │ │ └── jquery-ui.min.css │ │ └── 1.13.1 │ │ │ ├── jquery-ui.css │ │ │ └── jquery-ui.min.css │ ├── jquery-ui-timepicker-addon.css │ ├── style-admin.css │ ├── style-wizard.css │ ├── style.bot.css │ └── style.css ├── images │ ├── backgrounds │ │ ├── bg1.jpg │ │ ├── bg10.jpg │ │ ├── bg10_thumb.jpg │ │ ├── bg11.jpg │ │ ├── bg11_thumb.jpg │ │ ├── bg1_thumb.jpg │ │ ├── bg2.jpg │ │ ├── bg2_thumb.jpg │ │ ├── bg3.jpg │ │ ├── bg3_thumb.jpg │ │ ├── bg4.jpg │ │ ├── bg4_thumb.jpg │ │ ├── bg5.jpg │ │ ├── bg5_thumb.jpg │ │ ├── bg6.jpg │ │ ├── bg6_thumb.jpg │ │ ├── bg7.jpg │ │ ├── bg7_thumb.jpg │ │ ├── bg8.jpg │ │ ├── bg8_thumb.jpg │ │ ├── bg9.jpg │ │ └── bg9_thumb.jpg │ ├── chatbot.png │ ├── checked.svg │ ├── chosen │ │ ├── chosen-sprite.png │ │ └── chosen-sprite@2x.png │ ├── close.svg │ ├── exit.svg │ ├── finish-setup.svg │ ├── icn_sprite.png │ ├── icon.svg │ ├── index.php │ ├── otter-logo.svg │ ├── recommended │ │ ├── neve.jpg │ │ ├── optimole.jpg │ │ └── otter.jpg │ └── subscribe.svg ├── index.php ├── js │ ├── bot.async.js │ ├── bot.js │ ├── chosen.jquery.js │ ├── index.php │ ├── jquery-ui-timepicker-addon.js │ ├── jquery.countdown.js │ ├── jquery.fitvids.js │ ├── jquery.plugin.js │ ├── jquery.validate.js │ ├── scripts-admin-global.js │ ├── scripts-admin.js │ └── scripts.js └── templates │ ├── coming-soon │ ├── coming-soon-1 │ │ ├── blocks-export.json │ │ └── screenshot.png │ ├── coming-soon-2 │ │ ├── blocks-export.json │ │ └── screenshot.png │ ├── coming-soon-3 │ │ ├── blocks-export.json │ │ └── screenshot.png │ └── coming-soon-4 │ │ ├── blocks-export.json │ │ └── screenshot.png │ ├── landing-page │ ├── landing-page-1 │ │ ├── blocks-export.json │ │ └── screenshot.png │ ├── landing-page-2 │ │ ├── blocks-export.json │ │ └── screenshot.png │ ├── landing-page-3 │ │ ├── blocks-export.json │ │ └── screenshot.png │ ├── landing-page-4 │ │ ├── blocks-export.json │ │ └── screenshot.png │ ├── landing-page-5 │ │ ├── blocks-export.json │ │ └── screenshot.png │ ├── landing-page-6 │ │ ├── blocks-export.json │ │ └── screenshot.png │ └── landing-page-7 │ │ ├── blocks-export.json │ │ └── screenshot.png │ └── maintenance │ ├── maintenance-1 │ ├── blocks-export.json │ └── screenshot.png │ ├── maintenance-2 │ ├── blocks-export.json │ └── screenshot.png │ ├── maintenance-3 │ ├── blocks-export.json │ └── screenshot.png │ └── maintenance-4 │ ├── blocks-export.json │ └── screenshot.png ├── bin ├── dist.sh └── install-wp-tests.sh ├── includes ├── classes │ ├── index.php │ ├── shortcodes │ │ ├── index.php │ │ └── wp-maintenance-mode-shortcode-loginform.php │ ├── wp-maintenance-mode-admin.php │ ├── wp-maintenance-mode-shortcodes.php │ └── wp-maintenance-mode.php ├── functions │ ├── helpers.php │ ├── hooks.php │ └── index.php └── index.php ├── index.php ├── languages ├── index.php ├── wp-maintenance-mode-de_DE.mo ├── wp-maintenance-mode-de_DE.po ├── wp-maintenance-mode-en_US.mo ├── wp-maintenance-mode-en_US.po ├── wp-maintenance-mode-es_ES.mo ├── wp-maintenance-mode-es_ES.po ├── wp-maintenance-mode-fa_IR.mo ├── wp-maintenance-mode-fa_IR.po ├── wp-maintenance-mode-fr_FR.mo ├── wp-maintenance-mode-fr_FR.po ├── wp-maintenance-mode-it_IT.mo ├── wp-maintenance-mode-it_IT.po ├── wp-maintenance-mode-nb_NO.mo ├── wp-maintenance-mode-nb_NO.po ├── wp-maintenance-mode-nl_NL.mo ├── wp-maintenance-mode-nl_NL.po ├── wp-maintenance-mode-pl_PL.mo ├── wp-maintenance-mode-pl_PL.po ├── wp-maintenance-mode-pt_BR.mo ├── wp-maintenance-mode-pt_BR.po ├── wp-maintenance-mode-pt_PT.mo ├── wp-maintenance-mode-pt_PT.po ├── wp-maintenance-mode-ro_RO.mo ├── wp-maintenance-mode-ro_RO.po ├── wp-maintenance-mode-ru_RU.mo ├── wp-maintenance-mode-ru_RU.po ├── wp-maintenance-mode-sv_SE.mo ├── wp-maintenance-mode-sv_SE.po ├── wp-maintenance-mode-uk_UA.mo └── wp-maintenance-mode-uk_UA.po ├── phpcs.xml ├── phpunit.xml ├── readme.txt ├── tests ├── bootstrap.php └── generic-test.php ├── uninstall.php ├── views ├── contact.php ├── google-analytics.php ├── index.php ├── loginform.php ├── maintenance.php ├── network-settings.php ├── notices.php ├── settings.php ├── sidebar.php ├── wizard.php └── wpmm-page-template.php ├── wp-maintenance-mode.php └── yarn.lock /.distignore: -------------------------------------------------------------------------------- 1 | .git 2 | .github 3 | cypress 4 | .distignore 5 | .gitignore 6 | .travis.yml 7 | .jshintrc 8 | Gruntfile.js 9 | grunt 10 | phpcs.xml 11 | node_modules 12 | logs 13 | package.json 14 | bin 15 | .babelrc 16 | .commitlintrc.js 17 | .gitattributes 18 | .nvmrc 19 | .idea 20 | .releaserc.yml 21 | cypress.json 22 | docker-compose.ci.yml 23 | Dockerfile 24 | .env 25 | vue_src 26 | tests 27 | phpunit.xml 28 | npm-debug.log 29 | dist 30 | artifact 31 | composer.json 32 | composer.lock 33 | themeisle.enc 34 | .stylelintrc 35 | init.sh 36 | docker-compose.yml 37 | package-lock.json 38 | phpmd.xml 39 | webpack.config.js 40 | assets/vue 41 | .wordpress-org 42 | yarn.lock 43 | .eslintrc 44 | CONTRIBUTING.md 45 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["plugin:@wordpress/eslint-plugin/recommended"], 3 | "ignorePatterns": ["**/vendor/**", "**/*.min.*"] 4 | } 5 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/Bug_report.yml: -------------------------------------------------------------------------------- 1 | name: Bug report 2 | description: Report a bug so we can get to squashing it. 3 | labels: bug 4 | body: 5 | - type: markdown 6 | attributes: 7 | value: | 8 | Thanks for taking the time to fill out this bug report! 9 | - type: textarea 10 | attributes: 11 | label: Description 12 | description: Please write a brief description of the bug, including what you expect to happen and what is currently happening. 13 | placeholder: | 14 | Feature '...' is not working properly. I expect '...' to happen, but '...' happens instead 15 | validations: 16 | required: true 17 | 18 | - type: textarea 19 | attributes: 20 | label: Step-by-step reproduction instructions 21 | description: Please write the steps needed to reproduce the bug. 22 | placeholder: | 23 | 1. Go to '...' 24 | 2. Click on '...' 25 | 3. Scroll down to '...' 26 | validations: 27 | required: true 28 | 29 | - type: textarea 30 | attributes: 31 | label: Screenshots, screen recording, code snippet or Help Scout ticket 32 | description: | 33 | If possible, please upload a screenshot or screen recording which demonstrates the bug. 34 | Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in. 35 | Tip: You can include links to customer Help Scout support thread. 36 | validations: 37 | required: false 38 | 39 | - type: input 40 | attributes: 41 | label: Environment info 42 | description: | 43 | Please share a https://pastebin.com/ link of your system details by going to site Admin -> Tools -> Site Health -> Info and Copy to Clipboard 44 | placeholder: pastebin.com/ ... 45 | validations: 46 | required: false 47 | 48 | - type: dropdown 49 | id: regression 50 | attributes: 51 | label: Is the issue you are reporting a regression 52 | description: | 53 | Choose "Yes" if the bug appeared after updating the product, meaning it worked before but not now. Choose "No" if the bug isn't caused by an update. Marking a bug as regression helps us fix issues from new changes faster. 54 | multiple: false 55 | options: 56 | - 'No' 57 | - 'Yes, this is a regression.' 58 | validations: 59 | required: true 60 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/Feature_request.yml: -------------------------------------------------------------------------------- 1 | name: Feature request 2 | description: Suggest a feature that we can implement. 3 | labels: new feature 4 | body: 5 | - type: textarea 6 | attributes: 7 | label: What problem does this address? 8 | description: | 9 | Can you give us a little more insight into this feature request? We'd love to know if it's related to any problems or pain points you've been facing. 10 | If so, can you please let us know what the issue is in a clear and simple way? 11 | Tip: If this is related to a customer request, please add the Help Scout thread URL. 12 | placeholder: | 13 | For example, something like "I find it tough when..." or "I get frustrated because..." would be great. 14 | validations: 15 | required: true 16 | - type: textarea 17 | attributes: 18 | label: What is your proposed solution? 19 | description: Can you please specify the desired feature or improvement and how it resolves the problem mentioned? 20 | validations: 21 | required: false 22 | - type: dropdown 23 | id: doc-needed 24 | attributes: 25 | label: Will this feature require documentation? (Optional) 26 | description: | 27 | Does this feature require the creation or update of documentation? If you're unsure, feel free to skip this. 28 | multiple: false 29 | options: 30 | - 'I dont know.' 31 | - 'No.' 32 | - 'Yes, it requires documentation.' 33 | validations: 34 | required: false -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ### Summary 2 | 3 | 4 | ### Will affect visual aspect of the product 5 | 6 | YES/NO 7 | 8 | ### Screenshots 9 | 10 | ### Test instructions 11 | 12 | 13 | - 14 | - 15 | 16 | ## Check before Pull Request is ready: 17 | 18 | * [ ] I have [written a test](CONTRIBUTING.md#writing-an-acceptance-test) and included it in this PR 19 | * [ ] I have [run all tests](CONTRIBUTING.md#run-tests) and they pass 20 | * [ ] The code passes when [running the PHP CodeSniffer](CONTRIBUTING.md#run-php-codesniffer) 21 | * [ ] Code meets [WordPress Coding Standards](CONTRIBUTING.md#coding-standards) for PHP, HTML, CSS and JS 22 | * [ ] [Security and Sanitization](CONTRIBUTING.md#security-and-sanitization) requirements have been followed 23 | * [ ] I have assigned a reviewer or two to review this PR (if you're not sure who to assign, we can do this step for you) 24 | 25 | 26 | Closes #. 27 | 28 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | 2 | version: 2 3 | updates: 4 | 5 | # Maintain dependencies for Composer 6 | - package-ecosystem: "composer" 7 | directory: "/" 8 | schedule: 9 | interval: "weekly" -------------------------------------------------------------------------------- /.github/labeler.yml: -------------------------------------------------------------------------------- 1 | regression: 2 | - '(Yes, this is a regression)' 3 | 4 | customer report: 5 | - '(helpscout|wordpress.org/support)' 6 | 7 | doc-needed: 8 | - '(Yes, it requires documentation.)' -------------------------------------------------------------------------------- /.github/workflows/build-dev-artifact.yml: -------------------------------------------------------------------------------- 1 | name: Build and test 2 | 3 | on: 4 | pull_request: 5 | types: [opened, synchronize, ready_for_review] 6 | branches-ignore: 7 | - 'update_dependencies' 8 | concurrency: 9 | group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.head_ref || github.ref }} 10 | cancel-in-progress: true 11 | jobs: 12 | dev-zip: 13 | name: Build ZIP and upload to s3 14 | if: github.event.pull_request.draft == false && github.event.pull_request.head.repo.full_name == github.event.pull_request.base.repo.full_name 15 | runs-on: ubuntu-latest 16 | strategy: 17 | matrix: 18 | node-version: [14.x] 19 | outputs: 20 | branch-name: ${{ steps.retrieve-branch-name.outputs.branch_name }} 21 | git-sha-8: ${{ steps.retrieve-git-sha-8.outputs.sha8 }} 22 | steps: 23 | - name: Check out source files 24 | uses: actions/checkout@v2 25 | - name: Build files using ${{ matrix.node-version }} 26 | uses: actions/setup-node@v1 27 | with: 28 | node-version: ${{ matrix.node-version }} 29 | - name: Get yarn cache directory path 30 | id: yarn-cache-dir-path 31 | run: echo "::set-output name=dir::$(yarn cache dir)" 32 | - uses: actions/cache@v4 33 | id: yarn-cache 34 | with: 35 | path: ${{ steps.yarn-cache-dir-path.outputs.dir }} 36 | key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} 37 | restore-keys: | 38 | ${{ runner.os }}-yarn- 39 | - name: Get Composer Cache Directory 40 | id: composer-cache 41 | run: | 42 | echo "::set-output name=dir::$(composer config cache-files-dir)" 43 | - name: Configure Composer cache 44 | uses: actions/cache@v4 45 | with: 46 | path: ${{ steps.composer-cache.outputs.dir }} 47 | key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} 48 | restore-keys: | 49 | ${{ runner.os }}-composer- 50 | - name: Install composer deps 51 | run: composer install --no-dev --prefer-dist --no-progress --no-suggest 52 | - name: Install yarn deps 53 | run: yarn install --frozen-lockfile 54 | - name: Build files 55 | run: yarn run build 56 | - name: Create zip 57 | run: yarn run dist 58 | - name: Retrieve branch name 59 | id: retrieve-branch-name 60 | run: echo "::set-output name=branch_name::$(REF=${GITHUB_HEAD_REF:-$GITHUB_REF} && echo ${REF#refs/heads/} | sed 's/\//-/g')" 61 | - name: Retrieve git SHA-8 string 62 | id: retrieve-git-sha-8 63 | run: echo "::set-output name=sha8::$(echo ${GITHUB_SHA} | cut -c1-8)" 64 | - name: Upload Latest Version to S3 65 | uses: jakejarvis/s3-sync-action@master 66 | with: 67 | args: --acl public-read --follow-symlinks --delete 68 | env: 69 | AWS_S3_BUCKET: ${{ secrets.AWS_DEV_BUCKET }} 70 | AWS_ACCESS_KEY_ID: ${{ secrets.S3_AWS_KEY_ARTIFACTS }} 71 | AWS_SECRET_ACCESS_KEY: ${{ secrets.S3_AWS_SECRET_ARTIFACTS }} 72 | SOURCE_DIR: artifact/ 73 | DEST_DIR: ${{ github.event.pull_request.base.repo.name }}-${{ steps.retrieve-branch-name.outputs.branch_name }}-${{ steps.retrieve-git-sha-8.outputs.sha8 }}/ 74 | 75 | comment-on-pr: 76 | name: Comment on PR with links to plugin ZIPs 77 | if: ${{ github.head_ref && github.head_ref != null }} 78 | runs-on: ubuntu-latest 79 | needs: dev-zip 80 | env: 81 | CI: true 82 | GITHUB_TOKEN: ${{ secrets.BOT_TOKEN }} 83 | outputs: 84 | pr_number: ${{ steps.get-pr-number.outputs.num }} 85 | comment_body: ${{ steps.get-comment-body.outputs.body }} 86 | steps: 87 | - name: Get PR number 88 | id: get-pr-number 89 | run: echo "::set-output name=num::$(echo $GITHUB_REF | awk 'BEGIN { FS = "/" } ; { print $3 }')" 90 | 91 | - name: Check if a comment was already made 92 | id: find-comment 93 | uses: peter-evans/find-comment@v2 94 | with: 95 | issue-number: ${{ steps.get-pr-number.outputs.num }} 96 | comment-author: pirate-bot 97 | body-includes: Download [build] 98 | 99 | - name: Get comment body 100 | id: get-comment-body 101 | run: | 102 | body="Plugin build for ${{ github.event.pull_request.head.sha }} is ready :bellhop_bell:! 103 | - Download [build](https://verti-artifacts.s3.amazonaws.com/${{ github.event.pull_request.base.repo.name }}-${{ needs.dev-zip.outputs.branch-name }}-${{ needs.dev-zip.outputs.git-sha-8 }}/wp-maintenance-mode.zip)" 104 | body="${body//$'\n'/'%0A'}" 105 | echo "::set-output name=body::$body" 106 | - name: Create comment on PR with links to plugin builds 107 | if: ${{ steps.find-comment.outputs.comment-id == '' }} 108 | uses: peter-evans/create-or-update-comment@v2 109 | with: 110 | issue-number: ${{ steps.get-pr-number.outputs.num }} 111 | body: ${{ steps.get-comment-body.outputs.body }} 112 | token: ${{ secrets.BOT_TOKEN }} 113 | 114 | - name: Update comment on PR with links to plugin builds 115 | if: ${{ steps.find-comment.outputs.comment-id != '' }} 116 | uses: peter-evans/create-or-update-comment@v2 117 | with: 118 | comment-id: ${{ steps.find-comment.outputs.comment-id }} 119 | edit-mode: replace 120 | token: ${{ secrets.BOT_TOKEN }} 121 | body: ${{ steps.get-comment-body.outputs.body }} 122 | -------------------------------------------------------------------------------- /.github/workflows/create-tag.yml: -------------------------------------------------------------------------------- 1 | name: Release 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | jobs: 8 | create_tag: 9 | runs-on: ubuntu-latest 10 | if: "! contains(github.event.head_commit.message, '[skip ci]')" 11 | strategy: 12 | matrix: 13 | node-version: [14.x] 14 | steps: 15 | - uses: actions/checkout@master 16 | with: 17 | persist-credentials: false 18 | - name: Build files using ${{ matrix.node-version }} 19 | uses: actions/setup-node@v1 20 | with: 21 | node-version: ${{ matrix.node-version }} 22 | - name: Release new version 23 | id: release 24 | run: | 25 | yarn install --frozen-lockfile 26 | yarn run release 27 | env: 28 | CI: true 29 | GITHUB_TOKEN: ${{ secrets.BOT_TOKEN }} 30 | GIT_AUTHOR_NAME: themeisle[bot] 31 | GIT_AUTHOR_EMAIL: ${{ secrets.BOT_EMAIL }} 32 | GIT_COMMITTER_NAME: themeisle[bot] 33 | GIT_COMMITTER_EMAIL: ${{ secrets.BOT_EMAIL }} 34 | SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_ANNOUNCEMENTS }} 35 | SEMANTIC_RELEASE_PACKAGE: WP Maintenance Mode 36 | empty-job: 37 | # if no jobs run, github action considers it a test failure -- which seems like a bug 38 | # this makes it so the top-level if statement for the job does not give status failure. 39 | runs-on: ubuntu-latest 40 | if: success() 41 | steps: 42 | - name: Meep 43 | run: | 44 | echo "Nothing to do" 45 | -------------------------------------------------------------------------------- /.github/workflows/deploy.yml: -------------------------------------------------------------------------------- 1 | name: Deploy 2 | 3 | on: 4 | push: 5 | tags: 6 | - "*" 7 | jobs: 8 | tag: 9 | name: New version 10 | runs-on: ubuntu-latest 11 | strategy: 12 | matrix: 13 | node-version: [14.x] 14 | steps: 15 | - uses: actions/checkout@master 16 | - name: Build files using ${{ matrix.node-version }} 17 | uses: actions/setup-node@v1 18 | with: 19 | node-version: ${{ matrix.node-version }} 20 | - name: Build 21 | run: | 22 | yarn install --frozen-lockfile 23 | yarn run build 24 | composer install --no-dev --prefer-dist --no-progress --no-suggest 25 | - name: WordPress Plugin Deploy 26 | uses: 10up/action-wordpress-plugin-deploy@master 27 | env: 28 | SVN_PASSWORD: ${{ secrets.SVN_THEMEISLE_PASSWORD }} 29 | SVN_USERNAME: ${{ secrets.SVN_THEMEISLE_USERNAME }} 30 | -------------------------------------------------------------------------------- /.github/workflows/issue-labeler.yml: -------------------------------------------------------------------------------- 1 | name: "Issue Labeler" 2 | on: 3 | issues: 4 | types: [opened] 5 | 6 | jobs: 7 | triage: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - uses: github/issue-labeler@master 11 | with: 12 | repo-token: "${{ secrets.BOT_TOKEN }}" 13 | enable-versioned-regex: 0 14 | configuration-path: .github/labeler.yml -------------------------------------------------------------------------------- /.github/workflows/new-issues.yml: -------------------------------------------------------------------------------- 1 | name: Add to project 2 | 3 | on: 4 | issues: 5 | types: [opened,transferred] 6 | 7 | jobs: 8 | add-to-project: 9 | name: Add issue to project 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/add-to-project@main 13 | id: add_project 14 | with: 15 | project-url: ${{ secrets.PROJECT_PLANNING }} 16 | github-token: ${{ secrets.BOT_TOKEN_PROJECT }} 17 | - name: Set Team 18 | env: 19 | GITHUB_TOKEN: ${{ secrets.BOT_TOKEN_PROJECT }} 20 | run: | 21 | gh api graphql -f query=' 22 | mutation( 23 | $project: ID! 24 | $item: ID! 25 | $status_field: ID! 26 | $status_value: String! 27 | ) { 28 | updateProjectV2ItemFieldValue( 29 | input: { 30 | projectId: $project 31 | itemId: $item 32 | fieldId: $status_field 33 | value: { 34 | singleSelectOptionId: $status_value 35 | } 36 | } 37 | ) { 38 | projectV2Item { 39 | id 40 | } 41 | } 42 | }' -f project=${{ secrets.PROJECT_PLANNING_ID }} -f item=${{ steps.add_project.outputs.itemId }} -f status_field=${{ secrets.PLANNING_TEAM_FIELD_ID }} -f status_value=ed46988b --silent -------------------------------------------------------------------------------- /.github/workflows/pr-checklist.yml: -------------------------------------------------------------------------------- 1 | name: Add labels to pull request based on checklist 2 | 3 | on: 4 | pull_request: 5 | types: [ opened, edited, synchronize, labeled, unlabeled ] 6 | branches-ignore: 7 | - 'master' 8 | - 'update_dependencies' 9 | 10 | permissions: write-all 11 | 12 | jobs: 13 | add-labels: 14 | runs-on: ubuntu-latest 15 | name: Label PR based on checklist 16 | if: github.event.pull_request.draft == false && github.event.pull_request.head.repo.full_name == github.event.pull_request.base.repo.full_name && github.actor != 'dependabot[bot]' 17 | steps: 18 | - name: Check if checklist items are completed 19 | uses: Codeinwp/gha-pr-check-helper@master 20 | with: 21 | token: ${{ secrets.BOT_TOKEN }} 22 | requireChecklist: true 23 | onlyCheckBody: true 24 | completedLabel: "pr-checklist-complete" 25 | incompleteLabel: "pr-checklist-incomplete" 26 | skipLabel: "pr-checklist-skip" 27 | -------------------------------------------------------------------------------- /.github/workflows/sync-branches.yml: -------------------------------------------------------------------------------- 1 | name: Sync branches 2 | on: 3 | push: 4 | branches: 5 | - 'master' 6 | jobs: 7 | sync-branch: 8 | runs-on: ubuntu-latest 9 | if: ${{ github.repository_owner == 'Codeinwp' }} # Disable on forks 10 | steps: 11 | - uses: actions/checkout@master 12 | - name: Retrieve branch name 13 | id: retrieve-branch-name 14 | run: echo "::set-output name=branch_name::$(REF=${GITHUB_HEAD_REF:-$GITHUB_REF} && echo ${REF#refs/heads/} | sed 's/\//-/g')" 15 | - name: Merge master -> development 16 | if: ${{ steps.retrieve-branch-name.outputs.branch_name == 'master' }} 17 | uses: Codeinwp/merge-branch@master 18 | with: 19 | type: now 20 | from_branch: master 21 | target_branch: development 22 | github_token: ${{ secrets.BOT_TOKEN }} -------------------------------------------------------------------------------- /.github/workflows/sync-wporg-assets.yml: -------------------------------------------------------------------------------- 1 | name: Sync assets with wordpress.org 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | paths: 8 | - 'readme.txt' 9 | - '.wordpress-org/**' 10 | jobs: 11 | run: 12 | runs-on: ubuntu-latest 13 | if: "! contains(github.event.head_commit.message, 'chore(release)') && ! contains(github.event.head_commit.message, 'release:')" 14 | name: Push assets to wporg 15 | steps: 16 | - uses: actions/checkout@master 17 | - name: WordPress.org plugin asset/readme update 18 | uses: selul/action-wordpress-plugin-asset-update@develop 19 | env: 20 | SVN_PASSWORD: ${{ secrets.SVN_THEMEISLE_PASSWORD }} 21 | SVN_USERNAME: ${{ secrets.SVN_THEMEISLE_USERNAME }} 22 | -------------------------------------------------------------------------------- /.github/workflows/test-php.yml: -------------------------------------------------------------------------------- 1 | name: PHP Tests 2 | 3 | on: 4 | push: 5 | branches-ignore: 6 | - 'master' 7 | concurrency: 8 | group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.head_ref || github.ref }} 9 | cancel-in-progress: true 10 | jobs: 11 | phplint: 12 | name: PHP Lint 13 | runs-on: ubuntu-latest 14 | steps: 15 | - name: Setup PHP version 16 | uses: shivammathur/setup-php@v2 17 | with: 18 | php-version: '7.2' 19 | extensions: simplexml 20 | tools: composer:v2.1 21 | - name: Checkout source code 22 | uses: actions/checkout@v2 23 | - name: Get Composer Cache Directory 24 | id: composer-cache 25 | run: | 26 | echo "::set-output name=dir::$(composer config cache-files-dir)" 27 | - name: Setup Composer cache 28 | uses: actions/cache@v4 29 | with: 30 | path: ${{ steps.composer-cache.outputs.dir }} 31 | key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} 32 | restore-keys: | 33 | ${{ runner.os }}-composer- 34 | - name: Install composer 35 | run: composer install --prefer-dist --no-progress --no-suggest 36 | - name: Run PHPCS 37 | run: composer run lint 38 | 39 | phpunit: 40 | name: PHPUnit 41 | runs-on: ubuntu-latest 42 | services: 43 | mysql: 44 | image: mysql:5.7 45 | env: 46 | MYSQL_ROOT_PASSWORD: root 47 | ports: 48 | - 3306/tcp 49 | options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 50 | steps: 51 | - name: Setup PHP version 52 | uses: shivammathur/setup-php@v2 53 | with: 54 | php-version: '7.2' 55 | extensions: simplexml, mysql 56 | tools: phpunit-polyfills 57 | - name: Checkout source code 58 | uses: actions/checkout@v2 59 | - name: Install Subversion 60 | run: sudo apt-get update && sudo apt-get install -y subversion 61 | - name: Install WordPress Test Suite 62 | run: | 63 | bash bin/install-wp-tests.sh wordpress_test root root 127.0.0.1:${{ job.services.mysql.ports['3306'] }} 64 | - name: Get Composer Cache Directory 65 | id: composer-cache 66 | run: | 67 | echo "::set-output name=dir::$(composer config cache-files-dir)" 68 | - name: Setup Composer cache 69 | uses: actions/cache@v4 70 | with: 71 | path: ${{ steps.composer-cache.outputs.dir }} 72 | key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} 73 | restore-keys: | 74 | ${{ runner.os }}-composer- 75 | - name: Install composer 76 | run: composer install --prefer-dist --no-progress --no-suggest --no-dev 77 | - name: Run phpunit 78 | run: composer run-script phpunit 79 | 80 | -------------------------------------------------------------------------------- /.releaserc.yml: -------------------------------------------------------------------------------- 1 | --- 2 | branch: master 3 | plugins: 4 | - - "@semantic-release/commit-analyzer" 5 | - preset: simple-preset 6 | releaseRules: conventional-changelog-simple-preset/release-rules 7 | - - "@semantic-release/changelog" 8 | - changelogFile: CHANGELOG.md 9 | - - "@semantic-release/release-notes-generator" 10 | - preset: simple-preset 11 | - - "@semantic-release/exec" 12 | - prepareCmd: "replace-in-file \"== Changelog ==\" \"== Changelog ==\n\n${nextRelease.notes}\" readme.txt" 13 | - - "@semantic-release/exec" 14 | - prepareCmd: grunt version::${nextRelease.version} && grunt wp_readme_to_markdown 15 | - - "semantic-release-slack-bot" 16 | - notifyOnSuccess: false 17 | notifyOnFail: false 18 | markdownReleaseNotes: true 19 | branchesConfig: 20 | - pattern: master 21 | notifyOnSuccess: true 22 | notifyOnFail: false 23 | - - "@semantic-release/git" 24 | - assets: 25 | - CHANGELOG.md 26 | - composer.json 27 | - package-lock.json 28 | - readme.txt 29 | - README.md 30 | - wp-maintenance-mode.php 31 | - includes/classes/wp-maintenance-mode.php 32 | - package.json 33 | message: "chore(release): ${nextRelease.version} \n\n${nextRelease.notes}" 34 | - - "@semantic-release/github" 35 | -------------------------------------------------------------------------------- /.wordpress-org/banner-1544x500.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/.wordpress-org/banner-1544x500.png -------------------------------------------------------------------------------- /.wordpress-org/banner-772-250.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/.wordpress-org/banner-772-250.png -------------------------------------------------------------------------------- /.wordpress-org/icon-128x128.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/.wordpress-org/icon-128x128.gif -------------------------------------------------------------------------------- /.wordpress-org/icon-256x256.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/.wordpress-org/icon-256x256.gif -------------------------------------------------------------------------------- /.wordpress-org/screenshot-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/.wordpress-org/screenshot-1.png -------------------------------------------------------------------------------- /.wordpress-org/screenshot-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/.wordpress-org/screenshot-2.png -------------------------------------------------------------------------------- /.wordpress-org/screenshot-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/.wordpress-org/screenshot-3.png -------------------------------------------------------------------------------- /.wordpress-org/screenshot-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/.wordpress-org/screenshot-4.png -------------------------------------------------------------------------------- /.wordpress-org/screenshot-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/.wordpress-org/screenshot-5.png -------------------------------------------------------------------------------- /.wordpress-org/screenshot-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/.wordpress-org/screenshot-6.png -------------------------------------------------------------------------------- /.wordpress-org/screenshot-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/.wordpress-org/screenshot-7.png -------------------------------------------------------------------------------- /assets/css/index.php: -------------------------------------------------------------------------------- 1 | div { display:inline-block; margin:0; } 25 | .ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_minute:before, 26 | .ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_second:before { content:':'; display:inline-block; } 27 | .ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_millisec:before, 28 | .ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_microsec:before { content:'.'; display:inline-block; } 29 | .ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_unit_hide, 30 | .ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_unit_hide:before{ display: none; } -------------------------------------------------------------------------------- /assets/css/style-admin.css: -------------------------------------------------------------------------------- 1 | h2.wpmm-title { 2 | background: url('../images/icon.svg') no-repeat left center; 3 | background-size: 40px; 4 | line-height: 42px !important; 5 | margin-bottom: 30px !important; 6 | height: 45px; 7 | padding-left: 55px !important; 8 | } 9 | 10 | /* WRAP*/ 11 | .wpmm-wrapper { 12 | display: table; 13 | width: 100%; 14 | } 15 | 16 | .wpmm-wrapper #sidebar { 17 | padding: 0 0 0 20px; 18 | width: 280px; 19 | vertical-align: top; 20 | } 21 | 22 | .wpmm-wrapper #sidebar .sidebar_box { 23 | background: none repeat scroll 0 0 #fff; 24 | border: 1px solid #e5e5e5; 25 | box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04); 26 | min-width: 255px; 27 | line-height: 1; 28 | margin-bottom: 20px; 29 | padding: 0; 30 | } 31 | 32 | .wpmm-wrapper #sidebar .sidebar_box h3 { 33 | margin: 0; 34 | padding: 8px 12px; 35 | border-bottom: 1px solid #ececec; 36 | } 37 | 38 | .wpmm-wrapper #sidebar .sidebar_box .inside { 39 | margin: 6px 0 0; 40 | font-size: 13px; 41 | line-height: 1.4em; 42 | padding: 0 12px 12px; 43 | } 44 | 45 | .wpmm-wrapper .wrapper-cell { 46 | display: table-cell; 47 | } 48 | 49 | .wpmm-wrapper .hidden { 50 | display: none; 51 | } 52 | 53 | /* TABS */ 54 | .nav-tab-wrapper { 55 | border-bottom: 1px solid #ccc; 56 | padding-bottom: 0; 57 | padding-top: 0 !important; 58 | } 59 | 60 | .nav-tab-wrapper a { 61 | font-size: 15px; 62 | font-weight: 700; 63 | line-height: 24px; 64 | padding: 6px 10px; 65 | display: flex; 66 | align-content: center; 67 | align-items: center; 68 | } 69 | 70 | .nav-tab-wrapper a .nav-tab-icon { 71 | width: 16px; 72 | height: 16px; 73 | margin-right: 3px; 74 | } 75 | 76 | /* TABS CONTENT */ 77 | #tab-design { 78 | max-width: 1220px; 79 | } 80 | 81 | .tabs-content { 82 | margin-top: 20px; 83 | padding-left: 10px; 84 | } 85 | 86 | .tabs-content .wp-color-result { 87 | margin-bottom: -2px; 88 | } 89 | 90 | .tabs-content ul.bg_list { 91 | float: left; 92 | } 93 | 94 | .tabs-content ul.bg_list li { 95 | float: left; 96 | margin-right: 7px; 97 | opacity: 0.4; 98 | } 99 | 100 | .tabs-content ul.bg_list li.active { 101 | opacity: 1; 102 | } 103 | 104 | .tabs-content ul.bg_list li input { 105 | display: none; 106 | } 107 | 108 | .tabs-content .countdown_details input { 109 | width: 70px; 110 | } 111 | 112 | .tabs-content .countdown_details .margin_left { 113 | margin-left: 30px; 114 | } 115 | 116 | .tabs-content td.has-inline-color-picker { 117 | display: flex; 118 | align-items: center; 119 | } 120 | 121 | .tabs-content td.has-inline-color-picker .wp-picker-container .wp-color-result { 122 | margin: 0 6px; 123 | } 124 | 125 | .tabs-content .shortcodes-list-wrapper { 126 | margin-top: 4px; 127 | margin-bottom: 0; 128 | color: #646970; 129 | } 130 | 131 | .tabs-content ul.shortcodes-list { 132 | list-style-type: disc; 133 | padding-left: 15px; 134 | font-size: 12px; 135 | display: none; 136 | } 137 | 138 | .tabs-content ul.shortcodes-list span { 139 | background-color: #d3d3d3; 140 | padding: 2px 3px; 141 | margin-top: 4px; 142 | display: inline-block; 143 | } 144 | 145 | .tabs-content ul.shortcodes-list.show { 146 | display: block; 147 | } 148 | 149 | /* Design tab content */ 150 | .form-table th.wpmm-page-select-label { 151 | width: 80px; 152 | } 153 | 154 | p.wpmm-templates-gallery__description { 155 | font-size: 16px; 156 | line-height: 160%; 157 | margin-top: 0; 158 | } 159 | 160 | label.wpmm-templates-gallery__label { 161 | font-weight: 700; 162 | font-size: 24px; 163 | } 164 | 165 | .category-select-wrap { 166 | text-align: end; 167 | } 168 | 169 | .wpmm-templates { 170 | display: flex; 171 | flex-wrap: wrap; 172 | gap: 20px; 173 | margin-top: 25px; 174 | justify-content: center; 175 | } 176 | 177 | .wpmm-template-wrap { 178 | width: calc( 100% / 3 - 20px); 179 | max-width: 290px; 180 | height: 100%; 181 | } 182 | 183 | .wpmm-template-image-wrap { 184 | background-color: #fff; 185 | line-height: 0; 186 | height: calc( 100% - 20px ); 187 | } 188 | 189 | .wpmm-template-image-wrap img { 190 | width: 100%; 191 | height: 100%; 192 | object-fit: cover; 193 | } 194 | 195 | .wpmm-template-image-wrap.can-import:hover img, 196 | .wpmm-template-image-wrap.importing img { 197 | opacity: .1; 198 | } 199 | 200 | .wpmm-template-image-wrap { 201 | position: relative; 202 | } 203 | 204 | .wpmm-template-wrap .wpmm-template-image-wrap .button-import { 205 | display: none; 206 | position: absolute; 207 | top: 50%; 208 | left: 50%; 209 | transform: translate(-50%, -50%) !important; 210 | } 211 | 212 | .button-import .dashicons.dashicons-update { 213 | margin-right: 5px; 214 | animation: spin 2s linear infinite; 215 | } 216 | 217 | .wpmm-template-image-wrap.can-import:hover .button-import, 218 | .wpmm-template-image-wrap.importing .button-import { 219 | display: flex; 220 | align-items: center; 221 | } 222 | 223 | @media screen and (max-width: 782px) { 224 | .tabs-content td.has-inline-color-picker { 225 | display: flex; 226 | align-items: flex-start; 227 | flex-direction: column; 228 | } 229 | 230 | .tabs-content td.has-inline-color-picker .wp-picker-container { 231 | margin-top: 6px; 232 | } 233 | 234 | .tabs-content td.has-inline-color-picker .wp-picker-container .wp-color-result { 235 | margin-left: 0; 236 | } 237 | 238 | .tabs-content .countdown_details .margin_left { 239 | margin-left: 0; 240 | } 241 | } 242 | 243 | .tabs-content .wp-picker-holder { 244 | position:absolute; 245 | z-index:9999999; 246 | } 247 | 248 | .tabs-content #subscribers_wrap .buttons { 249 | margin-top: 8px; 250 | } 251 | 252 | .tabs-content .bot-hint { 253 | background: #9f9f9f; 254 | padding: 10px; 255 | float: right; 256 | border-radius: 5px; 257 | color: #fff; 258 | } 259 | 260 | .tabs-content .bot-button { 261 | display: inline-block; 262 | } 263 | 264 | /* SIDEBARS */ 265 | #sidebar .info_box ul { 266 | margin-top: 10px; 267 | margin-bottom: -5px; 268 | } 269 | 270 | #sidebar .resources_box ul, #sidebar .themes_box ul { 271 | margin-top: 10px; 272 | margin-bottom: -15px; 273 | } 274 | 275 | #sidebar .resources_box li, #sidebar .themes_box li { 276 | margin-bottom: 10px; 277 | } 278 | 279 | /* CHOSEN.JS MULTISELECT */ 280 | .chosen-select { 281 | width: 195px !important; 282 | } 283 | 284 | .chosen-container { 285 | width: 195px !important; 286 | } 287 | 288 | .chosen-container-active .chosen-choices { 289 | box-shadow: none !important; 290 | background-image: none !important; 291 | } 292 | 293 | .chosen-container-multi .chosen-choices { 294 | border: 1px solid #ddd !important; 295 | box-shadow: 0 1px 2px rgba(0, 0, 0, 0.07) inset !important; 296 | background-image: none !important; 297 | } 298 | 299 | .chosen-container .chosen-results li.highlighted { 300 | background-color: #0074a2 !important; 301 | background-image: none !important; 302 | } 303 | 304 | .button-big { 305 | min-height: 40px !important; 306 | padding: 12px 30px !important; 307 | font-size: 1.2em !important; 308 | line-height: 1.2 !important; 309 | font-weight: 700; 310 | } 311 | 312 | /* FOOTER RATING */ 313 | #footer-left .wpmm_rating:hover { 314 | text-decoration: none !important; 315 | color: #FFB900 !important; 316 | } 317 | 318 | /* MODAL */ 319 | .has-modal { 320 | overflow: hidden !important; 321 | } 322 | 323 | .modal-overlay { 324 | position: fixed; 325 | top: 0; 326 | right: 0; 327 | bottom: 0; 328 | left: 0; 329 | background-color: rgba(0, 0, 0, 0.35); 330 | z-index: 100000; 331 | display: flex; 332 | } 333 | 334 | .modal-frame { 335 | background-color: #fff; 336 | box-shadow: 0 0 10px rgba(0,0,0,.5); 337 | margin: auto; 338 | max-width: 480px; 339 | } 340 | 341 | .modal-content { 342 | padding: 45px 40px; 343 | } 344 | 345 | .modal-header { 346 | font-weight: 700; 347 | font-size: 20px; 348 | line-height: 23px; 349 | margin: 0; 350 | } 351 | 352 | .modal-text { 353 | margin: 30px 0 40px 0; 354 | } 355 | 356 | .buttons-wrap { 357 | gap: 10px; 358 | display: flex; 359 | } 360 | 361 | input[type="button"].button.button-primary.is-busy { 362 | background-image: linear-gradient(-45deg, #2271b1 33%, #135e96 33%, #135e96 70%, #2271b1 70%) !important; 363 | border-color: #2271b1; 364 | } 365 | 366 | input[type="button"].button.is-busy { 367 | background-size: 100px 100% !important; 368 | pointer-events: none; 369 | animation: button-busy-animation 2500ms infinite linear; 370 | } 371 | 372 | input[type="button"].button.button-secondary.is-busy { 373 | background-image: linear-gradient(-45deg, #fafafa 33%, #e0e0e0 33%, #e0e0e0 70%, #fafafa 70%) !important; 374 | } 375 | 376 | .wpmm_otter-notice { 377 | background: #fff; 378 | padding: 13px 18px; 379 | border: 1px solid rgba(0, 0, 0, 0.1); 380 | border-radius: 5px; 381 | display: flex; 382 | column-gap: 18px; 383 | font-size: 16px; 384 | color: #717A84; 385 | margin-top: 35px; 386 | } 387 | 388 | .wpmm_otter-notice__text { 389 | margin-top: auto; 390 | margin-bottom: auto; 391 | } 392 | 393 | .wpmm_otter-notice__logo { 394 | margin: auto 0; 395 | position: relative; 396 | height: 51px; 397 | width: 52px; 398 | } 399 | 400 | .wpmm-wrapper p.notice { 401 | padding: 10px 15px; 402 | } 403 | 404 | .wpmm_status_disable { 405 | opacity: .4; 406 | pointer-events: none; 407 | } 408 | 409 | .wpmm-external_link_icon { 410 | fill: currentColor; 411 | width: 1em; 412 | height: 1em; 413 | } 414 | 415 | .wpmm-notice { 416 | background-color: #fff; 417 | border-left: 4px solid #00a0d2; 418 | box-shadow: 0 1px 1px rgba(0,0,0,.04); 419 | padding: 12px; 420 | display: flex; 421 | align-items: center; 422 | } 423 | 424 | .wpmm-notice-content { 425 | flex-grow: 1; 426 | } 427 | 428 | .wpmm-notice h3 { 429 | margin: 0.5em 0; 430 | font-size: 14px; 431 | } 432 | 433 | .wpmm-notice p { 434 | margin: 0.5em 0; 435 | font-size: 13px; 436 | } 437 | 438 | @keyframes spin { 439 | from { 440 | transform: rotate(0deg); 441 | } 442 | to { 443 | transform: rotate(360deg); 444 | } 445 | } 446 | 447 | @keyframes button-busy-animation { 448 | 0% { 449 | background-position: 200px 0; 450 | } 451 | } 452 | -------------------------------------------------------------------------------- /assets/css/style-wizard.css: -------------------------------------------------------------------------------- 1 | .wpmm-wizard-fullscreen #adminmenumain, 2 | .wpmm-wizard-fullscreen #wpadminbar, 3 | .wpmm-wizard-fullscreen .notice, 4 | .wpmm-wizard-fullscreen .wrap .notice, 5 | .wpmm-wizard-fullscreen .wrap .error, 6 | .wpmm-wizard-fullscreen .wrap .updated, 7 | .wpmm-wizard-fullscreen #wpfooter, 8 | .wpmm-wizard-fullscreen .rop-revive-network-admin-notice { 9 | display: none !important; 10 | } 11 | 12 | .wp-toolbar .wpmm-wizard-fullscreen { 13 | margin-top: -32px; 14 | height: 100vh; 15 | } 16 | 17 | #wpwrap { 18 | height: 100%; 19 | } 20 | 21 | #wp-content { 22 | height: 100%; 23 | } 24 | 25 | #wpbody { 26 | height: 100%; 27 | } 28 | 29 | #wpbody-content { 30 | height: 100%; 31 | padding: 0; 32 | } 33 | 34 | .wrap { 35 | margin: 0; 36 | height: 100%; 37 | display: flex; 38 | flex-direction: column; 39 | } 40 | 41 | .wpmm-wrapper { 42 | flex-grow: 1; 43 | display: flex; 44 | } 45 | 46 | h2.wpmm-title { 47 | position: relative; 48 | 49 | margin: 0 !important; 50 | padding: 8px 105px !important; 51 | font-size: 18px !important; 52 | 53 | background-color: #fff; 54 | background-position: 50px; 55 | } 56 | 57 | h2.wpmm-title span { 58 | display: flex; 59 | position: absolute; 60 | right: 48px; 61 | top: 50%; 62 | transform: translateY(-50%); 63 | cursor: pointer; 64 | } 65 | 66 | h2.wpmm-title span img { 67 | width: 16px; 68 | } 69 | 70 | .wpmm-wizard-fullscreen #wpcontent { 71 | margin: 0; 72 | padding: 0; 73 | } 74 | 75 | #wpmm-wizard-wrapper { 76 | background-color: #f4f4f4; 77 | overflow: hidden; 78 | color: #1b1b1b; 79 | width: 100%; 80 | 81 | letter-spacing: .04em; 82 | line-height: 1; 83 | --checkbox-input-size: 20px; 84 | --checkmark-size: calc(var(--checkbox-input-size) + 4px); 85 | } 86 | 87 | #wpmm-wizard-wrapper .slider-wrap { 88 | width: 300%; 89 | display: flex; 90 | transition: 0.4s ease-in-out; 91 | height: 100%; 92 | } 93 | 94 | .move-to-subscribe { 95 | transform: translateX( calc( -100% / 3 ) ); 96 | } 97 | 98 | .move-to-finish { 99 | transform: translateX( calc( -100% / 3 * 2 ) ); 100 | } 101 | 102 | #wpmm-wizard-wrapper .step-wrap { 103 | width: calc( 100% / 3 ); 104 | display: flex; 105 | } 106 | 107 | .step.import-step { 108 | margin: min(10%, 65px) min(12%, 195px); 109 | width: 1090px; 110 | } 111 | 112 | .import-step .header { 113 | font-size: 28px; 114 | margin-top: 0; 115 | margin-bottom: 25px; 116 | } 117 | 118 | .import-step .templates-description { 119 | line-height: 30px; 120 | font-size: 18px; 121 | font-weight: 400; 122 | color: currentColor; 123 | } 124 | 125 | .templates-radio { 126 | max-width: calc( 340px * 3 + 35px * 2 ); 127 | } 128 | 129 | .templates-radio__item { 130 | display: flex; 131 | flex-direction: column; 132 | width: 100%; 133 | } 134 | 135 | .wpmm-templates-radio form { 136 | display: flex; 137 | margin-top: 60px; 138 | width: 100%; 139 | gap: 35px; 140 | } 141 | 142 | .wpmm-templates-radio [type=radio], .bullets-wrap [type=radio] { 143 | position: absolute; 144 | opacity: 0; 145 | } 146 | 147 | .wpmm-templates-radio [type=radio] + .wpmm-template { 148 | cursor: pointer; 149 | background-color: #fff; 150 | width: 240px; 151 | height: 250px; 152 | display: block; 153 | } 154 | 155 | .wpmm-templates-radio [type=radio]:checked + .wpmm-template { 156 | box-shadow: 0 0 0 5px #0065a6; 157 | border-radius: 5px; 158 | overflow: hidden; 159 | } 160 | 161 | .wpmm-templates-radio [type=radio] + .wpmm-template .checked-icon { 162 | display: none; 163 | } 164 | 165 | .wpmm-templates-radio [type=radio]:checked + .wpmm-template .checked-icon { 166 | display: block; 167 | position: absolute; 168 | top: 4%; 169 | right: 4%; 170 | width: 40px; 171 | height: 40px; 172 | } 173 | 174 | .wpmm-templates-radio .wpmm-template { 175 | position: relative; 176 | padding-bottom: 104%; 177 | width: 100%; 178 | height: 0; 179 | } 180 | 181 | .wpmm-templates-radio .wpmm-template img { 182 | width: 100%; 183 | height: 100%; 184 | object-fit: cover; 185 | 186 | position: absolute; 187 | } 188 | 189 | .wpmm-templates-radio .wpmm-template p { 190 | position: absolute; 191 | bottom: 15px; 192 | transform: translateX(-50%); 193 | left: 50%; 194 | white-space: nowrap; 195 | } 196 | 197 | .import-button { 198 | margin-top: 45px; 199 | } 200 | 201 | #wizard-buttons { 202 | display: flex; 203 | flex-wrap: wrap; 204 | gap: 15px; 205 | } 206 | 207 | #wizard-buttons .button-import { 208 | max-width: 200px; 209 | width: 100%; 210 | } 211 | 212 | #wizard-buttons .button-skip { 213 | color: #555D66; 214 | border-color: #555D66; 215 | white-space: break-spaces; 216 | } 217 | 218 | .dashicons-update { 219 | position: absolute; 220 | top: 50%; 221 | left: 50%; 222 | animation: abs-spin 2s linear infinite; 223 | } 224 | 225 | .wpmm-templates-radio .wpmm-template.loading img { 226 | opacity: .2; 227 | } 228 | 229 | .import-text { 230 | color: #717A84; 231 | } 232 | 233 | .wpmm-templates-radio [type=radio] + .wpmm-template { 234 | width: 100%; 235 | height: auto; 236 | position: relative; 237 | } 238 | 239 | .wpmm-templates-radio .tag { 240 | font-size: 15px; 241 | margin: 0 0 12px 0; 242 | color: #7a7979; 243 | white-space: nowrap; 244 | } 245 | 246 | .finish-step, .subscribe-step { 247 | display: flex; 248 | flex-direction: column; 249 | align-items: center; 250 | text-align: center; 251 | margin-top: 150px; 252 | margin-left: auto; 253 | margin-right: auto; 254 | } 255 | 256 | .finish-step h4 { 257 | font-size: 24px; 258 | max-width: 350px; 259 | line-height: 28px; 260 | } 261 | 262 | .finish-step .buttons-wrap { 263 | margin-top: 30px; 264 | display: flex; 265 | column-gap: 15px; 266 | } 267 | 268 | #view-page-button{ 269 | color: #555D66; 270 | border-color: #555D66; 271 | } 272 | 273 | .finish-step p { 274 | font-size: 18px; 275 | max-width: 440px; 276 | line-height: 31px; 277 | } 278 | 279 | .subscribe-step { 280 | max-width: 365px; 281 | } 282 | 283 | .subscribe-step .skip-link { 284 | margin-top: 15px; 285 | color: #717A84 !important; 286 | font-style: italic; 287 | padding: 0 10px; 288 | } 289 | 290 | .subscribe-step h4 { 291 | font-size: 24px; 292 | } 293 | 294 | .subscribe-step p { 295 | color: #272626; 296 | font-size: 18px; 297 | } 298 | 299 | #email-input-wrap { 300 | position: relative; 301 | display: flex; 302 | flex-direction: column; 303 | row-gap: 9px; 304 | width: 100%; 305 | } 306 | 307 | #email-input-wrap input[type=text] { 308 | color: #757575; 309 | height: 43px; 310 | } 311 | 312 | input.invalid { 313 | border-color: red !important; 314 | border-width: 2px !important; 315 | } 316 | 317 | input.invalid:focus { 318 | box-shadow: 0 0 1px red; 319 | } 320 | 321 | #email-input-wrap .subscribe-message { 322 | font-size: inherit; 323 | position: absolute; 324 | right: -10px; 325 | top: 0; 326 | transform: translate(100%, -15%); 327 | color: #717A84; 328 | } 329 | 330 | .optimole-upsell-container { 331 | display: flex; 332 | gap: 8px; 333 | } 334 | 335 | .optimole-upsell { 336 | margin-top: 72px; 337 | } 338 | 339 | .optimole-upsell label { 340 | font-size: 20px; 341 | font-weight: 700; 342 | line-height: 23px; 343 | } 344 | 345 | .optimole-upsell p.description { 346 | margin-left: 30px; 347 | margin-top: 12px; 348 | font-size: 15px; 349 | max-width: 980px; 350 | } 351 | 352 | #import-step-error { 353 | color: #d63638; 354 | } 355 | 356 | @keyframes abs-spin { 357 | from { 358 | transform: translate(-50%, -50%) rotate(0deg); 359 | } 360 | to { 361 | transform: translate(-50%, -50%) rotate(360deg); 362 | } 363 | } 364 | 365 | @media screen and (max-width: 660px) { 366 | #wpbody { 367 | padding-top: 0; 368 | } 369 | 370 | .wpmm-templates-radio form { 371 | flex-wrap: wrap; 372 | } 373 | } 374 | 375 | @media screen and (max-width: 782px) { 376 | html.wp-toolbar { 377 | padding-top: 32px; 378 | } 379 | } 380 | 381 | -------------------------------------------------------------------------------- /assets/css/style.bot.css: -------------------------------------------------------------------------------- 1 | /** 2 | * BOT 3 | * 4 | */ 5 | .bot .wrap { margin-top: 60px; } 6 | .bot .wrap h1 { margin-bottom: 50px; } 7 | .wrap.under-bot .countdown { margin-bottom: 50px; } 8 | .wrap.under-bot .social { margin-bottom: 50px; } 9 | 10 | .bot-container *, 11 | .bot-container *::before, 12 | .bot-container *::after { 13 | box-sizing: border-box; 14 | } 15 | .bot-container p { 16 | margin-top: 0; 17 | margin-bottom: 16px; 18 | } 19 | 20 | .bot-container a { 21 | text-decoration: none; 22 | cursor: pointer; 23 | } 24 | 25 | .bot-container ul { 26 | list-style-type: none; 27 | padding-left: 0; 28 | } 29 | 30 | .bot-container { 31 | position: absolute; 32 | bottom: 30px; 33 | right: 30px; 34 | } 35 | 36 | .avatar-notice { 37 | position: absolute; 38 | top: 0; 39 | right: 0; 40 | border: 8px solid #df1c44; 41 | border-radius: 100%; 42 | } 43 | 44 | .background .bot-chat-wrapper { 45 | border-radius: 10px; 46 | background-color: rgb(255, 255, 255); 47 | box-shadow: 0 4px 40px rgba(0, 0, 0, 0.2); 48 | } 49 | 50 | .chat-message-wrapper { 51 | position: relative; 52 | display: flex; 53 | align-items: center; 54 | margin-bottom: 16px; 55 | width: 100%; 56 | } 57 | .chat-message-wrapper .chat-message { 58 | max-width: 100%; 59 | width: 100%; 60 | color: #3a3e45; 61 | line-height: 24px; 62 | } 63 | 64 | .absolute-wrapper { 65 | position: absolute; 66 | left: 0; 67 | bottom: 20%; 68 | } 69 | 70 | .message-details { 71 | position: relative; 72 | } 73 | 74 | .chat-message-wrapper .message-date { 75 | font-size: 12px; 76 | color: #c3c3c3; 77 | } 78 | 79 | .chat-message-wrapper p, 80 | .typing-wrapper p { 81 | margin-bottom: 0; 82 | } 83 | 84 | /*-------------------- 85 | CHAT BOT STYLING 86 | ---------------------*/ 87 | 88 | /* 89 | // CHAT BOT & TYPING WRAPPER 90 | */ 91 | .bot-chat-wrapper { 92 | height: 350px; 93 | padding: 10px 40px; 94 | overflow-y: scroll; 95 | overflow-x: hidden; 96 | 97 | width: 400px; 98 | font-size: 16px; 99 | position: fixed; 100 | right: 30px; 101 | bottom: 130px; 102 | background-color: #fff; 103 | 104 | box-shadow: rgba(0, 0, 0, 0.1) 0 12px 24px 0; 105 | border-radius: 8px; 106 | } 107 | 108 | .typing-wrapper { 109 | width: 100%; 110 | display: flex; 111 | align-items: center; 112 | margin-bottom: 16px; 113 | position: relative; 114 | } 115 | 116 | .bot-avatar { 117 | width: 60px; 118 | height: 60px; 119 | 120 | position: fixed; 121 | bottom: 57px; 122 | right: 30px; 123 | 124 | background-size: cover; 125 | background-repeat: no-repeat; 126 | background-position: center; 127 | 128 | border-radius: 50%; 129 | box-shadow: rgba(0, 0, 0, 0.1) 0 12px 24px 0; 130 | background-color: #fff; 131 | 132 | z-index: 1; 133 | cursor: pointer; 134 | } 135 | 136 | .typing-wrapper .bot-name { 137 | margin-right: 22px; 138 | font-weight: bold; 139 | } 140 | 141 | /* 142 | // CHAT MESSAGE LINE 143 | */ 144 | .chat-message { 145 | background-color: #f4f4f4; 146 | border-radius: 5px; 147 | padding: 15px; 148 | max-width: 75%; 149 | clear: both; 150 | position: relative; 151 | float: left; 152 | animation: fade-in-left 0.2s linear both; 153 | } 154 | 155 | .chat-message:before { 156 | content: ' '; 157 | position: absolute; 158 | width: 0; 159 | height: 0; 160 | left: -20px; 161 | bottom: 20%; 162 | border: 10px solid; 163 | border-color: transparent #f4f4f4 transparent transparent; 164 | } 165 | 166 | /* 167 | // HELPERS 168 | */ 169 | .cf:before, 170 | .cf:after { 171 | content: " "; /* 1 */ 172 | display: table; /* 2 */ 173 | } 174 | 175 | .cf:after { 176 | clear: both; 177 | } 178 | 179 | /* 180 | // USER 181 | */ 182 | .chat-message.user { 183 | display: flex; 184 | align-items: center; 185 | animation: fade-in-right 0.2s linear 0.4s both; 186 | background: #a0a0a0; 187 | color: #fff; 188 | float: right; 189 | padding: 15px; 190 | font-size: 14px; 191 | } 192 | 193 | .chat-message a { 194 | color: #6ecff9; 195 | text-decoration: underline; 196 | transition: all 0.3s ease; 197 | } 198 | .chat-message a:hover { 199 | color: #38a9d9; 200 | } 201 | 202 | /* 203 | // USER CHOICES BUTTONS 204 | */ 205 | .choices { 206 | display: flex !important; 207 | justify-content: flex-end; 208 | } 209 | .choices .chat-message { 210 | background: none; 211 | color: #6ecff9; 212 | border: 2px solid #6ecff9; 213 | cursor: pointer; 214 | animation: fadeInGrownIn 0.5s ease; 215 | float: none; 216 | display: inline-block; 217 | transition: all 0.3s ease; 218 | } 219 | 220 | .choices .chat-message:first-child { 221 | margin-right: 10px; 222 | } 223 | 224 | .choices .chat-message:hover { 225 | background: #6ecff9; 226 | color: #fff; 227 | } 228 | 229 | /* 230 | // NAME/EMAIL INPUT 231 | */ 232 | 233 | .input .chat-message.user { 234 | background: transparent; 235 | border-bottom: 2px solid #6ecff9; 236 | border-radius: 0; 237 | padding: 10px 10px 10px 0; 238 | white-space: nowrap; 239 | max-width: unset; 240 | } 241 | 242 | .input { animation: fadeInGrownIn 0.5s ease; } 243 | 244 | .bot-container .input input { 245 | padding: 0 10px; 246 | border: none; 247 | color: #000; 248 | background: none; 249 | box-shadow: none; 250 | font-size: 14px; 251 | } 252 | 253 | .input input:focus { outline: none !important; box-shadow: none !important; } 254 | .input input::-webkit-input-placeholder { color: #c3c3c3; } 255 | .input input:-ms-input-placeholder { color: #c3c3c3; } 256 | .input input::-moz-placeholder { color: #c3c3c3; } 257 | .input input:-moz-placeholder { color: #c3c3c3; } 258 | 259 | .input a { 260 | color: #6ecff9; 261 | text-decoration: none; 262 | text-transform: uppercase; 263 | cursor: pointer; 264 | font-size: 14px; 265 | font-weight: 700; 266 | } 267 | 268 | .bot-error { 269 | background: #000; 270 | line-height: 50px; 271 | padding: 0 50px; 272 | color: #fff; 273 | position: fixed; 274 | bottom: 20px; 275 | right: 20px; 276 | border-radius: 5px; 277 | z-index: 5; 278 | } 279 | 280 | .bot-error p { 281 | margin: 0; 282 | } 283 | 284 | /* 285 | // TYPING INDICATOR 286 | */ 287 | 288 | .typing { 289 | border-radius: 5px; 290 | background-color: #fff; 291 | box-shadow: 0 7px 15px 0 rgba(0, 0, 0, 0.1); 292 | width: 120px; 293 | height: 40px; 294 | display: flex; 295 | justify-content: center; 296 | align-items: center; 297 | position: relative; 298 | animation: fadeInGrownIn 0.5s ease; 299 | } 300 | 301 | /* Typing Dots ----*/ 302 | .typing .dot { 303 | border-radius: 50%; 304 | width: 8px; 305 | height: 8px; 306 | display: block; 307 | margin-right: 12px; 308 | animation: wave 0.9s linear infinite; 309 | } 310 | 311 | .typing .dot:nth-child(1) { 312 | background-color: #4f3beb; 313 | } 314 | .typing .dot:nth-child(2) { 315 | background-color: #6292f3; 316 | animation-delay: -0.7s; 317 | } 318 | .typing .dot:nth-child(3) { 319 | background-color: #6ecff9; 320 | animation-delay: -0.5s; 321 | margin-right: 0; 322 | } 323 | 324 | 325 | /* 326 | // OVERRIDE STUFF 327 | */ 328 | .typing:before, 329 | .bot-chat-wrapper .chat-message.user:before { 330 | content: ""; 331 | display: none; 332 | } 333 | 334 | 335 | /* 336 | // ANIMATIONS 337 | */ 338 | 339 | /* Fade In Grow In Animation ---- */ 340 | @keyframes fadeInGrownIn { 341 | 0% { 342 | opacity: 0; 343 | transform: scale(0.9); 344 | } 345 | 100% { 346 | opacity: 1; 347 | transform: scale(1); 348 | } 349 | } 350 | 351 | /* Slide Left Animation ---- */ 352 | @keyframes fade-in-left { 353 | 0% { 354 | transform: translateX(-50px); 355 | opacity: 0; 356 | } 357 | 100% { 358 | transform: translateX(0); 359 | opacity: 1; 360 | } 361 | } 362 | /* Slide Right Animation ---- */ 363 | @keyframes fade-in-right { 364 | 0% { 365 | transform: translateX(50px); 366 | opacity: 0; 367 | } 368 | 100% { 369 | transform: translateX(0); 370 | opacity: 1; 371 | } 372 | } 373 | 374 | /* Wave Dots Animation ----- */ 375 | @keyframes wave { 376 | 0%, 60%, 100% { transform: initial; } 377 | 378 | 30% { transform: translateY(-10px); } 379 | } 380 | 381 | /* 382 | // RESPONSIVE 383 | */ 384 | 385 | @media screen and (max-width: 700px) { 386 | .bot-avatar { 387 | display: none !important; 388 | } 389 | 390 | .bot-chat-wrapper, 391 | .bg-image .bot-chat-wrapper { 392 | padding: 20px; 393 | } 394 | 395 | .bg-image .bot-chat-wrapper { 396 | margin-left: 10px; 397 | margin-right: 10px; 398 | } 399 | 400 | .chat-message { 401 | max-width: 100%; 402 | } 403 | 404 | .input input { 405 | font-size: 16px; 406 | } 407 | } 408 | -------------------------------------------------------------------------------- /assets/images/backgrounds/bg1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/assets/images/backgrounds/bg1.jpg -------------------------------------------------------------------------------- /assets/images/backgrounds/bg10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/assets/images/backgrounds/bg10.jpg -------------------------------------------------------------------------------- /assets/images/backgrounds/bg10_thumb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/assets/images/backgrounds/bg10_thumb.jpg -------------------------------------------------------------------------------- /assets/images/backgrounds/bg11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/assets/images/backgrounds/bg11.jpg -------------------------------------------------------------------------------- /assets/images/backgrounds/bg11_thumb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/assets/images/backgrounds/bg11_thumb.jpg -------------------------------------------------------------------------------- /assets/images/backgrounds/bg1_thumb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/assets/images/backgrounds/bg1_thumb.jpg -------------------------------------------------------------------------------- /assets/images/backgrounds/bg2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/assets/images/backgrounds/bg2.jpg -------------------------------------------------------------------------------- /assets/images/backgrounds/bg2_thumb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/assets/images/backgrounds/bg2_thumb.jpg -------------------------------------------------------------------------------- /assets/images/backgrounds/bg3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/assets/images/backgrounds/bg3.jpg -------------------------------------------------------------------------------- /assets/images/backgrounds/bg3_thumb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/assets/images/backgrounds/bg3_thumb.jpg -------------------------------------------------------------------------------- /assets/images/backgrounds/bg4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/assets/images/backgrounds/bg4.jpg -------------------------------------------------------------------------------- /assets/images/backgrounds/bg4_thumb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/assets/images/backgrounds/bg4_thumb.jpg -------------------------------------------------------------------------------- /assets/images/backgrounds/bg5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/assets/images/backgrounds/bg5.jpg -------------------------------------------------------------------------------- /assets/images/backgrounds/bg5_thumb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/assets/images/backgrounds/bg5_thumb.jpg -------------------------------------------------------------------------------- /assets/images/backgrounds/bg6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/assets/images/backgrounds/bg6.jpg -------------------------------------------------------------------------------- /assets/images/backgrounds/bg6_thumb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/assets/images/backgrounds/bg6_thumb.jpg -------------------------------------------------------------------------------- /assets/images/backgrounds/bg7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/assets/images/backgrounds/bg7.jpg -------------------------------------------------------------------------------- /assets/images/backgrounds/bg7_thumb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/assets/images/backgrounds/bg7_thumb.jpg -------------------------------------------------------------------------------- /assets/images/backgrounds/bg8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/assets/images/backgrounds/bg8.jpg -------------------------------------------------------------------------------- /assets/images/backgrounds/bg8_thumb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/assets/images/backgrounds/bg8_thumb.jpg -------------------------------------------------------------------------------- /assets/images/backgrounds/bg9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/assets/images/backgrounds/bg9.jpg -------------------------------------------------------------------------------- /assets/images/backgrounds/bg9_thumb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/assets/images/backgrounds/bg9_thumb.jpg -------------------------------------------------------------------------------- /assets/images/chatbot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/assets/images/chatbot.png -------------------------------------------------------------------------------- /assets/images/checked.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/images/chosen/chosen-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/assets/images/chosen/chosen-sprite.png -------------------------------------------------------------------------------- /assets/images/chosen/chosen-sprite@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/assets/images/chosen/chosen-sprite@2x.png -------------------------------------------------------------------------------- /assets/images/close.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/images/exit.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/images/finish-setup.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /assets/images/icn_sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/assets/images/icn_sprite.png -------------------------------------------------------------------------------- /assets/images/index.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /assets/index.php: -------------------------------------------------------------------------------- 1 | x

'; 27 | head.appendChild(div.childNodes[1]); 28 | } 29 | 30 | if ( options ) { 31 | $.extend( settings, options ); 32 | } 33 | 34 | return this.each(function(){ 35 | var selectors = [ 36 | 'iframe[src*="player.vimeo.com"]', 37 | 'iframe[src*="youtube.com"]', 38 | 'iframe[src*="youtube-nocookie.com"]', 39 | 'iframe[src*="kickstarter.com"][src*="video.html"]', 40 | 'object', 41 | 'embed' 42 | ]; 43 | 44 | if (settings.customSelector) { 45 | selectors.push(settings.customSelector); 46 | } 47 | 48 | var ignoreList = '.fitvidsignore'; 49 | 50 | if(settings.ignore) { 51 | ignoreList = ignoreList + ', ' + settings.ignore; 52 | } 53 | 54 | var $allVideos = $(this).find(selectors.join(',')); 55 | $allVideos = $allVideos.not('object object'); // SwfObj conflict patch 56 | $allVideos = $allVideos.not(ignoreList); // Disable FitVids on this video. 57 | 58 | $allVideos.each(function(){ 59 | var $this = $(this); 60 | if($this.parents(ignoreList).length > 0) { 61 | return; // Disable FitVids on this video. 62 | } 63 | if (this.tagName.toLowerCase() === 'embed' && $this.parent('object').length || $this.parent('.fluid-width-video-wrapper').length) { return; } 64 | if ((!$this.css('height') && !$this.css('width')) && (isNaN($this.attr('height')) || isNaN($this.attr('width')))) 65 | { 66 | $this.attr('height', 9); 67 | $this.attr('width', 16); 68 | } 69 | var height = ( this.tagName.toLowerCase() === 'object' || ($this.attr('height') && !isNaN(parseInt($this.attr('height'), 10))) ) ? parseInt($this.attr('height'), 10) : $this.height(), 70 | width = !isNaN(parseInt($this.attr('width'), 10)) ? parseInt($this.attr('width'), 10) : $this.width(), 71 | aspectRatio = height / width; 72 | if(!$this.attr('name')){ 73 | var videoName = 'fitvid' + $.fn.fitVids._count; 74 | $this.attr('name', videoName); 75 | $.fn.fitVids._count++; 76 | } 77 | $this.wrap('
').parent('.fluid-width-video-wrapper').css('padding-top', (aspectRatio * 100)+'%'); 78 | $this.removeAttr('height').removeAttr('width'); 79 | }); 80 | }); 81 | }; 82 | 83 | // Internal counter for unique video names. 84 | $.fn.fitVids._count = 0; 85 | 86 | // Works with either jQuery or Zepto 87 | })( window.jQuery || window.Zepto ); -------------------------------------------------------------------------------- /assets/js/jquery.plugin.js: -------------------------------------------------------------------------------- 1 | /* Simple JavaScript Inheritance 2 | * By John Resig http://ejohn.org/ 3 | * MIT Licensed. 4 | */ 5 | // Inspired by base2 and Prototype 6 | (function(){ 7 | var initializing = false; 8 | 9 | // The base JQClass implementation (does nothing) 10 | window.JQClass = function(){}; 11 | 12 | // Collection of derived classes 13 | JQClass.classes = {}; 14 | 15 | // Create a new JQClass that inherits from this class 16 | JQClass.extend = function extender(prop) { 17 | var base = this.prototype; 18 | 19 | // Instantiate a base class (but only create the instance, 20 | // don't run the init constructor) 21 | initializing = true; 22 | var prototype = new this(); 23 | initializing = false; 24 | 25 | // Copy the properties over onto the new prototype 26 | for (var name in prop) { 27 | // Check if we're overwriting an existing function 28 | prototype[name] = typeof prop[name] == 'function' && 29 | typeof base[name] == 'function' ? 30 | (function(name, fn){ 31 | return function() { 32 | var __super = this._super; 33 | 34 | // Add a new ._super() method that is the same method 35 | // but on the super-class 36 | this._super = function(args) { 37 | return base[name].apply(this, args || []); 38 | }; 39 | 40 | var ret = fn.apply(this, arguments); 41 | 42 | // The method only need to be bound temporarily, so we 43 | // remove it when we're done executing 44 | this._super = __super; 45 | 46 | return ret; 47 | }; 48 | })(name, prop[name]) : 49 | prop[name]; 50 | } 51 | 52 | // The dummy class constructor 53 | function JQClass() { 54 | // All construction is actually done in the init method 55 | if (!initializing && this._init) { 56 | this._init.apply(this, arguments); 57 | } 58 | } 59 | 60 | // Populate our constructed prototype object 61 | JQClass.prototype = prototype; 62 | 63 | // Enforce the constructor to be what we expect 64 | JQClass.prototype.constructor = JQClass; 65 | 66 | // And make this class extendable 67 | JQClass.extend = extender; 68 | 69 | return JQClass; 70 | }; 71 | })(); 72 | 73 | (function($) { // Ensure $, encapsulate 74 | 75 | /** Abstract base class for collection plugins v1.0.1. 76 | Written by Keith Wood (kbwood{at}iinet.com.au) December 2013. 77 | Licensed under the MIT (http://keith-wood.name/licence.html) license. 78 | @module $.JQPlugin 79 | @abstract */ 80 | JQClass.classes.JQPlugin = JQClass.extend({ 81 | 82 | /** Name to identify this plugin. 83 | @example name: 'tabs' */ 84 | name: 'plugin', 85 | 86 | /** Default options for instances of this plugin (default: {}). 87 | @example defaultOptions: { 88 | selectedClass: 'selected', 89 | triggers: 'click' 90 | } */ 91 | defaultOptions: {}, 92 | 93 | /** Options dependent on the locale. 94 | Indexed by language and (optional) country code, with '' denoting the default language (English/US). 95 | @example regionalOptions: { 96 | '': { 97 | greeting: 'Hi' 98 | } 99 | } */ 100 | regionalOptions: {}, 101 | 102 | /** Names of getter methods - those that can't be chained (default: []). 103 | @example _getters: ['activeTab'] */ 104 | _getters: [], 105 | 106 | /** Retrieve a marker class for affected elements. 107 | @private 108 | @return {string} The marker class. */ 109 | _getMarker: function() { 110 | return 'is-' + this.name; 111 | }, 112 | 113 | /** Initialise the plugin. 114 | Create the jQuery bridge - plugin name xyz 115 | produces $.xyz and $.fn.xyz. */ 116 | _init: function() { 117 | // Apply default localisations 118 | $.extend(this.defaultOptions, (this.regionalOptions && this.regionalOptions['']) || {}); 119 | // Camel-case the name 120 | var jqName = camelCase(this.name); 121 | // Expose jQuery singleton manager 122 | $[jqName] = this; 123 | // Expose jQuery collection plugin 124 | $.fn[jqName] = function(options) { 125 | var otherArgs = Array.prototype.slice.call(arguments, 1); 126 | if ($[jqName]._isNotChained(options, otherArgs)) { 127 | return $[jqName][options].apply($[jqName], [this[0]].concat(otherArgs)); 128 | } 129 | return this.each(function() { 130 | if (typeof options === 'string') { 131 | if (options[0] === '_' || !$[jqName][options]) { 132 | throw 'Unknown method: ' + options; 133 | } 134 | $[jqName][options].apply($[jqName], [this].concat(otherArgs)); 135 | } 136 | else { 137 | $[jqName]._attach(this, options); 138 | } 139 | }); 140 | }; 141 | }, 142 | 143 | /** Set default values for all subsequent instances. 144 | @param options {object} The new default options. 145 | @example $.plugin.setDefauls({name: value}) */ 146 | setDefaults: function(options) { 147 | $.extend(this.defaultOptions, options || {}); 148 | }, 149 | 150 | /** Determine whether a method is a getter and doesn't permit chaining. 151 | @private 152 | @param name {string} The method name. 153 | @param otherArgs {any[]} Any other arguments for the method. 154 | @return {boolean} True if this method is a getter, false otherwise. */ 155 | _isNotChained: function(name, otherArgs) { 156 | if (name === 'option' && (otherArgs.length === 0 || 157 | (otherArgs.length === 1 && typeof otherArgs[0] === 'string'))) { 158 | return true; 159 | } 160 | return $.inArray(name, this._getters) > -1; 161 | }, 162 | 163 | /** Initialise an element. Called internally only. 164 | Adds an instance object as data named for the plugin. 165 | @param elem {Element} The element to enhance. 166 | @param options {object} Overriding settings. */ 167 | _attach: function(elem, options) { 168 | elem = $(elem); 169 | if (elem.hasClass(this._getMarker())) { 170 | return; 171 | } 172 | elem.addClass(this._getMarker()); 173 | options = $.extend({}, this.defaultOptions, this._getMetadata(elem), options || {}); 174 | var inst = $.extend({name: this.name, elem: elem, options: options}, 175 | this._instSettings(elem, options)); 176 | elem.data(this.name, inst); // Save instance against element 177 | this._postAttach(elem, inst); 178 | this.option(elem, options); 179 | }, 180 | 181 | /** Retrieve additional instance settings. 182 | Override this in a sub-class to provide extra settings. 183 | @param elem {jQuery} The current jQuery element. 184 | @param options {object} The instance options. 185 | @return {object} Any extra instance values. 186 | @example _instSettings: function(elem, options) { 187 | return {nav: elem.find(options.navSelector)}; 188 | } */ 189 | _instSettings: function(elem, options) { 190 | return {}; 191 | }, 192 | 193 | /** Plugin specific post initialisation. 194 | Override this in a sub-class to perform extra activities. 195 | @param elem {jQuery} The current jQuery element. 196 | @param inst {object} The instance settings. 197 | @example _postAttach: function(elem, inst) { 198 | elem.on('click.' + this.name, function() { 199 | ... 200 | }); 201 | } */ 202 | _postAttach: function(elem, inst) { 203 | }, 204 | 205 | /** Retrieve metadata configuration from the element. 206 | Metadata is specified as an attribute: 207 | data-<plugin name>="<setting name>: '<value>', ...". 208 | Dates should be specified as strings in this format: 'new Date(y, m-1, d)'. 209 | @private 210 | @param elem {jQuery} The source element. 211 | @return {object} The inline configuration or {}. */ 212 | _getMetadata: function(elem) { 213 | try { 214 | var data = elem.data(this.name.toLowerCase()) || ''; 215 | data = data.replace(/'/g, '"'); 216 | data = data.replace(/([a-zA-Z0-9]+):/g, function(match, group, i) { 217 | var count = data.substring(0, i).match(/"/g); // Handle embedded ':' 218 | return (!count || count.length % 2 === 0 ? '"' + group + '":' : group + ':'); 219 | }); 220 | data = $.parseJSON('{' + data + '}'); 221 | for (var name in data) { // Convert dates 222 | var value = data[name]; 223 | if (typeof value === 'string' && value.match(/^new Date\((.*)\)$/)) { 224 | data[name] = eval(value); 225 | } 226 | } 227 | return data; 228 | } 229 | catch (e) { 230 | return {}; 231 | } 232 | }, 233 | 234 | /** Retrieve the instance data for element. 235 | @param elem {Element} The source element. 236 | @return {object} The instance data or {}. */ 237 | _getInst: function(elem) { 238 | return $(elem).data(this.name) || {}; 239 | }, 240 | 241 | /** Retrieve or reconfigure the settings for a plugin. 242 | @param elem {Element} The source element. 243 | @param name {object|string} The collection of new option values or the name of a single option. 244 | @param [value] {any} The value for a single named option. 245 | @return {any|object} If retrieving a single value or all options. 246 | @example $(selector).plugin('option', 'name', value) 247 | $(selector).plugin('option', {name: value, ...}) 248 | var value = $(selector).plugin('option', 'name') 249 | var options = $(selector).plugin('option') */ 250 | option: function(elem, name, value) { 251 | elem = $(elem); 252 | var inst = elem.data(this.name); 253 | if (!name || (typeof name === 'string' && value == null)) { 254 | var options = (inst || {}).options; 255 | return (options && name ? options[name] : options); 256 | } 257 | if (!elem.hasClass(this._getMarker())) { 258 | return; 259 | } 260 | var options = name || {}; 261 | if (typeof name === 'string') { 262 | options = {}; 263 | options[name] = value; 264 | } 265 | this._optionsChanged(elem, inst, options); 266 | $.extend(inst.options, options); 267 | }, 268 | 269 | /** Plugin specific options processing. 270 | Old value available in inst.options[name], new value in options[name]. 271 | Override this in a sub-class to perform extra activities. 272 | @param elem {jQuery} The current jQuery element. 273 | @param inst {object} The instance settings. 274 | @param options {object} The new options. 275 | @example _optionsChanged: function(elem, inst, options) { 276 | if (options.name != inst.options.name) { 277 | elem.removeClass(inst.options.name).addClass(options.name); 278 | } 279 | } */ 280 | _optionsChanged: function(elem, inst, options) { 281 | }, 282 | 283 | /** Remove all trace of the plugin. 284 | Override _preDestroy for plugin-specific processing. 285 | @param elem {Element} The source element. 286 | @example $(selector).plugin('destroy') */ 287 | destroy: function(elem) { 288 | elem = $(elem); 289 | if (!elem.hasClass(this._getMarker())) { 290 | return; 291 | } 292 | this._preDestroy(elem, this._getInst(elem)); 293 | elem.removeData(this.name).removeClass(this._getMarker()); 294 | }, 295 | 296 | /** Plugin specific pre destruction. 297 | Override this in a sub-class to perform extra activities and undo everything that was 298 | done in the _postAttach or _optionsChanged functions. 299 | @param elem {jQuery} The current jQuery element. 300 | @param inst {object} The instance settings. 301 | @example _preDestroy: function(elem, inst) { 302 | elem.off('.' + this.name); 303 | } */ 304 | _preDestroy: function(elem, inst) { 305 | } 306 | }); 307 | 308 | /** Convert names from hyphenated to camel-case. 309 | @private 310 | @param value {string} The original hyphenated name. 311 | @return {string} The camel-case version. */ 312 | function camelCase(name) { 313 | return name.replace(/-([a-z])/g, function(match, group) { 314 | return group.toUpperCase(); 315 | }); 316 | } 317 | 318 | /** Expose the plugin base. 319 | @namespace "$.JQPlugin" */ 320 | $.JQPlugin = { 321 | 322 | /** Create a new collection plugin. 323 | @memberof "$.JQPlugin" 324 | @param [superClass='JQPlugin'] {string} The name of the parent class to inherit from. 325 | @param overrides {object} The property/function overrides for the new class. 326 | @example $.JQPlugin.createPlugin({ 327 | name: 'tabs', 328 | defaultOptions: {selectedClass: 'selected'}, 329 | _initSettings: function(elem, options) { return {...}; }, 330 | _postAttach: function(elem, inst) { ... } 331 | }); */ 332 | createPlugin: function(superClass, overrides) { 333 | if (typeof superClass === 'object') { 334 | overrides = superClass; 335 | superClass = 'JQPlugin'; 336 | } 337 | superClass = camelCase(superClass); 338 | var className = camelCase(overrides.name); 339 | JQClass.classes[className] = JQClass.classes[superClass].extend(overrides); 340 | new JQClass.classes[className](); 341 | } 342 | }; 343 | 344 | })(jQuery); -------------------------------------------------------------------------------- /assets/js/scripts-admin-global.js: -------------------------------------------------------------------------------- 1 | /* global jQuery */ 2 | 3 | jQuery( function( $ ) { 4 | /** 5 | * DISMISS NOTICES 6 | * 7 | * @since 2.0.4 8 | */ 9 | $( '.wpmm_notices' ).on( 'click', '.notice-dismiss', function() { 10 | const noticeKey = $( this ).parent().data( 'key' ); 11 | const noticeNonce = $( this ).parent().data( 'nonce' ); 12 | $.post( ajaxurl, { 13 | action: 'wpmm_dismiss_notices', 14 | notice_key: noticeKey, 15 | _nonce: noticeNonce, 16 | }, function( response ) { 17 | if ( ! response.success ) { 18 | return false; 19 | } 20 | }, 'json' ); 21 | } ); 22 | } ); 23 | -------------------------------------------------------------------------------- /assets/js/scripts.js: -------------------------------------------------------------------------------- 1 | jQuery(function($) { 2 | /** 3 | * COUNTDOWN 4 | */ 5 | var countdown_el = $('.countdown'); 6 | 7 | if (countdown_el.length > 0) { 8 | var countDate = new Date(countdown_el.data('end')); 9 | 10 | countdown_el.countdown({ 11 | until: countDate, 12 | compact: true, 13 | layout: '{dn} : {hnn} : {mnn} : {snn}' 14 | }); 15 | } 16 | 17 | /** 18 | * SOCIAL LINKS 19 | */ 20 | var social_el = $('.social'); 21 | 22 | if (social_el.length > 0) { 23 | var link_target = social_el.data('target'); 24 | 25 | if (link_target == 1) { 26 | social_el.find('a').attr('target', '_blank'); 27 | } 28 | } 29 | 30 | /** 31 | * SUBSCRIBE FORM 32 | */ 33 | var subscribe_form = $('.subscribe_form'); 34 | 35 | if (subscribe_form.length > 0) { 36 | // validate form 37 | subscribe_form.validate({ 38 | submitHandler: function(form) { 39 | var subscribe_form_data = 'action=wpmm_add_subscriber&' + subscribe_form.serialize(); 40 | 41 | $.post(wpmmVars.ajaxURL, subscribe_form_data, function(response) { 42 | if (!response.success) { 43 | alert(response.data); 44 | return false; 45 | } 46 | 47 | $('.subscribe_wrapper').html(response.data); 48 | 49 | }, 'json'); 50 | 51 | return false; 52 | } 53 | }); 54 | } 55 | 56 | /** 57 | * CONTACT FORM 58 | */ 59 | if ($('.contact').length > 0) { 60 | // show form 61 | $('body').on('click', '.contact_us', function() { 62 | var open_contact = $(this).data('open'), 63 | close_contact = $(this).data('close'); 64 | 65 | $('.contact').fadeIn(700); 66 | $('.' + open_contact).addClass(close_contact); 67 | }); 68 | 69 | // validate form 70 | var contact_form = $('.contact_form'); 71 | 72 | contact_form.validate({ 73 | submitHandler: function(form) { 74 | var contact_form_data = 'action=wpmm_send_contact&' + contact_form.serialize(); 75 | 76 | $.post(wpmmVars.ajaxURL, contact_form_data, function(response) { 77 | if (!response.success) { 78 | alert(response.data); 79 | return false; 80 | } 81 | 82 | contact_form.parent().append('
' + response.data + '
'); 83 | contact_form.hide(); 84 | 85 | setTimeout(function() { 86 | $('.contact').hide(); 87 | contact_form.parent().find('.response').remove(); 88 | contact_form.trigger('reset'); 89 | contact_form.show(); 90 | }, 2000); 91 | }, 'json'); 92 | 93 | return false; 94 | } 95 | }); 96 | 97 | // hide form 98 | $('.close-contact_form').on('click', function(e) { 99 | $('.contact').fadeOut(200); 100 | }); 101 | 102 | $('body').on('click', '.contact', function(e) { 103 | if ($(e.target).hasClass('contact')) { 104 | var close_contact = $('.contact_us').data('close'); 105 | $('.form', $(this)).removeClass(close_contact); 106 | 107 | $(this).fadeOut(200); 108 | } 109 | }); 110 | } 111 | 112 | /** 113 | * RESPONSIVE VIDEO EMBEDS 114 | */ 115 | $('.wrap h2').fitVids({ 116 | customSelector: 'iframe[src*="dailymotion.com"]' 117 | }); 118 | }); -------------------------------------------------------------------------------- /assets/templates/coming-soon/coming-soon-1/blocks-export.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "Coming Soon 1", 3 | "__file": "wp_export", 4 | "version": 2, 5 | "content": "\n
\n
\n
\"\"
\n\n\n\n

Our Website is Coming soon.

\n\n\n\n
\n\n\n\n
0
Day
0
Hour
0
Minute
0
Second
\n\n\n\n
\n\n\n\n

We are working to deliver the best experience for our visitors. Meanwhile, follow us on Social.

\n\n\n\n\n
\n
\n\n
\n
\n
\n
\n

Stay in the loop!

\n\n\n\n

Leave your email and we will send you a heads-up when our site launches.

\n\n\n\n
\n
\n\n\n\n
\n\n\n\n\n\n

This form collects your name and email so that we can reach you back. Check out our Privacy Policy page to fully understand how we protect and manage your submitted data.

\n
\n
\n
\n
\n
\n" 6 | } 7 | -------------------------------------------------------------------------------- /assets/templates/coming-soon/coming-soon-1/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/assets/templates/coming-soon/coming-soon-1/screenshot.png -------------------------------------------------------------------------------- /assets/templates/coming-soon/coming-soon-2/blocks-export.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "Coming Soon 2", 3 | "__file": "wp_export", 4 | "version": 2, 5 | "content": "\n
\n
\n
\n

Our new website is launching soon!

\n\n\n\n
\n\n\n\n
0
Day
0
Hour
0
Minute
0
Second
\n\n\n\n
\n\n\n\n

Thanks for checking in! While we are getting ready, make sure to follow us on Social to know when we launch!

\n\n\n\n\n
\n
\n
\n" 6 | } 7 | -------------------------------------------------------------------------------- /assets/templates/coming-soon/coming-soon-2/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/assets/templates/coming-soon/coming-soon-2/screenshot.png -------------------------------------------------------------------------------- /assets/templates/coming-soon/coming-soon-3/blocks-export.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "Coming Soon 3", 3 | "__file": "wp_export", 4 | "version": 2, 5 | "content": "\n
\n
\n
\n

Our Website is Coming soon. Stay tuned!

\n\n\n\n
\n\n\n\n
0
Day
0
Hour
0
Minute
0
Second
\n\n\n\n
\n\n\n\n

Thanks for checking in! While we are getting ready, make sure to follow us on Social to know when we launch!

\n\n\n\n
\n\n\n\n\n
\n
\n
\n" 6 | } 7 | -------------------------------------------------------------------------------- /assets/templates/coming-soon/coming-soon-3/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/assets/templates/coming-soon/coming-soon-3/screenshot.png -------------------------------------------------------------------------------- /assets/templates/coming-soon/coming-soon-4/blocks-export.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "Coming Soon 4", 3 | "__file": "wp_export", 4 | "version": 2, 5 | "content": "\n
\n
\n
\n
\n
Our website is launching soon
\n\n\n\n

Get a 20% dicount code when our store goes live

\n
\n
\n\n\n\n
\n
\n

Add your email address to the form. We will email you the 20% discount code

\n\n\n\n

Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime.

\n
\n\n\n\n
\n
\n
\n\n\n\n
\n\n\n
\n
\n
\n\n\n\n\n
\n
\n" 6 | } 7 | -------------------------------------------------------------------------------- /assets/templates/coming-soon/coming-soon-4/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/assets/templates/coming-soon/coming-soon-4/screenshot.png -------------------------------------------------------------------------------- /assets/templates/landing-page/landing-page-1/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/assets/templates/landing-page/landing-page-1/screenshot.png -------------------------------------------------------------------------------- /assets/templates/landing-page/landing-page-2/blocks-export.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "Landing Page - links", 3 | "__file": "wp_export", 4 | "version": 2, 5 | "content": "\n
\n
\n
\n
\n
\"\"
\n\n\n\n

DJ Dredd

\n\n\n\n

Electronic musician / performer

\n\n\n\n

Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit

\n
\n
\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n\n\n\n\n
\n
\n" 6 | } 7 | -------------------------------------------------------------------------------- /assets/templates/landing-page/landing-page-2/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/assets/templates/landing-page/landing-page-2/screenshot.png -------------------------------------------------------------------------------- /assets/templates/landing-page/landing-page-3/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/assets/templates/landing-page/landing-page-3/screenshot.png -------------------------------------------------------------------------------- /assets/templates/landing-page/landing-page-4/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/assets/templates/landing-page/landing-page-4/screenshot.png -------------------------------------------------------------------------------- /assets/templates/landing-page/landing-page-5/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/assets/templates/landing-page/landing-page-5/screenshot.png -------------------------------------------------------------------------------- /assets/templates/landing-page/landing-page-6/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/assets/templates/landing-page/landing-page-6/screenshot.png -------------------------------------------------------------------------------- /assets/templates/landing-page/landing-page-7/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/assets/templates/landing-page/landing-page-7/screenshot.png -------------------------------------------------------------------------------- /assets/templates/maintenance/maintenance-1/blocks-export.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "Maintenance 1", 3 | "__file": "wp_export", 4 | "version": 2, 5 | "content": "\n
\n
\n
\"\"
\n\n\n\n

Website is under maintenance

\n\n\n\n

We are doing some updates on our site, and we need to be offline for a while. We will be back with you shortly!

\n\n\n\n\n
\n
\n\n
\n
\n
\n
\n
\"\"
\n
\n\n\n\n
\n

Can't wait?

\n\n\n\n

Send us a message and we will get back to you asap!

\n\n\n\n
\n
\n\n\n\n
\n\n\n\n\n\n
\n\n\n\n

This form collects your name and email so that we can reach you back. Check out our Privacy Policy page to fully understand how we protect and manage your submitted data.

\n
\n
\n
\n
\n
\n" 6 | } 7 | -------------------------------------------------------------------------------- /assets/templates/maintenance/maintenance-1/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/assets/templates/maintenance/maintenance-1/screenshot.png -------------------------------------------------------------------------------- /assets/templates/maintenance/maintenance-2/blocks-export.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "Maintenance 2", 3 | "__file": "wp_export", 4 | "version": 2, 5 | "content": "\n
\n
\n

Website is under maintenance

\n\n\n\n
\n\n\n\n

We are doing some maintenance on our website to improve your experience. Meanwhile, follow us on Social Media

\n\n\n\n
\n\n\n\n\n
\n
\n" 6 | } 7 | -------------------------------------------------------------------------------- /assets/templates/maintenance/maintenance-2/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/assets/templates/maintenance/maintenance-2/screenshot.png -------------------------------------------------------------------------------- /assets/templates/maintenance/maintenance-3/blocks-export.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "Maintenance 3", 3 | "__file": "wp_export", 4 | "version": 2, 5 | "content": "\n
\n
\n
\n

Website is under maintenance

\n\n\n\n
\n\n\n\n

We are doing some updates on our site, and we need to be offline for a while. We will be back with you shortly! Meanwhile, follow us on Social.

\n\n\n\n
\n\n\n\n\n
\n
\n
\n" 6 | } 7 | -------------------------------------------------------------------------------- /assets/templates/maintenance/maintenance-3/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/assets/templates/maintenance/maintenance-3/screenshot.png -------------------------------------------------------------------------------- /assets/templates/maintenance/maintenance-4/blocks-export.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "Maintenance 4", 3 | "__file": "wp_export", 4 | "version": 2, 5 | "content": "\n
\n
\n
\"\"
\n
\n\n\n\n
\n

Site under maintenance

\n\n\n\n

Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod.

\n\n\n\n\n
\n
\n" 6 | } 7 | -------------------------------------------------------------------------------- /assets/templates/maintenance/maintenance-4/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Codeinwp/wp-maintenance-mode/f9002756d39a460179c2809455d062d346f6d763/assets/templates/maintenance/maintenance-4/screenshot.png -------------------------------------------------------------------------------- /bin/dist.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | BUILD_VERSION=$(node -pe "require('./package.json').version") 4 | export BUILD_VERSION 5 | BUILD_NAME=$(node -pe "require('./package.json').name") 6 | export BUILD_NAME 7 | 8 | if [ ! -d "dist" ]; then 9 | mkdir "dist" 10 | fi 11 | 12 | if [ ! -d "artifact" ]; then 13 | mkdir "artifact" 14 | fi 15 | 16 | rsync -rc --exclude-from ".distignore" "./" "dist/$BUILD_NAME" 17 | 18 | cd dist 19 | zip -r "../artifact/$BUILD_NAME" "./$BUILD_NAME/" 20 | cd - 21 | -------------------------------------------------------------------------------- /bin/install-wp-tests.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | if [ $# -lt 3 ]; then 4 | echo "usage: $0 [db-host] [wp-version] [skip-database-creation]" 5 | exit 1 6 | fi 7 | 8 | DB_NAME=$1 9 | DB_USER=$2 10 | DB_PASS=$3 11 | DB_HOST=${4-localhost} 12 | WP_VERSION=${5-latest} 13 | SKIP_DB_CREATE=${6-false} 14 | 15 | TMPDIR=${TMPDIR-/tmp} 16 | TMPDIR=$(echo $TMPDIR | sed -e "s/\/$//") 17 | WP_TESTS_DIR=${WP_TESTS_DIR-$TMPDIR/wordpress-tests-lib} 18 | WP_CORE_DIR=${WP_CORE_DIR-$TMPDIR/wordpress/} 19 | 20 | download() { 21 | if [ `which curl` ]; then 22 | curl -s "$1" > "$2"; 23 | elif [ `which wget` ]; then 24 | wget -nv -O "$2" "$1" 25 | fi 26 | } 27 | 28 | if [[ $WP_VERSION =~ ^[0-9]+\.[0-9]+$ ]]; then 29 | WP_TESTS_TAG="branches/$WP_VERSION" 30 | elif [[ $WP_VERSION =~ [0-9]+\.[0-9]+\.[0-9]+ ]]; then 31 | if [[ $WP_VERSION =~ [0-9]+\.[0-9]+\.[0] ]]; then 32 | # version x.x.0 means the first release of the major version, so strip off the .0 and download version x.x 33 | WP_TESTS_TAG="tags/${WP_VERSION%??}" 34 | else 35 | WP_TESTS_TAG="tags/$WP_VERSION" 36 | fi 37 | elif [[ $WP_VERSION == 'nightly' || $WP_VERSION == 'trunk' ]]; then 38 | WP_TESTS_TAG="trunk" 39 | else 40 | # http serves a single offer, whereas https serves multiple. we only want one 41 | download http://api.wordpress.org/core/version-check/1.7/ /tmp/wp-latest.json 42 | grep '[0-9]+\.[0-9]+(\.[0-9]+)?' /tmp/wp-latest.json 43 | LATEST_VERSION=$(grep -o '"version":"[^"]*' /tmp/wp-latest.json | sed 's/"version":"//') 44 | if [[ -z "$LATEST_VERSION" ]]; then 45 | echo "Latest WordPress version could not be found" 46 | exit 1 47 | fi 48 | WP_TESTS_TAG="tags/$LATEST_VERSION" 49 | fi 50 | 51 | set -ex 52 | 53 | install_wp() { 54 | 55 | if [ -d $WP_CORE_DIR ]; then 56 | return; 57 | fi 58 | 59 | mkdir -p $WP_CORE_DIR 60 | 61 | if [[ $WP_VERSION == 'nightly' || $WP_VERSION == 'trunk' ]]; then 62 | mkdir -p $TMPDIR/wordpress-nightly 63 | download https://wordpress.org/nightly-builds/wordpress-latest.zip $TMPDIR/wordpress-nightly/wordpress-nightly.zip 64 | unzip -q $TMPDIR/wordpress-nightly/wordpress-nightly.zip -d $TMPDIR/wordpress-nightly/ 65 | mv $TMPDIR/wordpress-nightly/wordpress/* $WP_CORE_DIR 66 | else 67 | if [ $WP_VERSION == 'latest' ]; then 68 | local ARCHIVE_NAME='latest' 69 | elif [[ $WP_VERSION =~ [0-9]+\.[0-9]+ ]]; then 70 | # https serves multiple offers, whereas http serves single. 71 | download https://api.wordpress.org/core/version-check/1.7/ $TMPDIR/wp-latest.json 72 | if [[ $WP_VERSION =~ [0-9]+\.[0-9]+\.[0] ]]; then 73 | # version x.x.0 means the first release of the major version, so strip off the .0 and download version x.x 74 | LATEST_VERSION=${WP_VERSION%??} 75 | else 76 | # otherwise, scan the releases and get the most up to date minor version of the major release 77 | local VERSION_ESCAPED=`echo $WP_VERSION | sed 's/\./\\\\./g'` 78 | LATEST_VERSION=$(grep -o '"version":"'$VERSION_ESCAPED'[^"]*' $TMPDIR/wp-latest.json | sed 's/"version":"//' | head -1) 79 | fi 80 | if [[ -z "$LATEST_VERSION" ]]; then 81 | local ARCHIVE_NAME="wordpress-$WP_VERSION" 82 | else 83 | local ARCHIVE_NAME="wordpress-$LATEST_VERSION" 84 | fi 85 | else 86 | local ARCHIVE_NAME="wordpress-$WP_VERSION" 87 | fi 88 | download https://wordpress.org/${ARCHIVE_NAME}.tar.gz $TMPDIR/wordpress.tar.gz 89 | tar --strip-components=1 -zxmf $TMPDIR/wordpress.tar.gz -C $WP_CORE_DIR 90 | fi 91 | 92 | download https://raw.github.com/markoheijnen/wp-mysqli/master/db.php $WP_CORE_DIR/wp-content/db.php 93 | } 94 | 95 | install_test_suite() { 96 | # portable in-place argument for both GNU sed and Mac OSX sed 97 | if [[ $(uname -s) == 'Darwin' ]]; then 98 | local ioption='-i.bak' 99 | else 100 | local ioption='-i' 101 | fi 102 | 103 | # set up testing suite if it doesn't yet exist 104 | if [ ! -d $WP_TESTS_DIR ]; then 105 | # set up testing suite 106 | mkdir -p $WP_TESTS_DIR 107 | svn co --quiet https://develop.svn.wordpress.org/${WP_TESTS_TAG}/tests/phpunit/includes/ $WP_TESTS_DIR/includes 108 | svn co --quiet https://develop.svn.wordpress.org/${WP_TESTS_TAG}/tests/phpunit/data/ $WP_TESTS_DIR/data 109 | fi 110 | 111 | if [ ! -f wp-tests-config.php ]; then 112 | download https://develop.svn.wordpress.org/${WP_TESTS_TAG}/wp-tests-config-sample.php "$WP_TESTS_DIR"/wp-tests-config.php 113 | # remove all forward slashes in the end 114 | WP_CORE_DIR=$(echo $WP_CORE_DIR | sed "s:/\+$::") 115 | sed $ioption "s:dirname( __FILE__ ) . '/src/':'$WP_CORE_DIR/':" "$WP_TESTS_DIR"/wp-tests-config.php 116 | sed $ioption "s/youremptytestdbnamehere/$DB_NAME/" "$WP_TESTS_DIR"/wp-tests-config.php 117 | sed $ioption "s/yourusernamehere/$DB_USER/" "$WP_TESTS_DIR"/wp-tests-config.php 118 | sed $ioption "s/yourpasswordhere/$DB_PASS/" "$WP_TESTS_DIR"/wp-tests-config.php 119 | sed $ioption "s|localhost|${DB_HOST}|" "$WP_TESTS_DIR"/wp-tests-config.php 120 | fi 121 | 122 | } 123 | 124 | install_db() { 125 | 126 | if [ ${SKIP_DB_CREATE} = "true" ]; then 127 | return 0 128 | fi 129 | 130 | # parse DB_HOST for port or socket references 131 | local PARTS=(${DB_HOST//\:/ }) 132 | local DB_HOSTNAME=${PARTS[0]}; 133 | local DB_SOCK_OR_PORT=${PARTS[1]}; 134 | local EXTRA="" 135 | 136 | if ! [ -z $DB_HOSTNAME ] ; then 137 | if [ $(echo $DB_SOCK_OR_PORT | grep -e '^[0-9]\{1,\}$') ]; then 138 | EXTRA=" --host=$DB_HOSTNAME --port=$DB_SOCK_OR_PORT --protocol=tcp" 139 | elif ! [ -z $DB_SOCK_OR_PORT ] ; then 140 | EXTRA=" --socket=$DB_SOCK_OR_PORT" 141 | elif ! [ -z $DB_HOSTNAME ] ; then 142 | EXTRA=" --host=$DB_HOSTNAME --protocol=tcp" 143 | fi 144 | fi 145 | 146 | # create database 147 | mysqladmin create $DB_NAME --user="$DB_USER" --password="$DB_PASS"$EXTRA 148 | } 149 | 150 | install_wp 151 | install_test_suite 152 | install_db 153 | -------------------------------------------------------------------------------- /includes/classes/index.php: -------------------------------------------------------------------------------- 1 | '', 19 | ), 20 | $atts 21 | ); 22 | 23 | include_once wpmm_get_template_path( 'loginform.php' ); 24 | } 25 | 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /includes/classes/wp-maintenance-mode-shortcodes.php: -------------------------------------------------------------------------------- 1 | __CLASS__ . '::loginform', 19 | ); 20 | 21 | foreach ( $shortcodes as $shortcode => $method ) { 22 | add_shortcode( $shortcode, $method ); 23 | } 24 | } 25 | 26 | /** 27 | * Shortcode Wrapper 28 | * 29 | * @since 2.0.3 30 | * @param string $function 31 | * @param array $atts 32 | * @param array $wrapper 33 | * @return string 34 | */ 35 | public static function shortcode_wrapper( $function, $atts = array(), $wrapper = array( 36 | 'before' => null, 37 | 'after' => null, 38 | ) ) { 39 | ob_start(); 40 | 41 | // @codingStandardsIgnoreStart 42 | echo wp_kses_post( $wrapper['before'] ); 43 | call_user_func( $function, $atts ); 44 | echo wp_kses_post( $wrapper['after'] ); 45 | // @codingStandardsIgnoreEnd 46 | 47 | return ob_get_clean(); 48 | } 49 | 50 | /** 51 | * Login form shortcode. 52 | * 53 | * @since 2.0.3 54 | * @param array $atts 55 | * @return string 56 | */ 57 | public static function loginform( $atts ) { 58 | return self::shortcode_wrapper( array( 'WP_Maintenance_Mode_Shortcode_Loginform', 'output' ), $atts ); 59 | } 60 | 61 | } 62 | 63 | } 64 | -------------------------------------------------------------------------------- /includes/functions/hooks.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | Themeisle rules for PHP_CodeSnifferr 4 | 5 | ./ 6 | 7 | 8 | 9 | 10 | vendor 11 | node_modules 12 | **/build 13 | tests 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 9 | 10 | 11 | 12 | 13 | 14 | ./tests/ 15 | ./tests/old/ 16 | 17 | 18 | -------------------------------------------------------------------------------- /tests/bootstrap.php: -------------------------------------------------------------------------------- 1 | assertTrue( defined('WPMM_PATH') ); 12 | $this->assertTrue( defined('WPMM_CLASSES_PATH') ); 13 | $this->assertTrue( defined('WPMM_FUNCTIONS_PATH') ); 14 | $this->assertTrue( defined('WPMM_LANGUAGES_PATH') ); 15 | $this->assertTrue( defined('WPMM_VIEWS_PATH') ); 16 | $this->assertTrue( defined('WPMM_CSS_PATH') ); 17 | $this->assertTrue( defined('WPMM_URL') ); 18 | $this->assertTrue( defined('WPMM_JS_URL') ); 19 | $this->assertTrue( defined('WPMM_CSS_URL') ); 20 | $this->assertTrue( defined('WPMM_IMAGES_URL') ); 21 | $this->assertTrue( defined('WPMM_ASSETS_SUFFIX') && WPMM_ASSETS_SUFFIX === '.min' ); 22 | } 23 | 24 | public function test_wpmm_maybe_define_constant() { 25 | 26 | wpmm_maybe_define_constant( 'SOMECONSTANT', 'exists' ); 27 | wpmm_maybe_define_constant( 'SOMECONSTANT', 'again' ); 28 | $this->assertTrue( defined('SOMECONSTANT') && SOMECONSTANT === 'exists' ); 29 | } 30 | 31 | public function test_class_loading() { 32 | $this->assertTrue( class_exists('WP_Maintenance_Mode') ); 33 | } 34 | 35 | public function test_wpmm_get_banners() { 36 | $banners = wpmm_get_banners(); 37 | $this->assertNonEmptyMultidimensionalArray( $banners ); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /uninstall.php: -------------------------------------------------------------------------------- 1 | query( "DROP TABLE IF EXISTS {$GLOBALS['wpdb']->prefix}wpmm_subscribers" ); 14 | 15 | // delete options 16 | $options_to_delete = array( 17 | 'wpmm_settings', 18 | 'wpmm_notice', 19 | 'wpmm_version', 20 | ); 21 | 22 | foreach ( $options_to_delete as $option ) { 23 | delete_option( $option ); 24 | } 25 | 26 | // delete dismissed notices meta key 27 | $users_with_dismissed_notices = (array) get_users( 28 | array( 29 | 'fields' => 'ids', 30 | 'meta_key' => 'wpmm_dismissed_notices', 31 | ) 32 | ); 33 | 34 | foreach ( $users_with_dismissed_notices as $user_id ) { 35 | delete_user_meta( $user_id, 'wpmm_dismissed_notices' ); 36 | } 37 | 38 | // delete bot settings file (data.js) 39 | $upload_dir = wp_upload_dir(); 40 | $bot_settings_file = ! empty( $upload_dir['basedir'] ) ? trailingslashit( $upload_dir['basedir'] ) . 'data.js' : false; 41 | 42 | if ( $bot_settings_file !== false && file_exists( $bot_settings_file ) ) { 43 | wp_delete_file( $bot_settings_file ); 44 | } 45 | } 46 | 47 | // Let's do it! 48 | if ( is_multisite() ) { 49 | single_uninstall(); 50 | 51 | // delete data foreach blog 52 | $blogs_list = $GLOBALS['wpdb']->get_results( "SELECT blog_id FROM {$GLOBALS['wpdb']->blogs}", ARRAY_A ); 53 | if ( ! empty( $blogs_list ) ) { 54 | foreach ( $blogs_list as $blog ) { 55 | switch_to_blog( $blog['blog_id'] ); 56 | single_uninstall(); 57 | restore_current_blog(); 58 | } 59 | } 60 | } else { 61 | single_uninstall(); 62 | } 63 | -------------------------------------------------------------------------------- /views/contact.php: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 124 | 125 | 126 | 127 | 128 | 129 |
36 | 37 | 38 | 39 | 40 | 41 | 44 | 45 | 46 | 47 | 48 | 49 | 60 | 61 | 62 | 63 | 64 | 65 | 118 | 119 | 120 | 121 | 122 |
42 | 43 |
50 | 59 |
66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 78 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 90 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 105 | 106 | 107 | 110 | 111 | 112 | 113 | 114 | 115 | 116 |
76 | 77 | 79 | 80 |
88 | 89 | 91 | 92 |
103 | 104 |
108 | 109 |
117 |
123 |
130 | 131 | 132 | -------------------------------------------------------------------------------- /views/google-analytics.php: -------------------------------------------------------------------------------- 1 | 10 | 11 | 12 | 23 | -------------------------------------------------------------------------------- /views/index.php: -------------------------------------------------------------------------------- 1 | 10 | 19 | -------------------------------------------------------------------------------- /views/network-settings.php: -------------------------------------------------------------------------------- 1 | 10 |
11 |

12 | 15 | exit 16 |

17 |
18 |
19 |
20 | 21 | 22 | 23 | 24 | 27 | 30 | 31 | 32 | 35 | 39 | 40 | 41 |
25 | 26 | 28 | 29 |
33 | 34 | 36 |
37 | 38 |
42 | 43 | 44 |
45 | 46 |
47 |
48 | -------------------------------------------------------------------------------- /views/notices.php: -------------------------------------------------------------------------------- 1 | $notice ) { 11 | if ( in_array( $key, $dismissed_notices, true ) ) { 12 | continue; 13 | } 14 | 15 | printf( '

%s

', esc_attr( $notice['class'] ), esc_attr( $key ), esc_attr( wp_create_nonce( 'notice_nonce_' . $key ) ), wp_kses_post( $notice['msg'] ) ); 16 | } 17 | -------------------------------------------------------------------------------- /views/sidebar.php: -------------------------------------------------------------------------------- 1 | 10 | 61 | -------------------------------------------------------------------------------- /views/wizard.php: -------------------------------------------------------------------------------- 1 | array( 4 | 'slug' => 'coming-soon-1', 5 | 'thumbnail' => WPMM_TEMPLATES_URL . 'coming-soon/coming-soon-1/screenshot.png', 6 | ), 7 | 'maintenance' => array( 8 | 'slug' => 'maintenance-1', 9 | 'thumbnail' => WPMM_TEMPLATES_URL . 'maintenance/maintenance-1/screenshot.png', 10 | ), 11 | 'landing-page' => array( 12 | 'slug' => 'landing-page-1', 13 | 'thumbnail' => WPMM_TEMPLATES_URL . 'landing-page/landing-page-1/screenshot.png', 14 | ), 15 | ); 16 | 17 | ?> 18 |
19 |
20 |
21 |
22 |

23 |

24 | Otter%2$s.', 'wp-maintenance-mode' ), 29 | wpmm_translated_string_allowed_html() 30 | ), 31 | tsdk_utmify( 'https://themeisle.com/plugins/otter-blocks/', $this->plugin_slug, 'wizard' ), 32 | $this->get_external_link_icon() 33 | ); 34 | ?> 35 |
36 | 39 |

40 |
41 |
42 | $label ) { 45 | $slug = $default_templates[ $category ]['slug']; 46 | $thumbnail_url = $default_templates[ $category ]['thumbnail']; 47 | ?> 48 |
49 |
50 | > 51 | 57 |
58 | 61 |
62 |
63 | 64 |
65 |
66 | 67 | 68 | 69 | 70 | 73 |
74 |

75 | Optimole%2$s.', 'wp-maintenance-mode' ), 80 | wpmm_translated_string_allowed_html() 81 | ), 82 | esc_url( 'https://wordpress.org/plugins/optimole-wp/' ), 83 | $this->get_external_link_icon() 84 | ); 85 | ?> 86 |

87 | 88 | 89 |
90 | 91 | 92 |
93 |
94 |
95 |
96 | 106 |
107 |
108 | 117 |
118 |
119 |
120 | -------------------------------------------------------------------------------- /views/wpmm-page-template.php: -------------------------------------------------------------------------------- 1 | get_plugin_settings(); 13 | ?> 14 | 15 | > 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | > 24 | 34 |
35 |
36 | 41 |
42 |

43 |
44 | 47 | 48 | 51 | 52 | 56 | 57 | 58 | esc_url( WPMM_IMAGES_URL . 'icon.svg' ), 83 | 'location' => 'wp-maintenance-mode', 84 | ); 85 | } 86 | ); 87 | 88 | /** 89 | * Filter products array. 90 | * 91 | * @param array $products products array. 92 | * 93 | * @return array 94 | */ 95 | function wpmm_load_sdk( $products ) { 96 | $products[] = __FILE__; 97 | return $products; 98 | } 99 | 100 | $autoload_path = __DIR__ . '/vendor/autoload.php'; 101 | if ( is_file( $autoload_path ) ) { 102 | require_once $autoload_path; 103 | } 104 | 105 | add_filter( 106 | 'wp_maintenance_mode_load_promotions', 107 | function() { 108 | return array( 'otter' ); 109 | } 110 | ); 111 | --------------------------------------------------------------------------------