<?php namespace HashOver;// Copyright (C) 2018-2021 Jacob Barkdull// This file is part of HashOver.//// HashOver is free software: you can redistribute it and/or modify// it under the terms of the GNU Affero General Public License as// published by the Free Software Foundation, either version 3 of the// License, or (at your option) any later version.//// HashOver is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the// GNU Affero General Public License for more details.//// You should have received a copy of the GNU Affero General Public License// along with HashOver.  If not, see <http://www.gnu.org/licenses/>.// Setup HashOver for JavaScriptrequire ('backend/javascript-setup.php');try {	// Instantiate general setup class	$setup = new Setup ('javascript');	// Throw exception if requested by remote server	$setup->refererCheck ();	// Load user settings	$setup->loadFrontendSettings ();	// Exit if comments are disabled sitewide	if ($setup->commentsDisabled === true) {		echo "(() => {document.getElementById('hashover').remove();})();", PHP_EOL;		return;	}	// Instantiate HashOver statistics class	$statistics = new Statistics ('javascript');	// Start execution timer	$statistics->executionStart ();	// Instantiate JavaScript build class	$javascript = new JavaScriptBuild ('frontend');	// Register initial constructor	$javascript->registerFile ('constructor.js');	// Register HashOver ready state detection method	$javascript->registerFile ('onready.js');	// Register HashOver script tag getter method	$javascript->registerFile ('script.js');	// Register page URL getter method	$javascript->registerFile ('geturl.js');	// Register page title getter method	$javascript->registerFile ('gettitle.js');	// Register frontend settings URL queries converter method	$javascript->registerFile ('cfgqueries.js');	// Register client time getter method	$javascript->registerFile ('getclienttime.js');	// Register backend URL queries getter method	$javascript->registerFile ('getbackendqueries.js');	// Register AJAX-related methods	$javascript->registerFile ('ajax.js');	// Register backend path setter	$javascript->registerFile ('backendpath.js', array (		'dependencies' => array (			'rootpath.js'		)	));	// Register real constructor method	$javascript->registerFile ('instantiator.js');	// Register comment thread/section creation method	$javascript->registerFile ('createthread.js');	// Register element creation method	$javascript->registerFile ('createelement.js');	// Register classList polyfill methods	$javascript->registerFile ('classes.js');	// Register main HashOver element getter method	$javascript->registerFile ('getmainelement.js');	// Register error message handler method	$javascript->registerFile ('displayerror.js');	// Register instance prefix method	$javascript->registerFile ('prefix.js');	// Register pre-compiled regular expressions	$javascript->registerFile ('regex.js');	// Register end-of-line trimmer method	$javascript->registerFile ('eoltrim.js');	// Register search and replace methods	$javascript->registerFile ('strings.js');	// Register permalink methods	$javascript->registerFile ('permalinks.js');	// Register Like/Dislike methods	$javascript->registerFile ('addratings.js');	// Register optional method handler method	$javascript->registerFile ('optionalmethod.js');	// Register markdown methods	$javascript->registerFile ('markdown.js');	// Register embedded image method	$javascript->registerFile ('embedimage.js', array (		'dependencies' => array (			'openembeddedimage.js'		)	));	// Register comment parsing methods	$javascript->registerFile ('parsecomment.js');	// Register element retriever method	$javascript->registerFile ('getelement.js');	// Register element class processor method	$javascript->registerFile ('eachclass.js');	// Register parse all comments method	$javascript->registerFile ('parseall.js');	// Register sort comments method	$javascript->registerFile ('sortcomments.js', array (		'dependencies' => array (			'cloneobject.js',			'getallcomments.js'		)	));	// Register append comments method	$javascript->registerFile ('appendcomments.js', array (		'dependencies' => array (			'htmlchildren.js'		)	));	// Register message element methods	$javascript->registerFile ('messages.js');	// Register email validator event handler method	$javascript->registerFile ('validateemail.js');	// Register comment validator event handler method	$javascript->registerFile ('validatecomment.js');	// Register AJAX post comment event handler method	$javascript->registerFile ('ajaxpost.js', array (		'dependencies' => array (			'addcomments.js',			'htmlchildren.js'		)	));	// Register AJAX edit comment event handler method	$javascript->registerFile ('ajaxedit.js', array (		'dependencies' => array (			'htmlchildren.js'		)	));	// Register AJAX comment post request method	$javascript->registerFile ('postrequest.js');	// Register comment post method	$javascript->registerFile ('postcomment.js');	// Register file from permalink method	$javascript->registerFile ('permalinkfile.js');	// Register cancel button toggler method	$javascript->registerFile ('cancelswitcher.js');	// Register formatting message onclick event handler method	$javascript->registerFile ('formattingonclick.js');	// Register element property duplicator method	$javascript->registerFile ('duplicateproperties.js');	// Register miscellaneous form event handler methods	$javascript->registerFile ('formevents.js');	// Register reply form adder method	$javascript->registerFile ('replytocomment.js');	// Register edit form adder method	$javascript->registerFile ('editcomment.js');	// Register like/dislike comment method	$javascript->registerFile ('likecomment.js', array (		'dependencies' => array (			'mouseoverchanger.js'		)	));	// Register control event handler attacher method	$javascript->registerFile ('addcontrols.js');	// Register theme stylesheet appender method	$javascript->registerFile ('appendcss.js');	// Register comments RSS feed appender method	$javascript->registerFile ('appendrss.js');	// Register show interface method	$javascript->registerFile ('showinterfacelink.js', array (		'dependencies' => array (			'showinterface.js'		)	));	// Register show comments method	$javascript->registerFile ('showmorelink.js', array (		'dependencies' => array (			'showmorecomments.js',			'hidemorelink.js'		)	));	// Register initialization method	$javascript->registerFile ('init.js');	// Register automatic instantiation code	$javascript->registerFile ('instantiate.js', array (		'include' => $setup->getRequest ('auto', 'yes') === 'yes'	));	// JavaScript build process output	$output = $javascript->build (		$setup->minifiesJavascript,		$setup->minifyLevel	);	// Display JavaScript build process output	echo $output, PHP_EOL;	// Display statistics	echo $statistics->executionEnd ();} catch (\Exception $error) {	echo Misc::displayException ($error, 'javascript');}