안녕하세요. iPilot에서 지난 2011년 5월부터 2013년 1월까지 자료를 프린트하여 공부하였습니다.

좋은 자료들입니다 그러나 일부 정답이 안달아져 있어(물론 공부하신분들이나 두번째 보시는 분들에게는 구지 답을 안달아도 되지만)

처음 공부하시는 분들은 5과목 공부하시는데 시간이 가장 큰 여려움을 알기에 나름 두번째 시험 준비하면서 찾아본 답을 보태봅니다.

후배한테 받은 2013년 1월 자료와 제가 본 시험 3월 자료도 같이 올립니다. 기출문제는 이것만 프린트하셔서도 될듯합니다. 좋은결과 바랍니다.

 

<비행이론>

 

2013.3.13 & 27

 

1. 양력과 항력 관계 맞는 것은?

1)양력은 속도에 비례 항력은 속도에 비례

2)양력은 면적 속도에 비례 항력은 면적 속도에 반비례

3)양력은 밀도 면적 속도제곱에 비례 항력은 밀도 면적 속도제곱에 비례 (이것이 답이 아닐까)

4)

 

2. SLAT 설명 중 맞는 것은?

1)항력과 양력을 증가한다 (항력없이 양력을 증가시킨다)

2)속도 증가 없이 강하각을 깊게한다 (이게 답이 아닐까)

3)…

 

3. Corkscrew effect left turning tendency 에관한 내용중 틀린 것은?

1)spiraling slipstream vertical fin에 맞는다

2) 속도가 증가할수록 이 효과가 증가한다

3) 프로펠라 속도가 빠를 수록 이 효과가 커진다.

4)오른쪽으로 vertical axis에 대해 회전하는 경향이라고 했던가?

 

4. 다음의 플랩중 가장 높은 CLmax 값을 가지는 플랩은?

1)fowler flap

2)double slotted fowler flap

3)double slotted flap

4)split flap

Double Slotted Fowler Flap

CLmax 100%

Fowler Flap

CLmax  90%

Double slotted Flap

CLmax  70%

Slotted Flap

CLmax  65%

Split Flap

CLmax  60%

Plain Flap

CLmax  50%

 

5. 압력항력 + 표면마찰 항력은?

  1) 유도항력   2)형상항력   3)유해항력   4)압축항력

 

6. CG 구하는 문제

  자중 2545lbs 이고 103인치, 109인치 지점에 170파운드 실으면

  새로운 CG?  170 x 6(103에서 109 지점 거리) / 2545 x 170 = 1,020 / 2,715 = 0.375  따라서

  원래의 103인치에서 +0.375 만큼 이동한거다. 103 + 0.0375 = 103.375

1) 102.7  2)103.3  3) 109

 

7. 하이드로플레이닝 문제. tire pressure 121psi 일때 대략적인?  9x  = 9 x 11  = 99

  1)88    2)99   3)110

 

8. CL계수가 커지는 플랩은?    FOWLER Flap

 

9. 골프공이 curb 하고 야구공이 회전하는 ~~~~~~~~이론은?   

1)magnus이론   2)베르누이이론   3)뉴톤법칙

 

10. Yaw Damper out시 처치 방법은?     고도 속도 낮춘다

1)출력을 줄이고 러더로만 수평잡는다

2)에어러론으로만 조종

3)고고도로 올라간다

4)저고도로 내려간다

 

11. 정압과 관계 없는 계기는?

  1)속도계   2)고도계   3)승강계   4)방향지시계

 

12. 항공기가 증속이나 상승할수 있는 힘은?   여유마력

 

13. 30,000KG의 항공기가 60 Bank 로 선회할 때 걸리는 하중은?

하중계숙 N= =     W=30,000    cos60 = 1/2

1)60,000KG   2)30,000kg   3)45,000kg

 

14. 압력중심에 대한 설명중 틀린 것은?

   1)높은 받은각에서 압력중심은 후방으로 이동한다 (앞으로 이동한다)

 

15. 무게와 속도관계 중 최대활공거리를 위해 맞는 것은?

   1)무게에 증가하면 할공거리 증가한다

   2)무게에 감소하면 활공거리 증가한다

   3)무게와 상관없이 최대활공속도를 유지한다

   4)무게와 상관없이 최대할공채공속도를 유지한다

 

16. AOA 0일 때 맞는 설명은? (기출문제중 AOA 0 이면 날개위 흐름은 주변 대기보다 작다)

   1)유도항력은 0 이다

   2)날개윗면과 아랫면 압력은 같다

   3)

 

17. Groud 효과 없어지면 틀린 것은?

   1)pitch up 이 필요하다

   2)추력이 더 필요하다

   3)순간적이 들림현상이 발생한다

   4)정압이 감소하여 지시속도가 감소한다

 

18. 최대활공거리는?    활공거리 / 활공속도

 

19. 최대활공비는?    활공거리 / 고도

 

20. 프로펠러 효율(PROP EFFICENCY)에 관해서 저밀도 고도와 비교해서 고밀도고도는 어떠한 영향을 미치는가? 2

   ① 프로펠러 깃에 미치는 마찰이 적기 때문에 호율은 증가한다

   ② 프로펠러는 저밀도 고도보다 고밀도 고도에서 적은 힘을 발휘하기 때문에 효율은 감소한다

   ③ 저밀도 고도에서 공기의 밀도는 고밀도 고도보다 적디 때문에 프로펠러 효율은 감소한다

   ④ 얇은 공기 속에서 프로펠러의 증가된 힘으로 인하여 효율은 감소한다.

 

21. 지시 실속속도에 영향을 미치는 것은?   Weight    loadfactor     pwr  (나며지 예문은 AOA가 들어감)

 

22. GROUND EFFECT 진입시 양력과 항력의 변화는?    양력증가, 유도항력 감소

 

23. HYDROPLANNING의 진입속도(HV) TIRE PRESSURE(P)와의 관계는?

   ① HV P3 비례 ② HV P2 비례 ③ HV P에 반비례 ④HV는 √P에 비례

 

24. MOMENT ?     무게×길이

 

25. 실속 속도이며 최소비행안전속도는 무엇인가?

   1)Vs    2)Va   3)V2

 

26. Turboprop엔진을 사용한 항공기의 특성중 틀린것? (기출문제로 답을 찾을수없었는데 또 나왔네요. 답은모르겠음)

   1)조작이 간편하다.(대충 이런형식의 보기)

   2)무게가 덜 나간다.

   3)진동이 최소화 된다.(진동이 다른거에 비해 적다라는 보기였습니다.)

   4)기억이 안남.(대충 효율이 어떻게 하면 좋다라는 것인데..기억이 안남.)

 

 

 

2013.1.16

 

1. FLAP관련 긴지문 각FLAP의 특성, 양력 항력변화수치 까다로운 문제

 

2. 터보팬 엔진 설명 N1,N2 관련 고압 저압등등의 보기문제

 

3. 조파항력 줄이기위한 것은?    속도감속

 

4. CLMAX 지나면 양력과 항력은 어떻게되나?   양력감소 항력증가

 

5. TAILWHEEL 비행기 TAIL 들어올리면서 LEFT TURNING TENDENCY가 발생하는 이유?

1)토크   2)SPIRAL SLIPSTREAM

 

6. 프로펠러 1회전 나아간 이론적거리는?  Propeller Pitch

 

7. MODERATE TURB시에 고도변화/?

 

8. 하중계수와 실속속도 관계?

1) 하중계수가 9배 커지면 실속속도는 3배커진다

2) 하중계수가 4배 커지면 실속소도는 4배커진다

실속속도는 루트 하중계수 에비례한다.

, 로드팩터가 4배 커지면 실속속도는 루트4= 2 이므로 2배 커진다.

또 로드팩터가 9배 커지면 실속속도는  루트9= 3 이므로 3배 커진다

 

9. LOADFACTOR 공식

  하중계수 N = L/W = 1/cos@

 

10. 테이퍼윙 윙팁실속 줄이기위한방법이 아닌 것은?  밑에 예는 맞는 것들이다

날개를 Twist로 설치 - Tip으로 갈수록 AOA 적게한다

날개 Root Tip에 서로 다른 Airfoil을 조합하여 설계한다

날개 앞전에 Slot을 설치 – Slot 밑으로 공기를 흘려보내 날개에서 경계증 흐름의 분리를 지연시킨다

Vortex Generator 설치

Stall Fence 설치

경계층 제어

 

11. HYDROPLANING 접근속도에 따라 어떻게되나?

  보기는 모르겠으나 접근속도가 높을수록 Hydroplaning은 높아 지므로 답을 찾으면 될 듯

 

12.전방 CG가 가장위험할때는?

1)이륙   2)착륙  3)실속시   4)

 

13. YAWDAMPER 고장시 맞는 것은?  고도 속도를 낮춘다

1) 에어러론으로 잡니다   2)고도 상승한다   3) 고도 강하한다   4)러더로 잡는다

 

14. 받음각 변화없이 속도가 두배가 되면 항력은?

  속도 2배 되면 항력은 4배 커진다 ( .  만큼 항력은 커진다)

 

15. 유해항력관련 속도가 줄면? 밑에 설명을 토대로 답을 찾으면 된다

속도가 증가하면 유도항력은 감소하고 유해항력은 증가한다

속도가 줄어들면 유도항력은 증가하고 유해항력은 감소한다

 

16. 레이놀즈 맞는 것은?

레이놀즈가 높으면 AOA 이 커진다

 

17. FL310에서 ISA보다 -10C일 때 TA PA관계

  표준대기 상태에서 FL310 보다 온다가 높으므로 TAS TA는 높고 IAS PA는 낮다

 

18. 주조종면은?   Aileron  Elevator  Rudder

       

19. 날개공기흐름을 지연시키는 것은?   경계층 제어(Vortex Generator를 말하는것일수도)

 

20. WINGTIP VORTEX관련?  Heavy  Slow  Clean configuration   High AOA 일때 최대이므로 답찾으면 됨

1)무게에 비례하고…?   2)이착륙시에 최대   3)…    4)…

 

21. CG는 무슨축위에있으며 거기에 관련된 문제

 

22. ENG OUT SERVICE CEILING위에서 유지해야하는 속도?

1)VXSE    2)VYSE    3)VMC    4)VA

 

23. 터뷸런스에서 유지해야하는 SPD?   Va 또는 그 이하속도

 

 

 

 

 

 

 

 

 

2013.1.13

1.COCKSCREW EFFECT: : 속도가 증가시 심해진다.

(위키 찾아보니 저속에서 일어나고 고속시 저하됨이라고 나오네요)

보기중에는 VERTICAL PIN작용한 ROLLING MOMENT가 작용한다. 이런것이네요

2.AERODYNAMIC CENTER에 대해서 => 공력중심(AC) AOA따라 변하지않고 압력중심(CP)는 높은받음각에서는 앞으로 낮은 받음각에서는 후방으로 이동한다.

-AOA에 따라 변하지 않는다, CG와 위치와 따라 어떻게 된다.

3.CG가 전방에 위치시: 족보 문제 인데 1번보기에 이착륙에 문제를 발생 한다와 4번 보기에 구조적 STRESS를 준다. 이런식으로 나왔는데

족보에 나와 있기에는 " CG가 전방에 위치시 착륙시 문제가 있다." 이륙시라는 말이 1번에들어가고 4번 내용은 첨 보는거라....

4.WINGLET의 목적인가 효과? 유도항력 감소 이런식의 보기 그러나 보기중 날개의 압력차를 작게 해서 효과를 증대(그런데 압력차가 커야 항공기에는 양력이 더 발생 하지 않나요: 이걸로 선택)

5. CG 계산 문제: 족보와 같아서 계산도 않하고 찍었습니다. 103,3인가... ㅎㅎ

6.습도가 증가 하면 밀도가 커지나 작아지나 그래서 항공기 성능이 좋아 지나 나빠지나 문제?

  습도가 증가 하면 밀도는 커지고 그래서 항공기 성능한 나빠진다.

7.ASPECT RATIO가 클때: 유도항력 감소, 활공비 증대 인데...전 감소라하고 했네요

8.LOAD FACTOR커질때 STALL SPEED관계: LOADFACTOR 9배 커지면 실속 9배증가, 감소 1/3작아지면, 실속 1/3감소 증대 이런식

실속속도는  에 비례한다.

, 로드팩터가 4배 커지면 실속속도는  루트4= 2 이므로 2배 커진다.

또 로드팩터가 9배 커지면 실속속도는  루트9= 3 이므로 3배 커진다

 

9.후퇴각 효과

장점: 임계마하수증가, 가로안정성증가, 방향안정성증가, 상반각 효과있음

단점: 실속이 익단에서 먼저 발생, Trailing edge 조종면과 고양력장치 효율감소

10.최대 최공할려면: 밀도 고도가 커질때 증가, 이륙무게/착륙무게 비가 작아야(커져야: 생각이잘안나네요) : 전 최대 최공은 무게랑 상관 없어서 무게 관련된것으로 찍었는데 모르겠네요..

  1)무게와 상관없이 활공속도를 유지한다    2)무게와 상관없이 활공채공속도를 유지한다

11.동적 수막 현상 문제 계산 9X루트 9x11: 족보 문제

12.CL계수가 커지는 플랩은:FOWLER인가요? 효과가 가장 좋은 게 FOWLER라 알고 있어서 찍었는데

13.COMPRESS STALL: 항공기 속도 와 압력차이 인지,, RAM AIR와 압력 차이인지 이런식

14.초기 이탈후 바로 안정 되는것은? 정적 안정 아닌가요? 보기 정적 중립안정, 동적 안정 이런식.

15.YAW DAMPER OUT시 처치 방법; 족보에 나오는 문제이나 답이 없어서 위키 찾아 봤는데 고도 낮추고, 속도 줄이라고 나왔던데...이게 맞는지 모르겠어요

족보 문제 그대로 나온것 보다 이해하실게 필요한듯 하네요....

16.유도 항력 유행 항력 관련 문제:

17. 베르누이 정리. 정압이 어쩌구 저쩌구

18.활주로에 눈인가 착빙시 어떻게 되느가: 1. 가속이 늦어져서 이륙이 늦어진다. 다른 보기는 잘 생각이 다른 보기와 1번과 보류로 넘어 갔었는데....

그런데 가속에는 그다지 문제가 없지 않지 않나요 리젝트시 문제가 되서 그렇지. performace 수없에서 그렇게 배운듯 그런데 다른 보기가 더 아닌것 같아서 그걸 골랐는데.

19. 정압과 관계 없는 /적은 계기: 방향 지시계, 승강계 , 속도계.... 방향 지시계 아닌가요????

 

 

2012.11.8 ipilot 등록자료

1. 하이드로플레이닝 문제. tire pressure 36psi 일때 대략적인

DH 속도는? 8.73*6=52.38

보기에는 1) 52-54 라고 대략적인 범위를 제시

2. 하이드로플레이닝 문제. tire pressure 121psi 일때 대략적인

DH 속도는? 8.73*11=96.03

보기에는 99kts 가 가장 근사치

3. CG 계산문제

자중 2545lbs 이고 103인치, 109인치 지점에 170파운드 실으면

새로운 CG?  170 x 6(103에서 109 지점 거리) / 2545 x 170 = 1,020 / 2,715 = 0.375  따라서

원래의 103인치에서 +0.375 만큼 이동한거다. 103 + 0.0375 = 103.375

1) 102.7  2)103.3  3) 109

4. 운송용 대형항공기에 쓰이는 tab ?

1) Trim tab 2) Control tab 3) Servo tab 4) Balance tab

인터넷 찾아보니 1)인것 같습니다.

5. 붙임각에 대한 설명중 맞는 것은?

1) 비행중 변할 수 있다.

2) 상반각과 상관없다.

3) 비행중 변하지 않는다.

4) ......생각 안남

6. Spoiler에 관한 설명 중 맞는 것은? : 항력증가

7. 고양력 장치가 아닌 것은? : Spoiler

8. Sweep Back 항공기의 특징인 것은?

1) 2) 3) 은 엉뚱한 설명 4) 임계 마하수가 크다

9. Dihedral effect 보다 방향안정성이 더 큰 결과로 나타날 수 있는

것은? Spiral Divergence(나선불안정성)

10. 가로안정성과 상관 없는 것은?

1) 수평꼬리날개 2) 후퇴각 3) Dihedral 4) 수직꼬리날개

cf) 수직꼬리날개는 keel effect 와 상관있으므로 1번이 답

 

11. 형상압력이란? 압력항력 + 표면마찰항력

12. 비행중 날개의 양력계수에 영향을 주는 요소는?

1) 양력계수, 속도, 날개면적, 공기밀도

2) 3) 4) 는 조금씩 다른 설명...특히 온도가 포함되어 있었던 것으로 기억 남

13. 실속속도에 영향을 주는 요소는?

1) 무게, 하중계수, 동력. 2) 3) 4)는 전부 AOA 가 포함되어 오답

14. 항공기가 증속이나 상승을 할 수 있도록 기관이 낼 수 있는 힘을 무엇이라 하는가?

1) 필요마력 2) 여유마력3) 이용마력 4) 생각안남

cf)잉여마력이 없어서 조금 헷갈렸던 문제....여유마력 = 잉여마력

15. Constant speed pitch prop에서 최대동력을 얻기위한 setting?

: 작은 받음각과 높은 RPM

16. 속도계에서 하얀색 원호에 대한 설명중 틀린것은?

1) 착륙조건을 갖춘 상태에서의 무동력 실속속도

2) 착륙장치 운용속도

3) 플랩 운용속도

17. 세로안정성에 관한 문제

18. Ground effect 와 관련 있는 것은? Down wash

 

비행이론(2012. 10. 25)

* 전반적으로 반 정도는 확실히 쉽고, 반 정도는 함정이 있는 문제들이 많이 나왔습니다.

1. gas turbine eng'에서 습도가 증가할 때 나타나는 현상은?

거의 영향이 없는 것으로 아는데 1)이 답인지???

1) 추력은 변하지 않는다.

2) 추력은 모든 고도에서 증가한다.

3) 추력이 모든 고도에서 감소한다.

2. CG 후방한계시 나타나는 특성중 틀린 것?

1)세로안정성감소 2)가로안정성 감소 3)순항속도증가 4)실속속도감소

3. 30,000KG의 항공기가 60 Bank 로 선회할 때 걸리는 하중은?

하중계숙 N= L/W = 1/cos@   (W=30,000    cos60 = 1/2)

60,000KG

4. 에어포일 그림주고 Mean camber line 찾는 문제

5. 압력중심에 대한 설명중 틀린 것?

1) 높은 받음각에서 압력중심은 후방으로 이동(전방으로 이동함)

6. stall을 방지하기 위한 것에 대한 설명중 틀린 것?

7. trim tab 에 대한 설명 중 조종면주위의 공기역학적 힘으로 움직이는 것은?1)번같은데....

1) SERVO 2) balance tab 3) spring tab 4)

8. 형상압력? 압력항력 + 표면마찰항력

9. 제트기에서 양항비가 최대일 때 최대항속거리를 얻으려면 속도는?

최대양항비보다 빨라야 한다

10. 실용상승한계는? 100FPM 의 상승률을 갖는 고도

11. Spiral Slipstream 에 대한 설명(PROP ENG'에서 좌로 틀리는 나선효과)

12. 착륙 퍼포먼스를 구할 때 반영되지 않는 것?퍼포먼스 시간에 배운대로라면 reverser 가 답일 텐데요....

1) Th' Reverser 2) Anti-skid 3) 4)

13. 세로안정성을 좋게 하기위한 것이 아닌 것은? 

1) 수평꼬리 날개를 크게 한다. 2) CG CP를 가깝게 한다(CG CP앞에 있어야 세로안정성 좋다)

3) 하이윙은 세로안정성이 좋다. 4)

14. Dihedral 효과보다 방향안정성 효과가 더 큰 현상은? 3)번아닌지

1) 2) 3) Spiral Divergence (= Spiral instability ???)

15. 활공거리와 속도, 무게의 관계에 대한 설명?

1) 무게가 늘면 속도가 늘어난다.

할공거리는 무게와 상관없다. 그런데 무게가 증가하면 활공속도는 증가한다 반대로 무게가 감소하면 활공속도는 감소한다

16. 이륙거리를 증가시키는 경우가 아닌것은? 4)

1) 정풍감소 2) 배풍증가 3) upslope 4)

17. 공기를 압축성 기체로 간주하는 마하수는? 0.3

18. 구조적 손상을 입힐 수 있는 경계를 나타내는 하중계수는?

1) 한계하중계수 2) 기동하중계수 3) 경계하중계수 4) 종극하중계수

19. aileron 관련문제 : outboard aileron 은 저속에서만, inboard aileron은 저속과 고속에서 작동된다

 

2012.8.30

ATR 눈팅으로 필기는 비행이론만 남은 유령회원입니다.

답을 아시는 분은 답도 부탁드려요...제발 ^^

1. SPOILOER 역활

- 롤시 보조역활...

안정성을 높인다....

캠버를 크게한다...

2. VMCA 증가요인

- L/G DOWN...

FEATHERING 시킨다... 둘중하나가 답인듯 ...

