Yah's Evernote Audio Player

Simple Audio File player for Evernote shared notebooks

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name     	Yah's Evernote Audio Player
// @description Simple Audio File player for Evernote shared notebooks
// @version  	1.0
// @include	https://www.evernote.com/pub/*
// @require     http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js
// @namespace https://greasyfork.org/users/196900
// ==/UserScript==
//==========================================================================
// * It is important to include an early version of jQuery... < 3.0. We need .live()!
// 
// * Requirements:
//		1. Evernote account. Free version is fine, but it will take a looooong
//				 time to get many audio files uploaded due to the monthly limit.
//		2. Audio Files: MP3 are the only types supported in the script for now.
//		3. Greasemonkey or Tampermonkey installed.
//		4. Browser: Firefox has been tested.
//
// * How to use:
//		1. Create a Notebook in Evernote and Share it publically.
//		2. Create a note in the shared notebook to hold songs. You can create
//				 as many notes as you need.
//		3. Insert/upload audio files into the note. Arrange them in the order
//				 you want them to play. The Web interface works better for audio
//				 uploads in our experience but YMMV.
//		4. Install this script.
//		5. Browse to the notebook's public link.
//		6. If the initial note that is displayed has any audio files, the
//				 player automatically starts. If not, you can just click on a
//				 note to get the player to start. You will see it at the top in
//				 the center of the page.
//
// * Features:
//		* Loops all songs continuously
//		* Pause / Play
//		* Volume adjust
//
// * Working on:
//		* Hover over player to open up playlist and enable direct select.
//		* #Settings - Allow manually entering in #settings in note:
//				* Looping method (#loopall, #loopsingle, #random)
//		* Other file types (OGG, etc);
//
//==========================================================================
function audio_file_next(){
		L("audio_file_next()");
  	this.qty = $("#audio_files_qty").html();
  	this.current = $("#audio_files_current").html();
  	L("	var audio_files_current: " + this.current);
  	L("	var audio_files_qty: " + this.qty);

  	this.current++;
  	if (this.current > this.qty){ this.current = 1; }
  	$("#audio_files_current").html(this.current);
  	this.audio_file = $("#audio_file_" + this.current).html();
  	L("	audio_file: " + this.audio_file);

  	//Display the Song Title
  	this.song_title = decodeURIComponent(this.audio_file.split('/').pop().split('#')[0].split('?')[0]);
    $("#song_title").html(this.song_title);

    //Start playing
  	this.p = document.getElementById("audio_player");
  	this.p.src = this.audio_file;
  	this.p.play();
}
function audio_files_get(){
  	L("Audio_files_get()");
    //Cleanup
    $("#div_audio_player").remove();
    $("#div_audio_player_vars").remove();

    this.t =setTimeout( function(){
      //Grabbing page contents
      this.h = $(document.documentElement)[0].innerHTML;

      //Parsing page contents to extract MP3 files
      this.reg = /(https:\/\/)?(www)?[-a-zA-Z0-9@:%_\+.~#?\/=]+\.mp3/gi
      this.lastMatch = "";
      this.audio_files = [];
      while((this.result = reg.exec(this.h)) !== null) {
        if (this.result[0] != this.lastMatch){
          if (this.result[0].substring(0,5) == "https"){
            this.audio_files.push(result[0]);
            this.lastMatch = result[0];
          }
        }
      }
      //L(audio_files);

      L(audio_files.length);
      if (this.audio_files.length > 0){
        this.h = "";
        this.h += "<audio id='audio_player' controls>";
        this.h += "		<source src='' type='audio/mpeg'>";
        this.h += "		Your browser does not support the audio element.";
        this.h += "</audio>";

        $("#div_audio_player").remove();
        this.div_player = div_new("div_audio_player", 		 document.body,   this.h);
        this.div_vars =   div_new("div_audio_player_vars", document.body,   "", 1);
        this.t = 			    div_new("audio_files_current", 	 this.div_vars,   "0");
        this.t =          div_new("audio_files_qty", 		   this.div_vars,   this.audio_files.length.toString());
        this.t = 				  div_new("audio_files_list", 	 	 this.div_vars,   "");
        this.t =					div_new("song_title",						 this.div_player, "")
        //
        this.count = 0;
        this.audio_files.forEach((file) => {
          this.count++;
          $("#audio_files_list").append("<div id='audio_file_" + this.count + "'>" + file + "</div>");
        });

        //Play the first audio file
        audio_file_next();

        //Add event audio player listeners
        this.a = document.getElementsByTagName("audio")[0];
        this.a.addEventListener("ended", function(){
          L("ended!");
          audio_file_next();
        }, true);
      }
    }, 1000);
}
function css_add(){
		this.css = `
        #div_audio_player{
            background-color: black;
            border-radius: 5px;
            left: 600px;
            opacity: 0.8;
            position: absolute;
            text-align: center;
            top: 0px;
            z-index: 1000;
            }
        #song_title{
            color: white;
            font-family: Tahoma, Verdana, Segoe, sans-serif;
            font-size: 12px;
            font-weight: bolder;
            line-height: 20px;
            width: 270px;
        }
		`;
  	$('<style>'+ this.css +'</style>').appendTo(document.head);
}
function div_new(div_name, div_parent, html, invisible){
  	L("div_new(" + div_name + ", " + div_parent + ", " + html + ")");
  	this.div = document.createElement("div");
  	this.div.id = div_name;
  	this.div.innerHTML = html;
  	if (invisible == 1){ this.div.style.visibility = "hidden"; }
  	div_parent.appendChild(this.div);
  	return this.div;
}
function L(logStr){
  	console.log(logStr);
}

//===================== Main =====================
(function() {
  	//Add CSS
  	css_add();

    //Get rid of the annoying popup
		this.t = setTimeout( function(){
				$("#gwt-debug-arrowDialog").remove();
      	audio_files_get();		//Check for audio files in the initial note
		}, 2000);

    //Action after click on noteSnippet
    $( ".noteSnippet" ).live( "click", function() {
      	L( "User clicked on noteSnippet" );
        audio_files_get();
    });
})();