var dataGlo = {}; // term var callTerm = 'term4';// 初期値はterm4 // jsonの中のひとつのオブジェクトのサイズを保管する var termInnerSize; // rankingの中身のDOM var createArea = $(".jsonpRnk").find("table tbody"); var createArea = $(".jsonpRnk").find("table tbody"); var ASC = 'asc'; var DESC = 'desc' /** html内のclassとjson内のkeyを付け合せる */ var orderMap = { pips: "PL_TERM", ratio: "RIYOU_WARIAI", fund: "HITSUYOU_SHIKIN" } // ソート規定を保持する var orderGlo = {}; var winning; (function(jQuery){ $.ajax({ url: "//systre.inet-sec.com/rankingOfProfit.txt", type: "GET", dataType: "jsonp", jsonp:false , jsonpCallback:"jsonCallback", success: function(data){ dataGlo = data; // term4のサイズと全て同じであるものとする //************* 改修になる可能性大 ****************** termInnerSize = dataGlo['term4'].length; writeTable(dataGlo[callTerm]); }, error: function(){ createArea.children().remove(); createArea.append("

ただ今、臨時メンテナンス中のため
ランキングは表示されません。

"); console.log('外部ファイルの取得に失敗'); } }); /** * セレクターの変更 */ $("form[name='formTerm']").change(function(){ $("select[name='callJsonp']").each(function(){ callTerm1 = $(this).children(":selected").val(); }); $("select[name='callJsonp2']").each(function(){ callTerm2 = $(this).children(":selected").val(); }); callTerm = callTerm2 + callTerm1; writeTable(dataGlo[callTerm]); /* * ソートを指定している状態でセレクターの変更があったとき、そのソートを引き継いだ形でdom生成する */ if(orderGlo != null){ writeTable(sortOrder(orderGlo.kubun, orderGlo.order)); } }); /** * sort_buttonのクリックイベントを定義 * sort_buttonのついているソーターは、class="sort_button {項目区分} {asc/desc}"として並んでいるものとする */ $('.sorter_button').on('click', function(){ var classList = $(this).attr('class').split(' '); var kubun = classList[1]; // {項目区分} var order = classList[2]; // {asc/desc} $('.sorter_button').removeClass('active'); $(this).addClass('active'); setGlobalOrder(kubun, order) writeTable(sortOrder(kubun, order)); }) })(jQuery); /** * ランキングの表を書き込む * @param targetJson 期間とbid/askを指定した状態のjsonオブジェクト */ function writeTable(targetJson) { var createTable; var no = 0; createArea.children().remove(); // 一旦テーブル内部を消す for(var i = 0; i < termInnerSize; i++){ winning = (targetJson[i].PERCENTAGE_WINNING).split("."); var rateTableDom = getRateTableDom(targetJson[i], no); createTable += rateTableDom; //テーブルに入れるデータが取得出来た場合のみ、noをインクリメントする。 if(rateTableDom){ no++; } } if(createTable == 'undefined') { createArea.append("

ご指定いただいた条件では該当がございません。

"); } else { createArea.append(createTable).find('tr:odd').addClass('info'); } } /** * jsonのデータをランキングのテーブル表示用のDOMに変換する * @param targetJson * @param no テーブル左端のNoに使用 * @returns jsonから生成したDOM */ function getRateTableDom(targetJson, no){ var dom = ""; //選択した通貨ぺアを取得 var currencyPair = $("select[name='callJsonp3']").children(":selected").val(); //通貨ペアがある場合、それと一致したもののみdomに格納します if(currencyPair) { if(currencyPair == targetJson.BRAND_STR) { dom += ""+ ""+(no+1)+""+ ""+targetJson.STRATEGY_NAME+""+ ""+targetJson.BRAND_STR+""+ ""+targetJson.MAX_POSITION+""+ ""+targetJson.PL_TERM+""+ // ""+winning[0] + "." + winning[1].charAt(0) + winning[1].charAt(1)+"%"+ "" + ""+targetJson.HITSUYOU_SHIKIN+""+ "" } } else { dom += ""+ ""+(no+1)+""+ ""+targetJson.STRATEGY_NAME+""+ ""+targetJson.BRAND_STR+""+ ""+targetJson.MAX_POSITION+""+ ""+targetJson.PL_TERM+""+ // ""+winning[0] + "." + winning[1].charAt(0) + winning[1].charAt(1)+"%"+ "" + ""+targetJson.HITSUYOU_SHIKIN+""+ "" } return dom; } // クリックでイベント発火 function showModalWindow(url){ //ダイアログを表示させてからid="iframeContainer"を探してDOM要素追加 var iframeUrl=url; $('#kotak-dialog').show().find('#iframeContainer').html(''); //オーバーレイ $('#dialog-overlay').fadeTo(400, 0.8); var hei = $(window).height(); var wid = $(window).width(); var hei2 = $('.isi-dialog').outerHeight(); var wid2 = $('.isi-dialog').outerWidth(); $('#kotak-dialog').css({ "top": ($(window).height()-($(window).height() + $('#kotak-dialog').outerHeight()) / 2) + window.scrollY, "left": ($(window).width() - $('#kotak-dialog').outerWidth()) / 2 }).show(); return false; } //閉じるイベント $('#kotak-dialog,#dialog-overlay').click(function() { //\追加したiframeのDOMを削除 $('#kotak-dialog').fadeOut('normal', function() { $('iframe', this).remove(); }); //オーバーレイを削除 $('#dialog-overlay').hide(); }); /** * 順序の区分をもとにjsonの順番をソートし、jsonを返す * @param kubun ソート種 * @param order asc or desc * @return sortedData ソートされたデータ */ function sortOrder(kubun, order){ var data = dataGlo[callTerm]; // 降順/昇順を管理する var sorter; if(order == ASC){ sorter = 1; } else if(order == DESC) { sorter = -1; } else { // 予期せぬ値を受け取った場合はソーター機能を使わずそのまま返すため0 sorter = 0; } data.sort(function(a, b){ var reference = a[orderMap[kubun]]; var comparison = b[orderMap[kubun]]; // カンマがあるとsortメソッドがうまく働かないため、これを消す reference = removeComma(reference); comparison = removeComma(comparison); // 数値として比較する reference = Number(reference); comparison = Number(comparison); if(reference < comparison) { return -1 * sorter; } else if(reference > comparison) { return 1 * sorter; } else { return 0; } }) return data; } /** * global変数の区分と種別をセットする * @param kubun * @param order */ function setGlobalOrder(kubun, order){ orderGlo = {}; // 詰めなおす時には初期化する orderGlo.kubun = kubun; orderGlo.order = order; } /** * カンマ(,)を削除し返す * @param str 任意の文字列 */ function removeComma(str) { return str.replace(/,/g, ''); }