3. CG앞에 있을때 특성...족보대로

4.무게증가시 글라이딩 속도는?

- 증가...

감소...

변동없다...

5. 항공기 성능에 나쁜 영향을 주는 바람은?

- 정풍 증가...

배풍 증가

배풍 및 정풍 증가

배풍 및 정풍 감소

6. 일정한 PWR로 비행시 무게가 줄면?

- 양력이 증가...

속도 증가...

양력과 속도증가

7. 캠버크게하면....

- 양력증가...

8.CG 뒷 한계 근처 위치시 특성?

9.AOA 0일경우 특성?

- 유도항력 0이다.

날개윗면과 아랫면 압력이 같다...

10.프로펠러의 효율성이란?

11.SLOT의 역활

- 공기흐름를 느기게 흐르게 한다.

12. GND 효과 없어지면?

13.V-N 선도란?   비행기 속도와 하중배수와의 관계

14.터보차저인지 수퍼차저인지에서 WASTE GATE의 역활은?

- 스로틀 제어...

15.TURK UNDER 방지 장치   밑에 설명을 바탕으로 답을 고르면 됨

SAS(stability Augmentation System) or PTC(Pitch Trim Conpensator) 장착

수평꼬리날개 위치를 높게 장착하여 날개로부터 다운워시 영향을 적게 한다

Twist Wing – 고속에서 Wing Tip AOA 감소하여 양력발생 억제한다.

16. SPIN

- 평면스핀은 회복이 쉽다...정답인듯

17.쌍발엔진에서 ONE ENG FAIL의 의미?

- 상승성능 50%상실

순항성능 50%상실

전체성능 50%상실

18. 수막 발생가능 속도 실제로 계산 문제임...8.73 루트 P

19.어떤 조건에서 지시고도와 진고도가 일치?  표준대기상태일때만

20고고도 비행중 여압장치가 있는 항공기 PITOT 관이 고장일 경우?

 

속도계

고도계

VSI

피토관 막힘

‘0’을 지시

정상

정상

피토과 막힘 + 배수관 막힘
정압관 정상

상승시 높게
강하시 낮게

정상

정상

피토관 정상
정압관 막힘

상승시 낮게
강하시 높게

고정

고정

나머지 5문제는 족보문제로 평이합니다. 답 아시면 부탁드려요...^^

 

2012.7.23

시험보고 바로 올린다는게...메모를 끌적여놨는데 비행 1주일 정도 갔다 왔더니만 벌써 가물가물하네요...

이거 실제 비행에 필요없는 공부가 비행안전을 취약하게 만드는데요...

아무튼 생각나는데로 써볼께요...

1.속도증속 고도상승 할수있는 추력

-필요추력

-여유추력.....

2.세로안정성을 좋게 하는법 틀린 것은?

-cg를 공력중심뒤로....

3.붙임각 관련...

4. ground effect 증가시...

-downwash 감소, upwash 감소 wing tip voltex 감소...이세개 관계에 대해서 묻는거구요...

5. adverse yaw에 대해서 맞는거..

- 올라간 날개 와 내려간 날개의 양력과 항력의 관계에 대해서 물었구요...

내려간 날개 : AOA 감소 -> 양력감소 유도항력감소

올라간 날개 : AOA 증가 -> 양력증가 유도항력증가

따라서 올라간 날개쪽 우측으로 Yawing 발생한다

6.sweep back 목적

7.보조익

-aileron, trim tab, rudder tab..

-aileron, rudder, elivator...

8.cg 구하는 문제

9.datum line 관련 문제

10. cg완전 뒤로 가면 틀린 것?

-spin stall 들어가기 어렵다...

11.tublence 있을때 속도유지?    Va 또는 작게

12.hydroplaning관련 접근속도 보다 많게 접근시 hydroplanig이 어떻게 되나

-더심해진다...

-영향없다...

13.프로펠러비행기 최대로 가려면

-양항비가 최대인 속도로...

14.wing tip voltex 틀린거    Heavy   Slow   Clean   High AOA 일때 최대로 발생한다

-무게 비례

-속도 반비례.....

15.최대 활공거리는...

-활공거리/활공속도 이렇게 구하지 않나요...

참고로 활공비는 활공거리/고도 입니다

대략 이정도네요....문제 정확히 생각나신분들 수정좀...

 

2012.7.5

------------------ 비행 이론 -----------------------

온도가 올라가면 터빈엔진의 성능에는 어떤 영향?

1. 온도가 올라가서 엔진성능 저하

2. 성능은 무관하고 터빈온도 상승

네이버 검색결과 터빈엔진은 온도 상승 시 성능 저하..같습니다.

 

총 무게와 CG구하는 문제?

1,000kg 150inch 2,000kg 100inch, 1,000kg -50inch

쉬운 문제.

(1,000 x 150)+(2,000 x 100)+(1,000 x -50)/1,000+2,000+1,000 = 300,000/4,000 = 75inhg 에 무게 4,000kg

 

비행기가 착륙하면서 ground effect에진입할 시?

1. induced drag 증가, 항력 증가

2. induced drag 증가, 항력 감소

3. induced drag 감소, 항력 감소.

. 3

Tab의 종류.( Tab이 바람에 작동되면서 조종면을 작동하게 하는 탭은? 보기: 서보탭? 어렵게 나옵니다.)

같은 날개면적일때, 날개가 길면 어떤 현상?

wingtip vortex 가 어찌되나?, 전체 항력?, Lift 증가? 어렵네요 ㅠㅠ

유도항력 증가가 답 같은데요.

같은 속도일때 선회시 선회율 1/2? 속도가 4배일 시?

항공기 무게가 무거워지면 Gliding speed?

1. 같다 2. 감소 3. 증가

연구해 본 결과, 속도는 증가, , 활공거리와 활공각은 동일..인듯

Spiral Slipstreal 효과중 틀린것?

1. 후류가 수직안정판 우측에 작용

2. 속도가 높을 수록 강한 효과.

3. 종축에 대하여 오른쪽 모멘트

4. 프롭 RPM 높을 수록 강한 효과

1.

지금은 더이상 기억 못하겠네요. 앞으로 생각나는것이 있음 추가 하겠습니다.

· Fly_Sam

2012.07.05 15:35

비행이론 중 비행기 무게가 무거워지면 Glide Speed Max Range 변화 관련해서 ..

친한 기장님께 여쭤보니

무게가 무거워지면 --> Speed 증가, Range 감소. 라고 말씀하시네요.

답 아시는 분 리플 부탁드려요.

이문제가.. 지난주, 이번주 두번 연속 나왔습니다. ㅠㅠ

댓글 댓글을...

·         kim선생

2012.07.06 19:12

레인지는 감소하지만 글라이드 스피드는 같은거 아닌가요? 무거워지면 그만큼 항속거리는 감소할 것이고 베스트 글라이드 스피드는 양항비 최대에서 얻어지므로 이것은 무게에 관계없이 항상 일정한것으로 알고 있습니다...(제가 아는 한도에선 그렇습니다.)

댓글 댓글을...

·         Fly_Sam

2012.07.13 18:25

도서출판 청연의 항공역학책(조용욱,서욱 저)에서 631p, 632p를 보니, 결론은 이거네요.

· - Fly_Sam

2012.07.12 10:36

몇번 비행이론 시험을 보니, Tab종류 묻는 문제는 매번 빼먹지 않고 나오고 있습니다.

출제되는 문제의 중요한 포인트가 동작 방향을 묻는데, 조종면과 같은? 반대로?

이게 무척 헷갈리네요.

기존 삼국지자료와, 책과 서로 반대로 말하는 경우도 있구요.

예를 들어 문제 보기 중 틀린거 ...... Anti-Servo 탭은 조정면과 반대로 움직인다..(실제로 같은 방향으로 움직입니다)

이렇게 나오면 딱 걸려들기 쉽죠.

위키디피아에서 검색해서 나름 탭의 특성을 정리 해놔야 할거 같네요.

Trim Tab: 조종간의 힘을 0로 만듬.

Anti-Servo Tab: 같은방향 deploys in the same direction as the control surface, making the movement of the control surface more difficult

and requires more force applied to the controls by the pilot.

(, 같은 방향으로 움직이고 파워스티어링같이 조종면을 적당히 무겁게해준다는 뜻이네요)

Servo-Tab: 반대 방향 move in the opposite direction of the control surface. effect of reducing the control force required by the pilot to move the controls.

(조종에 드는 힘이 경감된다.)

(조종면에 직접 연결)--> 위키디키아에는 일부 항공기에 조종사의 조종스틱에 직접 연결된다고 나와있습니다.

"some aircraft the servo tab is the only control that is connected to the pilot's stick or wheel."

실제 시험에는 "무슨무슨탭은 조종간에 직접 연결되어 어쩌구 저쩌구" 하고 출제됩니다.

-->밸런스탭과 안티서보탭은 조정면(control surface)에 링크로 연결되어 있는거 같고요.

Balance Tab: 구글 위키디피아에 자세히 안나와서..아직 연구중입니다.

무게가 무거워지면 속도증가, 가벼워지면 감소. 하지만, 활공거리와 활공각은 동일함.

 

 

 

2012.4.25

대충 기억나는 것들만 적겠습니다.

 

1. corkscrew effect(정확치 않습니다. ) lefc-turning tendencies 에 관한 내용 이었습니다. 틀린 것 고르는 문제.

1)spiraling slipstream vertical fin에 맞는다. 2) 속도가 증가할수록 이 효과가 증가한다. 3) 프로펠라 속도가 빠를 수록 이 효과가 커진다.

4) 오른쪽으로 vertical axis에 대해 회전하는 경향이라고 했던가?

대충 이런 것들인데 젭슨을 뒤져봐도 속도가 증가하면 이 스파일럴 스립스트림이 어떻게 되는지 안나오네요. 젠장

 

2.  constand speed propella 가 이륙시 어떻게 되는가?

최대추력과 동력을 얻기 위한 setting은 작은받음각 과 높은RPM 을 참고로 답을 고르면 된다

1) low rpm 어쩌고 저쩌고  2) 저피치 고피치 등으로 예문을 만들었고, 3) aoa가 최대가 된다 등...

 

3. 무게와 Va 관계?   무게가 증가하면 Va도 증가한다

 

4.  CG가 전방에 있을 때와 후방에 있을 때

 

5. 세로 안정성 틀린 것은?

하이윙, 꼬리수평날개 크면 안정성이 커지고CG CP 인가 해서 가까울수록 안정된다.

 

6. 선회반경과 원심력에 관한 질문

속도가 2배 늘면 반경은 4배는다. 반경이 1/2로 줄면 원심력은 4배로 는다. 원심력은 중량에 비례 등 답은 모르겠습니다.

 선회반경=  ,   원심력= m r  (m:중량  r:반경 w:각속도)

 

7. 플랩을 묻는데 보통 파울러, 슬롯, 플레인, 스플릿 등으로 외웠는데

이건 뭐 제조업자라도 되라는 건지  스플릿이 CLmax 90% 고 슬롯은 CLmax 50% 

도저히 알 수 없는 보기들을 열거해놨습니다.

 

Double Slotted Fowler Flap

CLmax 100%

Fowler Flap

CLmax  90%

Double slotted Flap

CLmax  70%

Slotted Flap

CLmax  65%

Split Flap

CLmax  60%

Plain Flap

CLmax  50%

 

 

8. 실속속도에 영향을 미치는 것은? 족보대로 aoa 없는거 빼니 weight, load foctor, pwr 남았던 것 같습니다.

 

9. 최대양항비 속도 이하로 줄일 시 총항력? 유도항력 증가로 총항력 증가

 

10. Douch roll에서 방향안정성을 크게했을 경우나선불안정성 했는데 맞는지는 모르겠네요.

 

11.  이착륙 성능 문제

uphill, downhill, 정풍 등의 영향

 

12. 날개 전면부에 어쩌고 고양력으로 나왔던거 같은데. slat  이라고 했습니다.

 

13. 충격파 특성 틀린것은? 공기압력 감소가 보기에 있어서 답으로 했네요.

 

14. 직사각형 날게의 실속? 뿌리부터

 

15. 형상항력은 ? 압력항력 + 표면 마찰 항력

 

이젠 짜증나서 기억 못하겠습니다. 해도해도 끝이 없습니다.

 

1. corkscrew effect(정확치 않습니다. ) lefc-turning tendencies 에 관한 내용 이었습니다. 틀린 것 고르는 문제.

1)spiraling slipstream vertical fin에 맞는다. 2) 속도가 증가할수록 이 효과가 증가한다. 3) 프로펠라 속도가 빠를 수록 이 효과가 커진다.

4) 오른쪽으로 vertical axis에 대해 회전하는 경향이라고 했던가은 답 2

 corkscrew effect hi prop spd low forward a/c 에서 증가하고 항공기 속도가 증가할수록 효과는 감소합니다....(물론 늘그렇듯이 정답이 아닐수도 있습니다)

 

kim선생

저도 오늘 비행이론 떨어졌습니다.오히려 공부안한 항공법이랑 기상이 붙고 나름 열심히 했다고 생각했던 비행이론이 60점맞고 떨어졌습니다..윗분 말씀대로 좀 심하다 싶은 생각이 드네요.....저역시 기억나는것이 거의 없는 이유가 이건뭐 책에서도 (PPM/ICM)같은 곳에서도 나오지 않는 것들이 나오더구군요....생각나는건...

 1. 플랩에 대한 설명중 틀린것은?..."fowler slotted flap은 양력이 100%증가한다."이런 보기가 하나 생각나네요.윗분처럼 몇%의 양력이 늘어난다는 등의 예문이 있었구요.

2.가로안정성과 연관이 없는것은? 테이퍼날개, 후퇴익, 수평꼬리날개, 수직꼬리날개,(책에 수직꼬리날개는 주로 방향안정성에 대해서 설명이 되어 있고, 수평꼬리날개는 downwash에 관해서 세로안정성에 대한 설명으로 기억이 되는데 정확히 몰라서 수직꼬리날개로 찍었는데 틀린것 같습니다..수직꼬리날개가 keel effect와 연관이 된 수평안정성에 연관이 있는것 같습니다..그래서 답(틀린것은)은 수평꼬리날개가 될것 같습니다..(아시는분 댓글좀 달아주세요..)

 

 3.세로안정성에 대해서 연관이 없는것? 이문제도 보기가 진짜 첨보는 것들... 두개 지문밖에 생각이 안나요.

   CG CP의 앞에 오게한다.

   날개를 무게중심점 위에 오게 설계한다.

  

4. CG구하는 문제...짐을 옮겼을때의 새로운 CG를 구하는 문제..(저는 설마 요즘같은 시대에 CG구하는게 나올까 싶어서 이건 아예 보지도 않고 갔는데 맞았는지 틀렸는지 모르겠습니다. 원래 CG 77인가 했는데 짐을 뒤로 옮겼을때의 새로운 것을 구하라고 해서 대충 짐을 뒤로 옮기면 무게중심점이 앞으로 가지 않을까 싶은데....)

 

5. turboprop엔진을 사용한 항공기의 특성중 틀린것?

   조작이 간편하다.(대충 이런형식의 보기)

   무게가 덜 나간다.

   진동이 최소화 된다.(진동이 다른거에 비해 적다라는 보기였습니다.)

   기억이 안남.(대충 효율이 어떻게 하면 좋다라는 것인데..기억이 안남.)

 

6. 프로펠라 항공기를 조종하는데 엔진이 페일되어서 프로펠라의 공기저항을 최소로 하는 방법?

   throttle idle cutoff

   mixture cut

   prop을 페더링시킨다.

  기억안남  프롭을 페더링시킨다라고 찍었는데 모르겠음..

 

7.여압항공기에서 정압관이 깨졌다...고도계는 어떻게 되는가?

  개인적으로 정압이 다 빠져나가서 서서히 0으로 되는게 제 생각인데 보기는

  현재 고도보다 높게 지시한다.

  현재 고도보다 낮게 지시한다.

  서서히 0으로 지시한다.

  기억안남....현재고도 고정된다            아시는분 설명 부탁드립니다...

 

8. AOA 0이다.. 날개윗면의 압력은?

  대기압과 같다.

  대기압보다 높다.

  대기압보다 낮다. (추가로 AOA 0일 때 유도항력은 0 이다)

  기억안남...

b777

26일 시험정보입니다.

1. hydroplanning시 감속방법은?

 브레이크 압력을 풀고 현상이 사라진뒤 다시 조심히 사용한다

  a.최대로 홈이 파여진 타이어 사용

b.Grooved 된 활주로 사용

c.타이어 압력을 최대로 하고 Wet RWY L/D을 피한다

d.접근시 On final SPD를 유지하고 Aerodynamic Brake 사용한다

e.브레이크 사용시 LOCk되지 않도록 유의하며 Reversal Thrust 사용한다

 

2. 엔진페일시 sideslip 발생시 제거방법은? 작동엔진쪽으로 뱅크 준다(5도까지만), 윙레벨, 피치 낮춰 증속, 작동엔진 출력 증가시킨다 중 고르는 것..

 

3. 중량 증가하면..유도, 유해항력은 증가하나 감소하나..

 

4. adverse yaw 발생시..양쪽 날개에 양력, 항력 증감여부...ex) 내려간 날개는 항력감소..올라간 날개는 항력증가..내려간 날개는 양력감소, 올라간 날개는 양력 증가등..섞어서 보기 만듦..

 

5. adverse yaw인지..yawing인지...~에 틀린 것은? 동압에 비례, 날개면적 반비례, 윙스팬에 비례, yawing 모멘트에 비례..중 고르는 것..(요건 보기는 기억이 나는데 문제가 정확히 기억이 안나네요..)

 

6. reduve thrust 사용 이유...엔진수명 연장..(이게 답이겠죠?)

 

7. 골프공이 커브, 야구공이 스핀하고..회전하고 어쩌구 저쩌구..up/down wash 관련 이론은? magnus이론, 베르누이법칙, 뉴톤의 제1법칙, 뉴톤의 제2법칙..중 고르는 것..

 

위 문제와 종합해보면 비행이론 문제가 많이 바뀐 것갔습니다..^^;

 

Fly_Sam

오늘(2012/06/28)  비행이론 68점으로 떨어진 사람입니다.

 >>  하이드로 플래닝 관련 문제인데 

 140KTS로 비행중 타이어 압력이 121 PSI 일때 하이드로플래닝이 발생하는 최소 속도?

, CG구하는 문제도 나왔는데요어렵네요. ㅠㅠ

  

도올

2번문제와 비슷한 문제 퍼옵니다.

For takeoff, to develop maximum power and thrust ,a constant speed propeller should be set to a blade angle that will produce

a) large angle of attack and low RPM

b) small angle of attack and high RPM

c) large angle of attack and high RPM

)b출처 GLEIM'S COMMERCIAL PILOT FAA WRITTEN EXAM (빨간책)

 

