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 = (
)
} else if (this.state.status === "search"){
mobileMenuDisplay = (
)
}
let logoElementCssClass = this.props.store.name;
if (this.state.status !== "switch"){
logoElementCssClass += " mini-version";
}
return(
);
}
}
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'));