미디어위키:Gadget-gamelistjs.js: 두 판 사이의 차이

리버티게임(개발), 모두가 만들어가는 자유로운 게임
둘러보기로 이동 검색으로 이동
>BANIP
(섹시하지 않은 es5로 마이그레이션)
>BANIP
(기본페이지 추가)
1번째 줄: 1번째 줄:
 
// todo : 무한스크롤 구현
$(function(){
$(function(){
     var $result = $("#menu-search-result"); // 검색결과 래퍼
     var $result = $("#menu-search-result"); // 검색결과 래퍼
    var $categories = $("#menu-categories"); // 카테고리 래퍼
     if($result.length == 0) return; // 없으면 종료
     if($result.length == 0) return; // 없으면 종료
     var PAGE_FETCH_LIMIT = $result.data("fetch-limit") * 1 || 30; // 한번에 불러올 게임카드 수
     var PAGE_FETCH_LIMIT = $result.data("fetch-limit") * 1 || 30; // 한번에 불러올 게임카드 수


     $("#menu-categories .item").toArray().map(function(el){ // 카테고리 데이터 dom에서 수집
     $categories.find(".item").toArray().map(function(el){ // 카테고리 데이터 dom에서 수집
         return {
         return {
             category:$(el).find(".link").data('pagename'),
             category:$(el).find(".link").data('pagename'),
28번째 줄: 29번째 줄:
         });
         });
     });
     });
    $categories.find(".link[data-pagename='리버티게임']").find("a").click(); // 기본 모든게임 확인
});
});


36번째 줄: 39번째 줄:
         count = option.count;
         count = option.count;


     return new Promise(function(resolve,reject){
     return new Promise(function(resolve){
         (new mw.Api()).get({
         (new mw.Api()).get({
             action: 'parse',
             action: 'parse',
56번째 줄: 59번째 줄:
         $output = option.$output;
         $output = option.$output;


     var $load = $("<span class='mw-ui-button' role='button'>더 불러오기</span>"); // 더 불러오기 버튼 생성
     var $load = $("<span class='mw-ui-button' role='button' style='margin-top:8px'>더 불러오기</span>"); // 더 불러오기 버튼 생성
     $load.on("click",function(e){ // 버튼 클릭 시
     $load.on("click",function(e){ // 버튼 클릭 시
         $load.remove(); // 버튼 지우고
         $load.remove(); // 버튼 지우고

2023년 8월 8일 (화) 20:43 판

// todo : 무한스크롤 구현
$(function(){
    var $result = $("#menu-search-result"); // 검색결과 래퍼
    var $categories = $("#menu-categories"); // 카테고리 래퍼
    if($result.length == 0) return; // 없으면 종료
    var PAGE_FETCH_LIMIT = $result.data("fetch-limit") * 1 || 30; // 한번에 불러올 게임카드 수

    $categories.find(".item").toArray().map(function(el){ // 카테고리 데이터 dom에서 수집
        return {
            category:$(el).find(".link").data('pagename'),
            length:$(el).find(".pagecount").text() * 1,
            el:el
        };
    }).map(function(option){
        var el = option.el;
        var category = option.category;
        $(el).find("a").on("click",function(e){ // 카테고리 링크 클릭 시 
            e.preventDefault(); // 페이지 이동 비활성화
            var $output = $result.find(".gamecards-wrapper[data-category='" + category + "']"); //해당 장르별 게임카드 래퍼 있는지 확인
            if($output.length == 0){ // 없으면 
                $output = $("<div class='gamecards-wrapper' data-category='" + category + "'><h2>" + category + "</h2></div>"); // 만들고
                $result.append($output); // 추가
                var $load = getLoadButton({category: category, offset:0,count:PAGE_FETCH_LIMIT, $output:$output}); // 로드버튼도 생성해서
                $result.append($load); // 추가
                $load.click(); // 추가한 로드버튼 바로 클릭
            } 
            $result.find(".gamecards-wrapper").not($output).hide(); // gamecards-wrapper 감추기
            $output.show(); // output만 표시
        });
    });

    $categories.find(".link[data-pagename='리버티게임']").find("a").click(); // 기본 모든게임 확인
});

//게임카드 가져오기
function getGameCards(option){
    var category = option.category,
        offset = option.offset || 0,
        count = option.count;

    return new Promise(function(resolve){
        (new mw.Api()).get({
            action: 'parse',
            page:"버:게임 목록/dpl",
            formatversion: 2,
            category: category, offset: offset, count: count
        }).then(function(response){
            var result = $(response.parse.text).find(".gamecards");
            resolve(result);
        });
    });
}

// 더 불러오기 버튼 생성
function getLoadButton(option){
    var category = option.category, 
        offset = option.offset,
        count = option.count, 
        $output = option.$output;

    var $load = $("<span class='mw-ui-button' role='button' style='margin-top:8px'>더 불러오기</span>"); // 더 불러오기 버튼 생성
    $load.on("click",function(e){ // 버튼 클릭 시
        $load.remove(); // 버튼 지우고
        e.preventDefault(); // 페이지 위로 올라가는 현상 제거
        $("#preloader-wrapper").slideDown(0.2); // 로딩바 표시
        getGameCards({category: category, offset: offset, count: count}).then(function($gameCards){// 게임카드 불러오고
            $output.append($gameCards); // 아웃풋에 추가
            $("#preloader-wrapper").hide();
            if($gameCards.find(".gamecard").length === count){ // 불러올게 더있으면
                $output.append(getLoadButton({
                    category: category, 
                    offset : offset + count, 
                    count: count, 
                    $output:$output
                })); // 로딩버튼 생성
            }
        });
    });
    return $load;
}