// ==UserScript== // @name 动车组交路查询 // @description 在 12306 订票页面上显示动车组型号与交路 // @author Arnie97 // @namespace https://github.com/Arnie97 // @homepageURL https://github.com/Arnie97/emu-tools // @match https://kyfw.12306.cn/otn/leftTicket/init // @grant GM_xmlhttpRequest // @grant GM_addStyle // @version 2018.02.10 // @downloadURL none // ==/UserScript== var patterns = { 'CRH1A-A型': /D7(1|2[01]|3)/, 'CRH2A型': /C29/, 'CRH5A型': /C(13|50)/, 'CRH6A型': /C7[679]|S1/, 'CRH6F型': /C(69|78)|D75[6-8]/, 'NDJ3型': /S[25]/ }; // Search the database function getTrainModel(code) { if ('GDCS'.indexOf(code[0]) == -1) { return; } for (var key in models) { var codes = models[key]; for (var i = codes.length; i >= 0; i--) { if (code == codes[i]) { return key; } } } for (var model in patterns) { if (code.match(patterns[model])) { return model; } } } // Beijing-Tianjin Intercity Railway function getIntercityTrainModel(code, obj) { if (!code.match(/C2[0-6]/)) { return; } var table_row = obj.parentNode.parentNode; var coach_class = table_row.childNodes[1].id; if (coach_class.match(/^SWZ_/)) { // Business Coach return 'CR400AF/BF型'; } else if (coach_class.match(/^TZ_/)) { // Premier Coach return 'CRH3C型'; } } // Patch items on the web page function showTrainModel(i, obj) { var code = $(obj).find('a.number').text(); var model = getTrainModel(code) || getIntercityTrainModel(code, obj); if (!model) { return false; } var url = 'https://moerail.ml/img/' + code + '.png'; var img = $('').attr('src', url).width(600).hide(); var link = $('').attr('onclick', '$(this).children().toggle()'); link.text(model).append(img); $(obj).find('.ls>span').replaceWith(link); return true; } // Iterate through the items function checkPage() { if (!$('#trainum').html()) { return; } var result = $('.ticket-info').map(showTrainModel); var count = result.length, sum = 0; result.each(function(i, x) { sum += x? 1: 0; }); console.log('EMU Tools:', count, 'checked,', sum, 'found'); } // Register the event listener function main(dom) { models = JSON.parse(dom.responseText); checkPage(); var observer = new MutationObserver(checkPage); observer.observe($('#t-list>table')[0], {childList: true}); } GM_xmlhttpRequest({ method: 'GET', url: 'https://moerail.ml/models.json', onload: main }); GM_addStyle('\ .ls {width: 120px !important;} \ .ticket-info {width: 400px !important;} \ ');