import { Type, Component } from '@angular/core'; import { Loading, LoadingController, ModalController, NavParams } from 'ionic-angular'; import { Storage } from '@ionic/storage'; import { StrongsModal } from '../../components/strongs-modal/strongs-modal'; import { BiblePassageResult, BibleService } from '../../services/bible-service'; import { StrongsResult, StrongsService } from '../../services/strongs-service'; import { WordService } from '../../services/word-service'; import { PagesService } from "../../services/pages-service"; import { UserProfile } from '../../libs/UserProfile'; import { Reference } from '../../libs/Reference'; import { MyApp } from '../../app/app.component'; @Component({ templateUrl: 'search.html', providers: [BibleService, StrongsService, WordService] }) export class SearchPage { searchQuery = ''; userProfile: UserProfile; last: CardItem; loader: Loading; saved_results_title: string = ""; constructor( private strongsService: StrongsService ,private bibleService: BibleService ,private wordService: WordService ,private pagesService: PagesService ,public loadingCtrl: LoadingController ,public modalCtrl: ModalController ,public local: Storage ,public params: NavParams ) { this.userProfile = new UserProfile(UserProfile.createDefaultUser()); // Check if there is a profile saved in local storage this.local.get('profile').then(profile => { let t = this.userProfile; if (profile !== null) t = JSON.parse(profile); this.userProfile.update(t, local); this.initializeItems(this.userProfile); }).catch(error => { console.log(error); }); } addPage() { let p = { queries: this.userProfile.user.items.slice(), title: this.saved_results_title }; this.userProfile.user.saved_pages.push(p); this.userProfile.save(this.local); this.pagesService.addPage(p); } initializeItems(u: UserProfile) { this.userProfile = u; this.pagesService.initializePages(u.user.saved_pages); if (this.params.data.queries !== undefined) this.userProfile.user.items = this.params.data.queries.slice(); } presentStrongsModal(strongs: StrongsResult) { let modal = this.modalCtrl.create(StrongsModal, { strongsid: strongs, onItemClicked: this }); modal.present(); } setQuery(searchbar) { this.searchQuery = searchbar.target.value; } getQuery(searchbar) { this.getItems(this.searchQuery); } removeItem(item) { let idx = this.userProfile.user.items.indexOf(item); this.userProfile.user.items.splice(idx, 1); // save the users settings. this.userProfile.save(this.local); } isError(t: string) { return t === 'Error'; } isPassage(t: string) { return t === 'Passage'; } isStrongs(t: string) { return t === 'Strongs'; } isWords(t: string) { return t === 'Words'; } addItemToList(item) { if (this.userProfile.user.append_to_bottom) { if (this.last != null && this.userProfile.user.insert_next_to_item) { let idx = this.userProfile.user.items.indexOf(this.last); this.userProfile.user.items.splice(idx + 1, 0, item); } else this.userProfile.user.items.push(item); } else { if (this.last != null && this.userProfile.user.insert_next_to_item) { let idx = this.userProfile.user.items.indexOf(this.last); this.userProfile.user.items.splice(idx, 0, item); } else this.userProfile.user.items.unshift(item); } this.last = null; } getItemsNextToCard(data: OpenData) { this.last = data.card; this.getItems(data.qry); } getItems(search) { this.loader = this.loadingCtrl.create({ content: 'Looking up query...' }); this.loader.present().then( () => { try { let qs = search.split(';'); for (let x in qs) { if (qs.hasOwnProperty(x)) { let q = qs[x].trim(); if (q !== '') { // its a search term. if (q.search(/[0-9]/i) === -1) { let result = this.wordService.getResult(q); if (result.status === 0) this.addItemToList({ data: result, type: 'Words', dict: 'na' }); else this.addItemToList({ data: result.msg, type: 'Error', dict: 'na' }); } else if (q.search(/(H|G)[0-9]/i) !== -1) { // its a strongs lookup let dict = q.substring(0, 1); if (dict.search(/h/i) !== -1) { dict = 'heb'; } else { dict = 'grk'; } q = q.substring(1, q.length); let result = this.strongsService.getResult(parseInt(q), dict); if (result.status === -1) this.addItemToList({ data: result.msg, type: 'Error', dict: 'na' }); else { if (this.userProfile.user.strongs_modal) this.presentStrongsModal(result); else this.addItemToList({ data: result, type: 'Strongs', dict: 'na' }); } } else { // its a verse reference. if (q.trim() !== '') { let myref = new Reference(q.trim()); let r = this.bibleService.getResult(myref.Section); r.ref = myref.toString(); if (r.status === 0) this.addItemToList({ data: r, type: 'Passage', dict: r.testament === 'new' ? 'G' : 'H' }); else this.addItemToList({ data: r.msg, type: 'Error', dict: 'na' }); } } } } } if (this.userProfile.user.clear_search_after_query) $('.searchbar-input').val(''); this.userProfile.save(this.local); } catch (error) { this.addItemToList({ data: error, type: 'Error', dict: 'na' }); console.log(error); } finally { this.loader.dismiss(); } } ); } } export type OpenData = { card: CardItem, qry: string } export type CardItem = { data: any, type: string, dict: string } class Item { id: number; data: any; type: Type; dict: string; }