您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Add Ultivids note taking to Ultiworld videos
当前为
- // ==UserScript==
- // @name UltividsWorld
- // @namespace https://ultivids.com
- // @version 0.1.2
- // @description Add Ultivids note taking to Ultiworld videos
- // @author Rui Da Costa
- // @match https://ultiworld.com/video/*
- // @icon https://www.google.com/s2/favicons?sz=64&domain=ultivids.com
- // @grant none
- // @license MIT
- // ==/UserScript==
- (function() {
- 'use strict';
- let ultividsFrame;
- window.ultividsQuickNote = (data) => {
- muxReady().then(muxVideo => {
- if(ultividsFrame){
- const args = {
- name: 'newNote',
- value: muxVideo.currentTime
- }
- ultividsFrame.contentWindow.postMessage(args, 'https://ultivids.com');
- }
- });
- }
- window.ultividsStartNote = (data) => {
- muxReady().then(muxVideo => {
- if(ultividsFrame){
- const args = {
- name: 'startNote',
- value: muxVideo.currentTime
- }
- ultividsFrame.contentWindow.postMessage(args, 'https://ultivids.com');
- }
- });
- }
- window.ultividsEndNote = (data) => {
- muxReady().then(muxVideo => {
- if(ultividsFrame){
- const args = {
- name: 'endNote',
- value: muxVideo.currentTime
- }
- ultividsFrame.contentWindow.postMessage(args, 'https://ultivids.com');
- }
- });
- }
- window.ultividsGoTo = (data) => {
- muxReady().then(muxVideo => {
- if(data.time) muxVideo.currentTime = data.time;
- if(muxVideo.paused) muxVideo.play();
- })
- }
- window.ultividsForward = (data) => {
- muxReady().then(muxVideo => {
- muxVideo.currentTime = muxVideo.currentTime + (data.time ? data.time : 10);
- })
- }
- window.ultividsReverse = (data) => {
- muxReady().then(muxVideo => {
- muxVideo.currentTime = muxVideo.currentTime - (data.time ? data.time : 10);
- })
- }
- window.ultividsClose = (data) => {
- muxReady().then(muxVideo => {
- if (document.fullscreenElement) {
- document.exitFullscreen().then(() => {
- closeUltivids();
- });
- }
- });
- }
- const onTimeUpdate = (event) => {
- const muxVideo = document.getElementsByTagName('mux-player')[0];
- const args = {
- name: 'timeupdate',
- value: muxVideo.currentTime
- }
- ultividsFrame.contentWindow.postMessage(args, 'https://ultivids.com');
- }
- const muxReady = () => {
- return new Promise(res => {
- if(document.getElementsByTagName('mux-player').length > 0){
- res(document.getElementsByTagName('mux-player')[0]);
- }
- else {
- setTimeout(() => {
- muxReady().then((player) => { res(player); })
- }, 500)
- }
- })
- }
- const setStyles = (elem, styles) => {
- Object.keys(styles).forEach(key => {
- elem.style[key] = styles[key];
- });
- }
- const exitFullscreen = (event) => {
- if (!document.fullscreenElement) {
- closeUltivids();
- }
- }
- const closeUltivids = () => {
- const muxVideo = document.getElementsByTagName('mux-player')[0];
- ultividsFrame.remove();
- const shareDiv = document.getElementsByClassName('video-share')[0];
- const section = document.getElementsByClassName('reference-section')[0];
- setStyles(shareDiv, { display: 'block' });
- setStyles(muxVideo, { width: 'auto'});
- setStyles(section, { display: 'block' });
- muxVideo.removeEventListener('timeupdate', onTimeUpdate, false);
- }
- muxReady().then((muxVideo) => {
- const onMessage = (event) => {
- // Check sender origin to be trusted
- if (event.origin !== "https://ultivids.com") return;
- var data = event.data;
- if (typeof(window[data.func]) == "function") {
- window[data.func].call(null, data);
- }
- }
- if (window.addEventListener) {
- window.addEventListener("message", onMessage, false);
- }
- else if (window.attachEvent) {
- window.attachEvent("onmessage", onMessage, false);
- }
- muxVideo.addEventListener('timeupdate', onTimeUpdate, false);
- const shareDiv = document.getElementsByClassName('video-share')[0];
- const ultividsButton = document.createElement('button');
- ultividsButton.innerText = 'Open Ultivids';
- setStyles(ultividsButton, {
- margin: '5px 10px',
- border: '0',
- backgroundColor: '#000',
- color: '#fff',
- borderRadius: '5px',
- height: '36px',
- padding: '0 15px',
- fontSize: '14px',
- top: '.5px',
- position: 'relative'
- });
- document.addEventListener("fullscreenchange", exitFullscreen, false);
- shareDiv.prepend(ultividsButton);
- ultividsButton.addEventListener("click", (event) => {
- let uwUser = -1;
- const section = document.getElementsByClassName('reference-section')[0];
- ultividsFrame = document.createElement('iframe');
- const splits = window.location.href.split('/');
- const videoId = splits[splits.findIndex(item => item == 'video') + 1];
- ultividsFrame.src = `https://ultivids.com/ultiworld/${uwUser}/${videoId}`;
- setStyles(section, {
- display: 'flex',
- 'flex-direction': 'row'
- });
- section.append(ultividsFrame);
- const width = '18rem';
- setStyles(ultividsFrame, {
- width: width,
- border: 0
- })
- setStyles(shareDiv, { display: 'none' });
- setStyles(muxVideo, { width: `calc(100% - ${width})`});
- section.requestFullscreen();
- });
- });
- })();