diff --git a/httpdocs/theme/react/app-header/app.js b/httpdocs/theme/react/app-header/app.js index 03122fe60..fac34fb86 100644 --- a/httpdocs/theme/react/app-header/app.js +++ b/httpdocs/theme/react/app-header/app.js @@ -1,391 +1,392 @@ class SiteHeader extends React.Component { constructor(props){ super(props); this.state = { baseUrl:window.json_baseurl, cat_title:window.json_cat_title, hasIdentity:window.json_hasIdentity, is_show_title:window.json_is_show_title, redirectString:window.json_redirectString, serverUrl:window.json_serverUrl, serverUri:window.json_serverUri, store:{ sName:window.json_sname, name:window.json_store_name, order:window.json_store_order, last_char_store_order:window.last_char_store_order, }, user:window.json_member, logo:window.json_logoWidth, cat_title_left:window.json_cat_title_left, tabs_left:window.tabs_left, template:window.json_template, status:"" }; this.updateDimensions = this.updateDimensions.bind(this); } componentWillMount() { this.updateDimensions(); } componentDidMount() { window.addEventListener("resize", this.updateDimensions); window.addEventListener("orientationchange",this.updateDimensions); } updateDimensions(){ const width = window.innerWidth; let device; if (width >= 910){ device = "large"; } else if (width < 910 && width >= 610){ device = "mid"; } else if (width < 610){ device = "tablet"; } this.setState({device:device}); } render(){ let userMenuDisplay, loginMenuDisplay, siteHeaderTopRightCssClass; if (this.state.user){ userMenuDisplay = ( ); siteHeaderTopRightCssClass = "w-user"; } else { loginMenuDisplay = ( ); } let logoLink = this.state.serverUrl; if (this.state.serverUri.indexOf('/s/') > -1){ logoLink += "/s/" + this.state.store.name; } let siteHeaderStoreNameDisplay; if (this.state.is_show_title === "1"){ siteHeaderStoreNameDisplay = ( ); } let HeaderDisplay; if (this.state.device !== "tablet"){ HeaderDisplay = ( ); } else { HeaderDisplay = ( ) } return ( ) } } class SiteHeaderSearchForm extends React.Component { constructor(props){ super(props); this.state = { searchText:'' }; this.onSearchTextChange = this.onSearchTextChange.bind(this); this.onSearchFormSubmit = this.onSearchFormSubmit.bind(this); } onSearchTextChange(e){ this.setState({searchText:e.target.value}); } onSearchFormSubmit(e){ e.preventDefault(); window.location.href = this.props.baseUrl + "/search?projectSearchText=" + this.state.searchText; } render(){ return (
) } } class SiteHeaderLoginMenu extends React.Component { constructor(props){ super(props); this.state = {}; } render(){ let registerButtonCssClass, loginButtonCssClass; if (window.location.href.indexOf('/register') > -1){ registerButtonCssClass = "active"; } if (window.location.href.indexOf('/login') > -1){ loginButtonCssClass = "active"; } const menuItemCssClass = { "borderColor":this.props.template['header-nav-tabs']['border-color'], "backgroundColor":this.props.template['header-nav-tabs']['background-color'] } return ( ) } } class SiteHeaderUserMenu extends React.Component { constructor(props){ super(props); this.state = {}; this.handleClick = this.handleClick.bind(this); } componentWillMount() { document.addEventListener('mousedown',this.handleClick, false); } componentWillUnmount() { document.removeEventListener('mousedown',this.handleClick, false); } handleClick(e){ let dropdownClass = ""; if (this.node.contains(e.target)){ if (this.state.dropdownClass === "open"){ if (e.target.className === "profile-menu-toggle" || e.target.className === "profile-menu-image" ||  e.target.className === "profile-menu-username"){ dropdownClass = ""; } else { dropdownClass = "open"; } } else { dropdownClass = "open"; } } this.setState({dropdownClass:dropdownClass}); } render(){ - + return ( ) } } class MobileSiteHeader extends React.Component { constructor(props){ super(props); this.state = { status:"switch" }; this.showMobileUserMenu = this.showMobileUserMenu.bind(this); this.showMobileSearchForm = this.showMobileSearchForm.bind(this); this.showMobileSwitchMenu = this.showMobileSwitchMenu.bind(this); } showMobileUserMenu(){ this.setState({status:"user"}); } showMobileSearchForm(){ this.setState({status:"search"}); } showMobileSwitchMenu(){ this.setState({status:"switch"}); } render(){ const menuItemCssClass = { "borderColor":this.props.template['header-nav-tabs']['border-color'], "backgroundColor":this.props.template['header-nav-tabs']['background-color'] } const closeMenuElementDisplay = ( ); let mobileMenuDisplay; if (this.state.status === "switch"){ mobileMenuDisplay = ( ); } else if (this.state.status === "user"){ mobileMenuDisplay = (
{closeMenuElementDisplay}
) } else if (this.state.status === "search"){ mobileMenuDisplay = (
{closeMenuElementDisplay}
) } let logoElementCssClass = this.props.store.name; if (this.state.status !== "switch"){ logoElementCssClass += " mini-version"; } return(
+
{mobileMenuDisplay}
); } } class MobileUserContainer extends React.Component { constructor(props){ super(props); this.state = {}; } render(){ let userDisplay; if (this.props.user){ userDisplay = ( ); } else { userDisplay = ( ); } return (
{userDisplay}
) } } ReactDOM.render( , document.getElementById('site-header-container') ); diff --git a/httpdocs/theme/react/header.js b/httpdocs/theme/react/header.js index 688ba811a..c220963b2 100644 --- a/httpdocs/theme/react/header.js +++ b/httpdocs/theme/react/header.js @@ -1,502 +1,503 @@ window.appHelpers = function () { function getEnv(domain) { let env; let lastDotSplit = this.splitByLastDot(domain); if (lastDotSplit.indexOf('/') > -1) { lastDotSplit = lastDotSplit.split('/')[0]; } if (lastDotSplit === 'com' || lastDotSplit === 'org') { env = 'live'; } else { env = 'test'; } return env; } function splitByLastDot(text) { var index = text.lastIndexOf('.'); return text.slice(index + 1); } return { getEnv, splitByLastDot }; }(); class SiteHeader extends React.Component { constructor(props) { super(props); this.state = { baseUrl: window.json_baseurl, cat_title: window.json_cat_title, hasIdentity: window.json_hasIdentity, is_show_title: window.json_is_show_title, redirectString: window.json_redirectString, serverUrl: window.json_serverUrl, serverUri: window.json_serverUri, store: { sName: window.json_sname, name: window.json_store_name, order: window.json_store_order, last_char_store_order: window.last_char_store_order }, user: window.json_member, logo: window.json_logoWidth, cat_title_left: window.json_cat_title_left, tabs_left: window.tabs_left, template: window.json_template, status: "" }; this.updateDimensions = this.updateDimensions.bind(this); } componentWillMount() { this.updateDimensions(); } componentDidMount() { window.addEventListener("resize", this.updateDimensions); window.addEventListener("orientationchange", this.updateDimensions); } updateDimensions() { const width = window.innerWidth; let device; if (width >= 910) { device = "large"; } else if (width < 910 && width >= 610) { device = "mid"; } else if (width < 610) { device = "tablet"; } this.setState({ device: device }); } render() { let userMenuDisplay, loginMenuDisplay, siteHeaderTopRightCssClass; if (this.state.user) { userMenuDisplay = React.createElement(SiteHeaderUserMenu, { serverUrl: this.state.serverUrl, baseUrl: this.state.baseUrl, user: this.state.user }); siteHeaderTopRightCssClass = "w-user"; } else { loginMenuDisplay = React.createElement(SiteHeaderLoginMenu, { baseUrl: this.state.baseUrl, redirectString: this.state.redirectString, template: this.state.template }); } let logoLink = this.state.serverUrl; if (this.state.serverUri.indexOf('/s/') > -1) { logoLink += "/s/" + this.state.store.name; } let siteHeaderStoreNameDisplay; if (this.state.is_show_title === "1") { siteHeaderStoreNameDisplay = React.createElement( "div", { id: "site-header-store-name-container" }, React.createElement( "a", { href: logoLink }, this.state.store.name ) ); } let HeaderDisplay; if (this.state.device !== "tablet") { HeaderDisplay = React.createElement( "section", { id: "site-header-wrapper", style: { "paddingLeft": this.state.template['header-logo']['width'] } }, React.createElement( "div", { id: "siter-header-left" }, React.createElement( "div", { id: "site-header-logo-container", style: this.state.template['header-logo'] }, React.createElement( "a", { href: logoLink }, React.createElement("img", { src: this.state.template['header-logo']['image-src'] }) ) ), siteHeaderStoreNameDisplay ), React.createElement( "div", { id: "site-header-right" }, React.createElement( "div", { id: "site-header-right-top", className: siteHeaderTopRightCssClass }, React.createElement(SiteHeaderSearchForm, { baseUrl: this.state.baseUrl }), userMenuDisplay ), React.createElement( "div", { id: "site-header-right-bottom" }, loginMenuDisplay ) ) ); } else { HeaderDisplay = React.createElement(MobileSiteHeader, { logoLink: logoLink, template: this.state.template, user: this.state.user, baseUrl: this.state.baseUrl, serverUrl: this.state.serverUrl, store: this.state.store, redirectString: this.state.redirectString }); } return React.createElement( "section", { id: "site-header", style: this.state.template.header }, HeaderDisplay ); } } class SiteHeaderSearchForm extends React.Component { constructor(props) { super(props); this.state = { searchText: '' }; this.onSearchTextChange = this.onSearchTextChange.bind(this); this.onSearchFormSubmit = this.onSearchFormSubmit.bind(this); } onSearchTextChange(e) { this.setState({ searchText: e.target.value }); } onSearchFormSubmit(e) { e.preventDefault(); window.location.href = this.props.baseUrl + "/search?projectSearchText=" + this.state.searchText; } render() { return React.createElement( "div", { id: "site-header-search-form" }, React.createElement( "form", { id: "search-form", onSubmit: this.onSearchFormSubmit }, React.createElement("input", { onChange: this.onSearchTextChange, value: this.state.searchText, type: "text", name: "projectSearchText" }), React.createElement("a", { onClick: this.onSearchFormSubmit }) ) ); } } class SiteHeaderLoginMenu extends React.Component { constructor(props) { super(props); this.state = {}; } render() { let registerButtonCssClass, loginButtonCssClass; if (window.location.href.indexOf('/register') > -1) { registerButtonCssClass = "active"; } if (window.location.href.indexOf('/login') > -1) { loginButtonCssClass = "active"; } const menuItemCssClass = { "borderColor": this.props.template['header-nav-tabs']['border-color'], "backgroundColor": this.props.template['header-nav-tabs']['background-color'] }; return React.createElement( "div", { id: "site-header-login-menu" }, React.createElement( "ul", null, React.createElement( "li", { style: menuItemCssClass, className: registerButtonCssClass }, React.createElement( "a", { href: "/register" }, "Register" ) ), React.createElement( "li", { style: menuItemCssClass, className: loginButtonCssClass }, React.createElement( "a", { href: "/login" + this.props.redirectString }, "Login" ) ) ) ); } } class SiteHeaderUserMenu extends React.Component { constructor(props) { super(props); this.state = {}; this.handleClick = this.handleClick.bind(this); } componentWillMount() { document.addEventListener('mousedown', this.handleClick, false); } componentWillUnmount() { document.removeEventListener('mousedown', this.handleClick, false); } handleClick(e) { let dropdownClass = ""; if (this.node.contains(e.target)) { if (this.state.dropdownClass === "open") { if (e.target.className === "profile-menu-toggle" || e.target.className === "profile-menu-image" || e.target.className === "profile-menu-username") { dropdownClass = ""; } else { dropdownClass = "open"; } } else { dropdownClass = "open"; } } this.setState({ dropdownClass: dropdownClass }); } render() { return React.createElement( "ul", { id: "site-header-user-menu-container" }, React.createElement( "li", { ref: node => this.node = node, id: "user-menu-toggle", className: this.state.dropdownClass }, React.createElement( "a", { className: "profile-menu-toggle" }, React.createElement("img", { className: "profile-menu-image", src: window.json_member_avatar }), React.createElement( "span", { className: "profile-menu-username" }, this.props.user.username ) ), React.createElement( "ul", { id: "user-profile-menu" }, React.createElement("div", { className: "dropdown-header" }), React.createElement( "li", null, React.createElement( "a", { href: "/product/add" }, "Add Product" ) ), React.createElement( "li", null, React.createElement( "a", { href: window.json_baseurl + "/u/" + this.props.user.username + "/products" }, "Products" ) ), React.createElement( "li", null, React.createElement( "a", { href: window.json_baseurl + "/u/" + this.props.user.username + "/plings" }, "Plings" ) ), React.createElement( "li", null, React.createElement( "a", { href: "/settings" }, "Settings" ) ), React.createElement( "li", null, React.createElement( "a", { href: "/logout" }, "Logout" ) ) ) ) ); } } class MobileSiteHeader extends React.Component { constructor(props) { super(props); this.state = { status: "switch" }; this.showMobileUserMenu = this.showMobileUserMenu.bind(this); this.showMobileSearchForm = this.showMobileSearchForm.bind(this); this.showMobileSwitchMenu = this.showMobileSwitchMenu.bind(this); } showMobileUserMenu() { this.setState({ status: "user" }); } showMobileSearchForm() { this.setState({ status: "search" }); } showMobileSwitchMenu() { this.setState({ status: "switch" }); } render() { const menuItemCssClass = { "borderColor": this.props.template['header-nav-tabs']['border-color'], "backgroundColor": this.props.template['header-nav-tabs']['background-color'] }; const closeMenuElementDisplay = React.createElement( "a", { className: "menu-item", onClick: this.showMobileSwitchMenu }, React.createElement("span", { className: "glyphicon glyphicon-remove" }) ); let mobileMenuDisplay; if (this.state.status === "switch") { mobileMenuDisplay = React.createElement( "div", { id: "switch-menu" }, React.createElement( "a", { className: "menu-item", onClick: this.showMobileSearchForm, id: "user-menu-switch" }, React.createElement("span", { className: "glyphicon glyphicon-search" }) ), React.createElement( "a", { className: "menu-item", onClick: this.showMobileUserMenu, id: "search-menu-switch" }, React.createElement("span", { className: "glyphicon glyphicon-option-horizontal" }) ) ); } else if (this.state.status === "user") { mobileMenuDisplay = React.createElement( "div", { id: "mobile-user-menu" }, React.createElement( "div", { className: "menu-content-wrapper" }, React.createElement(MobileUserContainer, { user: this.props.user, baseUrl: this.props.baseUrl, serverUrl: this.state.serverUrl, template: this.props.template, redirectString: this.props.redirectString }) ), closeMenuElementDisplay ); } else if (this.state.status === "search") { mobileMenuDisplay = React.createElement( "div", { id: "mobile-search-menu" }, React.createElement( "div", { className: "menu-content-wrapper" }, React.createElement(SiteHeaderSearchForm, { baseUrl: this.props.baseUrl }) ), closeMenuElementDisplay ); } let logoElementCssClass = this.props.store.name; if (this.state.status !== "switch") { logoElementCssClass += " mini-version"; } return React.createElement( "section", { id: "mobile-site-header" }, + React.createElement("div", { id: "mobile-thumb-block" }), React.createElement( "div", { id: "mobile-site-header-logo", className: logoElementCssClass }, React.createElement( "a", { href: this.props.logoLink }, React.createElement("img", { src: this.props.template['header-logo']['image-src'] }) ) ), React.createElement( "div", { id: "mobile-site-header-menus-container" }, mobileMenuDisplay ) ); } } class MobileUserContainer extends React.Component { constructor(props) { super(props); this.state = {}; } render() { let userDisplay; if (this.props.user) { userDisplay = React.createElement(SiteHeaderUserMenu, { serverUrl: this.state.serverUrl, baseUrl: this.state.baseUrl, user: this.props.user }); } else { userDisplay = React.createElement(SiteHeaderLoginMenu, { user: this.props.user, baseUrl: this.props.baseUrl, template: this.props.template, redirectString: this.props.redirectString }); } return React.createElement( "div", { id: "mobile-user-container" }, userDisplay ); } } ReactDOM.render(React.createElement(SiteHeader, null), document.getElementById('site-header-container'));