안녕하세요^^

날씨가 많이 추워지네요.

날씨가 추워지니, 외롭고 마음 한 쪽 구석이 시립네요^^;;

직장다니면서 많은 일이 생기면서 스트레스도 쌓이고, 혼자라고 느껴지진 않으신가요?

a_bosss_life-13 a_bosss_life-31

살이 찌는 악순환도 생기지요..

a_bosss_life-18


저도 그래서 인터넷 검색하다보니 즐거운 모임이 있더라구요.

직장인 댄스 동호회 암행어사!! 

라는 곳이 있는데요.


직장인들이 서로 공감하고 추억도 만들며 

한주의 스트레스도 풀면서,

추운 겨울에 따뜻한 정도 나눌 수 있는 동호회더라구요^^


어떤 곳이 궁금하시진 않으신가요?!!




구글 플레이 스토어 

검색 [암행어사]를 치시면 됩니다.

↓↓ 주소

https://play.google.com/store/apps/details?id=com.sky.amhang_project




간략하게 기능을 보시면은..







 

                          실시간 뉴스 및 공연 포스트를 볼수있구요.


                     그외 암행어사 공연 동영상 및 춤을 배울 수 있는게 있어요.


                     그리고 어렵지 않게 연습실 오시는길이 있구요. 

들어가셔서 보시면 암행어사 싸이월드 클럽

들어갈 수 있는 버튼이 있는데요.


 암행어사 싸이월드 클럽 주소 ↓↓ 

많은 사진과 영상이 있으니 오셔서 같이 즐겨요^^

 http://club.cyworld.com/ClubV1/Home.cy/53125147

네이버 카페

http://cafe.naver.com/groovin

                



 

그리고 암행어사 멤버 직장인들이

한주의 힘든 회사일을 마치고 땀흘리며 연습한 댄스를

종로 GO 포차 클럽에서 2014년 크리스마스의 추억을 

선물해 드리고 싶다고 합니다!!


같이가서 크리스마스를 따뜻한 정으로 뭉친

직장인의 댄스로 따뜻한 추억을 만들어보는건 어떨까요? 






 추운 겨울 암행어사 멤버들과 따뜻한 정과 추억을 

나눠 보시겠습니까?^^

brown_conys_cozy_winter_date-22




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

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

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

'; $R.articleTitleMarker__end = '

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

