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

리버티게임(개발), 모두가 만들어가는 자유로운 게임
둘러보기로 이동 검색으로 이동
>BANIP
(수술 완료)
>BANIP
(섹시하지 않은 es5로 마이그레이션)
1번째 줄: 1번째 줄:


$(function(){
$(function(){
     const $result = $("#menu-search-result")
     var $result = $("#menu-search-result"); // 검색결과 래퍼
     const PAGE_FETCH_LIMIT = $result.data("fetch-limit") * 1
     if($result.length == 0) return; // 없으면 종료
    var PAGE_FETCH_LIMIT = $result.data("fetch-limit") * 1 || 30; // 한번에 불러올 게임카드 수


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


//게임카드 가져오기
//게임카드 가져오기
async function getGameCards({category,offset = 0,count}){
function getGameCards(option){
    var response = await (new mw.Api()).get({
    var category = option.category,
action: 'parse',
        offset = option.offset || 0,
page:"버:게임 목록/dpl",
        count = option.count;
formatversion: 2,
 
        category, offset, count
    return new Promise(function(resolve,reject){
})
        (new mw.Api()).get({
    return $(response.parse.text).find(".gamecards");
            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({category, offset,count, $output}){
function getLoadButton(option){
     var $load = $("<span class='mw-ui-button' role='button'>더 불러오기</span>") // 더 불러오기 버튼 생성
    var category = option.category,  
     $load.on("click",async e => { // 버튼 클릭 시
        offset = option.offset,
        count = option.count,  
        $output = option.$output;
 
     var $load = $("<span class='mw-ui-button' role='button'>더 불러오기</span>"); // 더 불러오기 버튼 생성
     $load.on("click",function(e){ // 버튼 클릭 시
         $load.remove(); // 버튼 지우고
         $load.remove(); // 버튼 지우고
         e.preventDefault(); // 페이지 위로 올라가는 현상 제거
         e.preventDefault(); // 페이지 위로 올라가는 현상 제거
         $("#preloader-wrapper").slideDown(0.2) // 로딩바 표시
         $("#preloader-wrapper").slideDown(0.2); // 로딩바 표시
         let $gameCards = await getGameCards({category, offset, count}); // 게임카드 불러오고
         getGameCards({category: category, offset: offset, count: count}).then(function($gameCards){// 게임카드 불러오고
        $output.append($gameCards) // 아웃풋에 추가
            $output.append($gameCards); // 아웃풋에 추가
        $("#preloader-wrapper").hide()
            $("#preloader-wrapper").hide();
        if($gameCards.find(".gamecard").length === count){ // 불러올게 더있으면
            if($gameCards.find(".gamecard").length === count){ // 불러올게 더있으면
            $output.append(getLoadButton({category, offset : offset + count, count, $output})) // 로딩버튼 생성
                $output.append(getLoadButton({
         }
                    category: category,  
     })
                    offset : offset + count,  
                    count: count,  
                    $output:$output
                })); // 로딩버튼 생성
            }
         });
     });
     return $load;
     return $load;
}
}

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

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

    $("#menu-categories .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만 표시
        });
    });
});

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

    return new Promise(function(resolve,reject){
        (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'>더 불러오기</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;
}