3, 무게와 Va는 비례관계..아닌가요? ( Va decreasas as weight decreases since an aircraft operating at lighter weight is subject to more rapid acceleration from gusts and turbulence.  - JEPPESEN PRIVATE PILOT'S MANUAL 2002년도판   page 3-64) 

  

8번문제, 받음각이 0인상태로 비행중 날개의 윗면을 따라 형성되는 압력은?  "대기압보다 작다"가 답입니다.

받음각이 0이라는 것은 시위선과 상대풍이 일치하는것임.그러나 비행기의 날개골은 비대칭으로 제작되기 때문에 윗면의 굴곡과 아랫면의 캠버가 다르기 때문에 날개의 윗면 압력은 대기압보다 작다...라고 나와있네요.  - 이강희 저 비행이론 문제집 -

b777님이 올려주신 야구공회전...관련 이론은 magnus 이론이 아닌지??네이버 검색해보니 나오네요..

 

 

2012.4.19

많이 맞추는 문제, 족보 문제 계속 거를라고 점점 이상한 문제를 내기 시작합니다.

1. 하중계수와 실속속도의 관계

하중계수가 몇배 늘어나면, 실속속도는 몇배 증가 혹은 감속 보기

아무리 해도 답을 모르겠습니다.

3 9 1/3배 로 네개 보기를 만들어 놨는데 정말 짱납니다

실속속도는  루트 하중계수에 비례한다.

, 로드팩터가 4배 커지면 실속속도는  루트4= 2 이므로 2배 커진다.

또 로드팩터가 9배 커지면 실속속도는  루트9= 3 이므로 3배 커진다

 

2. 대형기 inboard, outboard aileron 운영에 관한 문제가 한번에 두개 나왔는데

결국 이 문제 때문에 떨어졌네요 아....

답은 찾아보니 아웃보드는 저속에서 사용하고, 인보드는 저속 고속에서 모두 사용할 수 있다 입니다.

미친 교통안전공단 때문에 정말 해도해도 너무하네요.

아니 그러면 지들이 교재를 만들어서 가이드라인을 잡을 생각은 안하고

문제로써 가치가 없어서 계속 바꾸겠답니다.

이게 대한민국 공화국입니다.

 

 

2012.2.3

이번에도 생소한 문제나 족보서 제가 잘 못본 문제만

1.날개골 그림보여주고 부분별 용어 묻는 문제

시위선 ,평균켐버.....

2.방향 안정성은 항공기의 무슨축에 대한 안정성인가?   수직

3.후방 cg 항공기 특징중 틀린것

 

 

2011 8 10일 학과시험

1. 지시 실속속도에 영향을 미치는 것은 ? weight, load factor, pwr

나머지 세 예문에은 AOA가 들어가 있음(AOA는 실속속도에 영향이 없음)

 

2. 공기속도가 빠르면 정압은 낮고, 속도가 느리면 정압은 높은 것은 무슨 이론인가 ? 베르누이 정리

기타 관성의 법칙, 뉴튼의 법칙 등

 

3. 밀도, 고도, 습도, 온도와 항공기 성능과의 관계 중 맞는 것은? 예문 길어서 생각이 안납니다.

 

4. 레이놀즈수 증가시 나타나는 현상은? 1번으로 찍었슴다.

① 실속을 일으키는 받음각에 영향을 미치지 않는다

실속을 일으키는 받음각이 더 커진다 (정답일 듯)

③ 실속을 일으키는 받음각이 더 작아진다.

④ 양력계수가 감소한다.

 

5. 최대양항비(L/DMAX)의 속도이하로 감속시 총항력은? 유도항력의 증가로 총항력 증가

 

6. 정속 프로펠러의 프로펠러 각에 따른 항공기 성능 중 옳은 것은? 예문 길다.

  Speed control govener에 의해서 low pitch / high pitch 자동조절, 추력에 따라 자동으로 변화하나 프로펠러가 항상 같은 속도 유지 한다

 

7. SLAT에 대한 물음?   항력 증가 없이 양력 증가

 

8. 최저의 항력변화로 최대의 양력계수 증가를 보이는 것은? 파울러 플랩(FOWLER FLAP)

 

9. WING TIP STALL을 감소시키는 방법이 아닌 것은? 2번 아닐까요?

① 날개의 테이퍼를 작게 한다(테이퍼비를 크게)한다. : 날개뿌리에서 날개끝으로 폭이 좁아지는 비율

후퇴익을 감소시킨다.

③ 날개뿌리의 붙임각을 적게 한다. (WASH OUT하는 것과 같은 개념)

④ 날개끝 앞쪽에 실속 스트립을 설치한다.

 

10. 프로펠러 효율(PROP EFFICENCY)에 관해서 저밀도 고도와 비교해서 고밀도고도는 어떠한 영향을 미치는가? 2

① 프로펠러 깃에 미치는 마찰이 적기 때문에 호율은 증가한다

프로펠러는 저밀도 고도보다 고밀도 고도에서 적은 힘을 발휘하기 때문에 효율은 감소한다

③ 저밀도 고도에서 공기의 밀도는 고밀도 고도보다 적디 때문에 프로펠러 효율은 감소한다

④ 얇은 공기 속에서 프로펠러의 증가된 힘으로 인하여 효율은 감소한다.

 

11. DOUCH ROLL은 어떤 작용의 복합인가? ROLL AND YAW

 

12. 나선 불안정성(SPIRAL DIVERGENCE) : YAW 발생 후 항공기가 회복하지 못하고 경사각이 더 깊어짐

 

13. GROUND EFFECT 진입시 양력과 항력의 변화는? 양력증가, 유도항력 감소

 

14. HYDROPLANNING의 진입속도(HV) TIRE PRESSURE(P)와의 관계는? 모르겠음

HV P3 비례 ② HV P2 비례 ③ HV P에 반비례 ④HV는 √P에 비례

 

15. MOMENT ? 무게×길이

 

16. 세로 동적안정성 음(-)일 때 현상은? 3

① 진동이 증가하면서 상승한다 ②진동이 증가하면서 강하한다 진동주기가 커진다. ④ 진동주기가 작아진다

 

17. 대기속도를 감소시키고 선회율을 증가시키는 조작은 ? 추력(동력?)감소 경사각 증가

 

18. 속도계에서 초록색 원호 하부는? VS1

 

19. 구조적 손상을 입힐 수 있는 하중계수는? 1번 아닐까요?

한계하중계수 ② 기동하중계수 ③종극하중계수 ④ ?

 

20. YAW DAMPER OUT시 조작은? 비행이론 문제집에서 본 것 같은데 못 찾겠음

  고도 속도 낮춘다

 

21.활주로가 UPHILL(UPSLOPE과 같은 뜻이겠죠?)인 곳에서 이륙성능은? 이륙거리 증가

 

22. 한 엔진고장시 주어진 거리에서 가장 높은 높이를 제공하는 속도이고 엔진정지 운용중 모든 상승에서 활용되는

속도는? VYSE

 

23. 심한 난기류에 조우했을 때 날개하중을 최소화하기 위한 가장 적절한 기술은? 3

① 동력으로 속도를 조절하고, 날개수평, 고도의 변화를 허용한다

② 승강키와 동력의 밀접한 조화로 속도를 조절하고 경사와 고도의 변화를 허용한다

기동속도 또는 그 이하에서 속도를 얻을 수 있도록 동력을 고정하고, 날개 수평, 그리고 속도와 고도의 변화를 허용한다.

④ 기동속도 또는 그 이하에서 속도를 얻을 수 있도록 동력을 조절하고 날개는 수평을 유지하고 이러한 속도를

유지할 수 있도록 자세를 유지한다.

 

* ‘비행이론 문제집’(이강희 편집)에서 다수 나온 듯 합니다.

착륙시 가장 안좋은 것은?   

1)하강기류가 있을 때   2)배풍에서 정풍으로 바뀔 때   3) 정풍에서 배풍으로 바뀔 때   4)

 

2011 5 ATR 비행원리

이전 기출문제로 과락은 면할 수 있으리라 봅니다.

비행원리에 대한 전반적인 이해문제와 옳은것/틀린것 고르는 문제도

여러개 보였습니다.

1. 유도항력 발생원인? 즉 유도항력은 무엇이고 왜 발생하는가?

2. CG후방한계 특성은?

3. STALL 방지책?

4. WASH OUT 구조란?

5. SPIN RECOVERY중 틀린것은?

6. 레이놀즈수란?

7. TRIM의 종류와 특성?

8. 항공기 안정성 중 가로안정성에 대해?...항상 나오는 단골문제죠!!!

9. 항로상에서 예보보다 많은 배풍이 불때 최대항속거리를 얻기위한 방법은?

순항속도를 증가/감소/유지/다 틀린다 중 답이있다네요???

10. 절대상승한계란?

11. 밀도고도와 기압고도와의 상관관계???

12. 더운곳에서 추운곳으로 비행시 현상? 진고도와 TAS는 어떻게 되나?

13. EAS에 밀도고도(기압고도, 온도)수정하면? TAS

14. 양항비에 관한 설명중 틀린것?

15. GND EFFECT를 벗어날 때 특성은?

16. 에어포일에 관한 설명중 맞는것?

17. 항공기간 간격분리? 대형A/C 이륙후 소형항공기는 3분후

18. Hydroplanning관련?...역시 단골문제!!

19. 속도정의 중 그린아크/화이트아크는 어떤 속도인가??

20. 고양력 장치에 대한 설명 중 맞는것?

