Compare commits
119 Commits
2.0.0-beta
...
gh-pages
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2e8628aef6 | ||
|
|
df50849212 | ||
|
|
94b49a4134 | ||
|
|
e803eb98bd | ||
|
|
58f3e41dbb | ||
|
|
0731651be0 | ||
|
|
1a74d8228c | ||
|
|
c44614bd7d | ||
|
|
dcdfb94ae6 | ||
|
|
eba73ed6bb | ||
|
|
6095c4c370 | ||
|
|
0e766a56e5 | ||
|
|
214036ad73 | ||
|
|
3ca332451d | ||
|
|
98456f3cd3 | ||
|
|
fab260050f | ||
|
|
f3c2d87691 | ||
|
|
6a165253f2 | ||
|
|
ab9fdd6116 | ||
|
|
37b6338322 | ||
|
|
0583464041 | ||
|
|
405b45183f | ||
|
|
cc09b124b4 | ||
|
|
d5ef33f37d | ||
|
|
846bbe71b4 | ||
|
|
6eb187ea4c | ||
|
|
da75321642 | ||
|
|
29086e01e0 | ||
|
|
5897adefd7 | ||
|
|
1461a255ea | ||
|
|
4228e2f1ae | ||
|
|
553d85a62f | ||
|
|
d3a6fc03ff | ||
|
|
47c87992e0 | ||
|
|
41a254bfe4 | ||
|
|
9170c67964 | ||
|
|
38a6b53883 | ||
|
|
6e98b2e975 | ||
|
|
93a11d3c9b | ||
|
|
bf31a2c89a | ||
|
|
707313ce39 | ||
|
|
a04a77149e | ||
|
|
b442c0401f | ||
|
|
e7c0d35ce6 | ||
|
|
882c6a4e06 | ||
|
|
2d25f536a4 | ||
|
|
6e454f64e6 | ||
|
|
2eb632f4be | ||
|
|
a122c0963e | ||
|
|
c3208a2e01 | ||
|
|
cf2d82912d | ||
|
|
12eeda7a80 | ||
|
|
a66ec82d6c | ||
|
|
6802ca791d | ||
|
|
2fc307bcb6 | ||
|
|
5af1e70987 | ||
|
|
41e5f4d705 | ||
|
|
267771dc42 | ||
|
|
060bceca54 | ||
|
|
cbd90a176b | ||
|
|
54118335a8 | ||
|
|
787f3917a7 | ||
|
|
53f3b4b2c1 | ||
|
|
5a21c4d7f6 | ||
|
|
89d45ef14f | ||
|
|
9f8bc012f6 | ||
|
|
bb61d8da82 | ||
|
|
b8b39dcfd2 | ||
|
|
e20b78fa6a | ||
|
|
71f12024d1 | ||
|
|
2d55b7e38d | ||
|
|
d479585818 | ||
|
|
eca492e761 | ||
|
|
bce6fda72a | ||
|
|
6b17173566 | ||
|
|
0e35c2bbb0 | ||
|
|
b1aef9db65 | ||
|
|
3fc1238aef | ||
|
|
af25adb888 | ||
|
|
13e6d39ce1 | ||
|
|
b313ff826c | ||
|
|
c78973ed45 | ||
|
|
dce749d440 | ||
|
|
f9f87fe692 | ||
|
|
f44a22042e | ||
|
|
5f01f6f343 | ||
|
|
dc0076248a | ||
|
|
c8c96ee859 | ||
|
|
d1b3b36981 | ||
|
|
f0d820d287 | ||
|
|
ce0bb6ed4b | ||
|
|
ca03805925 | ||
|
|
3223931d91 | ||
|
|
1486d1c0b3 | ||
|
|
4a3985ed73 | ||
|
|
fd2ff2cce4 | ||
|
|
060b34da54 | ||
|
|
5d199b4aa7 | ||
|
|
6ef48fbc69 | ||
|
|
be7e60a0b1 | ||
|
|
81036132f4 | ||
|
|
1e1d34d897 | ||
|
|
1998b5e582 | ||
|
|
d1c68cf71b | ||
|
|
aa6e79f161 | ||
|
|
c0f52aaa12 | ||
|
|
a4e2a34002 | ||
|
|
25bc974ffb | ||
|
|
f4cc364f7b | ||
|
|
db28b80cc7 | ||
|
|
ff4761ef75 | ||
|
|
bb0c228268 | ||
|
|
43a5a5d888 | ||
|
|
70687ecd2c | ||
|
|
f7237f8892 | ||
|
|
39db73a0a8 | ||
|
|
306e48522b | ||
|
|
be5855ecc2 | ||
|
|
3382a8ad43 |
12
.github/FUNDING.yml
vendored
@@ -1,12 +0,0 @@
|
||||
# These are supported funding model platforms
|
||||
|
||||
github: faisalman
|
||||
patreon: # Replace with a single Patreon username
|
||||
open_collective: ua-parser-js
|
||||
ko_fi: # Replace with a single Ko-fi username
|
||||
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
||||
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
|
||||
liberapay: # Replace with a single Liberapay username
|
||||
issuehunt: # Replace with a single IssueHunt username
|
||||
otechie: # Replace with a single Otechie username
|
||||
custom: ['https://www.paypal.me/faisalman/']
|
||||
43
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@@ -1,43 +0,0 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Library version**
|
||||
Which version of the library that you use, eg: v0.7.35 or v2.0.0-alpha.3
|
||||
|
||||
For the issue related with detection result, you can use the demo section in https://uaparser.js.org to confirm
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**To Reproduce**
|
||||
Steps to reproduce the behavior:
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. Scroll down to '....'
|
||||
4. See error
|
||||
|
||||
**Expected behavior**
|
||||
A clear and concise description of what you expected to happen.
|
||||
|
||||
**Screenshots**
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
|
||||
**Desktop (please complete the following information):**
|
||||
- OS: [e.g. iOS]
|
||||
- Browser [e.g. chrome, safari]
|
||||
- Version [e.g. 22]
|
||||
|
||||
**Smartphone (please complete the following information):**
|
||||
- Device: [e.g. iPhone6]
|
||||
- OS: [e.g. iOS8.1]
|
||||
- Browser [e.g. stock browser, safari]
|
||||
- Version [e.g. 22]
|
||||
|
||||
**Additional context**
|
||||
Add any other context about the problem here.
|
||||
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
@@ -1,20 +0,0 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
|
||||
**Describe the solution you'd like**
|
||||
A clear and concise description of what you want to happen.
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
|
||||
**Additional context**
|
||||
Add any other context or screenshots about the feature request here.
|
||||
@@ -1 +0,0 @@
|
||||
- [ ] I have read and accept the [Contributor License Agreement (CLA)](https://gist.github.com/faisalman/2ed16621ebb544157eba85a7f7381417) Document and I hereby sign the CLA
|
||||
78
.github/workflows/analysis-codeql.yml
vendored
@@ -1,78 +0,0 @@
|
||||
# For most projects, this workflow file will not need changing; you simply need
|
||||
# to commit it to your repository.
|
||||
#
|
||||
# You may wish to alter this file to override the set of languages analyzed,
|
||||
# or to provide custom queries or build logic.
|
||||
#
|
||||
# ******** NOTE ********
|
||||
# We have attempted to detect the languages in your repository. Please check
|
||||
# the `language` matrix defined below to confirm you have the correct set of
|
||||
# supported CodeQL languages.
|
||||
#
|
||||
name: CodeQL Analysis
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "master"]
|
||||
pull_request:
|
||||
# The branches below must be a subset of the branches above
|
||||
branches: [ "master" ]
|
||||
schedule:
|
||||
- cron: '15 6 * * 0'
|
||||
|
||||
permissions: read-all
|
||||
|
||||
jobs:
|
||||
analyze:
|
||||
name: Analyze
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
actions: read
|
||||
contents: read
|
||||
security-events: write
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
language: [ 'javascript' ]
|
||||
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
|
||||
# Use only 'java' to analyze code written in Java, Kotlin or both
|
||||
# Use only 'javascript' to analyze code written in JavaScript, TypeScript or both
|
||||
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v2
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||
# By default, queries listed here will override any specified in a config file.
|
||||
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||
|
||||
# Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
|
||||
# queries: security-extended,security-and-quality
|
||||
|
||||
|
||||
# Autobuild attempts to build any compiled languages (C/C++, C#, Go, or Java).
|
||||
# If this step fails, then you should remove it and run the build manually (see below)
|
||||
# - name: Autobuild
|
||||
# uses: github/codeql-action/autobuild@v2
|
||||
|
||||
# ℹ️ Command-line programs to run using the OS shell.
|
||||
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
|
||||
|
||||
# If the Autobuild fails above, remove it and uncomment the following three lines.
|
||||
# modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.
|
||||
|
||||
# - run: |
|
||||
# echo "Run, Build Application using script"
|
||||
# ./location_of_script_within_repo/buildscript.sh
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v2
|
||||
with:
|
||||
category: "/language:${{matrix.language}}"
|
||||
20
.github/workflows/analysis-dependency.yml
vendored
@@ -1,20 +0,0 @@
|
||||
# Dependency Review Action
|
||||
#
|
||||
# This Action will scan dependency manifest files that change as part of a Pull Request, surfacing known-vulnerable versions of the packages declared or updated in the PR. Once installed, if the workflow run is marked as required, PRs introducing known-vulnerable packages will be blocked from merging.
|
||||
#
|
||||
# Source repository: https://github.com/actions/dependency-review-action
|
||||
# Public documentation: https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/about-dependency-review#dependency-review-enforcement
|
||||
name: Dependency Analysis
|
||||
on: [pull_request]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
dependency-review:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: 'Checkout Repository'
|
||||
uses: actions/checkout@v3
|
||||
- name: 'Dependency Review'
|
||||
uses: actions/dependency-review-action@v2
|
||||
72
.github/workflows/analysis-scorecard.yml
vendored
@@ -1,72 +0,0 @@
|
||||
# This workflow uses actions that are not certified by GitHub. They are provided
|
||||
# by a third-party and are governed by separate terms of service, privacy
|
||||
# policy, and support documentation.
|
||||
|
||||
name: OpenSSF's Scorecard Analysis
|
||||
on:
|
||||
# For Branch-Protection check. Only the default branch is supported. See
|
||||
# https://github.com/ossf/scorecard/blob/main/docs/checks.md#branch-protection
|
||||
branch_protection_rule:
|
||||
# To guarantee Maintained check is occasionally updated. See
|
||||
# https://github.com/ossf/scorecard/blob/main/docs/checks.md#maintained
|
||||
schedule:
|
||||
- cron: '45 2 * * 4'
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
|
||||
# Declare default permissions as read only.
|
||||
permissions: read-all
|
||||
|
||||
jobs:
|
||||
analysis:
|
||||
name: Scorecard analysis
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
# Needed to upload the results to code-scanning dashboard.
|
||||
security-events: write
|
||||
# Needed to publish results and get a badge (see publish_results below).
|
||||
id-token: write
|
||||
# Uncomment the permissions below if installing in a private repository.
|
||||
# contents: read
|
||||
# actions: read
|
||||
|
||||
steps:
|
||||
- name: "Checkout code"
|
||||
uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: "Run analysis"
|
||||
uses: ossf/scorecard-action@e38b1902ae4f44df626f11ba0734b14fb91f8f86 # v2.1.2
|
||||
with:
|
||||
results_file: results.sarif
|
||||
results_format: sarif
|
||||
# (Optional) "write" PAT token. Uncomment the `repo_token` line below if:
|
||||
# - you want to enable the Branch-Protection check on a *public* repository, or
|
||||
# - you are installing Scorecard on a *private* repository
|
||||
# To create the PAT, follow the steps in https://github.com/ossf/scorecard-action#authentication-with-pat.
|
||||
repo_token: ${{ secrets.SCORECARD_TOKEN }}
|
||||
|
||||
# Public repositories:
|
||||
# - Publish results to OpenSSF REST API for easy access by consumers
|
||||
# - Allows the repository to include the Scorecard badge.
|
||||
# - See https://github.com/ossf/scorecard-action#publishing-results.
|
||||
# For private repositories:
|
||||
# - `publish_results` will always be set to `false`, regardless
|
||||
# of the value entered here.
|
||||
publish_results: true
|
||||
|
||||
# Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF
|
||||
# format to the repository Actions tab.
|
||||
- name: "Upload artifact"
|
||||
uses: actions/upload-artifact@3cea5372237819ed00197afe530f5a7ea3e805c8 # v3.1.0
|
||||
with:
|
||||
name: SARIF file
|
||||
path: results.sarif
|
||||
retention-days: 5
|
||||
|
||||
# Upload the results to GitHub's code scanning dashboard.
|
||||
- name: "Upload to code-scanning"
|
||||
uses: github/codeql-action/upload-sarif@17573ee1cc1b9d061760f3a006fc4aac4f944fd5 # v2.2.4
|
||||
with:
|
||||
sarif_file: results.sarif
|
||||
22
.github/workflows/publish-github-packages.yml
vendored
@@ -1,22 +0,0 @@
|
||||
name: Publish to GitHub Package
|
||||
|
||||
on:
|
||||
release:
|
||||
types: [published]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: '18.x'
|
||||
registry-url: https://npm.pkg.github.com/
|
||||
- run: npm ci
|
||||
- run: npm publish
|
||||
env:
|
||||
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
23
.github/workflows/publish-npm-packages.yml
vendored
@@ -1,23 +0,0 @@
|
||||
name: Publish to NPM
|
||||
|
||||
on:
|
||||
release:
|
||||
types: [published]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
id-token: write
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: '18.x'
|
||||
registry-url: 'https://registry.npmjs.org'
|
||||
- run: npm install -g npm
|
||||
- run: npm ci
|
||||
- run: npm publish --provenance --access public
|
||||
env:
|
||||
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||
23
.github/workflows/test-ci.yml
vendored
@@ -1,23 +0,0 @@
|
||||
name: UAParser.js CI-Test
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
run-test:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
arch: [amd64, ppc64le]
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 'lts/*'
|
||||
- name: Run the test
|
||||
run: |
|
||||
npm ci
|
||||
npx playwright install
|
||||
npm test
|
||||
10
.gitignore
vendored
@@ -1,8 +1,9 @@
|
||||
node_modules/
|
||||
npm-debug.log
|
||||
playwright-report/
|
||||
test-results/
|
||||
|
||||
.vscode
|
||||
|
||||
### vim ###
|
||||
.*.s[a-w][a-z]
|
||||
*.un~
|
||||
@@ -11,20 +12,17 @@ Session.vim
|
||||
*~
|
||||
.versions
|
||||
|
||||
### editors ###
|
||||
.vscode
|
||||
.idea
|
||||
*.sublime-*
|
||||
|
||||
### OSX ###
|
||||
.DS_Store
|
||||
.AppleDouble
|
||||
.LSOverride
|
||||
Icon
|
||||
|
||||
|
||||
# Thumbnails
|
||||
._*
|
||||
|
||||
# Files that might appear on external disk
|
||||
.Spotlight-V100
|
||||
.Trashes
|
||||
.idea
|
||||
|
||||
90
CHANGELOG.md
@@ -1,90 +0,0 @@
|
||||
# UAParser.js Changelog
|
||||
|
||||
# Version 2.0
|
||||
- What's breaking:
|
||||
- Dual-licensed under AGPLv3 or PRO License
|
||||
- Browser detection on mobile device: `"Chrome" => "Mobile Chrome"`, `"Firefox" => "Mobile Firefox"`
|
||||
- OS detection: `"Mac OS" => "macOS"`, `"Chromium OS" => "Chrome OS"`
|
||||
- What's new:
|
||||
- Some new methods in result object:
|
||||
- Support for client hints: `withClientHints()`
|
||||
- Support for feature detection: `withFeatureCheck()`
|
||||
- Utility for easy comparison: `is()`
|
||||
- Utility to print full-name: `toString()`
|
||||
- Support for ES module `import { UAParser } from 'ua-parser-js'`
|
||||
- Provided Enums submodule `'ua-parser-js/enums'`
|
||||
- Provided Extensions submodule `'ua-parser-js/extensions'`
|
||||
- Provided Helpers submodule `'ua-parser-js/helpers'`
|
||||
|
||||
# Version 0.7 / 1.0
|
||||
|
||||
Version 1.0.x is basically the equivalent of version 0.7.x. See [#536](https://github.com/faisalman/ua-parser-js/issues/536) for the reason behind this confusion.
|
||||
|
||||
## Version 0.7.36 / 1.0.36
|
||||
- Add new browser: Snapchat
|
||||
- Add new devices: Infinix, Tecno
|
||||
- Improve device detection: Amazon Fire TV, Xiaomi POCO
|
||||
- Improve OS detection: iOS
|
||||
|
||||
## Version 0.7.35 / 1.0.35
|
||||
- Fix result from user-supplied user-agent being altered
|
||||
- Add new browser: Heytap, TikTok
|
||||
- Add new engine: LibWeb
|
||||
- Add new OS: SerenityOS
|
||||
- Improve browser detection: Yandex
|
||||
- Improve device detection: iPhone, Amazon Echo
|
||||
- Improve OS detection: iOS
|
||||
|
||||
## Version 0.7.34 / 1.0.34
|
||||
- Fix Sharp Mobile detected as Huawei Tablet
|
||||
- Fix IE8 bug
|
||||
- Add new devices : Kobo e-Reader, Apple Watch, and some new SmartTV devices
|
||||
- Add new OS : watchOS
|
||||
- Improve browser detection : Kakao, Naver, Brave
|
||||
- Improve device detection : Oculus, iPad
|
||||
- Improve OS detection : Chrome OS
|
||||
- Using navigator.userAgentData as fallback for device.type & os.name
|
||||
|
||||
## Version 0.7.33 / 1.0.33
|
||||
|
||||
- Add new browser : Cobalt
|
||||
- Identify Macintosh as an Apple device
|
||||
- Fix ReDoS vulnerability
|
||||
|
||||
## Version 0.7.32 / 1.0.32
|
||||
|
||||
- Add new browser : DuckDuckGo, Huawei Browser, LinkedIn
|
||||
- Add new OS : HarmonyOS
|
||||
- Add some Huawei models
|
||||
- Add Sharp Aquos TV
|
||||
- Improve detection Xiaomi Mi CC9
|
||||
- Fix Sony Xperia 1 III misidentified as Acer tablet
|
||||
- Fix Detect Sony BRAVIA as SmartTV
|
||||
- Fix Detect Xiaomi Mi TV as SmartTV
|
||||
- Fix Detect Galaxy Tab S8 as tablet
|
||||
- Fix WeGame mistakenly identified as WeChat
|
||||
- Fix included commas in Safari / Mobile Safari version
|
||||
- Increase UA_MAX_LENGTH to 350
|
||||
|
||||
## Version 0.7.31 / 1.0.2
|
||||
|
||||
- Fix OPPO Reno A5 incorrect detection
|
||||
- Fix TypeError Bug
|
||||
- Use AST to extract regexes and verify them with safe-regex
|
||||
|
||||
## Version 0.7.30 / 1.0.1
|
||||
|
||||
- Add new browser : Obigo, UP.Browser, Klar
|
||||
- Add new device : Oculus, Roku
|
||||
- Add new OS: Maemo, HP-UX, Android-x86, Deepin, elementary OS, GhostBSD, Linspire, Manjaro, Sabayon
|
||||
- Improve detection for Sony Xperia 1ii, LG Android TV, and some more devices
|
||||
- Improve detection for ARM64 CPU
|
||||
- Improve detection for Windows Mobile, Netscape, Mac on PowerPC
|
||||
- Categorize PDA as mobile
|
||||
- Fix Sharp devices misjudged as Huawei
|
||||
- Fix trailing comma for ES3 compatibility
|
||||
- Some code refactor
|
||||
|
||||
# Version 0.8
|
||||
|
||||
Version 0.8 was created by accident. This version is now deprecated and no longer maintained, please update to version 0.7 / 1.0.
|
||||
@@ -1,29 +0,0 @@
|
||||
# UAParser.js Code of Conduct
|
||||
|
||||
## Introduction
|
||||
|
||||
Welcome to the UAParser.js community! We're here to collaborate on developing an awesome project. Here are some general guidelines to make our community a great place:
|
||||
|
||||
### 1. Be Kind, Honest, and Respectful
|
||||
|
||||
Always treat others with kindness and respect. We value different opinions and encourage positive communication.
|
||||
|
||||
### 2. Keep Conversations Civil and On-Topic
|
||||
|
||||
Please keep discussions related to the project. If you want to talk about something else, find the right place for it.
|
||||
|
||||
### 3. Mutual Assistance, Appreciation, and Acknowledgement
|
||||
|
||||
Feel free to ask for help, show gratitude for contributions, and make sure to give credit where it's due.
|
||||
|
||||
### 4. Resolving Disagreements
|
||||
|
||||
In the event of a disagreement, we encourage open and respectful dialogue. It's important to remember that it's okay to have differing opinions, and if a common ground can't be reached, we suggest using the 'agree to disagree' approach.
|
||||
|
||||
## Reporting Issues
|
||||
|
||||
If you see any behavior that goes against this code of conduct, report it to [f@faisalman.com](mailto:f@faisalman.com).
|
||||
|
||||
## Conclusion
|
||||
|
||||
Together, we can make this project awesome!
|
||||
@@ -1,7 +0,0 @@
|
||||
# UAParser.js: How to Contribute
|
||||
|
||||
* Fork and clone this repository
|
||||
* Make some changes as required
|
||||
* Write unit test to showcase its functionality under `/test`
|
||||
* Run the test suites to make sure it's not breaking anything `$ npm run build+test`
|
||||
* Submit a pull request under `develop` branch & check the CLA in the submission form
|
||||
73
LICENSE.md
@@ -1,73 +0,0 @@
|
||||
# UAPARSER.JS PRO PERSONAL LICENSE
|
||||
|
||||
Version 1, October 2023
|
||||
|
||||
Copyright (C) 2023 Faisal Salman <f+ua-parser-js@faisalman.com>
|
||||
|
||||
---
|
||||
|
||||
## Definitions
|
||||
|
||||
"We" are the team behind UAParser.js.
|
||||
|
||||
"You" are the individual who is responsible for purchasing this license.
|
||||
|
||||
"The Code" is UAParser.js.
|
||||
|
||||
"Project" is what you built with The Code.
|
||||
|
||||
---
|
||||
|
||||
## License
|
||||
|
||||
We retains all title, intellectual property, and ownership rights to The Code.
|
||||
|
||||
The Code is licensed, not sold, to You for use solely subject to the terms and conditions detailed here.
|
||||
|
||||
We grant you (and only you) a personal, limited, non-exclusive, non-transferable, non-sublicensable, royalty-free right to use, copy, and modify The Code.
|
||||
|
||||
This license is only valid for You as 1 (one) individual and can not be transferred to other individual or organization.
|
||||
|
||||
---
|
||||
|
||||
## Rights
|
||||
|
||||
You may use and modify The Code to create as many personal, hobby, educational, and other non-profit use as you want for yourself.
|
||||
|
||||
You may create any number of copies of The Code for yourself.
|
||||
|
||||
You have the right to get lifetime updates and a 1 (one) year support, starting from the time you make the purchase.
|
||||
|
||||
---
|
||||
|
||||
## Restriction
|
||||
|
||||
You may not use and modify The Code in such a way that may be used directly for commercial purpose.
|
||||
|
||||
You may not redistribute The Code, as-is or modified, except as a part of a Project that you made for yourself.
|
||||
|
||||
You may not deliver a Project that contains The Code as an open-source Project that might be used for commercial purpose to the general public, except with our written consent.
|
||||
|
||||
You may not use The Code for unlawful, inappropriate, illegal, or offensive purposes.
|
||||
|
||||
---
|
||||
|
||||
## Limitations
|
||||
|
||||
The Code is provided 'as is' without warranty of any kind, expressed, or implied.
|
||||
|
||||
We shall not be liable for any damages, including but not limited to, direct, indirect, special, incidental, or consequential damages or losses that occur by the use of The Code.
|
||||
|
||||
We reserve the rights to discontinue the lifetime updates for The Code at any time, with or without notice.
|
||||
|
||||
We offer support only for question within the scope of The Code functionality or related at our sole discretion.
|
||||
|
||||
---
|
||||
|
||||
## Terminations
|
||||
|
||||
This license works indefinitely but can be revoked at any time if there is a violation to any of the terms.
|
||||
|
||||
---
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
23
README.md
@@ -1,23 +0,0 @@
|
||||
<p align="center">
|
||||
<a href="https://uaparser.js.org"><img src="https://raw.githubusercontent.com/faisalman/ua-parser-js/gh-pages/images/uap-header.png"></a>
|
||||
</p>
|
||||
|
||||
# UAParser.js
|
||||
|
||||
Thank you for purchasing UAParser.js PRO Personal License, if you haven't please oreder here: https://store.faisalman.com
|
||||
|
||||
# Download
|
||||
|
||||
```sh
|
||||
npm install @ua-parser-js/pro-personal
|
||||
```
|
||||
|
||||
# Documentation
|
||||
|
||||
https://docs.uaparser.js.org/v2
|
||||
|
||||
# License
|
||||
|
||||
UAParser.js PRO Personal
|
||||
|
||||
Copyright (c) 2012-2023 Faisal Salman <<f@faisalman.com>>
|
||||
@@ -1,7 +0,0 @@
|
||||
# Security Policy
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
To report a security issue, please email `f@faisalman.com` with a description of the issue, reproducible steps to get the issue, affected versions, and, if known, mitigations for the issue.
|
||||
|
||||
If the issue is confirmed as a vulnerability, we will open a new security advisory draft in our GitHub's Security Advisory page [https://github.com/faisalman/ua-parser-js/security/advisories](https://github.com/faisalman/ua-parser-js/security/advisories) and acknowledge your contributions as part of it. This project follows a 90 days disclosure timeline.
|
||||
366
cloud/index.html
Normal file
@@ -0,0 +1,366 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
|
||||
<meta name="keywords"
|
||||
content="browser detection, user-agent, ua-parser-js, rest, api, javascript, typescript, python, java, php, golang, ruby, c#, curl, detect os, mobile, tablet, detect device, cpu, nodejs, jquery, client hints, bots, iphone, ipad, android" />
|
||||
<meta name="description" content="UAParser @Cloud instantly analyze user-agent data for accurate insights. Effortlessly integrate with any tech stack to our REST API or any AI agent to our MCP. Improve analytics, security, & personalization with precision.">
|
||||
<meta name="application-name" content="UAParser @Cloud">
|
||||
<meta property="og:title" content="UAParser @Cloud">
|
||||
<meta property="og:url" content="https://uaparser.dev/cloud">
|
||||
<meta property="og:image" content="https://uaparser.dev/images/uap-cloud-api.png">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:description" content="Transform User Data into Valuable Insights">
|
||||
<meta property="og:locale" content="en_US">
|
||||
<title>UAParser @Cloud | Understand your users. Instantly. Reliably.</title>
|
||||
<link rel="stylesheet" type="text/css" href="../semantic-ui/semantic.css">
|
||||
<link rel="stylesheet" type="text/css" href="../css/style.css">
|
||||
<link rel="icon" type="image/png" href="../images/uap-logo.png">
|
||||
<script src="../js/jquery-3.6.0.min.js"></script>
|
||||
<script src="../semantic-ui/semantic.js"></script>
|
||||
<script src="https://assets.lemonsqueezy.com/lemon.js" defer></script>
|
||||
<script src="//code.tidio.co/hu6mx7fw2r6llmfzxj5llesd5l51q5dv.js" async></script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="pusher">
|
||||
<div class="ui inverted instagram vertical masthead center aligned segment">
|
||||
<div class="ui text container">
|
||||
<a href="https://uaparser.dev/cloud"><h1>
|
||||
UAParser @Cloud
|
||||
</h1></a>
|
||||
<h2>Understand your traffic better. Instantly. Reliably.</h2>
|
||||
<img alt="UAParser.js Illustration" class="ui centered image illustration" src="../images/uap-cloud-header.png" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="ui text container">
|
||||
<div class="ui very padded basic segment">
|
||||
<div class="ui equal width stackable grid">
|
||||
<div class="row">
|
||||
<div class="column">
|
||||
<div class="ui basic segment">
|
||||
<h3 class="ui header">
|
||||
<i class="bolt icon"></i>
|
||||
<div class="content">Real-Time Analysis</div>
|
||||
</h3>
|
||||
<p>Instantly analyze each request headers for accurate insights.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="column">
|
||||
<div class="ui basic segment">
|
||||
<h3 class="ui header">
|
||||
<i class="object group outline icon"></i>
|
||||
<div class="content">Seamless Integration</div>
|
||||
</h3>
|
||||
<p>Effortlessly integrate your existing stack or AI agent to our API / MCP service.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="column">
|
||||
<div class="ui basic segment">
|
||||
<h3 class="ui header">
|
||||
<i class="magic icon"></i>
|
||||
<div class="content">
|
||||
Optimize & Enhance
|
||||
</div>
|
||||
</h3>
|
||||
<p>Improve analytics, security, & personalization with enhanced accuracy.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h3 class="ui dividing header" id="pricing">Pricing<div class="sub header">Monthly API traffics</div></h4>
|
||||
<table class="ui center aligned collapsing celled unstackable compact table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Free</th>
|
||||
<th>Starter</th>
|
||||
<th>Growth</th>
|
||||
<th>Scale</th>
|
||||
<th>Business</th>
|
||||
<th>Enterprise</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>1,000 reqs
|
||||
</td>
|
||||
<td>25,000 reqs
|
||||
</td>
|
||||
<td>100,000 reqs
|
||||
</td>
|
||||
<td>250,000 reqs
|
||||
</td>
|
||||
<td>1,000,000 reqs
|
||||
</td>
|
||||
<td>10,000,000
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<p class="ui center aligned">FREE</p>
|
||||
</td>
|
||||
<td>
|
||||
<h2 class="ui center aligned header">$5</h2>
|
||||
</td>
|
||||
<td>
|
||||
<h2 class="ui center aligned header">$15</h2>
|
||||
</td>
|
||||
<td>
|
||||
<h2 class="ui center aligned header">$25</h2>
|
||||
</td>
|
||||
<td>
|
||||
<h2 class="ui center aligned header">$50</h2>
|
||||
</td>
|
||||
<td>
|
||||
<h2 class="ui center aligned header">$450</h2>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<button class="ui grey small button" disabled>SIGNUP</button>
|
||||
</td>
|
||||
<td>
|
||||
<button class="ui grey small button" disabled>SIGNUP</button>
|
||||
</td>
|
||||
<td>
|
||||
<button class="ui grey small button" disabled>SIGNUP</button>
|
||||
</td>
|
||||
<td>
|
||||
<button class="ui grey small button" disabled>SIGNUP</button>
|
||||
</td>
|
||||
<td>
|
||||
<button class="ui grey small button" disabled>SIGNUP</button>
|
||||
</td>
|
||||
<td>
|
||||
<button class="ui grey small button" disabled>SIGNUP</button>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div id="demo" class="ui horizontal divider">
|
||||
UNDER DEVELOPMENT
|
||||
</div>
|
||||
<div class="ui basic segment">
|
||||
<img alt="UAParser.js Illustration" class="ui centered image illustration" src="../images/uap-cloud-api.png" />
|
||||
</div>
|
||||
<div class="ui basic segment">
|
||||
<form class="ui form" id="signupForm" method="post">
|
||||
<h3 class="ui dividing header">Coming Soon in 3.. 2..</h3>
|
||||
<p>Be the first to know when UAParser @Cloud API/MCP is live! Subscribe now and get exclusive early access, updates, and special offers.</p>
|
||||
<div class="two fields">
|
||||
<div class="field">
|
||||
<label for="name">Name</label>
|
||||
<input type="text" name="name" id="name" placeholder="Your Name (Optional)" />
|
||||
</div>
|
||||
<div class="field">
|
||||
<label for="email">Email</label>
|
||||
<input type="email" name="email" id="email" required placeholder="your@email (Required)" />
|
||||
</div>
|
||||
</div>
|
||||
<button class="ui large red button" type="submit"><i class="icon mail"></i> NOTIFY ME <i class="icon arrow circle right"></i></button>
|
||||
<div id="loader" style="display:none">Submitting...</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ui instagram inverted vertical footer segment">
|
||||
<div class="ui container">
|
||||
<div class="ui stackable inverted divided equal height stackable grid">
|
||||
<div class="three wide column">
|
||||
<h4 class="ui inverted header">About</h4>
|
||||
<div class="ui inverted link list">
|
||||
<a href="https://uaparser.dev" target="_blank" class="item">UAParser.js</a>
|
||||
<a href="https://store.faisalman.com/checkout/buy/e236ea87-9b2b-400e-9683-24367f731b35" target="_blank" class="item">PRO</a>
|
||||
<a href="https://github.com/faisalman/ua-parser-js" target="_blank" class="item">GitHub</a>
|
||||
<a href="https://www.npmjs.com/package/ua-parser-js" target="_blank" class="item">npm</a>
|
||||
<a href="mailto:cloud@uaparser.dev" target="_blank" class="item">Contact Us</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="three wide column">
|
||||
<h4 class="ui inverted header">Services</h4>
|
||||
<div class="ui inverted link list">
|
||||
<a href="#" class="item">FAQ</a>
|
||||
<a href="#pricing" class="item">Pricing</a>
|
||||
<a href="https://docs.uaparser.dev" target="_blank" class="item">Documentation</a>
|
||||
<a id="terms-link" target="_blank" class="item">Terms & Conditions</a>
|
||||
<a id="privacy-link" target="_blank" class="item">Privacy Policy</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="seven wide column">
|
||||
<h4 class="ui inverted header">UAParser @cloud</h4>
|
||||
<p>Copyright (c) 2025 Faisal Salman <cloud@uaparser.dev></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ui mini modal" id="submission-modal">
|
||||
<div class="header">Thank You!</div>
|
||||
<div class="content">
|
||||
<p>Your submission is received. We'll be in touch as soon as we're ready! Stay tuned 🚀</p>
|
||||
<p></p>
|
||||
</div>
|
||||
<div class="actions">
|
||||
<div class="ui ok green button">OK</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ui modal" id="terms-modal">
|
||||
<div class="header">Terms & Conditions</div>
|
||||
<div class="content">
|
||||
<div class="ui sub header">
|
||||
Introduction
|
||||
</div>
|
||||
<p>Welcome to UAParser @cloud. By accessing or using our service, you agree to these Terms & Conditions.</p>
|
||||
|
||||
<div class="ui sub header">
|
||||
Use of Service
|
||||
</div>
|
||||
<ul>
|
||||
<li>UAParser @cloud provides a cloud-based user-agent parsing service.</li>
|
||||
<li>You agree to use the service only for lawful purposes and not to disrupt or abuse the system.</li>
|
||||
<li>We reserve the right to modify or discontinue the service at any time.</li>
|
||||
</ul>
|
||||
|
||||
<div class="ui sub header">
|
||||
Account Registration & Security
|
||||
</div>
|
||||
<ul>
|
||||
<li>You may need to create an account to access certain features.</li>
|
||||
<li>You are responsible for maintaining the confidentiality of your credentials and for all activities under your account.</li>
|
||||
<li>We may suspend or terminate accounts involved in fraudulent or abusive activities.</li>
|
||||
</ul>
|
||||
|
||||
<div class="ui sub header">
|
||||
Payment & Refund Policy
|
||||
</div>
|
||||
<ul>
|
||||
<li>Certain features of UAParser @cloud may require payment.</li>
|
||||
<li>Payments are non-refundable except where required by law or explicitly stated in a separate agreement.</li>
|
||||
<li>If you believe you are eligible for a refund, contact our support team at <a href="mailto:cloud@uaparser.dev">cloud@uaparser.dev</a></li>
|
||||
</ul>
|
||||
|
||||
<div class="ui sub header">
|
||||
Service Availability & Limitations
|
||||
</div>
|
||||
<ul>
|
||||
<li>We strive to keep UAParser @cloud available and reliable but do not guarantee uninterrupted service.</li>
|
||||
<li>We are not liable for any data loss, service interruptions, or damages resulting from the use of our service.</li>
|
||||
</ul>
|
||||
|
||||
<div class="ui sub header">
|
||||
Intellectual Property
|
||||
</div>
|
||||
<ul>
|
||||
<li>All rights, title, and interest in UAParser @cloud remain with us.</li>
|
||||
<li>You may not copy, modify, or distribute any part of our service without prior authorization.</li>
|
||||
</ul>
|
||||
|
||||
<div class="ui sub header">
|
||||
Termination
|
||||
</div>
|
||||
<p>We may suspend or terminate your access to UAParser @cloud at our discretion if you violate these terms.</p>
|
||||
|
||||
<div class="ui sub header">
|
||||
Changes to Terms
|
||||
</div>
|
||||
<p>We may update these Terms & Conditions from time to time.</p>
|
||||
|
||||
<div class="ui sub header">
|
||||
Contact Us
|
||||
</div>
|
||||
<p>For any questions regarding these Terms & Conditions, please contact us at <a href="mailto:cloud@uaparser.dev">cloud@uaparser.dev</a></p>
|
||||
</div>
|
||||
<div class="actions">
|
||||
<div class="ui ok green button">OK</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ui modal" id="privacy-modal">
|
||||
<div class="header">Privacy Policy</div>
|
||||
<div class="content">
|
||||
<div class="ui sub header">
|
||||
Introduction
|
||||
</div>
|
||||
<p>Welcome to UAParser @Cloud. This Privacy Policy explains how we collect, use, and protect your information when you use our service.</p>
|
||||
|
||||
<div class="ui sub header">
|
||||
Information We Collect
|
||||
</div>
|
||||
<ul>
|
||||
<li>Usage Data: We may collect non-personal device and browser information, including user-agent strings, to provide accurate parsing services.</li>
|
||||
<li>Account Information: If you create an account, we may collect your name, email address, and billing details.</li>
|
||||
<li>Logs & Analytics: We may store logs for service improvement and security purposes.</li>
|
||||
</ul>
|
||||
<div class="ui sub header">
|
||||
How We Use Your Information
|
||||
</div>
|
||||
<ul>
|
||||
<li>To provide and improve our UAParser @Cloud services.</li>
|
||||
<li>To enhance security and prevent fraudulent activities.</li>
|
||||
<li>To communicate service updates and respond to inquiries.</li>
|
||||
</ul>
|
||||
|
||||
<div class="ui sub header">
|
||||
Data Sharing & Security
|
||||
</div>
|
||||
<p>We do not sell or share your personal data with third parties, except as required by law.</p>
|
||||
|
||||
<div class="ui sub header">
|
||||
Your Rights & Choices
|
||||
</div>
|
||||
<ul>
|
||||
<li>You may request access, correction, or deletion of your personal data.</li>
|
||||
<li>You can opt out of non-essential communications.</li>
|
||||
</ul>
|
||||
|
||||
<div class="ui sub header">
|
||||
Changes to This Policy
|
||||
</div>
|
||||
<p>We may update this Privacy Policy from time to time. Continued use of the service after changes indicates your acceptance.</p>
|
||||
|
||||
<div class="ui sub header">
|
||||
Contact Us
|
||||
</div>
|
||||
<p>If you have any questions, please contact us at <a href="mailto:cloud@uaparser.dev">cloud@uaparser.dev</a></p>
|
||||
</div>
|
||||
<div class="actions">
|
||||
<div class="ui ok green button">OK</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
const STORE = 'uaparserjs';
|
||||
const form = document.getElementById('signupForm');
|
||||
const loadingMessage = document.getElementById('loader');
|
||||
const formUrl = `https://${STORE}.lemonsqueezy.com/email-subscribe/external`;
|
||||
const redirectUrl = 'https://uaparser.dev/cloud'; // Use your own URL here
|
||||
form.addEventListener('submit', async (e) => {
|
||||
e.preventDefault();
|
||||
showLoading();
|
||||
try {
|
||||
const response = await fetch(formUrl, {
|
||||
method: 'POST',
|
||||
body: new FormData(e.target),
|
||||
});
|
||||
if (!response.ok) {
|
||||
throw new Error("Subscription failed.");
|
||||
}
|
||||
$('#submission-modal').modal('setting', 'transition', 'vertical flip').modal('show');
|
||||
} catch (error) {
|
||||
alert(`Sorry, there was an issue: ${error}`);
|
||||
} finally {
|
||||
hideLoading();
|
||||
}
|
||||
});
|
||||
function showLoading() {
|
||||
form.querySelector('button').disabled = true;
|
||||
loadingMessage.style.display = 'block';
|
||||
}
|
||||
function hideLoading() {
|
||||
form.querySelector('button').disabled = false;
|
||||
loadingMessage.style.display = 'none';
|
||||
}
|
||||
$('#privacy-modal').modal('attach events', '#privacy-link', 'show');
|
||||
$('#terms-modal').modal('attach events', '#terms-link', 'show');
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
147
css/style.css
Normal file
@@ -0,0 +1,147 @@
|
||||
html {
|
||||
scroll-behavior: smooth;
|
||||
}
|
||||
code,
|
||||
.code {
|
||||
font-family: 'Source Code Pro', 'Courier New', Courier, monospace;
|
||||
}
|
||||
strong.subtle{
|
||||
color: rgba(0, 0, 0, 0.7)
|
||||
}
|
||||
.hljs-punctuation, .hljs-tag {
|
||||
color: rgba(255, 255, 255, 0.3);
|
||||
}
|
||||
.ui.horizontal.divider {
|
||||
margin: 3rem 0 2rem;
|
||||
}
|
||||
.hidden.menu {
|
||||
display: none;
|
||||
}
|
||||
.masthead a h1 {
|
||||
color: #fff;
|
||||
font-weight: bold;
|
||||
font-size: 5rem;
|
||||
padding: 2em 0 0 0;
|
||||
}
|
||||
.masthead h2 {
|
||||
font-weight: normal;
|
||||
margin: 0 0 2em 0;
|
||||
}
|
||||
.masthead.inverted.segment {
|
||||
background-color: #6435c9;
|
||||
padding: 0;
|
||||
}
|
||||
.masthead.segment {
|
||||
min-height: 600px;
|
||||
padding: 1em 0em;
|
||||
}
|
||||
.masthead .ui.menu .ui.button {
|
||||
margin-left: 0.5em;
|
||||
}
|
||||
.masthead h3 {
|
||||
background-color: black;
|
||||
padding: 42.5vh 0;
|
||||
font-size: 5rem;
|
||||
}
|
||||
|
||||
.masthead .ui.horizontal.divider {
|
||||
padding: 3em;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.masthead .ui.massive.buttons {
|
||||
margin: 2rem 0 5rem;
|
||||
}
|
||||
|
||||
#featured .segment::before,
|
||||
#featured .segment::after,
|
||||
#featured .segment {
|
||||
background: #ffffeb;
|
||||
}
|
||||
|
||||
#featured h1 .headline {
|
||||
font-family: "EB Garamond", "Source Sans Pro", "Helvetica Neue", Arial, Helvetica, sans-serif;
|
||||
font-size: 3rem;
|
||||
font-weight: 400;
|
||||
letter-spacing: -.05em;
|
||||
line-height: .85;
|
||||
}
|
||||
|
||||
.instagram.masthead.inverted.segment {
|
||||
background: #6435c9;
|
||||
background-image: linear-gradient(to left top, #6435c9, #7143d0, #7e51d6, #8a5edd, #966ce3);
|
||||
box-shadow: 0px 3px 10px rgba(0,0,0,.25);
|
||||
}
|
||||
.instagram.footer.inverted.segment {
|
||||
background: #6435c9;
|
||||
background-image: linear-gradient(to right bottom, #6435c9, #7143d0, #7e51d6, #8a5edd, #966ce3);
|
||||
box-shadow: 0px 3px 10px rgba(0,0,0,.25);
|
||||
}
|
||||
.ui.image.illustration {
|
||||
width:1000px;
|
||||
}
|
||||
.ui.vertical.stripe {
|
||||
padding: 8em 0em;
|
||||
}
|
||||
.ui.vertical.stripe h3 {
|
||||
font-size: 2em;
|
||||
}
|
||||
.ui.vertical.stripe .button + h3,
|
||||
.ui.vertical.stripe p + h3 {
|
||||
margin-top: 3em;
|
||||
}
|
||||
.ui.vertical.stripe .floated.image {
|
||||
clear: both;
|
||||
}
|
||||
.ui.vertical.stripe p {
|
||||
font-size: 1.33em;
|
||||
}
|
||||
.ui.vertical.stripe .horizontal.divider {
|
||||
margin: 3em 0em;
|
||||
}
|
||||
.quote.stripe.segment {
|
||||
padding: 0em;
|
||||
}
|
||||
.quote.stripe.segment .grid .column {
|
||||
padding-top: 5em;
|
||||
padding-bottom: 5em;
|
||||
}
|
||||
|
||||
.footer.segment {
|
||||
padding: 5em 0em;
|
||||
}
|
||||
|
||||
.footer p {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.secondary.pointing.menu .toc.item {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 700px) {
|
||||
.ui.fixed.menu {
|
||||
display: none !important;
|
||||
}
|
||||
.secondary.pointing.menu .item,
|
||||
.secondary.pointing.menu .menu {
|
||||
display: none;
|
||||
}
|
||||
.secondary.pointing.menu .toc.item {
|
||||
display: block;
|
||||
}
|
||||
#demo-result > .row > .column,
|
||||
#showcase .ui.stackable.grid > .row > .column {
|
||||
width: 33.3% !important;
|
||||
}
|
||||
.masthead h3 {
|
||||
font-size: 2em;
|
||||
}
|
||||
}
|
||||
|
||||
.what-provides {
|
||||
font-size: 1rem;
|
||||
font-weight: bold;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.05em;
|
||||
}
|
||||
1
dist/ua-parser.html
vendored
@@ -1 +0,0 @@
|
||||
<script src="./ua-parser.min.js"></script>
|
||||
4
dist/ua-parser.min.js
vendored
4
dist/ua-parser.pack.js
vendored
8
images/Flow-symbol.svg
Normal file
@@ -0,0 +1,8 @@
|
||||
<svg width="187" height="187" viewBox="0 0 187 187" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect y="-0.00576019" width="187" height="187" rx="40" fill="#1A1A1A"/>
|
||||
<path d="M48.1303 41.598C46.1328 41.598 44.2093 42.3748 42.8037 43.7804C41.361 45.1861 40.5842 47.1096 40.5842 49.0701V137.848C40.5842 138.847 40.7692 139.808 41.1391 140.733C41.509 141.658 42.0639 142.472 42.7667 143.174C43.4695 143.877 44.2833 144.432 45.2081 144.802C46.1328 145.172 47.0946 145.357 48.0933 145.357C50.0908 145.357 52.0144 144.58 53.42 143.174C54.8257 141.769 55.6395 139.882 55.6395 137.885V49.0701C55.6395 47.0726 54.8626 45.1861 53.42 43.7804C52.0144 42.3748 50.0908 41.598 48.0933 41.598H48.1303Z" fill="#FFFFEB"/>
|
||||
<path d="M93.4069 58.5766C92.4081 58.5766 91.4464 58.7615 90.5216 59.1314C89.5968 59.5014 88.783 60.0562 88.0802 60.759C87.3774 61.4619 86.8225 62.2757 86.4526 63.2004C86.0827 64.1252 85.8608 65.0869 85.8608 66.0487V120.166C85.8608 122.164 86.6376 124.05 88.0802 125.456C89.4859 126.861 91.4094 127.638 93.4069 127.638C95.4044 127.638 97.3279 126.861 98.7336 125.456C100.139 124.05 100.953 122.164 100.953 120.166V66.0487C100.953 64.0512 100.176 62.1647 98.7336 60.759C97.3279 59.3534 95.4044 58.5766 93.4069 58.5766Z" fill="#FFFFEB"/>
|
||||
<path d="M70.7647 89.1309C68.7672 89.1309 66.8437 89.9077 65.4381 91.3134C64.0324 92.719 63.2186 94.6056 63.2186 96.6031V127.453C63.2186 129.451 63.9954 131.337 65.4381 132.743C66.8437 134.149 68.7672 134.925 70.7647 134.925C72.7622 134.925 74.6858 134.149 76.0914 132.743C77.497 131.337 78.3108 129.451 78.3108 127.453V96.6031C78.3108 94.6056 77.534 92.719 76.0914 91.3134C74.6858 89.9077 72.7622 89.1309 70.7647 89.1309Z" fill="#FFFFEB"/>
|
||||
<path d="M138.686 41.598C137.687 41.598 136.725 41.7829 135.8 42.1528C134.876 42.5227 134.062 43.0776 133.359 43.7804C132.656 44.4832 132.101 45.297 131.731 46.2218C131.361 47.1466 131.14 48.1083 131.14 49.0701V137.848C131.14 139.845 131.916 141.732 133.359 143.137C134.765 144.543 136.688 145.32 138.686 145.32C140.683 145.32 142.607 144.543 144.012 143.137C145.418 141.732 146.232 139.845 146.232 137.848V49.0701C146.232 47.0726 145.455 45.1861 144.012 43.7804C142.607 42.3748 140.683 41.598 138.686 41.598Z" fill="#FFFFEB"/>
|
||||
<path d="M116.043 89.1309C114.046 89.1309 112.122 89.9077 110.717 91.3134C109.311 92.719 108.497 94.6056 108.497 96.6031V127.453C108.497 129.451 109.274 131.337 110.717 132.743C112.122 134.149 114.046 134.925 116.043 134.925C118.041 134.925 119.964 134.149 121.37 132.743C122.776 131.337 123.59 129.451 123.59 127.453V96.6031C123.59 94.6056 122.813 92.719 121.37 91.3134C119.964 89.9077 118.041 89.1309 116.043 89.1309Z" fill="#FFFFEB"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
10
images/attrs.txt
Normal file
@@ -0,0 +1,10 @@
|
||||
image sources:
|
||||
======================
|
||||
http://iconfinder.com
|
||||
http://iconarchive.com
|
||||
http://wikimedia.org
|
||||
http://distrowatch.com
|
||||
https://github.com/alrra/browser-logos
|
||||
https://www.flaticon.com/
|
||||
https://logo.wine/
|
||||
https://icon-icons.com/
|
||||
BIN
images/bots-traffic.png
Normal file
|
After Width: | Height: | Size: 823 KiB |
BIN
images/browsers/360 secure.png
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
images/browsers/amigo.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
images/browsers/android browser.png
Normal file
|
After Width: | Height: | Size: 73 KiB |
BIN
images/browsers/aol explorer.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
images/browsers/arora.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
images/browsers/avant.png
Normal file
|
After Width: | Height: | Size: 268 KiB |
BIN
images/browsers/avast secure browser.png
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
images/browsers/avg secure browser.png
Normal file
|
After Width: | Height: | Size: 110 KiB |
BIN
images/browsers/axis.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
images/browsers/baidu.png
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
images/browsers/basilisk.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
images/browsers/beaker.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
images/browsers/bezilla.png
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
images/browsers/brave.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
images/browsers/browsh.png
Normal file
|
After Width: | Height: | Size: 3.4 KiB |
BIN
images/browsers/camino.png
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
images/browsers/chrome headless.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
images/browsers/chrome webview.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
images/browsers/chrome.png
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
images/browsers/chromecast.png
Normal file
|
After Width: | Height: | Size: 61 KiB |
BIN
images/browsers/chromium.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
images/browsers/co rom.png
Normal file
|
After Width: | Height: | Size: 45 KiB |
BIN
images/browsers/coast.png
Normal file
|
After Width: | Height: | Size: 4.9 KiB |
BIN
images/browsers/coc coc.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
images/browsers/cruz.png
Normal file
|
After Width: | Height: | Size: 60 KiB |
BIN
images/browsers/default.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
images/browsers/dolphin.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
images/browsers/edge.png
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
images/browsers/electron.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
images/browsers/epic.png
Normal file
|
After Width: | Height: | Size: 57 KiB |
BIN
images/browsers/epiphany.png
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
images/browsers/facebook.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
images/browsers/falkon.png
Normal file
|
After Width: | Height: | Size: 29 KiB |
BIN
images/browsers/fennec.png
Normal file
|
After Width: | Height: | Size: 45 KiB |
BIN
images/browsers/firebird.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
images/browsers/firefox focus.png
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
images/browsers/firefox.png
Normal file
|
After Width: | Height: | Size: 37 KiB |
BIN
images/browsers/flock.png
Normal file
|
After Width: | Height: | Size: 59 KiB |
BIN
images/browsers/geckoview.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
images/browsers/hermes.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
images/browsers/icab.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
images/browsers/iceape.png
Normal file
|
After Width: | Height: | Size: 53 KiB |
BIN
images/browsers/icecat.png
Normal file
|
After Width: | Height: | Size: 68 KiB |
BIN
images/browsers/iceweasel.png
Normal file
|
After Width: | Height: | Size: 51 KiB |
BIN
images/browsers/ie.png
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
images/browsers/instagram.png
Normal file
|
After Width: | Height: | Size: 234 KiB |
BIN
images/browsers/jsdom.png
Normal file
|
After Width: | Height: | Size: 9.6 KiB |
BIN
images/browsers/k-meleon.png
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
images/browsers/konqueror.png
Normal file
|
After Width: | Height: | Size: 33 KiB |
BIN
images/browsers/line.png
Normal file
|
After Width: | Height: | Size: 54 KiB |
BIN
images/browsers/links.png
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
BIN
images/browsers/maxthon.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
images/browsers/midori.png
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
images/browsers/miui.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
images/browsers/mobile safari.png
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
images/browsers/mosaic.png
Normal file
|
After Width: | Height: | Size: 47 KiB |
BIN
images/browsers/mozilla.png
Normal file
|
After Width: | Height: | Size: 4.6 KiB |
BIN
images/browsers/netscape.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
images/browsers/netsurf.png
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
images/browsers/nokia browser.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
images/browsers/nw.js.png
Normal file
|
After Width: | Height: | Size: 54 KiB |
BIN
images/browsers/oculus browser.png
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
images/browsers/omniweb.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
images/browsers/opera mini.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
images/browsers/opera mobi.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
images/browsers/opera neon.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
images/browsers/opera touch.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
images/browsers/opera.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
images/browsers/orca.png
Normal file
|
After Width: | Height: | Size: 67 KiB |
BIN
images/browsers/otter.png
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
images/browsers/palemoon.png
Normal file
|
After Width: | Height: | Size: 76 KiB |
BIN
images/browsers/phantomjs.png
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
images/browsers/puffin.png
Normal file
|
After Width: | Height: | Size: 41 KiB |
BIN
images/browsers/qq.png
Normal file
|
After Width: | Height: | Size: 323 KiB |