사용자:현지 시간 내 Gary/코멘트.js

참고: 저장 후 변경 내용을 보려면 브라우저의 캐시를 바이패스해야 한다. Google Chrome, Firefox, Microsoft EdgeSafari: 키를 누른 채로 [다시 로드] 도구 모음 단추를 누르십시오. 다른 브라우저에 대한 자세한 내용과 지침은 위키백과를 참조하십시오.캐시를 바이패스하십시오.
/**  * 현지 시간 내 의견  *  * 설명:  * [조정된 범용 시간 UTC] 기반 시간 및 날짜 변경,  * 서명에 사용되는 것과 같이, 현지 시간에 상대적인 것.  *  * 설명서:  * [[위키피디아:현지 시간 내 주석]]  */ $(() => {   /**    * 숫자가 부여되면, 필요한 경우 선행 0을 추가하여 최종 번호를 추가하십시오.    *는 두 개의 문자를 가지고 있다.    *    * @param {number} 숫자    * @returns {string} 필요한 경우 선행 0을 가진 숫자.    */   기능을 하다 addLeadingZero(번호를 붙이다) {     경시하다 numberArg = 번호를 붙이다;      만일 (numberArg < 10) {       돌아오다 `0${numberArg}`;     }      돌아오다 numberArg;   }    기능을 하다 convertMonthToNumber() {     돌아오다 새로운 날짜(`${} 1, 2001`).월을 얻다();   }    기능을 하다 getDates(시간) {     경시하다 [, 올드아워, 올드미닛, 올드데이, 구월, 올드이어] = 시간;      // 오늘     경시하다 금일 = 새로운 날짜();      // 어제     경시하다 어제 = 새로운 날짜();      어제.날짜를 설정하다(어제.getDate() - 1);      // 내일     경시하다 내일 = 새로운 날짜();      내일.날짜를 설정하다(내일.getDate() + 1);      // 입력한 날짜를 설정하십시오.     경시하다 뉴타임 = 새로운 날짜();      뉴타임.setUTCFull 연도(올드이어, convertMonthToNumber(구월), 올드데이);     뉴타임.세투쿠르스(올드아워);     뉴타임.setUTCMinutes(올드미닛);      돌아오다 { 시간: 뉴타임, 금일, 내일, 어제 };   }    /**    * 단수 또는 복수 단어를 사용할지 결정하여 사용하십시오.    *    * @param {string} 용어 원래 용어    * @param {number} 항목 개수    * @param {string} 복수형 항    * @returns {string} 사용할 단어    */   기능을 하다 복수형으로 하다(용어, 수를 세다, 복수형의 = 무효의) {     하게 하다 다모나르그 = 복수형의;      // 고유한 복수형 단어를 찾을 수 없으므로 일반 단어를 사용하십시오.     만일 (!다모나르그) {       다모나르그 = `${용어}s의;     }      // 항목은 하나뿐이니 단수어를 쓰세요.     만일 (수를 세다 === 1) {       돌아오다 용어;     }      // 여러 항목이 있으므로 복수 단어를 사용하십시오.     돌아오다 다모나르그;   }    계급 평.인로컬타임 {     건설업자() {       .언어 = '';       .로컬 코멘트 = {};        /**        * 설정        */       .설정();        .언어 = .setDefaultSetting(         '언어',         .로컬 코멘트.언어       );        // 이러한 값은 문서에도 반영된다.       // https://en.wikipedia.org/wiki/Wikipedia:Comments_in_Local_Time#Default_settings       .setDefaultSetting({         dateDifference: 진실의,         날짜 형식: 'dmy',         Day OfWeek: 진실의,         dropDays: 0,         Drop Months: 0,         타임퍼스트: 진실의,         24시간: 거짓의,       });     }      시간 조정(오리지널Timestamp, 샅샅이 뒤지다) {       경시하다 { 시간, 금일, 내일, 어제 } = getDates(         오리지널Timestamp.짝을 맞추다(샅샅이 뒤지다)       );        // 날짜 패턴과 일치하는 문자열을 찾았지만 찾을 수 없음       // 날짜 개체로 변환됨. 변경 사항 없이 반품하십시오.       만일 (숫자.isNaN(시간)) {         돌아오다 [오리지널Timestamp, ''];       }        경시하다 날짜를 잡다 = .dateText 결정({         시간,         금일,         내일,         어제,       });        경시하다 { 오전의, 시간 } = .get hours(시간);       경시하다 극히 작은 = addLeadingZero(시간.getMinutes());       경시하다 최종 시간 = `${시간}:${극히 작은}${오전의}`;       하게 하다 반환 날짜;        // 시간 오프셋을 결정한다.       경시하다 utc값 = (-1 * 시간.getTimezoneOffset()) / 60;       경시하다 utcOffset =         utc값 >= 0 ? `+${utc값}` : `−${수학.복근(utc값.고정된(1))}`;        만일 (.로컬 코멘트.타임퍼스트) {         반환 날짜 = `${최종 시간}, ${날짜를 잡다} (UTC)${utcOffset})`;       } 다른 {         반환 날짜 = `${날짜를 잡다}, ${최종 시간} (UTC)${utcOffset})`;       }        돌아오다 { 반환 날짜, 시간 };     }      convertNumberTo Month(번호를 붙이다) {       돌아오다 [         .언어.1월,         .언어.2월,         .언어.3월,         .언어.4월,         .언어.5월,         .언어.6월,         .언어.7월,         .언어.8월,         .언어.9월,         .언어.10월,         .언어.11월,         .언어.12월,       ][번호를 붙이다];     }      작성날짜 텍스트({ 낮의, , 시간, 금일, 연도 }) {       // 요일 계산       경시하다 dayNames = [         .언어.일요일,         .언어.월요일,         .언어.화요일,         .언어.수요일,         .언어.목요일,         .언어.금요일,         .언어.토요일,       ];       경시하다 데이 오브 더 위크 = dayNames[시간.getDay()];       하게 하다 기술 차이 = '';       하게 하다 지난 = '';        // 상대적 서술적 차이 생성       만일 (.로컬 코멘트.dateDifference) {         ({ 기술 차이, 지난 } = .createRate(           금일,           시간         ));       }        경시하다 월 이름 = .convertNumberTo Month(시간.월을 얻다());        // 사용자 기본 설정에 따라 날짜 형식 지정       하게 하다 포맷된 날짜 = '';        바꾸다 (.로컬 코멘트.날짜 형식.toLowerCase()) {         케이스 'dmy':           포맷된 날짜 = `${낮의} ${월 이름} ${연도}`;            부숴뜨리다;         케이스 'mdy':           포맷된 날짜 = `${월 이름} ${낮의}, ${연도}`;            부숴뜨리다;         체납:           포맷된 날짜 = `${연도}-${}-${addLeadingZero(낮의)}`;       }        하게 하다 포맷된 DayOfTheWeek = '';        만일 (.로컬 코멘트.Day OfWeek) {         포맷된 DayOfTheWeek = `, ${지난}${데이 오브 더 위크}`;       }        돌아오다 포맷된 날짜 + 포맷된 DayOfTheWeek + 기술 차이;     }      /**      * 상대 날짜 데이터를 생성한다.      *      * 오늘 @param {Date}      * @param {Date} 시간 설명의 타임스탬프      * @returns {Object.< 문자열, *>} 상대 날짜 데이터      */     createRate(금일, 시간) {       /**        * 오늘과의 시간 차이(밀리초)        *        * @type {number}        */       경시하다 밀리초전에 = 금일.gettime() - 시간.gettime();        /**        * 우리가 전시할 일수. 꼭 그런 것은 아니다.        * 총 며칠 전.        *        * @type {number}        */       하게 하다 데이즈아고 = 수학.복근(수학.둥글게(밀리초전에 / 1000 / 60 / 60 / 24));       경시하다 { 차이워드, 지난 } = .상대 텍스트({         데이즈아고,         밀리초전에,       });        // 연도와 월을 계산하는 이 방법은 정확하지 않다. 하지만       // 1월 1일 + 델타일을 사용한 이전 방법보다 낫다.       // 두 번째 델타 월을       // 28일밖에 남지 않은 2월. 이 방법은 보통 다음보다 크지 않다.       // 아주 먼 데이트를 제외하고 하루 쉰다.        /**        * 몇 개월 전, 우리가 전시할 수 있는 숫자. 꼭 그렇지는 않다.        * 총 몇 달 전.        *        * @type {number}        */       하게 하다 monthsAgo = 수학.마루를 깔다((데이즈아고 / 365) * 12);        /**        * 몇 개월 전의 총 시간.        *        * @type {number}        */       경시하다 토탈월사고 = monthsAgo;        /**        * 우리가 전시할 수 있는 몇 년 전의 숫자. 꼭 그런 것은 아니다.        * 총 몇 년 전.        *        * @type {number}        */       하게 하다 yearsAgo = 수학.마루를 깔다(토탈월사고 / 12);        만일 (토탈월사고 < .로컬 코멘트.Drop Months) {         yearsAgo = 0;       } 다른 만일 (.로컬 코멘트.Drop Months > 0) {         monthsAgo = 0;       } 다른 {         monthsAgo -= yearsAgo * 12;       }        만일 (데이즈아고 < .로컬 코멘트.dropDays) {         monthsAgo = 0;         yearsAgo = 0;       } 다른 만일 (.로컬 코멘트.dropDays > 0 && 토탈월사고 >= 1) {         데이즈아고 = 0;       } 다른 {         데이즈아고 -= 수학.마루를 깔다((토탈월사고 * 365) / 12);       }        경시하다 설명부품 = [];        // 추가해야 할 연도별 텍스트가 있다.       만일 (yearsAgo > 0) {         설명부품.밀다(           `${yearsAgo} ${복수형으로 하다(             .언어.연도,             yearsAgo,             .언어.몇 해           )}`         );       }        // 추가해야 할 월 텍스트가 있다.       만일 (monthsAgo > 0) {         설명부품.밀다(           `${monthsAgo} ${복수형으로 하다(             .언어.,             monthsAgo,             .언어.몇달.           )}`         );       }        // 추가할 날짜 텍스트가 있다.       만일 (데이즈아고 > 0) {         설명부품.밀다(           `${데이즈아고} ${복수형으로 하다(             .언어.낮의,             데이즈아고,             .언어.날들           )}`         );       }        돌아오다 {         기술 차이: ` (${설명부품.합류하다(           ', '         )} ${차이워드})`,         지난,       };     }      dateText 결정({ 시간, 금일, 내일, 어제 }) {       // 출력할 날짜 비트를 설정하십시오.       경시하다 연도 = 시간.getFullYear();       경시하다  = addLeadingZero(시간.월을 얻다() + 1);       경시하다 낮의 = 시간.getDate();        // '오늘' 또는 '어제'를 반환하십시오.       만일 (         연도 === 금일.getFullYear() &&          === addLeadingZero(금일.월을 얻다() + 1) &&         낮의 === 금일.getDate()       ) {         돌아오다 .언어.오늘;       }        만일 (         연도 === 어제.getFullYear() &&          === addLeadingZero(어제.월을 얻다() + 1) &&         낮의 === 어제.getDate()       ) {         돌아오다 .언어.어제;       }        만일 (         연도 === 내일.getFullYear() &&          === addLeadingZero(내일.월을 얻다() + 1) &&         낮의 === 내일.getDate()       ) {         돌아오다 .언어.투모로우;       }        돌아오다 .작성날짜 텍스트({ 낮의, , 시간, 금일, 연도 });     }      get hours(시간) {       하게 하다 오전의;       하게 하다 시간 = 파스인트(시간.get hours(), 10);        만일 (.로컬 코멘트.24시간) {         오전의 = '';         시간 = addLeadingZero(시간);       } 다른 {         // 날짜에 따라 오전 또는 오후 출력         오전의 = 시간 <= 11 ? 'am' : '오후';          만일 (시간 > 12) {           시간 -= 12;         } 다른 만일 (시간 === 0) {           시간 = 12;         }       }        돌아오다 { 오전의, 시간 };     }      상대 텍스트({ 데이즈아고, 밀리초전에 }) {       하게 하다 차이워드 = '';       하게 하다 지난 = '';        // 날짜는 과거.       만일 (밀리초전에 >= 0) {         차이워드 = .언어.이전에;          만일 (데이즈아고 <= 7) {           지난 = `${.언어.지난} `;         }          // 날짜는 미래다.       } 다른 {         차이워드 = .언어['지금부터'];          만일 (데이즈아고 <= 7) {           지난 = `${.언어.} `;         }       }        돌아오다 { 차이워드, 지난 };     }      바꾸기텍스트(마디를 짓다, 샅샅이 뒤지다) {       만일 (!마디를 짓다) {         돌아오다;       }        // 텍스트 노드인지 확인하십시오.       만일 (마디를 짓다.nodeType === 3) {         하게 하다 부모 = 마디를 짓다.parentNode;          경시하다 parentNodeName = 부모.노드 이름;          만일 (['코드', 'PRE'].포함한다(parentNodeName)) {           돌아오다;         }          경시하다 가치를 매기다 = 마디를 짓다.노드값;         경시하다 성냥 = 가치를 매기다.짝을 맞추다(샅샅이 뒤지다);          // jQuery를 사용하기보다는 DOM을 직접 조작하는 것을 고수한다.         // 그 후 100% 이상의 속도 향상을 얻었다.         만일 (성냥) {           // 이 노드에서 찾은 첫 번째 타임스탬프에만 작업하십시오. 이것은           // 실제로 두 개 또는 두 개가 있는 상황에 대한 일시적인 해결책           // 동일한 노드의 타임스탬프 수 증가.           경시하다 [짝을 맞추다] = 성냥;           경시하다 포지션 = 가치를 매기다.샅샅이 뒤지다(샅샅이 뒤지다);           경시하다 문자열길이 = 짝을 맞추다.토스트링().길이;           경시하다 매치 전 = 가치를 매기다.하위 문자열(0, 포지션);           경시하다 애프터매치 = 가치를 매기다.하위 문자열(포지션 + 문자열길이);           경시하다 { 반환 날짜, 시간 } = .시간 조정(             짝을 맞추다.토스트링(),             샅샅이 뒤지다           );           경시하다 타임스탬프 = 시간 ? 시간.gettime() : '';            // "timestamp" 속성은 마이크로포맷에 사용되는가?           경시하다 스판하다 = 문서화하다.createElement('스팬');            스판하다.className = '지역별 의견';           스판하다.문체를 하다.글꼴 크기 = '95%';           스판하다.문체를 하다.화이트 스페이스 = '노랩';           스판하다.setAttribute('timestamp', 타임스탬프);           스판하다.칭호를 붙이다 = 짝을 맞추다;           스판하다.덧셈을(문서화하다.CreateTextNode(반환 날짜));            부모 = 마디를 짓다.parentNode;           부모.대체 차일드(스판하다, 마디를 짓다);            경시하다 전에 = 문서화하다.createElement('스팬');            전에.className = '현지 이전 발언';           전에.덧셈을(문서화하다.CreateTextNode(매치 전));            경시하다 다음에 = 문서화하다.createElement('스팬');            다음에.className = '지역별 사후 설명';           다음에.덧셈을(문서화하다.CreateTextNode(애프터매치));            부모.삽입 전(전에, 스판하다);           부모.삽입 전(다음에, 스판하다.넥시블링);         }       } 다른 {         경시하다 아이들. = [];         하게 하다 어린아이의;          [어린아이의] = 마디를 짓다.차일드노드;          하는 동안에 (어린아이의) {           아이들..밀다(어린아이의);           어린아이의 = 어린아이의.넥시블링;         }          // 아이들을 반복해서 반복해서 이 func를 다시 작동시켜라.         아이들..각을 위해((아이2) => {           .바꾸기텍스트(아이2, 샅샅이 뒤지다);         });       }     }      달리다() {       만일 (         ['', '미디어위키', '특수'].포함한다(           mw.구성.얻다('wgCanonicalNamespace')         )       ) {         돌아오다;       }        // 비활성화된 URL을 확인하십시오.       경시하다 isDisableUrl = ['행동=역사'].약간의((disableUrl) =>         문서화하다.위치.href.포함한다(disableUrl)       );        만일 (isDisableUrl) {         돌아오다;       }        .바꾸기텍스트(         문서화하다.querySelector('.mw-파서-출력'),         /(\d{1,2}):(\d{2}), (\d{1,2}) ([A-Z][a-z]+) (\d{4} \(UTC\)/       );     }      setDefaultSetting(...아그) {       // 논쟁은 없다.       만일 (아그.길이 === 0) {         돌아오다 거짓의;       }        // 첫 번째 arg는 물체이므로, 그 데이터를 바로 위에 설정하기만 하면 된다.       // 설정 객체. {설정 1: true, 설정 2: false}과 같은 경우       만일 (활자의 아그[0] === '목표') {         경시하다 [설정] = 아그;          // 각 설정을 반복하십시오.         오브젝트.열쇠들.(설정).각을 위해((이름을 붙이다) => {           경시하다 가치를 매기다 = 설정[이름을 붙이다];            만일 (활자의 .로컬 코멘트[이름을 붙이다] === '정의되지 않음') {             .로컬 코멘트[이름을 붙이다] = 가치를 매기다;           }         });          돌아오다 설정;       }        // 첫 번째 arg는 문자열이므로 첫 번째 arg를 설정 키로 사용하십시오.       // 및 두 번째 arg를 설정할 값.       경시하다 [이름을 붙이다, 설정] = 아그;        만일 (활자의 .로컬 코멘트[이름을 붙이다] === '정의되지 않음') {         .로컬 코멘트[이름을 붙이다] = 설정;       }        돌아오다 .로컬 코멘트[이름을 붙이다];     }      /**      * 스크립트 설정을 설정하십시오.      *      * @pair {undefined}      */     설정() {       // 사용자가 사용자 지정 설정을 했으므로 해당 설정을 사용하십시오.       만일 (창문의.로컬 코멘트) {         .로컬 코멘트 = 창문의.로컬 코멘트;       }        /**        *언어        *        * 이 스크립트의 로컬라이징        * 이 스크립트를 로컬로 설정하려면 아래 용어를 변경하십시오.        * 콜론의 오른쪽, 해당 언어에 사용되는 올바른 용어로.        *        * 예를 들어, 프랑스어에서는        *        * '오늘' : '오늘'        *        *일 것이다        *        * '오늘' : "아우주르드 후이"        */       .로컬 코멘트.언어 = {         // 관련 용어         오늘: '오늘',         어제: '어제',         투모로우: '내일',         지난: '마지막',         : '이것',          // 요일         일요일: '일요일',         월요일: '월요일',         화요일: '화요일',         수요일: '수요일',         목요일: '목요일',         금요일: '금요일',         토요일: '토요일',          // 년도 월         1월: '1월',         2월: '2월',         3월: '3월',         4월: '4월',         5월: '5월',         6월: '준',         7월: '7월',         8월: '8월',         9월: '9월',         10월: '10월',         11월: '11월',         12월: '12월',          // 차이 단어         이전에: '아고',         '지금부터': '지금부터',          // 날짜 구문         연도: '년',         몇 해: '년',         : '월',         몇달.: 'months',         낮의: '날',         날들: '일',       };     }   }    // 이 스크립트를 이미 실행했는지 확인하십시오.   만일 (창문의.평.InLocalTimeWasRun) {     돌아오다;   }    창문의.평.InLocalTimeWasRun = 진실의;    경시하다 평.인로컬타임 = 새로운 평.인로컬타임();    평.인로컬타임.달리다(); });