di.fm bookmarklet track history

di.fm bookmarklet to create a track history popup for current channel.

by Laurens Maneschijn

HTML

di.fm bookmarklet to create a track history popup for current channel.
<hr>
oneline for bookmarklet:<br>
<textarea>
javascript:(function($) {var streamlist = null;var trackhistory_per_channelid = {};function console_log(){if(console && console.log){console.log.apply(console, [].slice.call(arguments) );}}function console_table(){if(console && console.table){console.table.apply(console, [].slice.call(arguments) );}}function getChannel(){var channel = $.trim( $('#webplayer-region .channel-detail .channel-link .title').text() );if(!channel){channel = prompt('Could not find channel name. \nEnter channel name: \n(e.g. Electro Swing)', channel);}return channel;}function getChannelId(channel){function normalize(str){return (''+str).toLowerCase().replace(/[&]/g,'n').replace(/[^a-z0-9]/g,'');}var channel_normalize = normalize(channel);var channel_id = null;$.each(streamlist, function(i,item){var item_key = normalize(item.key);var item_name = normalize(item.name);if(channel_normalize == item_key || channel_normalize == item_name){channel_id = item.id;return false;}});return channel_id;}function getStreamList(callback_func, callback_args, callback_this){if(streamlist !== null){if(typeof callback_func === 'function'){if(!callback_this){callback_this = window;}if(!callback_args || !callback_args.length){callback_args = [];}callback_func.apply(callback_this, callback_args);}return streamlist;}console_log('...fetching streamlist...');$.ajax({url: 'https://listen.di.fm/streamlist',data: {},type: 'GET',dataType: 'json',success : function(data){console_log('streamlist result:');if(data){console_log(data);console_table(data);streamlist = data;window._trackhistory = window._trackhistory || {};window._trackhistory.streamlist = streamlist;getStreamList(callback_func, callback_args, callback_this);}},error : function(jqXHR, textStatus, errorThrown){console_log('streamlist error:');console_log(jqXHR, textStatus, errorThrown);}});}function getTrackHistory(channel_id, callback_func,...

JavaScript

// $.fn.jquery : '2.2.0'
// javascript:
(function($) {

	var streamlist = null;
	var trackhistory_per_channelid = {};

	function console_log(){
		if(console && console.log){
			console.log.apply(console, [].slice.call(arguments) );
		}
	}
	function console_table(){
		if(console && console.table){
			console.table.apply(console, [].slice.call(arguments) );
		}
	}

	function getChannel(){
		var channel = $.trim( $('#webplayer-region .channel-detail .channel-link .title').text() );
		if(!channel){
			channel = prompt('Could not find channel name. \nEnter channel name: \n(e.g. Electro Swing)', channel);
		}
		return channel;
	}

	function getChannelId(channel){
		function normalize(str){
			return (''+str).toLowerCase().replace(/[&]/g,'n').replace(/[^a-z0-9]/g,'');
		}
		var channel_normalize = normalize(channel);
		var channel_id = null;
		$.each(streamlist, function(i,item){
			var item_key = normalize(item.key);
			var item_name = normalize(item.name);
			if(channel_normalize == item_key || channel_normalize == item_name){
				channel_id = item.id;
				return false;
			}

		});
		return channel_id;
	}



	function getStreamList(callback_func, callback_args, callback_this){
		if(streamlist !== null){
			if(typeof callback_func === 'function'){
				if(!callback_this){callback_this = window;}
				if(!callback_args || !callback_args.length){callback_args = [];}
				callback_func.apply(callback_this, callback_args);
			}
			return streamlist;
		}

		// https://listen.di.fm/streamlist
		console_log('...fetching streamlist...');
		$.ajax({
			url: 'https://listen.di.fm/streamlist',
			data: {},
			type: 'GET',
			dataType: 'json',
			success : function(data){
				// id,key,name,playlist
				console_log('streamlist result:');
				if(data){
					console_log(data);
					console_table(data);
					streamlist = data;
					window._trackhistory = window._trackhistory || {};
					window._trackhistory.streamlist = streamlist;
					getStreamList(callback_func, callback_args,...