diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 00000000..71299c96 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,42 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: '' +assignees: '' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**Version tested** +Which version of AblePlayer are you reporting against? + - Main (the current release) + - Develop (the next release) + - A specific branch other than main or develop. + +**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] + +**Smartphone (please complete the following information):** + - Device: [e.g. iPhone6] + - OS: [e.g. iOS8.1] + - Browser [e.g. stock browser, safari] + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/docs_existing.md b/.github/ISSUE_TEMPLATE/docs_existing.md new file mode 100644 index 00000000..f8f9f08b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/docs_existing.md @@ -0,0 +1,26 @@ +--- +name: Documentation (Existing) +about: Edits to existing documentation needed +title: '' +labels: '' +assignees: '' + +--- + +**URL** +page URL + +**Title** +Title of the existing documentation + +**What Needs Editing?** +Describe the steps using: +1. +2. +3. + +**Screenshots** +If applicable, add screenshots for the above steps + +**Additional context** +Add any other context. diff --git a/.github/ISSUE_TEMPLATE/docs_new.md b/.github/ISSUE_TEMPLATE/docs_new.md new file mode 100644 index 00000000..e0b5fce6 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/docs_new.md @@ -0,0 +1,26 @@ +--- +name: Documentation (New) +about: New documentation needed +title: '' +labels: '' +assignees: '' + +--- + +**Title** +Suggested title of the new documentation + +**Description** +Describe what the new page is about + +**Instruction Steps** +Describe the steps using: +1. +2. +3. + +**Screenshots** +If applicable, add screenshots for the above steps + +**Additional context** +Add any other context. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 00000000..bbcbbe7d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +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. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 00000000..628cfc07 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,26 @@ + + +## Description + + + +## How Has This Been Tested? + + + + +## Screenshots (jpeg or gifs if applicable): + +## Types of changes + + + + + +## Checklist: +- [ ] My code is tested. +- [ ] My code has proper inline documentation. diff --git a/Gruntfile.js b/Gruntfile.js index 44fb374a..afb191cd 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -4,6 +4,7 @@ module.exports = function (grunt) { grunt.loadNpmTasks("grunt-contrib-cssmin"); grunt.loadNpmTasks("grunt-contrib-clean"); grunt.loadNpmTasks("grunt-remove-logging"); + grunt.loadNpmTasks("grunt-decomment"); grunt.loadNpmTasks("grunt-contrib-jshint"); grunt.loadNpmTasks("grunt-terser"); @@ -102,6 +103,17 @@ module.exports = function (grunt) { // Remove all console output (see https://www.npmjs.com/package/grunt-remove-logging) }, }, + decomment: { + any: { + options: { + safe: true, + }, + files: { + "build/<%= pkg.name %>.dist.js": "build/<%= pkg.name %>.dist.js", + }, + + } + }, terser: { min: { files: { @@ -160,6 +172,7 @@ module.exports = function (grunt) { grunt.registerTask("default", [ "concat:build", "removelogging:dist", + "decomment", "terser:min", "cssmin", ]); diff --git a/LICENSE b/LICENSE index 32a7b851..916a0a8b 100644 --- a/LICENSE +++ b/LICENSE @@ -2,9 +2,9 @@ The MIT License (MIT) Copyright (c) 2014-2025 The Able Player Contributors -Able Player development is supported in part by The AccessComputing project, -with financial support from the National Science Foundation -(grant #CNS-0540615, CNS-0837508, and CNS-1042260); +Able Player development was supported in part by The AccessComputing project until 2025, +with financial support from the National Science Foundation +(grant #CNS-0540615, CNS-0837508, and CNS-1042260); and by the Committee on Institutional Cooperation (CIC). Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/README.md b/README.md index a2b80b21..ccebdf1d 100644 --- a/README.md +++ b/README.md @@ -25,9 +25,9 @@ - Features high contrast, scalable controls that remain visible in Windows High Contrast mode, plus an easy-to-see focus indicator so keyboard users can easily tell which control currently has focus. - Supports closed captions and subtitles in Web Video Timed Text (WebVTT) format, the standard format recommended by the HTML5 specification. - Supports chapters, also using WebVTT. Chapters are specific landing points in the video, allowing video content to have structure and be more easily navigated. -- Supports text-based audio description, also using WebVTT. At designated times, the description text is read aloud by browsers, or by screen readers for browsers that don't support the Web Speech API. Users can optionally set their player to pause when audio description starts in order to avoid conflicts between the description and program audio. +- Supports text-based audio description, also using WebVTT. At designated times, the description text is read aloud by browsers, or by screen readers for browsers that don't support the Web Speech API. Users can optionally set their player to pause when audio description starts to avoid conflicts between the description and program audio. - Supports audio description as a separate video. When two videos are available (one with description and one without), both can be delivered together using the same player and users can toggle between the versions. -- Supports adjustable playback rate. Users who need to slow down the video in order to better process and understand its content can do so; and users who need to speed up the video in order to maintain better focus can do so. +- Supports adjustable playback rate. Users who need to slow down the video to better process and understand its content can do so; and users who need to speed up the video to maintain better focus can do so. - Includes an interactive transcript feature, built from the WebVTT chapter, caption and description files as the page is loaded. Users can click anywhere in the transcript to start playing the video (or audio) at that point. Keyboard users can also choose to keyboard-enable the transcript, so they can tab through its content one caption at a time and press enter to play the media at the desired point. - Features automatic text highlighting within the transcript as the media plays. This feature is enabled by default but can be turned off if users find it distracting. - Supports YouTube and Vimeo videos. @@ -84,7 +84,7 @@ During development, *Able Player* is routinely tested with the latest versions o - Chrome - Firefox -With the release of version 4.4, we are no longer actively supporting Internet Explorer. +Since the release of version 4.4, we are no longer supporting Internet Explorer. ## Dependencies @@ -92,10 +92,10 @@ With the release of version 4.4, we are no longer actively supporting Internet E - *Able Player* uses [jQuery][]. Version 3.5.0 or higher is recommended. The example code below uses Google’s hosted libraries; no download required. -- *Able Player* uses [js-cookie][] to store and retrieve user - preferences in cookies. The example code below uses CDN’s hosted libraries; - no download required. Prior to version 2.3, Able Player used [jquery.cookie][] - for this same purpose. +- *Able Player* optionally can use [js-cookie][] to store and retrieve user + preferences in cookies. By default, preferences are stored in localStorage. + The example code below uses CDN’s hosted libraries; no download required. + All Able Player cookies are functional cookies. - *AblePlayer*, as of 4.5.1, requires the use of the DOMPurify sanitizing library. - The default files in the root of the `/build` directory have DOMPurify bundled in. - Alternatively, the `build/separate-dompurify` directory houses copies of the AblePlayer files with AblePlayer code only and a stand-alone copy of the current version of DOMPurify that the project is currently using. These files are available for those who want to load DOMPurify via a separate file or want to use a CDN hosted version. @@ -103,7 +103,6 @@ With the release of version 4.4, we are no longer actively supporting Internet E To install Able Player, copy the following files from the Able Player repo into a folder on your web server: - `build/*` - `button-icons/*` (optional, not required for svg) -- `images/*` - `styles/*` (optional, see note below) - `translations/*` - `LICENSE` @@ -137,9 +136,17 @@ Fallback content can be tested by adding the **data-test-fallback** attribute to Copy and paste the following code into your web page. This code applies to all use cases, both audio and video. +Able Player works with either jQuery or with the slim build of jQuery, which is about 6 KB smaller gzipped. + +Able Player does not require cookies, but you can add the js-cookie package to save preferences as cookies. Otherwise, preferences are saved in localStorage. + ```HTML - + +or + + + @@ -169,7 +176,7 @@ Copy and paste the following code into your web page, replacing the source files Copy and paste the following code into your web page, replacing the source files with the path to your own media files. Use both WebM and MP4 to ensure cross-browser compatibility, since some browsers don’t support MP4. ```HTML -