289 lines
9.4 KiB
TypeScript
Raw Normal View History

import { Type, Component } from '@angular/core';
import { Loading, LoadingController, ModalController, NavParams, AlertController, MenuController } from 'ionic-angular';
import { Storage } from '@ionic/storage';
2017-01-16 21:36:22 -05:00
import { StrongsModal } from '../../components/strongs-modal/strongs-modal';
import { 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';
2017-01-16 21:36:22 -05:00
@Component({
templateUrl: 'search.html',
providers: [BibleService, StrongsService, WordService]
2017-01-16 21:36:22 -05:00
})
export class SearchPage
{
searchQuery = '';
2017-01-16 21:36:22 -05:00
userProfile: UserProfile;
last: CardItem;
loader: Loading;
title: string;
2017-01-16 21:36:22 -05:00
constructor(
private strongsService: StrongsService
, private bibleService: BibleService
, private wordService: WordService
, private pagesService: PagesService
, private alertCtrl: AlertController
, private menu: MenuController
, public loadingCtrl: LoadingController
, public modalCtrl: ModalController
, public local: Storage
, public params: NavParams
)
2017-01-16 21:36:22 -05:00
{
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);
});
}
actionsMenu()
{
this.menu.open('actions');
}
2017-01-16 21:36:22 -05:00
addPage()
{
let alert = this.alertCtrl.create({
title: 'Save Search as Page',
inputs: [
{
name: 'title',
placeholder: 'Page Title'
}
],
buttons: [
{
text: 'Cancel',
role: 'cancel',
handler: data =>
{
console.log('Cancel clicked');
}
},
{
text: 'Save',
handler: data =>
{
let p = { queries: this.userProfile.user.items.slice(), title: data.title };
this.userProfile.user.saved_pages.push(p);
this.userProfile.save(this.local);
this.pagesService.addPage(p);
}
}
]
});
alert.present();
}
updatePage()
{
let page = this.userProfile.user.saved_pages.find(
i=>
i.title == this.params.data.title
);
page.queries = this.userProfile.user.items.slice();
this.userProfile.save(this.local);
2017-01-16 21:36:22 -05:00
}
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();
if (this.params.data.title === undefined)
this.title = "Search";
else
this.title = this.params.data.title;
2017-01-16 21:36:22 -05:00
}
presentStrongsModal(strongs: StrongsResult)
{
let modal = this.modalCtrl.create(StrongsModal, { strongsid: strongs, onItemClicked: this });
2017-01-16 21:36:22 -05:00
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';
2017-01-16 21:36:22 -05:00
}
isPassage(t: string)
{
return t === 'Passage';
2017-01-16 21:36:22 -05:00
}
isStrongs(t: string)
{
return t === 'Strongs';
2017-01-16 21:36:22 -05:00
}
isWords(t: string)
{
return t === 'Words';
2017-01-16 21:36:22 -05:00
}
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...'
2017-01-16 21:36:22 -05:00
});
this.loader.present().then(
() =>
{
try
{
let qs = search.split(';');
2017-01-16 21:36:22 -05:00
for (let x in qs)
{
if (qs.hasOwnProperty(x))
{
let q = qs[x].trim();
if (q !== '')
2017-01-16 21:36:22 -05:00
{
// 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' });
2017-01-16 21:36:22 -05:00
else
this.addItemToList({ data: result.msg, type: 'Error', dict: 'na' });
2017-01-16 21:36:22 -05:00
}
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';
2017-01-16 21:36:22 -05:00
} else
{
dict = 'grk';
2017-01-16 21:36:22 -05:00
}
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' });
2017-01-16 21:36:22 -05:00
else
{
if (this.userProfile.user.strongs_modal)
this.presentStrongsModal(result);
else
this.addItemToList({ data: result, type: 'Strongs', dict: 'na' });
2017-01-16 21:36:22 -05:00
}
}
else
{
// its a verse reference.
if (q.trim() !== '')
2017-01-16 21:36:22 -05:00
{
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' });
2017-01-16 21:36:22 -05:00
else
this.addItemToList({ data: r.msg, type: 'Error', dict: 'na' });
2017-01-16 21:36:22 -05:00
}
}
}
}
}
if (this.userProfile.user.clear_search_after_query)
$('.searchbar-input').val('');
2017-01-16 21:36:22 -05:00
this.userProfile.save(this.local);
}
catch (error)
{
this.addItemToList({ data: error, type: 'Error', dict: 'na' });
2017-01-16 21:36:22 -05:00
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<any>;
dict: string;
}