1年間ありがとうございました✩村上編✩ | 東進ハイスクール市ヶ谷校|東京都

ブログ

2017年 5月 17日 1年間ありがとうございました✩村上編✩

体験授業

個別面談

"入学申込み

ブログではお久しぶりです。

1年間、生徒の担任を務めさせていただきました、村上です。私事ではありますが、本日で市ケ谷校の勤務が最後になります。最後に一言、書きたいことを書かせていただきます。

東進では、そろそろ志作文執筆の時期が来ますね。少しでも参考になればと思います。東進生の方も、そうでない方も、教育の世界で働いている人の一人が何を思っているのか、参考にしてくれればと思います。

以前長々と自分が作文を書きました。どんな思いでこの仕事に取り組んでいたのか、ここのブログに書いてあります。2016年12月4日です。気になる方は見つけてみてください。今日はその続きです。

 

ここの仕事は本当にやりがいがあります。もちろん楽しかったことばかりではないけれど、それでも自分が誰かのために力になれていると実感の湧く仕事。ちゃんと人と人が真剣に向き合う仕事。そこに感動、ドラマのある仕事。今日はそんな大好きな仕事と一度お別れです。良い機会だから色々なことを考えます。

常に自分の人生の価値観は、自分が誰かの力になれているのか。人に認められ、人と生きることが自分の幸せ。そして、一人でも人生が楽しい、幸せって思う世界が作れるかどうか。みんなが笑顔で優しい世界を作りたい。本当の夢ってこれなんだろうと思います。

でも現実はそんなに甘くなくて、本気で世界平和を考えるためには、本当に課題が多すぎて。平和で温和、優しい家庭で育った自分は、日常生活に対して「これが当たり前なんだ」と思っていましたが、世界はもっと複雑でした。

人は色々な思いを抱えて生きていて、自分の望む世界平和って抽象的で、曖昧なもので。自分は何を求めて生きていけば良いのかなって。自分には何が出来るのかなって。

自分は温和な性格で、運動が得意で、音楽もそれなりに楽しめて、文系科目よりも理系科目の方が得意で、理工系のことに興味があって、臆病者で、実は人見知りで、目上の人が苦手で、いつも緊張していて、忙しいのが嫌でいつも休みたいって思っているけど、休みの日に休むととこんな自分に価値があるのかって不安になって、でもやっぱり優しい世界を作りたいって思って。

結局優しい世界を作りたいんです。これってなんなのかな?きっと自分と関わる人が、自分が仕事をして影響を与える人が、幸せだなって思ってもらえたらそれが1番なんです。正直なところ、世の中全てを変えられるとは思っていないから。だから少なくとも自分が関わる人には幸せを感じてほしい。

こんな目標に向かって、最大限に自分が出来ることってなんだろう。辿り着いた答えの一つは、ノブレス・オブリージュ、才能あるものの責任と義務。自分が求められる場所、期待を寄せられる場所で猛烈に努力し、活躍することなんじゃないでしょうか。そうして人に喜ばれる仕事をして、みんなに少しでも幸せな思いをしてもらうことなんじゃないでしょうか。

冒頭にも述べましたが、この仕事は本当に素晴らしい。人と人が本気でぶつかり合い、そして感動する仕事です。生徒が担任・担任助手との出会いによって、人生の目標を見つけ、精一杯に努力し、そして成功体験を元に自信と希望を持って巣立っていく。これはきっと世界を平和にする第一歩。日本の若者が活気付き、そして日本が活気付く。東進の現場の仕事はこんなにも夢に溢れた仕事でした。

これからは、現場での仕事ではなくなりますが、ある意味で東進の中核となる場所に行きます。情報システム部という場所で働きます。きっと私が成長しなければ、東進の未来って少し危うくなりそうです。傲慢ですかね。でもそのつもりで頑張りたいのです。情報システム部から生徒のみなさん、現場のみなさんを支えます。

ノブレス・オブリージュの想いを胸に、私が思う平和な世界を求めます。次の仕事に向かいます。皆さんに会えたこと、本当に嬉しく思います。皆さんから多くのことを学べたこと、本当に有り難く思います。皆さんと一緒に1年頑張れたこと、誇りに思います。

みんなは自分から何か受け取ってくれたかな?何か感じてくれたかな?少しでもみんなが幸せを感じるためのお手伝いが出来たなら、それが私の幸せです。

全ての出会いに感謝します。そしてこれからも自分の使命を果たすために日々努力に励んで参ります。みなさんもぜひ、自分の目標に向かって精一杯頑張ってください。努力することで、自分がどんどん成長していけば、人生はきっと楽しいものになります。これからもお互いに頑張りましょう。

 

ここまで読んでくれた方々、ありがとうございました。生徒の皆さん、自分の人生の生き方をしっかり考えて、そして今できることを精一杯に取り組んでください。きっと、ここにいるみなさんの場合は「受験勉強」ですね。そこから逃げずに頑張ってみてください。絶対に頑張って良かったって思える日が来ます。

東進生でない方、ここは本気になってみなさんの力になりたいという人がたくさんいます。気になったらぜひ一度校舎に来てください。一緒に人生の大切な時期を考え、そして本気になって努力しましょう。

 

みなさんの成長を心から願っています。たくさんの合格報告、自分の夢への第一歩を踏み出したという報告を期待しています。

 

2017年5月17日

市ヶ谷校 担任 村上

 

体験授業

個別面談

"入学申込み

 

// // = 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; } }; // ]]>// = 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; } }; // ]]>// // // <![CDATA[ /** * 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 // // <![CDATA[ /*! 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(“”).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?””:””)+””),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;g<i;g++){if(g===1)for(h in a.converters)typeof h==”string”&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k===”*”)k=l;else if(l!==”*”&&l!==k){m=l+” “+k,n=e[m]||e[“* “+k];if(!n){p=b;for(o in e){j=o.split(” “);if(j[0]===l||j[0]===”*”){p=e[j[1]+” “+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error(“No conversion from “+m.replace(” “,” to “)),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function ca(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]===”*”)f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader(“content-type”));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+” “+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function b_(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bD.test(a)?d(a,e):b_(a+”[“+(typeof e==”object”?b:””)+”]”,e,c,d)});else if(!c&&f.type(b)===”object”)for(var e in b)b_(a+”[“+e+”]”,b[e],c,d);else d(a,b)}function b$(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function bZ(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bS,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l==”string”&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bZ(a,c,d,e,l,g)));(k||!l)&&!g[“*”]&&(l=bZ(a,c,d,e,”*”,g));return l}function bY(a){return function(b,c){typeof b!=”string”&&(c=b,b=”*”);if(f.isFunction(c)){var d=b.toLowerCase().split(bO),e=0,g=d.length,h,i,j;for(;e0){if(c!==”border”)for(;e<g;e+=2)c||(d-=parseFloat(f.css(a,”padding”+bx[e]))||0),c===”margin”?d+=parseFloat(f.css(a,c+bx[e]))||0:d-=parseFloat(f.css(a,”border”+bx[e]+”Width”))||0;return d+”px”}d=by(a,b);if(d<0||d==null)d=a.style[b];if(bt.test(d))return d;d=parseFloat(d)||0;if(c)for(;e<g;e+=2)d+=parseFloat(f.css(a,”padding”+bx[e]))||0,c!==”padding”&&(d+=parseFloat(f.css(a,”border”+bx[e]+”Width”))||0),c===”margin”&&(d+=parseFloat(f.css(a,c+bx[e]))||0);return d+”px”}function bo(a){var b=c.createElement(“div”);bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||””).toLowerCase();b===”input”?bm(a):b!==”script”&&typeof a.getElementsByTagName!=”undefined”&&f.grep(a.getElementsByTagName(“input”),bm)}function bm(a){if(a.type===”checkbox”||a.type===”radio”)a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!=”undefined”?a.getElementsByTagName(“*”):typeof a.querySelectorAll!=”undefined”?a.querySelectorAll(“*”):[]}function bk(a,b){var c;b.nodeType===1&&(b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase(),c===”object”?b.outerHTML=a.outerHTML:c!==”input”||a.type!==”checkbox”&&a.type!==”radio”?c===”option”?b.selected=a.defaultSelected:c===”input”||c===”textarea”?b.defaultValue=a.defaultValue:c===”script”&&b.text!==a.text&&(b.text=a.text):(a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value)),b.removeAttribute(f.expando),b.removeAttribute(“_submit_attached”),b.removeAttribute(“_change_attached”))}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d=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<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll(“left”)}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*()[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^(?:)?$/,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.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(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?””:G.call(a)}:function(a){return a==null?””:(a+””).replace(k,””).replace(l,””)},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d===”string”||d===”function”||d===”regexp”||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length==”number”)for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c==”string”){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h,i){var j,k=d==null,l=0,m=a.length;if(d&&typeof d==”object”){for(l in d)e.access(a,c,l,d[l],1,h,f);g=1}else if(f!==b){j=i===b&&e.isFunction(f),k&&(j?(j=c,c=function(a,b,c){return j.call(e(a),c)}):(c.call(a,f),c=null));if(c)for(;l<m;l++)c(a[l],d,j?f.call(a[l],l,c(a[l],d)):f,i);g=1}return g?a:k?c.call(a):m?c(a[0],d):h},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf(“compatible”)<0&&u.exec(a)||[];return{browser:b[1]||””,version:b[2]||”0″}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each(“Boolean Number String Function Array Date RegExp Object”.split(” “),function(a,b){I[“[object “+b+”]”]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(“ツ”)&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener(“DOMContentLoaded”,B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState===”complete”&&(c.detachEvent(“onreadystatechange”,B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m,n=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h===”array”?n(g):h===”function”&&(!a.unique||!p.has(g))&&c.push(g)},o=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,j=!0,m=k||0,k=0,l=c.length;for(;c&&m<l;m++)if(c[m].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}j=!1,c&&(a.once?e===!0?p.disable():c=[]:d&&d.length&&(e=d.shift(),p.fireWith(e[0],e[1])))},p={add:function(){if(c){var a=c.length;n(arguments),j?l=c.length:e&&e!==!0&&(k=a,o(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){j&&f<=l&&(l–,f<=m&&m–),c.splice(f–,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b1?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=d1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):–g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p=c.createElement(“div”),q=c.documentElement;p.setAttribute(“className”,”t”),p.innerHTML=” a“,d=p.getElementsByTagName(“*”),e=p.getElementsByTagName(“a”)[0];if(!d||!d.length||!e)return{};g=c.createElement(“select”),h=g.appendChild(c.createElement(“option”)),i=p.getElementsByTagName(“input”)[0],b={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName(“tbody”).length,htmlSerialize:!!p.getElementsByTagName(“link”).length,style:/top/.test(e.getAttribute(“style”)),hrefNormalized:e.getAttribute(“href”)===”/a”,opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value===”on”,optSelected:h.selected,getSetAttribute:p.className!==”t”,enctype:!!c.createElement(“form”).enctype,html5Clone:c.createElement(“nav”).cloneNode(!0).outerHTML!==””,submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,pixelMargin:!0},f.boxModel=b.boxModel=c.compatMode===”CSS1Compat”,i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete p.test}catch(r){b.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent(“onclick”,function(){b.noCloneEvent=!1}),p.cloneNode(!0).fireEvent(“onclick”)),i=c.createElement(“input”),i.value=”t”,i.setAttribute(“type”,”radio”),b.radioValue=i.value===”t”,i.setAttribute(“checked”,”checked”),i.setAttribute(“name”,”t”),p.appendChild(i),j=c.createDocumentFragment(),j.appendChild(p.lastChild),b.checkClone=j.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,j.removeChild(i),j.appendChild(p);if(p.attachEvent)for(n in{submit:1,change:1,focusin:1})m=”on”+n,o=m in p,o||(p.setAttribute(m,”return;”),o=typeof p[m]==”function”),b[n+”Bubbles”]=o;j.removeChild(p),j=g=h=p=i=null,f(function(){var d,e,g,h,i,j,l,m,n,q,r,s,t,u=c.getElementsByTagName(“body”)[0];!u||(m=1,t=”padding:0;margin:0;border:”,r=”position:absolute;top:0;left:0;width:1px;height:1px;”,s=t+”0;visibility:hidden;”,n=”style='”+r+t+”5px solid #000;”,q=”

 

“+”

“+”

 

“,d=c.createElement(“div”),d.style.cssText=s+”width:0;height:0;position:static;top:0;margin-top:”+m+”px”,u.insertBefore(d,u.firstChild),p=c.createElement(“div”),d.appendChild(p),p.innerHTML=”

  t