'); $R.debugPrint('BuildHTMLPregs', $R.debugTimerEnd()+'ms'); // return // ====== return { '_html': _html, '_links': _stuff._links, '_targetCandidate': _targetCandidate, '_firstCandidate': _firstCandidate }; }; // get first page fragment // ======================= $R.getContent__nextPage__getFirstFragment = function (_html) { // remove all tags _html = _html.replace(/<[^>]+?>/gi, ''); // normalize spaces _html = _html.replace(/\s+/gi, ' '); // return first 1000 characters return _html.substr(0, 2000); }; // get link parts // ============== // substr starting with the first slash after // $R.getURLPath = function (_url) { return _url.substr(_url.indexOf('/', (_url.indexOf('//') + 2))); }; // substr until the first slash after // $R.getURLDomain = function (_url) { return _url.substr(0, _url.indexOf('/', (_url.indexOf('//') + 2))) }; // find // ==== $R.getContent__nextPage__find = function (_currentPageWindow, _linksInCurrentPage) { // page id var _pageNr = ($R.nextPage__loadedPages.length + 1); // get // === var _possible = []; if (_possible.length > 0); else { _possible = $R.getContent__nextPage__find__possible(_currentPageWindow, _linksInCurrentPage, 0.5); } //if (_possible.length > 0); else { _possible = $R.getContent__nextPage__find__possible(_currentPageWindow, _linksInCurrentPage, 0.50); } // none if (_possible.length > 0); else { if ($R.debug) { $R.log('no next link found'); } return; } if ($R.debug) { $R.log('possible next', _possible); } // the one // ======= var _nextLink = false; // next keyword? // ============= (function () { if (_nextLink) { return; } for (var i=0, _i=_possible.length; i<_i; i++) { for (var j=0, _j=$R.nextPage__captionKeywords.length; j<_j; j++) { if (_possible[i]._caption.indexOf($R.nextPage__captionKeywords[j]) > -1) { // length // ====== if (_possible[i]._caption.length > $R.nextPage__captionKeywords[j].length * 2) { continue; } // not keywords // ============ for (var z=0, _z=$R.nextPage__captionKeywords__not.length; z<_z; z++) { if (_possible[i]._caption.indexOf($R.nextPage__captionKeywords__not[z]) > -1) { _nextLink = false; return; } } // got it // ====== _nextLink = _possible[i]; return; } } } })(); // caption matched page number // =========================== (function () { if (_nextLink) { return; } for (var i=0, _i=_possible.length; i<_i; i++) { if (_possible[i]._caption == (''+_pageNr)) { _nextLink = _possible[i]; return; } } })(); // next keyword in title // ===================== (function () { if (_nextLink) { return; } for (var i=0, _i=_possible.length; i<_i; i++) { // sanity if (_possible[i]._title > ''); else { continue; } if ($R.measureText__getTextLength(_possible[i]._caption) <= 2); else { continue; } for (var j=0, _j=$R.nextPage__captionKeywords.length; j<_j; j++) { if (_possible[i]._title.indexOf($R.nextPage__captionKeywords[j]) > -1) { // length // ====== if (_possible[i]._title.length > $R.nextPage__captionKeywords[j].length * 2) { continue; } // not keywords // ============ for (var z=0, _z=$R.nextPage__captionKeywords__not.length; z<_z; z++) { if (_possible[i]._title.indexOf($R.nextPage__captionKeywords__not[z]) > -1) { _nextLink = false; return; } } // got it // ====== _nextLink = _possible[i]; return; } } } })(); // return? // ======= if (_nextLink); else { return; } // mark // ==== $R.debugPrint('NextPage', 'true'); if ($R.debug) { $R.debugOutline(_nextLink._node, 'target', 'next-page'); $R.log('NextPage Link', _nextLink, _nextLink._node); } // process page // ============ $R.getContent__nextPage__loadToFrame(_pageNr, _nextLink._href); $R.nextPage__loadedPages.push(_nextLink._href); }; // find with similarity // ==================== $R.getContent__nextPage__find__possible = function (_currentPageWindow, _linksInCurrentPage, _distanceFactor) { var _mainPageHref = $R.win.location.href, _mainPageDomain = $R.getURLDomain(_mainPageHref), _mainPagePath = $R.getURLPath(_mainPageHref) ; var _links = $.map ( _linksInCurrentPage, function (_element, _index) { var _href = _element.__node.href, _path = $R.getURLPath(_href), _title = (_element.__node.title > '' ? _element.__node.title.toLowerCase() : ''), _caption = _element.__node.innerHTML.replace(/<[^>]+?>/gi, '').replace(/\&[^\&\s;]{1,10};/gi, '').replace(/\s+/gi, ' ').replace(/^ /, '').replace(/ $/, '').toLowerCase(), _distance = $R.levenshteinDistance(_mainPagePath, _path) ; var _caption2 = ''; for (var i=0, _i=_caption.length, _code=0; i<_i; i++) { _code = _caption.charCodeAt(i); _caption2 += (_code > 127 ? ('&#'+_code+';') : _caption.charAt(i)); } _caption = _caption2; switch (true) { case (!(_href > '')): case (_mainPageHref.length > _href.length): case (_mainPageDomain != $R.getURLDomain(_href)): case (_href.substr(_mainPageHref.length).substr(0, 1) == '#'): case (_distance > Math.ceil(_distanceFactor * _path.length)): return null; default: // skip if already loaded as next page for (var i=0, _i=$R.nextPage__loadedPages.length; i<_i; i++) { if ($R.nextPage__loadedPages[i] == _href) { return null; } } // return return { '_node': _element.__node, '_href': _href, '_title': _title, '_caption': _caption, '_distance': _distance }; } } ); // sort -- the less points, the closer to position 0 // ==== _links.sort(function (a, b) { switch (true) { case (a._distance < b._distance): return -1; case (a._distance > b._distance): return 1; default: return 0; } }); // return return _links; }; // load to frame // ============= $R.getContent__nextPage__loadToFrame = function (_pageNr, _nextPageURL) { // do ajax // ======= $.ajax ({ 'url' : _nextPageURL, 'type' : 'GET', 'dataType' : 'html', 'async' : true, 'timeout': (10 * 1000), //'headers': { 'Referrer': _nextPageURL }, 'success' : function (_response, _textStatus, _xhr) { $R.getContent__nextPage__ajaxComplete(_pageNr, _response, _textStatus, _xhr); }, 'error' : function (_xhr, _textStatus, _error) { $R.getContent__nextPage__ajaxError(_pageNr, _xhr, _textStatus, _error); } }); }; // ajax calbacks // ============= $R.getContent__nextPage__ajaxError = function (_pageNr, _xhr, _textStatus, _error) { }; $R.getContent__nextPage__ajaxComplete = function (_pageNr, _response, _textStatus, _xhr) { // valid? // ====== if (_response > ''); else { return; } // script // ====== var _script = '' + '<script type="text/javascript">' + ' function __this_page_loaded()' + ' {' + ' window.setTimeout(' + ' function () {' + ($R.component ? 'window.parent.' : 'window.parent.parent.') + '$readable.getContent__nextPage__loadedInFrame("'+_pageNr+'", window); }, ' + ' 250' + ' );' + ' } ' + ' if (document.readyState); else { __this_page_loaded(); } ' + ' function __this_page_loaded_ready(delayedNrTimes)' + ' {' + ' if (document.readyState != "complete" && delayedNrTimes < 30)' + ' { setTimeout(function () { __this_page_loaded_ready(delayedNrTimes+1); }, 100); return; }' + ' __this_page_loaded();' + ' }' + ' __this_page_loaded_ready(0);' + '</script>' ; // get html // ======== var _html = _response; // normalize // ========= _html = _html.replace(/<\s+/gi, '<'); _html = _html.replace(/\s+>/gi, '>'); _html = _html.replace(/\s+\/>/gi, '/>'); // remove // ====== _html = _html.replace(/<script [^>]*?>([\s\S]*?)<\/script>/gi, ''); _html = _html.replace(/<script [^>]*?\/>/gi, ''); _html = _html.replace(/
' + _key + '' + _value + '
]*?>/gi, ''); _contents = _contents.replace(/<\/td>/gi, ''); } // for tables, clear empty rows if (_tag_name == 'table') { _contents = _contents.replace(/
번호
제목
글쓴이
공지
기타 정보
[필독] 앱 정보/후기 게시판. [마켓] 등 스토어 반드시 명시
회색
199232   2010-07-20 2011-05-09 16:38
195
리뷰
카톡테마/배경화면 - 배경모아 활용기!
아키나
11161   2012-01-03 2012-01-03 19:40
애플리케이션 정보 업데이트 날짜: 2011년 12월 30일 (금) 현재 버전: 3.3 필요한 ANDROID 버전: 2.1 이상 카테고리: 엔터테인먼트 크기: 1.5M 가격: 무료https://market.android.com/details?id=com.iconnect.app.bgprovider 제가 자주 사용하는 배경모아 앱...  
194
앱 정보
ConnectBot – 스마트폰에서 즐기는 텔넷, SSH 4
돈육
11166   2010-04-12 2010-04-15 13:54
이름 : ConnectBot 분류 : Home > Applications > Communication > ConnectBot 가격 : 무료 언어 : 한국어 미지원 (한글 출력안됨) 제작자 : ConnectBot was developed for Android by Kenny Root and Jeffrey Sharkey 상세정보 : http://www.androlib.com/an...  
193
앱 정보
[도구/무료] 이사할때 필수어플 나침반 수평계 1
나지대리
11172   2013-02-26 2013-02-26 20:10
이제 본격적으로 이사철이 오는데요. 유용한 앱이 있어서 소개해 드립니다. 이사하면 가구나 선반, 세탁기 등 수평을 맞춰야하는데 수평계를 따로 사기엔 돈이 아깝더라고요. 그래서 찾아보니 수평 맞추는데 도움이 되는 앱이 있더라고요. 수평과 동시에 놓이...  
192
앱 정보
[멀티미디어] Iphone 스러운 비쥬얼의 music player- Rock'on 2 file
system3rd
11198   2009-06-22 2009-06-22 11:29
 
