1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/yaozongchao-Stock-Reminder

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
kengoo.js 13 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
姚宗超 Отправлено 27.01.2015 13:46 55a4de3
KL = {};KL.KENGOO = {};KL.KENGOO.POPUP = {};KL.KENGOO.BACKGROUND = {};KL.KENGOO.OPTION = {};/* * Utility */Utility = { config: { loadSetting: function(){ if (!localStorage['config']) { // localStorage['config'] = '{"600362":{"name":"江西铜业","notify":{"volume":2,"price":16.9}},"601933":{"name":"永辉超市","notify":{}}}'; return {}; } return $.parseJSON(localStorage['config']); }, saveSetting: function(setting){ localStorage['config'] = $.toJSON(setting); }, setReminder: function(stkid, type, operand, value){ var c = Utility.config.loadSetting(); c[stkid]['notify'][type] = operand * value; Utility.config.saveSetting(c); }, getList: function(){ var currentConfig = Utility.config.loadSetting(); var clist = []; $.each(currentConfig, function(key, value){ clist.push(key); }); return clist; }, composeTooltip: function(name, price, change) { var len = 5 - name.length; for (var i = 0; i < len; ++i){ name += " "; } price = price + ''; len = 7 - price.length; for (var i = 0; i < len; i++){ price += ' '; } change = change + ''; len = 7 - change.length; for (var i = 0; i < len; i ++){ change + ' '; } return name + "\t" + price + "\t" + change; } }, validate: { acceptableCode: [8, 46, 37, 39, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106], isNumber: function(n) { return !isNaN(parseFloat(n)) && isFinite(n); }, isNumericKeyCode: function(keyCode){ // back, delete, number-pad // for (idx in Utility.validate.acceptableCode){ // if (keyCode == Utility.validate.acceptableCode[idx]){ // return ture; // } // } // if(!Utility.validate.isNumber(String.fromCharCode(keyCode))){ // return false; // } return true; } }, chrome: { updateTooltip: function(parser) { var tooltip = ""; $.each(parser.config.getConfigList(), function(i, v){ if (!parser.stocks[i]) { return; } var formalized = Utility.config.composeTooltip(parser.stocks[i].name, parser.stocks[i].current, parser.stocks[i].percentage); tooltip += formalized + "\n"; // tooltip += (parser.stocks[i].name + "\t" + parser.stocks[i].current + "\t" + parser.stocks[i].percentage + "\n"); }); chrome.browserAction.setTitle({title:tooltip}); }, showNotify: function(id, icon, title, message) { var opt = { type: "basic", title: title, message: message, iconUrl: 'images/icon48.png' }; chrome.notifications.create('id'+id, opt, function() { }); } }};/* * Widget for popup */KL.KENGOO.POPUP.StockList = function(renderTo) { this.base = $('<table cellspacing="0" cellpadding="0">'); this.rows = {}; this.columns = ['id', 'time', 'now', 'diff', 'volume', 'yesterday', 'open', 'dayhigh', 'daylow']; this.header = [ '名称', '交易日期', '当前价', // '涨跌幅', // '成交量', // '昨日收盘价', // '开盘价', // '最高价', // '最低价']; // renderTo.append(this.base); this.createCells = function(row, cells, append) { row.cells = {}; $.each(cells.id, function(idx, v){ var id = v; var value = cells.value[idx]; row.cells[id] = $('<td id="'+id+'">'); row.cells[id].html(value); if (append) { row.append(row.cells[id]); } }); } this.initPanel = function() { var tr = this.rows['header'] = $('<tr id="header">'); this.createCells(tr, {id: this.columns, value:this.header}, true); this.base.append(tr); } this.addStock = function(record) { var tr = null; var newRow = false; if (this.rows[record.code]) { tr = this.rows[record.code]; }else{ tr = this.rows[record.code] = $('<tr style="cursor:pointer;">'); newRow = true; // tr.click(function(){ // window.open("http://hq.sinajs.cn/list="+record.code); // }); } var percentage = record.percentage; var value = [record.code + '<br>' + record.name]; value.push(record.timestamp); value.push(record.current); value.push(record.percentage); value.push(record.volumn); value.push(record.yesterday); value.push(record.open); value.push(record.high); value.push(record.low); value[3] = (percentage + '%'); this.createCells(tr, {id: this.columns, 'value':value}, newRow); tr.attr('title', "news"); // Mark color for price trend tr.cells['diff'].removeClass('red'); tr.cells['diff'].removeClass('green'); if (parseFloat(record.diff) >= parseFloat(0)){ tr.cells['diff'].addClass('red'); }else{ tr.cells['diff'].addClass('green'); } if (newRow) { this.base.append(tr); } } this.renderList = function(){ if (!window.parser){ return; } $.each(window.parser.config.getConfigList(), function(i, v){ if (!window.parser.stocks[i]) { return; } window.stockPanel.addStock(window.parser.stocks[i]); }); Utility.chrome.updateTooltip(window.parser); } this.initPanel();}/* * Stock config widget */KL.KENGOO.OPTION.StockConfigList = function(renderTo){ this.base = $('<table cellspacing="0" cellpadding="0">'); this.rows = {}; renderTo.append(this.base); this.initPanel = function() { var tr = this.rows['header'] = $('<tr>'); this.createCells(tr, [ { id: 'id', value: '名称' }, { id: 'volume', value: '涨跌幅提醒' }, { id: 'price', value: '股价提醒' }, { id: 'delete', value: '删除' }], true); this.base.append(tr); } this.updateNotify = function(id, type) { var a = $("select#"+type+"_"+id+" option:selected").val(); var b = $("input#"+type+"_input_"+id).val(); Utility.config.setReminder(id, type, (a == 'lower')? -1 : 1, b); } this.createNotifyControl = function(cell, type, record) { var co = Utility.config.loadSetting(); cell.operator = $('<select id="'+type+'_'+record.id+'">'); cell.append(cell.operator); cell.operator.append($('<option value="lower">').text('小于')); cell.operator.append($('<option value="larger">').text('大于')); if (!co[record.id].notify) { co[record.id].notify = {}; } var op = (!co[record.id].notify)? 0 : (co[record.id].notify[type]? ((co[record.id].notify[type] > 0)? 1 : 0) : 0); cell.operator[0].selectedIndex = op; cell.value = $('<input id="'+type+'_input_'+record.id+'" class="'+type+'_input">'); cell.value.attr('value', co[record.id].notify[type]? Math.abs(co[record.id].notify[type]) : ''); cell.append(cell.value); var This = this; cell.operator.change(function(){ This.updateNotify(record.id, type); }); cell.value.bind('keydown', function(e){ return Utility.validate.isNumericKeyCode(e.keyCode); }); cell.value.bind('blur', function(e){ This.updateNotify(record.id, type); }); } this.createCells = function(row, cells, append) { row.cells = {}; $.each(cells, function(i, v){ row.cells[v.id] = $('<td id="'+v.id+'">'); row.cells[v.id].html(v.value); if (append) { row.append(row.cells[v.id]); } }); } this.addStock = function(record) { var tr = null; var newRow = false; if (this.rows[record.id]) { tr = this.rows[record.id]; }else{ tr = this.rows[record.id] = $('<tr>'); tr.attr('stkid', record.id); newRow = true; } this.createCells(tr, [ { id: 'id', value: record.id + '<br>' + record.name }, { id: 'volume', value: '' }, { id: 'price', value: '' }, { id: 'delete', value: '删除' }], newRow); this.createNotifyControl(tr.cells['volume'], 'volume', record); this.createNotifyControl(tr.cells['price'], 'price', record); // delete record handler var This = this; tr.cells['delete'].bind('click', function(){ var currentConfig = Utility.config.loadSetting(); delete currentConfig[record.id]; Utility.config.saveSetting(currentConfig); delete This.rows[record.id]; tr.remove(); }); if (newRow) { this.base.append(tr); } } this.showStocks = function(config) { $.each(config, function(key, value){ window._stockConfig.addStock({ 'id': key, 'name': value.name, 'notify': value.notify }); }); } this.addStockToStorage = function() { var config = Utility.config.loadSetting(); var count = 0; for (x in config) { if (count++ >= 6) { alert(chrome.i18n.getMessage('Error_AddStockUpperBound')); window._stockConfig.showStocks(config); return false; } } config[$('input[id=stk_id]').val()] = { id: $('input[id=stk_id]').val(), name: $('span[id=stk_name]').text(), notify: {} }; Utility.config.saveSetting(config); window._stockConfig.showStocks(config); } this.initPanel(); }KL.KENGOO.OPTION.InputPanel = function(){ var stkid = $('input[id=stk_id]'); this.tskid = stkid; $('input[id=stk_id]').keyup(function(event){ if ($('input[id=stk_id]').val().length == 0) { $('span[id=stk_name]').html(""); return; } if ($('input[id=stk_id]').val().length < 6) { return; } if (event.keyCode == '13') { return window._stockConfig.addStockToStorage(); } window.parser.getStockName($('input[id=stk_id]').val(), function(info){ if (!info.name) { return; } $('span[id=stk_name]').html(info.name); }); }); $('button[id=stk_add]').bind('click', function(){ window._stockConfig.addStockToStorage(); }); }KL.KENGOO.BACKGROUND.NotifyChecker = function(){ this.interval = 5 * 1000; // 150sec this.timer = null; var This = this; this.initTimer = function() { this.timer = window.setInterval(this.intervalHandler, this.interval); } this.intervalHandler = function() { This.checkPrice(window.parser); This.checkVolume(window.parser); } this.checkPrice = function(parser) { var setting = Utility.config.loadSetting(); var configList = Utility.config.getList(); $.each(configList, function(i, v){ if (!setting[v].notify.price) { return true; } if (!parser.stocks[i]) { return true; } var msg = ""; if (setting[v].notify.price > 0 && Math.abs(setting[v].notify.price) >= parser.stocks[i].current) { msg += ('当前价:'+ parser.stocks[i].current + ' ' + '<'+' 设定价:' + Math.abs(setting[v].notify.price)); // setting[v].notify.price = 0; // Utility.config.saveSetting(setting); } if (setting[v].notify.price > 0 && Math.abs(setting[v].notify.price) <= parser.stocks[i].current) { msg += ('当前价:'+ parser.stocks[i].current + ' ' + '>'+' 设定价:' + Math.abs(setting[v].notify.price)); // setting[v].notify.price = 0; // Utility.config.saveSetting(setting); } if (!msg) { return true; } Utility.chrome.showNotify(v, '', setting[v].name + '(' + v + ')', msg); }); } this.checkVolume = function(parser) { var setting = Utility.config.loadSetting(); var configList = Utility.config.getList(); $.each(configList, function(i, v){ if (!setting[v].notify.volume) { return true; } if (!parser.stocks[i]) { return true; } var msg = ""; if (setting[v].notify.volume > 0 && Math.abs(setting[v].notify.volume) <= parseInt(parser.stocks[i].percentage)) { msg += ('涨跌幅:'+ parser.stocks[i].percentage + ' ' + '>'+' ' + Math.abs(setting[v].notify.volume)); // setting[key].notify.volume = 0; // Utility.config.saveSetting(setting); } if (!msg) { return true; } Utility.chrome.showNotify(v, '', setting[v].name + '(' + v + ')', msg); }); } this.initTimer();}KL.KENGOO.OPTION.init = function() { // $("div[id=logo]").html(chrome.i18n.getMessage("extName")); window.parser = new DataParser({}); // create option page UI widget window._stockConfig = new KL.KENGOO.OPTION.StockConfigList($("div[id=description]")); var currentConfig = Utility.config.loadSetting(); window._stockConfig.showStocks(currentConfig); window._inputPanel = new KL.KENGOO.OPTION.InputPanel(); }KL.KENGOO.BACKGROUND.init = function() { var config = { list: Utility.config.getList(), interval: 3, // 2mins getConfigList : function() { return Utility.config.getList(); }, callback: function(state) { Utility.chrome.updateTooltip(window.parser); return Utility.config.getList(); } }; window.parser = new DataParser(config); window.parser.begin(); window.notifyChecker = new KL.KENGOO.BACKGROUND.NotifyChecker(); }KL.KENGOO.POPUP.init = function() { window.stockPanel = new KL.KENGOO.POPUP.StockList($('body')); var config = { list: Utility.config.getList(), interval: 0, getConfigList : function() { return Utility.config.getList(); }, callback: function(state) { window.stockPanel.renderList(); return Utility.config.getList(); } }; window.parser = new DataParser(config); window.parser.begin(); }/* * Global init function to dispatch handler */$(document).ready(function() { if (window._options) { return KL.KENGOO.OPTION.init(); } else if (window._background) { return KL.KENGOO.BACKGROUND.init(); } else { return KL.KENGOO.POPUP.init(); }});

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/yaozongchao-Stock-Reminder.git
git@api.gitlife.ru:oschina-mirror/yaozongchao-Stock-Reminder.git
oschina-mirror
yaozongchao-Stock-Reminder
yaozongchao-Stock-Reminder
master