※ 나머지 문제는 비행이론에서 나왔습니다 ^^;;

 

 <script type="text/javascript" defer="" charset="ANSI">if ( typeof Evernote == 'undefined' ) { /** * Represents global evernote context (namespace). * All objects should be a part of this namespace. * @type {Object} */ Evernote = {}; } Evernote.inherit = function( childConstructor, parentClassOrObject, includeConstructorDefs ) { if ( parentClassOrObject.constructor == Function ) { // Normal Inheritance childConstructor.prototype = new parentClassOrObject; childConstructor.prototype.constructor = childConstructor; childConstructor.prototype.parent = parentClassOrObject.prototype; childConstructor.constructor.parent = parentClassOrObject; } else { // Pure Virtual Inheritance childConstructor.prototype = parentClassOrObject; childConstructor.prototype.constructor = childConstructor; childConstructor.prototype.parent = parentClassOrObject; childConstructor.constructor.parent = parentClassOrObject; } if ( includeConstructorDefs ) { for ( var i in parentClassOrObject.prototype.constructor ) { if ( i != "parent" && i != "prototype" && parentClassOrObject.constructor[i] != parentClassOrObject.prototype.constructor[ i ] && typeof childConstructor.prototype.constructor[ i ] == 'undefined' ) { childConstructor.prototype.constructor[ i ] = parentClassOrObject.prototype.constructor[ i ]; } } } if ( typeof childConstructor.handleInheritance == 'function' ) { childConstructor.handleInheritance.apply( childConstructor, arguments ); } if ( typeof childConstructor.prototype.handleInheritance == 'function' ) { childConstructor.prototype.handleInheritance.apply( childConstructor, arguments ); } return childConstructor; };</script><script type="text/javascript" defer="" charset="ANSI">Evernote.EnClipper = { enClipperProcessId: -1, init: function() { Evernote.ResponseReceiver.subscribe(this); Evernote.Addin.getProcessID(document); Evernote.Addin.allowSetForegroundWindow(this.enClipperProcessId); }, onDataReceived: function(data) { if(data && (data.type == "process_id")) { Evernote.EnClipper.enClipperProcessId = data.data | 0; } } };</script><script type="text/javascript" defer="" charset="ANSI">/** * Proxy object for Evernote ActiveX component * @type {Object} */ Evernote.Addin = { _addon : null, init : function(addin) { this._addon = addin; }, /** * Injects css specified by filename to specified document. * @param fileName - path to css * @param doc - document object */ injectStyleSheet : function(doc, fileName) { try { this._addon.InjectStyleSheet(doc, fileName) } catch (e) { Evernote.Logger.error( "Addin.InjectStyleSheet() failed " + e ); } }, /** * Injects script content to specified document * @param doc - document object * @param content - content of the script file */ injectScript : function(doc, content) { try { this._addon.InjectScript( doc, content ); } catch ( e ) { Evernote.Logger.error( "Addin.injectScript() failed " + e ); } }, /** * Loads file content from disk * @param url - path to the file */ loadFile : function(url) { try { return this._addon.LoadFile( url ); } catch (e) { Evernote.Logger.error( "Addin.loadFile() failed " + e ); } }, /** * Append message to log file with specified level. * Supported levels: * 0 - debug * 1 - info * 2 - warning * 3 - error * 4 - critical * @param logLevel * @param message */ log : function(logLevel, message) { try { this._addon.Log(logLevel, message) } catch (e) { Evernote.Logger.error("Failed to log message '" + message + "' to the log file due to error: " + e); } }, /** * Opens new note window. */ openNewNote : function() { try { this._addon.CreateNewNote(); } catch (e) { Evernote.Logger.error("Failed to open new note window due to error: " + e); } }, /** * Clips article element. * @param node - element containing article * @param title - title of the page * @param url - url of the page (location) * @param silent - if specified and 'true' then clips silently to Evernote (Clip and go mode), otherwise clips content and show additional popup with configuration. */ clipArticle : function(node, title, url, silent) { var isSilentClip = silent ? 1 : 0; try { this._addon.ClipArticle(node, title, url, isSilentClip) } catch (e) { Evernote.Logger.error("Failed to clip article due to error " + e); } }, /** * Clips selection on the page (if any). * @param doc - DOM document object * @param title - title of the page * @param url - url of the page * @param silent - if specified and 'true' then clips silently to Evernote (Clip and go mode), otherwise clips content and show additional popup with configuration. */ clipSelection : function(doc, title, url, silent) { var isSilentClip = silent ? 1 : 0; try { this._addon.ClipSelection(doc, title, url, isSilentClip) } catch (e) { Evernote.Logger.error("Failed to clip selection due to error " + e); } }, /** * Clips image. * @param node - image DOM node * @param title - page title * @param url - url of the page * @param silent - if specified and 'true' then clips silently to Evernote (Clip and go mode), otherwise clips content and show additional popup with configuration. */ clipImage : function(node, title, url, silent) { var isSilentClip = silent ? 1 : 0; try { this._addon.ClipImage(node, title, url, isSilentClip) } catch (e) { Evernote.Logger.error("Failed to clip image due to error " + e); } }, /** * Clips page url. * @param node - url DOM node * @param title - page title * @param url - url of the page * @param silent - if specified and 'true' then clips silently to Evernote (Clip and go mode), otherwise clips content and show additional popup with configuration. */ clipUrl : function(node, title, url, silent) { var isSilentClip = silent ? 1 : 0; try { this._addon.ClipUrl(node, title, url, isSilentClip) } catch (e) { Evernote.Logger.error("Failed to clip url due to error " + e); } }, /** * Clips entire page. * @param doc - document DOM object * @param title - page title * @param url - url of the clipped page * @param silent - if specified and 'true' then clips silently to Evernote (Clip and go mode), otherwise clips content and show additional popup with configuration. */ clipFullPage : function(doc, title, url, silent) { var isSilentClip = silent ? 1 : 0; try { this._addon.ClipFullPage(doc, title, url, isSilentClip) } catch (e) { Evernote.Logger.error("Failed to clip full page due to error " + e); } }, /** * Return path to directory on local filesystem for specified type. * @param type - type of directory to return. Currently supported types: * options - directory, where options configuration is stored. * resources - directory, where resources are located (images, scripts, etc.) */ getPath : function(type) { try { return this._addon.GetAddinPath(type); } catch (e) { Evernote.Logger.error("Failed to clip full page due to error " + e); } }, /** * Returns localized message by code. * @param code - number of message in resource file. */ getLocalizedMessage : function(code) { try { return this._addon.GetLocalizedString(code); } catch (e) { Evernote.Logger.error("Failed to retrieve localized message due to error " + e); } }, clipNote : function(content, options, sourceUrl, imageUrls, silent, doc ) { var isSilentClip = silent ? 1 : 0; var images = imageUrls; if(!(images instanceof Array)) { images = [imageUrls]; } try { Evernote.Logger.debug("Clip to " + (options.notebookUid) + " with tags: " + options.tags.join(",") + " ; comment: " + options.comments); return this._addon.ClipNote(options.title, content, sourceUrl, isSilentClip, images.join("#") , options.notebookUid, options.tags.join(","), "", doc,"EvernoteGlobalReceiver"); } catch (e) { Evernote.Logger.error("Failed to clipNote due to error " + e); throw e; } }, getCursorXPosition : function() { try { return this._addon.GetCursorXPosition(); } catch (e) { Evernote.Logger.error("Failed to retrieve localized message due to error " + e); throw e; } }, /** * Call Addin to get all notebooks (global "EvernoteGlobalReceiver" function is called with response) * @param document - document object */ getNotebooks : function(document) { this._addon.GetNotebooks(document, "EvernoteGlobalReceiver", Evernote.NotebookTypes.PERSONAL); this._addon.GetNotebooks(document, "EvernoteGlobalReceiver", Evernote.NotebookTypes.BUSINESS); this._addon.GetNotebooks(document, "EvernoteGlobalReceiver", Evernote.NotebookTypes.LINKED); }, /** * Call Addin to get all personal tags (global "EvernoteGlobalReceiver" function is called with response) * @param document - document object */ getTags : function(document) { this._addon.GetTags(document, "EvernoteGlobalReceiver"); }, /** * Call Addin to get linked notebook tags (global "EvernoteGlobalReceiver" function is called with response) * @param document - document object */ getLinkedTags : function(document, notebookUid) { this._addon.GetLinkedNotebooksTags(document, "EvernoteGlobalReceiver", notebookUid); }, /** * Returns document location address * @param document - DOM document * @return {*} */ getDocumentHref: function(document) { return this._addon.GetDocumentHref(document); }, allowSetForegroundWindow: function(id) { this._addon.AllowSetForegroundWindow(id); }, getProcessID: function(doc) { this._addon.GetProcessID(doc, "EvernoteGlobalReceiver"); } };</script><script type="text/javascript" defer="" charset="ANSI">Evernote.FileLogger = { _addin : Evernote.Addin, _log : function(level, message) { if(level >= this.level) this._addin.log(level, "JS: " + message); }, debug : function(message) { try { this._log(0, message); } catch(e) { if(this._next) { this._next.debug(message); } } }, info : function(message) { try { this._log(1, message); } catch(e) { if(this._next) { this._next.info(message); } } }, warn : function(message) { try { this._log(2, message); } catch(e) { if(this._next) { this._next.warn(message); } } }, error : function(message) { try { this._log(3, message); } catch(e) { if(this._next) { this._next.error(message); } } }, setNext : function(logger) { this._next = logger; this._next.setLevel(this.level); }, setLevel : function(level) { this.level = level; } };</script><script type="text/javascript" defer="" charset="ANSI">Evernote.ConsoleLogger = { debug : function(message) { if(this.level >= Evernote.LoggerConfigurator.DEBUG) { try { console.info(message); } catch(e) { if(this._next) { this._next.debug(message); } } } }, info : function(message) { if(this.level >= Evernote.LoggerConfigurator.INFO) { try { console.info(message); } catch(e) { if(this._next) { this._next.info(message); } } } }, warn : function(message) { if(this.level >= Evernote.LoggerConfigurator.WARN) { try { console.warn(message); } catch(e) { if(this._next) { this._next.warn(message); } } } }, error : function(message) { if(this.level >= Evernote.LoggerConfigurator.ERROR) { try { console.error(message); } catch(e) { if(this._next) { this._next.error(message); } } } }, setNext : function(logger) { this._next = logger; }, setLevel : function(level) { this.level = level; } };</script><script type="text/javascript" defer="" charset="ANSI">Evernote.AlertLogger = { debug : function(message) { alert("Debug: " + message); }, info : function(message) { alert("Info: " + message); }, warn : function(message) { alert("Warn: " + message); }, error : function(message) { alert("Error: " + message); } };</script><script type="text/javascript" defer="" charset="ANSI">Evernote.LoggerConfigurator = { DEBUG : 0, INFO : 1, WARN: 2, ERROR: 3, getLogger : function() { var logger = Evernote.FileLogger; if(logger) { logger.setLevel(this.WARN); Evernote.ConsoleLogger.setNext(Evernote.AlertLogger); logger.setNext(Evernote.ConsoleLogger); return logger; } return Evernote.ConsoleLogger; } };</script><script type="text/javascript" defer="" charset="ANSI">/** * Represents page context (have permissions to access and modify DOM objects) */ try { PageContext = { url: (location && location.href) ? location.href : document.location.href, title: document.title, META: "evernote-webclipper-extension", getFavIconUrl : function() { var links = document.getElementsByTagName("link"); var i; for (i = 0; i < links.length; i++) { if (links[i].rel) { var rels = links[i].rel.toLowerCase().split(/\s+/); if (Evernote.ArrayExtension.indexOf(rels, "icon") !== -1) { // Found it! return links[i].href; } } } //Try to get it from google web site var re = new RegExp( "^[^:]+:\/+([^\/" + ":" + "]+).*$" ); var domain = PageContext.url.replace( re, "$1" ); return "http://www.google.com/s2/favicons?domain=" + domain.toLowerCase(); }, injectAdditionalTags : function() { var url = document.location.href; if ( url.match( /^https?:\/\/[a-z0-9-+\.]*(evernote|yinxiang)\.com\//i ) ) { try { var metas = document.getElementsByTagName( "meta" ); for ( var i = 0; i < metas.length; ++i ) { if ( metas[i].name == PageContext.META ) { return; } } var meta = document.createElement( "meta" ); meta.name = PageContext.META; meta.content = "installed"; var head = document.head; if ( head ) { head.appendChild( meta ); } if ( document.body ) { document.body.className += ((document.body.className) ? " " : "") + PageContext.META; } } catch ( e ) { alert( "PageContext.injectAdditionalTags() failed: " + e ); throw e; } } } }; if((document.readyState == "complete" || document.readyState == "interactive") && !window.PageContext) { PageContext.injectAdditionalTags(); } } catch(e) { //Just ignore exception here }</script><script type="text/javascript" defer="" charset="ANSI">/** * String constants used in the project. * @type {Object} */ Constants = { CLIP_DIALOG_ID : "evernote-content", OPTIONS_DIALOG_ID : "evernote-options-content" };</script><script type="text/javascript" defer="" charset="ANSI">/*! jQuery v1.7.2 jquery.com | jquery.org/license */ (function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cu(a){if(!cj[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ck||(ck=c.createElement("iframe"),ck.frameBorder=ck.width=ck.height=0),b.appendChild(ck);if(!cl||!ck.createElement)cl=(ck.contentWindow||ck.contentDocument).document,cl.write((f.support.boxModel?"":"")+"<html><body>"),cl.close();d=cl.createElement(a),cl.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ck)}cj[a]=e}return cj[a]}function ct(a,b){var c={};f.each(cp.concat.apply([],cp.slice(0,b)),function(){c[this]=a});return c}function cs(){cq=b}function cr(){setTimeout(cs,0);return cq=f.now()}function ci(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ch(){try{return new a.XMLHttpRequest}catch(b){}}function cb(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;e=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?+d:j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3 ?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.2",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){if(typeof c!="string"||!c)return null;var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;cg ;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h,i,j=this[0],k=0,m=null;if(a===b){if(this.length){m=f.data(j);if(j.nodeType===1&&!f._data(j,"parsedAttrs")){g=j.attributes;for(i=g.length;k1,null,!1)},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){var d=2;typeof a!="string"&&(c=a,a="fx",d--);if(arguments.length1)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,f.prop,a,b,arguments.length>1)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.type]||f.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.type]||f.valHooks[g.nodeName.toLowerCase()];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0 )return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h,i=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;i=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/(?:^|\s)hover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function( a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler,g=p.selector),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0 ?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&j.push({elem:this,matches:d.slice(e)});for(k=0;kb.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));o.match.globalPOS=p;var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/]","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
","
"]),f.fn.extend({text:function(a){return f.access(this,function(a){return a===b?f.text(this):this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f .clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){return f.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(;d1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||f.isXMLDoc(a)||!bc.test("<"+a.nodeName+">")?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g,h,i,j=[];b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);for(var k=0,l;(l=a[k])!=null;k++){typeof l=="number"&&(l+="");if(!l)continue;if(typeof l=="string")if(!_.test(l))l=b.createTextNode(l);else{l=l.replace(Y,"<$1>");var m=(Z.exec(l)||["",""])[1].toLowerCase(),n=bg[m]||bg._default,o=n[0],p=b.createElement("div"),q=bh.childNodes,r;b===c?bh.appendChild(p):U(b).appendChild(p),p.innerHTML=n[1]+l+n[2];while(o--)p=p.lastChild;if(!f.support.tbody){var s=$.test(l),t=m==="table"&&!s?p.firstChild&&p.firstChild.childNodes:n[1]===""&&!s?p.childNodes:[];for(i=t.length-1;i>=0;--i)f.nodeName(t[i],"tbody")&&!t[i].childNodes.length&&t[i].parentNode.removeChild(t[i])}!f.support.leadingWhitespace&&X.test(l)&&p.insertBefore(b.createTextNode(X.exec(l)[0]),p.firstChild),l=p.childNodes,p&&(p.parentNode.removeChild(p),q.length>0&&(r=q[q.length-1],r&&r.parentNode&&r.parentNode.removeChild(r)))}var u;if(!f.support.appendChecked)if(l[0]&&typeof (u=l.length)=="number")for(i=0;i1)},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=by(a,"opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bu.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(by)return by(a,c)},swap:function(a,b,c){var d={},e,f;for(f in b)d[f]=a.style[f],a.style[f]=b[f];e=c.call(a);for(f in b)a.style[f]=d[f];return e}}),f.curCSS=f.css,c.defaultView&&c.defaultView.getComputedStyle&&(bz=function(a,b){var c,d,e,g,h=a.style;b=b.replace(br,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b))),!f.support.pixelMargin&&e&&bv.test(b)&&bt.test(c)&&(g=h.width,h.width=c,c=e.width,h.width=g);return c}),c.documentElement.currentStyle&&(bA=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f==null&&g&&(e=g[b])&&(f=e),bt.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),by=bz||bA,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth!==0?bB(a,b,d):f.swap(a,bw,function(){return bB(a,b,d)})},set:function(a,b){return bs.test(b)?b+"px":b}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bq.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bp,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bp.test(g)?g.replace(bp,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){return f.swap(a,{display:"inline-block"},function(){return b?by(a,"margin-right"):a.style.marginRight})}})}),f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)}),f.each({margin:"",padding:"",border:"Width"},function(a,b){f.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4 ;d++)f[a+bx[d]+b]=e[d]||e[d-2]||e[0];return f}}});var bC=/%20/g,bD=/\[\]$/,bE=/\r?\n/g,bF=/#.*$/,bG=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bH=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bI=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bJ=/^(?:GET|HEAD)$/,bK=/^\/\//,bL=/\?/,bM=/)<[^<]*)*<\/script>/gi,bN=/^(?:select|textarea)/i,bO=/\s+/,bP=/([?&])_=[^&]*/,bQ=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bR=f.fn.load,bS={},bT={},bU,bV,bW=["*/"]+["*"];try{bU=e.href}catch(bX){bU=c.createElement("a"),bU.href="",bU=bU.href}bV=bQ.exec(bU.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bR)return bR.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
").append(c.replace(bM,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bN.test(this.nodeName)||bH.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bE,"\r\n")}}):{name:b.name,value:c.replace(bE,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b$(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b$(a,b);return a},ajaxSettings:{url:bU,isLocal:bI.test(bV[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bW},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bY(bS),ajaxTransport:bY(bT),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?ca(d,v,l):b,y,z;if(a>=200&&a<300 ||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cb(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bG.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bF,"").replace(bK,bV[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bO),d.crossDomain==null&&(r=bQ.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bV[1]&&r[2]==bV[2]&&(r[3]||(r[1]==="http:"?80:443))==(bV[3]||(bV[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bZ(bS,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bJ.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bL.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bP,"$1_="+x);d.url=y+(y===d.url?(bL.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bW+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bZ(bT,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2 )w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)b_(g,a[g],c,e);return d.join("&").replace(bC,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cc=f.now(),cd=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cc++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=typeof b.data=="string"&&/^application\/x\-www\-form\-urlencoded/.test(b.contentType);if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cd.test(b.url)||e&&cd.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cd,l),b.url===j&&(e&&(k=k.replace(cd,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var ce=a.ActiveXObject?function(){for(var a in cg)cg[a](0,1)}:!1,cf=0,cg;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ch()||ci()}:ch,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,ce&&delete cg[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n);try{m.text=h.responseText}catch(a){}try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cf,ce&&(cg||(cg={},f(a).unload(ce)),cg[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cj={},ck,cl,cm=/^(?:toggle|show|hide)$/,cn=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,co,cp=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cq;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(ct("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);f.fn[a]=function(e){return f.access(this,function(a,e,g){var h=cy(a);if(g===b)return h?c in h?h[c]:f.support.boxModel&&h.document.documentElement[e]||h.document.body[e]:a[e];h?h.scrollTo(d?f(h).scrollLeft():g,d?g:f(h).scrollTop()):a[e]=g},a,e,arguments.length,null)}}),f.each({Height:"height",Width:"width"},function(a,c){var d="client"+a,e="scroll"+a,g="offset"+a;f.fn["inner"+a]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,c,"padding")):this[c]():null},f.fn["outer"+a]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,c,a?"margin":"border")):this[c]():null},f.fn[c]=function(a){return f.access(this,function(a,c,h){var i,j,k,l;if(f.isWindow(a)){i=a.document,j=i.documentElement[d];return f.support.boxModel&&j||i.body&&i.body[d]||j}if(a.nodeType===9){i=a.documentElement;if(i[d]>=i[e])return i[d];return Math.max(a.body[e],i[e],a.body[g],i[g])}if(h===b){k=f.css(a,c),l=parseFloat(k);return f.isNumeric(l)?l:k}f(a).css(c,h)},c,a,arguments.length,null)}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window);</script><script type="text/javascript" defer="" charset="ANSI">/*! * ClearlyComponent * Offer up Clearly's content detection algorithm as an embeddable component. * * http://evernote.com/clearly/ * Copyright 2012, Evernote Corporation * * Requires: * window.jQueryForClearlyComponent -- an instance of jQuery * * Definition: * window.ClearlyComponent * getContentElementAndHTML(_windowObject, _callbackFunction) { * _callbackFunction({ * '_elements': [ (nodeObjects) ], * '_html': (string), * '_title': (string), * '_multiPage': (bool), * '_rtl': (bool) * }); * } * getOtherPagesHTML(_callbackFunction) { * _callbackFunction( * [ * { * '_html': (string), * '_url': (string) * } * ] * ); * } */ function initClearly( window ) { /* override window object and undefined */ // set main objects // ================ var $C = { 'version': '3335.890.162' }; var $ = window.jQueryForClearlyComponent; var $R = { 'component': true }; // getContentElementAndHTML // ======================== $C.getContentElementAndHTML = function (_windowObject, _callbackFunction) { // we're basically duplicating $R.getContent__find // =============================================== // get content // =========== var _found = $R.getContent__findInPage($R.win), _targetNode = _found._targetCandidate.__node, _$targetNode = $(_targetNode), _aboveNodes = [] ; // RTL // === switch (true) { case (_$targetNode.attr('dir') == 'rtl'): case (_$targetNode.css('direction') == 'rtl'): $R.makeRTL(); break; } // get html // ======== var _foundHTML = _found._html, _firstFragmentBefore = $R.getContent__nextPage__getFirstFragment(_foundHTML), _documentTitle = ($R.document.title > '' ? $R.document.title : '') ; // get title // ========= // has title already? _foundHTML = $R.getContent__find__isolateTitleInHTML(_foundHTML, _documentTitle); $R.articleTitle = $R.getContent__find__getIsolatedTitleInHTML(_foundHTML); $R.debugPrint('TitleSource', 'target'); // get html above? if ($R.articleTitle > ''); else { // get html above target? // ====================== // global vars: // _found // _foundHTML // _documentTitle // _aboveNodes var _prevNode = _found._targetCandidate.__node, _prevHTML = '', _aboveHTML = '', _differentTargets = (_found._firstCandidate.__node != _found._targetCandidate.__node) ; (function () { while (true) { // the end? switch (true) { case (_prevNode.tagName && (_prevNode.tagName.toLowerCase() == 'body')): case (_differentTargets && (_prevNode == _found._firstCandidate.__node)): // enough is enough return; } // up or sideways? if (_prevNode.previousSibling); else { _prevNode = _prevNode.parentNode; continue; } // previous _prevNode = _prevNode.previousSibling; // outline -- element might be re-outlined, when buildHTML is invoked if ($R.debug) { $R.debugOutline(_prevNode, 'target', 'add-above'); } // get html; add _prevHTML = $R.getContent__buildHTMLForNode(_prevNode, 'above-the-target'); _aboveHTML = _prevHTML + _aboveHTML; _aboveNodes.unshift(_prevNode); // isolate title _aboveHTML = $R.getContent__find__isolateTitleInHTML(_aboveHTML, _documentTitle); // finished? switch (true) { case ($R.measureText__getTextLength(_aboveHTML.replace(/<[^>]+?>/gi, '').replace(/\s+/gi, ' ')) > (65 * 3 * 3)): case ($R.getContent__find__hasIsolatedTitleInHTML(_aboveHTML)): return; } } })(); // is what we found any good? // ========================== switch (true) { case ($R.getContent__find__hasIsolatedTitleInHTML(_aboveHTML)): case (_differentTargets && (_aboveHTML.split(']+?>/gi, '').replace(/\s+/gi, ' ')) < (65 * 3))): _foundHTML = _aboveHTML + _foundHTML; break; default: _aboveHTML = ''; _aboveNodes = []; break; } $R.articleTitle = $R.getContent__find__getIsolatedTitleInHTML(_foundHTML); $R.debugPrint('TitleSource', 'above_HTML'); // get document title? if ($R.articleTitle > ''); else { // if all else failed, get document title // ====================================== // global vars: // _foundHTML // _documentTitle (function () { // return? // ======= if (_documentTitle > ''); else { return; } // vars var _doc_title_parts = [], _doc_title_pregs = [ /( [-][-] |( [-] )|( [>][>] )|( [<][<] )|( [|] )|( [\/] ))/i, /(([:] ))/i ] ; // loop through pregs // ================== for (var i=0, _i=_doc_title_pregs.length; i<_i; i++) { // split _doc_title_parts = _documentTitle.split(_doc_title_pregs[i]); // break if we managed a split if (_doc_title_parts.length > 1) { break; } } // sort title parts -- longer goes higher up -- i.e. towards 0 // ================ _doc_title_parts.sort(function (a, b) { switch (true) { case (a.length > b.length): return -1; case (a.length < b.length): return 1; default: return 0; } }); // set title -- first part, if more than one word; otherwise, whole // ========= _foundHTML = '' + $R.articleTitleMarker__start + (_doc_title_parts[0].split(/\s+/i).length > 1 ? _doc_title_parts[0] : _documentTitle) + $R.articleTitleMarker__end + _foundHTML ; })(); $R.articleTitle = $R.getContent__find__getIsolatedTitleInHTML(_foundHTML); $R.debugPrint('TitleSource', 'document_title'); } } // remember // ======== $R.debugRemember['theTarget'] = _found._targetCandidate.__node; $R.debugRemember['firstCandidate'] = _found._firstCandidate.__node; // next // ==== $C._nextPages = []; $R.nextPage__firstFragment__firstPage = _firstFragmentBefore; $R.nextPage__firstFragment__lastPage = $R.getContent__nextPage__getFirstFragment(_foundHTML);; $R.nextPage__loadedPages = [$R.win.location.href]; $R.getContent__nextPage__find($R.win, _found._links); // result var _result = { '_html': _foundHTML, '_title': $R.articleTitle, '_multiPage': ($R.nextPage__loadedPages.length > 1), '_rtl': $R.rtl } ; // add elements _result['_elements'] = _aboveNodes; _result['_elements'].push(_found._targetCandidate.__node); // return _callbackFunction(_result); }; // getOtherPagesHTML // ================= $C.getOtherPagesHTML = function (_callbackFunction) { // curent length var _currentLength = $C._nextPages.length _checkFunction = function () { if ($C._nextPages.length == _currentLength) { // return _callbackFunction($C._nextPages); } else { // reset _currentLength = $C._nextPages.length; window.setTimeout(_checkFunction, 2000); } } ; // set first timeout window.setTimeout(_checkFunction, 2000); }; // includes -- bind to $R // ======== // target // ====== // globals // ======= $R.win = window; $R.document = window.document; $R.$win = $($R.win); $R.$document = $($R.document); // init // ==== // version // ======= $R.version = '3335.890.162'; // paths // ===== $R.paths = { 'main': 'none', 'evernote': 'https://www.evernote.com/' }; // versioning // ========== $R.versioning = { 'file_name_bulk_js': 'bulk.js', 'file_name_bulk_css': 'bulk.css', 'file_name_jQuery_js': 'jQuery.js', 'file_name_miniColors_js': 'jquery.miniColors.js', 'file_name_miniColors_css': 'jquery.miniColors.css', 'file_name_flexSelect_js': 'jquery.flexSelect.js', 'file_name_liquidMetal_js': 'liquidMetal.js', 'file_name_flexSelect_css': 'flexSelect.css', 'file_name_base--theme-1_css': 'base--theme-1.css', 'file_name_base--theme-2_css': 'base--theme-2.css', 'file_name_base--theme-3_css': 'base--theme-3.css', 'file_name_base--blueprint_css':'base--theme-blueprint.css' }; // write // ===== var _body = $R.document.getElementsByTagName('body')[0], _component__next_pages_container_element = $R.document.createElement('div'), _component__in_page_css_element = $R.document.createElement('style'), _component__in_page_css_text = '' + '#next_pages_container { ' + 'width: 5px; hight: 5px; ' + 'position: absolute; ' + 'top: -100px; left: -100px; ' + 'z-index: 2147483647 !important; ' + '} ' ; if(!_body) { _body = $R.document.getElementsByTagName("frameset")[0]; } // css // === _component__in_page_css_element.setAttribute('id', '_clearly_component__css'); _component__in_page_css_element.setAttribute('type', 'text/css'); if (_component__in_page_css_element.styleSheet) { _component__in_page_css_element.styleSheet.cssText = _component__in_page_css_text; } else { _component__in_page_css_element.appendChild(document.createTextNode(_component__in_page_css_text)); } _body.appendChild(_component__in_page_css_element); // next pages // ========== _component__next_pages_container_element.setAttribute('id', '_clearly_component__next_pages_container'); _body.appendChild(_component__next_pages_container_element); $R.$nextPages = $('#_clearly_component__next_pages_container'); // bulk // ==== // debug // ===== // defaults to false if ($R.debug); else { $R.debug = false; } // make it faster -- when not debugging // ============== if (!($R.debug)) { $R.debugRemember = {}; $R.writeLog = function () { return false; }; $R.log = function () { return false; }; $R.debugTimerStart = function () { return false; }; $R.debugTimerEnd = function () { return false; }; $R.debugPrint = function () { return false; }; $R.printDebugOutput = function () { return false; }; $R.debugOutline = function () { return false; }; } else { // remember stuff $R.debugRemember = {}; // vars // ==== $R.debugStuff = []; $R.debugTimers = []; // write log // ========= $R.initializeWriteLogFunction = function () { switch (true) { case (!(!($R.win.console && $R.win.console.log))): $R.writeLog = function (msg) { $R.win.console.log(msg); }; break; case (!(!($R.win.opera && $R.win.opera.postError))): $R.writeLog = function (msg) { $R.win.opera.postError(msg); }; break; default: $R.writeLog = function (msg) {}; break; } }; // log // === $R.initializeWriteLogFunction(); $R.log = function () { if ($R.debug); else { return; } for (var i=0, il=arguments.length; i '')): case (_element.tagName.toLowerCase() == 'onject'): case (_element.tagName.toLowerCase() == 'embed'): return; } var _outline = '#ff5500', _background = 'rgba(255, 85, 0, 0.5)' ; // choose switch (true) { case (_category == 'target' && _reason == 'first'): _outline = '#00cc00'; _background = 'rgba(0, 255, 0, 0.5)'; break; case (_category == 'target' && _reason == 'second'): _outline = '#0000cc'; _background = 'rgba(0, 0, 255, 0.5)'; break; // ===== case (_category == 'target' && _reason == 'next-page'): _outline = '#FF80C0'; _background = 'rgba(255, 128, 192, 0.5)'; break; case (_category == 'target' && _reason == 'add-above'): _outline = '#804000'; _background = 'rgba(128, 64, 0, 0.5)'; break; // ===== case (_category == 'clean-before' && _reason == 'floating'): _outline = '#808080'; _background = 'rgba(128, 128, 128, 0.5)'; break; case (_category == 'clean-after' && _reason == 'missing-density'): _outline = '#C0C0C0'; _background = 'rgba(192, 192, 192, 0.5)'; break; case (_category == 'clean-after' || _category == 'clean-before'): _outline = '#000000'; _background = 'rgba(0, 0, 0, 0.5)'; break; } // do $(_element).attr('readable__outline', (_category + ': ' + _reason)); $(_element).css({ 'outline': '5px solid ' + _outline, 'background-color': '' + _background }); }; $R.debugBackground = function (_element, _category, _reason) { if ($R.debug); else { return; } switch (true) { case (!(_element.nodeType === 1)): case (!(_element.tagName > '')): case (_element.tagName.toLowerCase() == 'onject'): case (_element.tagName.toLowerCase() == 'embed'): // don't outline break; default: var _color = 'transparent'; switch (true) { case (_category == 'target' && _reason == 'first'): _color = ''; break; case (_category == 'target' && _reason == 'second'): _color = ''; break; case (_category == 'target' && _reason == 'next-page'): _color = '#FF80C0'; break; case (_category == 'target' && _reason == 'add-above'): _color = '#804000'; break; case (_category == 'clean-before' && _reason == 'floating'): _color = '#808080'; break; case (_category == 'clean-after' && _reason == 'missing-density'): _color = '#C0C0C0'; break; case (_category == 'clean-after' || _category == 'clean-before'): _color = '#000000'; break; } $(_element).css('outline','5px solid '+_color); $(_element).attr('readable__outline', (_category + ': ' + _reason)); break; } }; // timers // ====== $R.debugTimerStart = function (timerName) { $R.debugTimers.push({ 'name': timerName, 'start': (new Date()).getTime() }); }; $R.debugTimerEnd = function () { var _t = $R.debugTimers.pop(), _time = ((new Date()).getTime() - _t.start); $R.log('TIMER / '+_t.name+': ' + _time); return _time; }; // output -- will be shown in Show function // ====== $R.debugPrint = function (_key, _value) { $R.debugStuff[_key] = _value; }; $R.printDebugOutput = function () { // return if ($R.debug); else { return; } if ($R.customScript) { return; } // first var _first = [ 'Language', 'ExploreAndGetStuff', 'ProcessFirst', 'ProcessSecond', 'BuildHTML', 'BuildHTMLPregs', 'PointsFirst', 'PointsSecond', 'Target', 'NextPage', 'TitleSource' ]; // get and clean _$debug = $('#debugOutput'); _$debug.html(''); // write var _debug_write = function (_key, _value) { _$debug.append('' + '
' + '' + '' + '' ); } // first for (var i=0, _i=_first.length; i<_i; i++) { _debug_write(_first[i], $R.debugStuff[_first[i]]); delete($R.debugStuff[_first[i]]); } // the rest for (var _k in $R.debugStuff) { _debug_write(_k, $R.debugStuff[_k]); } // end; stop $R.debugPrint = function () {}; $R.printDebugOutput = function () {}; }; // scriptable scrolling $R.debugScroll__before1 = function () { $R.win.scrollTo(0, 0); }; $R.debugScroll__before2 = function () { $R.win.scrollTo(0, $R.$win.height()); }; $R.debugScroll__before3 = function () { if ($($R.debugRemember['theTarget']).height() > 0) { $R.debugRemember['theTarget'].scrollIntoView(false); } else { $R.debugRemember['firstCandidate'].scrollIntoView(false); } $R.win.scrollBy(0, 100); }; $R.debugScroll__after1 = function () { window.scrollTo(0, 0); }; $R.debugScroll__after2 = function () { window.scrollTo(0, $R.$win.height()); }; $R.debugScroll__after3 = function () { $('#page1').get(0).scrollIntoView(false); window.scrollBy(0, 100); }; } $R.debug = false; // environment // =========== // environtment // ============ $R.mac = (!$R.iOS && ($R.win.navigator.userAgent.match(/Macintosh/i) != null)); // get browser // var -- gets filled in // === var __the_browser = 'unknown'; // possible values -- in this order // =============== /* firefox safari chrome internet_explorer opera iphone ipad android dolphin firefox_mobile chrome_mobile windows_phone */ // doing work // ========== __the_browser = (function () { // ua string // ========= var _ua = window.navigator.userAgent.toLowerCase(); // cases // ===== if ((_ua.indexOf('windows phone') > -1)) { return 'windows_phone'; } if ((_ua.indexOf('chrome') > -1) && (_ua.indexOf('android') > -1)) { return 'chrome_mobile'; } if ((_ua.indexOf('firefox') > -1) && (_ua.indexOf('fennec') > -1)) { return 'firefox_mobile'; } if ((_ua.indexOf('dolfin') > -1) || (_ua.indexOf('dolphin') > -1)) { return 'dolphin'; } if ((_ua.indexOf('android') > -1)) { return 'android'; } if ((_ua.indexOf('ipad') > -1)) { return 'ipad'; } if ((_ua.indexOf('iphone') > -1)) { return 'iphone'; } if ($.browser.opera) { return 'opera'; } if ($.browser.msie) { return 'internet_explorer'; } if ($.browser.webkit && (_ua.indexOf('chrome') > -1)) { return 'chrome'; } if ($.browser.webkit && (_ua.indexOf('safari') > -1)) { return 'safari'; } if ($.browser.mozilla) { return 'firefox'; } })(); $R.browser = __the_browser; // language specific stuff // ======================= // default $R.language = 'general'; // the text - start with title var _test_text = ' ' + $R.document.title; // add couple of random paragraphs, divs var _ps = $R.document.getElementsByTagName('p'), _ds = $R.document.getElementsByTagName('div') ; // add for (var i=0; i<5; i++) { _test_text += ' ' + $(_ps[Math.floor(Math.random()*_ps.length)]).text(); } for (var i=0; i<5; i++) { _test_text += ' ' + $(_ds[Math.floor(Math.random()*_ds.length)]).text(); } // check switch (true) { // case ($R.win.location.host.match(/\.jp$/i) != null): // case ($R.win.location.host.match(/\.cn$/i) != null): // case ($R.win.location.host.match(/\.tw$/i) != null): // case ($R.win.location.host.match(/\.hk$/i) != null): // case ($R.win.location.host.match(/\.kr$/i) != null): case (_test_text.match(/([\u3000])/gi) != null): case (_test_text.match(/([\u3001])/gi) != null): case (_test_text.match(/([\u3002])/gi) != null): case (_test_text.match(/([\u301C])/gi) != null): $R.language = 'cjk'; break; } // in case we stop $R.debugPrint('Language', $R.language); // rtl // === // var // === $R.rtl = false; // functions // ========= $R.makeRTL = function () { // set $R.rtl = true; // as component; return if ($R.component) { return; } $('#curtain__rtl__radio__rtl').get(0).checked = true; $('#curtain__rtl__radio__ltr').get(0).checked = false; $('html') .attr('dir', 'rtl') .addClass('couldBeRTL') .addClass('rtl'); $R.$pages .attr('dir', 'rtl') .addClass('rtl'); }; $R.makeNotRTL = function () { // set $R.rtl = false; // as component; return if ($R.component) { return; } $('#curtain__rtl__radio__rtl').get(0).checked = false; $('#curtain__rtl__radio__ltr').get(0).checked = true; $('html') .attr('dir', '') .removeClass('rtl'); $R.$pages .attr('dir', '') .removeClass('rtl'); }; // detect // ====== (function () { // definitely rtl $R.$document.find('html, body').each(function (_i, _e) { switch (true) { case ($(_e).attr('dir') == 'rtl'): case ($(_e).css('direction') == 'rtl'): case ($(_e).attr('lang') == 'he'): case ($(_e).attr('lang') == 'he-il'): case ($(_e).attr('lang') == 'ar'): case ($(_e).attr('lang') == 'ur'): $R.makeRTL(); return false; } }); // maybe rtl // ========= if ($R.component); else { if ((!$R.rtl) && ($R.$document.find("div[dir='rtl'], table[dir='rtl'], td[dir='rtl']").length > 0)) { $('html').addClass('couldBeRTL'); } } })(); // events // ====== if ($R.component); else { $('#curtain__rtl__radio__rtl').change(function(){ $R.makeRTL(); return false; }); $('#curtain__rtl__radio__ltr').change(function(){ $R.makeNotRTL(); return false; }); } // measure text // ============ // asian languages // =============== // http://msdn.microsoft.com/en-us/goglobal/bb688158 // http://en.wikipedia.org/wiki/Japanese_punctuation // http://en.wikipedia.org/wiki/Japanese_typographic_symbols // http://unicode.org/charts/PDF/U3000.pdf // CJK: Chnese, Japanese, Korean -- HAN character set // length // ====== $R.measureText__getTextLength = function (_the_text) { var _text = _the_text; _text = _text.replace(/[\s\n\r]+/gi, ''); //_text = _text.replace(/\d+/, ''); return _text.length; }; // word count // ========== $R.measureText__getWordCount = function (_the_text) { var _text = _the_text; // do stuff // ======== _text = _text.replace(/[\s\n\r]+/gi, ' '); _text = _text.replace(/([.,?!:;()\[\]'""-])/gi, ' $1 '); _text = _text.replace(/([\u3000])/gi, '[=words(1)]'); _text = _text.replace(/([\u3001])/gi, '[=words(2)]'); _text = _text.replace(/([\u3002])/gi, '[=words(4)]'); _text = _text.replace(/([\u301C])/gi, '[=words(2)]'); _text = _text.replace(/([\u2026|\u2025])/gi, '[=words(2)]'); _text = _text.replace(/([\u30FB\uFF65])/gi, '[=words(1)]'); _text = _text.replace(/([\u300C\u300D])/gi, '[=words(1)]'); _text = _text.replace(/([\u300E\u300F])/gi, '[=words(1)]'); _text = _text.replace(/([\u3014\u3015])/gi, '[=words(1)]'); _text = _text.replace(/([\u3008\u3009])/gi, '[=words(1)]'); _text = _text.replace(/([\u300A\u300B])/gi, '[=words(1)]'); _text = _text.replace(/([\u3010\u3011])/gi, '[=words(1)]'); _text = _text.replace(/([\u3016\u3017])/gi, '[=words(1)]'); _text = _text.replace(/([\u3018\u3019])/gi, '[=words(1)]'); _text = _text.replace(/([\u301A\u301B])/gi, '[=words(1)]'); _text = _text.replace(/([\u301D\u301E\u301F])/gi, '[=words(1)]'); _text = _text.replace(/([\u30A0])/gi, '[=words(1)]'); // count // ===== var _count = 0, _words_match = _text.match(/([^\s\d]{3,})/gi) ; // add match _count += (_words_match != null ? _words_match.length : 0); // add manual count _text.replace(/\[=words\((\d)\)\]/, function (_match, _plus) { _count += (5 * parseInt(_plus)); }); // return // ====== return _count; }; // levenshtein // =========== $R.levenshteinDistance = function (str1, str2) { var l1 = str1.length, l2 = str2.length; if (Math.min(l1, l2) === 0) { return Math.max(l1, l2); } var i = 0, j = 0, d = []; for (i = 0 ; i <= l1 ; i++) { d[i] = []; d[i][0] = i; } for (j = 0 ; j <= l2 ; j++) { d[0][j] = j; } for (i = 1 ; i <= l1 ; i++) { for (j = 1 ; j <= l2 ; j++) { d[i][j] = Math.min ( d[i - 1][j] + 1, d[i][j - 1] + 1, d[i - 1][j - 1] + (str1.charAt(i - 1) === str2.charAt(j - 1) ? 0 : 1) ); } } return d[l1][l2]; }; // content // ======= $R.footnotedLinksCount = 0; $R.getContent = function () { // homepage? if ($R.win.location.href == ($R.win.location.protocol + '//' + $R.win.location.host + '/')) { $('html').addClass('showTips'); } // selection or whole switch (true) { case ($R.getContent__manualSelection()): case ($R.getContent__find()): break; default: break; } // debug $R.printDebugOutput(); // show content $R.showContent(); }; $R.getContent__manualSelection = function () { var _selection = $R.sel.getSelection($R.win), _range = $R.sel.getRange(_selection), _html = $R.sel.getRangeHTML(_range), _text = $R.sel.getRangeText(_range) ; if (_html > '' && _text > ''); else { _html = null; _text = null; $R.$document.find('frame, iframe').each(function (_i, _e) { if (_e.getAttribute('id') == 'readable_iframe') { return; } try { var __doc = $(_e).contents().get(0), __win = $R.sel.getWindowFromDocument(__doc), __selection = $R.sel.getSelection(__win), __range = $R.sel.getRange(__selection), __html = $R.sel.getRangeHTML(__range), __text = $R.sel.getRangeText(__range) ; if (__html > '' && __text > '') { _html = __html; _text = __text; // stop the each return false; } } catch(e) { } }); } // haven't found anything if (_html > '' && _text > ''); else { return false; } // probably selected something by mistake if ($R.measureText__getTextLength(_text) > (65 * 3 * 1.5)); else { return false; } // display // ======= $R.$pages.html(''); $R.displayPageHTML(_html, 1, 'selection'); // return true return true; }; // functions // ========= $R.sel = {}; $R.sel.getWindowFromDocument = function (theDocument) { if (theDocument); else { return null; } if ('defaultView' in theDocument) { arguments.calee = function (theDocument) { if (theDocument); else { return null; } return theDocument.defaultView; }; } else if ('parentWindow' in theDocument) { arguments.calee = function (theDocument) { if (theDocument); else { return null; } return theDocument.parentWindow; }; } else { arguments.calee = function (theDocument) { return null; }; } return arguments.calee(theDocument); }; $R.sel.getSelection = function (theWindow) { if (theWindow); else { return null; } if ('getSelection' in theWindow) { arguments.calee = function (theWindow) { if (theWindow); else { return null; } return theWindow.getSelection(); }; } else if ('selection' in theWindow.document) { arguments.calee = function (theWindow) { if (theWindow); else { return null; } return theWindow.document.selection; }; } else { arguments.calee = function (theWindow) { return null; }; } return arguments.calee(theWindow); }; $R.sel.getRange = function (selection) { if (selection); else { return null; } if ('getRangeAt' in selection) { arguments.calee = function (selection) { if (selection); else { return null; } if (selection.rangeCount > 0) { return selection.getRangeAt(0); } else { return null; } // doesn't work in old versions of safari // ... I don't care }; } else if ('createRange' in selection) { arguments.calee = function (selection) { if (selection); else { return null; } return selection.createRange(); }; } else { arguments.calee = function (selection) { return null; }; } return arguments.calee(selection); }; $R.sel.getRangeHTML = function (range) { if (range); else { return null; } if ('htmlText' in range) { arguments.calee = function (range) { if (range); else { return null; } return range.htmlText; }; } else if ('surroundContents' in range) { arguments.calee = function (range) { if (range); else { return null; } var dummy = range.commonAncestorContainer.ownerDocument.createElement("div"); dummy.appendChild(range.cloneContents()); return dummy.innerHTML; }; } else { arguments.calee = function (range) { return null; }; } return arguments.calee(range); }; $R.sel.getRangeText = function (range) { if (range); else { return null; } if ('text' in range) { arguments.calee = function (range) { if (range); else { return null; } return range.text; }; } else if ('surroundContents' in range) { arguments.calee = function (range) { if (range); else { return null; } var dummy = range.commonAncestorContainer.ownerDocument.createElement("div"); dummy.appendChild(range.cloneContents()); return dummy.textContent; }; } else { arguments.calee = function (range) { return null; }; } return arguments.calee(range); }; // options // ======= $R.parsingOptions = { '_elements_ignore': '|button|input|select|textarea|optgroup|command|datalist|--|frame|frameset|noframes|--|style|link|script|noscript|--|canvas|applet|map|--|marquee|area|base|', '_elements_ignore_tag': '|form|fieldset|details|dir|--|center|font|span|', '_elements_self_closing': '|br|hr|--|img|--|col|--|source|--|embed|param|--|iframe|', '_elements_visible': '|article|section|--|ul|ol|li|dd|--|table|tr|td|--|div|--|p|--|h1|h2|h3|h4|h5|h6|--|span|', '_elements_too_much_content': '|b|i|em|strong|--|h1|h2|h3|h4|h5|--|td|', '_elements_container': '|body|--|article|section|--|div|--|td|--|li|--|dd|dt|', '_elements_link_density': '|div|--|table|ul|ol|--|section|aside|header|', '_elements_floating': '|div|--|table|', '_elements_above_target_ignore':'|br|--|ul|ol|dl|--|table|', '_elements_keep_attributes': { 'a': ['href', 'title', 'name'], 'img': ['src', 'width', 'height', 'alt', 'title'], 'video': ['src', 'width', 'height', 'poster', 'audio', 'preload', 'autoplay', 'loop', 'controls'], 'audio': ['src', 'preload', 'autoplay', 'loop', 'controls'], 'source': ['src', 'type'], 'object': ['data', 'type', 'width', 'height', 'classid', 'codebase', 'codetype'], 'param': ['name', 'value'], 'embed': ['src', 'type', 'width', 'height', 'flashvars', 'allowscriptaccess', 'allowfullscreen', 'bgcolor'], 'iframe': ['src', 'width', 'height', 'frameborder', 'scrolling'], 'td': ['colspan', 'rowspan'], 'th': ['colspan', 'rowspan'] } }; // next page keywords -- (?? charCodeAt() > 127) // ================== $R.nextPage__captionKeywords = [ /* english */ 'next page', 'next', /* german */ 'vorwärts', 'weiter', /* japanese */ '次へ' ]; $R.nextPage__captionKeywords__not = [ /* english */ 'article', 'story', 'post', 'comment', 'section', 'chapter' ]; // skip links // ========== $R.skipStuffFromDomains__links = [ 'doubleclick.net', 'fastclick.net', 'adbrite.com', 'adbureau.net', 'admob.com', 'bannersxchange.com', 'buysellads.com', 'impact-ad.jp', 'atdmt.com', 'advertising.com', 'itmedia.jp', 'microad.jp', 'serving-sys.com', 'adplan-ds.com' ]; // skip images // =========== $R.skipStuffFromDomain__images = [ 'googlesyndication.com', 'fastclick.net', '.2mdn.net', 'de17a.com', 'content.aimatch.com', 'bannersxchange.com', 'buysellads.com', 'impact-ad.jp', 'atdmt.com', 'advertising.com', 'itmedia.jp', 'microad.jp', 'serving-sys.com', 'adplan-ds.com' ]; // keep video // ========== $R.keepStuffFromDomain__video = [ 'youtube.com', 'youtube-nocookie.com', 'vimeo.com', 'hulu.com', 'yahoo.com', 'flickr.com', 'newsnetz.ch' ]; $R.getContent__exploreNodeAndGetStuff = function (_nodeToExplore, _justExploring) { var _global__element_index = 0, _global__inside_link = false, _global__inside_link__element_index = 0, _global__length__above_plain_text = 0, _global__count__above_plain_words = 0, _global__length__above_links_text = 0, _global__count__above_links_words = 0, _global__count__above_candidates = 0, _global__count__above_containers = 0, _global__above__plain_text = '', _global__above__links_text = '', _return__containers = [], _return__candidates = [], _return__links = [] ; // recursive function // ================== var _recursive = function (_node) { // increment index // starts with 1 _global__element_index++; var _tag_name = (_node.nodeType === 3 ? '#text' : ((_node.nodeType === 1 && _node.tagName && _node.tagName > '') ? _node.tagName.toLowerCase() : '#invalid')), _result = { '__index': _global__element_index, '__node': _node, '_is__container': ($R.parsingOptions._elements_container.indexOf('|'+_tag_name+'|') > -1), '_is__candidate': false, '_is__text': false, '_is__link': false, '_is__link_skip': false, '_is__image_small': false, '_is__image_medium': false, '_is__image_large': false, '_is__image_skip': false, '_debug__above__plain_text': _global__above__plain_text, '_debug__above__links_text': _global__above__links_text, '_length__above_plain_text': _global__length__above_plain_text, '_count__above_plain_words': _global__count__above_plain_words, '_length__above_links_text': _global__length__above_links_text, '_count__above_links_words': _global__count__above_links_words, '_length__above_all_text': (_global__length__above_plain_text + _global__length__above_links_text), '_count__above_all_words': (_global__count__above_plain_words + _global__count__above_links_words), '_count__above_candidates': _global__count__above_candidates, '_count__above_containers': _global__count__above_containers, '_length__plain_text': 0, '_count__plain_words': 0, '_length__links_text': 0, '_count__links_words': 0, '_length__all_text': 0, '_count__all_words': 0, '_count__containers': 0, '_count__candidates': 0, '_count__links': 0, '_count__links_skip': 0, '_count__images_small': 0, '_count__images_medium': 0, '_count__images_large': 0, '_count__images_skip': 0 }; // fast return // =========== switch (true) { case ((_tag_name == '#invalid')): case (($R.parsingOptions._elements_ignore.indexOf('|'+_tag_name+'|') > -1)): return; case (($R.parsingOptions._elements_visible.indexOf('|'+_tag_name+'|') > -1)): // included inline // _node, _tag_name must be defined // will return, if node is hidden switch (true) { case (_node.offsetWidth > 0): case (_node.offsetHeight > 0): break; default: switch (true) { case (_node.offsetLeft > 0): case (_node.offsetTop > 0): break; default: // exclude inline DIVs -- which, stupidly, don't have a width/height if ((_tag_name == 'div') && ((_node.style.display || $.css( _node, "display" )) == 'inline')) { break; } // it's hidden; exit current scope return; } break; } break; // self-closing -- with some exceptions case ($R.parsingOptions._elements_self_closing.indexOf('|'+_tag_name+'|') > -1): switch (true) { case ((_tag_name == 'img')): break; default: return; } break; } // do stuff // ======== switch (true) { // text node // ========= case ((_tag_name == '#text')): // mark _result._is__text = true; // get var _nodeText = _node.nodeValue; // result _result._length__plain_text = $R.measureText__getTextLength(_nodeText); _result._count__plain_words = $R.measureText__getWordCount(_nodeText); if (_global__inside_link) { _global__length__above_links_text += _result._length__plain_text; _global__count__above_links_words += _result._count__plain_words; if (false && $R.debug) { _global__above__links_text += ' ' + _nodeText; } } else { _global__length__above_plain_text += _result._length__plain_text; _global__count__above_plain_words += _result._count__plain_words; if (false && $R.debug) { _global__above__plain_text += ' ' + _nodeText; } } // return text return _result; // link // ==== case (_tag_name == 'a'): var _href = ""; try { _href = _node.href; } catch(e) { Evernote.Logger.warn("Clearly: failed to get href of link element" + e); } // sanity if (_href > ''); else { break; } if (_href.indexOf); else { break; } _result._is__link = true; // skip for (var i=0, _i=$R.skipStuffFromDomains__links.length; i<_i; i++) { if (_node.href.indexOf($R.skipStuffFromDomains__links[i]) > -1) { _result._is__link_skip = true; break; } } // inside link if (_global__inside_link); else { _global__inside_link = true; _global__inside_link__element_index = _result.__index; } // done _return__links.push(_result); break; // image // ===== case (_tag_name == 'img'): // skip // ==== if (_node.src && _node.src.indexOf) { for (var i=0, _i=$R.skipStuffFromDomain__images.length; i<_i; i++) { if (_node.src.indexOf($R.skipStuffFromDomain__images[i]) > -1) { _result._is__image_skip = true; break; } } } // size // ==== var _width = $(_node).width(), _height = $(_node).height(); switch (true) { case ((_width * _height) >= 50000): case ((_width >= 350) && (_height >= 75)): _result._is__image_large = true; break; case ((_width * _height) >= 20000): case ((_width >= 150) && (_height >= 150)): _result._is__image_medium = true; break; case ((_width <= 5) && (_height <= 5)): _result._is__image_skip = true; break; default: _result._is__image_small = true; break; } break; } // child nodes // =========== for (var i=0, _i=_node.childNodes.length; i<_i; i++) { var _child = _node.childNodes[i], _child_result = _recursive(_child) ; // if false, continue // ================== if (_child_result); else { continue; } // add to result // ============= _result._count__links += _child_result._count__links + (_child_result._is__link ? 1 : 0); _result._count__links_skip += _child_result._count__links_skip + (_child_result._is__link_skip ? 1 : 0); _result._count__images_small += _child_result._count__images_small + (_child_result._is__image_small ? 1 : 0); _result._count__images_medium += _child_result._count__images_medium + (_child_result._is__image_medium ? 1 : 0); _result._count__images_large += _child_result._count__images_large + (_child_result._is__image_large ? 1 : 0); _result._count__images_skip += _child_result._count__images_skip + (_child_result._is__image_skip ? 1 : 0); _result._count__containers += _child_result._count__containers + (_child_result._is__container ? 1 : 0); _result._count__candidates += _child_result._count__candidates + (_child_result._is__candidate ? 1 : 0); _result._length__all_text += _child_result._length__plain_text + _child_result._length__links_text; _result._count__all_words += _child_result._count__plain_words + _child_result._count__links_words; // plain text / link text // ====================== switch (true) { case (_child_result._is__link): // no text to add _result._length__links_text += (_child_result._length__plain_text + _child_result._length__links_text); _result._count__links_words += (_child_result._count__plain_words + _child_result._count__links_words); break; default: _result._length__plain_text += _child_result._length__plain_text; _result._count__plain_words += _child_result._count__plain_words; _result._length__links_text += _child_result._length__links_text; _result._count__links_words += _child_result._count__links_words; break; } } // after child nodes // ================= // mark as not in link anymore // =========================== if (true && (_result._is__link) && (_global__inside_link__element_index == _result.__index) ) { _global__inside_link = false; _global__inside_link__element_index = 0; } // add to containers // ================= if (_result._is__container || ((_result.__index == 1) && (_justExploring == true))) { // add to containers _return__containers.push(_result); // increase above containers if (_result._is__container) { _global__count__above_containers++; } // add to candidates if (_justExploring); else { switch (true) { case (($R.language != 'cjk') && ((_result._count__links * 2) >= _result._count__plain_words)): /* link ratio */ case (($R.language != 'cjk') && (_result._length__plain_text < (65 / 3))): /* text length */ case (($R.language != 'cjk') && (_result._count__plain_words < 5)): /* words */ case (($R.language == 'cjk') && (_result._length__plain_text < 10)): /* text length */ case (($R.language == 'cjk') && (_result._count__plain_words < 2)): /* words */ //case (_result._length__plain_text == 0): /* no text */ //case (_result._count__plain_words == 0): /* no words */ //case (($R.language == 'cjk') && ((_result._length__plain_text / 65 / 3) < 0.1)): /* paragrahs of 3 lines */ //case (($R.language != 'cjk') && ((_result._count__plain_words / 50) < 0.5)): /* paragraphs of 50 words */ // not a valid candidate //if (_tag_name == 'div') { $R.log('bad candidate', _result.__node); } break; default: // good candidate _result._is__candidate = true; _return__candidates.push(_result); // increase above candidates _global__count__above_candidates++; break; } // special case for body -- if it was just skipped // ===================== if ((_result.__index == 1) && !(_result._is__candidate)) { _result._is__candidate = true; _result._is__bad = true; _return__candidates.push(_result); } } } // return // ====== return _result; }; // actually do it // ============== _recursive(_nodeToExplore); // just exploring -- return first thing // ============== if (_justExploring) { return _return__containers.pop(); } // return containers list // ====================== return { '_containers': _return__containers, '_candidates': _return__candidates, '_links': _return__links }; }; $R.getContent__processCandidates = function (_candidatesToProcess) { // process this var // ================ var _candidates = _candidatesToProcess; // sort _candidates -- the lower in the dom, the closer to position 0 // ================ _candidates.sort(function (a, b) { switch (true) { case (a.__index < b.__index): return -1; case (a.__index > b.__index): return 1; default: return 0; } }); // get first // ========= var _main = _candidates[0] if ($R.debug) { $R.log('should be body', _main, _main.__node); } // pieces of text // and points computation // ====================== for (var i=0, _i=_candidates.length; i<_i; i++) { // pieces // ====== var _count__pieces = 0, _array__pieces = [] ; for (var k=i, _k=_candidates.length; k<_k; k++) { if (_candidates[k]._count__candidates > 0) { continue; } if ($.contains(_candidates[i].__node, _candidates[k].__node)); else { continue; } // store piece, if in debug mode if ($R.debug) { _array__pieces.push(_candidates[k]); } // incement pieces count _count__pieces++; } // candidate details // ================= _candidates[i]['__candidate_details'] = $R.getContent__computeDetailsForCandidate(_candidates[i], _main); // pieces -- do this here because _main doesn't yet have a pieces count // ====== // set pieces _candidates[i]['_count__pieces'] = _count__pieces; _candidates[i]['_array__pieces'] = _array__pieces; // pieces ratio _candidates[i]['__candidate_details']['_ratio__count__pieces_to_total_pieces'] = (_count__pieces / (_candidates[0]._count__pieces + 1)); // check some more // =============== /* switch (true) { case (($R.language != 'cjk') && (_candidates[i]['__candidate_details']['_ratio__length__links_text_to_plain_text'] > 1)): case (($R.language != 'cjk') && (_candidates[i]['__candidate_details']['_ratio__count__links_words_to_plain_words'] > 1)): _candidates[i]._is__bad = true; break; }*/ // points // ====== _candidates[i].__points_history = $R.getContent__computePointsForCandidate(_candidates[i], _main); _candidates[i].__points = _candidates[i].__points_history[0]; } // sort _candidates -- the more points, the closer to position 0 // ================ _candidates.sort(function (a, b) { switch (true) { case (a.__points > b.__points): return -1; case (a.__points < b.__points): return 1; default: return 0; } }); // return // ====== return _candidates; }; $R.getContent__computeDetailsForCandidate = function (_e, _main) { var _r = {}; // bad candidate // ============= if (_e._is__bad) { return _r; } // paragraphs // ========== _r['_count__lines_of_65_characters'] = (_e._length__plain_text / 65); _r['_count__paragraphs_of_3_lines'] = (_r._count__lines_of_65_characters / 3); _r['_count__paragraphs_of_5_lines'] = (_r._count__lines_of_65_characters / 5); _r['_count__paragraphs_of_50_words'] = (_e._count__plain_words / 50); _r['_count__paragraphs_of_80_words'] = (_e._count__plain_words / 80); // total text // ========== _r['_ratio__length__plain_text_to_total_plain_text'] = (_e._length__plain_text / _main._length__plain_text); _r['_ratio__count__plain_words_to_total_plain_words'] = (_e._count__plain_words / _main._count__plain_words); // links // ===== _r['_ratio__length__links_text_to_plain_text'] = (_e._length__links_text / _e._length__plain_text); _r['_ratio__count__links_words_to_plain_words'] = (_e._count__links_words / _e._count__plain_words); _r['_ratio__length__links_text_to_all_text'] = (_e._length__links_text / _e._length__all_text); _r['_ratio__count__links_words_to_all_words'] = (_e._count__links_words / _e._count__all_words); _r['_ratio__length__links_text_to_total_links_text'] = (_e._length__links_text / (_main._length__links_text + 1)); _r['_ratio__count__links_words_to_total_links_words'] = (_e._count__links_words / (_main._count__links_words + 1)); _r['_ratio__count__links_to_total_links'] = (_e._count__links / (_main._count__links + 1)); _r['_ratio__count__links_to_plain_words'] = ((_e._count__links * 2) / _e._count__plain_words); // text above // ========== var _divide__candidates = Math.max(2, Math.ceil(_e._count__above_candidates * 0.5)), _above_text = ((0 + (_e._length__above_plain_text * 1) + (_e._length__above_plain_text / _divide__candidates) ) / 2), _above_words = ((0 + (_e._count__above_plain_words * 1) + (_e._count__above_plain_words / _divide__candidates) ) / 2) ; _r['_ratio__length__above_plain_text_to_total_plain_text'] = (_above_text / _main._length__plain_text); _r['_ratio__count__above_plain_words_to_total_plain_words'] = (_above_words / _main._count__plain_words); // candidates // ========== _r['_ratio__count__candidates_to_total_candidates'] = (_e._count__candidates / (_main._count__candidates + 1)); _r['_ratio__count__containers_to_total_containers'] = (_e._count__containers / (_main._count__containers + 1)); // return // ====== return _r; }; $R.getContent__computePointsForCandidate = function (_e, _main) { var _details = _e.__candidate_details, _points_history = [], _really_big = ((_main._length__plain_text / 65) > 250) ; // bad candidate if (_e._is__bad) { return [0]; } // the basics // ========== _points_history.unshift(((0 + (_details._count__paragraphs_of_3_lines) + (_details._count__paragraphs_of_5_lines * 1.5) + (_details._count__paragraphs_of_50_words) + (_details._count__paragraphs_of_80_words * 1.5) + (_e._count__images_large * 3) - ((_e._count__images_skip + _e._count__images_small) * 0.5) ) * 1000)); // negative if (_points_history[0] < 0) { return [0]; } // candidates, containers, pieces // ============================== var _divide__pieces = Math.max(5, Math.ceil(_e._count__pieces * 0.25)), _divide__candidates = Math.max(5, Math.ceil(_e._count__candidates * 0.25)), _divide__containers = Math.max(10, Math.ceil(_e._count__containers * 0.25)) ; _points_history.unshift(((0 + (_points_history[0] * 3) + (_points_history[0] / _divide__pieces) + (_points_history[0] / _divide__candidates) + (_points_history[0] / _divide__containers) ) / 6)); // total text // ========== $R.getContent__computePointsForCandidate__do(0.10, 2, (1 - (1 - _details._ratio__length__plain_text_to_total_plain_text)), _points_history); $R.getContent__computePointsForCandidate__do(0.10, 2, (1 - (1 - _details._ratio__count__plain_words_to_total_plain_words)), _points_history); if (_really_big) { $R.getContent__computePointsForCandidate__do(0.10, 4, (1 - (1 - _details._ratio__length__plain_text_to_total_plain_text)), _points_history); $R.getContent__computePointsForCandidate__do(0.10, 4, (1 - (1 - _details._ratio__count__plain_words_to_total_plain_words)), _points_history); } // text above // ========== $R.getContent__computePointsForCandidate__do(0.10, 5, (1 - _details._ratio__length__above_plain_text_to_total_plain_text), _points_history); $R.getContent__computePointsForCandidate__do(0.10, 5, (1 - _details._ratio__count__above_plain_words_to_total_plain_words), _points_history); if (_really_big) { $R.getContent__computePointsForCandidate__do(0.10, 10, (1 - _details._ratio__length__above_plain_text_to_total_plain_text), _points_history); $R.getContent__computePointsForCandidate__do(0.10, 10, (1 - _details._ratio__count__above_plain_words_to_total_plain_words), _points_history); } // links outer // =========== $R.getContent__computePointsForCandidate__do(0.75, 1, (1 - _details._ratio__length__links_text_to_total_links_text), _points_history); $R.getContent__computePointsForCandidate__do(0.75, 1, (1 - _details._ratio__count__links_words_to_total_links_words), _points_history); $R.getContent__computePointsForCandidate__do(0.75, 1, (1 - _details._ratio__count__links_to_total_links), _points_history); // links inner // =========== var __lr = ($R.language == 'cjk' ? 0.75 : 0.50); $R.getContent__computePointsForCandidate__do(__lr, 1, (1 - _details._ratio__length__links_text_to_plain_text), _points_history); $R.getContent__computePointsForCandidate__do(__lr, 1, (1 - _details._ratio__count__links_words_to_plain_words), _points_history); $R.getContent__computePointsForCandidate__do(__lr, 1, (1 - _details._ratio__length__links_text_to_all_text), _points_history); $R.getContent__computePointsForCandidate__do(__lr, 1, (1 - _details._ratio__count__links_words_to_all_words), _points_history); $R.getContent__computePointsForCandidate__do(__lr, 1, (1 - _details._ratio__count__links_to_plain_words), _points_history); // candidates, containers, pieces // ============================== $R.getContent__computePointsForCandidate__do(0.75, 1, (1 - _details._ratio__count__candidates_to_total_candidates), _points_history); $R.getContent__computePointsForCandidate__do(0.75, 1, (1 - _details._ratio__count__containers_to_total_containers), _points_history); $R.getContent__computePointsForCandidate__do(0.75, 1, (1 - _details._ratio__count__pieces_to_total_pieces), _points_history); // return -- will get [0] as the actual final points // ====== return _points_history; }; $R.getContent__processCandidatesSecond = function (_processedCandidates) { var _candidates = _processedCandidates, _main = _candidates[0] ; // only get children of target // =========================== _candidates = $.map(_candidates, function (_element, _index) { switch (true) { case (!(_index > 0)): case (!($.contains(_main.__node, _element.__node))): return null; default: return _element; } }); // add main - to amke sure the result is never blank _candidates.unshift(_main); // sort _candidates -- the lower in the dom, the closer to position 0 // ================ _candidates.sort(function (a, b) { switch (true) { case (a.__index < b.__index): return -1; case (a.__index > b.__index): return 1; default: return 0; } }); // second candidate computation // ============================ for (var i=0, _i=_candidates.length; i<_i; i++) { // additional numbers // ================== _candidates[i].__second_length__above_plain_text = (_candidates[i]._length__above_plain_text - _main._length__above_plain_text); _candidates[i].__second_count__above_plain_words = (_candidates[i]._count__above_plain_words - _main._count__above_plain_words); // candidate details // ================= _candidates[i]['__candidate_details_second'] = $R.getContent__computeDetailsForCandidateSecond(_candidates[i], _main); // check some more // =============== /* switch (true) { case (!(_candidates[i]['__candidate_details_second']['_ratio__count__plain_words_to_total_plain_words'] > 0.05)): case (!(_candidates[i]['__candidate_details_second']['_ratio__length__plain_text_to_total_plain_text'] > 0.05)): //case (!(_candidates[i]['__candidate_details_second']['_ratio__count__above_plain_words_to_total_plain_words'] < 0.1)): //case (!(_candidates[i]['__candidate_details_second']['_ratio__length__above_plain_text_to_total_plain_text'] < 0.1)): //case (_candidates[i]['__candidate_details_second']['_ratio__length__above_plain_text_to_plain_text'] > 1): //case (_candidates[i]['__candidate_details_second']['_ratio__count__above_plain_words_to_plain_words'] > 1): _candidates[i]._is__bad = true; // wil set points to 0, in points computation function break; }*/ // points // ====== _candidates[i].__points_history_second = $R.getContent__computePointsForCandidateSecond(_candidates[i], _main); _candidates[i].__points_second = _candidates[i].__points_history_second[0]; } // sort _candidates -- the more points, the closer to position 0 // ================ _candidates.sort(function (a, b) { switch (true) { case (a.__points_second > b.__points_second): return -1; case (a.__points_second < b.__points_second): return 1; default: return 0; } }); // return // ====== return _candidates; }; $R.getContent__computeDetailsForCandidateSecond = function (_e, _main) { var _r = {}; // bad candidate // ============= if (_e._is__bad) { return _r; } // total text // ========== _r['_ratio__length__plain_text_to_total_plain_text'] = (_e._length__plain_text / _main._length__plain_text); _r['_ratio__count__plain_words_to_total_plain_words'] = (_e._count__plain_words / _main._count__plain_words); // links // ===== _r['_ratio__length__links_text_to_all_text'] = (_e._length__links_text / _e._length__all_text); _r['_ratio__count__links_words_to_all_words'] = (_e._count__links_words / _e._count__all_words); _r['_ratio__length__links_text_to_total_links_text'] = (_e._length__links_text / (_main._length__links_text + 1)); _r['_ratio__count__links_words_to_total_links_words'] = (_e._count__links_words / (_main._count__links_words + 1)); _r['_ratio__count__links_to_total_links'] = (_e._count__links / (_main._count__links + 1)); _r['_ratio__count__links_to_plain_words'] = ((_e._count__links * 2) / _e._count__plain_words); // text above // ========== var _divide__candidates = Math.max(2, Math.ceil((_e._count__above_candidates - _main._count__above_candidates) * 0.5)), _above_text = ((0 + (_e.__second_length__above_plain_text * 1) + (_e.__second_length__above_plain_text / _divide__candidates) ) / 2), _above_words = ((0 + (_e.__second_count__above_plain_words * 1) + (_e.__second_count__above_plain_words / _divide__candidates) ) / 2) ; _r['_ratio__length__above_plain_text_to_total_plain_text'] = (_above_text / _main._length__plain_text); _r['_ratio__count__above_plain_words_to_total_plain_words'] = (_above_words / _main._count__plain_words); _r['_ratio__length__above_plain_text_to_plain_text'] = (_above_text / _e._length__plain_text); _r['_ratio__count__above_plain_words_to_plain_words'] = (_above_words / _e._count__plain_words); // candidates // ========== _r['_ratio__count__candidates_to_total_candidates'] = (Math.max(0, (_e._count__candidates - (_main._count__candidates * 0.25))) / (_main._count__candidates + 1)); _r['_ratio__count__containers_to_total_containers'] = (Math.max(0, (_e._count__containers - (_main._count__containers * 0.25))) / (_main._count__containers + 1)); _r['_ratio__count__pieces_to_total_pieces'] = (Math.max(0, (_e._count__pieces - (_main._count__pieces * 0.25))) / (_main._count__pieces + 1)); // return // ====== return _r; }; $R.getContent__computePointsForCandidateSecond = function (_e, _main) { var _details = _e.__candidate_details, _details_second = _e.__candidate_details_second, _points_history = [] ; // bad candidate if (_e._is__bad) { return [0]; } // get initial points // ================== _points_history.unshift(_e.__points_history[(_e.__points_history.length-1)]); // candidates, containers, pieces // ============================== var _divide__pieces = Math.max(5, Math.ceil(_e._count__pieces * 0.25)), _divide__candidates = Math.max(5, Math.ceil(_e._count__candidates * 0.25)), _divide__containers = Math.max(10, Math.ceil(_e._count__containers * 0.25)) ; _points_history.unshift(((0 + (_points_history[0] * 3) + ((_points_history[0] / _divide__pieces) * 2) + ((_points_history[0] / _divide__candidates) * 2) + ((_points_history[0] / _divide__containers) * 2) ) / 9)); // total text // ========== $R.getContent__computePointsForCandidate__do(0.50, 1, (1 - (1 - _details_second._ratio__length__plain_text_to_total_plain_text)), _points_history); $R.getContent__computePointsForCandidate__do(0.50, 1, (1 - (1 - _details_second._ratio__count__plain_words_to_total_plain_words)), _points_history); // text above // ========== var __ar = ($R.language == 'cjk' ? 0.50 : 0.10); $R.getContent__computePointsForCandidate__do(__ar, 1, (1 - _details_second._ratio__length__above_plain_text_to_total_plain_text), _points_history); $R.getContent__computePointsForCandidate__do(__ar, 1, (1 - _details_second._ratio__count__above_plain_words_to_total_plain_words), _points_history); $R.getContent__computePointsForCandidate__do(__ar, 1, (1 - _details_second._ratio__length__above_plain_text_to_plain_text), _points_history); $R.getContent__computePointsForCandidate__do(__ar, 1, (1 - _details_second._ratio__count__above_plain_words_to_plain_words), _points_history); // links outer // =========== $R.getContent__computePointsForCandidate__do(0.75, 1, (1 - _details_second._ratio__count__links_to_total_links), _points_history); $R.getContent__computePointsForCandidate__do(0.75, 1, (1 - _details_second._ratio__length__links_text_to_total_links_text), _points_history); $R.getContent__computePointsForCandidate__do(0.75, 1, (1 - _details_second._ratio__count__links_words_to_total_links_words), _points_history); // links inner // =========== var __lr = ($R.language == 'cjk' ? 0.75 : 0.50); $R.getContent__computePointsForCandidate__do(__lr, 1, (1 - _details._ratio__length__links_text_to_plain_text), _points_history); $R.getContent__computePointsForCandidate__do(__lr, 1, (1 - _details._ratio__count__links_words_to_plain_words), _points_history); $R.getContent__computePointsForCandidate__do(__lr, 1, (1 - _details_second._ratio__length__links_text_to_all_text), _points_history); $R.getContent__computePointsForCandidate__do(__lr, 1, (1 - _details_second._ratio__count__links_words_to_all_words), _points_history); $R.getContent__computePointsForCandidate__do(__lr, 1, (1 - _details_second._ratio__count__links_to_plain_words), _points_history); // candidates, containers, pieces // ============================== $R.getContent__computePointsForCandidate__do(0.10, 2, (1 - _details_second._ratio__count__candidates_to_total_candidates), _points_history); $R.getContent__computePointsForCandidate__do(0.10, 2, (1 - _details_second._ratio__count__containers_to_total_containers), _points_history); $R.getContent__computePointsForCandidate__do(0.10, 2, (1 - _details_second._ratio__count__pieces_to_total_pieces), _points_history); // return -- will get [0] as the actual final points // ====== return _points_history; }; $R.getContent__computePointsForCandidateThird = function (_e, _main) { var _details = _e.__candidate_details, _details_second = _e.__candidate_details_second, _points_history = [] ; // bad candidate if (_e._is__bad) { return [0]; } // get initial points // ================== _points_history.unshift(_e.__points_history[(_e.__points_history.length-1)]); // candidates, containers, pieces // ============================== var _divide__pieces = Math.max(2, Math.ceil(_e._count__pieces * 0.25)), _divide__candidates = Math.max(2, Math.ceil(_e._count__candidates * 0.25)), _divide__containers = Math.max(4, Math.ceil(_e._count__containers * 0.25)) ; _points_history.unshift(((0 + (_points_history[0] * 3) + ((_points_history[0] / _divide__pieces) * 2) + ((_points_history[0] / _divide__candidates) * 2) + ((_points_history[0] / _divide__containers) * 2) ) / 9)); // total text // ========== $R.getContent__computePointsForCandidate__do(0.75, 1, (1 - (1 - _details_second._ratio__length__plain_text_to_total_plain_text)), _points_history); $R.getContent__computePointsForCandidate__do(0.75, 1, (1 - (1 - _details_second._ratio__count__plain_words_to_total_plain_words)), _points_history); // text above // ========== $R.getContent__computePointsForCandidate__do(0.50, 1, (1 - _details._ratio__length__above_plain_text_to_total_plain_text), _points_history); $R.getContent__computePointsForCandidate__do(0.50, 1, (1 - _details._ratio__count__above_plain_words_to_total_plain_words), _points_history); $R.getContent__computePointsForCandidate__do(0.10, 1, (1 - _details_second._ratio__length__above_plain_text_to_total_plain_text), _points_history); $R.getContent__computePointsForCandidate__do(0.10, 1, (1 - _details_second._ratio__count__above_plain_words_to_total_plain_words), _points_history); $R.getContent__computePointsForCandidate__do(0.10, 1, (1 - _details_second._ratio__length__above_plain_text_to_plain_text), _points_history); $R.getContent__computePointsForCandidate__do(0.10, 1, (1 - _details_second._ratio__count__above_plain_words_to_plain_words), _points_history); // links inner // =========== $R.getContent__computePointsForCandidate__do(0.50, 1, (1 - _details._ratio__length__links_text_to_all_text), _points_history); $R.getContent__computePointsForCandidate__do(0.50, 1, (1 - _details._ratio__count__links_words_to_all_words), _points_history); $R.getContent__computePointsForCandidate__do(0.50, 1, (1 - _details._ratio__length__links_text_to_plain_text), _points_history); $R.getContent__computePointsForCandidate__do(0.50, 1, (1 - _details._ratio__count__links_words_to_plain_words), _points_history); $R.getContent__computePointsForCandidate__do(0.50, 1, (1 - _details._ratio__count__links_to_plain_words), _points_history); // candidates, containers, pieces // ============================== $R.getContent__computePointsForCandidate__do(0.50, 1, (1 - _details._ratio__count__candidates_to_total_candidates), _points_history); $R.getContent__computePointsForCandidate__do(0.50, 1, (1 - _details._ratio__count__containers_to_total_containers), _points_history); $R.getContent__computePointsForCandidate__do(0.50, 1, (1 - _details._ratio__count__pieces_to_total_pieces), _points_history); // return -- will get [0] as the actual final points // ====== return _points_history; }; $R.getContent__computePointsForCandidate__do = function (_ratio_remaining, _power, _ratio, _points_history) { var _points_remaining = (_points_history[0] * _ratio_remaining), _points_to_compute = (_points_history[0] - _points_remaining) ; if (_ratio < 0) { //_points_return = (0.75 * _points_remaining); _points_return = _points_remaining; } else { _points_return = 0 + _points_remaining + (_points_to_compute * Math.pow(_ratio, _power)) ; } // add _points_history.unshift(_points_return); }; $R.getContent__buildHTMLForNode = function (_nodeToBuildHTMLFor, _custom_mode) { var _global__element_index = 0, _global__the_html = '', _global__exploreNodeToBuildHTMLFor = $R.getContent__exploreNodeAndGetStuff(_nodeToBuildHTMLFor, true) ; // custom // ====== switch (_custom_mode) { case 'above-the-target': _global__exploreNodeToBuildHTMLFor = false; break; } // recursive function // ================== var _recursive = function (_node) { // increment index -- starts with 1 // =============== _global__element_index++; // vars // ==== var _explored = false, _tag_name = (_node.nodeType === 3 ? '#text' : ((_node.nodeType === 1 && _node.tagName && _node.tagName > '') ? _node.tagName.toLowerCase() : '#invalid')), _pos__start__before = 0, _pos__start__after = 0, _pos__end__before = 0, _pos__end__after = 0 ; // fast return // =========== switch (true) { case ((_tag_name == '#invalid')): case (($R.parsingOptions._elements_ignore.indexOf('|'+_tag_name+'|') > -1)): return; case (_tag_name == '#text'): _global__the_html += _node.nodeValue .replace(//gi, '>') ; return; } // hidden // ====== if ($R.parsingOptions._elements_visible.indexOf('|'+_tag_name+'|') > -1) { // included inline // _node, _tag_name must be defined // will return, if node is hidden switch (true) { case (_node.offsetWidth > 0): case (_node.offsetHeight > 0): break; default: switch (true) { case (_node.offsetLeft > 0): case (_node.offsetTop > 0): break; default: // exclude inline DIVs -- which, stupidly, don't have a width/height if ((_tag_name == 'div') && ((_node.style.display || $.css( _node, "display" )) == 'inline')) { break; } // it's hidden; exit current scope return; } break; } } // clean -- before // ===== // just a return will skip the whol element // including children // objects, embeds, iframes // ======================== switch (_tag_name) { case ('object'): case ('embed'): case ('iframe'): var _src = (_tag_name == 'object' ? $(_node).find("param[name='movie']").attr('value') : $(_node).attr('src')), _skip = ((_src > '') ? false : true) ; if (_skip); else { // default skip _skip = true; // loop for (var i=0, _i=$R.keepStuffFromDomain__video.length; i<_i; i++) { if (_src.indexOf($R.keepStuffFromDomain__video[i]) > -1) { _skip = false; break; } } } // skip? if (_skip) { $R.debugOutline(_node, 'clean-before', 'object-embed-iframe'); return; } break; } // skipped link // ============ if (_tag_name == 'a' || _tag_name == 'li') { _explored = (_explored || $R.getContent__exploreNodeAndGetStuff(_node, true)); switch (true) { case (_explored._is__link_skip): case (((_explored._count__images_small + _explored._count__images_skip) > 0) && (_explored._length__plain_text < 65)): $R.debugOutline(_node, 'clean-before', 'skip-link'); return; } } // link density // ============ if ($R.parsingOptions._elements_link_density.indexOf('|'+_tag_name+'|') > -1) { _explored = (_explored || $R.getContent__exploreNodeAndGetStuff(_node, true)); switch (true) { case (_explored._length__plain_text > (65 * 3 * 2)): case ($R.language == 'cjk' && (_explored._length__plain_text > (65 * 3 * 1))): case (!(_explored._count__links > 1)): case (_global__exploreNodeToBuildHTMLFor && (_explored._length__plain_text / _global__exploreNodeToBuildHTMLFor._length__plain_text) > 0.5): case (_global__exploreNodeToBuildHTMLFor && (_explored._count__plain_words / _global__exploreNodeToBuildHTMLFor._count__plain_words) > 0.5): case ((_explored._length__plain_text == 0) && (_explored._count__links == 1) && (_explored._length__links_text < 65)): case ((_explored._length__plain_text < 25) && ((_explored._count__images_large + _explored._count__images_medium) > 0)): break; case ((_explored._length__links_text / _explored._length__all_text) < 0.5): if (_explored._count__links > 0); else { break; } if (_explored._count__links_skip > 0); else { break; } if (((_explored._count__links_skip / _explored._count__links) > 0.25) && (_explored._length__links_text / _explored._length__all_text) < 0.05) { break; } default: $R.debugOutline(_node, 'clean-before', 'link-density'); return; } } // floating // ======== if ($R.parsingOptions._elements_floating.indexOf('|'+_tag_name+'|') > -1) { _explored = (_explored || $R.getContent__exploreNodeAndGetStuff(_node, true)); switch (true) { case (_explored._length__plain_text > (65 * 3 * 2)): case ($R.language == 'cjk' && (_explored._length__plain_text > (65 * 3 * 1))): case (_global__exploreNodeToBuildHTMLFor && (_explored._length__plain_text / _global__exploreNodeToBuildHTMLFor._length__plain_text) > 0.25): case (_global__exploreNodeToBuildHTMLFor && (_explored._count__plain_words / _global__exploreNodeToBuildHTMLFor._count__plain_words) > 0.25): case ((_explored._length__plain_text < 25) && (_explored._length__links_text < 25) && ((_explored._count__images_large + _explored._count__images_medium) > 0)): case (_node.getElementsByTagName && (_explored._length__plain_text < (65 * 3 * 1)) && ((_node.getElementsByTagName('h1').length + _node.getElementsByTagName('h2').length + _node.getElementsByTagName('h3').length + _node.getElementsByTagName('h4').length) > 0)): break; default: var _float = $(_node).css('float'); if (_float == 'left' || _float == 'right'); else { break; } if ((_explored._length__links_text == 0) && ((_explored._count__images_large + _explored._count__images_medium) > 0)) { break; } $R.debugOutline(_node, 'clean-before', 'floating'); return; } } // above target // ============ if (_custom_mode == 'above-the-target') { // is ignored? if ($R.parsingOptions._elements_above_target_ignore.indexOf('|'+_tag_name+'|') > -1) { $R.debugOutline(_node, 'clean-before', 'above-target'); return; } // is image? if (_tag_name == 'img') { _explored = (_explored || $R.getContent__exploreNodeAndGetStuff(_node, true)); if (_explored._is__image_large); else { $R.debugOutline(_node, 'clean-before', 'above-target'); return; } } // has too many links? //if (_node.getElementsByTagName && _node.getElementsByTagName('a').length > 5) // { $R.debugOutline(_node, 'clean-before', 'above-target'); return; } } // headers that are images // ======================= if (_tag_name.match(/^h(1|2|3|4|5|6)$/gi)) { _explored = (_explored || $R.getContent__exploreNodeAndGetStuff(_node, true)); switch (true) { case ((_explored._length__plain_text < 10) && ((_explored._count__images_small + _explored._count__images_medium + _explored._count__images_large + _explored._count__images_skip) > 0)): $R.debugOutline(_node, 'clean-before', 'skip-heading'); return; } } // start tag // ========= if ($R.parsingOptions._elements_ignore_tag.indexOf('|'+_tag_name+'|') > -1); else { /* mark */ _pos__start__before = _global__the_html.length; /* add */ _global__the_html += '<'+_tag_name; // attributes // ========== // allowed attributes // ================== if (_tag_name in $R.parsingOptions._elements_keep_attributes) { for (var i=0, _i=$R.parsingOptions._elements_keep_attributes[_tag_name].length; i<_i; i++) { var _attribute_name = $R.parsingOptions._elements_keep_attributes[_tag_name][i], _attribute_value = _node.getAttribute(_attribute_name) ; // if present if (_attribute_value > '') { _global__the_html += ' '+_attribute_name+'="'+(_attribute_value)+'"'; } } } // keep ID for all elements // ======================== var _id_attribute = _node.getAttribute('id'); if (_id_attribute > '') { _global__the_html += ' id="'+_id_attribute+'"'; } // links target NEW // ================ if (_tag_name == 'a') { _global__the_html += ' target="_blank"'; } // close start // =========== if ($R.parsingOptions._elements_self_closing.indexOf('|'+_tag_name+'|') > -1) { _global__the_html += ' />'; } else { _global__the_html += '>';} /* mark */ _pos__start__after = _global__the_html.length; } // child nodes // =========== if ($R.parsingOptions._elements_self_closing.indexOf('|'+_tag_name+'|') > -1); else { for (var i=0, _i=_node.childNodes.length; i<_i; i++) { _recursive(_node.childNodes[i]); } } // end tag // ======= switch (true) { case (($R.parsingOptions._elements_ignore_tag.indexOf('|'+_tag_name+'|') > -1)): return; case (($R.parsingOptions._elements_self_closing.indexOf('|'+_tag_name+'|') > -1)): /* mark */ _pos__end__before = _global__the_html.length; /* mark */ _pos__end__after = _global__the_html.length; break; default: /* mark */ _pos__end__before = _global__the_html.length; /* end */ _global__the_html += ''; /* mark */ _pos__end__after = _global__the_html.length; break; } // clean -- after // ===== // we need to actually cut things out of // "_global__the_html", for stuff to not be there // largeObject classes // =================== if (_tag_name == 'iframe' || _tag_name == 'embed' || _tag_name == 'object') { _global__the_html = '' + _global__the_html.substr(0, _pos__start__before) + '
' + _global__the_html.substr(_pos__start__before, (_pos__end__after - _pos__start__before)) + '
' ; return; } // add image classes // ================= if (_tag_name == 'img') { _explored = (_explored || $R.getContent__exploreNodeAndGetStuff(_node, true)); switch (true) { case (_explored._is__image_skip): $R.debugOutline(_node, 'clean-after', 'skip-img'); _global__the_html = _global__the_html.substr(0, _pos__start__before); return; case (_explored._is__image_large): // add float class -- for images too narrow/tall // remove width/height -- only for large images // http://www.wired.com/threatlevel/2011/05/gps-gallery/?pid=89&viewall=true // http://david-smith.org/blog/2012/03/10/ios-5-dot-1-upgrade-stats/index.html // http://www.turntablekitchen.com/2012/04/dutch-baby-with-caramelized-vanilla-bean-pears-moving-through-the-decades/ _global__the_html = '' + _global__the_html.substr(0, _pos__start__before) + '
' + _global__the_html.substr(_pos__start__before, (_pos__end__after - _pos__start__before)).replace(/width="([^=]+?)"/gi, '').replace(/height="([^=]+?)"/gi, '') + '' ; return; } } // large images in links // ===================== if (_tag_name == 'a') { _explored = (_explored || $R.getContent__exploreNodeAndGetStuff(_node, true)); switch (true) { case (_explored._count__images_large == 1): _global__the_html = '' + _global__the_html.substr(0, _pos__start__after-1) + ' class="readableLinkWithLargeImage">' + _global__the_html.substr(_pos__start__after, (_pos__end__before - _pos__start__after)) + '' ; return; case (_explored._count__images_medium == 1): _global__the_html = '' + _global__the_html.substr(0, _pos__start__after-1) + ' class="readableLinkWithMediumImage">' + _global__the_html.substr(_pos__start__after, (_pos__end__before - _pos__start__after)) + '' ; return; } } // too much content // ================ if ($R.parsingOptions._elements_too_much_content.indexOf('|'+_tag_name+'|') > -1) { _explored = (_explored || $R.getContent__exploreNodeAndGetStuff(_node, true)); switch (true) { case (_tag_name == 'h1' && (_explored._length__all_text > (65 * 2))): case (_tag_name == 'h2' && (_explored._length__all_text > (65 * 2 * 3))): case ((_tag_name.match(/^h(3|4|5|6)$/) != null) && (_explored._length__all_text > (65 * 2 * 5))): case ((_tag_name.match(/^(b|i|em|strong)$/) != null) && (_explored._length__all_text > (65 * 5 * 5))): $R.debugOutline(_node, 'clean-after', 'too-much-content'); _global__the_html = '' + _global__the_html.substr(0, _pos__start__before) + _global__the_html.substr(_pos__start__after, (_pos__end__before - _pos__start__after)) ; return; } } // empty elements // ============== switch (true) { case (($R.parsingOptions._elements_self_closing.indexOf('|'+_tag_name+'|') > -1)): case (($R.parsingOptions._elements_ignore_tag.indexOf('|'+_tag_name+'|') > -1)): case (_tag_name == 'td'): break; default: var _contents = _global__the_html.substr(_pos__start__after, (_pos__end__before - _pos__start__after)); _contents = _contents.replace(/(
)/gi, ''); _contents = _contents.replace(/(
)/gi, ''); // for rows, clear empty cells if (_tag_name == 'tr') { _contents = _contents.replace(/
]*?>/gi, ''); _contents = _contents.replace(/<\/tr>/gi, ''); } var _contentsLength = $R.measureText__getTextLength(_contents); switch (true) { case (_contentsLength == 0 && _tag_name == 'p'): _global__the_html = _global__the_html.substr(0, _pos__start__before) + '

'; return; case (_contentsLength == 0): case ((_contentsLength < 5) && ($R.parsingOptions._elements_visible.indexOf('|'+_tag_name+'|') > -1)): $R.debugOutline(_node, 'clean-after', 'blank'); _global__the_html = _global__the_html.substr(0, _pos__start__before); return; } break; } // too much missing // ================ if ($R.parsingOptions._elements_link_density.indexOf('|'+_tag_name+'|') > -1) { _explored = (_explored || $R.getContent__exploreNodeAndGetStuff(_node, true)); var _contents = _global__the_html .substr(_pos__start__after, (_pos__end__before - _pos__start__after)) .replace(/(<([^>]+)>)/gi, ''), _contentsLength = $R.measureText__getTextLength(_contents), _initialLength = 0 + _explored._length__all_text + (_explored._count__images_small * 10) + (_explored._count__images_skip * 10) + (_node.getElementsByTagName('iframe').length * 10) + (_node.getElementsByTagName('object').length * 10) + (_node.getElementsByTagName('embed').length * 10) + (_node.getElementsByTagName('button').length * 10) + (_node.getElementsByTagName('input').length * 10) + (_node.getElementsByTagName('select').length * 10) + (_node.getElementsByTagName('textarea').length * 10) ; // too much missing switch (true) { case (!(_contentsLength > 0)): case (!(_initialLength > 0)): case (!((_contentsLength / _initialLength) < 0.5)): case (!(($R.language == 'cjk') && (_contentsLength / _initialLength) < 0.1)): case ((_global__exploreNodeToBuildHTMLFor && ((_explored._length__plain_text / _global__exploreNodeToBuildHTMLFor._length__plain_text) > 0.25))): case (($R.language == 'cjk') && (_global__exploreNodeToBuildHTMLFor && ((_explored._length__plain_text / _global__exploreNodeToBuildHTMLFor._length__plain_text) > 0.1))): break; default: $R.debugOutline(_node, 'clean-after', 'missing-density'); _global__the_html = _global__the_html.substr(0, _pos__start__before); return; } } // return return; }; // actually do it _recursive(_nodeToBuildHTMLFor); // return html return _global__the_html; }; // article title marker // ==================== $R.articleTitleMarker__start = '

'; $R.articleTitleMarker__end = '

'; // article title check function // ============================ $R.getContent__find__hasIsolatedTitleInHTML = function (_html) { return (_html.substr(0, $R.articleTitleMarker__start.length) == $R.articleTitleMarker__start); }; // article title get function // ============================ $R.getContent__find__getIsolatedTitleInHTML = function (_html) { // is it there? if ($R.getContent__find__hasIsolatedTitleInHTML(_html)); else { return ''; } // regex var _getTitleRegex = new RegExp($R.articleTitleMarker__start + '(.*?)' + $R.articleTitleMarker__end, 'i'), _getTitleMatch = _html.match(_getTitleRegex) ; // match? if (_getTitleMatch); else { return ''; } // return return _getTitleMatch[1]; }; // find title in arbitrary html // ============================ $R.getContent__find__isolateTitleInHTML = function (_html, _document_title) { // can't just use (h1|h2|h3|etc) -- we want to try them in a certain order // ============================= var _heading_pregs = [ /<(h1)[^>]*?>([\s\S]+?)<\/\1>/gi, /<(h2)[^>]*?>([\s\S]+?)<\/\1>/gi, /<(h3|h4|h5|h6)[^>]*?>([\s\S]+?)<\/\1>/gi ], _secondary_headings = '|h2|h3|h4|h5|h6|', _search_document_title = ' ' + _document_title.replace(/<[^>]+?>/gi, '').replace(/\s+/gi, ' ') + ' ' ; // loop pregs // ========== for (var i=0, _i=_heading_pregs.length; i<_i; i++) { // exec var _match = _heading_pregs[i].exec(_html); // return? switch (true) { case (!(_match)): case (!(_heading_pregs[i].lastIndex > -1)): // will continue loop break; default: // measurements var _heading_end_pos = _heading_pregs[i].lastIndex, _heading_start_pos = (_heading_end_pos - _match[0].length), _heading_type = _match[1], _heading_text = _match[2].replace(/<\s*br[^>]*>/gi, '').replace(/[\n\r]+/gi, ''), _heading_text_plain = _heading_text.replace(/<[^>]+?>/gi, '').replace(/\s+/gi, ' '); _heading_length = $R.measureText__getTextLength(_heading_text_plain), _heading_words = [], _to_heading_text = _html.substr(0, _heading_start_pos), _to_heading_length = $R.measureText__getTextLength(_to_heading_text.replace(/<[^>]+?>/gi, '').replace(/\s+/gi, ' ')) ; // return? switch (true) { case (!(_heading_length > 5)): case (!(_heading_length < (65 * 3))): case (!(_to_heading_length < (65 * 3 * 2))): // will continue for loop break; case ((_secondary_headings.indexOf('|' + _heading_type + '|') > -1)): // words in this heading _heading_words = _heading_text_plain.split(' '); // count words present in title for (var j=0, _j=_heading_words.length, _matched_words=''; j<_j; j++) { if (_search_document_title.indexOf(' ' + _heading_words[j] + ' ') > -1) { _matched_words += _heading_words[j] + ' '; } } // break continues for loop // nothing goes to switch's default // ================================ // no break? var _no_break = false; switch (true) { // if it's big enough, and it's a substring of the title, it's good case ((_heading_length > 20) && (_search_document_title.indexOf(_heading_text_plain) > -1)): // if it's slightly smaler, but is exactly at the begging or the end case ((_heading_length > 10) && ((_search_document_title.indexOf(_heading_text_plain) == 1) || (_search_document_title.indexOf(_heading_text_plain) == (_search_document_title.length - 1 - _heading_text_plain.length)))): _no_break = true; break; } // break? var _break = false; switch (true) { // no break? case (_no_break): break; // heading too long? -- if not h2 case ((_heading_length > ((_search_document_title.length - 2) * 2)) && (_heading_type != 'h2')): // heading long enough? case ((_heading_length < Math.ceil((_search_document_title.length - 2) * 0.50))): // enough words matched? case ((_heading_length < 25) && (_matched_words.length < Math.ceil(_heading_length * 0.75))): case ((_heading_length < 50) && (_matched_words.length < Math.ceil(_heading_length * 0.65))): case ((_matched_words.length < Math.ceil(_heading_length * 0.55))): _break = true; break; } // break? if (_break) { break; } default: // this is the title -- do isolation; return // ================= return '' + $R.articleTitleMarker__start + _heading_text + $R.articleTitleMarker__end + _html.substr(_heading_end_pos) ; } break; } } // return unmodified return _html; }; $R.getContent__find = function () { // get content // =========== var _found = $R.getContent__findInPage($R.win), _targetNode = _found._targetCandidate.__node, _$targetNode = $(_targetNode), _aboveNodes = [] ; // RTL // === switch (true) { case (_$targetNode.attr('dir') == 'rtl'): case (_$targetNode.css('direction') == 'rtl'): $R.makeRTL(); break; } // get html // ======== var _foundHTML = _found._html, _firstFragmentBefore = $R.getContent__nextPage__getFirstFragment(_foundHTML), _documentTitle = ($R.document.title > '' ? $R.document.title : '') ; // get title // ========= // has title already? _foundHTML = $R.getContent__find__isolateTitleInHTML(_foundHTML, _documentTitle); $R.articleTitle = $R.getContent__find__getIsolatedTitleInHTML(_foundHTML); $R.debugPrint('TitleSource', 'target'); // get html above? if ($R.articleTitle > ''); else { // get html above target? // ====================== // global vars: // _found // _foundHTML // _documentTitle // _aboveNodes var _prevNode = _found._targetCandidate.__node, _prevHTML = '', _aboveHTML = '', _differentTargets = (_found._firstCandidate.__node != _found._targetCandidate.__node) ; (function () { while (true) { // the end? switch (true) { case (_prevNode.tagName && (_prevNode.tagName.toLowerCase() == 'body')): case (_differentTargets && (_prevNode == _found._firstCandidate.__node)): // enough is enough return; } // up or sideways? if (_prevNode.previousSibling); else { _prevNode = _prevNode.parentNode; continue; } // previous _prevNode = _prevNode.previousSibling; // outline -- element might be re-outlined, when buildHTML is invoked if ($R.debug) { $R.debugOutline(_prevNode, 'target', 'add-above'); } // get html; add _prevHTML = $R.getContent__buildHTMLForNode(_prevNode, 'above-the-target'); _aboveHTML = _prevHTML + _aboveHTML; _aboveNodes.unshift(_prevNode); // isolate title _aboveHTML = $R.getContent__find__isolateTitleInHTML(_aboveHTML, _documentTitle); // finished? switch (true) { case ($R.measureText__getTextLength(_aboveHTML.replace(/<[^>]+?>/gi, '').replace(/\s+/gi, ' ')) > (65 * 3 * 3)): case ($R.getContent__find__hasIsolatedTitleInHTML(_aboveHTML)): return; } } })(); // is what we found any good? // ========================== switch (true) { case ($R.getContent__find__hasIsolatedTitleInHTML(_aboveHTML)): case (_differentTargets && (_aboveHTML.split('
]+?>/gi, '').replace(/\s+/gi, ' ')) < (65 * 3))): _foundHTML = _aboveHTML + _foundHTML; break; default: _aboveHTML = ''; _aboveNodes = []; break; } $R.articleTitle = $R.getContent__find__getIsolatedTitleInHTML(_foundHTML); $R.debugPrint('TitleSource', 'above_HTML'); // get document title? if ($R.articleTitle > ''); else { // if all else failed, get document title // ====================================== // global vars: // _foundHTML // _documentTitle (function () { // return? // ======= if (_documentTitle > ''); else { return; } // vars var _doc_title_parts = [], _doc_title_pregs = [ /( [-][-] |( [-] )|( [>][>] )|( [<][<] )|( [|] )|( [\/] ))/i, /(([:] ))/i ] ; // loop through pregs // ================== for (var i=0, _i=_doc_title_pregs.length; i<_i; i++) { // split _doc_title_parts = _documentTitle.split(_doc_title_pregs[i]); // break if we managed a split if (_doc_title_parts.length > 1) { break; } } // sort title parts -- longer goes higher up -- i.e. towards 0 // ================ _doc_title_parts.sort(function (a, b) { switch (true) { case (a.length > b.length): return -1; case (a.length < b.length): return 1; default: return 0; } }); // set title -- first part, if more than one word; otherwise, whole // ========= _foundHTML = '' + $R.articleTitleMarker__start + (_doc_title_parts[0].split(/\s+/i).length > 1 ? _doc_title_parts[0] : _documentTitle) + $R.articleTitleMarker__end + _foundHTML ; })(); $R.articleTitle = $R.getContent__find__getIsolatedTitleInHTML(_foundHTML); $R.debugPrint('TitleSource', 'document_title'); } } // display // ======= $R.$pages.html(''); $R.displayPageHTML(_foundHTML, 1, $R.win.location.href); // remember // ======== $R.debugRemember['theTarget'] = _found._targetCandidate.__node; $R.debugRemember['firstCandidate'] = _found._firstCandidate.__node; // next // ==== $R.nextPage__firstFragment__firstPage = _firstFragmentBefore; $R.nextPage__firstFragment__lastPage = $R.getContent__nextPage__getFirstFragment(_foundHTML);; $R.nextPage__loadedPages = [$R.win.location.href]; $R.getContent__nextPage__find($R.win, _found._links); // return return true; }; $R.getContent__findInPage = function (_pageWindow) { // calculations // ============ var _firstCandidate = false, _secondCandidate = false, _targetCandidate = false ; $R.debugTimerStart('ExploreAndGetStuff'); var _stuff = $R.getContent__exploreNodeAndGetStuff(_pageWindow.document.body); $R.debugPrint('ExploreAndGetStuff', $R.debugTimerEnd()+'ms'); $R.debugTimerStart('ProcessFirst'); var _processedCandidates = $R.getContent__processCandidates(_stuff._candidates); _firstCandidate = _processedCandidates[0]; _targetCandidate = _firstCandidate; $R.debugPrint('ProcessFirst', $R.debugTimerEnd()+'ms'); // debug if ($R.debug) { // debug first candidates $R.log('First 5 Main Candidates:'); for (var x in _processedCandidates) { if (x == 5) { break; } $R.log(_processedCandidates[x], _processedCandidates[x].__node); } // highlight first $R.debugOutline(_firstCandidate.__node, 'target', 'first'); } // in case we stop $R.debugPrint('Target', 'first'); // do second? switch (true) { case (!(_firstCandidate._count__containers > 0)): case (!(_firstCandidate._count__candidates > 0)): case (!(_firstCandidate._count__pieces > 0)): case (!(_firstCandidate._count__containers > 25)): break; default: $R.debugTimerStart('ProcessSecond'); var _processedCandidatesSecond = $R.getContent__processCandidatesSecond(_processedCandidates); _secondCandidate = _processedCandidatesSecond[0]; $R.debugPrint('ProcessSecond', $R.debugTimerEnd()+'ms'); // they're the same if (_firstCandidate.__node == _secondCandidate.__node) { break; } // debug if ($R.debug) { // log second candidates $R.log('First 5 Second Candidates:'); for (var x in _processedCandidatesSecond) { if (x == 5) { break; } $R.log(_processedCandidatesSecond[x], _processedCandidatesSecond[x].__node); } // highlight second $R.debugOutline(_secondCandidate.__node, 'target', 'second'); } // compute again // ============= _firstCandidate['__points_history_final'] = $R.getContent__computePointsForCandidateThird(_firstCandidate, _firstCandidate); _firstCandidate['__points_final'] = _firstCandidate.__points_history_final[0]; _secondCandidate['__points_history_final'] = $R.getContent__computePointsForCandidateThird(_secondCandidate, _firstCandidate); _secondCandidate['__points_final'] = _secondCandidate.__points_history_final[0]; // log results // =========== if ($R.debug) { $R.log('The 2 Candidates:'); $R.log(_firstCandidate); $R.log(_secondCandidate); } // are we selecting _second? // ========================= switch (true) { case ((_secondCandidate.__candidate_details._count__lines_of_65_characters < 20) && (_secondCandidate.__points_final / _firstCandidate.__points_final) > 1): case ((_secondCandidate.__candidate_details._count__lines_of_65_characters > 20) && (_secondCandidate.__points_final / _firstCandidate.__points_final) > 0.9): case ((_secondCandidate.__candidate_details._count__lines_of_65_characters > 50) && (_secondCandidate.__points_final / _firstCandidate.__points_final) > 0.75): _targetCandidate = _secondCandidate; $R.debugPrint('Target', 'second'); break; } // print points // ============ if ($R.debug) { $R.debugPrint('PointsFirst', _firstCandidate['__points_history_final'][0].toFixed(2)); $R.debugPrint('PointsSecond', _secondCandidate['__points_history_final'][0].toFixed(2)); } break; } // highlight target // ================ if ($R.debug) { $(_targetCandidate.__node).css({ 'box-shadow': 'inset 0px 0px 50px rgba(255, 255, 0, 0.95), 0px 0px 50px rgba(255, 255, 0, 0.95)' }); } // get html // ======== $R.debugTimerStart('BuildHTML'); var _html = $R.getContent__buildHTMLForNode(_targetCandidate.__node, 'the-target'); _html = _html.substr((_html.indexOf('>')+1)) _html = _html.substr(0, _html.lastIndexOf('<')); $R.debugPrint('BuildHTML', $R.debugTimerEnd()+'ms'); $R.debugTimerStart('BuildHTMLPregs'); _html = _html.replace(/<(blockquote|div|p|td|li)([^>]*)>(\s*
)+/gi, '<$1$2>'); _html = _html.replace(/(
\s*)+<\/(blockquote|div|p|td|li)>/gi, ''); _html = _html.replace(/(
\s*)+<(blockquote|div|h\d|ol|p|table|ul|li)([^>]*)>/gi, '<$2$3>'); _html = _html.replace(/<\/(blockquote|div|h\d|ol|p|table|ul|li)>(\s*
)+/gi, ''); _html = _html.replace(/(
\s*
\s*)+/gi, '
'); _html = _html.replace(/(
\s*
\s*)+/gi, '