191
앱 정보
[앱/무료] 지인들에게 크리스마스 카드를 보내세요~~ 1
샤리안
11321   2011-12-23 2011-12-24 03:21
크리스마스가 다가오는데 지인들에게 크리스마스카드는 보내셨나요??? 하지만 바빠서 예전만큼 크리스마스카드를 주고 받거나 이런 문화가 많이 사라진것 같아요!! 이렇게 바쁘신분들을 위해서 카카오톡이나 MMS로 크리스마스 카드를 대신해 보는 것도 좋을 ...  
190
앱 정보
스마트폰에서 팩스 보내기(스마트팩스) 10
짤즈부르크
11440   2010-11-19 2010-11-20 09:50
안녕하세요! 내일이 토요일인데 오전에 갑자기 팩스 보낼 일이 있어서 여기저기 찾아 보니 스마트팩스라는 안드로이드용 어플이 있더군요(마켓에서 스마트팩스로 검색). 아직은 데모버전으로만 올라와 있고 하루에 7번인가만 보낼 수 있도록 제한되어 있다고 ...  
189
앱 정보
pure music widget 4 file
Implicity
11467   2010-05-12 2010-05-17 16:46
 
188
앱 정보
신사동 호랭이도 울고 갈 나만의 음악 만들기 ‘Dr.Smith's Music factory’ file
snoberry33
11487   2013-01-23 2013-01-24 15:06
 
