Yah's Evernote Audio Player

Simple Audio File player for Evernote shared notebooks

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

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

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 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();
    });
})();