import React, { Component } from 'react'; import { Searchbar, Popover, Popup, View, Page, List, ListItem, Navbar, NavRight, Link } from 'framework7-react'; import { Toggle } from 'framework7-react'; import { f7 } from 'framework7-react'; import { Dom7 } from 'framework7'; import { Device } from '../../../../common/mobile/utils/device'; import { observable, runInAction } from "mobx"; import { observer } from "mobx-react"; const searchOptions = observable({ usereplace: false, isReplaceAll: false }); const popoverStyle = { height: '300px' }; const SEARCH_BACKWARD = 'back'; const SEARCH_FORWARD = 'next'; class SearchSettingsView extends Component { constructor(props) { super(props); this.state = { useReplace: false, // caseSensitive: false, // markResults: false searchIn: 0, searchBy: 1, lookIn: 1, isMatchCase: false, isMatchCell: false, isReplaceAll: false }; } onFindReplaceClick(action) { runInAction(() => { searchOptions.usereplace = action == 'replace'; searchOptions.isReplaceAll = action == 'replace-all'; }); this.setState({ useReplace: searchOptions.usereplace, isReplaceAll: searchOptions.isReplaceAll }); if (this.onReplaceChecked) {} } extraSearchOptions() { } render() { const show_popover = !Device.phone; // const navbar = // // {!show_popover && // // Done // // } // ; const extra = this.extraSearchOptions(); const content = {/* {navbar} */} {extra} {/* */} ; return ( show_popover ? {content} : {content} ) } } // @observer class SearchView extends Component { constructor(props) { super(props); this.state = { searchQuery: '', replaceQuery: '' }; const $$ = Dom7; $$(document).on('page:init', (e, page) => { if ( page.name == 'home' ) { this.searchbar = f7.searchbar.create({ el: '.searchbar', customSearch: true, expandable: true, backdrop: false, on: { search: (bar, curval, prevval) => { }, enable: this.onSearchbarShow.bind(this, true), disable: this.onSearchbarShow.bind(this, false) } }); // function iOSVersion() { // var ua = navigator.userAgent; // var m; // return (m = /(iPad|iPhone|iphone).*?(OS |os |OS\_)(\d+((_|\.)\d)?((_|\.)\d)?)/.exec(ua)) ? parseFloat(m[3]) : 0; // } const $editor = $$('#editor_sdk'); // const $replaceLink = $$('#replace-link'); if (false /* iOSVersion < 13 */) { // $editor.on('mousedown touchstart', this.onEditorTouchStart.bind(this)); // $editor.on('mouseup touchend', this.onEditorTouchEnd.bind(this)); } else { // $editor.on('pointerdown', this.onEditorTouchStart.bind(this)); // $editor.on('pointerup', this.onEditorTouchEnd.bind(this)); } $editor.on('pointerdown', this.onEditorTouchStart.bind(this)); $editor.on('pointerup', this.onEditorTouchEnd.bind(this)); // $replaceLink.on('click', this.onReplaceHold.bind(this)); } }); this.onSettingsClick = this.onSettingsClick.bind(this); this.onSearchClick = this.onSearchClick.bind(this); this.onReplaceClick = this.onReplaceClick.bind(this); } componentDidMount(){ const $$ = Dom7; this.$replace = $$('#idx-replace-val'); } onSettingsClick(e) { if ( Device.phone ) { f7.popup.open('.search-settings-popup'); } else f7.popover.open('#idx-search-settings', '#idx-btn-search-settings'); } searchParams() { let params = { find: this.searchbar.query }; if (searchOptions.usereplace) { params.replace = this.$replace.val(); } return params; } onSearchClick(action) { if (this.searchbar && this.state.searchQuery) { if (this.props.onSearchQuery) { let params = this.searchParams(); params.find = this.state.searchQuery; params.forward = action != SEARCH_BACKWARD; // console.log(params); this.props.onSearchQuery(params); } } } onReplaceClick() { if (this.searchbar && this.state.searchQuery) { if (this.props.onReplaceQuery) { let params = this.searchParams(); params.find = this.state.searchQuery; // console.log(params); this.props.onReplaceQuery(params); } } } onReplaceAllClick() { if (this.searchbar && this.state.searchQuery) { if (this.props.onReplaceAllQuery) { let params = this.searchParams(); params.find = this.state.searchQuery; // console.log(params); this.props.onReplaceAllQuery(params); } } } onSearchbarShow(isshowed, bar) { if ( !isshowed ) { this.$replace.val(''); } } onEditorTouchStart(e) { this.startPoint = this.pointerPosition(e); // console.log(this.startPoint); } onEditorTouchEnd(e) { const endPoint = this.pointerPosition(e); // console.log(endPoint); if (this.searchbar.enabled) { let distance; if(this.startPoint) { distance = (!!this.startPoint.x || !!this.startPoint.y) ? 0 : Math.sqrt((endPoint.x -= this.startPoint.x) * endPoint.x + (endPoint.y -= this.startPoint.y) * endPoint.y); } else { distance = 0; } // const distance = (this.startPoint === undefined || this.startPoint === undefined) ? 0 : // Math.sqrt((endPoint.x -= this.startPoint.x) * endPoint.x + (endPoint.y -= this.startPoint.y) * endPoint.y); if (distance < 1) { this.searchbar.disable(); } } } pointerPosition(e) { let out = {x:0, y:0}; if ( e.type == 'touchstart' || e.type == 'touchend' ) { const touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0]; out.x = touch.pageX; out.y = touch.pageY; } else if ( e.type == 'mousedown' || e.type == 'mouseup' ) { out.x = e.pageX; out.y = e.pageY; } return out; } changeSearchQuery(value) { this.setState({ searchQuery: value }); } changeReplaceQuery(value) { this.setState({ replaceQuery: value }); } render() { const usereplace = searchOptions.usereplace; const isReplaceAll = searchOptions.isReplaceAll; // const hidden = {display: "none"}; const searchQuery = this.state.searchQuery; const replaceQuery = this.state.replaceQuery; const isIos = Device.ios; const { _t } = this.props; if(this.searchbar && this.searchbar.enabled) { usereplace || isReplaceAll ? this.searchbar.el.classList.add('replace') : this.searchbar.el.classList.remove('replace'); } return (
{isIos ?
: null}
{this.changeSearchQuery(e.target.value)}} /> {isIos ? : null}
{usereplace || isReplaceAll ?
{/* style={!usereplace ? hidden: null} */} {this.changeReplaceQuery(e.target.value)}} /> {isIos ? : null}
: null}
) } } const SearchViewWithObserver = observer(SearchView); export {SearchViewWithObserver as SearchView, SearchSettingsView};