187
리뷰
[안드로이드] Office Jerk Free 영상 리뷰 file
앱톡 안드로이드
11490   2011-10-04 2011-10-04 07:59
 
186
앱 정보
책읽어주는 어플 file
앱앱
11720   2012-10-08 2012-10-08 23:20
 
185
팁/강좌
짜증 나는 웹 광고 없애는 법 3
신묘군
11729   2010-09-04 2010-09-06 06:19
아... 원리로는 간단한건데 생각을 안하고 있었네요. 도아님의 설명대로 하시면 됩니다. http://offree.net/entry/Block-ReaClick-Ad 안드로이드 폰에서는 아마 루팅된 폰만 /etc/hosts 파일을 고칠 수 있을 것 같은데 (확실한 것은 고수님들이...) 넥서스 원...  
184
앱 정보
[모토로이] Market app APNDroid를 설치하지 마세요. 3
조이플
11784   2010-03-30 2010-03-31 00:18
마켓에서 다운받는 APNDroid가 2G/3G OnOff하는 기능인데요. 이걸 설치하고 나면 어느순간에 SKT telecom으로 설정되어 있는 APN (Hidden Menu) 값이 변경이 되어 3G가 안되는 문제가 발생합니다. 이럴경우 해결 방법은 설정 -> 개인 데이타 재설정 밖에 없으...  
183
기타 정보
한국에서 아마존 앱스토어 쓰는법 1
세죠위그
11854   2013-02-11 2013-02-12 09:32
아마존 일일 무료어플을 한국에서 받을 방법을 어쩌다 찾앗음 조금 손이 많이 가긴 했지만 일단 http://olpost.com/r/3330597 여기 나와있는 대로 아마존 계정을 하나 만들어야 함 계정을 만들고 무료어플을 받으려면 미국 프록시 서버로 우회해야함 본인은 컴...  
182
팁/강좌
안드로이드 마켓 유료앱 사용하기~ 7
리틀워니
11885   2010-03-28 2010-12-15 12:29
애플은 앱스토어, 안드로이드는 안드로이드마켓, 윈도우모바일은 마켓플레이스 그렇다. 역시 스마트폰 대세의 핵심은 App! 오늘은 안드로이드 마켓을 활용해 보자~ 엇... 그런데 한국에서는 안드로이드 마켓이 전부 지원되지 않는다 ㅜㅜ 바로... 유료앱 및 구...  
181
앱 정보
[무료/앱] 예능자막 만들기 2
Trenze
11892   2013-05-06 2013-05-06 19:09
안드로이드 추천 어플 [예능자막 만들기] 사진에 자막 넣기 어플입니다. 여러가지 느낌의 센스있는 자막들이 많습니다. 사진 선택하고 자막선택하고 휘리릭 저장하면 끝~~~ 간단하게 사진에 센스 자막 넣고 카카오톡, 카카오스토리, 페이스북, 밴드에서 공유...  
180
기타 정보
우체국에 괜찬은 요금제 많네요 file
말쓰
11947   2022-07-11 2022-07-18 08:44
 
179
리뷰
[구글플레이/유무료]안드로이드 기기끼리 조종한다! 블루투스 리모콘
ShakeJ
11953   2013-01-18 2013-10-10 15:50
(유료버전 업데이트 샷) [Ver1.0.2] 업데이트 내역 - 카메라 디자인 업데이트 - 무음 카메라 기능 - 내폰찾기 모드와 상관없이 알람음 및 진동이 울림 - 블루투스로 카메라를 켜지 않고 단독으로 카메라 기능 가능 [Ver1.0.5] 업데이트 내역 - UI 대폭 변경 -...  
178
앱 정보
새로운 모바일 핫스팟 어플 'FoxFi', 플레이 스토어에 나옴!! (무료, 루팅 필요 없음)
아골치야
11995   2012-03-17 2012-03-17 16:05
http://www.droid-life.com/2012/03/16/foxfi-enables-wifi-tethering-without-the-cost-no-root-required/ 새로운 모바일 핫스팟 어플인 'FoxFi'가 플레이 스토어에 나왔다고 합니다 모바일 핫스팟 비용을 따로 내지 않고도 와이파이 블루투스 테더링이 가능...  
177
앱 이벤트
KT 요금계산기 이벤트 참여 하면 스타버스 커피 증정 file
켈샤
12004   2022-04-14 2022-04-14 14:33
 
176
앱 정보
안드로이드 하드코어 유저를 위한..Droid Explorer.. 9 file
system3rd
12033   2009-11-26 2010-07-24 10:38