'); $R.debugPrint('BuildHTMLPregs', $R.debugTimerEnd()+'ms'); // return // ====== return { '_html': _html, '_links': _stuff._links, '_targetCandidate': _targetCandidate, '_firstCandidate': _firstCandidate }; }; // get first page fragment // ======================= $R.getContent__nextPage__getFirstFragment = function (_html) { // remove all tags _html = _html.replace(/<[^>]+?>/gi, ''); // normalize spaces _html = _html.replace(/\s+/gi, ' '); // return first 1000 characters return _html.substr(0, 2000); }; // get link parts // ============== // substr starting with the first slash after // $R.getURLPath = function (_url) { return _url.substr(_url.indexOf('/', (_url.indexOf('//') + 2))); }; // substr until the first slash after // $R.getURLDomain = function (_url) { return _url.substr(0, _url.indexOf('/', (_url.indexOf('//') + 2))) }; // find // ==== $R.getContent__nextPage__find = function (_currentPageWindow, _linksInCurrentPage) { // page id var _pageNr = ($R.nextPage__loadedPages.length + 1); // get // === var _possible = []; if (_possible.length > 0); else { _possible = $R.getContent__nextPage__find__possible(_currentPageWindow, _linksInCurrentPage, 0.5); } //if (_possible.length > 0); else { _possible = $R.getContent__nextPage__find__possible(_currentPageWindow, _linksInCurrentPage, 0.50); } // none if (_possible.length > 0); else { if ($R.debug) { $R.log('no next link found'); } return; } if ($R.debug) { $R.log('possible next', _possible); } // the one // ======= var _nextLink = false; // next keyword? // ============= (function () { if (_nextLink) { return; } for (var i=0, _i=_possible.length; i<_i; i++) { for (var j=0, _j=$R.nextPage__captionKeywords.length; j<_j; j++) { if (_possible[i]._caption.indexOf($R.nextPage__captionKeywords[j]) > -1) { // length // ====== if (_possible[i]._caption.length > $R.nextPage__captionKeywords[j].length * 2) { continue; } // not keywords // ============ for (var z=0, _z=$R.nextPage__captionKeywords__not.length; z<_z; z++) { if (_possible[i]._caption.indexOf($R.nextPage__captionKeywords__not[z]) > -1) { _nextLink = false; return; } } // got it // ====== _nextLink = _possible[i]; return; } } } })(); // caption matched page number // =========================== (function () { if (_nextLink) { return; } for (var i=0, _i=_possible.length; i<_i; i++) { if (_possible[i]._caption == (''+_pageNr)) { _nextLink = _possible[i]; return; } } })(); // next keyword in title // ===================== (function () { if (_nextLink) { return; } for (var i=0, _i=_possible.length; i<_i; i++) { // sanity if (_possible[i]._title > ''); else { continue; } if ($R.measureText__getTextLength(_possible[i]._caption) <= 2); else { continue; } for (var j=0, _j=$R.nextPage__captionKeywords.length; j<_j; j++) { if (_possible[i]._title.indexOf($R.nextPage__captionKeywords[j]) > -1) { // length // ====== if (_possible[i]._title.length > $R.nextPage__captionKeywords[j].length * 2) { continue; } // not keywords // ============ for (var z=0, _z=$R.nextPage__captionKeywords__not.length; z<_z; z++) { if (_possible[i]._title.indexOf($R.nextPage__captionKeywords__not[z]) > -1) { _nextLink = false; return; } } // got it // ====== _nextLink = _possible[i]; return; } } } })(); // return? // ======= if (_nextLink); else { return; } // mark // ==== $R.debugPrint('NextPage', 'true'); if ($R.debug) { $R.debugOutline(_nextLink._node, 'target', 'next-page'); $R.log('NextPage Link', _nextLink, _nextLink._node); } // process page // ============ $R.getContent__nextPage__loadToFrame(_pageNr, _nextLink._href); $R.nextPage__loadedPages.push(_nextLink._href); }; // find with similarity // ==================== $R.getContent__nextPage__find__possible = function (_currentPageWindow, _linksInCurrentPage, _distanceFactor) { var _mainPageHref = $R.win.location.href, _mainPageDomain = $R.getURLDomain(_mainPageHref), _mainPagePath = $R.getURLPath(_mainPageHref) ; var _links = $.map ( _linksInCurrentPage, function (_element, _index) { var _href = _element.__node.href, _path = $R.getURLPath(_href), _title = (_element.__node.title > '' ? _element.__node.title.toLowerCase() : ''), _caption = _element.__node.innerHTML.replace(/<[^>]+?>/gi, '').replace(/\&[^\&\s;]{1,10};/gi, '').replace(/\s+/gi, ' ').replace(/^ /, '').replace(/ $/, '').toLowerCase(), _distance = $R.levenshteinDistance(_mainPagePath, _path) ; var _caption2 = ''; for (var i=0, _i=_caption.length, _code=0; i<_i; i++) { _code = _caption.charCodeAt(i); _caption2 += (_code > 127 ? ('&#'+_code+';') : _caption.charAt(i)); } _caption = _caption2; switch (true) { case (!(_href > '')): case (_mainPageHref.length > _href.length): case (_mainPageDomain != $R.getURLDomain(_href)): case (_href.substr(_mainPageHref.length).substr(0, 1) == '#'): case (_distance > Math.ceil(_distanceFactor * _path.length)): return null; default: // skip if already loaded as next page for (var i=0, _i=$R.nextPage__loadedPages.length; i<_i; i++) { if ($R.nextPage__loadedPages[i] == _href) { return null; } } // return return { '_node': _element.__node, '_href': _href, '_title': _title, '_caption': _caption, '_distance': _distance }; } } ); // sort -- the less points, the closer to position 0 // ==== _links.sort(function (a, b) { switch (true) { case (a._distance < b._distance): return -1; case (a._distance > b._distance): return 1; default: return 0; } }); // return return _links; }; // load to frame // ============= $R.getContent__nextPage__loadToFrame = function (_pageNr, _nextPageURL) { // do ajax // ======= $.ajax ({ 'url' : _nextPageURL, 'type' : 'GET', 'dataType' : 'html', 'async' : true, 'timeout': (10 * 1000), //'headers': { 'Referrer': _nextPageURL }, 'success' : function (_response, _textStatus, _xhr) { $R.getContent__nextPage__ajaxComplete(_pageNr, _response, _textStatus, _xhr); }, 'error' : function (_xhr, _textStatus, _error) { $R.getContent__nextPage__ajaxError(_pageNr, _xhr, _textStatus, _error); } }); }; // ajax calbacks // ============= $R.getContent__nextPage__ajaxError = function (_pageNr, _xhr, _textStatus, _error) { }; $R.getContent__nextPage__ajaxComplete = function (_pageNr, _response, _textStatus, _xhr) { // valid? // ====== if (_response > ''); else { return; } // script // ====== var _script = '' + '<script type="text/javascript">' + ' function __this_page_loaded()' + ' {' + ' window.setTimeout(' + ' function () {' + ($R.component ? 'window.parent.' : 'window.parent.parent.') + '$readable.getContent__nextPage__loadedInFrame("'+_pageNr+'", window); }, ' + ' 250' + ' );' + ' } ' + ' if (document.readyState); else { __this_page_loaded(); } ' + ' function __this_page_loaded_ready(delayedNrTimes)' + ' {' + ' if (document.readyState != "complete" && delayedNrTimes < 30)' + ' { setTimeout(function () { __this_page_loaded_ready(delayedNrTimes+1); }, 100); return; }' + ' __this_page_loaded();' + ' }' + ' __this_page_loaded_ready(0);' + '</script>' ; // get html // ======== var _html = _response; // normalize // ========= _html = _html.replace(/<\s+/gi, '<'); _html = _html.replace(/\s+>/gi, '>'); _html = _html.replace(/\s+\/>/gi, '/>'); // remove // ====== _html = _html.replace(/<script [^>]*?>([\s\S]*?)<\/script>/gi, ''); _html = _html.replace(/<script [^>]*?\/>/gi, ''); _html = _html.replace(/
' + _key + '' + _value + '
]*?>/gi, ''); _contents = _contents.replace(/<\/td>/gi, ''); } // for tables, clear empty rows if (_tag_name == 'table') { _contents = _contents.replace(/
번호 제목 글쓴이 날짜 조회 수
» 비행이론 iPilot 자료(2011.5월~2013.1월) 정답보정 & 최근시험 올립니다 데이브 2013.03.29 173273
350 19.3.19 ATR 필기 file Ssuny 2019.03.22 132339
349 공중항법 필기자료 [1] file 박군 2018.08.22 31514
348 항공기상 필기자료 [2] file 박군 2018.08.22 24122
347 CRITICAL DME, DME GAP [4] PG11 2017.01.18 15254
346 항공법 기출 문제 [12] file 십자성 2011.06.30 12581
345 금일(2012/07/05) 비행이론/항공기상 시험 후기 [7] Fly_Sam 2012.07.05 12182
344 공중항법 기출문제 [27] file 아이파일럿 2011.02.18 12123
343 비행이론 2013년 12월 문제 정리및 족보에서 틀린문제 정리 [2] file 붐무기 2014.01.17 12082
342 ATR구술 [1] 심슨 2003.10.07 11555
341 운송용 교통통신, 공중항법(10.31과 11.8일 자료입니다) [1] file 김우성파파 2012.11.17 11188
340 운송용 필기후기 enelm 2018.04.26 10277
339 운송용 필기 후기(기상학, 비행이론) file 삐로트 2018.04.23 10064
338 '19년 11월 비행이론 후기입니다. file 시대기계 2019.12.04 9548
337 운송용 080611 ... 2008.06.12 9477
336 2011년 2월 교통통신 기출문제 모음... [17] file 싸이테이션 2011.03.12 9349
335 2019년 4월 13일 기준 항공법 PDF 파일입니다. 못말리는비행사 2019.04.13 9224
334 구술 족보 언급된 내용 중 정리 Tip 몇가지... [6] 풍가이 2014.11.26 9171
333 비행이론... 밀리터리파일럿 2012.10.23 9087
332 항공법 후기입니다 11월19일 하얀달 2019.11.19 9074


XE Login