├── www ├── build │ ├── main.css.map │ ├── sw-toolbox.js │ ├── main.js.map │ └── main.js ├── assets │ ├── imgs │ │ └── logo.png │ ├── icon │ │ └── favicon.ico │ └── fonts │ │ ├── ionicons.eot │ │ ├── ionicons.ttf │ │ ├── ionicons.woff │ │ ├── ionicons.woff2 │ │ ├── roboto-bold.ttf │ │ ├── roboto-bold.woff │ │ ├── roboto-bold.woff2 │ │ ├── roboto-light.ttf │ │ ├── roboto-light.woff │ │ ├── roboto-medium.ttf │ │ ├── noto-sans-bold.ttf │ │ ├── noto-sans-bold.woff │ │ ├── roboto-light.woff2 │ │ ├── roboto-medium.woff │ │ ├── roboto-medium.woff2 │ │ ├── roboto-regular.ttf │ │ ├── roboto-regular.woff │ │ ├── roboto-regular.woff2 │ │ ├── noto-sans-regular.ttf │ │ ├── noto-sans-regular.woff │ │ ├── ionicons.scss │ │ ├── noto-sans.scss │ │ └── roboto.scss ├── manifest.json ├── service-worker.js └── index.html ├── src ├── pages │ ├── demo │ │ ├── demo.scss │ │ ├── demo.ts │ │ └── demo.html │ ├── home │ │ ├── home.scss │ │ ├── home.ts │ │ └── home.html │ ├── about │ │ ├── about.scss │ │ ├── about.ts │ │ └── about.html │ ├── contact │ │ ├── contact.scss │ │ ├── contact.ts │ │ └── contact.html │ └── tabs │ │ ├── tabs.html │ │ └── tabs.ts ├── app │ ├── app.html │ ├── main.ts │ ├── app.scss │ ├── app.component.ts │ └── app.module.ts ├── components │ ├── index.ts │ ├── index-list │ │ ├── index-list.module.ts │ │ ├── index-cell.ts │ │ ├── index-section.ts │ │ └── index-list.ts │ └── package.json ├── assets │ ├── imgs │ │ └── logo.png │ └── icon │ │ └── favicon.ico ├── manifest.json ├── service-worker.js ├── index.html └── theme │ └── variables.scss ├── ionic.starter.json ├── resources ├── icon.png ├── splash.png ├── ios │ ├── icon │ │ ├── icon.png │ │ ├── icon-1024.png │ │ ├── icon-40.png │ │ ├── icon-50.png │ │ ├── icon-60.png │ │ ├── icon-72.png │ │ ├── icon-76.png │ │ ├── icon@2x.png │ │ ├── icon-40@2x.png │ │ ├── icon-40@3x.png │ │ ├── icon-50@2x.png │ │ ├── icon-60@2x.png │ │ ├── icon-60@3x.png │ │ ├── icon-72@2x.png │ │ ├── icon-76@2x.png │ │ ├── icon-small.png │ │ ├── icon-83.5@2x.png │ │ ├── icon-small@2x.png │ │ └── icon-small@3x.png │ └── splash │ │ ├── Default-667h.png │ │ ├── Default-736h.png │ │ ├── Default~iphone.png │ │ ├── Default@2x~iphone.png │ │ ├── Default-568h@2x~iphone.png │ │ ├── Default-Landscape-736h.png │ │ ├── Default-Landscape~ipad.png │ │ ├── Default-Portrait~ipad.png │ │ ├── Default-Portrait@2x~ipad.png │ │ ├── Default-Landscape@2x~ipad.png │ │ ├── Default-Landscape@~ipadpro.png │ │ ├── Default-Portrait@~ipadpro.png │ │ └── Default@2x~universal~anyany.png ├── android │ ├── icon │ │ ├── drawable-hdpi-icon.png │ │ ├── drawable-ldpi-icon.png │ │ ├── drawable-mdpi-icon.png │ │ ├── drawable-xhdpi-icon.png │ │ ├── drawable-xxhdpi-icon.png │ │ └── drawable-xxxhdpi-icon.png │ └── splash │ │ ├── drawable-land-hdpi-screen.png │ │ ├── drawable-land-ldpi-screen.png │ │ ├── drawable-land-mdpi-screen.png │ │ ├── drawable-port-hdpi-screen.png │ │ ├── drawable-port-ldpi-screen.png │ │ ├── drawable-port-mdpi-screen.png │ │ ├── drawable-land-xhdpi-screen.png │ │ ├── drawable-land-xxhdpi-screen.png │ │ ├── drawable-land-xxxhdpi-screen.png │ │ ├── drawable-port-xhdpi-screen.png │ │ ├── drawable-port-xxhdpi-screen.png │ │ └── drawable-port-xxxhdpi-screen.png └── README.md ├── ionic.config.json ├── tslint.json ├── .editorconfig ├── .gitignore ├── tsconfig.json ├── package.json ├── README.md ├── config.xml └── .sourcemaps └── main.js.map /www/build/main.css.map: -------------------------------------------------------------------------------- 1 | null -------------------------------------------------------------------------------- /src/pages/demo/demo.scss: -------------------------------------------------------------------------------- 1 | page-home { 2 | 3 | } 4 | -------------------------------------------------------------------------------- /src/pages/home/home.scss: -------------------------------------------------------------------------------- 1 | page-home { 2 | 3 | } 4 | -------------------------------------------------------------------------------- /src/app/app.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/pages/about/about.scss: -------------------------------------------------------------------------------- 1 | page-about { 2 | 3 | } 4 | -------------------------------------------------------------------------------- /src/pages/contact/contact.scss: -------------------------------------------------------------------------------- 1 | page-contact { 2 | 3 | } 4 | -------------------------------------------------------------------------------- /ionic.starter.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Tabs Starter", 3 | "baseref": "master" 4 | } 5 | -------------------------------------------------------------------------------- /src/components/index.ts: -------------------------------------------------------------------------------- 1 | export {IndexListModule} from './index-list/index-list.module'; 2 | -------------------------------------------------------------------------------- /resources/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/icon.png -------------------------------------------------------------------------------- /resources/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/splash.png -------------------------------------------------------------------------------- /src/assets/imgs/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/src/assets/imgs/logo.png -------------------------------------------------------------------------------- /www/assets/imgs/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/www/assets/imgs/logo.png -------------------------------------------------------------------------------- /resources/ios/icon/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/ios/icon/icon.png -------------------------------------------------------------------------------- /src/assets/icon/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/src/assets/icon/favicon.ico -------------------------------------------------------------------------------- /www/assets/icon/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/www/assets/icon/favicon.ico -------------------------------------------------------------------------------- /www/assets/fonts/ionicons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/www/assets/fonts/ionicons.eot -------------------------------------------------------------------------------- /www/assets/fonts/ionicons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/www/assets/fonts/ionicons.ttf -------------------------------------------------------------------------------- /resources/ios/icon/icon-1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/ios/icon/icon-1024.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/ios/icon/icon-40.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/ios/icon/icon-50.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/ios/icon/icon-60.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/ios/icon/icon-72.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/ios/icon/icon-76.png -------------------------------------------------------------------------------- /resources/ios/icon/icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/ios/icon/icon@2x.png -------------------------------------------------------------------------------- /www/assets/fonts/ionicons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/www/assets/fonts/ionicons.woff -------------------------------------------------------------------------------- /www/assets/fonts/ionicons.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/www/assets/fonts/ionicons.woff2 -------------------------------------------------------------------------------- /www/assets/fonts/roboto-bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/www/assets/fonts/roboto-bold.ttf -------------------------------------------------------------------------------- /resources/ios/icon/icon-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/ios/icon/icon-40@2x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/ios/icon/icon-40@3x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-50@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/ios/icon/icon-50@2x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/ios/icon/icon-60@2x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/ios/icon/icon-60@3x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-72@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/ios/icon/icon-72@2x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/ios/icon/icon-76@2x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/ios/icon/icon-small.png -------------------------------------------------------------------------------- /www/assets/fonts/roboto-bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/www/assets/fonts/roboto-bold.woff -------------------------------------------------------------------------------- /www/assets/fonts/roboto-bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/www/assets/fonts/roboto-bold.woff2 -------------------------------------------------------------------------------- /www/assets/fonts/roboto-light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/www/assets/fonts/roboto-light.ttf -------------------------------------------------------------------------------- /www/assets/fonts/roboto-light.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/www/assets/fonts/roboto-light.woff -------------------------------------------------------------------------------- /www/assets/fonts/roboto-medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/www/assets/fonts/roboto-medium.ttf -------------------------------------------------------------------------------- /resources/ios/icon/icon-83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/ios/icon/icon-83.5@2x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-small@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/ios/icon/icon-small@2x.png -------------------------------------------------------------------------------- /resources/ios/icon/icon-small@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/ios/icon/icon-small@3x.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-667h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/ios/splash/Default-667h.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-736h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/ios/splash/Default-736h.png -------------------------------------------------------------------------------- /www/assets/fonts/noto-sans-bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/www/assets/fonts/noto-sans-bold.ttf -------------------------------------------------------------------------------- /www/assets/fonts/noto-sans-bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/www/assets/fonts/noto-sans-bold.woff -------------------------------------------------------------------------------- /www/assets/fonts/roboto-light.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/www/assets/fonts/roboto-light.woff2 -------------------------------------------------------------------------------- /www/assets/fonts/roboto-medium.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/www/assets/fonts/roboto-medium.woff -------------------------------------------------------------------------------- /www/assets/fonts/roboto-medium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/www/assets/fonts/roboto-medium.woff2 -------------------------------------------------------------------------------- /www/assets/fonts/roboto-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/www/assets/fonts/roboto-regular.ttf -------------------------------------------------------------------------------- /www/assets/fonts/roboto-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/www/assets/fonts/roboto-regular.woff -------------------------------------------------------------------------------- /www/assets/fonts/roboto-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/www/assets/fonts/roboto-regular.woff2 -------------------------------------------------------------------------------- /resources/ios/splash/Default~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/ios/splash/Default~iphone.png -------------------------------------------------------------------------------- /www/assets/fonts/noto-sans-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/www/assets/fonts/noto-sans-regular.ttf -------------------------------------------------------------------------------- /www/assets/fonts/noto-sans-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/www/assets/fonts/noto-sans-regular.woff -------------------------------------------------------------------------------- /resources/ios/splash/Default@2x~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/ios/splash/Default@2x~iphone.png -------------------------------------------------------------------------------- /resources/android/icon/drawable-hdpi-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/android/icon/drawable-hdpi-icon.png -------------------------------------------------------------------------------- /resources/android/icon/drawable-ldpi-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/android/icon/drawable-ldpi-icon.png -------------------------------------------------------------------------------- /resources/android/icon/drawable-mdpi-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/android/icon/drawable-mdpi-icon.png -------------------------------------------------------------------------------- /resources/android/icon/drawable-xhdpi-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/android/icon/drawable-xhdpi-icon.png -------------------------------------------------------------------------------- /resources/android/icon/drawable-xxhdpi-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/android/icon/drawable-xxhdpi-icon.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-568h@2x~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/ios/splash/Default-568h@2x~iphone.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-Landscape-736h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/ios/splash/Default-Landscape-736h.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-Landscape~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/ios/splash/Default-Landscape~ipad.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-Portrait~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/ios/splash/Default-Portrait~ipad.png -------------------------------------------------------------------------------- /resources/android/icon/drawable-xxxhdpi-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/android/icon/drawable-xxxhdpi-icon.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-Portrait@2x~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/ios/splash/Default-Portrait@2x~ipad.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-Landscape@2x~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/ios/splash/Default-Landscape@2x~ipad.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-Landscape@~ipadpro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/ios/splash/Default-Landscape@~ipadpro.png -------------------------------------------------------------------------------- /resources/ios/splash/Default-Portrait@~ipadpro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/ios/splash/Default-Portrait@~ipadpro.png -------------------------------------------------------------------------------- /resources/ios/splash/Default@2x~universal~anyany.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/ios/splash/Default@2x~universal~anyany.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-land-hdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/android/splash/drawable-land-hdpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-land-ldpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/android/splash/drawable-land-ldpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-land-mdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/android/splash/drawable-land-mdpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-port-hdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/android/splash/drawable-port-hdpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-port-ldpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/android/splash/drawable-port-ldpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-port-mdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/android/splash/drawable-port-mdpi-screen.png -------------------------------------------------------------------------------- /ionic.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ionic3-index-list", 3 | "app_id": "", 4 | "type": "ionic-angular", 5 | "integrations": { 6 | "cordova": {} 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /resources/android/splash/drawable-land-xhdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/android/splash/drawable-land-xhdpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-land-xxhdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/android/splash/drawable-land-xxhdpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-land-xxxhdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/android/splash/drawable-land-xxxhdpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-port-xhdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/android/splash/drawable-port-xhdpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-port-xxhdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/android/splash/drawable-port-xxhdpi-screen.png -------------------------------------------------------------------------------- /resources/android/splash/drawable-port-xxxhdpi-screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CK110/ionic3-index-list/HEAD/resources/android/splash/drawable-port-xxxhdpi-screen.png -------------------------------------------------------------------------------- /src/app/main.ts: -------------------------------------------------------------------------------- 1 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; 2 | 3 | import { AppModule } from './app.module'; 4 | 5 | platformBrowserDynamic().bootstrapModule(AppModule); 6 | -------------------------------------------------------------------------------- /tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "rules": { 3 | "no-duplicate-variable": true, 4 | "no-unused-variable": [ 5 | true 6 | ] 7 | }, 8 | "rulesDirectory": [ 9 | "node_modules/tslint-eslint-rules/dist/rules" 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /src/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Ionic", 3 | "short_name": "Ionic", 4 | "start_url": "index.html", 5 | "display": "standalone", 6 | "icons": [{ 7 | "src": "assets/imgs/logo.png", 8 | "sizes": "512x512", 9 | "type": "image/png" 10 | }], 11 | "background_color": "#4e8ef7", 12 | "theme_color": "#4e8ef7" 13 | } -------------------------------------------------------------------------------- /www/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Ionic", 3 | "short_name": "Ionic", 4 | "start_url": "index.html", 5 | "display": "standalone", 6 | "icons": [{ 7 | "src": "assets/imgs/logo.png", 8 | "sizes": "512x512", 9 | "type": "image/png" 10 | }], 11 | "background_color": "#4e8ef7", 12 | "theme_color": "#4e8ef7" 13 | } -------------------------------------------------------------------------------- /src/pages/tabs/tabs.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig helps developers define and maintain consistent coding styles between different editors and IDEs 2 | # editorconfig.org 3 | 4 | root = true 5 | 6 | [*] 7 | indent_style = space 8 | indent_size = 2 9 | 10 | # We recommend you to keep these unchanged 11 | end_of_line = lf 12 | charset = utf-8 13 | trim_trailing_whitespace = true 14 | insert_final_newline = true 15 | 16 | [*.md] 17 | trim_trailing_whitespace = false -------------------------------------------------------------------------------- /resources/README.md: -------------------------------------------------------------------------------- 1 | These are Cordova resources. You can replace icon.png and splash.png and run 2 | `ionic cordova resources` to generate custom icons and splash screens for your 3 | app. See `ionic cordova resources --help` for details. 4 | 5 | Cordova reference documentation: 6 | 7 | - Icons: https://cordova.apache.org/docs/en/latest/config_ref/images.html 8 | - Splash Screens: https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-splashscreen/ 9 | -------------------------------------------------------------------------------- /src/pages/tabs/tabs.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | 3 | import { AboutPage } from '../about/about'; 4 | import { ContactPage } from '../contact/contact'; 5 | import { HomePage } from '../home/home'; 6 | import {DemoPage} from "../demo/demo"; 7 | 8 | @Component({ 9 | templateUrl: 'tabs.html' 10 | }) 11 | export class TabsPage { 12 | 13 | tab1Root = HomePage; 14 | tab2Root = AboutPage; 15 | tab3Root = ContactPage; 16 | tab4Root = DemoPage; 17 | 18 | 19 | constructor() { 20 | 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/pages/demo/demo.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { NavController } from 'ionic-angular'; 3 | 4 | @Component({ 5 | selector: 'page-demo', 6 | templateUrl: 'demo.html' 7 | }) 8 | export class DemoPage { 9 | indexs = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']; 10 | 11 | sections:any[] = Array.apply(null, Array(10)).map(function(item, i) { 12 | return 0; 13 | }); 14 | 15 | constructor(public navCtrl: NavController) { 16 | 17 | 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /src/pages/home/home.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { NavController } from 'ionic-angular'; 3 | 4 | @Component({ 5 | selector: 'page-home', 6 | templateUrl: 'home.html' 7 | }) 8 | export class HomePage { 9 | indexs = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']; 10 | 11 | sections:any[] = Array.apply(null, Array(10)).map(function(item, i) { 12 | return 0; 13 | }); 14 | 15 | constructor(public navCtrl: NavController) { 16 | 17 | 18 | } 19 | 20 | 21 | 22 | 23 | } 24 | -------------------------------------------------------------------------------- /src/pages/contact/contact.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { NavController } from 'ionic-angular'; 3 | 4 | @Component({ 5 | selector: 'page-contact', 6 | templateUrl: 'contact.html' 7 | }) 8 | export class ContactPage { 9 | 10 | indexs = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']; 11 | 12 | sections:any[] = Array.apply(null, Array(10)).map(function(item, i) { 13 | return 0; 14 | }); 15 | 16 | constructor(public navCtrl: NavController) { 17 | 18 | 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Specifies intentionally untracked files to ignore when using Git 2 | # http://git-scm.com/docs/gitignore 3 | 4 | *~ 5 | *.sw[mnpcod] 6 | *.log 7 | *.tmp 8 | *.tmp.* 9 | log.txt 10 | *.sublime-project 11 | *.sublime-workspace 12 | .vscode/ 13 | npm-debug.log* 14 | 15 | .idea/ 16 | .sass-cache/ 17 | .tmp/ 18 | .versions/ 19 | coverage/ 20 | dist/ 21 | node_modules/ 22 | tmp/ 23 | temp/ 24 | hooks/ 25 | platforms/ 26 | plugins/ 27 | plugins/android.json 28 | plugins/ios.json 29 | $RECYCLE.BIN/ 30 | release/ 31 | 32 | .DS_Store 33 | Thumbs.db 34 | UserInterfaceState.xcuserstate 35 | -------------------------------------------------------------------------------- /src/pages/demo/demo.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Home 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | section 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/pages/about/about.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { NavController } from 'ionic-angular'; 3 | import {Http} from "@angular/http"; 4 | import "rxjs/add/operator/map"; 5 | 6 | @Component({ 7 | selector: 'page-about', 8 | templateUrl: 'about.html' 9 | }) 10 | export class AboutPage { 11 | 12 | indexs = ['A','B','C','F','G','J','K','L','O','P','Q','R','S','T','U','V','W','X','Y','Z']; 13 | 14 | sections:any[] = Array.apply(null, Array(50)).map(function(item, i) { 15 | return 0; 16 | }); 17 | 18 | constructor(public navCtrl: NavController, public http: Http) { 19 | 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /src/components/index-list/index-list.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { IndexListComponent } from './index-list'; 3 | import {IndexSectionComponent} from './index-section'; 4 | import {CommonModule} from '@angular/common'; 5 | import {IndexCellComponent} from './index-cell'; 6 | 7 | @NgModule({ 8 | declarations: [ 9 | IndexListComponent, 10 | IndexSectionComponent, 11 | IndexCellComponent 12 | ], 13 | imports: [ 14 | CommonModule, 15 | ], 16 | exports: [ 17 | IndexListComponent, 18 | IndexSectionComponent, 19 | IndexCellComponent 20 | ] 21 | }) 22 | export class IndexListModule {} 23 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowSyntheticDefaultImports": true, 4 | "declaration": false, 5 | "emitDecoratorMetadata": true, 6 | "experimentalDecorators": true, 7 | "lib": [ 8 | "dom", 9 | "es2015" 10 | ], 11 | "module": "es2015", 12 | "moduleResolution": "node", 13 | "sourceMap": true, 14 | "target": "es5" 15 | }, 16 | "include": [ 17 | "src/**/*.ts" 18 | ], 19 | "exclude": [ 20 | "node_modules", 21 | "src/**/*.spec.ts", 22 | "src/**/__tests__/*.ts" 23 | ], 24 | "compileOnSave": false, 25 | "atom": { 26 | "rewriteTsconfig": false 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/pages/about/about.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | About 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | section 18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 | -------------------------------------------------------------------------------- /src/pages/contact/contact.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Contact 5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 |
14 | 15 | 16 | 17 | 18 | section 19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 |
28 | -------------------------------------------------------------------------------- /src/app/app.scss: -------------------------------------------------------------------------------- 1 | // http://ionicframework.com/docs/theming/ 2 | 3 | 4 | // App Global Sass 5 | // -------------------------------------------------- 6 | // Put style rules here that you want to apply globally. These 7 | // styles are for the entire app and not just one component. 8 | // Additionally, this file can be also used as an entry point 9 | // to import other Sass files to be included in the output CSS. 10 | // 11 | // Shared Sass variables, which can be used to adjust Ionic's 12 | // default Sass variables, belong in "theme/variables.scss". 13 | // 14 | // To declare rules for a specific mode, create a child rule 15 | // for the .md, .ios, or .wp mode classes. The mode class is 16 | // automatically applied to the element in the app. 17 | -------------------------------------------------------------------------------- /src/app/app.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | import { Platform } from 'ionic-angular'; 3 | import { StatusBar } from '@ionic-native/status-bar'; 4 | import { SplashScreen } from '@ionic-native/splash-screen'; 5 | 6 | import { TabsPage } from '../pages/tabs/tabs'; 7 | 8 | @Component({ 9 | templateUrl: 'app.html' 10 | }) 11 | export class MyApp { 12 | rootPage:any = TabsPage; 13 | 14 | constructor(platform: Platform, statusBar: StatusBar, splashScreen: SplashScreen) { 15 | platform.ready().then(() => { 16 | // Okay, so the platform is ready and our plugins are available. 17 | // Here you can do any higher level native things you might need. 18 | statusBar.styleDefault(); 19 | splashScreen.hide(); 20 | }); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/service-worker.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Check out https://googlechromelabs.github.io/sw-toolbox/ for 3 | * more info on how to use sw-toolbox to custom configure your service worker. 4 | */ 5 | 6 | 7 | 'use strict'; 8 | importScripts('./build/sw-toolbox.js'); 9 | 10 | self.toolbox.options.cache = { 11 | name: 'ionic-cache' 12 | }; 13 | 14 | // pre-cache our key assets 15 | self.toolbox.precache( 16 | [ 17 | './build/main.js', 18 | './build/vendor.js', 19 | './build/main.css', 20 | './build/polyfills.js', 21 | 'index.html', 22 | 'manifest.json' 23 | ] 24 | ); 25 | 26 | // dynamically cache any other local assets 27 | self.toolbox.router.any('/*', self.toolbox.fastest); 28 | 29 | // for any other requests go to the network, cache, 30 | // and then only use that cached resource if your user goes offline 31 | self.toolbox.router.default = self.toolbox.networkFirst; 32 | -------------------------------------------------------------------------------- /www/service-worker.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Check out https://googlechromelabs.github.io/sw-toolbox/ for 3 | * more info on how to use sw-toolbox to custom configure your service worker. 4 | */ 5 | 6 | 7 | 'use strict'; 8 | importScripts('./build/sw-toolbox.js'); 9 | 10 | self.toolbox.options.cache = { 11 | name: 'ionic-cache' 12 | }; 13 | 14 | // pre-cache our key assets 15 | self.toolbox.precache( 16 | [ 17 | './build/main.js', 18 | './build/vendor.js', 19 | './build/main.css', 20 | './build/polyfills.js', 21 | 'index.html', 22 | 'manifest.json' 23 | ] 24 | ); 25 | 26 | // dynamically cache any other local assets 27 | self.toolbox.router.any('/*', self.toolbox.fastest); 28 | 29 | // for any other requests go to the network, cache, 30 | // and then only use that cached resource if your user goes offline 31 | self.toolbox.router.default = self.toolbox.networkFirst; 32 | -------------------------------------------------------------------------------- /src/components/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ionic3-index-list", 3 | "version": "1.0.8", 4 | "description": "ionic3-index-list", 5 | "scripts": { 6 | "test": "echo \"Error: no test specified\" && exit 1" 7 | }, 8 | "repository": { 9 | "type": "git", 10 | "url": "git+https://github.com/CK110/ionic3-index-list.git" 11 | }, 12 | "keywords": [ 13 | "ionic2", 14 | "ionic3", 15 | "angular4", 16 | "ionic2-index-list" 17 | ], 18 | "author": "kaichen", 19 | "license": "MIT", 20 | "bugs": { 21 | "url": "https://github.com/CK110/ionic3-index-list/issues" 22 | }, 23 | "homepage": "https://github.com/CK110/ionic3-index-list#readme", 24 | "peerDependencies": { 25 | "@angular/common": "^4.0.0 || ^5.0.0", 26 | "@angular/core": "^4.0.0 || ^5.0.0" 27 | }, 28 | "$schema": "../../node_modules/ng-packagr/package.schema.json", 29 | "ngPackage": { 30 | "lib": { 31 | "entryFile": "index.ts" 32 | } 33 | }, 34 | "dest":"dist" 35 | } 36 | -------------------------------------------------------------------------------- /src/components/index-list/index-cell.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'ion-index-cell', 5 | template: ` 6 |
7 |
8 | 9 |
10 |
11 | `, 12 | styles: [` 13 | .index-cell{ 14 | background-color: #fff; 15 | padding-left:10px 16 | } 17 | 18 | .index-cell-item{ 19 | box-sizing: border-box; 20 | color: inherit; 21 | min-height: 48px; 22 | display: block; 23 | overflow: hidden; 24 | position: relative; 25 | text-decoration: none; 26 | border-bottom: 1px solid #dcd8d8; 27 | width: 100%; 28 | display: flex; 29 | align-items: center; 30 | } 31 | `] 32 | }) 33 | export class IndexCellComponent implements OnInit { 34 | 35 | constructor() { } 36 | 37 | ngOnInit() { } 38 | 39 | } 40 | -------------------------------------------------------------------------------- /src/pages/home/home.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Home 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 新的朋友 18 | 19 | 20 | 21 | 群聊 22 | 23 | 24 | 25 | 标签 26 | 27 | 28 | 29 | 公众号 30 | 31 | 32 |
33 | 34 | 35 | 36 | 37 | section 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 |
46 | 47 |
48 | -------------------------------------------------------------------------------- /www/assets/fonts/ionicons.scss: -------------------------------------------------------------------------------- 1 | 2 | // Ionicons Icon Font CSS 3 | // -------------------------- 4 | // Ionicons CSS for Ionic's element 5 | // ionicons-icons.scss has the icons and their unicode characters 6 | 7 | $ionicons-font-path: $font-path !default; 8 | 9 | @import "ionicons-icons"; 10 | @import "ionicons-variables"; 11 | 12 | 13 | @font-face { 14 | font-family: "Ionicons"; 15 | src: url("#{$ionicons-font-path}/ionicons.woff2?v=#{$ionicons-version}") format("woff2"), 16 | url("#{$ionicons-font-path}/ionicons.woff?v=#{$ionicons-version}") format("woff"), 17 | url("#{$ionicons-font-path}/ionicons.ttf?v=#{$ionicons-version}") format("truetype"); 18 | font-weight: normal; 19 | font-style: normal; 20 | } 21 | 22 | ion-icon { 23 | display: inline-block; 24 | 25 | font-family: "Ionicons"; 26 | -moz-osx-font-smoothing: grayscale; 27 | -webkit-font-smoothing: antialiased; 28 | font-style: normal; 29 | font-variant: normal; 30 | font-weight: normal; 31 | line-height: 1; 32 | text-rendering: auto; 33 | text-transform: none; 34 | speak: none; 35 | 36 | @include rtl() { 37 | &[aria-label^="arrow"]::before, 38 | &[flip-rtl]::before { 39 | transform: scaleX(-1); 40 | } 41 | 42 | &[unflip-rtl]::before { 43 | transform: scaleX(1); 44 | } 45 | } 46 | 47 | &::before { 48 | display: inline-block; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/app/app.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule, ErrorHandler } from '@angular/core'; 2 | import { BrowserModule } from '@angular/platform-browser'; 3 | import { IonicApp, IonicModule, IonicErrorHandler } from 'ionic-angular'; 4 | import { MyApp } from './app.component'; 5 | 6 | import { AboutPage } from '../pages/about/about'; 7 | import { ContactPage } from '../pages/contact/contact'; 8 | import { HomePage } from '../pages/home/home'; 9 | import { TabsPage } from '../pages/tabs/tabs'; 10 | 11 | import { StatusBar } from '@ionic-native/status-bar'; 12 | import { SplashScreen } from '@ionic-native/splash-screen'; 13 | import {IndexListModule} from "../components/index"; 14 | import {DemoPage} from "../pages/demo/demo"; 15 | import {HttpModule} from "@angular/http"; 16 | 17 | @NgModule({ 18 | declarations: [ 19 | MyApp, 20 | AboutPage, 21 | ContactPage, 22 | HomePage, 23 | TabsPage, 24 | DemoPage 25 | ], 26 | imports: [ 27 | BrowserModule, 28 | IonicModule.forRoot(MyApp), 29 | HttpModule, 30 | IndexListModule 31 | ], 32 | bootstrap: [IonicApp], 33 | entryComponents: [ 34 | MyApp, 35 | AboutPage, 36 | ContactPage, 37 | HomePage, 38 | TabsPage, 39 | DemoPage 40 | ], 41 | providers: [ 42 | StatusBar, 43 | SplashScreen, 44 | {provide: ErrorHandler, useClass: IonicErrorHandler} 45 | ] 46 | }) 47 | export class AppModule {} 48 | -------------------------------------------------------------------------------- /www/assets/fonts/noto-sans.scss: -------------------------------------------------------------------------------- 1 | // Noto Sans Font 2 | // Google 3 | // Apache License, version 2.0 4 | // http://www.apache.org/licenses/LICENSE-2.0.html 5 | 6 | $noto-sans-font-path: $font-path !default; 7 | 8 | @font-face { 9 | font-family: "Noto Sans"; 10 | font-style: normal; 11 | font-weight: 300; 12 | src: local("Noto Sans"), local("Noto-Sans-Regular"), url("#{$noto-sans-font-path}/noto-sans-regular.woff") format("woff"), url("#{$noto-sans-font-path}/noto-sans-regular.ttf") format("truetype"); 13 | } 14 | 15 | @font-face { 16 | font-family: "Noto Sans"; 17 | font-style: normal; 18 | font-weight: 400; 19 | src: local("Noto Sans"), local("Noto-Sans-Regular"), url("#{$noto-sans-font-path}/noto-sans-regular.woff") format("woff"), url("#{$noto-sans-font-path}/noto-sans-regular.ttf") format("truetype"); 20 | } 21 | 22 | @font-face { 23 | font-family: "Noto Sans"; 24 | font-style: normal; 25 | font-weight: 500; 26 | src: local("Noto Sans Bold"), local("Noto-Sans-Bold"), url("#{$noto-sans-font-path}/noto-sans-bold.woff") format("woff"), url("#{$noto-sans-font-path}/noto-sans-bold.ttf") format("truetype"); 27 | } 28 | 29 | @font-face { 30 | font-family: "Noto Sans"; 31 | font-style: normal; 32 | font-weight: 700; 33 | src: local("Noto Sans Bold"), local("Noto-Sans-Bold"), url("#{$noto-sans-font-path}/noto-sans-bold.woff") format("woff"), url("#{$noto-sans-font-path}/noto-sans-bold.ttf") format("truetype"); 34 | } 35 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ionic3-index-list", 3 | "version": "0.0.1", 4 | "author": "Ionic Framework", 5 | "homepage": "http://ionicframework.com/", 6 | "private": true, 7 | "scripts": { 8 | "clean": "ionic-app-scripts clean", 9 | "build": "ionic-app-scripts build", 10 | "lint": "ionic-app-scripts lint", 11 | "ionic:build": "ionic-app-scripts build", 12 | "ionic:serve": "ionic-app-scripts serve", 13 | "ngcompile": "node_modules/.bin/ngc -p tsconfig-aot.json", 14 | "build:lib": "ng-packagr -p src/components/package.json" 15 | }, 16 | "dependencies": { 17 | "@angular/common": "5.0.3", 18 | "@angular/compiler": "5.0.3", 19 | "@angular/compiler-cli": "5.0.3", 20 | "@angular/core": "5.0.3", 21 | "@angular/forms": "5.0.3", 22 | "@angular/http": "5.0.3", 23 | "@angular/platform-browser": "5.0.3", 24 | "@angular/platform-browser-dynamic": "5.0.3", 25 | "@ionic-native/core": "4.4.0", 26 | "@ionic-native/splash-screen": "4.4.0", 27 | "@ionic-native/status-bar": "4.4.0", 28 | "@ionic/storage": "2.1.3", 29 | "ionic-angular": "3.9.2", 30 | "ionicons": "3.0.0", 31 | "ng-packagr": "^2.1.0", 32 | "rxjs": "5.5.2", 33 | "sw-toolbox": "3.6.0", 34 | "tsickle": "^0.27.2", 35 | "zone.js": "0.8.18" 36 | }, 37 | "devDependencies": { 38 | "@ionic/app-scripts": "3.1.8", 39 | "typescript": "2.4.2" 40 | }, 41 | "description": "An Ionic project" 42 | } 43 | -------------------------------------------------------------------------------- /www/assets/fonts/roboto.scss: -------------------------------------------------------------------------------- 1 | // Roboto Font 2 | // Google 3 | // Apache License, version 2.0 4 | // http://www.apache.org/licenses/LICENSE-2.0.html 5 | 6 | $roboto-font-path: $font-path !default; 7 | 8 | @font-face { 9 | font-family: "Roboto"; 10 | font-style: normal; 11 | font-weight: 300; 12 | src: local("Roboto Light"), local("Roboto-Light"), url("#{$roboto-font-path}/roboto-light.woff2") format("woff2"), url("#{$roboto-font-path}/roboto-light.woff") format("woff"), url("#{$roboto-font-path}/roboto-light.ttf") format("truetype"); 13 | } 14 | 15 | @font-face { 16 | font-family: "Roboto"; 17 | font-style: normal; 18 | font-weight: 400; 19 | src: local("Roboto"), local("Roboto-Regular"), url("#{$roboto-font-path}/roboto-regular.woff2") format("woff2"), url("#{$roboto-font-path}/roboto-regular.woff") format("woff"), url("#{$roboto-font-path}/roboto-regular.ttf") format("truetype"); 20 | } 21 | 22 | @font-face { 23 | font-family: "Roboto"; 24 | font-style: normal; 25 | font-weight: 500; 26 | src: local("Roboto Medium"), local("Roboto-Medium"), url("#{$roboto-font-path}/roboto-medium.woff2") format("woff2"), url("#{$roboto-font-path}/roboto-medium.woff") format("woff"), url("#{$roboto-font-path}/roboto-medium.ttf") format("truetype"); 27 | } 28 | 29 | @font-face { 30 | font-family: "Roboto"; 31 | font-style: normal; 32 | font-weight: 700; 33 | src: local("Roboto Bold"), local("Roboto-Bold"), url("#{$roboto-font-path}/roboto-bold.woff2") format("woff2"), url("#{$roboto-font-path}/roboto-bold.woff") format("woff"), url("#{$roboto-font-path}/roboto-bold.ttf") format("truetype"); 34 | } 35 | -------------------------------------------------------------------------------- /src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Ionic App 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ionic3-index-list 2 | 3 | [![NPM version](https://img.shields.io/npm/v/ionic3-index-list.svg)](https://www.npmjs.com/package/ionic3-index-list) 4 | 5 | index-list 在联系人页面中很常用 6 | 7 | 之前试过[ionic2-indexed-scroll](https://github.com/HsuanXyz/ionic2-indexed-scroll),比较[ionic2-alpha-scroll](https://github.com/rossmartin/ionic2-alpha-scroll),可能更angular一些, 8 | 但是并不是组件,而且在ios上有些bug,所以就写了该组件,该组件借鉴了一些上面所述组件的代码。 9 | 10 | 不依赖于ionic3组件,可以自定义` `显示的内容 11 | 12 | ## Installation 13 | 14 | `npm i ionic3-index-list --save` 15 | 16 | ## Usage 17 | 18 | ### Import In AppModule 19 | 20 | ```typescript 21 | import {IndexListModule} from "ionic3-index-list"; 22 | 23 | @NgModule({ 24 | declarations: [ 25 | 26 | ], 27 | imports: [ 28 | IndexListModule 29 | ] 30 | }) 31 | 32 | ``` 33 | 34 | ### Use In Templete 35 | 36 | ``` 37 | 38 | 39 | 40 | 222 41 | 42 | 43 | 222 44 | 45 | 46 | 222 47 | 48 | 49 | 222 50 | 51 | 52 | 53 | 54 | 55 | 222 56 | 57 | 58 | 222 59 | 60 | 61 | 222 62 | 63 | 64 | 222 65 | 66 | 67 | 68 | ``` 69 | -------------------------------------------------------------------------------- /www/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | Ionic App 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /src/components/index-list/index-section.ts: -------------------------------------------------------------------------------- 1 | import { 2 | AfterViewChecked, Component, ContentChildren, ElementRef, Input, 3 | QueryList 4 | } from '@angular/core'; 5 | import {IndexCellComponent} from './index-cell'; 6 | 7 | @Component({ 8 | selector: 'ion-index-section', 9 | template: ` 10 |
11 | 12 |
13 | {{index}} 14 |
15 | 16 | 17 |
18 | 19 | 20 | 21 |
22 |
23 | `, 24 | styles: [` 25 | .index-section-index{ 26 | margin: 0; 27 | padding: 2px 10px 2px 10px; 28 | background-color: #fafafa; 29 | border-bottom: 1px solid #dedede; 30 | } 31 | 32 | .index-section-main{ 33 | /*border-bottom: 1px solid #dedede;*/ 34 | } 35 | 36 | .index-section-current .index-section-index{ 37 | position: sticky; 38 | position: -webkit-sticky; 39 | top: 0px; 40 | left: 0px; 41 | width: 100%; 42 | z-index: 3; 43 | transform: translateZ(0px); 44 | } 45 | `] 46 | }) 47 | export class IndexSectionComponent implements AfterViewChecked { 48 | 49 | _current=false; 50 | 51 | @Input() index: string; 52 | 53 | @ContentChildren(IndexCellComponent) _listOfIndexCell: QueryList; 54 | 55 | constructor(public elementRef: ElementRef) { } 56 | 57 | getElementRef():ElementRef{ 58 | return this.elementRef; 59 | } 60 | 61 | ngAfterViewChecked(): void { 62 | // setTimeout(()=>{ 63 | // if (this._listOfIndexCell && this._listOfIndexCell.length) { 64 | // const listArray = this._listOfIndexCell.toArray(); 65 | // listArray[listArray.length - 1]._lastItem = true; 66 | // } 67 | // }) 68 | } 69 | 70 | } 71 | -------------------------------------------------------------------------------- /src/theme/variables.scss: -------------------------------------------------------------------------------- 1 | // Ionic Variables and Theming. For more info, please see: 2 | // http://ionicframework.com/docs/theming/ 3 | 4 | // Font path is used to include ionicons, 5 | // roboto, and noto sans fonts 6 | $font-path: "../assets/fonts"; 7 | 8 | 9 | // The app direction is used to include 10 | // rtl styles in your app. For more info, please see: 11 | // http://ionicframework.com/docs/theming/rtl-support/ 12 | $app-direction: ltr; 13 | 14 | 15 | @import "ionic.globals"; 16 | 17 | 18 | // Shared Variables 19 | // -------------------------------------------------- 20 | // To customize the look and feel of this app, you can override 21 | // the Sass variables found in Ionic's source scss files. 22 | // To view all the possible Ionic variables, see: 23 | // http://ionicframework.com/docs/theming/overriding-ionic-variables/ 24 | 25 | 26 | 27 | 28 | // Named Color Variables 29 | // -------------------------------------------------- 30 | // Named colors makes it easy to reuse colors on various components. 31 | // It's highly recommended to change the default colors 32 | // to match your app's branding. Ionic uses a Sass map of 33 | // colors so you can add, rename and remove colors as needed. 34 | // The "primary" color is the only required color in the map. 35 | 36 | $colors: ( 37 | primary: #488aff, 38 | secondary: #32db64, 39 | danger: #f53d3d, 40 | light: #f4f4f4, 41 | dark: #222 42 | ); 43 | 44 | 45 | // App iOS Variables 46 | // -------------------------------------------------- 47 | // iOS only Sass variables can go here 48 | 49 | 50 | 51 | 52 | // App Material Design Variables 53 | // -------------------------------------------------- 54 | // Material Design only Sass variables can go here 55 | 56 | 57 | 58 | 59 | // App Windows Variables 60 | // -------------------------------------------------- 61 | // Windows only Sass variables can go here 62 | 63 | 64 | 65 | 66 | // App Theme 67 | // -------------------------------------------------- 68 | // Ionic apps can have different themes applied, which can 69 | // then be future customized. This import comes last 70 | // so that the above variables are used and Ionic's 71 | // default are overridden. 72 | 73 | @import "ionic.theme.default"; 74 | 75 | 76 | // Ionicons 77 | // -------------------------------------------------- 78 | // The premium icon font for Ionic. For more info, please see: 79 | // http://ionicframework.com/docs/ionicons/ 80 | 81 | @import "ionic.ionicons"; 82 | 83 | 84 | // Fonts 85 | // -------------------------------------------------- 86 | 87 | @import "roboto"; 88 | @import "noto-sans"; 89 | -------------------------------------------------------------------------------- /src/components/index-list/index-list.ts: -------------------------------------------------------------------------------- 1 | import { 2 | AfterViewChecked, Component, ContentChildren, ElementRef, Input, QueryList, 3 | ViewChild 4 | } from '@angular/core'; 5 | import {IndexSectionComponent} from './index-section'; 6 | 7 | @Component({ 8 | selector: 'ion-index-list', 9 | template: ` 10 |
11 |
12 | 13 | 14 |
15 | 16 |
17 |
19 | {{index}} 20 |
21 |
22 | 23 | 26 |
27 | `, 28 | styles: [` 29 | ::-webkit-scrollbar { 30 | width: 0 31 | } 32 | 33 | .index-list{ 34 | width: 100%; 35 | display: flex; 36 | justify-content: space-between; 37 | height: 100%; 38 | overflow: hidden; 39 | transform:translate(0,0); 40 | } 41 | 42 | .index-list-wrapper{ 43 | width: 100%; 44 | overflow-y: scroll; 45 | -webkit-overflow-scrolling: touch; 46 | } 47 | 48 | .index-list-nav{ 49 | width:6%; 50 | position: absolute; 51 | top: 44px; 52 | right: 0; 53 | display: flex; 54 | justify-content:center; 55 | flex-direction: column; 56 | text-align: center; 57 | background-color: rgba(245, 245, 245, 0.3); 58 | height: 100%; 59 | z-index: 1000; 60 | -webkit-touch-callout: none; 61 | } 62 | 63 | .index-bar{ 64 | padding: 2px 6px; 65 | font-size: 8px; 66 | } 67 | 68 | .index-list-nav-activate{ 69 | color: red; 70 | } 71 | 72 | .modal { 73 | top: 50%; 74 | left: 50%; 75 | z-index: 100; 76 | position: fixed; 77 | pointer-events: none; 78 | width: 20vw; 79 | height: 20vw; 80 | line-height: 20vw; 81 | margin-left: -10vw; 82 | margin-top: -10vw; 83 | color: #fff; 84 | font-size: 3em; 85 | text-align: center; 86 | border-radius: 8px; 87 | background-color: rgba(0, 0, 0, 0.52); 88 | -webkit-box-shadow: 0 0 4px 1px rgba(0, 0, 0, 0.16); 89 | box-shadow: 0 0 4px 1px rgba(0, 0, 0, 0.16); 90 | -webkit-transition: opacity .5s; 91 | -o-transition: opacity .5s; 92 | transition: opacity .5s; 93 | opacity: 0; 94 | } 95 | 96 | .modal.show { 97 | opacity: 1; 98 | } 99 | `] 100 | }) 101 | export class IndexListComponent implements AfterViewChecked{ 102 | 103 | 104 | _currentIndicator ; 105 | 106 | _flag= true; 107 | _indexes: any[]= []; //右侧导航 108 | _offsetTops: Array = []; // 每个IndexSection 的offsetTop 109 | _navOffsetX: 0; 110 | _indicatorTime: any = null; 111 | _showModal = false; 112 | 113 | 114 | @Input() hasTop:boolean = false; 115 | 116 | @ViewChild('top') top: ElementRef; 117 | @ContentChildren(IndexSectionComponent) _listOfIndexSection: QueryList; 118 | @ViewChild('scrollContent') scrollContent: ElementRef; 119 | 120 | constructor(){ 121 | 122 | } 123 | 124 | ngAfterViewChecked(): void { 125 | if (this._flag && this._listOfIndexSection){ 126 | this._listOfIndexSection.forEach((section) => { 127 | this._indexes.push(section.index); 128 | const offsetTop = section.getElementRef().nativeElement.offsetTop; 129 | this._offsetTops.push(offsetTop); 130 | 131 | }); 132 | this._flag = false; 133 | 134 | if(this.hasTop) { 135 | this._indexes.unshift('#'); 136 | this._offsetTops.unshift(0); 137 | 138 | } 139 | } 140 | } 141 | 142 | onScroll(e:any) { 143 | e.preventDefault(); 144 | const scrollTopOffsetTop = this.scrollContent.nativeElement.scrollTop; 145 | 146 | this._offsetTops.forEach((v, i) => { 147 | if (scrollTopOffsetTop >= v){ 148 | this._currentIndicator = this._indexes[i]; 149 | 150 | // 151 | this.setCurrentSection(this._currentIndicator); 152 | } 153 | 154 | }); 155 | } 156 | 157 | touchstart(e:any){ 158 | this._navOffsetX = e.changedTouches[0].clientX; 159 | this.scrollList(e.changedTouches[0].clientY); 160 | } 161 | 162 | touchmove(e:any){ 163 | e.preventDefault(); 164 | this.scrollList(e.changedTouches[0].clientY); 165 | } 166 | 167 | touchend(e:any){ 168 | this._indicatorTime = setTimeout(() => { 169 | this._showModal = false; 170 | this._currentIndicator = ''; 171 | }, 500); 172 | } 173 | 174 | scrollList(y:any){ 175 | 176 | const currentItem:any = document.elementFromPoint(this._navOffsetX, y); 177 | if (!currentItem || !currentItem.classList.contains('index-bar')) { 178 | return; 179 | } 180 | this._currentIndicator = currentItem['innerText']; 181 | const index = this._indexes.indexOf(this._currentIndicator); 182 | 183 | this.scrollContent.nativeElement.scrollTop = this._offsetTops[index]; 184 | 185 | 186 | this._showModal = true; 187 | if (this._indicatorTime) { 188 | clearTimeout(this._indicatorTime); 189 | } 190 | } 191 | 192 | 193 | setCurrentSection(currentindex:string) { 194 | const listArray = this._listOfIndexSection.toArray(); 195 | listArray.forEach((section)=>{ 196 | if(section.index === currentindex ){ 197 | section._current = true; 198 | }else{ 199 | section._current = false; 200 | } 201 | }) 202 | } 203 | 204 | } 205 | -------------------------------------------------------------------------------- /config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | de 4 | An awesome Ionic/Cordova app. 5 | Ionic Framework Team 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /www/build/sw-toolbox.js: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2016 Google Inc. All Rights Reserved. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | */!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.toolbox=e()}}(function(){return function e(t,n,r){function o(c,s){if(!n[c]){if(!t[c]){var a="function"==typeof require&&require;if(!s&&a)return a(c,!0);if(i)return i(c,!0);var u=new Error("Cannot find module '"+c+"'");throw u.code="MODULE_NOT_FOUND",u}var f=n[c]={exports:{}};t[c][0].call(f.exports,function(e){var n=t[c][1][e];return o(n?n:e)},f,f.exports,e,t,n,r)}return n[c].exports}for(var i="function"==typeof require&&require,c=0;ct.value[l]){var r=t.value[p];c.push(r),a.delete(r),t.continue()}},s.oncomplete=function(){r(c)},s.onabort=o}):Promise.resolve([])}function s(e,t){return t?new Promise(function(n,r){var o=[],i=e.transaction(h,"readwrite"),c=i.objectStore(h),s=c.index(l),a=s.count();s.count().onsuccess=function(){var e=a.result;e>t&&(s.openCursor().onsuccess=function(n){var r=n.target.result;if(r){var i=r.value[p];o.push(i),c.delete(i),e-o.length>t&&r.continue()}})},i.oncomplete=function(){n(o)},i.onabort=r}):Promise.resolve([])}function a(e,t,n,r){return c(e,n,r).then(function(n){return s(e,t).then(function(e){return n.concat(e)})})}var u="sw-toolbox-",f=1,h="store",p="url",l="timestamp",d={};t.exports={getDb:o,setTimestampForUrl:i,expireEntries:a}},{}],3:[function(e,t,n){"use strict";function r(e){var t=a.match(e.request);t?e.respondWith(t(e.request)):a.default&&"GET"===e.request.method&&0===e.request.url.indexOf("http")&&e.respondWith(a.default(e.request))}function o(e){s.debug("activate event fired");var t=u.cache.name+"$$$inactive$$$";e.waitUntil(s.renameCache(t,u.cache.name))}function i(e){return e.reduce(function(e,t){return e.concat(t)},[])}function c(e){var t=u.cache.name+"$$$inactive$$$";s.debug("install event fired"),s.debug("creating cache ["+t+"]"),e.waitUntil(s.openCache({cache:{name:t}}).then(function(e){return Promise.all(u.preCacheItems).then(i).then(s.validatePrecacheInput).then(function(t){return s.debug("preCache list: "+(t.join(", ")||"(none)")),e.addAll(t)})}))}e("serviceworker-cache-polyfill");var s=e("./helpers"),a=e("./router"),u=e("./options");t.exports={fetchListener:r,activateListener:o,installListener:c}},{"./helpers":1,"./options":4,"./router":6,"serviceworker-cache-polyfill":16}],4:[function(e,t,n){"use strict";var r;r=self.registration?self.registration.scope:self.scope||new URL("./",self.location).href,t.exports={cache:{name:"$$$toolbox-cache$$$"+r+"$$$",maxAgeSeconds:null,maxEntries:null},debug:!1,networkTimeoutSeconds:null,preCacheItems:[],successResponses:/^0|([123]\d\d)|(40[14567])|410$/}},{}],5:[function(e,t,n){"use strict";var r=new URL("./",self.location),o=r.pathname,i=e("path-to-regexp"),c=function(e,t,n,r){t instanceof RegExp?this.fullUrlRegExp=t:(0!==t.indexOf("/")&&(t=o+t),this.keys=[],this.regexp=i(t,this.keys)),this.method=e,this.options=r,this.handler=n};c.prototype.makeHandler=function(e){var t;if(this.regexp){var n=this.regexp.exec(e);t={},this.keys.forEach(function(e,r){t[e.name]=n[r+1]})}return function(e){return this.handler(e,t,this.options)}.bind(this)},t.exports=c},{"path-to-regexp":15}],6:[function(e,t,n){"use strict";function r(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}var o=e("./route"),i=e("./helpers"),c=function(e,t){for(var n=e.entries(),r=n.next(),o=[];!r.done;){var i=new RegExp(r.value[0]);i.test(t)&&o.push(r.value[1]),r=n.next()}return o},s=function(){this.routes=new Map,this.routes.set(RegExp,new Map),this.default=null};["get","post","put","delete","head","any"].forEach(function(e){s.prototype[e]=function(t,n,r){return this.add(e,t,n,r)}}),s.prototype.add=function(e,t,n,c){c=c||{};var s;t instanceof RegExp?s=RegExp:(s=c.origin||self.location.origin,s=s instanceof RegExp?s.source:r(s)),e=e.toLowerCase();var a=new o(e,t,n,c);this.routes.has(s)||this.routes.set(s,new Map);var u=this.routes.get(s);u.has(e)||u.set(e,new Map);var f=u.get(e),h=a.regexp||a.fullUrlRegExp;f.has(h.source)&&i.debug('"'+t+'" resolves to same regex as existing route.'),f.set(h.source,a)},s.prototype.matchMethod=function(e,t){var n=new URL(t),r=n.origin,o=n.pathname;return this._match(e,c(this.routes,r),o)||this._match(e,[this.routes.get(RegExp)],t)},s.prototype._match=function(e,t,n){if(0===t.length)return null;for(var r=0;r0)return s[0].makeHandler(n)}}return null},s.prototype.match=function(e){return this.matchMethod(e.method,e.url)||this.matchMethod("any",e.url)},t.exports=new s},{"./helpers":1,"./route":5}],7:[function(e,t,n){"use strict";function r(e,t,n){return n=n||{},i.debug("Strategy: cache first ["+e.url+"]",n),i.openCache(n).then(function(t){return t.match(e).then(function(t){var r=n.cache||o.cache,c=Date.now();return i.isResponseFresh(t,r.maxAgeSeconds,c)?t:i.fetchAndCache(e,n)})})}var o=e("../options"),i=e("../helpers");t.exports=r},{"../helpers":1,"../options":4}],8:[function(e,t,n){"use strict";function r(e,t,n){return n=n||{},i.debug("Strategy: cache only ["+e.url+"]",n),i.openCache(n).then(function(t){return t.match(e).then(function(e){var t=n.cache||o.cache,r=Date.now();if(i.isResponseFresh(e,t.maxAgeSeconds,r))return e})})}var o=e("../options"),i=e("../helpers");t.exports=r},{"../helpers":1,"../options":4}],9:[function(e,t,n){"use strict";function r(e,t,n){return o.debug("Strategy: fastest ["+e.url+"]",n),new Promise(function(r,c){var s=!1,a=[],u=function(e){a.push(e.toString()),s?c(new Error('Both cache and network failed: "'+a.join('", "')+'"')):s=!0},f=function(e){e instanceof Response?r(e):u("No result returned")};o.fetchAndCache(e.clone(),n).then(f,u),i(e,t,n).then(f,u)})}var o=e("../helpers"),i=e("./cacheOnly");t.exports=r},{"../helpers":1,"./cacheOnly":8}],10:[function(e,t,n){t.exports={networkOnly:e("./networkOnly"),networkFirst:e("./networkFirst"),cacheOnly:e("./cacheOnly"),cacheFirst:e("./cacheFirst"),fastest:e("./fastest")}},{"./cacheFirst":7,"./cacheOnly":8,"./fastest":9,"./networkFirst":11,"./networkOnly":12}],11:[function(e,t,n){"use strict";function r(e,t,n){n=n||{};var r=n.successResponses||o.successResponses,c=n.networkTimeoutSeconds||o.networkTimeoutSeconds;return i.debug("Strategy: network first ["+e.url+"]",n),i.openCache(n).then(function(t){var s,a,u=[];if(c){var f=new Promise(function(r){s=setTimeout(function(){t.match(e).then(function(e){var t=n.cache||o.cache,c=Date.now(),s=t.maxAgeSeconds;i.isResponseFresh(e,s,c)&&r(e)})},1e3*c)});u.push(f)}var h=i.fetchAndCache(e,n).then(function(e){if(s&&clearTimeout(s),r.test(e.status))return e;throw i.debug("Response was an HTTP error: "+e.statusText,n),a=e,new Error("Bad response")}).catch(function(r){return i.debug("Network or response error, fallback to cache ["+e.url+"]",n),t.match(e).then(function(e){if(e)return e;if(a)return a;throw r})});return u.push(h),Promise.race(u)})}var o=e("../options"),i=e("../helpers");t.exports=r},{"../helpers":1,"../options":4}],12:[function(e,t,n){"use strict";function r(e,t,n){return o.debug("Strategy: network only ["+e.url+"]",n),fetch(e)}var o=e("../helpers");t.exports=r},{"../helpers":1}],13:[function(e,t,n){"use strict";var r=e("./options"),o=e("./router"),i=e("./helpers"),c=e("./strategies"),s=e("./listeners");i.debug("Service Worker Toolbox is loading"),self.addEventListener("install",s.installListener),self.addEventListener("activate",s.activateListener),self.addEventListener("fetch",s.fetchListener),t.exports={networkOnly:c.networkOnly,networkFirst:c.networkFirst,cacheOnly:c.cacheOnly,cacheFirst:c.cacheFirst,fastest:c.fastest,router:o,options:r,cache:i.cache,uncache:i.uncache,precache:i.precache}},{"./helpers":1,"./listeners":3,"./options":4,"./router":6,"./strategies":10}],14:[function(e,t,n){t.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},{}],15:[function(e,t,n){function r(e,t){for(var n,r=[],o=0,i=0,c="",s=t&&t.delimiter||"/";null!=(n=x.exec(e));){var f=n[0],h=n[1],p=n.index;if(c+=e.slice(i,p),i=p+f.length,h)c+=h[1];else{var l=e[i],d=n[2],m=n[3],g=n[4],v=n[5],w=n[6],y=n[7];c&&(r.push(c),c="");var b=null!=d&&null!=l&&l!==d,E="+"===w||"*"===w,R="?"===w||"*"===w,k=n[2]||s,$=g||v;r.push({name:m||o++,prefix:d||"",delimiter:k,optional:R,repeat:E,partial:b,asterisk:!!y,pattern:$?u($):y?".*":"[^"+a(k)+"]+?"})}}return i=46||"Chrome"===n&&r>=50)||(Cache.prototype.addAll=function(e){function t(e){this.name="NetworkError",this.code=19,this.message=e}var n=this;return t.prototype=Object.create(Error.prototype),Promise.resolve().then(function(){if(arguments.length<1)throw new TypeError;return e=e.map(function(e){return e instanceof Request?e:String(e)}),Promise.all(e.map(function(e){"string"==typeof e&&(e=new Request(e));var n=new URL(e.url).protocol;if("http:"!==n&&"https:"!==n)throw new t("Invalid scheme");return fetch(e.clone())}))}).then(function(r){if(r.some(function(e){return!e.ok}))throw new t("Incorrect response status");return Promise.all(r.map(function(t,r){return n.put(e[r],t)}))}).then(function(){})},Cache.prototype.add=function(e){return this.addAll([e])})}()},{}]},{},[13])(13)}); 16 | //# sourceMappingURL=sw-toolbox.js.map 17 | -------------------------------------------------------------------------------- /.sourcemaps/main.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["../../node_modules/@angular/core/esm5 lazy","../../src lazy","../../src/pages/tabs/tabs.ts","../../src/pages/about/about.ts","../../src/pages/contact/contact.ts","../../src/pages/home/home.ts","../../src/pages/demo/demo.ts","../../src/components/index-list/index-section.ts","../../src/components/index-list/index-cell.ts","../../src/app/main.ts","../../src/app/app.module.ts","../../src/app/app.component.ts","../../src/components/index.ts","../../src/components/index-list/index-list.module.ts","../../src/components/index-list/index-list.ts"],"names":[],"mappings":"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","file":"main.js","sourcesContent":["function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncatched exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tthrow new Error(\"Cannot find module '\" + req + \"'.\");\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nmodule.exports = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = 109;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@angular/core/esm5 lazy\n// module id = 109\n// module chunks = 0","function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncatched exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tthrow new Error(\"Cannot find module '\" + req + \"'.\");\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nmodule.exports = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = 151;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src lazy\n// module id = 151\n// module chunks = 0","import { Component } from '@angular/core';\n\nimport { AboutPage } from '../about/about';\nimport { ContactPage } from '../contact/contact';\nimport { HomePage } from '../home/home';\nimport {DemoPage} from \"../demo/demo\";\n\n@Component({\n templateUrl: 'tabs.html'\n})\nexport class TabsPage {\n\n tab1Root = HomePage;\n tab2Root = AboutPage;\n tab3Root = ContactPage;\n tab4Root = DemoPage;\n\n\n constructor() {\n\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/pages/tabs/tabs.ts","import { Component } from '@angular/core';\nimport { NavController } from 'ionic-angular';\nimport {Http} from \"@angular/http\";\nimport \"rxjs/add/operator/map\";\n\n@Component({\n selector: 'page-about',\n templateUrl: 'about.html'\n})\nexport class AboutPage {\n\n indexs = ['A','B','C','F','G','J','K','L','O','P','Q','R','S','T','U','V','W','X','Y','Z'];\n\n sections:any[] = Array.apply(null, Array(50)).map(function(item, i) {\n return 0;\n });\n\n constructor(public navCtrl: NavController, public http: Http) {\n\n }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/pages/about/about.ts","import { Component } from '@angular/core';\nimport { NavController } from 'ionic-angular';\n\n@Component({\n selector: 'page-contact',\n templateUrl: 'contact.html'\n})\nexport class ContactPage {\n\n indexs = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];\n\n sections:any[] = Array.apply(null, Array(10)).map(function(item, i) {\n return 0;\n });\n\n constructor(public navCtrl: NavController) {\n\n\n }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/pages/contact/contact.ts","import { Component } from '@angular/core';\nimport { NavController } from 'ionic-angular';\n\n@Component({\n selector: 'page-home',\n templateUrl: 'home.html'\n})\nexport class HomePage {\n indexs = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];\n\n sections:any[] = Array.apply(null, Array(10)).map(function(item, i) {\n return 0;\n });\n\n constructor(public navCtrl: NavController) {\n\n\n }\n\n\n\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/pages/home/home.ts","import { Component } from '@angular/core';\nimport { NavController } from 'ionic-angular';\n\n@Component({\n selector: 'page-demo',\n templateUrl: 'demo.html'\n})\nexport class DemoPage {\n indexs = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];\n\n sections:any[] = Array.apply(null, Array(10)).map(function(item, i) {\n return 0;\n });\n\n constructor(public navCtrl: NavController) {\n\n\n }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/pages/demo/demo.ts","import {\n AfterViewChecked, Component, ContentChildren, ElementRef, Input,\n QueryList\n} from '@angular/core';\nimport {IndexCellComponent} from './index-cell';\n\n@Component({\n selector: 'ion-index-section',\n template: `\n
\n \n
\n {{index}}\n
\n\n \n
\n \n\n \n
\n
\n `,\n styles: [`\n .index-section-index{\n margin: 0;\n padding: 2px 10px 2px 10px;\n background-color: #fafafa;\n border-bottom: 1px solid #dedede;\n }\n\n .index-section-main{\n /*border-bottom: 1px solid #dedede;*/\n }\n\n .index-section-current .index-section-index{\n position: sticky;\n position: -webkit-sticky;\n top: 0px;\n left: 0px;\n width: 100%;\n z-index: 3;\n transform: translateZ(0px);\n }\n `]\n})\nexport class IndexSectionComponent implements AfterViewChecked {\n\n _current=false;\n\n @Input() index: string;\n\n @ContentChildren(IndexCellComponent) _listOfIndexCell: QueryList;\n\n constructor(public elementRef: ElementRef) { }\n\n getElementRef():ElementRef{\n return this.elementRef;\n }\n\n ngAfterViewChecked(): void {\n // setTimeout(()=>{\n // if (this._listOfIndexCell && this._listOfIndexCell.length) {\n // const listArray = this._listOfIndexCell.toArray();\n // listArray[listArray.length - 1]._lastItem = true;\n // }\n // })\n }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/index-list/index-section.ts","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'ion-index-cell',\n template: `\n
\n
\n \n
\n
\n `,\n styles: [`\n .index-cell{\n background-color: #fff;\n padding-left:10px\n }\n\n .index-cell-item{\n box-sizing: border-box;\n color: inherit;\n min-height: 48px;\n display: block;\n overflow: hidden;\n position: relative;\n text-decoration: none;\n border-bottom: 1px solid #dcd8d8;\n width: 100%;\n display: flex;\n align-items: center;\n }\n `]\n})\nexport class IndexCellComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit() { }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/index-list/index-cell.ts","import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n\nimport { AppModule } from './app.module';\n\nplatformBrowserDynamic().bootstrapModule(AppModule);\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/main.ts","import { NgModule, ErrorHandler } from '@angular/core';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { IonicApp, IonicModule, IonicErrorHandler } from 'ionic-angular';\nimport { MyApp } from './app.component';\n\nimport { AboutPage } from '../pages/about/about';\nimport { ContactPage } from '../pages/contact/contact';\nimport { HomePage } from '../pages/home/home';\nimport { TabsPage } from '../pages/tabs/tabs';\n\nimport { StatusBar } from '@ionic-native/status-bar';\nimport { SplashScreen } from '@ionic-native/splash-screen';\nimport {IndexListModule} from \"../components/index\";\nimport {DemoPage} from \"../pages/demo/demo\";\nimport {HttpModule} from \"@angular/http\";\n\n@NgModule({\n declarations: [\n MyApp,\n AboutPage,\n ContactPage,\n HomePage,\n TabsPage,\n DemoPage\n ],\n imports: [\n BrowserModule,\n IonicModule.forRoot(MyApp),\n HttpModule,\n IndexListModule\n ],\n bootstrap: [IonicApp],\n entryComponents: [\n MyApp,\n AboutPage,\n ContactPage,\n HomePage,\n TabsPage,\n DemoPage\n ],\n providers: [\n StatusBar,\n SplashScreen,\n {provide: ErrorHandler, useClass: IonicErrorHandler}\n ]\n})\nexport class AppModule {}\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/app.module.ts","import { Component } from '@angular/core';\nimport { Platform } from 'ionic-angular';\nimport { StatusBar } from '@ionic-native/status-bar';\nimport { SplashScreen } from '@ionic-native/splash-screen';\n\nimport { TabsPage } from '../pages/tabs/tabs';\n\n@Component({\n templateUrl: 'app.html'\n})\nexport class MyApp {\n rootPage:any = TabsPage;\n\n constructor(platform: Platform, statusBar: StatusBar, splashScreen: SplashScreen) {\n platform.ready().then(() => {\n // Okay, so the platform is ready and our plugins are available.\n // Here you can do any higher level native things you might need.\n statusBar.styleDefault();\n splashScreen.hide();\n });\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/app.component.ts","export {IndexListModule} from './index-list/index-list.module';\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/index.ts","import { NgModule } from '@angular/core';\nimport { IndexListComponent } from './index-list';\nimport {IndexSectionComponent} from './index-section';\nimport {CommonModule} from '@angular/common';\nimport {IndexCellComponent} from './index-cell';\n\n@NgModule({\n declarations: [\n IndexListComponent,\n IndexSectionComponent,\n IndexCellComponent\n ],\n imports: [\n CommonModule,\n ],\n exports: [\n IndexListComponent,\n IndexSectionComponent,\n IndexCellComponent\n ]\n})\nexport class IndexListModule {}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/index-list/index-list.module.ts","import {\n AfterViewChecked, Component, ContentChildren, ElementRef, Input, QueryList,\n ViewChild\n} from '@angular/core';\nimport {IndexSectionComponent} from './index-section';\n\n@Component({\n selector: 'ion-index-list',\n template: `\n
\n
\n \n \n
\n\n
\n
\n {{index}}\n
\n
\n \n
\n {{_currentIndicator}}\n
\n
\n `,\n styles: [`\n ::-webkit-scrollbar {\n width: 0\n }\n\n .index-list{\n width: 100%;\n display: flex;\n justify-content: space-between;\n height: 100%;\n overflow: hidden;\n transform:translate(0,0);\n }\n\n .index-list-wrapper{\n width: 100%;\n overflow-y: scroll;\n -webkit-overflow-scrolling: touch;\n }\n\n .index-list-nav{\n width:6%;\n position: absolute;\n top: 44px;\n right: 0;\n display: flex;\n justify-content:center;\n flex-direction: column;\n text-align: center;\n background-color: rgba(245, 245, 245, 0.3);\n height: 100%;\n z-index: 1000;\n -webkit-touch-callout: none;\n }\n\n .index-bar{\n padding: 2px 6px;\n font-size: 8px;\n }\n\n .index-list-nav-activate{\n color: red;\n }\n\n .modal {\n top: 50%;\n left: 50%;\n z-index: 100;\n position: fixed;\n pointer-events: none;\n width: 20vw;\n height: 20vw;\n line-height: 20vw;\n margin-left: -10vw;\n margin-top: -10vw;\n color: #fff;\n font-size: 3em;\n text-align: center;\n border-radius: 8px;\n background-color: rgba(0, 0, 0, 0.52);\n -webkit-box-shadow: 0 0 4px 1px rgba(0, 0, 0, 0.16);\n box-shadow: 0 0 4px 1px rgba(0, 0, 0, 0.16);\n -webkit-transition: opacity .5s;\n -o-transition: opacity .5s;\n transition: opacity .5s;\n opacity: 0;\n }\n\n .modal.show {\n opacity: 1;\n }\n `]\n})\nexport class IndexListComponent implements AfterViewChecked{\n\n\n _currentIndicator ;\n\n _flag= true;\n _indexes: any[]= []; //右侧导航\n _offsetTops: Array = []; // 每个IndexSection 的offsetTop\n _navOffsetX: 0;\n _indicatorTime: any = null;\n _showModal = false;\n\n\n @Input() hasTop:boolean = false;\n\n @ViewChild('top') top: ElementRef;\n @ContentChildren(IndexSectionComponent) _listOfIndexSection: QueryList;\n @ViewChild('scrollContent') scrollContent: ElementRef;\n\n constructor(){\n\n }\n\n ngAfterViewChecked(): void {\n if (this._flag && this._listOfIndexSection){\n this._listOfIndexSection.forEach((section) => {\n this._indexes.push(section.index);\n const offsetTop = section.getElementRef().nativeElement.offsetTop;\n this._offsetTops.push(offsetTop);\n\n });\n this._flag = false;\n\n if(this.hasTop) {\n this._indexes.unshift('#');\n this._offsetTops.unshift(0);\n\n }\n }\n }\n\n onScroll(e:any) {\n e.preventDefault();\n const scrollTopOffsetTop = this.scrollContent.nativeElement.scrollTop;\n\n this._offsetTops.forEach((v, i) => {\n if (scrollTopOffsetTop >= v){\n this._currentIndicator = this._indexes[i];\n\n //\n this.setCurrentSection(this._currentIndicator);\n }\n\n });\n }\n\n touchstart(e:any){\n this._navOffsetX = e.changedTouches[0].clientX;\n this.scrollList(e.changedTouches[0].clientY);\n }\n\n touchmove(e:any){\n e.preventDefault();\n this.scrollList(e.changedTouches[0].clientY);\n }\n\n touchend(e:any){\n this._indicatorTime = setTimeout(() => {\n this._showModal = false;\n this._currentIndicator = '';\n }, 500);\n }\n\n scrollList(y:any){\n\n const currentItem:any = document.elementFromPoint(this._navOffsetX, y);\n if (!currentItem || !currentItem.classList.contains('index-bar')) {\n return;\n }\n this._currentIndicator = currentItem['innerText'];\n const index = this._indexes.indexOf(this._currentIndicator);\n\n this.scrollContent.nativeElement.scrollTop = this._offsetTops[index];\n\n\n this._showModal = true;\n if (this._indicatorTime) {\n clearTimeout(this._indicatorTime);\n }\n }\n\n\n setCurrentSection(currentindex:string) {\n const listArray = this._listOfIndexSection.toArray();\n listArray.forEach((section)=>{\n if(section.index === currentindex ){\n section._current = true;\n }else{\n section._current = false;\n }\n })\n }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/index-list/index-list.ts"],"sourceRoot":""} -------------------------------------------------------------------------------- /www/build/main.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["../../node_modules/@angular/core/esm5 lazy","../../src lazy","../../src/pages/tabs/tabs.ts","../../src/pages/about/about.ts","../../src/pages/contact/contact.ts","../../src/pages/home/home.ts","../../src/pages/demo/demo.ts","../../src/components/index-list/index-section.ts","../../src/components/index-list/index-cell.ts","../../src/app/main.ts","../../src/app/app.module.ts","../../src/app/app.component.ts","../../src/components/index.ts","../../src/components/index-list/index-list.module.ts","../../src/components/index-list/index-list.ts"],"names":[],"mappings":"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","file":"main.js","sourcesContent":["function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncatched exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tthrow new Error(\"Cannot find module '\" + req + \"'.\");\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nmodule.exports = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = 109;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@angular/core/esm5 lazy\n// module id = 109\n// module chunks = 0","function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncatched exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tthrow new Error(\"Cannot find module '\" + req + \"'.\");\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nmodule.exports = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = 151;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src lazy\n// module id = 151\n// module chunks = 0","import { Component } from '@angular/core';\n\nimport { AboutPage } from '../about/about';\nimport { ContactPage } from '../contact/contact';\nimport { HomePage } from '../home/home';\nimport {DemoPage} from \"../demo/demo\";\n\n@Component({\n templateUrl: 'tabs.html'\n})\nexport class TabsPage {\n\n tab1Root = HomePage;\n tab2Root = AboutPage;\n tab3Root = ContactPage;\n tab4Root = DemoPage;\n\n\n constructor() {\n\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/pages/tabs/tabs.ts","import { Component } from '@angular/core';\nimport { NavController } from 'ionic-angular';\nimport {Http} from \"@angular/http\";\nimport \"rxjs/add/operator/map\";\n\n@Component({\n selector: 'page-about',\n templateUrl: 'about.html'\n})\nexport class AboutPage {\n\n indexs = ['A','B','C','F','G','J','K','L','O','P','Q','R','S','T','U','V','W','X','Y','Z'];\n\n sections:any[] = Array.apply(null, Array(50)).map(function(item, i) {\n return 0;\n });\n\n constructor(public navCtrl: NavController, public http: Http) {\n\n }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/pages/about/about.ts","import { Component } from '@angular/core';\nimport { NavController } from 'ionic-angular';\n\n@Component({\n selector: 'page-contact',\n templateUrl: 'contact.html'\n})\nexport class ContactPage {\n\n indexs = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];\n\n sections:any[] = Array.apply(null, Array(10)).map(function(item, i) {\n return 0;\n });\n\n constructor(public navCtrl: NavController) {\n\n\n }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/pages/contact/contact.ts","import { Component } from '@angular/core';\nimport { NavController } from 'ionic-angular';\n\n@Component({\n selector: 'page-home',\n templateUrl: 'home.html'\n})\nexport class HomePage {\n indexs = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];\n\n sections:any[] = Array.apply(null, Array(10)).map(function(item, i) {\n return 0;\n });\n\n constructor(public navCtrl: NavController) {\n\n\n }\n\n\n\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/pages/home/home.ts","import { Component } from '@angular/core';\nimport { NavController } from 'ionic-angular';\n\n@Component({\n selector: 'page-demo',\n templateUrl: 'demo.html'\n})\nexport class DemoPage {\n indexs = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];\n\n sections:any[] = Array.apply(null, Array(10)).map(function(item, i) {\n return 0;\n });\n\n constructor(public navCtrl: NavController) {\n\n\n }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/pages/demo/demo.ts","import {\n AfterViewChecked, Component, ContentChildren, ElementRef, Input,\n QueryList\n} from '@angular/core';\nimport {IndexCellComponent} from './index-cell';\n\n@Component({\n selector: 'ion-index-section',\n template: `\n
\n \n
\n {{index}}\n
\n\n \n
\n \n\n \n
\n
\n `,\n styles: [`\n .index-section-index{\n margin: 0;\n padding: 2px 10px 2px 10px;\n background-color: #fafafa;\n border-bottom: 1px solid #dedede;\n }\n\n .index-section-main{\n /*border-bottom: 1px solid #dedede;*/\n }\n\n .index-section-current .index-section-index{\n position: sticky;\n position: -webkit-sticky;\n top: 0px;\n left: 0px;\n width: 100%;\n z-index: 3;\n transform: translateZ(0px);\n }\n `]\n})\nexport class IndexSectionComponent implements AfterViewChecked {\n\n _current=false;\n\n @Input() index: string;\n\n @ContentChildren(IndexCellComponent) _listOfIndexCell: QueryList;\n\n constructor(public elementRef: ElementRef) { }\n\n getElementRef():ElementRef{\n return this.elementRef;\n }\n\n ngAfterViewChecked(): void {\n // setTimeout(()=>{\n // if (this._listOfIndexCell && this._listOfIndexCell.length) {\n // const listArray = this._listOfIndexCell.toArray();\n // listArray[listArray.length - 1]._lastItem = true;\n // }\n // })\n }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/index-list/index-section.ts","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'ion-index-cell',\n template: `\n
\n
\n \n
\n
\n `,\n styles: [`\n .index-cell{\n background-color: #fff;\n padding-left:10px\n }\n\n .index-cell-item{\n box-sizing: border-box;\n color: inherit;\n min-height: 48px;\n display: block;\n overflow: hidden;\n position: relative;\n text-decoration: none;\n border-bottom: 1px solid #dcd8d8;\n width: 100%;\n display: flex;\n align-items: center;\n }\n `]\n})\nexport class IndexCellComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit() { }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/index-list/index-cell.ts","import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n\nimport { AppModule } from './app.module';\n\nplatformBrowserDynamic().bootstrapModule(AppModule);\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/main.ts","import { NgModule, ErrorHandler } from '@angular/core';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { IonicApp, IonicModule, IonicErrorHandler } from 'ionic-angular';\nimport { MyApp } from './app.component';\n\nimport { AboutPage } from '../pages/about/about';\nimport { ContactPage } from '../pages/contact/contact';\nimport { HomePage } from '../pages/home/home';\nimport { TabsPage } from '../pages/tabs/tabs';\n\nimport { StatusBar } from '@ionic-native/status-bar';\nimport { SplashScreen } from '@ionic-native/splash-screen';\nimport {IndexListModule} from \"../components/index\";\nimport {DemoPage} from \"../pages/demo/demo\";\nimport {HttpModule} from \"@angular/http\";\n\n@NgModule({\n declarations: [\n MyApp,\n AboutPage,\n ContactPage,\n HomePage,\n TabsPage,\n DemoPage\n ],\n imports: [\n BrowserModule,\n IonicModule.forRoot(MyApp),\n HttpModule,\n IndexListModule\n ],\n bootstrap: [IonicApp],\n entryComponents: [\n MyApp,\n AboutPage,\n ContactPage,\n HomePage,\n TabsPage,\n DemoPage\n ],\n providers: [\n StatusBar,\n SplashScreen,\n {provide: ErrorHandler, useClass: IonicErrorHandler}\n ]\n})\nexport class AppModule {}\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/app.module.ts","import { Component } from '@angular/core';\nimport { Platform } from 'ionic-angular';\nimport { StatusBar } from '@ionic-native/status-bar';\nimport { SplashScreen } from '@ionic-native/splash-screen';\n\nimport { TabsPage } from '../pages/tabs/tabs';\n\n@Component({\n templateUrl: 'app.html'\n})\nexport class MyApp {\n rootPage:any = TabsPage;\n\n constructor(platform: Platform, statusBar: StatusBar, splashScreen: SplashScreen) {\n platform.ready().then(() => {\n // Okay, so the platform is ready and our plugins are available.\n // Here you can do any higher level native things you might need.\n statusBar.styleDefault();\n splashScreen.hide();\n });\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/app.component.ts","export {IndexListModule} from './index-list/index-list.module';\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/index.ts","import { NgModule } from '@angular/core';\nimport { IndexListComponent } from './index-list';\nimport {IndexSectionComponent} from './index-section';\nimport {CommonModule} from '@angular/common';\nimport {IndexCellComponent} from './index-cell';\n\n@NgModule({\n declarations: [\n IndexListComponent,\n IndexSectionComponent,\n IndexCellComponent\n ],\n imports: [\n CommonModule,\n ],\n exports: [\n IndexListComponent,\n IndexSectionComponent,\n IndexCellComponent\n ]\n})\nexport class IndexListModule {}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/index-list/index-list.module.ts","import {\n AfterViewChecked, Component, ContentChildren, ElementRef, Input, QueryList,\n ViewChild\n} from '@angular/core';\nimport {IndexSectionComponent} from './index-section';\n\n@Component({\n selector: 'ion-index-list',\n template: `\n
\n
\n \n \n
\n\n
\n
\n {{index}}\n
\n
\n \n
\n {{_currentIndicator}}\n
\n
\n `,\n styles: [`\n ::-webkit-scrollbar {\n width: 0\n }\n\n .index-list{\n width: 100%;\n display: flex;\n justify-content: space-between;\n height: 100%;\n overflow: hidden;\n transform:translate(0,0);\n }\n\n .index-list-wrapper{\n width: 100%;\n overflow-y: scroll;\n -webkit-overflow-scrolling: touch;\n }\n\n .index-list-nav{\n width:6%;\n position: absolute;\n top: 44px;\n right: 0;\n display: flex;\n justify-content:center;\n flex-direction: column;\n text-align: center;\n background-color: rgba(245, 245, 245, 0.3);\n height: 100%;\n z-index: 1000;\n -webkit-touch-callout: none;\n }\n\n .index-bar{\n padding: 2px 6px;\n font-size: 8px;\n }\n\n .index-list-nav-activate{\n color: red;\n }\n\n .modal {\n top: 50%;\n left: 50%;\n z-index: 100;\n position: fixed;\n pointer-events: none;\n width: 20vw;\n height: 20vw;\n line-height: 20vw;\n margin-left: -10vw;\n margin-top: -10vw;\n color: #fff;\n font-size: 3em;\n text-align: center;\n border-radius: 8px;\n background-color: rgba(0, 0, 0, 0.52);\n -webkit-box-shadow: 0 0 4px 1px rgba(0, 0, 0, 0.16);\n box-shadow: 0 0 4px 1px rgba(0, 0, 0, 0.16);\n -webkit-transition: opacity .5s;\n -o-transition: opacity .5s;\n transition: opacity .5s;\n opacity: 0;\n }\n\n .modal.show {\n opacity: 1;\n }\n `]\n})\nexport class IndexListComponent implements AfterViewChecked{\n\n\n _currentIndicator ;\n\n _flag= true;\n _indexes: any[]= []; //右侧导航\n _offsetTops: Array = []; // 每个IndexSection 的offsetTop\n _navOffsetX: 0;\n _indicatorTime: any = null;\n _showModal = false;\n\n\n @Input() hasTop:boolean = false;\n\n @ViewChild('top') top: ElementRef;\n @ContentChildren(IndexSectionComponent) _listOfIndexSection: QueryList;\n @ViewChild('scrollContent') scrollContent: ElementRef;\n\n constructor(){\n\n }\n\n ngAfterViewChecked(): void {\n if (this._flag && this._listOfIndexSection){\n this._listOfIndexSection.forEach((section) => {\n this._indexes.push(section.index);\n const offsetTop = section.getElementRef().nativeElement.offsetTop;\n this._offsetTops.push(offsetTop);\n\n });\n this._flag = false;\n\n if(this.hasTop) {\n this._indexes.unshift('#');\n this._offsetTops.unshift(0);\n\n }\n }\n }\n\n onScroll(e:any) {\n e.preventDefault();\n const scrollTopOffsetTop = this.scrollContent.nativeElement.scrollTop;\n\n this._offsetTops.forEach((v, i) => {\n if (scrollTopOffsetTop >= v){\n this._currentIndicator = this._indexes[i];\n\n //\n this.setCurrentSection(this._currentIndicator);\n }\n\n });\n }\n\n touchstart(e:any){\n this._navOffsetX = e.changedTouches[0].clientX;\n this.scrollList(e.changedTouches[0].clientY);\n }\n\n touchmove(e:any){\n e.preventDefault();\n this.scrollList(e.changedTouches[0].clientY);\n }\n\n touchend(e:any){\n this._indicatorTime = setTimeout(() => {\n this._showModal = false;\n this._currentIndicator = '';\n }, 500);\n }\n\n scrollList(y:any){\n\n const currentItem:any = document.elementFromPoint(this._navOffsetX, y);\n if (!currentItem || !currentItem.classList.contains('index-bar')) {\n return;\n }\n this._currentIndicator = currentItem['innerText'];\n const index = this._indexes.indexOf(this._currentIndicator);\n\n this.scrollContent.nativeElement.scrollTop = this._offsetTops[index];\n\n\n this._showModal = true;\n if (this._indicatorTime) {\n clearTimeout(this._indicatorTime);\n }\n }\n\n\n setCurrentSection(currentindex:string) {\n const listArray = this._listOfIndexSection.toArray();\n listArray.forEach((section)=>{\n if(section.index === currentindex ){\n section._current = true;\n }else{\n section._current = false;\n }\n })\n }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/components/index-list/index-list.ts"],"sourceRoot":""} -------------------------------------------------------------------------------- /www/build/main.js: -------------------------------------------------------------------------------- 1 | webpackJsonp([0],{ 2 | 3 | /***/ 109: 4 | /***/ (function(module, exports) { 5 | 6 | function webpackEmptyAsyncContext(req) { 7 | // Here Promise.resolve().then() is used instead of new Promise() to prevent 8 | // uncatched exception popping up in devtools 9 | return Promise.resolve().then(function() { 10 | throw new Error("Cannot find module '" + req + "'."); 11 | }); 12 | } 13 | webpackEmptyAsyncContext.keys = function() { return []; }; 14 | webpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext; 15 | module.exports = webpackEmptyAsyncContext; 16 | webpackEmptyAsyncContext.id = 109; 17 | 18 | /***/ }), 19 | 20 | /***/ 151: 21 | /***/ (function(module, exports) { 22 | 23 | function webpackEmptyAsyncContext(req) { 24 | // Here Promise.resolve().then() is used instead of new Promise() to prevent 25 | // uncatched exception popping up in devtools 26 | return Promise.resolve().then(function() { 27 | throw new Error("Cannot find module '" + req + "'."); 28 | }); 29 | } 30 | webpackEmptyAsyncContext.keys = function() { return []; }; 31 | webpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext; 32 | module.exports = webpackEmptyAsyncContext; 33 | webpackEmptyAsyncContext.id = 151; 34 | 35 | /***/ }), 36 | 37 | /***/ 195: 38 | /***/ (function(module, __webpack_exports__, __webpack_require__) { 39 | 40 | "use strict"; 41 | /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return TabsPage; }); 42 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0); 43 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__about_about__ = __webpack_require__(196); 44 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__contact_contact__ = __webpack_require__(198); 45 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__home_home__ = __webpack_require__(199); 46 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__demo_demo__ = __webpack_require__(200); 47 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 48 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 49 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 50 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 51 | return c > 3 && r && Object.defineProperty(target, key, r), r; 52 | }; 53 | var __metadata = (this && this.__metadata) || function (k, v) { 54 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); 55 | }; 56 | 57 | 58 | 59 | 60 | 61 | var TabsPage = (function () { 62 | function TabsPage() { 63 | this.tab1Root = __WEBPACK_IMPORTED_MODULE_3__home_home__["a" /* HomePage */]; 64 | this.tab2Root = __WEBPACK_IMPORTED_MODULE_1__about_about__["a" /* AboutPage */]; 65 | this.tab3Root = __WEBPACK_IMPORTED_MODULE_2__contact_contact__["a" /* ContactPage */]; 66 | this.tab4Root = __WEBPACK_IMPORTED_MODULE_4__demo_demo__["a" /* DemoPage */]; 67 | } 68 | TabsPage = __decorate([ 69 | Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */])({template:/*ion-inline-start:"/Users/CK/git/ionic3-index-list/src/pages/tabs/tabs.html"*/'\n \n \n \n \n\n\n'/*ion-inline-end:"/Users/CK/git/ionic3-index-list/src/pages/tabs/tabs.html"*/ 70 | }), 71 | __metadata("design:paramtypes", []) 72 | ], TabsPage); 73 | return TabsPage; 74 | }()); 75 | 76 | //# sourceMappingURL=tabs.js.map 77 | 78 | /***/ }), 79 | 80 | /***/ 196: 81 | /***/ (function(module, __webpack_exports__, __webpack_require__) { 82 | 83 | "use strict"; 84 | /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AboutPage; }); 85 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0); 86 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_ionic_angular__ = __webpack_require__(30); 87 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__angular_http__ = __webpack_require__(197); 88 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_rxjs_add_operator_map__ = __webpack_require__(278); 89 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_rxjs_add_operator_map___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_rxjs_add_operator_map__); 90 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 91 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 92 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 93 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 94 | return c > 3 && r && Object.defineProperty(target, key, r), r; 95 | }; 96 | var __metadata = (this && this.__metadata) || function (k, v) { 97 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); 98 | }; 99 | 100 | 101 | 102 | 103 | var AboutPage = (function () { 104 | function AboutPage(navCtrl, http) { 105 | this.navCtrl = navCtrl; 106 | this.http = http; 107 | this.indexs = ['A', 'B', 'C', 'F', 'G', 'J', 'K', 'L', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']; 108 | this.sections = Array.apply(null, Array(50)).map(function (item, i) { 109 | return 0; 110 | }); 111 | } 112 | AboutPage = __decorate([ 113 | Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */])({ 114 | selector: 'page-about',template:/*ion-inline-start:"/Users/CK/git/ionic3-index-list/src/pages/about/about.html"*/'\n \n \n About\n \n \n\n\n\n \n \n \n \n \n \n
\n section\n
\n
\n
\n
\n
\n
\n
\n'/*ion-inline-end:"/Users/CK/git/ionic3-index-list/src/pages/about/about.html"*/ 115 | }), 116 | __metadata("design:paramtypes", [__WEBPACK_IMPORTED_MODULE_1_ionic_angular__["d" /* NavController */], __WEBPACK_IMPORTED_MODULE_2__angular_http__["a" /* Http */]]) 117 | ], AboutPage); 118 | return AboutPage; 119 | }()); 120 | 121 | //# sourceMappingURL=about.js.map 122 | 123 | /***/ }), 124 | 125 | /***/ 198: 126 | /***/ (function(module, __webpack_exports__, __webpack_require__) { 127 | 128 | "use strict"; 129 | /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ContactPage; }); 130 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0); 131 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_ionic_angular__ = __webpack_require__(30); 132 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 133 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 134 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 135 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 136 | return c > 3 && r && Object.defineProperty(target, key, r), r; 137 | }; 138 | var __metadata = (this && this.__metadata) || function (k, v) { 139 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); 140 | }; 141 | 142 | 143 | var ContactPage = (function () { 144 | function ContactPage(navCtrl) { 145 | this.navCtrl = navCtrl; 146 | this.indexs = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']; 147 | this.sections = Array.apply(null, Array(10)).map(function (item, i) { 148 | return 0; 149 | }); 150 | } 151 | ContactPage = __decorate([ 152 | Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */])({ 153 | selector: 'page-contact',template:/*ion-inline-start:"/Users/CK/git/ionic3-index-list/src/pages/contact/contact.html"*/'\n \n \n Contact\n \n \n\n\n\n \n
\n \n
\n \n \n \n \n section\n \n \n\n \n \n\n
\n\n
\n'/*ion-inline-end:"/Users/CK/git/ionic3-index-list/src/pages/contact/contact.html"*/ 154 | }), 155 | __metadata("design:paramtypes", [__WEBPACK_IMPORTED_MODULE_1_ionic_angular__["d" /* NavController */]]) 156 | ], ContactPage); 157 | return ContactPage; 158 | }()); 159 | 160 | //# sourceMappingURL=contact.js.map 161 | 162 | /***/ }), 163 | 164 | /***/ 199: 165 | /***/ (function(module, __webpack_exports__, __webpack_require__) { 166 | 167 | "use strict"; 168 | /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return HomePage; }); 169 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0); 170 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_ionic_angular__ = __webpack_require__(30); 171 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 172 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 173 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 174 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 175 | return c > 3 && r && Object.defineProperty(target, key, r), r; 176 | }; 177 | var __metadata = (this && this.__metadata) || function (k, v) { 178 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); 179 | }; 180 | 181 | 182 | var HomePage = (function () { 183 | function HomePage(navCtrl) { 184 | this.navCtrl = navCtrl; 185 | this.indexs = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']; 186 | this.sections = Array.apply(null, Array(10)).map(function (item, i) { 187 | return 0; 188 | }); 189 | } 190 | HomePage = __decorate([ 191 | Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */])({ 192 | selector: 'page-home',template:/*ion-inline-start:"/Users/CK/git/ionic3-index-list/src/pages/home/home.html"*/'\n \n Home\n \n\n\n\n\n\n\n \n
\n \n \n \n \n 新的朋友\n \n \n \n 群聊\n \n \n \n 标签\n \n \n \n 公众号\n \n \n
\n \n \n \n \n section\n \n \n\n \n \n\n\n
\n\n
\n'/*ion-inline-end:"/Users/CK/git/ionic3-index-list/src/pages/home/home.html"*/ 193 | }), 194 | __metadata("design:paramtypes", [__WEBPACK_IMPORTED_MODULE_1_ionic_angular__["d" /* NavController */]]) 195 | ], HomePage); 196 | return HomePage; 197 | }()); 198 | 199 | //# sourceMappingURL=home.js.map 200 | 201 | /***/ }), 202 | 203 | /***/ 200: 204 | /***/ (function(module, __webpack_exports__, __webpack_require__) { 205 | 206 | "use strict"; 207 | /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return DemoPage; }); 208 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0); 209 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_ionic_angular__ = __webpack_require__(30); 210 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 211 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 212 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 213 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 214 | return c > 3 && r && Object.defineProperty(target, key, r), r; 215 | }; 216 | var __metadata = (this && this.__metadata) || function (k, v) { 217 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); 218 | }; 219 | 220 | 221 | var DemoPage = (function () { 222 | function DemoPage(navCtrl) { 223 | this.navCtrl = navCtrl; 224 | this.indexs = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']; 225 | this.sections = Array.apply(null, Array(10)).map(function (item, i) { 226 | return 0; 227 | }); 228 | } 229 | DemoPage = __decorate([ 230 | Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */])({ 231 | selector: 'page-demo',template:/*ion-inline-start:"/Users/CK/git/ionic3-index-list/src/pages/demo/demo.html"*/'\n \n Home\n \n\n\n\n\n\n\n \n \n \n \n \n section\n \n \n \n \n\n\n \n\n\n'/*ion-inline-end:"/Users/CK/git/ionic3-index-list/src/pages/demo/demo.html"*/ 232 | }), 233 | __metadata("design:paramtypes", [__WEBPACK_IMPORTED_MODULE_1_ionic_angular__["d" /* NavController */]]) 234 | ], DemoPage); 235 | return DemoPage; 236 | }()); 237 | 238 | //# sourceMappingURL=demo.js.map 239 | 240 | /***/ }), 241 | 242 | /***/ 201: 243 | /***/ (function(module, __webpack_exports__, __webpack_require__) { 244 | 245 | "use strict"; 246 | /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return IndexSectionComponent; }); 247 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0); 248 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__index_cell__ = __webpack_require__(202); 249 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 250 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 251 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 252 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 253 | return c > 3 && r && Object.defineProperty(target, key, r), r; 254 | }; 255 | var __metadata = (this && this.__metadata) || function (k, v) { 256 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); 257 | }; 258 | 259 | 260 | var IndexSectionComponent = (function () { 261 | function IndexSectionComponent(elementRef) { 262 | this.elementRef = elementRef; 263 | this._current = false; 264 | } 265 | IndexSectionComponent.prototype.getElementRef = function () { 266 | return this.elementRef; 267 | }; 268 | IndexSectionComponent.prototype.ngAfterViewChecked = function () { 269 | // setTimeout(()=>{ 270 | // if (this._listOfIndexCell && this._listOfIndexCell.length) { 271 | // const listArray = this._listOfIndexCell.toArray(); 272 | // listArray[listArray.length - 1]._lastItem = true; 273 | // } 274 | // }) 275 | }; 276 | __decorate([ 277 | Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */])(), 278 | __metadata("design:type", String) 279 | ], IndexSectionComponent.prototype, "index", void 0); 280 | __decorate([ 281 | Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__["r" /* ContentChildren */])(__WEBPACK_IMPORTED_MODULE_1__index_cell__["a" /* IndexCellComponent */]), 282 | __metadata("design:type", __WEBPACK_IMPORTED_MODULE_0__angular_core__["T" /* QueryList */]) 283 | ], IndexSectionComponent.prototype, "_listOfIndexCell", void 0); 284 | IndexSectionComponent = __decorate([ 285 | Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */])({ 286 | selector: 'ion-index-section', 287 | template: "\n
\n \n
\n {{index}}\n
\n\n \n
\n \n\n \n
\n
\n ", 288 | styles: ["\n .index-section-index{\n margin: 0;\n padding: 2px 10px 2px 10px;\n background-color: #fafafa;\n border-bottom: 1px solid #dedede;\n }\n\n .index-section-main{\n /*border-bottom: 1px solid #dedede;*/\n }\n\n .index-section-current .index-section-index{\n position: sticky;\n position: -webkit-sticky;\n top: 0px;\n left: 0px;\n width: 100%;\n z-index: 3;\n transform: translateZ(0px);\n }\n "] 289 | }), 290 | __metadata("design:paramtypes", [__WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */]]) 291 | ], IndexSectionComponent); 292 | return IndexSectionComponent; 293 | }()); 294 | 295 | //# sourceMappingURL=index-section.js.map 296 | 297 | /***/ }), 298 | 299 | /***/ 202: 300 | /***/ (function(module, __webpack_exports__, __webpack_require__) { 301 | 302 | "use strict"; 303 | /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return IndexCellComponent; }); 304 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0); 305 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 306 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 307 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 308 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 309 | return c > 3 && r && Object.defineProperty(target, key, r), r; 310 | }; 311 | var __metadata = (this && this.__metadata) || function (k, v) { 312 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); 313 | }; 314 | 315 | var IndexCellComponent = (function () { 316 | function IndexCellComponent() { 317 | } 318 | IndexCellComponent.prototype.ngOnInit = function () { }; 319 | IndexCellComponent = __decorate([ 320 | Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */])({ 321 | selector: 'ion-index-cell', 322 | template: "\n
\n
\n \n
\n
\n ", 323 | styles: ["\n .index-cell{\n background-color: #fff;\n padding-left:10px\n }\n\n .index-cell-item{\n box-sizing: border-box;\n color: inherit;\n min-height: 48px;\n display: block;\n overflow: hidden;\n position: relative;\n text-decoration: none;\n border-bottom: 1px solid #dcd8d8;\n width: 100%;\n display: flex;\n align-items: center;\n }\n "] 324 | }), 325 | __metadata("design:paramtypes", []) 326 | ], IndexCellComponent); 327 | return IndexCellComponent; 328 | }()); 329 | 330 | //# sourceMappingURL=index-cell.js.map 331 | 332 | /***/ }), 333 | 334 | /***/ 203: 335 | /***/ (function(module, __webpack_exports__, __webpack_require__) { 336 | 337 | "use strict"; 338 | Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); 339 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_platform_browser_dynamic__ = __webpack_require__(204); 340 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__app_module__ = __webpack_require__(227); 341 | 342 | 343 | Object(__WEBPACK_IMPORTED_MODULE_0__angular_platform_browser_dynamic__["a" /* platformBrowserDynamic */])().bootstrapModule(__WEBPACK_IMPORTED_MODULE_1__app_module__["a" /* AppModule */]); 344 | //# sourceMappingURL=main.js.map 345 | 346 | /***/ }), 347 | 348 | /***/ 227: 349 | /***/ (function(module, __webpack_exports__, __webpack_require__) { 350 | 351 | "use strict"; 352 | /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AppModule; }); 353 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0); 354 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_platform_browser__ = __webpack_require__(26); 355 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_ionic_angular__ = __webpack_require__(30); 356 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__app_component__ = __webpack_require__(269); 357 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__pages_about_about__ = __webpack_require__(196); 358 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__pages_contact_contact__ = __webpack_require__(198); 359 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__pages_home_home__ = __webpack_require__(199); 360 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__pages_tabs_tabs__ = __webpack_require__(195); 361 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__ionic_native_status_bar__ = __webpack_require__(191); 362 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__ionic_native_splash_screen__ = __webpack_require__(194); 363 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__components_index__ = __webpack_require__(279); 364 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__pages_demo_demo__ = __webpack_require__(200); 365 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__angular_http__ = __webpack_require__(197); 366 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 367 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 368 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 369 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 370 | return c > 3 && r && Object.defineProperty(target, key, r), r; 371 | }; 372 | 373 | 374 | 375 | 376 | 377 | 378 | 379 | 380 | 381 | 382 | 383 | 384 | 385 | var AppModule = (function () { 386 | function AppModule() { 387 | } 388 | AppModule = __decorate([ 389 | Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__["I" /* NgModule */])({ 390 | declarations: [ 391 | __WEBPACK_IMPORTED_MODULE_3__app_component__["a" /* MyApp */], 392 | __WEBPACK_IMPORTED_MODULE_4__pages_about_about__["a" /* AboutPage */], 393 | __WEBPACK_IMPORTED_MODULE_5__pages_contact_contact__["a" /* ContactPage */], 394 | __WEBPACK_IMPORTED_MODULE_6__pages_home_home__["a" /* HomePage */], 395 | __WEBPACK_IMPORTED_MODULE_7__pages_tabs_tabs__["a" /* TabsPage */], 396 | __WEBPACK_IMPORTED_MODULE_11__pages_demo_demo__["a" /* DemoPage */] 397 | ], 398 | imports: [ 399 | __WEBPACK_IMPORTED_MODULE_1__angular_platform_browser__["a" /* BrowserModule */], 400 | __WEBPACK_IMPORTED_MODULE_2_ionic_angular__["c" /* IonicModule */].forRoot(__WEBPACK_IMPORTED_MODULE_3__app_component__["a" /* MyApp */], {}, { 401 | links: [] 402 | }), 403 | __WEBPACK_IMPORTED_MODULE_12__angular_http__["b" /* HttpModule */], 404 | __WEBPACK_IMPORTED_MODULE_10__components_index__["a" /* IndexListModule */] 405 | ], 406 | bootstrap: [__WEBPACK_IMPORTED_MODULE_2_ionic_angular__["a" /* IonicApp */]], 407 | entryComponents: [ 408 | __WEBPACK_IMPORTED_MODULE_3__app_component__["a" /* MyApp */], 409 | __WEBPACK_IMPORTED_MODULE_4__pages_about_about__["a" /* AboutPage */], 410 | __WEBPACK_IMPORTED_MODULE_5__pages_contact_contact__["a" /* ContactPage */], 411 | __WEBPACK_IMPORTED_MODULE_6__pages_home_home__["a" /* HomePage */], 412 | __WEBPACK_IMPORTED_MODULE_7__pages_tabs_tabs__["a" /* TabsPage */], 413 | __WEBPACK_IMPORTED_MODULE_11__pages_demo_demo__["a" /* DemoPage */] 414 | ], 415 | providers: [ 416 | __WEBPACK_IMPORTED_MODULE_8__ionic_native_status_bar__["a" /* StatusBar */], 417 | __WEBPACK_IMPORTED_MODULE_9__ionic_native_splash_screen__["a" /* SplashScreen */], 418 | { provide: __WEBPACK_IMPORTED_MODULE_0__angular_core__["u" /* ErrorHandler */], useClass: __WEBPACK_IMPORTED_MODULE_2_ionic_angular__["b" /* IonicErrorHandler */] } 419 | ] 420 | }) 421 | ], AppModule); 422 | return AppModule; 423 | }()); 424 | 425 | //# sourceMappingURL=app.module.js.map 426 | 427 | /***/ }), 428 | 429 | /***/ 269: 430 | /***/ (function(module, __webpack_exports__, __webpack_require__) { 431 | 432 | "use strict"; 433 | /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return MyApp; }); 434 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0); 435 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_ionic_angular__ = __webpack_require__(30); 436 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__ionic_native_status_bar__ = __webpack_require__(191); 437 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__ionic_native_splash_screen__ = __webpack_require__(194); 438 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__pages_tabs_tabs__ = __webpack_require__(195); 439 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 440 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 441 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 442 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 443 | return c > 3 && r && Object.defineProperty(target, key, r), r; 444 | }; 445 | var __metadata = (this && this.__metadata) || function (k, v) { 446 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); 447 | }; 448 | 449 | 450 | 451 | 452 | 453 | var MyApp = (function () { 454 | function MyApp(platform, statusBar, splashScreen) { 455 | this.rootPage = __WEBPACK_IMPORTED_MODULE_4__pages_tabs_tabs__["a" /* TabsPage */]; 456 | platform.ready().then(function () { 457 | // Okay, so the platform is ready and our plugins are available. 458 | // Here you can do any higher level native things you might need. 459 | statusBar.styleDefault(); 460 | splashScreen.hide(); 461 | }); 462 | } 463 | MyApp = __decorate([ 464 | Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */])({template:/*ion-inline-start:"/Users/CK/git/ionic3-index-list/src/app/app.html"*/'\n'/*ion-inline-end:"/Users/CK/git/ionic3-index-list/src/app/app.html"*/ 465 | }), 466 | __metadata("design:paramtypes", [__WEBPACK_IMPORTED_MODULE_1_ionic_angular__["e" /* Platform */], __WEBPACK_IMPORTED_MODULE_2__ionic_native_status_bar__["a" /* StatusBar */], __WEBPACK_IMPORTED_MODULE_3__ionic_native_splash_screen__["a" /* SplashScreen */]]) 467 | ], MyApp); 468 | return MyApp; 469 | }()); 470 | 471 | //# sourceMappingURL=app.component.js.map 472 | 473 | /***/ }), 474 | 475 | /***/ 279: 476 | /***/ (function(module, __webpack_exports__, __webpack_require__) { 477 | 478 | "use strict"; 479 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__index_list_index_list_module__ = __webpack_require__(280); 480 | /* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_0__index_list_index_list_module__["a"]; }); 481 | 482 | //# sourceMappingURL=index.js.map 483 | 484 | /***/ }), 485 | 486 | /***/ 280: 487 | /***/ (function(module, __webpack_exports__, __webpack_require__) { 488 | 489 | "use strict"; 490 | /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return IndexListModule; }); 491 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0); 492 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__index_list__ = __webpack_require__(281); 493 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__index_section__ = __webpack_require__(201); 494 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__angular_common__ = __webpack_require__(34); 495 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__index_cell__ = __webpack_require__(202); 496 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 497 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 498 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 499 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 500 | return c > 3 && r && Object.defineProperty(target, key, r), r; 501 | }; 502 | 503 | 504 | 505 | 506 | 507 | var IndexListModule = (function () { 508 | function IndexListModule() { 509 | } 510 | IndexListModule = __decorate([ 511 | Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__["I" /* NgModule */])({ 512 | declarations: [ 513 | __WEBPACK_IMPORTED_MODULE_1__index_list__["a" /* IndexListComponent */], 514 | __WEBPACK_IMPORTED_MODULE_2__index_section__["a" /* IndexSectionComponent */], 515 | __WEBPACK_IMPORTED_MODULE_4__index_cell__["a" /* IndexCellComponent */] 516 | ], 517 | imports: [ 518 | __WEBPACK_IMPORTED_MODULE_3__angular_common__["b" /* CommonModule */], 519 | ], 520 | exports: [ 521 | __WEBPACK_IMPORTED_MODULE_1__index_list__["a" /* IndexListComponent */], 522 | __WEBPACK_IMPORTED_MODULE_2__index_section__["a" /* IndexSectionComponent */], 523 | __WEBPACK_IMPORTED_MODULE_4__index_cell__["a" /* IndexCellComponent */] 524 | ] 525 | }) 526 | ], IndexListModule); 527 | return IndexListModule; 528 | }()); 529 | 530 | //# sourceMappingURL=index-list.module.js.map 531 | 532 | /***/ }), 533 | 534 | /***/ 281: 535 | /***/ (function(module, __webpack_exports__, __webpack_require__) { 536 | 537 | "use strict"; 538 | /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return IndexListComponent; }); 539 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0); 540 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__index_section__ = __webpack_require__(201); 541 | var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { 542 | var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; 543 | if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); 544 | else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; 545 | return c > 3 && r && Object.defineProperty(target, key, r), r; 546 | }; 547 | var __metadata = (this && this.__metadata) || function (k, v) { 548 | if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); 549 | }; 550 | 551 | 552 | var IndexListComponent = (function () { 553 | function IndexListComponent() { 554 | this._flag = true; 555 | this._indexes = []; //右侧导航 556 | this._offsetTops = []; // 每个IndexSection 的offsetTop 557 | this._indicatorTime = null; 558 | this._showModal = false; 559 | this.hasTop = false; 560 | } 561 | IndexListComponent.prototype.ngAfterViewChecked = function () { 562 | var _this = this; 563 | if (this._flag && this._listOfIndexSection) { 564 | this._listOfIndexSection.forEach(function (section) { 565 | _this._indexes.push(section.index); 566 | var offsetTop = section.getElementRef().nativeElement.offsetTop; 567 | _this._offsetTops.push(offsetTop); 568 | }); 569 | this._flag = false; 570 | if (this.hasTop) { 571 | this._indexes.unshift('#'); 572 | this._offsetTops.unshift(0); 573 | } 574 | } 575 | }; 576 | IndexListComponent.prototype.onScroll = function (e) { 577 | var _this = this; 578 | e.preventDefault(); 579 | var scrollTopOffsetTop = this.scrollContent.nativeElement.scrollTop; 580 | this._offsetTops.forEach(function (v, i) { 581 | if (scrollTopOffsetTop >= v) { 582 | _this._currentIndicator = _this._indexes[i]; 583 | // 584 | _this.setCurrentSection(_this._currentIndicator); 585 | } 586 | }); 587 | }; 588 | IndexListComponent.prototype.touchstart = function (e) { 589 | this._navOffsetX = e.changedTouches[0].clientX; 590 | this.scrollList(e.changedTouches[0].clientY); 591 | }; 592 | IndexListComponent.prototype.touchmove = function (e) { 593 | e.preventDefault(); 594 | this.scrollList(e.changedTouches[0].clientY); 595 | }; 596 | IndexListComponent.prototype.touchend = function (e) { 597 | var _this = this; 598 | this._indicatorTime = setTimeout(function () { 599 | _this._showModal = false; 600 | _this._currentIndicator = ''; 601 | }, 500); 602 | }; 603 | IndexListComponent.prototype.scrollList = function (y) { 604 | var currentItem = document.elementFromPoint(this._navOffsetX, y); 605 | if (!currentItem || !currentItem.classList.contains('index-bar')) { 606 | return; 607 | } 608 | this._currentIndicator = currentItem['innerText']; 609 | var index = this._indexes.indexOf(this._currentIndicator); 610 | this.scrollContent.nativeElement.scrollTop = this._offsetTops[index]; 611 | this._showModal = true; 612 | if (this._indicatorTime) { 613 | clearTimeout(this._indicatorTime); 614 | } 615 | }; 616 | IndexListComponent.prototype.setCurrentSection = function (currentindex) { 617 | var listArray = this._listOfIndexSection.toArray(); 618 | listArray.forEach(function (section) { 619 | if (section.index === currentindex) { 620 | section._current = true; 621 | } 622 | else { 623 | section._current = false; 624 | } 625 | }); 626 | }; 627 | __decorate([ 628 | Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__["D" /* Input */])(), 629 | __metadata("design:type", Boolean) 630 | ], IndexListComponent.prototype, "hasTop", void 0); 631 | __decorate([ 632 | Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__["_8" /* ViewChild */])('top'), 633 | __metadata("design:type", __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */]) 634 | ], IndexListComponent.prototype, "top", void 0); 635 | __decorate([ 636 | Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__["r" /* ContentChildren */])(__WEBPACK_IMPORTED_MODULE_1__index_section__["a" /* IndexSectionComponent */]), 637 | __metadata("design:type", __WEBPACK_IMPORTED_MODULE_0__angular_core__["T" /* QueryList */]) 638 | ], IndexListComponent.prototype, "_listOfIndexSection", void 0); 639 | __decorate([ 640 | Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__["_8" /* ViewChild */])('scrollContent'), 641 | __metadata("design:type", __WEBPACK_IMPORTED_MODULE_0__angular_core__["t" /* ElementRef */]) 642 | ], IndexListComponent.prototype, "scrollContent", void 0); 643 | IndexListComponent = __decorate([ 644 | Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__["m" /* Component */])({ 645 | selector: 'ion-index-list', 646 | template: "\n
\n
\n \n \n
\n\n
\n
\n {{index}}\n
\n
\n \n
\n {{_currentIndicator}}\n
\n
\n ", 647 | styles: ["\n ::-webkit-scrollbar {\n width: 0\n }\n\n .index-list{\n width: 100%;\n display: flex;\n justify-content: space-between;\n height: 100%;\n overflow: hidden;\n transform:translate(0,0);\n }\n\n .index-list-wrapper{\n width: 100%;\n overflow-y: scroll;\n -webkit-overflow-scrolling: touch;\n }\n\n .index-list-nav{\n width:6%;\n position: absolute;\n top: 44px;\n right: 0;\n display: flex;\n justify-content:center;\n flex-direction: column;\n text-align: center;\n background-color: rgba(245, 245, 245, 0.3);\n height: 100%;\n z-index: 1000;\n -webkit-touch-callout: none;\n }\n\n .index-bar{\n padding: 2px 6px;\n font-size: 8px;\n }\n\n .index-list-nav-activate{\n color: red;\n }\n\n .modal {\n top: 50%;\n left: 50%;\n z-index: 100;\n position: fixed;\n pointer-events: none;\n width: 20vw;\n height: 20vw;\n line-height: 20vw;\n margin-left: -10vw;\n margin-top: -10vw;\n color: #fff;\n font-size: 3em;\n text-align: center;\n border-radius: 8px;\n background-color: rgba(0, 0, 0, 0.52);\n -webkit-box-shadow: 0 0 4px 1px rgba(0, 0, 0, 0.16);\n box-shadow: 0 0 4px 1px rgba(0, 0, 0, 0.16);\n -webkit-transition: opacity .5s;\n -o-transition: opacity .5s;\n transition: opacity .5s;\n opacity: 0;\n }\n\n .modal.show {\n opacity: 1;\n }\n "] 648 | }), 649 | __metadata("design:paramtypes", []) 650 | ], IndexListComponent); 651 | return IndexListComponent; 652 | }()); 653 | 654 | //# sourceMappingURL=index-list.js.map 655 | 656 | /***/ }) 657 | 658 | },[203]); 659 | //# sourceMappingURL=main.js.map --------------------------------------------------------------------------------