사용자:BANIP/낙서장
var previewLimit = 5 // 선행로딩된 페이지들 var documentPromiseMap = {
}; var namespace = $("#firstHeading > span.mw-page-title-namespace").val() // 해당 링크의 action, title, oldid 파라미터가 없는 링크만 가져오기
targetLinks = $("#mw-content-text a").not(".external").filter(function() {
return !this.href.match(/action=|title=|oldid=/);
}).toArray().map(function(el) {
var [_, namespace, docname] = decodeURI(el.href).match(/[a-z]+\:\/\/[a-z\.]+\/[a-z\.]+\/([^\:]+)\:?(.*)/); if (docname === "") [namespace, docname] = [docname, namespace]; [namespace, docname]; return { el, link: el.href, title: el.title, namespace, docname }
}) // 동일한 네임스페이스만 이동되게 필터링 .filter(({namespace:thisNamespace}) => thisNamespace === namespace ) // 필터된게 previewLimit 갯수 이상이면 동작 x, 프로미스맵에 클릭 시 로딩 필요함을 명시 // 필터링된게 프로미스맵에 없는 경우 사전 프리로딩 프로미스 추가 // a링크 href를 #로 변경, 클릭 시 이벤트 바인딩
// 프로미스맵에서 해당 링크에 바인딩된 프로미스 확인 // 프리로드 불필요한 경우(네임스페이스가 다를때, 편집/리비전확인 링크일때) url 영구이동 // 프리로드되지 않은 이동 가능한 링크면 로딩창 표시 후 해당 페이지 로딩 // 링크 프로미스에 문제가 있을 시 다시 내용 확인, 성공시 문서 프로미스에 저장, 오류시 에러메세지 // 로딩완료되면 로딩창 삭제 // 프리로드 프로미스가 정상적으로 불러왔을 경우 // Promise.race1 // 문서내용 페이드 아웃, // 프로미스 내용으로 교체 // 문서내용 페이드 인 // Promise.race2 // 사전로딩된 내용에서 프리로드 분석 재실행