# This is the "dogs" example for justpy # see https://github.com/justpy-org/justpy/blob/master/examples/dogs.py from justpy import * # https://dog.ceo/api/breeds/list/all dict of all breeds under breeds = [ "affenpinscher", "african", "airedale", "akita", "appenzeller", "basenji", "beagle", "bluetick", "borzoi", "bouvier", "boxer", "brabancon", "briard", "bullterrier-staffordshire", "cairn", "cattledog-australian", "chihuahua", "chow", "clumber", "cockapoo", "collie-border", "coonhound", "corgi-cardigan", "cotondetulear", "dachshund", "dalmatian", "deerhound-scottish", "dhole", "dingo", "doberman", "elkhound-norwegian", "entlebucher", "eskimo", "frise-bichon", "germanshepherd", "greyhound-italian", "groenendael", "hound-blood", "hound-english", "hound-ibizan", "hound-walker", "husky", "keeshond", "kelpie", "komondor", "kuvasz", "labrador", "leonberg", "lhasa", "malamute", "malinois", "maltese", "mastiff-bull", "mastiff-tibetan", "mexicanhairless", "mix", "mountain-bernese", "mountain-swiss", "newfoundland", "otterhound", "papillon", "pekinese", "pembroke", "pinscher-miniature", "pointer-german", "pomeranian", "pug", "puggle", "pyrenees", "redbone", "retriever-chesapeake", "retriever-curly", "retriever-flatcoated", "retriever-golden", "ridgeback-rhodesian", "rottweiler", "saluki", "samoyed", "schipperke", "schnauzer-giant", "schnauzer-miniature", "setter-english", "setter-gordon", "setter-irish", "sheepdog-english", "sheepdog-shetland", "shiba", "shihtzu", "spaniel-blenheim", "spaniel-brittany", "spaniel-cocker", "spaniel-irish", "spaniel-japanese", "spaniel-sussex", "spaniel-welsh", "springer-english", "stbernard", "terrier-american", "terrier-australian", "terrier-bedlington", "terrier-border", "terrier-dandie", "terrier-fox", "terrier-irish", "terrier-kerryblue", "terrier-lakeland", "terrier-norfolk", "terrier-norwich", "terrier-patterdale", "terrier-russell", "terrier-scottish", "terrier-sealyham", "terrier-silky", "terrier-tibetan", "terrier-toy", "terrier-westhighland", "terrier-wheaten", "terrier-yorkshire", "vizsla", "weimaraner", "whippet", "wolfhound-irish", ] async def dog_test(_request): """ create a reactive webpage for dog pictures taken from """ wp = QuasarPage() wp.body_style = "overflow: hidden" bp = parse_html( """
Dog Pictures
Click image for next picture
""", a=wp, ) main_image = bp.name_dict["image"] l = Link( href="https://quasar.dev", text="Quasar", target="_blank", classes="text-white" ) bp.name_dict["footer"].add(l) bp.name_dict["tooltip"].disable_events = True main_image.breed = "papillon" breed_select = QBtnDropdown( auto_close=True, split=False, glossy=True, label="Select Breed", icon="fas fa-dog", a=bp.name_dict["toolbar"], ) breed_list = QList(separator=True, dense=True, a=breed_select) async def change_breed(self, msg): main_image.breed = self.breed await change_pic(main_image, msg) breed_select.label = self.breed for breed in breeds: breed_item_html = f""" {breed} """ # breed_item = parse_html(breed_item_html).first() breed_item = parse_html(breed_item_html) breed_item.breed = breed breed_item.on("click", change_breed) breed_list.add(breed_item) def add_thumbnail(self, _msg): """ add a thumbnail """ list_item_html = f""" {self.breed} """ list_item = parse_html(list_item_html) list_item.breed = self.breed list_item.src = self.src list_item.name_dict["delete"].list = bp.name_dict["thumbnail_list"] list_item.name_dict["delete"].list_item = list_item bp.name_dict["thumbnail_list"].add(list_item) def display_thumbnail(self, _msg): """ display a thumbnail """ main_image.src = self.src list_item.on("mouseenter", display_thumbnail) def delete_list_item(self, _msg): """ delete a list item """ self.list.remove(self.list_item) list_item.name_dict["delete"].on("click", delete_list_item) async def change_pic(self, msg): """ change the pictures """ # https://dog.ceo/api/breed/bulldog/french/images/random if "-" in self.breed: b = self.breed.split("-") r = await get(f"https://dog.ceo/api/breed/{b[0]}/{b[1]}/images/random") else: r = await get(f"https://dog.ceo/api/breed/{self.breed}/images/random") self.src = r["message"] add_thumbnail(self, msg) async def next_pic(self, msg): """ react on next picture clicked """ return await change_pic(main_image, msg) # allow clicking an image main_image.on("click", change_pic) bp.name_dict["next_picture"].on("click", next_pic) # initial picture await change_pic(main_image, {}) return wp # initialize the demo from examples.basedemo import Demo Demo("dogs demo", dog_test)