├── .github └── workflows │ └── swift.yml ├── .gitignore ├── EmptyPage.podspec ├── Example ├── .swiftlint.yml ├── EmptyPage.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ └── xcshareddata │ │ └── xcschemes │ │ └── EmptyPage-Example.xcscheme ├── EmptyPage.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ ├── IDEWorkspaceChecks.plist │ │ ├── WorkspaceSettings.xcsettings │ │ └── swiftpm │ │ └── Package.resolved ├── EmptyPage │ ├── AppDelegate.swift │ ├── BaseSection.swift │ ├── DZNEmptyDataSetSection.swift │ ├── DemoSection.swift │ ├── DribbbleSection.swift │ ├── EmptyStore.swift │ ├── Images.xcassets │ │ ├── 404.imageset │ │ │ ├── 404.png │ │ │ └── Contents.json │ │ ├── AppIcon.appiconset │ │ │ ├── Contents.json │ │ │ ├── Icon-60.png │ │ │ ├── Icon-60@2x.png │ │ │ ├── Icon-60@3x.png │ │ │ ├── Icon-76@3x.png │ │ │ ├── Icon-Small@2x.png │ │ │ ├── Icon-Small@3x.png │ │ │ ├── Icon-Spotlight-40.png │ │ │ ├── Icon-Spotlight-40@2x.png │ │ │ └── Icon-Spotlight-40@3x.png │ │ ├── Contents.json │ │ ├── empty-1001.imageset │ │ │ ├── Contents.json │ │ │ └── empty-1001.png │ │ ├── empty-1002.imageset │ │ │ ├── Contents.json │ │ │ └── empty-1002.png │ │ ├── empty.imageset │ │ │ ├── Contents.json │ │ │ └── empty_search@2x.png │ │ ├── icon │ │ │ ├── Contents.json │ │ │ ├── icon_500px.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── icon_500px.png │ │ │ │ └── icon_500px@2x.png │ │ │ ├── icon_airbnb.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── icon_airbnb.png │ │ │ │ └── icon_airbnb@2x.png │ │ │ ├── icon_appstore.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── icon_appstore.png │ │ │ │ └── icon_appstore@2x.png │ │ │ ├── icon_camera.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── icon_camera.png │ │ │ │ └── icon_camera@2x.png │ │ │ ├── icon_dropbox.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── icon_dropbox.png │ │ │ │ └── icon_dropbox@2x.png │ │ │ ├── icon_facebook.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── icon_facebook.png │ │ │ │ └── icon_facebook@2x.png │ │ │ ├── icon_fancy.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── icon_fancy.png │ │ │ │ └── icon_fancy@2x.png │ │ │ ├── icon_foursquare.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── icon_foursquare.png │ │ │ │ └── icon_foursquare@2x.png │ │ │ ├── icon_icloud.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── icon_icloud.png │ │ │ │ └── icon_icloud@2x.png │ │ │ ├── icon_instagram.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── icon_instagram.png │ │ │ │ └── icon_instagram@2x.png │ │ │ ├── icon_itunes_connect.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── icon_itunesconnect.png │ │ │ │ └── icon_itunesconnect@2x.png │ │ │ ├── icon_kickstarter.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── icon_kickstarter.png │ │ │ │ └── icon_kickstarter@2x.png │ │ │ ├── icon_path.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── icon_path.png │ │ │ │ └── icon_path@2x.png │ │ │ ├── icon_photos.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── icon_photos.png │ │ │ │ └── icon_photos@2x.png │ │ │ ├── icon_pinterest.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── icon_pinterest.png │ │ │ │ └── icon_pinterest@2x.png │ │ │ ├── icon_podcasts.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── icon_podcasts.png │ │ │ │ └── icon_podcasts@2x.png │ │ │ ├── icon_remote.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── icon_remote.png │ │ │ │ └── icon_remote@2x.png │ │ │ ├── icon_safari.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── icon_safari.png │ │ │ │ └── icon_safari@2x.png │ │ │ ├── icon_skype.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── icon_skype.png │ │ │ │ └── icon_skype@2x.png │ │ │ ├── icon_slack.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── icon_slack.png │ │ │ │ └── icon_slack@2x.png │ │ │ ├── icon_tumblr.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── icon_tumblr.png │ │ │ │ └── icon_tumblr@2x.png │ │ │ ├── icon_twitter.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── icon_twitter.png │ │ │ │ └── icon_twitter@2x.png │ │ │ ├── icon_vesper.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── icon_vesper.png │ │ │ │ └── icon_vesper@2x.png │ │ │ ├── icon_videos.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── icon_videos.png │ │ │ │ └── icon_videos@2x.png │ │ │ ├── icon_vine.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── icon_vine.png │ │ │ │ └── icon_vine@2x.png │ │ │ ├── icon_whatsapp.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── icon_whatsapp.png │ │ │ │ └── icon_whatsapp@2x.png │ │ │ └── icon_wwdc.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── icon_wwdc.png │ │ │ │ └── icon_wwdc@2x.png │ │ ├── image_animate │ │ │ ├── Contents.json │ │ │ ├── image_animate_0.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_0.png │ │ │ ├── image_animate_1.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_1.png │ │ │ ├── image_animate_10.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_10.png │ │ │ ├── image_animate_11.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_11.png │ │ │ ├── image_animate_12.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_12.png │ │ │ ├── image_animate_13.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_13.png │ │ │ ├── image_animate_14.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_14.png │ │ │ ├── image_animate_15.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_15.png │ │ │ ├── image_animate_16.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_16.png │ │ │ ├── image_animate_17.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_17.png │ │ │ ├── image_animate_18.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_18.png │ │ │ ├── image_animate_19.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_19.png │ │ │ ├── image_animate_2.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_2.png │ │ │ ├── image_animate_20.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_20.png │ │ │ ├── image_animate_21.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_21.png │ │ │ ├── image_animate_22.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_22.png │ │ │ ├── image_animate_23.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_23.png │ │ │ ├── image_animate_24.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_24.png │ │ │ ├── image_animate_25.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_25.png │ │ │ ├── image_animate_26.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_26.png │ │ │ ├── image_animate_27.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_27.png │ │ │ ├── image_animate_28.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_28.png │ │ │ ├── image_animate_29.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_29.png │ │ │ ├── image_animate_3.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_3.png │ │ │ ├── image_animate_30.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_30.png │ │ │ ├── image_animate_31.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_31.png │ │ │ ├── image_animate_32.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_32.png │ │ │ ├── image_animate_33.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_33.png │ │ │ ├── image_animate_34.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_34.png │ │ │ ├── image_animate_35.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_35.png │ │ │ ├── image_animate_36.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_36.png │ │ │ ├── image_animate_37.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_37.png │ │ │ ├── image_animate_38.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_38.png │ │ │ ├── image_animate_39.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_39.png │ │ │ ├── image_animate_4.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_4.png │ │ │ ├── image_animate_40.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_40.png │ │ │ ├── image_animate_41.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_41.png │ │ │ ├── image_animate_42.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_42.png │ │ │ ├── image_animate_43.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_43.png │ │ │ ├── image_animate_44.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_44.png │ │ │ ├── image_animate_45.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_45.png │ │ │ ├── image_animate_46.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_46.png │ │ │ ├── image_animate_47.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_47.png │ │ │ ├── image_animate_5.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_5.png │ │ │ ├── image_animate_6.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_6.png │ │ │ ├── image_animate_7.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_7.png │ │ │ ├── image_animate_8.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_8.png │ │ │ └── image_animate_9.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── image_animate_9.png │ │ ├── load │ │ │ ├── Contents.json │ │ │ ├── load-0.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── load-0.png │ │ │ ├── load-1.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── load-1.png │ │ │ ├── load-2.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── load-2.png │ │ │ ├── load-3.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── load-3.png │ │ │ └── load.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── load.png │ │ ├── logo.imageset │ │ │ ├── Contents.json │ │ │ └── logo.png │ │ └── placeholder │ │ │ ├── Contents.json │ │ │ ├── placeholder_500px.imageset │ │ │ ├── Contents.json │ │ │ ├── placeholder_500px.png │ │ │ └── placeholder_500px@2x.png │ │ │ ├── placeholder_airbnb.imageset │ │ │ ├── Contents.json │ │ │ ├── placeholder_airbnb.png │ │ │ └── placeholder_airbnb@2x.png │ │ │ ├── placeholder_appstore.imageset │ │ │ ├── Contents.json │ │ │ ├── placeholder_appstore.png │ │ │ └── placeholder_appstore@2x.png │ │ │ ├── placeholder_dropbox.imageset │ │ │ ├── Contents.json │ │ │ ├── placeholder_dropbox.png │ │ │ └── placeholder_dropbox@2x.png │ │ │ ├── placeholder_facebook.imageset │ │ │ ├── Contents.json │ │ │ ├── placeholder_facebook.png │ │ │ └── placeholder_facebook@2x.png │ │ │ ├── placeholder_fancy.imageset │ │ │ ├── Contents.json │ │ │ ├── placeholder_fancy.png │ │ │ └── placeholder_fancy@2x.png │ │ │ ├── placeholder_foursquare.imageset │ │ │ ├── Contents.json │ │ │ ├── placeholder_foursquare.png │ │ │ └── placeholder_foursquare@2x.png │ │ │ ├── placeholder_instagram.imageset │ │ │ ├── Contents.json │ │ │ ├── placeholder_instagram.png │ │ │ └── placeholder_instagram@2x.png │ │ │ ├── placeholder_itunes_connect.imageset │ │ │ ├── Contents.json │ │ │ ├── placeholder_itunes_connect.png │ │ │ └── placeholder_itunes_connect@2x.png │ │ │ ├── placeholder_kickstarter.imageset │ │ │ ├── Contents.json │ │ │ ├── placeholder_kickstarter.png │ │ │ └── placeholder_kickstarter@2x.png │ │ │ ├── placeholder_path.imageset │ │ │ ├── Contents.json │ │ │ ├── placeholder_path.png │ │ │ └── placeholder_path@2x.png │ │ │ ├── placeholder_remote.imageset │ │ │ ├── Contents.json │ │ │ ├── placeholder_remote.png │ │ │ └── placeholder_remote@2x.png │ │ │ ├── placeholder_skype.imageset │ │ │ ├── Contents.json │ │ │ ├── placeholder_skype.png │ │ │ └── placeholder_skype@2x.png │ │ │ ├── placeholder_slack.imageset │ │ │ ├── Contents.json │ │ │ ├── placeholder_slack.png │ │ │ └── placeholder_slack@2x.png │ │ │ ├── placeholder_tumblr.imageset │ │ │ ├── Contents.json │ │ │ ├── placeholder_tumblr.png │ │ │ └── placeholder_tumblr@2x.png │ │ │ ├── placeholder_vesper.imageset │ │ │ ├── Contents.json │ │ │ ├── placeholder_vesper.png │ │ │ └── placeholder_vesper@2x.png │ │ │ ├── placeholder_videos.imageset │ │ │ ├── Contents.json │ │ │ ├── placeholder_videos.png │ │ │ └── placeholder_videos@2x.png │ │ │ ├── placeholder_vine.imageset │ │ │ ├── Contents.json │ │ │ ├── placeholder_vine.png │ │ │ └── placeholder_vine@2x.png │ │ │ └── placeholder_whatsapp.imageset │ │ │ ├── Contents.json │ │ │ ├── placeholder_whatsapp.png │ │ │ └── placeholder_whatsapp@2x.png │ ├── IndexCell.swift │ ├── IndexCell.xib │ ├── IndexHeaderView.swift │ ├── IndexHeaderView.xib │ ├── IndexTextCell.swift │ ├── IndexTextCell.xib │ ├── IndexViewController.swift │ ├── Info.plist │ ├── StandardSection.swift │ ├── managers │ │ ├── Example.swift │ │ └── StateManager.swift │ └── tests │ │ ├── TestCollectionViewController.swift │ │ ├── TestMJRefreshCollectionVC.swift │ │ ├── TestReusableView.swift │ │ ├── TestStateViewController.swift │ │ ├── TestStateViewController.xib │ │ └── TestTableViewViewController.swift ├── EmptyPage_Example.entitlements ├── Podfile ├── Podfile.lock └── scripts │ ├── document.sh │ ├── git_config.sh │ ├── license │ ├── license.py │ └── trunk.sh ├── Gemfile ├── Gemfile.lock ├── LICENSE ├── Package.swift ├── README-EN.md ├── README.md ├── Sources ├── Core │ ├── EmptyPage.h │ ├── EmptyPage.swift │ ├── configs │ │ └── EmptyPageConfiguration.swift │ ├── extensions │ │ ├── EmptyPage+UICollectionView.swift │ │ ├── EmptyPage+UIScrollView.swift │ │ ├── EmptyPage+UITableView.swift │ │ ├── EmptyPage+UIView.swift │ │ └── EmptyPageDelegate.swift │ ├── managers │ │ ├── EmptyPageManager+UICollectionView.swift │ │ ├── EmptyPageManager+UIScrollView.swift │ │ ├── EmptyPageManager+UITableView.swift │ │ ├── EmptyPageManager+UIView.swift │ │ ├── EmptyPageViewManagerProtocol.swift │ │ └── EmptyPageWeakBox.swift │ └── swizzings │ │ ├── Empty+Runtime.swift │ │ ├── Empty+UICollectionView.swift │ │ ├── Empty+UITableView.swift │ │ └── Empty+UIView.swift ├── Standard │ ├── EmptyPageForButton.swift │ ├── EmptyPageForImage.swift │ ├── EmptyPageForStandard.swift │ ├── EmptyPageForText.swift │ ├── EmptyPageView.swift │ └── EmptyView+UIScrollView.swift └── managers │ └── StateManager │ ├── EmptyPageCollectionStateManager.swift │ ├── EmptyPageScrollViewStateManager.swift │ ├── EmptyPageStateProtocol.swift │ ├── EmptyPageStateScorllableProtocol.swift │ ├── EmptyPageTableStateManager.swift │ └── EmptyPageViewStateManager.swift └── document ├── Classes.html ├── Classes ├── EmptyPage.html ├── EmptyPageCollectionViewManager.html ├── EmptyPageConfig.html ├── EmptyPageDelegate.html ├── EmptyPageForButton.html ├── EmptyPageForButton │ └── Style.html ├── EmptyPageForImage.html ├── EmptyPageForImage │ └── HSpaceType.html ├── EmptyPageForStandard.html ├── EmptyPageForStandard │ ├── HSpaceType.html │ ├── HeightType.html │ ├── LayoutType.html │ ├── VSpaceType.html │ └── ViewType.html ├── EmptyPageForText.html ├── EmptyPageForText │ └── HSpaceType.html ├── EmptyPageScrollViewManager.html ├── EmptyPageTableViewManager.html ├── EmptyPageView.html ├── EmptyPageView │ ├── ContentViewLayout.html │ ├── HorizontalLayout.html │ ├── Template.html │ └── VerticalLayout.html └── EmptyPageViewManager.html ├── Extensions.html ├── Extensions ├── UICollectionView.html ├── UIScrollView.html └── UITableView.html ├── Protocols.html ├── Protocols ├── EmptyPageCompatible.html └── EmptyPageTemplateProtocol.html ├── badge.svg ├── css ├── highlight.css └── jazzy.css ├── docsets ├── EmptyPage.docset │ └── Contents │ │ ├── Info.plist │ │ └── Resources │ │ ├── Documents │ │ ├── Classes.html │ │ ├── Classes │ │ │ ├── EmptyPage.html │ │ │ ├── EmptyPageCollectionViewManager.html │ │ │ ├── EmptyPageConfig.html │ │ │ ├── EmptyPageDelegate.html │ │ │ ├── EmptyPageForButton.html │ │ │ ├── EmptyPageForButton │ │ │ │ └── Style.html │ │ │ ├── EmptyPageForImage.html │ │ │ ├── EmptyPageForImage │ │ │ │ └── HSpaceType.html │ │ │ ├── EmptyPageForStandard.html │ │ │ ├── EmptyPageForStandard │ │ │ │ ├── HSpaceType.html │ │ │ │ ├── HeightType.html │ │ │ │ ├── LayoutType.html │ │ │ │ ├── VSpaceType.html │ │ │ │ └── ViewType.html │ │ │ ├── EmptyPageForText.html │ │ │ ├── EmptyPageForText │ │ │ │ └── HSpaceType.html │ │ │ ├── EmptyPageScrollViewManager.html │ │ │ ├── EmptyPageTableViewManager.html │ │ │ ├── EmptyPageView.html │ │ │ ├── EmptyPageView │ │ │ │ ├── ContentViewLayout.html │ │ │ │ ├── HorizontalLayout.html │ │ │ │ ├── Template.html │ │ │ │ └── VerticalLayout.html │ │ │ └── EmptyPageViewManager.html │ │ ├── Extensions.html │ │ ├── Extensions │ │ │ ├── UICollectionView.html │ │ │ ├── UIScrollView.html │ │ │ └── UITableView.html │ │ ├── Protocols.html │ │ ├── Protocols │ │ │ ├── EmptyPageCompatible.html │ │ │ └── EmptyPageTemplateProtocol.html │ │ ├── badge.svg │ │ ├── css │ │ │ ├── highlight.css │ │ │ └── jazzy.css │ │ ├── img │ │ │ ├── carat.png │ │ │ ├── dash.png │ │ │ ├── gh.png │ │ │ └── spinner.gif │ │ ├── index.html │ │ ├── js │ │ │ ├── jazzy.js │ │ │ ├── jazzy.search.js │ │ │ ├── jquery.min.js │ │ │ ├── lunr.min.js │ │ │ └── typeahead.jquery.js │ │ ├── search.json │ │ └── undocumented.json │ │ └── docSet.dsidx └── EmptyPage.tgz ├── img ├── carat.png ├── dash.png ├── gh.png └── spinner.gif ├── index.html ├── js ├── jazzy.js ├── jazzy.search.js ├── jquery.min.js ├── lunr.min.js └── typeahead.jquery.js ├── search.json └── undocumented.json /.github/workflows/swift.yml: -------------------------------------------------------------------------------- 1 | name: build 2 | 3 | on: [push, pull_request] 4 | 5 | jobs: 6 | build: 7 | 8 | runs-on: macos-latest 9 | strategy: 10 | matrix: 11 | destination: ['iOS Simulator,name=iPhone 8'] 12 | swift-version: [5.0, 4.2, 4.0] 13 | 14 | steps: 15 | - uses: actions/checkout@v2 16 | 17 | - name: setup-cocoapods 18 | uses: maxim-lobanov/setup-cocoapods@v1.1 19 | with: 20 | podfile-path: Example/Podfile.lock 21 | 22 | - name: Install Dependencies 23 | run: | 24 | cd Example 25 | pod install --repo-update 26 | 27 | - name: Xcodebuild Action 28 | uses: sersoft-gmbh/xcodebuild-action@v1.1 29 | with: 30 | # The path to the xcworkspace to build. Mutually exclusive with `project`. 31 | workspace: Example/EmptyPage.xcworkspace 32 | # The scheme to build. Required when using a workspace. 33 | scheme: EmptyPage-Example 34 | # The destination specifier to build. 35 | destination: ${{ matrix.destination }} 36 | # The action to perform (e.g. build, test, ...). 37 | action: build 38 | # Whether the output of xcodebuild should be forwarded to xcpretty. 39 | use-xcpretty: true 40 | env: 41 | destination: ${{ matrix.destination }} 42 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # OS X 2 | .DS_Store 3 | 4 | # Xcode 5 | build/ 6 | *.pbxuser 7 | !default.pbxuser 8 | *.mode1v3 9 | !default.mode1v3 10 | *.mode2v3 11 | !default.mode2v3 12 | *.perspectivev3 13 | !default.perspectivev3 14 | xcuserdata/ 15 | *.xccheckout 16 | profile 17 | *.moved-aside 18 | DerivedData 19 | *.hmap 20 | *.ipa 21 | 22 | # Bundler 23 | .bundle 24 | 25 | Carthage 26 | # We recommend against adding the Pods directory to your .gitignore. However 27 | # you should judge for yourself, the pros and cons are mentioned at: 28 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control 29 | # 30 | # Note: if you ignore the Pods directory, make sure to uncomment 31 | # `pod install` in .travis.yml 32 | # 33 | Pods/ 34 | -------------------------------------------------------------------------------- /EmptyPage.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = 'EmptyPage' 3 | s.version = '4.1.0' 4 | s.summary = 'iOS - 轻量级空白页占位图框架...' 5 | 6 | s.homepage = 'https://github.com/linhay/EmptyPage' 7 | s.license = { :type => 'MIT', :file => 'LICENSE' } 8 | s.author = { 'linhay' => 'is.linhay@outlook.com' } 9 | s.source = { :git => 'https://github.com/linhay/EmptyPage.git', :tag => s.version.to_s } 10 | 11 | s.swift_versions = ['5.3'] 12 | 13 | s.ios.deployment_target = '9.0' 14 | s.requires_arc = true 15 | 16 | s.subspec 'core' do |sp| 17 | sp.source_files = ['Sources/core/*.{h,swift}', 'Sources/core/**/*.{h,swift}'] 18 | end 19 | 20 | s.subspec 'managers' do |sp| 21 | sp.dependency 'EmptyPage/core' 22 | sp.source_files = [ 23 | 'Sources/managers/*.{h,swift}', 24 | 'Sources/managers/**/**/*.{h,swift}', 25 | 'Sources/managers/**/*.{h,swift}' 26 | ] 27 | end 28 | 29 | s.subspec 'templates' do |sp| 30 | sp.dependency 'EmptyPage/core' 31 | sp.source_files = 'Sources/standard/*.{swift}' 32 | end 33 | 34 | end 35 | 36 | -------------------------------------------------------------------------------- /Example/.swiftlint.yml: -------------------------------------------------------------------------------- 1 | disabled_rules: # rule identifiers to exclude from running 2 | - line_length 3 | - identifier_name 4 | - cyclomatic_complexity 5 | - function_body_length 6 | - type_body_length 7 | - force_cast 8 | - force_try 9 | - function_parameter_count 10 | - shorthand_operator 11 | - file_length 12 | - type_name 13 | - nesting 14 | - large_tuple 15 | - trailing_whitespace 16 | excluded: 17 | - Pods 18 | included: 19 | - ../Sources 20 | -------------------------------------------------------------------------------- /Example/EmptyPage.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Example/EmptyPage.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Example/EmptyPage.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Example/EmptyPage.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Example/EmptyPage.xcworkspace/xcshareddata/swiftpm/Package.resolved: -------------------------------------------------------------------------------- 1 | { 2 | "pins" : [ 3 | { 4 | "identity" : "stem", 5 | "kind" : "remoteSourceControl", 6 | "location" : "https://github.com/linhay/Stem.git", 7 | "state" : { 8 | "revision" : "311f1357e4c8463207c666a40dc2929b51438a31", 9 | "version" : "0.0.41" 10 | } 11 | } 12 | ], 13 | "version" : 2 14 | } 15 | -------------------------------------------------------------------------------- /Example/EmptyPage/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // EmptyPage 4 | // 5 | // Created by is.linhay@outlook.com on 01/09/2018. 6 | // Copyright (c) 2018 is.linhay@outlook.com. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import EmptyPage 11 | import Reachability 12 | 13 | class AppManager { 14 | 15 | static let shared = AppManager() 16 | 17 | let reachability = try! Reachability() 18 | 19 | func start() { 20 | startReachability() 21 | } 22 | 23 | func startReachability() { 24 | reachability.whenReachable = { reachability in 25 | if reachability.connection == .wifi { 26 | print("Reachable via WiFi") 27 | } else { 28 | print("Reachable via Cellular") 29 | } 30 | } 31 | reachability.whenUnreachable = { _ in 32 | print("Not reachable") 33 | } 34 | 35 | do { 36 | try reachability.startNotifier() 37 | } catch { 38 | print("Unable to start notifier") 39 | } 40 | } 41 | 42 | } 43 | 44 | @UIApplicationMain 45 | class AppDelegate: UIResponder, UIApplicationDelegate { 46 | 47 | var window: UIWindow? 48 | 49 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 50 | 51 | UINavigationItem.st.isHideBackButtonText = true 52 | UINavigationBar.appearance().tintColor = .black 53 | UINavigationBar.appearance().isTranslucent = false 54 | UINavigationBar.appearance().shadowImage = UIImage() 55 | 56 | AppManager.shared.start() 57 | window = UIWindow(frame: UIScreen.main.bounds) 58 | window?.rootViewController = UINavigationController(rootViewController: IndexViewController()) 59 | window?.makeKeyAndVisible() 60 | return true 61 | } 62 | 63 | } 64 | 65 | -------------------------------------------------------------------------------- /Example/EmptyPage/BaseSection.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BaseSection.swift 3 | // EmptyPage_Example 4 | // 5 | // Created by 林翰 on 2020/8/30. 6 | // Copyright © 2020 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import Stem 11 | 12 | class BaseSection: SingleTypeSection { 13 | 14 | var title: String { "" } 15 | 16 | var rawModels: [IndexTextCell.Model] { [] } 17 | 18 | override init(_ models: [IndexTextCellModelProtocol] = []) { 19 | super.init(models) 20 | config(models: rawModels) 21 | } 22 | 23 | override func config(sectionView: UICollectionView) { 24 | super.config(sectionView: sectionView) 25 | sectionView.st.register(IndexHeaderView.self, for: .header) 26 | } 27 | 28 | override var headerSize: CGSize { 29 | return IndexHeaderView.preferredSize(limit: sectionView.bounds.size, model: nil) 30 | } 31 | 32 | override var headerView: UICollectionReusableView? { 33 | let view = dequeue(kind: .header) as IndexHeaderView 34 | view.config(title) 35 | view.tapEvent.delegate(on: self) { (self, _) in 36 | self.config(models: self.models.count > 1 ? [self.rawModels[0]] : self.rawModels) 37 | self.reload() 38 | } 39 | return view 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /Example/EmptyPage/DemoSection.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DemoSection.swift 3 | // EmptyPage_Example 4 | // 5 | // Created by 林翰 on 2020/8/30. 6 | // Copyright © 2020 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class DemoSection: BaseSection { 12 | 13 | override var title: String { "Demo" } 14 | 15 | override var rawModels: [IndexTextCell.Model] { 16 | DemoSet.allCases 17 | } 18 | 19 | override func didSelectItem(at row: Int) { 20 | guard let type = DemoSet.allCases.value(at: row) else { 21 | return 22 | } 23 | switch type { 24 | case .work_tableView_dataSource: 25 | let vc = TestTableViewViewController() 26 | sectionView.st.viewController?.st.push(vc) 27 | case .work_collectionView_dataSource: 28 | let vc = TestCollectionViewController() 29 | sectionView.st.viewController?.st.push(vc) 30 | case .work_mjRefresh_cansScroll: 31 | let vc = TestMJRefreshCollectionVC() 32 | vc.config(canScroll: true) 33 | sectionView.st.viewController?.st.push(vc) 34 | case .work_mjRefresh_cantScroll: 35 | let vc = TestMJRefreshCollectionVC() 36 | vc.config(canScroll: false) 37 | sectionView.st.viewController?.st.push(vc) 38 | case .work_manager_noNetwork: 39 | let vc = TestStateViewController() 40 | sectionView.st.viewController?.st.push(vc) 41 | } 42 | 43 | } 44 | 45 | } 46 | 47 | enum DemoSet: String, CaseIterable, IndexTextCellModelProtocol { 48 | 49 | case work_collectionView_dataSource = "编辑: UICollectionView" 50 | case work_tableView_dataSource = "编辑: UITableView" 51 | case work_mjRefresh_cansScroll = "MJRefresh 联动: 空页面时可滚动" 52 | case work_mjRefresh_cantScroll = "MJRefresh 联动: 空页面时不可滚动" 53 | case work_manager_noNetwork = "manager: 配置自动切换无网络状态空页面" 54 | 55 | var title: String { rawValue } 56 | var text: String { "" } 57 | 58 | } 59 | -------------------------------------------------------------------------------- /Example/EmptyPage/DribbbleSection.swift: -------------------------------------------------------------------------------- 1 | // 2 | // IndexDribbbleSection.swift 3 | // EmptyPage_Example 4 | // 5 | // Created by 林翰 on 2020/6/17. 6 | // Copyright © 2020 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import Stem 11 | import EmptyPage 12 | 13 | class DribbbleSection: BaseSection { 14 | 15 | override var title: String { "Dribbble" } 16 | override var rawModels: [IndexTextCell.Model] { Dribbble.allCases } 17 | 18 | override func didSelectItem(at row: Int) { 19 | guard let item = Dribbble.allCases.value(at: row) else { 20 | return 21 | } 22 | 23 | let vc = UITableViewController() 24 | vc.tableView.backgroundColor = .white 25 | vc.view.backgroundColor = .white 26 | vc.tableView.separatorStyle = .none 27 | vc.tableView.ep.set(emptyView: item.view()) 28 | sectionView.st.viewController?.st.push(vc) 29 | } 30 | 31 | } 32 | 33 | 34 | enum Dribbble: String, CaseIterable, IndexTextCellModelProtocol { 35 | case illustration 36 | var title: String { rawValue } 37 | var text: String { link } 38 | var website: String { "dribbble.com" } 39 | var link: String { 40 | switch self { 41 | case .illustration: 42 | return "https://dribbble.com/shots/2586577-404-page-Illustration" 43 | } 44 | } 45 | func view() -> EmptyPageView { 46 | switch self { 47 | case .illustration: 48 | return EmptyPageView.Template.standard 49 | .config(imageView: { $0.set(image: UIImage(named: "404")!) }) 50 | .layout(view: .titleLabel, types: .afterSpac(0)) 51 | .config(titleLabel: { 52 | $0.set(text: "FILE NOT FOUND", 53 | color: UIColor("#849aac"), 54 | font: UIFont.boldSystemFont(ofSize: 18)) 55 | }) 56 | .config(textLabel: { 57 | $0.set(text: "Lorem ipsum dolor sit amet.\nconectetur adipscing elit sed do eiusmod", 58 | color: UIColor("#c5cfd7")) 59 | }) 60 | .config(button: { 61 | $0.isHidden = true 62 | }) 63 | .mix() 64 | .set(backgroundColor: UIColor("#f5f7f9")) 65 | } 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/404.imageset/404.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/404.imageset/404.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/404.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "404.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "Icon-Spotlight-40.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "Icon-60.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "Icon-Small@2x.png", 19 | "scale" : "2x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "Icon-Small@3x.png", 25 | "scale" : "3x" 26 | }, 27 | { 28 | "size" : "40x40", 29 | "idiom" : "iphone", 30 | "filename" : "Icon-Spotlight-40@2x.png", 31 | "scale" : "2x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "Icon-Spotlight-40@3x.png", 37 | "scale" : "3x" 38 | }, 39 | { 40 | "size" : "60x60", 41 | "idiom" : "iphone", 42 | "filename" : "Icon-60@2x.png", 43 | "scale" : "2x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "Icon-60@3x.png", 49 | "scale" : "3x" 50 | }, 51 | { 52 | "size" : "1024x1024", 53 | "idiom" : "ios-marketing", 54 | "filename" : "Icon-76@3x.png", 55 | "scale" : "1x" 56 | } 57 | ], 58 | "info" : { 59 | "version" : 1, 60 | "author" : "xcode" 61 | } 62 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/AppIcon.appiconset/Icon-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/AppIcon.appiconset/Icon-60.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/AppIcon.appiconset/Icon-76@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/AppIcon.appiconset/Icon-76@3x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/AppIcon.appiconset/Icon-Small@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/AppIcon.appiconset/Icon-Small@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/AppIcon.appiconset/Icon-Small@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/AppIcon.appiconset/Icon-Small@3x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/AppIcon.appiconset/Icon-Spotlight-40@3x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/empty-1001.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "scale" : "2x" 10 | }, 11 | { 12 | "idiom" : "universal", 13 | "filename" : "empty-1001.png", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/empty-1001.imageset/empty-1001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/empty-1001.imageset/empty-1001.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/empty-1002.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "empty-1002.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/empty-1002.imageset/empty-1002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/empty-1002.imageset/empty-1002.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/empty.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "empty_search@2x.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/empty.imageset/empty_search@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/empty.imageset/empty_search@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_500px.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_500px.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_500px@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_500px.imageset/icon_500px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_500px.imageset/icon_500px.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_500px.imageset/icon_500px@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_500px.imageset/icon_500px@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_airbnb.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_airbnb.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_airbnb@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_airbnb.imageset/icon_airbnb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_airbnb.imageset/icon_airbnb.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_airbnb.imageset/icon_airbnb@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_airbnb.imageset/icon_airbnb@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_appstore.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_appstore.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_appstore@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_appstore.imageset/icon_appstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_appstore.imageset/icon_appstore.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_appstore.imageset/icon_appstore@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_appstore.imageset/icon_appstore@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_camera.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_camera.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_camera@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_camera.imageset/icon_camera.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_camera.imageset/icon_camera.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_camera.imageset/icon_camera@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_camera.imageset/icon_camera@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_dropbox.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_dropbox.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_dropbox@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_dropbox.imageset/icon_dropbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_dropbox.imageset/icon_dropbox.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_dropbox.imageset/icon_dropbox@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_dropbox.imageset/icon_dropbox@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_facebook.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_facebook.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_facebook@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_facebook.imageset/icon_facebook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_facebook.imageset/icon_facebook.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_facebook.imageset/icon_facebook@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_facebook.imageset/icon_facebook@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_fancy.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_fancy.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_fancy@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_fancy.imageset/icon_fancy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_fancy.imageset/icon_fancy.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_fancy.imageset/icon_fancy@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_fancy.imageset/icon_fancy@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_foursquare.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_foursquare.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_foursquare@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_foursquare.imageset/icon_foursquare.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_foursquare.imageset/icon_foursquare.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_foursquare.imageset/icon_foursquare@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_foursquare.imageset/icon_foursquare@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_icloud.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_icloud.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_icloud@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_icloud.imageset/icon_icloud.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_icloud.imageset/icon_icloud.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_icloud.imageset/icon_icloud@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_icloud.imageset/icon_icloud@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_instagram.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_instagram.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_instagram@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_instagram.imageset/icon_instagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_instagram.imageset/icon_instagram.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_instagram.imageset/icon_instagram@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_instagram.imageset/icon_instagram@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_itunes_connect.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_itunesconnect.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_itunesconnect@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_itunes_connect.imageset/icon_itunesconnect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_itunes_connect.imageset/icon_itunesconnect.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_itunes_connect.imageset/icon_itunesconnect@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_itunes_connect.imageset/icon_itunesconnect@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_kickstarter.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_kickstarter.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_kickstarter@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_kickstarter.imageset/icon_kickstarter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_kickstarter.imageset/icon_kickstarter.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_kickstarter.imageset/icon_kickstarter@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_kickstarter.imageset/icon_kickstarter@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_path.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_path.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_path@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_path.imageset/icon_path.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_path.imageset/icon_path.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_path.imageset/icon_path@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_path.imageset/icon_path@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_photos.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_photos.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_photos@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_photos.imageset/icon_photos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_photos.imageset/icon_photos.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_photos.imageset/icon_photos@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_photos.imageset/icon_photos@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_pinterest.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_pinterest.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_pinterest@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_pinterest.imageset/icon_pinterest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_pinterest.imageset/icon_pinterest.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_pinterest.imageset/icon_pinterest@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_pinterest.imageset/icon_pinterest@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_podcasts.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_podcasts.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_podcasts@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_podcasts.imageset/icon_podcasts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_podcasts.imageset/icon_podcasts.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_podcasts.imageset/icon_podcasts@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_podcasts.imageset/icon_podcasts@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_remote.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_remote.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_remote@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_remote.imageset/icon_remote.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_remote.imageset/icon_remote.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_remote.imageset/icon_remote@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_remote.imageset/icon_remote@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_safari.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_safari.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_safari@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_safari.imageset/icon_safari.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_safari.imageset/icon_safari.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_safari.imageset/icon_safari@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_safari.imageset/icon_safari@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_skype.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_skype.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_skype@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_skype.imageset/icon_skype.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_skype.imageset/icon_skype.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_skype.imageset/icon_skype@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_skype.imageset/icon_skype@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_slack.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_slack.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_slack@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_slack.imageset/icon_slack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_slack.imageset/icon_slack.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_slack.imageset/icon_slack@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_slack.imageset/icon_slack@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_tumblr.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_tumblr.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_tumblr@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_tumblr.imageset/icon_tumblr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_tumblr.imageset/icon_tumblr.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_tumblr.imageset/icon_tumblr@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_tumblr.imageset/icon_tumblr@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_twitter.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_twitter.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_twitter@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_twitter.imageset/icon_twitter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_twitter.imageset/icon_twitter.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_twitter.imageset/icon_twitter@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_twitter.imageset/icon_twitter@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_vesper.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_vesper.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_vesper@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_vesper.imageset/icon_vesper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_vesper.imageset/icon_vesper.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_vesper.imageset/icon_vesper@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_vesper.imageset/icon_vesper@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_videos.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_videos.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_videos@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_videos.imageset/icon_videos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_videos.imageset/icon_videos.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_videos.imageset/icon_videos@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_videos.imageset/icon_videos@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_vine.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_vine.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_vine@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_vine.imageset/icon_vine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_vine.imageset/icon_vine.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_vine.imageset/icon_vine@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_vine.imageset/icon_vine@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_whatsapp.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_whatsapp.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_whatsapp@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_whatsapp.imageset/icon_whatsapp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_whatsapp.imageset/icon_whatsapp.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_whatsapp.imageset/icon_whatsapp@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_whatsapp.imageset/icon_whatsapp@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_wwdc.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_wwdc.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_wwdc@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_wwdc.imageset/icon_wwdc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_wwdc.imageset/icon_wwdc.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/icon/icon_wwdc.imageset/icon_wwdc@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/icon/icon_wwdc.imageset/icon_wwdc@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_0.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_0.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_0.imageset/image_animate_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_0.imageset/image_animate_0.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_1.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_1.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_1.imageset/image_animate_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_1.imageset/image_animate_1.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_10.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_10.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_10.imageset/image_animate_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_10.imageset/image_animate_10.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_11.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_11.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_11.imageset/image_animate_11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_11.imageset/image_animate_11.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_12.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_12.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_12.imageset/image_animate_12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_12.imageset/image_animate_12.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_13.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_13.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_13.imageset/image_animate_13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_13.imageset/image_animate_13.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_14.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_14.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_14.imageset/image_animate_14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_14.imageset/image_animate_14.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_15.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_15.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_15.imageset/image_animate_15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_15.imageset/image_animate_15.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_16.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_16.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_16.imageset/image_animate_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_16.imageset/image_animate_16.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_17.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_17.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_17.imageset/image_animate_17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_17.imageset/image_animate_17.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_18.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_18.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_18.imageset/image_animate_18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_18.imageset/image_animate_18.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_19.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_19.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_19.imageset/image_animate_19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_19.imageset/image_animate_19.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_2.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_2.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_2.imageset/image_animate_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_2.imageset/image_animate_2.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_20.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_20.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_20.imageset/image_animate_20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_20.imageset/image_animate_20.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_21.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_21.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_21.imageset/image_animate_21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_21.imageset/image_animate_21.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_22.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_22.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_22.imageset/image_animate_22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_22.imageset/image_animate_22.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_23.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_23.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_23.imageset/image_animate_23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_23.imageset/image_animate_23.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_24.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_24.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_24.imageset/image_animate_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_24.imageset/image_animate_24.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_25.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_25.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_25.imageset/image_animate_25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_25.imageset/image_animate_25.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_26.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_26.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_26.imageset/image_animate_26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_26.imageset/image_animate_26.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_27.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_27.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_27.imageset/image_animate_27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_27.imageset/image_animate_27.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_28.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_28.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_28.imageset/image_animate_28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_28.imageset/image_animate_28.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_29.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_29.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_29.imageset/image_animate_29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_29.imageset/image_animate_29.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_3.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_3.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_3.imageset/image_animate_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_3.imageset/image_animate_3.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_30.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_30.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_30.imageset/image_animate_30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_30.imageset/image_animate_30.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_31.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_31.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_31.imageset/image_animate_31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_31.imageset/image_animate_31.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_32.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_32.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_32.imageset/image_animate_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_32.imageset/image_animate_32.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_33.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_33.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_33.imageset/image_animate_33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_33.imageset/image_animate_33.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_34.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_34.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_34.imageset/image_animate_34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_34.imageset/image_animate_34.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_35.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_35.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_35.imageset/image_animate_35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_35.imageset/image_animate_35.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_36.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_36.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_36.imageset/image_animate_36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_36.imageset/image_animate_36.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_37.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_37.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_37.imageset/image_animate_37.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_37.imageset/image_animate_37.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_38.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_38.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_38.imageset/image_animate_38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_38.imageset/image_animate_38.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_39.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_39.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_39.imageset/image_animate_39.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_39.imageset/image_animate_39.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_4.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_4.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_4.imageset/image_animate_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_4.imageset/image_animate_4.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_40.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_40.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_40.imageset/image_animate_40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_40.imageset/image_animate_40.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_41.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_41.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_41.imageset/image_animate_41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_41.imageset/image_animate_41.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_42.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_42.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_42.imageset/image_animate_42.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_42.imageset/image_animate_42.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_43.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_43.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_43.imageset/image_animate_43.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_43.imageset/image_animate_43.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_44.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_44.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_44.imageset/image_animate_44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_44.imageset/image_animate_44.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_45.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_45.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_45.imageset/image_animate_45.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_45.imageset/image_animate_45.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_46.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_46.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_46.imageset/image_animate_46.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_46.imageset/image_animate_46.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_47.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_47.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_47.imageset/image_animate_47.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_47.imageset/image_animate_47.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_5.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_5.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_5.imageset/image_animate_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_5.imageset/image_animate_5.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_6.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_6.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_6.imageset/image_animate_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_6.imageset/image_animate_6.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_7.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_7.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_7.imageset/image_animate_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_7.imageset/image_animate_7.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_8.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_8.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_8.imageset/image_animate_8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_8.imageset/image_animate_8.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_9.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "image_animate_9.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/image_animate/image_animate_9.imageset/image_animate_9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/image_animate/image_animate_9.imageset/image_animate_9.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/load/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/load/load-0.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "load-0.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/load/load-0.imageset/load-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/load/load-0.imageset/load-0.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/load/load-1.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "load-1.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/load/load-1.imageset/load-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/load/load-1.imageset/load-1.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/load/load-2.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "load-2.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/load/load-2.imageset/load-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/load/load-2.imageset/load-2.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/load/load-3.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "load-3.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/load/load-3.imageset/load-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/load/load-3.imageset/load-3.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/load/load.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "load.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/load/load.imageset/load.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/load/load.imageset/load.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/logo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "logo.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/logo.imageset/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/logo.imageset/logo.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_500px.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "placeholder_500px.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "placeholder_500px@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_500px.imageset/placeholder_500px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/placeholder/placeholder_500px.imageset/placeholder_500px.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_500px.imageset/placeholder_500px@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/placeholder/placeholder_500px.imageset/placeholder_500px@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_airbnb.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "placeholder_airbnb.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "placeholder_airbnb@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_airbnb.imageset/placeholder_airbnb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/placeholder/placeholder_airbnb.imageset/placeholder_airbnb.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_airbnb.imageset/placeholder_airbnb@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/placeholder/placeholder_airbnb.imageset/placeholder_airbnb@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_appstore.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "placeholder_appstore.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "placeholder_appstore@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_appstore.imageset/placeholder_appstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/placeholder/placeholder_appstore.imageset/placeholder_appstore.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_appstore.imageset/placeholder_appstore@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/placeholder/placeholder_appstore.imageset/placeholder_appstore@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_dropbox.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "placeholder_dropbox.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "placeholder_dropbox@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_dropbox.imageset/placeholder_dropbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/placeholder/placeholder_dropbox.imageset/placeholder_dropbox.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_dropbox.imageset/placeholder_dropbox@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/placeholder/placeholder_dropbox.imageset/placeholder_dropbox@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_facebook.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "placeholder_facebook.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "placeholder_facebook@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_facebook.imageset/placeholder_facebook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/placeholder/placeholder_facebook.imageset/placeholder_facebook.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_facebook.imageset/placeholder_facebook@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/placeholder/placeholder_facebook.imageset/placeholder_facebook@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_fancy.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "placeholder_fancy.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "placeholder_fancy@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_fancy.imageset/placeholder_fancy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/placeholder/placeholder_fancy.imageset/placeholder_fancy.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_fancy.imageset/placeholder_fancy@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/placeholder/placeholder_fancy.imageset/placeholder_fancy@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_foursquare.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "placeholder_foursquare.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "placeholder_foursquare@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_foursquare.imageset/placeholder_foursquare.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/placeholder/placeholder_foursquare.imageset/placeholder_foursquare.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_foursquare.imageset/placeholder_foursquare@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/placeholder/placeholder_foursquare.imageset/placeholder_foursquare@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_instagram.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "placeholder_instagram.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "placeholder_instagram@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_instagram.imageset/placeholder_instagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/placeholder/placeholder_instagram.imageset/placeholder_instagram.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_instagram.imageset/placeholder_instagram@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/placeholder/placeholder_instagram.imageset/placeholder_instagram@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_itunes_connect.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "placeholder_itunes_connect.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "placeholder_itunes_connect@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_itunes_connect.imageset/placeholder_itunes_connect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/placeholder/placeholder_itunes_connect.imageset/placeholder_itunes_connect.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_itunes_connect.imageset/placeholder_itunes_connect@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/placeholder/placeholder_itunes_connect.imageset/placeholder_itunes_connect@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_kickstarter.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "placeholder_kickstarter.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "placeholder_kickstarter@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_kickstarter.imageset/placeholder_kickstarter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/placeholder/placeholder_kickstarter.imageset/placeholder_kickstarter.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_kickstarter.imageset/placeholder_kickstarter@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/placeholder/placeholder_kickstarter.imageset/placeholder_kickstarter@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_path.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "placeholder_path.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "placeholder_path@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_path.imageset/placeholder_path.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/placeholder/placeholder_path.imageset/placeholder_path.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_path.imageset/placeholder_path@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/placeholder/placeholder_path.imageset/placeholder_path@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_remote.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "placeholder_remote.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "placeholder_remote@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_remote.imageset/placeholder_remote.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/placeholder/placeholder_remote.imageset/placeholder_remote.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_remote.imageset/placeholder_remote@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/placeholder/placeholder_remote.imageset/placeholder_remote@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_skype.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "placeholder_skype.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "placeholder_skype@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_skype.imageset/placeholder_skype.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/placeholder/placeholder_skype.imageset/placeholder_skype.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_skype.imageset/placeholder_skype@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/placeholder/placeholder_skype.imageset/placeholder_skype@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_slack.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "placeholder_slack.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "placeholder_slack@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_slack.imageset/placeholder_slack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/placeholder/placeholder_slack.imageset/placeholder_slack.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_slack.imageset/placeholder_slack@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/placeholder/placeholder_slack.imageset/placeholder_slack@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_tumblr.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "placeholder_tumblr.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "placeholder_tumblr@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_tumblr.imageset/placeholder_tumblr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/placeholder/placeholder_tumblr.imageset/placeholder_tumblr.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_tumblr.imageset/placeholder_tumblr@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/placeholder/placeholder_tumblr.imageset/placeholder_tumblr@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_vesper.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "placeholder_vesper.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "placeholder_vesper@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_vesper.imageset/placeholder_vesper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/placeholder/placeholder_vesper.imageset/placeholder_vesper.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_vesper.imageset/placeholder_vesper@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/placeholder/placeholder_vesper.imageset/placeholder_vesper@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_videos.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "placeholder_videos.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "placeholder_videos@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_videos.imageset/placeholder_videos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/placeholder/placeholder_videos.imageset/placeholder_videos.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_videos.imageset/placeholder_videos@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/placeholder/placeholder_videos.imageset/placeholder_videos@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_vine.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "placeholder_vine.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "placeholder_vine@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_vine.imageset/placeholder_vine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/placeholder/placeholder_vine.imageset/placeholder_vine.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_vine.imageset/placeholder_vine@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/placeholder/placeholder_vine.imageset/placeholder_vine@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_whatsapp.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "placeholder_whatsapp.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "placeholder_whatsapp@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_whatsapp.imageset/placeholder_whatsapp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/placeholder/placeholder_whatsapp.imageset/placeholder_whatsapp.png -------------------------------------------------------------------------------- /Example/EmptyPage/Images.xcassets/placeholder/placeholder_whatsapp.imageset/placeholder_whatsapp@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/Example/EmptyPage/Images.xcassets/placeholder/placeholder_whatsapp.imageset/placeholder_whatsapp@2x.png -------------------------------------------------------------------------------- /Example/EmptyPage/IndexCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // IndexCell.swift 3 | // EmptyPage_Example 4 | // 5 | // Created by 林翰 on 2020/6/17. 6 | // Copyright © 2020 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import Stem 11 | 12 | class IndexCell: UICollectionViewCell, STNibProtocol, ConfigurableView { 13 | 14 | static func preferredSize(limit size: CGSize, model: Void?) -> CGSize { 15 | return .init(width: size.width, height: 60) 16 | } 17 | 18 | @IBOutlet private weak var iconView: UIImageView! 19 | @IBOutlet private weak var titleLabel: UILabel! 20 | @IBOutlet private weak var textLabel: UILabel! 21 | 22 | override func awakeFromNib() { 23 | super.awakeFromNib() 24 | iconView.layer.cornerRadius = 4 25 | } 26 | 27 | func config(icon: UIImage, title: String, text: String) { 28 | iconView.image = icon 29 | titleLabel.isHidden = title.isEmpty 30 | textLabel.isHidden = text.isEmpty 31 | titleLabel.text = title 32 | textLabel.text = text 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /Example/EmptyPage/IndexHeaderView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // IndexHeaderView.swift 3 | // EmptyPage_Example 4 | // 5 | // Created by 林翰 on 2020/6/17. 6 | // Copyright © 2020 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import Stem 11 | 12 | class IndexHeaderView: UICollectionReusableView, STNibProtocol, ConfigurableView { 13 | 14 | static func preferredSize(limit size: CGSize, model: String?) -> CGSize { 15 | return .init(width: size.width, height: 60) 16 | } 17 | 18 | @IBOutlet private weak var tapView: UIControl! 19 | @IBOutlet private weak var titleLabel: UILabel! 20 | let tapEvent = Delegate() 21 | 22 | 23 | override func awakeFromNib() { 24 | super.awakeFromNib() 25 | tapView.layer.st.setBorder(color: .darkGray, width: 0.5) 26 | } 27 | 28 | func config(_ model: String) { 29 | titleLabel.text = model 30 | } 31 | 32 | @IBAction func tapAction(_ sender: UIControl) { 33 | tapEvent.call() 34 | } 35 | 36 | 37 | } 38 | -------------------------------------------------------------------------------- /Example/EmptyPage/IndexTextCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // IndexTextCell.swift 3 | // EmptyPage_Example 4 | // 5 | // Created by 林翰 on 2020/6/17. 6 | // Copyright © 2020 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import Stem 11 | 12 | protocol IndexTextCellModelProtocol { 13 | var title: String { get } 14 | var text: String { get } 15 | } 16 | 17 | class IndexTextCell: UICollectionViewCell, ConfigurableView, STNibProtocol { 18 | 19 | static func preferredSize(limit size: CGSize, model: IndexTextCellModelProtocol?) -> CGSize { 20 | return .init(width: size.width, height: 60) 21 | } 22 | 23 | @IBOutlet private weak var titleLabel: UILabel! 24 | @IBOutlet private weak var textLabel: UILabel! 25 | 26 | func config(_ model: IndexTextCellModelProtocol) { 27 | titleLabel.isHidden = model.title.isEmpty 28 | textLabel.isHidden = model.text.isEmpty 29 | titleLabel.text = model.title 30 | textLabel.text = model.text 31 | } 32 | 33 | 34 | } 35 | -------------------------------------------------------------------------------- /Example/EmptyPage/IndexViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // IndexViewController.swift 3 | // EmptyPage_Example 4 | // 5 | // Created by 林翰 on 2020/6/16. 6 | // Copyright © 2020 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import Stem 11 | 12 | class IndexViewController: SectionCollectionViewController { 13 | 14 | override func viewDidLoad() { 15 | super.viewDidLoad() 16 | manager.update(StandardSection(), 17 | DemoSection(), 18 | DribbbleSection(), 19 | DZNEmptyDataSetSection()) 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /Example/EmptyPage/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | EmptyPage 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1 25 | LSApplicationCategoryType 26 | public.app-category.developer-tools 27 | LSRequiresIPhoneOS 28 | 29 | UILaunchStoryboardName 30 | LaunchScreen 31 | UIRequiredDeviceCapabilities 32 | 33 | armv7 34 | 35 | UISupportedInterfaceOrientations 36 | 37 | UIInterfaceOrientationPortrait 38 | UIInterfaceOrientationLandscapeLeft 39 | UIInterfaceOrientationPortraitUpsideDown 40 | UIInterfaceOrientationLandscapeRight 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /Example/EmptyPage/StandardSection.swift: -------------------------------------------------------------------------------- 1 | // 2 | // IndexStandardSection.swift 3 | // EmptyPage_Example 4 | // 5 | // Created by 林翰 on 2020/6/17. 6 | // Copyright © 2020 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import Stem 11 | import EmptyPage 12 | 13 | enum Standard: String, CaseIterable, IndexTextCellModelProtocol { 14 | 15 | case image_normal = "纯图片 - 静态图片" 16 | case image_animate = "纯图片 - 动态图片" 17 | case text_normal = "纯文字 - 单样式" 18 | case text_attributed = "纯文本 - 富文本样式" 19 | case standard = "复合型" 20 | 21 | var title: String { rawValue } 22 | var text: String { desc() } 23 | 24 | func desc() -> String { 25 | switch self { 26 | case .image_normal: 27 | return "EmptyPageView.Template.image" 28 | case .image_animate: 29 | return "EmptyPageView.Template.image" 30 | case .text_normal: 31 | return "EmptyPageView.Template.text" 32 | case .text_attributed: 33 | return "EmptyPageView.Template.text" 34 | case .standard: 35 | return "EmptyPageView.Template.standard" 36 | } 37 | } 38 | 39 | func view() -> EmptyPageView { 40 | switch self { 41 | case .image_normal: 42 | return TemplateSet.image_normal().mix() 43 | case .image_animate: 44 | return TemplateSet.image_animate().mix() 45 | case .text_normal: 46 | return TemplateSet.text_normal().mix() 47 | case .text_attributed: 48 | return TemplateSet.text_attributed().mix() 49 | case .standard: 50 | return TemplateSet 51 | .standard1(tapEvent: nil) 52 | .mix() 53 | .layout(horizontal: .leftSpacer(20), .rightSpacer(20)) 54 | .layout(vertical: .topAndBottomSpacerRatio(3.0/4)) 55 | } 56 | } 57 | } 58 | 59 | class StandardSection: BaseSection { 60 | 61 | override var title: String { "Standard" } 62 | override var rawModels: [IndexTextCell.Model] { Standard.allCases } 63 | 64 | override func didSelectItem(at row: Int) { 65 | guard let item = Standard.allCases.value(at: row) else { 66 | return 67 | } 68 | 69 | let vc = UITableViewController() 70 | vc.tableView.backgroundColor = .white 71 | vc.view.backgroundColor = .white 72 | vc.tableView.separatorStyle = .none 73 | vc.tableView.ep.set(emptyView: item.view()) 74 | sectionView.st.viewController?.st.push(vc) 75 | } 76 | 77 | } 78 | -------------------------------------------------------------------------------- /Example/EmptyPage/managers/Example.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Example.swift 3 | // EmptyPage_Example 4 | // 5 | // Created by 林翰 on 2020/9/7. 6 | // Copyright © 2020 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | public class Example { 12 | public let base: Base 13 | public init(_ base: Base) { 14 | self.base = base 15 | } 16 | } 17 | 18 | public protocol ExampleCompatible { 19 | associatedtype ExampleCompatibleType 20 | var ex: Example { get } 21 | } 22 | 23 | public extension ExampleCompatible { 24 | var ex: Example { return Example(self) } 25 | } 26 | 27 | extension UIView: ExampleCompatible { } 28 | -------------------------------------------------------------------------------- /Example/EmptyPage/managers/StateManager.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CollectionView+EmptyStateManager.swift 3 | // iDxyer 4 | // 5 | // Created by 林翰 on 2020/8/5. 6 | // 7 | 8 | import UIKit 9 | import EmptyPage 10 | import Reachability 11 | 12 | public struct EmptyPageState: OptionSet, Hashable { 13 | 14 | public let rawValue: Int 15 | 16 | public init(rawValue: Int) { 17 | self.rawValue = rawValue 18 | } 19 | 20 | static let normal = EmptyPageState(rawValue: 1) 21 | static let loading = EmptyPageState(rawValue: 2) 22 | static let noNetwork = EmptyPageState(rawValue: 3) 23 | } 24 | 25 | public class ExampleCollectionStateManager: EmptyPageCollectionStateManager { } 26 | 27 | public extension Example where Base: UICollectionView { 28 | 29 | private var manager: ExampleCollectionStateManager { 30 | if let manager = base.ep.manager as? ExampleCollectionStateManager { 31 | return manager 32 | } else { 33 | let manager = ExampleCollectionStateManager(state: .normal) 34 | manager.set(target: base) 35 | manager.hookProvider.delegate(on: base) { (self, state) -> UIView? in 36 | guard state == .normal, AppManager.shared.reachability.connection == .unavailable else { 37 | return nil 38 | } 39 | manager.state = .noNetwork 40 | return manager.viewStore[.noNetwork] 41 | } 42 | base.ep.set(manager: manager) 43 | return manager 44 | } 45 | } 46 | 47 | func set(emptyView: UIView?, for state: EmptyPageState) { 48 | manager.set(emptyView: emptyView, for: state) 49 | } 50 | 51 | func set(canScroll: Bool, for state: EmptyPageState) { 52 | manager.scrollableStore[state] = canScroll 53 | } 54 | 55 | func change(state: EmptyPageState) { 56 | manager.set(state: state) 57 | } 58 | 59 | } 60 | -------------------------------------------------------------------------------- /Example/EmptyPage/tests/TestMJRefreshCollectionVC.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TestMJRefreshCollectionVC.swift 3 | // EmptyPage_Example 4 | // 5 | // Created by 林翰 on 2020/8/30. 6 | // Copyright © 2020 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import Stem 11 | import EmptyPage 12 | import MJRefresh 13 | 14 | class TestMJRefreshCollectionVC: SectionCollectionViewController { 15 | 16 | func config(canScroll: Bool) { 17 | sectionView.ep.canScrollEnabled = canScroll 18 | } 19 | 20 | override func viewDidLoad() { 21 | super.viewDidLoad() 22 | sectionView.ep.setEmpty(TemplateSet.standard1(tapEvent: nil)) 23 | 24 | sectionView.mj_header = MJRefreshNormalHeader(refreshingBlock: { [weak self] in 25 | Gcd.delay(.main, seconds: 2) { [weak self] in 26 | guard let self = self else { 27 | return 28 | } 29 | self.sectionView.mj_header?.endRefreshing() 30 | self.manager.reload() 31 | } 32 | }) 33 | } 34 | 35 | override func viewDidAppear(_ animated: Bool) { 36 | super.viewDidAppear(animated) 37 | sectionView.mj_header?.beginRefreshing() 38 | } 39 | 40 | override func viewDidLayoutSubviews() { 41 | super.viewDidLayoutSubviews() 42 | sectionView.ep.manager?.resize() 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /Example/EmptyPage/tests/TestReusableView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TestUIReusableView.swift 3 | // EmptyPage_Example 4 | // 5 | // Created by linhey on 2021/7/11. 6 | // Copyright © 2021 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import Stem 11 | 12 | class TestReusableView: UICollectionReusableView, STViewProtocol { 13 | 14 | } 15 | -------------------------------------------------------------------------------- /Example/EmptyPage_Example.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.network.client 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Example/Podfile: -------------------------------------------------------------------------------- 1 | source 'https://cdn.cocoapods.org/' 2 | 3 | platform :ios, '11.0' 4 | use_frameworks! 5 | install! 'cocoapods', :generate_multiple_pod_projects => true 6 | 7 | target 'EmptyPage_Example' do 8 | pod 'ReachabilitySwift' 9 | pod 'EmptyPage', :path => '../EmptyPage.podspec' 10 | pod 'SnapKit' 11 | pod 'MJRefresh' 12 | pod 'SwiftLint' 13 | end 14 | 15 | -------------------------------------------------------------------------------- /Example/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - EmptyPage (4.0.10): 3 | - EmptyPage/core (= 4.0.10) 4 | - EmptyPage/managers (= 4.0.10) 5 | - EmptyPage/templates (= 4.0.10) 6 | - EmptyPage/core (4.0.10) 7 | - EmptyPage/managers (4.0.10): 8 | - EmptyPage/core 9 | - EmptyPage/templates (4.0.10): 10 | - EmptyPage/core 11 | - MJRefresh (3.7.5) 12 | - ReachabilitySwift (5.0.0) 13 | - SnapKit (5.0.1) 14 | - SwiftLint (0.46.5) 15 | 16 | DEPENDENCIES: 17 | - EmptyPage (from `../EmptyPage.podspec`) 18 | - MJRefresh 19 | - ReachabilitySwift 20 | - SnapKit 21 | - SwiftLint 22 | 23 | SPEC REPOS: 24 | trunk: 25 | - MJRefresh 26 | - ReachabilitySwift 27 | - SnapKit 28 | - SwiftLint 29 | 30 | EXTERNAL SOURCES: 31 | EmptyPage: 32 | :path: "../EmptyPage.podspec" 33 | 34 | SPEC CHECKSUMS: 35 | EmptyPage: 5c0b8683f3e4e83084173aa122807f0b1211b4a4 36 | MJRefresh: fdf5e979eb406a0341468932d1dfc8b7f9fce961 37 | ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825 38 | SnapKit: 97b92857e3df3a0c71833cce143274bf6ef8e5eb 39 | SwiftLint: 2c16e8fa99dac2e440dc0c70ea74d2532048f6cf 40 | 41 | PODFILE CHECKSUM: 347b5acbd1ed36db436a3fc1e8f9633f2ae5b542 42 | 43 | COCOAPODS: 1.11.2 44 | -------------------------------------------------------------------------------- /Example/scripts/document.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | file="EmptyPage" 3 | # 文档生成 4 | jazzy \ 5 | --podspec ../../${file}.podspec \ 6 | --output ../../document/ \ 7 | --theme fullwidth 8 | -------------------------------------------------------------------------------- /Example/scripts/git_config.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | git config user.name "linhey" 3 | git config user.email "158179948@qq.com" 4 | -------------------------------------------------------------------------------- /Example/scripts/license: -------------------------------------------------------------------------------- 1 | // 2 | // EmptyPage 3 | // 4 | // Copyright (c) 2018 linhey - https://github.com/linhay 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | -------------------------------------------------------------------------------- /Example/scripts/license.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | def BFS_Dir(path, dirCallback=None, fileCallback=None): 4 | queue = [] 5 | ret = [] 6 | queue.append(path); 7 | while len(queue) > 0: 8 | tmp = queue.pop(0) 9 | if (os.path.isdir(tmp)): 10 | ret.append(tmp) 11 | for item in os.listdir(tmp): 12 | queue.append(os.path.join(tmp, item)) 13 | if dirCallback: 14 | dirCallback(tmp) 15 | elif (os.path.isfile(tmp)): 16 | ret.append(tmp) 17 | if fileCallback: 18 | fileCallback(tmp) 19 | 20 | def dirCallback(path): 21 | return 22 | 23 | def license(path: str): 24 | with open(path, 'rb') as reader: 25 | return reader.readlines() 26 | 27 | def fileCallback(path: str, license: bytearray = license(path=os.getcwd() + '/license')): 28 | if path.endswith('.DS_Store'): 29 | return 30 | 31 | with open(path, 'rb') as reader: 32 | lines = reader.readlines() 33 | 34 | index: int = 0 35 | for i in range(0, len(lines)): 36 | line = lines[i].decode(encoding='utf-8').replace(' ', '') 37 | if line.startswith('//'): 38 | continue 39 | if line == '\n': 40 | continue 41 | index = i 42 | break 43 | 44 | lines = license + [b'\n'] + lines[index:] 45 | with open(path, 'wb') as writer: 46 | writer.writelines(lines) 47 | 48 | 49 | BFS_Dir(os.getcwd() + '/../../Sources', dirCallback=dirCallback,fileCallback=fileCallback) 50 | -------------------------------------------------------------------------------- /Example/scripts/trunk.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | #目录切换 4 | cd .. 5 | value=./*.podspec 6 | file=${value##*/} 7 | 8 | echo "podspec:" ${file} 9 | #获取podspec 中版本号 10 | version=`grep -m1 "s.version" ${file}|awk '{print $NF}'|sed "s/\'//g"` 11 | echo "version:" ${version} 12 | #git提交 13 | git add . 14 | read -t 600 -p "修改内容[默认为${version}]:" diff 15 | if [ -z ${diff} ];then 16 | diff=${version} 17 | fi 18 | git commit -m ${diff} 19 | git push 20 | read -t 600 -p "版本内容[默认为${version}]:" diff 21 | if [ -z ${diff} ];then 22 | diff=${version} 23 | fi 24 | git tag -a ${version} -m ${diff} 25 | git push origin ${version} 26 | bundle update 27 | bundle exec pod lib lint ${file} --allow-warnings 28 | bundle exec pod trunk push ${file} --allow-warnings 29 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | source "https://rubygems.org" 4 | 5 | gem "cocoapods", "~> 1.14.2" 6 | -------------------------------------------------------------------------------- /Package.swift: -------------------------------------------------------------------------------- 1 | // swift-tools-version:5.2 2 | // The swift-tools-version declares the minimum version of Swift required to build this package. 3 | 4 | import PackageDescription 5 | 6 | let package = Package( 7 | name: "EmptyPage", 8 | platforms: [.iOS(.v9)], 9 | products: [ 10 | .library(name: "EmptyPage", targets: ["EmptyPage"]), 11 | ], 12 | targets: [ 13 | .target( 14 | name: "EmptyPage", 15 | path: "Sources", 16 | sources: ["Core", "managers", "Standard"]) 17 | ] 18 | ) 19 | -------------------------------------------------------------------------------- /Sources/Core/EmptyPage.h: -------------------------------------------------------------------------------- 1 | // 2 | // EmptyPage 3 | // 4 | // Copyright (c) 2018 linhey - https://github.com/linhay 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | 23 | #ifndef EmptyPage_h 24 | #define EmptyPage_h 25 | 26 | FOUNDATION_EXPORT double EmptyPageVersionNumber; 27 | FOUNDATION_EXPORT const unsigned char EmptyPageVersionString[]; 28 | 29 | #endif /* EmptyPage_h */ 30 | -------------------------------------------------------------------------------- /Sources/Core/EmptyPage.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EmptyPage 3 | // 4 | // Copyright (c) 2018 linhey - https://github.com/linhay 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | 23 | import UIKit 24 | 25 | public class EmptyPage { 26 | public let base: Base 27 | public init(_ base: Base) { 28 | self.base = base 29 | } 30 | } 31 | 32 | public protocol EmptyPageCompatible { 33 | associatedtype CompatibleType 34 | var ep: CompatibleType { get } 35 | } 36 | 37 | public extension EmptyPageCompatible { 38 | var ep: EmptyPage { return EmptyPage(self) } 39 | static var ep: EmptyPage.Type { return EmptyPage.self } 40 | } 41 | 42 | extension UIView: EmptyPageCompatible { } 43 | -------------------------------------------------------------------------------- /Sources/Core/extensions/EmptyPage+UICollectionView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EmptyPage 3 | // 4 | // Copyright (c) 2018 linhey - https://github.com/linhay 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | 23 | import UIKit 24 | 25 | public extension EmptyPage where Base: UICollectionView { 26 | 27 | /// 空白页管理器 28 | var manager: EmptyPageCollectionViewManager? { 29 | if base.useCustomManager { 30 | return base.emptyPageViewManager as? EmptyPageCollectionViewManager 31 | } 32 | 33 | if base.emptyPageViewManager == nil { 34 | if let placeholder = EmptyPageConfiguration.shared.collectionViewGloalManager { 35 | set(manager: placeholder) 36 | } else { 37 | set(manager: EmptyPageCollectionViewManager()) 38 | } 39 | } 40 | 41 | return base.emptyPageViewManager as? EmptyPageCollectionViewManager 42 | } 43 | 44 | var displayEvent: EmptyPageDelegate? { manager?.displayEvent } 45 | 46 | /// 当显示空白页时页面是否可以滚动 | default: false 47 | var canScrollEnabled: Bool { 48 | get { manager?.canScrollEnabled ?? false } 49 | set { manager?.canScrollEnabled = newValue } 50 | } 51 | 52 | /// 设置当前 View 的空白页管理器 53 | /// - Parameter manager: 空白页管理器 54 | func set(manager: EmptyPageViewManager?) { 55 | EmptyPageRuntime.swizzingCollectionView 56 | base.useCustomManager = true 57 | base.emptyPageViewManager = manager 58 | manager?.set(target: base) 59 | } 60 | 61 | /// 设置当前 View 的空白页 62 | /// - Parameter view: 自定义空白页 63 | func set(emptyView view: UIView?) { 64 | EmptyPageRuntime.swizzingCollectionView 65 | manager?.set(emptyView: view) 66 | } 67 | 68 | } 69 | -------------------------------------------------------------------------------- /Sources/Core/extensions/EmptyPage+UIScrollView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EmptyPage 3 | // 4 | // Copyright (c) 2018 linhey - https://github.com/linhay 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | 23 | import UIKit 24 | 25 | public extension EmptyPage where Base: UIScrollView { 26 | 27 | /// 空白页管理器 28 | var manager: EmptyPageScrollViewManager? { 29 | if base.useCustomManager { 30 | return base.emptyPageViewManager as? EmptyPageScrollViewManager 31 | } 32 | 33 | if base.emptyPageViewManager == nil, let placeholder = EmptyPageConfiguration.shared.scrollViewGloalManager { 34 | set(manager: placeholder) 35 | } 36 | 37 | return base.emptyPageViewManager as? EmptyPageScrollViewManager 38 | } 39 | 40 | var displayEvent: EmptyPageDelegate? { manager?.displayEvent } 41 | 42 | /// 当显示空白页时页面是否可以滚动 | default: false 43 | var canScrollEnabled: Bool { 44 | get { manager?.canScrollEnabled ?? false } 45 | set { manager?.canScrollEnabled = newValue } 46 | } 47 | 48 | } 49 | -------------------------------------------------------------------------------- /Sources/Core/extensions/EmptyPage+UITableView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EmptyPage 3 | // 4 | // Copyright (c) 2018 linhey - https://github.com/linhay 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | 23 | import UIKit 24 | 25 | public extension EmptyPage where Base: UITableView { 26 | 27 | /// 空白页管理器 28 | var manager: EmptyPageTableViewManager? { 29 | if base.useCustomManager { 30 | return base.emptyPageViewManager as? EmptyPageTableViewManager 31 | } 32 | 33 | if base.emptyPageViewManager == nil { 34 | if let placeholder = EmptyPageConfiguration.shared.tableViewGloalManager { 35 | set(manager: placeholder) 36 | } else { 37 | set(manager: EmptyPageTableViewManager()) 38 | } 39 | } 40 | 41 | return base.emptyPageViewManager as? EmptyPageTableViewManager 42 | } 43 | 44 | var displayEvent: EmptyPageDelegate? { manager?.displayEvent } 45 | 46 | /// 当显示空白页时页面是否可以滚动 | default: false 47 | var canScrollEnabled: Bool { 48 | get { manager?.canScrollEnabled ?? false } 49 | set { manager?.canScrollEnabled = newValue } 50 | } 51 | 52 | /// 设置当前 View 的空白页管理器 53 | /// - Parameter manager: 空白页管理器 54 | func set(manager: EmptyPageViewManager?) { 55 | EmptyPageRuntime.swizzingTableView 56 | base.useCustomManager = true 57 | base.emptyPageViewManager = manager 58 | manager?.set(target: base) 59 | } 60 | 61 | /// 设置当前 View 的空白页 62 | /// - Parameter view: 自定义空白页 63 | func set(emptyView view: UIView?) { 64 | EmptyPageRuntime.swizzingTableView 65 | manager?.set(emptyView: view) 66 | } 67 | 68 | } 69 | -------------------------------------------------------------------------------- /Sources/Core/extensions/EmptyPage+UIView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EmptyPage 3 | // 4 | // Copyright (c) 2018 linhey - https://github.com/linhay 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | 23 | import UIKit 24 | 25 | public extension EmptyPage where Base: UIView { 26 | 27 | /// 空白页管理器 28 | var manager: EmptyPageViewManager? { 29 | if base.useCustomManager { 30 | return base.emptyPageViewManager 31 | } 32 | 33 | if base.emptyPageViewManager == nil, let placeholder = EmptyPageConfiguration.shared.viewGloalManager { 34 | set(manager: placeholder) 35 | } 36 | 37 | return base.emptyPageViewManager 38 | } 39 | 40 | var displayEvent: EmptyPageDelegate? { manager?.displayEvent } 41 | 42 | /// 设置当前 View 的空白页管理器 43 | /// - Parameter manager: 空白页管理器 44 | func set(manager: EmptyPageViewManager?) { 45 | base.useCustomManager = true 46 | base.emptyPageViewManager = manager 47 | manager?.set(target: base) 48 | } 49 | 50 | /// 刷新空白页 51 | func reload() { 52 | manager?.reload() 53 | } 54 | 55 | /// 设置当前 View 的空白页 56 | /// - Parameter view: 自定义空白页 57 | func set(emptyView view: UIView?) { 58 | manager?.set(emptyView: view) 59 | } 60 | 61 | } 62 | 63 | public extension EmptyPage where Base: UIView { 64 | 65 | var emptyView: UIView? { manager?.emptyView } 66 | 67 | var isShow: Bool { manager?.isShow ?? false } 68 | 69 | } 70 | -------------------------------------------------------------------------------- /Sources/Core/extensions/EmptyPageDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EmptyPage 3 | // 4 | // Copyright (c) 2018 linhey - https://github.com/linhay 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | 23 | import Foundation 24 | 25 | public class EmptyPageDelegate { 26 | public init() {} 27 | 28 | private var block: ((Input) -> Output?)? 29 | } 30 | 31 | public extension EmptyPageDelegate { 32 | 33 | func delegate(on target: T, block: ((T, Input) -> Output)?) { 34 | self.block = { [weak target] input in 35 | guard let target = target else { return nil } 36 | return block?(target, input) 37 | } 38 | } 39 | 40 | func call(_ input: Input) -> Output? { 41 | return block?(input) 42 | } 43 | 44 | } 45 | public extension EmptyPageDelegate where Input == Void { 46 | func call() -> Output? { 47 | return call(()) 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /Sources/Core/managers/EmptyPageManager+UIView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EmptyPage 3 | // 4 | // Copyright (c) 2018 linhey - https://github.com/linhay 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | 23 | import UIKit 24 | 25 | open class EmptyPageViewManager: EmptyPageViewManagerProtocol { 26 | 27 | public var displayEvent = EmptyPageDelegate() 28 | // 父视图 29 | public var targetBox: EmptyPageWeakBox = .init() 30 | public var emptyBox: EmptyPageWeakBox = .init() 31 | public var frameKvoToken: NSKeyValueObservation? 32 | open var emptyViewProvider: () -> UIView? = { nil } 33 | 34 | public init() {} 35 | 36 | public init(target: UIView?) { 37 | set(target: target) 38 | } 39 | 40 | /// 设置目标视图 41 | /// - Parameter target: 目标视图 42 | open func set(target: UIView?) { 43 | ep_set(target: target) 44 | } 45 | 46 | /// 设置新空白页 or 移除空白页 47 | /// - Parameter emptyView: 新空白页, nil为移除当前空白页 48 | open func set(emptyViewProvider provider: (() -> UIView?)?) { 49 | ep_set(emptyViewProvider: provider) 50 | } 51 | 52 | /// 设置目标 View 的空白页 53 | /// - Parameter view: 自定义空白页 54 | open func set(emptyView view: UIView?) { 55 | ep_set(emptyView: view) 56 | } 57 | 58 | /// 判断是否显示空白页 59 | /// - Returns: 是否显示空白页 60 | open func isEmpty() -> Bool { return false } 61 | 62 | /// 重置空白页尺寸 63 | open func resize() { 64 | ep_resize() 65 | } 66 | 67 | /// 处理展示空白页逻辑 68 | open func reload(completion: ((_ isEmpty: Bool) -> Void)? = nil) { 69 | ep_reload(completion: completion) 70 | } 71 | 72 | } 73 | -------------------------------------------------------------------------------- /Sources/Core/managers/EmptyPageWeakBox.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EmptyPage 3 | // 4 | // Copyright (c) 2018 linhey - https://github.com/linhay 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | 23 | import Foundation 24 | 25 | public final class EmptyPageWeakBox { 26 | 27 | public weak var value: T? 28 | 29 | public init(_ value: T? = nil) { 30 | self.value = value 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /Sources/Core/swizzings/Empty+UICollectionView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EmptyPage 3 | // 4 | // Copyright (c) 2018 linhey - https://github.com/linhay 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | 23 | import UIKit 24 | 25 | extension UICollectionView { 26 | 27 | @objc func emptyPage_insertItems(at indexPaths: [IndexPath]) { 28 | self.emptyPage_insertItems(at: indexPaths) 29 | emptyPageViewManager?.reload() 30 | } 31 | 32 | @objc func emptyPage_deleteItems(at indexPaths: [IndexPath]) { 33 | self.emptyPage_deleteItems(at: indexPaths) 34 | emptyPageViewManager?.reload() 35 | } 36 | 37 | @objc func emptyPage_insertSections(_ sections: IndexSet) { 38 | self.emptyPage_insertSections(sections) 39 | emptyPageViewManager?.reload() 40 | } 41 | 42 | @objc func emptyPage_deleteSections(_ sections: IndexSet) { 43 | self.emptyPage_deleteSections(sections) 44 | emptyPageViewManager?.reload() 45 | } 46 | 47 | @objc func emptyPage_reloadSections(_ sections: IndexSet) { 48 | self.emptyPage_reloadSections(sections) 49 | emptyPageViewManager?.reload() 50 | } 51 | 52 | @objc func emptyPage_reloadData() { 53 | self.emptyPage_reloadData() 54 | emptyPageViewManager?.reload() 55 | } 56 | 57 | } 58 | -------------------------------------------------------------------------------- /Sources/Core/swizzings/Empty+UITableView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EmptyPage 3 | // 4 | // Copyright (c) 2018 linhey - https://github.com/linhay 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | 23 | import UIKit 24 | 25 | extension UITableView { 26 | 27 | @objc func emptyPage_insertRows(at indexPaths: [IndexPath], with animation: UITableView.RowAnimation) { 28 | self.emptyPage_insertRows(at: indexPaths, with: animation) 29 | emptyPageViewManager?.reload() 30 | } 31 | 32 | @objc func emptyPage_deleteRows(at indexPaths: [IndexPath], with animation: UITableView.RowAnimation) { 33 | self.emptyPage_deleteRows(at: indexPaths, with: animation) 34 | emptyPageViewManager?.reload() 35 | } 36 | 37 | @objc func emptyPage_insertSections(_ sections: IndexSet, with animation: UITableView.RowAnimation) { 38 | self.emptyPage_insertSections(sections, with: animation) 39 | emptyPageViewManager?.reload() 40 | } 41 | 42 | @objc func emptyPage_deleteSections(_ sections: IndexSet, with animation: UITableView.RowAnimation) { 43 | self.emptyPage_deleteSections(sections, with: animation) 44 | emptyPageViewManager?.reload() 45 | } 46 | 47 | @objc func emptyPage_reloadSections(_ sections: IndexSet, with animation: UITableView.RowAnimation) { 48 | self.emptyPage_reloadSections(sections, with: animation) 49 | emptyPageViewManager?.reload() 50 | } 51 | 52 | @objc func emptyPage_reloadData() { 53 | self.emptyPage_reloadData() 54 | emptyPageViewManager?.reload() 55 | } 56 | 57 | } 58 | -------------------------------------------------------------------------------- /Sources/Core/swizzings/Empty+UIView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EmptyPage 3 | // 4 | // Copyright (c) 2018 linhey - https://github.com/linhay 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | 23 | import UIKit 24 | 25 | extension UIView { 26 | 27 | enum EmptyPageViewKey { 28 | static let manager = UnsafeRawPointer(bitPattern: "EmptyPage.uiview.ep.manager".hashValue)! 29 | static let useCustomManager = UnsafeRawPointer(bitPattern: "EmptyPage.uiview.ep.useCustomManager".hashValue)! 30 | } 31 | 32 | var useCustomManager: Bool { 33 | get { return objc_getAssociatedObject(self, EmptyPageViewKey.useCustomManager) as? Bool ?? false } 34 | set { objc_setAssociatedObject(self, EmptyPageViewKey.useCustomManager, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) } 35 | } 36 | 37 | var emptyPageViewManager: EmptyPageViewManager? { 38 | get { return objc_getAssociatedObject(self, EmptyPageViewKey.manager) as? EmptyPageViewManager } 39 | set { objc_setAssociatedObject(self, EmptyPageViewKey.manager, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) } 40 | } 41 | 42 | @objc 43 | func emptyPage_setBounds(_ value: CGRect) { 44 | emptyPage_setBounds(value) 45 | emptyPageViewManager?.resize() 46 | } 47 | 48 | } 49 | -------------------------------------------------------------------------------- /Sources/Standard/EmptyView+UIScrollView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EmptyPage 3 | // 4 | // Copyright (c) 2018 linhey - https://github.com/linhay 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | 23 | import UIKit 24 | 25 | public extension EmptyPage where Base: UITableView { 26 | /// 添加空白页视图 27 | /// 28 | /// - Parameter view: 模板视图 29 | func setEmpty(_ template: EmptyPageTemplateProtocol?) { 30 | self.set(emptyView: template?.mix()) 31 | } 32 | 33 | } 34 | 35 | public extension EmptyPage where Base: UICollectionView { 36 | /// 添加空白页视图 37 | /// 38 | /// - Parameter view: 模板视图 39 | func setEmpty(_ template: EmptyPageTemplateProtocol?) { 40 | self.set(emptyView: template?.mix()) 41 | } 42 | 43 | } 44 | -------------------------------------------------------------------------------- /Sources/managers/StateManager/EmptyPageCollectionStateManager.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EmptyPage 3 | // 4 | // Copyright (c) 2018 linhey - https://github.com/linhay 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | 23 | import UIKit 24 | 25 | open class EmptyPageCollectionStateManager: EmptyPageCollectionViewManager, EmptyPageStateProtocol, EmptyPageStateScorllableProtocol { 26 | 27 | public var scrollableStore: [State: Bool] = [:] 28 | open var state: State 29 | open var viewStore: [State: UIView] = [:] 30 | public let hookProvider = EmptyPageDelegate() 31 | public override var frameKvoToken: NSKeyValueObservation? { 32 | get { super.frameKvoToken } 33 | set { super.frameKvoToken = newValue } 34 | } 35 | open override var emptyViewProvider: () -> UIView? { 36 | get { viewProvider } 37 | set { _ = newValue } 38 | } 39 | 40 | public init(state: State) { 41 | self.state = state 42 | super.init() 43 | } 44 | 45 | open override func reload(completion: ((Bool) -> Void)? = nil) { 46 | ep_state_reload(completion: completion) 47 | } 48 | 49 | } 50 | -------------------------------------------------------------------------------- /Sources/managers/StateManager/EmptyPageScrollViewStateManager.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EmptyPage 3 | // 4 | // Copyright (c) 2018 linhey - https://github.com/linhay 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | 23 | import UIKit 24 | 25 | open class EmptyPageScrollViewStateManager: EmptyPageScrollViewManager, EmptyPageStateProtocol, EmptyPageStateScorllableProtocol { 26 | 27 | public var scrollableStore: [State: Bool] = [:] 28 | open var state: State 29 | open var viewStore: [State: UIView] = [:] 30 | public let hookProvider = EmptyPageDelegate() 31 | open override var emptyViewProvider: () -> UIView? { 32 | get { viewProvider } 33 | set { _ = newValue } 34 | } 35 | 36 | public init(state: State) { 37 | self.state = state 38 | super.init() 39 | } 40 | 41 | open override func reload(completion: ((Bool) -> Void)? = nil) { 42 | ep_state_reload(completion: completion) 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /Sources/managers/StateManager/EmptyPageStateProtocol.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EmptyPage 3 | // 4 | // Copyright (c) 2018 linhey - https://github.com/linhay 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | 23 | import UIKit 24 | 25 | public protocol EmptyPageStateProtocol: EmptyPageViewManagerProtocol { 26 | associatedtype State: OptionSet & Hashable 27 | var state: State { get set } 28 | var viewStore: [State: UIView] { get set } 29 | var hookProvider: EmptyPageDelegate { get } 30 | } 31 | 32 | public extension EmptyPageStateProtocol where Self: EmptyPageViewManager { 33 | 34 | func set(state: State) { 35 | self.state = state 36 | reload() 37 | } 38 | 39 | func set(emptyView: UIView?, for state: State) { 40 | viewStore[state] = emptyView 41 | } 42 | 43 | } 44 | 45 | public extension EmptyPageStateProtocol where Self: EmptyPageViewManager { 46 | 47 | var viewProvider: () -> UIView? { 48 | return { [weak self] in 49 | guard let self = self else { 50 | return nil 51 | } 52 | if let box = self.hookProvider.call(self.state), let view = box { 53 | return view 54 | } 55 | return self.viewStore[self.state] 56 | } 57 | } 58 | 59 | } 60 | -------------------------------------------------------------------------------- /Sources/managers/StateManager/EmptyPageStateScorllableProtocol.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EmptyPage 3 | // 4 | // Copyright (c) 2018 linhey - https://github.com/linhay 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | 23 | import UIKit 24 | 25 | public protocol EmptyPageStateScorllableProtocol: AnyObject { 26 | associatedtype State: OptionSet & Hashable 27 | 28 | var scrollableStore: [State: Bool] { get set } 29 | func set(canScroll: Bool, for state: State) 30 | } 31 | 32 | public extension EmptyPageStateScorllableProtocol { 33 | 34 | func set(canScroll: Bool, for state: State) { 35 | scrollableStore[state] = canScroll 36 | } 37 | 38 | } 39 | 40 | /// 默认逻辑代码 41 | public extension EmptyPageStateScorllableProtocol where Self: EmptyPageScrollViewManager & EmptyPageStateProtocol { 42 | 43 | private var viewProvider: () -> UIView? { 44 | return { [weak self] in 45 | guard let self = self else { 46 | return nil 47 | } 48 | if let box = self.hookProvider.call(self.state), let view = box { 49 | return view 50 | } 51 | return self.viewStore[self.state] 52 | } 53 | } 54 | 55 | func ep_state_reload(completion: ((Bool) -> Void)?) { 56 | let isShow = self.isShow 57 | ep_reload { [weak self] isEmpty in 58 | guard let self = self else { 59 | return 60 | } 61 | if isEmpty { 62 | self.canScrollEnabled = self.scrollableStore[self.state] ?? false 63 | } 64 | self.canScroll(isShowBeforeReload: isShow, isEmptyAfterReload: isEmpty) 65 | completion?(isEmpty) 66 | } 67 | } 68 | 69 | } 70 | -------------------------------------------------------------------------------- /Sources/managers/StateManager/EmptyPageTableStateManager.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EmptyPage 3 | // 4 | // Copyright (c) 2018 linhey - https://github.com/linhay 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | 23 | import UIKit 24 | 25 | open class EmptyPageTableStateManager: EmptyPageTableViewManager, EmptyPageStateProtocol, EmptyPageStateScorllableProtocol { 26 | 27 | public var scrollableStore: [State: Bool] = [:] 28 | open var state: State 29 | open var viewStore: [State: UIView] = [:] 30 | public let hookProvider = EmptyPageDelegate() 31 | open override var emptyViewProvider: () -> UIView? { 32 | get { viewProvider } 33 | set { _ = newValue } 34 | } 35 | 36 | public init(state: State) { 37 | self.state = state 38 | super.init() 39 | } 40 | 41 | open override func reload(completion: ((Bool) -> Void)? = nil) { 42 | ep_state_reload(completion: completion) 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /Sources/managers/StateManager/EmptyPageViewStateManager.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EmptyPage 3 | // 4 | // Copyright (c) 2018 linhey - https://github.com/linhay 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in all 14 | // copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | 23 | import UIKit 24 | 25 | open class EmptyPageViewStateManager: EmptyPageViewManager, EmptyPageStateProtocol { 26 | 27 | open var state: State 28 | open var viewStore: [State: UIView] = [:] 29 | public let hookProvider = EmptyPageDelegate() 30 | open override var emptyViewProvider: () -> UIView? { 31 | get { viewProvider } 32 | set { _ = newValue } 33 | } 34 | 35 | public init(state: State) { 36 | self.state = state 37 | super.init() 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /document/badge.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | documentation 17 | 18 | 19 | documentation 20 | 21 | 22 | 100% 23 | 24 | 25 | 100% 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /document/docsets/EmptyPage.docset/Contents/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleIdentifier 6 | com.jazzy.emptypage 7 | CFBundleName 8 | EmptyPage 9 | DocSetPlatformFamily 10 | emptypage 11 | isDashDocset 12 | 13 | dashIndexFilePath 14 | index.html 15 | isJavaScriptEnabled 16 | 17 | DashDocSetFamily 18 | dashtoc 19 | 20 | 21 | -------------------------------------------------------------------------------- /document/docsets/EmptyPage.docset/Contents/Resources/Documents/badge.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | documentation 17 | 18 | 19 | documentation 20 | 21 | 22 | 100% 23 | 24 | 25 | 100% 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /document/docsets/EmptyPage.docset/Contents/Resources/Documents/img/carat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/document/docsets/EmptyPage.docset/Contents/Resources/Documents/img/carat.png -------------------------------------------------------------------------------- /document/docsets/EmptyPage.docset/Contents/Resources/Documents/img/dash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/document/docsets/EmptyPage.docset/Contents/Resources/Documents/img/dash.png -------------------------------------------------------------------------------- /document/docsets/EmptyPage.docset/Contents/Resources/Documents/img/gh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/document/docsets/EmptyPage.docset/Contents/Resources/Documents/img/gh.png -------------------------------------------------------------------------------- /document/docsets/EmptyPage.docset/Contents/Resources/Documents/img/spinner.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/document/docsets/EmptyPage.docset/Contents/Resources/Documents/img/spinner.gif -------------------------------------------------------------------------------- /document/docsets/EmptyPage.docset/Contents/Resources/Documents/js/jazzy.js: -------------------------------------------------------------------------------- 1 | window.jazzy = {'docset': false} 2 | if (typeof window.dash != 'undefined') { 3 | document.documentElement.className += ' dash' 4 | window.jazzy.docset = true 5 | } 6 | if (navigator.userAgent.match(/xcode/i)) { 7 | document.documentElement.className += ' xcode' 8 | window.jazzy.docset = true 9 | } 10 | 11 | function toggleItem($link, $content) { 12 | var animationDuration = 300; 13 | $link.toggleClass('token-open'); 14 | $content.slideToggle(animationDuration); 15 | } 16 | 17 | function itemLinkToContent($link) { 18 | return $link.parent().parent().next(); 19 | } 20 | 21 | // On doc load + hash-change, open any targetted item 22 | function openCurrentItemIfClosed() { 23 | if (window.jazzy.docset) { 24 | return; 25 | } 26 | var $link = $(`a[name="${location.hash.substring(1)}"]`).nextAll('.token'); 27 | $content = itemLinkToContent($link); 28 | if ($content.is(':hidden')) { 29 | toggleItem($link, $content); 30 | } 31 | } 32 | 33 | $(openCurrentItemIfClosed); 34 | $(window).on('hashchange', openCurrentItemIfClosed); 35 | 36 | // On item link ('token') click, toggle its discussion 37 | $('.token').on('click', function(event) { 38 | if (window.jazzy.docset) { 39 | return; 40 | } 41 | var $link = $(this); 42 | toggleItem($link, itemLinkToContent($link)); 43 | 44 | // Keeps the document from jumping to the hash. 45 | var href = $link.attr('href'); 46 | if (history.pushState) { 47 | history.pushState({}, '', href); 48 | } else { 49 | location.hash = href; 50 | } 51 | event.preventDefault(); 52 | }); 53 | 54 | // Clicks on links to the current, closed, item need to open the item 55 | $("a:not('.token')").on('click', function() { 56 | if (location == this.href) { 57 | openCurrentItemIfClosed(); 58 | } 59 | }); 60 | 61 | // KaTeX rendering 62 | if ("katex" in window) { 63 | $($('.math').each( (_, element) => { 64 | katex.render(element.textContent, element, { 65 | displayMode: $(element).hasClass('m-block'), 66 | throwOnError: false, 67 | trust: true 68 | }); 69 | })) 70 | } 71 | -------------------------------------------------------------------------------- /document/docsets/EmptyPage.docset/Contents/Resources/Documents/js/jazzy.search.js: -------------------------------------------------------------------------------- 1 | $(function(){ 2 | var $typeahead = $('[data-typeahead]'); 3 | var $form = $typeahead.parents('form'); 4 | var searchURL = $form.attr('action'); 5 | 6 | function displayTemplate(result) { 7 | return result.name; 8 | } 9 | 10 | function suggestionTemplate(result) { 11 | var t = '
'; 12 | t += '' + result.name + ''; 13 | if (result.parent_name) { 14 | t += '' + result.parent_name + ''; 15 | } 16 | t += '
'; 17 | return t; 18 | } 19 | 20 | $typeahead.one('focus', function() { 21 | $form.addClass('loading'); 22 | 23 | $.getJSON(searchURL).then(function(searchData) { 24 | const searchIndex = lunr(function() { 25 | this.ref('url'); 26 | this.field('name'); 27 | this.field('abstract'); 28 | for (const [url, doc] of Object.entries(searchData)) { 29 | this.add({url: url, name: doc.name, abstract: doc.abstract}); 30 | } 31 | }); 32 | 33 | $typeahead.typeahead( 34 | { 35 | highlight: true, 36 | minLength: 3, 37 | autoselect: true 38 | }, 39 | { 40 | limit: 10, 41 | display: displayTemplate, 42 | templates: { suggestion: suggestionTemplate }, 43 | source: function(query, sync) { 44 | const lcSearch = query.toLowerCase(); 45 | const results = searchIndex.query(function(q) { 46 | q.term(lcSearch, { boost: 100 }); 47 | q.term(lcSearch, { 48 | boost: 10, 49 | wildcard: lunr.Query.wildcard.TRAILING 50 | }); 51 | }).map(function(result) { 52 | var doc = searchData[result.ref]; 53 | doc.url = result.ref; 54 | return doc; 55 | }); 56 | sync(results); 57 | } 58 | } 59 | ); 60 | $form.removeClass('loading'); 61 | $typeahead.trigger('focus'); 62 | }); 63 | }); 64 | 65 | var baseURL = searchURL.slice(0, -"search.json".length); 66 | 67 | $typeahead.on('typeahead:select', function(e, result) { 68 | window.location = baseURL + result.url; 69 | }); 70 | }); 71 | -------------------------------------------------------------------------------- /document/docsets/EmptyPage.docset/Contents/Resources/Documents/undocumented.json: -------------------------------------------------------------------------------- 1 | { 2 | "warnings": [ 3 | 4 | ], 5 | "source_directory": "/Users/linhey/Desktop/EmptyPage/Example/scripts" 6 | } -------------------------------------------------------------------------------- /document/docsets/EmptyPage.docset/Contents/Resources/docSet.dsidx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/document/docsets/EmptyPage.docset/Contents/Resources/docSet.dsidx -------------------------------------------------------------------------------- /document/docsets/EmptyPage.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/document/docsets/EmptyPage.tgz -------------------------------------------------------------------------------- /document/img/carat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/document/img/carat.png -------------------------------------------------------------------------------- /document/img/dash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/document/img/dash.png -------------------------------------------------------------------------------- /document/img/gh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/document/img/gh.png -------------------------------------------------------------------------------- /document/img/spinner.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linhay/EmptyPage/c8a17490312fea97cecd028dd6bda98e86610be8/document/img/spinner.gif -------------------------------------------------------------------------------- /document/js/jazzy.js: -------------------------------------------------------------------------------- 1 | window.jazzy = {'docset': false} 2 | if (typeof window.dash != 'undefined') { 3 | document.documentElement.className += ' dash' 4 | window.jazzy.docset = true 5 | } 6 | if (navigator.userAgent.match(/xcode/i)) { 7 | document.documentElement.className += ' xcode' 8 | window.jazzy.docset = true 9 | } 10 | 11 | function toggleItem($link, $content) { 12 | var animationDuration = 300; 13 | $link.toggleClass('token-open'); 14 | $content.slideToggle(animationDuration); 15 | } 16 | 17 | function itemLinkToContent($link) { 18 | return $link.parent().parent().next(); 19 | } 20 | 21 | // On doc load + hash-change, open any targetted item 22 | function openCurrentItemIfClosed() { 23 | if (window.jazzy.docset) { 24 | return; 25 | } 26 | var $link = $(`a[name="${location.hash.substring(1)}"]`).nextAll('.token'); 27 | $content = itemLinkToContent($link); 28 | if ($content.is(':hidden')) { 29 | toggleItem($link, $content); 30 | } 31 | } 32 | 33 | $(openCurrentItemIfClosed); 34 | $(window).on('hashchange', openCurrentItemIfClosed); 35 | 36 | // On item link ('token') click, toggle its discussion 37 | $('.token').on('click', function(event) { 38 | if (window.jazzy.docset) { 39 | return; 40 | } 41 | var $link = $(this); 42 | toggleItem($link, itemLinkToContent($link)); 43 | 44 | // Keeps the document from jumping to the hash. 45 | var href = $link.attr('href'); 46 | if (history.pushState) { 47 | history.pushState({}, '', href); 48 | } else { 49 | location.hash = href; 50 | } 51 | event.preventDefault(); 52 | }); 53 | 54 | // Clicks on links to the current, closed, item need to open the item 55 | $("a:not('.token')").on('click', function() { 56 | if (location == this.href) { 57 | openCurrentItemIfClosed(); 58 | } 59 | }); 60 | 61 | // KaTeX rendering 62 | if ("katex" in window) { 63 | $($('.math').each( (_, element) => { 64 | katex.render(element.textContent, element, { 65 | displayMode: $(element).hasClass('m-block'), 66 | throwOnError: false, 67 | trust: true 68 | }); 69 | })) 70 | } 71 | -------------------------------------------------------------------------------- /document/js/jazzy.search.js: -------------------------------------------------------------------------------- 1 | $(function(){ 2 | var $typeahead = $('[data-typeahead]'); 3 | var $form = $typeahead.parents('form'); 4 | var searchURL = $form.attr('action'); 5 | 6 | function displayTemplate(result) { 7 | return result.name; 8 | } 9 | 10 | function suggestionTemplate(result) { 11 | var t = '
'; 12 | t += '' + result.name + ''; 13 | if (result.parent_name) { 14 | t += '' + result.parent_name + ''; 15 | } 16 | t += '
'; 17 | return t; 18 | } 19 | 20 | $typeahead.one('focus', function() { 21 | $form.addClass('loading'); 22 | 23 | $.getJSON(searchURL).then(function(searchData) { 24 | const searchIndex = lunr(function() { 25 | this.ref('url'); 26 | this.field('name'); 27 | this.field('abstract'); 28 | for (const [url, doc] of Object.entries(searchData)) { 29 | this.add({url: url, name: doc.name, abstract: doc.abstract}); 30 | } 31 | }); 32 | 33 | $typeahead.typeahead( 34 | { 35 | highlight: true, 36 | minLength: 3, 37 | autoselect: true 38 | }, 39 | { 40 | limit: 10, 41 | display: displayTemplate, 42 | templates: { suggestion: suggestionTemplate }, 43 | source: function(query, sync) { 44 | const lcSearch = query.toLowerCase(); 45 | const results = searchIndex.query(function(q) { 46 | q.term(lcSearch, { boost: 100 }); 47 | q.term(lcSearch, { 48 | boost: 10, 49 | wildcard: lunr.Query.wildcard.TRAILING 50 | }); 51 | }).map(function(result) { 52 | var doc = searchData[result.ref]; 53 | doc.url = result.ref; 54 | return doc; 55 | }); 56 | sync(results); 57 | } 58 | } 59 | ); 60 | $form.removeClass('loading'); 61 | $typeahead.trigger('focus'); 62 | }); 63 | }); 64 | 65 | var baseURL = searchURL.slice(0, -"search.json".length); 66 | 67 | $typeahead.on('typeahead:select', function(e, result) { 68 | window.location = baseURL + result.url; 69 | }); 70 | }); 71 | -------------------------------------------------------------------------------- /document/undocumented.json: -------------------------------------------------------------------------------- 1 | { 2 | "warnings": [ 3 | 4 | ], 5 | "source_directory": "/Users/linhey/Desktop/EmptyPage/Example/scripts" 6 | } --------------------------------------------------------------------------------