var _assoc_map_with_keyword = { defaultOption : { "title": null, "label": "label", "child_label": "label", "class": "class", "size": "size", "children": "children", "steady": "steady", "increase": "increase", "decrease": "decrease", "colors": RenderUtil.assoc_color_table_simple, "color_table_name": null, "height": 0, // 강제 조정 안 함 "force_factor": 0.15, "xlsx": true }, example: [ { name: "예제1", description: "TM2 연관어 및 상승/하락 키워드", sample: { "type": "assoc_map_with_keyword", "visible": true, "id": "test.assoc_map_with_keyword", "data": { "tag_data": { "steady": ["전주남부시장", "전주한옥마을", "전동성당", "전주국제영화제", "비빔밥"], "increase": ["전주중앙시장", "치즈", "오목대"], "decrease": ["초코파이", "동문시장", "호연재"] }, "assoc_data": { "children": [ {"kind": "쇼핑요소", "size": 2004, "label": "전주남부시장"}, {"kind": "쇼핑요소", "size": 229, "label": "전주중앙시장"}, {"kind": "쇼핑요소", "size": 20, "label": "송정역시장"}, {"kind": "쇼핑요소", "size": 15, "label": "전주모래내시장"}, {"kind": "쇼핑요소", "size": 8, "label": "전주서부시장"}, {"kind": "쇼핑요소", "size": 3, "label": "동문시장"}, {"kind": "쇼핑요소", "size": 3, "label": "부여롯데아울렛"}, {"kind": "쇼핑요소", "size": 1, "label": "원주중앙시장"}, {"kind": "쇼핑요소", "size": 1, "label": "춘천중앙시장"}, {"kind": "쇼핑요소", "size": 1, "label": "롯데백화점본점"}, {"kind": "쇼핑요소", "size": 1, "label": "송정시장"}, {"kind": "쇼핑요소", "size": 1, "label": "스토리"}, {"kind": "관광지점", "size": 20654, "label": "전주한옥마을"}, {"kind": "관광지점", "size": 11120, "label": "전동성당"}, {"kind": "관광지점", "size": 3414, "label": "경기전"}, {"kind": "관광지점", "size": 1977, "label": "오목대"}, {"kind": "관광지점", "size": 1245, "label": "완산공원"}, {"kind": "관광지점", "size": 1094, "label": "자만벽화마을"}, {"kind": "관광지점", "size": 1083, "label": "덕진공원"}, {"kind": "관광지점", "size": 870, "label": "풍남문"}, {"kind": "관광지점", "size": 782, "label": "전주향교"}, {"kind": "관광지점", "size": 359, "label": "모악산"}, {"kind": "관광지점", "size": 268, "label": "완산칠봉"}, {"kind": "관광지점", "size": 237, "label": "이목대"}, {"kind": "즐길거리", "size": 11760, "label": "전주국제영화제"}, {"kind": "즐길거리", "size": 5021, "label": "전주동물원"}, {"kind": "즐길거리", "size": 3768, "label": "전주월드컵경기장"}, {"kind": "즐길거리", "size": 720, "label": "전주종합경기장"}, {"kind": "즐길거리", "size": 294, "label": "전주한지문화축제"}, {"kind": "즐길거리", "size": 233, "label": "전주문화재야행"}, {"kind": "즐길거리", "size": 103, "label": "전주한옥레일바이크"}, {"kind": "즐길거리", "size": 74, "label": "전주세계소리축제"}, {"kind": "즐길거리", "size": 59, "label": "수원월드컵경기장"}, {"kind": "즐길거리", "size": 52, "label": "전북방문의해"}, {"kind": "즐길거리", "size": 34, "label": "전주국제사진제"}, {"kind": "즐길거리", "size": 31, "label": "호연재"}, {"kind": "먹거리", "size": 1789, "label": "비빔밥"}, {"kind": "먹거리", "size": 1246, "label": "치즈"}, {"kind": "먹거리", "size": 1238, "label": "전주비빔밥"}, {"kind": "먹거리", "size": 1176, "label": "떡갈비"}, {"kind": "먹거리", "size": 1132, "label": "콩나물국밥"}, {"kind": "먹거리", "size": 1027, "label": "만두"}, {"kind": "먹거리", "size": 988, "label": "국밥"}, {"kind": "먹거리", "size": 941, "label": "콩나물"}, {"kind": "먹거리", "size": 764, "label": "초코파이"}, {"kind": "먹거리", "size": 747, "label": "꼬치"}, {"kind": "먹거리", "size": 567, "label": "육회비빔밥"}, {"kind": "먹거리", "size": 516, "label": "새우만두"} ], "label": "전주여행" } }, "options": { "title": "전주여행 연관어", "child_label": "label", "size": "size", "children": "children", "class": "kind", "label": "label", "xlsx": true } }, } ], /* * 에러를 검사하고, 일부 잘못된 형식을 교정 * 에러가 발생하면 console.error로 에러메시지와 unit.id 출력 * 어떻게든 복구가 가능하면 복구하고 true return, 복구 불가능하면 false return */ validateData : function(unit) { var options = unit.options; if (options == null || Object.keys(options).length == 0) { console.error("options is empty : " + unit.id); //return false; // 옵션이 없는 경우 default 옵션을 넣도록 함 options = unit.options = _assoc_map_with_keyword.defaultOption; } if (unit.data == null || Object.keys(unit.data).length == 0) { console.error("data is empty : " + unit.id); return false; } // 누락된 option을 default 값으로 대체 Object.keys(_assoc_map_with_keyword.defaultOption).forEach(function(name) { if (!options.hasOwnProperty(name)) { //console.error("unit.options." + name + " does not exist : " + unit.id); unit.options[name] = _assoc_map_with_keyword.defaultOption[name]; } }); if (options.color_table_name && RenderUtil.hasOwnProperty(options.color_table_name)) unit.options.colors = RenderUtil[options.color_table_name]; return true; }, render_assoc_map: function ($chartDiv, unit) { var chartDivId = ReportRenderer.getUniqueDivId(); var $leftDiv = $("
"); $chartDiv.append($leftDiv); AssociationByCategoryHandler.createAssociationMap($leftDiv, unit.data.assoc_data, unit.options, function onclick_association_node(d) {}); }, render_tags: function ($chartDiv, unit) { var $rightDiv = $("").addClass("keywordArea"); $chartDiv.append($rightDiv); var options = unit.options; var tag_data = unit.data.tag_data; var types = ["steady", "increase", "decrease"]; var classes = ["topKeyword", "upKeyword", "downKeyword"]; var titles = ["상위 키워드", "상승 키워드", "하락 키워드"]; for (var i = 0; i < types.length; i++) { var t = options[types[i]]; var cls = classes[i]; var title = titles[i]; if (!tag_data.hasOwnProperty(t)) continue; if (tag_data[t].length <=0) continue; var $tagDiv = $("").addClass(cls); $rightDiv.append($tagDiv); $tagDiv.append($("").text(title)); var $keywordBox = $("").addClass("keywordBox"); $tagDiv.append($keywordBox); var $ul = $("" + JSON.stringify(unit, null, 2) + ""); return; } var $chartDiv = $(""); if (unit.options.height) $chartDiv.css({"height": unit.options.height, "min-height": unit.options.height}); $dom.append($chartDiv); if (unit.options.title) $chartDiv.append($("").text(unit.options.title)); _assoc_map_with_keyword.render_assoc_map($chartDiv, unit); _assoc_map_with_keyword.render_tags($chartDiv, unit); return $chartDiv; } }; UnitRendererFactory.add("assoc_map_with_keyword", _assoc_map_with_keyword.render); UnitRendererFactory.addExample("assoc_map_with_keyword", _assoc_map_with_keyword.example);