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, '');
}