sdoc 1.0.0.rc2 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +1 -1
  3. data/.travis.yml +12 -11
  4. data/CHANGELOG.md +31 -0
  5. data/Gemfile +1 -1
  6. data/README.md +15 -5
  7. data/Rakefile +1 -2
  8. data/bin/sdoc +1 -1
  9. data/bin/sdoc-merge +1 -1
  10. data/lib/rdoc/discover.rb +1 -1
  11. data/lib/rdoc/generator/template/rails/_context.rhtml +216 -0
  12. data/lib/rdoc/generator/template/rails/_head.rhtml +39 -0
  13. data/lib/rdoc/generator/template/rails/_panel.rhtml +14 -0
  14. data/lib/rdoc/generator/template/rails/class.rhtml +51 -0
  15. data/lib/rdoc/generator/template/rails/file.rhtml +38 -0
  16. data/lib/rdoc/generator/template/rails/index.rhtml +33 -0
  17. data/lib/rdoc/generator/template/rails/resources/apple-touch-icon.png +0 -0
  18. data/lib/rdoc/generator/template/rails/resources/css/github.css +123 -0
  19. data/lib/rdoc/generator/template/rails/resources/css/main.css +378 -0
  20. data/lib/rdoc/generator/template/rails/resources/css/panel.css +365 -0
  21. data/lib/rdoc/generator/template/rails/resources/css/reset.css +48 -0
  22. data/lib/rdoc/generator/template/rails/resources/favicon.ico +0 -0
  23. data/lib/rdoc/generator/template/rails/resources/i/arrow-down.svg +8 -0
  24. data/lib/rdoc/generator/template/rails/resources/i/arrow-right.svg +8 -0
  25. data/lib/rdoc/generator/template/rails/resources/i/search.svg +12 -0
  26. data/lib/rdoc/generator/template/rails/resources/i/tree_bg.svg +8 -0
  27. data/lib/rdoc/generator/template/rails/resources/js/highlight.pack.js +1 -0
  28. data/lib/rdoc/generator/template/rails/resources/js/jquery-3.5.1.min.js +2 -0
  29. data/lib/rdoc/generator/template/rails/resources/js/main.js +41 -0
  30. data/lib/rdoc/generator/template/rails/resources/js/searchdoc.js +493 -0
  31. data/lib/rdoc/generator/template/rails/resources/js/turbolinks.js +6 -0
  32. data/lib/rdoc/generator/template/rails/search_index.rhtml +8 -0
  33. data/lib/rdoc/generator/template/sdoc/_context.rhtml +5 -5
  34. data/lib/rdoc/generator/template/sdoc/_head.rhtml +0 -1
  35. data/lib/rdoc/generator/template/sdoc/class.rhtml +13 -0
  36. data/lib/rdoc/generator/template/sdoc/file.rhtml +0 -0
  37. data/lib/rdoc/generator/template/sdoc/index.rhtml +0 -0
  38. data/lib/rdoc/generator/template/sdoc/resources/css/main.css +11 -1
  39. data/lib/rdoc/generator/template/sdoc/resources/css/panel.css +0 -0
  40. data/lib/rdoc/generator/template/sdoc/resources/css/reset.css +0 -0
  41. data/lib/rdoc/generator/template/sdoc/resources/i/arrows.png +0 -0
  42. data/lib/rdoc/generator/template/sdoc/resources/i/results_bg.png +0 -0
  43. data/lib/rdoc/generator/template/sdoc/resources/i/tree_bg.png +0 -0
  44. data/lib/rdoc/generator/template/sdoc/resources/js/highlight.pack.js +0 -0
  45. data/lib/rdoc/generator/template/sdoc/resources/js/jquery-1.3.2.min.js +0 -0
  46. data/lib/rdoc/generator/template/sdoc/resources/js/main.js +7 -1
  47. data/lib/rdoc/generator/template/sdoc/resources/js/searchdoc.js +21 -2
  48. data/lib/rdoc/generator/template/sdoc/resources/panel/index.html +0 -0
  49. data/lib/sdoc.rb +0 -2
  50. data/lib/sdoc/generator.rb +19 -80
  51. data/lib/sdoc/github.rb +13 -14
  52. data/lib/sdoc/helpers.rb +22 -0
  53. data/lib/sdoc/templatable.rb +5 -1
  54. data/lib/sdoc/version.rb +1 -1
  55. data/sdoc.gemspec +2 -1
  56. data/spec/helpers_spec.rb +32 -0
  57. data/spec/rdoc_generator_spec.rb +8 -0
  58. metadata +27 -13
  59. data/lib/rdoc/generator/template/sdoc/resources/js/jquery-effect.js +0 -593
