console.log( "=== simpread read controlbar load ===" ) import * as ss from 'stylesheet'; import {browser,br}from 'browser'; import * as msg from 'message'; import th from 'theme'; import * as conf from 'config'; import * as output from 'output'; import * as watch from 'watch'; import * as kbd from 'keyboard'; import { storage } from 'storage'; import ReadOpt from 'readopt'; import Actionbar from 'actionbar'; import Pluginbar from 'pluginbar'; import Sitebar from 'sitebar'; import Fab from 'fab'; import Fap from 'fap' import * as ttips from 'tooltip'; let notify; const tooltip_options = { target : "name", position : "bottom", delay : 50, }; /** * Read controlbar * * @class */ export default class ReadCtlbar extends React.Component { static propTypes = { onAction: React.PropTypes.func, } verify( type ) { if ( ss.VerifyCustom( type, storage.current.custom ) ) { !notify && ( notify = new Notify().Render({ state: "holdon", content: '由于已使用自定义样式,设定 有可能无效,详细说明 请看这里', callback:()=>notify=undefined })); } } componentDidMount() { browser.runtime.onMessage.addListener( ( request, sender, sendResponse ) => { if ( request.type == msg.MESSAGE_ACTION.export ) { console.log( "controlbar runtime Listener", request ); new Notify().Render( "已重新授权成功!" ); br.isFirefox() ? new Notify().Render( "请刷新本页才能生效。" ) : this.onAction( undefined, request.value.type ); } }); kbd.Listen( combo => { this.onAction( undefined, combo ) }); } onAction( event, type ) { console.log( "fab type is =", type ) this.verify( type.split( "_" )[0] ); const action = ( event, type ) => { this.props.multi && [ "markdown", "dropbox", "yinxiang","evernote", "onenote", "gdrive" ].includes( type ) && new Notify().Render( "当前为论坛类页面,不建议使用导出服务,有可能出现未知错误。" ); switch ( true ) { case [ "exit", "setting", "siteeditor", "remove", "highlight" ].includes( type ): this.props.onAction( type ); break; case type.indexOf( "_" ) > 0 && ( type.startsWith( "fontfamily" ) || type.startsWith( "fontsize" ) || type.startsWith( "layout" )): const [ key, value ] = [ type.split( "_" )[0], type.split( "_" )[1] ]; Object.keys( ss ).forEach( (name)=>name.toLowerCase() == key && ss[name]( value )); this.props.onAction && this.props.onAction( key, value ); break; case type.indexOf( "_" ) > 0 && type.startsWith( "theme" ): let i = th.names.indexOf( th.theme ); i = type.endsWith( "prev" ) ? --i : ++i; i >= th.names.length && ( i = 0 ); i < 0 && ( i = th.names.length - 1 ); th.Change( th.names[i] ); this.props.onAction && this.props.onAction( type.split( "_" )[0], th.theme ); break; case type.startsWith( "dyslexia" ): output.Action( type, $( "sr-rd-title" ).text(), "", $( "sr-rd-content" ).text() ); break; case type == "tempread": if ( storage.pr.state != "temp" ) { new Notify().Render( "此功能只限临时阅读模式时使用。" ); return; } // hack code const news = { ...storage.pr.current.site }; storage.pr.dom && ( news.include = storage.pr.dom.outerHTML.replace( storage.pr.dom.innerHTML, "" ).replace( /<\/\S+>$/i, "" )); delete news.html; browser.runtime.sendMessage( msg.Add( msg.MESSAGE_ACTION.temp_site, { url: location.href, site: news, uid: storage.user.uid, type: "temp" })); break; default: if ( type.indexOf( "_" ) > 0 && type.startsWith( "share" ) || [ "save", "markdown", "png", "epub", "pdf", "kindle", "temp", "html", "dropbox", "pocket", "instapaper", "linnk", "yinxiang","evernote", "onenote", "gdrive" ].includes( type )) { const [ title, desc, content ] = [ $( "sr-rd-title" ).text().trim(), $( "sr-rd-desc" ).text().trim(), $( "sr-rd-content" ).html().trim() ]; output.Action( type, title, desc, content ); } } }; type != "exit" ? watch.Verify( ( state, result ) => { if ( state ) { console.log( "watch.Lock()", result ); new Notify().Render( "配置文件已更新,刷新当前页面后才能生效。", "刷新", ()=>location.href = location.href ); } else action( event, type ); }) : action( event, type ); } onChange( type, custom ) { const [ key, value ] = [ type.split( "_" )[0], type.split( "_" )[1] ]; this.props.onAction && this.props.onAction( key, value, custom ); this.verify( key ); } onPop( type ) { type == "open" ? ttips.Render( ".simpread-read-root", "panel" ) : ttips.Exit( ".simpread-read-root", "panel" ); } componentWillMount() { if ( storage.current.fap ) { delete conf.readItems.exit; delete conf.readItems.option.items.setting; } if ( this.props.type.startsWith( "txtread::" ) && this.props.type.endsWith( "::local" )) { delete conf.readItems.download; delete conf.readItems.readlater; delete conf.readItems.send; delete conf.readItems.share; delete conf.readItems.option; } if ( this.props.type.startsWith( "metaread::" ) || this.props.type.startsWith( "txtread::" ) ) { delete conf.readItems.option; } // hack code !/chrome/ig.test( navigator.userAgent ) && ( delete conf.readItems.dyslexia ); } constructor( props ) { super( props ); } render() { const Controlbar = storage.current.fap ? this.onPop( "open" ) } onClose={ ()=> this.onPop( "close" ) } onAction={ (event, type)=>this.onAction(event, type ) }> this.onChange(t,c)}/> this.onAction(undefined, type ) }/> : this.onAction(event, type ) } /> return ( { Controlbar } ) } }