├── .eslintignore ├── .eslintrc ├── .gitignore ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── LICENSE ├── README.md ├── example ├── .eslintrc ├── components │ ├── DummyContent.js │ └── ScrollRestorerExample.js ├── index.html ├── index.js └── webpack.config.js ├── index.js ├── package-lock.json ├── package.json ├── test ├── get_window.test.js └── index.test.js └── util └── get_window.js /.eslintignore: -------------------------------------------------------------------------------- 1 | .gitignore -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "eslint:recommended", 3 | "env": { 4 | "browser": true, 5 | "node": true, 6 | "jest": true 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | *.log 3 | .DS_Store 4 | coverage 5 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | ## 1.1.0 4 | 5 | - Update dependencies and webpack config. 6 | 7 | ## 1.0.0 8 | 9 | - Start this log. 10 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Code of Conduct 2 | 3 | As contributors and maintainers of this project, and in the interest of fostering an open and welcoming community, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities. 4 | 5 | We are committed to making participation in this project a harassment-free experience for everyone, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, religion, or nationality. 6 | 7 | Examples of unacceptable behavior by participants include: 8 | 9 | * The use of sexualized language or imagery 10 | * Personal attacks 11 | * Trolling or insulting/derogatory comments 12 | * Public or private harassment 13 | * Publishing other's private information, such as physical or electronic addresses, without explicit permission 14 | * Other unethical or unprofessional conduct 15 | 16 | Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct. By adopting this Code of Conduct, project maintainers commit themselves to fairly and consistently applying these principles to every aspect of managing this project. Project maintainers who do not follow or enforce the Code of Conduct may be permanently removed from the project team. 17 | 18 | This code of conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. 19 | 20 | Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by opening an issue or contacting one or more of the project maintainers. 21 | 22 | This Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 1.2.0, available at [http://contributor-covenant.org/version/1/2/0/](http://contributor-covenant.org/version/1/2/0/) 23 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Mapbox 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # @mapbox/scroll-restorer 2 | 3 | Preserve the scroll state of [`document.scrollingElement`](https://developer.mozilla.org/en-US/docs/Web/API/Document/scrollingElement) while navigating programmatically through history states — that is, client-side routing. 4 | 5 | ## Installation 6 | 7 | ``` 8 | npm install @mapbox/scroll-restorer 9 | ``` 10 | 11 | ## Usage 12 | 13 | 1. Invoke the [`start`] method when you would like to begin storing the browser's scroll position in history states, likely when your application mounts. 14 | 2. Invoke the [`stop`] method when you would like to stop the restoration of scroll position, likely when your application unmounts. 15 | 16 | Have a look at [an example using React Router](./example). 17 | 18 | ## API 19 | 20 | ### start 21 | 22 | `scrollRestorer.start([options])` 23 | 24 | Starts tracking the user's scroll position. 25 | 26 | #### options 27 | 28 | ##### autoRestore 29 | 30 | Type: `boolean`. 31 | Default: `true`. 32 | 33 | When `true`, `scroll-restorer` will attempt to restore the scroll position on each `popstate` event. Set this to `false` if you want to *manually* control the scroll position restoration (e.g. you may wish to call [`restoreScroll`] at a very specific point in your application's rendering lifecycle). 34 | 35 | ##### captureScrollDebounce 36 | 37 | Type: `number`. 38 | Default: `50`. 39 | 40 | The number of milliseconds by which the scroll-capturing function should be debounced. 41 | 42 | ### end 43 | 44 | `scrollRestorer.end()` 45 | 46 | End scroll-restorer's behavior. 47 | 48 | ### getSavedScroll 49 | 50 | `scrollRestorer.getSavedScroll([input])` 51 | 52 | Returns the scroll position retrieved from `window.history` or an optional `popstate` event. 53 | When the [`autoRestore`] option of [`start`] is `true`, this method will be invoked automatically, so you only want to use it manually if you've set [`autoRestore`] to `false`. 54 | 55 | #### input 56 | 57 | Type: `{ state: Object }`, either `window.history` or a `popstate` event. 58 | Default: `window.history`. 59 | 60 | ### restoreScroll 61 | 62 | `scrollRestorer.restoreScroll([input, attempts])` 63 | 64 | Manually restore the scroll position for a given history state or `popstate` event. 65 | 66 | When the [`autoRestore`] option of [`start`] is `true`, this method will be invoked automatically, so you only want to use it manually if you've set [`autoRestore`] to `false`. 67 | 68 | #### input 69 | 70 | Type: `{ state: Object }`, either `window.history` or a `popstate` event. 71 | Default: `window.history`. 72 | 73 | #### attempts 74 | 75 | Type: `number`. 76 | Default: `5`. 77 | 78 | The number of times to attempt adjusting the scroll position. 79 | scroll-restorer might need to make multiple attempts if the saved scroll state refers to a position that is not yet available because content is still loading. 80 | 81 | ## React & React Router Example 82 | 83 | ```jsx 84 | import React, {Component} from 'react'; 85 | import {HashRouter, Link, Route} from 'react-router-dom'; 86 | import scrollRestorer from '@mapbox/scroll-restorer'; 87 | 88 | class ScrollRestorerExample extends Component { 89 | componentDidMount() { 90 | // Initiate the scroll position restoration behavior. 91 | scrollRestorer.start(); 92 | } 93 | 94 | componentWillUnmount() { 95 | // Cease the scroll position restoration behavior. 96 | scrollRestorer.stop(); 97 | } 98 | 99 | getContent(numParagraphs) { 100 | const paragraphArr = new Array(numParagraphs).fill(); 101 | 102 | return ( 103 |
Paragraph #{index}.
)} 106 |27 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Est enim tanti 28 | philosophi tamque nobilis audacter sua decreta defendere. Quos nisi 29 | redarguimus, omnis virtus, omne decus, omnis vera laus deserenda est. 30 | Duo Reges: constructio interrete. Cur igitur, cum de re conveniat, non 31 | malumus usitate loqui? Verba tu fingas et ea dicas, quae non sentias? 32 | Quid ait Aristoteles reliquique Platonis alumni?{' '} 33 |
34 |43 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed ad haec, 44 | nisi molestum est, habeo quae velim. Ostendit pedes et pectus. Et nunc 45 | quidem quod eam tuetur, ut de vite potissimum loquar, est id 46 | extrinsecus; Serpere anguiculos, nare anaticulas, evolare merulas, 47 | cornibus uti videmus boves, nepas aculeis. Duo Reges: constructio 48 | interrete. Ostendit pedes et pectus.{' '} 49 |
50 |51 | Quos ille, di inmortales, cum omnes artus ardere viderentur, cruciatus 52 | perferebat! nec tamen miser esse, quia summum id malum non erat, tantum 53 | modo laboriosus videbatur; 54 |55 |
59 | Itaque hic ipse iam pridem est reiectus; Quod autem ratione actum est, 60 | id officium appellamus. Familiares nostros, credo, Sironem dicis et 61 | Philodemum, cum optimos viros, tum homines doctissimos. Et ille ridens: 62 | Video, inquit, quid agas; Suo genere perveniant ad extremum;{' '} 63 | Expressa vero in iis aetatibus, quae iam confirmatae sunt. Ut alios 64 | omittam, hunc appello, quem ille unum secutus est. Sed quae tandem ista 65 | ratio est? Cur post Tarentum ad Archytam? Itaque ab his ordiamur.{' '} 66 | Sin tantum modo ad indicia veteris memoriae cognoscenda, curiosorum.{' '} 67 |
68 |77 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ratio quidem 78 | vestra sic cogit. Sed haec omittamus; E quo efficitur, non ut nos 79 | non intellegamus quae vis sit istius verbi, sed ut ille suo more 80 | loquatur, nostrum neglegat. Cognitio autem haec est una nostri, ut vim 81 | corporis animique norimus sequamurque eam vitam, quae rebus iis ipsis 82 | perfruatur. Quodsi vultum tibi, si incessum fingeres, quo gravior 83 | viderere, non esses tui similis; Duo Reges: constructio interrete. 84 | Quantam rem agas, ut Circeis qui habitet totum hunc mundum suum 85 | municipium esse existimet? Hic ego: Etsi facit hic quidem, inquam, Piso, 86 | ut vides, ea, quae praecipis, tamen mihi grata hortatio tua est.{' '} 87 |
88 |89 | Summum a vobis bonum voluptas dicitur. An dubium est, quin virtus 90 | ita maximam partem optineat in rebus humanis, ut reliquas obruat? 91 | Laelius clamores sofòw ille so lebat Edere compellans gumias ex ordine 92 | nostros. Sed ad illum redeo. Aliam vero vim voluptatis esse, aliam nihil 93 | dolendi, nisi valde pertinax fueris, concedas necesse est. Inquit, 94 | respondet: Quia, nisi quod honestum est, nullum est aliud bonum! Non 95 | quaero iam verumne sit;{' '} 96 |
97 |98 | Quis est tam dissimile homini. Quid est, quod ab ea absolvi et 99 | perfici debeat? Quantum Aristoxeni ingenium consumptum videmus in 100 | musicis? Quodcumque in mentem incideret, et quodcumque tamquam 101 | occurreret. Primum cur ista res digna odio est, nisi quod est turpis? 102 | Itaque primos congressus copulationesque et consuetudinum instituendarum 103 | voluntates fieri propter voluptatem; Sunt autem, qui dicant foedus esse 104 | quoddam sapientium, ut ne minus amicos quam se ipsos diligant. Sin 105 | tantum modo ad indicia veteris memoriae cognoscenda, curiosorum. Nam 106 | Metrodorum non puto ipsum professum, sed, cum appellaretur ab Epicuro, 107 | repudiare tantum beneficium noluisse; Tu autem inter haec tantam 108 | multitudinem hominum interiectam non vides nec laetantium nec dolentium? 109 | Quibus autem in rebus tanta obscuratio non fit, fieri tamen potest, ut 110 | id ipsum, quod interest, non sit magnum. Quae cum ita sint, effectum est 111 | nihil esse malum, quod turpe non sit. Cur post Tarentum ad Archytam? 112 | Ergo et avarus erit, sed finite, et adulter, verum habebit modum, et 113 | luxuriosus eodem modo.{' '} 114 |
115 |134 | Facit enim ille duo seiuncta ultima bonorum, quae ut essent vera, 135 | coniungi debuerunt; 136 |137 |
170 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quorum altera 171 | prosunt, nocent altera. Quid dubitas igitur mutare principia naturae? Et 172 | nemo nimium beatus est; Itaque his sapiens semper vacabit. Nam ista 173 | vestra: Si gravis, brevis; Duo Reges: constructio interrete.{' '} 174 |
175 |196 | Sequitur disserendi ratio cognitioque naturae; Minime vero 197 | istorum quidem, inquit. Quid, de quo nulla dissensio est? Quae 198 | cum essent dicta, discessimus. Quae sequuntur igitur?{' '} 199 |
200 |206 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sic enim 207 | censent, oportunitatis esse beate vivere. Apparet statim, quae sint 208 | officia, quae actiones. Quae cum ita sint, effectum est nihil esse 209 | malum, quod turpe non sit. Omnia contraria, quos etiam insanos esse 210 | vultis. Duo Reges: constructio interrete.{' '} 211 |
212 |252 | Id est enim, de quo quaerimus. Si sapiens, ne tum quidem miser, 253 | cum ab Oroete, praetore Darei, in crucem actus est. Vitae autem degendae 254 | ratio maxime quidem illis placuit quieta. Haec et tu ita posuisti, et 255 | verba vestra sunt. Semovenda est igitur voluptas, non solum ut recta 256 | sequamini, sed etiam ut loqui deceat frugaliter. Commentarios quosdam, 257 | inquam, Aristotelios, quos hic sciebam esse, veni ut auferrem, quos 258 | legerem, dum essem otiosus; Non ego tecum iam ita iocabor, ut isdem his 259 | de rebus, cum L. Zenonis est, inquam, hoc Stoici. Quod cum 260 | accidisset ut alter alterum necopinato videremus, surrexit statim. Atque 261 | haec ita iustitiae propria sunt, ut sint virtutum reliquarum communia.{' '} 262 |
263 |284 | Expectoque quid ad id, quod quaerebam, respondeas. Quae etsi mihi nullo 285 | modo probantur, tamen Democritum laudatum a ceteris ab hoc, qui eum unum 286 | secutus esset, nollem vituperatum.{' '} 287 | Dat enim intervalla et relaxat. Quodsi, ne quo incommodo 288 | afficiare, non relinques amicum, tamen, ne sine fructu alligatus sis, ut 289 | moriatur optabis. Ergo in gubernando nihil, in officio plurimum 290 | interest, quo in genere peccetur. Piso, familiaris noster, et alia multa 291 | et hoc loco Stoicos irridebat: Quid enim? Nec enim, omnes avaritias si 292 | aeque avaritias esse dixerimus, sequetur ut etiam aequas esse dicamus. 293 | Hanc ergo intuens debet institutum illud quasi signum absolvere. Habes, 294 | inquam, Cato, formam eorum, de quibus loquor, philosophorum.{' '} 295 | Hunc vos beatum;{' '} 296 |
297 |299 | Iis igitur est difficilius satis facere, qui se Latina scripta dicunt 300 | contemnere. Is ita vivebat, ut nulla tam exquisita posset inveniri 301 | voluptas, qua non abundaret. Themistocles quidem, cum ei Simonides an 302 | quis alius artem memoriae polliceretur, Oblivionis, inquit, mallem. Sed 303 | est forma eius disciplinae, sicut fere ceterarum, triplex: una pars est 304 | naturae, disserendi altera, vivendi tertia. Aliena dixit in physicis nec 305 | ea ipsa, quae tibi probarentur; Non enim ipsa genuit hominem, sed 306 | accepit a natura inchoatum. Vide ne ista sint Manliana vestra aut maiora 307 | etiam, si imperes quod facere non possim.{' '} 308 |
309 |310 | Perfecto enim et concluso neque virtutibus neque amicitiis usquam locum 311 | esse, si ad voluptatem omnia referantur, nihil praeterea est magnopere 312 | dicendum. Et ais, si una littera commota sit, fore tota ut labet 313 | disciplina. Sin kakan malitiam dixisses, ad aliud nos unum certum vitium 314 | consuetudo Latina traduceret. Non elogia monimentorum id significant, 315 | velut hoc ad portam: Hunc unum plurimae consentiunt gentes populi 316 | primarium fuisse virum. Graccho, eius fere, aequalí?{' '} 317 | Comprehensum, quod cognitum non habet? Ille vero, si 318 | insipiens-quo certe, quoniam tyrannus -, numquam beatus;{' '} 319 |
320 |321 | Sin laboramus, quis est, qui alienae modum statuat industriae? Nemo enim 322 | est, qui aliter dixerit quin omnium naturarum simile esset id, ad quod 323 | omnia referrentur, quod est ultimum rerum appetendarum. Tuo vero id 324 | quidem, inquam, arbitratu. Nam illud quidem adduci vix possum, ut ea, 325 | quae senserit ille, tibi non vera videantur. Quod mihi quidem visus est, 326 | cum sciret, velle tamen confitentem audire Torquatum. Sin te auctoritas 327 | commovebat, nobisne omnibus et Platoni ipsi nescio quem illum 328 | anteponebas? Hoc enim identidem dicitis, non intellegere nos quam 329 | dicatis voluptatem. Sin aliud quid voles, postea. Quorum sine 330 | causa fieri nihil putandum est. Hoc etsi multimodis reprehendi potest, 331 | tamen accipio, quod dant. Vos autem cum perspicuis dubia debeatis 332 | illustrare, dubiis perspicua conamini tollere. Quod dicit Epicurus etiam 333 | de voluptate, quae minime sint voluptates, eas obscurari saepe et obrui. 334 | Ne tum quidem te respicies et cogitabis sibi quemque natum esse et suis 335 | voluptatibus?{' '} 336 |
337 |339 | Quaesita enim virtus est, non quae relinqueret naturam, sed quae 340 | tueretur. Non prorsus, inquit, omnisque, qui sine dolore sint, in 341 | voluptate, et ea quidem summa, esse dico. Sine ea igitur iucunde negat 342 | posse se vivere? Aut haec tibi, Torquate, sunt vituperanda aut 343 | patrocinium voluptatis repudiandum. Vide, ne etiam menses! nisi forte 344 | eum dicis, qui, simul atque arripuit, interficit. Sed dum efficere 345 | vultis beatum sapientem, cum maximas animo voluptates percipiat 346 | omnibusque partibus maiores quam corpore, quid occurrat non videtis. 347 | Animadverti, ínquam, te isto modo paulo ante ponere, et scio ab Antiocho 348 | nostro dici sic solere; Etiam inchoatum, ut, si iuste depositum reddere 349 | in recte factis sit, in officiis ponatur depositum reddere; Mihi quidem 350 | Homerus huius modi quiddam vidisse videatur in iis, quae de Sirenum 351 | cantibus finxerit. Sed residamus, inquit, si placet. Quid enim 352 | est a Chrysippo praetermissum in Stoicis? Nullis enim partitionibus, 353 | nullis definitionibus utuntur ipsique dicunt ea se modo probare, quibus 354 | natura tacita adsentiatur.{' '} 355 |
356 |357 | Nam et complectitur verbis, quod vult, et dicit plane, quod intellegam; 358 | Apud ceteros autem philosophos, qui quaesivit aliquid, tacet;{' '} 359 | Invidiosum nomen est, infame, suspectum.{' '} 360 | Cave putes quicquam esse verius. Audeo dicere, inquit.{' '} 361 | Eadem nunc mea adversum te oratio est. Callipho ad virtutem nihil 362 | adiunxit nisi voluptatem, Diodorus vacuitatem doloris. Si ista mala 363 | sunt, in quae potest incidere sapiens, sapientem esse non esse ad beate 364 | vivendum satis. Quae cum essent dicta, discessimus.{' '} 365 | Quid enim possumus hoc agere divinius?{' '} 366 |
367 |381 | Voluptatis causa, etiam si eam non consequare, aut non dolendi, etiam si 382 | id assequi nequeas, aut eorum, quae secundum naturam sunt, adipiscendi, 383 | etiam si nihil consequare. 384 |385 |
404 | Sin dicit obscurari quaedam nec apparere, quia valde parva sint, nos 405 | quoque concedimus; Mihi quidem Homerus huius modi quiddam vidisse 406 | videatur in iis, quae de Sirenum cantibus finxerit. Est autem situm in 407 | nobis ut et adversa quasi perpetua oblivione obruamus et secunda iucunde 408 | ac suaviter meminerimus. Possumusne hic scire qualis sit, nisi 409 | contulerimus inter nos, cum finem bonorum dixerimus, quid finis, quid 410 | etiam sit ipsum bonum? Hoc unum Aristo tenuit: praeter vitia atque 411 | virtutes negavit rem esse ullam aut fugiendam aut expetendam. Quae quo 412 | sunt excelsiores, eo dant clariora indicia naturae.{' '} 413 |
414 |415 | Nam omnia, quae sumenda quaeque legenda aut optanda sunt, inesse debent 416 | in summa bonorum, ut is, qui eam adeptus sit, nihil praeterea desideret. 417 |418 |
439 | Quid, quod res alia tota est? Sit hoc ultimum bonorum, quod nunc a me 440 | defenditur; Princeps huius civitatis Phalereus Demetrius cum patria 441 | pulsus esset iniuria, ad Ptolomaeum se regem Alexandream contulit. Et 442 | quidem, Cato, hanc totam copiam iam Lucullo nostro notam esse oportebit; 443 | Nam, ut saepe iam dixi, in infirma aetate inbecillaque mente vis naturae 444 | quasi per caliginem cernitur; Non est igitur voluptas bonum. Nam 445 | cui proposito sit conservatio sui, necesse est huic partes quoque sui 446 | caras suo genere laudabiles. Nec vero intermittunt aut admirationem 447 | earum rerum, quae sunt ab antiquis repertae, aut investigationem 448 | novarum. Idem adhuc; Satisne ergo pudori consulat, si quis sine 449 | teste libidini pareat?{' '} 450 |
451 |453 | Hunc vos beatum; Videmus igitur ut conquiescere ne infantes 454 | quidem possint. Sedulo, inquam, faciam. Animadverti, ínquam, te 455 | isto modo paulo ante ponere, et scio ab Antiocho nostro dici sic solere; 456 | Cur tantas regiones barbarorum pedibus obiit, tot maria transmisit? Ac 457 | ne plura complectar-sunt enim innumerabilia-, bene laudata virtus 458 | voluptatis aditus intercludat necesse est. Eorum enim omnium multa 459 | praetermittentium, dum eligant aliquid, quod sequantur, quasi curta 460 | sententia; Egone non intellego, quid sit don Graece, Latine voluptas? 461 | Sic enim maiores nostri labores non fugiendos tristissimo tamen verbo 462 | aerumnas etiam in deo nominaverunt. Sin autem ad animum, falsum est, 463 | quod negas animi ullum esse gaudium, quod non referatur ad corpus. Quae 464 | sequuntur igitur? Sed vobis voluptatum perceptarum recordatio vitam 465 | beatam facit, et quidem corpore perceptarum. Ratio ista, quam defendis, 466 | praecepta, quae didicisti, quae probas, funditus evertunt amicitiam, 467 | quamvis eam Epicurus, ut facit, in caelum efferat laudibus. De maximma 468 | autem re eodem modo, divina mente atque natura mundum universum et eius 469 | maxima partis administrari.{' '} 470 |
471 |473 | Totum autem id externum est, et quod externum, id in casu est.{' '} 474 | Quibusnam praeteritis? Et nemo nimium beatus est; Quid enim 475 | possumus hoc agere divinius? At enim iam dicitis virtutem non posse 476 | constitui, si ea, quae extra virtutem sint, ad beate vivendum 477 | pertineant. Serpere anguiculos, nare anaticulas, evolare merulas, 478 | cornibus uti videmus boves, nepas aculeis. Quid enim ab antiquis ex eo 479 | genere, quod ad disserendum valet, praetermissum est? Non quaeritur 480 | autem quid naturae tuae consentaneum sit, sed quid disciplinae. Quod cum 481 | accidisset ut alter alterum necopinato videremus, surrexit statim.{' '} 482 |
483 |484 | Non laboro, inquit, de nomine. Fortemne possumus dicere eundem illum 485 | Torquatum? Illud non continuo, ut aeque incontentae. Res enim 486 | fortasse verae, certe graves, non ita tractantur, ut debent, sed 487 | aliquanto minutius. Nec vero audiendus Hieronymus, cui summum bonum est 488 | idem, quod vos interdum vel potius nimium saepe dicitis, nihil dolere. 489 | Stuprata per vim Lucretia a regis filio testata civis se ipsa interemit. 490 | Qui autem diffidet perpetuitati bonorum suorum, timeat necesse est, ne 491 | aliquando amissis illis sit miser. Quin etiam ferae, inquit Pacuvius, 492 | quíbus abest, ad praécavendum intéllegendi astútia, iniecto terrore 493 | mortis horrescunt. Ut scias me intellegere, primum idem esse dico 494 | voluptatem, quod ille don. Ita fit illa conclusio non solum vera, sed 495 | ita perspicua, ut dialectici ne rationem quidem reddi putent oportere: 496 | si illud, hoc; Aliam vero vim voluptatis esse, aliam nihil dolendi, nisi 497 | valde pertinax fueris, concedas necesse est. Mihi, inquam, qui te id 498 | ipsum rogavi? Quae enim cupiditates a natura proficiscuntur, facile 499 | explentur sine ulla iniuria, quae autem inanes sunt, iis parendum non 500 | est.{' '} 501 |
502 |503 | Contineo me ab exemplis. Quis enim redargueret? Non 504 | autem hoc: igitur ne illud quidem. Quo minus animus a se ipse dissidens 505 | secumque discordans gustare partem ullam liquidae voluptatis et liberae 506 | potest. Quorum altera prosunt, nocent altera. Diodorus, eius 507 | auditor, adiungit ad honestatem vacuitatem doloris. In primo enim ortu 508 | inest teneritas ac mollitia quaedam, ut nec res videre optimas nec agere 509 | possint. Desideraret enim valitudinem, vacuitatem doloris, appeteret 510 | etiam conservationem sui earumque rerum custodiam finemque, sibi 511 | constitueret secundum naturam vivere. Quo plebiscito decreta a senatu 512 | est consuli quaestio Cn.{' '} 513 |
514 |515 | Illa tamen simplicia, vestra versuta. Virtutis, magnitudinis animi, 516 | patientiae, fortitudinis fomentis dolor mitigari solet. Animi enim 517 | quoque dolores percipiet omnibus partibus maiores quam corporis.{' '} 518 | Qui est in parvis malis. Quamquam te quidem video minime esse 519 | deterritum. Sed haec ab Antiocho, familiari nostro, dicuntur multo 520 | melius et fortius, quam a Stasea dicebantur. Neque enim disputari sine 521 | reprehensione nec cum iracundia aut pertinacia recte disputari potest. 522 | Aut etiam, ut vestitum, sic sententiam habeas aliam domesticam, aliam 523 | forensem, ut in fronte ostentatio sit, intus veritas occultetur? Non 524 | enim in selectione virtus ponenda erat, ut id ipsum, quod erat bonorum 525 | ultimum, aliud aliquid adquireret. Quis Aristidem non mortuum diligit?{' '} 526 |
527 |537 | Totum genus hoc Zeno et qui ab eo sunt aut non potuerunt aut noluerunt, 538 | certe reliquerunt. 539 |540 |