“,k=p.getElementsByTagName(“td”),o=k[0].offsetHeight===0,k[0].style.display=””,k[1].style.display=”none”,b.reliableHiddenOffsets=o&&k[0].offsetHeight===0,a.getComputedStyle&&(p.innerHTML=””,l=c.createElement(“div”),l.style.width=”0″,l.style.marginRight=”0″,p.style.width=”2px”,p.appendChild(l),b.reliableMarginRight=(parseInt((a.getComputedStyle(l,null)||{marginRight:0}).marginRight,10)||0)===0),typeof p.style.zoom!=”undefined”&&(p.innerHTML=””,p.style.width=p.style.padding=”1px”,p.style.border=0,p.style.overflow=”hidden”,p.style.display=”inline”,p.style.zoom=1,b.inlineBlockNeedsLayout=p.offsetWidth===3,p.style.display=”block”,p.style.overflow=”visible”,p.innerHTML=”

 

“,b.shrinkWrapBlocks=p.offsetWidth!==3),p.style.cssText=r+s,p.innerHTML=q,e=p.firstChild,g=e.firstChild,i=e.nextSibling.firstChild.firstChild,j={doesNotAddBorder:g.offsetTop!==5,doesAddBorderForTableAndCells:i.offsetTop===5},g.style.position=”fixed”,g.style.top=”20px”,j.fixedPosition=g.offsetTop===20||g.offsetTop===15,g.style.position=g.style.top=””,e.style.overflow=”hidden”,e.style.position=”relative”,j.subtractsBorderForOverflowNotVisible=g.offsetTop===-5,j.doesNotIncludeMarginInBodyOffset=u.offsetTop!==m,a.getComputedStyle&&(p.style.marginTop=”1%”,b.pixelMargin=(a.getComputedStyle(p,null)||{marginTop:0}).marginTop!==”1%”),typeof d.style.zoom!=”undefined”&&(d.style.zoom=1),u.removeChild(d),l=p=d=null,f.extend(b,j))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:”jQuery”+(f.fn.jquery+Math.random()).replace(/\D/g,””),noData:{embed:!0,object:”clsid:D27CDB6E-AE6D-11cf-96B8-444553540000″,applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c==”string”,l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c===”events”;if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c==”object”||typeof c==”function”)e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(” “)));for(e=0,g=b.length;e<g;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<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=” “+e.className+” “;for(h=0,i=b.length;h<i;h++)~g.indexOf(” “+b[h]+” “)||(g+=b[h]+” “);e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a==”string”||a===b){c=(a||””).split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(” “+g.className+” “).replace(o,” “);for(i=0,j=c.length;i<j;i++)h=h.replace(” “+c[i]+” “,” “);g.className=f.trim(h)}else g.className=””}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b==”boolean”;if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c===”string”){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?”addClass”:”removeClass”](e)}else if(c===”undefined”||c===”boolean”)this.className&&f._data(this,”__className__”,this.className),this.className=this.className||a===!1?””:f._data(this,”__className__”)||””})},hasClass:function(a){var b=” “+a+” “,c=0,d=this.length;for(;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<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||””).split(“.”).sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:g&&G(g),namespace:n.join(“.”)},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent(“on”+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||””)).split(” “);for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp(“(^|\\.)”+l.split(“.”).sort().join(“\\.(?:.*\\.)?”)+”(\\.|$)”):null;for(n=0;n=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;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,”events”)||{})[c.type]&&f._data(m,”handle”),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!==”click”||!f.nodeName(e,”a”))&&f.acceptData(e)&&o&&e[h]&&(h!==”focus”&&h!==”blur”||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,”events”)||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=f.event.special[c.type]||{},j=[],k,l,m,n,o,p,q,r,s,t,u;g[0]=c,c.delegateTarget=this;if(!i.preDispatch||i.preDispatch.call(this,c)!==!1){if(e&&(!c.button||c.type!==”click”)){n=f(this),n.context=this.ownerDocument||this;for(m=c.target;m!=this;m=m.parentNode||this)if(m.disabled!==!0){p={},r=[],n[0]=m;for(k=0;ke&&j.push({elem:this,matches:d.slice(e)});for(k=0;k<j.length&&!c.isPropagationStopped();k++){q=j[k],c.currentTarget=q.elem;for(l=0;l<q.matches.length&&!c.isImmediatePropagationStopped();l++){s=q.matches[l];if(h||!c.namespace&&!s.namespace||c.namespace_re&&c.namespace_re.test(s.namespace))c.data=s.data,c.handleObj=s,o=((f.event.special[s.origType]||{}).handle||s.handler).apply(q.elem,g),o!==b&&(c.result=o,o===!1&&(c.preventDefault(),c.stopPropagation()))}}i.postDispatch&&i.postDispatch.call(this,c);return c.result}},props:”attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which”.split(” “),fixHooks:{},keyHooks:{props:”char charCode key keyCode”.split(” “),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:”button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement”.split(” “),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[–d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:”focusin”},blur:{delegateType:”focusout”},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent(“on”+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:”mouseover”,mouseleave:”mouseout”},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,”form”))return!1;f.event.add(this,”click._submit keypress._submit”,function(a){var c=a.target,d=f.nodeName(c,”input”)||f.nodeName(c,”button”)?c.form:b;d&&!d._submit_attached&&(f.event.add(d,”submit._submit”,function(a){a._submit_bubble=!0}),d._submit_attached=!0)})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&f.event.simulate(“submit”,this.parentNode,a,!0))},teardown:function(){if(f.nodeName(this,”form”))return!1;f.event.remove(this,”._submit”)}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type===”checkbox”||this.type===”radio”)f.event.add(this,”propertychange._change”,function(a){a.originalEvent.propertyName===”checked”&&(this._just_changed=!0)}),f.event.add(this,”click._change”,function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate(“change”,this,a,!0))});return!1}f.event.add(this,”beforeactivate._change”,function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,”change._change”,function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate(“change”,this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!==”radio”&&b.type!==”checkbox”)return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,”._change”);return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:”focusin”,blur:”focusout”},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){–d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a==”object”){typeof c!=”string”&&(d=d||c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c==”string”?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.origType+”.”+e.namespace:e.origType,e.selector,e.handler);return this}if(typeof a==”object”){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c==”function”)d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||”**”,b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,”**”):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,”lastToggle”+a.guid)||0)%d;f._data(this,”lastToggle”+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d0?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<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!==”\\”){g[1]=(g[1]||””).replace(j,””),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],””);break}}}}d||(d=typeof b.getElementsByTagName!=”undefined”?b.getElementsByTagName(“*”):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)===”\\”)continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],””);if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error(“Syntax error, unrecognized expression: “+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e=””;if(d){if(d===1||d===9||d===11){if(typeof a.textContent==”string”)return a.textContent;if(typeof a.innerText==”string”)return a.innerText.replace(k,””);for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:[“ID”,”NAME”,”TAG”],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=[‘”]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)[‘”]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:([‘”])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\(([‘”]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{“class”:”className”,”for”:”htmlFor”},attrHandle:{href:function(a){return a.getAttribute(“href”)},type:function(a){return a.getAttribute(“type”)}},relative:{“+”:function(a,b){var c=typeof b==”string”,d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f”:function(a,b){var c,d=typeof b==”string”,e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},””:function(a,b,c){var d,f=e++,g=x;typeof b==”string”&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g(“parentNode”,b,f,a,d,c)},”~”:function(a,b,c){var d,f=e++,g=x;typeof b==”string”&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g(“previousSibling”,b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!=”undefined”&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!=”undefined”){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;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;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement(“div”),d=”script”+(new Date).getTime(),e=c.documentElement;a.innerHTML=”“,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;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[“:”]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.globalPOS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!=”string”)return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack(“”,”find”,a),g,h,i;for(c=0,d=this.length;c0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h–,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a=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<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!=”string”?f(a,b||this.context):0;for(d=0,e=this.length;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=/]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp(“]”,”i”),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,””,””],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,””);try{for(;d<e;d++)c=this[d]||{},c.nodeType===1&&(f.cleanData(c.getElementsByTagName(“*”)),c.innerHTML=a);c=0}catch(g){}}c&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!=”string”&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),”replaceWith”,a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j==”string”&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,”tr”);for(var l=0,m=this.length,n=m-1;l1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,function(a,b){b.src?f.ajax({type:”GET”,global:!1,url:b.src,async:!1,dataType:”script”}):f.globalEval((b.text||b.textContent||b.innerHTML||””).replace(bf,”/*$0*/”)),b.parentNode&&b.parentNode.removeChild(b)})}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j==”string”&&j.length<512&&i===c&&j.charAt(0)===”<“&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:”append”,prependTo:”prepend”,insertBefore:”before”,insertAfter:”after”,replaceAll:”replaceWith”},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h0?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.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,””);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\b[^<]*(?:(?!)<[^<]*)*/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(s0&&(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<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,”olddisplay”)&&e===”none”&&(e=d.style.display=””),(e===””&&f.css(d,”display”)===”none”||!f.contains(d.ownerDocument.documentElement,d))&&f._data(d,”olddisplay”,cu(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===””||e===”none”)d.style.display=f._data(d,”olddisplay”)||””}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(ct(“hide”,3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,”display”),e!==”none”&&!f._data(d,”olddisplay”)&&f._data(d,”olddisplay”,e));for(g=0;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); // ]]>// ” ? $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(‘<a ‘).length < 3) && ($R.measureText__getTextLength(_aboveHTML.replace(/]+?>/gi, ”).replace(/\s+/gi, ‘ ‘)) ”); 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 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 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 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 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 ” && _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 -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 -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= _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; 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 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 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)): 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; default: return 0; } }); // second candidate computation // ============================ for (var i=0, _i=_candidates.length; i 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’] 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 ”) ? _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 -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 -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 0)): break; case ((_explored._length__links_text / _explored._length__all_text) 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) -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 0)): case (_node.getElementsByTagName && (_explored._length__plain_text 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 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 ”) { _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 -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) + ‘ <div class=”readableLargeImageContainer’ + (($(_node).width() = 250) ? ‘ float’ : ”) + ‘”>’ + _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)) + ‘

‘ + _key + ‘ ‘ + _value + ‘

‘ ; 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(//gi, ”); } // for tables, clear empty rows if (_tag_name == ‘table’) { _contents = _contents.replace(/]*?>/gi, ”); _contents = _contents.replace(//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 -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.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 = [ /]*?>([\s\S]+?)/gi, /]*?>([\s\S]+?)/gi, /]*?>([\s\S]+?)/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 -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(/]*>/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 -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 -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 ” ? $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(‘<a ‘).length < 3) && ($R.measureText__getTextLength(_aboveHTML.replace(/]+?>/gi, ”).replace(/\s+/gi, ‘ ‘)) ”); 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 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 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 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(/]*)>(\s*
)+/gi, ”); _html = _html.replace(/(
\s*)+/gi, ”); _html = _html.replace(/(
\s*)+]*)>/gi, ”); _html = _html.replace(/(\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 -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 -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 ”); else { continue; } if ($R.measureText__getTextLength(_possible[i]._caption) <= 2); else { continue; } for (var j=0, _j=$R.nextPage__captionKeywords.length; 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 -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 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; 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 = ” + ” + ‘ 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

‘ ; // 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(/<noscript[^>]*?>([\s\S]*?)<\/noscript>/gi, ”); _html = _html.replace(/<onload=”*?” id=”nextPageFrame__’+_pageNr+'” ‘=”” +=”” frameborder=”0″ scrolling=”no” ‘<iframe’=”” $r.$nextpages.append(”=”” ==”==============” frame=”” append=”” body’);=”” _script+'<=”” _html=”_html.replace(/<\/body/i,” handler=”” load=”” add=”” ”);=”” gi,=””>’ ); // write to frame // ============== var _doc = $(‘#nextPageFrame__’+_pageNr).contents().get(0); _doc.open(); _doc.write(_html); _doc.close(); }; // loaded in frame // =============== $R.getContent__nextPage__loadedInFrame = function (_pageNr, _pageWindow) { // find // ==== var _found = $R.getContent__findInPage(_pageWindow), _foundHTML = _found._html, _removeTitleRegex = new RegExp($R.articleTitleMarker__start + ‘(.*?)’ + $R.articleTitleMarker__end, ‘i’) ; // get first fragment // ================== var _firstFragment = $R.getContent__nextPage__getFirstFragment(_foundHTML); // gets first 2000 characters // diff set at 100 — 0.05 switch (true) { case ($R.levenshteinDistance(_firstFragment, $R.nextPage__firstFragment__firstPage) < 100): case ($R.levenshteinDistance(_firstFragment, $R.nextPage__firstFragment__lastPage) < 100): // mark $R.debugPrint(‘NextPage’, ‘false’); // mark again if ($R.debug) { $(‘#debugOutput__value__NextPage’).html(‘false’); } // pop page $R.nextPage__loadedPages.pop(); // break return false; default: // add to first fragemnts $R.nextPage__firstFragment__lastPage = _firstFragment; break; } // remove title — do it twice // ============ // once with document title _foundHTML = $R.getContent__find__isolateTitleInHTML(_foundHTML, ($R.document.title > ” ? $R.document.title : ”)); _foundHTML = _foundHTML.replace(_removeTitleRegex, ”); // once with article title _foundHTML = $R.getContent__find__isolateTitleInHTML(_foundHTML, $R.articleTitle); _foundHTML = _foundHTML.replace(_removeTitleRegex, ”); // display // ======= $R.displayPageHTML(_foundHTML, _pageNr, _pageWindow.location.href); // next // ==== $R.getContent__nextPage__find(_pageWindow, _found._links); }; // rewrites // ======== // rewrite displayPageHTML — for multi-page articles // ======================= $R.displayPageHTML = function (_processedPageHTML, _pageNr, _pageURL) { // skip first if (_pageNr > 1); else { return; } // push to pages $C._nextPages.push({ ‘_html’: _processedPageHTML, ‘_url’: _pageURL }); }; // rewrite makeRTL — for right-to-left pages // =============== $R.makeRTL = function () { $R.rtl = true; }; $R.makeNotRTL = function () { $R.rtl = false; } // set component object // ==================== window.ClearlyComponent = $C; window.$readable = $R; }

// <![CDATA[ /* http://www.JSON.org/json2.js 2008-11-19 Public Domain. NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. See http://www.JSON.org/js.html This file creates a global JSON object containing two methods: stringify and parse. JSON.stringify(value, replacer, space) value any JavaScript value, usually an object or array. replacer an optional parameter that determines how object values are stringified for objects. It can be a function or an array of strings. space an optional parameter that specifies the indentation of nested structures. If it is omitted, the text will be packed without extra whitespace. If it is a number, it will specify the number of spaces to indent at each level. If it is a string (such as ‘\t’ or ‘ ‘), it contains the characters used to indent at each level. This method produces a JSON text from a JavaScript value. When an object value is found, if the object contains a toJSON method, its toJSON method will be called and the result will be stringified. A toJSON method does not serialize: it returns the value represented by the name/value pair that should be serialized, or undefined if nothing should be serialized. The toJSON method will be passed the key associated with the value, and this will be bound to the object holding the key. For example, this would serialize Dates as ISO strings. Date.prototype.toJSON = function (key) { function f(n) { // Format integers to have at least two digits. return n < 10 ? ‘0’ + n : n; } return this.getUTCFullYear() + ‘-‘ + f(this.getUTCMonth() + 1) + ‘-‘ + f(this.getUTCDate()) + ‘T’ + f(this.getUTCHours()) + ‘:’ + f(this.getUTCMinutes()) + ‘:’ + f(this.getUTCSeconds()) + ‘Z’; }; You can provide an optional replacer method. It will be passed the key and value of each member, with this bound to the containing object. The value that is returned from your method will be serialized. If your method returns undefined, then the member will be excluded from the serialization. If the replacer parameter is an array of strings, then it will be used to select the members to be serialized. It filters the results such that only members with keys listed in the replacer array are stringified. Values that do not have JSON representations, such as undefined or functions, will not be serialized. Such values in objects will be dropped; in arrays they will be replaced with null. You can use a replacer function to replace those with JSON values. JSON.stringify(undefined) returns undefined. The optional space parameter produces a stringification of the value that is filled with line breaks and indentation to make it easier to read. If the space parameter is a non-empty string, then that string will be used for indentation. If the space parameter is a number, then the indentation will be that many spaces. Example: text = JSON.stringify([‘e’, {pluribus: ‘unum’}]); // text is ‘[“e”,{“pluribus”:”unum”}]’ text = JSON.stringify([‘e’, {pluribus: ‘unum’}], null, ‘\t’); // text is ‘[\n\t”e”,\n\t{\n\t\t”pluribus”: “unum”\n\t}\n]’ text = JSON.stringify([new Date()], function (key, value) { return this[key] instanceof Date ? ‘Date(‘ + this[key] + ‘)’ : value; }); // text is ‘[“Date(—current time—)”]’ JSON.parse(text, reviver) This method parses a JSON text to produce an object or array. It can throw a SyntaxError exception. The optional reviver parameter is a function that can filter and transform the results. It receives each of the keys and values, and its return value is used instead of the original value. If it returns what it received, then the structure is not modified. If it returns undefined then the member is deleted. Example: // Parse the text. Values that look like ISO date strings will // be converted to Date objects. myData = JSON.parse(text, function (key, value) { var a; if (typeof value === ‘string’) { a = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value); if (a) { return new Date(Date.UTC(+a[1], +a[2] – 1, +a[3], +a[4], +a[5], +a[6])); } } return value; }); myData = JSON.parse(‘[“Date(09/09/2001)”]’, function (key, value) { var d; if (typeof value === ‘string’ && value.slice(0, 5) === ‘Date(‘ && value.slice(-1) === ‘)’) { d = new Date(value.slice(5, -1)); if (d) { return d; } } return value; }); This is a reference implementation. You are free to copy, modify, or redistribute. This code should be minified before deployment. See http://javascript.crockford.com/jsmin.html USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO NOT CONTROL. */ /*jslint evil: true */ /*global JSON */ /*members “”, “\b”, “\t”, “\n”, “\f”, “\r”, “\””, JSON, “\\”, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours, getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join, lastIndex, length, parse, prototype, push, replace, slice, stringify, test, toJSON, toString, valueOf */ // Create a JSON object only if one does not already exist. We create the // methods in a closure to avoid creating global variables. if (!this.JSON) { JSON = {}; } (function () { function f(n) { // Format integers to have at least two digits. return n < 10 ? ‘0’ + n : n; } if (typeof Date.prototype.toJSON !== ‘function’) { Date.prototype.toJSON = function (key) { return this.getUTCFullYear() + ‘-‘ + f(this.getUTCMonth() + 1) + ‘-‘ + f(this.getUTCDate()) + ‘T’ + f(this.getUTCHours()) + ‘:’ + f(this.getUTCMinutes()) + ‘:’ + f(this.getUTCSeconds()) + ‘Z’; }; String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function (key) { return this.valueOf(); }; } var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, escapable = /[\\\”\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, gap, indent, meta = { // table of character substitutions ‘\b’: ‘\\b’, ‘\t’: ‘\\t’, ‘\n’: ‘\\n’, ‘\f’: ‘\\f’, ‘\r’: ‘\\r’, ‘”‘ : ‘\\”‘, ‘\\’: ‘\\\\’ }, rep; function quote(string) { // If the string contains no control characters, no quote characters, and no // backslash characters, then we can safely slap some quotes around it. // Otherwise we must also replace the offending characters with safe escape // sequences. escapable.lastIndex = 0; return escapable.test(string) ? ‘”‘ + string.replace(escapable, function (a) { var c = meta[a]; return typeof c === ‘string’ ? c : ‘\\u’ + (‘0000’ + a.charCodeAt(0).toString(16)).slice(-4); }) + ‘”‘ : ‘”‘ + string + ‘”‘; } function str(key, holder) { // Produce a string from holder[key]. var i, // The loop counter. k, // The member key. v, // The member value. length, mind = gap, partial, value = holder[key]; // If the value has a toJSON method, call it to obtain a replacement value. if (value && typeof value === ‘object’ && typeof value.toJSON === ‘function’) { value = value.toJSON(key); } // If we were called with a replacer function, then call the replacer to // obtain a replacement value. if (typeof rep === ‘function’) { value = rep.call(holder, key, value); } // What happens next depends on the value’s type. switch (typeof value) { case ‘string’: return quote(value); case ‘number’: // JSON numbers must be finite. Encode non-finite numbers as null. return isFinite(value) ? String(value) : ‘null’; case ‘boolean’: case ‘null’: // If the value is a boolean or null, convert it to a string. Note: // typeof null does not produce ‘null’. The case is included here in // the remote chance that this gets fixed someday. return String(value); // If the type is ‘object’, we might be dealing with an object or an array or // null. case ‘object’: // Due to a specification blunder in ECMAScript, typeof null is ‘object’, // so watch out for that case. if (!value) { return ‘null’; } // Make an array to hold the partial results of stringifying this object value. gap += indent; partial = []; // Is the value an array? if (Object.prototype.toString.apply(value) === ‘[object Array]’) { // The value is an array. Stringify every element. Use null as a placeholder // for non-JSON values. length = value.length; for (i = 0; i < length; i += 1) { partial[i] = str(i, value) || ‘null’; } // Join all of the elements together, separated with commas, and wrap them in // brackets. v = partial.length === 0 ? ‘[]’ : gap ? ‘[\n’ + gap + partial.join(‘,\n’ + gap) + ‘\n’ + mind + ‘]’ : ‘[‘ + partial.join(‘,’) + ‘]’; gap = mind; return v; } // If the replacer is an array, use it to select the members to be stringified. if (rep && typeof rep === ‘object’) { length = rep.length; for (i = 0; i < length; i += 1) { k = rep[i]; if (typeof k === ‘string’) { v = str(k, value); if (v) { partial.push(quote(k) + (gap ? ‘: ‘ : ‘:’) + v); } } } } else { // Otherwise, iterate through all of the keys in the object. for (k in value) { if (Object.hasOwnProperty.call(value, k)) { v = str(k, value); if (v) { partial.push(quote(k) + (gap ? ‘: ‘ : ‘:’) + v); } } } } // Join all of the member texts together, separated with commas, // and wrap them in braces. v = partial.length === 0 ? ‘{}’ : gap ? ‘{\n’ + gap + partial.join(‘,\n’ + gap) + ‘\n’ + mind + ‘}’ : ‘{‘ + partial.join(‘,’) + ‘}’; gap = mind; return v; } } // If the JSON object does not yet have a stringify method, give it one. if (typeof JSON.stringify !== ‘function’) { JSON.stringify = function (value, replacer, space) { // The stringify method takes a value and an optional replacer, and an optional // space parameter, and returns a JSON text. The replacer can be a function // that can replace values, or an array of strings that will select the keys. // A default replacer method can be provided. Use of the space parameter can // produce text that is more easily readable. var i; gap = ”; indent = ”; // If the space parameter is a number, make an indent string containing that // many spaces. if (typeof space === ‘number’) { for (i = 0; i // <![CDATA[ // HTML5 placeholder plugin version 1.01 // Copyright (c) 2010-The End of Time, Mike Taylor, http://miketaylr.com // MIT Licensed: http://www.opensource.org/licenses/mit-license.php // // Enables cross-browser HTML5 placeholder for inputs, by first testing // for a native implementation before building one. // // // USAGE: //$(‘input[placeholder]’).placeholder(); // (function($){ //feature detection var hasPlaceholder = ‘placeholder’ in document.createElement(‘input’); //sniffy sniff sniff — just to give extra left padding for the older //graphics for type=email and type=url var isOldOpera = $.browser.opera && $.browser.version < 10.5; $.fn.placeholder = function(options) { //merge in passed in options, if any var options = $.extend({}, $.fn.placeholder.defaults, options), //cache the original ‘left’ value, for use by Opera later o_left = options.placeholderCSS.left; //first test for native placeholder support before continuing //feature detection inspired by ye olde jquery 1.4 hawtness, with paul irish return (hasPlaceholder) ? this : this.each(function() { //local vars var $this = $(this), inputVal = $.trim($this.val()), inputWidth = $this.width(), inputHeight = $this.height(), //grab the inputs id for the

 

0)?(p[i].substr(0, 1).toUpperCase() + p[i].substr(1)):p[i]; } s = element.currentStyle[str]; } return s; } function getPercentageSize(size) { var currentFontSize = parseFloat(size); var htmlFontSize = 16; var htmlElement = document.getElementsByTagName(“html”); if(htmlElement && htmlElement.length > 0) { var htmlComputedFontSize = computedStyle(htmlElement[0], “font-size”); if(htmlComputedFontSize && htmlComputedFontSize.indexOf(“%”) == -1) { htmlFontSize = Evernote.Utils.getFontSizeInPixels(htmlComputedFontSize); } } return htmlFontSize * currentFontSize / 100; } var size = elementFontSize; if(size.indexOf(“em”) > -1) { var defFont = computedStyle(document.body, “font-size”); if(defFont.indexOf(“pt”) > -1){ defFont = Math.round(parseInt(defFont)*96/72); } else if(defFont.indexOf(“%”) > -1) { defFont = getPercentageSize(defFont); } else{ defFont = parseInt(defFont); } size = Math.round(defFont * parseFloat(size)); } else if(size.indexOf(“pt”) > -1){ size = Math.round(parseInt(size)*96/72) } else if(size.indexOf(“%”) > -1) { size = getPercentageSize(size); } return parseInt(size); }, innerWidth : function() { if(window.innerWidth) return window.innerWidth; var doc= (document.body.clientWidth)? document.body: document.documentElement; return doc.clientWidth; }, innerHeight : function() { if(window.innerHeight) return window.innerHeight; var doc= (document.body.clientHeight)? document.body: document.documentElement; return doc.clientHeight; }, scrollTop : function() { var doc = document.body.scrollTop ? document.body : document.documentElement; return doc.scrollTop; }, scrollLeft : function() { var doc = document.body.scrollLeft ? document.body : document.documentElement; return doc.scrollLeft; }, /** * Stopped propagation of keydown events for passed selector. * @param selector – could be element or jquery selector. */ hardInput : function(selector) { this.elem = Evernote.JQuery(selector); this.elem.keydown(function(e) { e.stopPropagation(); }); }, isQuirkMode : function() { return document.compatMode == “BackCompat” && !Evernote.BrowserDetection.isIE11(); }, isInstanceOf : function(obj, type) { if(obj && type) { try { return obj instanceof type; } catch (e) { return type.toString().indexOf(typeof obj) != -1; } } return false; }, changeBackgroundImage : function(element, localpath) { if(element.style) { element.style.backgroundImage = “url(‘file:///” + localpath.replace(/\\/g, “/”).replace(/\s/g, “%20”) + “‘)”; } }, format: function(str) { var args = arguments; return str.replace(/\{(\d+)\}/g, function (m, n) { return args[(n | 0)+1]; }); }, fixIERangeObject : function(range,win) { //Only for IE8 and below. win=win || window; if(!range) return null; if(!range.startContainer && win.document.selection) { //IE8 and below var _findTextNode=function(parentElement,text) { //Iterate through all the child text nodes and check for matches //As we go through each text node keep removing the text value (substring) from the beginning of the text variable. var container=null,offset=-1; for(var node=parentElement.firstChild; node; node=node.nextSibling) { if(node.nodeType==3) {//Text node var find=node.nodeValue; var pos=text.indexOf(find); if(pos==0 && text!=find) { //text==find is a special case text=text.substring(find.length); } else { container=node; offset=text.length-1; //Offset to the last character of text. text[text.length-1] will give the last character. break; } } } //Debug Message //alert(container.nodeValue); return {node: container,offset: offset}; //nodeInfo }; var rangeCopy1=range.duplicate(), rangeCopy2=range.duplicate(); //Create a copy var rangeObj1=range.duplicate(), rangeObj2=range.duplicate(); //More copies 😛 rangeCopy1.collapse(true); //Go to beginning of the selection rangeCopy1.moveEnd(‘character’,1); //Select only the first character rangeCopy2.collapse(false); //Go to the end of the selection rangeCopy2.moveStart(‘character’,-1); //Select only the last character //Debug Message // alert(rangeCopy1.text); //Should be the first character of the selection var parentElement1=rangeCopy1.parentElement(), parentElement2=rangeCopy2.parentElement(); //If user clicks the input button without selecting text, then moveToElementText throws an error. if(window.HTMLInputElement && (parentElement1 instanceof window.HTMLInputElement || parentElement2 instanceof HTMLInputElement)) { return null; } rangeObj1.moveToElementText(parentElement1); //Select all text of parentElement rangeObj1.setEndPoint(‘EndToEnd’,rangeCopy1); //Set end point to the first character of the ‘real’ selection rangeObj2.moveToElementText(parentElement2); rangeObj2.setEndPoint(‘EndToEnd’,rangeCopy2); //Set end point to the last character of the ‘real’ selection var text1=rangeObj1.text; //Now we get all text from parentElement’s first character upto the real selection’s first character var text2=rangeObj2.text; //Here we get all text from parentElement’s first character upto the real selection’s last character var nodeInfo1=_findTextNode(parentElement1,text1); var nodeInfo2=_findTextNode(parentElement2,text2); //Finally we are here range.startContainer=nodeInfo1.node; range.startOffset=nodeInfo1.offset; range.endContainer=nodeInfo2.node; range.endOffset=nodeInfo2.offset+1; //End offset comes 1 position after the last character of selection. } return range; }, fixedPosition : function(win, el, topOffset, immediate) { function applyPosition(elem) { if(elem) { var scrollPosition = win.document.documentElement.scrollTop || win.document.body.scrollTop; var offset; if(typeof topOffset == “function”) { offset = topOffset(); } else { offset = scrollPosition + topOffset; } elem.animate({top: offset}, 100); } } if(el) { var elem = Evernote.JQuery(el); if(Evernote.Utils.isQuirkMode()) { elem.css(“position”, “absolute”); if (win.attachEvent) win.attachEvent(“onscroll”, function() {applyPosition(elem);}); else if (win.addEventListener) win.addEventListener(“scroll”, function() {applyPosition(elem);}, false); else Evernote.Logger.error( “Utils.fixedPosition() can’t attachEvent” ); if(immediate) { applyPosition(elem); } } } }, mergeCustomComboBoxStrings : function(notebook, owner, ownedByStr, maxLen) { var totalLen = notebook.length; if (owner.length) { // format: “space”,”(“,””,”space”,””,”)” // magic number “4” is: “space”,”(“,”space”,”)” totalLen += ownedByStr.length + owner + 4; } if (totalLen <= maxLen) { return { note: notebook, own: “”, title: “” }; } var half = maxLen / 2 – 2; if (owner.length == 0) { return { note: notebook.substr(0, half) + “…” + notebook.substring(notebook.length – half, notebook.length), own: “”, title: notebook }; } var ownerFormatStr = “(” + ownedByStr + ” ” + owner + “)”; var title = notebook + ownerFormatStr; var resultString = title.substr(0, half) + “…” + title.substr(title.length – half); if (notebook.length <= half) { return { note: notebook, own: “…” + title.substr(title.length – notebook.length), title: notebook + ” ” + ownerFormatStr }; }else if (ownerFormatStr // // // // // <![CDATA[ Evernote.ResponseReceiver = { parsers : [], receivers : [], onResponse: function(str) { Evernote.Logger.debug(“Response received” + str); for(var i in Evernote.ResponseReceiver.parsers) { if(Evernote.ResponseReceiver.parsers[i].canParse && Evernote.ResponseReceiver.parsers[i].canParse(str)) { Evernote.ResponseReceiver.notify(Evernote.ResponseReceiver.parsers[i].parse(str)); } } }, registerParser: function(parser) { Evernote.ResponseReceiver.parsers.push(parser); }, subscribe: function(receiver) { Evernote.ResponseReceiver.receivers.push(receiver); }, notify: function(data) { for(var i=0; i // // 0) { problem = Evernote.JQuery(problems[0]); } } else if(error.length > 2) { errorMessage = error[2].toString(); } if(problem) { errorMessage = problem.text(); } else if(!errorMessage) { errorMessage = error.attr(“details”); } switch (errorCode) { case Evernote.ErrorCodes.AUTHENTICATION_ERROR : errorMessage = Evernote.Addin.getLocalizedMessage(Evernote.Messages.LOGIN_FAILED); break; case Evernote.ErrorCodes.CLIP_ERROR : errorMessage = Evernote.Addin.getLocalizedMessage(Evernote.Messages.CLIP_FAILED_TITLE) + “\n” + errorMessage; } var msg = { message: errorMessage, code: errorCode }; return new Evernote.Response(“error”, msg); }, canParse: function(str) { var request = Evernote.JQuery(str).get(0); return (request && (request.nodeName == “ERROR”)); } }; Evernote.ResponseReceiver.registerParser(Evernote.ErrorResponseParser); // ]]>// // <![CDATA[ Evernote.ErrorHandler = { getHandler: function() { return [Evernote.Addin, Evernote.AlertErrorHandler, Evernote.evernotePopup]; }, onDataReceived : function(response) { if(response.type) { if(response.type == “error”) { this.notifyHandlers(response.data); } } }, notifyHandlers : function(error) { for(var i = 0; i // // // // <![CDATA[ //”use strict”; Evernote.ElementSerializerFactory = { getImplementationFor : function( node ) { for ( var i = 0; i // // 0 && value != “inherit” ); } ) ); Evernote.Logger.debug( “Inh parent style:” + styles[styles.length – 1].toString() ); if ( !recur || parent == document.body ) { break; } else { parent = parent.parentElement; } } //merge styles starting from low-priority parent styles Evernote.Logger.debug( “Styles inh for processing:” + (styles.length – 1) ); for ( var i = styles.length – 1; i >= 0; i– ) { var style = styles[ i ]; var fontSize = fontStyle.getStyle( “font-size” ); var overFontStyle = style.getStyle( “font-size” ); Evernote.Logger.debug( “fontSize:” + fontSize + ” ;overFontStyle: ” + overFontStyle ); if ( fontSize && overFontStyle ) { var resFontSize = fontSize.match( sizeUnitRegExp ); if ( resFontSize == null ) { continue; } var sizeVal = resFontSize[1]; var sizeUnit = resFontSize[2]; var resOverFontSize = overFontStyle.match( sizeUnitRegExp ); if ( resOverFontSize == null ) { continue; } var overSizeVal = resOverFontSize[1]; var overSizeUnit = resOverFontSize[2]; if ( Evernote.ArrayExtension.indexOf(dynamicUnit, overSizeUnit ) != -1 ) { if ( overSizeUnit == “%” ) { style.addStyle( { “font-size”:(parseFloat( sizeVal ) * parseFloat( overSizeVal ) / 100).toString() + sizeUnit } ); } else { style.addStyle( { “font-size”:(parseFloat( sizeVal ) * parseFloat( overSizeVal )).toString() + ((sizeUnit != “em”) ? sizeUnit : overSizeUnit) } ); } } Evernote.Logger.debug( “Style: ” + i + ” ;Eval inh style:” + style.toString() ); } fontStyle.mergeStyle( style, true ); } return fontStyle; }; Evernote.ClipFullStylingStrategy.prototype.inheritBackgroundForNode = function ( node, recur ) { Evernote.Logger.debug( “ClipFullStylingStrategy.inheritBackgroundForNode()” ); var bgStyle = new Evernote.ClipStyle(); if ( !node ) { return bgStyle; } var parent = node; var styles = [ ]; var nodes = [ ]; var topElement = (document.body.parentNode) ? document.body.parentNode : document.body; try { while ( parent ) { nodes.push( parent ); var filterFn = function ( prop, value ) { return !(prop == “background-repeat” && (value == “no-repeat” || value == “repeat-y”)); }; var nodeStyle = new Evernote.ClipStyle( this.getNodeStyle( parent ), filterFn, Evernote.ClipStyle.CSS_GROUP.getExtForStyle( “background” ) ); if ( !nodeStyle.getStyle( “background-repeat” ) ) { nodeStyle.removeStyle( “background-image” ); } if ( !nodeStyle.getStyle( “background-color” ) && parent.getAttribute( “bgcolor” ) ) { Evernote.Logger.debug( “Set bgcolor attribute: ” + parent.getAttribute( “bgcolor” ) ); nodeStyle.addStyle( {“background-color”:parent.getAttribute( “bgcolor” )} ); } nodeStyle = this.evalBgPosition( node, parent, nodeStyle ); if ( nodeStyle.getStylesNames().length > 0 ) { styles.push( nodeStyle ); Evernote.Logger.debug( “Add inh bg style ” + nodeStyle.toString() ); } if ( !recur || parent == topElement ) { break; } else { parent = parent.parentNode; } } } catch(e) { Evernote.Logger.error(“ClipFullStylingStrategy.prototype.inheritBackgroundForNode failed to error ” + e); } return styles; }; Evernote.ClipFullStylingStrategy.prototype.evalBgPosition = function ( node, inhNode, nodeBgStyle ) { Evernote.Logger.debug( “Dettermining background image offset” ); var strPosToPercent = { “center”:”50%”, “top”:”0%”, “bottom”:”100%”, “right”:”100%”, “left”:”0%” }; var regExp = /url\((.*?)\)/; var bgImage = nodeBgStyle.getStyle( “background-image” ); if ( !regExp.test( nodeBgStyle.getStyle( “background-image” ) ) || (bgImage && nodeBgStyle.getStyle( “background-image” ).indexOf( “data:image” ) >= 0) ) { Evernote.Logger.debug( “bgStyle: ” + nodeBgStyle.toString() ); return nodeBgStyle; } nodeBgStyle.addStyle( { “background-image”: Evernote.StyleElementExtension.getPropertyValue(Evernote.ElementExtension.getComputedStyle( inhNode, null, this.getNodeView( inhNode ) ), Evernote.IEStylePropertiesMapping.getPropertyNameFor(“background-image”) ).replace( regExp, “url(‘$1’)” ) } ); var actualImage = new Image(); actualImage.src = nodeBgStyle.getStyle( “background-image” ).match( regExp )[ 1 ].replace( /[“‘]/g, “” ); var bgNodeRect = this.getOffsetRect( inhNode ); var nodeRect = this.getOffsetRect( node ); var yDelta = nodeRect.top – bgNodeRect.top; var xDelta = nodeRect.left – bgNodeRect.left; var bgNodeBgPosX = 0; var bgNodeBgPosY = 0; var origPosX = 0; var origPosY = 0; if ( nodeBgStyle.getStyle( “background-position” ) ) { var bgPosition = nodeBgStyle.getStyle( “background-position” ).split( ” ” ); bgNodeBgPosX = strPosToPercent[bgPosition[ 0 ]] != null ? strPosToPercent[bgPosition[ 0 ]] : bgPosition[ 0 ]; bgNodeBgPosY = strPosToPercent[bgPosition[ 1 ]] != null ? strPosToPercent[bgPosition[ 1 ]] : bgPosition[ 1 ]; if ( bgNodeBgPosX && bgNodeBgPosX.indexOf( “%” ) > 0 ) { origPosX = parseInt( bgNodeRect.width ) * (parseInt( bgNodeBgPosX ) / 100); origPosX -= parseInt(actualImage.width) * (parseInt(bgNodeBgPosX) / 100); } else { origPosX = parseInt( bgNodeBgPosX ); } if ( bgNodeBgPosY && bgNodeBgPosY.indexOf( “%” ) > 0 ) { origPosY = parseInt( bgNodeRect.height ) * (parseInt( bgNodeBgPosY ) / 100); origPosY -= parseInt(actualImage.height) * (parseInt(bgNodeBgPosY) / 100); } else { origPosY = parseInt( bgNodeBgPosY ); } } if ( isNaN( origPosX ) ) { origPosX = 0; } if ( isNaN( origPosY ) ) { origPosY = 0; } var xOffset = 0 – xDelta + origPosX; var yOffset = 0 – yDelta + origPosY; nodeBgStyle.addStyle( { “background-position”:(xOffset + “px ” + yOffset + “px”) } ); Evernote.Logger.debug( “bgStyle: ” + nodeBgStyle.toString() ); return nodeBgStyle; }; Evernote.ClipFullStylingStrategy.prototype.getOffsetRect = function ( elem ) { Evernote.Logger.debug( “ClipCSSStyleWalker.getOffsetRect()” ); var box = Evernote.ElementExtension.getBoundingClientRect(elem); var body = elem.ownerDocument.body; var docElem = elem.ownerDocument.documentElement; var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop; var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft; var clientTop = docElem.clientTop || body.clientTop || 0; var clientLeft = docElem.clientLeft || body.clientLeft || 0; var top = box.top + scrollTop – clientTop; var left = box.left + scrollLeft – clientLeft; return { top:Math.round( top ), left:Math.round( left ), width:box.width, height:box.height }; }; // ]]>// 0) { nodeName = “div”; } var attributesToKeepForNode = this.KEEP_NODE_ATTRIBUTES[nodeName]; if(attributesToKeepForNode) { var keepAttributeForNode = typeof attributesToKeepForNode[attrName] != ‘undefined’; } return typeof this.NOKEEP_NODE_ATTRIBUTES[ attrName ] != ‘undefined’ || !keepAttributeForNode || attrName.substring( 0, 2 ) == “on” || attrName.indexOf(“xml”) == 0 || attrValue.indexOf(“function(“) >= 0 || (attrName == “href” && attrValue.substring( 0, 11 ) == “javascript:”); }, isConditionalNode : function( node ) { return node && typeof this.CONDITIONAL_NODES[ node.nodeName.toUpperCase() ] != ‘undefined’; }, translateNode : function( node ) { var nodeName = this.NODE_NAME_TRANSLATIONS[ node.nodeName.toUpperCase() ] || node.nodeName.toUpperCase(); return (typeof this.SUPPORTED_NODES[ nodeName ] != “undefined”) ? nodeName.toLowerCase() : this.NODE_NAME_TRANSLATIONS[ “*” ].toLowerCase(); }, isSupportedNode : function( node ) { return node && typeof this.SUPPORTED_NODES[ node.nodeName.toUpperCase() ] != ‘undefined’; }, isRejectedNode : function( node ) { return node && typeof this.REJECTED_NODES[ node.nodeName.toUpperCase() ] != ‘undefined’; }, isNonAncestorNode : function( node ) { return node && typeof this.NON_ANCESTOR_NODES[ node.nodeName.toUpperCase() ] != ‘undefined’; }, isSelfClosingNode : function( node ) { return node && typeof this.SELF_CLOSING_NODES[ node.nodeName.toUpperCase() ] != ‘undefined’; } }; Evernote.ClipRules.KEEP_NODE_ATTRIBUTES = { “a” : { “title”: null, “dir” : null, “accesskey”: null, “charset”: null, “type”: null, “name”: null, “href”: null, “hreflang”: null, “rel”: null, “rev”: null, “shape”: null, “coords”: null, “target”: null }, “abbr” : { “title”: null, “dir” : null }, “acronym” : { “title”: null, “dir” : null }, “address” : { “title”: null, “dir” : null }, “area” : { “title”: null, “dir” : null, “accesskey”: null, “shape”: null, “coords”: null, “href”: null, “nohref”: null, “alt”: null, “target”: null }, “b” : { “title”: null, “dir” : null }, “bdo” : { “title”: null, “dir” : null }, “big” : { “title”: null, “dir” : null }, “blockquote” : { “title”: null, “dir” : null, “cite”: null }, “br” : { “title”: null, “clear”: null }, “caption” : { “title”: null, “dir” : null, “align”: null }, “center” : { “title”: null, “dir” : null }, “cite” : { “title”: null, “dir” : null }, “code” : { “title”: null, “dir” : null }, “col” : { “title”: null, “dir” : null, “span” : null, “width” : null, “align” : null, “char” : null, “charoff” : null, “valign” : null }, “colgroup” : { “title”: null, “dir” : null, “span” : null, “width” : null, “align” : null, “char” : null, “charoff” : null, “valign” : null }, “dd” : { “title”: null, “dir” : null }, “del” : { “title”: null, “dir” : null, “cite” : null, “datetime” : null }, “dfn” : { “title”: null, “dir” : null }, “div” : { “title”: null, “dir” : null, “align” : null }, “dl”: { “title”: null, “dir” : null, “compact” : null }, “dt”: { “title”: null, “dir” : null }, “em”: { “title”: null, “dir” : null }, “font”: { “title”: null, “dir” : null, “size” : null, “color” : null, “face” : null }, “h1”: { “title”: null, “dir” : null, “align” : null }, “h2”: { “title”: null, “dir” : null, “align” : null }, “h3”: { “title”: null, “dir” : null, “align” : null }, “h4”: { “title”: null, “dir” : null, “align” : null }, “h5”: { “title”: null, “dir” : null, “align” : null }, “h6”: { “title”: null, “dir” : null, “align” : null }, “hr”: { “title”: null, “dir” : null, “align” : null, “noshade” : null, “size” : null, “width” : null }, “i”: { “title”: null, “dir” : null }, “img”: { “title”: null, “dir” : null, “src” : null, “alt” : null, “name” : null, “longdesc” : null, “height” : null, “width” : null, “usemap” : null, “ismap” : null, “align” : null, “border” : null, “hspace” : null, “vspace” : null }, “en-media”: { “type” : null, “hash” : null, “title” : null, “dir” : null, “alt” : null, “longdesc” : null, “height” : null, “width” : null, “usemap” : null, “align” : null, “border” : null, “hspace” : null, “vspace” : null }, “ins”: { “title”: null, “dir” : null, “cite” : null, “datetime” : null }, “kbd”: { “title”: null, “dir” : null }, “li”: { “title”: null, “dir” : null, “type” : null, “value” : null }, “map”: { “dir” : null, “title” : null, “name” : null }, “ol”: { “title” : null, “dir” : null, “type” : null, “compact” : null, “start” : null }, “p”: { “title” : null, “dir” : null, “align” : null }, “pre”: { “title” : null, “dir” : null, “width” : null }, “s”: { “title” : null, “dir” : null }, “samp”: { “title” : null, “dir” : null }, “small”: { “title” : null, “dir” : null }, “span”: { “title” : null, “dir” : null }, “strike”: { “title” : null, “dir” : null }, “strong”: { “title” : null, “dir” : null }, “sub”: { “title” : null, “dir” : null }, “sup”: { “title” : null, “dir” : null }, “table”: { “title” : null, “dir” : null, “summary” : null, “width” : null, “border” : null, “cellspacing” : null, “cellpadding” : null, “align” : null, “bgcolor” : null }, “tbody”: { “title” : null, “dir” : null, “align” : null, “char” : null, “charoff” : null, “valign” : null }, “td”: { “title” : null, “dir” : null, “align” : null, “char” : null, “charoff” : null, “valign” : null, “abbr” : null, “rowspan” : null, “colspan” : null, “nowrap” : null, “bgcolor” : null, “width” : null, “height” : null }, “tfoot”: { “title” : null, “dir” : null, “align” : null, “char” : null, “charoff” : null, “valign” : null }, “th”: { “title” : null, “dir” : null, “align” : null, “char” : null, “charoff” : null, “valign” : null, “abbr” : null, “rowspan” : null, “colspan” : null, “nowrap” : null, “bgcolor” : null, “width” : null, “height” : null }, “thead”: { “title” : null, “dir” : null, “align” : null, “char” : null, “charoff” : null, “valign” : null }, “tr”: { “title” : null, “dir” : null, “align” : null, “char” : null, “charoff” : null, “valign” : null, “bgcolor” : null }, “tt”: { “title” : null, “dir” : null }, “u”: { “title” : null, “dir” : null }, “ul”: { “title” : null, “dir” : null, “type” : null, “compact” : null }, “var”: { “title” : null, “dir” : null } }; Evernote.ClipRules.NOKEEP_NODE_ATTRIBUTES = { “style” : null, “tabindex” : null }; Evernote.ClipRules.CONDITIONAL_NODES = { “EMBED” : null, “OBJECT” : null, “IMG” : null, “VIDEO” : null }; Evernote.ClipRules.NODE_NAME_TRANSLATIONS = { “HTML” : “DIV”, “BODY” : “DIV”, “FORM” : “DIV”, “CANVAS” : “DIV”, “CUFON” : “DIV”, “EMBED” : “IMG”, “BUTTON” : “SPAN”, “INPUT” : “SPAN”, “LABEL” : “SPAN”, “BDI” : “SPAN”, “IMG” : “EN-MEDIA”, “*” : “DIV” }; Evernote.ClipRules.SUPPORTED_NODES = { “A” : null, “ABBR” : null, “ACRONYM” : null, “ADDRESS” : null, “AREA” : null, “B” : null, “BUTTON” : null, “BDO” : null, “BIG” : null, “BLOCKQUOTE” : null, “BR” : null, “CAPTION” : null, “CENTER” : null, “CITE” : null, “CODE” : null, “COL” : null, “COLGROUP” : null, “DD” : null, “DEL” : null, “DFN” : null, “DIV” : null, “DL” : null, “DT” : null, “EM” : null, “FONT” : null, “FORM” : null, “H1” : null, “H2” : null, “H3” : null, “H4” : null, “H5” : null, “H6” : null, “HR” : null, “HTML” : null, “I” : null, “IMG” : null, “EN-MEDIA” : null, “INPUT” : null, “INS” : null, “KBD” : null, “LI” : null, “MAP” : null, “OL” : null, “P” : null, “PRE” : null, “Q” : null, “S” : null, “SAMP” : null, “SMALL” : null, “SPAN” : null, “STRIKE” : null, “STRONG” : null, “SUB” : null, “SUP” : null, “TABLE” : null, “TBODY” : null, “TD” : null, “TFOOT” : null, “TH” : null, “THEAD” : null, “TR” : null, “TT” : null, “U” : null, “UL” : null, “VAR” : null }; Evernote.ClipRules.REJECTED_NODES = { “SCRIPT” : null, “LINK” : null, “IFRAME” : null, “STYLE” : null, “SELECT” : null, “OPTION” : null, “OPTGROUP” : null, “NOSCRIPT” : null, “PARAM” : null, “HEAD” : null, “EVERNOTEDIV” : null, “CUFONTEXT” : null, “NOEMBED” : null }; Evernote.ClipRules.NON_ANCESTOR_NODES = { “OL” : null, “UL” : null, “LI” : null }; Evernote.ClipRules.SELF_CLOSING_NODES = { “IMG” : null, //”INPUT” : null, “BR” : null }; // ]]>// <![CDATA[ /** * ClipStyle is a container for CSS styles. It is able to add and remove * CSSStyleRules (and parse CSSRuleList’s for rules), as well as * CSSStyleDeclaration’s and instances of itself. * ClipStyle provides a mechanism to serialize itself via toString(), and * reports its length via length property. It also provides a method to clone * itself and expects to be manipulated via addStyle and removeStyle. */ Evernote.ClipStyle = function ClipStyle( css, filterFn, styleList ) { this.initialize( css, filterFn, styleList ); }; Evernote.ClipStyle.STYLES = [ “background”, “background-attachment”, “background-clip”, “background-color”, “background-image”, “background-origin”, “background-position-x”, “background-position-y”, “background-position”, “background-repeat”, “background-size”, “border-bottom”, “border-bottom-color”, “border-bottom-left-radius”, “border-bottom-right-radius”, “border-bottom-style”, “border-bottom-width”, “border-left”, “border-left-color”, “border-left-style”, “border-left-width”, “border-right”, “border-right-color”, “border-right-style”, “border-right-width”, “border-top”, “border-top-color”, “border-top-left-radius”, “border-top-right-radius”, “border-top-style”, “border-top-width”, “border-collapse”, “border-spacing”, “bottom”, “box-shadow”, “caption-side”, “clear”, “clip”, “color”, “content”, “counter-increment”, “counter-reset”, “cursor”, “direction”, “display”, “empty-cells”, “float”, “font”, “font-family”, “font-size”, “font-size-adjust”, “font-stretch”, “font-style”, “font-variant”, “font-weight”, “height”, “ime-mode”, “left”, “letter-spacing”, “line-height”, “list-style”, “list-style-image”, “list-style-position”, “list-style-type”, “margin”, “margin-bottom”, “margin-left”, “margin-right”, “margin-top”, “marker-offset”, “max-height”, “max-width”, “min-height”, “min-width”, “opacity”, “outline”, “outline-color”, “outline-offset”, “outline-style”, “outline-width”, “overflow”, “overflow-x”, “overflow-y”, “padding”, “padding-bottom”, “padding-left”, “padding-right”, “padding-top”, “page-break-after”, “page-break-before”, “pointer-events”, “position”, “resize”, “right”, “table-layout”, “text-align”, “text-anchor”, “text-decoration”, “text-indent”, “text-overflow”, “text-shadow”, “text-transform”, “top”, “vertical-align”, “visibility”, “white-space”, “width”, “word-spacing”, “word-wrap”, “z-index” ]; Evernote.ClipStyle.NO_INHERIT_STYLES = { “*”:[ “background”, “background-image”, “background-color”, “background-position”, “background-repeat”, “border-bottom”, “border-bottom-color”, “border-bottom-left-radius”, “border-bottom-right-radius”, “border-bottom-style”, “border-bottom-width”, “border-left”, “border-left-color”, “border-left-style”, “border-left-width”, “border-right”, “border-right-color”, “border-right-style”, “border-right-width”, “border-top”, “border-top-color”, “border-top-left-radius”, “border-top-right-radius”, “border-top-style”, “border-top-width”, “border-collapse”, “border-spacing”, “bottom”, “clear”, “display”, “float”, “height”, “left”, “list-style”, “margin”, “margin-bottom”, “margin-left”, “margin-right”, “margin-top”, “padding”, “padding-bottom”, “padding-left”, “padding-right”, “padding-top”, “right”, “text-decoration”, “top”, “width” ], “img”:[ “height”, “width” ] }; Evernote.ClipStyle.CSS_GROUP = { “margin”:[ “left”, “right”, “top”, “bottom” ], “padding”:[ “left”, “right”, “top”, “bottom” ], “border”:[ “width”, “style”, “color” ], “border-bottom”:[ “width”, “style”, “color” ], “border-top”:[ “width”, “style”, “color” ], “border-right”:[ “width”, “style”, “color” ], “border-left”:[ “width”, “style”, “color” ], “border-image”:[ “outset”, “repeat”, “slice”, “source”, “width” ], “background”:[ “attachment”, “color”, “image”, “position”, “repeat”, “clip”, “origin”, “size” ], “font”:[ “family”, “size”, “style”, “variant”, “weight”, “size-adjust”, “stretch”, “+line-height” ], “list-style”:[ “image”, “position”, “type” ] }; Evernote.ClipStyle.CSS_GROUP.getExtForStyle = function ( name ) { var list = this[ name ]; var extList = [ ]; if ( list ) { for ( var i = 0; i = 0 ) { var tmp = list[ i ]; extList.push( tmp.replace( “+”, “” ) ); } else { extList.push( name + “-” + list[ i ] ); } } return extList; } return null; }; Evernote.ClipStyle.STYLE_ATTRIBUTES = { “bgcolor”:”background-color”, “text”:”color” }; Evernote.ClipStyle.INHERITED_STYLES = [ “azimuth”, “border-collapse”, “border-spacing”, “caption-side”, “color”, “cursor”, “direction”, “elevation”, “empty-cells”, “font-family”, “font-size”, “font-style”, “font-weight”, “font”, “letter-spacing”, “line-height”, “list-style-image”, “list-style-position”, “list-style-type”, “list-style”, “orphans”, “pitch-range”, “pitch”, “quotes”, “richness”, “speak-header”, “speak-numeral”, “speak-punctuation”, “speak”, “speak-rate”, “stress”, “text-align”, “text-indent”, “text-transform”, “visibility”, “voice-family”, “volume”, “white-space”, “widows”, “word-spacing” ]; Evernote.ClipStyle.prototype._collection = null; Evernote.ClipStyle.prototype._filterFn = null; Evernote.ClipStyle.prototype._styleList = null; Evernote.ClipStyle.prototype.initialize = function ( css, filterFn, styleList ) { Evernote.Logger.debug( “ClipStyle.initialize()” ); this._collection = new Evernote.StylesCollection(); Evernote.Logger.debug( “ClipStyle.initialize: collection initialized()” ); this._filterFn = (typeof filterFn == “function”) ? filterFn : null; this._styleList = (styleList != null) ? styleList : Evernote.ClipStyle.STYLES; if(css) { if ( window.CSSStyleDeclaration && css instanceof window.CSSStyleDeclaration ) { this.addStyle( css, this._styleList ); } else if ( window.CSSStyleRule && css instanceof window.CSSStyleRule ) { this.addStyle( css.style, this._styleList ); } else if ( (window.CSSRuleList && css instanceof window.CSSRuleList) || css instanceof Array ) { for ( var i = 0; i 0 ) { var list = (styleList != null) ? styleList : this._styleList; for ( var i = 0; i < list.length; ++i ) { var prop = list[ i ]; var value = Evernote.StyleElementExtension.getPropertyValue(style, prop ); var importantPriority = !!((style.getPropertyPriority(prop) == ‘important’)); value = this.fixBackground(prop, value); this.addSimpleStyle( prop, value, importantPriority ); } } else if ( style instanceof Evernote.ClipStyle ) { list = (styleList != null) ? styleList : style.getStylesNames(); for ( var i = 0; i < list.length; ++i ) { var prop = list[ i ]; value = style.getStyle( prop ); importantPriority = style.isImportant( prop ); value = this.fixBackground(prop, value); this.addSimpleStyle( prop, value, importantPriority ); } } else if ( typeof style == ‘object’ && style != null ) { list = (styleList != null) ? styleList : style; for ( var prop in list ) { // In some cases, attempt to get currentStyle.outline ( or outlineWidth ) property in IE8 throws // ‘unspecified error’ and crash whole serilization process. So we wrap it into try {…} catch. try { if ( list.hasOwnProperty( prop ) ) { var usedStyle = style[ prop ]; var pName = prop; if(!usedStyle) { usedStyle = style [list[prop]]; pName = list[prop]; if(!usedStyle) { var propName = Evernote.IEStylePropertiesMapping.getPropertyNameFor(list[prop]); if(propName) { usedStyle = style[propName[1]]; } } } usedStyle = this.fixBackground(pName, usedStyle); this.addSimpleStyle( pName, usedStyle ); } } catch (err) {} } } }; Evernote.ClipStyle.prototype.removeStyle = function ( style ) { Evernote.Logger.debug( “ClipStyle.removeStyle()” ); if(style) { if ( window.CSSStyleDeclaration && Evernote.Utils.isInstanceOf(style, window.CSSStyleDeclaration) || style instanceof Array ) { for ( var i = 0; i < style.length; ++i ) { this.removeSimpleStyle( style[ i ] ); } } else if ( style instanceof Evernote.ClipStyle ) { var stylesNames = style.getStylesNames(); for ( i = 0; i < stylesNames.length; ++i ) { this.removeSimpleStyle( stylesNames[ i ] ); } } else if ( typeof style == ‘string’ ) { this.removeSimpleStyle( style ); } } Evernote.Logger.debug(“ClipStyle.removeStyle() end”) }; Evernote.ClipStyle.prototype.mergeStyle = function ( style, override ) { Evernote.Logger.debug( “ClipStyle.mergeStyle()” ); if ( style instanceof Evernote.ClipStyle ) { var stylesNames = style.getStylesNames(); for ( var i = 0; i < stylesNames.length; ++i ) { var styleName = stylesNames[ i ]; var styleValue = this._collection.getStyle( styleName ); if ( styleValue == null || override || (style.isImportant( styleName ) && !this._collection.isImportant( styleName )) ) { var newValue = style.getStyle( styleName ); if ( style.isImportant( styleName ) ) { this._collection.addStyle( styleName, newValue, true ); } else if ( override && !this._collection.isImportant( styleName ) ) { this._collection.addStyle( styleName, newValue, false ); } else if ( styleValue == null && !override ) { this._collection.addStyle( styleName, newValue, style.isImportant( styleName ) ); } } } } }; Evernote.ClipStyle.prototype.getStylesNames = function () { return this._collection.getStylesNames(); }; Evernote.ClipStyle.prototype.getStyle = function ( prop ) { return this._collection.getStyle( prop ); }; Evernote.ClipStyle.prototype.isImportant = function ( prop ) { return this._collection.isImportant( prop ); }; Evernote.ClipStyle.prototype.addSimpleStyle = function ( prop, value, importantPriority ) { if ( typeof this._filterFn == “function” && !this._filterFn( prop, value ) ) { return; } var impl = Evernote.StylesReplacementRegistry.getImplementationFor(prop); if(impl && impl.getValue) { value = impl.getValue(value); } this._collection.addStyle( prop, value, importantPriority ); }; Evernote.ClipStyle.prototype.removeSimpleStyle = function ( prop ) { this._collection.removeStyle( prop ); }; Evernote.ClipStyle.prototype.toString = function () { var str = “”; var stylesNames = this.getStylesNames(); for ( var i = 0; i 0 ) { str += styleName + “:” + value + “;”; } } return str; }; Evernote.ClipStyle.CSSDefaultStyle = { “background-attachment”: “scroll”, “background-color” : “transparent”, “background-image” : “none”, “background-position-x” : “0px”, “background-position-y” : “0px”, “background-repeat” : “repeat”, “border-bottom-style” : “none”, “border-bottom-width” : “medium”, “border-left-style” : “none”, “border-left-width” : “medium”, “border-right-style” : “none”, “border-right-width” : “medium”, “border-top-style” : “none”, “border-top-width” : “medium”, “border-collapse” : “separate”, “bottom” : “auto”, “clear” : “none”, “height” : “auto”, “left” : “auto”, “margin-bottom” : “0px”, “margin-left” : “0px”, “margin-right” : “0px”, “margin-top” : “0px”, “max-height” : “none”, “max-width” : “none”, “min-height” : “0px”, “min-width” : “0px”, “overflow” : “visible”, “overflow-x” : “visible”, “overflow-y” : “visible”, “padding” : “0px”, “padding-bottom” : “0px”, “padding-left” : “0px”, “padding-right” : “0px”, “padding-top” : “0px”, “page-break-before” : “auto”, “page-break-after” : “auto”, “position” : “static”, “right” : “auto”, “text-align” : “left”, “text-decoration” : “none”, “text-indent” : “0px”, “text-overflow” : “clip”, “top” : “auto”, “width” : “auto” }; Evernote.ClipStyle.prototype.removeDefaultCssStyle = function () { var stylesNames = this.getStylesNames(); for ( var i = 0; i // // = PARSING_TIMEOUT_INTERVAL ) { Evernote.Logger.debug(“Parsing interval timeout: ” + (endTimeParsing – startTimeParsing)); parsingEnd = false; break; } } if (parsingEnd) { Evernote.Logger.debug(“Parsing end”); callback(); }else { Evernote.Logger.debug(“Parsing repeat”); setTimeout(asyncParser, 0); } }; setTimeout(asyncParser, 0); }; /** * Starts parsing from specified root. * @param root – starting DOM node. * @param fullPage – is user selects to serialize the full page * @param serializer – current serializer to be used to serialize the DOM node to string */ Evernote.DomParser.prototype.parse = function ( root, fullPage, serializer ) { Evernote.Logger.debug( “DomParser.parse()” ); if ( !root ) { throw new Error( “No root element for parsing” ); } var node = root; var parentNode = null; while ( node ) { if ( node != root && node.parentNode ) { parentNode = node.parentNode.serializedNode; } if ( this.isNodeForSerialize( node ) ) { if ( node.nodeType == Evernote.Node.TEXT_NODE ) { serializer.textNode( node, this._range ); } else if ( node.nodeType == Evernote.Node.ELEMENT_NODE && this.isNodeVisible( node ) ) { node.serializedNode = serializer.startNode( new Evernote.SerializedNode( node, parentNode ), root, fullPage ); if ( node.hasChildNodes() ) { node = node.childNodes[ 0 ]; continue; } else { serializer.endNode( node.serializedNode ); if ( node.serializedNode ) { try { delete node.serializedNode; } catch(e) { //If we are failed to delete the property, than just set it to undefined node.serializedNode = undefined; } } } } } /** * Check if there is a next node available and it is not the root */ if ( node.nextSibling && node != root ) { node = node.nextSibling; } else if ( node != root ) { while ( node.parentNode && node != root ) { node = node.parentNode; try { serializer.endNode( node.serializedNode ); } catch (err) { node.serializedNode = undefined; continue; }; try { delete node.serializedNode; } catch (e) { //If we are failed to delete the property, than just set it to undefined node.serializedNode = undefined; } if ( node.nextSibling && node != root ) { node = node.nextSibling; break; } } if ( node == root ) { break; } } else { break; } } }; // ]]>// <![CDATA[ Evernote.NodeSerializer = function NodeSerializer( tab, styleStrategy, includeBg ) { this.initialize( tab, styleStrategy, includeBg ); }; Evernote.NodeSerializer.prototype._tab = null; Evernote.NodeSerializer.prototype._styleStrategy = null; Evernote.NodeSerializer.prototype._docBase = null; Evernote.NodeSerializer.prototype._imagesUrls = null; Evernote.NodeSerializer.prototype._serializedDom = “”; Evernote.NodeSerializer.prototype._includeBgStyles = true; Evernote.NodeSerializer.prototype.initialize = function ( tab, styleStrategy, includeBg ) { Evernote.Logger.debug( “DomSerializer.initialize()” ); this._tab = tab; this._styleStrategy = (styleStrategy instanceof Evernote.ClipStylingStrategy) ? styleStrategy : null; this._imagesUrls = [ ]; this._includeBgStyles = ( includeBg != null ) ? includeBg : true; this.getDocumentBase(); }; Evernote.NodeSerializer.prototype.startNode = function ( serializedNode, root, fullPage ) { Evernote.Logger.debug( “Start to serialize node :” + serializedNode.node.nodeName + “, class = ” + serializedNode.node.className + “, id = ” + serializedNode.node.id ); try { var node = serializedNode.node; if ( Evernote.ClipRules.isConditionalNode( node ) && Evernote.ElementSerializerFactory.getImplementationFor( node ) != null ) { var result = this.serializeConditionalNode( node, root, fullPage ); this._serializedDom += result.content; // hack for desktop Win client if ( result.imageUrl ) { this._imagesUrls.push( result.imageUrl ); } serializedNode.setStyle(result.nodeStyle); return serializedNode; } if ( node.nodeName.toLowerCase() == “embed” ) { var src = node.getAttribute( “src” ); if ( src && (src.indexOf(“.swf”, src.length – “.swf”.length) !== -1) ) { serializedNode.setStyle(new Evernote.ClipStyle()); return serializedNode; } } if ( node.nodeName.toLowerCase() == “img” ) { var src = node.getAttribute( “src” ); if (src.indexOf(‘&’) != -1) { src = src.slice(0, src.indexOf(‘&’)); } var absoluteSource = Evernote.Utils.makeAbsolutePath(this._docBase, src).replace(/\s/g, “%20”); node.setAttribute( “type”, “put-media-type-here-for-” + absoluteSource); node.setAttribute( “hash”, “put-hash-type-here-for-” + absoluteSource); node.setAttribute( “src”, src); if ( src && src.indexOf( “data:image” ) = 0; inhI– ) { var inhStyle = inhBgStyle[inhI]; this._serializedDom += “

“; serializedNode.translateTo.push( “div” ); } var pseudoStyle = this._styleStrategy.getNodeStyle( node, null, “:before” ); if ( fullPage && node.nodeName.toLowerCase() == “body” ) { var wrapBodyStyle = new Evernote.ClipStyle( nodeStyle, null, Evernote.ClipStyle.CSS_GROUP.getExtForStyle( “background” ) ); this._serializedDom += “”; serializedNode.translateTo.push( “div” ); var bgGroup = Evernote.ClipStyle.CSS_GROUP.getExtForStyle( “background” ); for ( var ind in bgGroup ) { if ( bgGroup.hasOwnProperty( ind ) ) { nodeStyle.removeStyle( bgGroup[ind] ); } } } if ( !fullPage && node == root ) { nodeStyle.removeStyle( “float” ); } if ( !serializedNode.node.hasChildNodes() && !(nodeStyle.getStyle( “height” ) || node.getAttribute( “height” )) ) { nodeStyle.addStyle( {height:”0px”} ); } if ( !serializedNode.node.hasChildNodes() && !(nodeStyle.getStyle( “width” ) || node.getAttribute( “width” )) ) { nodeStyle.addStyle( {width:”0px”} ); } if(nodeStyle.getStyle(“position”) == “fixed”) { nodeStyle.addStyle({position: “absolute”}); } if ( (node.nodeName.toUpperCase() == “SPAN”/* || node.nodeName.toUpperCase() == “A”*/) && node.getElementsByTagName( “IMG” ).length > 0) { nodeName = “div”; if ( !nodeStyle.getStyle( “display” ) ) nodeStyle.addStyle( {display:”inline”} ); } if (node.nodeName.toUpperCase() == “TH” || node.nodeName.toUpperCase() == “TD”) { nodeStyle.addStyle( {display:”table-cell”} ); } nodeStyle.removeDefaultCssStyle(); this._serializedDom += this.serializePseudoElement( node, pseudoStyle ); stylesStr = this.serializeStyles( node, nodeStyle ); if ( (nodeName.toLowerCase() == “div” /*|| nodeName.toLowerCase() == “span”*/) && nodeStyle.getStyle( “float” ) && nodeStyle.getStyle( “float” ) != “none” && serializedNode.parentNode && node.parentNode.nodeName.toLowerCase() != “a” ) { if ( !serializedNode.node.nextSibling || serializedNode.node.nextSibling.nodeType == 3 ) serializedNode.parentNode.isInlineBlock = true; } } Evernote.Logger.debug( node.nodeName + ” ” + attrsStr + ” -> ” + nodeName + ” ” + stylesStr ); this._serializedDom += “”; serializedNode.setStyle(nodeStyle); serializedNode.translateTo.push( nodeName ); return serializedNode; } catch ( e ) { Evernote.Logger.error( “Failed to start serialize node :” + e ); throw e; } }; Evernote.NodeSerializer.prototype.serializePseudoElement = function ( node, pseudoStyle ) { try { var nodeName = Evernote.ClipRules.translateNode( node ); if ( pseudoStyle.getStylesNames().length > 0 ) { var content = ” “; if ( pseudoStyle.getStyle( “content” ) ) { content = pseudoStyle.getStyle( “content” ); pseudoStyle.removeStyle( “content” ); } var beforeStylesStr = this.serializeStyles( node, pseudoStyle ); return “” + content.replace( /”/g, ” ) + “”; } return “”; } catch ( e ) { Evernote.Logger.error( “Failed to serialize pseudo element :” + e ); throw e; } }; Evernote.NodeSerializer.prototype.textNode = function ( node, range ) { this._serializedDom += this.serializeTextNode( node, range ); }; Evernote.NodeSerializer.prototype.endNode = function ( serializedNode ) { try { Evernote.Logger.debug( “end serialize node :” + serializedNode.translateTo ); if ( serializedNode.isInlineBlock ) { var name = “div”; if ( serializedNode.node.nodeName.toLowerCase() == “ul” ) { name = “li” } this._serializedDom += “” + ” ” + “” } var node = serializedNode.node; var serializedPseudo = “”; var pseudoStyle = new Evernote.ClipStyle(); if ( this._styleStrategy ) { pseudoStyle = this._styleStrategy.getNodeStyle( node, null, “:after” ); if ( pseudoStyle.getStylesNames().length > 0 ) { var floatStyle = serializedNode.getStyle().getStyle( “float” ); if ( floatStyle && !pseudoStyle.getStyle( “float” ) ) pseudoStyle.addStyle( { “float” : floatStyle } ); if ( node.nodeName.toLowerCase() == “ul” ) serializedPseudo = this.serializePseudoElement( document.createElement( “div” ), pseudoStyle ); } } while ( serializedNode.translateTo.length > 0 ) { var nodeName = serializedNode.translateTo.pop(); if ( !Evernote.ClipRules.isSelfClosingNode( serializedNode.node ) ) { if ( !serializedNode.node.hasChildNodes() ) this._serializedDom += ” “; } if ( nodeName.toLowerCase() == “ul” ) { this._serializedDom += this.serializePseudoElement( document.createElement( “li” ), pseudoStyle ); } this._serializedDom += “”; } this._serializedDom += serializedPseudo; } catch ( e ) { Evernote.Logger.error( “Failed to end serialize node :” + e ); throw e; } }; Evernote.NodeSerializer.prototype.serializeTextNode = function ( node, range ) { Evernote.Logger.debug( “DomSerializer.serializeTextNode()” ); try { var nodeValue = node.nodeValue; if ( !range ) { return Evernote.Utils.htmlEncode( nodeValue ); } else { if ( range.startContainer == node && range.startContainer == range.endContainer ) { return Evernote.Utils.htmlEncode( nodeValue.substring( range.startOffset, range.endOffset ) ); } else if ( range.startContainer == node ) { return Evernote.Utils.htmlEncode( nodeValue.substring( range.startOffset ) ); } else if ( range.endContainer == node ) { return Evernote.Utils.htmlEncode( nodeValue.substring( 0, range.endOffset ) ); } else if ( range.commonAncestorContainer != node ) { return Evernote.Utils.htmlEncode( nodeValue ); } } } catch ( e ) { Evernote.Logger.error( “DomSerializer.serializeTextNode() failed ” + e ); throw e; } return “”; }; Evernote.NodeSerializer.prototype.serializeConditionalNode = function ( node, root, fullPage ) { Evernote.Logger.debug( “DomSerializer.serializeConditionalNode()” ); var impl = Evernote.ElementSerializerFactory.getImplementationFor( node ); if ( typeof impl == ‘function’ ) { var nodeStyle = (this._styleStrategy) ? this._styleStrategy.styleForNode( node, root, fullPage ).evaluated : null; if (nodeStyle) nodeStyle.removeDefaultCssStyle(); var serializer = new impl( node, nodeStyle ); var content = serializer.serialize( this._docBase ); var imageUrl = serializer.getImageUrl(); return { content:content, imageUrl:imageUrl, nodeStyle:nodeStyle }; } return { content:””, imageUrl:””, nodeStyle:new Evernote.ClipStyle() }; }; Evernote.NodeSerializer.prototype.serializeAttributes = function ( node ) { Evernote.Logger.debug( “DomSerializer.serializeAttributes()” ); try { var attrs = node.attributes; var str = “”; for ( var i = 0; i < attrs.length; ++i ) { if ( !Evernote.ClipRules.isNoKeepNodeAttr( attrs[ i ], Evernote.ClipRules.translateNode( node ), node ) ) { var attrValue = (attrs[ i ].value) ? Evernote.GlobalUtils.escapeXML( attrs[ i ].value ) : “”; if ( (attrs[ i ].name.toLowerCase() == “src” || attrs[ i ].name.toLowerCase() == “href”) && attrValue.toLowerCase().indexOf( “http” ) != 0 ) { attrValue = Evernote.Utils.makeAbsolutePath( this._docBase, attrValue ); } str += ” ” + attrs[ i ].name.toLowerCase() + “=\”” + attrValue + “\””; } } return str; } catch ( e ) { Evernote.Logger.error( “DomSerializer.serializeAttributes() failed: error = ” + e ); } return “”; }; Evernote.NodeSerializer.prototype.serializeStyles = function ( node, nodeStyle ) { Evernote.Logger.debug( “DomSerializer.serializeStyles()” ); try { var str = “”; if(node.nodeName.toLowerCase() == “map”) { //Map should not have style attribute according to Evernote DTD return “”; } if ( node && nodeStyle instanceof Evernote.ClipStyle ) { str += ” style=\”” + nodeStyle.toString().replace( /”/g, “” ) + “\””; } return str; } catch ( e ) { Evernote.Logger.error( “DomSerializer.serializeStyles() failed: error = ” + e ); throw e; } return “”; }; Evernote.NodeSerializer.prototype.getDocumentBase = function () { Evernote.Logger.debug( “DomSerializer.getDocumentBase()” ); if ( !this._docBase ) { var baseTags = this._tab.document.getElementsByTagName( “base” ); for ( var i = 0; i < baseTags.length; ++i ) { var baseTag = baseTags[ i ]; if ( typeof baseTag == ‘string’ && baseTag.indexOf( “http” ) == 0 ) { this._docBase = baseTag; } if ( this._docBase ) { break; } } if ( !this._docBase ) { var location = this._tab.document.location; this._docBase = location.protocol + “//” + location.host + location.pathname.replace( /[^\/]+$/, “” ); } } return this._docBase; }; Evernote.NodeSerializer.prototype.getImagesUrls = function () { return this._imagesUrls; }; Evernote.NodeSerializer.prototype.getSerializedDom = function () { return ‘
‘ + this._serializedDom.replace(/[^\u0009\u000a\u000d\u0020-\uD7FF\uE000-\uFFFD]+/g, “”) + ‘
‘; }; // ]]>// // // <![CDATA[ Evernote.DataImageSerializer = function DataImageSerializer( node, nodeStyle ) { if ( !nodeStyle ) { nodeStyle = new Evernote.ClipStyle(); } this.initialize( node, nodeStyle ); }; Evernote.inherit( Evernote.DataImageSerializer, Evernote.AbstractElementSerializer, true ); Evernote.DataImageSerializer.isResponsibleFor = function( node ) { try { if ( node && node.nodeType == Evernote.Node.ELEMENT_NODE && node.nodeName.toLowerCase() == “img” ) { var src = node.getAttribute( “src” ); if ( src && src.indexOf( “data:image” ) != -1 ) { return true; } } } catch(e) { Evernote.Logger.error(“DataImageSerializer.isResponsibleFor failed due to error ” + e); } return false; }; Evernote.DataImageSerializer.prototype.serialize = function( /*docBase*/ ) { Evernote.Logger.debug( “DataImageSerializer.serialize()” ); try { this._nodeStyle.addStyle( { “background-image” : “url(‘” + this._node.getAttribute( “src” ) + “‘)”, “width” : this._node.offsetWidth + “px”, “height” : this._node.offsetHeight + “px”, “background-repeat” : “no-repeat”, “display” : “block” } ); return ” “; } catch ( e ) { Evernote.Logger.error( “DataImageSerializer.serialize() failed: error = ” + e ); } return “”; }; // ]]>// <![CDATA[ Evernote.VideoElementSerializer = function VideoElementSerializer( node, nodeStyle ) { this.initialize( node, nodeStyle ); }; Evernote.inherit( Evernote.VideoElementSerializer, Evernote.AbstractElementSerializer, true ); Evernote.VideoElementSerializer.isResponsibleFor = function( node ) { return node && node.nodeType == Evernote.Node.ELEMENT_NODE && node.nodeName.toLowerCase() == “video”; }; Evernote.VideoElementSerializer.prototype.serialize = function( /*docBase*/ ) { Evernote.Logger.debug( “VideoElementSerializer.serialize()” ); try { var width = this._node.offsetWidth; var height = this._node.offsetHeight; var doc = this._node.ownerDocument; var canvas = doc.createElement( “CANVAS” ); canvas.width = width; canvas.height = height; var context = canvas.getContext( “2d” ); context.drawImage( this._node, 0, 0, width, height ); var dataUrl = canvas.toDataURL( “image/png” ); context.clearRect( 0, 0, width, height ); this._nodeStyle.addStyle( { “background-image” : “url(‘” + dataUrl + “‘)”, “width” : width + “px”, “height” : height + “px”, “display” : “block” } ); return “ “; } catch ( e ) { Evernote.Logger.error( “VideoElementSerializer.serialize() failed: error = ” + e ); } return “”; }; // ]]>// <![CDATA[ /** * Serializes DOM element into an img pointing to the thumbnail of the video * * Video ids are used for obtaining thumbnails via * https://i2.ytimg.com/vi/cAcxHQalWOw/hqdefault.jpg. These ids can be * obtained from: * *
 *   - the URL of the document containing EMBED
 *   - iframe's src attribute that embeds the video via an iframe
 *   - src attribute of the embed object (though on actualy youtube.com it's not possible)
 * 
* * Sample URLs are: * *
 * http: //www.youtube.com/embed/IWJJBwKhvp4?wmode=opaque&rel=0
 * http: //www.youtube.com/v/YZEbBZ2IrXE?version=3&rel=1&fs=1&showsearch=0&showinfo=1&iv_load_policy=1
 * http: //www.youtube.com/v/J3mjFSTsKiM&hl=en&fs=1
 * http://www.youtube.com/watch?v=cAcxHQalWOw
 * http://www.youtube.com/user/IFiDieApp?v=sdzCELofGgE&feature=pyv
 * 
*/ Evernote.YoutubeElementSerializer = function YoutubeElementSerializer( doc, node, nodeStyle ) { this.initialize( doc, node, nodeStyle ); }; Evernote.inherit( Evernote.YoutubeElementSerializer, Evernote.AbstractElementSerializer, true ); Evernote.YoutubeElementSerializer.WATCH_URL_REGEX = /^https?:\/\/www\.youtube\.com\/watch\?.*v=([^&]+)/i; Evernote.YoutubeElementSerializer.USER_CHANNEL_URL_REGEX = /^https?:\/\/www\.youtube\.com\/user\/([a-zA-Z0-9]+)\?v=([^&]+)/i; Evernote.YoutubeElementSerializer.EMBED_URL_REGEX = /^https?:\/\/www\.youtube\.com\/embed\/([^\/\?&]+)/i; Evernote.YoutubeElementSerializer.VIDEO_URL_REGEX = /^https?:\/\/www\.youtube\.com\/v\/([^\/\?&]+)/i; Evernote.YoutubeElementSerializer.POSSIBLE_CONTAINER_NODES = [ “OBJECT” ]; Evernote.YoutubeElementSerializer.VIDEO_NODES = [ “EMBED”, “IFRAME” ]; Evernote.YoutubeElementSerializer.WATCH_URL = “http://www.youtube.com/watch?v=$videoId$”; Evernote.YoutubeElementSerializer.USER_CHANNEL_URL = “http://www.youtube.com/user/$userId$?v=$videoId$”; Evernote.YoutubeElementSerializer.DEFAULT_THUMB_URL = “https://i2.ytimg.com/vi/$videoId$/default.jpg”; Evernote.YoutubeElementSerializer.HQ_THUMB_URL = “https://i2.ytimg.com/vi/$videoId$/hqdefault.jpg”; Evernote.YoutubeElementSerializer.DEFAULT_THUMB_WIDTH = 120; Evernote.YoutubeElementSerializer.DEFAULT_THUMB_HEIGHT = 90; Evernote.YoutubeElementSerializer.isResponsibleFor = function( node ) { var params = this.extractVideoParamsFromNode( node ); return (params) ? true : false; }; Evernote.YoutubeElementSerializer.extractVideoParamsFromNode = function( node ) { Evernote.Logger.debug( “YoutubeElementSerializer.extractVideoIdFromNode()” ); try { if ( node && node.nodeType == Evernote.Node.ELEMENT_NODE ) { var view = window; try { view = node.ownerDocument.defaultView; } catch ( e ) { } var matches = null; if ( view && (node.nodeName.toLowerCase() == “embed” || node.nodeName.toLowerCase() == “object”) && view.location ) { if ( (matches = view.location.href.match( this.WATCH_URL_REGEX )) && matches[ 1 ] ) { return matches[ 1 ]; } else if ( (matches = view.location.href.match( this.USER_CHANNEL_URL_REGEX )) && matches[ 1 ] && matches[ 2 ] ) { return [ matches[ 1 ], matches[ 2 ] ]; } } else { var videoNode = this.findVideoNode( node ); if ( videoNode ) { var src = videoNode.getAttribute( “src” ); if ( src && (matches = src.match( this.EMBED_URL_REGEX )) && matches[ 1 ] ) { return matches[ 1 ]; } else if ( src && (matches = src.match( this.VIDEO_URL_REGEX )) && matches[ 1 ] ) { return matches[ 1 ]; } } } } } catch(e) { Evernote.Logger.error(“failed to YoutubeElementSerializer.extractVideoParamsFromNode due to error ” + e); } return null; }; Evernote.YoutubeElementSerializer.findVideoNode = function( node ) { Evernote.Logger.debug( “YoutubeElementSerializer.findVideoNode()” ); if ( node && node.nodeType == Evernote.Node.ELEMENT_NODE ) { if ( Evernote.ArrayExtension.indexOf(this.VIDEO_NODES, node.nodeName.toUpperCase() ) >= 0 ) { return node; } else if ( Evernote.ArrayExtension.indexOf(this.POSSIBLE_CONTAINER_NODES, node.nodeName.toUpperCase() ) >= 0 ) { try { var it = node.ownerDocument.createNodeIterator( node, NodeFilter.SHOW_ELEMENT, null, false ); var next = null; while ( next = it.nextNode() ) { if ( Evernote.ArrayExtension.indexOf(this.VIDEO_NODES, next.nodeName.toUpperCase() ) >= 0 ) { return next; } } } catch(e) { //We ignore exception here, because if node iterator is not supported, than we could skip old pages (not Youtube). return null; } } } return null; }; Evernote.YoutubeElementSerializer.prototype._imageUrl = “”; Evernote.YoutubeElementSerializer.prototype.serialize = function( /*docBase*/ ) { Evernote.Logger.debug( “YoutubeElementSerializer.serialize()” ); try { var userId = null; var videoId = null; var params = this.constructor.extractVideoParamsFromNode( this._node ); if ( params instanceof Array ) { userId = params[ 0 ]; videoId = params[ 1 ]; } else if ( typeof params == “string” ) { videoId = params; } if ( videoId ) { var thumbUrl = null; var w = 0; var h = 0; if ( this._nodeStyle ) { var view = window; try { view = this._node.ownerDocument.defaultView; } catch ( e ) { } var computedStyles = Evernote.ElementExtension.getComputedStyle( this._node, null, view ); w = parseInt( Evernote.StyleElementExtension.getPropertyValue(computedStyles, “width” ) ); w = (isNaN( w )) ? 0 : w; h = parseInt( Evernote.StyleElementExtension.getPropertyValue(computedStyles, “height” ) ); h = (isNaN( h )) ? 0 : h; if ( w < this.constructor.DEFAULT_THUMB_WIDTH || h < this.constructor.DEFAULT_THUMB_HEIGHT ) { thumbUrl = this.getDefaultThumbnailUrl( videoId ); } else { thumbUrl = this.getHQThumbnailUrl( videoId ); } } else { thumbUrl = this.getDefaultThumbnailUrl( videoId ); } if ( thumbUrl ) { var styleStr = (this._nodeStyle instanceof Evernote.ClipStyle) ? (“style=\”” + this._nodeStyle.toString() + “\””) : “”; var attrs = this._node.attributes; var attrStr = “”; for ( var i = 0; i this.constructor.DEFAULT_THUMB_WIDTH / this.constructor.DEFAULT_THUMB_HEIGHT ) { imgAttrStr += “height=\”” + h + “\””; } else { // scale by width imgAttrStr += “width=\”” + w + “\””; } } this._imageUrl = thumbUrl; return ““; } } } catch ( e ) { Evernote.Logger.error( “YoutubeElementSerializer.serialize() failed: error = ” + e ); } return “”; }; Evernote.YoutubeElementSerializer.prototype.getDefaultThumbnailUrl = function( videoId ) { return this.constructor.DEFAULT_THUMB_URL.replace( /\$videoId\$/, videoId ); }; Evernote.YoutubeElementSerializer.prototype.getHQThumbnailUrl = function( videoId ) { return this.constructor.HQ_THUMB_URL.replace( /\$videoId\$/, videoId ); }; Evernote.YoutubeElementSerializer.prototype.getWatchUrl = function( videoId ) { return this.constructor.WATCH_URL.replace( /\$videoId\$/, videoId ); }; Evernote.YoutubeElementSerializer.prototype.getUserChannelUrl = function( userId, videoId ) { return this.constructor.USER_CHANNEL_URL.replace( /\$userId\$/, userId ).replace( /\$videoId\$/, videoId ); }; Evernote.YoutubeElementSerializer.prototype.getImageUrl = function() { return this._imageUrl; }; // ]]>// // // <![CDATA[ Evernote.FontSizeReplacement = { SUPPORTED_FONT_SIZES: [“em”, “%”, “pt”, “px”], getValue: function(val) { if(typeof val != “string”) return val; if(this.isCalculationRequired(val)) { return Evernote.Utils.getFontSizeInPixels(val) + “px”; } else { //Do not set browser dependant CSS since it does not supported by Evernote Chromium Viewer. return null; } }, isCalculationRequired: function(val) { for(var i = 0; i // // <![CDATA[ Evernote.NotebooksLoader = { notebooks: [], getNotebookByUid: function(uid) { Evernote.ResponseReceiver.subscribe(this); Evernote.Addin.getNotebooks(document); for(var i = 0; i // // // // // //