diff --git a/hyde/ext/plugins/paginator.py b/hyde/ext/plugins/paginator.py new file mode 100644 index 0000000..81c417c --- /dev/null +++ b/hyde/ext/plugins/paginator.py @@ -0,0 +1,148 @@ +# -*- coding: utf-8 -*- +""" +Paginator plugin. Groups a sorted set of resources into pages and supplies +each page to a copy of the original resource. +""" +import os + +from hyde.fs import File +from hyde.plugin import Plugin +from hyde.site import Resource +from hyde.util import pairwalk + +class Page: + def __init__(self, posts, number): + self.posts = posts + self.number = number + +class Paginator: + """ + Iterates resources which have pages associated with them. + """ + + file_pattern = 'page$PAGE/$FILE$EXT' + + def __init__(self, settings): + self.sorter = getattr(settings, 'sorter', None) + self.size = getattr(settings, 'size', 10) + self.file_pattern = getattr(settings, 'file_pattern', self.file_pattern) + + def _relative_url(self, source_path, number, basename, ext): + """ + Create a new URL for a new page. The first page keeps the same name; + the subsequent pages are named according to file_pattern. + """ + path = File(source_path) + if number != 1: + filename = self.file_pattern.replace('$PAGE', str(number)) \ + .replace('$FILE', basename) \ + .replace('$EXT', ext) + path = path.parent.child(os.path.normpath(filename)) + return path + + def _new_resource(self, base_resource, node, page_number): + """ + Create a new resource as a copy of a base_resource, with a page of + resources associated with it. + """ + res = Resource(base_resource.source_file, node) + path = self._relative_url(base_resource.relative_path, + page_number, + base_resource.source_file.name_without_extension, + base_resource.source_file.extension) + res.set_relative_deploy_path(path) + return res + + @staticmethod + def _attach_page_to_resource(page, resource): + """ + Hook up a page and a resource. + """ + resource.page = page + page.resource = resource + + @staticmethod + def _add_dependencies_to_resource(dependencies, resource): + """ + Add a bunch of resources as dependencies to another resource. + """ + if not hasattr(resource, 'depends'): + resource.depends = [] + resource.depends.extend([dep.relative_path for dep in dependencies + if dep.relative_path not in resource.depends]) + + def _walk_pages_in_node(self, node): + """ + Segregate each resource into a page. + """ + walker = 'walk_resources' + if self.sorter: + walker = 'walk_resources_sorted_by_%s' % self.sorter + walker = getattr(node, walker, getattr(node, 'walk_resources')) + + posts = list(walker()) + number = 1 + while posts: + yield Page(posts[:self.size], number) + posts = posts[self.size:] + number += 1 + + def walk_paged_resources(self, node, resource): + """ + Group the resources and return the new page resources. + """ + added_resources = [] + pages = list(self._walk_pages_in_node(node)) + deps = reduce(list.__add__, [page.posts for page in pages], []) + + Paginator._attach_page_to_resource(pages[0], resource) + Paginator._add_dependencies_to_resource(deps, resource) + for page in pages[1:]: + # make new resource + new_resource = self._new_resource(resource, node, page.number) + Paginator._attach_page_to_resource(page, new_resource) + new_resource.depends = resource.depends + added_resources.append(new_resource) + + for prev, next in pairwalk(pages): + next.previous = prev + prev.next = next + + return added_resources + + +class PaginatorPlugin(Plugin): + """ + Paginator plugin. + + Configuration: in a resource's metadata: + + paginator: + sorter: time + size: 5 + file_pattern: page$PAGE/$FILE$EXT # optional + + then in the resource's content: + + {% for res in resource.page.posts %} + {% refer to res.url as post %} + {{ post }} + {% endfor %} + + {{ resource.page.previous }} + {{ resource.page.next }} + + """ + def __init__(self, site): + super(PaginatorPlugin, self).__init__(site) + + def begin_site(self): + for node in self.site.content.walk(): + added_resources = [] + paged_resources = (res for res in node.resources + if hasattr(res.meta, 'paginator')) + for resource in paged_resources: + paginator = Paginator(resource.meta.paginator) + added_resources += paginator.walk_paged_resources(node, resource) + + node.resources += added_resources diff --git a/hyde/tests/ext/test_paginator.py b/hyde/tests/ext/test_paginator.py new file mode 100644 index 0000000..0e053ab --- /dev/null +++ b/hyde/tests/ext/test_paginator.py @@ -0,0 +1,129 @@ +# -*- coding: utf-8 -*- +""" +Use nose +`$ pip install nose` +`$ nosetests` +""" +from textwrap import dedent + +from hyde.fs import File, Folder +from hyde.generator import Generator +from hyde.model import Expando +from hyde.site import Site + +TEST_SITE = File(__file__).parent.parent.child_folder('_test') + +class TestPaginator(object): + + def setUp(self): + TEST_SITE.make() + TEST_SITE.parent.child_folder( + 'sites/test_paginator').copy_contents_to(TEST_SITE) + self.s = Site(TEST_SITE) + self.deploy = TEST_SITE.child_folder('deploy') + + self.gen = Generator(self.s) + self.gen.load_site_if_needed() + self.gen.load_template_if_needed() + self.gen.generate_all() + + + def tearDown(self): + TEST_SITE.delete() + + + def test_pages_of_one(self): + pages = ['pages_of_one.txt', 'page2/pages_of_one.txt', + 'page3/pages_of_one.txt', 'page4/pages_of_one.txt'] + files = [File(self.deploy.child(p)) for p in pages] + for f in files: + assert f.exists + + page5 = File(self.deploy.child('page5/pages_of_one.txt')) + assert not page5.exists + + + def test_pages_of_one_content(self): + expected_page1_content = dedent('''\ + Another Sad Post + + page2/pages_of_one.txt''') + expected_page2_content = dedent('''\ + A Happy Post + pages_of_one.txt + page3/pages_of_one.txt''') + expected_page3_content = dedent('''\ + An Angry Post + page2/pages_of_one.txt + page4/pages_of_one.txt''') + expected_page4_content = dedent('''\ + A Sad Post + page3/pages_of_one.txt + ''') + + page1 = self.deploy.child('pages_of_one.txt') + content = File(page1).read_all() + assert expected_page1_content == content + + page2 = self.deploy.child('page2/pages_of_one.txt') + content = File(page2).read_all() + assert expected_page2_content == content + + page3 = self.deploy.child('page3/pages_of_one.txt') + content = File(page3).read_all() + assert expected_page3_content == content + + page4 = self.deploy.child('page4/pages_of_one.txt') + content = File(page4).read_all() + assert expected_page4_content == content + + + def test_pages_of_ten(self): + page1 = self.deploy.child('pages_of_ten.txt') + page2 = self.deploy.child('page2/pages_of_ten.txt') + + assert File(page1).exists + assert not File(page2).exists + + + def test_pages_of_ten_depends(self): + depends = self.gen.deps['pages_of_ten.txt'] + + assert depends + assert len(depends) == 4 + assert 'blog/sad-post.html' in depends + assert 'blog/another-sad-post.html' in depends + assert 'blog/angry-post.html' in depends + assert 'blog/happy-post.html' in depends + + + def test_pages_of_ten_content(self): + expected_content = dedent('''\ + Another Sad Post + A Happy Post + An Angry Post + A Sad Post + ''') + + page = self.deploy.child('pages_of_ten.txt') + content = File(page).read_all() + assert expected_content == content + + + def test_pages_of_one_depends(self): + depends = self.gen.deps['pages_of_one.txt'] + + assert depends + assert len(depends) == 4 + assert 'blog/sad-post.html' in depends + assert 'blog/another-sad-post.html' in depends + assert 'blog/angry-post.html' in depends + assert 'blog/happy-post.html' in depends + + + def test_custom_file_pattern(self): + page1 = self.deploy.child('custom_file_pattern.txt') + page2 = self.deploy.child('custom_file_pattern-2.txt') + + assert File(page1).exists + assert File(page2).exists diff --git a/hyde/tests/sites/test_paginator/content/blog/angry-post.html b/hyde/tests/sites/test_paginator/content/blog/angry-post.html new file mode 100644 index 0000000..3d68946 --- /dev/null +++ b/hyde/tests/sites/test_paginator/content/blog/angry-post.html @@ -0,0 +1,133 @@ +--- +title: An Angry Post +description: > + Temper. Temper. Temper. +created: !!timestamp '2011-01-01 10:00:00' +tags: + - angry + - thoughts +--- + +{% mark excerpt -%} + +To complete the character-study of Mr. Worple, he was a man of extremely +uncertain temper, and his general tendency was to think that Corky was a poor +chump and that whatever step he took in any direction on his own account, was +just another proof of his innate idiocy. I should imagine Jeeves feels very +much the same about me. + +{%- endmark %} + +So when Corky trickled into my apartment one afternoon, shooing a girl in +front of him, and said, "Bertie, I want you to meet my fiancée, Miss Singer," +the aspect of the matter which hit me first was precisely the one which he had +come to consult me about. The very first words I spoke were, "Corky, how about +your uncle?" + +The poor chap gave one of those mirthless laughs. He was looking anxious and +worried, like a man who has done the murder all right but can't think what the +deuce to do with the body. + +"We're so scared, Mr. Wooster," said the girl. "We were hoping that you might +suggest a way of breaking it to him." + +Muriel Singer was one of those very quiet, appealing girls who have a way of +looking at you with their big eyes as if they thought you were the greatest +thing on earth and wondered that you hadn't got on to it yet yourself. She sat +there in a sort of shrinking way, looking at me as if she were saying to +herself, "Oh, I do hope this great strong man isn't going to hurt me." She +gave a fellow a protective kind of feeling, made him want to stroke her hand +and say, "There, there, little one!" or words to that effect. She made me feel +that there was nothing I wouldn't do for her. She was rather like one of those +innocent-tasting American drinks which creep imperceptibly into your system so +that, before you know what you're doing, you're starting out to reform the +world by force if necessary and pausing on your way to tell the large man in +the corner that, if he looks at you like that, you will knock his head off. +What I mean is, she made me feel alert and dashing, like a jolly old +knight-errant or something of that kind. I felt that I was with her in this +thing to the limit. + +"I don't see why your uncle shouldn't be most awfully bucked," I said to +Corky. "He will think Miss Singer the ideal wife for you." + +Corky declined to cheer up. + +"You don't know him. Even if he did like Muriel he wouldn't admit it. That's +the sort of pig-headed guy he is. It would be a matter of principle with him +to kick. All he would consider would be that I had gone and taken an important +step without asking his advice, and he would raise Cain automatically. He's +always done it." + +I strained the old bean to meet this emergency. + +"You want to work it so that he makes Miss Singer's acquaintance without +knowing that you know her. Then you come along" + +"But how can I work it that way?" + +I saw his point. That was the catch. + +"There's only one thing to do," I said. + +"What's that?" + +"Leave it to Jeeves." + +And I rang the bell. + +"Sir?" said Jeeves, kind of manifesting himself. One of the rummy things about +Jeeves is that, unless you watch like a hawk, you very seldom see him come +into a room. He's like one of those weird chappies in India who dissolve +themselves into thin air and nip through space in a sort of disembodied way +and assemble the parts again just where they want them. I've got a cousin +who's what they call a Theosophist, and he says he's often nearly worked the +thing himself, but couldn't quite bring it off, probably owing to having fed +in his boyhood on the flesh of animals slain in anger and pie. + +The moment I saw the man standing there, registering respectful attention, a +weight seemed to roll off my mind. I felt like a lost child who spots his +father in the offing. There was something about him that gave me confidence. + +Jeeves is a tallish man, with one of those dark, shrewd faces. His eye gleams +with the light of pure intelligence. + +"Jeeves, we want your advice." + +"Very good, sir." + +I boiled down Corky's painful case into a few well-chosen words. + +"So you see what it amount to, Jeeves. We want you to suggest some way by +which Mr. Worple can make Miss Singer's acquaintance without getting on to the +fact that Mr. Corcoran already knows her. Understand?" + +"Perfectly, sir." + +"Well, try to think of something." + +"I have thought of something already, sir." + +"You have!" + +"The scheme I would suggest cannot fail of success, but it has what may seem +to you a drawback, sir, in that it requires a certain financial outlay." + +"He means," I translated to Corky, "that he has got a pippin of an idea, but +it's going to cost a bit." + +Naturally the poor chap's face dropped, for this seemed to dish the whole +thing. But I was still under the influence of the girl's melting gaze, and I +saw that this was where I started in as a knight-errant. + +"You can count on me for all that sort of thing, Corky," I said. "Only too +glad. Carry on, Jeeves." + +"I would suggest, sir, that Mr. Corcoran take advantage of Mr. Worple's +attachment to ornithology." + +"How on earth did you know that he was fond of birds?" + + +[My Man Jeeves by PG Wodehouse][MMJ] + +[MMJ]: http://www.gutenberg.org/cache/epub/8164/pg8164.html \ No newline at end of file diff --git a/hyde/tests/sites/test_paginator/content/blog/another-sad-post.html b/hyde/tests/sites/test_paginator/content/blog/another-sad-post.html new file mode 100644 index 0000000..cf5f6d2 --- /dev/null +++ b/hyde/tests/sites/test_paginator/content/blog/another-sad-post.html @@ -0,0 +1,87 @@ +--- +title: Another Sad Post +description: > + Something else sad happened. +created: !!timestamp '2011-03-01 10:00:00' +tags: + - sad + - events +--- + +{% mark excerpt -%} + +I went and dressed sadly. It will show you pretty well how pipped I was when I +tell you that I near as a toucher put on a white tie with a dinner-jacket. I +sallied out for a bit of food more to pass the time than because I wanted it. +It seemed brutal to be wading into the bill of fare with poor old Bicky headed +for the breadline. + +{%- endmark %} + +When I got back old Chiswick had gone to bed, but Bicky was there, hunched up +in an arm-chair, brooding pretty tensely, with a cigarette hanging out of the +corner of his mouth and a more or less glassy stare in his eyes. He had the +aspect of one who had been soaked with what the newspaper chappies call "some +blunt instrument." + +"This is a bit thick, old thing—what!" I said. + +He picked up his glass and drained it feverishly, overlooking the fact that it +hadn't anything in it. + +"I'm done, Bertie!" he said. + +He had another go at the glass. It didn't seem to do him any good. + +"If only this had happened a week later, Bertie! My next month's money was due +to roll in on Saturday. I could have worked a wheeze I've been reading about +in the magazine advertisements. It seems that you can make a dashed amount of +money if you can only collect a few dollars and start a chicken-farm. Jolly +sound scheme, Bertie! Say you buy a hen—call it one hen for the sake of +argument. It lays an egg every day of the week. You sell the eggs seven for +twenty-five cents. Keep of hen costs nothing. Profit practically twenty-five +cents on every seven eggs. Or look at it another way: Suppose you have a dozen +eggs. Each of the hens has a dozen chickens. The chickens grow up and have +more chickens. Why, in no time you'd have the place covered knee-deep in hens, +all laying eggs, at twenty-five cents for every seven. You'd make a fortune. +Jolly life, too, keeping hens!" He had begun to get quite worked up at the +thought of it, but he slopped back in his chair at this juncture with a good +deal of gloom. "But, of course, it's no good," he said, "because I haven't the +cash." + +"You've only to say the word, you know, Bicky, old top." + +"Thanks awfully, Bertie, but I'm not going to sponge on you." + +That's always the way in this world. The chappies you'd like to lend money to +won't let you, whereas the chappies you don't want to lend it to will do +everything except actually stand you on your head and lift the specie out of +your pockets. As a lad who has always rolled tolerably free in the right +stuff, I've had lots of experience of the second class. Many's the time, back +in London, I've hurried along Piccadilly and felt the hot breath of the +toucher on the back of my neck and heard his sharp, excited yapping as he +closed in on me. I've simply spent my life scattering largesse to blighters I +didn't care a hang for; yet here was I now, dripping doubloons and pieces of +eight and longing to hand them over, and Bicky, poor fish, absolutely on his +uppers, not taking any at any price. + +"Well, there's only one hope, then." + +"What's that?" + +"Jeeves." + +"Sir?" + +There was Jeeves, standing behind me, full of zeal. In this matter of +shimmering into rooms the chappie is rummy to a degree. You're sitting in the +old armchair, thinking of this and that, and then suddenly you look up, and +there he is. He moves from point to point with as little uproar as a jelly +fish. The thing startled poor old Bicky considerably. He rose from his seat +like a rocketing pheasant. I'm used to Jeeves now, but often in the days when +he first came to me I've bitten my tongue freely on finding him unexpectedly +in my midst. + +[My Man Jeeves by PG Wodehouse][MMJ] + +[MMJ]: http://www.gutenberg.org/cache/epub/8164/pg8164.html \ No newline at end of file diff --git a/hyde/tests/sites/test_paginator/content/blog/happy-post.html b/hyde/tests/sites/test_paginator/content/blog/happy-post.html new file mode 100644 index 0000000..81c434b --- /dev/null +++ b/hyde/tests/sites/test_paginator/content/blog/happy-post.html @@ -0,0 +1,144 @@ +--- +title: A Happy Post +description: > + Smile. Laugh. +created: !!timestamp '2011-02-01 10:00:00' +tags: + - happy + - thoughts +--- + +{% mark excerpt -%} + +Lady Malvern was a hearty, happy, healthy, overpowering sort of dashed female, +not so very tall but making up for it by measuring about six feet from the +O.P. to the Prompt Side. + +{%- endmark %} + +She fitted into my biggest arm-chair as if it had +been built round her by someone who knew they were wearing arm-chairs tight +about the hips that season. She had bright, bulging eyes and a lot of yellow +hair, and when she spoke she showed about fifty-seven front teeth. She was one +of those women who kind of numb a fellow's faculties. She made me feel as if I +were ten years old and had been brought into the drawing-room in my Sunday +clothes to say how-d'you-do. Altogether by no means the sort of thing a +chappie would wish to find in his sitting-room before breakfast. + +Motty, the son, was about twenty-three, tall and thin and meek-looking. He had +the same yellow hair as his mother, but he wore it plastered down and parted +in the middle. His eyes bulged, too, but they weren't bright. They were a dull +grey with pink rims. His chin gave up the struggle about half-way down, and he +didn't appear to have any eyelashes. A mild, furtive, sheepish sort of +blighter, in short. + +"Awfully glad to see you," I said. "So you've popped over, eh? Making a long +stay in America?" + +"About a month. Your aunt gave me your address and told me to be sure and call +on you." + +I was glad to hear this, as it showed that Aunt Agatha was beginning to come +round a bit. There had been some unpleasantness a year before, when she had +sent me over to New York to disentangle my Cousin Gussie from the clutches of +a girl on the music-hall stage. When I tell you that by the time I had +finished my operations, Gussie had not only married the girl but had gone on +the stage himself, and was doing well, you'll understand that Aunt Agatha was +upset to no small extent. I simply hadn't dared go back and face her, and it +was a relief to find that time had healed the wound and all that sort of thing +enough to make her tell her pals to look me up. What I mean is, much as I +liked America, I didn't want to have England barred to me for the rest of my +natural; and, believe me, England is a jolly sight too small for anyone to +live in with Aunt Agatha, if she's really on the warpath. So I braced on +hearing these kind words and smiled genially on the assemblage. + +"Your aunt said that you would do anything that was in your power to be of +assistance to us." + +"Rather? Oh, rather! Absolutely!" + +"Thank you so much. I want you to put dear Motty up for a little while." + +I didn't get this for a moment. + +"Put him up? For my clubs?" + +"No, no! Darling Motty is essentially a home bird. Aren't you, Motty darling?" + +Motty, who was sucking the knob of his stick, uncorked himself. + +"Yes, mother," he said, and corked himself up again. + +"I should not like him to belong to clubs. I mean put him up here. Have him to +live with you while I am away." + +These frightful words trickled out of her like honey. The woman simply didn't +seem to understand the ghastly nature of her proposal. I gave Motty the swift +east-to-west. He was sitting with his mouth nuzzling the stick, blinking at +the wall. The thought of having this planted on me for an indefinite period +appalled me. Absolutely appalled me, don't you know. I was just starting to +say that the shot wasn't on the board at any price, and that the first sign +Motty gave of trying to nestle into my little home I would yell for the +police, when she went on, rolling placidly over me, as it were. + +There was something about this woman that sapped a chappie's will-power. + +"I am leaving New York by the midday train, as I have to pay a visit to +Sing-Sing prison. I am extremely interested in prison conditions in America. +After that I work my way gradually across to the coast, visiting the points of +interest on the journey. You see, Mr. Wooster, I am in America principally on +business. No doubt you read my book, India and the Indians? My publishers are +anxious for me to write a companion volume on the United States. I shall not +be able to spend more than a month in the country, as I have to get back for +the season, but a month should be ample. I was less than a month in India, and +my dear friend Sir Roger Cremorne wrote his America from Within after a stay +of only two weeks. I should love to take dear Motty with me, but the poor boy +gets so sick when he travels by train. I shall have to pick him up on my +return." + +From where I sat I could see Jeeves in the dining-room, laying the +breakfast-table. I wished I could have had a minute with him alone. I felt +certain that he would have been able to think of some way of putting a stop to +this woman. + +"It will be such a relief to know that Motty is safe with you, Mr. Wooster. I +know what the temptations of a great city are. Hitherto dear Motty has been +sheltered from them. He has lived quietly with me in the country. I know that +you will look after him carefully, Mr. Wooster. He will give very little +trouble." She talked about the poor blighter as if he wasn't there. Not that +Motty seemed to mind. He had stopped chewing his walking-stick and was sitting +there with his mouth open. "He is a vegetarian and a teetotaller and is +devoted to reading. Give him a nice book and he will be quite contented." She +got up. "Thank you so much, Mr. Wooster! I don't know what I should have done +without your help. Come, Motty! We have just time to see a few of the sights +before my train goes. But I shall have to rely on you for most of my +information about New York, darling. Be sure to keep your eyes open and take +notes of your impressions! It will be such a help. Good-bye, Mr. Wooster. I +will send Motty back early in the afternoon." + +They went out, and I howled for Jeeves. + +"Jeeves! What about it?" + +"Sir?" + +"What's to be done? You heard it all, didn't you? You were in the dining-room +most of the time. That pill is coming to stay here." + +"Pill, sir?" + +"The excrescence." + +"I beg your pardon, sir?" + +I looked at Jeeves sharply. This sort of thing wasn't like him. It was as if +he were deliberately trying to give me the pip. Then I understood. The man was +really upset about that tie. He was trying to get his own back. + +"Lord Pershore will be staying here from to-night, Jeeves," I said coldly. + +"Very good, sir. Breakfast is ready, sir." + +[My Man Jeeves by PG Wodehouse][MMJ] + +[MMJ]: http://www.gutenberg.org/cache/epub/8164/pg8164.html \ No newline at end of file diff --git a/hyde/tests/sites/test_paginator/content/blog/sad-post.html b/hyde/tests/sites/test_paginator/content/blog/sad-post.html new file mode 100644 index 0000000..0aeec34 --- /dev/null +++ b/hyde/tests/sites/test_paginator/content/blog/sad-post.html @@ -0,0 +1,93 @@ +--- +title: A Sad Post +description: > + Something sad happened. +created: !!timestamp '2010-12-01 10:00:00' +tags: + - sad + - thoughts +--- + +{% mark image -%} + +![A Dark Image]([[!!images/dark.png]]) + +{%- endmark %} + +{% mark excerpt -%} + +I went and dressed sadly. It will show you pretty well how pipped I was when I +tell you that I near as a toucher put on a white tie with a dinner-jacket. I +sallied out for a bit of food more to pass the time than because I wanted it. +It seemed brutal to be wading into the bill of fare with poor old Bicky headed +for the breadline. + +{%- endmark %} + +When I got back old Chiswick had gone to bed, but Bicky was there, hunched up +in an arm-chair, brooding pretty tensely, with a cigarette hanging out of the +corner of his mouth and a more or less glassy stare in his eyes. He had the +aspect of one who had been soaked with what the newspaper chappies call "some +blunt instrument." + +"This is a bit thick, old thing—what!" I said. + +He picked up his glass and drained it feverishly, overlooking the fact that it +hadn't anything in it. + +"I'm done, Bertie!" he said. + +He had another go at the glass. It didn't seem to do him any good. + +"If only this had happened a week later, Bertie! My next month's money was due +to roll in on Saturday. I could have worked a wheeze I've been reading about +in the magazine advertisements. It seems that you can make a dashed amount of +money if you can only collect a few dollars and start a chicken-farm. Jolly +sound scheme, Bertie! Say you buy a hen—call it one hen for the sake of +argument. It lays an egg every day of the week. You sell the eggs seven for +twenty-five cents. Keep of hen costs nothing. Profit practically twenty-five +cents on every seven eggs. Or look at it another way: Suppose you have a dozen +eggs. Each of the hens has a dozen chickens. The chickens grow up and have +more chickens. Why, in no time you'd have the place covered knee-deep in hens, +all laying eggs, at twenty-five cents for every seven. You'd make a fortune. +Jolly life, too, keeping hens!" He had begun to get quite worked up at the +thought of it, but he slopped back in his chair at this juncture with a good +deal of gloom. "But, of course, it's no good," he said, "because I haven't the +cash." + +"You've only to say the word, you know, Bicky, old top." + +"Thanks awfully, Bertie, but I'm not going to sponge on you." + +That's always the way in this world. The chappies you'd like to lend money to +won't let you, whereas the chappies you don't want to lend it to will do +everything except actually stand you on your head and lift the specie out of +your pockets. As a lad who has always rolled tolerably free in the right +stuff, I've had lots of experience of the second class. Many's the time, back +in London, I've hurried along Piccadilly and felt the hot breath of the +toucher on the back of my neck and heard his sharp, excited yapping as he +closed in on me. I've simply spent my life scattering largesse to blighters I +didn't care a hang for; yet here was I now, dripping doubloons and pieces of +eight and longing to hand them over, and Bicky, poor fish, absolutely on his +uppers, not taking any at any price. + +"Well, there's only one hope, then." + +"What's that?" + +"Jeeves." + +"Sir?" + +There was Jeeves, standing behind me, full of zeal. In this matter of +shimmering into rooms the chappie is rummy to a degree. You're sitting in the +old armchair, thinking of this and that, and then suddenly you look up, and +there he is. He moves from point to point with as little uproar as a jelly +fish. The thing startled poor old Bicky considerably. He rose from his seat +like a rocketing pheasant. I'm used to Jeeves now, but often in the days when +he first came to me I've bitten my tongue freely on finding him unexpectedly +in my midst. + +[My Man Jeeves by PG Wodehouse][MMJ] + +[MMJ]: http://www.gutenberg.org/cache/epub/8164/pg8164.html \ No newline at end of file diff --git a/hyde/tests/sites/test_paginator/content/custom_file_pattern.txt b/hyde/tests/sites/test_paginator/content/custom_file_pattern.txt new file mode 100644 index 0000000..e1f76d8 --- /dev/null +++ b/hyde/tests/sites/test_paginator/content/custom_file_pattern.txt @@ -0,0 +1,11 @@ +--- +paginator: + sorter: time + size: 2 + file_pattern: $FILE-$PAGE$EXT +--- +{% for res in resource.page.posts %} +{{ res.meta.title }} +{% endfor %} +{{ resource.page.previous.resource.url }} +{{ resource.page.next.resource.url }} diff --git a/hyde/tests/sites/test_paginator/content/pages_of_one.txt b/hyde/tests/sites/test_paginator/content/pages_of_one.txt new file mode 100644 index 0000000..8cc168e --- /dev/null +++ b/hyde/tests/sites/test_paginator/content/pages_of_one.txt @@ -0,0 +1,10 @@ +--- +paginator: + sorter: time + size: 1 +--- +{% for res in resource.page.posts %} +{{ res.meta.title }} +{% endfor %} +{{ resource.page.previous.resource.url }} +{{ resource.page.next.resource.url }} diff --git a/hyde/tests/sites/test_paginator/content/pages_of_ten.txt b/hyde/tests/sites/test_paginator/content/pages_of_ten.txt new file mode 100644 index 0000000..bcdfbc9 --- /dev/null +++ b/hyde/tests/sites/test_paginator/content/pages_of_ten.txt @@ -0,0 +1,10 @@ +--- +paginator: + sorter: time + size: 10 +--- +{% for res in resource.page.posts %} +{{ res.meta.title }} +{% endfor %} +{{ resource.page.previous.resource.url -}} +{{ resource.page.next.resource.url -}} diff --git a/hyde/tests/sites/test_paginator/layout/root.j2 b/hyde/tests/sites/test_paginator/layout/root.j2 new file mode 100644 index 0000000..9a57f99 --- /dev/null +++ b/hyde/tests/sites/test_paginator/layout/root.j2 @@ -0,0 +1,3 @@ +{% block content -%} + +{%- endblock %} diff --git a/hyde/tests/sites/test_paginator/site.yaml b/hyde/tests/sites/test_paginator/site.yaml new file mode 100644 index 0000000..48a6c93 --- /dev/null +++ b/hyde/tests/sites/test_paginator/site.yaml @@ -0,0 +1,20 @@ +mode: development +media_root: media # Relative path from content folder. +media_url: /media # URL where the media files are served from. +base_url: / # The base url for autogenerated links. +plugins: + - hyde.ext.plugins.meta.MetaPlugin + - hyde.ext.plugins.sorter.SorterPlugin + - hyde.ext.plugins.paginator.PaginatorPlugin +meta: + nodemeta: meta.yaml + created: !!timestamp 2010-01-01 00:00:00 + extends: root.j2 + default_block: content +sorter: + time: + attr: + - meta.created + reverse: true + filters: + source.kind: html