@@ -0,0 +1,6 @@
1
+ /*
2
+ Turbolinks 5.1.1
3
+ Copyright © 2018 Basecamp, LLC
4
+ */
5
+ (function(){var t=this;(function(){(function(){this.Turbolinks={supported:function(){return null!=window.history.pushState&&null!=window.requestAnimationFrame&&null!=window.addEventListener}(),visit:function(t,r){return e.controller.visit(t,r)},clearCache:function(){return e.controller.clearCache()},setProgressBarDelay:function(t){return e.controller.setProgressBarDelay(t)}}}).call(this)}).call(t);var e=t.Turbolinks;(function(){(function(){var t,r,n,o=[].slice;e.copyObject=function(t){var e,r,n;r={};for(e in t)n=t[e],r[e]=n;return r},e.closest=function(e,r){return t.call(e,r)},t=function(){var t,e;return t=document.documentElement,null!=(e=t.closest)?e:function(t){var e;for(e=this;e;){if(e.nodeType===Node.ELEMENT_NODE&&r.call(e,t))return e;e=e.parentNode}}}(),e.defer=function(t){return setTimeout(t,1)},e.throttle=function(t){var e;return e=null,function(){var r;return r=1<=arguments.length?o.call(arguments,0):[],null!=e?e:e=requestAnimationFrame(function(n){return function(){return e=null,t.apply(n,r)}}(this))}},e.dispatch=function(t,e){var r,o,i,s,a,u;return a=null!=e?e:{},u=a.target,r=a.cancelable,o=a.data,i=document.createEvent("Events"),i.initEvent(t,!0,r===!0),i.data=null!=o?o:{},i.cancelable&&!n&&(s=i.preventDefault,i.preventDefault=function(){return this.defaultPrevented||Object.defineProperty(this,"defaultPrevented",{get:function(){return!0}}),s.call(this)}),(null!=u?u:document).dispatchEvent(i),i},n=function(){var t;return t=document.createEvent("Events"),t.initEvent("test",!0,!0),t.preventDefault(),t.defaultPrevented}(),e.match=function(t,e){return r.call(t,e)},r=function(){var t,e,r,n;return t=document.documentElement,null!=(e=null!=(r=null!=(n=t.matchesSelector)?n:t.webkitMatchesSelector)?r:t.msMatchesSelector)?e:t.mozMatchesSelector}(),e.uuid=function(){var t,e,r;for(r="",t=e=1;36>=e;t=++e)r+=9===t||14===t||19===t||24===t?"-":15===t?"4":20===t?(Math.floor(4*Math.random())+8).toString(16):Math.floor(15*Math.random()).toString(16);return r}}).call(this),function(){e.Location=function(){function t(t){var e,r;null==t&&(t=""),r=document.createElement("a"),r.href=t.toString(),this.absoluteURL=r.href,e=r.hash.length,2>e?this.requestURL=this.absoluteURL:(this.requestURL=this.absoluteURL.slice(0,-e),this.anchor=r.hash.slice(1))}var e,r,n,o;return t.wrap=function(t){return t instanceof this?t:new this(t)},t.prototype.getOrigin=function(){return this.absoluteURL.split("/",3).join("/")},t.prototype.getPath=function(){var t,e;return null!=(t=null!=(e=this.requestURL.match(/\/\/[^\/]*(\/[^?;]*)/))?e[1]:void 0)?t:"/"},t.prototype.getPathComponents=function(){return this.getPath().split("/").slice(1)},t.prototype.getLastPathComponent=function(){return this.getPathComponents().slice(-1)[0]},t.prototype.getExtension=function(){var t,e;return null!=(t=null!=(e=this.getLastPathComponent().match(/\.[^.]*$/))?e[0]:void 0)?t:""},t.prototype.isHTML=function(){return this.getExtension().match(/^(?:|\.(?:htm|html|xhtml))$/)},t.prototype.isPrefixedBy=function(t){var e;return e=r(t),this.isEqualTo(t)||o(this.absoluteURL,e)},t.prototype.isEqualTo=function(t){return this.absoluteURL===(null!=t?t.absoluteURL:void 0)},t.prototype.toCacheKey=function(){return this.requestURL},t.prototype.toJSON=function(){return this.absoluteURL},t.prototype.toString=function(){return this.absoluteURL},t.prototype.valueOf=function(){return this.absoluteURL},r=function(t){return e(t.getOrigin()+t.getPath())},e=function(t){return n(t,"/")?t:t+"/"},o=function(t,e){return t.slice(0,e.length)===e},n=function(t,e){return t.slice(-e.length)===e},t}()}.call(this),function(){var t=function(t,e){return function(){return t.apply(e,arguments)}};e.HttpRequest=function(){function r(r,n,o){this.delegate=r,this.requestCanceled=t(this.requestCanceled,this),this.requestTimedOut=t(this.requestTimedOut,this),this.requestFailed=t(this.requestFailed,this),this.requestLoaded=t(this.requestLoaded,this),this.requestProgressed=t(this.requestProgressed,this),this.url=e.Location.wrap(n).requestURL,this.referrer=e.Location.wrap(o).absoluteURL,this.createXHR()}return r.NETWORK_FAILURE=0,r.TIMEOUT_FAILURE=-1,r.timeout=60,r.prototype.send=function(){var t;return this.xhr&&!this.sent?(this.notifyApplicationBeforeRequestStart(),this.setProgress(0),this.xhr.send(),this.sent=!0,"function"==typeof(t=this.delegate).requestStarted?t.requestStarted():void 0):void 0},r.prototype.cancel=function(){return this.xhr&&this.sent?this.xhr.abort():void 0},r.prototype.requestProgressed=function(t){return t.lengthComputable?this.setProgress(t.loaded/t.total):void 0},r.prototype.requestLoaded=function(){return this.endRequest(function(t){return function(){var e;return 200<=(e=t.xhr.status)&&300>e?t.delegate.requestCompletedWithResponse(t.xhr.responseText,t.xhr.getResponseHeader("Turbolinks-Location")):(t.failed=!0,t.delegate.requestFailedWithStatusCode(t.xhr.status,t.xhr.responseText))}}(this))},r.prototype.requestFailed=function(){return this.endRequest(function(t){return function(){return t.failed=!0,t.delegate.requestFailedWithStatusCode(t.constructor.NETWORK_FAILURE)}}(this))},r.prototype.requestTimedOut=function(){return this.endRequest(function(t){return function(){return t.failed=!0,t.delegate.requestFailedWithStatusCode(t.constructor.TIMEOUT_FAILURE)}}(this))},r.prototype.requestCanceled=function(){return this.endRequest()},r.prototype.notifyApplicationBeforeRequestStart=function(){return e.dispatch("turbolinks:request-start",{data:{url:this.url,xhr:this.xhr}})},r.prototype.notifyApplicationAfterRequestEnd=function(){return e.dispatch("turbolinks:request-end",{data:{url:this.url,xhr:this.xhr}})},r.prototype.createXHR=function(){return this.xhr=new XMLHttpRequest,this.xhr.open("GET",this.url,!0),this.xhr.timeout=1e3*this.constructor.timeout,this.xhr.setRequestHeader("Accept","text/html, application/xhtml+xml"),this.xhr.setRequestHeader("Turbolinks-Referrer",this.referrer),this.xhr.onprogress=this.requestProgressed,this.xhr.onload=this.requestLoaded,this.xhr.onerror=this.requestFailed,this.xhr.ontimeout=this.requestTimedOut,this.xhr.onabort=this.requestCanceled},r.prototype.endRequest=function(t){return this.xhr?(this.notifyApplicationAfterRequestEnd(),null!=t&&t.call(this),this.destroy()):void 0},r.prototype.setProgress=function(t){var e;return this.progress=t,"function"==typeof(e=this.delegate).requestProgressed?e.requestProgressed(this.progress):void 0},r.prototype.destroy=function(){var t;return this.setProgress(1),"function"==typeof(t=this.delegate).requestFinished&&t.requestFinished(),this.delegate=null,this.xhr=null},r}()}.call(this),function(){var t=function(t,e){return function(){return t.apply(e,arguments)}};e.ProgressBar=function(){function e(){this.trickle=t(this.trickle,this),this.stylesheetElement=this.createStylesheetElement(),this.progressElement=this.createProgressElement()}var r;return r=300,e.defaultCSS=".turbolinks-progress-bar {\n position: fixed;\n display: block;\n top: 0;\n left: 0;\n height: 3px;\n background: #0076ff;\n z-index: 9999;\n transition: width "+r+"ms ease-out, opacity "+r/2+"ms "+r/2+"ms ease-in;\n transform: translate3d(0, 0, 0);\n}",e.prototype.show=function(){return this.visible?void 0:(this.visible=!0,this.installStylesheetElement(),this.installProgressElement(),this.startTrickling())},e.prototype.hide=function(){return this.visible&&!this.hiding?(this.hiding=!0,this.fadeProgressElement(function(t){return function(){return t.uninstallProgressElement(),t.stopTrickling(),t.visible=!1,t.hiding=!1}}(this))):void 0},e.prototype.setValue=function(t){return this.value=t,this.refresh()},e.prototype.installStylesheetElement=function(){return document.head.insertBefore(this.stylesheetElement,document.head.firstChild)},e.prototype.installProgressElement=function(){return this.progressElement.style.width=0,this.progressElement.style.opacity=1,document.documentElement.insertBefore(this.progressElement,document.body),this.refresh()},e.prototype.fadeProgressElement=function(t){return this.progressElement.style.opacity=0,setTimeout(t,1.5*r)},e.prototype.uninstallProgressElement=function(){return this.progressElement.parentNode?document.documentElement.removeChild(this.progressElement):void 0},e.prototype.startTrickling=function(){return null!=this.trickleInterval?this.trickleInterval:this.trickleInterval=setInterval(this.trickle,r)},e.prototype.stopTrickling=function(){return clearInterval(this.trickleInterval),this.trickleInterval=null},e.prototype.trickle=function(){return this.setValue(this.value+Math.random()/100)},e.prototype.refresh=function(){return requestAnimationFrame(function(t){return function(){return t.progressElement.style.width=10+90*t.value+"%"}}(this))},e.prototype.createStylesheetElement=function(){var t;return t=document.createElement("style"),t.type="text/css",t.textContent=this.constructor.defaultCSS,t},e.prototype.createProgressElement=function(){var t;return t=document.createElement("div"),t.className="turbolinks-progress-bar",t},e}()}.call(this),function(){var t=function(t,e){return function(){return t.apply(e,arguments)}};e.BrowserAdapter=function(){function r(r){this.controller=r,this.showProgressBar=t(this.showProgressBar,this),this.progressBar=new e.ProgressBar}var n,o,i;return i=e.HttpRequest,n=i.NETWORK_FAILURE,o=i.TIMEOUT_FAILURE,r.prototype.visitProposedToLocationWithAction=function(t,e){return this.controller.startVisitToLocationWithAction(t,e)},r.prototype.visitStarted=function(t){return t.issueRequest(),t.changeHistory(),t.loadCachedSnapshot()},r.prototype.visitRequestStarted=function(t){return this.progressBar.setValue(0),t.hasCachedSnapshot()||"restore"!==t.action?this.showProgressBarAfterDelay():this.showProgressBar()},r.prototype.visitRequestProgressed=function(t){return this.progressBar.setValue(t.progress)},r.prototype.visitRequestCompleted=function(t){return t.loadResponse()},r.prototype.visitRequestFailedWithStatusCode=function(t,e){switch(e){case n:case o:return this.reload();default:return t.loadResponse()}},r.prototype.visitRequestFinished=function(t){return this.hideProgressBar()},r.prototype.visitCompleted=function(t){return t.followRedirect()},r.prototype.pageInvalidated=function(){return this.reload()},r.prototype.showProgressBarAfterDelay=function(){return this.progressBarTimeout=setTimeout(this.showProgressBar,this.controller.progressBarDelay)},r.prototype.showProgressBar=function(){return this.progressBar.show()},r.prototype.hideProgressBar=function(){return this.progressBar.hide(),clearTimeout(this.progressBarTimeout)},r.prototype.reload=function(){return window.location.reload()},r}()}.call(this),function(){var t=function(t,e){return function(){return t.apply(e,arguments)}};e.History=function(){function r(e){this.delegate=e,this.onPageLoad=t(this.onPageLoad,this),this.onPopState=t(this.onPopState,this)}return r.prototype.start=function(){return this.started?void 0:(addEventListener("popstate",this.onPopState,!1),addEventListener("load",this.onPageLoad,!1),this.started=!0)},r.prototype.stop=function(){return this.started?(removeEventListener("popstate",this.onPopState,!1),removeEventListener("load",this.onPageLoad,!1),this.started=!1):void 0},r.prototype.push=function(t,r){return t=e.Location.wrap(t),this.update("push",t,r)},r.prototype.replace=function(t,r){return t=e.Location.wrap(t),this.update("replace",t,r)},r.prototype.onPopState=function(t){var r,n,o,i;return this.shouldHandlePopState()&&(i=null!=(n=t.state)?n.turbolinks:void 0)?(r=e.Location.wrap(window.location),o=i.restorationIdentifier,this.delegate.historyPoppedToLocationWithRestorationIdentifier(r,o)):void 0},r.prototype.onPageLoad=function(t){return e.defer(function(t){return function(){return t.pageLoaded=!0}}(this))},r.prototype.shouldHandlePopState=function(){return this.pageIsLoaded()},r.prototype.pageIsLoaded=function(){return this.pageLoaded||"complete"===document.readyState},r.prototype.update=function(t,e,r){var n;return n={turbolinks:{restorationIdentifier:r}},history[t+"State"](n,null,e)},r}()}.call(this),function(){e.Snapshot=function(){function t(t){var e,r;r=t.head,e=t.body,this.head=null!=r?r:document.createElement("head"),this.body=null!=e?e:document.createElement("body")}return t.wrap=function(t){return t instanceof this?t:this.fromHTML(t)},t.fromHTML=function(t){var e;return e=document.createElement("html"),e.innerHTML=t,this.fromElement(e)},t.fromElement=function(t){return new this({head:t.querySelector("head"),body:t.querySelector("body")})},t.prototype.clone=function(){return new t({head:this.head.cloneNode(!0),body:this.body.cloneNode(!0)})},t.prototype.getRootLocation=function(){var t,r;return r=null!=(t=this.getSetting("root"))?t:"/",new e.Location(r)},t.prototype.getCacheControlValue=function(){return this.getSetting("cache-control")},t.prototype.getElementForAnchor=function(t){try{return this.body.querySelector("[id='"+t+"'], a[name='"+t+"']")}catch(e){}},t.prototype.hasAnchor=function(t){return null!=this.getElementForAnchor(t)},t.prototype.isPreviewable=function(){return"no-preview"!==this.getCacheControlValue()},t.prototype.isCacheable=function(){return"no-cache"!==this.getCacheControlValue()},t.prototype.isVisitable=function(){return"reload"!==this.getSetting("visit-control")},t.prototype.getSetting=function(t){var e,r;return r=this.head.querySelectorAll("meta[name='turbolinks-"+t+"']"),e=r[r.length-1],null!=e?e.getAttribute("content"):void 0},t}()}.call(this),function(){var t=[].slice;e.Renderer=function(){function e(){}var r;return e.render=function(){var e,r,n,o;return n=arguments[0],r=arguments[1],e=3<=arguments.length?t.call(arguments,2):[],o=function(t,e,r){r.prototype=t.prototype;var n=new r,o=t.apply(n,e);return Object(o)===o?o:n}(this,e,function(){}),o.delegate=n,o.render(r),o},e.prototype.renderView=function(t){return this.delegate.viewWillRender(this.newBody),t(),this.delegate.viewRendered(this.newBody)},e.prototype.invalidateView=function(){return this.delegate.viewInvalidated()},e.prototype.createScriptElement=function(t){var e;return"false"===t.getAttribute("data-turbolinks-eval")?t:(e=document.createElement("script"),e.textContent=t.textContent,e.async=!1,r(e,t),e)},r=function(t,e){var r,n,o,i,s,a,u;for(i=e.attributes,a=[],r=0,n=i.length;n>r;r++)s=i[r],o=s.name,u=s.value,a.push(t.setAttribute(o,u));return a},e}()}.call(this),function(){e.HeadDetails=function(){function t(t){var e,r,i,s,a,u,l;for(this.element=t,this.elements={},l=this.element.childNodes,s=0,u=l.length;u>s;s++)i=l[s],i.nodeType===Node.ELEMENT_NODE&&(a=i.outerHTML,r=null!=(e=this.elements)[a]?e[a]:e[a]={type:o(i),tracked:n(i),elements:[]},r.elements.push(i))}var e,r,n,o;return t.prototype.hasElementWithKey=function(t){return t in this.elements},t.prototype.getTrackedElementSignature=function(){var t,e;return function(){var r,n;r=this.elements,n=[];for(t in r)e=r[t].tracked,e&&n.push(t);return n}.call(this).join("")},t.prototype.getScriptElementsNotInDetails=function(t){return this.getElementsMatchingTypeNotInDetails("script",t)},t.prototype.getStylesheetElementsNotInDetails=function(t){return this.getElementsMatchingTypeNotInDetails("stylesheet",t)},t.prototype.getElementsMatchingTypeNotInDetails=function(t,e){var r,n,o,i,s,a;o=this.elements,s=[];for(n in o)i=o[n],a=i.type,r=i.elements,a!==t||e.hasElementWithKey(n)||s.push(r[0]);return s},t.prototype.getProvisionalElements=function(){var t,e,r,n,o,i,s;r=[],n=this.elements;for(e in n)o=n[e],s=o.type,i=o.tracked,t=o.elements,null!=s||i?t.length>1&&r.push.apply(r,t.slice(1)):r.push.apply(r,t);return r},o=function(t){return e(t)?"script":r(t)?"stylesheet":void 0},n=function(t){return"reload"===t.getAttribute("data-turbolinks-track")},e=function(t){var e;return e=t.tagName.toLowerCase(),"script"===e},r=function(t){var e;return e=t.tagName.toLowerCase(),"style"===e||"link"===e&&"stylesheet"===t.getAttribute("rel")},t}()}.call(this),function(){var t=function(t,e){function n(){this.constructor=t}for(var o in e)r.call(e,o)&&(t[o]=e[o]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},r={}.hasOwnProperty;e.SnapshotRenderer=function(r){function n(t,r,n){this.currentSnapshot=t,this.newSnapshot=r,this.isPreview=n,this.currentHeadDetails=new e.HeadDetails(this.currentSnapshot.head),this.newHeadDetails=new e.HeadDetails(this.newSnapshot.head),this.newBody=this.newSnapshot.body}return t(n,r),n.prototype.render=function(t){return this.shouldRender()?(this.mergeHead(),this.renderView(function(e){return function(){return e.replaceBody(),e.isPreview||e.focusFirstAutofocusableElement(),t()}}(this))):this.invalidateView()},n.prototype.mergeHead=function(){return this.copyNewHeadStylesheetElements(),this.copyNewHeadScriptElements(),this.removeCurrentHeadProvisionalElements(),this.copyNewHeadProvisionalElements()},n.prototype.replaceBody=function(){return this.activateBodyScriptElements(),this.importBodyPermanentElements(),this.assignNewBody()},n.prototype.shouldRender=function(){return this.newSnapshot.isVisitable()&&this.trackedElementsAreIdentical()},n.prototype.trackedElementsAreIdentical=function(){return this.currentHeadDetails.getTrackedElementSignature()===this.newHeadDetails.getTrackedElementSignature()},n.prototype.copyNewHeadStylesheetElements=function(){var t,e,r,n,o;for(n=this.getNewHeadStylesheetElements(),o=[],e=0,r=n.length;r>e;e++)t=n[e],o.push(document.head.appendChild(t));return o},n.prototype.copyNewHeadScriptElements=function(){var t,e,r,n,o;for(n=this.getNewHeadScriptElements(),o=[],e=0,r=n.length;r>e;e++)t=n[e],o.push(document.head.appendChild(this.createScriptElement(t)));return o},n.prototype.removeCurrentHeadProvisionalElements=function(){var t,e,r,n,o;for(n=this.getCurrentHeadProvisionalElements(),o=[],e=0,r=n.length;r>e;e++)t=n[e],o.push(document.head.removeChild(t));return o},n.prototype.copyNewHeadProvisionalElements=function(){var t,e,r,n,o;for(n=this.getNewHeadProvisionalElements(),o=[],e=0,r=n.length;r>e;e++)t=n[e],o.push(document.head.appendChild(t));return o},n.prototype.importBodyPermanentElements=function(){var t,e,r,n,o,i;for(n=this.getNewBodyPermanentElements(),i=[],e=0,r=n.length;r>e;e++)o=n[e],(t=this.findCurrentBodyPermanentElement(o))?i.push(o.parentNode.replaceChild(t,o)):i.push(void 0);return i},n.prototype.activateBodyScriptElements=function(){var t,e,r,n,o,i;for(n=this.getNewBodyScriptElements(),i=[],e=0,r=n.length;r>e;e++)o=n[e],t=this.createScriptElement(o),i.push(o.parentNode.replaceChild(t,o));return i},n.prototype.assignNewBody=function(){return document.body=this.newBody},n.prototype.focusFirstAutofocusableElement=function(){var t;return null!=(t=this.findFirstAutofocusableElement())?t.focus():void 0},n.prototype.getNewHeadStylesheetElements=function(){return this.newHeadDetails.getStylesheetElementsNotInDetails(this.currentHeadDetails)},n.prototype.getNewHeadScriptElements=function(){return this.newHeadDetails.getScriptElementsNotInDetails(this.currentHeadDetails)},n.prototype.getCurrentHeadProvisionalElements=function(){return this.currentHeadDetails.getProvisionalElements()},n.prototype.getNewHeadProvisionalElements=function(){return this.newHeadDetails.getProvisionalElements()},n.prototype.getNewBodyPermanentElements=function(){return this.newBody.querySelectorAll("[id][data-turbolinks-permanent]")},n.prototype.findCurrentBodyPermanentElement=function(t){return document.body.querySelector("#"+t.id+"[data-turbolinks-permanent]")},n.prototype.getNewBodyScriptElements=function(){return this.newBody.querySelectorAll("script")},n.prototype.findFirstAutofocusableElement=function(){return document.body.querySelector("[autofocus]")},n}(e.Renderer)}.call(this),function(){var t=function(t,e){function n(){this.constructor=t}for(var o in e)r.call(e,o)&&(t[o]=e[o]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},r={}.hasOwnProperty;e.ErrorRenderer=function(e){function r(t){this.html=t}return t(r,e),r.prototype.render=function(t){return this.renderView(function(e){return function(){return e.replaceDocumentHTML(),e.activateBodyScriptElements(),t()}}(this))},r.prototype.replaceDocumentHTML=function(){return document.documentElement.innerHTML=this.html},r.prototype.activateBodyScriptElements=function(){var t,e,r,n,o,i;for(n=this.getScriptElements(),i=[],e=0,r=n.length;r>e;e++)o=n[e],t=this.createScriptElement(o),i.push(o.parentNode.replaceChild(t,o));return i},r.prototype.getScriptElements=function(){return document.documentElement.querySelectorAll("script")},r}(e.Renderer)}.call(this),function(){e.View=function(){function t(t){this.delegate=t,this.element=document.documentElement}return t.prototype.getRootLocation=function(){return this.getSnapshot().getRootLocation()},t.prototype.getElementForAnchor=function(t){return this.getSnapshot().getElementForAnchor(t)},t.prototype.getSnapshot=function(){return e.Snapshot.fromElement(this.element)},t.prototype.render=function(t,e){var r,n,o;return o=t.snapshot,r=t.error,n=t.isPreview,this.markAsPreview(n),null!=o?this.renderSnapshot(o,n,e):this.renderError(r,e)},t.prototype.markAsPreview=function(t){return t?this.element.setAttribute("data-turbolinks-preview",""):this.element.removeAttribute("data-turbolinks-preview")},t.prototype.renderSnapshot=function(t,r,n){return e.SnapshotRenderer.render(this.delegate,n,this.getSnapshot(),e.Snapshot.wrap(t),r)},t.prototype.renderError=function(t,r){return e.ErrorRenderer.render(this.delegate,r,t)},t}()}.call(this),function(){var t=function(t,e){return function(){return t.apply(e,arguments)}};e.ScrollManager=function(){function r(r){this.delegate=r,this.onScroll=t(this.onScroll,this),this.onScroll=e.throttle(this.onScroll)}return r.prototype.start=function(){return this.started?void 0:(addEventListener("scroll",this.onScroll,!1),this.onScroll(),this.started=!0)},r.prototype.stop=function(){return this.started?(removeEventListener("scroll",this.onScroll,!1),this.started=!1):void 0},r.prototype.scrollToElement=function(t){return t.scrollIntoView()},r.prototype.scrollToPosition=function(t){var e,r;return e=t.x,r=t.y,window.scrollTo(e,r)},r.prototype.onScroll=function(t){return this.updatePosition({x:window.pageXOffset,y:window.pageYOffset})},r.prototype.updatePosition=function(t){var e;return this.position=t,null!=(e=this.delegate)?e.scrollPositionChanged(this.position):void 0},r}()}.call(this),function(){e.SnapshotCache=function(){function t(t){this.size=t,this.keys=[],this.snapshots={}}var r;return t.prototype.has=function(t){var e;return e=r(t),e in this.snapshots},t.prototype.get=function(t){var e;if(this.has(t))return e=this.read(t),this.touch(t),e},t.prototype.put=function(t,e){return this.write(t,e),this.touch(t),e},t.prototype.read=function(t){var e;return e=r(t),this.snapshots[e]},t.prototype.write=function(t,e){var n;return n=r(t),this.snapshots[n]=e},t.prototype.touch=function(t){var e,n;return n=r(t),e=this.keys.indexOf(n),e>-1&&this.keys.splice(e,1),this.keys.unshift(n),this.trim()},t.prototype.trim=function(){var t,e,r,n,o;for(n=this.keys.splice(this.size),o=[],t=0,r=n.length;r>t;t++)e=n[t],o.push(delete this.snapshots[e]);return o},r=function(t){return e.Location.wrap(t).toCacheKey()},t}()}.call(this),function(){var t=function(t,e){return function(){return t.apply(e,arguments)}};e.Visit=function(){function r(r,n,o){this.controller=r,this.action=o,this.performScroll=t(this.performScroll,this),this.identifier=e.uuid(),this.location=e.Location.wrap(n),this.adapter=this.controller.adapter,this.state="initialized",this.timingMetrics={}}var n;return r.prototype.start=function(){return"initialized"===this.state?(this.recordTimingMetric("visitStart"),this.state="started",this.adapter.visitStarted(this)):void 0},r.prototype.cancel=function(){var t;return"started"===this.state?(null!=(t=this.request)&&t.cancel(),this.cancelRender(),this.state="canceled"):void 0},r.prototype.complete=function(){var t;return"started"===this.state?(this.recordTimingMetric("visitEnd"),this.state="completed","function"==typeof(t=this.adapter).visitCompleted&&t.visitCompleted(this),this.controller.visitCompleted(this)):void 0},r.prototype.fail=function(){var t;return"started"===this.state?(this.state="failed","function"==typeof(t=this.adapter).visitFailed?t.visitFailed(this):void 0):void 0},r.prototype.changeHistory=function(){var t,e;return this.historyChanged?void 0:(t=this.location.isEqualTo(this.referrer)?"replace":this.action,e=n(t),this.controller[e](this.location,this.restorationIdentifier),this.historyChanged=!0)},r.prototype.issueRequest=function(){return this.shouldIssueRequest()&&null==this.request?(this.progress=0,this.request=new e.HttpRequest(this,this.location,this.referrer),this.request.send()):void 0},r.prototype.getCachedSnapshot=function(){var t;return!(t=this.controller.getCachedSnapshotForLocation(this.location))||null!=this.location.anchor&&!t.hasAnchor(this.location.anchor)||"restore"!==this.action&&!t.isPreviewable()?void 0:t},r.prototype.hasCachedSnapshot=function(){return null!=this.getCachedSnapshot()},r.prototype.loadCachedSnapshot=function(){var t,e;return(e=this.getCachedSnapshot())?(t=this.shouldIssueRequest(),this.render(function(){var r;return this.cacheSnapshot(),this.controller.render({snapshot:e,isPreview:t},this.performScroll),"function"==typeof(r=this.adapter).visitRendered&&r.visitRendered(this),t?void 0:this.complete()})):void 0},r.prototype.loadResponse=function(){return null!=this.response?this.render(function(){var t,e;return this.cacheSnapshot(),this.request.failed?(this.controller.render({error:this.response},this.performScroll),"function"==typeof(t=this.adapter).visitRendered&&t.visitRendered(this),this.fail()):(this.controller.render({snapshot:this.response},this.performScroll),"function"==typeof(e=this.adapter).visitRendered&&e.visitRendered(this),this.complete())}):void 0},r.prototype.followRedirect=function(){return this.redirectedToLocation&&!this.followedRedirect?(this.location=this.redirectedToLocation,this.controller.replaceHistoryWithLocationAndRestorationIdentifier(this.redirectedToLocation,this.restorationIdentifier),this.followedRedirect=!0):void 0},r.prototype.requestStarted=function(){var t;return this.recordTimingMetric("requestStart"),"function"==typeof(t=this.adapter).visitRequestStarted?t.visitRequestStarted(this):void 0},r.prototype.requestProgressed=function(t){var e;return this.progress=t,"function"==typeof(e=this.adapter).visitRequestProgressed?e.visitRequestProgressed(this):void 0},r.prototype.requestCompletedWithResponse=function(t,r){return this.response=t,null!=r&&(this.redirectedToLocation=e.Location.wrap(r)),this.adapter.visitRequestCompleted(this)},r.prototype.requestFailedWithStatusCode=function(t,e){return this.response=e,this.adapter.visitRequestFailedWithStatusCode(this,t)},r.prototype.requestFinished=function(){var t;return this.recordTimingMetric("requestEnd"),"function"==typeof(t=this.adapter).visitRequestFinished?t.visitRequestFinished(this):void 0},r.prototype.performScroll=function(){return this.scrolled?void 0:("restore"===this.action?this.scrollToRestoredPosition()||this.scrollToTop():this.scrollToAnchor()||this.scrollToTop(),this.scrolled=!0)},r.prototype.scrollToRestoredPosition=function(){var t,e;return t=null!=(e=this.restorationData)?e.scrollPosition:void 0,null!=t?(this.controller.scrollToPosition(t),!0):void 0},r.prototype.scrollToAnchor=function(){return null!=this.location.anchor?(this.controller.scrollToAnchor(this.location.anchor),!0):void 0},r.prototype.scrollToTop=function(){return this.controller.scrollToPosition({x:0,y:0})},r.prototype.recordTimingMetric=function(t){var e;return null!=(e=this.timingMetrics)[t]?e[t]:e[t]=(new Date).getTime()},r.prototype.getTimingMetrics=function(){return e.copyObject(this.timingMetrics)},n=function(t){switch(t){case"replace":return"replaceHistoryWithLocationAndRestorationIdentifier";case"advance":case"restore":return"pushHistoryWithLocationAndRestorationIdentifier"}},r.prototype.shouldIssueRequest=function(){return"restore"===this.action?!this.hasCachedSnapshot():!0},r.prototype.cacheSnapshot=function(){return this.snapshotCached?void 0:(this.controller.cacheSnapshot(),this.snapshotCached=!0)},r.prototype.render=function(t){return this.cancelRender(),this.frame=requestAnimationFrame(function(e){return function(){return e.frame=null,t.call(e)}}(this))},r.prototype.cancelRender=function(){return this.frame?cancelAnimationFrame(this.frame):void 0},r}()}.call(this),function(){var t=function(t,e){return function(){return t.apply(e,arguments)}};e.Controller=function(){function r(){this.clickBubbled=t(this.clickBubbled,this),this.clickCaptured=t(this.clickCaptured,this),this.pageLoaded=t(this.pageLoaded,this),this.history=new e.History(this),this.view=new e.View(this),this.scrollManager=new e.ScrollManager(this),this.restorationData={},this.clearCache(),this.setProgressBarDelay(500)}return r.prototype.start=function(){return e.supported&&!this.started?(addEventListener("click",this.clickCaptured,!0),addEventListener("DOMContentLoaded",this.pageLoaded,!1),this.scrollManager.start(),this.startHistory(),this.started=!0,this.enabled=!0):void 0},r.prototype.disable=function(){return this.enabled=!1},r.prototype.stop=function(){return this.started?(removeEventListener("click",this.clickCaptured,!0),removeEventListener("DOMContentLoaded",this.pageLoaded,!1),this.scrollManager.stop(),this.stopHistory(),this.started=!1):void 0},r.prototype.clearCache=function(){return this.cache=new e.SnapshotCache(10)},r.prototype.visit=function(t,r){var n,o;return null==r&&(r={}),t=e.Location.wrap(t),this.applicationAllowsVisitingLocation(t)?this.locationIsVisitable(t)?(n=null!=(o=r.action)?o:"advance",this.adapter.visitProposedToLocationWithAction(t,n)):window.location=t:void 0},r.prototype.startVisitToLocationWithAction=function(t,r,n){var o;return e.supported?(o=this.getRestorationDataForIdentifier(n),this.startVisit(t,r,{restorationData:o})):window.location=t},r.prototype.setProgressBarDelay=function(t){return this.progressBarDelay=t},r.prototype.startHistory=function(){return this.location=e.Location.wrap(window.location),this.restorationIdentifier=e.uuid(),this.history.start(),this.history.replace(this.location,this.restorationIdentifier)},r.prototype.stopHistory=function(){return this.history.stop()},r.prototype.pushHistoryWithLocationAndRestorationIdentifier=function(t,r){return this.restorationIdentifier=r,this.location=e.Location.wrap(t),this.history.push(this.location,this.restorationIdentifier)},r.prototype.replaceHistoryWithLocationAndRestorationIdentifier=function(t,r){return this.restorationIdentifier=r,this.location=e.Location.wrap(t),this.history.replace(this.location,this.restorationIdentifier)},r.prototype.historyPoppedToLocationWithRestorationIdentifier=function(t,r){var n;return this.restorationIdentifier=r,this.enabled?(n=this.getRestorationDataForIdentifier(this.restorationIdentifier),this.startVisit(t,"restore",{restorationIdentifier:this.restorationIdentifier,restorationData:n,historyChanged:!0}),this.location=e.Location.wrap(t)):this.adapter.pageInvalidated()},r.prototype.getCachedSnapshotForLocation=function(t){var e;return e=this.cache.get(t),e?e.clone():void 0},r.prototype.shouldCacheSnapshot=function(){return this.view.getSnapshot().isCacheable()},r.prototype.cacheSnapshot=function(){var t;return this.shouldCacheSnapshot()?(this.notifyApplicationBeforeCachingSnapshot(),t=this.view.getSnapshot(),this.cache.put(this.lastRenderedLocation,t.clone())):void 0},r.prototype.scrollToAnchor=function(t){var e;return(e=this.view.getElementForAnchor(t))?this.scrollToElement(e):this.scrollToPosition({x:0,y:0})},r.prototype.scrollToElement=function(t){return this.scrollManager.scrollToElement(t)},r.prototype.scrollToPosition=function(t){return this.scrollManager.scrollToPosition(t)},r.prototype.scrollPositionChanged=function(t){var e;return e=this.getCurrentRestorationData(),e.scrollPosition=t},r.prototype.render=function(t,e){return this.view.render(t,e)},r.prototype.viewInvalidated=function(){return this.adapter.pageInvalidated()},r.prototype.viewWillRender=function(t){return this.notifyApplicationBeforeRender(t)},r.prototype.viewRendered=function(){return this.lastRenderedLocation=this.currentVisit.location,this.notifyApplicationAfterRender()},r.prototype.pageLoaded=function(){return this.lastRenderedLocation=this.location,this.notifyApplicationAfterPageLoad()},r.prototype.clickCaptured=function(){return removeEventListener("click",this.clickBubbled,!1),addEventListener("click",this.clickBubbled,!1)},r.prototype.clickBubbled=function(t){var e,r,n;return this.enabled&&this.clickEventIsSignificant(t)&&(r=this.getVisitableLinkForNode(t.target))&&(n=this.getVisitableLocationForLink(r))&&this.applicationAllowsFollowingLinkToLocation(r,n)?(t.preventDefault(),e=this.getActionForLink(r),
6
+ this.visit(n,{action:e})):void 0},r.prototype.applicationAllowsFollowingLinkToLocation=function(t,e){var r;return r=this.notifyApplicationAfterClickingLinkToLocation(t,e),!r.defaultPrevented},r.prototype.applicationAllowsVisitingLocation=function(t){var e;return e=this.notifyApplicationBeforeVisitingLocation(t),!e.defaultPrevented},r.prototype.notifyApplicationAfterClickingLinkToLocation=function(t,r){return e.dispatch("turbolinks:click",{target:t,data:{url:r.absoluteURL},cancelable:!0})},r.prototype.notifyApplicationBeforeVisitingLocation=function(t){return e.dispatch("turbolinks:before-visit",{data:{url:t.absoluteURL},cancelable:!0})},r.prototype.notifyApplicationAfterVisitingLocation=function(t){return e.dispatch("turbolinks:visit",{data:{url:t.absoluteURL}})},r.prototype.notifyApplicationBeforeCachingSnapshot=function(){return e.dispatch("turbolinks:before-cache")},r.prototype.notifyApplicationBeforeRender=function(t){return e.dispatch("turbolinks:before-render",{data:{newBody:t}})},r.prototype.notifyApplicationAfterRender=function(){return e.dispatch("turbolinks:render")},r.prototype.notifyApplicationAfterPageLoad=function(t){return null==t&&(t={}),e.dispatch("turbolinks:load",{data:{url:this.location.absoluteURL,timing:t}})},r.prototype.startVisit=function(t,e,r){var n;return null!=(n=this.currentVisit)&&n.cancel(),this.currentVisit=this.createVisit(t,e,r),this.currentVisit.start(),this.notifyApplicationAfterVisitingLocation(t)},r.prototype.createVisit=function(t,r,n){var o,i,s,a,u;return i=null!=n?n:{},a=i.restorationIdentifier,s=i.restorationData,o=i.historyChanged,u=new e.Visit(this,t,r),u.restorationIdentifier=null!=a?a:e.uuid(),u.restorationData=e.copyObject(s),u.historyChanged=o,u.referrer=this.location,u},r.prototype.visitCompleted=function(t){return this.notifyApplicationAfterPageLoad(t.getTimingMetrics())},r.prototype.clickEventIsSignificant=function(t){return!(t.defaultPrevented||t.target.isContentEditable||t.which>1||t.altKey||t.ctrlKey||t.metaKey||t.shiftKey)},r.prototype.getVisitableLinkForNode=function(t){return this.nodeIsVisitable(t)?e.closest(t,"a[href]:not([target]):not([download])"):void 0},r.prototype.getVisitableLocationForLink=function(t){var r;return r=new e.Location(t.getAttribute("href")),this.locationIsVisitable(r)?r:void 0},r.prototype.getActionForLink=function(t){var e;return null!=(e=t.getAttribute("data-turbolinks-action"))?e:"advance"},r.prototype.nodeIsVisitable=function(t){var r;return(r=e.closest(t,"[data-turbolinks]"))?"false"!==r.getAttribute("data-turbolinks"):!0},r.prototype.locationIsVisitable=function(t){return t.isPrefixedBy(this.view.getRootLocation())&&t.isHTML()},r.prototype.getCurrentRestorationData=function(){return this.getRestorationDataForIdentifier(this.restorationIdentifier)},r.prototype.getRestorationDataForIdentifier=function(t){var e;return null!=(e=this.restorationData)[t]?e[t]:e[t]={}},r}()}.call(this),function(){!function(){var t,e;if((t=e=document.currentScript)&&!e.hasAttribute("data-turbolinks-suppress-warning"))for(;t=t.parentNode;)if(t===document.body)return console.warn("You are loading Turbolinks from a <script> element inside the <body> element. This is probably not what you meant to do!\n\nLoad your application\u2019s JavaScript bundle inside the <head> element instead. <script> elements in <body> are evaluated with each page change.\n\nFor more information, see: https://github.com/turbolinks/turbolinks#working-with-script-elements\n\n\u2014\u2014\nSuppress this warning by adding a `data-turbolinks-suppress-warning` attribute to: %s",e.outerHTML)}()}.call(this),function(){var t,r,n;e.start=function(){return r()?(null==e.controller&&(e.controller=t()),e.controller.start()):void 0},r=function(){return null==window.Turbolinks&&(window.Turbolinks=e),n()},t=function(){var t;return t=new e.Controller,t.adapter=new e.BrowserAdapter(t),t},n=function(){return window.Turbolinks===e},n()&&e.start()}.call(this)}).call(this),"object"==typeof module&&module.exports?module.exports=e:"function"==typeof define&&define.amd&&define(e)}).call(this);
@@ -0,0 +1,8 @@
1
+ <html>
2
+ <head>File index</head>
3
+ <body>
4
+ <% @files.each do |file| %>
5
+ <a href="../<%= file.path %>"><%= file.relative_name %></a>
6
+ <% end %>
7
+ </body>
8
+ </html>
@@ -182,7 +182,7 @@
182
182
  <% end %>
183
183
 
184
184
  <% if method.token_stream %>
185
- <% markup = method.sdoc_markup_code %>
185
+ <% markup = method.markup_code %>
186
186
  <div class="sourcecode">
187
187
  <%
188
188
  # generate github link
@@ -209,8 +209,8 @@
209
209
  </div>
210
210
  <% end %>
211
211
  </div>
212
- <% end #methods.each %>
213
- <% end #visibilities.each %>
214
- <% end #context.methods_by_type %>
215
- <% end #context.each_section %>
212
+ <% end %><%# methods.each %>
213
+ <% end %><%# visibilities.each %>
214
+ <% end %><%# context.methods_by_type %>
215
+ <% end %><%# context.each_section %>
216
216
  </div>
@@ -2,6 +2,5 @@
2
2
  <link rel="stylesheet" href="<%= "#{rel_prefix}/css/main.css" %>" type="text/css" media="screen" />
3
3
  <link rel="stylesheet" href="<%= "#{rel_prefix}/css/github.css" %>" type="text/css" media="screen" />
4
4
  <script src="<%= "#{rel_prefix}/js/jquery-1.3.2.min.js" %>" type="text/javascript" charset="utf-8"></script>
5
- <script src="<%= "#{rel_prefix}/js/jquery-effect.js" %>" type="text/javascript" charset="utf-8"></script>
6
5
  <script src="<%= "#{rel_prefix}/js/main.js" %>" type="text/javascript" charset="utf-8"></script>
7
6
  <script src="<%= "#{rel_prefix}/js/highlight.pack.js" %>" type="text/javascript" charset="utf-8"></script>
@@ -6,6 +6,19 @@
6
6
  <title><%= h klass.full_name %></title>
7
7
  <meta http-equiv="Content-Type" content="text/html; charset=<%= @options.charset %>" />
8
8
  <%= include_template '_head.rhtml', {:rel_prefix => rel_prefix} %>
9
+
10
+ <meta property="og:title" value="<%= klass.full_name %>">
11
+
12
+ <% unless (description = klass.description).empty? %>
13
+ <% human_desc = truncate(strip_tags(description.gsub("\n", " ").strip)) %>
14
+ <meta name="description" content="<%= human_desc %>">
15
+ <meta property="og:description" content="<%= human_desc %>">
16
+ <% end %>
17
+
18
+ <meta name="keywords" content="<%= klass.full_name %> class">
19
+ <% unless klass.method_list.empty? %>
20
+ <meta name="keywords" content="<%= klass.method_list.map(&:name).join(", ") %>">
21
+ <% end %>
9
22
  </head>
10
23
 
11
24
  <body>
@@ -128,7 +128,7 @@ li
128
128
  margin-bottom: 0;
129
129
  }
130
130
 
131
- pre
131
+ pre
132
132
  {
133
133
  margin-bottom: 1em;
134
134
  }
@@ -321,3 +321,13 @@ tt {
321
321
  .ruby-number {
322
322
  color: #40A070;
323
323
  }
324
+
325
+ @keyframes highlight {
326
+ from { background-color: yellow; }
327
+ to { background-color: white; }
328
+ }
329
+
330
+ .highlight {
331
+ animation-name: highlight;
332
+ animation-duration: 1s;
333
+ }
@@ -11,7 +11,13 @@ function toggleSource(id) {
11
11
  window.highlight = function(url) {
12
12
  var hash = url.match(/#([^#]+)$/);
13
13
  if (hash) {
14
- $('a[name=' + hash[1] + ']').parent().effect('highlight', {}, 'slow');
14
+ var parent = document.querySelector('a[name=' + hash[1] + ']').parentElement;
15
+
16
+ parent.classList.add('highlight');
17
+
18
+ setTimeout(function() {
19
+ parent.classList.remove('highlight');
20
+ }, 1000);
15
21
  }
16
22
  };
17
23
 
@@ -245,10 +245,10 @@ Searchdoc.Panel.prototype = $.extend({}, Searchdoc.Navigation, new function() {
245
245
  html += '</a>';
246
246
  html += '<p>';
247
247
  if (typeof badge != 'undefined') {
248
- html += '<span class="badge badge_' + (badge % 6 + 1) + '">' + escapeHTML(this.data.badges[badge] || 'unknown') + '</span>';
248
+ html += '<span class="badge badge_' + (badge % 6 + 1) + '">' + stripHTML(this.data.badges[badge] || 'unknown') + '</span>';
249
249
  }
250
250
  html += hlt(result.namespace) + '</p>';
251
- if (result.snippet) html += '<p class="snippet">' + escapeHTML(result.snippet.replace(/^<p>/, '')) + '</p>';
251
+ if (result.snippet) html += '<p class="snippet">' + stripHTML(result.snippet.replace(/^<p>/, '')) + '</p>';
252
252
  li.innerHTML = html;
253
253
  jQuery.data(li, 'path', result.path);
254
254
  return li;
@@ -264,6 +264,25 @@ Searchdoc.Panel.prototype = $.extend({}, Searchdoc.Navigation, new function() {
264
264
  });
265
265
  }
266
266
 
267
+ function stripHTML(html) {
268
+ var in_tag = false;
269
+ var output = "";
270
+
271
+ for (var i = 0; i < html.length; i++) {
272
+ if (html[i] == '<'){
273
+ in_tag = true;
274
+ } else if (html[i] == '>') {
275
+ in_tag = false;
276
+ i++;
277
+ }
278
+
279
+ if (!in_tag && i < html.length)
280
+ output += html[i];
281
+ }
282
+
283
+ return output;
284
+ }
285
+
267
286
  });
268
287
 
269
288
  // tree.js ------------------------------------------------
@@ -1,5 +1,3 @@
1
- $:.unshift File.dirname(__FILE__)
2
- require "rubygems"
3
1
  gem 'rdoc'
4
2
 
5
3
  module SDoc; end
@@ -1,4 +1,3 @@
1
- require 'rubygems'
2
1
  require 'erb'
3
2
  require 'pathname'
4
3
  require 'fileutils'
@@ -7,6 +6,7 @@ require 'json'
7
6
  require 'sdoc/github'
8
7
  require 'sdoc/templatable'
9
8
  require 'sdoc/helpers'
9
+ require 'sdoc/version'
10
10
  require 'rdoc'
11
11
 
12
12
  class RDoc::ClassModule
@@ -20,77 +20,6 @@ class RDoc::Options
20
20
  attr_accessor :search_index
21
21
  end
22
22
 
23
- class RDoc::AnyMethod
24
-
25
- TITLE_AFTER = %w(def class module)
26
-
27
- ##
28
- # Turns the method's token stream into HTML.
29
- #
30
- # Prepends line numbers if +add_line_numbers+ is true.
31
-
32
- def sdoc_markup_code
33
- return '' unless @token_stream
34
-
35
- src = ""
36
- starting_title = false
37
-
38
- @token_stream.each do |t|
39
- next unless t
40
-
41
- style = case t
42
- when RDoc::RubyToken::TkFLOAT then 'ruby-number'
43
- when RDoc::RubyToken::TkINTEGER then 'ruby-number'
44
- when RDoc::RubyToken::TkCONSTANT then 'ruby-constant'
45
- when RDoc::RubyToken::TkKW then 'ruby-keyword'
46
- when RDoc::RubyToken::TkIVAR then 'ruby-ivar'
47
- when RDoc::RubyToken::TkOp then 'ruby-operator'
48
- when RDoc::RubyToken::TkId then 'ruby-identifier'
49
- when RDoc::RubyToken::TkNode then 'ruby-node'
50
- when RDoc::RubyToken::TkCOMMENT then 'ruby-comment'
51
- when RDoc::RubyToken::TkREGEXP then 'ruby-regexp'
52
- when RDoc::RubyToken::TkSTRING then 'ruby-string'
53
- when RDoc::RubyToken::TkVal then 'ruby-value'
54
- end
55
-
56
- if RDoc::RubyToken::TkId === t && starting_title
57
- starting_title = false
58
- style = 'ruby-keyword ruby-title'
59
- end
60
-
61
- if RDoc::RubyToken::TkKW === t && TITLE_AFTER.include?(t.text)
62
- starting_title = true
63
- end
64
-
65
- text = CGI.escapeHTML t.text
66
-
67
- if style then
68
- src << "<span class=\"#{style}\">#{text}</span>"
69
- else
70
- src << text
71
- end
72
- end
73
-
74
- # dedent the source
75
- indent = src.length
76
- lines = src.lines.to_a
77
- lines.shift if src =~ /\A.*#\ *File/i # remove '# File' comment
78
- lines.each do |line|
79
- if line =~ /^ *(?=\S)/
80
- n = $&.length
81
- indent = n if n < indent
82
- break if n == 0
83
- end
84
- end
85
- src.gsub!(/^#{' ' * indent}/, '') if indent > 0
86
-
87
- add_line_numbers(src) if self.class.add_line_numbers
88
-
89
- src
90
- end
91
-
92
- end
93
-
94
23
  class RDoc::Generator::SDoc
95
24
  RDoc::RDoc.add_generator self
96
25
 
@@ -121,8 +50,6 @@ class RDoc::Generator::SDoc
121
50
  attr_reader :store
122
51
 
123
52
  def self.setup_options(options)
124
- @github = false
125
-
126
53
  opt = options.option_parser
127
54
  opt.separator nil
128
55
  opt.separator "SDoc generator options:"
@@ -133,6 +60,10 @@ class RDoc::Generator::SDoc
133
60
  end
134
61
  opt.separator nil
135
62
 
63
+ opt.on("--version", "-v", "Output current version") do
64
+ puts SDoc::VERSION
65
+ exit
66
+ end
136
67
  end
137
68
 
138
69
  def initialize(store, options)
@@ -187,6 +118,7 @@ class RDoc::Generator::SDoc
187
118
  debug_msg "Generating index file in #@outputdir"
188
119
  templatefile = @template_dir + 'index.rhtml'
189
120
  outfile = @outputdir + 'index.html'
121
+ rel_prefix = @outputdir.relative_path_from( outfile.dirname )
190
122
 
191
123
  self.render_template( templatefile, binding(), outfile ) unless @options.dry_run
192
124
  end
@@ -261,16 +193,23 @@ class RDoc::Generator::SDoc
261
193
 
262
194
  ### Determines index path based on @options.main_page (or lack thereof)
263
195
  def index_path
264
- # Break early to avoid a big if block when no main page is specified
265
- default = @files.first.path
266
- return default unless @options.main_page
267
-
268
196
  # Transform class name to file path
269
197
  if @options.main_page.include?("::")
270
198
  slashed = @options.main_page.sub(/^::/, "").gsub("::", "/")
271
199
  "%s/%s.html" % [ class_dir, slashed ]
272
- elsif file = @files.find { |f| f.full_name == @options.main_page }
273
- file.path
200
+ else
201
+ index.path
202
+ end
203
+ end
204
+
205
+ ### Determines index page based on @options.main_page (or lack thereof)
206
+ def index
207
+ # Break early to avoid a big if block when no main page is specified
208
+ default = @files.first
209
+ return default unless @options.main_page
210
+
211
+ if file = @files.find { |f| f.full_name == @options.main_page }
212
+ file
274
213
  else
275
214
  default
276
215
  end
@@ -1,16 +1,15 @@
1
1
  module SDoc::GitHub
2
2
  def github_url(path)
3
+ return false unless have_git?
4
+
3
5
  unless @github_url_cache.has_key? path
4
6
  @github_url_cache[path] = false
5
7
  file = @store.find_file_named(path)
6
8
  if file
7
9
  base_url = repository_url(path)
8
10
  if base_url
9
- sha1 = commit_sha1(path)
10
- if sha1
11
- relative_url = path_relative_to_repository(path)
12
- @github_url_cache[path] = "#{base_url}#{sha1}#{relative_url}"
13
- end
11
+ relative_url = path_relative_to_repository(path)
12
+ @github_url_cache[path] = "#{base_url}#{last_commit_sha1}#{relative_url}"
14
13
  end
15
14
  end
16
15
  end
@@ -24,23 +23,23 @@ module SDoc::GitHub
24
23
  @have_git
25
24
  end
26
25
 
27
- def commit_sha1(path)
28
- return false unless have_git?
29
- name = File.basename(path)
30
- s = Dir.chdir(File.join(base_dir, File.dirname(path))) do
31
- `git log -1 --pretty=format:"commit %H" #{name}`
26
+ def last_commit_sha1
27
+ return @sha1 if defined?(@sha1)
28
+
29
+ @sha1 = Dir.chdir(base_dir) do
30
+ `git rev-parse HEAD`.chomp
32
31
  end
33
- m = s.match(/commit\s+(\S+)/)
34
- m ? m[1] : false
35
32
  end
36
33
 
37
34
  def repository_url(path)
38
- return false unless have_git?
35
+ return @repository_url if defined?(@repository_url)
36
+
39
37
  s = Dir.chdir(File.join(base_dir, File.dirname(path))) do
40
38
  `git config --get remote.origin.url`
41
39
  end
40
+
42
41
  m = s.match(%r{github.com[/:](.*)\.git$})
43
- m ? "https://github.com/#{m[1]}/blob/" : false
42
+ @repository_url = m ? "https://github.com/#{m[1]}/blob/" : false
44
43
  end
45
44
 
46
45
  def path_relative_to_repository(path)
@@ -15,6 +15,28 @@ module SDoc::Helpers
15
15
  yield group unless group[:methods].size == 0
16
16
  end
17
17
 
18
+ # Strips out HTML tags from a given string.
19
+ #
20
+ # Example:
21
+ #
22
+ # strip_tags("<strong>Hello world</strong>") => "Hello world"
23
+ def strip_tags(text)
24
+ text.gsub(%r{</?[^>]+?>}, "")
25
+ end
26
+
27
+ # Truncates a given string. It tries to take whole sentences to have
28
+ # a meaningful description for SEO tags.
29
+ #
30
+ # The only available option is +:length+ which defaults to 200.
31
+ def truncate(text, options = {})
32
+ if text
33
+ length = options.fetch(:length, 200)
34
+ stop = text.rindex(".", length - 1) || length
35
+
36
+ "#{text[0, stop]}."
37
+ end
38
+ end
39
+
18
40
  protected
19
41
  def group_name name
20
42
  if match = name.match(/^([a-z])/i)
@@ -6,7 +6,11 @@ module SDoc::Templatable
6
6
  ### Both +templatefile+ and +outfile+ should be Pathname-like objects.
7
7
  def eval_template(templatefile, context)
8
8
  template_src = templatefile.read
9
- template = ERB.new( template_src, nil, '<>' )
9
+ template = if ERB.instance_method(:initialize).parameters.assoc(:key) # Ruby 2.6+
10
+ ERB.new( template_src, trim_mode: '<>' )
11
+ else
12
+ ERB.new( template_src, nil, '<>' )
13
+ end
10
14
  template.filename = templatefile.to_s
11
15
 
12
16
  begin
@@ -1,3 +1,3 @@
1
1
  module SDoc
2
- VERSION = '1.0.0.rc2'
2
+ VERSION = '2.0.1'
3
3
  end
@@ -22,7 +22,8 @@ Gem::Specification.new do |s|
22
22
  s.rdoc_options = ["--charset=UTF-8"]
23
23
  s.extra_rdoc_files = ["README.md"]
24
24
 
25
- s.add_runtime_dependency("rdoc", "~> 5.0")
25
+ s.add_runtime_dependency("rdoc", ">= 5.0")
26
+ s.add_runtime_dependency("rack")
26
27
 
27
28
  s.files = `git ls-files`.split("\n")
28
29
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
@@ -0,0 +1,32 @@
1
+ require "spec_helper"
2
+
3
+ describe SDoc::Helpers do
4
+ before :each do
5
+ @helpers = Class.new do
6
+ include SDoc::Helpers
7
+ end.new
8
+ end
9
+
10
+ describe "#strip_tags" do
11
+ it "should strip out HTML tags from the given string" do
12
+ strings = [
13
+ [ %(<strong>Hello world</strong>), "Hello world" ],
14
+ [ %(<a href="Streams.html">Streams</a> are great), "Streams are great" ],
15
+ [ %(<a href="https://github.com?x=1&y=2#123">zzak/sdoc</a> Standalone), "zzak/sdoc Standalone" ],
16
+ [ %(<h1 id="module-AR::Cb-label-Foo+Bar">AR Cb</h1>), "AR Cb" ],
17
+ [ %(<a href="../Base.html">Base</a>), "Base" ],
18
+ [ %(Some<br>\ntext), "Some\ntext" ]
19
+ ]
20
+
21
+ strings.each do |(html, stripped)|
22
+ @helpers.strip_tags(html).must_equal stripped
23
+ end
24
+ end
25
+ end
26
+
27
+ describe "#truncate" do
28
+ it "should truncate the given text around a given length" do
29
+ @helpers.truncate("Hello world", length: 5).must_equal "Hello."
30
+ end
31
+ end
32
+ end