DC_time_updated

Display DC's date, hour, min & sec on top of the screen.

目前為 2015-07-16 提交的版本,檢視 最新版本

// ==UserScript==
// @name		DC_time_updated
// @author		Ianouf, Ladoria
// @version		0.3
// @grant       none
// @description	Display DC's date, hour, min & sec on top of the screen.
// @match		http://www.dreadcast.net/Main
// @copyright	2015+, Ladoria
// @namespace InGame
// ==/UserScript==

var server_date = undefined;
var old_server_date = undefined;
var handled_seconds = 0;
var first_sync = true;

var debugDeck  = true;

$(document).ready( function() {
	// All glory to Ianouf
	//Affichage de la date
	$('#bandeau ul.menus').eq(0)
		.prepend('<li id="affichageDateDC" class="couleur5" ></li>'
				+'<li class="separator"></li>'
				+'<li id="affichageDate" class="couleur5" ></li>'
				+'<li class="separator"></li>');
	// End of glory
	
	// Get and store the server date
	$(document).ajaxComplete( function(a,b,c) {
		server_date = new Date(b.getResponseHeader('Date'));
		
		if(first_sync)
			old_server_date = server_date;
		
		first_sync = false;
	});

	// Display DC's server date
	function handle_DC_date() {
		if(undefined == server_date)
			return;
		
		// server_date's refreashing all 3s, need to handle secondes between refreahs.
		if(server_date.getTime() != old_server_date.getTime()) {
			old_server_date = server_date;
			
			handled_seconds = 0;
		}
		else
			handled_seconds++;
		
		var server_seconds = server_date.getSeconds() + handled_seconds;
		// seconds handled.
		
		
		// display hour & DC's date
		date_to_display = new Date(server_date.getTime());
		date_to_display.setSeconds(server_seconds);
		
		// All glory to Ianouf
		$('#affichageDate').html(date_to_display.toLocaleString());
		$('#affichageDateDC').html(get_DC_date(server_date));
		// End of glory
	}
	
	// All glory to Ianouf
	// input : Date
	function get_DC_date(date) {
		var server_day = date.getDate();
		var server_month = date.getMonth() + 1; // 0-11
		var server_year = date.getYear() - 100;
		
		var dc_hep = Math.floor(server_day / 7) + 1; //heptade 
		var dc_day = (server_day % 7);              //jour de l'heptade 
		var dc_year = 70 + (server_year * 12) + server_month;   //année, basé sur le fait que janvier 2000 est l'an 70 de DC.
		
		//le jour 0 est plutot le dernier jour de l'heptade précédente!
		if (dc_day == 0) {
			dc_hep--;
			dc_day=7;
		}
		
		return dc_day+'/'+dc_year+'.'+dc_hep;
	}
	// End of glory
	
	// input format : ddmmyyyy
	// throw dummy exception
	function cast_date(text) {
		var date;
		
		var day = text.substring(0,2);
		var month = text.substring(2,4) - 1; // 0-11
		var year = text.substring(4);
		
		if(isNaN(day) || isNaN(month) || isNaN(year)
			|| day > 31 || month > 11 || year.length != 4)
			throw true;
		
		date = new Date(year, month, day, 0, 0, 0, 0);
	
		return date;
	}
	
	// Uunimplemented
	// input format : x/xxx.x whatever those x can mean
	function get_date_form_DC(date) {
		return "unimplemented";
	}
	
	handle_DC_date();
	setInterval(function() { handle_DC_date(); }, 1000);

	// CommandLine 'Object'
	var CommandLine_DC_time = function (command_line) {
		this.command_line = command_line;		
		this.argument = '';
		this.parameter = '';
		
		if(/\-/gi.test(command_line)) { // argument given
			this.argument = command_line.trim().split("-")[1];
			
			if(/ /gi.test(this.argument)) { // parameter given
				this.argument = command_line.trim().split("-")[1].split(" ")[0];
				this.parameter = command_line.trim().split("-")[1].split(" ")[1];
			}
		}
		
		this.enabledArguments = ['d', // display converted standard date to DC's date
								't', // display converted DC's date to standard date
								'a']; // display the manual

		// processing the command
		// input : Deck object
		this.execute = function(deck) {
			switch (this.argument) {
				case '' : // display DC's server date
					var deckLine = Deck.getHTMLElementLineTab(["span", "armakit", get_DC_date(server_date)]);
					
					deck.putResultsLines([deckLine]);
					break;
				case 'd' : // display converted standard date to DC's date
					var date;
					
					try {
						date = get_DC_date(cast_date(this.parameter));
					}
					catch (e) {
						date = 'Date ancienne invalide (ddmmyyyy) dd : 00 - 31, mm 00 - 12, yyyy : 0000 - 9999';
					}
					
					var deckLine = Deck.getHTMLElementLineTab(["span", "armakit", date]);
					
					deck.putResultsLines([deckLine]);
					break;
				case 't' : // display converted DC's date to standard date
					var deckLine = Deck.getHTMLElementLineTab(["span", "armakit", get_date_form_DC(this.parameter)]);
					
					deck.putResultsLines([deckLine]);
					break;
				default : // display the manual
					deck.putResultsLines(this.getManualLines());
					break;
			}
		};
		
		this.getManualLines = function() {
			manualLines = new Array();
			manualLines[manualLines.length] = Deck.getHTMLElementLineTab(["span", "armakit","*** Aide ***"]);
			
			manualLines[manualLines.length] = Deck.getHTMLElementLineTab(
				["span", "armakit","- Commande : "],
				["span", "armakit important_data","date"],
				["span", "armakit"," [- d | t | a]"]);
		
			manualLines[manualLines.length] = Deck.getHTMLElementLineTab(
				["span", "armakit", "- "],
				["span", "armakit important_data", "d"],
				["span", "armakit", " : Convertir une "],
				["span", "armakit important_data", "D"],
				["span", "armakit", "-ate ancienne."]);
			
			manualLines[manualLines.length] = Deck.getHTMLElementLineTab(
				["span", "armakit", "- "],
				["span", "armakit important_data", "t"],
				["span", "armakit", " : Convertir un point "],
				["span", "armakit important_data", "T"],
				["span", "armakit", "-emporel Impérial."]);
			
			manualLines[manualLines.length] = Deck.getHTMLElementLineTab(
				["span", "armakit", "- "],
				["span", "armakit important_data", "a"],
				["span", "armakit", " : Afficher l'"],
				["span", "armakit important_data", "A"],
				["span", "armakit", "-ide."]);
					
			return manualLines;
		};
	}

	var Deck = function (id) {
		this.id = id;

		// Use it with result of Deck.getHTMLElementLineTab() (see below)
		// input : lines[]
		this.putResultsLines = function (lines) {
			for(var i = 0; i < lines.length; i++) {
				var resultsDiv = document.createElement('div');
				resultsDiv.className = "ligne_resultat_fixed";
				
				for(var j = 0; j < lines[i].length; j++) {
					var domElement = document.createElement(lines[i][j]['type']);
					
					domElement.className = lines[i][j]['class'];
					domElement.appendChild(document.createTextNode(lines[i][j]['text']));
					resultsDiv.appendChild(domElement);
				}

				$("#" + this.id).find(".zone_ecrit").last().append(resultsDiv);
			}
		}
	}

	// Start to fuck the DOM
	// DO NOT USE, NEVER, I WARNED YOU FOOL
	Deck.getHtmlElementTab = function(type, elementClass, text) {
		anElement = new Array();
		anElement["type"] = type;
		anElement["class"] = elementClass;
		anElement["text"] = text;
		
		return anElement;
	}

	// input : [ [type_of_dom_element, class, text_node], ... ]
	Deck.getHTMLElementLineTab = function() {
		var lineTab = new Array();
		for(var i = 0; i < arguments.length; i++) {
			lineTab[lineTab.length] = Deck.getHtmlElementTab(arguments[i][0],arguments[i][1],arguments[i][2]);
		}
		
		return lineTab;
	}
	// Dom fucked
	
	$(document).ajaxComplete( function(a,b,c) {
		// Get and store the server date
		server_date = new Date(b.getResponseHeader('Date'));
		
		if(first_sync)
			old_server_date = server_date;
		
		first_sync = false;
	
		// Handle custom deck command
		if(/Command/.test(c.url)) {
			var deckId = 'db_deck_' + c.data.match(/[0-9]*$/)[0];	
			var commandLine_text = $('#' + deckId + ' .ligne_ecrite_fixed').last().find('input').val();
			
			// Handle Date command
			if(/date/gi.test(commandLine_text)) {
				// Bind Command and Deck objects
				var deck = new Deck(deckId);				
				var commandLine = new CommandLine_DC_time(commandLine_text);
				
				commandLine.execute(deck);
			}
		}
	});
});
console.log('DC - Time Updated started');

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址